Title: [262321] trunk
Revision
262321
Author
[email protected]
Date
2020-05-29 15:35:27 -0700 (Fri, 29 May 2020)

Log Message

[GTK][WPE] API for WebView audio mute support
https://bugs.webkit.org/show_bug.cgi?id=176119

Patch by Jan-Michael Brummer <[email protected]> on 2020-05-29
Reviewed by Michael Catanzaro.

Source/WebKit:

Test implemented in TestWebKitWebView.

* UIProcess/API/glib/WebKitWebView.cpp:
(webkitWebViewSetProperty):
(webkitWebViewGetProperty):
(webkit_web_view_class_init):
(webkit_web_view_set_is_muted):
(webkit_web_view_is_muted):
* UIProcess/API/gtk/WebKitWebView.h:
* UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
* UIProcess/API/wpe/WebKitWebView.h:
* UIProcess/API/wpe/docs/wpe-1.0-sections.txt:
* UIProcess/WebPageProxy.h:
(WebKit::WebPageProxy::isAudioMuted const):

Tools:

* MiniBrowser/gtk/BrowserTab.c:
(audioClicked):
(audioMutedChanged):
(browserTabConstructed):
* TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
(testWebViewIsAudioMuted):
(beforeAll):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (262320 => 262321)


--- trunk/Source/WebKit/ChangeLog	2020-05-29 22:02:47 UTC (rev 262320)
+++ trunk/Source/WebKit/ChangeLog	2020-05-29 22:35:27 UTC (rev 262321)
@@ -1,3 +1,25 @@
+2020-05-29  Jan-Michael Brummer  <[email protected]>
+
+        [GTK][WPE] API for WebView audio mute support
+        https://bugs.webkit.org/show_bug.cgi?id=176119
+
+        Reviewed by Michael Catanzaro.
+
+        Test implemented in TestWebKitWebView.
+
+        * UIProcess/API/glib/WebKitWebView.cpp:
+        (webkitWebViewSetProperty):
+        (webkitWebViewGetProperty):
+        (webkit_web_view_class_init):
+        (webkit_web_view_set_is_muted):
+        (webkit_web_view_is_muted):
+        * UIProcess/API/gtk/WebKitWebView.h:
+        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
+        * UIProcess/API/wpe/WebKitWebView.h:
+        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:
+        * UIProcess/WebPageProxy.h:
+        (WebKit::WebPageProxy::isAudioMuted const):
+
 2020-05-29  Darin Adler  <[email protected]>
 
         Remove things from FeatureDefines.xcconfig that are covered by PlatformEnableCocoa.h

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp (262320 => 262321)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp	2020-05-29 22:02:47 UTC (rev 262320)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp	2020-05-29 22:35:27 UTC (rev 262321)
@@ -199,7 +199,8 @@
     PROP_IS_CONTROLLED_BY_AUTOMATION,
     PROP_AUTOMATION_PRESENTATION_TYPE,
     PROP_EDITABLE,
-    PROP_PAGE_ID
+    PROP_PAGE_ID,
+    PROP_IS_MUTED
 };
 
 typedef HashMap<uint64_t, GRefPtr<WebKitWebResource> > LoadingResourcesMap;
@@ -834,6 +835,9 @@
     case PROP_EDITABLE:
         webkit_web_view_set_editable(webView, g_value_get_boolean(value));
         break;
+    case PROP_IS_MUTED:
+        webkit_web_view_set_is_muted(webView, g_value_get_boolean(value));
+        break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, paramSpec);
     }
@@ -896,6 +900,9 @@
     case PROP_PAGE_ID:
         g_value_set_uint64(value, webkit_web_view_get_page_id(webView));
         break;
+    case PROP_IS_MUTED:
+        g_value_set_boolean(value, webkit_web_view_get_is_muted(webView));
+        break;
     default:
         G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, paramSpec);
     }
