WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Updated patch
wk2-missing-plugins-permission-request.diff (text/plain), 42.59 KB, created by
Carlos Garcia Campos
on 2015-07-28 01:43:33 PDT
(
hide
)
Description:
Updated patch
Filename:
MIME Type:
Creator:
Carlos Garcia Campos
Created:
2015-07-28 01:43:33 PDT
Size:
42.59 KB
patch
obsolete
>diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog >index 99724ea..e8d3686 100644 >--- a/Source/WebKit2/ChangeLog >+++ b/Source/WebKit2/ChangeLog >@@ -1,3 +1,58 @@ >+2015-07-28 Carlos Garcia Campos <cgarcia@igalia.com> >+ >+ [GStreamer] Do not automatically show PackageKit codec installation notifications >+ https://bugs.webkit.org/show_bug.cgi?id=135973 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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_details): >+ * 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/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/UIProcess/gstreamer/WebPageProxyGStreamer.cpp. >+ (WebKit::InstallMissingMediaPluginsPermissionRequest::create): >+ (WebKit::InstallMissingMediaPluginsPermissionRequest::page): >+ (WebKit::InstallMissingMediaPluginsPermissionRequest::details): >+ * UIProcess/gstreamer/WebPageProxyGStreamer.cpp: >+ (WebKit::WebPageProxy::requestInstallMissingMediaPlugins): >+ > 2015-07-27 Carlos Garcia Campos <cgarcia@igalia.com> > > [GTK] Pass a GstInstallPluginsContext to gst_install_plugins_async >diff --git a/Source/WebKit2/PlatformEfl.cmake b/Source/WebKit2/PlatformEfl.cmake >index adbbf34..a6bb74a 100644 >--- a/Source/WebKit2/PlatformEfl.cmake >+++ b/Source/WebKit2/PlatformEfl.cmake >@@ -183,6 +183,7 @@ list(APPEND WebKit2_SOURCES > UIProcess/efl/WebUIPopupMenuClient.cpp > UIProcess/efl/WebViewEfl.cpp > >+ UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.cpp > UIProcess/gstreamer/WebPageProxyGStreamer.cpp > > UIProcess/soup/WebCookieManagerProxySoup.cpp >diff --git a/Source/WebKit2/PlatformGTK.cmake b/Source/WebKit2/PlatformGTK.cmake >index 6113e61..b3b790b 100644 >--- a/Source/WebKit2/PlatformGTK.cmake >+++ b/Source/WebKit2/PlatformGTK.cmake >@@ -169,6 +169,9 @@ list(APPEND WebKit2_SOURCES > UIProcess/API/gtk/WebKitHitTestResultPrivate.h > UIProcess/API/gtk/WebKitInjectedBundleClient.cpp > UIProcess/API/gtk/WebKitInjectedBundleClient.h >+ UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.cpp >+ UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.h >+ UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequestPrivate.h > UIProcess/API/gtk/WebKitJavascriptResult.cpp > UIProcess/API/gtk/WebKitJavascriptResult.h > UIProcess/API/gtk/WebKitJavascriptResultPrivate.h >@@ -290,6 +293,7 @@ list(APPEND WebKit2_SOURCES > > UIProcess/cairo/BackingStoreCairo.cpp > >+ UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.cpp > UIProcess/gstreamer/WebPageProxyGStreamer.cpp > > UIProcess/gtk/DragAndDropHandler.cpp >@@ -393,6 +397,7 @@ set(WebKit2GTK_INSTALLED_HEADERS > ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitForwardDeclarations.h > ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitGeolocationPermissionRequest.h > ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitHitTestResult.h >+ ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.h > ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitJavascriptResult.h > ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitMimeInfo.h > ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitNavigationAction.h >@@ -500,6 +505,7 @@ list(APPEND WebKit2_INCLUDE_DIRECTORIES > "${WEBKIT2_DIR}/UIProcess/API/gtk" > "${WEBKIT2_DIR}/UIProcess/Network/CustomProtocols/soup" > "${WEBKIT2_DIR}/UIProcess/Plugins/gtk" >+ "${WEBKIT2_DIR}/UIProcess/gstreamer" > "${WEBKIT2_DIR}/UIProcess/gtk" > "${WEBKIT2_DIR}/UIProcess/soup" > "${WEBKIT2_DIR}/WebProcess/InjectedBundle/API/gtk" >diff --git a/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp b/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp >index 5070ae2..aafc3e5 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp >+++ b/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp >@@ -44,14 +44,9 @@ > #include <WebCore/Cursor.h> > #include <WebCore/EventNames.h> > #include <WebCore/GtkUtilities.h> >-#include <WebCore/PlatformDisplay.h> > #include <wtf/text/CString.h> > #include <wtf/text/WTFString.h> > >-#if PLATFORM(X11) >-#include <gdk/gdkx.h> >-#endif >- > using namespace WebCore; > > namespace WebKit { >@@ -448,17 +443,15 @@ void PageClientImpl::derefView() > g_object_unref(m_viewWidget); > } > >-GUniquePtr<GstInstallPluginsContext> PageClientImpl::createGstInstallPluginsContext() >+#if ENABLE(VIDEO) >+bool PageClientImpl::decicePolicyForInstallMissingMediaPluginsPermissionRequest(InstallMissingMediaPluginsPermissionRequest& request) > { >-#if PLATFORM(X11) >- if (PlatformDisplay::sharedDisplay().type() == PlatformDisplay::Type::X11) { >- GUniquePtr<GstInstallPluginsContext> context(gst_install_plugins_context_new()); >- gst_install_plugins_context_set_xid(context.get(), GDK_WINDOW_XID(gtk_widget_get_window(m_viewWidget))); >- return context; >- } >-#endif >+ if (!WEBKIT_IS_WEB_VIEW(m_viewWidget)) >+ return false; > >- return nullptr; >+ webkitWebViewRequestInstallMissingMediaPlugins(WEBKIT_WEB_VIEW(m_viewWidget), request); >+ return true; > } >+#endif > > } // namespace WebKit >diff --git a/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h b/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h >index 0259031..ce58759 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h >+++ b/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h >@@ -142,7 +142,9 @@ private: > virtual void refView() override; > virtual void derefView() override; > >- virtual GUniquePtr<GstInstallPluginsContext> createGstInstallPluginsContext() override; >+#if ENABLE(VIDEO) >+ virtual bool decicePolicyForInstallMissingMediaPluginsPermissionRequest(InstallMissingMediaPluginsPermissionRequest&) override; >+#endif > > // Members of PageClientImpl class > GtkWidget* m_viewWidget; >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.cpp >new file mode 100644 >index 0000000..d37e9b8 >--- /dev/null >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.cpp >@@ -0,0 +1,165 @@ >+/* >+ * Copyright (C) 2015 Igalia S.L. >+ * >+ * This library is free software; you can redistribute it and/or >+ * modify it under the terms of the GNU Library General Public >+ * License as published by the Free Software Foundation; either >+ * version 2 of the License, or (at your option) any later version. >+ * >+ * This library is distributed in the hope that it will be useful, >+ * but WITHOUT ANY WARRANTY; without even the implied warranty of >+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >+ * Library General Public License for more details. >+ * >+ * You should have received a copy of the GNU Library General Public License >+ * along with this library; see the file COPYING.LIB. If not, write to >+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, >+ * Boston, MA 02110-1301, USA. >+ */ >+ >+#include "config.h" >+#include "WebKitInstallMissingMediaPluginsPermissionRequest.h" >+ >+#include "WebKitInstallMissingMediaPluginsPermissionRequestPrivate.h" >+#include "WebKitPermissionRequest.h" >+#include "WebPageProxy.h" >+ >+#if ENABLE(VIDEO) >+#include <WebCore/PlatformDisplay.h> >+#include <gtk/gtk.h> >+#if PLATFORM(X11) >+#include <gdk/gdkx.h> >+#endif >+#endif >+ >+using namespace WebKit; >+using namespace WebCore; >+ >+/** >+ * SECTION: WebKitInstallMissingMediaPluginsPermissionRequest >+ * @Short_description: A permission request for installing missing media plugins >+ * @Title: WebKitInstallMissingMediaPluginsPermissionRequest >+ * @See_also: #WebKitPermissionRequest, #WebKitWebView >+ * >+ * WebKitInstallMissingMediaPluginsPermissionRequest represents a request for >+ * permission to decide whether WebKit should try to start a helper application to >+ * install missing media plugins when the media backend couldn't play a media because >+ * the required plugins were not available. >+ * >+ * Since: 2.10 >+ */ >+ >+static void webkit_permission_request_interface_init(WebKitPermissionRequestIface*); >+ >+struct _WebKitInstallMissingMediaPluginsPermissionRequestPrivate { >+#if ENABLE(VIDEO) >+ RefPtr<InstallMissingMediaPluginsPermissionRequest> request; >+#endif >+ CString details; >+ bool madeDecision; >+}; >+ >+WEBKIT_DEFINE_TYPE_WITH_CODE( >+ WebKitInstallMissingMediaPluginsPermissionRequest, webkit_install_missing_media_plugins_permission_request, G_TYPE_OBJECT, >+ G_IMPLEMENT_INTERFACE(WEBKIT_TYPE_PERMISSION_REQUEST, webkit_permission_request_interface_init)) >+ >+#if ENABLE(VIDEO) >+static GUniquePtr<GstInstallPluginsContext> createGstInstallPluginsContext(GtkWidget* widget) >+{ >+#if PLATFORM(X11) >+ if (PlatformDisplay::sharedDisplay().type() == PlatformDisplay::Type::X11) { >+ GUniquePtr<GstInstallPluginsContext> context(gst_install_plugins_context_new()); >+ gst_install_plugins_context_set_xid(context.get(), GDK_WINDOW_XID(gtk_widget_get_window(widget))); >+ return context; >+ } >+#endif >+ >+ return nullptr; >+} >+#endif >+ >+static void webkitInstallMissingMediaPluginsPermissionRequestAllow(WebKitPermissionRequest* request) >+{ >+ ASSERT(WEBKIT_IS_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST(request)); >+ >+ WebKitInstallMissingMediaPluginsPermissionRequestPrivate* priv = WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST(request)->priv; >+ >+ // Only one decision at a time. >+ if (priv->madeDecision) >+ return; >+#if ENABLE(VIDEO) >+ priv->request->allow(createGstInstallPluginsContext(priv->request->page().viewWidget())); >+#endif >+ priv->madeDecision = true; >+} >+ >+static void webkitInstallMissingMediaPluginsPermissionRequestDeny(WebKitPermissionRequest* request) >+{ >+ ASSERT(WEBKIT_IS_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST(request)); >+ >+ WebKitInstallMissingMediaPluginsPermissionRequestPrivate* priv = WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST(request)->priv; >+ >+ // Only one decision at a time. >+ if (priv->madeDecision) >+ return; >+ >+#if ENABLE(VIDEO) >+ priv->request->deny(); >+#endif >+ priv->madeDecision = true; >+} >+ >+static void webkit_permission_request_interface_init(WebKitPermissionRequestIface* iface) >+{ >+ iface->allow = webkitInstallMissingMediaPluginsPermissionRequestAllow; >+ iface->deny = webkitInstallMissingMediaPluginsPermissionRequestDeny; >+} >+ >+static void webkitInstallMissingMediaPluginsPermissionRequestDispose(GObject* object) >+{ >+ // Default behaviour when no decision has been made is denying the request. >+ webkitInstallMissingMediaPluginsPermissionRequestDeny(WEBKIT_PERMISSION_REQUEST(object)); >+ G_OBJECT_CLASS(webkit_install_missing_media_plugins_permission_request_parent_class)->dispose(object); >+} >+ >+static void webkit_install_missing_media_plugins_permission_request_class_init(WebKitInstallMissingMediaPluginsPermissionRequestClass* klass) >+{ >+ GObjectClass* objectClass = G_OBJECT_CLASS(klass); >+ objectClass->dispose = webkitInstallMissingMediaPluginsPermissionRequestDispose; >+} >+ >+#if ENABLE(VIDEO) >+WebKitInstallMissingMediaPluginsPermissionRequest* webkitInstallMissingMediaPluginsPermissionRequestCreate(InstallMissingMediaPluginsPermissionRequest& request) >+{ >+ WebKitInstallMissingMediaPluginsPermissionRequest* permissionRequest = WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST(g_object_new(WEBKIT_TYPE_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST, nullptr)); >+ permissionRequest->priv->request = &request; >+ return permissionRequest; >+} >+#endif >+ >+/** >+ * webkit_install_missing_media_plugins_permission_request_get_details: >+ * @request: a #WebKitInstallMissingMediaPluginsPermissionRequest >+ * >+ * Gets the details about the missing plugins provided by the media backend when a media couldn't be played. >+ * >+ * Returns: a string with the details provided by the media backend, or %NULL if the media backend didn't provide any details >+ * >+ * Since: 2.10 >+ */ >+const char* webkit_install_missing_media_plugins_permission_request_get_details(WebKitInstallMissingMediaPluginsPermissionRequest* request) >+{ >+ g_return_val_if_fail(WEBKIT_IS_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST(request), nullptr); >+ >+#if ENABLE(VIDEO) >+ if (!request->priv->details.isNull()) >+ return request->priv->details.data(); >+ >+ const auto& details = request->priv->request->details(); >+ if (details.isEmpty()) >+ return nullptr; >+ >+ request->priv->details = request->priv->request->details().utf8(); >+#endif >+ return request->priv->details.data(); >+} >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.h b/Source/WebKit2/UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.h >new file mode 100644 >index 0000000..caf42df >--- /dev/null >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.h >@@ -0,0 +1,66 @@ >+/* >+ * Copyright (C) 2015 Igalia S.L. >+ * >+ * This library is free software; you can redistribute it and/or >+ * modify it under the terms of the GNU Library General Public >+ * License as published by the Free Software Foundation; either >+ * version 2 of the License, or (at your option) any later version. >+ * >+ * This library is distributed in the hope that it will be useful, >+ * but WITHOUT ANY WARRANTY; without even the implied warranty of >+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >+ * Library General Public License for more details. >+ * >+ * You should have received a copy of the GNU Library General Public License >+ * along with this library; see the file COPYING.LIB. If not, write to >+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, >+ * Boston, MA 02110-1301, USA. >+ */ >+ >+#if !defined(__WEBKIT2_H_INSIDE__) && !defined(WEBKIT2_COMPILATION) >+#error "Only <webkit2/webkit2.h> can be included directly." >+#endif >+ >+#ifndef WebKitInstallMissingMediaPluginsPermissionRequest_h >+#define WebKitInstallMissingMediaPluginsPermissionRequest_h >+ >+#include <glib-object.h> >+#include <webkit2/WebKitDefines.h> >+ >+G_BEGIN_DECLS >+ >+#define WEBKIT_TYPE_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST (webkit_install_missing_media_plugins_permission_request_get_type()) >+#define WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST, WebKitInstallMissingMediaPluginsPermissionRequest)) >+#define WEBKIT_IS_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), WEBKIT_TYPE_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST)) >+#define WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), WEBKIT_TYPE_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST, WebKitInstallMissingMediaPluginsPermissionRequestClass)) >+#define WEBKIT_IS_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), WEBKIT_TYPE_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST)) >+#define WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), WEBKIT_TYPE_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST, WebKitInstallMissingMediaPluginsPermissionRequestClass)) >+ >+typedef struct _WebKitInstallMissingMediaPluginsPermissionRequest WebKitInstallMissingMediaPluginsPermissionRequest; >+typedef struct _WebKitInstallMissingMediaPluginsPermissionRequestClass WebKitInstallMissingMediaPluginsPermissionRequestClass; >+typedef struct _WebKitInstallMissingMediaPluginsPermissionRequestPrivate WebKitInstallMissingMediaPluginsPermissionRequestPrivate; >+ >+struct _WebKitInstallMissingMediaPluginsPermissionRequest { >+ GObject parent; >+ >+ WebKitInstallMissingMediaPluginsPermissionRequestPrivate *priv; >+}; >+ >+struct _WebKitInstallMissingMediaPluginsPermissionRequestClass { >+ GObjectClass parent_class; >+ >+ void (*_webkit_reserved0) (void); >+ void (*_webkit_reserved1) (void); >+ void (*_webkit_reserved2) (void); >+ void (*_webkit_reserved3) (void); >+}; >+ >+WEBKIT_API GType >+webkit_install_missing_media_plugins_permission_request_get_type (void); >+ >+WEBKIT_API const gchar * >+webkit_install_missing_media_plugins_permission_request_get_details (WebKitInstallMissingMediaPluginsPermissionRequest *request); >+ >+G_END_DECLS >+ >+#endif >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequestPrivate.h b/Source/WebKit2/UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequestPrivate.h >new file mode 100644 >index 0000000..2c7e3bc >--- /dev/null >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequestPrivate.h >@@ -0,0 +1,31 @@ >+/* >+ * Copyright (C) 2012 Igalia S.L. >+ * >+ * This library is free software; you can redistribute it and/or >+ * modify it under the terms of the GNU Library General Public >+ * License as published by the Free Software Foundation; either >+ * version 2 of the License, or (at your option) any later version. >+ * >+ * This library is distributed in the hope that it will be useful, >+ * but WITHOUT ANY WARRANTY; without even the implied warranty of >+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU >+ * Library General Public License for more details. >+ * >+ * You should have received a copy of the GNU Library General Public License >+ * along with this library; see the file COPYING.LIB. If not, write to >+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, >+ * Boston, MA 02110-1301, USA. >+ */ >+ >+#ifndef WebKitInstallMissingMediaPluginsPermissionRequestPrivate_h >+#define WebKitInstallMissingMediaPluginsPermissionRequestPrivate_h >+ >+#include "InstallMissingMediaPluginsPermissionRequest.h" >+#include "WebKitInstallMissingMediaPluginsPermissionRequest.h" >+#include "WebKitPrivate.h" >+ >+#if ENABLE(VIDEO) >+WebKitInstallMissingMediaPluginsPermissionRequest* webkitInstallMissingMediaPluginsPermissionRequestCreate(WebKit::InstallMissingMediaPluginsPermissionRequest&); >+#endif >+ >+#endif // WebKitInstallMissingMediaPluginsPermissionRequestPrivate_h >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp >index eb84b61..34e03fa 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp >@@ -42,6 +42,7 @@ > #include "WebKitFormClient.h" > #include "WebKitFullscreenClient.h" > #include "WebKitHitTestResultPrivate.h" >+#include "WebKitInstallMissingMediaPluginsPermissionRequestPrivate.h" > #include "WebKitJavascriptResultPrivate.h" > #include "WebKitLoaderClient.h" > #include "WebKitMarshal.h" >@@ -2145,6 +2146,16 @@ void webkitWebViewSelectionDidChange(WebKitWebView* webView) > webkitEditorStateChanged(webView->priv->editorState.get(), getPage(webView)->editorState()); > } > >+void webkitWebViewRequestInstallMissingMediaPlugins(WebKitWebView* webView, InstallMissingMediaPluginsPermissionRequest& request) >+{ >+#if ENABLE(VIDEO) >+ GRefPtr<WebKitInstallMissingMediaPluginsPermissionRequest> installMediaPluginsPermissionRequest = adoptGRef(webkitInstallMissingMediaPluginsPermissionRequestCreate(request)); >+ webkitWebViewMakePermissionRequest(webView, WEBKIT_PERMISSION_REQUEST(installMediaPluginsPermissionRequest.get())); >+#else >+ ASSERT_NOT_REACHED(); >+#endif >+} >+ > /** > * webkit_web_view_new: > * >diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h b/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h >index a788653..ece4bede 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h >+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h >@@ -27,6 +27,7 @@ > #ifndef WebKitWebViewPrivate_h > #define WebKitWebViewPrivate_h > >+#include "InstallMissingMediaPluginsPermissionRequest.h" > #include "WebContextMenuItemData.h" > #include "WebHitTestResult.h" > #include "WebImage.h" >@@ -63,5 +64,6 @@ bool webkitWebViewEmitRunColorChooser(WebKitWebView*, WebKitColorChooserRequest* > void webkitWebViewWebProcessCrashed(WebKitWebView*); > void webkitWebViewIsPlayingAudioChanged(WebKitWebView*); > void webkitWebViewSelectionDidChange(WebKitWebView*); >+void webkitWebViewRequestInstallMissingMediaPlugins(WebKitWebView*, WebKit::InstallMissingMediaPluginsPermissionRequest&); > > #endif // WebKitWebViewPrivate_h >diff --git a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt b/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt >index 9e1a921..8581c29 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt >+++ b/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt >@@ -591,6 +591,25 @@ webkit_geolocation_permission_request_get_type > </SECTION> > > <SECTION> >+<FILE>WebKitInstallMissingMediaPluginsPermissionRequest</FILE> >+WebKitInstallMissingMediaPluginsPermissionRequest >+webkit_install_missing_media_plugins_permission_request_get_details >+ >+<SUBSECTION Standard> >+WebKitInstallMissingMediaPluginsPermissionRequestClass >+WEBKIT_TYPE_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST >+WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST >+WEBKIT_IS_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST >+WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST_CLASS >+WEBKIT_IS_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST_CLASS >+WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST_GET_CLASS >+ >+<SUBSECTION Private> >+WebKitInstallMissingMediaPluginsPermissionRequestPrivate >+webkit_install_missing_media_plugins_permission_request_get_type >+</SECTION> >+ >+<SECTION> > <FILE>WebKitNavigationAction</FILE> > WebKitNavigationAction > webkit_navigation_action_copy >diff --git a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0.types b/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0.types >index 9cdc098..f22748e 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0.types >+++ b/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0.types >@@ -31,3 +31,4 @@ webkit_user_content_manager_get_type > webkit_web_hit_test_result_get_type > webkit_website_data_manager_get_type > webkit_editor_state_get_type >+webkit_install_missing_media_plugins_permission_request_get_type >diff --git a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml b/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml >index 03eec27..756aa0e 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml >+++ b/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml >@@ -23,6 +23,7 @@ > <xi:include href="xml/WebKitDownload.xml"/> > <xi:include href="xml/WebKitPermissionRequest.xml"/> > <xi:include href="xml/WebKitGeolocationPermissionRequest.xml"/> >+ <xi:include href="xml/WebKitInstallMissingMediaPluginsPermissionRequest.xml"/> > <xi:include href="xml/WebKitNavigationAction.xml"/> > <xi:include href="xml/WebKitUserMediaPermissionRequest.xml"/> > <xi:include href="xml/WebKitPolicyDecision.xml"/> >diff --git a/Source/WebKit2/UIProcess/API/gtk/webkit2.h b/Source/WebKit2/UIProcess/API/gtk/webkit2.h >index cea4ea8..7e08a65 100644 >--- a/Source/WebKit2/UIProcess/API/gtk/webkit2.h >+++ b/Source/WebKit2/UIProcess/API/gtk/webkit2.h >@@ -48,6 +48,7 @@ > #include <webkit2/WebKitFormSubmissionRequest.h> > #include <webkit2/WebKitGeolocationPermissionRequest.h> > #include <webkit2/WebKitHitTestResult.h> >+#include <webkit2/WebKitInstallMissingMediaPluginsPermissionRequest.h> > #include <webkit2/WebKitJavascriptResult.h> > #include <webkit2/WebKitMimeInfo.h> > #include <webkit2/WebKitNavigationAction.h> >diff --git a/Source/WebKit2/UIProcess/PageClient.h b/Source/WebKit2/UIProcess/PageClient.h >index f0269eb..6785360 100644 >--- a/Source/WebKit2/UIProcess/PageClient.h >+++ b/Source/WebKit2/UIProcess/PageClient.h >@@ -34,10 +34,6 @@ > #include <WebCore/EditorClient.h> > #include <wtf/Forward.h> > >-#if USE(GSTREAMER) >-#include <WebCore/GUniquePtrGStreamer.h> >-#endif >- > #if PLATFORM(COCOA) > #include "PluginComplexTextInputState.h" > >@@ -79,6 +75,10 @@ class WebColorPicker; > class WebFullScreenManagerProxyClient; > #endif > >+#if USE(GSTREAMER) >+class InstallMissingMediaPluginsPermissionRequest; >+#endif >+ > #if PLATFORM(COCOA) > struct ColorSpaceData; > #endif >@@ -341,7 +341,7 @@ public: > virtual void derefView() = 0; > > #if USE(GSTREAMER) >- virtual GUniquePtr<GstInstallPluginsContext> createGstInstallPluginsContext() = 0; >+ virtual bool decicePolicyForInstallMissingMediaPluginsPermissionRequest(InstallMissingMediaPluginsPermissionRequest&) = 0; > #endif > }; > >diff --git a/Source/WebKit2/UIProcess/efl/WebViewEfl.h b/Source/WebKit2/UIProcess/efl/WebViewEfl.h >index 5e3e9a0..d11a1fe 100644 >--- a/Source/WebKit2/UIProcess/efl/WebViewEfl.h >+++ b/Source/WebKit2/UIProcess/efl/WebViewEfl.h >@@ -98,7 +98,7 @@ private: > virtual void derefView() override final { } > > #if USE(GSTREAMER) >- virtual GUniquePtr<GstInstallPluginsContext> createGstInstallPluginsContext() override final { return nullptr; }; >+ virtual bool decicePolicyForInstallMissingMediaPluginsPermissionRequest(InstallMissingMediaPluginsPermissionRequest&) override final { return false; }; > #endif > > private: >diff --git a/Source/WebKit2/UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.cpp b/Source/WebKit2/UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.cpp >new file mode 100644 >index 0000000..6722f7e >--- /dev/null >+++ b/Source/WebKit2/UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.cpp >@@ -0,0 +1,82 @@ >+/* >+ * Copyright (C) 2015 Igalia S.L. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' >+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS >+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS >+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN >+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) >+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF >+ * THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+#include "config.h" >+#include "InstallMissingMediaPluginsPermissionRequest.h" >+ >+#if ENABLE(VIDEO) && USE(GSTREAMER) >+#include "WebPageMessages.h" >+#include "WebPageProxy.h" >+#include <wtf/text/CString.h> >+ >+namespace WebKit { >+ >+InstallMissingMediaPluginsPermissionRequest::InstallMissingMediaPluginsPermissionRequest(WebPageProxy& page, const String& details) >+ : m_page(&page) >+ , m_details(details) >+{ >+} >+ >+InstallMissingMediaPluginsPermissionRequest::~InstallMissingMediaPluginsPermissionRequest() >+{ >+} >+ >+void InstallMissingMediaPluginsPermissionRequest::allow(GUniquePtr<GstInstallPluginsContext>&& context) >+{ >+ if (!m_page->isValid()) >+ return; >+ >+ CString detail = m_details.utf8(); >+ const char* detailArray[2] = { detail.data(), nullptr }; >+ ref(); >+ GstInstallPluginsReturn result = gst_install_plugins_async(detailArray, context.get(), [](GstInstallPluginsReturn result, gpointer userData) { >+ RefPtr<InstallMissingMediaPluginsPermissionRequest> request = adoptRef(static_cast<InstallMissingMediaPluginsPermissionRequest*>(userData)); >+ request->didEndRequestInstallMissingMediaPlugins(static_cast<uint32_t>(result)); >+ }, this); >+ >+ if (result != GST_INSTALL_PLUGINS_STARTED_OK) { >+ // If the installer didn't start, the callback will not be called, so remove the ref manually. >+ deref(); >+ didEndRequestInstallMissingMediaPlugins(static_cast<uint32_t>(result)); >+ WTFLogAlways("Missing GStreamer Plugin: %s\n", detail.data()); >+ } >+} >+ >+void InstallMissingMediaPluginsPermissionRequest::deny() >+{ >+ didEndRequestInstallMissingMediaPlugins(static_cast<uint32_t>(GST_INSTALL_PLUGINS_USER_ABORT)); >+} >+ >+void InstallMissingMediaPluginsPermissionRequest::didEndRequestInstallMissingMediaPlugins(uint32_t result) >+{ >+ if (!m_page->isValid()) >+ return; >+ >+ m_page->send(Messages::WebPage::DidEndRequestInstallMissingMediaPlugins(result)); >+} >+ >+} // namespace WebKit >+ >+#endif // ENABLE(VIDEO) && USE(GSTREAMER) >diff --git a/Source/WebKit2/UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.h b/Source/WebKit2/UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.h >new file mode 100644 >index 0000000..077c408 >--- /dev/null >+++ b/Source/WebKit2/UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.h >@@ -0,0 +1,65 @@ >+/* >+ * Copyright (C) 2015 Igalia S.L. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' >+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS >+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS >+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN >+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) >+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF >+ * THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+#ifndef InstallMissingMediaPluginsPermissionRequest_h >+#define InstallMissingMediaPluginsPermissionRequest_h >+ >+#if ENABLE(VIDEO) && USE(GSTREAMER) >+#include <WebCore/GUniquePtrGStreamer.h> >+#include <wtf/RefCounted.h> >+#include <wtf/RefPtr.h> >+#include <wtf/text/WTFString.h> >+ >+namespace WebKit { >+ >+class WebPageProxy; >+ >+class InstallMissingMediaPluginsPermissionRequest : public RefCounted<InstallMissingMediaPluginsPermissionRequest> { >+public: >+ static Ref<InstallMissingMediaPluginsPermissionRequest> create(WebPageProxy& page, const String& details) >+ { >+ return adoptRef(*new InstallMissingMediaPluginsPermissionRequest(page, details)); >+ } >+ ~InstallMissingMediaPluginsPermissionRequest(); >+ >+ void allow(GUniquePtr<GstInstallPluginsContext>&& = nullptr); >+ void deny(); >+ >+ WebPageProxy& page() const { return *m_page; } >+ const String& details() const { return m_details; } >+ >+private: >+ InstallMissingMediaPluginsPermissionRequest(WebPageProxy&, const String& details); >+ >+ void didEndRequestInstallMissingMediaPlugins(uint32_t result); >+ >+ RefPtr<WebPageProxy> m_page; >+ String m_details; >+}; >+ >+} // namespace WebKit >+ >+#endif // ENABLE(VIDEO) && USE(GSTREAMER) >+#endif // InstallMissingMediaPluginsPermissionRequest_h >diff --git a/Source/WebKit2/UIProcess/gstreamer/WebPageProxyGStreamer.cpp b/Source/WebKit2/UIProcess/gstreamer/WebPageProxyGStreamer.cpp >index 3013482..da2dae6 100644 >--- a/Source/WebKit2/UIProcess/gstreamer/WebPageProxyGStreamer.cpp >+++ b/Source/WebKit2/UIProcess/gstreamer/WebPageProxyGStreamer.cpp >@@ -27,30 +27,18 @@ > #include "WebPageProxy.h" > > #if ENABLE(VIDEO) && USE(GSTREAMER) >- >+#include "InstallMissingMediaPluginsPermissionRequest.h" > #include "PageClient.h" >-#include "WebPageMessages.h" > > namespace WebKit { > > void WebPageProxy::requestInstallMissingMediaPlugins(const String& details) > { >- CString detail = details.utf8(); >- const char* detailArray[2] = { detail.data(), nullptr }; >- ref(); >- GUniquePtr<GstInstallPluginsContext> context = m_pageClient.createGstInstallPluginsContext(); >- GstInstallPluginsReturn result = gst_install_plugins_async(detailArray, context.get(), [](GstInstallPluginsReturn result, gpointer userData) { >- RefPtr<WebPageProxy> page = adoptRef(static_cast<WebPageProxy*>(userData)); >- if (page->isValid()) >- page->send(Messages::WebPage::DidEndRequestInstallMissingMediaPlugins(static_cast<uint32_t>(result))); >- }, this); >+ RefPtr<InstallMissingMediaPluginsPermissionRequest> request = InstallMissingMediaPluginsPermissionRequest::create(*this, details); >+ if (m_pageClient.decicePolicyForInstallMissingMediaPluginsPermissionRequest(*request)) >+ return; > >- if (result != GST_INSTALL_PLUGINS_STARTED_OK) { >- // If the installer didn't start, the callback will not be called, so remove the ref manually. >- deref(); >- send(Messages::WebPage::DidEndRequestInstallMissingMediaPlugins(static_cast<uint32_t>(result))); >- WTFLogAlways("Missing GStreamer Plugin: %s\n", detail.data()); >- } >+ request->deny(); > } > > } // namespace WebKit >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index e63542e..0aba9f4 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,23 @@ >+2015-07-28 Carlos Garcia Campos <cgarcia@igalia.com> >+ >+ [GStreamer] Do not automatically show PackageKit codec installation notifications >+ https://bugs.webkit.org/show_bug.cgi?id=135973 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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): >+ > 2015-07-24 Hyungwook Lee <hyungwook.lee@navercorp.com> > > Unreviewed, updated my nick name in contributors.json >diff --git a/Tools/MiniBrowser/gtk/BrowserWindow.c b/Tools/MiniBrowser/gtk/BrowserWindow.c >index 880791b..54f9b24 100644 >--- a/Tools/MiniBrowser/gtk/BrowserWindow.c >+++ b/Tools/MiniBrowser/gtk/BrowserWindow.c >@@ -454,6 +454,10 @@ static gboolean webViewDecidePermissionRequest(WebKitWebView *webView, WebKitPer > dialog_message = "audio"; > } else if (is_for_video_device) > dialog_message = "video"; >+ } else if (WEBKIT_IS_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST(request)) { >+ dialog_title = "Media plugin missing request"; >+ 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?"; >+ dialog_message = webkit_install_missing_media_plugins_permission_request_get_details(WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST(request)); > } else > return FALSE; > >diff --git a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt >index 1bbf52d..74d5250 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt >+++ b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt >@@ -26,6 +26,7 @@ include_directories( > include_directories(SYSTEM > ${ATSPI_INCLUDE_DIRS} > ${GLIB_INCLUDE_DIRS} >+ ${GSTREAMER_INCLUDE_DIRS} > ${GTK3_INCLUDE_DIRS} > ${GTK_UNIX_PRINT_INCLUDE_DIRS} > ${LIBSOUP_INCLUDE_DIRS} >diff --git a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp >index 82d3ec3..e88ae69 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp >+++ b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp >@@ -180,6 +180,37 @@ static void testWebExtensionIsolatedWorld(WebViewTest* test, gconstpointer) > g_signal_handler_disconnect(test->m_webView, scriptDialogID); > } > >+static gboolean permissionRequestCallback(WebKitWebView*, WebKitPermissionRequest* request, WebViewTest* test) >+{ >+ if (!WEBKIT_IS_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST(request)) >+ return FALSE; >+ >+ test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(request)); >+ WebKitInstallMissingMediaPluginsPermissionRequest* missingPluginsRequest = WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST(request); >+ g_assert(webkit_install_missing_media_plugins_permission_request_get_details(missingPluginsRequest)); >+ webkit_permission_request_deny(request); >+ test->quitMainLoop(); >+} >+ >+static void testInstallMissingPluginsPermissionRequest(WebViewTest* test, gconstpointer) >+{ >+ GUniquePtr<char> extensionBusName(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", Test::s_webExtensionID)); >+ GRefPtr<GDBusProxy> proxy = adoptGRef(bus->createProxy(extensionBusName.get(), >+ "/org/webkit/gtk/WebExtensionTest", "org.webkit.gtk.WebExtensionTest", test->m_mainLoop)); >+ GRefPtr<GVariant> result = adoptGRef(g_dbus_proxy_call_sync(proxy.get(), "RemoveAVPluginsFromGSTRegistry", >+ nullptr, G_DBUS_CALL_FLAGS_NONE, -1, nullptr, nullptr)); >+ >+ webkit_settings_set_enable_developer_extras(webkit_web_view_get_settings(test->m_webView), TRUE); >+ test->showInWindowAndWaitUntilMapped(); >+ >+ gulong permissionRequestSignalID = g_signal_connect(test->m_webView, "permission-request", G_CALLBACK(permissionRequestCallback), test); >+ // FIXME: the base URI needs to finish with / to work, that shouldn't happen. >+ GUniquePtr<char> baseURI(g_strconcat("file://", Test::getResourcesDir(Test::WebKit2Resources).data(), "/", nullptr)); >+ test->loadHtml("<html><body><video src=\"test.mp4\" autoplay></video></body></html>", baseURI.get()); >+ g_main_loop_run(test->m_mainLoop); >+ g_signal_handler_disconnect(test->m_webView, permissionRequestSignalID); >+} >+ > void beforeAll() > { > bus = new WebKitTestBus(); >@@ -191,6 +222,7 @@ void beforeAll() > WebViewTest::add("WebKitWebView", "web-process-crashed", testWebKitWebViewProcessCrashed); > WebViewTest::add("WebKitWebExtension", "window-object-cleared", testWebExtensionWindowObjectCleared); > WebViewTest::add("WebKitWebExtension", "isolated-world", testWebExtensionIsolatedWorld); >+ WebViewTest::add("WebKitWebView", "install-missing-plugins-permission-request", testInstallMissingPluginsPermissionRequest); > } > > void afterAll() >diff --git a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp >index 51bd637..38c7d94 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp >+++ b/Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp >@@ -22,6 +22,7 @@ > #include <JavaScriptCore/JSContextRef.h> > #include <JavaScriptCore/JSRetainPtr.h> > #include <gio/gio.h> >+#include <gst/gst.h> > #include <stdlib.h> > #include <string.h> > #include <webkit2/webkit-web-extension.h> >@@ -52,6 +53,8 @@ static const char introspectionXML[] = > " <method name='GetProcessIdentifier'>" > " <arg type='u' name='identifier' direction='out'/>" > " </method>" >+ " <method name='RemoveAVPluginsFromGSTRegistry'>" >+ " </method>" > " <signal name='DocumentLoaded'/>" > " <signal name='URIChanged'>" > " <arg type='s' name='uri' direction='out'/>" >@@ -301,6 +304,17 @@ static void methodCallCallback(GDBusConnection* connection, const char* sender, > } else if (!g_strcmp0(methodName, "GetProcessIdentifier")) { > g_dbus_method_invocation_return_value(invocation, > g_variant_new("(u)", static_cast<guint32>(getCurrentProcessID()))); >+ } else if (!g_strcmp0(methodName, "RemoveAVPluginsFromGSTRegistry")) { >+ gst_init(nullptr, nullptr); >+ static const char* avPlugins[] = { "libav", "omx", "vaapi", nullptr }; >+ GstRegistry* registry = gst_registry_get(); >+ for (unsigned i = 0; avPlugins[i]; ++i) { >+ if (GstPlugin* plugin = gst_registry_find_plugin(registry, avPlugins[i])) { >+ gst_registry_remove_plugin(registry, plugin); >+ gst_object_unref(plugin); >+ } >+ } >+ g_dbus_method_invocation_return_value(invocation, nullptr); > } > } >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 135973
:
257566
|
257639
|
258057
|
258159