Title: [136389] trunk/Source/WebKit2
Revision
136389
Author
[email protected]
Date
2012-12-03 06:10:42 -0800 (Mon, 03 Dec 2012)

Log Message

[GTK] Custom URI schemes stop working on Epiphany using WebKit2 after killing the web process
https://bugs.webkit.org/show_bug.cgi?id=103729

Patch by Joaquim Rocha <[email protected]> on 2012-12-03
Reviewed by Carlos Garcia Campos.

When a URI scheme is registered and the WebProcess is killed,
those schemes would not work anymore after the process is relaunched.

This was observed in Epiphany and possibly affects any port that
uses libsoup.

* Shared/WebProcessCreationParameters.cpp:
(WebKit::WebProcessCreationParameters::encode): Encode the registered URI schemes.
(WebKit::WebProcessCreationParameters::decode): Decode the registered URI schemes.
* Shared/WebProcessCreationParameters.h: Add the urlSchemesRegistered Vector to hold the registered URI schemes.
(WebProcessCreationParameters):
* UIProcess/efl/WebContextEfl.cpp:
(WebKit::WebContext::platformInitializeWebProcess): Assign the parameters.urlSchemesRegistered from the URI schemes
registered in the WebSoupRequestManagerProxy and removed the notImplemented() call.
* UIProcess/gtk/WebContextGtk.cpp:
(WebKit::WebContext::platformInitializeWebProcess): Assign the parameters.urlSchemesRegistered from the URI schemes
registered in the WebSoupRequestManagerProxy.
* UIProcess/soup/WebSoupRequestManagerProxy.cpp:
(WebKit::WebSoupRequestManagerProxy::registerURIScheme): Add the given scheme to the m_registeredURISchemes Vector.
* UIProcess/soup/WebSoupRequestManagerProxy.h:
(WebKit::WebSoupRequestManagerProxy::registeredURISchemes): Return the m_registeredURISchemes.
(WebSoupRequestManagerProxy): Define the m_registeredURISchemes to hold the schemes that are registered.
* WebProcess/soup/WebProcessSoup.cpp:
(WebKit::WebProcess::platformInitializeWebProcess): Call m_soupRequestManager.registerURIScheme for each URI scheme
found in the parameters.
* WebProcess/soup/WebSoupRequestManager.h: Make registerURIScheme public.
(WebSoupRequestManager):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (136388 => 136389)


--- trunk/Source/WebKit2/ChangeLog	2012-12-03 13:30:33 UTC (rev 136388)
+++ trunk/Source/WebKit2/ChangeLog	2012-12-03 14:10:42 UTC (rev 136389)
@@ -1,3 +1,38 @@
+2012-12-03  Joaquim Rocha  <[email protected]>
+
+        [GTK] Custom URI schemes stop working on Epiphany using WebKit2 after killing the web process
+        https://bugs.webkit.org/show_bug.cgi?id=103729
+
+        Reviewed by Carlos Garcia Campos.
+
+        When a URI scheme is registered and the WebProcess is killed,
+        those schemes would not work anymore after the process is relaunched.
+
+        This was observed in Epiphany and possibly affects any port that
+        uses libsoup.
+
+        * Shared/WebProcessCreationParameters.cpp:
+        (WebKit::WebProcessCreationParameters::encode): Encode the registered URI schemes.
+        (WebKit::WebProcessCreationParameters::decode): Decode the registered URI schemes.
+        * Shared/WebProcessCreationParameters.h: Add the urlSchemesRegistered Vector to hold the registered URI schemes.
+        (WebProcessCreationParameters):
+        * UIProcess/efl/WebContextEfl.cpp:
+        (WebKit::WebContext::platformInitializeWebProcess): Assign the parameters.urlSchemesRegistered from the URI schemes
+        registered in the WebSoupRequestManagerProxy and removed the notImplemented() call.
+        * UIProcess/gtk/WebContextGtk.cpp:
+        (WebKit::WebContext::platformInitializeWebProcess): Assign the parameters.urlSchemesRegistered from the URI schemes
+        registered in the WebSoupRequestManagerProxy.
+        * UIProcess/soup/WebSoupRequestManagerProxy.cpp:
+        (WebKit::WebSoupRequestManagerProxy::registerURIScheme): Add the given scheme to the m_registeredURISchemes Vector.
+        * UIProcess/soup/WebSoupRequestManagerProxy.h:
+        (WebKit::WebSoupRequestManagerProxy::registeredURISchemes): Return the m_registeredURISchemes.
+        (WebSoupRequestManagerProxy): Define the m_registeredURISchemes to hold the schemes that are registered.
+        * WebProcess/soup/WebProcessSoup.cpp:
+        (WebKit::WebProcess::platformInitializeWebProcess): Call m_soupRequestManager.registerURIScheme for each URI scheme
+        found in the parameters.
+        * WebProcess/soup/WebSoupRequestManager.h: Make registerURIScheme public.
+        (WebSoupRequestManager):
+
 2012-12-03  Mikhail Pozdnyakov  <[email protected]>
 
         CSS Device Adaptation: window.innerWidth returns wrong value if CSS viewport descriptors are applied

