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

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

Issue 2406483002: WIP - Add EME (Closed)
Patch Set: Add EME. Created 4 years, 2 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
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 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698