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

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: Rename test class. Created 5 years, 3 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"
117 #include "media/renderers/gpu_video_accelerator_factories.h" 116 #include "media/renderers/gpu_video_accelerator_factories.h"
118 #include "mojo/common/url_type_converters.h" 117 #include "mojo/common/url_type_converters.h"
119 #include "net/base/data_url.h" 118 #include "net/base/data_url.h"
120 #include "net/base/net_errors.h" 119 #include "net/base/net_errors.h"
121 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" 120 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
122 #include "net/http/http_util.h" 121 #include "net/http/http_util.h"
123 #include "third_party/WebKit/public/platform/WebStorageQuotaCallbacks.h" 122 #include "third_party/WebKit/public/platform/WebStorageQuotaCallbacks.h"
124 #include "third_party/WebKit/public/platform/WebString.h" 123 #include "third_party/WebKit/public/platform/WebString.h"
125 #include "third_party/WebKit/public/platform/WebURL.h" 124 #include "third_party/WebKit/public/platform/WebURL.h"
126 #include "third_party/WebKit/public/platform/WebURLError.h" 125 #include "third_party/WebKit/public/platform/WebURLError.h"
(...skipping 1931 matching lines...) Expand 10 before | Expand all | Expand 10 after
2058 render_view_->RegisterVideoHoleFrame(this); 2057 render_view_->RegisterVideoHoleFrame(this);
2059 contains_media_player_ = true; 2058 contains_media_player_ = true;
2060 } 2059 }
2061 #endif // defined(VIDEO_HOLE) 2060 #endif // defined(VIDEO_HOLE)
2062 2061
2063 blink::WebMediaStream web_stream( 2062 blink::WebMediaStream web_stream(
2064 blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor(url)); 2063 blink::WebMediaStreamRegistry::lookupMediaStreamDescriptor(url));
2065 if (!web_stream.isNull()) 2064 if (!web_stream.isNull())
2066 return CreateWebMediaPlayerForMediaStream(client); 2065 return CreateWebMediaPlayerForMediaStream(client);
2067 2066
2067 RenderThreadImpl* render_thread = RenderThreadImpl::current();
2068
2068 #if defined(OS_ANDROID) && !defined(ENABLE_MEDIA_PIPELINE_ON_ANDROID) 2069 #if defined(OS_ANDROID) && !defined(ENABLE_MEDIA_PIPELINE_ON_ANDROID)
2069 return CreateAndroidWebMediaPlayer(client, encrypted_client, 2070 scoped_refptr<media::AudioRendererSink> audio_renderer_sink;
2070 GetMediaPermission(), initial_cdm); 2071 media::WebMediaPlayerParams::Context3DCB context_3d_cb;
2071 #else 2072 #else
2073 scoped_refptr<media::AudioRendererSink> audio_renderer_sink =
2074 render_thread->GetAudioRendererMixerManager()->CreateInput(routing_id_);
2075 media::WebMediaPlayerParams::Context3DCB context_3d_cb =
2076 base::Bind(&GetSharedMainThreadContext3D);
2077 #endif // defined(OS_ANDROID) && !defined(ENABLE_MEDIA_PIPELINE_ON_ANDROID)
2078
2072 scoped_refptr<media::MediaLog> media_log(new RenderMediaLog()); 2079 scoped_refptr<media::MediaLog> media_log(new RenderMediaLog());
2073
2074 RenderThreadImpl* render_thread = RenderThreadImpl::current();
2075 media::WebMediaPlayerParams params( 2080 media::WebMediaPlayerParams params(
2076 base::Bind(&ContentRendererClient::DeferMediaLoad, 2081 base::Bind(&ContentRendererClient::DeferMediaLoad,
2077 base::Unretained(GetContentClient()->renderer()), 2082 base::Unretained(GetContentClient()->renderer()),
2078 static_cast<RenderFrame*>(this), has_played_media_), 2083 static_cast<RenderFrame*>(this), has_played_media_),
2079 render_thread->GetAudioRendererMixerManager()->CreateInput(routing_id_), 2084 audio_renderer_sink, media_log, render_thread->GetMediaThreadTaskRunner(),
2080 media_log, render_thread->GetMediaThreadTaskRunner(),
2081 render_thread->GetWorkerTaskRunner(), 2085 render_thread->GetWorkerTaskRunner(),
2082 render_thread->compositor_task_runner(), 2086 render_thread->compositor_task_runner(), context_3d_cb,
2083 base::Bind(&GetSharedMainThreadContext3D), GetMediaPermission(), 2087 GetMediaPermission(), initial_cdm);
2084 initial_cdm);
2085 2088
2089 #if defined(OS_ANDROID) && !defined(ENABLE_MEDIA_PIPELINE_ON_ANDROID)
2090 return CreateAndroidWebMediaPlayer(client, encrypted_client, params);
2091 #else
2086 #if defined(ENABLE_MOJO_MEDIA) 2092 #if defined(ENABLE_MOJO_MEDIA)
2087 scoped_ptr<media::RendererFactory> media_renderer_factory( 2093 scoped_ptr<media::RendererFactory> media_renderer_factory(
2088 new media::MojoRendererFactory(GetMediaServiceFactory())); 2094 new media::MojoRendererFactory(GetMediaServiceFactory()));
2089 #else 2095 #else
2090 scoped_ptr<media::RendererFactory> media_renderer_factory = 2096 scoped_ptr<media::RendererFactory> media_renderer_factory =
2091 GetContentClient()->renderer()->CreateMediaRendererFactory( 2097 GetContentClient()->renderer()->CreateMediaRendererFactory(
2092 this, render_thread->GetGpuFactories(), media_log); 2098 this, render_thread->GetGpuFactories(), media_log);
2093 2099
2094 if (!media_renderer_factory.get()) { 2100 if (!media_renderer_factory.get()) {
2095 media_renderer_factory.reset(new media::DefaultRendererFactory( 2101 media_renderer_factory.reset(new media::DefaultRendererFactory(
(...skipping 2891 matching lines...) Expand 10 before | Expand all | Expand 10 after
4987 url::kJavaScriptScheme)) { 4993 url::kJavaScriptScheme)) {
4988 return NavigationStateImpl::CreateBrowserInitiated( 4994 return NavigationStateImpl::CreateBrowserInitiated(
4989 pending_navigation_params_->common_params, 4995 pending_navigation_params_->common_params,
4990 pending_navigation_params_->start_params, 4996 pending_navigation_params_->start_params,
4991 pending_navigation_params_->request_params); 4997 pending_navigation_params_->request_params);
4992 } 4998 }
4993 return NavigationStateImpl::CreateContentInitiated(); 4999 return NavigationStateImpl::CreateContentInitiated();
4994 } 5000 }
4995 5001
4996 #if defined(OS_ANDROID) 5002 #if defined(OS_ANDROID)
4997
4998 WebMediaPlayer* RenderFrameImpl::CreateAndroidWebMediaPlayer( 5003 WebMediaPlayer* RenderFrameImpl::CreateAndroidWebMediaPlayer(
4999 WebMediaPlayerClient* client, 5004 WebMediaPlayerClient* client,
5000 WebMediaPlayerEncryptedMediaClient* encrypted_client, 5005 WebMediaPlayerEncryptedMediaClient* encrypted_client,
5001 media::MediaPermission* media_permission, 5006 const media::WebMediaPlayerParams& params) {
5002 WebContentDecryptionModule* initial_cdm) {
5003 scoped_refptr<StreamTextureFactory> stream_texture_factory; 5007 scoped_refptr<StreamTextureFactory> stream_texture_factory;
5004 if (SynchronousCompositorFactory* factory = 5008 if (SynchronousCompositorFactory* factory =
5005 SynchronousCompositorFactory::GetInstance()) { 5009 SynchronousCompositorFactory::GetInstance()) {
5006 stream_texture_factory = factory->CreateStreamTextureFactory(routing_id_); 5010 stream_texture_factory = factory->CreateStreamTextureFactory(routing_id_);
5007 } else { 5011 } else {
5008 GpuChannelHost* gpu_channel_host = 5012 GpuChannelHost* gpu_channel_host =
5009 RenderThreadImpl::current()->EstablishGpuChannelSync( 5013 RenderThreadImpl::current()->EstablishGpuChannelSync(
5010 CAUSE_FOR_GPU_LAUNCH_VIDEODECODEACCELERATOR_INITIALIZE); 5014 CAUSE_FOR_GPU_LAUNCH_VIDEODECODEACCELERATOR_INITIALIZE);
5011 5015
5012 if (!gpu_channel_host) { 5016 if (!gpu_channel_host) {
5013 LOG(ERROR) << "Failed to establish GPU channel for media player"; 5017 LOG(ERROR) << "Failed to establish GPU channel for media player";
5014 return NULL; 5018 return NULL;
5015 } 5019 }
5016 5020
5017 scoped_refptr<cc_blink::ContextProviderWebContext> context_provider = 5021 scoped_refptr<cc_blink::ContextProviderWebContext> context_provider =
5018 RenderThreadImpl::current()->SharedMainThreadContextProvider(); 5022 RenderThreadImpl::current()->SharedMainThreadContextProvider();
5019 5023
5020 if (!context_provider.get()) { 5024 if (!context_provider.get()) {
5021 LOG(ERROR) << "Failed to get context3d for media player"; 5025 LOG(ERROR) << "Failed to get context3d for media player";
5022 return NULL; 5026 return NULL;
5023 } 5027 }
5024 5028
5025 stream_texture_factory = StreamTextureFactoryImpl::Create( 5029 stream_texture_factory = StreamTextureFactoryImpl::Create(
5026 context_provider, gpu_channel_host, routing_id_); 5030 context_provider, gpu_channel_host, routing_id_);
5027 } 5031 }
5028 5032
5029 return new WebMediaPlayerAndroid( 5033 return new WebMediaPlayerAndroid(
5030 frame_, client, encrypted_client, weak_factory_.GetWeakPtr(), 5034 frame_, client, encrypted_client, weak_factory_.GetWeakPtr(),
5031 GetMediaPlayerManager(), GetCdmFactory(), media_permission, initial_cdm, 5035 GetMediaPlayerManager(), GetCdmFactory(), stream_texture_factory, params);
5032 stream_texture_factory,
5033 RenderThreadImpl::current()->GetMediaThreadTaskRunner(),
5034 new RenderMediaLog());
5035 } 5036 }
5036 5037
5037 RendererMediaPlayerManager* RenderFrameImpl::GetMediaPlayerManager() { 5038 RendererMediaPlayerManager* RenderFrameImpl::GetMediaPlayerManager() {
5038 if (!media_player_manager_) 5039 if (!media_player_manager_)
5039 media_player_manager_ = new RendererMediaPlayerManager(this); 5040 media_player_manager_ = new RendererMediaPlayerManager(this);
5040 return media_player_manager_; 5041 return media_player_manager_;
5041 } 5042 }
5042
5043 #endif // defined(OS_ANDROID) 5043 #endif // defined(OS_ANDROID)
5044 5044
5045 media::MediaPermission* RenderFrameImpl::GetMediaPermission() { 5045 media::MediaPermission* RenderFrameImpl::GetMediaPermission() {
5046 if (!media_permission_dispatcher_) 5046 if (!media_permission_dispatcher_)
5047 media_permission_dispatcher_ = new MediaPermissionDispatcher(this); 5047 media_permission_dispatcher_ = new MediaPermissionDispatcher(this);
5048 return media_permission_dispatcher_; 5048 return media_permission_dispatcher_;
5049 } 5049 }
5050 5050
5051 #if defined(ENABLE_MOJO_MEDIA) 5051 #if defined(ENABLE_MOJO_MEDIA)
5052 media::interfaces::ServiceFactory* RenderFrameImpl::GetMediaServiceFactory() { 5052 media::interfaces::ServiceFactory* RenderFrameImpl::GetMediaServiceFactory() {
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
5120 DCHECK(mojo_shell_); 5120 DCHECK(mojo_shell_);
5121 mojo::ServiceProviderPtr service_provider; 5121 mojo::ServiceProviderPtr service_provider;
5122 mojo::URLRequestPtr request(mojo::URLRequest::New()); 5122 mojo::URLRequestPtr request(mojo::URLRequest::New());
5123 request->url = mojo::String::From(url); 5123 request->url = mojo::String::From(url);
5124 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider), 5124 mojo_shell_->ConnectToApplication(request.Pass(), GetProxy(&service_provider),
5125 nullptr, nullptr); 5125 nullptr, nullptr);
5126 return service_provider.Pass(); 5126 return service_provider.Pass();
5127 } 5127 }
5128 5128
5129 } // namespace content 5129 } // 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