Changeset 188121 in webkit


Ignore:
Timestamp:
Aug 7, 2015 2:51:20 AM (9 years ago)
Author:
Carlos Garcia Campos
Message:

[GStreamer] Do not automatically show PackageKit codec installation notifications
https://bugs.webkit.org/show_bug.cgi?id=135973

Reviewed by Philippe Normand.

Source/WebCore:

Add description parameter to requestInstallMissingPlugins() that
will be used by the API layer.

  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::requestInstallMissingPlugins):

  • html/HTMLMediaElement.h:
  • page/ChromeClient.h:
  • platform/graphics/MediaPlayer.h:

(WebCore::MediaPlayerClient::requestInstallMissingPlugins):

  • platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:

(WebCore::MediaPlayerPrivateGStreamer::handleMessage):

Source/WebKit2:

Add InstallMissingMediaPluginsPermissionRequest to ask the API
layer whether to allow or deny the installation of missing media
plugins. And add a GTK+ implementation based on current permission
request API. Replace the
PageClientImpl::createGstInstallPluginsContext() with
decicePolicyForInstallMissingMediaPluginsPermissionRequest() that
passes the InstallMissingMediaPluginsPermissionRequest object to
the API layer. The allow method receives the
GstInstallPluginsContext now, so that it can be created by the API implementation.

  • PlatformEfl.cmake:
  • PlatformGTK.cmake:
  • UIProcess/API/gtk/PageClientImpl.cpp:

(WebKit::PageClientImpl::decicePolicyForInstallMissingMediaPluginsPermissionRequest):

  • UIProcess/API/gtk/PageClientImpl.h:
  • UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.cpp: Added.

(createGstInstallPluginsContext):
(webkitInstallMissingMediaPluginsPermissionRequestAllow):
(webkitInstallMissingMediaPluginsPermissionRequestDeny):
(webkit_permission_request_interface_init):
(webkitInstallMissingMediaPluginsPermissionRequestDispose):
(webkit_install_missing_media_plugins_permission_request_class_init):
(webkitInstallMissingMediaPluginsPermissionRequestCreate):
(webkit_install_missing_media_plugins_permission_request_get_description):

  • UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.h: Added.
  • UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequestPrivate.h: Added.
  • UIProcess/API/gtk/WebKitWebView.cpp:

(webkitWebViewRequestInstallMissingMediaPlugins):

  • UIProcess/API/gtk/WebKitWebViewPrivate.h:
  • UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
  • UIProcess/API/gtk/docs/webkit2gtk-4.0.types:
  • UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
  • UIProcess/API/gtk/webkit2.h:
  • UIProcess/PageClient.h:
  • UIProcess/WebPageProxy.h:
  • UIProcess/WebPageProxy.messages.in:
  • UIProcess/efl/WebViewEfl.h:
  • UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.cpp: Copied from Source/WebKit2/UIProcess/gstreamer/WebPageProxyGStreamer.cpp.

(WebKit::InstallMissingMediaPluginsPermissionRequest::InstallMissingMediaPluginsPermissionRequest):
(WebKit::InstallMissingMediaPluginsPermissionRequest::~InstallMissingMediaPluginsPermissionRequest):
(WebKit::InstallMissingMediaPluginsPermissionRequest::allow):
(WebKit::InstallMissingMediaPluginsPermissionRequest::deny):
(WebKit::InstallMissingMediaPluginsPermissionRequest::didEndRequestInstallMissingMediaPlugins):

  • UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.h: Copied from Source/WebKit2/WebProcess/WebPage/gstreamer/WebPageGStreamer.cpp.

(WebKit::InstallMissingMediaPluginsPermissionRequest::create):
(WebKit::InstallMissingMediaPluginsPermissionRequest::page):
(WebKit::InstallMissingMediaPluginsPermissionRequest::details):
(WebKit::InstallMissingMediaPluginsPermissionRequest::description):

  • UIProcess/gstreamer/WebPageProxyGStreamer.cpp:

(WebKit::WebPageProxy::requestInstallMissingMediaPlugins):

  • WebProcess/WebCoreSupport/WebChromeClient.cpp:

(WebKit::WebChromeClient::requestInstallMissingMediaPlugins):

  • WebProcess/WebCoreSupport/WebChromeClient.h:
  • WebProcess/WebPage/WebPage.h:
  • WebProcess/WebPage/gstreamer/WebPageGStreamer.cpp:

(WebKit::WebPage::requestInstallMissingMediaPlugins):

Tools:

Handle the missing media plugins installation permission request
in MiniBrowser and add a test case for the new API.

  • MiniBrowser/gtk/BrowserWindow.c:

(webViewDecidePermissionRequest):

  • TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:
  • TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp:

(permissionRequestCallback):
(testInstallMissingPluginsPermissionRequest):
(beforeAll):

  • TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:

(methodCallCallback):

