Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.cpp (218322 => 218323)
--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.cpp 2017-06-15 08:31:58 UTC (rev 218322)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.cpp 2017-06-15 09:10:09 UTC (rev 218323)
@@ -21,10 +21,8 @@
#include "WebKitWebExtension.h"
#include "APIDictionary.h"
+#include "APIInjectedBundleBundleClient.h"
#include "APIString.h"
-#include "WKBundle.h"
-#include "WKBundleAPICast.h"
-#include "WKBundlePage.h"
#include "WebKitPrivate.h"
#include "WebKitWebExtensionPrivate.h"
#include "WebKitWebPagePrivate.h"
@@ -146,67 +144,51 @@
WEBKIT_TYPE_WEB_PAGE);
}
-static void webkitWebExtensionPageCreated(WebKitWebExtension* extension, WebPage* page)
-{
- GRefPtr<WebKitWebPage> webPage = adoptGRef(webkitWebPageCreate(page));
- extension->priv->pages.add(page, webPage);
- g_signal_emit(extension, signals[PAGE_CREATED], 0, webPage.get());
-}
+class WebExtensionInjectedBundleClient final : public API::InjectedBundle::Client {
+public:
+ explicit WebExtensionInjectedBundleClient(WebKitWebExtension* extension)
+ : m_extension(extension)
+ {
+ }
-static void webkitWebExtensionPageDestroy(WebKitWebExtension* extension, WebPage* page)
-{
- extension->priv->pages.remove(page);
-}
+private:
+ void didCreatePage(InjectedBundle&, WebPage& page) override
+ {
+ GRefPtr<WebKitWebPage> webPage = adoptGRef(webkitWebPageCreate(&page));
+ m_extension->priv->pages.add(&page, webPage);
+ g_signal_emit(m_extension, signals[PAGE_CREATED], 0, webPage.get());
+ }
-static void webkitWebExtensionDidReceiveMessage(WebKitWebExtension*, const String& messageName, API::Dictionary& message)
-{
- if (messageName == String::fromUTF8("PrefetchDNS")) {
- API::String* hostname = static_cast<API::String*>(message.get(String::fromUTF8("Hostname")));
- WebProcess::singleton().prefetchDNS(hostname->string());
- } else
- ASSERT_NOT_REACHED();
-}
+ void willDestroyPage(InjectedBundle&, WebPage& page) override
+ {
+ m_extension->priv->pages.remove(&page);
+ }
-static void didCreatePage(WKBundleRef, WKBundlePageRef page, const void* clientInfo)
-{
- webkitWebExtensionPageCreated(WEBKIT_WEB_EXTENSION(clientInfo), toImpl(page));
-}
+ void didReceiveMessage(InjectedBundle&, const String& messageName, API::Object* messageBody) override
+ {
+ ASSERT(messageBody->type() == API::Object::Type::Dictionary);
+ API::Dictionary& message = *static_cast<API::Dictionary*>(messageBody);
+ if (messageName == String::fromUTF8("PrefetchDNS")) {
+ API::String* hostname = static_cast<API::String*>(message.get(String::fromUTF8("Hostname")));
+ WebProcess::singleton().prefetchDNS(hostname->string());
+ } else
+ ASSERT_NOT_REACHED();
+ }
-static void willDestroyPage(WKBundleRef, WKBundlePageRef page, const void* clientInfo)
-{
- webkitWebExtensionPageDestroy(WEBKIT_WEB_EXTENSION(clientInfo), toImpl(page));
-}
+ void didReceiveMessageToPage(InjectedBundle&, WebPage& page, const String& messageName, API::Object* messageBody) override
+ {
+ ASSERT(messageBody->type() == API::Object::Type::Dictionary);
+ if (auto* webPage = m_extension->priv->pages.get(&page))
+ webkitWebPageDidReceiveMessage(webPage, messageName, *static_cast<API::Dictionary*>(messageBody));
+ }
-static void didReceiveMessage(WKBundleRef, WKStringRef name, WKTypeRef messageBody, const void* clientInfo)
-{
- ASSERT(WKGetTypeID(messageBody) == WKDictionaryGetTypeID());
- webkitWebExtensionDidReceiveMessage(WEBKIT_WEB_EXTENSION(clientInfo), toImpl(name)->string(), *toImpl(static_cast<WKDictionaryRef>(messageBody)));
-}
+ WebKitWebExtension* m_extension;
+};
-static void didReceiveMessageToPage(WKBundleRef, WKBundlePageRef page, WKStringRef name, WKTypeRef messageBody, const void* clientInfo)
-{
- ASSERT(WKGetTypeID(messageBody) == WKDictionaryGetTypeID());
- if (WebKitWebPage* webPage = WEBKIT_WEB_EXTENSION(clientInfo)->priv->pages.get(toImpl(page)))
- webkitWebPageDidReceiveMessage(webPage, toImpl(name)->string(), *toImpl(static_cast<WKDictionaryRef>(messageBody)));
-}
-
WebKitWebExtension* webkitWebExtensionCreate(InjectedBundle* bundle)
{
WebKitWebExtension* extension = WEBKIT_WEB_EXTENSION(g_object_new(WEBKIT_TYPE_WEB_EXTENSION, NULL));
-
- WKBundleClientV1 wkBundleClient = {
- {
- 1, // version
- extension, // clientInfo
- },
- didCreatePage,
- willDestroyPage,
- 0, // didInitializePageGroup
- didReceiveMessage,
- didReceiveMessageToPage
- };
- WKBundleSetClient(toAPI(bundle), &wkBundleClient.base);
-
+ bundle->setClient(std::make_unique<WebExtensionInjectedBundleClient>(extension));
return extension;
}