Title: [139899] trunk/Source
Revision
139899
Author
[email protected]
Date
2013-01-16 11:19:59 -0800 (Wed, 16 Jan 2013)

Log Message

Add a Setting to disable QTKit media engine.
https://bugs.webkit.org/show_bug.cgi?id=106972

Reviewed by Eric Carlson.

Source/WebCore:

Allow the MediaPlayerPrivateQTKit engine to be disabled by adding a
runtime setting to Settings. Make the setting 'live' by requerying the
installed media engines when the setting changes.

* WebCore.exp.in: Add new symbols to export list.
* page/Settings.cpp: Add new gQTKitEnabled global.
(WebCore::Settings::setAVFoundationEnabled): Requery media engines.
(WebCore::Settings::setQTKitEnabled): Ditto. Setter for global setting variable.
* page/Settings.h:
(WebCore::Settings::isQTKitEnabled): Getter for same.
* platform/graphics/MediaPlayer.cpp:
(WebCore::installedMediaEngines): Check isQTKitEnabled() before adding
    MediaPlayerPrivateQTKit engine.
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::requeryMediaEngines): Pass through to MediaPlayer.
* html/HTMLMediaElement.h:
* platform/graphics/MediaPlayer.cpp:
(WebCore::installedMediaEngines): Take an optional requery options parameter.
(WebCore::MediaPlayer::requeryMediaEngines): Pass through to installedMediaEngines().
* platform/graphics/MediaPlayer.h:

Source/WebKit/mac:

Add WebKit API to set QTKit enabled setting from user defaults.

* WebView/WebPreferenceKeysPrivate.h:
* WebView/WebPreferences.mm:
(+[WebPreferences initialize]): Set WebCore settings based on user defaults.
(-[WebPreferences setQTKitEnabled:]): Pass through to WebCore.
(-[WebPreferences isQTKitEnabled]): Ditto.
* WebView/WebPreferencesPrivate.h:
* WebView/WebView.mm:
(-[WebView _preferencesChanged:]): Synchronize WebKit/WebCore settings.

Source/WebKit2:

Add a WebKit2 API to access WebCore QTKitEnabled settings.

* Shared/WebPreferencesStore.h:
* UIProcess/API/C/WKPreferences.cpp:
(WKPreferencesSetQTKitEnabled): Pass through to WebCore.
(WKPreferencesGetQTKitEnabled): Ditto.
* UIProcess/API/C/WKPreferences.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::updatePreferences): Synchronize WebKit2/WebCore settings.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (139898 => 139899)


--- trunk/Source/WebCore/ChangeLog	2013-01-16 19:07:23 UTC (rev 139898)
+++ trunk/Source/WebCore/ChangeLog	2013-01-16 19:19:59 UTC (rev 139899)
@@ -1,3 +1,31 @@
+2013-01-15  Jer Noble  <[email protected]>
+
+        Add a Setting to disable QTKit media engine.
+        https://bugs.webkit.org/show_bug.cgi?id=106972
+
+        Reviewed by Eric Carlson.
+
+        Allow the MediaPlayerPrivateQTKit engine to be disabled by adding a
+        runtime setting to Settings. Make the setting 'live' by requerying the
+        installed media engines when the setting changes.
+
+        * WebCore.exp.in: Add new symbols to export list.
+        * page/Settings.cpp: Add new gQTKitEnabled global.
+        (WebCore::Settings::setAVFoundationEnabled): Requery media engines.
+        (WebCore::Settings::setQTKitEnabled): Ditto. Setter for global setting variable.
+        * page/Settings.h:
+        (WebCore::Settings::isQTKitEnabled): Getter for same.
+        * platform/graphics/MediaPlayer.cpp:
+        (WebCore::installedMediaEngines): Check isQTKitEnabled() before adding
+            MediaPlayerPrivateQTKit engine.
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::requeryMediaEngines): Pass through to MediaPlayer.
+        * html/HTMLMediaElement.h:
+        * platform/graphics/MediaPlayer.cpp:
+        (WebCore::installedMediaEngines): Take an optional requery options parameter.
+        (WebCore::MediaPlayer::requeryMediaEngines): Pass through to installedMediaEngines().
+        * platform/graphics/MediaPlayer.h:
+
 2013-01-16  Christophe Dumez  <[email protected]>
 
         [gstreamer] Some media tests occasionally crash with gstreamer 1.0 backend

Modified: trunk/Source/WebCore/WebCore.exp.in (139898 => 139899)


