Title: [139437] trunk
Revision
139437
Author
[email protected]
Date
2013-01-11 06:37:29 -0800 (Fri, 11 Jan 2013)

Log Message

[Qt][WK1] Web Audio support
https://bugs.webkit.org/show_bug.cgi?id=106651

Reviewed by Jocelyn Turcotte.

Source/WebCore:

Convert _javascript_ Uint8Array to QByteArray. This conversion is necessary to support testRunner.setAudioData().

* bridge/qt/qt_runtime.cpp:
(JSC::Bindings::isJSUint8Array):
(Bindings):
(JSC::Bindings::valueRealType):
(JSC::Bindings::convertValueToQVariant):

Source/WebKit/qt:

Expose setting to enable WebAudio at runtime.

* Api/qwebsettings.cpp:
(QWebSettingsPrivate::apply):
(QWebSettings::QWebSettings):
* Api/qwebsettings.h:

Tools:

Implements support for dumping audio data in DumpRenderTree.

Adds WebAudio to toggleable features in QtTestBrowser.

Enables LEGACY_WEB_AUDIO. This feature is required for 2/3 of the web audio regression tests. It is enabled by default
because it has no effect when WEB_AUDIO is not enabled. This combination matches the settings in FeatureList.pm.

* DumpRenderTree/qt/DumpRenderTreeQt.cpp:
(WebCore::DumpRenderTree::dump):
* DumpRenderTree/qt/TestRunnerQt.cpp:
(TestRunner::reset):
(TestRunner::overridePreference):
(TestRunner::setAudioData):
* DumpRenderTree/qt/TestRunnerQt.h:
(TestRunner::shouldDumpAsAudio):
(TestRunner::audioData):
(TestRunner):
* QtTestBrowser/launcherwindow.cpp:
(LauncherWindow::applyPrefs):
(LauncherWindow::createChrome):
(LauncherWindow::toggleWebAudio):
* QtTestBrowser/launcherwindow.h:
(WindowOptions::WindowOptions):
(WindowOptions):
(LauncherWindow):
* qmake/mkspecs/features/features.prf:
* qmake/mkspecs/features/features.pri:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (139436 => 139437)


--- trunk/Source/WebCore/ChangeLog	2013-01-11 14:34:06 UTC (rev 139436)
+++ trunk/Source/WebCore/ChangeLog	2013-01-11 14:37:29 UTC (rev 139437)
@@ -1,3 +1,18 @@
+2013-01-11  Allan Sandfeld Jensen  <[email protected]>
+
+        [Qt][WK1] Web Audio support
+        https://bugs.webkit.org/show_bug.cgi?id=106651
+
+        Reviewed by Jocelyn Turcotte.
+
+        Convert _javascript_ Uint8Array to QByteArray. This conversion is necessary to support testRunner.setAudioData().
+
+        * bridge/qt/qt_runtime.cpp:
+        (JSC::Bindings::isJSUint8Array):
+        (Bindings):
+        (JSC::Bindings::valueRealType):
+        (JSC::Bindings::convertValueToQVariant):
+
 2013-01-11  Anton Vayvod  <[email protected]>
 
         Text Autosizing - elements much narrower than its parent autosizing clusters should be autosized separately.

Modified: trunk/Source/WebCore/bridge/qt/qt_runtime.cpp (139436 => 139437)


--- trunk/Source/WebCore/bridge/qt/qt_runtime.cpp	2013-01-11 14:34:06 UTC (rev 139436)
+++ trunk/Source/WebCore/bridge/qt/qt_runtime.cpp	2013-01-11 14:37:29 UTC (rev 139437)
@@ -103,7 +103,7 @@
     QObj,
     Object,
     Null,
-    RTUint8ClampedArray
+    RTUint8Array
 } JSRealType;
 
 #if defined(QTWK_RUNTIME_CONVERSION_DEBUG) || defined(QTWK_RUNTIME_MATCH_DEBUG)
@@ -145,9 +145,9 @@
     customRuntimeConversions()->insert(qtMetaTypeId, conversion);
 }
 
-static bool isJSUint8ClampedArray(JSObjectRef object)
+static bool isJSUint8Array(JSObjectRef object)
 {
-    return toJS(object)->inherits(&JSUint8ClampedArray::s_info);
+    return toJS(object)->inherits(&JSUint8Array::s_info);
 }
 
 static bool isJSArray(JSObjectRef object)
