Changeset 187338 in webkit
- Timestamp:
- Jul 24, 2015 5:06:34 AM (9 years ago)
- Location:
- trunk/Source
- Files:
-
- 5 added
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r187287 r187338 1 2015-07-24 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GStreamer] Crashes during plugin installation 4 https://bugs.webkit.org/show_bug.cgi?id=144099 5 6 Reviewed by Philippe Normand. 7 8 Add new methods to MediaPlayerClient and ChromeClient to request 9 the API layer to start the installer when there are missing media 10 plugins. 11 12 * html/HTMLMediaElement.cpp: 13 (WebCore::HTMLMediaElement::requestInstallMissingPlugins): Pass 14 the request to the ChromeClient. 15 * html/HTMLMediaElement.h: 16 * page/ChromeClient.h: 17 * platform/graphics/MediaPlayer.h: 18 (WebCore::MediaPlayerClient::requestInstallMissingPlugins): 19 * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: 20 (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer): 21 Invalidate any pending request to install missing media plugins. 22 (WebCore::MediaPlayerPrivateGStreamer::handleMessage): In case of 23 missing plugins message, start a request to install them if 24 supported by GST. 25 * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: 26 (WebCore::MediaPlayerRequestInstallMissingPluginsCallback::create): 27 (WebCore::MediaPlayerRequestInstallMissingPluginsCallback::MediaPlayerRequestInstallMissingPluginsCallback): 28 (WebCore::MediaPlayerRequestInstallMissingPluginsCallback::invalidate): 29 (WebCore::MediaPlayerRequestInstallMissingPluginsCallback::complete): 30 1 31 2015-07-23 Alex Christensen <achristensen@webkit.org> 2 32 -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r187272 r187338 6067 6067 } 6068 6068 6069 #if USE(GSTREAMER) 6070 void HTMLMediaElement::requestInstallMissingPlugins(const String& details, MediaPlayerRequestInstallMissingPluginsCallback& callback) 6071 { 6072 if (!document().page()) 6073 return; 6074 6075 document().page()->chrome().client().requestInstallMissingMediaPlugins(details, callback); 6076 } 6077 #endif 6078 6069 6079 void HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture() 6070 6080 { -
trunk/Source/WebCore/html/HTMLMediaElement.h
r187257 r187338 611 611 virtual VideoFullscreenMode mediaPlayerFullscreenMode() const override final { return fullscreenMode(); } 612 612 613 #if USE(GSTREAMER) 614 virtual void requestInstallMissingPlugins(const String&, MediaPlayerRequestInstallMissingPluginsCallback&) override final; 615 #endif 616 613 617 void pendingActionTimerFired(); 614 618 void progressEventTimerFired(); -
trunk/Source/WebCore/page/ChromeClient.h
r187272 r187338 92 92 class Widget; 93 93 94 #if ENABLE(VIDEO) && USE(GSTREAMER) 95 class MediaPlayerRequestInstallMissingPluginsCallback; 96 #endif 97 94 98 struct DateTimeChooserParameters; 95 99 struct FrameLoadRequest; … … 452 456 #if ENABLE(VIDEO) 453 457 virtual void mediaDocumentNaturalSizeChanged(const WebCore::IntSize&) { } 458 #if USE(GSTREAMER) 459 virtual void requestInstallMissingMediaPlugins(const String& /*details*/, MediaPlayerRequestInstallMissingPluginsCallback&) { }; 460 #endif 454 461 #endif 455 462 -
trunk/Source/WebCore/platform/graphics/MediaPlayer.h
r186020 r187338 149 149 #endif 150 150 151 #if USE(GSTREAMER) 152 class MediaPlayerRequestInstallMissingPluginsCallback; 153 #endif 154 151 155 class MediaPlayerClient { 152 156 public: … … 279 283 virtual MediaPlayerEnums::VideoFullscreenMode mediaPlayerFullscreenMode() const { return MediaPlayerEnums::VideoFullscreenModeNone; } 280 284 virtual Vector<String> mediaPlayerPreferredAudioCharacteristics() const { return Vector<String>(); } 285 286 #if USE(GSTREAMER) 287 virtual void requestInstallMissingPlugins(const String&, MediaPlayerRequestInstallMissingPluginsCallback&) { }; 288 #endif 281 289 }; 282 290 -
trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp
r186769 r187338 32 32 #include "MIMETypeRegistry.h" 33 33 #include "MediaPlayer.h" 34 #include "MediaPlayerRequestInstallMissingPluginsCallback.h" 34 35 #include "NotImplemented.h" 35 36 #include "SecurityOrigin.h" … … 123 124 } 124 125 #endif 125 126 static void mediaPlayerPrivatePluginInstallerResultFunction(GstInstallPluginsReturn result, gpointer userData)127 {128 MediaPlayerPrivateGStreamer* player = reinterpret_cast<MediaPlayerPrivateGStreamer*>(userData);129 player->handlePluginInstallerResult(result);130 }131 126 132 127 void MediaPlayerPrivateGStreamer::setAudioStreamProperties(GObject* object) … … 217 212 #endif 218 213 , m_requestedState(GST_STATE_VOID_PENDING) 219 , m_missingPlugins(false)220 214 { 221 215 } … … 246 240 247 241 m_readyTimerHandler.cancel(); 242 if (m_missingPluginsCallback) { 243 m_missingPluginsCallback->invalidate(); 244 m_missingPluginsCallback = nullptr; 245 } 248 246 249 247 if (m_pipeline) { … … 935 933 if (m_resetPipeline) 936 934 break; 937 if (m_missingPlugins )935 if (m_missingPluginsCallback) 938 936 break; 939 937 gst_message_parse_error(message, &err.outPtr(), &debug.outPtr()); … … 1030 1028 case GST_MESSAGE_ELEMENT: 1031 1029 if (gst_is_missing_plugin_message(message)) { 1032 gchar* detail = gst_missing_plugin_message_get_installer_detail(message); 1033 gchar* detailArray[2] = {detail, 0}; 1034 GstInstallPluginsReturn result = gst_install_plugins_async(detailArray, 0, mediaPlayerPrivatePluginInstallerResultFunction, this); 1035 m_missingPlugins = result == GST_INSTALL_PLUGINS_STARTED_OK; 1036 g_free(detail); 1030 GUniquePtr<char> detail(gst_missing_plugin_message_get_installer_detail(message)); 1031 if (gst_install_plugins_supported()) { 1032 m_missingPluginsCallback = MediaPlayerRequestInstallMissingPluginsCallback::create([this](uint32_t result) { 1033 m_missingPluginsCallback = nullptr; 1034 if (result != GST_INSTALL_PLUGINS_SUCCESS) 1035 return; 1036 1037 changePipelineState(GST_STATE_READY); 1038 changePipelineState(GST_STATE_PAUSED); 1039 }); 1040 m_player->client().requestInstallMissingPlugins(String::fromUTF8(detail.get()), *m_missingPluginsCallback); 1041 } 1037 1042 } 1038 1043 #if ENABLE(VIDEO_TRACK) && USE(GSTREAMER_MPEGTS) … … 1057 1062 } 1058 1063 return TRUE; 1059 }1060 1061 void MediaPlayerPrivateGStreamer::handlePluginInstallerResult(GstInstallPluginsReturn result)1062 {1063 m_missingPlugins = false;1064 if (result == GST_INSTALL_PLUGINS_SUCCESS) {1065 changePipelineState(GST_STATE_READY);1066 changePipelineState(GST_STATE_PAUSED);1067 }1068 1064 } 1069 1065 -
trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h
r186769 r187338 59 59 class InbandMetadataTextTrackPrivateGStreamer; 60 60 class InbandTextTrackPrivateGStreamer; 61 class MediaPlayerRequestInstallMissingPluginsCallback; 61 62 class VideoTrackPrivateGStreamer; 62 63 … … 235 236 GstState m_requestedState; 236 237 GRefPtr<GstElement> m_autoAudioSink; 237 bool m_missingPlugins;238 RefPtr<MediaPlayerRequestInstallMissingPluginsCallback> m_missingPluginsCallback; 238 239 #if ENABLE(VIDEO_TRACK) 239 240 Vector<RefPtr<AudioTrackPrivateGStreamer>> m_audioTracks; -
trunk/Source/WebKit2/ChangeLog
r187337 r187338 1 2015-07-24 Carlos Garcia Campos <cgarcia@igalia.com> 2 3 [GStreamer] Crashes during plugin installation 4 https://bugs.webkit.org/show_bug.cgi?id=144099 5 6 Reviewed by Philippe Normand. 7 8 Move the missing plugins installation to the UI process, ensuring 9 there's a single installer running and cancelling the request when 10 the page is closed or the media player is deleted. 11 12 * PlatformEfl.cmake: Add new files to compilation. 13 * PlatformGTK.cmake: Ditto. 14 * UIProcess/WebPageProxy.h: 15 * UIProcess/WebPageProxy.messages.in: Add 16 RequestInstallMissingMediaPlugins message. 17 * UIProcess/gstreamer/WebPageProxyGStreamer.cpp: Added. 18 (WebKit::WebPageProxy::requestInstallMissingMediaPlugins): Call 19 gst_install_plugins_async() and send 20 DidEndRequestInstallMissingMediaPlugins message back to the web 21 process when done. 22 * WebProcess/WebCoreSupport/WebChromeClient.cpp: 23 (WebKit::WebChromeClient::requestInstallMissingMediaPlugins): Call 24 WebPage::requestInstallMissingMediaPlugins(). 25 * WebProcess/WebCoreSupport/WebChromeClient.h: 26 * WebProcess/WebPage/WebPage.cpp: 27 (WebKit::WebPage::close): Invalidate the install missing plugins 28 request callback. 29 * WebProcess/WebPage/WebPage.h: 30 * WebProcess/WebPage/WebPage.messages.in: Add 31 DidEndRequestInstallMissingMediaPlugins message. 32 * WebProcess/WebPage/gstreamer/WebPageGStreamer.cpp: Added. 33 (WebKit::WebPage::requestInstallMissingMediaPlugins): Send 34 RequestInstallMissingMediaPlugins to the UI process or complete 35 the request early if there's already a request in progress. 36 (WebKit::WebPage::didEndRequestInstallMissingMediaPlugins): 37 Complete the request. 38 1 39 2015-07-24 Carlos Garcia Campos <cgarcia@igalia.com> 2 40 -
trunk/Source/WebKit2/PlatformEfl.cmake
r187191 r187338 184 184 UIProcess/efl/WebViewEfl.cpp 185 185 186 UIProcess/gstreamer/WebPageProxyGStreamer.cpp 187 186 188 UIProcess/soup/WebCookieManagerProxySoup.cpp 187 189 UIProcess/soup/WebProcessPoolSoup.cpp … … 216 218 WebProcess/WebPage/efl/WebInspectorUIEfl.cpp 217 219 WebProcess/WebPage/efl/WebPageEfl.cpp 220 221 WebProcess/WebPage/gstreamer/WebPageGStreamer.cpp 218 222 219 223 WebProcess/efl/ExtensionManagerEfl.cpp … … 287 291 ${EVAS_INCLUDE_DIRS} 288 292 ${GLIB_INCLUDE_DIRS} 293 ${GSTREAMER_INCLUDE_DIRS} 289 294 ${HARFBUZZ_INCLUDE_DIRS} 290 295 ${LIBSOUP_INCLUDE_DIRS} -
trunk/Source/WebKit2/PlatformGTK.cmake
r187191 r187338 291 291 UIProcess/cairo/BackingStoreCairo.cpp 292 292 293 UIProcess/gstreamer/WebPageProxyGStreamer.cpp 294 293 295 UIProcess/gtk/DragAndDropHandler.cpp 294 296 UIProcess/gtk/ExperimentalFeatures.cpp … … 341 343 342 344 WebProcess/WebPage/atk/WebPageAccessibilityObjectAtk.cpp 345 346 WebProcess/WebPage/gstreamer/WebPageGStreamer.cpp 343 347 344 348 WebProcess/WebPage/gtk/PrinterListGtk.cpp … … 516 520 ${ENCHANT_INCLUDE_DIRS} 517 521 ${GEOCLUE_INCLUDE_DIRS} 522 ${GSTREAMER_INCLUDE_DIRS} 518 523 ${HARFBUZZ_INCLUDE_DIRS} 519 524 ${LIBSOUP_INCLUDE_DIRS} -
trunk/Source/WebKit2/UIProcess/WebPageProxy.h
r187272 r187338 1480 1480 #if ENABLE(VIDEO) 1481 1481 void mediaDocumentNaturalSizeChanged(const WebCore::IntSize&); 1482 #if USE(GSTREAMER) 1483 void requestInstallMissingMediaPlugins(const String& details); 1484 #endif 1482 1485 #endif 1483 1486 -
trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in
r187272 r187338 451 451 UseFixedLayoutDidChange(bool useFixedLayout) 452 452 FixedLayoutSizeDidChange(WebCore::IntSize fixedLayoutSize) 453 454 #if ENABLE(VIDEO) && USE(GSTREAMER) 455 RequestInstallMissingMediaPlugins(String details) 456 #endif 453 457 } -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp
r187272 r187338 1164 1164 m_page->mediaDocumentNaturalSizeChanged(newSize); 1165 1165 } 1166 #endif 1166 1167 #if USE(GSTREAMER) 1168 void WebChromeClient::requestInstallMissingMediaPlugins(const String& details, WebCore::MediaPlayerRequestInstallMissingPluginsCallback& callback) 1169 { 1170 m_page->requestInstallMissingMediaPlugins(details, callback); 1171 } 1172 #endif 1173 #endif // ENABLE(VIDEO) 1167 1174 1168 1175 } // namespace WebKit -
trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.h
r187272 r187338 326 326 #if ENABLE(VIDEO) 327 327 virtual void mediaDocumentNaturalSizeChanged(const WebCore::IntSize&) override; 328 #if USE(GSTREAMER) 329 virtual void requestInstallMissingMediaPlugins(const String&, WebCore::MediaPlayerRequestInstallMissingPluginsCallback&) override; 330 #endif 328 331 #endif 329 332 -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp
r187272 r187338 217 217 #endif 218 218 219 #if ENABLE(VIDEO) && USE(GSTREAMER) 220 #include <WebCore/MediaPlayerRequestInstallMissingPluginsCallback.h> 221 #endif 222 219 223 using namespace JSC; 220 224 using namespace WebCore; … … 962 966 m_printOperation->disconnectFromPage(); 963 967 m_printOperation = nullptr; 968 } 969 #endif 970 971 #if ENABLE(VIDEO) && USE(GSTREAMER) 972 if (m_installMediaPluginsCallback) { 973 m_installMediaPluginsCallback->invalidate(); 974 m_installMediaPluginsCallback = nullptr; 964 975 } 965 976 #endif -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h
r187272 r187338 140 140 struct MediaPlaybackTargetContext; 141 141 struct TextCheckingResult; 142 143 #if ENABLE(VIDEO) && USE(GSTREAMER) 144 class MediaPlayerRequestInstallMissingPluginsCallback; 145 #endif 142 146 } 143 147 … … 905 909 #if ENABLE(VIDEO) 906 910 void mediaDocumentNaturalSizeChanged(const WebCore::IntSize&); 911 #if USE(GSTREAMER) 912 void requestInstallMissingMediaPlugins(const String& details, WebCore::MediaPlayerRequestInstallMissingPluginsCallback&); 913 #endif 907 914 #endif 908 915 … … 1153 1160 1154 1161 void pageStoppedScrolling(); 1162 1163 #if ENABLE(VIDEO) && USE(GSTREAMER) 1164 void didEndRequestInstallMissingMediaPlugins(uint32_t result); 1165 #endif 1155 1166 1156 1167 uint64_t m_pageID; … … 1403 1414 bool m_inputMethodEnabled { false }; 1404 1415 #endif 1416 1417 #if ENABLE(VIDEO) && USE(GSTREAMER) 1418 RefPtr<WebCore::MediaPlayerRequestInstallMissingPluginsCallback> m_installMediaPluginsCallback; 1419 #endif 1405 1420 }; 1406 1421 -
trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in
r187258 r187338 436 436 SetShouldScaleViewToFitDocument(bool shouldScaleViewToFitDocument) 437 437 SetUserContentExtensionsEnabled(bool userContentExtensionsEnabled) 438 439 #if ENABLE(VIDEO) && USE(GSTREAMER) 440 DidEndRequestInstallMissingMediaPlugins(uint32_t result) 441 #endif 438 442 }
Note: See TracChangeset
for help on using the changeset viewer.