--- trunk/Source/WebCore/WebCore.exp.in	2013-01-16 19:07:23 UTC (rev 139898)
+++ trunk/Source/WebCore/WebCore.exp.in	2013-01-16 19:19:59 UTC (rev 139899)
@@ -2202,8 +2202,14 @@
 
 #if USE(AVFOUNDATION)
 __ZN7WebCore8Settings20gAVFoundationEnabledE
+__ZN7WebCore8Settings22setAVFoundationEnabledEb
 #endif
 
+#if PLATFORM(MAC) || (PLATFORM(QT) && USE(QTKIT))
+__ZN7WebCore8Settings13gQTKitEnabledE
+__ZN7WebCore8Settings15setQTKitEnabledEb
+#endif
+
 #if USE(CFNETWORK)
 __ZNK7WebCore13ResourceErrorcvP9__CFErrorEv
 __ZN7WebCore12SchedulePairC1EP11__CFRunLoopPK10__CFString

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (139898 => 139899)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2013-01-16 19:07:23 UTC (rev 139898)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2013-01-16 19:19:59 UTC (rev 139899)
@@ -4221,6 +4221,11 @@
     MediaPlayer::clearMediaCacheForSite(site);
 }
 
+void HTMLMediaElement::requeryMediaEngines()
+{
+    MediaPlayer::requeryMediaEngines();
+}
+
 void HTMLMediaElement::privateBrowsingStateDidChange()
 {
     if (!m_player)

Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (139898 => 139899)


--- trunk/Source/WebCore/html/HTMLMediaElement.h	2013-01-16 19:07:23 UTC (rev 139898)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h	2013-01-16 19:19:59 UTC (rev 139899)
@@ -310,6 +310,7 @@
     static void getSitesInMediaCache(Vector<String>&);
     static void clearMediaCache();
     static void clearMediaCacheForSite(const String&);
+    static void requeryMediaEngines();
 
     bool isPlaying() const { return m_playing; }
 

Modified: trunk/Source/WebCore/page/Settings.cpp (139898 => 139899)


--- trunk/Source/WebCore/page/Settings.cpp	2013-01-16 19:07:23 UTC (rev 139898)
+++ trunk/Source/WebCore/page/Settings.cpp	2013-01-16 19:19:59 UTC (rev 139899)
@@ -35,6 +35,7 @@
 #include "Frame.h"
 #include "FrameTree.h"
 #include "FrameView.h"
+#include "HTMLMediaElement.h"
 #include "HistoryItem.h"
 #include "Page.h"
 #include "PageCache.h"
@@ -93,6 +94,10 @@
 bool Settings::gAVFoundationEnabled = false;
 #endif
 
+#if PLATFORM(MAC) || (PLATFORM(QT) && USE(QTKIT))
+bool Settings::gQTKitEnabled = true;
+#endif
+
 bool Settings::gMockScrollbarsEnabled = false;
 bool Settings::gUsesOverlayScrollbars = false;
 
@@ -635,6 +640,28 @@
 #endif
 }
 
