Diff
Modified: trunk/Source/WebKit2/ChangeLog (125450 => 125451)
--- trunk/Source/WebKit2/ChangeLog 2012-08-13 21:15:06 UTC (rev 125450)
+++ trunk/Source/WebKit2/ChangeLog 2012-08-13 21:29:11 UTC (rev 125451)
@@ -1,3 +1,47 @@
+2012-08-13 Alexey Proskuryakov <[email protected]>
+
+ [WK2] Move a remaining per-process message from WebContext to WebProcessProxy
+ https://bugs.webkit.org/show_bug.cgi?id=93883
+
+ Reviewed by Sam Weinig.
+
+ There was one plug-in message renaming. Moving it, and also other plug-in messages
+ for consistency.
+
+ * UIProcess/WebContext.cpp:
+ (WebKit): Got rid of the last MESSAGE_CHECK in this file.
+ (WebKit::WebContext::WebContext): Moved m_pluginWorkQueue to a singleton.
+ We don't need more than one queue (all it does is read plug-in info), and if we
+ needed, it would have been per-process, not per-context.
+ (WebKit::WebContext::~WebContext): No more work queue.
+ (WebKit::WebContext::processDidFinishLaunching): Ditto.
+
+ * UIProcess/WebContext.h: No longer needs to be a QueueClient.
+
+ * UIProcess/WebContext.messages.in:
+ * UIProcess/WebProcessProxy.messages.in:
+ Moved plug-in related messages.
+
+ * UIProcess/WebProcessProxy.cpp:
+ (WebKit::pluginWorkQueue): Moved from WebContext to a singleton.
+ (WebKit::WebProcessProxy::sendDidGetPlugins): Moved from WebContext.
+ (WebKit::WebProcessProxy::handleGetPlugins): Ditto.
+ (WebKit::WebProcessProxy::getPlugins): Ditto.
+ (WebKit::WebProcessProxy::getPluginPath): Ditto.
+ (WebKit::WebProcessProxy::getPluginProcessConnection): Ditto.
+ (WebKit::WebProcessProxy::didGetSitesWithPluginData): Ditto.
+ (WebKit::WebProcessProxy::didClearPluginSiteData): Ditto.
+
+ * UIProcess/WebProcessProxy.h: Process proxy needs to be thread safe ref counted
+ now, since it sends messages to itself on a work queue and back.
+
+ * WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:
+ (WebKit::WebPlatformStrategies::populatePluginCache): Updated for new receiver.
+
+ * WebProcess/WebPage/WebPage.cpp: (WebKit::WebPage::createPlugin): Ditto.
+
+ * WebProcess/WebProcess.cpp: (WebKit::canPluginHandleResponse): Ditto.
+
2012-08-13 Raphael Kubo da Costa <[email protected]>
[CMake] Remove glib-related Find modules and write single new one instead.
Modified: trunk/Source/WebKit2/UIProcess/WebContext.cpp (125450 => 125451)
--- trunk/Source/WebKit2/UIProcess/WebContext.cpp 2012-08-13 21:15:06 UTC (rev 125450)
+++ trunk/Source/WebKit2/UIProcess/WebContext.cpp 2012-08-13 21:29:11 UTC (rev 125451)
@@ -62,10 +62,6 @@
#include <wtf/CurrentTime.h>
#include <wtf/MainThread.h>
-#if PLATFORM(MAC)
-#include "BuiltInPDFView.h"
-#endif
-
#if ENABLE(BATTERY_STATUS)
#include "WebBatteryManagerProxy.h"
#endif
@@ -86,8 +82,6 @@
#include <wtf/RefCountedLeakCounter.h>
#endif
-#define MESSAGE_CHECK_URL(url) MESSAGE_CHECK_BASE(m_process->checkURLReceivedFromWebProcess(url), m_process->connection())
-
using namespace WebCore;
namespace WebKit {
@@ -153,7 +147,6 @@
, m_initialHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicyAlways)
#endif
, m_processTerminationEnabled(true)
- , m_pluginWorkQueue("com.apple.CoreIPC.PluginQueue")
{
#if !LOG_DISABLED
WebKit::initializeLogChannelsIfNecessary();
@@ -174,11 +167,6 @@
WebContext::~WebContext()
{
- m_pluginWorkQueue.invalidate();
-
- if (m_process && m_process->isValid())
- m_process->connection()->removeQueueClient(this);
-
ASSERT(contexts().find(this) != notFound);
contexts().remove(contexts().find(this));
@@ -391,8 +379,6 @@
m_visitedLinkProvider.processDidFinishLaunching();
- m_process->connection()->addQueueClient(this);
-
// Sometimes the memorySampler gets initialized after process initialization has happened but before the process has finished launching
// so check if it needs to be started here
if (m_memorySamplerEnabled) {
@@ -588,74 +574,6 @@
m_visitedLinkProvider.addVisitedLink(linkHash);
}
-void WebContext::sendDidGetPlugins(uint64_t requestID, PassOwnPtr<Vector<PluginInfo> > pluginInfos)
-{
- ASSERT(isMainThread());
-
- OwnPtr<Vector<PluginInfo> > plugins(pluginInfos);
-
-#if PLATFORM(MAC)
- // Add built-in PDF last, so that it's not used when a real plug-in is installed.
- // NOTE: This has to be done on the main thread as it calls localizedString().
- if (!omitPDFSupport())
- plugins->append(BuiltInPDFView::pluginInfo());
-#endif
-
- process()->send(Messages::WebProcess::DidGetPlugins(requestID, *plugins), 0);
-}
-
-void WebContext::handleGetPlugins(uint64_t requestID, bool refresh)
-{
- if (refresh)
- m_pluginInfoStore.refresh();
-
- OwnPtr<Vector<PluginInfo> > pluginInfos = adoptPtr(new Vector<PluginInfo>);
-
- Vector<PluginModuleInfo> plugins = m_pluginInfoStore.plugins();
- for (size_t i = 0; i < plugins.size(); ++i)
- pluginInfos->append(plugins[i].info);
-
- // NOTE: We have to pass the PluginInfo vector to the secondary thread via a pointer as otherwise
- // we'd end up with a deref() race on all the WTF::Strings it contains.
- RunLoop::main()->dispatch(bind(&WebContext::sendDidGetPlugins, this, requestID, pluginInfos.release()));
-}
-
-void WebContext::getPlugins(CoreIPC::Connection*, uint64_t requestID, bool refresh)
-{
- m_pluginWorkQueue.dispatch(bind(&WebContext::handleGetPlugins, this, requestID, refresh));
-}
-
-void WebContext::getPluginPath(const String& mimeType, const String& urlString, String& pluginPath, bool& blocked)
-{
- MESSAGE_CHECK_URL(urlString);
-
- String newMimeType = mimeType.lower();
-
- blocked = false;
- PluginModuleInfo plugin = pluginInfoStore().findPlugin(newMimeType, KURL(KURL(), urlString));
- if (!plugin.path)
- return;
-
- if (pluginInfoStore().shouldBlockPlugin(plugin)) {
- blocked = true;
- return;
- }
-
- pluginPath = plugin.path;
-}
-
-#if !ENABLE(PLUGIN_PROCESS)
-void WebContext::didGetSitesWithPluginData(const Vector<String>& sites, uint64_t callbackID)
-{
- m_pluginSiteDataManager->didGetSitesWithData(sites, callbackID);
-}
-
-void WebContext::didClearPluginSiteData(uint64_t callbackID)
-{
- m_pluginSiteDataManager->didClearSiteData(callbackID);
-}
-#endif
-
DownloadProxy* WebContext::createDownloadProxy()
{
RefPtr<DownloadProxy> downloadProxy = DownloadProxy::create(this);
@@ -972,12 +890,4 @@
sendToAllProcesses(Messages::WebProcess::SetJavaScriptGarbageCollectorTimerEnabled(flag));
}
-void WebContext::didReceiveMessageOnConnectionWorkQueue(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments, bool& didHandleMessage)
-{
- if (messageID.is<CoreIPC::MessageClassWebContext>()) {
- didReceiveWebContextMessageOnConnectionWorkQueue(connection, messageID, arguments, didHandleMessage);
- return;
- }
-}
-
} // namespace WebKit
Modified: trunk/Source/WebKit2/UIProcess/WebContext.h (125450 => 125451)
--- trunk/Source/WebKit2/UIProcess/WebContext.h 2012-08-13 21:15:06 UTC (rev 125450)
+++ trunk/Source/WebKit2/UIProcess/WebContext.h 2012-08-13 21:29:11 UTC (rev 125451)
@@ -75,7 +75,7 @@
typedef GenericCallback<WKDictionaryRef> DictionaryCallback;
-class WebContext : public APIObject, private CoreIPC::Connection::QueueClient {
+class WebContext : public APIObject {
public:
static const Type APIType = TypeContext;
@@ -228,14 +228,6 @@
void platformInitializeWebProcess(WebProcessCreationParameters&);
void platformInvalidateContext();
- // Plugins
- void getPlugins(CoreIPC::Connection*, uint64_t requestID, bool refresh);
- void getPluginPath(const String& mimeType, const String& urlString, String& pluginPath, bool& blocked);
-#if !ENABLE(PLUGIN_PROCESS)
- void didGetSitesWithPluginData(const Vector<String>& sites, uint64_t callbackID);
- void didClearPluginSiteData(uint64_t callbackID);
-#endif
-
#if PLATFORM(MAC)
void getPasteboardTypes(const String& pasteboardName, Vector<String>& pasteboardTypes);
void getPasteboardPathnamesForType(const String& pasteboardName, const String& pasteboardType, Vector<String>& pathnames);
@@ -258,10 +250,7 @@
// Implemented in generated WebContextMessageReceiver.cpp
void didReceiveWebContextMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
void didReceiveSyncWebContextMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, OwnPtr<CoreIPC::ArgumentEncoder>&);
- void didReceiveWebContextMessageOnConnectionWorkQueue(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, bool& didHandleMessage);
- virtual void didReceiveMessageOnConnectionWorkQueue(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, bool& didHandleMessage) OVERRIDE;
-
static void languageChanged(void* context);
void languageChanged();
@@ -273,9 +262,6 @@
String localStorageDirectory() const;
String platformDefaultLocalStorageDirectory() const;
- void handleGetPlugins(uint64_t requestID, bool refresh);
- void sendDidGetPlugins(uint64_t requestID, PassOwnPtr<Vector<WebCore::PluginInfo> >);
-
ProcessModel m_processModel;
// FIXME: In the future, this should be one or more WebProcessProxies.
@@ -352,8 +338,6 @@
bool m_processTerminationEnabled;
HashMap<uint64_t, RefPtr<DictionaryCallback> > m_dictionaryCallbacks;
-
- WorkQueue m_pluginWorkQueue;
};
template<typename U> inline bool WebContext::sendToAllProcesses(const U& message)
Modified: trunk/Source/WebKit2/UIProcess/WebContext.messages.in (125450 => 125451)
--- trunk/Source/WebKit2/UIProcess/WebContext.messages.in 2012-08-13 21:15:06 UTC (rev 125450)
+++ trunk/Source/WebKit2/UIProcess/WebContext.messages.in 2012-08-13 21:29:11 UTC (rev 125451)
@@ -24,16 +24,7 @@
# Visited link provider messages.
AddVisitedLinkHash(uint64_t linkHash)
-
- # Plugin messages.
- GetPlugins(uint64_t requestID, bool refresh) DispatchOnConnectionQueue
- GetPluginPath(WTF::String mimeType, WTF::String urlString) -> (WTF::String pluginPath, bool blocked)
-#if !ENABLE(PLUGIN_PROCESS)
- void DidGetSitesWithPluginData(Vector<WTF::String> sites, uint64_t callbackID)
- void DidClearPluginSiteData(uint64_t callbackID)
-#endif
-
DidGetWebCoreStatistics(WebKit::StatisticsData statisticsData, uint64_t callbackID)
#if PLATFORM(MAC)
Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp (125450 => 125451)
--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp 2012-08-13 21:15:06 UTC (rev 125450)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp 2012-08-13 21:29:11 UTC (rev 125451)
@@ -36,13 +36,19 @@
#include "WebNavigationDataStore.h"
#include "WebNotificationManagerProxy.h"
#include "WebPageProxy.h"
+#include "WebPluginSiteDataManager.h"
#include "WebProcessMessages.h"
#include "WebProcessProxyMessages.h"
#include <WebCore/KURL.h>
#include <stdio.h>
+#include <wtf/MainThread.h>
#include <wtf/text/CString.h>
#include <wtf/text/WTFString.h>
+#if PLATFORM(MAC)
+#include "BuiltInPDFView.h"
+#endif
+
using namespace WebCore;
using namespace std;
@@ -63,6 +69,12 @@
return uniquePageID++;
}
+static WorkQueue& pluginWorkQueue()
+{
+ DEFINE_STATIC_LOCAL(WorkQueue, queue, ("com.apple.CoreIPC.PluginQueue"));
+ return queue;
+}
+
PassRefPtr<WebProcessProxy> WebProcessProxy::create(PassRefPtr<WebContext> context)
{
return adoptRef(new WebProcessProxy(context));
@@ -282,16 +294,86 @@
result.iterator->second->setBackForwardData(backForwardData.data(), backForwardData.size());
}
+void WebProcessProxy::sendDidGetPlugins(uint64_t requestID, PassOwnPtr<Vector<PluginInfo> > pluginInfos)
+{
+ ASSERT(isMainThread());
+
+ OwnPtr<Vector<PluginInfo> > plugins(pluginInfos);
+
+#if PLATFORM(MAC)
+ // Add built-in PDF last, so that it's not used when a real plug-in is installed.
+ // NOTE: This has to be done on the main thread as it calls localizedString().
+ if (!m_context->omitPDFSupport())
+ plugins->append(BuiltInPDFView::pluginInfo());
+#endif
+
+ send(Messages::WebProcess::DidGetPlugins(requestID, *plugins), 0);
+}
+
+void WebProcessProxy::handleGetPlugins(uint64_t requestID, bool refresh)
+{
+ if (refresh)
+ m_context->pluginInfoStore().refresh();
+
+ OwnPtr<Vector<PluginInfo> > pluginInfos = adoptPtr(new Vector<PluginInfo>);
+
+ Vector<PluginModuleInfo> plugins = m_context->pluginInfoStore().plugins();
+ for (size_t i = 0; i < plugins.size(); ++i)
+ pluginInfos->append(plugins[i].info);
+
+ // NOTE: We have to pass the PluginInfo vector to the secondary thread via a pointer as otherwise
+ // we'd end up with a deref() race on all the WTF::Strings it contains.
+ RunLoop::main()->dispatch(bind(&WebProcessProxy::sendDidGetPlugins, this, requestID, pluginInfos.release()));
+}
+
+void WebProcessProxy::getPlugins(CoreIPC::Connection*, uint64_t requestID, bool refresh)
+{
+ pluginWorkQueue().dispatch(bind(&WebProcessProxy::handleGetPlugins, this, requestID, refresh));
+}
+
+void WebProcessProxy::getPluginPath(const String& mimeType, const String& urlString, String& pluginPath, bool& blocked)
+{
+ MESSAGE_CHECK_URL(urlString);
+
+ String newMimeType = mimeType.lower();
+
+ blocked = false;
+ PluginModuleInfo plugin = m_context->pluginInfoStore().findPlugin(newMimeType, KURL(KURL(), urlString));
+ if (!plugin.path)
+ return;
+
+ if (m_context->pluginInfoStore().shouldBlockPlugin(plugin)) {
+ blocked = true;
+ return;
+ }
+
+ pluginPath = plugin.path;
+}
+
#if ENABLE(PLUGIN_PROCESS)
+
void WebProcessProxy::getPluginProcessConnection(const String& pluginPath, PassRefPtr<Messages::WebProcessProxy::GetPluginProcessConnection::DelayedReply> reply)
{
- PluginProcessManager::shared().getPluginProcessConnection(context()->pluginInfoStore(), pluginPath, reply);
+ PluginProcessManager::shared().getPluginProcessConnection(m_context->pluginInfoStore(), pluginPath, reply);
}
void WebProcessProxy::pluginSyncMessageSendTimedOut(const String& pluginPath)
{
PluginProcessManager::shared().pluginSyncMessageSendTimedOut(pluginPath);
}
+
+#else
+
+void WebProcessProxy::didGetSitesWithPluginData(const Vector<String>& sites, uint64_t callbackID)
+{
+ m_context->pluginSiteDataManager()->didGetSitesWithData(sites, callbackID);
+}
+
+void WebProcessProxy::didClearPluginSiteData(uint64_t callbackID)
+{
+ m_context->pluginSiteDataManager()->didClearSiteData(callbackID);
+}
+
#endif
void WebProcessProxy::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.h (125450 => 125451)
--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.h 2012-08-13 21:15:06 UTC (rev 125450)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.h 2012-08-13 21:29:11 UTC (rev 125451)
@@ -55,7 +55,7 @@
class WebPageGroup;
struct WebNavigationDataStore;
-class WebProcessProxy : public RefCounted<WebProcessProxy>, CoreIPC::Connection::Client, ResponsivenessTimer::Client, ProcessLauncher::Client, CoreIPC::Connection::QueueClient {
+class WebProcessProxy : public ThreadSafeRefCounted<WebProcessProxy>, CoreIPC::Connection::Client, ResponsivenessTimer::Client, ProcessLauncher::Client, CoreIPC::Connection::QueueClient {
public:
typedef HashMap<uint64_t, RefPtr<WebFrameProxy> > WebFrameProxyMap;
typedef HashMap<uint64_t, RefPtr<WebBackForwardListItem> > WebBackForwardListItemMap;
@@ -132,10 +132,20 @@
void shouldTerminate(bool& shouldTerminate);
+ // Plugins
+ void getPlugins(CoreIPC::Connection*, uint64_t requestID, bool refresh);
+ void getPluginPath(const String& mimeType, const String& urlString, String& pluginPath, bool& blocked);
#if ENABLE(PLUGIN_PROCESS)
void getPluginProcessConnection(const String& pluginPath, PassRefPtr<Messages::WebProcessProxy::GetPluginProcessConnection::DelayedReply>);
void pluginSyncMessageSendTimedOut(const String& pluginPath);
+#else
+ void didGetSitesWithPluginData(const Vector<String>& sites, uint64_t callbackID);
+ void didClearPluginSiteData(uint64_t callbackID);
#endif
+
+ void handleGetPlugins(uint64_t requestID, bool refresh);
+ void sendDidGetPlugins(uint64_t requestID, PassOwnPtr<Vector<WebCore::PluginInfo> >);
+
#if USE(SECURITY_FRAMEWORK)
void secItemRequest(CoreIPC::Connection*, uint64_t requestID, const SecItemRequestData&);
void secKeychainItemRequest(CoreIPC::Connection*, uint64_t requestID, const SecKeychainItemRequestData&);
Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.messages.in (125450 => 125451)
--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.messages.in 2012-08-13 21:15:06 UTC (rev 125450)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.messages.in 2012-08-13 21:29:11 UTC (rev 125451)
@@ -33,10 +33,17 @@
ShouldTerminate() -> (bool shouldTerminate)
+ # Plugin messages.
+ GetPlugins(uint64_t requestID, bool refresh) DispatchOnConnectionQueue
+ GetPluginPath(WTF::String mimeType, WTF::String urlString) -> (WTF::String pluginPath, bool blocked)
#if ENABLE(PLUGIN_PROCESS)
GetPluginProcessConnection(WTF::String pluginPath) -> (CoreIPC::Attachment connectionHandle, bool supportsAsynchronousInitialization) Delayed
PluginSyncMessageSendTimedOut(WTF::String pluginPath)
#endif
+#if !ENABLE(PLUGIN_PROCESS)
+ void DidGetSitesWithPluginData(Vector<WTF::String> sites, uint64_t callbackID)
+ void DidClearPluginSiteData(uint64_t callbackID)
+#endif
#if USE(SECURITY_FRAMEWORK)
SecItemRequest(uint64_t requestID, WebKit::SecItemRequestData request) DispatchOnConnectionQueue
Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp (125450 => 125451)
--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp 2012-08-13 21:15:06 UTC (rev 125450)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp 2012-08-13 21:29:11 UTC (rev 125451)
@@ -34,6 +34,7 @@
#include "WebCookieManager.h"
#include "WebCoreArgumentCoders.h"
#include "WebProcess.h"
+#include "WebProcessProxyMessages.h"
#include <WebCore/Color.h>
#include <WebCore/KURL.h>
#include <WebCore/Page.h>
@@ -130,7 +131,7 @@
// FIXME: Should we do something in case of error here?
uint64_t requestID = generateRequestID();
- WebProcess::shared().connection()->send(Messages::WebContext::GetPlugins(requestID, m_shouldRefreshPlugins), 0);
+ WebProcess::shared().connection()->send(Messages::WebProcessProxy::GetPlugins(requestID, m_shouldRefreshPlugins), 0);
m_cachedPlugins = *responseMap().waitForResponse(requestID);
Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (125450 => 125451)
--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp 2012-08-13 21:15:06 UTC (rev 125450)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp 2012-08-13 21:29:11 UTC (rev 125451)
@@ -432,8 +432,8 @@
bool blocked;
if (!WebProcess::shared().connection()->sendSync(
- Messages::WebContext::GetPluginPath(parameters.mimeType, parameters.url.string()),
- Messages::WebContext::GetPluginPath::Reply(pluginPath, blocked), 0)) {
+ Messages::WebProcessProxy::GetPluginPath(parameters.mimeType, parameters.url.string()),
+ Messages::WebProcessProxy::GetPluginPath::Reply(pluginPath, blocked), 0)) {
return 0;
}
Modified: trunk/Source/WebKit2/WebProcess/WebProcess.cpp (125450 => 125451)
--- trunk/Source/WebKit2/WebProcess/WebProcess.cpp 2012-08-13 21:15:06 UTC (rev 125450)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.cpp 2012-08-13 21:29:11 UTC (rev 125451)
@@ -796,7 +796,7 @@
String pluginPath;
bool blocked;
- if (!WebProcess::shared().connection()->sendSync(Messages::WebContext::GetPluginPath(response.mimeType(), response.url().string()), Messages::WebContext::GetPluginPath::Reply(pluginPath, blocked), 0))
+ if (!WebProcess::shared().connection()->sendSync(Messages::WebProcessProxy::GetPluginPath(response.mimeType(), response.url().string()), Messages::WebProcessProxy::GetPluginPath::Reply(pluginPath, blocked), 0))
return false;
return !blocked && !pluginPath.isEmpty();