Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2028)

Side by Side Diff: content/renderer/render_frame_impl.cc

Issue 2905613003: Extract media code from RenderFrameImpl (Closed)
Patch Set: MediaFactory, cleaner responsibilities. Mojo fix Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/render_frame_impl.h" 5 #include "content/renderer/render_frame_impl.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 #include "content/renderer/image_downloader/image_downloader_impl.h" 112 #include "content/renderer/image_downloader/image_downloader_impl.h"
113 #include "content/renderer/ime_event_guard.h" 113 #include "content/renderer/ime_event_guard.h"
114 #include "content/renderer/input/input_handler_manager.h" 114 #include "content/renderer/input/input_handler_manager.h"
115 #include "content/renderer/installedapp/related_apps_fetcher.h" 115 #include "content/renderer/installedapp/related_apps_fetcher.h"
116 #include "content/renderer/internal_document_state_data.h" 116 #include "content/renderer/internal_document_state_data.h"
117 #include "content/renderer/manifest/manifest_manager.h" 117 #include "content/renderer/manifest/manifest_manager.h"
118 #include "content/renderer/media/audio_device_factory.h" 118 #include "content/renderer/media/audio_device_factory.h"
119 #include "content/renderer/media/media_devices_listener_impl.h" 119 #include "content/renderer/media/media_devices_listener_impl.h"
120 #include "content/renderer/media/media_permission_dispatcher.h" 120 #include "content/renderer/media/media_permission_dispatcher.h"
121 #include "content/renderer/media/media_stream_dispatcher.h" 121 #include "content/renderer/media/media_stream_dispatcher.h"
122 #include "content/renderer/media/media_stream_renderer_factory_impl.h"
123 #include "content/renderer/media/render_media_log.h"
124 #include "content/renderer/media/renderer_webmediaplayer_delegate.h"
125 #include "content/renderer/media/user_media_client_impl.h" 122 #include "content/renderer/media/user_media_client_impl.h"
126 #include "content/renderer/media/web_media_element_source_utils.h"
127 #include "content/renderer/media/webmediaplayer_ms.h"
128 #include "content/renderer/mojo/blink_connector_js_wrapper.h" 123 #include "content/renderer/mojo/blink_connector_js_wrapper.h"
129 #include "content/renderer/mojo/blink_interface_registry_impl.h" 124 #include "content/renderer/mojo/blink_interface_registry_impl.h"
130 #include "content/renderer/mojo/interface_provider_js_wrapper.h" 125 #include "content/renderer/mojo/interface_provider_js_wrapper.h"
131 #include "content/renderer/mojo_bindings_controller.h" 126 #include "content/renderer/mojo_bindings_controller.h"
132 #include "content/renderer/navigation_state_impl.h" 127 #include "content/renderer/navigation_state_impl.h"
133 #include "content/renderer/pepper/pepper_audio_controller.h" 128 #include "content/renderer/pepper/pepper_audio_controller.h"
134 #include "content/renderer/pepper/plugin_instance_throttler_impl.h" 129 #include "content/renderer/pepper/plugin_instance_throttler_impl.h"
135 #include "content/renderer/presentation/presentation_dispatcher.h" 130 #include "content/renderer/presentation/presentation_dispatcher.h"
136 #include "content/renderer/push_messaging/push_messaging_client.h" 131 #include "content/renderer/push_messaging/push_messaging_client.h"
137 #include "content/renderer/render_frame_proxy.h" 132 #include "content/renderer/render_frame_proxy.h"
(...skipping 11 matching lines...) Expand all
149 #include "content/renderer/shared_worker/websharedworker_proxy.h" 144 #include "content/renderer/shared_worker/websharedworker_proxy.h"
150 #include "content/renderer/skia_benchmarking_extension.h" 145 #include "content/renderer/skia_benchmarking_extension.h"
151 #include "content/renderer/stats_collection_controller.h" 146 #include "content/renderer/stats_collection_controller.h"
152 #include "content/renderer/web_frame_utils.h" 147 #include "content/renderer/web_frame_utils.h"
153 #include "content/renderer/web_ui_extension.h" 148 #include "content/renderer/web_ui_extension.h"
154 #include "content/renderer/web_ui_extension_data.h" 149 #include "content/renderer/web_ui_extension_data.h"
155 #include "crypto/sha2.h" 150 #include "crypto/sha2.h"
156 #include "gin/modules/console.h" 151 #include "gin/modules/console.h"
157 #include "gin/modules/module_registry.h" 152 #include "gin/modules/module_registry.h"
158 #include "gin/modules/timer.h" 153 #include "gin/modules/timer.h"
159 #include "media/audio/audio_output_device.h" 154 #include "media/blink/webmediaplayer_util.h"
160 #include "media/base/audio_renderer_mixer_input.h"
161 #include "media/base/cdm_factory.h"
162 #include "media/base/decoder_factory.h"
163 #include "media/base/media.h"
164 #include "media/base/media_log.h"
165 #include "media/base/media_switches.h"
166 #include "media/base/renderer_factory_selector.h"
167 #include "media/blink/url_index.h"
168 #include "media/blink/webencryptedmediaclient_impl.h"
169 #include "media/blink/webmediaplayer_impl.h"
170 #include "media/media_features.h"
171 #include "media/renderers/default_renderer_factory.h"
172 #include "media/renderers/gpu_video_accelerator_factories.h"
173 #include "mojo/edk/js/core.h" 155 #include "mojo/edk/js/core.h"
174 #include "mojo/edk/js/support.h" 156 #include "mojo/edk/js/support.h"
175 #include "net/base/data_url.h" 157 #include "net/base/data_url.h"
176 #include "net/base/load_flags.h" 158 #include "net/base/load_flags.h"
177 #include "net/base/net_errors.h" 159 #include "net/base/net_errors.h"
178 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" 160 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
179 #include "net/http/http_util.h" 161 #include "net/http/http_util.h"
180 #include "ppapi/features/features.h" 162 #include "ppapi/features/features.h"
181 #include "services/service_manager/public/cpp/connector.h" 163 #include "services/service_manager/public/cpp/connector.h"
182 #include "services/service_manager/public/cpp/interface_provider.h" 164 #include "services/service_manager/public/cpp/interface_provider.h"
183 #include "services/ui/public/cpp/gpu/context_provider_command_buffer.h" 165 #include "services/ui/public/cpp/gpu/context_provider_command_buffer.h"
184 #include "storage/common/data_element.h" 166 #include "storage/common/data_element.h"
185 #include "third_party/WebKit/public/platform/FilePathConversion.h" 167 #include "third_party/WebKit/public/platform/FilePathConversion.h"
186 #include "third_party/WebKit/public/platform/InterfaceProvider.h" 168 #include "third_party/WebKit/public/platform/InterfaceProvider.h"
187 #include "third_party/WebKit/public/platform/URLConversion.h" 169 #include "third_party/WebKit/public/platform/URLConversion.h"
188 #include "third_party/WebKit/public/platform/WebCachePolicy.h" 170 #include "third_party/WebKit/public/platform/WebCachePolicy.h"
189 #include "third_party/WebKit/public/platform/WebData.h" 171 #include "third_party/WebKit/public/platform/WebData.h"
190 #include "third_party/WebKit/public/platform/WebKeyboardEvent.h" 172 #include "third_party/WebKit/public/platform/WebKeyboardEvent.h"
191 #include "third_party/WebKit/public/platform/WebMediaPlayer.h" 173 #include "third_party/WebKit/public/platform/WebMediaPlayer.h"
192 #include "third_party/WebKit/public/platform/WebMediaPlayerSource.h" 174 #include "third_party/WebKit/public/platform/WebMediaPlayerSource.h"
193 #include "third_party/WebKit/public/platform/WebPoint.h" 175 #include "third_party/WebKit/public/platform/WebPoint.h"
194 #include "third_party/WebKit/public/platform/WebSecurityOrigin.h" 176 #include "third_party/WebKit/public/platform/WebSecurityOrigin.h"
195 #include "third_party/WebKit/public/platform/WebStorageQuotaCallbacks.h" 177 #include "third_party/WebKit/public/platform/WebStorageQuotaCallbacks.h"
196 #include "third_party/WebKit/public/platform/WebString.h" 178 #include "third_party/WebKit/public/platform/WebString.h"
197 #include "third_party/WebKit/public/platform/WebURL.h" 179 #include "third_party/WebKit/public/platform/WebURL.h"
198 #include "third_party/WebKit/public/platform/WebURLError.h" 180 #include "third_party/WebKit/public/platform/WebURLError.h"
199 #include "third_party/WebKit/public/platform/WebURLResponse.h" 181 #include "third_party/WebKit/public/platform/WebURLResponse.h"
200 #include "third_party/WebKit/public/platform/WebVector.h" 182 #include "third_party/WebKit/public/platform/WebVector.h"
183 #include "third_party/WebKit/public/platform/modules/permissions/permission.mojo m.h"
201 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor kerNetworkProvider.h" 184 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor kerNetworkProvider.h"
202 #include "third_party/WebKit/public/platform/scheduler/renderer/renderer_schedul er.h" 185 #include "third_party/WebKit/public/platform/scheduler/renderer/renderer_schedul er.h"
203 #include "third_party/WebKit/public/web/WebColorSuggestion.h" 186 #include "third_party/WebKit/public/web/WebColorSuggestion.h"
204 #include "third_party/WebKit/public/web/WebConsoleMessage.h" 187 #include "third_party/WebKit/public/web/WebConsoleMessage.h"
205 #include "third_party/WebKit/public/web/WebDocument.h" 188 #include "third_party/WebKit/public/web/WebDocument.h"
206 #include "third_party/WebKit/public/web/WebFindOptions.h" 189 #include "third_party/WebKit/public/web/WebFindOptions.h"
207 #include "third_party/WebKit/public/web/WebFrameOwnerProperties.h" 190 #include "third_party/WebKit/public/web/WebFrameOwnerProperties.h"
208 #include "third_party/WebKit/public/web/WebFrameSerializer.h" 191 #include "third_party/WebKit/public/web/WebFrameSerializer.h"
209 #include "third_party/WebKit/public/web/WebFrameSerializerCacheControlPolicy.h" 192 #include "third_party/WebKit/public/web/WebFrameSerializerCacheControlPolicy.h"
210 #include "third_party/WebKit/public/web/WebFrameWidget.h" 193 #include "third_party/WebKit/public/web/WebFrameWidget.h"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 #endif 225 #endif
243 226
244 #if BUILDFLAG(ENABLE_WEBRTC) 227 #if BUILDFLAG(ENABLE_WEBRTC)
245 #include "content/renderer/media/rtc_peer_connection_handler.h" 228 #include "content/renderer/media/rtc_peer_connection_handler.h"
246 #endif 229 #endif
247 230
248 #if defined(OS_ANDROID) 231 #if defined(OS_ANDROID)
249 #include <cpu-features.h> 232 #include <cpu-features.h>
250 233
251 #include "content/renderer/java/gin_java_bridge_dispatcher.h" 234 #include "content/renderer/java/gin_java_bridge_dispatcher.h"
252 #include "content/renderer/media/android/media_player_renderer_client_factory.h"
253 #include "content/renderer/media/android/renderer_media_player_manager.h"
254 #include "content/renderer/media/android/renderer_surface_view_manager.h"
255 #include "content/renderer/media/android/stream_texture_factory.h"
256 #include "content/renderer/media/android/stream_texture_wrapper_impl.h"
257 #include "media/base/android/media_codec_util.h"
258 #include "third_party/WebKit/public/platform/WebFloatPoint.h" 235 #include "third_party/WebKit/public/platform/WebFloatPoint.h"
259 #endif 236 #endif
260 237
261 #if BUILDFLAG(ENABLE_PEPPER_CDMS)
262 #include "content/renderer/media/cdm/pepper_cdm_wrapper_impl.h"
263 #include "content/renderer/media/cdm/render_cdm_factory.h"
264 #endif
265
266 #if BUILDFLAG(ENABLE_MOJO_MEDIA)
267 #include "content/renderer/media/media_interface_provider.h"
268 #endif
269
270 #if BUILDFLAG(ENABLE_MOJO_CDM)
271 #include "media/mojo/clients/mojo_cdm_factory.h" // nogncheck
272 #endif
273
274 #if BUILDFLAG(ENABLE_MOJO_RENDERER)
275 #include "media/mojo/clients/mojo_renderer_factory.h" // nogncheck
276 #endif
277
278 #if BUILDFLAG(ENABLE_MOJO_AUDIO_DECODER) || BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER)
279 #include "media/mojo/clients/mojo_decoder_factory.h" // nogncheck
280 #endif
281
282 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
283 #include "media/remoting/courier_renderer_factory.h" // nogncheck
284 #include "media/remoting/remoting_cdm_controller.h" // nogncheck
285 #include "media/remoting/remoting_cdm_factory.h" // nogncheck
286 #include "media/remoting/renderer_controller.h" // nogncheck
287 #include "media/remoting/shared_session.h" // nogncheck
288 #include "media/remoting/sink_availability_observer.h" // nogncheck
289 #endif
290
291 using base::Time; 238 using base::Time;
292 using base::TimeDelta; 239 using base::TimeDelta;
293 using blink::WebCachePolicy; 240 using blink::WebCachePolicy;
294 using blink::WebContentDecryptionModule; 241 using blink::WebContentDecryptionModule;
295 using blink::WebContextMenuData; 242 using blink::WebContextMenuData;
296 using blink::WebCString; 243 using blink::WebCString;
297 using blink::WebData; 244 using blink::WebData;
298 using blink::WebDataSource; 245 using blink::WebDataSource;
299 using blink::WebDocument; 246 using blink::WebDocument;
300 using blink::WebDOMEvent; 247 using blink::WebDOMEvent;
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 return CommonNavigationParams( 514 return CommonNavigationParams(
568 info.url_request.Url(), referrer, extra_data->transition_type(), 515 info.url_request.Url(), referrer, extra_data->transition_type(),
569 navigation_type, true, info.replaces_current_history_item, ui_timestamp, 516 navigation_type, true, info.replaces_current_history_item, ui_timestamp,
570 report_type, GURL(), GURL(), 517 report_type, GURL(), GURL(),
571 static_cast<PreviewsState>(info.url_request.GetPreviewsState()), 518 static_cast<PreviewsState>(info.url_request.GetPreviewsState()),
572 base::TimeTicks::Now(), info.url_request.HttpMethod().Latin1(), 519 base::TimeTicks::Now(), info.url_request.HttpMethod().Latin1(),
573 GetRequestBodyForWebURLRequest(info.url_request), source_location, 520 GetRequestBodyForWebURLRequest(info.url_request), source_location,
574 should_check_main_world_csp); 521 should_check_main_world_csp);
575 } 522 }
576 523
577 media::Context3D GetSharedMainThreadContext3D(
578 scoped_refptr<ui::ContextProviderCommandBuffer> provider) {
579 if (!provider)
580 return media::Context3D();
581 return media::Context3D(provider->ContextGL(), provider->GrContext());
582 }
583
584 WebFrameLoadType ReloadFrameLoadTypeFor( 524 WebFrameLoadType ReloadFrameLoadTypeFor(
585 FrameMsg_Navigate_Type::Value navigation_type) { 525 FrameMsg_Navigate_Type::Value navigation_type) {
586 switch (navigation_type) { 526 switch (navigation_type) {
587 case FrameMsg_Navigate_Type::RELOAD: 527 case FrameMsg_Navigate_Type::RELOAD:
588 case FrameMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL: 528 case FrameMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL:
589 return WebFrameLoadType::kReload; 529 return WebFrameLoadType::kReload;
590 530
591 case FrameMsg_Navigate_Type::RELOAD_BYPASSING_CACHE: 531 case FrameMsg_Navigate_Type::RELOAD_BYPASSING_CACHE:
592 return WebFrameLoadType::kReloadBypassingCache; 532 return WebFrameLoadType::kReloadBypassingCache;
593 533
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
723 save_status = MhtmlSaveStatus::FILE_WRITTING_ERROR; 663 save_status = MhtmlSaveStatus::FILE_WRITTING_ERROR;
724 break; 664 break;
725 } 665 }
726 } 666 }
727 // Explicitly close |file| here to make sure to include any flush operations 667 // Explicitly close |file| here to make sure to include any flush operations
728 // in the UMA metric. 668 // in the UMA metric.
729 file.Close(); 669 file.Close();
730 return save_status; 670 return save_status;
731 } 671 }
732 672
733 #if defined(OS_ANDROID)
734 // Returns true if the MediaPlayerRenderer should be used for playback, false
735 // if the default renderer should be used instead.
736 //
737 // Note that HLS and MP4 detection are pre-redirect and path-based. It is
738 // possible to load such a URL and find different content.
739 bool UseMediaPlayerRenderer(const GURL& url) {
740 // Always use the default renderer for playing blob URLs.
741 if (url.SchemeIsBlob())
742 return false;
743
744 // The default renderer does not support HLS.
745 if (media::MediaCodecUtil::IsHLSURL(url))
746 return true;
747
748 // Don't use the default renderer if the container likely contains a codec we
749 // can't decode in software and platform decoders are not available.
750 if (!media::HasPlatformDecoderSupport()) {
751 // Assume that "mp4" means H264. Without platform decoder support we cannot
752 // play it with the default renderer so use MediaPlayerRenderer.
753 // http://crbug.com/642988.
754 if (base::ToLowerASCII(url.spec()).find("mp4") != std::string::npos)
755 return true;
756 }
757
758 // Indicates if the Android MediaPlayer should be used instead of WMPI.
759 if (GetContentClient()->renderer()->ShouldUseMediaPlayerForURL(url))
760 return true;
761
762 // Otherwise, use the default renderer.
763 return false;
764 }
765 #endif // defined(OS_ANDROID)
766
767 double ConvertToBlinkTime(const base::TimeTicks& time_ticks) { 673 double ConvertToBlinkTime(const base::TimeTicks& time_ticks) {
768 return (time_ticks - base::TimeTicks()).InSecondsF(); 674 return (time_ticks - base::TimeTicks()).InSecondsF();
769 } 675 }
770 676
771 } // namespace 677 } // namespace
772 678
773 // The following methods are outside of the anonymous namespace to ensure that 679 // The following methods are outside of the anonymous namespace to ensure that
774 // the corresponding symbols get emmitted even on symbol_level 1. 680 // the corresponding symbols get emmitted even on symbol_level 1.
775 NOINLINE void ExhaustMemory() { 681 NOINLINE void ExhaustMemory() {
776 volatile void* ptr = nullptr; 682 volatile void* ptr = nullptr;
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
1123 proxy_routing_id_(MSG_ROUTING_NONE), 1029 proxy_routing_id_(MSG_ROUTING_NONE),
1124 #if BUILDFLAG(ENABLE_PLUGINS) 1030 #if BUILDFLAG(ENABLE_PLUGINS)
1125 plugin_power_saver_helper_(nullptr), 1031 plugin_power_saver_helper_(nullptr),
1126 plugin_find_handler_(nullptr), 1032 plugin_find_handler_(nullptr),
1127 #endif 1033 #endif
1128 cookie_jar_(this), 1034 cookie_jar_(this),
1129 selection_text_offset_(0), 1035 selection_text_offset_(0),
1130 selection_range_(gfx::Range::InvalidRange()), 1036 selection_range_(gfx::Range::InvalidRange()),
1131 handling_select_range_(false), 1037 handling_select_range_(false),
1132 web_user_media_client_(NULL), 1038 web_user_media_client_(NULL),
1133 #if defined(OS_ANDROID)
1134 media_player_manager_(NULL),
1135 #endif
1136 media_surface_manager_(nullptr),
1137 devtools_agent_(nullptr), 1039 devtools_agent_(nullptr),
1138 presentation_dispatcher_(NULL), 1040 presentation_dispatcher_(NULL),
1139 push_messaging_client_(NULL), 1041 push_messaging_client_(NULL),
1140 screen_orientation_dispatcher_(NULL), 1042 screen_orientation_dispatcher_(NULL),
1141 manifest_manager_(NULL), 1043 manifest_manager_(NULL),
1142 render_accessibility_(NULL), 1044 render_accessibility_(NULL),
1143 media_player_delegate_(NULL),
1144 previews_state_(PREVIEWS_UNSPECIFIED), 1045 previews_state_(PREVIEWS_UNSPECIFIED),
1145 effective_connection_type_( 1046 effective_connection_type_(
1146 blink::WebEffectiveConnectionType::kTypeUnknown), 1047 blink::WebEffectiveConnectionType::kTypeUnknown),
1147 is_pasting_(false), 1048 is_pasting_(false),
1148 suppress_further_dialogs_(false), 1049 suppress_further_dialogs_(false),
1149 blame_context_(nullptr), 1050 blame_context_(nullptr),
1150 #if BUILDFLAG(ENABLE_PLUGINS) 1051 #if BUILDFLAG(ENABLE_PLUGINS)
1151 focused_pepper_plugin_(nullptr), 1052 focused_pepper_plugin_(nullptr),
1152 pepper_last_mouse_event_target_(nullptr), 1053 pepper_last_mouse_event_target_(nullptr),
1153 #endif 1054 #endif
1154 engagement_binding_(this), 1055 engagement_binding_(this),
1155 frame_binding_(this), 1056 frame_binding_(this),
1156 host_zoom_binding_(this), 1057 host_zoom_binding_(this),
1157 frame_bindings_control_binding_(this), 1058 frame_bindings_control_binding_(this),
1158 has_accessed_initial_document_(false), 1059 has_accessed_initial_document_(false),
1060 media_factory_(this,
1061 base::Bind(&RenderFrameImpl::RequestOverlayRoutingToken,
1062 base::Unretained(this))),
1159 weak_factory_(this) { 1063 weak_factory_(this) {
1160 interface_registry_ = base::MakeUnique<service_manager::BinderRegistry>(); 1064 interface_registry_ = base::MakeUnique<service_manager::BinderRegistry>();
1161 service_manager::mojom::InterfaceProviderPtr remote_interfaces; 1065 service_manager::mojom::InterfaceProviderPtr remote_interfaces;
1162 pending_remote_interface_provider_request_ = MakeRequest(&remote_interfaces); 1066 pending_remote_interface_provider_request_ = MakeRequest(&remote_interfaces);
1163 remote_interfaces_.reset(new service_manager::InterfaceProvider); 1067 remote_interfaces_.reset(new service_manager::InterfaceProvider);
1164 remote_interfaces_->Bind(std::move(remote_interfaces)); 1068 remote_interfaces_->Bind(std::move(remote_interfaces));
1165 blink_interface_provider_.reset(new BlinkInterfaceProviderImpl( 1069 blink_interface_provider_.reset(new BlinkInterfaceProviderImpl(
1166 remote_interfaces_->GetWeakPtr())); 1070 remote_interfaces_->GetWeakPtr()));
1167 blink_interface_registry_.reset( 1071 blink_interface_registry_.reset(
1168 new BlinkInterfaceRegistryImpl(interface_registry_->GetWeakPtr())); 1072 new BlinkInterfaceRegistryImpl(interface_registry_->GetWeakPtr()));
1169 1073
1074 // Must call after binding our own remote interfaces.
1075 media_factory_.SetupMojo();
1076
1170 std::pair<RoutingIDFrameMap::iterator, bool> result = 1077 std::pair<RoutingIDFrameMap::iterator, bool> result =
1171 g_routing_id_frame_map.Get().insert(std::make_pair(routing_id_, this)); 1078 g_routing_id_frame_map.Get().insert(std::make_pair(routing_id_, this));
1172 CHECK(result.second) << "Inserting a duplicate item."; 1079 CHECK(result.second) << "Inserting a duplicate item.";
1173 1080
1174 RenderThread::Get()->AddRoute(routing_id_, this); 1081 RenderThread::Get()->AddRoute(routing_id_, this);
1175 1082
1176 render_view_->RegisterRenderFrame(this); 1083 render_view_->RegisterRenderFrame(this);
1177 1084
1178 // Everything below subclasses RenderFrameObserver and is automatically 1085 // Everything below subclasses RenderFrameObserver and is automatically
1179 // deleted when the RenderFrame gets deleted. 1086 // deleted when the RenderFrame gets deleted.
1180 #if defined(OS_ANDROID) 1087 #if defined(OS_ANDROID)
1181 new GinJavaBridgeDispatcher(this); 1088 new GinJavaBridgeDispatcher(this);
1182 #endif 1089 #endif
1183 1090
1184 #if BUILDFLAG(ENABLE_PLUGINS) 1091 #if BUILDFLAG(ENABLE_PLUGINS)
1185 // Manages its own lifetime. 1092 // Manages its own lifetime.
1186 plugin_power_saver_helper_ = new PluginPowerSaverHelper(this); 1093 plugin_power_saver_helper_ = new PluginPowerSaverHelper(this);
1187 #endif 1094 #endif
1188 1095
1189 manifest_manager_ = new ManifestManager(this); 1096 manifest_manager_ = new ManifestManager(this);
1190
1191 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
1192 // Create the SinkAvailabilityObserver to monitor the remoting sink
1193 // availablity.
1194 media::mojom::RemotingSourcePtr remoting_source;
1195 auto remoting_source_request = mojo::MakeRequest(&remoting_source);
1196 media::mojom::RemoterPtr remoter;
1197 GetRemoterFactory()->Create(std::move(remoting_source),
1198 mojo::MakeRequest(&remoter));
1199 remoting_sink_observer_ =
1200 base::MakeUnique<media::remoting::SinkAvailabilityObserver>(
1201 std::move(remoting_source_request), std::move(remoter));
1202 #endif // BUILDFLAG(ENABLE_MEDIA_REMOTING)
1203 } 1097 }
1204 1098
1205 mojom::FrameHostAssociatedPtr RenderFrameImpl::GetFrameHost() { 1099 mojom::FrameHostAssociatedPtr RenderFrameImpl::GetFrameHost() {
1206 mojom::FrameHostAssociatedPtr frame_host_ptr; 1100 mojom::FrameHostAssociatedPtr frame_host_ptr;
1207 GetRemoteAssociatedInterfaces()->GetInterface(&frame_host_ptr); 1101 GetRemoteAssociatedInterfaces()->GetInterface(&frame_host_ptr);
1208 return frame_host_ptr; 1102 return frame_host_ptr;
1209 } 1103 }
1210 1104
1211 RenderFrameImpl::~RenderFrameImpl() { 1105 RenderFrameImpl::~RenderFrameImpl() {
1212 // If file chooser is still waiting for answer, dispatch empty answer. 1106 // If file chooser is still waiting for answer, dispatch empty answer.
(...skipping 1271 matching lines...) Expand 10 before | Expand all | Expand 10 after
2484 2378
2485 blink::WebLocalFrame* RenderFrameImpl::GetWebFrame() { 2379 blink::WebLocalFrame* RenderFrameImpl::GetWebFrame() {
2486 DCHECK(frame_); 2380 DCHECK(frame_);
2487 return frame_; 2381 return frame_;
2488 } 2382 }
2489 2383
2490 const WebPreferences& RenderFrameImpl::GetWebkitPreferences() { 2384 const WebPreferences& RenderFrameImpl::GetWebkitPreferences() {
2491 return render_view_->GetWebkitPreferences(); 2385 return render_view_->GetWebkitPreferences();
2492 } 2386 }
2493 2387
2388 const RendererPreferences& RenderFrameImpl::GetRendererPreferences() const {
2389 return render_view_->renderer_preferences();
2390 }
2391
2494 int RenderFrameImpl::ShowContextMenu(ContextMenuClient* client, 2392 int RenderFrameImpl::ShowContextMenu(ContextMenuClient* client,
2495 const ContextMenuParams& params) { 2393 const ContextMenuParams& params) {
2496 DCHECK(client); // A null client means "internal" when we issue callbacks. 2394 DCHECK(client); // A null client means "internal" when we issue callbacks.
2497 ContextMenuParams our_params(params); 2395 ContextMenuParams our_params(params);
2498 2396
2499 blink::WebRect position_in_window(params.x, params.y, 0, 0); 2397 blink::WebRect position_in_window(params.x, params.y, 0, 0);
2500 GetRenderWidget()->ConvertViewportToWindow(&position_in_window); 2398 GetRenderWidget()->ConvertViewportToWindow(&position_in_window);
2501 our_params.x = position_in_window.x; 2399 our_params.x = position_in_window.x;
2502 our_params.y = position_in_window.y; 2400 our_params.y = position_in_window.y;
2503 2401
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
2819 return nullptr; 2717 return nullptr;
2820 #endif // BUILDFLAG(ENABLE_PLUGINS) 2718 #endif // BUILDFLAG(ENABLE_PLUGINS)
2821 } 2719 }
2822 2720
2823 blink::WebMediaPlayer* RenderFrameImpl::CreateMediaPlayer( 2721 blink::WebMediaPlayer* RenderFrameImpl::CreateMediaPlayer(
2824 const blink::WebMediaPlayerSource& source, 2722 const blink::WebMediaPlayerSource& source,
2825 WebMediaPlayerClient* client, 2723 WebMediaPlayerClient* client,
2826 WebMediaPlayerEncryptedMediaClient* encrypted_client, 2724 WebMediaPlayerEncryptedMediaClient* encrypted_client,
2827 WebContentDecryptionModule* initial_cdm, 2725 WebContentDecryptionModule* initial_cdm,
2828 const blink::WebString& sink_id) { 2726 const blink::WebString& sink_id) {
2829 blink::WebSecurityOrigin security_origin = frame_->GetSecurityOrigin(); 2727 return media_factory_.CreateMediaPlayer(source, client, encrypted_client,
2830 blink::WebMediaStream web_stream = 2728 initial_cdm, sink_id);
2831 GetWebMediaStreamFromWebMediaPlayerSource(source);
2832 if (!web_stream.IsNull())
2833 return CreateWebMediaPlayerForMediaStream(client, sink_id, security_origin);
2834
2835 // If |source| was not a MediaStream, it must be a URL.
2836 // TODO(guidou): Fix this when support for other srcObject types is added.
2837 DCHECK(source.IsURL());
2838 blink::WebURL url = source.GetAsURL();
2839
2840 RenderThreadImpl* render_thread = RenderThreadImpl::current();
2841 // Render thread may not exist in tests, returning nullptr if it does not.
2842 if (!render_thread)
2843 return nullptr;
2844
2845 scoped_refptr<media::SwitchableAudioRendererSink> audio_renderer_sink =
2846 AudioDeviceFactory::NewSwitchableAudioRendererSink(
2847 AudioDeviceFactory::kSourceMediaElement, routing_id_, 0,
2848 sink_id.Utf8(), security_origin);
2849 // We need to keep a reference to the context provider (see crbug.com/610527)
2850 // but media/ can't depend on cc/, so for now, just keep a reference in the
2851 // callback.
2852 // TODO(piman): replace media::Context3D to scoped_refptr<ContextProvider> in
2853 // media/ once ContextProvider is in gpu/.
2854 media::WebMediaPlayerParams::Context3DCB context_3d_cb = base::Bind(
2855 &GetSharedMainThreadContext3D,
2856 RenderThreadImpl::current()->SharedMainThreadContextProvider());
2857
2858 bool embedded_media_experience_enabled = false;
2859 #if defined(OS_ANDROID)
2860 if (!UseMediaPlayerRenderer(url) && !media_surface_manager_)
2861 media_surface_manager_ = new RendererSurfaceViewManager(this);
2862 embedded_media_experience_enabled =
2863 GetWebkitPreferences().embedded_media_experience_enabled;
2864 #endif // defined(OS_ANDROID)
2865
2866 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
2867 media::mojom::RemotingSourcePtr remoting_source;
2868 auto remoting_source_request = mojo::MakeRequest(&remoting_source);
2869 media::mojom::RemoterPtr remoter;
2870 GetRemoterFactory()->Create(std::move(remoting_source),
2871 mojo::MakeRequest(&remoter));
2872 using RemotingController = media::remoting::RendererController;
2873 std::unique_ptr<RemotingController> remoting_controller(
2874 new RemotingController(new media::remoting::SharedSession(
2875 std::move(remoting_source_request), std::move(remoter))));
2876 base::WeakPtr<media::MediaObserver> media_observer =
2877 remoting_controller->GetWeakPtr();
2878 #else
2879 base::WeakPtr<media::MediaObserver> media_observer = nullptr;
2880 #endif
2881
2882 base::TimeDelta max_keyframe_distance_to_disable_background_video =
2883 base::TimeDelta::FromMilliseconds(base::GetFieldTrialParamByFeatureAsInt(
2884 media::kBackgroundVideoTrackOptimization, "max_keyframe_distance_ms",
2885 base::TimeDelta::FromSeconds(10).InMilliseconds()));
2886 base::TimeDelta max_keyframe_distance_to_disable_background_video_mse =
2887 base::TimeDelta::FromMilliseconds(base::GetFieldTrialParamByFeatureAsInt(
2888 media::kBackgroundVideoTrackOptimization,
2889 "max_keyframe_distance_media_source_ms",
2890 base::TimeDelta::FromSeconds(10).InMilliseconds()));
2891
2892 // This must be created for every new WebMediaPlayer, each instance generates
2893 // a new player id which is used to collate logs on the browser side.
2894 std::unique_ptr<media::MediaLog> media_log(
2895 new RenderMediaLog(url::Origin(security_origin).GetURL()));
2896
2897 auto factory_selector = base::MakeUnique<media::RendererFactorySelector>();
2898
2899 #if defined(OS_ANDROID)
2900 // The only MojoRendererService that is registered at the RenderFrameHost
2901 // level uses the MediaPlayerRenderer as its underlying media::Renderer.
2902 auto mojo_media_player_renderer_factory =
2903 base::MakeUnique<media::MojoRendererFactory>(
2904 media::MojoRendererFactory::GetGpuFactoriesCB(),
2905 GetRemoteInterfaces()->get());
2906
2907 // Always give |factory_selector| a MediaPlayerRendererClient factory. WMPI
2908 // might fallback to it if the final redirected URL is an HLS url.
2909 factory_selector->AddFactory(
2910 media::RendererFactorySelector::FactoryType::MEDIA_PLAYER,
2911 base::MakeUnique<MediaPlayerRendererClientFactory>(
2912 render_thread->compositor_task_runner(),
2913 std::move(mojo_media_player_renderer_factory),
2914 base::Bind(&StreamTextureWrapperImpl::Create,
2915 render_thread->EnableStreamTextureCopy(),
2916 render_thread->GetStreamTexureFactory(),
2917 base::ThreadTaskRunnerHandle::Get())));
2918
2919 factory_selector->SetUseMediaPlayer(UseMediaPlayerRenderer(url));
2920 #endif // defined(OS_ANDROID)
2921
2922 bool use_mojo_renderer_factory = false;
2923 #if BUILDFLAG(ENABLE_MOJO_RENDERER)
2924 #if BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION)
2925 use_mojo_renderer_factory =
2926 !base::CommandLine::ForCurrentProcess()->HasSwitch(
2927 switches::kDisableMojoRenderer);
2928 #else
2929 use_mojo_renderer_factory = true;
2930 #endif // BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION)
2931 if (use_mojo_renderer_factory) {
2932 factory_selector->AddFactory(
2933 media::RendererFactorySelector::FactoryType::MOJO,
2934 base::MakeUnique<media::MojoRendererFactory>(
2935 base::Bind(&RenderThreadImpl::GetGpuFactories,
2936 base::Unretained(render_thread)),
2937 GetMediaInterfaceProvider()));
2938
2939 factory_selector->SetBaseFactoryType(
2940 media::RendererFactorySelector::FactoryType::MOJO);
2941 }
2942 #endif // BUILDFLAG(ENABLE_MOJO_RENDERER)
2943
2944 if (!use_mojo_renderer_factory) {
2945 factory_selector->AddFactory(
2946 media::RendererFactorySelector::FactoryType::DEFAULT,
2947 base::MakeUnique<media::DefaultRendererFactory>(
2948 media_log.get(), GetDecoderFactory(),
2949 base::Bind(&RenderThreadImpl::GetGpuFactories,
2950 base::Unretained(render_thread))));
2951
2952 factory_selector->SetBaseFactoryType(
2953 media::RendererFactorySelector::FactoryType::DEFAULT);
2954 }
2955
2956 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
2957 auto courier_factory =
2958 base::MakeUnique<media::remoting::CourierRendererFactory>(
2959 std::move(remoting_controller));
2960
2961 // base::Unretained is safe here because |factory_selector| owns
2962 // |courier_factory|.
2963 factory_selector->SetQueryIsRemotingActiveCB(
2964 base::Bind(&media::remoting::CourierRendererFactory::IsRemotingActive,
2965 base::Unretained(courier_factory.get())));
2966
2967 factory_selector->AddFactory(
2968 media::RendererFactorySelector::FactoryType::COURIER,
2969 std::move(courier_factory));
2970 #endif
2971
2972 if (!url_index_.get() || url_index_->frame() != frame_)
2973 url_index_.reset(new media::UrlIndex(frame_));
2974
2975 std::unique_ptr<media::WebMediaPlayerParams> params(
2976 new media::WebMediaPlayerParams(
2977 std::move(media_log),
2978 base::Bind(&ContentRendererClient::DeferMediaLoad,
2979 base::Unretained(GetContentClient()->renderer()),
2980 static_cast<RenderFrame*>(this),
2981 GetWebMediaPlayerDelegate()->has_played_media()),
2982 audio_renderer_sink, render_thread->GetMediaThreadTaskRunner(),
2983 render_thread->GetWorkerTaskRunner(),
2984 render_thread->compositor_task_runner(), context_3d_cb,
2985 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory,
2986 base::Unretained(blink::MainThreadIsolate())),
2987 initial_cdm, media_surface_manager_,
2988 base::Bind(&RenderFrameImpl::RequestOverlayRoutingToken,
2989 base::Unretained(this)),
2990 media_observer, max_keyframe_distance_to_disable_background_video,
2991 max_keyframe_distance_to_disable_background_video_mse,
2992 GetWebkitPreferences().enable_instant_source_buffer_gc,
2993 GetContentClient()->renderer()->AllowMediaSuspend(),
2994 embedded_media_experience_enabled));
2995
2996 media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl(
2997 frame_, client, encrypted_client, GetWebMediaPlayerDelegate(),
2998 std::move(factory_selector), url_index_, std::move(params));
2999
3000 #if defined(OS_ANDROID) // WMPI_CAST
3001 media_player->SetMediaPlayerManager(GetMediaPlayerManager());
3002 media_player->SetDeviceScaleFactor(render_view_->GetDeviceScaleFactor());
3003 #endif // defined(OS_ANDROID)
3004
3005 return media_player;
3006 } 2729 }
3007 2730
3008 std::unique_ptr<blink::WebApplicationCacheHost> 2731 std::unique_ptr<blink::WebApplicationCacheHost>
3009 RenderFrameImpl::CreateApplicationCacheHost( 2732 RenderFrameImpl::CreateApplicationCacheHost(
3010 blink::WebApplicationCacheHostClient* client) { 2733 blink::WebApplicationCacheHostClient* client) {
3011 if (!frame_ || !frame_->View()) 2734 if (!frame_ || !frame_->View())
3012 return nullptr; 2735 return nullptr;
3013 2736
3014 DocumentState* document_state = 2737 DocumentState* document_state =
3015 frame_->ProvisionalDataSource() 2738 frame_->ProvisionalDataSource()
(...skipping 1690 matching lines...) Expand 10 before | Expand all | Expand 10 after
4706 #endif 4429 #endif
4707 } 4430 }
4708 4431
4709 blink::WebUserMediaClient* RenderFrameImpl::UserMediaClient() { 4432 blink::WebUserMediaClient* RenderFrameImpl::UserMediaClient() {
4710 if (!web_user_media_client_) 4433 if (!web_user_media_client_)
4711 InitializeUserMediaClient(); 4434 InitializeUserMediaClient();
4712 return web_user_media_client_; 4435 return web_user_media_client_;
4713 } 4436 }
4714 4437
4715 blink::WebEncryptedMediaClient* RenderFrameImpl::EncryptedMediaClient() { 4438 blink::WebEncryptedMediaClient* RenderFrameImpl::EncryptedMediaClient() {
4716 if (!web_encrypted_media_client_) { 4439 return media_factory_.EncryptedMediaClient();
4717 web_encrypted_media_client_.reset(new media::WebEncryptedMediaClientImpl(
4718 // base::Unretained(this) is safe because WebEncryptedMediaClientImpl
4719 // is destructed before |this|, and does not give away ownership of the
4720 // callback.
4721 base::Bind(&RenderFrameImpl::AreSecureCodecsSupported,
4722 base::Unretained(this)),
4723 GetCdmFactory(), GetMediaPermission(),
4724 new RenderMediaLog(url::Origin(frame_->GetSecurityOrigin()).GetURL())));
4725 }
4726 return web_encrypted_media_client_.get();
4727 } 4440 }
4728 4441
4729 blink::WebString RenderFrameImpl::UserAgentOverride() { 4442 blink::WebString RenderFrameImpl::UserAgentOverride() {
4730 if (!render_view_->webview() || !render_view_->webview()->MainFrame() || 4443 if (!render_view_->webview() || !render_view_->webview()->MainFrame() ||
4731 render_view_->renderer_preferences_.user_agent_override.empty()) { 4444 render_view_->renderer_preferences_.user_agent_override.empty()) {
4732 return blink::WebString(); 4445 return blink::WebString();
4733 } 4446 }
4734 4447
4735 // TODO(nasko): When the top-level frame is remote, there is no WebDataSource 4448 // TODO(nasko): When the top-level frame is remote, there is no WebDataSource
4736 // associated with it, so the checks below are not valid. Temporarily 4449 // associated with it, so the checks below are not valid. Temporarily
(...skipping 1627 matching lines...) Expand 10 before | Expand all | Expand 10 after
6364 DCHECK(!web_user_media_client_); 6077 DCHECK(!web_user_media_client_);
6365 web_user_media_client_ = new UserMediaClientImpl( 6078 web_user_media_client_ = new UserMediaClientImpl(
6366 this, RenderThreadImpl::current()->GetPeerConnectionDependencyFactory(), 6079 this, RenderThreadImpl::current()->GetPeerConnectionDependencyFactory(),
6367 base::MakeUnique<MediaStreamDispatcher>(this), 6080 base::MakeUnique<MediaStreamDispatcher>(this),
6368 render_thread->GetWorkerTaskRunner()); 6081 render_thread->GetWorkerTaskRunner());
6369 GetInterfaceRegistry()->AddInterface( 6082 GetInterfaceRegistry()->AddInterface(
6370 base::Bind(&MediaDevicesListenerImpl::Create, GetRoutingID())); 6083 base::Bind(&MediaDevicesListenerImpl::Create, GetRoutingID()));
6371 #endif 6084 #endif
6372 } 6085 }
6373 6086
6374 WebMediaPlayer* RenderFrameImpl::CreateWebMediaPlayerForMediaStream(
6375 WebMediaPlayerClient* client,
6376 const WebString& sink_id,
6377 const WebSecurityOrigin& security_origin) {
6378 #if BUILDFLAG(ENABLE_WEBRTC)
6379 RenderThreadImpl* const render_thread = RenderThreadImpl::current();
6380
6381 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner =
6382 render_thread->compositor_task_runner();
6383 if (!compositor_task_runner.get())
6384 compositor_task_runner = base::ThreadTaskRunnerHandle::Get();
6385
6386 return new WebMediaPlayerMS(
6387 frame_, client, GetWebMediaPlayerDelegate(),
6388 base::MakeUnique<RenderMediaLog>(url::Origin(security_origin).GetURL()),
6389 CreateRendererFactory(), render_thread->GetIOTaskRunner(),
6390 compositor_task_runner, render_thread->GetMediaThreadTaskRunner(),
6391 render_thread->GetWorkerTaskRunner(), render_thread->GetGpuFactories(),
6392 sink_id, security_origin);
6393 #else
6394 return NULL;
6395 #endif // BUILDFLAG(ENABLE_WEBRTC)
6396 }
6397
6398 std::unique_ptr<MediaStreamRendererFactory>
6399 RenderFrameImpl::CreateRendererFactory() {
6400 std::unique_ptr<MediaStreamRendererFactory> factory =
6401 GetContentClient()->renderer()->CreateMediaStreamRendererFactory();
6402 if (factory.get())
6403 return factory;
6404 #if BUILDFLAG(ENABLE_WEBRTC)
6405 return std::unique_ptr<MediaStreamRendererFactory>(
6406 new MediaStreamRendererFactoryImpl());
6407 #else
6408 return std::unique_ptr<MediaStreamRendererFactory>(
6409 static_cast<MediaStreamRendererFactory*>(NULL));
6410 #endif
6411 }
6412
6413 void RenderFrameImpl::PrepareRenderViewForNavigation( 6087 void RenderFrameImpl::PrepareRenderViewForNavigation(
6414 const GURL& url, 6088 const GURL& url,
6415 const RequestNavigationParams& request_params) { 6089 const RequestNavigationParams& request_params) {
6416 DCHECK(render_view_->webview()); 6090 DCHECK(render_view_->webview());
6417 6091
6418 MaybeHandleDebugURL(url); 6092 MaybeHandleDebugURL(url);
6419 6093
6420 if (is_main_frame_) { 6094 if (is_main_frame_) {
6421 for (auto& observer : render_view_->observers_) 6095 for (auto& observer : render_view_->observers_)
6422 observer.Navigate(url); 6096 observer.Navigate(url);
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
6725 !common_params.history_url_for_data_url.is_empty() && 6399 !common_params.history_url_for_data_url.is_empty() &&
6726 common_params.url.SchemeIs(url::kDataScheme); 6400 common_params.url.SchemeIs(url::kDataScheme);
6727 document_state->set_was_load_data_with_base_url_request(load_data); 6401 document_state->set_was_load_data_with_base_url_request(load_data);
6728 if (load_data) 6402 if (load_data)
6729 document_state->set_data_url(common_params.url); 6403 document_state->set_data_url(common_params.url);
6730 } 6404 }
6731 6405
6732 pending_navigation_params_.reset(); 6406 pending_navigation_params_.reset();
6733 } 6407 }
6734 6408
6735 #if defined(OS_ANDROID)
6736 RendererMediaPlayerManager* RenderFrameImpl::GetMediaPlayerManager() {
6737 if (!media_player_manager_)
6738 media_player_manager_ = new RendererMediaPlayerManager(this);
6739 return media_player_manager_;
6740 }
6741 #endif // defined(OS_ANDROID)
6742
6743 media::MediaPermission* RenderFrameImpl::GetMediaPermission() { 6409 media::MediaPermission* RenderFrameImpl::GetMediaPermission() {
6744 if (!media_permission_dispatcher_) { 6410 if (!media_permission_dispatcher_) {
6745 media_permission_dispatcher_.reset(new MediaPermissionDispatcher(base::Bind( 6411 media_permission_dispatcher_.reset(new MediaPermissionDispatcher(base::Bind(
6746 &RenderFrameImpl::GetInterface<blink::mojom::PermissionService>, 6412 &RenderFrameImpl::GetInterface<blink::mojom::PermissionService>,
6747 base::Unretained(this)))); 6413 base::Unretained(this))));
6748 } 6414 }
6749 return media_permission_dispatcher_.get(); 6415 return media_permission_dispatcher_.get();
6750 } 6416 }
6751 6417
6752 #if BUILDFLAG(ENABLE_MOJO_MEDIA)
6753 service_manager::mojom::InterfaceProvider*
6754 RenderFrameImpl::GetMediaInterfaceProvider() {
6755 if (!media_interface_provider_) {
6756 media_interface_provider_.reset(
6757 new MediaInterfaceProvider(GetRemoteInterfaces()));
6758 }
6759
6760 return media_interface_provider_.get();
6761 }
6762 #endif // BUILDFLAG(ENABLE_MOJO_MEDIA)
6763
6764 bool RenderFrameImpl::AreSecureCodecsSupported() {
6765 #if defined(OS_ANDROID)
6766 // Hardware-secure codecs are only supported if secure surfaces are enabled.
6767 return render_view_->renderer_preferences_
6768 .use_video_overlay_for_embedded_encrypted_video;
6769 #else
6770 return false;
6771 #endif // defined(OS_ANDROID)
6772 }
6773
6774 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
6775 media::mojom::RemoterFactory* RenderFrameImpl::GetRemoterFactory() {
6776 if (!remoter_factory_)
6777 GetRemoteInterfaces()->GetInterface(&remoter_factory_);
6778 return remoter_factory_.get();
6779 }
6780 #endif
6781
6782 media::CdmFactory* RenderFrameImpl::GetCdmFactory() {
6783 DCHECK(frame_);
6784
6785 if (cdm_factory_)
6786 return cdm_factory_.get();
6787
6788 #if BUILDFLAG(ENABLE_PEPPER_CDMS)
6789 static_assert(BUILDFLAG(ENABLE_MOJO_CDM),
6790 "Mojo CDM should always be enabled when PPAPI CDM is enabled");
6791 if (base::FeatureList::IsEnabled(media::kMojoCdm)) {
6792 cdm_factory_.reset(new media::MojoCdmFactory(GetMediaInterfaceProvider()));
6793 } else {
6794 cdm_factory_.reset(new RenderCdmFactory(
6795 base::Bind(&PepperCdmWrapperImpl::Create, frame_)));
6796 }
6797 #elif BUILDFLAG(ENABLE_MOJO_CDM)
6798 cdm_factory_.reset(new media::MojoCdmFactory(GetMediaInterfaceProvider()));
6799 #endif // BUILDFLAG(ENABLE_PEPPER_CDMS)
6800
6801 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
6802 cdm_factory_.reset(new media::remoting::RemotingCdmFactory(
6803 std::move(cdm_factory_), GetRemoterFactory(),
6804 std::move(remoting_sink_observer_)));
6805 #endif // BUILDFLAG(ENABLE_MEDIA_REMOTING)
6806
6807 return cdm_factory_.get();
6808 }
6809
6810 media::DecoderFactory* RenderFrameImpl::GetDecoderFactory() {
6811 #if BUILDFLAG(ENABLE_MOJO_AUDIO_DECODER) || BUILDFLAG(ENABLE_MOJO_VIDEO_DECODER)
6812 if (!decoder_factory_) {
6813 decoder_factory_.reset(
6814 new media::MojoDecoderFactory(GetMediaInterfaceProvider()));
6815 }
6816 #endif
6817 return decoder_factory_.get();
6818 }
6819
6820 #if BUILDFLAG(ENABLE_PLUGINS) 6418 #if BUILDFLAG(ENABLE_PLUGINS)
6821 void RenderFrameImpl::HandlePepperImeCommit(const base::string16& text) { 6419 void RenderFrameImpl::HandlePepperImeCommit(const base::string16& text) {
6822 if (text.empty()) 6420 if (text.empty())
6823 return; 6421 return;
6824 6422
6825 if (!IsPepperAcceptingCompositionEvents()) { 6423 if (!IsPepperAcceptingCompositionEvents()) {
6826 // For pepper plugins unable to handle IME events, send the plugin a 6424 // For pepper plugins unable to handle IME events, send the plugin a
6827 // sequence of characters instead. 6425 // sequence of characters instead.
6828 base::i18n::UTF16CharIterator iterator(&text); 6426 base::i18n::UTF16CharIterator iterator(&text);
6829 int32_t i = 0; 6427 int32_t i = 0;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
6876 void RenderFrameImpl::GetInterface(mojo::InterfaceRequest<Interface> request) { 6474 void RenderFrameImpl::GetInterface(mojo::InterfaceRequest<Interface> request) {
6877 GetRemoteInterfaces()->GetInterface(std::move(request)); 6475 GetRemoteInterfaces()->GetInterface(std::move(request));
6878 } 6476 }
6879 6477
6880 void RenderFrameImpl::OnHostZoomClientRequest( 6478 void RenderFrameImpl::OnHostZoomClientRequest(
6881 mojom::HostZoomAssociatedRequest request) { 6479 mojom::HostZoomAssociatedRequest request) {
6882 DCHECK(!host_zoom_binding_.is_bound()); 6480 DCHECK(!host_zoom_binding_.is_bound());
6883 host_zoom_binding_.Bind(std::move(request)); 6481 host_zoom_binding_.Bind(std::move(request));
6884 } 6482 }
6885 6483
6886 media::RendererWebMediaPlayerDelegate*
6887 RenderFrameImpl::GetWebMediaPlayerDelegate() {
6888 if (!media_player_delegate_)
6889 media_player_delegate_ = new media::RendererWebMediaPlayerDelegate(this);
6890 return media_player_delegate_;
6891 }
6892
6893 void RenderFrameImpl::CheckIfAudioSinkExistsAndIsAuthorized( 6484 void RenderFrameImpl::CheckIfAudioSinkExistsAndIsAuthorized(
6894 const blink::WebString& sink_id, 6485 const blink::WebString& sink_id,
6895 const blink::WebSecurityOrigin& security_origin, 6486 const blink::WebSecurityOrigin& security_origin,
6896 blink::WebSetSinkIdCallbacks* web_callbacks) { 6487 blink::WebSetSinkIdCallbacks* web_callbacks) {
6897 media::OutputDeviceStatusCB callback = 6488 media::OutputDeviceStatusCB callback =
6898 media::ConvertToOutputDeviceStatusCB(web_callbacks); 6489 media::ConvertToOutputDeviceStatusCB(web_callbacks);
6899 callback.Run(AudioDeviceFactory::GetOutputDeviceInfo( 6490 callback.Run(AudioDeviceFactory::GetOutputDeviceInfo(
6900 routing_id_, 0, sink_id.Utf8(), security_origin) 6491 GetRoutingID(), 0, sink_id.Utf8(), security_origin)
6901 .device_status()); 6492 .device_status());
6902 } 6493 }
6903 6494
6904 blink::WebPageVisibilityState RenderFrameImpl::VisibilityState() const { 6495 blink::WebPageVisibilityState RenderFrameImpl::VisibilityState() const {
6905 const RenderFrameImpl* local_root = GetLocalRoot(); 6496 const RenderFrameImpl* local_root = GetLocalRoot();
6906 blink::WebPageVisibilityState current_state = 6497 blink::WebPageVisibilityState current_state =
6907 local_root->render_widget_->is_hidden() 6498 local_root->render_widget_->is_hidden()
6908 ? blink::kWebPageVisibilityStateHidden 6499 ? blink::kWebPageVisibilityStateHidden
6909 : blink::kWebPageVisibilityStateVisible; 6500 : blink::kWebPageVisibilityStateVisible;
6910 blink::WebPageVisibilityState override_state = current_state; 6501 blink::WebPageVisibilityState override_state = current_state;
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
7083 policy(info.default_policy), 6674 policy(info.default_policy),
7084 replaces_current_history_item(info.replaces_current_history_item), 6675 replaces_current_history_item(info.replaces_current_history_item),
7085 history_navigation_in_new_child_frame( 6676 history_navigation_in_new_child_frame(
7086 info.is_history_navigation_in_new_child_frame), 6677 info.is_history_navigation_in_new_child_frame),
7087 client_redirect(info.is_client_redirect), 6678 client_redirect(info.is_client_redirect),
7088 cache_disabled(info.is_cache_disabled), 6679 cache_disabled(info.is_cache_disabled),
7089 form(info.form), 6680 form(info.form),
7090 source_location(info.source_location) {} 6681 source_location(info.source_location) {}
7091 6682
7092 } // namespace content 6683 } // namespace content
OLDNEW
« content/renderer/media/media_factory.h ('K') | « content/renderer/render_frame_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698