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

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

Issue 1293253003: Fix autoplay during prerendering for media elements on Android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@defer_media
Patch Set: Comments. Created 5 years, 4 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
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | no next file » | 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 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 #include "content/renderer/shared_worker_repository.h" 106 #include "content/renderer/shared_worker_repository.h"
107 #include "content/renderer/skia_benchmarking_extension.h" 107 #include "content/renderer/skia_benchmarking_extension.h"
108 #include "content/renderer/stats_collection_controller.h" 108 #include "content/renderer/stats_collection_controller.h"
109 #include "content/renderer/web_ui_extension.h" 109 #include "content/renderer/web_ui_extension.h"
110 #include "content/renderer/websharedworker_proxy.h" 110 #include "content/renderer/websharedworker_proxy.h"
111 #include "gin/modules/module_registry.h" 111 #include "gin/modules/module_registry.h"
112 #include "media/base/audio_renderer_mixer_input.h" 112 #include "media/base/audio_renderer_mixer_input.h"
113 #include "media/base/media_log.h" 113 #include "media/base/media_log.h"
114 #include "media/blink/webencryptedmediaclient_impl.h" 114 #include "media/blink/webencryptedmediaclient_impl.h"
115 #include "media/blink/webmediaplayer_impl.h" 115 #include "media/blink/webmediaplayer_impl.h"
116 #include "media/blink/webmediaplayer_params.h" 116 #include "media/blink/webmediaplayer_params.h"
qinmin 2015/08/20 19:47:25 this can be removed now
DaleCurtis 2015/08/20 19:52:44 Done.
117 #include "media/renderers/gpu_video_accelerator_factories.h" 117 #include "media/renderers/gpu_video_accelerator_factories.h"
118 #include "net/base/data_url.h" 118 #include "net/base/data_url.h"
119 #include "net/base/net_errors.h" 119 #include "net/base/net_errors.h"
120 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" 120 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
121 #include "net/http/http_util.h" 121 #include "net/http/http_util.h"
122 #include "third_party/WebKit/public/platform/WebStorageQuotaCallbacks.h" 122 #include "third_party/WebKit/public/platform/WebStorageQuotaCallbacks.h"
123 #include "third_party/WebKit/public/platform/WebString.h" 123 #include "third_party/WebKit/public/platform/WebString.h"
124 #include "third_party/WebKit/public/platform/WebURL.h" 124 #include "third_party/WebKit/public/platform/WebURL.h"
125 #include "third_party/WebKit/public/platform/WebURLError.h" 125 #include "third_party/WebKit/public/platform/WebURLError.h"
126 #include "third_party/WebKit/public/platform/WebURLResponse.h" 126 #include "third_party/WebKit/public/platform/WebURLResponse.h"
(...skipping 1898 matching lines...) Expand 10 before | Expand all | Expand 10 after
2025 render_view_->RegisterVideoHoleFrame(this); 2025 render_view_->RegisterVideoHoleFrame(this);
2026 contains_media_player_ = true; 2026 contains_media_player_ = true;
2027 } 2027 }
2028 #endif // defined(VIDEO_HOLE) 2028 #endif // defined(VIDEO_HOLE)
2029 2029
2030 blink::WebMediaStream web_stream( 2030 blink::WebMediaStream web_stream(
2031 blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor(url)); 2031 blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor(url));
2032 if (!web_stream.isNull()) 2032 if (!web_stream.isNull())
2033 return CreateWebMediaPlayerForMediaStream(client); 2033 return CreateWebMediaPlayerForMediaStream(client);
2034 2034
2035 RenderThreadImpl* render_thread = RenderThreadImpl::current();
2036
2035 #if defined(OS_ANDROID) && !defined(ENABLE_MEDIA_PIPELINE_ON_ANDROID) 2037 #if defined(OS_ANDROID) && !defined(ENABLE_MEDIA_PIPELINE_ON_ANDROID)
2036 return CreateAndroidWebMediaPlayer(client, encrypted_client, 2038 scoped_refptr<media::AudioRendererSink> audio_renderer_sink;
2037 GetMediaPermission(), initial_cdm); 2039 media::WebMediaPlayerParams::Context3DCB context_3d_cb;
2038 #else 2040 #else
2041 scoped_refptr<media::AudioRendererSink> audio_renderer_sink =
2042 render_thread->GetAudioRendererMixerManager()->CreateInput(routing_id_);
2043 media::WebMediaPlayerParams::Context3DCB context_3d_cb =
2044 base::Bind(&GetSharedMainThreadContext3D);
2045 #endif // defined(OS_ANDROID) && !defined(ENABLE_MEDIA_PIPELINE_ON_ANDROID)
2046
2039 scoped_refptr<media::MediaLog> media_log(new RenderMediaLog()); 2047 scoped_refptr<media::MediaLog> media_log(new RenderMediaLog());
2040
2041 RenderThreadImpl* render_thread = RenderThreadImpl::current();
2042 media::WebMediaPlayerParams params( 2048 media::WebMediaPlayerParams params(
2043 base::Bind(&ContentRendererClient::DeferMediaLoad, 2049 base::Bind(&ContentRendererClient::DeferMediaLoad,
2044 base::Unretained(GetContentClient()->renderer()), 2050 base::Unretained(GetContentClient()->renderer()),
2045 static_cast<RenderFrame*>(this), has_played_media_), 2051 static_cast<RenderFrame*>(this), has_played_media_),
2046 render_thread->GetAudioRendererMixerManager()->CreateInput(routing_id_), 2052 audio_renderer_sink, media_log, render_thread->GetMediaThreadTaskRunner(),
2047 media_log, render_thread->GetMediaThreadTaskRunner(), 2053 render_thread->compositor_task_runner(), context_3d_cb,
2048 render_thread->compositor_task_runner(), 2054 GetMediaPermission(), initial_cdm);
2049 base::Bind(&GetSharedMainThreadContext3D), GetMediaPermission(),
2050 initial_cdm);
2051 2055
2056 #if defined(OS_ANDROID) && !defined(ENABLE_MEDIA_PIPELINE_ON_ANDROID)
2057 return CreateAndroidWebMediaPlayer(client, encrypted_client, params);
2058 #else
2052 #if defined(ENABLE_MOJO_MEDIA) 2059 #if defined(ENABLE_MOJO_MEDIA)
2053 scoped_ptr<media::RendererFactory> media_renderer_factory( 2060 scoped_ptr<media::RendererFactory> media_renderer_factory(
2054 new media::MojoRendererFactory(GetMediaServiceFactory())); 2061 new media::MojoRendererFactory(GetMediaServiceFactory()));
2055 #else 2062 #else
2056 scoped_ptr<media::RendererFactory> media_renderer_factory = 2063 scoped_ptr<media::RendererFactory> media_renderer_factory =
2057 GetContentClient()->renderer()->CreateMediaRendererFactory( 2064 GetContentClient()->renderer()->CreateMediaRendererFactory(
2058 this, render_thread->GetGpuFactories(), media_log); 2065 this, render_thread->GetGpuFactories(), media_log);
2059 2066
2060 if (!media_renderer_factory.get()) { 2067 if (!media_renderer_factory.get()) {
2061 media_renderer_factory.reset(new media::DefaultRendererFactory( 2068 media_renderer_factory.reset(new media::DefaultRendererFactory(
(...skipping 2883 matching lines...) Expand 10 before | Expand all | Expand 10 after
4945 url::kJavaScriptScheme)) { 4952 url::kJavaScriptScheme)) {
4946 return NavigationStateImpl::CreateBrowserInitiated( 4953 return NavigationStateImpl::CreateBrowserInitiated(
4947 pending_navigation_params_->common_params, 4954 pending_navigation_params_->common_params,
4948 pending_navigation_params_->start_params, 4955 pending_navigation_params_->start_params,
4949 pending_navigation_params_->request_params); 4956 pending_navigation_params_->request_params);
4950 } 4957 }
4951 return NavigationStateImpl::CreateContentInitiated(); 4958 return NavigationStateImpl::CreateContentInitiated();
4952 } 4959 }
4953 4960
4954 #if defined(OS_ANDROID) 4961 #if defined(OS_ANDROID)
4955
4956 WebMediaPlayer* RenderFrameImpl::CreateAndroidWebMediaPlayer( 4962 WebMediaPlayer* RenderFrameImpl::CreateAndroidWebMediaPlayer(
4957 WebMediaPlayerClient* client, 4963 WebMediaPlayerClient* client,
4958 WebMediaPlayerEncryptedMediaClient* encrypted_client, 4964 WebMediaPlayerEncryptedMediaClient* encrypted_client,
4959 media::MediaPermission* media_permission, 4965 const media::WebMediaPlayerParams& params) {
4960 WebContentDecryptionModule* initial_cdm) {
4961 scoped_refptr<StreamTextureFactory> stream_texture_factory; 4966 scoped_refptr<StreamTextureFactory> stream_texture_factory;
4962 if (SynchronousCompositorFactory* factory = 4967 if (SynchronousCompositorFactory* factory =
4963 SynchronousCompositorFactory::GetInstance()) { 4968 SynchronousCompositorFactory::GetInstance()) {
4964 stream_texture_factory = factory->CreateStreamTextureFactory(routing_id_); 4969 stream_texture_factory = factory->CreateStreamTextureFactory(routing_id_);
4965 } else { 4970 } else {
4966 GpuChannelHost* gpu_channel_host = 4971 GpuChannelHost* gpu_channel_host =
4967 RenderThreadImpl::current()->EstablishGpuChannelSync( 4972 RenderThreadImpl::current()->EstablishGpuChannelSync(
4968 CAUSE_FOR_GPU_LAUNCH_VIDEODECODEACCELERATOR_INITIALIZE); 4973 CAUSE_FOR_GPU_LAUNCH_VIDEODECODEACCELERATOR_INITIALIZE);
4969 4974
4970 if (!gpu_channel_host) { 4975 if (!gpu_channel_host) {
4971 LOG(ERROR) << "Failed to establish GPU channel for media player"; 4976 LOG(ERROR) << "Failed to establish GPU channel for media player";
4972 return NULL; 4977 return NULL;
4973 } 4978 }
4974 4979
4975 scoped_refptr<cc_blink::ContextProviderWebContext> context_provider = 4980 scoped_refptr<cc_blink::ContextProviderWebContext> context_provider =
4976 RenderThreadImpl::current()->SharedMainThreadContextProvider(); 4981 RenderThreadImpl::current()->SharedMainThreadContextProvider();
4977 4982
4978 if (!context_provider.get()) { 4983 if (!context_provider.get()) {
4979 LOG(ERROR) << "Failed to get context3d for media player"; 4984 LOG(ERROR) << "Failed to get context3d for media player";
4980 return NULL; 4985 return NULL;
4981 } 4986 }
4982 4987
4983 stream_texture_factory = StreamTextureFactoryImpl::Create( 4988 stream_texture_factory = StreamTextureFactoryImpl::Create(
4984 context_provider, gpu_channel_host, routing_id_); 4989 context_provider, gpu_channel_host, routing_id_);
4985 } 4990 }
4986 4991
4987 return new WebMediaPlayerAndroid( 4992 return new WebMediaPlayerAndroid(
4988 frame_, client, encrypted_client, weak_factory_.GetWeakPtr(), 4993 frame_, client, encrypted_client, weak_factory_.GetWeakPtr(),
4989 GetMediaPlayerManager(), GetCdmFactory(), media_permission, initial_cdm, 4994 GetMediaPlayerManager(), GetCdmFactory(), stream_texture_factory, params);
4990 stream_texture_factory,
4991 RenderThreadImpl::current()->GetMediaThreadTaskRunner(),
4992 new RenderMediaLog());
4993 } 4995 }
4994 4996
4995 RendererMediaPlayerManager* RenderFrameImpl::GetMediaPlayerManager() { 4997 RendererMediaPlayerManager* RenderFrameImpl::GetMediaPlayerManager() {
4996 if (!media_player_manager_) 4998 if (!media_player_manager_)
4997 media_player_manager_ = new RendererMediaPlayerManager(this); 4999 media_player_manager_ = new RendererMediaPlayerManager(this);
4998 return media_player_manager_; 5000 return media_player_manager_;
4999 } 5001 }
5000
5001 #endif // defined(OS_ANDROID) 5002 #endif // defined(OS_ANDROID)
5002 5003
5003 media::MediaPermission* RenderFrameImpl::GetMediaPermission() { 5004 media::MediaPermission* RenderFrameImpl::GetMediaPermission() {
5004 if (!media_permission_dispatcher_) 5005 if (!media_permission_dispatcher_)
5005 media_permission_dispatcher_ = new MediaPermissionDispatcher(this); 5006 media_permission_dispatcher_ = new MediaPermissionDispatcher(this);
5006 return media_permission_dispatcher_; 5007 return media_permission_dispatcher_;
5007 } 5008 }
5008 5009
5009 #if defined(ENABLE_MOJO_MEDIA) 5010 #if defined(ENABLE_MOJO_MEDIA)
5010 media::interfaces::ServiceFactory* RenderFrameImpl::GetMediaServiceFactory() { 5011 media::interfaces::ServiceFactory* RenderFrameImpl::GetMediaServiceFactory() {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
5075 void RenderFrameImpl::RegisterMojoServices() { 5076 void RenderFrameImpl::RegisterMojoServices() {
5076 // Only main frame have ImageDownloader service. 5077 // Only main frame have ImageDownloader service.
5077 if (!frame_->parent()) { 5078 if (!frame_->parent()) {
5078 GetServiceRegistry()->AddService<image_downloader::ImageDownloader>( 5079 GetServiceRegistry()->AddService<image_downloader::ImageDownloader>(
5079 base::Bind(&ImageDownloaderImpl::CreateMojoService, 5080 base::Bind(&ImageDownloaderImpl::CreateMojoService,
5080 base::Unretained(this))); 5081 base::Unretained(this)));
5081 } 5082 }
5082 } 5083 }
5083 5084
5084 } // namespace content 5085 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698