WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-125990-20140121132350.patch (text/plain), 24.09 KB, created by
Adrian Perez
on 2014-01-21 03:23:20 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Adrian Perez
Created:
2014-01-21 03:23:20 PST
Size:
24.09 KB
patch
obsolete
>Subversion Revision: 162429 >diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog >index ca0611b7aebc5910e5a07c16b5e648241d24e06f..1be9d1337b4d430e940dfa3feebda8832c99143a 100644 >--- a/Source/WebKit2/ChangeLog >+++ b/Source/WebKit2/ChangeLog >@@ -1,3 +1,53 @@ >+2014-01-21 Adrian Perez de Castro <aperez@igalia.com> >+ >+ [GTK] Allow passing extra data to web extensions >+ https://bugs.webkit.org/show_bug.cgi?id=125990 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Allow passing additional information to the injected bundle. On top >+ of the string containing the path to the web extensions directory, >+ a GVariant can be set with additional data using >+ webkit_web_context_set_web_extensions_initialization_user_data(). >+ Also, a new initialize-web-extensions signal is emitted before >+ launching a new WebProcess to allow setting different user data >+ for each process. The GVariant is serialized as a string, passed >+ to the injected bundle, and the injected bundle deserializes back >+ the data, which is passed to web extensions which define the >+ webkit_web_extension_initialize_with_user_data() function (for >+ backwards compatibility, webkit_web_extension_initialize() is >+ used as a fallback.) >+ >+ * UIProcess/API/gtk/WebKitInjectedBundleClient.cpp: >+ (getInjectedBundleInitializationUserData): Define new callback >+ function which causes emission of the initialize-web-extensions >+ signal, and serializes the data to be passed to the web process. >+ (attachInjectedBundleClientToContext): Set the >+ getInjectedBundleInitializationUserData() callback. >+ * UIProcess/API/gtk/WebKitWebContext.cpp: >+ (webkit_web_context_class_init): Define the >+ initialize-web-extensions signal. >+ (webkit_web_context_set_web_extensions_directory): >+ Web extensions directory as now member of WebKitWebContextPrivate, >+ to be able to retrieve it later. >+ (webkit_web_context_set_web_extensions_initialization_user_data): >+ New API method to set the user data passed to the web extensions >+ when initialized. >+ (webkitWebContextInitializeWebExtensions): Private function used >+ to trigger emission of the initialize-web-extensions signal. >+ * UIProcess/API/gtk/WebKitWebContext.h: >+ Added prototype for new API method >+ webkit_web_context_set_web_extensions_initialization_user_data(). >+ * UIProcess/API/gtk/WebKitWebContextPrivate.h: >+ Prototype of the new private function. >+ * UIProcess/API/gtk/docs/webkit2gtk-sections.txt: >+ Add new public API bits to the documentation. >+ * WebProcess/gtk/WebGtkExtensionManager.cpp: >+ (WebKit::WebGtkExtensionManager::initialize): >+ Deserialize the data received from the UI process and pass it to >+ webkit_web_extension_initialize_with_user_data() if available, >+ keeping webkit_web_extension_initialize() as fallback. >+ > 2014-01-20 Ryuan Choi <ryuan.choi@samsung.com> > > [EFL][WK2] Move isEwkViewEvasObject back to ewk_view.cpp >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitInjectedBundleClient.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitInjectedBundleClient.cpp >index 5d9e1068f97d6cdfd257aa1f49942664c6e6c3d0..f27122233b375dcaf40b77b6d0ec1bd4b9d0134e 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/WebKitInjectedBundleClient.cpp >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitInjectedBundleClient.cpp >@@ -118,16 +118,23 @@ static void didReceiveMessageFromInjectedBundle(WKContextRef, WKStringRef messag > ASSERT_NOT_REACHED(); > } > >+static WKTypeRef getInjectedBundleInitializationUserData(WKContextRef, const void* clientInfo) >+{ >+ GRefPtr<GVariant> data = webkitWebContextInitializeWebExtensions(WEBKIT_WEB_CONTEXT(clientInfo)); >+ GOwnPtr<gchar> dataString(g_variant_print(data.get(), TRUE)); >+ return static_cast<WKTypeRef>(WKStringCreateWithUTF8CString(dataString.get())); >+} >+ > void attachInjectedBundleClientToContext(WebKitWebContext* webContext) > { > WKContextInjectedBundleClientV1 wkInjectedBundleClient = { > { >- 0, // version >+ 1, // version > webContext, // clientInfo > }, > didReceiveMessageFromInjectedBundle, > 0, // didReceiveSynchronousMessageFromInjectedBundle >- 0 // getInjectedBundleInitializationUserData >+ getInjectedBundleInitializationUserData > }; > WKContextSetInjectedBundleClient(toAPI(webkitWebContextGetContext(webContext)), &wkInjectedBundleClient.base); > } >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp >index 2b1a5f35a82f4a0f87917e4a0c8aaa8b45a3faaf..d56f5e543e2343cd154f93a108e948aaff82a90e 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp >@@ -84,6 +84,7 @@ using namespace WebKit; > > enum { > DOWNLOAD_STARTED, >+ INITIALIZE_WEB_EXTENSIONS, > > LAST_SIGNAL > }; >@@ -153,6 +154,9 @@ struct _WebKitWebContextPrivate { > > HashMap<uint64_t, WebKitWebView*> webViews; > GRefPtr<WebKitWebViewGroup> defaultWebViewGroup; >+ >+ CString webExtensionsDirectory; >+ GRefPtr<GVariant> webExtensionsInitializationUserData; > }; > > static guint signals[LAST_SIGNAL] = { 0, }; >@@ -178,6 +182,25 @@ static void webkit_web_context_class_init(WebKitWebContextClass* webContextClass > g_cclosure_marshal_VOID__OBJECT, > G_TYPE_NONE, 1, > WEBKIT_TYPE_DOWNLOAD); >+ >+ /** >+ * WebKitWebContext::initialize-web-extensions: >+ * @context: the #WebKitWebContext >+ * >+ * This signal is emitted when a new web process is about to be >+ * launched. It signals the most appropriate moment to use >+ * webkit_web_context_set_web_extensions_initialization_user_data() >+ * and webkit_web_context_set_web_extensions_directory(). >+ * >+ * Since: 2.4 >+ */ >+ signals[INITIALIZE_WEB_EXTENSIONS] = >+ g_signal_new("initialize-web-extensions", >+ G_TYPE_FROM_CLASS(gObjectClass), >+ G_SIGNAL_RUN_LAST, >+ 0, nullptr, nullptr, >+ g_cclosure_marshal_VOID__VOID, >+ G_TYPE_NONE, 0); > } > > static CString injectedBundleDirectory() >@@ -775,16 +798,40 @@ WebKitTLSErrorsPolicy webkit_web_context_get_tls_errors_policy(WebKitWebContext* > * @directory: the directory to add > * > * Set the directory where WebKit will look for Web Extensions. >- * This method must be called before loading anything in this context, otherwise >- * it will not have any effect. >+ * This method must be called before loading anything in this context, >+ * otherwise it will not have any effect. You can connect to >+ * #WebKitWebContext::initialize-web-extensions to call this method >+ * before anything is loaded. > */ > void webkit_web_context_set_web_extensions_directory(WebKitWebContext* context, const char* directory) > { > g_return_if_fail(WEBKIT_IS_WEB_CONTEXT(context)); > g_return_if_fail(directory); > >- // We pass the additional web extensions directory to the injected bundle as initialization user data. >- context->priv->context->setInjectedBundleInitializationUserData(API::String::create(WebCore::filenameToString(directory))); >+ context->priv->webExtensionsDirectory = directory; >+} >+ >+/** >+ * webkit_web_context_set_web_extensions_initialization_user_data: >+ * @context: a #WebKitWebContext >+ * @user_data: a #GVariant >+ * >+ * Set user data to be passed to Web Extensions on initialization. >+ * The data will be passed to the >+ * #WebKitWebExtensionInitializeWithUserDataFunction. >+ * This method must be called before loading anything in this context, >+ * otherwise it will not have any effect. You can connect to >+ * #WebKitWebContext::initialize-web-extensions to call this method >+ * before anything is loaded. >+ * >+ * Since: 2.4 >+ */ >+void webkit_web_context_set_web_extensions_initialization_user_data(WebKitWebContext* context, GVariant* userData) >+{ >+ g_return_if_fail(WEBKIT_IS_WEB_CONTEXT(context)); >+ g_return_if_fail(userData); >+ >+ context->priv->webExtensionsInitializationUserData = userData; > } > > /** >@@ -872,6 +919,14 @@ void webkitWebContextDownloadStarted(WebKitWebContext* context, WebKitDownload* > g_signal_emit(context, signals[DOWNLOAD_STARTED], 0, download); > } > >+GVariant* webkitWebContextInitializeWebExtensions(WebKitWebContext* context) >+{ >+ g_signal_emit(context, signals[INITIALIZE_WEB_EXTENSIONS], 0); >+ return g_variant_new("(msmv)", >+ context->priv->webExtensionsDirectory.data(), >+ context->priv->webExtensionsInitializationUserData.get()); >+} >+ > WebContext* webkitWebContextGetContext(WebKitWebContext* context) > { > g_assert(WEBKIT_IS_WEB_CONTEXT(context)); >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h b/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h >index 9e7bc14476db0223a78bcdf738c2f60b90653d7e..1e3b9b588d65a85499a86bb716cb67be23d922aa 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h >@@ -196,6 +196,11 @@ webkit_web_context_set_web_extensions_directory (WebKitWebContext > const gchar *directory); > > WEBKIT_API void >+webkit_web_context_set_web_extensions_initialization_user_data >+ (WebKitWebContext *context, >+ GVariant *user_data); >+ >+WEBKIT_API void > webkit_web_context_prefetch_dns (WebKitWebContext *context, > const gchar *hostname); > >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitWebContextPrivate.h b/Source/WebKit2/UIProcess/API/gtk/WebKitWebContextPrivate.h >index 81c473c561d8c3cc2f355ab241e809b0d87fac02..980eb79d545820014ad84afa9aac565e5256ed3e 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/WebKitWebContextPrivate.h >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitWebContextPrivate.h >@@ -47,5 +47,6 @@ void webkitWebContextCreatePageForWebView(WebKitWebContext*, WebKitWebView*, Web > void webkitWebContextWebViewDestroyed(WebKitWebContext*, WebKitWebView*); > WebKitWebView* webkitWebContextGetWebViewForPage(WebKitWebContext*, WebKit::WebPageProxy*); > WebKitWebViewGroup* webkitWebContextGetDefaultWebViewGroup(WebKitWebContext*); >+GVariant* webkitWebContextInitializeWebExtensions(WebKitWebContext*); > > #endif // WebKitWebContextPrivate_h >diff --git a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt b/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt >index 090e91e6de61c46f33b88c1c8d45fbb7c1726b28..1c13c6c073a75d197d70562c0297921f7b6382f4 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt >+++ b/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt >@@ -46,6 +46,7 @@ webkit_web_context_set_preferred_languages > webkit_web_context_set_tls_errors_policy > webkit_web_context_get_tls_errors_policy > webkit_web_context_set_web_extensions_directory >+webkit_web_context_set_web_extensions_initialization_user_data > webkit_web_context_prefetch_dns > webkit_web_context_set_disk_cache_directory > webkit_web_context_allow_tls_certificate_for_host >@@ -1026,6 +1027,7 @@ webkit_web_view_group_get_type > <FILE>WebKitWebExtension</FILE> > WebKitWebExtension > WebKitWebExtensionInitializeFunction >+WebKitWebExtensionInitializeWithUserDataFunction > webkit_web_extension_get_page > > <SUBSECTION Standard> >diff --git a/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.h b/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.h >index 67a4cd54ca828f9bc971324d4ee88015f92f905f..34136a37d256ce09259a395e4488572782b9c6c4 100644 >--- a/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.h >+++ b/Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebExtension.h >@@ -50,6 +50,21 @@ typedef struct _WebKitWebExtensionPrivate WebKitWebExtensionPrivate; > */ > typedef void (* WebKitWebExtensionInitializeFunction) (WebKitWebExtension *extension); > >+/** >+ * WebKitWebExtensionInitializeWithUserDataFunction: >+ * @extension: a #WebKitWebExtension >+ * @user_data: a #GVariant >+ * >+ * Type definition for a function that will be called to initialize >+ * the web extensions when the web process starts, and which receives >+ * as additional argument the user data set with >+ * webkit_web_context_set_web_extensions_initialization_user_data(). >+ * >+ * Since: 2.4 >+ */ >+typedef void (* WebKitWebExtensionInitializeWithUserDataFunction) (WebKitWebExtension *extension, >+ const GVariant *user_data); >+ > struct _WebKitWebExtension { > GObject parent; > >diff --git a/Source/WebKit2/WebProcess/gtk/WebGtkExtensionManager.cpp b/Source/WebKit2/WebProcess/gtk/WebGtkExtensionManager.cpp >index ad7ba99fb9a2fc54ff6f69b292fa6be7e4061320..fb62f5d6a7cfcddfb8a9ce94031fcb16a96d25cc 100644 >--- a/Source/WebKit2/WebProcess/gtk/WebGtkExtensionManager.cpp >+++ b/Source/WebKit2/WebProcess/gtk/WebGtkExtensionManager.cpp >@@ -22,11 +22,13 @@ > > #include "InjectedBundle.h" > #include "WKBundleAPICast.h" >+#include "WKDictionary.h" > #include "WKString.h" > #include "WKType.h" > #include "WebKitWebExtensionPrivate.h" > #include <WebCore/FileSystem.h> > #include <wtf/OwnPtr.h> >+#include <wtf/text/CString.h> > > namespace WebKit { > >@@ -49,19 +51,56 @@ void WebGtkExtensionManager::scanModules(const String& webExtensionsDirectory, V > } > } > >-void WebGtkExtensionManager::initialize(WKBundleRef bundle, WKTypeRef userData) >+static void parseUserData(WKTypeRef userData, String& webExtensionsDirectory, GRefPtr<GVariant>& initializationUserData) > { >- m_extension = adoptGRef(webkitWebExtensionCreate(toImpl(bundle))); >+ ASSERT(userData); >+ ASSERT(WKGetTypeID(userData) == WKStringGetTypeID()); > >+ CString userDataString = toImpl(static_cast<WKStringRef>(userData))->string().utf8(); >+ GRefPtr<GVariant> variant = g_variant_parse(nullptr, userDataString.data(), >+ userDataString.data() + userDataString.length(), nullptr, nullptr); >+ >+ ASSERT(variant); >+ ASSERT(g_variant_check_format_string(variant.get(), "(m&smv)", FALSE)); >+ >+ const char* directory = nullptr; >+ GVariant* data = nullptr; >+ g_variant_get(variant.get(), "(m&smv)", &directory, &data); >+ >+ webExtensionsDirectory = WebCore::filenameToString(directory); >+ initializationUserData = adoptGRef(data); >+} >+ >+bool WebGtkExtensionManager::initializeWebExtension(Module* extensionModule, GVariant* userData) >+{ >+ WebKitWebExtensionInitializeWithUserDataFunction initializeWithUserDataFunction = >+ extensionModule->functionPointer<WebKitWebExtensionInitializeWithUserDataFunction>("webkit_web_extension_initialize_with_user_data"); >+ if (initializeWithUserDataFunction) { >+ initializeWithUserDataFunction(m_extension.get(), userData); >+ return true; >+ } >+ >+ WebKitWebExtensionInitializeFunction initializeFunction = >+ extensionModule->functionPointer<WebKitWebExtensionInitializeFunction>("webkit_web_extension_initialize"); >+ if (initializeFunction) { >+ initializeFunction(m_extension.get()); >+ return true; >+ } >+ >+ return false; >+} >+ >+void WebGtkExtensionManager::initialize(WKBundleRef bundle, WKTypeRef userDataString) >+{ > String webExtensionsDirectory; >- if (userData) { >- ASSERT(WKGetTypeID(userData) == WKStringGetTypeID()); >- webExtensionsDirectory = toImpl(static_cast<WKStringRef>(userData))->string(); >- } >+ GRefPtr<GVariant> userData; >+ parseUserData(userDataString, webExtensionsDirectory, userData); > > if (webExtensionsDirectory.isNull()) > return; > >+ m_extension = adoptGRef(webkitWebExtensionCreate(toImpl(bundle))); >+ > Vector<String> modulePaths; > scanModules(webExtensionsDirectory, modulePaths); > >@@ -69,14 +108,8 @@ void WebGtkExtensionManager::initialize(WKBundleRef bundle, WKTypeRef userData) > OwnPtr<Module> module = adoptPtr(new Module(modulePaths[i])); > if (!module->load()) > continue; >- >- WebKitWebExtensionInitializeFunction initializeFunction = >- module->functionPointer<WebKitWebExtensionInitializeFunction>("webkit_web_extension_initialize"); >- if (!initializeFunction) >- continue; >- >- m_extensionModules.append(module.leakPtr()); >- initializeFunction(m_extension.get()); >+ if (initializeWebExtension(module.get(), userData.get())) >+ m_extensionModules.append(module.leakPtr()); > } > } > >diff --git a/Source/WebKit2/WebProcess/gtk/WebGtkExtensionManager.h b/Source/WebKit2/WebProcess/gtk/WebGtkExtensionManager.h >index d72d45a2393a60c0603f5c4db55cefd9223649db..ec0bdc5dfabe7310b11e8a705fe102cd1ae49532 100644 >--- a/Source/WebKit2/WebProcess/gtk/WebGtkExtensionManager.h >+++ b/Source/WebKit2/WebProcess/gtk/WebGtkExtensionManager.h >@@ -46,6 +46,7 @@ private: > WebGtkExtensionManager(); > > void scanModules(const String&, Vector<String>&); >+ bool initializeWebExtension(Module* extensionModule, GVariant* userData); > > Vector<Module*> m_extensionModules; > GRefPtr<WebKitWebExtension> m_extension; >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index 7a73c29cafe722565045f15ae711bfdcea65abcd..82dab26bfd415ae0fdc29d02823a6e3968537ba1 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,36 @@ >+2014-01-21 Adrian Perez de Castro <aperez@igalia.com> >+ >+ [GTK] Allow passing extra data to web extensions >+ https://bugs.webkit.org/show_bug.cgi?id=125990 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Allow passing additional information to the injected bundle. On top >+ of the string containing the path to the web extensions directory, >+ a GVariant can be set with additional data using >+ webkit_web_context_set_web_extensions_initialization_user_data(). >+ Also, a new initialize-web-extensions signal is emitted before >+ launching a new WebProcess to allow setting different user data >+ for each process. The GVariant is serialized as a string, passed >+ to the injected bundle, and the injected bundle deserializes back >+ the data, which is passed to web extensions which define the >+ webkit_web_extension_initialize_with_user_data() function (for >+ backwards compatibility, webkit_web_extension_initialize() is >+ used as a fallback.) >+ >+ * TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp: >+ (initializeWebExtensions): Handles the initialize-web-extensions >+ signal, and sets the web extensions directory and the initialization >+ user data. >+ (testWebExtensionInitializationUserData): New test case for checking >+ the user data passed on initialization to web extensions. >+ * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp: >+ (methodCallCallback): Added implementation for the >+ GetInitializationUserData D-Bus method, used by >+ testWebExtensionInitializationUserData(). >+ (webkit_web_extension_initialize_with_user_data): Define the >+ initialization function with the additional user data parameter. >+ > 2014-01-21 Krzysztof Czech <k.czech@samsung.com> > > [ATK] Expose aria-flowto through ATK_RELATION_FLOWS_TO >diff --git a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp >index b03c9dcad5a37daea40b7bad239bc3a75ea71b89..e9ef19224949c97974b11af2da542817e8838d97 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp >+++ b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp >@@ -23,6 +23,7 @@ > #include "WebViewTest.h" > #include <wtf/gobject/GRefPtr.h> > >+static const char* webExtensionsUserData = "Web Extensions user data"; > static WebKitTestBus* bus; > > static void testWebExtensionGetTitle(WebViewTest* test, gconstpointer) >@@ -175,13 +176,44 @@ static void testWebExtensionIsolatedWorld(WebViewTest* test, gconstpointer) > g_signal_handler_disconnect(test->m_webView, scriptDialogID); > } > >+static void testWebExtensionInitializationUserData(WebViewTest* test, gconstpointer) >+{ >+ test->loadHtml("<html></html>", 0); >+ test->waitUntilLoadFinished(); >+ >+ GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy("org.webkit.gtk.WebExtensionTest", >+ "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", test->m_mainLoop)); >+ >+ GRefPtr<GVariant> result = adoptGRef(g_dbus_proxy_call_sync( >+ proxy.get(), >+ "GetInitializationUserData", >+ nullptr, >+ G_DBUS_CALL_FLAGS_NONE, >+ -1, 0, 0)); >+ g_assert(result); >+ >+ const gchar* userData = nullptr; >+ g_variant_get(result.get(), "(&s)", &userData); >+ g_assert_cmpstr(userData, ==, webExtensionsUserData); >+} >+ >+static void initializeWebExtensions(WebKitWebContext* context, gpointer) >+{ >+ webkit_web_context_set_web_extensions_directory(context, WEBKIT_TEST_WEB_EXTENSIONS_DIR); >+ webkit_web_context_set_web_extensions_initialization_user_data(context, >+ g_variant_new("&s", webExtensionsUserData)); >+} >+ > void beforeAll() > { >- webkit_web_context_set_web_extensions_directory(webkit_web_context_get_default(), WEBKIT_TEST_WEB_EXTENSIONS_DIR); >+ g_signal_connect(webkit_web_context_get_default(), >+ "initialize-web-extensions", G_CALLBACK(initializeWebExtensions), nullptr); >+ > bus = new WebKitTestBus(); > if (!bus->run()) > return; > >+ WebViewTest::add("WebKitWebContext", "initialization-user-data", testWebExtensionInitializationUserData); > WebViewTest::add("WebKitWebExtension", "dom-document-title", testWebExtensionGetTitle); > WebViewTest::add("WebKitWebExtension", "document-loaded-signal", testDocumentLoadedSignal); > WebViewTest::add("WebKitWebView", "web-process-crashed", testWebKitWebViewProcessCrashed); >diff --git a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp >index 40cb6caf915e14bc8149f3cd3b3c0ef382928157..e8a2b9f6534ac7e31fd6931d75e833bff8f34be9 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp >+++ b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp >@@ -45,6 +45,9 @@ static const char introspectionXML[] = > " <arg type='t' name='pageID' direction='in'/>" > " <arg type='s' name='script' direction='in'/>" > " </method>" >+ " <method name='GetInitializationUserData'>" >+ " <arg type='s' name='userData' direction='out'/>" >+ " </method>" > " <signal name='DocumentLoaded'/>" > " <signal name='URIChanged'>" > " <arg type='s' name='uri' direction='out'/>" >@@ -52,6 +55,9 @@ static const char introspectionXML[] = > " </interface>" > "</node>"; > >+static GRefPtr<GVariant> initializationUserData; >+ >+ > typedef enum { > DocumentLoadedSignal, > URIChangedSignal, >@@ -210,8 +216,14 @@ static void methodCallCallback(GDBusConnection* connection, const char* sender, > JSRetainPtr<JSStringRef> jsScript(Adopt, JSStringCreateWithUTF8CString(script)); > JSEvaluateScript(jsContext, jsScript.get(), 0, 0, 0, 0); > g_dbus_method_invocation_return_value(invocation, 0); >- } else if (!g_strcmp0(methodName, "AbortProcess")) >+ } else if (!g_strcmp0(methodName, "AbortProcess")) { > abort(); >+ } else if (!g_strcmp0(methodName, "GetInitializationUserData")) { >+ g_assert(initializationUserData); >+ g_assert(g_variant_is_of_type(initializationUserData.get(), G_VARIANT_TYPE_STRING)); >+ g_dbus_method_invocation_return_value(invocation, g_variant_new("(s)", >+ g_variant_get_string(initializationUserData.get(), nullptr))); >+ } > } > > static const GDBusInterfaceVTable interfaceVirtualTable = { >@@ -250,8 +262,10 @@ static void busAcquiredCallback(GDBusConnection* connection, const char* name, g > } > } > >-extern "C" void webkit_web_extension_initialize(WebKitWebExtension* extension) >+extern "C" void webkit_web_extension_initialize_with_user_data(WebKitWebExtension* extension, GVariant* userData) > { >+ initializationUserData = userData; >+ > g_signal_connect(extension, "page-created", G_CALLBACK(pageCreatedCallback), extension); > g_signal_connect(webkit_script_world_get_default(), "window-object-cleared", G_CALLBACK(windowObjectCleared), 0); >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 125990
:
219636
|
220378
|
221381
|
221540
|
221541
|
221586
| 221731