diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-08-21 10:57:44 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-08-21 10:57:44 +0200 |
commit | 5ef7c8a6a70875d4430752d146bdcb069605d71d (patch) | |
tree | f6256640b6c46d7da221435803cae65326817ba2 /Source/WebKit2/UIProcess/WebProcessProxy.cpp | |
parent | decad929f578d8db641febc8740649ca6c574638 (diff) | |
download | qtwebkit-5ef7c8a6a70875d4430752d146bdcb069605d71d.tar.gz |
Imported WebKit commit 356d83016b090995d08ad568f2d2c243aa55e831 (http://svn.webkit.org/repository/webkit/trunk@126147)
New snapshot including various build fixes for newer Qt 5
Diffstat (limited to 'Source/WebKit2/UIProcess/WebProcessProxy.cpp')
-rw-r--r-- | Source/WebKit2/UIProcess/WebProcessProxy.cpp | 96 |
1 files changed, 93 insertions, 3 deletions
diff --git a/Source/WebKit2/UIProcess/WebProcessProxy.cpp b/Source/WebKit2/UIProcess/WebProcessProxy.cpp index d90355c4e..22a2b7f2c 100644 --- a/Source/WebKit2/UIProcess/WebProcessProxy.cpp +++ b/Source/WebKit2/UIProcess/WebProcessProxy.cpp @@ -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 @@ static uint64_t generatePageID() 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)); @@ -171,8 +183,6 @@ WebPageProxy* WebProcessProxy::webPage(uint64_t pageID) const PassRefPtr<WebPageProxy> WebProcessProxy::createWebPage(PageClient* pageClient, WebContext* context, WebPageGroup* pageGroup) { - ASSERT(context->process() == this); - uint64_t pageID = generatePageID(); RefPtr<WebPageProxy> webPage = WebPageProxy::create(pageClient, this, pageGroup, pageID); m_pageMap.set(pageID, webPage.get()); @@ -189,6 +199,16 @@ void WebProcessProxy::removeWebPage(uint64_t pageID) m_pageMap.remove(pageID); } +#if ENABLE(WEB_INTENTS) +void WebProcessProxy::removeMessagePortChannel(uint64_t channelID) +{ + if (!isValid()) + return; + + send(Messages::WebProcess::RemoveMessagePortChannel(channelID), /* destinationID */ 0); +} +#endif + WebBackForwardListItem* WebProcessProxy::webBackForwardItem(uint64_t itemID) const { return m_backForwardListItemMap.get(itemID).get(); @@ -282,16 +302,86 @@ void WebProcessProxy::addBackForwardItem(uint64_t itemID, const String& original 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) |