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

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

Issue 2457563002: Media Remoting: Add remoting control logic for encrypted contents. (Closed)
Patch Set: Addressed comments from PS#12. Fixed ASAN. 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
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | media/base/cdm_context.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 #include "media/mojo/clients/mojo_renderer_factory.h" // nogncheck 253 #include "media/mojo/clients/mojo_renderer_factory.h" // nogncheck
254 #else 254 #else
255 #include "media/renderers/default_renderer_factory.h" 255 #include "media/renderers/default_renderer_factory.h"
256 #endif 256 #endif
257 257
258 #if defined(ENABLE_MOJO_AUDIO_DECODER) || defined(ENABLE_MOJO_VIDEO_DECODER) 258 #if defined(ENABLE_MOJO_AUDIO_DECODER) || defined(ENABLE_MOJO_VIDEO_DECODER)
259 #include "media/mojo/clients/mojo_decoder_factory.h" // nogncheck 259 #include "media/mojo/clients/mojo_decoder_factory.h" // nogncheck
260 #endif 260 #endif
261 261
262 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) 262 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
263 #include "media/remoting/remoting_controller.h" // nogncheck 263 #include "media/remoting/remoting_cdm_controller.h" // nogncheck
264 #include "media/remoting/remoting_renderer_factory.h" // nogncheck 264 #include "media/remoting/remoting_cdm_factory.h" // nogncheck
265 #include "media/remoting/remoting_renderer_controller.h" // nogncheck
266 #include "media/remoting/remoting_renderer_factory.h" // nogncheck
267 #include "media/remoting/remoting_sink_observer.h" // nogncheck
265 #endif 268 #endif
266 269
267 using base::Time; 270 using base::Time;
268 using base::TimeDelta; 271 using base::TimeDelta;
269 using blink::WebCachePolicy; 272 using blink::WebCachePolicy;
270 using blink::WebContentDecryptionModule; 273 using blink::WebContentDecryptionModule;
271 using blink::WebContextMenuData; 274 using blink::WebContextMenuData;
272 using blink::WebCString; 275 using blink::WebCString;
273 using blink::WebData; 276 using blink::WebData;
274 using blink::WebDataSource; 277 using blink::WebDataSource;
(...skipping 876 matching lines...) Expand 10 before | Expand all | Expand 10 after
1151 #if defined(OS_ANDROID) 1154 #if defined(OS_ANDROID)
1152 new GinJavaBridgeDispatcher(this); 1155 new GinJavaBridgeDispatcher(this);
1153 #endif 1156 #endif
1154 1157
1155 #if defined(ENABLE_PLUGINS) 1158 #if defined(ENABLE_PLUGINS)
1156 // Manages its own lifetime. 1159 // Manages its own lifetime.
1157 plugin_power_saver_helper_ = new PluginPowerSaverHelper(this); 1160 plugin_power_saver_helper_ = new PluginPowerSaverHelper(this);
1158 #endif 1161 #endif
1159 1162
1160 manifest_manager_ = new ManifestManager(this); 1163 manifest_manager_ = new ManifestManager(this);
1164
1165 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
1166 // Create the RemotingSinkObserver to monitor the remoting sink availablity.
1167 media::mojom::RemotingSourcePtr remoting_source;
1168 media::mojom::RemotingSourceRequest remoting_source_request =
1169 mojo::GetProxy(&remoting_source);
1170 media::mojom::RemoterPtr remoter;
1171 GetRemoterFactory()->Create(std::move(remoting_source),
1172 mojo::GetProxy(&remoter));
1173 remoting_sink_observer_ = base::MakeUnique<media::RemotingSinkObserver>(
1174 std::move(remoting_source_request), std::move(remoter));
1175 #endif // BUILDFLAG(ENABLE_MEDIA_REMOTING)
1161 } 1176 }
1162 1177
1163 RenderFrameImpl::~RenderFrameImpl() { 1178 RenderFrameImpl::~RenderFrameImpl() {
1164 // If file chooser is still waiting for answer, dispatch empty answer. 1179 // If file chooser is still waiting for answer, dispatch empty answer.
1165 while (!file_chooser_completions_.empty()) { 1180 while (!file_chooser_completions_.empty()) {
1166 if (file_chooser_completions_.front()->completion) { 1181 if (file_chooser_completions_.front()->completion) {
1167 file_chooser_completions_.front()->completion->didChooseFile( 1182 file_chooser_completions_.front()->completion->didChooseFile(
1168 WebVector<WebString>()); 1183 WebVector<WebString>());
1169 } 1184 }
1170 file_chooser_completions_.pop_front(); 1185 file_chooser_completions_.pop_front();
(...skipping 1540 matching lines...) Expand 10 before | Expand all | Expand 10 after
2711 2726
2712 WebPluginParams params_to_use = params; 2727 WebPluginParams params_to_use = params;
2713 params_to_use.mimeType = WebString::fromUTF8(mime_type); 2728 params_to_use.mimeType = WebString::fromUTF8(mime_type);
2714 return CreatePlugin(frame, info, params_to_use, nullptr /* throttler */); 2729 return CreatePlugin(frame, info, params_to_use, nullptr /* throttler */);
2715 #else 2730 #else
2716 return NULL; 2731 return NULL;
2717 #endif // defined(ENABLE_PLUGINS) 2732 #endif // defined(ENABLE_PLUGINS)
2718 } 2733 }
2719 2734
2720 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) 2735 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
2721 std::unique_ptr<media::RemotingController> 2736 std::unique_ptr<media::RemotingRendererController>
2722 RenderFrameImpl::CreateRemotingController() { 2737 RenderFrameImpl::CreateRemotingRendererController() {
2723 media::mojom::RemotingSourcePtr remoting_source; 2738 media::mojom::RemotingSourcePtr remoting_source;
2724 media::mojom::RemotingSourceRequest remoting_source_request = 2739 media::mojom::RemotingSourceRequest remoting_source_request =
2725 mojo::GetProxy(&remoting_source); 2740 mojo::GetProxy(&remoting_source);
2726 media::mojom::RemoterPtr remoter; 2741 media::mojom::RemoterPtr remoter;
2727 GetRemoterFactory()->Create(std::move(remoting_source), 2742 GetRemoterFactory()->Create(std::move(remoting_source),
2728 mojo::GetProxy(&remoter)); 2743 mojo::GetProxy(&remoter));
2729 return base::MakeUnique<media::RemotingController>( 2744 return base::MakeUnique<media::RemotingRendererController>(
2730 std::move(remoting_source_request), std::move(remoter)); 2745 make_scoped_refptr(new media::RemotingSourceImpl(
2746 std::move(remoting_source_request), std::move(remoter))));
2731 } 2747 }
2732 #endif 2748 #endif
2733 2749
2734 blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer( 2750 blink::WebMediaPlayer* RenderFrameImpl::createMediaPlayer(
2735 const blink::WebMediaPlayerSource& source, 2751 const blink::WebMediaPlayerSource& source,
2736 WebMediaPlayerClient* client, 2752 WebMediaPlayerClient* client,
2737 WebMediaPlayerEncryptedMediaClient* encrypted_client, 2753 WebMediaPlayerEncryptedMediaClient* encrypted_client,
2738 WebContentDecryptionModule* initial_cdm, 2754 WebContentDecryptionModule* initial_cdm,
2739 const blink::WebString& sink_id) { 2755 const blink::WebString& sink_id) {
2740 blink::WebMediaStream web_stream = 2756 blink::WebMediaStream web_stream =
(...skipping 27 matching lines...) Expand all
2768 2784
2769 scoped_refptr<media::MediaLog> media_log( 2785 scoped_refptr<media::MediaLog> media_log(
2770 new RenderMediaLog(url::Origin(frame_->getSecurityOrigin()).GetURL())); 2786 new RenderMediaLog(url::Origin(frame_->getSecurityOrigin()).GetURL()));
2771 2787
2772 #if defined(OS_ANDROID) 2788 #if defined(OS_ANDROID)
2773 if (UseWebMediaPlayerImpl(url) && !media_surface_manager_) 2789 if (UseWebMediaPlayerImpl(url) && !media_surface_manager_)
2774 media_surface_manager_ = new RendererSurfaceViewManager(this); 2790 media_surface_manager_ = new RendererSurfaceViewManager(this);
2775 #endif // defined(OS_ANDROID) 2791 #endif // defined(OS_ANDROID)
2776 2792
2777 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) 2793 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
2778 std::unique_ptr<media::RemotingController> remoting_controller = 2794 std::unique_ptr<media::RemotingRendererController> remoting_controller =
2779 CreateRemotingController(); 2795 CreateRemotingRendererController();
2780 base::WeakPtr<media::MediaObserver> media_observer = 2796 base::WeakPtr<media::MediaObserver> media_observer =
2781 remoting_controller->GetWeakPtr(); 2797 remoting_controller->GetWeakPtr();
2782 #else 2798 #else
2783 base::WeakPtr<media::MediaObserver> media_observer = nullptr; 2799 base::WeakPtr<media::MediaObserver> media_observer = nullptr;
2784 #endif 2800 #endif
2785 2801
2786 media::WebMediaPlayerParams params( 2802 media::WebMediaPlayerParams params(
2787 base::Bind(&ContentRendererClient::DeferMediaLoad, 2803 base::Bind(&ContentRendererClient::DeferMediaLoad,
2788 base::Unretained(GetContentClient()->renderer()), 2804 base::Unretained(GetContentClient()->renderer()),
2789 static_cast<RenderFrame*>(this), 2805 static_cast<RenderFrame*>(this),
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
2827 GetMediaInterfaceProvider()); 2843 GetMediaInterfaceProvider());
2828 #else 2844 #else
2829 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( 2845 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>(
2830 media_log, GetDecoderFactory(), 2846 media_log, GetDecoderFactory(),
2831 base::Bind(&RenderThreadImpl::GetGpuFactories, 2847 base::Bind(&RenderThreadImpl::GetGpuFactories,
2832 base::Unretained(render_thread))); 2848 base::Unretained(render_thread)));
2833 #endif 2849 #endif
2834 } 2850 }
2835 2851
2836 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) 2852 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
2837 media::RemotingController* remoting_controller_ptr = 2853 media::RemotingRendererController* remoting_controller_ptr =
2838 remoting_controller.get(); 2854 remoting_controller.get();
2839 media_renderer_factory = base::MakeUnique<media::RemotingRendererFactory>( 2855 media_renderer_factory = base::MakeUnique<media::RemotingRendererFactory>(
2840 std::move(media_renderer_factory), std::move(remoting_controller)); 2856 std::move(media_renderer_factory), std::move(remoting_controller));
2841 #endif 2857 #endif
2842 2858
2843 if (!url_index_.get() || url_index_->frame() != frame_) 2859 if (!url_index_.get() || url_index_->frame() != frame_)
2844 url_index_.reset(new media::UrlIndex(frame_)); 2860 url_index_.reset(new media::UrlIndex(frame_));
2845 2861
2846 media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl( 2862 media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl(
2847 frame_, client, encrypted_client, 2863 frame_, client, encrypted_client,
(...skipping 3532 matching lines...) Expand 10 before | Expand all | Expand 10 after
6380 return cdm_factory_.get(); 6396 return cdm_factory_.get();
6381 } 6397 }
6382 #endif // defined(ENABLE_MOJO_CDM) 6398 #endif // defined(ENABLE_MOJO_CDM)
6383 6399
6384 #if BUILDFLAG(ENABLE_PEPPER_CDMS) 6400 #if BUILDFLAG(ENABLE_PEPPER_CDMS)
6385 DCHECK(frame_); 6401 DCHECK(frame_);
6386 cdm_factory_.reset( 6402 cdm_factory_.reset(
6387 new RenderCdmFactory(base::Bind(&PepperCdmWrapperImpl::Create, frame_))); 6403 new RenderCdmFactory(base::Bind(&PepperCdmWrapperImpl::Create, frame_)));
6388 #endif // BUILDFLAG(ENABLE_PEPPER_CDMS) 6404 #endif // BUILDFLAG(ENABLE_PEPPER_CDMS)
6389 6405
6406 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
6407 cdm_factory_.reset(new media::RemotingCdmFactory(
6408 std::move(cdm_factory_), GetRemoterFactory(),
6409 std::move(remoting_sink_observer_)));
6410 #endif // BUILDFLAG(ENABLE_MEDIA_REMOTING)
6411
6390 return cdm_factory_.get(); 6412 return cdm_factory_.get();
6391 } 6413 }
6392 6414
6393 media::DecoderFactory* RenderFrameImpl::GetDecoderFactory() { 6415 media::DecoderFactory* RenderFrameImpl::GetDecoderFactory() {
6394 #if defined(ENABLE_MOJO_AUDIO_DECODER) || defined(ENABLE_MOJO_VIDEO_DECODER) 6416 #if defined(ENABLE_MOJO_AUDIO_DECODER) || defined(ENABLE_MOJO_VIDEO_DECODER)
6395 if (!decoder_factory_) { 6417 if (!decoder_factory_) {
6396 decoder_factory_.reset( 6418 decoder_factory_.reset(
6397 new media::MojoDecoderFactory(GetMediaInterfaceProvider())); 6419 new media::MojoDecoderFactory(GetMediaInterfaceProvider()));
6398 } 6420 }
6399 #endif 6421 #endif
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
6584 // event target. Potentially a Pepper plugin will receive the event. 6606 // event target. Potentially a Pepper plugin will receive the event.
6585 // In order to tell whether a plugin gets the last mouse event and which it 6607 // In order to tell whether a plugin gets the last mouse event and which it
6586 // is, we set |pepper_last_mouse_event_target_| to null here. If a plugin gets 6608 // is, we set |pepper_last_mouse_event_target_| to null here. If a plugin gets
6587 // the event, it will notify us via DidReceiveMouseEvent() and set itself as 6609 // the event, it will notify us via DidReceiveMouseEvent() and set itself as
6588 // |pepper_last_mouse_event_target_|. 6610 // |pepper_last_mouse_event_target_|.
6589 pepper_last_mouse_event_target_ = nullptr; 6611 pepper_last_mouse_event_target_ = nullptr;
6590 #endif 6612 #endif
6591 } 6613 }
6592 6614
6593 } // namespace content 6615 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | media/base/cdm_context.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698