Changeset 188121 in webkit
- Timestamp:
- Aug 7, 2015 2:51:20 AM (9 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 34 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r188120 r188121 1 2015-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 1 20 2015-08-07 Doug Russell <d_russell@apple.com> 2 21 -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r188049 r188121 6133 6133 6134 6134 #if USE(GSTREAMER) 6135 void HTMLMediaElement::requestInstallMissingPlugins(const String& details, MediaPlayerRequestInstallMissingPluginsCallback& callback)6135 void HTMLMediaElement::requestInstallMissingPlugins(const String& details, const String& description, MediaPlayerRequestInstallMissingPluginsCallback& callback) 6136 6136 { 6137 6137 if (!document().page()) 6138 6138 return; 6139 6139 6140 document().page()->chrome().client().requestInstallMissingMediaPlugins(details, callback);6140 document().page()->chrome().client().requestInstallMissingMediaPlugins(details, description, callback); 6141 6141 } 6142 6142 #endif -
trunk/Source/WebCore/html/HTMLMediaElement.h
r188041 r188121 616 616 617 617 #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; 619 619 #endif 620 620 -
trunk/Source/WebCore/page/ChromeClient.h
r188030 r188121 458 458 virtual void mediaDocumentNaturalSizeChanged(const WebCore::IntSize&) { } 459 459 #if USE(GSTREAMER) 460 virtual void requestInstallMissingMediaPlugins(const String& /*details*/, MediaPlayerRequestInstallMissingPluginsCallback&) { };460 virtual void requestInstallMissingMediaPlugins(const String& /*details*/, const String& /*description*/, MediaPlayerRequestInstallMissingPluginsCallback&) { }; 461 461 #endif 462 462 #endif -
trunk/Source/WebCore/platform/graphics/MediaPlayer.h
r187338 r188121 285 285 286 286 #if USE(GSTREAMER) 287 virtual void requestInstallMissingPlugins(const String&, MediaPlayerRequestInstallMissingPluginsCallback&) { };287 virtual void requestInstallMissingPlugins(const String&, const String&, MediaPlayerRequestInstallMissingPluginsCallback&) { }; 288 288 #endif 289 289 }; -
trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
r187338 r188121 1028 1028 case GST_MESSAGE_ELEMENT: 1029 1029 if (gst_is_missing_plugin_message(message)) { 1030 GUniquePtr<char> detail(gst_missing_plugin_message_get_installer_detail(message));1031 1030 if (gst_install_plugins_supported()) { 1032 1031 m_missingPluginsCallback = MediaPlayerRequestInstallMissingPluginsCallback::create([this](uint32_t result) { … … 1038 1037 changePipelineState(GST_STATE_PAUSED); 1039 1038 }); 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); 1041 1042 } 1042 1043 } -
trunk/Source/WebKit2/ChangeLog
r188115 r188121 1 2015-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 1 65 2015-08-06 Beth Dakin <bdakin@apple.com> 2 66 -
trunk/Source/WebKit2/PlatformEfl.cmake
r188038 r188121 184 184 UIProcess/efl/WebViewEfl.cpp 185 185 186 UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.cpp 186 187 UIProcess/gstreamer/WebPageProxyGStreamer.cpp 187 188 -
trunk/Source/WebKit2/PlatformGTK.cmake
r187338 r188121 170 170 UIProcess/API/gtk/WebKitInjectedBundleClient.cpp 171 171 UIProcess/API/gtk/WebKitInjectedBundleClient.h 172 UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.cpp 173 UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.h 174 UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequestPrivate.h 172 175 UIProcess/API/gtk/WebKitJavascriptResult.cpp 173 176 UIProcess/API/gtk/WebKitJavascriptResult.h … … 291 294 UIProcess/cairo/BackingStoreCairo.cpp 292 295 296 UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.cpp 293 297 UIProcess/gstreamer/WebPageProxyGStreamer.cpp 294 298 … … 394 398 ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitGeolocationPermissionRequest.h 395 399 ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitHitTestResult.h 400 ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitInstallMissingMediaPluginsPermissionRequest.h 396 401 ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitJavascriptResult.h 397 402 ${WEBKIT2_DIR}/UIProcess/API/gtk/WebKitMimeInfo.h … … 501 506 "${WEBKIT2_DIR}/UIProcess/Network/CustomProtocols/soup" 502 507 "${WEBKIT2_DIR}/UIProcess/Plugins/gtk" 508 "${WEBKIT2_DIR}/UIProcess/gstreamer" 503 509 "${WEBKIT2_DIR}/UIProcess/gtk" 504 510 "${WEBKIT2_DIR}/UIProcess/soup" -
trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.cpp
r187432 r188121 45 45 #include <WebCore/EventNames.h> 46 46 #include <WebCore/GtkUtilities.h> 47 #include <WebCore/PlatformDisplay.h>48 47 #include <wtf/text/CString.h> 49 48 #include <wtf/text/WTFString.h> 50 51 #if PLATFORM(X11)52 #include <gdk/gdkx.h>53 #endif54 49 55 50 using namespace WebCore; … … 449 444 } 450 445 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) 447 bool 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 } 459 455 #endif 460 456 461 return nullptr;462 }463 464 457 } // namespace WebKit -
trunk/Source/WebKit2/UIProcess/API/gtk/PageClientImpl.h
r187432 r188121 143 143 virtual void derefView() override; 144 144 145 virtual GUniquePtr<GstInstallPluginsContext> createGstInstallPluginsContext() override; 145 #if ENABLE(VIDEO) 146 virtual bool decicePolicyForInstallMissingMediaPluginsPermissionRequest(InstallMissingMediaPluginsPermissionRequest&) override; 147 #endif 146 148 147 149 // Members of PageClientImpl class -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitGeolocationPermissionRequest.cpp
r135565 r188121 36 36 * permission to decide whether WebKit should provide the user's 37 37 * 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. 38 41 */ 39 42 -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitNotificationPermissionRequest.cpp
r177073 r188121 36 36 * permission to decide whether WebKit should provide the user with 37 37 * 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 38 43 */ 39 44 -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitUserMediaPermissionRequest.cpp
r177650 r188121 36 36 * permission to decide whether WebKit should be allowed to access the user's 37 37 * 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. 38 41 * 39 42 * Since: 2.8 -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp
r187220 r188121 43 43 #include "WebKitFullscreenClient.h" 44 44 #include "WebKitHitTestResultPrivate.h" 45 #include "WebKitInstallMissingMediaPluginsPermissionRequestPrivate.h" 45 46 #include "WebKitJavascriptResultPrivate.h" 46 47 #include "WebKitLoaderClient.h" … … 1352 1353 * will be the default action. 1353 1354 * 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. 1357 1359 * 1358 1360 * Returns: %TRUE to stop other handlers from being invoked for the event. … … 2144 2146 2145 2147 webkitEditorStateChanged(webView->priv->editorState.get(), getPage(webView)->editorState()); 2148 } 2149 2150 void 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 2146 2158 } 2147 2159 -
trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewPrivate.h
r187100 r188121 28 28 #define WebKitWebViewPrivate_h 29 29 30 #include "InstallMissingMediaPluginsPermissionRequest.h" 30 31 #include "WebContextMenuItemData.h" 31 32 #include "WebHitTestResult.h" … … 64 65 void webkitWebViewIsPlayingAudioChanged(WebKitWebView*); 65 66 void webkitWebViewSelectionDidChange(WebKitWebView*); 67 void webkitWebViewRequestInstallMissingMediaPlugins(WebKitWebView*, WebKit::InstallMissingMediaPluginsPermissionRequest&); 66 68 67 69 #endif // WebKitWebViewPrivate_h -
trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0-sections.txt
r187543 r188121 594 594 595 595 <SECTION> 596 <FILE>WebKitInstallMissingMediaPluginsPermissionRequest</FILE> 597 WebKitInstallMissingMediaPluginsPermissionRequest 598 webkit_install_missing_media_plugins_permission_request_get_description 599 600 <SUBSECTION Standard> 601 WebKitInstallMissingMediaPluginsPermissionRequestClass 602 WEBKIT_TYPE_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST 603 WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST 604 WEBKIT_IS_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST 605 WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST_CLASS 606 WEBKIT_IS_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST_CLASS 607 WEBKIT_INSTALL_MISSING_MEDIA_PLUGINS_PERMISSION_REQUEST_GET_CLASS 608 609 <SUBSECTION Private> 610 WebKitInstallMissingMediaPluginsPermissionRequestPrivate 611 webkit_install_missing_media_plugins_permission_request_get_type 612 </SECTION> 613 614 <SECTION> 596 615 <FILE>WebKitNavigationAction</FILE> 597 616 WebKitNavigationAction -
trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-4.0.types
r187100 r188121 32 32 webkit_website_data_manager_get_type 33 33 webkit_editor_state_get_type 34 webkit_install_missing_media_plugins_permission_request_get_type -
trunk/Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-docs.sgml
r187153 r188121 24 24 <xi:include href="xml/WebKitPermissionRequest.xml"/> 25 25 <xi:include href="xml/WebKitGeolocationPermissionRequest.xml"/> 26 <xi:include href="xml/WebKitInstallMissingMediaPluginsPermissionRequest.xml"/> 26 27 <xi:include href="xml/WebKitNavigationAction.xml"/> 27 28 <xi:include href="xml/WebKitUserMediaPermissionRequest.xml"/> -
trunk/Source/WebKit2/UIProcess/API/gtk/webkit2.h
r187100 r188121 49 49 #include <webkit2/WebKitGeolocationPermissionRequest.h> 50 50 #include <webkit2/WebKitHitTestResult.h> 51 #include <webkit2/WebKitInstallMissingMediaPluginsPermissionRequest.h> 51 52 #include <webkit2/WebKitJavascriptResult.h> 52 53 #include <webkit2/WebKitMimeInfo.h> -
trunk/Source/WebKit2/UIProcess/PageClient.h
r187432 r188121 35 35 #include <wtf/Forward.h> 36 36 37 #if USE(GSTREAMER)38 #include <WebCore/GUniquePtrGStreamer.h>39 #endif40 41 37 #if PLATFORM(COCOA) 42 38 #include "PluginComplexTextInputState.h" … … 78 74 #if ENABLE(FULLSCREEN_API) 79 75 class WebFullScreenManagerProxyClient; 76 #endif 77 78 #if USE(GSTREAMER) 79 class InstallMissingMediaPluginsPermissionRequest; 80 80 #endif 81 81 … … 342 342 343 343 #if USE(GSTREAMER) 344 virtual GUniquePtr<GstInstallPluginsContext> createGstInstallPluginsContext() = 0;344 virtual bool decicePolicyForInstallMissingMediaPluginsPermissionRequest(InstallMissingMediaPluginsPermissionRequest&) = 0; 345 345 #endif 346 346 }; -
trunk/Source/WebKit2/UIProcess/WebPageProxy.h
r188030 r188121 1479 1479 void mediaDocumentNaturalSizeChanged(const WebCore::IntSize&); 1480 1480 #if USE(GSTREAMER) 1481 void requestInstallMissingMediaPlugins(const String& details );1481 void requestInstallMissingMediaPlugins(const String& details, const String& description); 1482 1482 #endif 1483 1483 #endif -
trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in
r188030 r188121 454 454 455 455 #if ENABLE(VIDEO) && USE(GSTREAMER) 456 RequestInstallMissingMediaPlugins(String details )456 RequestInstallMissingMediaPlugins(String details, String description) 457 457 #endif 458 458 } -
trunk/Source/WebKit2/UIProcess/efl/WebViewEfl.h
r187432 r188121 99 99 100 100 #if USE(GSTREAMER) 101 virtual GUniquePtr<GstInstallPluginsContext> createGstInstallPluginsContext() override final { return nullptr; };101 virtual bool decicePolicyForInstallMissingMediaPluginsPermissionRequest(InstallMissingMediaPluginsPermissionRequest&) override final { return false; }; 102 102 #endif 103 103 -
trunk/Source/WebKit2/UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.cpp
r188120 r188121 25 25 26 26 #include "config.h" 27 #include " WebPageProxy.h"27 #include "InstallMissingMediaPluginsPermissionRequest.h" 28 28 29 29 #if ENABLE(VIDEO) && USE(GSTREAMER) 30 31 #include "PageClient.h"32 30 #include "WebPageMessages.h" 31 #include "WebPageProxy.h" 32 #include <wtf/text/CString.h> 33 33 34 34 namespace WebKit { 35 35 36 void WebPageProxy::requestInstallMissingMediaPlugins(const String& details) 36 InstallMissingMediaPluginsPermissionRequest::InstallMissingMediaPluginsPermissionRequest(WebPageProxy& page, const String& details, const String& description) 37 : m_page(&page) 38 , m_details(details) 39 , m_description(description) 37 40 { 38 CString detail = details.utf8(); 41 } 42 43 InstallMissingMediaPluginsPermissionRequest::~InstallMissingMediaPluginsPermissionRequest() 44 { 45 } 46 47 void InstallMissingMediaPluginsPermissionRequest::allow(GUniquePtr<GstInstallPluginsContext>&& context) 48 { 49 if (!m_page->isValid()) 50 return; 51 52 CString detail = m_details.utf8(); 39 53 const char* detailArray[2] = { detail.data(), nullptr }; 40 54 ref(); 41 GUniquePtr<GstInstallPluginsContext> context = m_pageClient.createGstInstallPluginsContext();42 55 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); 47 59 48 60 if (result != GST_INSTALL_PLUGINS_STARTED_OK) { 49 61 // If the installer didn't start, the callback will not be called, so remove the ref manually. 50 62 deref(); 51 send(Messages::WebPage::DidEndRequestInstallMissingMediaPlugins(static_cast<uint32_t>(result)));63 didEndRequestInstallMissingMediaPlugins(static_cast<uint32_t>(result)); 52 64 WTFLogAlways("Missing GStreamer Plugin: %s\n", detail.data()); 53 65 } 66 } 67 68 void InstallMissingMediaPluginsPermissionRequest::deny() 69 { 70 didEndRequestInstallMissingMediaPlugins(static_cast<uint32_t>(GST_INSTALL_PLUGINS_USER_ABORT)); 71 } 72 73 void InstallMissingMediaPluginsPermissionRequest::didEndRequestInstallMissingMediaPlugins(uint32_t result) 74 { 75 if (!m_page->isValid()) 76 return; 77 78 m_page->send(Messages::WebPage::DidEndRequestInstallMissingMediaPlugins(result)); 54 79 } 55 80 -
trunk/Source/WebKit2/UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.h
r188120 r188121 24 24 */ 25 25 26 #i nclude "config.h"27 # include "WebPage.h"26 #ifndef InstallMissingMediaPluginsPermissionRequest_h 27 #define InstallMissingMediaPluginsPermissionRequest_h 28 28 29 29 #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> 34 34 35 35 namespace WebKit { 36 36 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; 37 class WebPageProxy; 38 39 class InstallMissingMediaPluginsPermissionRequest : public RefCounted<InstallMissingMediaPluginsPermissionRequest> { 40 public: 41 static Ref<InstallMissingMediaPluginsPermissionRequest> create(WebPageProxy& page, const String& details, const String& description) 42 { 43 return adoptRef(*new InstallMissingMediaPluginsPermissionRequest(page, details, description)); 42 44 } 45 ~InstallMissingMediaPluginsPermissionRequest(); 43 46 44 m_installMediaPluginsCallback = &callback; 45 send(Messages::WebPageProxy::RequestInstallMissingMediaPlugins(details)); 46 } 47 void allow(GUniquePtr<GstInstallPluginsContext>&& = nullptr); 48 void deny(); 47 49 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; } 52 53 53 m_installMediaPluginsCallback->complete(result); 54 m_installMediaPluginsCallback = nullptr; 55 } 54 private: 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 }; 56 63 57 64 } // namespace WebKit 58 65 59 66 #endif // ENABLE(VIDEO) && USE(GSTREAMER) 67 #endif // InstallMissingMediaPluginsPermissionRequest_h -
trunk/Source/WebKit2/UIProcess/gstreamer/WebPageProxyGStreamer.cpp
r187432 r188121 28 28 29 29 #if ENABLE(VIDEO) && USE(GSTREAMER) 30 30 #include "InstallMissingMediaPluginsPermissionRequest.h" 31 31 #include "PageClient.h" 32 #include "WebPageMessages.h"33 32 34 33 namespace WebKit { 35 34 36 void WebPageProxy::requestInstallMissingMediaPlugins(const String& details )35 void WebPageProxy::requestInstallMissingMediaPlugins(const String& details, const String& description) 37 36 { 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; 47 40 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(); 54 42 } 55 43 -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp
r188030 r188121 1171 1171 1172 1172 #if USE(GSTREAMER) 1173 void WebChromeClient::requestInstallMissingMediaPlugins(const String& details, WebCore::MediaPlayerRequestInstallMissingPluginsCallback& callback)1174 { 1175 m_page->requestInstallMissingMediaPlugins(details, callback);1173 void WebChromeClient::requestInstallMissingMediaPlugins(const String& details, const String& description, WebCore::MediaPlayerRequestInstallMissingPluginsCallback& callback) 1174 { 1175 m_page->requestInstallMissingMediaPlugins(details, description, callback); 1176 1176 } 1177 1177 #endif -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h
r188030 r188121 328 328 virtual void mediaDocumentNaturalSizeChanged(const WebCore::IntSize&) override; 329 329 #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; 331 331 #endif 332 332 #endif -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h
r188030 r188121 910 910 void mediaDocumentNaturalSizeChanged(const WebCore::IntSize&); 911 911 #if USE(GSTREAMER) 912 void requestInstallMissingMediaPlugins(const String& details, WebCore::MediaPlayerRequestInstallMissingPluginsCallback&);912 void requestInstallMissingMediaPlugins(const String& details, const String& description, WebCore::MediaPlayerRequestInstallMissingPluginsCallback&); 913 913 #endif 914 914 #endif -
trunk/Source/WebKit2/WebProcess/WebPage/gstreamer/WebPageGStreamer.cpp
r187338 r188121 35 35 namespace WebKit { 36 36 37 void WebPage::requestInstallMissingMediaPlugins(const String& details, WebCore::MediaPlayerRequestInstallMissingPluginsCallback& callback)37 void WebPage::requestInstallMissingMediaPlugins(const String& details, const String& description, WebCore::MediaPlayerRequestInstallMissingPluginsCallback& callback) 38 38 { 39 39 if (m_installMediaPluginsCallback) { … … 43 43 44 44 m_installMediaPluginsCallback = &callback; 45 send(Messages::WebPageProxy::RequestInstallMissingMediaPlugins(details ));45 send(Messages::WebPageProxy::RequestInstallMissingMediaPlugins(details, description)); 46 46 } 47 47 -
trunk/Tools/ChangeLog
r188113 r188121 1 2015-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 1 21 2015-08-06 Filip Pizlo <fpizlo@apple.com> 2 22 -
trunk/Tools/MiniBrowser/gtk/BrowserWindow.c
r187541 r188121 455 455 } else if (is_for_video_device) 456 456 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)); 457 461 } else 458 462 return FALSE; -
trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/CMakeLists.txt
r187024 r188121 27 27 ${ATSPI_INCLUDE_DIRS} 28 28 ${GLIB_INCLUDE_DIRS} 29 ${GSTREAMER_INCLUDE_DIRS} 29 30 ${GTK3_INCLUDE_DIRS} 30 31 ${GTK_UNIX_PRINT_INCLUDE_DIRS} -
trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/TestWebExtensions.cpp
r185502 r188121 181 181 } 182 182 183 static 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 195 static 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 183 213 void beforeAll() 184 214 { … … 192 222 WebViewTest::add("WebKitWebExtension", "window-object-cleared", testWebExtensionWindowObjectCleared); 193 223 WebViewTest::add("WebKitWebExtension", "isolated-world", testWebExtensionIsolatedWorld); 224 WebViewTest::add("WebKitWebView", "install-missing-plugins-permission-request", testInstallMissingPluginsPermissionRequest); 194 225 } 195 226 -
trunk/Tools/TestWebKitAPI/Tests/WebKit2Gtk/WebExtensionTest.cpp
r185502 r188121 23 23 #include <JavaScriptCore/JSRetainPtr.h> 24 24 #include <gio/gio.h> 25 #include <gst/gst.h> 25 26 #include <stdlib.h> 26 27 #include <string.h> … … 52 53 " <method name='GetProcessIdentifier'>" 53 54 " <arg type='u' name='identifier' direction='out'/>" 55 " </method>" 56 " <method name='RemoveAVPluginsFromGSTRegistry'>" 54 57 " </method>" 55 58 " <signal name='DocumentLoaded'/>" … … 302 305 g_dbus_method_invocation_return_value(invocation, 303 306 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); 304 318 } 305 319 }
Note: See TracChangeset
for help on using the changeset viewer.