@@ -180,8 +180,8 @@
 
     JSObjectRef object = JSValueToObject(context, value, exception);
 
-    if (isJSUint8ClampedArray(object))
-        return RTUint8ClampedArray;
+    if (isJSUint8Array(object))
+        return RTUint8Array;
     if (isJSArray(object))
             return Array;
     if (isJSDate(object))
@@ -356,7 +356,7 @@
             case QObj:
                 hint = QMetaType::QObjectStar;
                 break;
-            case RTUint8ClampedArray:
+            case RTUint8Array:
                 hint = QMetaType::QByteArray;
                 break;
             case Array:
@@ -490,8 +490,8 @@
         }
 
         case QMetaType::QByteArray: {
-            if (type == RTUint8ClampedArray) {
-                WTF::Uint8ClampedArray* arr = toUint8ClampedArray(toJS(toJS(context), value));
+            if (type == RTUint8Array) {
+                WTF::Uint8Array* arr = toUint8Array(toJS(toJS(context), value));
                 ret = QVariant(QByteArray(reinterpret_cast<const char*>(arr->data()), arr->length()));
                 dist = 0;
             } else {

Modified: trunk/Source/WebKit/qt/Api/qwebsettings.cpp (139436 => 139437)


--- trunk/Source/WebKit/qt/Api/qwebsettings.cpp	2013-01-11 14:34:06 UTC (rev 139436)
+++ trunk/Source/WebKit/qt/Api/qwebsettings.cpp	2013-01-11 14:37:29 UTC (rev 139437)
@@ -164,6 +164,10 @@
         settings->setAcceleratedCompositingForCanvasEnabled(value);
 #endif
 #endif
+#if ENABLE(WEB_AUDIO)
+        value = attributes.value(QWebSettings::WebAudioEnabled, global->attributes.value(QWebSettings::WebAudioEnabled));
+        settings->setWebAudioEnabled(value);
+#endif
 
         value = attributes.value(QWebSettings::CSSRegionsEnabled,
                                  global->attributes.value(QWebSettings::CSSRegionsEnabled));
@@ -534,6 +538,7 @@
     d->attributes.insert(QWebSettings::LocalContentCanAccessFileUrls, true);
     d->attributes.insert(QWebSettings::AcceleratedCompositingEnabled, true);
     d->attributes.insert(QWebSettings::WebGLEnabled, true);
+    d->attributes.insert(QWebSettings::WebAudioEnabled, false);
     d->attributes.insert(QWebSettings::CSSRegionsEnabled, true);
     d->attributes.insert(QWebSettings::CSSGridLayoutEnabled, false);
     d->attributes.insert(QWebSettings::HyperlinkAuditingEnabled, false);

Modified: trunk/Source/WebKit/qt/Api/qwebsettings.h (139436 => 139437)


--- trunk/Source/WebKit/qt/Api/qwebsettings.h	2013-01-11 14:34:06 UTC (rev 139436)
+++ trunk/Source/WebKit/qt/Api/qwebsettings.h	2013-01-11 14:37:29 UTC (rev 139437)
@@ -84,7 +84,8 @@
         CSSGridLayoutEnabled,
         ScrollAnimatorEnabled,
         CaretBrowsingEnabled,
-        NotificationsEnabled
+        NotificationsEnabled,
+        WebAudioEnabled
     };
     enum WebGraphic {
         MissingImageGraphic,

Modified: trunk/Source/WebKit/qt/ChangeLog (139436 => 139437)


--- trunk/Source/WebKit/qt/ChangeLog	2013-01-11 14:34:06 UTC (rev 139436)
+++ trunk/Source/WebKit/qt/ChangeLog	2013-01-11 14:37:29 UTC (rev 139437)
@@ -1,3 +1,17 @@
+2013-01-11  Allan Sandfeld Jensen  <[email protected]>
+
+        [Qt][WK1] Web Audio support
+        https://bugs.webkit.org/show_bug.cgi?id=106651
+
+        Reviewed by Jocelyn Turcotte.
+
+        Expose setting to enable WebAudio at runtime.
+
+        * Api/qwebsettings.cpp:
+        (QWebSettingsPrivate::apply):
+        (QWebSettings::QWebSettings):
+        * Api/qwebsettings.h:
+
 2013-01-08  Mark Lam  <[email protected]>
 
         Removed the need for the ProposedDatabase mechanism.

Modified: trunk/Tools/ChangeLog (139436 => 139437)


--- trunk/Tools/ChangeLog	2013-01-11 14:34:06 UTC (rev 139436)
+++ trunk/Tools/ChangeLog	2013-01-11 14:37:29 UTC (rev 139437)
@@ -1,3 +1,38 @@
+2013-01-11  Allan Sandfeld Jensen  <[email protected]>
+
+        [Qt][WK1] Web Audio support
+        https://bugs.webkit.org/show_bug.cgi?id=106651
+
+        Reviewed by Jocelyn Turcotte.
+
+        Implements support for dumping audio data in DumpRenderTree.
+
+        Adds WebAudio to toggleable features in QtTestBrowser.
+
+        Enables LEGACY_WEB_AUDIO. This feature is required for 2/3 of the web audio regression tests. It is enabled by default
+        because it has no effect when WEB_AUDIO is not enabled. This combination matches the settings in FeatureList.pm.
+
+        * DumpRenderTree/qt/DumpRenderTreeQt.cpp:
+        (WebCore::DumpRenderTree::dump):
+        * DumpRenderTree/qt/TestRunnerQt.cpp:
+        (TestRunner::reset):
+        (TestRunner::overridePreference):
+        (TestRunner::setAudioData):
+        * DumpRenderTree/qt/TestRunnerQt.h:
+        (TestRunner::shouldDumpAsAudio):
+        (TestRunner::audioData):
+        (TestRunner):
+        * QtTestBrowser/launcherwindow.cpp:
+        (LauncherWindow::applyPrefs):
+        (LauncherWindow::createChrome):
+        (LauncherWindow::toggleWebAudio):
+        * QtTestBrowser/launcherwindow.h:
+        (WindowOptions::WindowOptions):
+        (WindowOptions):
+        (LauncherWindow):
+        * qmake/mkspecs/features/features.prf:
+        * qmake/mkspecs/features/features.pri:
+
 2013-01-11  Raphael Kubo da Costa  <[email protected]>
 
         Unreviewed jhbuild-related fix after r139431.

Modified: trunk/Tools/DumpRenderTree/qt/DumpRenderTreeQt.cpp (139436 => 139437)


--- trunk/Tools/DumpRenderTree/qt/DumpRenderTreeQt.cpp	2013-01-11 14:34:06 UTC (rev 139436)
+++ trunk/Tools/DumpRenderTree/qt/DumpRenderTreeQt.cpp	2013-01-11 14:37:29 UTC (rev 139437)
@@ -916,14 +916,19 @@
 
     // Dump render text...
     QString resultString;
-    if (m_controller->shouldDumpAsText())
+    QString resultContentType = "text/plain";
+    QByteArray resultData;
+    if (m_controller->shouldDumpAsAudio()) {
+        resultContentType = "audio/wav";
+        resultData = m_controller->audioData();
+    } else if (m_controller->shouldDumpAsText())
         resultString = dumpFramesAsText(mainFrame);
     else {
         resultString = DumpRenderTreeSupportQt::frameRenderTreeDump(mainFrame->handle());
         resultString += dumpFrameScrollPosition(mainFrame);
     }
     if (!resultString.isEmpty()) {
-        fprintf(stdout, "Content-Type: text/plain\n");
+        fprintf(stdout, "Content-Type: %s\n", resultContentType.toUtf8().constData());
         fprintf(stdout, "%s", resultString.toUtf8().constData());
 
         if (m_controller->shouldDumpBackForwardList()) {
@@ -933,7 +938,10 @@
                 fprintf(stdout, "%s", dumpBackForwardList(page).toUtf8().constData());
             }
         }
-
+    } else if (!resultData.isEmpty()) {
+        fprintf(stdout, "Content-Type: %s\n", resultContentType.toUtf8().constData());
+        fprintf(stdout, "Content-Transfer-Encoding: base64\n");
+        fprintf(stdout, "%s", resultData.toBase64().constData());
     } else
         printf("ERROR: nil result from %s", methodNameStringForFailedTest(m_controller));
 

Modified: trunk/Tools/DumpRenderTree/qt/TestRunnerQt.cpp (139436 => 139437)


--- trunk/Tools/DumpRenderTree/qt/TestRunnerQt.cpp	2013-01-11 14:34:06 UTC (rev 139436)
+++ trunk/Tools/DumpRenderTree/qt/TestRunnerQt.cpp	2013-01-11 14:37:29 UTC (rev 139437)
@@ -53,6 +53,7 @@
     m_hasDumped = false;
     m_loadFinished = false;
     m_textDump = false;
+    m_audioDump = false;
     m_shouldDumpPixels = true;
     m_dumpBackForwardList = false;
     m_dumpChildrenAsText = false;
@@ -76,6 +77,7 @@
     m_isGeolocationPermissionSet = false;
     m_isPrinting = false;
     m_geolocationPermission = false;
+    m_audioData.clear();
 
     DumpRenderTreeSupportQt::dumpEditingCallbacks(false);
     DumpRenderTreeSupportQt::dumpFrameLoader(false);
@@ -677,6 +679,8 @@
         settings->setAttribute(QWebSettings::AcceleratedCompositingEnabled, value.toBool());
     else if (name == "WebKitDisplayImagesKey")
         settings->setAttribute(QWebSettings::AutoLoadImages, value.toBool());
+    else if (name == "WebKitWebAudioEnabled")
+        settings->setAttribute(QWebSettings::WebAudioEnabled, value.toBool());
     else
         printf("ERROR: TestRunner::overridePreference() does not support the '%s' preference\n",
             name.toLatin1().data());
@@ -968,5 +972,11 @@
         globalSettings->setThirdPartyCookiePolicy(QWebSettings::AlwaysAllowThirdPartyCookies);
 }
 
+void TestRunner::setAudioData(const QByteArray& audioData)
+{
+    m_audioData = audioData;
+    m_audioDump = true;
+}
+
 const unsigned TestRunner::maxViewWidth = 800;
 const unsigned TestRunner::maxViewHeight = 600;

Modified: trunk/Tools/DumpRenderTree/qt/TestRunnerQt.h (139436 => 139437)


--- trunk/Tools/DumpRenderTree/qt/TestRunnerQt.h	2013-01-11 14:34:06 UTC (rev 139436)
+++ trunk/Tools/DumpRenderTree/qt/TestRunnerQt.h	2013-01-11 14:37:29 UTC (rev 139437)
@@ -63,6 +63,7 @@
 
     bool shouldDisallowIncreaseForApplicationCacheQuota() const { return m_disallowIncreaseForApplicationCacheQuota; }
     bool shouldDumpAsText() const { return m_textDump; }
+    bool shouldDumpAsAudio() const { return m_audioDump; }
     bool shouldDumpPixels() const { return m_shouldDumpPixels; }
     bool shouldDumpBackForwardList() const { return m_dumpBackForwardList; }
     bool shouldDumpChildrenAsText() const { return m_dumpChildrenAsText; }
@@ -78,6 +79,8 @@
     bool ignoreReqestForPermission() const { return m_ignoreDesktopNotification; }
     bool isPrinting() { return m_isPrinting; }
 
+    const QByteArray& audioData() const { return m_audioData; }
+
     void reset();
 
     static const unsigned int maxViewWidth;
@@ -275,6 +278,8 @@
     void setAlwaysAcceptCookies(bool);
     void setAlwaysBlockCookies(bool);
 
+    void setAudioData(const QByteArray&);
+
 private Q_SLOTS:
     void processWork();
 
@@ -284,6 +289,7 @@
 private:
     bool m_hasDumped;
     bool m_textDump;
+    bool m_audioDump;
     bool m_shouldDumpPixels;
     bool m_disallowIncreaseForApplicationCacheQuota;
     bool m_dumpBackForwardList;
@@ -312,6 +318,8 @@
     QStringList m_desktopNotificationAllowedOrigins;
     bool m_ignoreDesktopNotification;
 
+    QByteArray m_audioData;
+
     bool m_shouldTimeout;
     int m_timeout;
 };

