OLD | NEW |
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 | 9 |
10 #include "base/auto_reset.h" | 10 #include "base/auto_reset.h" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 #include "content/renderer/child_frame_compositing_helper.h" | 49 #include "content/renderer/child_frame_compositing_helper.h" |
50 #include "content/renderer/context_menu_params_builder.h" | 50 #include "content/renderer/context_menu_params_builder.h" |
51 #include "content/renderer/devtools/devtools_agent.h" | 51 #include "content/renderer/devtools/devtools_agent.h" |
52 #include "content/renderer/dom_automation_controller.h" | 52 #include "content/renderer/dom_automation_controller.h" |
53 #include "content/renderer/history_controller.h" | 53 #include "content/renderer/history_controller.h" |
54 #include "content/renderer/history_serialization.h" | 54 #include "content/renderer/history_serialization.h" |
55 #include "content/renderer/image_loading_helper.h" | 55 #include "content/renderer/image_loading_helper.h" |
56 #include "content/renderer/ime_event_guard.h" | 56 #include "content/renderer/ime_event_guard.h" |
57 #include "content/renderer/internal_document_state_data.h" | 57 #include "content/renderer/internal_document_state_data.h" |
58 #include "content/renderer/java/java_bridge_dispatcher.h" | 58 #include "content/renderer/java/java_bridge_dispatcher.h" |
| 59 #include "content/renderer/media/audio_renderer_mixer_manager.h" |
| 60 #include "content/renderer/media/media_stream_dispatcher.h" |
| 61 #include "content/renderer/media/media_stream_impl.h" |
| 62 #include "content/renderer/media/render_media_log.h" |
59 #include "content/renderer/media/webcontentdecryptionmodule_impl.h" | 63 #include "content/renderer/media/webcontentdecryptionmodule_impl.h" |
| 64 #include "content/renderer/media/webmediaplayer_impl.h" |
| 65 #include "content/renderer/media/webmediaplayer_ms.h" |
| 66 #include "content/renderer/media/webmediaplayer_params.h" |
60 #include "content/renderer/notification_provider.h" | 67 #include "content/renderer/notification_provider.h" |
61 #include "content/renderer/npapi/plugin_channel_host.h" | 68 #include "content/renderer/npapi/plugin_channel_host.h" |
62 #include "content/renderer/render_process.h" | 69 #include "content/renderer/render_process.h" |
63 #include "content/renderer/render_thread_impl.h" | 70 #include "content/renderer/render_thread_impl.h" |
64 #include "content/renderer/render_view_impl.h" | 71 #include "content/renderer/render_view_impl.h" |
65 #include "content/renderer/render_widget_fullscreen_pepper.h" | 72 #include "content/renderer/render_widget_fullscreen_pepper.h" |
66 #include "content/renderer/renderer_webapplicationcachehost_impl.h" | 73 #include "content/renderer/renderer_webapplicationcachehost_impl.h" |
67 #include "content/renderer/renderer_webcolorchooser_impl.h" | 74 #include "content/renderer/renderer_webcolorchooser_impl.h" |
68 #include "content/renderer/shared_worker_repository.h" | 75 #include "content/renderer/shared_worker_repository.h" |
69 #include "content/renderer/v8_value_converter_impl.h" | 76 #include "content/renderer/v8_value_converter_impl.h" |
70 #include "content/renderer/websharedworker_proxy.h" | 77 #include "content/renderer/websharedworker_proxy.h" |
| 78 #include "media/base/audio_renderer_mixer_input.h" |
71 #include "net/base/data_url.h" | 79 #include "net/base/data_url.h" |
72 #include "net/base/net_errors.h" | 80 #include "net/base/net_errors.h" |
73 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" | 81 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
74 #include "net/http/http_util.h" | 82 #include "net/http/http_util.h" |
75 #include "third_party/WebKit/public/platform/WebStorageQuotaCallbacks.h" | 83 #include "third_party/WebKit/public/platform/WebStorageQuotaCallbacks.h" |
76 #include "third_party/WebKit/public/platform/WebString.h" | 84 #include "third_party/WebKit/public/platform/WebString.h" |
77 #include "third_party/WebKit/public/platform/WebURL.h" | 85 #include "third_party/WebKit/public/platform/WebURL.h" |
78 #include "third_party/WebKit/public/platform/WebURLError.h" | 86 #include "third_party/WebKit/public/platform/WebURLError.h" |
79 #include "third_party/WebKit/public/platform/WebURLResponse.h" | 87 #include "third_party/WebKit/public/platform/WebURLResponse.h" |
80 #include "third_party/WebKit/public/platform/WebVector.h" | 88 #include "third_party/WebKit/public/platform/WebVector.h" |
(...skipping 18 matching lines...) Expand all Loading... |
99 #include "content/renderer/pepper/pepper_browser_connection.h" | 107 #include "content/renderer/pepper/pepper_browser_connection.h" |
100 #include "content/renderer/pepper/pepper_plugin_instance_impl.h" | 108 #include "content/renderer/pepper/pepper_plugin_instance_impl.h" |
101 #include "content/renderer/pepper/pepper_webplugin_impl.h" | 109 #include "content/renderer/pepper/pepper_webplugin_impl.h" |
102 #include "content/renderer/pepper/plugin_module.h" | 110 #include "content/renderer/pepper/plugin_module.h" |
103 #endif | 111 #endif |
104 | 112 |
105 #if defined(ENABLE_WEBRTC) | 113 #if defined(ENABLE_WEBRTC) |
106 #include "content/renderer/media/rtc_peer_connection_handler.h" | 114 #include "content/renderer/media/rtc_peer_connection_handler.h" |
107 #endif | 115 #endif |
108 | 116 |
| 117 #if defined(OS_ANDROID) |
| 118 #include <cpu-features.h> |
| 119 |
| 120 #include "content/common/gpu/client/context_provider_command_buffer.h" |
| 121 #include "content/renderer/android/synchronous_compositor_factory.h" |
| 122 #include "content/renderer/media/android/stream_texture_factory_impl.h" |
| 123 #include "content/renderer/media/android/webmediaplayer_android.h" |
| 124 #endif |
| 125 |
109 using blink::WebContextMenuData; | 126 using blink::WebContextMenuData; |
110 using blink::WebData; | 127 using blink::WebData; |
111 using blink::WebDataSource; | 128 using blink::WebDataSource; |
112 using blink::WebDocument; | 129 using blink::WebDocument; |
113 using blink::WebElement; | 130 using blink::WebElement; |
114 using blink::WebFrame; | 131 using blink::WebFrame; |
115 using blink::WebHistoryItem; | 132 using blink::WebHistoryItem; |
116 using blink::WebHTTPBody; | 133 using blink::WebHTTPBody; |
117 using blink::WebLocalFrame; | 134 using blink::WebLocalFrame; |
| 135 using blink::WebMediaPlayer; |
| 136 using blink::WebMediaPlayerClient; |
118 using blink::WebNavigationPolicy; | 137 using blink::WebNavigationPolicy; |
119 using blink::WebNavigationType; | 138 using blink::WebNavigationType; |
120 using blink::WebNode; | 139 using blink::WebNode; |
121 using blink::WebPluginParams; | 140 using blink::WebPluginParams; |
122 using blink::WebRange; | 141 using blink::WebRange; |
123 using blink::WebReferrerPolicy; | 142 using blink::WebReferrerPolicy; |
124 using blink::WebScriptSource; | 143 using blink::WebScriptSource; |
125 using blink::WebSearchableFormData; | 144 using blink::WebSearchableFormData; |
126 using blink::WebSecurityOrigin; | 145 using blink::WebSecurityOrigin; |
127 using blink::WebSecurityPolicy; | 146 using blink::WebSecurityPolicy; |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
334 RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id) | 353 RenderFrameImpl::RenderFrameImpl(RenderViewImpl* render_view, int routing_id) |
335 : frame_(NULL), | 354 : frame_(NULL), |
336 render_view_(render_view->AsWeakPtr()), | 355 render_view_(render_view->AsWeakPtr()), |
337 routing_id_(routing_id), | 356 routing_id_(routing_id), |
338 is_swapped_out_(false), | 357 is_swapped_out_(false), |
339 is_detaching_(false), | 358 is_detaching_(false), |
340 cookie_jar_(this), | 359 cookie_jar_(this), |
341 selection_text_offset_(0), | 360 selection_text_offset_(0), |
342 selection_range_(gfx::Range::InvalidRange()), | 361 selection_range_(gfx::Range::InvalidRange()), |
343 handling_select_range_(false), | 362 handling_select_range_(false), |
344 notification_provider_(NULL) { | 363 notification_provider_(NULL), |
| 364 media_stream_client_(NULL), |
| 365 web_user_media_client_(NULL), |
| 366 weak_factory_(this) { |
345 RenderThread::Get()->AddRoute(routing_id_, this); | 367 RenderThread::Get()->AddRoute(routing_id_, this); |
346 | 368 |
347 #if defined(OS_ANDROID) | 369 #if defined(OS_ANDROID) |
348 new JavaBridgeDispatcher(this); | 370 new JavaBridgeDispatcher(this); |
349 #endif | 371 #endif |
350 | 372 |
351 #if defined(ENABLE_NOTIFICATIONS) | 373 #if defined(ENABLE_NOTIFICATIONS) |
352 notification_provider_ = new NotificationProvider(this); | 374 notification_provider_ = new NotificationProvider(this); |
353 #endif | 375 #endif |
354 } | 376 } |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
560 // Mimics the order of events sent by WebKit. | 582 // Mimics the order of events sent by WebKit. |
561 // See WebCore::Editor::setComposition() for the corresponding code. | 583 // See WebCore::Editor::setComposition() for the corresponding code. |
562 render_view_->focused_pepper_plugin()->HandleCompositionEnd(last_text); | 584 render_view_->focused_pepper_plugin()->HandleCompositionEnd(last_text); |
563 render_view_->focused_pepper_plugin()->HandleTextInput(last_text); | 585 render_view_->focused_pepper_plugin()->HandleTextInput(last_text); |
564 } | 586 } |
565 pepper_composition_text_.clear(); | 587 pepper_composition_text_.clear(); |
566 } | 588 } |
567 | 589 |
568 #endif // ENABLE_PLUGINS | 590 #endif // ENABLE_PLUGINS |
569 | 591 |
| 592 void RenderFrameImpl::SetMediaStreamClientForTesting( |
| 593 MediaStreamClient* media_stream_client) { |
| 594 DCHECK(!media_stream_client_); |
| 595 DCHECK(!web_user_media_client_); |
| 596 media_stream_client_ = media_stream_client; |
| 597 } |
| 598 |
570 bool RenderFrameImpl::Send(IPC::Message* message) { | 599 bool RenderFrameImpl::Send(IPC::Message* message) { |
571 if (is_detaching_ || | 600 if (is_detaching_ || |
572 ((is_swapped_out_ || render_view_->is_swapped_out()) && | 601 ((is_swapped_out_ || render_view_->is_swapped_out()) && |
573 !SwappedOutMessages::CanSendWhileSwappedOut(message))) { | 602 !SwappedOutMessages::CanSendWhileSwappedOut(message))) { |
574 delete message; | 603 delete message; |
575 return false; | 604 return false; |
576 } | 605 } |
577 | 606 |
578 return RenderThread::Get()->Send(message); | 607 return RenderThread::Get()->Send(message); |
579 } | 608 } |
(...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1279 return CreatePlugin(frame, info, params_to_use); | 1308 return CreatePlugin(frame, info, params_to_use); |
1280 #else | 1309 #else |
1281 return NULL; | 1310 return NULL; |
1282 #endif // defined(ENABLE_PLUGINS) | 1311 #endif // defined(ENABLE_PLUGINS) |
1283 } | 1312 } |
1284 | 1313 |
1285 blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( | 1314 blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( |
1286 blink::WebLocalFrame* frame, | 1315 blink::WebLocalFrame* frame, |
1287 const blink::WebURL& url, | 1316 const blink::WebURL& url, |
1288 blink::WebMediaPlayerClient* client) { | 1317 blink::WebMediaPlayerClient* client) { |
1289 DCHECK(!frame_ || frame_ == frame); | 1318 WebMediaPlayer* player = CreateWebMediaPlayerForMediaStream(url, client); |
1290 // TODO(nasko): Moving the implementation here involves moving a few media | 1319 if (player) |
1291 // related client objects here or referencing them in the RenderView. Needs | 1320 return player; |
1292 // more work to understand where the proper place for those objects is. | 1321 |
1293 return render_view_->CreateMediaPlayer(this, frame, url, client); | 1322 #if defined(OS_ANDROID) |
| 1323 return CreateAndroidWebMediaPlayer(url, client); |
| 1324 #else |
| 1325 WebMediaPlayerParams params( |
| 1326 base::Bind(&ContentRendererClient::DeferMediaLoad, |
| 1327 base::Unretained(GetContentClient()->renderer()), |
| 1328 static_cast<RenderFrame*>(this)), |
| 1329 RenderThreadImpl::current()->GetAudioRendererMixerManager()->CreateInput( |
| 1330 render_view_->routing_id_, routing_id_)); |
| 1331 return new WebMediaPlayerImpl(frame, client, weak_factory_.GetWeakPtr(), |
| 1332 params); |
| 1333 #endif // defined(OS_ANDROID) |
1294 } | 1334 } |
1295 | 1335 |
1296 blink::WebContentDecryptionModule* | 1336 blink::WebContentDecryptionModule* |
1297 RenderFrameImpl::createContentDecryptionModule( | 1337 RenderFrameImpl::createContentDecryptionModule( |
1298 blink::WebLocalFrame* frame, | 1338 blink::WebLocalFrame* frame, |
1299 const blink::WebSecurityOrigin& security_origin, | 1339 const blink::WebSecurityOrigin& security_origin, |
1300 const blink::WebString& key_system) { | 1340 const blink::WebString& key_system) { |
1301 DCHECK(!frame_ || frame_ == frame); | 1341 DCHECK(!frame_ || frame_ == frame); |
1302 return WebContentDecryptionModuleImpl::Create( | 1342 return WebContentDecryptionModuleImpl::Create( |
1303 frame, security_origin, key_system); | 1343 frame, security_origin, key_system); |
(...skipping 1315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2619 void RenderFrameImpl::willStartUsingPeerConnectionHandler( | 2659 void RenderFrameImpl::willStartUsingPeerConnectionHandler( |
2620 blink::WebLocalFrame* frame, | 2660 blink::WebLocalFrame* frame, |
2621 blink::WebRTCPeerConnectionHandler* handler) { | 2661 blink::WebRTCPeerConnectionHandler* handler) { |
2622 DCHECK(!frame_ || frame_ == frame); | 2662 DCHECK(!frame_ || frame_ == frame); |
2623 #if defined(ENABLE_WEBRTC) | 2663 #if defined(ENABLE_WEBRTC) |
2624 static_cast<RTCPeerConnectionHandler*>(handler)->associateWithFrame(frame); | 2664 static_cast<RTCPeerConnectionHandler*>(handler)->associateWithFrame(frame); |
2625 #endif | 2665 #endif |
2626 } | 2666 } |
2627 | 2667 |
2628 blink::WebUserMediaClient* RenderFrameImpl::userMediaClient() { | 2668 blink::WebUserMediaClient* RenderFrameImpl::userMediaClient() { |
2629 return render_view_->userMediaClient(); | 2669 // This can happen in tests, in which case it's OK to return NULL. |
| 2670 if (!InitializeMediaStreamClient()) |
| 2671 return NULL; |
| 2672 |
| 2673 return web_user_media_client_; |
2630 } | 2674 } |
2631 | 2675 |
2632 blink::WebMIDIClient* RenderFrameImpl::webMIDIClient() { | 2676 blink::WebMIDIClient* RenderFrameImpl::webMIDIClient() { |
2633 return render_view_->webMIDIClient(); | 2677 return render_view_->webMIDIClient(); |
2634 } | 2678 } |
2635 | 2679 |
2636 bool RenderFrameImpl::willCheckAndDispatchMessageEvent( | 2680 bool RenderFrameImpl::willCheckAndDispatchMessageEvent( |
2637 blink::WebLocalFrame* sourceFrame, | 2681 blink::WebLocalFrame* sourceFrame, |
2638 blink::WebFrame* targetFrame, | 2682 blink::WebFrame* targetFrame, |
2639 blink::WebSecurityOrigin targetOrigin, | 2683 blink::WebSecurityOrigin targetOrigin, |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2704 void RenderFrameImpl::forwardInputEvent(const blink::WebInputEvent* event) { | 2748 void RenderFrameImpl::forwardInputEvent(const blink::WebInputEvent* event) { |
2705 Send(new FrameHostMsg_ForwardInputEvent(routing_id_, event)); | 2749 Send(new FrameHostMsg_ForwardInputEvent(routing_id_, event)); |
2706 } | 2750 } |
2707 | 2751 |
2708 void RenderFrameImpl::initializeChildFrame(const blink::WebRect& frame_rect, | 2752 void RenderFrameImpl::initializeChildFrame(const blink::WebRect& frame_rect, |
2709 float scale_factor) { | 2753 float scale_factor) { |
2710 Send(new FrameHostMsg_InitializeChildFrame( | 2754 Send(new FrameHostMsg_InitializeChildFrame( |
2711 routing_id_, frame_rect, scale_factor)); | 2755 routing_id_, frame_rect, scale_factor)); |
2712 } | 2756 } |
2713 | 2757 |
| 2758 void RenderFrameImpl::DidPlay(blink::WebMediaPlayer* player) { |
| 2759 Send(new FrameHostMsg_MediaPlayingNotification( |
| 2760 routing_id_, reinterpret_cast<int64>(player), player->hasVideo(), |
| 2761 player->hasAudio())); |
| 2762 } |
| 2763 |
| 2764 void RenderFrameImpl::DidPause(blink::WebMediaPlayer* player) { |
| 2765 Send(new FrameHostMsg_MediaPausedNotification( |
| 2766 routing_id_, reinterpret_cast<int64>(player))); |
| 2767 } |
| 2768 |
| 2769 void RenderFrameImpl::PlayerGone(blink::WebMediaPlayer* player) { |
| 2770 DidPause(player); |
| 2771 } |
| 2772 |
2714 void RenderFrameImpl::AddObserver(RenderFrameObserver* observer) { | 2773 void RenderFrameImpl::AddObserver(RenderFrameObserver* observer) { |
2715 observers_.AddObserver(observer); | 2774 observers_.AddObserver(observer); |
2716 } | 2775 } |
2717 | 2776 |
2718 void RenderFrameImpl::RemoveObserver(RenderFrameObserver* observer) { | 2777 void RenderFrameImpl::RemoveObserver(RenderFrameObserver* observer) { |
2719 observer->RenderFrameGone(); | 2778 observer->RenderFrameGone(); |
2720 observers_.RemoveObserver(observer); | 2779 observers_.RemoveObserver(observer); |
2721 } | 2780 } |
2722 | 2781 |
2723 void RenderFrameImpl::OnStop() { | 2782 void RenderFrameImpl::OnStop() { |
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3236 selection_text_ = text; | 3295 selection_text_ = text; |
3237 selection_text_offset_ = offset; | 3296 selection_text_offset_ = offset; |
3238 selection_range_ = range; | 3297 selection_range_ = range; |
3239 // This IPC is dispatched by RenderWidetHost, so use its routing ID. | 3298 // This IPC is dispatched by RenderWidetHost, so use its routing ID. |
3240 Send(new ViewHostMsg_SelectionChanged( | 3299 Send(new ViewHostMsg_SelectionChanged( |
3241 GetRenderWidget()->routing_id(), text, offset, range)); | 3300 GetRenderWidget()->routing_id(), text, offset, range)); |
3242 } | 3301 } |
3243 GetRenderWidget()->UpdateSelectionBounds(); | 3302 GetRenderWidget()->UpdateSelectionBounds(); |
3244 } | 3303 } |
3245 | 3304 |
| 3305 bool RenderFrameImpl::InitializeMediaStreamClient() { |
| 3306 if (media_stream_client_) |
| 3307 return true; |
| 3308 |
| 3309 if (!RenderThreadImpl::current()) // Will be NULL during unit tests. |
| 3310 return false; |
| 3311 |
| 3312 #if defined(OS_ANDROID) |
| 3313 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableWebRTC)) |
| 3314 return false; |
| 3315 #endif |
| 3316 |
| 3317 #if defined(ENABLE_WEBRTC) |
| 3318 if (!render_view_->media_stream_dispatcher_) { |
| 3319 render_view_->media_stream_dispatcher_ = |
| 3320 new MediaStreamDispatcher(render_view_.get()); |
| 3321 } |
| 3322 |
| 3323 MediaStreamImpl* media_stream_impl = new MediaStreamImpl( |
| 3324 render_view_.get(), |
| 3325 render_view_->media_stream_dispatcher_, |
| 3326 RenderThreadImpl::current()->GetMediaStreamDependencyFactory()); |
| 3327 media_stream_client_ = media_stream_impl; |
| 3328 web_user_media_client_ = media_stream_impl; |
| 3329 return true; |
| 3330 #else |
| 3331 return false; |
| 3332 #endif |
| 3333 } |
| 3334 |
| 3335 WebMediaPlayer* RenderFrameImpl::CreateWebMediaPlayerForMediaStream( |
| 3336 const blink::WebURL& url, |
| 3337 WebMediaPlayerClient* client) { |
| 3338 #if defined(ENABLE_WEBRTC) |
| 3339 if (!InitializeMediaStreamClient()) { |
| 3340 LOG(ERROR) << "Failed to initialize MediaStreamClient"; |
| 3341 return NULL; |
| 3342 } |
| 3343 if (media_stream_client_->IsMediaStream(url)) { |
| 3344 #if defined(OS_ANDROID) && defined(ARCH_CPU_ARMEL) |
| 3345 bool found_neon = |
| 3346 (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0; |
| 3347 UMA_HISTOGRAM_BOOLEAN("Platform.WebRtcNEONFound", found_neon); |
| 3348 #endif // defined(OS_ANDROID) && defined(ARCH_CPU_ARMEL) |
| 3349 return new WebMediaPlayerMS(frame_, client, weak_factory_.GetWeakPtr(), |
| 3350 media_stream_client_, new RenderMediaLog()); |
| 3351 } |
| 3352 #endif // defined(ENABLE_WEBRTC) |
| 3353 return NULL; |
| 3354 } |
| 3355 |
| 3356 #if defined(OS_ANDROID) |
| 3357 |
| 3358 WebMediaPlayer* RenderFrameImpl::CreateAndroidWebMediaPlayer( |
| 3359 const blink::WebURL& url, |
| 3360 WebMediaPlayerClient* client) { |
| 3361 GpuChannelHost* gpu_channel_host = |
| 3362 RenderThreadImpl::current()->EstablishGpuChannelSync( |
| 3363 CAUSE_FOR_GPU_LAUNCH_VIDEODECODEACCELERATOR_INITIALIZE); |
| 3364 if (!gpu_channel_host) { |
| 3365 LOG(ERROR) << "Failed to establish GPU channel for media player"; |
| 3366 return NULL; |
| 3367 } |
| 3368 |
| 3369 scoped_refptr<StreamTextureFactory> stream_texture_factory; |
| 3370 if (GetRenderWidget()->UsingSynchronousRendererCompositor()) { |
| 3371 SynchronousCompositorFactory* factory = |
| 3372 SynchronousCompositorFactory::GetInstance(); |
| 3373 stream_texture_factory = factory->CreateStreamTextureFactory( |
| 3374 render_view_->routing_id_); |
| 3375 } else { |
| 3376 scoped_refptr<webkit::gpu::ContextProviderWebContext> context_provider = |
| 3377 RenderThreadImpl::current()->SharedMainThreadContextProvider(); |
| 3378 |
| 3379 if (!context_provider.get()) { |
| 3380 LOG(ERROR) << "Failed to get context3d for media player"; |
| 3381 return NULL; |
| 3382 } |
| 3383 |
| 3384 stream_texture_factory = StreamTextureFactoryImpl::Create( |
| 3385 context_provider, gpu_channel_host, render_view_->routing_id_); |
| 3386 } |
| 3387 |
| 3388 return new WebMediaPlayerAndroid( |
| 3389 frame_, |
| 3390 client, |
| 3391 weak_factory_.GetWeakPtr(), |
| 3392 render_view_->media_player_manager_, |
| 3393 stream_texture_factory, |
| 3394 RenderThreadImpl::current()->GetMediaThreadMessageLoopProxy(), |
| 3395 new RenderMediaLog()); |
| 3396 } |
| 3397 |
| 3398 #endif |
| 3399 |
3246 } // namespace content | 3400 } // namespace content |
OLD | NEW |