- Revision
- 147659
- Author
- [email protected]
- Date
- 2013-04-04 11:52:27 -0700 (Thu, 04 Apr 2013)
Log Message
Expose settings to disable plugin snapshotting autostart and primary detection
https://bugs.webkit.org/show_bug.cgi?id=113918
Reviewed by Tim Horton.
Source/WebCore:
Three new settings:
- snapshotAllPlugIns: Do not apply any heuristics - immediately snapshot a plugin.
- primaryPlugInSnapshotDetectionEnabled: Toggle snapshotting the "main" plugin in the page.
- autostartOriginPlugInSnapshottingEnabled: Toggle snapshotting based on URL origins.
* html/HTMLPlugInImageElement.cpp:
(WebCore::HTMLPlugInImageElement::userDidClickSnapshot): Don't tell the host that we've started
if the autostartOriginPlugInSnapshottingEnabled is false.
(WebCore::HTMLPlugInImageElement::setIsPrimarySnapshottedPlugIn): Don't restart a primary
plugin if primaryPlugInSnapshotDetectionEnabled is false.
(WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Snapshot immediately if
snapshotAllPlugIns is true. Also, don't test for autostart if
autostartOriginPlugInSnapshottingEnabled is false.
* page/Settings.in: Three new settings values.
Source/WebKit2:
Three new settings: snapshotAllPlugIns, primaryPlugInSnapshotDetectionEnabled and
autostartOriginPlugInSnapshottingEnabled.
These are exposed via WKPreferences (WebKit2 only, since that's the only port actively
using the feature).
* Shared/WebPreferencesStore.h: Add macros for new settings.
* UIProcess/API/C/WKPreferences.cpp: Getters and setters for new settings.
(WKPreferencesSetSnapshotAllPlugIns):
(WKPreferencesGetSnapshotAllPlugIns):
(WKPreferencesSetAutostartOriginPlugInSnapshottingEnabled):
(WKPreferencesGetAutostartOriginPlugInSnapshottingEnabled):
(WKPreferencesSetPrimaryPlugInSnapshotDetectionEnabled):
(WKPreferencesGetPrimaryPlugInSnapshotDetectionEnabled):
* UIProcess/API/C/WKPreferencesPrivate.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::updatePreferences): Forward settings updates.
(WebKit::WebPage::addPluginView): Don't run primary plugin detection if the setting is false.
(WebKit::WebPage::didFinishLoad): Ditto.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (147658 => 147659)
--- trunk/Source/WebCore/ChangeLog 2013-04-04 18:31:37 UTC (rev 147658)
+++ trunk/Source/WebCore/ChangeLog 2013-04-04 18:52:27 UTC (rev 147659)
@@ -1,3 +1,25 @@
+2013-04-03 Dean Jackson <[email protected]>
+
+ Expose settings to disable plugin snapshotting autostart and primary detection
+ https://bugs.webkit.org/show_bug.cgi?id=113918
+
+ Reviewed by Tim Horton.
+
+ Three new settings:
+ - snapshotAllPlugIns: Do not apply any heuristics - immediately snapshot a plugin.
+ - primaryPlugInSnapshotDetectionEnabled: Toggle snapshotting the "main" plugin in the page.
+ - autostartOriginPlugInSnapshottingEnabled: Toggle snapshotting based on URL origins.
+
+ * html/HTMLPlugInImageElement.cpp:
+ (WebCore::HTMLPlugInImageElement::userDidClickSnapshot): Don't tell the host that we've started
+ if the autostartOriginPlugInSnapshottingEnabled is false.
+ (WebCore::HTMLPlugInImageElement::setIsPrimarySnapshottedPlugIn): Don't restart a primary
+ plugin if primaryPlugInSnapshotDetectionEnabled is false.
+ (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn): Snapshot immediately if
+ snapshotAllPlugIns is true. Also, don't test for autostart if
+ autostartOriginPlugInSnapshottingEnabled is false.
+ * page/Settings.in: Three new settings values.
+
2013-04-04 Carlos Garcia Campos <[email protected]>
[BlackBerry] Remove skia code from PluginViewBlackBerry
Modified: trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp (147658 => 147659)
--- trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp 2013-04-04 18:31:37 UTC (rev 147658)
+++ trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp 2013-04-04 18:52:27 UTC (rev 147659)
@@ -467,7 +467,7 @@
{
m_pendingClickEventFromSnapshot = event;
String plugInOrigin = m_loadedUrl.host();
- if (document()->page() && !SchemeRegistry::shouldTreatURLSchemeAsLocal(document()->page()->mainFrame()->document()->baseURL().protocol()))
+ if (document()->page() && !SchemeRegistry::shouldTreatURLSchemeAsLocal(document()->page()->mainFrame()->document()->baseURL().protocol()) && document()->page()->settings()->autostartOriginPlugInSnapshottingEnabled())
document()->page()->plugInClient()->didStartFromOrigin(document()->page()->mainFrame()->document()->baseURL().host(), plugInOrigin, loadedMimeType());
restartSnapshottedPlugIn();
@@ -476,6 +476,9 @@
void HTMLPlugInImageElement::setIsPrimarySnapshottedPlugIn(bool isPrimarySnapshottedPlugIn)
{
+ if (!document()->page() || !document()->page()->settings()->primaryPlugInSnapshotDetectionEnabled() || document()->page()->settings()->snapshotAllPlugIns())
+ return;
+
if (isPrimarySnapshottedPlugIn) {
restartSnapshottedPlugIn();
restartSimilarPlugIns();
@@ -554,6 +557,12 @@
return;
}
+ if (document()->page()->settings()->snapshotAllPlugIns()) {
+ LOG(Plugins, "%p Plug-in forced to snapshot by user preference", this);
+ setDisplayState(WaitingForSnapshot);
+ return;
+ }
+
RenderBox* renderEmbeddedObject = toRenderBox(renderer());
Length styleWidth = renderEmbeddedObject->style()->width();
Length styleHeight = renderEmbeddedObject->style()->height();
@@ -581,7 +590,7 @@
return;
}
- if (document()->page()->plugInClient()->shouldAutoStartFromOrigin(document()->page()->mainFrame()->document()->baseURL().host(), url.host(), loadedMimeType())) {
+ if (document()->page()->settings()->autostartOriginPlugInSnapshottingEnabled() && document()->page()->plugInClient()->shouldAutoStartFromOrigin(document()->page()->mainFrame()->document()->baseURL().host(), url.host(), loadedMimeType())) {
LOG(Plugins, "%p Plug-in from (%s, %s) is marked to auto-start, set to play", this, document()->page()->mainFrame()->document()->baseURL().host().utf8().data(), url.host().utf8().data());
return;
}
Modified: trunk/Source/WebCore/page/Settings.in (147658 => 147659)
--- trunk/Source/WebCore/page/Settings.in 2013-04-04 18:31:37 UTC (rev 147658)
+++ trunk/Source/WebCore/page/Settings.in 2013-04-04 18:52:27 UTC (rev 147659)
@@ -181,6 +181,9 @@
applyDeviceScaleFactorInCompositor initial=true
applyPageScaleFactorInCompositor initial=false
plugInSnapshottingEnabled initial=false
+snapshotAllPlugIns initial=false
+autostartOriginPlugInSnapshottingEnabled initial=true
+primaryPlugInSnapshotDetectionEnabled initial=true
maximumPlugInSnapshotAttempts type=unsigned, initial=20
frameFlatteningEnabled initial=false
Modified: trunk/Source/WebKit2/ChangeLog (147658 => 147659)
--- trunk/Source/WebKit2/ChangeLog 2013-04-04 18:31:37 UTC (rev 147658)
+++ trunk/Source/WebKit2/ChangeLog 2013-04-04 18:52:27 UTC (rev 147659)
@@ -1,3 +1,29 @@
+2013-04-03 Dean Jackson <[email protected]>
+
+ Expose settings to disable plugin snapshotting autostart and primary detection
+ https://bugs.webkit.org/show_bug.cgi?id=113918
+
+ Reviewed by Tim Horton.
+
+ Three new settings: snapshotAllPlugIns, primaryPlugInSnapshotDetectionEnabled and
+ autostartOriginPlugInSnapshottingEnabled.
+ These are exposed via WKPreferences (WebKit2 only, since that's the only port actively
+ using the feature).
+
+ * Shared/WebPreferencesStore.h: Add macros for new settings.
+ * UIProcess/API/C/WKPreferences.cpp: Getters and setters for new settings.
+ (WKPreferencesSetSnapshotAllPlugIns):
+ (WKPreferencesGetSnapshotAllPlugIns):
+ (WKPreferencesSetAutostartOriginPlugInSnapshottingEnabled):
+ (WKPreferencesGetAutostartOriginPlugInSnapshottingEnabled):
+ (WKPreferencesSetPrimaryPlugInSnapshotDetectionEnabled):
+ (WKPreferencesGetPrimaryPlugInSnapshotDetectionEnabled):
+ * UIProcess/API/C/WKPreferencesPrivate.h:
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::updatePreferences): Forward settings updates.
+ (WebKit::WebPage::addPluginView): Don't run primary plugin detection if the setting is false.
+ (WebKit::WebPage::didFinishLoad): Ditto.
+
2013-04-04 Christophe Dumez <[email protected]>
[Cairo] Fix canvas drawing of SVG-based patterns and remove NativeImageCairo
Modified: trunk/Source/WebKit2/Shared/WebPreferencesStore.h (147658 => 147659)
--- trunk/Source/WebKit2/Shared/WebPreferencesStore.h 2013-04-04 18:31:37 UTC (rev 147658)
+++ trunk/Source/WebKit2/Shared/WebPreferencesStore.h 2013-04-04 18:52:27 UTC (rev 147659)
@@ -144,6 +144,9 @@
macro(ScreenFontSubstitutionEnabled, screenFontSubstitutionEnabled, Bool, bool, DEFAULT_SCREEN_FONT_SUBSTITUTION_ENABLED) \
macro(CookieEnabled, cookieEnabled, Bool, bool, true) \
macro(PlugInSnapshottingEnabled, plugInSnapshottingEnabled, Bool, bool, false) \
+ macro(SnapshotAllPlugIns, snapshotAllPlugIns, Bool, bool, false) \
+ macro(AutostartOriginPlugInSnapshottingEnabled, autostartOriginPlugInSnapshottingEnabled, Bool, bool, true) \
+ macro(PrimaryPlugInSnapshotDetectionEnabled, primaryPlugInSnapshotDetectionEnabled, Bool, bool, true) \
macro(PDFPluginEnabled, pdfPluginEnabled, Bool, bool, false) \
macro(UsesEncodingDetector, usesEncodingDetector, Bool, bool, false) \
macro(TextAutosizingEnabled, textAutosizingEnabled, Bool, bool, false) \
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp (147658 => 147659)
--- trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp 2013-04-04 18:31:37 UTC (rev 147658)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp 2013-04-04 18:52:27 UTC (rev 147659)
@@ -994,6 +994,36 @@
return toImpl(preferencesRef)->plugInSnapshottingEnabled();
}
+void WKPreferencesSetSnapshotAllPlugIns(WKPreferencesRef preferencesRef, bool enabled)
+{
+ toImpl(preferencesRef)->setSnapshotAllPlugIns(enabled);
+}
+
+bool WKPreferencesGetSnapshotAllPlugIns(WKPreferencesRef preferencesRef)
+{
+ return toImpl(preferencesRef)->snapshotAllPlugIns();
+}
+
+void WKPreferencesSetAutostartOriginPlugInSnapshottingEnabled(WKPreferencesRef preferencesRef, bool enabled)
+{
+ toImpl(preferencesRef)->setAutostartOriginPlugInSnapshottingEnabled(enabled);
+}
+
+bool WKPreferencesGetAutostartOriginPlugInSnapshottingEnabled(WKPreferencesRef preferencesRef)
+{
+ return toImpl(preferencesRef)->autostartOriginPlugInSnapshottingEnabled();
+}
+
+void WKPreferencesSetPrimaryPlugInSnapshotDetectionEnabled(WKPreferencesRef preferencesRef, bool enabled)
+{
+ toImpl(preferencesRef)->setPrimaryPlugInSnapshotDetectionEnabled(enabled);
+}
+
+bool WKPreferencesGetPrimaryPlugInSnapshotDetectionEnabled(WKPreferencesRef preferencesRef)
+{
+ return toImpl(preferencesRef)->primaryPlugInSnapshotDetectionEnabled();
+}
+
void WKPreferencesSetPDFPluginEnabled(WKPreferencesRef preferencesRef, bool enabled)
{
toImpl(preferencesRef)->setPDFPluginEnabled(enabled);
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPreferencesPrivate.h (147658 => 147659)
--- trunk/Source/WebKit2/UIProcess/API/C/WKPreferencesPrivate.h 2013-04-04 18:31:37 UTC (rev 147658)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPreferencesPrivate.h 2013-04-04 18:52:27 UTC (rev 147659)
@@ -267,6 +267,18 @@
WK_EXPORT void WKPreferencesSetHiddenPageCSSAnimationSuspensionEnabled(WKPreferencesRef preferences, bool enabled);
WK_EXPORT bool WKPreferencesGetHiddenPageCSSAnimationSuspensionEnabled(WKPreferencesRef preferences);
+// Defaults to false
+WK_EXPORT void WKPreferencesSetSnapshotAllPlugIns(WKPreferencesRef preferencesRef, bool enabled);
+WK_EXPORT bool WKPreferencesGetSnapshotAllPlugIns(WKPreferencesRef preferencesRef);
+
+// Defaults to true
+WK_EXPORT void WKPreferencesSetAutostartOriginPlugInSnapshottingEnabled(WKPreferencesRef preferencesRef, bool enabled);
+WK_EXPORT bool WKPreferencesGetAutostartOriginPlugInSnapshottingEnabled(WKPreferencesRef preferencesRef);
+
+// Defaults to true
+WK_EXPORT void WKPreferencesSetPrimaryPlugInSnapshotDetectionEnabled(WKPreferencesRef preferencesRef, bool enabled);
+WK_EXPORT bool WKPreferencesGetPrimaryPlugInSnapshotDetectionEnabled(WKPreferencesRef preferencesRef);
+
WK_EXPORT void WKPreferencesResetTestRunnerOverrides(WKPreferencesRef preferencesRef);
#ifdef __cplusplus
Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (147658 => 147659)
--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp 2013-04-04 18:31:37 UTC (rev 147658)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp 2013-04-04 18:52:27 UTC (rev 147659)
@@ -2415,6 +2415,9 @@
settings->setScrollingPerformanceLoggingEnabled(m_scrollingPerformanceLoggingEnabled);
settings->setPlugInSnapshottingEnabled(store.getBoolValueForKey(WebPreferencesKey::plugInSnapshottingEnabledKey()));
+ settings->setSnapshotAllPlugIns(store.getBoolValueForKey(WebPreferencesKey::snapshotAllPlugInsKey()));
+ settings->setAutostartOriginPlugInSnapshottingEnabled(store.getBoolValueForKey(WebPreferencesKey::autostartOriginPlugInSnapshottingEnabledKey()));
+ settings->setPrimaryPlugInSnapshotDetectionEnabled(store.getBoolValueForKey(WebPreferencesKey::primaryPlugInSnapshotDetectionEnabledKey()));
settings->setUsesEncodingDetector(store.getBoolValueForKey(WebPreferencesKey::usesEncodingDetectorKey()));
#if ENABLE(TEXT_AUTOSIZING)
@@ -2919,7 +2922,8 @@
m_pluginViews.add(pluginView);
#if ENABLE(PRIMARY_SNAPSHOTTED_PLUGIN_HEURISTIC)
- determinePrimarySnapshottedPlugIn();
+ if (!m_page->settings()->snapshotAllPlugIns() && m_page->settings()->primaryPlugInSnapshotDetectionEnabled())
+ determinePrimarySnapshottedPlugIn();
#endif
}
@@ -3897,7 +3901,8 @@
{
#if ENABLE(PRIMARY_SNAPSHOTTED_PLUGIN_HEURISTIC)
m_readyToFindPrimarySnapshottedPlugin = true;
- determinePrimarySnapshottedPlugIn();
+ if (!m_page->settings()->snapshotAllPlugIns() && m_page->settings()->primaryPlugInSnapshotDetectionEnabled())
+ determinePrimarySnapshottedPlugIn();
#endif
}