+#if USE(AVFOUNDATION)
+void Settings::setAVFoundationEnabled(bool enabled)
+{
+    if (gAVFoundationEnabled == enabled)
+        return;
+
+    gAVFoundationEnabled = enabled;
+    HTMLMediaElement::requeryMediaEngines();
+}
+#endif
+
+#if PLATFORM(MAC) || (PLATFORM(QT) && USE(QTKIT))
+void Settings::setQTKitEnabled(bool enabled)
+{
+    if (gQTKitEnabled == enabled)
+        return;
+
+    gQTKitEnabled = enabled;
+    HTMLMediaElement::requeryMediaEngines();
+}
+#endif
+
 void Settings::setScrollingPerformanceLoggingEnabled(bool enabled)
 {
     m_scrollingPerformanceLoggingEnabled = enabled;

Modified: trunk/Source/WebCore/page/Settings.h (139898 => 139899)


--- trunk/Source/WebCore/page/Settings.h	2013-01-16 19:07:23 UTC (rev 139898)
+++ trunk/Source/WebCore/page/Settings.h	2013-01-16 19:19:59 UTC (rev 139899)
@@ -256,10 +256,15 @@
         bool tiledBackingStoreEnabled() const { return m_tiledBackingStoreEnabled; }
 
 #if USE(AVFOUNDATION)
-        static void setAVFoundationEnabled(bool flag) { gAVFoundationEnabled = flag; }
+        static void setAVFoundationEnabled(bool flag);
         static bool isAVFoundationEnabled() { return gAVFoundationEnabled; }
 #endif
 
+#if PLATFORM(MAC) || (PLATFORM(QT) && USE(QTKIT))
+        static void setQTKitEnabled(bool flag);
+        static bool isQTKitEnabled() { return gQTKitEnabled; }
+#endif
+
         static const unsigned defaultMaximumHTMLParserDOMTreeDepth = 512;
 
 #if ENABLE(SMOOTH_SCROLLING)
@@ -376,6 +381,11 @@
 #if USE(AVFOUNDATION)
         static bool gAVFoundationEnabled;
 #endif
+
+#if PLATFORM(MAC) || (PLATFORM(QT) && USE(QTKIT))
+        static bool gQTKitEnabled;
+#endif
+        
         static bool gMockScrollbarsEnabled;
         static bool gUsesOverlayScrollbars;
 

Modified: trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp (139898 => 139899)


--- trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp	2013-01-16 19:07:23 UTC (rev 139898)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp	2013-01-16 19:19:59 UTC (rev 139899)
@@ -58,7 +58,6 @@
 #if USE(AVFOUNDATION)
 #include "MediaPlayerPrivateAVFoundationObjC.h"
 #endif
-#define PlatformMediaEngineClassName MediaPlayerPrivateQTKit
 #elif OS(WINCE) && !PLATFORM(QT)
 #include "MediaPlayerPrivateWinCE.h"
 #define PlatformMediaEngineClassName MediaPlayerPrivate
@@ -205,11 +204,17 @@
 static MediaPlayerFactory* bestMediaEngineForTypeAndCodecs(const String& type, const String& codecs, const String& keySystem, const KURL&, MediaPlayerFactory* current = 0);
 static MediaPlayerFactory* nextMediaEngine(MediaPlayerFactory* current);
 
-static Vector<MediaPlayerFactory*>& installedMediaEngines() 
+enum RequeryEngineOptions { DoNotRequeryEngines, RequeryEngines };
+static Vector<MediaPlayerFactory*>& installedMediaEngines(RequeryEngineOptions requeryFlags = DoNotRequeryEngines )
 {
     DEFINE_STATIC_LOCAL(Vector<MediaPlayerFactory*>, installedEngines, ());
     static bool enginesQueried = false;
 
+    if (requeryFlags == RequeryEngines) {
+        installedEngines.clear();
+        enginesQueried = false;
+    }
+
     if (!enginesQueried) {
         enginesQueried = true;
 
@@ -223,6 +228,11 @@
         }
 #endif
 
+#if PLATFORM(MAC) || (PLATFORM(QT) && USE(QTKIT))
+        if (Settings::isQTKitEnabled())
+            MediaPlayerPrivateQTKit::registerMediaEngine(addMediaEngine);
+#endif
+
 #if defined(PlatformMediaEngineClassName)
         PlatformMediaEngineClassName::registerMediaEngine(addMediaEngine);
 #endif
@@ -1141,6 +1151,11 @@
 }
 #endif
 
+void MediaPlayer::requeryMediaEngines()
+{
+    installedMediaEngines(RequeryEngines);
 }
 
+}
+
 #endif

Modified: trunk/Source/WebCore/platform/graphics/MediaPlayer.h (139898 => 139899)


--- trunk/Source/WebCore/platform/graphics/MediaPlayer.h	2013-01-16 19:07:23 UTC (rev 139898)
+++ trunk/Source/WebCore/platform/graphics/MediaPlayer.h	2013-01-16 19:19:59 UTC (rev 139899)
@@ -445,6 +445,8 @@
     void setTextTrackRepresentation(TextTrackRepresentation*);
 #endif
 
+    static void requeryMediaEngines();
+
 private:
     MediaPlayer(MediaPlayerClient*);
     void loadWithNextMediaEngine(MediaPlayerFactory*);

Modified: trunk/Source/WebKit/mac/ChangeLog (139898 => 139899)


