- 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);