Modified: trunk/Tools/QtTestBrowser/launcherwindow.cpp (139436 => 139437)


--- trunk/Tools/QtTestBrowser/launcherwindow.cpp	2013-01-11 14:34:06 UTC (rev 139436)
+++ trunk/Tools/QtTestBrowser/launcherwindow.cpp	2013-01-11 14:37:29 UTC (rev 139437)
@@ -217,6 +217,7 @@
     settings->setAttribute(QWebSettings::TiledBackingStoreEnabled, m_windowOptions.useTiledBackingStore);
     settings->setAttribute(QWebSettings::FrameFlatteningEnabled, m_windowOptions.useFrameFlattening);
     settings->setAttribute(QWebSettings::WebGLEnabled, m_windowOptions.useWebGL);
+    m_windowOptions.useWebAudio = settings->testAttribute(QWebSettings::WebAudioEnabled);
 
     if (!isGraphicsBased())
         return;
@@ -312,7 +313,18 @@
     QAction* toggleWebGL = toolsMenu->addAction("Toggle WebGL", this, SLOT(toggleWebGL(bool)));
     toggleWebGL->setCheckable(true);
     toggleWebGL->setChecked(settings->testAttribute(QWebSettings::WebGLEnabled));
+#if !ENABLE(WEBGL)
+    toggleWebGL->setEnabled(false);
+#endif
 