--- trunk/Source/WebKit/mac/ChangeLog	2013-01-16 19:07:23 UTC (rev 139898)
+++ trunk/Source/WebKit/mac/ChangeLog	2013-01-16 19:19:59 UTC (rev 139899)
@@ -1,3 +1,21 @@
+2013-01-15  Jer Noble  <[email protected]>
+
+        Add a Setting to disable QTKit media engine.
+        https://bugs.webkit.org/show_bug.cgi?id=106972
+
+        Reviewed by Eric Carlson.
+
+        Add WebKit API to set QTKit enabled setting from user defaults.
+
+        * WebView/WebPreferenceKeysPrivate.h:
+        * WebView/WebPreferences.mm:
+        (+[WebPreferences initialize]): Set WebCore settings based on user defaults.
+        (-[WebPreferences setQTKitEnabled:]): Pass through to WebCore.
+        (-[WebPreferences isQTKitEnabled]): Ditto.
+        * WebView/WebPreferencesPrivate.h:
+        * WebView/WebView.mm:
+        (-[WebView _preferencesChanged:]): Synchronize WebKit/WebCore settings.
+
 2013-01-15  Enrica Casucci  <[email protected]>
 
         Add a new set of WebKit2 APIs for text search and

Modified: trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h (139898 => 139899)


--- trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h	2013-01-16 19:07:23 UTC (rev 139898)
+++ trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h	2013-01-16 19:19:59 UTC (rev 139899)
@@ -129,6 +129,7 @@
 #define WebKitScreenFontSubstitutionEnabledKey @"WebKitScreenFontSubstitutionEnabled"
 #define WebKitStorageBlockingPolicyKey @"WebKitStorageBlockingPolicy"
 #define WebKitPlugInSnapshottingEnabledPreferenceKey @"WebKitPlugInSnapshottingEnabled"
+#define WebKitQTKitEnabledPreferenceKey @"WebKitQTKitEnabled"
 
 // These are private both because callers should be using the cover methods and because the
 // cover methods themselves are private.

Modified: trunk/Source/WebKit/mac/WebView/WebPreferences.mm (139898 => 139899)


--- trunk/Source/WebKit/mac/WebView/WebPreferences.mm	2013-01-16 19:07:23 UTC (rev 139898)
+++ trunk/Source/WebKit/mac/WebView/WebPreferences.mm	2013-01-16 19:19:59 UTC (rev 139899)
@@ -419,6 +419,7 @@
 
         [NSNumber numberWithLongLong:ApplicationCacheStorage::noQuota()], WebKitApplicationCacheTotalQuota,
         [NSNumber numberWithLongLong:ApplicationCacheStorage::noQuota()], WebKitApplicationCacheDefaultOriginQuota,
+        [NSNumber numberWithBool:YES],  WebKitQTKitEnabledPreferenceKey,
         nil];
 
 
@@ -1578,6 +1579,16 @@
     return [self _boolValueForKey:WebKitAVFoundationEnabledKey];
 }
 
+- (void)setQTKitEnabled:(BOOL)flag
+{
+    [self _setBoolValue:flag forKey:WebKitQTKitEnabledPreferenceKey];
+}
+
+- (BOOL)isQTKitEnabled
+{
+    return [self _boolValueForKey:WebKitQTKitEnabledPreferenceKey];
+}
+
 - (void)setHixie76WebSocketProtocolEnabled:(BOOL)flag
 {
 }

Modified: trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h (139898 => 139899)


--- trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h	2013-01-16 19:07:23 UTC (rev 139898)
+++ trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h	2013-01-16 19:19:59 UTC (rev 139899)
@@ -280,6 +280,9 @@
 - (void)setAVFoundationEnabled:(BOOL)flag;
 - (BOOL)isAVFoundationEnabled;
 
+- (void)setQTKitEnabled:(BOOL)flag;
+- (BOOL)isQTKitEnabled;
+
 // WebSocket support depends on ENABLE(WEB_SOCKETS).
 - (void)setHixie76WebSocketProtocolEnabled:(BOOL)flag;
 - (BOOL)isHixie76WebSocketProtocolEnabled;

Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (139898 => 139899)


--- trunk/Source/WebKit/mac/WebView/WebView.mm	2013-01-16 19:07:23 UTC (rev 139898)
+++ trunk/Source/WebKit/mac/WebView/WebView.mm	2013-01-16 19:19:59 UTC (rev 139899)
@@ -1539,6 +1539,9 @@
     settings->setAVFoundationEnabled(false);
 #endif
 #endif
+#if PLATFORM(MAC) || (PLATFORM(QT) && USE(QTKIT))
+    settings->setQTKitEnabled([preferences isQTKitEnabled]);
+#endif
     settings->setMediaPlaybackRequiresUserGesture([preferences mediaPlaybackRequiresUserGesture]);
     settings->setMediaPlaybackAllowsInline([preferences mediaPlaybackAllowsInline]);
     settings->setSuppressesIncrementalRendering([preferences suppressesIncrementalRendering]);

