diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-08-12 09:27:39 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-08-12 09:27:39 +0200 |
commit | 3749d61e1f7a59f5ec5067e560af1eb610c82015 (patch) | |
tree | 73dc228333948738bbe02976cacca8cd382bc978 /Source/WebKit2/WebProcess/Plugins/PluginView.cpp | |
parent | b32b4dcd9a51ab8de6afc53d9e17f8707e1f7a5e (diff) | |
download | qtwebkit-3749d61e1f7a59f5ec5067e560af1eb610c82015.tar.gz |
Imported WebKit commit a77350243e054f3460d1137301d8b3faee3d2052 (http://svn.webkit.org/repository/webkit/trunk@125365)
New snapshot with build fixes for latest API changes in Qt and all WK1 Win MSVC fixes upstream
Diffstat (limited to 'Source/WebKit2/WebProcess/Plugins/PluginView.cpp')
-rw-r--r-- | Source/WebKit2/WebProcess/Plugins/PluginView.cpp | 50 |
1 files changed, 42 insertions, 8 deletions
diff --git a/Source/WebKit2/WebProcess/Plugins/PluginView.cpp b/Source/WebKit2/WebProcess/Plugins/PluginView.cpp index 072a69c9c..d07f8b79d 100644 --- a/Source/WebKit2/WebProcess/Plugins/PluginView.cpp +++ b/Source/WebKit2/WebProcess/Plugins/PluginView.cpp @@ -260,6 +260,7 @@ PluginView::PluginView(PassRefPtr<HTMLPlugInElement> pluginElement, PassRefPtr<P , m_webPage(webPage(m_pluginElement.get())) , m_parameters(parameters) , m_isInitialized(false) + , m_isWaitingForSynchronousInitialization(false) , m_isWaitingUntilMediaCanStart(false) , m_isBeingDestroyed(false) , m_pendingURLRequestsTimer(RunLoop::main(), this, &PluginView::pendingURLRequestsTimerFired) @@ -285,7 +286,7 @@ PluginView::~PluginView() for (FrameLoadMap::iterator it = m_pendingFrameLoads.begin(), end = m_pendingFrameLoads.end(); it != end; ++it) it->first->setLoadListener(0); - if (m_plugin && m_isInitialized) { + if (m_plugin) { m_isBeingDestroyed = true; m_plugin->destroyPlugin(); m_isBeingDestroyed = false; @@ -487,15 +488,20 @@ void PluginView::initializePlugin() } } } - - if (!m_plugin->initialize(this, m_parameters)) { - // We failed to initialize the plug-in. - m_plugin = 0; - m_webPage->send(Messages::WebPageProxy::DidFailToInitializePlugin(m_parameters.mimeType)); - return; - } + m_plugin->initialize(this, m_parameters); + // Plug-in initialization continued in didFailToInitializePlugin() or didInitializePlugin(). +} + +void PluginView::didFailToInitializePlugin() +{ + m_plugin = 0; + m_webPage->send(Messages::WebPageProxy::DidFailToInitializePlugin(m_parameters.mimeType)); +} + +void PluginView::didInitializePlugin() +{ m_isInitialized = true; #if PLATFORM(MAC) @@ -539,6 +545,19 @@ PlatformLayer* PluginView::platformLayer() const JSObject* PluginView::scriptObject(JSGlobalObject* globalObject) { + // If we're already waiting for synchronous initialization of the plugin, + // calls to scriptObject() are from the plug-in itself and need to return 0; + if (m_isWaitingForSynchronousInitialization) + return 0; + + // If the plug-in exists but is not initialized then we're still initializing asynchronously. + // We need to wait here until initialization has either succeeded or failed. + if (m_plugin->isBeingAsynchronouslyInitialized()) { + m_isWaitingForSynchronousInitialization = true; + m_plugin->waitForAsynchronousInitialization(); + m_isWaitingForSynchronousInitialization = false; + } + // The plug-in can be null here if it failed to initialize. if (!m_isInitialized || !m_plugin) return 0; @@ -1250,6 +1269,21 @@ bool PluginView::isPrivateBrowsingEnabled() return settings->privateBrowsingEnabled(); } +bool PluginView::asynchronousPluginInitializationEnabled() const +{ + return m_webPage->asynchronousPluginInitializationEnabled(); +} + +bool PluginView::asynchronousPluginInitializationEnabledForAllPlugins() const +{ + return m_webPage->asynchronousPluginInitializationEnabledForAllPlugins(); +} + +bool PluginView::artificialPluginInitializationDelayEnabled() const +{ + return m_webPage->artificialPluginInitializationDelayEnabled(); +} + void PluginView::protectPluginFromDestruction() { if (!m_isBeingDestroyed) |