Location:
trunk
Files:
3 added
34 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r188120 r188121  
     12015-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GStreamer] Do not automatically show PackageKit codec installation notifications
     4        https://bugs.webkit.org/show_bug.cgi?id=135973
     5
     6        Reviewed by Philippe Normand.
     7
     8        Add description parameter to requestInstallMissingPlugins() that
     9        will be used by the API layer.
     10
     11        * html/HTMLMediaElement.cpp:
     12        (WebCore::HTMLMediaElement::requestInstallMissingPlugins):
     13        * html/HTMLMediaElement.h:
     14        * page/ChromeClient.h:
     15        * platform/graphics/MediaPlayer.h:
     16        (WebCore::MediaPlayerClient::requestInstallMissingPlugins):
     17        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
     18        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
     19
    1202015-08-07  Doug Russell  <d_russell@apple.com>
    221
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r188049 r188121  
    61336133
    61346134#if USE(GSTREAMER)
    6135 void HTMLMediaElement::requestInstallMissingPlugins(const String& details, MediaPlayerRequestInstallMissingPluginsCallback& callback)
     6135void HTMLMediaElement::requestInstallMissingPlugins(const String& details, const String& description, MediaPlayerRequestInstallMissingPluginsCallback& callback)
    61366136{
    61376137    if (!document().page())
    61386138        return;
    61396139
    6140     document().page()->chrome().client().requestInstallMissingMediaPlugins(details, callback);
     6140    document().page()->chrome().client().requestInstallMissingMediaPlugins(details, description, callback);
    61416141}
    61426142#endif
  • trunk/Source/WebCore/html/HTMLMediaElement.h

    r188041 r188121  
    616616
    617617#if USE(GSTREAMER)
    618     virtual void requestInstallMissingPlugins(const String&, MediaPlayerRequestInstallMissingPluginsCallback&) override final;
     618    virtual void requestInstallMissingPlugins(const String& details, const String& description, MediaPlayerRequestInstallMissingPluginsCallback&) override final;
    619619#endif
    620620
  • trunk/Source/WebCore/page/ChromeClient.h

    r188030 r188121  
    458458    virtual void mediaDocumentNaturalSizeChanged(const WebCore::IntSize&) { }
    459459#if USE(GSTREAMER)
    460     virtual void requestInstallMissingMediaPlugins(const String& /*details*/, MediaPlayerRequestInstallMissingPluginsCallback&) { };
     460    virtual void requestInstallMissingMediaPlugins(const String& /*details*/, const String& /*description*/, MediaPlayerRequestInstallMissingPluginsCallback&) { };
    461461#endif
    462462#endif
  • trunk/Source/WebCore/platform/graphics/MediaPlayer.h

    r187338 r188121  
    285285
    286286#if USE(GSTREAMER)
    287     virtual void requestInstallMissingPlugins(const String&, MediaPlayerRequestInstallMissingPluginsCallback&) { };
     287    virtual void requestInstallMissingPlugins(const String&, const String&, MediaPlayerRequestInstallMissingPluginsCallback&) { };
    288288#endif
    289289};
  • trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp

    r187338 r188121  
    10281028    case GST_MESSAGE_ELEMENT:
    10291029        if (gst_is_missing_plugin_message(message)) {
    1030             GUniquePtr<char> detail(gst_missing_plugin_message_get_installer_detail(message));
    10311030            if (gst_install_plugins_supported()) {
    10321031                m_missingPluginsCallback = MediaPlayerRequestInstallMissingPluginsCallback::create([this](uint32_t result) {
     
    10381037                    changePipelineState(GST_STATE_PAUSED);
    10391038                });
    1040                 m_player->client().requestInstallMissingPlugins(String::fromUTF8(detail.get()), *m_missingPluginsCallback);
     1039                GUniquePtr<char> detail(gst_missing_plugin_message_get_installer_detail(message));
     1040                GUniquePtr<char> description(gst_missing_plugin_message_get_description(message));
     1041                m_player->client().requestInstallMissingPlugins(String::fromUTF8(detail.get()), String::fromUTF8(description.get()), *m_missingPluginsCallback);
    10411042            }
    10421043        }
  • trunk/Source/WebKit2/ChangeLog

    r188115 r188121  
     12015-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GStreamer] Do not automatically show PackageKit codec installation notifications
     4        https://bugs.webkit.org/show_bug.cgi?id=135973
     5
     6        Reviewed by Philippe Normand.
     7
     8        Add InstallMissingMediaPluginsPermissionRequest to ask the API
     9        layer whether to allow or deny the installation of missing media
     10        plugins. And add a GTK+ implementation based on current permission
     11        request API. Replace the
     12        PageClientImpl::createGstInstallPluginsContext() with
     13        decicePolicyForInstallMissingMediaPluginsPermissionRequest() that
     14        passes the InstallMissingMediaPluginsPermissionRequest object to
     15        the API layer. The allow method receives the
     16        GstInstallPluginsContext now, so that it can be created by the API implementation.
     17
     18        * PlatformEfl.cmake:
     19        * PlatformGTK.cmake:
     20        * UIProcess/API/gtk/PageClientImpl.cpp:
     21        (WebKit::PageClientImpl::decicePolicyForInstallMissingMediaPluginsPermissionRequest):
     22        * UIProcess/API/gtk/PageClientImpl.h:
     23        * UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.cpp: Added.
     24        (createGstInstallPluginsContext):
     25        (webkitInstallMissingMediaPluginsPermissionRequestAllow):
     26        (webkitInstallMissingMediaPluginsPermissionRequestDeny):
     27        (webkit_permission_request_interface_init):
     28        (webkitInstallMissingMediaPluginsPermissionRequestDispose):
     29        (webkit_install_missing_media_plugins_permission_request_class_init):
     30        (webkitInstallMissingMediaPluginsPermissionRequestCreate):
     31        (webkit_install_missing_media_plugins_permission_request_get_description):
     32        * UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.h: Added.
     33        * UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequestPrivate.h: Added.
     34        * UIProcess/API/gtk/WebKitWebView.cpp:
     35        (webkitWebViewRequestInstallMissingMediaPlugins):
     36        * UIProcess/API/gtk/WebKitWebViewPrivate.h:
     37        * UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt:
     38        * UIProcess/API/gtk/docs/webkit2gtk-4.0.types:
     39        * UIProcess/API/gtk/docs/webkit2gtk-docs.sgml:
     40        * UIProcess/API/gtk/webkit2.h:
     41        * UIProcess/PageClient.h:
     42        * UIProcess/WebPageProxy.h:
     43        * UIProcess/WebPageProxy.messages.in:
     44        * UIProcess/efl/WebViewEfl.h:
     45        * UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.cpp: Copied from Source/WebKit2/UIProcess/gstreamer/WebPageProxyGStreamer.cpp.
     46        (WebKit::InstallMissingMediaPluginsPermissionRequest::InstallMissingMediaPluginsPermissionRequest):
     47        (WebKit::InstallMissingMediaPluginsPermissionRequest::~InstallMissingMediaPluginsPermissionRequest):
     48        (WebKit::InstallMissingMediaPluginsPermissionRequest::allow):
     49        (WebKit::InstallMissingMediaPluginsPermissionRequest::deny):
     50        (WebKit::InstallMissingMediaPluginsPermissionRequest::didEndRequestInstallMissingMediaPlugins):
     51        * UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.h: Copied from Source/WebKit2/WebProcess/WebPage/gstreamer/WebPageGStreamer.cpp.
     52        (WebKit::InstallMissingMediaPluginsPermissionRequest::create):
     53        (WebKit::InstallMissingMediaPluginsPermissionRequest::page):
     54        (WebKit::InstallMissingMediaPluginsPermissionRequest::details):
     55        (WebKit::InstallMissingMediaPluginsPermissionRequest::description):
     56        * UIProcess/gstreamer/WebPageProxyGStreamer.cpp:
     57        (WebKit::WebPageProxy::requestInstallMissingMediaPlugins):
     58        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
     59        (WebKit::WebChromeClient::requestInstallMissingMediaPlugins):
     60        * WebProcess/WebCoreSupport/WebChromeClient.h:
     61        * WebProcess/WebPage/WebPage.h:
     62        * WebProcess/WebPage/gstreamer/WebPageGStreamer.cpp:
     63        (WebKit::WebPage::requestInstallMissingMediaPlugins):
     64
    1652015-08-06  Beth Dakin  <bdakin@apple.com>
    266
  • trunk/Source/WebKit2/PlatformEfl.cmake

    r188038 r188121  
    184184    UIProcess/efl/WebViewEfl.cpp
    185185
     186    UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.cpp
    186187    UIProcess/gstreamer/WebPageProxyGStreamer.cpp
    187188
  • trunk/Source/WebKit2/PlatformGTK.cmake

    r187338 r188121  
    170170    UIProcess/API/gtk/WebKitInjectedBundleClient.cpp
    171171    UIProcess/API/gtk/WebKitInjectedBundleClient.h
     172    UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.cpp
     173    UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.h
     174    UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequestPrivate.h
    172175    UIProcess/API/gtk/WebKitJavascriptResult.cpp
    173176    UIProcess/API/gtk/WebKitJavascriptResult.h
     
    291294    UIProcess/cairo/BackingStoreCairo.cpp
    292295
     296    UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.cpp
    293297    UIProcess/gstreamer/WebPageProxyGStreamer.cpp
    294298
     
    394398    ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitGeolocationPermissionRequest.h
    395399    ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitHitTestResult.h
     400    ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.h
    396401    ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitJavascriptResult.h
    397402    ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitMimeInfo.h
     
    501506    "${WEBKIT2_DIR}/UIProcess/Network/CustomProtocols/soup"
    502507    "${WEBKIT2_DIR}/UIProcess/Plugins/gtk"
     508    "${WEBKIT2_DIR}/UIProcess/gstreamer"
    503509    "${WEBKIT2_DIR}/UIProcess/gtk"
    504510    "${WEBKIT2_DIR}/UIProcess/soup"
  • trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp

    r187432 r188121  
    4545#include <WebCore/EventNames.h>
    4646#include <WebCore/GtkUtilities.h>
    47 #include <WebCore/PlatformDisplay.h>
    4847#include <wtf/text/CString.h>
    4948#include <wtf/text/WTFString.h>
    50 
    51 #if PLATFORM(X11)
    52 #include <gdk/gdkx.h>
    53 #endif
    5449
    5550using namespace WebCore;
     
    449444}
    450445
    451 GUniquePtr<GstInstallPluginsContext> PageClientImpl::createGstInstallPluginsContext()
    452 {
    453 #if PLATFORM(X11)
    454     if (PlatformDisplay::sharedDisplay().type() == PlatformDisplay::Type::X11) {
    455         GUniquePtr<GstInstallPluginsContext> context(gst_install_plugins_context_new());
    456         gst_install_plugins_context_set_xid(context.get(), GDK_WINDOW_XID(gtk_widget_get_window(m_viewWidget)));
    457         return context;
    458     }
     446#if ENABLE(VIDEO)
     447bool PageClientImpl::decicePolicyForInstallMissingMediaPluginsPermissionRequest(InstallMissingMediaPluginsPermissionRequest& request)
     448{
     449    if (!WEBKIT_IS_WEB_VIEW(m_viewWidget))
     450        return false;
     451
     452    webkitWebViewRequestInstallMissingMediaPlugins(WEBKIT_WEB_VIEW(m_viewWidget), request);
     453    return true;
     454}
    459455#endif
    460456
    461     return nullptr;
    462 }
    463 
    464457} // namespace WebKit
  • trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h

    r187432 r188121  
    143143    virtual void derefView() override;
    144144
    145     virtual GUniquePtr<GstInstallPluginsContext> createGstInstallPluginsContext() override;
     145#if ENABLE(VIDEO)
     146    virtual bool decicePolicyForInstallMissingMediaPluginsPermissionRequest(InstallMissingMediaPluginsPermissionRequest&) override;
     147#endif
    146148
    147149    // Members of PageClientImpl class
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitGeolocationPermissionRequest.cpp

    r135565 r188121  
    3636 * permission to decide whether WebKit should provide the user's
    3737 * location to a website when requested throught the Geolocation API.
     38 *
     39 * When a WebKitGeolocationPermissionRequest is not handled by the user,
     40 * it is denied by default.
    3841 */
    3942
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitNotificationPermissionRequest.cpp

    r177073 r188121  
    3636 * permission to decide whether WebKit should provide the user with
    3737 * notifications through the Web Notification API.
     38 *
     39 * When a WebKitNotificationPermissionRequest is not handled by the user,
     40 * it is denied by default.
     41 *
     42 * Since: 2.8
    3843 */
    3944
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitUserMediaPermissionRequest.cpp

    r177650 r188121  
    3636 * permission to decide whether WebKit should be allowed to access the user's
    3737 * audio and video source devices when requested throught the getUserMedia API.
     38 *
     39 * When a WebKitUserMediaPermissionRequest is not handled by the user,
     40 * it is denied by default.
    3841 *
    3942 * Since: 2.8
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp

    r187220 r188121  
    4343#include "WebKitFullscreenClient.h"
    4444#include "WebKitHitTestResultPrivate.h"
     45#include "WebKitInstallMissingMediaPluginsPermissionRequestPrivate.h"
    4546#include "WebKitJavascriptResultPrivate.h"
    4647#include "WebKitLoaderClient.h"
     
    13521353     * will be the default action.
    13531354     *
    1354      * By default, if the signal is not handled,
    1355      * webkit_permission_request_deny() will be called over the
    1356      * #WebKitPermissionRequest.
     1355     * If the signal is not handled, the @request will be completed automatically
     1356     * by the specific #WebKitPermissionRequest that could allow or deny it. Check the
     1357     * documentation of classes implementing #WebKitPermissionRequest interface to know
     1358     * their default action.
    13571359     *
    13581360     * Returns: %TRUE to stop other handlers from being invoked for the event.
     
    21442146
    21452147    webkitEditorStateChanged(webView->priv->editorState.get(), getPage(webView)->editorState());
     2148}
     2149
     2150void webkitWebViewRequestInstallMissingMediaPlugins(WebKitWebView* webView, InstallMissingMediaPluginsPermissionRequest& request)
     2151{
     2152#if ENABLE(VIDEO)
     2153    GRefPtr<WebKitInstallMissingMediaPluginsPermissionRequest> installMediaPluginsPermissionRequest = adoptGRef(webkitInstallMissingMediaPluginsPermissionRequestCreate(request));
     2154    webkitWebViewMakePermissionRequest(webView, WEBKIT_PERMISSION_REQUEST(installMediaPluginsPermissionRequest.get()));
     2155#else
     2156    ASSERT_NOT_REACHED();
     2157#endif
    21462158}
    21472159
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h

    r187100 r188121  
    2828#define WebKitWebViewPrivate_h
    2929
     30#include "InstallMissingMediaPluginsPermissionRequest.h"
    3031#include "WebContextMenuItemData.h"
    3132#include "WebHitTestResult.h"
     
    6465void webkitWebViewIsPlayingAudioChanged(WebKitWebView*);
    6566void webkitWebViewSelectionDidChange(WebKitWebView*);
     67void webkitWebViewRequestInstallMissingMediaPlugins(WebKitWebView*, WebKit::InstallMissingMediaPluginsPermissionRequest&);
    6668
    6769#endif // WebKitWebViewPrivate_h
  • trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt

    r187543 r188121  
    594594
    595595<SECTION>
     596<FILE>WebKitInstallMissingMediaPluginsPermissionRequest</FILE>
     597WebKitInstallMissingMediaPluginsPermissionRequest
     598webkit_install_missing_media_plugins_permission_request_get_description
     599
     600<SUBSECTION Standard>
     601WebKitInstallMissingMediaPluginsPermissionRequestClass
     602WEBKIT_TYPE_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST
     603WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST
     604WEBKIT_IS_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST
     605WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST_CLASS
     606WEBKIT_IS_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST_CLASS
     607WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST_GET_CLASS
     608
     609<SUBSECTION Private>
     610WebKitInstallMissingMediaPluginsPermissionRequestPrivate
     611webkit_install_missing_media_plugins_permission_request_get_type
     612</SECTION>
     613
     614<SECTION>
    596615<FILE>WebKitNavigationAction</FILE>
    597616WebKitNavigationAction
  • trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0.types

    r187100 r188121  
    3232webkit_website_data_manager_get_type
    3333webkit_editor_state_get_type
     34webkit_install_missing_media_plugins_permission_request_get_type
  • trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml

    r187153 r188121  
    2424    <xi:include href="xml/WebKitPermissionRequest.xml"/>
    2525    <xi:include href="xml/WebKitGeolocationPermissionRequest.xml"/>
     26    <xi:include href="xml/WebKitInstallMissingMediaPluginsPermissionRequest.xml"/>
    2627    <xi:include href="xml/WebKitNavigationAction.xml"/>
    2728    <xi:include href="xml/WebKitUserMediaPermissionRequest.xml"/>
  • trunk/Source/WebKit2/UIProcess/API/gtk/webkit2.h

    r187100 r188121  
    4949#include <webkit2/WebKitGeolocationPermissionRequest.h>
    5050#include <webkit2/WebKitHitTestResult.h>
     51#include <webkit2/WebKitInstallMissingMediaPluginsPermissionRequest.h>
    5152#include <webkit2/WebKitJavascriptResult.h>
    5253#include <webkit2/WebKitMimeInfo.h>
  • trunk/Source/WebKit2/UIProcess/PageClient.h

    r187432 r188121  
    3535#include <wtf/Forward.h>
    3636
    37 #if USE(GSTREAMER)
    38 #include <WebCore/GUniquePtrGStreamer.h>
    39 #endif
    40 
    4137#if PLATFORM(COCOA)
    4238#include "PluginComplexTextInputState.h"
     
    7874#if ENABLE(FULLSCREEN_API)
    7975class WebFullScreenManagerProxyClient;
     76#endif
     77
     78#if USE(GSTREAMER)
     79class InstallMissingMediaPluginsPermissionRequest;
    8080#endif
    8181
     
    342342
    343343#if USE(GSTREAMER)
    344     virtual GUniquePtr<GstInstallPluginsContext> createGstInstallPluginsContext() = 0;
     344    virtual bool decicePolicyForInstallMissingMediaPluginsPermissionRequest(InstallMissingMediaPluginsPermissionRequest&) = 0;
    345345#endif
    346346};
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r188030 r188121  
    14791479    void mediaDocumentNaturalSizeChanged(const WebCore::IntSize&);
    14801480#if USE(GSTREAMER)
    1481     void requestInstallMissingMediaPlugins(const String& details);
     1481    void requestInstallMissingMediaPlugins(const String& details, const String& description);
    14821482#endif
    14831483#endif
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in

    r188030 r188121  
    454454
    455455#if ENABLE(VIDEO) && USE(GSTREAMER)
    456     RequestInstallMissingMediaPlugins(String details)
     456    RequestInstallMissingMediaPlugins(String details, String description)
    457457#endif
    458458}
  • trunk/Source/WebKit2/UIProcess/efl/WebViewEfl.h

    r187432 r188121  
    9999
    100100#if USE(GSTREAMER)
    101     virtual GUniquePtr<GstInstallPluginsContext> createGstInstallPluginsContext() override final { return nullptr; };
     101    virtual bool decicePolicyForInstallMissingMediaPluginsPermissionRequest(InstallMissingMediaPluginsPermissionRequest&) override final { return false; };
    102102#endif
    103103
  • trunk/Source/WebKit2/UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.cpp

    r188120 r188121  
    2525
    2626#include "config.h"
    27 #include "WebPageProxy.h"
     27#include "InstallMissingMediaPluginsPermissionRequest.h"
    2828
    2929#if ENABLE(VIDEO) && USE(GSTREAMER)
    30 
    31 #include "PageClient.h"
    3230#include "WebPageMessages.h"
     31#include "WebPageProxy.h"
     32#include <wtf/text/CString.h>
    3333
    3434namespace WebKit {
    3535
    36 void WebPageProxy::requestInstallMissingMediaPlugins(const String& details)
     36InstallMissingMediaPluginsPermissionRequest::InstallMissingMediaPluginsPermissionRequest(WebPageProxy& page,  const String& details, const String& description)
     37    : m_page(&page)
     38    , m_details(details)
     39    , m_description(description)
    3740{
    38     CString detail = details.utf8();
     41}
     42
     43InstallMissingMediaPluginsPermissionRequest::~InstallMissingMediaPluginsPermissionRequest()
     44{
     45}
     46
     47void InstallMissingMediaPluginsPermissionRequest::allow(GUniquePtr<GstInstallPluginsContext>&& context)
     48{
     49    if (!m_page->isValid())
     50        return;
     51
     52    CString detail = m_details.utf8();
    3953    const char* detailArray[2] = { detail.data(), nullptr };
    4054    ref();
    41     GUniquePtr<GstInstallPluginsContext> context = m_pageClient.createGstInstallPluginsContext();
    4255    GstInstallPluginsReturn result = gst_install_plugins_async(detailArray, context.get(), [](GstInstallPluginsReturn result, gpointer userData) {
    43         RefPtr<WebPageProxy> page = adoptRef(static_cast<WebPageProxy*>(userData));
    44         if (page->isValid())
    45             page->send(Messages::WebPage::DidEndRequestInstallMissingMediaPlugins(static_cast<uint32_t>(result)));
    46     }, this);
     56        RefPtr<InstallMissingMediaPluginsPermissionRequest> request = adoptRef(static_cast<InstallMissingMediaPluginsPermissionRequest*>(userData));
     57        request->didEndRequestInstallMissingMediaPlugins(static_cast<uint32_t>(result));
     58        }, this);
    4759
    4860    if (result != GST_INSTALL_PLUGINS_STARTED_OK) {
    4961        // If the installer didn't start, the callback will not be called, so remove the ref manually.
    5062        deref();
    51         send(Messages::WebPage::DidEndRequestInstallMissingMediaPlugins(static_cast<uint32_t>(result)));
     63        didEndRequestInstallMissingMediaPlugins(static_cast<uint32_t>(result));
    5264        WTFLogAlways("Missing GStreamer Plugin: %s\n", detail.data());
    5365    }
     66}
     67
     68void InstallMissingMediaPluginsPermissionRequest::deny()
     69{
     70    didEndRequestInstallMissingMediaPlugins(static_cast<uint32_t>(GST_INSTALL_PLUGINS_USER_ABORT));
     71}
     72
     73void InstallMissingMediaPluginsPermissionRequest::didEndRequestInstallMissingMediaPlugins(uint32_t result)
     74{
     75    if (!m_page->isValid())
     76        return;
     77
     78    m_page->send(Messages::WebPage::DidEndRequestInstallMissingMediaPlugins(result));
    5479}
    5580
  • trunk/Source/WebKit2/UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.h

    r188120 r188121  
    2424 */
    2525
    26 #include "config.h"
    27 #include "WebPage.h"
     26#ifndef InstallMissingMediaPluginsPermissionRequest_h
     27#define InstallMissingMediaPluginsPermissionRequest_h
    2828
    2929#if ENABLE(VIDEO) && USE(GSTREAMER)
    30 
    31 #include "WebPageProxyMessages.h"
    32 #include <WebCore/MediaPlayerRequestInstallMissingPluginsCallback.h>
    33 #include <gst/pbutils/install-plugins.h>
     30#include <WebCore/GUniquePtrGStreamer.h>
     31#include <wtf/RefCounted.h>
     32#include <wtf/RefPtr.h>
     33#include <wtf/text/WTFString.h>
    3434
    3535namespace WebKit {
    3636
    37 void WebPage::requestInstallMissingMediaPlugins(const String& details, WebCore::MediaPlayerRequestInstallMissingPluginsCallback& callback)
    38 {
    39     if (m_installMediaPluginsCallback) {
    40         callback.complete(GST_INSTALL_PLUGINS_INSTALL_IN_PROGRESS);
    41         return;
     37class WebPageProxy;
     38
     39class InstallMissingMediaPluginsPermissionRequest : public RefCounted<InstallMissingMediaPluginsPermissionRequest> {
     40public:
     41    static Ref<InstallMissingMediaPluginsPermissionRequest> create(WebPageProxy& page, const String& details, const String& description)
     42    {
     43        return adoptRef(*new InstallMissingMediaPluginsPermissionRequest(page, details, description));
    4244    }
     45    ~InstallMissingMediaPluginsPermissionRequest();
    4346
    44     m_installMediaPluginsCallback = &callback;
    45     send(Messages::WebPageProxy::RequestInstallMissingMediaPlugins(details));
    46 }
     47    void allow(GUniquePtr<GstInstallPluginsContext>&& = nullptr);
     48    void deny();
    4749
    48 void WebPage::didEndRequestInstallMissingMediaPlugins(uint32_t result)
    49 {
    50     if (!m_installMediaPluginsCallback)
    51         return;
     50    WebPageProxy& page() const { return *m_page; }
     51    const String& details() const { return m_details; }
     52    const String& description() const { return m_description; }
    5253
    53     m_installMediaPluginsCallback->complete(result);
    54     m_installMediaPluginsCallback = nullptr;
    55 }
     54private:
     55    InstallMissingMediaPluginsPermissionRequest(WebPageProxy&, const String& details, const String& description);
     56
     57    void didEndRequestInstallMissingMediaPlugins(uint32_t result);
     58
     59    RefPtr<WebPageProxy> m_page;
     60    String m_details;
     61    String m_description;
     62};
    5663
    5764} // namespace WebKit
    5865
    5966#endif // ENABLE(VIDEO) && USE(GSTREAMER)
     67#endif // InstallMissingMediaPluginsPermissionRequest_h
  • trunk/Source/WebKit2/UIProcess/gstreamer/WebPageProxyGStreamer.cpp

    r187432 r188121  
    2828
    2929#if ENABLE(VIDEO) && USE(GSTREAMER)
    30 
     30#include "InstallMissingMediaPluginsPermissionRequest.h"
    3131#include "PageClient.h"
    32 #include "WebPageMessages.h"
    3332
    3433namespace WebKit {
    3534
    36 void WebPageProxy::requestInstallMissingMediaPlugins(const String& details)
     35void WebPageProxy::requestInstallMissingMediaPlugins(const String& details, const String& description)
    3736{
    38     CString detail = details.utf8();
    39     const char* detailArray[2] = { detail.data(), nullptr };
    40     ref();
    41     GUniquePtr<GstInstallPluginsContext> context = m_pageClient.createGstInstallPluginsContext();
    42     GstInstallPluginsReturn result = gst_install_plugins_async(detailArray, context.get(), [](GstInstallPluginsReturn result, gpointer userData) {
    43         RefPtr<WebPageProxy> page = adoptRef(static_cast<WebPageProxy*>(userData));
    44         if (page->isValid())
    45             page->send(Messages::WebPage::DidEndRequestInstallMissingMediaPlugins(static_cast<uint32_t>(result)));
    46     }, this);
     37    RefPtr<InstallMissingMediaPluginsPermissionRequest> request = InstallMissingMediaPluginsPermissionRequest::create(*this, details, description);
     38    if (m_pageClient.decicePolicyForInstallMissingMediaPluginsPermissionRequest(*request))
     39        return;
    4740
    48     if (result != GST_INSTALL_PLUGINS_STARTED_OK) {
    49         // If the installer didn't start, the callback will not be called, so remove the ref manually.
    50         deref();
    51         send(Messages::WebPage::DidEndRequestInstallMissingMediaPlugins(static_cast<uint32_t>(result)));
    52         WTFLogAlways("Missing GStreamer Plugin: %s\n", detail.data());
    53     }
     41    request->deny();
    5442}
    5543
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp

    r188030 r188121  
    11711171
    11721172#if USE(GSTREAMER)
    1173 void WebChromeClient::requestInstallMissingMediaPlugins(const String& details, WebCore::MediaPlayerRequestInstallMissingPluginsCallback& callback)
    1174 {
    1175     m_page->requestInstallMissingMediaPlugins(details, callback);
     1173void WebChromeClient::requestInstallMissingMediaPlugins(const String& details, const String& description, WebCore::MediaPlayerRequestInstallMissingPluginsCallback& callback)
     1174{
     1175    m_page->requestInstallMissingMediaPlugins(details, description, callback);
    11761176}
    11771177#endif
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h

    r188030 r188121  
    328328    virtual void mediaDocumentNaturalSizeChanged(const WebCore::IntSize&) override;
    329329#if USE(GSTREAMER)
    330     virtual void requestInstallMissingMediaPlugins(const String&, WebCore::MediaPlayerRequestInstallMissingPluginsCallback&) override;
     330    virtual void requestInstallMissingMediaPlugins(const String& /*details*/, const String& /*description*/, WebCore::MediaPlayerRequestInstallMissingPluginsCallback&) override;
    331331#endif
    332332#endif
  • trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h

    r188030 r188121  
    910910    void mediaDocumentNaturalSizeChanged(const WebCore::IntSize&);
    911911#if USE(GSTREAMER)
    912     void requestInstallMissingMediaPlugins(const String& details, WebCore::MediaPlayerRequestInstallMissingPluginsCallback&);
     912    void requestInstallMissingMediaPlugins(const String& details, const String& description, WebCore::MediaPlayerRequestInstallMissingPluginsCallback&);
    913913#endif
    914914#endif
  • trunk/Source/WebKit2/WebProcess/WebPage/gstreamer/WebPageGStreamer.cpp

    r187338 r188121  
    3535namespace WebKit {
    3636
    37 void WebPage::requestInstallMissingMediaPlugins(const String& details, WebCore::MediaPlayerRequestInstallMissingPluginsCallback& callback)
     37void WebPage::requestInstallMissingMediaPlugins(const String& details, const String& description, WebCore::MediaPlayerRequestInstallMissingPluginsCallback& callback)
    3838{
    3939    if (m_installMediaPluginsCallback) {
     
    4343
    4444    m_installMediaPluginsCallback = &callback;
    45     send(Messages::WebPageProxy::RequestInstallMissingMediaPlugins(details));
     45    send(Messages::WebPageProxy::RequestInstallMissingMediaPlugins(details, description));
    4646}
    4747
  • trunk/Tools/ChangeLog

    r188113 r188121  
     12015-08-07  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GStreamer] Do not automatically show PackageKit codec installation notifications
     4        https://bugs.webkit.org/show_bug.cgi?id=135973
     5
     6        Reviewed by Philippe Normand.
     7
     8        Handle the missing media plugins installation permission request
     9        in MiniBrowser and add a test case for the new API.
     10
     11        * MiniBrowser/gtk/BrowserWindow.c:
     12        (webViewDecidePermissionRequest):
     13        * TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt:
     14        * TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp:
     15        (permissionRequestCallback):
     16        (testInstallMissingPluginsPermissionRequest):
     17        (beforeAll):
     18        * TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp:
     19        (methodCallCallback):
     20
    1212015-08-06  Filip Pizlo  <fpizlo@apple.com>
    222
  • trunk/Tools/MiniBrowser/gtk/BrowserWindow.c

    r187541 r188121  
    455455        } else if (is_for_video_device)
    456456            dialog_message = "video";
     457    } else if (WEBKIT_IS_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST(request)) {
     458        dialog_title = "Media plugin missing request";
     459        dialog_message_format = "The media backend was unable to find a plugin to play the requested media:\n%s.\nAllow to search and install the missing plugin?";
     460        dialog_message = webkit_install_missing_media_plugins_permission_request_get_description(WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST(request));
    457461    } else
    458462        return FALSE;
  • trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt

    r187024 r188121  
    2727    ${ATSPI_INCLUDE_DIRS}
    2828    ${GLIB_INCLUDE_DIRS}
     29    ${GSTREAMER_INCLUDE_DIRS}
    2930    ${GTK3_INCLUDE_DIRS}
    3031    ${GTK_UNIX_PRINT_INCLUDE_DIRS}
  • trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp

    r185502 r188121  
    181181}
    182182
     183static gboolean permissionRequestCallback(WebKitWebView*, WebKitPermissionRequest* request, WebViewTest* test)
     184{
     185    if (!WEBKIT_IS_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST(request))
     186        return FALSE;
     187
     188    test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(request));
     189    WebKitInstallMissingMediaPluginsPermissionRequest* missingPluginsRequest = WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST(request);
     190    g_assert(webkit_install_missing_media_plugins_permission_request_get_description(missingPluginsRequest));
     191    webkit_permission_request_deny(request);
     192    test->quitMainLoop();
     193}
     194
     195static void testInstallMissingPluginsPermissionRequest(WebViewTest* test, gconstpointer)
     196{
     197    GUniquePtr<char> extensionBusName(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", Test::s_webExtensionID));
     198    GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy(extensionBusName.get(),
     199        "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", test->m_mainLoop));
     200    GRefPtr<GVariant> result = adoptGRef(g_dbus_proxy_call_sync(proxy.get(), "RemoveAVPluginsFromGSTRegistry",
     201        nullptr, G_DBUS_CALL_FLAGS_NONE, -1, nullptr, nullptr));
     202
     203    test->showInWindowAndWaitUntilMapped();
     204
     205    gulong permissionRequestSignalID = g_signal_connect(test->m_webView, "permission-request", G_CALLBACK(permissionRequestCallback), test);
     206    // FIXME: the base URI needs to finish with / to work, that shouldn't happen.
     207    GUniquePtr<char> baseURI(g_strconcat("file://", Test::getResourcesDir(Test::WebKit2Resources).data(), "/", nullptr));
     208    test->loadHtml("<html><body><video src=\"test.mp4\" autoplay></video></body></html>", baseURI.get());
     209    g_main_loop_run(test->m_mainLoop);
     210    g_signal_handler_disconnect(test->m_webView, permissionRequestSignalID);
     211}
     212
    183213void beforeAll()
    184214{
     
    192222    WebViewTest::add("WebKitWebExtension", "window-object-cleared", testWebExtensionWindowObjectCleared);
    193223    WebViewTest::add("WebKitWebExtension", "isolated-world", testWebExtensionIsolatedWorld);
     224    WebViewTest::add("WebKitWebView", "install-missing-plugins-permission-request", testInstallMissingPluginsPermissionRequest);
    194225}
    195226
  • trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp

    r185502 r188121  
    2323#include <JavaScriptCore/JSRetainPtr.h>
    2424#include <gio/gio.h>
     25#include <gst/gst.h>
    2526#include <stdlib.h>
    2627#include <string.h>
     
    5253    "  <method name='GetProcessIdentifier'>"
    5354    "   <arg type='u' name='identifier' direction='out'/>"
     55    "  </method>"
     56    "  <method name='RemoveAVPluginsFromGSTRegistry'>"
    5457    "  </method>"
    5558    "  <signal name='DocumentLoaded'/>"
     
    302305        g_dbus_method_invocation_return_value(invocation,
    303306            g_variant_new("(u)", static_cast<guint32>(getCurrentProcessID())));
     307    } else if (!g_strcmp0(methodName, "RemoveAVPluginsFromGSTRegistry")) {
     308        gst_init(nullptr, nullptr);
     309        static const char* avPlugins[] = { "libav", "omx", "vaapi", nullptr };
     310        GstRegistry* registry = gst_registry_get();
     311        for (unsigned i = 0; avPlugins[i]; ++i) {
     312            if (GstPlugin* plugin = gst_registry_find_plugin(registry, avPlugins[i])) {
     313                gst_registry_remove_plugin(registry, plugin);
     314                gst_object_unref(plugin);
     315            }
     316        }
     317        g_dbus_method_invocation_return_value(invocation, nullptr);
    304318    }
    305319}
Note: See TracChangeset for help on using the changeset viewer.