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()