OLD | NEW |
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 2875 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2886 base::TimeDelta::FromMilliseconds(base::GetFieldTrialParamByFeatureAsInt( | 2886 base::TimeDelta::FromMilliseconds(base::GetFieldTrialParamByFeatureAsInt( |
2887 media::kBackgroundVideoTrackOptimization, | 2887 media::kBackgroundVideoTrackOptimization, |
2888 "max_keyframe_distance_media_source_ms", | 2888 "max_keyframe_distance_media_source_ms", |
2889 base::TimeDelta::FromSeconds(10).InMilliseconds())); | 2889 base::TimeDelta::FromSeconds(10).InMilliseconds())); |
2890 | 2890 |
2891 // This must be created for every new WebMediaPlayer, each instance generates | 2891 // This must be created for every new WebMediaPlayer, each instance generates |
2892 // a new player id which is used to collate logs on the browser side. | 2892 // a new player id which is used to collate logs on the browser side. |
2893 std::unique_ptr<media::MediaLog> media_log( | 2893 std::unique_ptr<media::MediaLog> media_log( |
2894 new RenderMediaLog(url::Origin(security_origin).GetURL())); | 2894 new RenderMediaLog(url::Origin(security_origin).GetURL())); |
2895 | 2895 |
2896 bool use_fallback_path = false; | 2896 auto factory_selector = base::MakeUnique<media::RendererFactorySelector>(); |
| 2897 |
2897 #if defined(OS_ANDROID) | 2898 #if defined(OS_ANDROID) |
2898 use_fallback_path = UseMediaPlayerRenderer(url); | 2899 // The only MojoRendererService that is registered at the RenderFrameHost |
| 2900 // level uses the MediaPlayerRenderer as its underlying media::Renderer. |
| 2901 auto mojo_media_player_renderer_factory = |
| 2902 base::MakeUnique<media::MojoRendererFactory>( |
| 2903 media::MojoRendererFactory::GetGpuFactoriesCB(), |
| 2904 GetRemoteInterfaces()->get()); |
| 2905 |
| 2906 // Always give |factory_selector| a MediaPlayerRendererClient factory. WMPI |
| 2907 // might fallback to it if the final redirected URL is an HLS url. |
| 2908 factory_selector->AddFactory( |
| 2909 media::RendererFactorySelector::FactoryType::MEDIA_PLAYER, |
| 2910 base::MakeUnique<MediaPlayerRendererClientFactory>( |
| 2911 render_thread->compositor_task_runner(), |
| 2912 std::move(mojo_media_player_renderer_factory), |
| 2913 base::Bind(&StreamTextureWrapperImpl::Create, |
| 2914 render_thread->EnableStreamTextureCopy(), |
| 2915 render_thread->GetStreamTexureFactory(), |
| 2916 base::ThreadTaskRunnerHandle::Get()))); |
| 2917 |
| 2918 factory_selector->SetUseMediaPlayer(UseMediaPlayerRenderer(url)); |
2899 #endif // defined(OS_ANDROID) | 2919 #endif // defined(OS_ANDROID) |
2900 | 2920 |
2901 std::unique_ptr<media::RendererFactory> media_renderer_factory; | 2921 std::unique_ptr<media::RendererFactory> media_renderer_factory; |
2902 media::RendererFactorySelector::FactoryType factory_type; | 2922 media::RendererFactorySelector::FactoryType factory_type; |
2903 if (use_fallback_path) { | |
2904 #if defined(OS_ANDROID) | |
2905 auto mojo_renderer_factory = base::MakeUnique<media::MojoRendererFactory>( | |
2906 media::MojoRendererFactory::GetGpuFactoriesCB(), | |
2907 GetRemoteInterfaces()->get()); | |
2908 | 2923 |
2909 media_renderer_factory = base::MakeUnique<MediaPlayerRendererClientFactory>( | |
2910 render_thread->compositor_task_runner(), | |
2911 std::move(mojo_renderer_factory), | |
2912 base::Bind(&StreamTextureWrapperImpl::Create, | |
2913 render_thread->EnableStreamTextureCopy(), | |
2914 render_thread->GetStreamTexureFactory(), | |
2915 base::ThreadTaskRunnerHandle::Get())); | |
2916 #endif // defined(OS_ANDROID) | |
2917 | |
2918 // TODO(tguilbert): Move this line back into an #if defined(OS_ANDROID). | |
2919 // This will never be reached, unless we are on Android. Moving this line | |
2920 // outside of the #if/#endif block fixes a "sometimes-uninitialized" error | |
2921 // on desktop. This will be fixed with the next CL for crbug.com/663503. | |
2922 factory_type = media::RendererFactorySelector::FactoryType::MEDIA_PLAYER; | |
2923 } else { | |
2924 #if defined(ENABLE_MOJO_RENDERER) | 2924 #if defined(ENABLE_MOJO_RENDERER) |
2925 #if BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION) | 2925 #if BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION) |
2926 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 2926 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
2927 switches::kDisableMojoRenderer)) { | 2927 switches::kDisableMojoRenderer)) { |
2928 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( | |
2929 media_log.get(), GetDecoderFactory(), | |
2930 base::Bind(&RenderThreadImpl::GetGpuFactories, | |
2931 base::Unretained(render_thread))); | |
2932 | |
2933 factory_type = media::RendererFactorySelector::FactoryType::DEFAULT; | |
2934 } | |
2935 #endif // BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION) | |
2936 if (!media_renderer_factory) { | |
2937 media_renderer_factory = base::MakeUnique<media::MojoRendererFactory>( | |
2938 base::Bind(&RenderThreadImpl::GetGpuFactories, | |
2939 base::Unretained(render_thread)), | |
2940 GetMediaInterfaceProvider()); | |
2941 | |
2942 factory_type = media::RendererFactorySelector::FactoryType::MOJO; | |
2943 } | |
2944 #else | |
2945 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( | 2928 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( |
2946 media_log.get(), GetDecoderFactory(), | 2929 media_log.get(), GetDecoderFactory(), |
2947 base::Bind(&RenderThreadImpl::GetGpuFactories, | 2930 base::Bind(&RenderThreadImpl::GetGpuFactories, |
2948 base::Unretained(render_thread))); | 2931 base::Unretained(render_thread))); |
2949 | 2932 |
2950 factory_type = media::RendererFactorySelector::FactoryType::DEFAULT; | 2933 factory_type = media::RendererFactorySelector::FactoryType::DEFAULT; |
| 2934 } |
| 2935 #endif // BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION) |
| 2936 if (!media_renderer_factory) { |
| 2937 media_renderer_factory = base::MakeUnique<media::MojoRendererFactory>( |
| 2938 base::Bind(&RenderThreadImpl::GetGpuFactories, |
| 2939 base::Unretained(render_thread)), |
| 2940 GetMediaInterfaceProvider()); |
| 2941 |
| 2942 factory_type = media::RendererFactorySelector::FactoryType::MOJO; |
| 2943 } |
| 2944 #else |
| 2945 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( |
| 2946 media_log.get(), GetDecoderFactory(), |
| 2947 base::Bind(&RenderThreadImpl::GetGpuFactories, |
| 2948 base::Unretained(render_thread))); |
| 2949 |
| 2950 factory_type = media::RendererFactorySelector::FactoryType::DEFAULT; |
2951 #endif // defined(ENABLE_MOJO_RENDERER) | 2951 #endif // defined(ENABLE_MOJO_RENDERER) |
2952 } | |
2953 | 2952 |
2954 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) | 2953 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) |
2955 media_renderer_factory = | 2954 media_renderer_factory = |
2956 base::MakeUnique<media::remoting::AdaptiveRendererFactory>( | 2955 base::MakeUnique<media::remoting::AdaptiveRendererFactory>( |
2957 std::move(media_renderer_factory), std::move(remoting_controller)); | 2956 std::move(media_renderer_factory), std::move(remoting_controller)); |
2958 | 2957 |
2959 factory_type = media::RendererFactorySelector::FactoryType::ADAPTIVE; | 2958 factory_type = media::RendererFactorySelector::FactoryType::ADAPTIVE; |
2960 #endif | 2959 #endif |
2961 | 2960 |
2962 if (!url_index_.get() || url_index_->frame() != frame_) | 2961 if (!url_index_.get() || url_index_->frame() != frame_) |
2963 url_index_.reset(new media::UrlIndex(frame_)); | 2962 url_index_.reset(new media::UrlIndex(frame_)); |
2964 | 2963 |
2965 auto factory_selector = base::MakeUnique<media::RendererFactorySelector>(); | |
2966 | |
2967 factory_selector->AddFactory(factory_type, std::move(media_renderer_factory)); | 2964 factory_selector->AddFactory(factory_type, std::move(media_renderer_factory)); |
2968 factory_selector->SetBaseFactoryType(factory_type); | 2965 factory_selector->SetBaseFactoryType(factory_type); |
2969 | 2966 |
2970 std::unique_ptr<media::WebMediaPlayerParams> params( | 2967 std::unique_ptr<media::WebMediaPlayerParams> params( |
2971 new media::WebMediaPlayerParams( | 2968 new media::WebMediaPlayerParams( |
2972 std::move(media_log), | 2969 std::move(media_log), |
2973 base::Bind(&ContentRendererClient::DeferMediaLoad, | 2970 base::Bind(&ContentRendererClient::DeferMediaLoad, |
2974 base::Unretained(GetContentClient()->renderer()), | 2971 base::Unretained(GetContentClient()->renderer()), |
2975 static_cast<RenderFrame*>(this), | 2972 static_cast<RenderFrame*>(this), |
2976 GetWebMediaPlayerDelegate()->has_played_media()), | 2973 GetWebMediaPlayerDelegate()->has_played_media()), |
2977 audio_renderer_sink, render_thread->GetMediaThreadTaskRunner(), | 2974 audio_renderer_sink, render_thread->GetMediaThreadTaskRunner(), |
2978 render_thread->GetWorkerTaskRunner(), | 2975 render_thread->GetWorkerTaskRunner(), |
2979 render_thread->compositor_task_runner(), context_3d_cb, | 2976 render_thread->compositor_task_runner(), context_3d_cb, |
2980 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory, | 2977 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory, |
2981 base::Unretained(blink::MainThreadIsolate())), | 2978 base::Unretained(blink::MainThreadIsolate())), |
2982 initial_cdm, media_surface_manager_, media_observer, | 2979 initial_cdm, media_surface_manager_, media_observer, |
2983 max_keyframe_distance_to_disable_background_video, | 2980 max_keyframe_distance_to_disable_background_video, |
2984 max_keyframe_distance_to_disable_background_video_mse, | 2981 max_keyframe_distance_to_disable_background_video_mse, |
2985 GetWebkitPreferences().enable_instant_source_buffer_gc, | 2982 GetWebkitPreferences().enable_instant_source_buffer_gc, |
2986 GetContentClient()->renderer()->AllowMediaSuspend(), | 2983 GetContentClient()->renderer()->AllowMediaSuspend(), |
2987 embedded_media_experience_enabled)); | 2984 embedded_media_experience_enabled)); |
2988 | 2985 |
2989 media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl( | 2986 media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl( |
2990 frame_, client, encrypted_client, GetWebMediaPlayerDelegate(), | 2987 frame_, client, encrypted_client, GetWebMediaPlayerDelegate(), |
2991 std::move(factory_selector), url_index_, std::move(params)); | 2988 std::move(factory_selector), url_index_, std::move(params)); |
2992 | 2989 |
2993 #if defined(OS_ANDROID) // WMPI_CAST | 2990 #if defined(OS_ANDROID) // WMPI_CAST |
2994 media_player->SetMediaPlayerManager(GetMediaPlayerManager()); | 2991 media_player->SetMediaPlayerManager(GetMediaPlayerManager()); |
2995 media_player->SetDeviceScaleFactor(render_view_->GetDeviceScaleFactor()); | 2992 media_player->SetDeviceScaleFactor(render_view_->GetDeviceScaleFactor()); |
2996 media_player->SetUseFallbackPath(use_fallback_path); | |
2997 #endif // defined(OS_ANDROID) | 2993 #endif // defined(OS_ANDROID) |
2998 | 2994 |
2999 return media_player; | 2995 return media_player; |
3000 } | 2996 } |
3001 | 2997 |
3002 blink::WebApplicationCacheHost* RenderFrameImpl::CreateApplicationCacheHost( | 2998 blink::WebApplicationCacheHost* RenderFrameImpl::CreateApplicationCacheHost( |
3003 blink::WebApplicationCacheHostClient* client) { | 2999 blink::WebApplicationCacheHostClient* client) { |
3004 if (!frame_ || !frame_->View()) | 3000 if (!frame_ || !frame_->View()) |
3005 return NULL; | 3001 return NULL; |
3006 | 3002 |
(...skipping 4019 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7026 policy(info.default_policy), | 7022 policy(info.default_policy), |
7027 replaces_current_history_item(info.replaces_current_history_item), | 7023 replaces_current_history_item(info.replaces_current_history_item), |
7028 history_navigation_in_new_child_frame( | 7024 history_navigation_in_new_child_frame( |
7029 info.is_history_navigation_in_new_child_frame), | 7025 info.is_history_navigation_in_new_child_frame), |
7030 client_redirect(info.is_client_redirect), | 7026 client_redirect(info.is_client_redirect), |
7031 cache_disabled(info.is_cache_disabled), | 7027 cache_disabled(info.is_cache_disabled), |
7032 form(info.form), | 7028 form(info.form), |
7033 source_location(info.source_location) {} | 7029 source_location(info.source_location) {} |
7034 | 7030 |
7035 } // namespace content | 7031 } // namespace content |
OLD | NEW |