Title: [147659] trunk/Source
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
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to