@@ -1266,6 +1273,24 @@
             WEBKIT_PARAM_READABLE));
 
     /**
+     * WebKitWebView:is-muted:
+     *
+     * Whether the #WebKitWebView audio is muted. When %TRUE, audio is silenced.
+     * It may still be playing, i.e. #WebKitWebView:is-playing-audio may be %TRUE.
+     *
+     * Since: 2.30
+     */
+    g_object_class_install_property(
+        gObjectClass,
+        PROP_IS_MUTED,
+        g_param_spec_boolean(
+            "is-muted",
+            "Is Muted",
+            _("Whether the view audio is muted"),
+            FALSE,
+            WEBKIT_PARAM_READWRITE));
+
+    /**
      * WebKitWebView::load-changed:
      * @web_view: the #WebKitWebView on which the signal is emitted
      * @load_event: the #WebKitLoadEvent
@@ -3167,6 +3192,43 @@
 }
 
 /**
+ * webkit_web_view_set_is_muted:
+ * @web_view: a #WebKitWebView
+ * @muted: mute flag
+ *
+ * Sets the mute state of @web_view.
+ *
+ * Since: 2.30
+ */
+void webkit_web_view_set_is_muted(WebKitWebView* webView, gboolean muted)
+{
+    g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
+
+    if (webkit_web_view_get_is_muted (webView) == muted)
+        return;
+
+    getPage(webView).setMuted(muted ? WebCore::MediaProducer::AudioIsMuted : WebCore::MediaProducer::NoneMuted);
+    g_object_notify(G_OBJECT(webView), "is-muted");
+}
+
+/**
+ * webkit_web_view_get_is_muted:
+ * @web_view: a #WebKitWebView
+ *
+ * Gets the mute state of @web_view.
+ *
+ * Returns: %TRUE if @web_view audio is muted or %FALSE is audio is not muted.
+ *
+ * Since: 2.30
+ */
+gboolean webkit_web_view_get_is_muted(WebKitWebView* webView)
+{
+    g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), FALSE);
+
+    return getPage(webView).isAudioMuted();
+}
+
+/**
  * webkit_web_view_go_back:
  * @web_view: a #WebKitWebView
  *

Modified: trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebView.h (262320 => 262321)


--- trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebView.h	2020-05-29 22:02:47 UTC (rev 262320)
+++ trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebView.h	2020-05-29 22:35:27 UTC (rev 262321)
@@ -350,6 +350,13 @@
 WEBKIT_API gboolean
 webkit_web_view_is_playing_audio                     (WebKitWebView             *web_view);
 
+WEBKIT_API void
+webkit_web_view_set_is_muted                         (WebKitWebView             *web_view,
+                                                      gboolean                   muted);
+
+WEBKIT_API gboolean
+webkit_web_view_get_is_muted                         (WebKitWebView             *web_view);
+
 WEBKIT_API guint64
 webkit_web_view_get_page_id                          (WebKitWebView             *web_view);
 

Modified: trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt (262320 => 262321)


--- trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt	2020-05-29 22:02:47 UTC (rev 262320)
+++ trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt	2020-05-29 22:35:27 UTC (rev 262321)
@@ -240,6 +240,8 @@
 webkit_web_view_stop_loading
 webkit_web_view_is_loading
 webkit_web_view_is_playing_audio
+webkit_web_view_set_is_muted
+webkit_web_view_get_is_muted
 webkit_web_view_get_estimated_load_progress
 webkit_web_view_get_custom_charset
 webkit_web_view_set_custom_charset

Modified: trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebView.h (262320 => 262321)


--- trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebView.h	2020-05-29 22:02:47 UTC (rev 262320)
+++ trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebView.h	2020-05-29 22:35:27 UTC (rev 262321)
@@ -339,6 +339,13 @@
 WEBKIT_API gboolean
 webkit_web_view_is_playing_audio                     (WebKitWebView             *web_view);
 
+WEBKIT_API void
+webkit_web_view_set_is_muted                         (WebKitWebView             *web_view,
+                                                      gboolean                   muted);
+
+WEBKIT_API gboolean
+webkit_web_view_get_is_muted                         (WebKitWebView             *web_view);
+
 WEBKIT_API guint64
 webkit_web_view_get_page_id                          (WebKitWebView             *web_view);
 

Modified: trunk/Source/WebKit/UIProcess/API/wpe/docs/wpe-1.0-sections.txt (262320 => 262321)


--- trunk/Source/WebKit/UIProcess/API/wpe/docs/wpe-1.0-sections.txt	2020-05-29 22:02:47 UTC (rev 262320)
+++ trunk/Source/WebKit/UIProcess/API/wpe/docs/wpe-1.0-sections.txt	2020-05-29 22:35:27 UTC (rev 262321)
@@ -215,6 +215,8 @@
 webkit_web_view_stop_loading
 webkit_web_view_is_loading
 webkit_web_view_is_playing_audio
+webkit_web_view_set_is_muted
+webkit_web_view_get_is_muted
 webkit_web_view_get_estimated_load_progress
 webkit_web_view_get_custom_charset
 webkit_web_view_set_custom_charset

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (262320 => 262321)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.h	2020-05-29 22:02:47 UTC (rev 262320)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h	2020-05-29 22:35:27 UTC (rev 262321)
@@ -1308,6 +1308,7 @@
 
     void setMediaVolume(float);
     void setMuted(WebCore::MediaProducer::MutedStateFlags);
+    bool isAudioMuted() const { return m_mutedState & WebCore::MediaProducer::AudioIsMuted; };
     void setMayStartMediaWhenInWindow(bool);
     bool mayStartMediaWhenInWindow() const { return m_mayStartMediaWhenInWindow; }
     void setMediaCaptureEnabled(bool);

Modified: trunk/Tools/ChangeLog (262320 => 262321)


--- trunk/Tools/ChangeLog	2020-05-29 22:02:47 UTC (rev 262320)
+++ trunk/Tools/ChangeLog	2020-05-29 22:35:27 UTC (rev 262321)
@@ -1,3 +1,18 @@
+2020-05-29  Jan-Michael Brummer  <[email protected]>
+
+        [GTK][WPE] API for WebView audio mute support
+        https://bugs.webkit.org/show_bug.cgi?id=176119
+
+        Reviewed by Michael Catanzaro.
+
+        * MiniBrowser/gtk/BrowserTab.c:
+        (audioClicked):
+        (audioMutedChanged):
+        (browserTabConstructed):
+        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
+        (testWebViewIsAudioMuted):
+        (beforeAll):
+
 2020-05-29  Darin Adler  <[email protected]>
 
         Remove things from FeatureDefines.xcconfig that are covered by PlatformEnableCocoa.h

Modified: trunk/Tools/MiniBrowser/gtk/BrowserTab.c (262320 => 262321)


--- trunk/Tools/MiniBrowser/gtk/BrowserTab.c	2020-05-29 22:02:47 UTC (rev 262320)
+++ trunk/Tools/MiniBrowser/gtk/BrowserTab.c	2020-05-29 22:35:27 UTC (rev 262321)
@@ -57,6 +57,7 @@
     GtkWidget *titleBox;
     GtkWidget *titleLabel;
     GtkWidget *titleSpinner;
+    GtkWidget *titleAudioButton;
     GtkWidget *titleCloseButton;
 };
 
@@ -365,6 +366,23 @@
     return FALSE;
 }
 
+static void audioClicked(GtkButton *button, gpointer userData)
+{
+    BrowserTab *tab = BROWSER_TAB(userData);
+    gboolean muted = webkit_web_view_get_is_muted(tab->webView);
+
+    webkit_web_view_set_is_muted(tab->webView, !muted);
+}
+
+static void audioMutedChanged(WebKitWebView *webView, GParamSpec *pspec, gpointer userData)
+{
+    BrowserTab *tab = BROWSER_TAB(userData);
+    gboolean muted = webkit_web_view_get_is_muted(tab->webView);
+    GtkWidget *image = gtk_image_new_from_icon_name(muted ? "audio-volume-muted-symbolic" : "audio-volume-high-symbolic", GTK_ICON_SIZE_MENU);
+
+    gtk_button_set_image(GTK_BUTTON(tab->titleAudioButton), image);
+}
+
 static void browserTabSetProperty(GObject *object, guint propId, const GValue *value, GParamSpec *pspec)
 {
     BrowserTab *tab = BROWSER_TAB(object);
@@ -467,12 +485,23 @@
     gtk_box_pack_start(GTK_BOX(tab->titleBox), hbox, TRUE, TRUE, 0);
     gtk_widget_show(hbox);
 
+    tab->titleAudioButton = gtk_button_new();
+    g_signal_connect(tab->titleAudioButton, "clicked", G_CALLBACK(audioClicked), tab);
+    gtk_button_set_relief(GTK_BUTTON(tab->titleAudioButton), GTK_RELIEF_NONE);
+    gtk_widget_set_focus_on_click(tab->titleAudioButton, FALSE);
+
+    GtkWidget *image = gtk_image_new_from_icon_name("audio-volume-high-symbolic", GTK_ICON_SIZE_MENU);
+    gtk_button_set_image(GTK_BUTTON(tab->titleAudioButton), image);
+    gtk_widget_show(image);
+
+    gtk_box_pack_start(GTK_BOX(tab->titleBox), tab->titleAudioButton, FALSE, FALSE, 0);
+
     tab->titleCloseButton = gtk_button_new();
     g_signal_connect_swapped(tab->titleCloseButton, "clicked", G_CALLBACK(gtk_widget_destroy), tab);
     gtk_button_set_relief(GTK_BUTTON(tab->titleCloseButton), GTK_RELIEF_NONE);
     gtk_widget_set_focus_on_click(tab->titleCloseButton, FALSE);
 
-    GtkWidget *image = gtk_image_new_from_icon_name("window-close-symbolic", GTK_ICON_SIZE_MENU);
+    image = gtk_image_new_from_icon_name("window-close-symbolic", GTK_ICON_SIZE_MENU);
     gtk_container_add(GTK_CONTAINER(tab->titleCloseButton), image);
     gtk_widget_show(image);
 
@@ -486,6 +515,9 @@
     g_signal_connect(tab->webView, "load-failed-with-tls-errors", G_CALLBACK(loadFailedWithTLSerrors), tab);
     g_signal_connect(tab->webView, "permission-request", G_CALLBACK(decidePermissionRequest), tab);
     g_signal_connect(tab->webView, "run-color-chooser", G_CALLBACK(runColorChooserCallback), tab);
+
+    g_object_bind_property(tab->webView, "is-playing-audio", tab->titleAudioButton, "visible", G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
+    g_signal_connect(tab->webView, "notify::is-muted", G_CALLBACK(audioMutedChanged), tab);
 #endif
 
     WebKitWebInspector *inspector = webkit_web_view_get_inspector(tab->webView);

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp (262320 => 262321)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp	2020-05-29 22:02:47 UTC (rev 262320)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp	2020-05-29 22:35:27 UTC (rev 262321)
@@ -1133,6 +1133,15 @@
     g_assert_false(webkit_web_view_is_playing_audio(test->m_webView));
 }
 
+static void testWebViewIsAudioMuted(WebViewTest* test, gconstpointer)
+{
+    g_assert_false(webkit_web_view_get_is_muted(test->m_webView));
+    webkit_web_view_set_is_muted(test->m_webView, TRUE);
+    g_assert_true(webkit_web_view_get_is_muted(test->m_webView));
+    webkit_web_view_set_is_muted(test->m_webView, FALSE);
+    g_assert_false(webkit_web_view_get_is_muted(test->m_webView));
+}
+
 static void testWebViewBackgroundColor(WebViewTest* test, gconstpointer)
 {
 #if PLATFORM(GTK)
@@ -1389,6 +1398,7 @@
 #if PLATFORM(WPE)
     FrameDisplayedTest::add("WebKitWebView", "frame-displayed", testWebViewFrameDisplayed);
 #endif
+    WebViewTest::add("WebKitWebView", "is-audio-muted", testWebViewIsAudioMuted);
 }
 
 void afterAll()
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to