Modified: trunk/Source/WebKit2/ChangeLog (139898 => 139899)


--- trunk/Source/WebKit2/ChangeLog	2013-01-16 19:07:23 UTC (rev 139898)
+++ trunk/Source/WebKit2/ChangeLog	2013-01-16 19:19:59 UTC (rev 139899)
@@ -1,3 +1,20 @@
+2013-01-15  Jer Noble  <[email protected]>
+
+        Add a Setting to disable QTKit media engine.
+        https://bugs.webkit.org/show_bug.cgi?id=106972
+
+        Reviewed by Eric Carlson.
+
+        Add a WebKit2 API to access WebCore QTKitEnabled settings.
+
+        * Shared/WebPreferencesStore.h:
+        * UIProcess/API/C/WKPreferences.cpp:
+        (WKPreferencesSetQTKitEnabled): Pass through to WebCore.
+        (WKPreferencesGetQTKitEnabled): Ditto.
+        * UIProcess/API/C/WKPreferences.h:
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::updatePreferences): Synchronize WebKit2/WebCore settings.
+
 2013-01-16  Kiran Muppala  <[email protected]>
 
         Groundwork to enable process suppression by default on Mac

Modified: trunk/Source/WebKit2/Shared/WebPreferencesStore.h (139898 => 139899)


--- trunk/Source/WebKit2/Shared/WebPreferencesStore.h	2013-01-16 19:07:23 UTC (rev 139898)
+++ trunk/Source/WebKit2/Shared/WebPreferencesStore.h	2013-01-16 19:19:59 UTC (rev 139899)
@@ -137,6 +137,7 @@
     macro(UsesEncodingDetector, usesEncodingDetector, Bool, bool, false) \
     macro(TextAutosizingEnabled, textAutosizingEnabled, Bool, bool, false) \
     macro(AggressiveTileRetentionEnabled, aggressiveTileRetentionEnabled, Bool, bool, false) \
+    macro(QTKitEnabled, isQTKitEnabled, Bool, bool, true) \
     \
 
 #define FOR_EACH_WEBKIT_DOUBLE_PREFERENCE(macro) \

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp (139898 => 139899)


--- trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp	2013-01-16 19:07:23 UTC (rev 139898)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp	2013-01-16 19:19:59 UTC (rev 139899)
@@ -1003,3 +1003,13 @@
 {
     return toImpl(preferencesRef)->aggressiveTileRetentionEnabled();
 }
+
+void WKPreferencesSetQTKitEnabled(WKPreferencesRef preferencesRef, bool enabled)
+{
+    toImpl(preferencesRef)->setQTKitEnabled(enabled);
+}
+
+bool WKPreferencesGetQTKitEnabled(WKPreferencesRef preferencesRef)
+{
+    return toImpl(preferencesRef)->isQTKitEnabled();
+}

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.h (139898 => 139899)


--- trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.h	2013-01-16 19:07:23 UTC (rev 139898)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPreferences.h	2013-01-16 19:19:59 UTC (rev 139899)
@@ -228,6 +228,10 @@
 WK_EXPORT void WKPreferencesSetTextAutosizingEnabled(WKPreferencesRef preferences, bool textAutosizingEnabled);
 WK_EXPORT bool WKPreferencesGetTextAutosizingEnabled(WKPreferencesRef preferences);
 
+// Defaults to true.
+WK_EXPORT void WKPreferencesSetQTKitEnabled(WKPreferencesRef preferencesRef, bool enabled);
+WK_EXPORT bool WKPreferencesGetQTKitEnabled(WKPreferencesRef preferencesRef);
+
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (139898 => 139899)


--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2013-01-16 19:07:23 UTC (rev 139898)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2013-01-16 19:19:59 UTC (rev 139899)
@@ -2370,6 +2370,10 @@
     settings->setAVFoundationEnabled(store.getBoolValueForKey(WebPreferencesKey::isAVFoundationEnabledKey()));
 #endif
 
+#if PLATFORM(MAC) || (PLATFORM(QT) && USE(QTKIT))
+    settings->setQTKitEnabled(store.getBoolValueForKey(WebPreferencesKey::isQTKitEnabledKey()));
+#endif
+
 #if ENABLE(WEB_AUDIO)
     settings->setWebAudioEnabled(store.getBoolValueForKey(WebPreferencesKey::webAudioEnabledKey()));
 #endif
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to