Chromium Code Reviews| 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 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 243 #if defined(ENABLE_MOJO_RENDERER) | 243 #if defined(ENABLE_MOJO_RENDERER) |
| 244 #include "media/mojo/clients/mojo_renderer_factory.h" // nogncheck | 244 #include "media/mojo/clients/mojo_renderer_factory.h" // nogncheck |
| 245 #else | 245 #else |
| 246 #include "media/renderers/default_renderer_factory.h" | 246 #include "media/renderers/default_renderer_factory.h" |
| 247 #endif | 247 #endif |
| 248 | 248 |
| 249 #if defined(ENABLE_MOJO_AUDIO_DECODER) || defined(ENABLE_MOJO_VIDEO_DECODER) | 249 #if defined(ENABLE_MOJO_AUDIO_DECODER) || defined(ENABLE_MOJO_VIDEO_DECODER) |
| 250 #include "media/mojo/clients/mojo_decoder_factory.h" // nogncheck | 250 #include "media/mojo/clients/mojo_decoder_factory.h" // nogncheck |
| 251 #endif | 251 #endif |
| 252 | 252 |
| 253 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) | |
| 254 #include "media/remoting/remoting_cdm_factory.h" | |
| 255 #include "media/remoting/remoting_controller.h" | |
| 256 #include "media/remoting/remoting_renderer_factory.h" | |
| 257 #endif | |
| 258 | |
| 253 using base::Time; | 259 using base::Time; |
| 254 using base::TimeDelta; | 260 using base::TimeDelta; |
| 255 using blink::WebCachePolicy; | 261 using blink::WebCachePolicy; |
| 256 using blink::WebContentDecryptionModule; | 262 using blink::WebContentDecryptionModule; |
| 257 using blink::WebContextMenuData; | 263 using blink::WebContextMenuData; |
| 258 using blink::WebCString; | 264 using blink::WebCString; |
| 259 using blink::WebData; | 265 using blink::WebData; |
| 260 using blink::WebDataSource; | 266 using blink::WebDataSource; |
| 261 using blink::WebDocument; | 267 using blink::WebDocument; |
| 262 using blink::WebDOMEvent; | 268 using blink::WebDOMEvent; |
| (...skipping 2375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2638 return NULL; | 2644 return NULL; |
| 2639 | 2645 |
| 2640 WebPluginParams params_to_use = params; | 2646 WebPluginParams params_to_use = params; |
| 2641 params_to_use.mimeType = WebString::fromUTF8(mime_type); | 2647 params_to_use.mimeType = WebString::fromUTF8(mime_type); |
| 2642 return CreatePlugin(frame, info, params_to_use, nullptr /* throttler */); | 2648 return CreatePlugin(frame, info, params_to_use, nullptr /* throttler */); |
| 2643 #else | 2649 #else |
| 2644 return NULL; | 2650 return NULL; |
| 2645 #endif // defined(ENABLE_PLUGINS) | 2651 #endif // defined(ENABLE_PLUGINS) |
| 2646 } | 2652 } |
| 2647 | 2653 |
| 2654 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) | |
| 2655 std::unique_ptr<media::RemotingController> | |
| 2656 RenderFrameImpl::CreateRemotingController() { | |
| 2657 media::mojom::RemotingSourcePtr remoting_source; | |
| 2658 media::mojom::RemotingSourceRequest remoting_source_request = | |
| 2659 mojo::GetProxy(&remoting_source); | |
| 2660 media::mojom::RemoterPtr remoter; | |
| 2661 GetRemoterFactory()->Create(std::move(remoting_source), | |
| 2662 mojo::GetProxy(&remoter)); | |
| 2663 return base::MakeUnique<media::RemotingController>( | |
| 2664 std::move(remoting_source_request), std::move(remoter)); | |
| 2665 } | |
| 2666 #endif | |
| 2667 | |
| 2648 blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( | 2668 blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( |
| 2649 const blink::WebMediaPlayerSource& source, | 2669 const blink::WebMediaPlayerSource& source, |
| 2650 WebMediaPlayerClient* client, | 2670 WebMediaPlayerClient* client, |
| 2651 WebMediaPlayerEncryptedMediaClient* encrypted_client, | 2671 WebMediaPlayerEncryptedMediaClient* encrypted_client, |
| 2652 WebContentDecryptionModule* initial_cdm, | 2672 WebContentDecryptionModule* initial_cdm, |
| 2653 const blink::WebString& sink_id) { | 2673 const blink::WebString& sink_id) { |
| 2654 blink::WebMediaStream web_stream = | 2674 blink::WebMediaStream web_stream = |
| 2655 GetWebMediaStreamFromWebMediaPlayerSource(source); | 2675 GetWebMediaStreamFromWebMediaPlayerSource(source); |
| 2656 if (!web_stream.isNull()) | 2676 if (!web_stream.isNull()) |
| 2657 return CreateWebMediaPlayerForMediaStream(client, sink_id, | 2677 return CreateWebMediaPlayerForMediaStream(client, sink_id, |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 2676 media::WebMediaPlayerParams::Context3DCB context_3d_cb = base::Bind( | 2696 media::WebMediaPlayerParams::Context3DCB context_3d_cb = base::Bind( |
| 2677 &GetSharedMainThreadContext3D, | 2697 &GetSharedMainThreadContext3D, |
| 2678 RenderThreadImpl::current()->SharedMainThreadContextProvider()); | 2698 RenderThreadImpl::current()->SharedMainThreadContextProvider()); |
| 2679 | 2699 |
| 2680 scoped_refptr<media::MediaLog> media_log(new RenderMediaLog( | 2700 scoped_refptr<media::MediaLog> media_log(new RenderMediaLog( |
| 2681 blink::WebStringToGURL(frame_->getSecurityOrigin().toString()))); | 2701 blink::WebStringToGURL(frame_->getSecurityOrigin().toString()))); |
| 2682 | 2702 |
| 2683 #if defined(OS_ANDROID) | 2703 #if defined(OS_ANDROID) |
| 2684 if (UseWebMediaPlayerImpl(url) && !media_surface_manager_) | 2704 if (UseWebMediaPlayerImpl(url) && !media_surface_manager_) |
| 2685 media_surface_manager_ = new RendererSurfaceViewManager(this); | 2705 media_surface_manager_ = new RendererSurfaceViewManager(this); |
| 2706 #endif // defined(OS_ANDROID) | |
| 2707 | |
| 2708 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) | |
| 2709 std::unique_ptr<media::RemotingController> remoting_controller = | |
| 2710 CreateRemotingController(); | |
| 2711 base::WeakPtr<media::MediaObserver> media_observer = | |
| 2712 remoting_controller->GetWeakPtr(); | |
| 2713 #else | |
| 2714 base::WeakPtr<media::MediaObserver> media_observer = nullptr; | |
| 2686 #endif | 2715 #endif |
| 2716 | |
| 2687 media::WebMediaPlayerParams params( | 2717 media::WebMediaPlayerParams params( |
| 2688 base::Bind(&ContentRendererClient::DeferMediaLoad, | 2718 base::Bind(&ContentRendererClient::DeferMediaLoad, |
| 2689 base::Unretained(GetContentClient()->renderer()), | 2719 base::Unretained(GetContentClient()->renderer()), |
| 2690 static_cast<RenderFrame*>(this), | 2720 static_cast<RenderFrame*>(this), |
| 2691 GetWebMediaPlayerDelegate()->has_played_media()), | 2721 GetWebMediaPlayerDelegate()->has_played_media()), |
| 2692 audio_renderer_sink, media_log, render_thread->GetMediaThreadTaskRunner(), | 2722 audio_renderer_sink, media_log, render_thread->GetMediaThreadTaskRunner(), |
| 2693 render_thread->GetWorkerTaskRunner(), | 2723 render_thread->GetWorkerTaskRunner(), |
| 2694 render_thread->compositor_task_runner(), context_3d_cb, | 2724 render_thread->compositor_task_runner(), context_3d_cb, |
| 2695 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory, | 2725 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory, |
| 2696 base::Unretained(blink::mainThreadIsolate())), | 2726 base::Unretained(blink::mainThreadIsolate())), |
| 2697 initial_cdm, media_surface_manager_); | 2727 initial_cdm, media_surface_manager_, media_observer); |
| 2698 | 2728 |
| 2699 #if defined(OS_ANDROID) | 2729 #if defined(OS_ANDROID) |
| 2700 if (!UseWebMediaPlayerImpl(url)) { | 2730 if (!UseWebMediaPlayerImpl(url)) { |
| 2701 return CreateAndroidWebMediaPlayer(client, encrypted_client, params); | 2731 return CreateAndroidWebMediaPlayer(client, encrypted_client, params); |
| 2702 } | 2732 } |
| 2703 #endif // defined(OS_ANDROID) | 2733 #endif // defined(OS_ANDROID) |
| 2704 | 2734 |
| 2705 #if defined(ENABLE_MOJO_RENDERER) | 2735 #if defined(ENABLE_MOJO_RENDERER) |
| 2706 std::unique_ptr<media::RendererFactory> media_renderer_factory( | 2736 std::unique_ptr<media::RendererFactory> media_renderer_factory( |
| 2707 new media::MojoRendererFactory( | 2737 new media::MojoRendererFactory( |
| 2708 base::Bind(&RenderThreadImpl::GetGpuFactories, | 2738 base::Bind(&RenderThreadImpl::GetGpuFactories, |
| 2709 base::Unretained(render_thread)), | 2739 base::Unretained(render_thread)), |
| 2710 GetMediaInterfaceProvider())); | 2740 GetMediaInterfaceProvider())); |
| 2711 #else | 2741 #else |
| 2712 std::unique_ptr<media::RendererFactory> media_renderer_factory( | 2742 std::unique_ptr<media::RendererFactory> media_renderer_factory( |
| 2713 new media::DefaultRendererFactory( | 2743 new media::DefaultRendererFactory( |
| 2714 media_log, GetDecoderFactory(), | 2744 media_log, GetDecoderFactory(), |
| 2715 base::Bind(&RenderThreadImpl::GetGpuFactories, | 2745 base::Bind(&RenderThreadImpl::GetGpuFactories, |
| 2716 base::Unretained(render_thread)))); | 2746 base::Unretained(render_thread)))); |
| 2717 #endif // defined(ENABLE_MOJO_RENDERER) | 2747 #endif |
| 2748 | |
| 2749 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) | |
| 2750 media::RemotingController* remoting_controller_ptr = | |
| 2751 remoting_controller.get(); | |
| 2752 media_renderer_factory = base::MakeUnique<media::RemotingRendererFactory>( | |
| 2753 std::move(media_renderer_factory), std::move(remoting_controller)); | |
| 2754 #endif | |
| 2718 | 2755 |
| 2719 if (!url_index_.get() || url_index_->frame() != frame_) | 2756 if (!url_index_.get() || url_index_->frame() != frame_) |
| 2720 url_index_.reset(new media::UrlIndex(frame_)); | 2757 url_index_.reset(new media::UrlIndex(frame_)); |
| 2721 | 2758 |
| 2722 // TODO(miu): In a soon-upcoming change, call GetRemoterFactory()->Create() to | |
| 2723 // allow the local media pipeline to receive notifications about when Media | |
| 2724 // Remoting can take place. Control logic in/around WebMediaPlayerImpl will | |
| 2725 // implement media.mojom.RemotingSource. http://crbug.com/643964 | |
| 2726 | |
| 2727 media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl( | 2759 media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl( |
| 2728 frame_, client, encrypted_client, | 2760 frame_, client, encrypted_client, |
| 2729 GetWebMediaPlayerDelegate()->AsWeakPtr(), | 2761 GetWebMediaPlayerDelegate()->AsWeakPtr(), |
| 2730 std::move(media_renderer_factory), url_index_, params); | 2762 std::move(media_renderer_factory), url_index_, params); |
| 2731 | 2763 |
| 2732 #if defined(OS_ANDROID) // WMPI_CAST | 2764 #if defined(OS_ANDROID) // WMPI_CAST |
| 2733 media_player->SetMediaPlayerManager(GetMediaPlayerManager()); | 2765 media_player->SetMediaPlayerManager(GetMediaPlayerManager()); |
| 2734 media_player->SetDeviceScaleFactor(render_view_->GetDeviceScaleFactor()); | 2766 media_player->SetDeviceScaleFactor(render_view_->GetDeviceScaleFactor()); |
| 2767 #endif // defined(OS_ANDROID) | |
| 2768 | |
| 2769 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) | |
| 2770 remoting_controller_ptr->SetSwitchRendererCallback(base::Bind( | |
| 2771 &media::WebMediaPlayerImpl::ScheduleRestart, media_player->AsWeakPtr())); | |
| 2735 #endif | 2772 #endif |
| 2736 | 2773 |
| 2737 return media_player; | 2774 return media_player; |
| 2738 } | 2775 } |
| 2739 | 2776 |
| 2740 blink::WebApplicationCacheHost* RenderFrameImpl::createApplicationCacheHost( | 2777 blink::WebApplicationCacheHost* RenderFrameImpl::createApplicationCacheHost( |
| 2741 blink::WebApplicationCacheHostClient* client) { | 2778 blink::WebApplicationCacheHostClient* client) { |
| 2742 if (!frame_ || !frame_->view()) | 2779 if (!frame_ || !frame_->view()) |
| 2743 return NULL; | 2780 return NULL; |
| 2744 return new RendererWebApplicationCacheHostImpl( | 2781 return new RendererWebApplicationCacheHostImpl( |
| (...skipping 3537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6282 bool RenderFrameImpl::AreSecureCodecsSupported() { | 6319 bool RenderFrameImpl::AreSecureCodecsSupported() { |
| 6283 #if defined(OS_ANDROID) | 6320 #if defined(OS_ANDROID) |
| 6284 // Hardware-secure codecs are only supported if secure surfaces are enabled. | 6321 // Hardware-secure codecs are only supported if secure surfaces are enabled. |
| 6285 return render_view_->renderer_preferences_ | 6322 return render_view_->renderer_preferences_ |
| 6286 .use_video_overlay_for_embedded_encrypted_video; | 6323 .use_video_overlay_for_embedded_encrypted_video; |
| 6287 #else | 6324 #else |
| 6288 return false; | 6325 return false; |
| 6289 #endif // defined(OS_ANDROID) | 6326 #endif // defined(OS_ANDROID) |
| 6290 } | 6327 } |
| 6291 | 6328 |
| 6329 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) | |
| 6292 media::mojom::RemoterFactory* RenderFrameImpl::GetRemoterFactory() { | 6330 media::mojom::RemoterFactory* RenderFrameImpl::GetRemoterFactory() { |
| 6293 if (!remoter_factory_) | 6331 if (!remoter_factory_) |
| 6294 GetRemoteInterfaces()->GetInterface(&remoter_factory_); | 6332 GetRemoteInterfaces()->GetInterface(&remoter_factory_); |
| 6295 return remoter_factory_.get(); | 6333 return remoter_factory_.get(); |
| 6296 } | 6334 } |
| 6335 #endif | |
| 6297 | 6336 |
| 6298 media::CdmFactory* RenderFrameImpl::GetCdmFactory() { | 6337 media::CdmFactory* RenderFrameImpl::GetCdmFactory() { |
| 6299 if (cdm_factory_) | 6338 if (cdm_factory_) |
| 6300 return cdm_factory_.get(); | 6339 return cdm_factory_.get(); |
| 6301 | 6340 |
| 6302 #if defined(ENABLE_MOJO_CDM) | 6341 #if defined(ENABLE_MOJO_CDM) |
| 6303 if (UseMojoCdm()) { | 6342 if (UseMojoCdm()) { |
| 6304 cdm_factory_.reset(new media::MojoCdmFactory(GetMediaInterfaceProvider())); | 6343 cdm_factory_.reset(new media::MojoCdmFactory(GetMediaInterfaceProvider())); |
| 6305 return cdm_factory_.get(); | 6344 return cdm_factory_.get(); |
| 6306 } | 6345 } |
| 6307 #endif // defined(ENABLE_MOJO_CDM) | 6346 #endif // defined(ENABLE_MOJO_CDM) |
| 6308 | 6347 |
| 6309 #if defined(ENABLE_PEPPER_CDMS) | 6348 #if defined(ENABLE_PEPPER_CDMS) |
| 6310 DCHECK(frame_); | 6349 DCHECK(frame_); |
| 6311 cdm_factory_.reset( | 6350 cdm_factory_.reset( |
| 6312 new RenderCdmFactory(base::Bind(&PepperCdmWrapperImpl::Create, frame_))); | 6351 new RenderCdmFactory(base::Bind(&PepperCdmWrapperImpl::Create, frame_))); |
| 6313 #endif // defined(ENABLE_PEPPER_CDMS) | 6352 #endif // defined(ENABLE_PEPPER_CDMS) |
| 6314 | 6353 |
| 6354 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) | |
|
miu
2016/10/08 01:06:15
This needs to go inside the #if...#endif section a
xjz
2016/10/20 21:25:27
Done.
| |
| 6355 cdm_factory_.reset(new media::RemotingCdmFactory( | |
| 6356 base::MakeUnique<RenderCdmFactory>( | |
| 6357 base::Bind(&PepperCdmWrapperImpl::Create, frame_)), | |
| 6358 GetRemoterFactory())); | |
| 6359 #endif | |
| 6360 | |
| 6315 return cdm_factory_.get(); | 6361 return cdm_factory_.get(); |
| 6316 } | 6362 } |
| 6317 | 6363 |
| 6318 media::DecoderFactory* RenderFrameImpl::GetDecoderFactory() { | 6364 media::DecoderFactory* RenderFrameImpl::GetDecoderFactory() { |
| 6319 #if defined(ENABLE_MOJO_AUDIO_DECODER) || defined(ENABLE_MOJO_VIDEO_DECODER) | 6365 #if defined(ENABLE_MOJO_AUDIO_DECODER) || defined(ENABLE_MOJO_VIDEO_DECODER) |
| 6320 if (!decoder_factory_) { | 6366 if (!decoder_factory_) { |
| 6321 decoder_factory_.reset( | 6367 decoder_factory_.reset( |
| 6322 new media::MojoDecoderFactory(GetMediaInterfaceProvider())); | 6368 new media::MojoDecoderFactory(GetMediaInterfaceProvider())); |
| 6323 } | 6369 } |
| 6324 #endif | 6370 #endif |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 6491 // event target. Potentially a Pepper plugin will receive the event. | 6537 // event target. Potentially a Pepper plugin will receive the event. |
| 6492 // In order to tell whether a plugin gets the last mouse event and which it | 6538 // In order to tell whether a plugin gets the last mouse event and which it |
| 6493 // is, we set |pepper_last_mouse_event_target_| to null here. If a plugin gets | 6539 // is, we set |pepper_last_mouse_event_target_| to null here. If a plugin gets |
| 6494 // the event, it will notify us via DidReceiveMouseEvent() and set itself as | 6540 // the event, it will notify us via DidReceiveMouseEvent() and set itself as |
| 6495 // |pepper_last_mouse_event_target_|. | 6541 // |pepper_last_mouse_event_target_|. |
| 6496 pepper_last_mouse_event_target_ = nullptr; | 6542 pepper_last_mouse_event_target_ = nullptr; |
| 6497 #endif | 6543 #endif |
| 6498 } | 6544 } |
| 6499 | 6545 |
| 6500 } // namespace content | 6546 } // namespace content |
| OLD | NEW |