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

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

Issue 294043015: Move creation of MediaStream renders from MediaStreamImpl to MediaStreamRenderFactory (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed commments. Fixed build when enable_webrtc = 0 Created 6 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 | Annotate | Revision Log
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 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 #include "content/renderer/dom_automation_controller.h" 53 #include "content/renderer/dom_automation_controller.h"
54 #include "content/renderer/history_controller.h" 54 #include "content/renderer/history_controller.h"
55 #include "content/renderer/history_serialization.h" 55 #include "content/renderer/history_serialization.h"
56 #include "content/renderer/image_loading_helper.h" 56 #include "content/renderer/image_loading_helper.h"
57 #include "content/renderer/ime_event_guard.h" 57 #include "content/renderer/ime_event_guard.h"
58 #include "content/renderer/internal_document_state_data.h" 58 #include "content/renderer/internal_document_state_data.h"
59 #include "content/renderer/java/java_bridge_dispatcher.h" 59 #include "content/renderer/java/java_bridge_dispatcher.h"
60 #include "content/renderer/media/audio_renderer_mixer_manager.h" 60 #include "content/renderer/media/audio_renderer_mixer_manager.h"
61 #include "content/renderer/media/media_stream_dispatcher.h" 61 #include "content/renderer/media/media_stream_dispatcher.h"
62 #include "content/renderer/media/media_stream_impl.h" 62 #include "content/renderer/media/media_stream_impl.h"
63 #include "content/renderer/media/media_stream_renderer_factory.h"
63 #include "content/renderer/media/render_media_log.h" 64 #include "content/renderer/media/render_media_log.h"
64 #include "content/renderer/media/webcontentdecryptionmodule_impl.h" 65 #include "content/renderer/media/webcontentdecryptionmodule_impl.h"
65 #include "content/renderer/media/webmediaplayer_impl.h" 66 #include "content/renderer/media/webmediaplayer_impl.h"
66 #include "content/renderer/media/webmediaplayer_ms.h" 67 #include "content/renderer/media/webmediaplayer_ms.h"
67 #include "content/renderer/media/webmediaplayer_params.h" 68 #include "content/renderer/media/webmediaplayer_params.h"
68 #include "content/renderer/notification_provider.h" 69 #include "content/renderer/notification_provider.h"
69 #include "content/renderer/npapi/plugin_channel_host.h" 70 #include "content/renderer/npapi/plugin_channel_host.h"
70 #include "content/renderer/render_process.h" 71 #include "content/renderer/render_process.h"
71 #include "content/renderer/render_thread_impl.h" 72 #include "content/renderer/render_thread_impl.h"
72 #include "content/renderer/render_view_impl.h" 73 #include "content/renderer/render_view_impl.h"
(...skipping 11 matching lines...) Expand all
84 #include "third_party/WebKit/public/platform/WebStorageQuotaCallbacks.h" 85 #include "third_party/WebKit/public/platform/WebStorageQuotaCallbacks.h"
85 #include "third_party/WebKit/public/platform/WebString.h" 86 #include "third_party/WebKit/public/platform/WebString.h"
86 #include "third_party/WebKit/public/platform/WebURL.h" 87 #include "third_party/WebKit/public/platform/WebURL.h"
87 #include "third_party/WebKit/public/platform/WebURLError.h" 88 #include "third_party/WebKit/public/platform/WebURLError.h"
88 #include "third_party/WebKit/public/platform/WebURLResponse.h" 89 #include "third_party/WebKit/public/platform/WebURLResponse.h"
89 #include "third_party/WebKit/public/platform/WebVector.h" 90 #include "third_party/WebKit/public/platform/WebVector.h"
90 #include "third_party/WebKit/public/web/WebColorSuggestion.h" 91 #include "third_party/WebKit/public/web/WebColorSuggestion.h"
91 #include "third_party/WebKit/public/web/WebDocument.h" 92 #include "third_party/WebKit/public/web/WebDocument.h"
92 #include "third_party/WebKit/public/web/WebGlyphCache.h" 93 #include "third_party/WebKit/public/web/WebGlyphCache.h"
93 #include "third_party/WebKit/public/web/WebLocalFrame.h" 94 #include "third_party/WebKit/public/web/WebLocalFrame.h"
95 #include "third_party/WebKit/public/web/WebMediaStreamRegistry.h"
94 #include "third_party/WebKit/public/web/WebNavigationPolicy.h" 96 #include "third_party/WebKit/public/web/WebNavigationPolicy.h"
95 #include "third_party/WebKit/public/web/WebPlugin.h" 97 #include "third_party/WebKit/public/web/WebPlugin.h"
96 #include "third_party/WebKit/public/web/WebPluginParams.h" 98 #include "third_party/WebKit/public/web/WebPluginParams.h"
97 #include "third_party/WebKit/public/web/WebRange.h" 99 #include "third_party/WebKit/public/web/WebRange.h"
98 #include "third_party/WebKit/public/web/WebScriptSource.h" 100 #include "third_party/WebKit/public/web/WebScriptSource.h"
99 #include "third_party/WebKit/public/web/WebSearchableFormData.h" 101 #include "third_party/WebKit/public/web/WebSearchableFormData.h"
100 #include "third_party/WebKit/public/web/WebSecurityOrigin.h" 102 #include "third_party/WebKit/public/web/WebSecurityOrigin.h"
101 #include "third_party/WebKit/public/web/WebSecurityPolicy.h" 103 #include "third_party/WebKit/public/web/WebSecurityPolicy.h"
102 #include "third_party/WebKit/public/web/WebUserGestureIndicator.h" 104 #include "third_party/WebKit/public/web/WebUserGestureIndicator.h"
103 #include "third_party/WebKit/public/web/WebView.h" 105 #include "third_party/WebKit/public/web/WebView.h"
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 render_view_(render_view->AsWeakPtr()), 397 render_view_(render_view->AsWeakPtr()),
396 routing_id_(routing_id), 398 routing_id_(routing_id),
397 is_swapped_out_(false), 399 is_swapped_out_(false),
398 render_frame_proxy_(NULL), 400 render_frame_proxy_(NULL),
399 is_detaching_(false), 401 is_detaching_(false),
400 cookie_jar_(this), 402 cookie_jar_(this),
401 selection_text_offset_(0), 403 selection_text_offset_(0),
402 selection_range_(gfx::Range::InvalidRange()), 404 selection_range_(gfx::Range::InvalidRange()),
403 handling_select_range_(false), 405 handling_select_range_(false),
404 notification_provider_(NULL), 406 notification_provider_(NULL),
405 media_stream_client_(NULL),
406 web_user_media_client_(NULL), 407 web_user_media_client_(NULL),
407 weak_factory_(this) { 408 weak_factory_(this) {
408 RenderThread::Get()->AddRoute(routing_id_, this); 409 RenderThread::Get()->AddRoute(routing_id_, this);
409 410
410 std::pair<RoutingIDFrameMap::iterator, bool> result = 411 std::pair<RoutingIDFrameMap::iterator, bool> result =
411 g_routing_id_frame_map.Get().insert(std::make_pair(routing_id_, this)); 412 g_routing_id_frame_map.Get().insert(std::make_pair(routing_id_, this));
412 CHECK(result.second) << "Inserting a duplicate item."; 413 CHECK(result.second) << "Inserting a duplicate item.";
413 414
414 #if defined(OS_ANDROID) 415 #if defined(OS_ANDROID)
415 new JavaBridgeDispatcher(this); 416 new JavaBridgeDispatcher(this);
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 // Mimics the order of events sent by WebKit. 629 // Mimics the order of events sent by WebKit.
629 // See WebCore::Editor::setComposition() for the corresponding code. 630 // See WebCore::Editor::setComposition() for the corresponding code.
630 render_view_->focused_pepper_plugin()->HandleCompositionEnd(last_text); 631 render_view_->focused_pepper_plugin()->HandleCompositionEnd(last_text);
631 render_view_->focused_pepper_plugin()->HandleTextInput(last_text); 632 render_view_->focused_pepper_plugin()->HandleTextInput(last_text);
632 } 633 }
633 pepper_composition_text_.clear(); 634 pepper_composition_text_.clear();
634 } 635 }
635 636
636 #endif // ENABLE_PLUGINS 637 #endif // ENABLE_PLUGINS
637 638
638 void RenderFrameImpl::SetMediaStreamClientForTesting(
639 MediaStreamClient* media_stream_client) {
640 DCHECK(!media_stream_client_);
641 DCHECK(!web_user_media_client_);
642 media_stream_client_ = media_stream_client;
643 }
644
645 bool RenderFrameImpl::Send(IPC::Message* message) { 639 bool RenderFrameImpl::Send(IPC::Message* message) {
646 if (is_detaching_) { 640 if (is_detaching_) {
647 delete message; 641 delete message;
648 return false; 642 return false;
649 } 643 }
650 if (is_swapped_out_ || render_view_->is_swapped_out()) { 644 if (is_swapped_out_ || render_view_->is_swapped_out()) {
651 if (!SwappedOutMessages::CanSendWhileSwappedOut(message)) { 645 if (!SwappedOutMessages::CanSendWhileSwappedOut(message)) {
652 delete message; 646 delete message;
653 return false; 647 return false;
654 } 648 }
(...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after
1368 return CreatePlugin(frame, info, params_to_use); 1362 return CreatePlugin(frame, info, params_to_use);
1369 #else 1363 #else
1370 return NULL; 1364 return NULL;
1371 #endif // defined(ENABLE_PLUGINS) 1365 #endif // defined(ENABLE_PLUGINS)
1372 } 1366 }
1373 1367
1374 blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( 1368 blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer(
1375 blink::WebLocalFrame* frame, 1369 blink::WebLocalFrame* frame,
1376 const blink::WebURL& url, 1370 const blink::WebURL& url,
1377 blink::WebMediaPlayerClient* client) { 1371 blink::WebMediaPlayerClient* client) {
1378 WebMediaPlayer* player = CreateWebMediaPlayerForMediaStream(url, client); 1372 blink::WebMediaStream web_stream(
1379 if (player) 1373 blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor(url));
1380 return player; 1374 if (!web_stream.isNull())
1375 return CreateWebMediaPlayerForMediaStream(url, client);
1381 1376
1382 #if defined(OS_ANDROID) 1377 #if defined(OS_ANDROID)
1383 return CreateAndroidWebMediaPlayer(url, client); 1378 return CreateAndroidWebMediaPlayer(url, client);
1384 #else 1379 #else
1385 WebMediaPlayerParams params( 1380 WebMediaPlayerParams params(
1386 base::Bind(&ContentRendererClient::DeferMediaLoad, 1381 base::Bind(&ContentRendererClient::DeferMediaLoad,
1387 base::Unretained(GetContentClient()->renderer()), 1382 base::Unretained(GetContentClient()->renderer()),
1388 static_cast<RenderFrame*>(this)), 1383 static_cast<RenderFrame*>(this)),
1389 RenderThreadImpl::current()->GetAudioRendererMixerManager()->CreateInput( 1384 RenderThreadImpl::current()->GetAudioRendererMixerManager()->CreateInput(
1390 render_view_->routing_id_, routing_id_)); 1385 render_view_->routing_id_, routing_id_));
(...skipping 1335 matching lines...) Expand 10 before | Expand all | Expand 10 after
2726 blink::WebLocalFrame* frame, 2721 blink::WebLocalFrame* frame,
2727 blink::WebRTCPeerConnectionHandler* handler) { 2722 blink::WebRTCPeerConnectionHandler* handler) {
2728 DCHECK(!frame_ || frame_ == frame); 2723 DCHECK(!frame_ || frame_ == frame);
2729 #if defined(ENABLE_WEBRTC) 2724 #if defined(ENABLE_WEBRTC)
2730 static_cast<RTCPeerConnectionHandler*>(handler)->associateWithFrame(frame); 2725 static_cast<RTCPeerConnectionHandler*>(handler)->associateWithFrame(frame);
2731 #endif 2726 #endif
2732 } 2727 }
2733 2728
2734 blink::WebUserMediaClient* RenderFrameImpl::userMediaClient() { 2729 blink::WebUserMediaClient* RenderFrameImpl::userMediaClient() {
2735 // This can happen in tests, in which case it's OK to return NULL. 2730 // This can happen in tests, in which case it's OK to return NULL.
2736 if (!InitializeMediaStreamClient()) 2731 if (!InitializeUserMediaClient())
2737 return NULL; 2732 return NULL;
2738 2733
2739 return web_user_media_client_; 2734 return web_user_media_client_;
2740 } 2735 }
2741 2736
2742 blink::WebMIDIClient* RenderFrameImpl::webMIDIClient() { 2737 blink::WebMIDIClient* RenderFrameImpl::webMIDIClient() {
2743 return render_view_->webMIDIClient(); 2738 return render_view_->webMIDIClient();
2744 } 2739 }
2745 2740
2746 bool RenderFrameImpl::willCheckAndDispatchMessageEvent( 2741 bool RenderFrameImpl::willCheckAndDispatchMessageEvent(
(...skipping 643 matching lines...) Expand 10 before | Expand all | Expand 10 after
3390 selection_text_ = text; 3385 selection_text_ = text;
3391 selection_text_offset_ = offset; 3386 selection_text_offset_ = offset;
3392 selection_range_ = range; 3387 selection_range_ = range;
3393 // This IPC is dispatched by RenderWidetHost, so use its routing ID. 3388 // This IPC is dispatched by RenderWidetHost, so use its routing ID.
3394 Send(new ViewHostMsg_SelectionChanged( 3389 Send(new ViewHostMsg_SelectionChanged(
3395 GetRenderWidget()->routing_id(), text, offset, range)); 3390 GetRenderWidget()->routing_id(), text, offset, range));
3396 } 3391 }
3397 GetRenderWidget()->UpdateSelectionBounds(); 3392 GetRenderWidget()->UpdateSelectionBounds();
3398 } 3393 }
3399 3394
3400 bool RenderFrameImpl::InitializeMediaStreamClient() { 3395 bool RenderFrameImpl::InitializeUserMediaClient() {
3401 if (media_stream_client_) 3396 if (web_user_media_client_)
3402 return true; 3397 return true;
3403 3398
3404 if (!RenderThreadImpl::current()) // Will be NULL during unit tests. 3399 if (!RenderThreadImpl::current()) // Will be NULL during unit tests.
3405 return false; 3400 return false;
3406 3401
3407 #if defined(OS_ANDROID) 3402 #if defined(OS_ANDROID)
3408 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableWebRTC)) 3403 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableWebRTC))
3409 return false; 3404 return false;
3410 #endif 3405 #endif
3411 3406
3412 #if defined(ENABLE_WEBRTC) 3407 #if defined(ENABLE_WEBRTC)
3413 if (!render_view_->media_stream_dispatcher_) { 3408 if (!render_view_->media_stream_dispatcher_) {
3414 render_view_->media_stream_dispatcher_ = 3409 render_view_->media_stream_dispatcher_ =
3415 new MediaStreamDispatcher(render_view_.get()); 3410 new MediaStreamDispatcher(render_view_.get());
3416 } 3411 }
3417 3412
3418 MediaStreamImpl* media_stream_impl = new MediaStreamImpl( 3413 MediaStreamImpl* media_stream_impl = new MediaStreamImpl(
3419 render_view_.get(), 3414 render_view_.get(),
3420 render_view_->media_stream_dispatcher_, 3415 render_view_->media_stream_dispatcher_,
3421 RenderThreadImpl::current()->GetPeerConnectionDependencyFactory()); 3416 RenderThreadImpl::current()->GetPeerConnectionDependencyFactory());
3422 media_stream_client_ = media_stream_impl;
3423 web_user_media_client_ = media_stream_impl; 3417 web_user_media_client_ = media_stream_impl;
3424 return true; 3418 return true;
3425 #else 3419 #else
3426 return false; 3420 return false;
3427 #endif 3421 #endif
3428 } 3422 }
3429 3423
3430 WebMediaPlayer* RenderFrameImpl::CreateWebMediaPlayerForMediaStream( 3424 WebMediaPlayer* RenderFrameImpl::CreateWebMediaPlayerForMediaStream(
3431 const blink::WebURL& url, 3425 const blink::WebURL& url,
3432 WebMediaPlayerClient* client) { 3426 WebMediaPlayerClient* client) {
3433 #if defined(ENABLE_WEBRTC) 3427 #if defined(ENABLE_WEBRTC)
3434 if (!InitializeMediaStreamClient()) {
3435 LOG(ERROR) << "Failed to initialize MediaStreamClient";
3436 return NULL;
3437 }
3438 if (media_stream_client_->IsMediaStream(url)) {
3439 #if defined(OS_ANDROID) && defined(ARCH_CPU_ARMEL) 3428 #if defined(OS_ANDROID) && defined(ARCH_CPU_ARMEL)
3440 bool found_neon = 3429 bool found_neon =
3441 (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0; 3430 (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0;
3442 UMA_HISTOGRAM_BOOLEAN("Platform.WebRtcNEONFound", found_neon); 3431 UMA_HISTOGRAM_BOOLEAN("Platform.WebRtcNEONFound", found_neon);
3443 #endif // defined(OS_ANDROID) && defined(ARCH_CPU_ARMEL) 3432 #endif // defined(OS_ANDROID) && defined(ARCH_CPU_ARMEL)
3444 return new WebMediaPlayerMS(frame_, client, weak_factory_.GetWeakPtr(), 3433 return new WebMediaPlayerMS(frame_, client, weak_factory_.GetWeakPtr(),
3445 media_stream_client_, new RenderMediaLog()); 3434 new RenderMediaLog(),
3446 } 3435 CreateRendererFactory());
3436 #else
3437 return NULL;
3447 #endif // defined(ENABLE_WEBRTC) 3438 #endif // defined(ENABLE_WEBRTC)
3448 return NULL; 3439 }
3440
3441 scoped_ptr<MediaStreamRendererFactory>
3442 RenderFrameImpl::CreateRendererFactory() {
3443 #if defined(ENABLE_WEBRTC)
3444 return scoped_ptr<MediaStreamRendererFactory>(
3445 new MediaStreamRendererFactory());
3446 #else
3447 return scoped_ptr<MediaStreamRendererFactory>(
3448 static_cast<MediaStreamRendererFactory*>(NULL));
3449 #endif
3449 } 3450 }
3450 3451
3451 #if defined(OS_ANDROID) 3452 #if defined(OS_ANDROID)
3452 3453
3453 WebMediaPlayer* RenderFrameImpl::CreateAndroidWebMediaPlayer( 3454 WebMediaPlayer* RenderFrameImpl::CreateAndroidWebMediaPlayer(
3454 const blink::WebURL& url, 3455 const blink::WebURL& url,
3455 WebMediaPlayerClient* client) { 3456 WebMediaPlayerClient* client) {
3456 GpuChannelHost* gpu_channel_host = 3457 GpuChannelHost* gpu_channel_host =
3457 RenderThreadImpl::current()->EstablishGpuChannelSync( 3458 RenderThreadImpl::current()->EstablishGpuChannelSync(
3458 CAUSE_FOR_GPU_LAUNCH_VIDEODECODEACCELERATOR_INITIALIZE); 3459 CAUSE_FOR_GPU_LAUNCH_VIDEODECODEACCELERATOR_INITIALIZE);
(...skipping 27 matching lines...) Expand all
3486 weak_factory_.GetWeakPtr(), 3487 weak_factory_.GetWeakPtr(),
3487 render_view_->media_player_manager_, 3488 render_view_->media_player_manager_,
3488 stream_texture_factory, 3489 stream_texture_factory,
3489 RenderThreadImpl::current()->GetMediaThreadMessageLoopProxy(), 3490 RenderThreadImpl::current()->GetMediaThreadMessageLoopProxy(),
3490 new RenderMediaLog()); 3491 new RenderMediaLog());
3491 } 3492 }
3492 3493
3493 #endif 3494 #endif
3494 3495
3495 } // namespace content 3496 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | content/shell/renderer/test_runner/web_frame_test_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698