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

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

Issue 2457563002: Media Remoting: Add remoting control logic for encrypted contents. (Closed)
Patch Set: Bug fix. Created 4 years, 1 month 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 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 #include "media/mojo/clients/mojo_renderer_factory.h" // nogncheck 252 #include "media/mojo/clients/mojo_renderer_factory.h" // nogncheck
253 #else 253 #else
254 #include "media/renderers/default_renderer_factory.h" 254 #include "media/renderers/default_renderer_factory.h"
255 #endif 255 #endif
256 256
257 #if defined(ENABLE_MOJO_AUDIO_DECODER) || defined(ENABLE_MOJO_VIDEO_DECODER) 257 #if defined(ENABLE_MOJO_AUDIO_DECODER) || defined(ENABLE_MOJO_VIDEO_DECODER)
258 #include "media/mojo/clients/mojo_decoder_factory.h" // nogncheck 258 #include "media/mojo/clients/mojo_decoder_factory.h" // nogncheck
259 #endif 259 #endif
260 260
261 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) 261 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
262 #include "media/remoting/remoting_controller.h" // nogncheck 262 #include "media/remoting/remoting_cdm_controller.h" // nogncheck
263 #include "media/remoting/remoting_renderer_factory.h" // nogncheck 263 #include "media/remoting/remoting_cdm_factory.h" // nogncheck
264 #include "media/remoting/remoting_renderer_controller.h" // nogncheck
265 #include "media/remoting/remoting_renderer_factory.h" // nogncheck
266 #include "media/remoting/remoting_sink_observer.h" // nogncheck
264 #endif 267 #endif
265 268
266 using base::Time; 269 using base::Time;
267 using base::TimeDelta; 270 using base::TimeDelta;
268 using blink::WebCachePolicy; 271 using blink::WebCachePolicy;
269 using blink::WebContentDecryptionModule; 272 using blink::WebContentDecryptionModule;
270 using blink::WebContextMenuData; 273 using blink::WebContextMenuData;
271 using blink::WebCString; 274 using blink::WebCString;
272 using blink::WebData; 275 using blink::WebData;
273 using blink::WebDataSource; 276 using blink::WebDataSource;
(...skipping 876 matching lines...) Expand 10 before | Expand all | Expand 10 after
1150 #if defined(OS_ANDROID) 1153 #if defined(OS_ANDROID)
1151 new GinJavaBridgeDispatcher(this); 1154 new GinJavaBridgeDispatcher(this);
1152 #endif 1155 #endif
1153 1156
1154 #if defined(ENABLE_PLUGINS) 1157 #if defined(ENABLE_PLUGINS)
1155 // Manages its own lifetime. 1158 // Manages its own lifetime.
1156 plugin_power_saver_helper_ = new PluginPowerSaverHelper(this); 1159 plugin_power_saver_helper_ = new PluginPowerSaverHelper(this);
1157 #endif 1160 #endif
1158 1161
1159 manifest_manager_ = new ManifestManager(this); 1162 manifest_manager_ = new ManifestManager(this);
1163
1164 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
1165 // Create the RemotingSinkObserver to monitor the remoting sink availablity.
1166 media::mojom::RemotingSourcePtr remoting_source;
1167 media::mojom::RemotingSourceRequest remoting_source_request =
1168 mojo::GetProxy(&remoting_source);
1169 media::mojom::RemoterPtr remoter;
1170 GetRemoterFactory()->Create(std::move(remoting_source),
1171 mojo::GetProxy(&remoter));
1172 remoting_sink_observer_ = base::MakeUnique<media::RemotingSinkObserver>(
1173 std::move(remoting_source_request), std::move(remoter));
1174 #endif // BUILDFLAG(ENABLE_MEDIA_REMOTING)
1160 } 1175 }
1161 1176
1162 RenderFrameImpl::~RenderFrameImpl() { 1177 RenderFrameImpl::~RenderFrameImpl() {
1163 // If file chooser is still waiting for answer, dispatch empty answer. 1178 // If file chooser is still waiting for answer, dispatch empty answer.
1164 while (!file_chooser_completions_.empty()) { 1179 while (!file_chooser_completions_.empty()) {
1165 if (file_chooser_completions_.front()->completion) { 1180 if (file_chooser_completions_.front()->completion) {
1166 file_chooser_completions_.front()->completion->didChooseFile( 1181 file_chooser_completions_.front()->completion->didChooseFile(
1167 WebVector<WebString>()); 1182 WebVector<WebString>());
1168 } 1183 }
1169 file_chooser_completions_.pop_front(); 1184 file_chooser_completions_.pop_front();
(...skipping 1540 matching lines...) Expand 10 before | Expand all | Expand 10 after
2710 2725
2711 WebPluginParams params_to_use = params; 2726 WebPluginParams params_to_use = params;
2712 params_to_use.mimeType = WebString::fromUTF8(mime_type); 2727 params_to_use.mimeType = WebString::fromUTF8(mime_type);
2713 return CreatePlugin(frame, info, params_to_use, nullptr /* throttler */); 2728 return CreatePlugin(frame, info, params_to_use, nullptr /* throttler */);
2714 #else 2729 #else
2715 return NULL; 2730 return NULL;
2716 #endif // defined(ENABLE_PLUGINS) 2731 #endif // defined(ENABLE_PLUGINS)
2717 } 2732 }
2718 2733
2719 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) 2734 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
2720 std::unique_ptr<media::RemotingController> 2735 std::unique_ptr<media::RemotingRendererController>
2721 RenderFrameImpl::CreateRemotingController() { 2736 RenderFrameImpl::CreateRemotingRendererController() {
2722 media::mojom::RemotingSourcePtr remoting_source; 2737 media::mojom::RemotingSourcePtr remoting_source;
2723 media::mojom::RemotingSourceRequest remoting_source_request = 2738 media::mojom::RemotingSourceRequest remoting_source_request =
2724 mojo::GetProxy(&remoting_source); 2739 mojo::GetProxy(&remoting_source);
2725 media::mojom::RemoterPtr remoter; 2740 media::mojom::RemoterPtr remoter;
2726 GetRemoterFactory()->Create(std::move(remoting_source), 2741 GetRemoterFactory()->Create(std::move(remoting_source),
2727 mojo::GetProxy(&remoter)); 2742 mojo::GetProxy(&remoter));
2728 return base::MakeUnique<media::RemotingController>( 2743 scoped_refptr<media::RemotingSourceImpl> remoting_source_impl =
2729 std::move(remoting_source_request), std::move(remoter)); 2744 new media::RemotingSourceImpl(std::move(remoting_source_request),
2745 std::move(remoter));
2746 if (remoting_sink_observer_->is_sink_available())
miu 2016/11/05 04:05:15 Let's not do this for the Renderer: 1. Let the Re
xjz 2016/11/07 19:03:54 Done. And let |cdm_factory_| owns the |remoting_si
2747 remoting_source_impl->OnSinkAvailable();
2748 return base::MakeUnique<media::RemotingRendererController>(
2749 remoting_source_impl);
2730 } 2750 }
2731 #endif 2751 #endif
2732 2752
2733 blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( 2753 blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer(
2734 const blink::WebMediaPlayerSource& source, 2754 const blink::WebMediaPlayerSource& source,
2735 WebMediaPlayerClient* client, 2755 WebMediaPlayerClient* client,
2736 WebMediaPlayerEncryptedMediaClient* encrypted_client, 2756 WebMediaPlayerEncryptedMediaClient* encrypted_client,
2737 WebContentDecryptionModule* initial_cdm, 2757 WebContentDecryptionModule* initial_cdm,
2738 const blink::WebString& sink_id) { 2758 const blink::WebString& sink_id) {
2739 blink::WebMediaStream web_stream = 2759 blink::WebMediaStream web_stream =
(...skipping 27 matching lines...) Expand all
2767 2787
2768 scoped_refptr<media::MediaLog> media_log( 2788 scoped_refptr<media::MediaLog> media_log(
2769 new RenderMediaLog(url::Origin(frame_->getSecurityOrigin()).GetURL())); 2789 new RenderMediaLog(url::Origin(frame_->getSecurityOrigin()).GetURL()));
2770 2790
2771 #if defined(OS_ANDROID) 2791 #if defined(OS_ANDROID)
2772 if (UseWebMediaPlayerImpl(url) && !media_surface_manager_) 2792 if (UseWebMediaPlayerImpl(url) && !media_surface_manager_)
2773 media_surface_manager_ = new RendererSurfaceViewManager(this); 2793 media_surface_manager_ = new RendererSurfaceViewManager(this);
2774 #endif // defined(OS_ANDROID) 2794 #endif // defined(OS_ANDROID)
2775 2795
2776 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) 2796 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
2777 std::unique_ptr<media::RemotingController> remoting_controller = 2797 std::unique_ptr<media::RemotingRendererController> remoting_controller =
2778 CreateRemotingController(); 2798 CreateRemotingRendererController();
2779 base::WeakPtr<media::MediaObserver> media_observer = 2799 base::WeakPtr<media::MediaObserver> media_observer =
2780 remoting_controller->GetWeakPtr(); 2800 remoting_controller->GetWeakPtr();
2781 #else 2801 #else
2782 base::WeakPtr<media::MediaObserver> media_observer = nullptr; 2802 base::WeakPtr<media::MediaObserver> media_observer = nullptr;
2783 #endif 2803 #endif
2784 2804
2785 media::WebMediaPlayerParams params( 2805 media::WebMediaPlayerParams params(
2786 base::Bind(&ContentRendererClient::DeferMediaLoad, 2806 base::Bind(&ContentRendererClient::DeferMediaLoad,
2787 base::Unretained(GetContentClient()->renderer()), 2807 base::Unretained(GetContentClient()->renderer()),
2788 static_cast<RenderFrame*>(this), 2808 static_cast<RenderFrame*>(this),
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
2826 GetMediaInterfaceProvider()); 2846 GetMediaInterfaceProvider());
2827 #else 2847 #else
2828 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( 2848 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>(
2829 media_log, GetDecoderFactory(), 2849 media_log, GetDecoderFactory(),
2830 base::Bind(&RenderThreadImpl::GetGpuFactories, 2850 base::Bind(&RenderThreadImpl::GetGpuFactories,
2831 base::Unretained(render_thread))); 2851 base::Unretained(render_thread)));
2832 #endif 2852 #endif
2833 } 2853 }
2834 2854
2835 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) 2855 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
2836 media::RemotingController* remoting_controller_ptr = 2856 media::RemotingRendererController* remoting_controller_ptr =
2837 remoting_controller.get(); 2857 remoting_controller.get();
2838 media_renderer_factory = base::MakeUnique<media::RemotingRendererFactory>( 2858 media_renderer_factory = base::MakeUnique<media::RemotingRendererFactory>(
2839 std::move(media_renderer_factory), std::move(remoting_controller)); 2859 std::move(media_renderer_factory), std::move(remoting_controller));
2840 #endif 2860 #endif
2841 2861
2842 if (!url_index_.get() || url_index_->frame() != frame_) 2862 if (!url_index_.get() || url_index_->frame() != frame_)
2843 url_index_.reset(new media::UrlIndex(frame_)); 2863 url_index_.reset(new media::UrlIndex(frame_));
2844 2864
2845 media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl( 2865 media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl(
2846 frame_, client, encrypted_client, 2866 frame_, client, encrypted_client,
(...skipping 3573 matching lines...) Expand 10 before | Expand all | Expand 10 after
6420 6440
6421 #if defined(ENABLE_MOJO_CDM) 6441 #if defined(ENABLE_MOJO_CDM)
6422 if (UseMojoCdm()) { 6442 if (UseMojoCdm()) {
6423 cdm_factory_.reset(new media::MojoCdmFactory(GetMediaInterfaceProvider())); 6443 cdm_factory_.reset(new media::MojoCdmFactory(GetMediaInterfaceProvider()));
6424 return cdm_factory_.get(); 6444 return cdm_factory_.get();
6425 } 6445 }
6426 #endif // defined(ENABLE_MOJO_CDM) 6446 #endif // defined(ENABLE_MOJO_CDM)
6427 6447
6428 #if BUILDFLAG(ENABLE_PEPPER_CDMS) 6448 #if BUILDFLAG(ENABLE_PEPPER_CDMS)
6429 DCHECK(frame_); 6449 DCHECK(frame_);
6450 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
miu 2016/11/05 04:05:15 nit: Please eliminate duplicate code and simplify:
xjz 2016/11/07 19:03:54 Done.
6451 cdm_factory_.reset(new media::RemotingCdmFactory(
6452 base::MakeUnique<RenderCdmFactory>(
6453 base::Bind(&PepperCdmWrapperImpl::Create, frame_)),
6454 GetRemoterFactory(), remoting_sink_observer_.get()));
6455 #else
6430 cdm_factory_.reset( 6456 cdm_factory_.reset(
6431 new RenderCdmFactory(base::Bind(&PepperCdmWrapperImpl::Create, frame_))); 6457 new RenderCdmFactory(base::Bind(&PepperCdmWrapperImpl::Create, frame_)));
6458 #endif // BUILDFLAG(ENABLE_MEDIA_REMOTING)
6432 #endif // BUILDFLAG(ENABLE_PEPPER_CDMS) 6459 #endif // BUILDFLAG(ENABLE_PEPPER_CDMS)
6433 6460
6434 return cdm_factory_.get(); 6461 return cdm_factory_.get();
6435 } 6462 }
6436 6463
6437 media::DecoderFactory* RenderFrameImpl::GetDecoderFactory() { 6464 media::DecoderFactory* RenderFrameImpl::GetDecoderFactory() {
6438 #if defined(ENABLE_MOJO_AUDIO_DECODER) || defined(ENABLE_MOJO_VIDEO_DECODER) 6465 #if defined(ENABLE_MOJO_AUDIO_DECODER) || defined(ENABLE_MOJO_VIDEO_DECODER)
6439 if (!decoder_factory_) { 6466 if (!decoder_factory_) {
6440 decoder_factory_.reset( 6467 decoder_factory_.reset(
6441 new media::MojoDecoderFactory(GetMediaInterfaceProvider())); 6468 new media::MojoDecoderFactory(GetMediaInterfaceProvider()));
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
6628 // event target. Potentially a Pepper plugin will receive the event. 6655 // event target. Potentially a Pepper plugin will receive the event.
6629 // In order to tell whether a plugin gets the last mouse event and which it 6656 // In order to tell whether a plugin gets the last mouse event and which it
6630 // is, we set |pepper_last_mouse_event_target_| to null here. If a plugin gets 6657 // is, we set |pepper_last_mouse_event_target_| to null here. If a plugin gets
6631 // the event, it will notify us via DidReceiveMouseEvent() and set itself as 6658 // the event, it will notify us via DidReceiveMouseEvent() and set itself as
6632 // |pepper_last_mouse_event_target_|. 6659 // |pepper_last_mouse_event_target_|.
6633 pepper_last_mouse_event_target_ = nullptr; 6660 pepper_last_mouse_event_target_ = nullptr;
6634 #endif 6661 #endif
6635 } 6662 }
6636 6663
6637 } // namespace content 6664 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698