WebKit2/UIProcess/API/C/WKAPICast.h
changeset 0 4f2f89ce4247
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebKit2/UIProcess/API/C/WKAPICast.h	Fri Sep 17 09:02:29 2010 +0300
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WKAPICast_h
+#define WKAPICast_h
+
+#include "WKBase.h"
+#include "WKPage.h"
+#include <WebCore/FrameLoaderTypes.h>
+
+#if defined(WIN32) || defined(_WIN32)
+#include "WKAPICastWin.h"
+#endif
+
+namespace WebCore {
+    class StringImpl;
+}
+
+namespace WebKit {
+
+class ImmutableArray;
+class WebBackForwardList;
+class WebBackForwardListItem;
+class WebContext;
+class WebFramePolicyListenerProxy;
+class WebFrameProxy;
+class WebNavigationData;
+class WebPageNamespace;
+class WebPageProxy;
+class WebPreferences;
+
+template<typename APIType> struct APITypeInfo { };
+template<> struct APITypeInfo<WKFrameRef>                       { typedef WebFrameProxy* ImplType; };
+template<> struct APITypeInfo<WKPageRef>                        { typedef WebPageProxy* ImplType; };
+template<> struct APITypeInfo<WKContextRef>                     { typedef WebContext* ImplType; };
+template<> struct APITypeInfo<WKPageNamespaceRef>               { typedef WebPageNamespace* ImplType; };
+template<> struct APITypeInfo<WKFramePolicyListenerRef>         { typedef WebFramePolicyListenerProxy* ImplType; };
+template<> struct APITypeInfo<WKPreferencesRef>                 { typedef WebPreferences* ImplType; };
+template<> struct APITypeInfo<WKStringRef>                      { typedef WebCore::StringImpl* ImplType; };
+template<> struct APITypeInfo<WKURLRef>                         { typedef WebCore::StringImpl* ImplType; };
+template<> struct APITypeInfo<WKNavigationDataRef>              { typedef WebNavigationData* ImplType; };
+template<> struct APITypeInfo<WKArrayRef>                       { typedef ImmutableArray* ImplType; };
+template<> struct APITypeInfo<WKBackForwardListItemRef>         { typedef WebBackForwardListItem* ImplType; };
+template<> struct APITypeInfo<WKBackForwardListRef>             { typedef WebBackForwardList* ImplType; };
+
+template<typename ImplType> struct ImplTypeInfo { };
+template<> struct ImplTypeInfo<WebFrameProxy*>                  { typedef WKFrameRef APIType; };
+template<> struct ImplTypeInfo<WebPageProxy*>                   { typedef WKPageRef APIType; };
+template<> struct ImplTypeInfo<WebContext*>                     { typedef WKContextRef APIType; };
+template<> struct ImplTypeInfo<WebPageNamespace*>               { typedef WKPageNamespaceRef APIType; };
+template<> struct ImplTypeInfo<WebFramePolicyListenerProxy*>    { typedef WKFramePolicyListenerRef APIType; };
+template<> struct ImplTypeInfo<WebPreferences*>                 { typedef WKPreferencesRef APIType; };
+template<> struct ImplTypeInfo<WebCore::StringImpl*>            { typedef WKStringRef APIType; };
+template<> struct ImplTypeInfo<WebNavigationData*>              { typedef WKNavigationDataRef APIType; };
+template<> struct ImplTypeInfo<ImmutableArray*>                 { typedef WKArrayRef APIType; };
+template<> struct ImplTypeInfo<WebBackForwardListItem*>         { typedef WKBackForwardListItemRef APIType; };
+template<> struct ImplTypeInfo<WebBackForwardList*>             { typedef WKBackForwardListRef APIType; };
+
+} // namespace WebKit
+
+/* Opaque typing convenience methods */
+
+template<typename T>
+inline typename WebKit::APITypeInfo<T>::ImplType toWK(T t)
+{
+    return reinterpret_cast<typename WebKit::APITypeInfo<T>::ImplType>(t);
+}
+
+template<typename T>
+inline typename WebKit::ImplTypeInfo<T>::APIType toRef(T t)
+{
+    return reinterpret_cast<typename WebKit::ImplTypeInfo<T>::APIType>(t);
+}
+
+/* Special case for WKURLRef which also uses StringImpl as an implementation. */
+
+inline WKURLRef toURLRef(WebCore::StringImpl* s)
+{
+    return reinterpret_cast<WKURLRef>(s);
+}
+
+inline WKFrameNavigationType toWK(WebCore::NavigationType type)
+{
+    WKFrameNavigationType wkType = kWKFrameNavigationTypeOther;
+
+    switch (type) {
+    case WebCore::NavigationTypeLinkClicked:
+        wkType = kWKFrameNavigationTypeLinkClicked;
+        break;
+    case WebCore::NavigationTypeFormSubmitted:
+        wkType = kWKFrameNavigationTypeFormSubmitted;
+        break;
+    case WebCore::NavigationTypeBackForward:
+        wkType = kWKFrameNavigationTypeBackForward;
+        break;
+    case WebCore::NavigationTypeReload:
+        wkType = kWKFrameNavigationTypeReload;
+        break;
+    case WebCore::NavigationTypeFormResubmitted:
+        wkType = kWKFrameNavigationTypeFormResubmitted;
+        break;
+    case WebCore::NavigationTypeOther:
+        wkType = kWKFrameNavigationTypeOther;
+        break;
+    }
+    
+    return wkType;
+}
+
+#endif // WKAPICast_h