Changeset 262321 in webkit


Ignore:
Timestamp:
May 29, 2020 3:35:27 PM (4 years ago)
Author:
commit-queue@webkit.org
Message:

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

Patch by Jan-Michael Brummer <jan.brummer@tabos.org> 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):

Location:
trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r262318 r262321  
     12020-05-29  Jan-Michael Brummer  <jan.brummer@tabos.org>
     2
     3        [GTK][WPE] API for WebView audio mute support
     4        https://bugs.webkit.org/show_bug.cgi?id=176119
     5
     6        Reviewed by Michael Catanzaro.
     7
     8        Test implemented in TestWebKitWebView.
     9
     10        * UIProcess/API/glib/WebKitWebView.cpp:
     11        (webkitWebViewSetProperty):
     12        (webkitWebViewGetProperty):
     13        (webkit_web_view_class_init):
     14        (webkit_web_view_set_is_muted):
     15        (webkit_web_view_is_muted):
     16        * UIProcess/API/gtk/WebKitWebView.h:
     17        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
     18        * UIProcess/API/wpe/WebKitWebView.h:
     19        * UIProcess/API/wpe/docs/wpe-1.0-sections.txt:
     20        * UIProcess/WebPageProxy.h:
     21        (WebKit::WebPageProxy::isAudioMuted const):
     22
    1232020-05-29  Darin Adler  <darin@apple.com>
    224
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp

    r261781 r262321  
    200200    PROP_AUTOMATION_PRESENTATION_TYPE,
    201201    PROP_EDITABLE,
    202     PROP_PAGE_ID
     202    PROP_PAGE_ID,
     203    PROP_IS_MUTED
    203204};
    204205
     
    835836        webkit_web_view_set_editable(webView, g_value_get_boolean(value));
    836837        break;
     838    case PROP_IS_MUTED:
     839        webkit_web_view_set_is_muted(webView, g_value_get_boolean(value));
     840        break;
    837841    default:
    838842        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, paramSpec);
     
    897901        g_value_set_uint64(value, webkit_web_view_get_page_id(webView));
    898902        break;
     903    case PROP_IS_MUTED:
     904        g_value_set_boolean(value, webkit_web_view_get_is_muted(webView));
     905        break;
    899906    default:
    900907        G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, paramSpec);
     
    12651272            0, G_MAXUINT64, 0,
    12661273            WEBKIT_PARAM_READABLE));
     1274
     1275    /**
     1276     * WebKitWebView:is-muted:
     1277     *
     1278     * Whether the #WebKitWebView audio is muted. When %TRUE, audio is silenced.
     1279     * It may still be playing, i.e. #WebKitWebView:is-playing-audio may be %TRUE.
     1280     *
     1281     * Since: 2.30
     1282     */
     1283    g_object_class_install_property(
     1284        gObjectClass,
     1285        PROP_IS_MUTED,
     1286        g_param_spec_boolean(
     1287            "is-muted",
     1288            "Is Muted",
     1289            _("Whether the view audio is muted"),
     1290            FALSE,
     1291            WEBKIT_PARAM_READWRITE));
    12671292
    12681293    /**
     
    31653190
    31663191    return getPage(webView).isPlayingAudio();
     3192}
     3193
     3194/**
     3195 * webkit_web_view_set_is_muted:
     3196 * @web_view: a #WebKitWebView
     3197 * @muted: mute flag
     3198 *
     3199 * Sets the mute state of @web_view.
     3200 *
     3201 * Since: 2.30
     3202 */
     3203void webkit_web_view_set_is_muted(WebKitWebView* webView, gboolean muted)
     3204{
     3205    g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
     3206
     3207    if (webkit_web_view_get_is_muted (webView) == muted)
     3208        return;
     3209
     3210    getPage(webView).setMuted(muted ? WebCore::MediaProducer::AudioIsMuted : WebCore::MediaProducer::NoneMuted);
     3211    g_object_notify(G_OBJECT(webView), "is-muted");
     3212}
     3213
     3214/**
     3215 * webkit_web_view_get_is_muted:
     3216 * @web_view: a #WebKitWebView
     3217 *
     3218 * Gets the mute state of @web_view.
     3219 *
     3220 * Returns: %TRUE if @web_view audio is muted or %FALSE is audio is not muted.
     3221 *
     3222 * Since: 2.30
     3223 */
     3224gboolean webkit_web_view_get_is_muted(WebKitWebView* webView)
     3225{
     3226    g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), FALSE);
     3227
     3228    return getPage(webView).isAudioMuted();
    31673229}
    31683230
  • trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebView.h

    r253749 r262321  
    351351webkit_web_view_is_playing_audio                     (WebKitWebView             *web_view);
    352352
     353WEBKIT_API void
     354webkit_web_view_set_is_muted                         (WebKitWebView             *web_view,
     355                                                      gboolean                   muted);
     356
     357WEBKIT_API gboolean
     358webkit_web_view_get_is_muted                         (WebKitWebView             *web_view);
     359
    353360WEBKIT_API guint64
    354361webkit_web_view_get_page_id                          (WebKitWebView             *web_view);
  • trunk/Source/WebKit/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt

    r261986 r262321  
    241241webkit_web_view_is_loading
    242242webkit_web_view_is_playing_audio
     243webkit_web_view_set_is_muted
     244webkit_web_view_get_is_muted
    243245webkit_web_view_get_estimated_load_progress
    244246webkit_web_view_get_custom_charset
  • trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebView.h

    r254828 r262321  
    340340webkit_web_view_is_playing_audio                     (WebKitWebView             *web_view);
    341341
     342WEBKIT_API void
     343webkit_web_view_set_is_muted                         (WebKitWebView             *web_view,
     344                                                      gboolean                   muted);
     345
     346WEBKIT_API gboolean
     347webkit_web_view_get_is_muted                         (WebKitWebView             *web_view);
     348
    342349WEBKIT_API guint64
    343350webkit_web_view_get_page_id                          (WebKitWebView             *web_view);
  • trunk/Source/WebKit/UIProcess/API/wpe/docs/wpe-1.0-sections.txt

    r261986 r262321  
    216216webkit_web_view_is_loading
    217217webkit_web_view_is_playing_audio
     218webkit_web_view_set_is_muted
     219webkit_web_view_get_is_muted
    218220webkit_web_view_get_estimated_load_progress
    219221webkit_web_view_get_custom_charset
  • trunk/Source/WebKit/UIProcess/WebPageProxy.h

    r262184 r262321  
    13091309    void setMediaVolume(float);
    13101310    void setMuted(WebCore::MediaProducer::MutedStateFlags);
     1311    bool isAudioMuted() const { return m_mutedState & WebCore::MediaProducer::AudioIsMuted; };
    13111312    void setMayStartMediaWhenInWindow(bool);
    13121313    bool mayStartMediaWhenInWindow() const { return m_mayStartMediaWhenInWindow; }
  • trunk/Tools/ChangeLog

    r262318 r262321  
     12020-05-29  Jan-Michael Brummer  <jan.brummer@tabos.org>
     2
     3        [GTK][WPE] API for WebView audio mute support
     4        https://bugs.webkit.org/show_bug.cgi?id=176119
     5
     6        Reviewed by Michael Catanzaro.
     7
     8        * MiniBrowser/gtk/BrowserTab.c:
     9        (audioClicked):
     10        (audioMutedChanged):
     11        (browserTabConstructed):
     12        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
     13        (testWebViewIsAudioMuted):
     14        (beforeAll):
     15
    1162020-05-29  Darin Adler  <darin@apple.com>
    217
  • trunk/Tools/MiniBrowser/gtk/BrowserTab.c

    r261912 r262321  
    5858    GtkWidget *titleLabel;
    5959    GtkWidget *titleSpinner;
     60    GtkWidget *titleAudioButton;
    6061    GtkWidget *titleCloseButton;
    6162};
     
    366367}
    367368
     369static void audioClicked(GtkButton *button, gpointer userData)
     370{
     371    BrowserTab *tab = BROWSER_TAB(userData);
     372    gboolean muted = webkit_web_view_get_is_muted(tab->webView);
     373
     374    webkit_web_view_set_is_muted(tab->webView, !muted);
     375}
     376
     377static void audioMutedChanged(WebKitWebView *webView, GParamSpec *pspec, gpointer userData)
     378{
     379    BrowserTab *tab = BROWSER_TAB(userData);
     380    gboolean muted = webkit_web_view_get_is_muted(tab->webView);
     381    GtkWidget *image = gtk_image_new_from_icon_name(muted ? "audio-volume-muted-symbolic" : "audio-volume-high-symbolic", GTK_ICON_SIZE_MENU);
     382
     383    gtk_button_set_image(GTK_BUTTON(tab->titleAudioButton), image);
     384}
     385
    368386static void browserTabSetProperty(GObject *object, guint propId, const GValue *value, GParamSpec *pspec)
    369387{
     
    468486    gtk_widget_show(hbox);
    469487
     488    tab->titleAudioButton = gtk_button_new();
     489    g_signal_connect(tab->titleAudioButton, "clicked", G_CALLBACK(audioClicked), tab);
     490    gtk_button_set_relief(GTK_BUTTON(tab->titleAudioButton), GTK_RELIEF_NONE);
     491    gtk_widget_set_focus_on_click(tab->titleAudioButton, FALSE);
     492
     493    GtkWidget *image = gtk_image_new_from_icon_name("audio-volume-high-symbolic", GTK_ICON_SIZE_MENU);
     494    gtk_button_set_image(GTK_BUTTON(tab->titleAudioButton), image);
     495    gtk_widget_show(image);
     496
     497    gtk_box_pack_start(GTK_BOX(tab->titleBox), tab->titleAudioButton, FALSE, FALSE, 0);
     498
    470499    tab->titleCloseButton = gtk_button_new();
    471500    g_signal_connect_swapped(tab->titleCloseButton, "clicked", G_CALLBACK(gtk_widget_destroy), tab);
     
    473502    gtk_widget_set_focus_on_click(tab->titleCloseButton, FALSE);
    474503
    475     GtkWidget *image = gtk_image_new_from_icon_name("window-close-symbolic", GTK_ICON_SIZE_MENU);
     504    image = gtk_image_new_from_icon_name("window-close-symbolic", GTK_ICON_SIZE_MENU);
    476505    gtk_container_add(GTK_CONTAINER(tab->titleCloseButton), image);
    477506    gtk_widget_show(image);
     
    487516    g_signal_connect(tab->webView, "permission-request", G_CALLBACK(decidePermissionRequest), tab);
    488517    g_signal_connect(tab->webView, "run-color-chooser", G_CALLBACK(runColorChooserCallback), tab);
     518
     519    g_object_bind_property(tab->webView, "is-playing-audio", tab->titleAudioButton, "visible", G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE);
     520    g_signal_connect(tab->webView, "notify::is-muted", G_CALLBACK(audioMutedChanged), tab);
    489521#endif
    490522
  • trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp

    r246790 r262321  
    11341134}
    11351135
     1136static void testWebViewIsAudioMuted(WebViewTest* test, gconstpointer)
     1137{
     1138    g_assert_false(webkit_web_view_get_is_muted(test->m_webView));
     1139    webkit_web_view_set_is_muted(test->m_webView, TRUE);
     1140    g_assert_true(webkit_web_view_get_is_muted(test->m_webView));
     1141    webkit_web_view_set_is_muted(test->m_webView, FALSE);
     1142    g_assert_false(webkit_web_view_get_is_muted(test->m_webView));
     1143}
     1144
    11361145static void testWebViewBackgroundColor(WebViewTest* test, gconstpointer)
    11371146{
     
    13901399    FrameDisplayedTest::add("WebKitWebView", "frame-displayed", testWebViewFrameDisplayed);
    13911400#endif
     1401    WebViewTest::add("WebKitWebView", "is-audio-muted", testWebViewIsAudioMuted);
    13921402}
    13931403
Note: See TracChangeset for help on using the changeset viewer.