Modified: trunk/Source/WebKit2/Shared/WebProcessCreationParameters.cpp (136388 => 136389)


--- trunk/Source/WebKit2/Shared/WebProcessCreationParameters.cpp	2012-12-03 13:30:33 UTC (rev 136388)
+++ trunk/Source/WebKit2/Shared/WebProcessCreationParameters.cpp	2012-12-03 14:10:42 UTC (rev 136389)
@@ -76,6 +76,9 @@
 #if ENABLE(CUSTOM_PROTOCOLS)
     encoder << urlSchemesRegisteredForCustomProtocols;
 #endif
+#if USE(SOUP)
+    encoder << urlSchemesRegistered;
+#endif
     encoder.encodeEnum(cacheModel);
     encoder << shouldTrackVisitedLinks;
     encoder << shouldAlwaysUseComplexTextCodePath;
@@ -165,6 +168,10 @@
     if (!decoder->decode(parameters.urlSchemesRegisteredForCustomProtocols))
         return false;
 #endif
+#if USE(SOUP)
+    if (!decoder->decode(parameters.urlSchemesRegistered))
+        return false;
+#endif
     if (!decoder->decodeEnum(parameters.cacheModel))
         return false;
     if (!decoder->decode(parameters.shouldTrackVisitedLinks))

Modified: trunk/Source/WebKit2/Shared/WebProcessCreationParameters.h (136388 => 136389)


--- trunk/Source/WebKit2/Shared/WebProcessCreationParameters.h	2012-12-03 13:30:33 UTC (rev 136388)
+++ trunk/Source/WebKit2/Shared/WebProcessCreationParameters.h	2012-12-03 14:10:42 UTC (rev 136389)
@@ -75,6 +75,9 @@
 #if ENABLE(CUSTOM_PROTOCOLS)
     Vector<String> urlSchemesRegisteredForCustomProtocols;
 #endif
+#if USE(SOUP)
+    Vector<String> urlSchemesRegistered;
+#endif
 
     CacheModel cacheModel;
     bool shouldTrackVisitedLinks;

Modified: trunk/Source/WebKit2/UIProcess/efl/WebContextEfl.cpp (136388 => 136389)


--- trunk/Source/WebKit2/UIProcess/efl/WebContextEfl.cpp	2012-12-03 13:30:33 UTC (rev 136388)
+++ trunk/Source/WebKit2/UIProcess/efl/WebContextEfl.cpp	2012-12-03 14:10:42 UTC (rev 136389)
@@ -25,6 +25,8 @@
 
 #include "config.h"
 #include "WebContext.h"
+#include "WebProcessCreationParameters.h"
+#include "WebSoupRequestManagerProxy.h"
 
 #include <Efreet.h>
 #include <WebCore/ApplicationCacheStorage.h>
@@ -38,9 +40,9 @@
     return String::fromUTF8(efreet_cache_home_get()) + "/WebKitEfl/Applications";
 }
 
-void WebContext::platformInitializeWebProcess(WebProcessCreationParameters&)
+void WebContext::platformInitializeWebProcess(WebProcessCreationParameters& parameters)
 {
-    notImplemented();
+    parameters.urlSchemesRegistered = m_soupRequestManagerProxy->registeredURISchemes();
 }
 
 void WebContext::platformInvalidateContext()

Modified: trunk/Source/WebKit2/UIProcess/gtk/WebContextGtk.cpp (136388 => 136389)


--- trunk/Source/WebKit2/UIProcess/gtk/WebContextGtk.cpp	2012-12-03 13:30:33 UTC (rev 136388)
+++ trunk/Source/WebKit2/UIProcess/gtk/WebContextGtk.cpp	2012-12-03 14:10:42 UTC (rev 136389)
@@ -30,6 +30,8 @@
 
 #include "Logging.h"
 #include "WebInspectorServer.h"
+#include "WebProcessCreationParameters.h"
+#include "WebSoupRequestManagerProxy.h"
 #include <WebCore/FileSystem.h>
 #include <WebCore/NotImplemented.h>
 #include <wtf/gobject/GOwnPtr.h>
