summaryrefslogtreecommitdiff
path: root/Source/WebKit2/Shared/API/APIObject.h
diff options
context:
space:
mode:
authorKonstantin Tokarev <annulen@yandex.ru>2016-08-25 19:20:41 +0300
committerKonstantin Tokarev <annulen@yandex.ru>2017-02-02 12:30:55 +0000
commit6882a04fb36642862b11efe514251d32070c3d65 (patch)
treeb7959826000b061fd5ccc7512035c7478742f7b0 /Source/WebKit2/Shared/API/APIObject.h
parentab6df191029eeeb0b0f16f127d553265659f739e (diff)
downloadqtwebkit-6882a04fb36642862b11efe514251d32070c3d65.tar.gz
Imported QtWebKit TP3 (git b57bc6801f1876c3220d5a4bfea33d620d477443)
Change-Id: I3b1d8a2808782c9f34d50240000e20cb38d3680f Reviewed-by: Konstantin Tokarev <annulen@yandex.ru>
Diffstat (limited to 'Source/WebKit2/Shared/API/APIObject.h')
-rw-r--r--Source/WebKit2/Shared/API/APIObject.h279
1 files changed, 279 insertions, 0 deletions
diff --git a/Source/WebKit2/Shared/API/APIObject.h b/Source/WebKit2/Shared/API/APIObject.h
new file mode 100644
index 000000000..676c583f4
--- /dev/null
+++ b/Source/WebKit2/Shared/API/APIObject.h
@@ -0,0 +1,279 @@
+/*
+ * 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 APIObject_h
+#define APIObject_h
+
+#include <functional>
+#include <wtf/RefCounted.h>
+#include <wtf/RefPtr.h>
+#include <wtf/ThreadSafeRefCounted.h>
+
+#if PLATFORM(COCOA)
+#include "WKFoundation.h"
+#ifdef __OBJC__
+#include "WKObject.h"
+#endif
+#endif
+
+#define DELEGATE_REF_COUNTING_TO_COCOA (PLATFORM(COCOA) && WK_API_ENABLED)
+
+#if DELEGATE_REF_COUNTING_TO_COCOA
+OBJC_CLASS NSObject;
+#endif
+
+namespace API {
+
+class Object
+#if !DELEGATE_REF_COUNTING_TO_COCOA
+ : public ThreadSafeRefCounted<Object>
+#endif
+{
+public:
+ enum class Type {
+ // Base types
+ Null = 0,
+ Array,
+ AuthenticationChallenge,
+ AuthenticationDecisionListener,
+ CertificateInfo,
+ Connection,
+ ContextMenuItem,
+ Credential,
+ Data,
+ Dictionary,
+ Error,
+ FrameHandle,
+ Image,
+ PageGroupData,
+ PageHandle,
+ PageGroupHandle,
+ ProtectionSpace,
+ RenderLayer,
+ RenderObject,
+ SecurityOrigin,
+ SessionState,
+ SerializedScriptValue,
+ String,
+ URL,
+ URLRequest,
+ URLResponse,
+ UserContentURLPattern,
+ UserScript,
+ UserStyleSheet,
+ WebArchive,
+ WebArchiveResource,
+
+ // Base numeric types
+ Boolean,
+ Double,
+ UInt64,
+
+ // Geometry types
+ Point,
+ Size,
+ Rect,
+
+ // UIProcess types
+ ApplicationCacheManager,
+ AutomationSession,
+ BackForwardList,
+ BackForwardListItem,
+ BatteryManager,
+ BatteryStatus,
+ CacheManager,
+ ColorPickerResultListener,
+ CookieManager,
+ Download,
+ FormSubmissionListener,
+ Frame,
+ FrameInfo,
+ FramePolicyListener,
+ FullScreenManager,
+ GeolocationManager,
+ GeolocationPermissionRequest,
+ HitTestResult,
+ GeolocationPosition,
+ GrammarDetail,
+ IconDatabase,
+ Inspector,
+ KeyValueStorageManager,
+ MediaCacheManager,
+ Navigation,
+ NavigationAction,
+ NavigationData,
+ NavigationResponse,
+ Notification,
+ NotificationManager,
+ NotificationPermissionRequest,
+ OpenPanelParameters,
+ OpenPanelResultListener,
+ OriginDataManager,
+ Page,
+ PageConfiguration,
+ PageGroup,
+ ProcessPool,
+ ProcessPoolConfiguration,
+ PluginSiteDataManager,
+ Preferences,
+ RunBeforeUnloadConfirmPanelResultListener,
+ RunJavaScriptAlertResultListener,
+ RunJavaScriptConfirmResultListener,
+ RunJavaScriptPromptResultListener,
+ Session,
+ TextChecker,
+ UserContentController,
+ UserContentExtension,
+ UserContentExtensionStore,
+ UserMediaPermissionCheck,
+ UserMediaPermissionRequest,
+ Vibration,
+ ViewportAttributes,
+ VisitedLinkStore,
+ WebsiteDataRecord,
+ WebsiteDataStore,
+ WindowFeatures,
+
+#if ENABLE(MEDIA_SESSION)
+ MediaSessionFocusManager,
+ MediaSessionMetadata,
+#endif
+
+ // Bundle types
+ Bundle,
+ BundleBackForwardList,
+ BundleBackForwardListItem,
+ BundleCSSStyleDeclarationHandle,
+ BundleDOMWindowExtension,
+ BundleFileHandle,
+ BundleFrame,
+ BundleHitTestResult,
+ BundleInspector,
+ BundleNavigationAction,
+ BundleNodeHandle,
+ BundlePage,
+ BundlePageBanner,
+ BundlePageGroup,
+ BundlePageOverlay,
+ BundleRangeHandle,
+ BundleScriptWorld,
+
+ // Platform specific
+ EditCommandProxy,
+ ObjCObjectGraph,
+ View,
+#if USE(SOUP)
+ SoupRequestManager,
+ SoupCustomProtocolRequestManager,
+#endif
+#if PLATFORM(EFL)
+ PopupMenuItem,
+#if ENABLE(TOUCH_EVENTS)
+ TouchPoint,
+ TouchEvent,
+#endif
+#endif
+ };
+
+ virtual ~Object()
+ {
+ }
+
+ virtual Type type() const = 0;
+
+#if DELEGATE_REF_COUNTING_TO_COCOA
+#ifdef __OBJC__
+ template<typename T, typename... Args>
+ static void constructInWrapper(NSObject <WKObject> *wrapper, Args&&... args)
+ {
+ Object* object = new (&wrapper._apiObject) T(std::forward<Args>(args)...);
+ object->m_wrapper = wrapper;
+ }
+#endif
+
+ NSObject *wrapper() { return m_wrapper; }
+
+ void ref();
+ void deref();
+#endif // DELEGATE_REF_COUNTING_TO_COCOA
+
+ static void* wrap(API::Object*);
+ static API::Object* unwrap(void*);
+
+protected:
+ Object();
+
+#if DELEGATE_REF_COUNTING_TO_COCOA
+ static void* newObject(size_t, Type);
+
+private:
+ // Derived classes must override operator new and call newObject().
+ void* operator new(size_t) = delete;
+
+ NSObject *m_wrapper;
+#endif // DELEGATE_REF_COUNTING_TO_COCOA
+};
+
+template <Object::Type ArgumentType>
+class ObjectImpl : public Object {
+public:
+ static const Type APIType = ArgumentType;
+
+ virtual ~ObjectImpl()
+ {
+ }
+
+protected:
+ friend class Object;
+
+ ObjectImpl()
+ {
+ }
+
+ virtual Type type() const override { return APIType; }
+
+#if DELEGATE_REF_COUNTING_TO_COCOA
+ void* operator new(size_t size) { return newObject(size, APIType); }
+ void* operator new(size_t, void* value) { return value; }
+#endif
+};
+
+#if !DELEGATE_REF_COUNTING_TO_COCOA
+inline void* Object::wrap(API::Object* object)
+{
+ return static_cast<void*>(object);
+}
+
+inline API::Object* Object::unwrap(void* object)
+{
+ return static_cast<API::Object*>(object);
+}
+#endif
+
+} // namespace Object
+
+#undef DELEGATE_REF_COUNTING_TO_COCOA
+
+#endif // APIObject_h