+    QAction* toggleWebAudio = toolsMenu->addAction("Toggle WebAudio", this, SLOT(toggleWebAudio(bool)));
+    toggleWebAudio->setCheckable(true);
+#if ENABLE(WEB_AUDIO)
+    toggleWebAudio->setChecked(m_windowOptions.useWebAudio);
+#else
+    toggleWebAudio->setEnabled(false);
+#endif
+
     QAction* spatialNavigationAction = toolsMenu->addAction("Toggle Spatial Navigation", this, SLOT(toggleSpatialNavigation(bool)));
     spatialNavigationAction->setCheckable(true);
     spatialNavigationAction->setShortcut(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_S));
@@ -860,6 +872,12 @@
     page()->settings()->setAttribute(QWebSettings::WebGLEnabled, toggle);
 }
 
+void LauncherWindow::toggleWebAudio(bool toggle)
+{
+    m_windowOptions.useWebAudio = toggle;
+    page()->settings()->setAttribute(QWebSettings::WebAudioEnabled, toggle);
+}
+
 void LauncherWindow::animatedFlip()
 {
     qobject_cast<WebViewGraphicsBased*>(m_view)->animatedFlip();

Modified: trunk/Tools/QtTestBrowser/launcherwindow.h (139436 => 139437)


--- trunk/Tools/QtTestBrowser/launcherwindow.h	2013-01-11 14:34:06 UTC (rev 139436)
+++ trunk/Tools/QtTestBrowser/launcherwindow.h	2013-01-11 14:37:29 UTC (rev 139437)
@@ -68,6 +68,7 @@
         , useCompositing(true)
         , useTiledBackingStore(false)
         , useWebGL(false)
+        , useWebAudio(false)
         , useFrameFlattening(false)
         , cacheWebView(false)
         , showFrameRate(false)
@@ -92,6 +93,7 @@
     bool useCompositing;
     bool useTiledBackingStore;
     bool useWebGL;
+    bool useWebAudio;
     bool useFrameFlattening;
     bool cacheWebView;
     bool showFrameRate;
@@ -152,6 +154,7 @@
     void toggleTiledBackingStore(bool toggle);
     void toggleResizesToContents(bool toggle);
     void toggleWebGL(bool toggle);
+    void toggleWebAudio(bool toggle);
     void toggleSpatialNavigation(bool b);
     void toggleFullScreenMode(bool enable);
     void toggleFrameFlattening(bool toggle);

Modified: trunk/Tools/qmake/mkspecs/features/features.prf (139436 => 139437)


--- trunk/Tools/qmake/mkspecs/features/features.prf	2013-01-11 14:34:06 UTC (rev 139436)
+++ trunk/Tools/qmake/mkspecs/features/features.prf	2013-01-11 14:37:29 UTC (rev 139437)
@@ -168,5 +168,8 @@
     # WK2's plugin process code requires NPAPI
     !enable?(netscape_plugin_api): WEBKIT_CONFIG -= plugin_process
 
+    # Web Audio requires GStreamer.
+    !use?(gstreamer): WEBKIT_CONFIG -= web_audio
+
     export(WEBKIT_CONFIG)
 }

Modified: trunk/Tools/qmake/mkspecs/features/features.pri (139436 => 139437)


--- trunk/Tools/qmake/mkspecs/features/features.pri	2013-01-11 14:34:06 UTC (rev 139436)
+++ trunk/Tools/qmake/mkspecs/features/features.pri	2013-01-11 14:37:29 UTC (rev 139437)
@@ -71,6 +71,7 @@
     ENABLE_LEGACY_NOTIFICATIONS=1 \
     ENABLE_LEGACY_VIEWPORT_ADAPTION=1 \
     ENABLE_LEGACY_VENDOR_PREFIXES=1 \
+    ENABLE_LEGACY_WEB_AUDIO=1 \
     ENABLE_LINK_PREFETCH=0 \
     ENABLE_LINK_PRERENDER=0 \
     ENABLE_MATHML=0 \
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to