@@ -80,9 +82,11 @@
     return WebCore::filenameToString(cacheDirectory.get());
 }
 
-void WebContext::platformInitializeWebProcess(WebProcessCreationParameters&)
+void WebContext::platformInitializeWebProcess(WebProcessCreationParameters& parameters)
 {
     initInspectorServer();
+
+    parameters.urlSchemesRegistered = m_soupRequestManagerProxy->registeredURISchemes();
 }
 
 void WebContext::platformInvalidateContext()

Modified: trunk/Source/WebKit2/UIProcess/soup/WebSoupRequestManagerProxy.cpp (136388 => 136389)


--- trunk/Source/WebKit2/UIProcess/soup/WebSoupRequestManagerProxy.cpp	2012-12-03 13:30:33 UTC (rev 136388)
+++ trunk/Source/WebKit2/UIProcess/soup/WebSoupRequestManagerProxy.cpp	2012-12-03 14:10:42 UTC (rev 136389)
@@ -61,6 +61,9 @@
 {
     ASSERT(m_webContext);
     m_webContext->sendToAllProcessesRelaunchingThemIfNecessary(Messages::WebSoupRequestManager::RegisterURIScheme(scheme));
+
+    ASSERT(!m_registeredURISchemes.contains(scheme));
+    m_registeredURISchemes.append(scheme);
 }
 
 void WebSoupRequestManagerProxy::didHandleURIRequest(const WebData* requestData, uint64_t contentLength, const String& mimeType, uint64_t requestID)

Modified: trunk/Source/WebKit2/UIProcess/soup/WebSoupRequestManagerProxy.h (136388 => 136389)


--- trunk/Source/WebKit2/UIProcess/soup/WebSoupRequestManagerProxy.h	2012-12-03 13:30:33 UTC (rev 136388)
+++ trunk/Source/WebKit2/UIProcess/soup/WebSoupRequestManagerProxy.h	2012-12-03 14:10:42 UTC (rev 136389)
@@ -51,6 +51,8 @@
 
     void didReceiveURIRequest(const String& uriString, WebPageProxy*, uint64_t requestID);
 
+    const Vector<String>& registeredURISchemes() const { return m_registeredURISchemes; }
+
 private:
     WebSoupRequestManagerProxy(WebContext*);
 
@@ -63,6 +65,8 @@
     WebContext* m_webContext;
     WebSoupRequestManagerClient m_client;
     bool m_loadFailed;
+
+    Vector<String> m_registeredURISchemes;
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit2/WebProcess/soup/WebProcessSoup.cpp (136388 => 136389)


--- trunk/Source/WebKit2/WebProcess/soup/WebProcessSoup.cpp	2012-12-03 13:30:33 UTC (rev 136388)
+++ trunk/Source/WebKit2/WebProcess/soup/WebProcessSoup.cpp	2012-12-03 14:10:42 UTC (rev 136389)
@@ -166,6 +166,9 @@
     if (!parameters.languages.isEmpty())
         setSoupSessionAcceptLanguage(parameters.languages);
 
+    for (size_t i = 0; i < parameters.urlSchemesRegistered.size(); i++)
+        m_soupRequestManager.registerURIScheme(parameters.urlSchemesRegistered[i]);
+
     WebCore::addLanguageChangeObserver(this, languageChanged);
 }
 

Modified: trunk/Source/WebKit2/WebProcess/soup/WebSoupRequestManager.h (136388 => 136389)


--- trunk/Source/WebKit2/WebProcess/soup/WebSoupRequestManager.h	2012-12-03 13:30:33 UTC (rev 136388)
+++ trunk/Source/WebKit2/WebProcess/soup/WebSoupRequestManager.h	2012-12-03 14:10:42 UTC (rev 136389)
@@ -45,6 +45,8 @@
     void send(GSimpleAsyncResult*, GCancellable*);
     GInputStream* finish(GSimpleAsyncResult*);
 
+    void registerURIScheme(const String& scheme);
+
 private:
     // CoreIPC::MessageReceiver
     void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&) OVERRIDE;
@@ -52,7 +54,6 @@
     // Implemented in generated WebSoupRequestManagerMessageReceiver.cpp
     void didReceiveWebSoupRequestManagerMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&);
 
-    void registerURIScheme(const String& scheme);
     void didHandleURIRequest(const CoreIPC::DataReference&, uint64_t contentLength, const String& mimeType, uint64_t requestID);
     void didReceiveURIRequestData(const CoreIPC::DataReference&, uint64_t requestID);
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to