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

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

Issue 2815303006: Convert MediaLog from being ref counted to owned by WebMediaPlayer. (Closed)
Patch Set: Actually fix fuzzers. Created 3 years, 8 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 2825 matching lines...) Expand 10 before | Expand all | Expand 10 after
2836 sink_id.Utf8(), security_origin); 2836 sink_id.Utf8(), security_origin);
2837 // We need to keep a reference to the context provider (see crbug.com/610527) 2837 // We need to keep a reference to the context provider (see crbug.com/610527)
2838 // but media/ can't depend on cc/, so for now, just keep a reference in the 2838 // but media/ can't depend on cc/, so for now, just keep a reference in the
2839 // callback. 2839 // callback.
2840 // TODO(piman): replace media::Context3D to scoped_refptr<ContextProvider> in 2840 // TODO(piman): replace media::Context3D to scoped_refptr<ContextProvider> in
2841 // media/ once ContextProvider is in gpu/. 2841 // media/ once ContextProvider is in gpu/.
2842 media::WebMediaPlayerParams::Context3DCB context_3d_cb = base::Bind( 2842 media::WebMediaPlayerParams::Context3DCB context_3d_cb = base::Bind(
2843 &GetSharedMainThreadContext3D, 2843 &GetSharedMainThreadContext3D,
2844 RenderThreadImpl::current()->SharedMainThreadContextProvider()); 2844 RenderThreadImpl::current()->SharedMainThreadContextProvider());
2845 2845
2846 // This must be created for every new WebMediaPlayer, each instance generates
2847 // a new player id which is used to collate logs on the browser side.
2848 // TODO(chcunningham, dalecurtis): This should be switched to a unique_ptr
2849 // owned by WebMediaPlayer to avoid this confusion. http://crbug.com/711818.
2850 scoped_refptr<media::MediaLog> media_log(
2851 new RenderMediaLog(url::Origin(security_origin).GetURL()));
2852
2853 bool embedded_media_experience_enabled = false; 2846 bool embedded_media_experience_enabled = false;
2854 #if defined(OS_ANDROID) 2847 #if defined(OS_ANDROID)
2855 if (!UseMediaPlayerRenderer(url) && !media_surface_manager_) 2848 if (!UseMediaPlayerRenderer(url) && !media_surface_manager_)
2856 media_surface_manager_ = new RendererSurfaceViewManager(this); 2849 media_surface_manager_ = new RendererSurfaceViewManager(this);
2857 embedded_media_experience_enabled = 2850 embedded_media_experience_enabled =
2858 GetWebkitPreferences().embedded_media_experience_enabled; 2851 GetWebkitPreferences().embedded_media_experience_enabled;
2859 #endif // defined(OS_ANDROID) 2852 #endif // defined(OS_ANDROID)
2860 2853
2861 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) 2854 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
2862 media::mojom::RemotingSourcePtr remoting_source; 2855 media::mojom::RemotingSourcePtr remoting_source;
(...skipping 14 matching lines...) Expand all
2877 base::TimeDelta max_keyframe_distance_to_disable_background_video = 2870 base::TimeDelta max_keyframe_distance_to_disable_background_video =
2878 base::TimeDelta::FromMilliseconds(base::GetFieldTrialParamByFeatureAsInt( 2871 base::TimeDelta::FromMilliseconds(base::GetFieldTrialParamByFeatureAsInt(
2879 media::kBackgroundVideoTrackOptimization, "max_keyframe_distance_ms", 2872 media::kBackgroundVideoTrackOptimization, "max_keyframe_distance_ms",
2880 base::TimeDelta::FromSeconds(10).InMilliseconds())); 2873 base::TimeDelta::FromSeconds(10).InMilliseconds()));
2881 base::TimeDelta max_keyframe_distance_to_disable_background_video_mse = 2874 base::TimeDelta max_keyframe_distance_to_disable_background_video_mse =
2882 base::TimeDelta::FromMilliseconds(base::GetFieldTrialParamByFeatureAsInt( 2875 base::TimeDelta::FromMilliseconds(base::GetFieldTrialParamByFeatureAsInt(
2883 media::kBackgroundVideoTrackOptimization, 2876 media::kBackgroundVideoTrackOptimization,
2884 "max_keyframe_distance_media_source_ms", 2877 "max_keyframe_distance_media_source_ms",
2885 base::TimeDelta::FromSeconds(10).InMilliseconds())); 2878 base::TimeDelta::FromSeconds(10).InMilliseconds()));
2886 2879
2887 media::WebMediaPlayerParams params( 2880 // This must be created for every new WebMediaPlayer, each instance generates
2888 base::Bind(&ContentRendererClient::DeferMediaLoad, 2881 // a new player id which is used to collate logs on the browser side.
2889 base::Unretained(GetContentClient()->renderer()), 2882 std::unique_ptr<media::MediaLog> media_log(
2890 static_cast<RenderFrame*>(this), 2883 new RenderMediaLog(url::Origin(security_origin).GetURL()));
2891 GetWebMediaPlayerDelegate()->has_played_media()),
2892 audio_renderer_sink, media_log, render_thread->GetMediaThreadTaskRunner(),
2893 render_thread->GetWorkerTaskRunner(),
2894 render_thread->compositor_task_runner(), context_3d_cb,
2895 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory,
2896 base::Unretained(blink::MainThreadIsolate())),
2897 initial_cdm, media_surface_manager_, media_observer,
2898 max_keyframe_distance_to_disable_background_video,
2899 max_keyframe_distance_to_disable_background_video_mse,
2900 GetWebkitPreferences().enable_instant_source_buffer_gc,
2901 GetContentClient()->renderer()->AllowMediaSuspend(),
2902 embedded_media_experience_enabled);
2903 2884
2904 bool use_fallback_path = false; 2885 bool use_fallback_path = false;
2905 #if defined(OS_ANDROID) 2886 #if defined(OS_ANDROID)
2906 use_fallback_path = UseMediaPlayerRenderer(url); 2887 use_fallback_path = UseMediaPlayerRenderer(url);
2907 #endif // defined(OS_ANDROID) 2888 #endif // defined(OS_ANDROID)
2908 2889
2909 std::unique_ptr<media::RendererFactory> media_renderer_factory; 2890 std::unique_ptr<media::RendererFactory> media_renderer_factory;
2910 if (use_fallback_path) { 2891 if (use_fallback_path) {
2911 #if defined(OS_ANDROID) 2892 #if defined(OS_ANDROID)
2912 auto mojo_renderer_factory = base::MakeUnique<media::MojoRendererFactory>( 2893 auto mojo_renderer_factory = base::MakeUnique<media::MojoRendererFactory>(
2913 media::MojoRendererFactory::GetGpuFactoriesCB(), 2894 media::MojoRendererFactory::GetGpuFactoriesCB(),
2914 GetRemoteInterfaces()->get()); 2895 GetRemoteInterfaces()->get());
2915 2896
2916 media_renderer_factory = base::MakeUnique<MediaPlayerRendererClientFactory>( 2897 media_renderer_factory = base::MakeUnique<MediaPlayerRendererClientFactory>(
2917 render_thread->compositor_task_runner(), 2898 render_thread->compositor_task_runner(),
2918 std::move(mojo_renderer_factory), 2899 std::move(mojo_renderer_factory),
2919 base::Bind(&StreamTextureWrapperImpl::Create, 2900 base::Bind(&StreamTextureWrapperImpl::Create,
2920 render_thread->EnableStreamTextureCopy(), 2901 render_thread->EnableStreamTextureCopy(),
2921 render_thread->GetStreamTexureFactory(), 2902 render_thread->GetStreamTexureFactory(),
2922 base::ThreadTaskRunnerHandle::Get())); 2903 base::ThreadTaskRunnerHandle::Get()));
2923 #endif // defined(OS_ANDROID) 2904 #endif // defined(OS_ANDROID)
2924 } else { 2905 } else {
2925 #if defined(ENABLE_MOJO_RENDERER) 2906 #if defined(ENABLE_MOJO_RENDERER)
2926 #if BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION) 2907 #if BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION)
2927 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 2908 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
2928 switches::kDisableMojoRenderer)) { 2909 switches::kDisableMojoRenderer)) {
2929 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( 2910 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>(
2930 media_log, GetDecoderFactory(), 2911 media_log.get(), GetDecoderFactory(),
2931 base::Bind(&RenderThreadImpl::GetGpuFactories, 2912 base::Bind(&RenderThreadImpl::GetGpuFactories,
2932 base::Unretained(render_thread))); 2913 base::Unretained(render_thread)));
2933 } 2914 }
2934 #endif // BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION) 2915 #endif // BUILDFLAG(ENABLE_RUNTIME_MEDIA_RENDERER_SELECTION)
2935 if (!media_renderer_factory) { 2916 if (!media_renderer_factory) {
2936 media_renderer_factory = base::MakeUnique<media::MojoRendererFactory>( 2917 media_renderer_factory = base::MakeUnique<media::MojoRendererFactory>(
2937 base::Bind(&RenderThreadImpl::GetGpuFactories, 2918 base::Bind(&RenderThreadImpl::GetGpuFactories,
2938 base::Unretained(render_thread)), 2919 base::Unretained(render_thread)),
2939 GetMediaInterfaceProvider()); 2920 GetMediaInterfaceProvider());
2940 } 2921 }
2941 #else 2922 #else
2942 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>( 2923 media_renderer_factory = base::MakeUnique<media::DefaultRendererFactory>(
2943 media_log, GetDecoderFactory(), 2924 media_log.get(), GetDecoderFactory(),
2944 base::Bind(&RenderThreadImpl::GetGpuFactories, 2925 base::Bind(&RenderThreadImpl::GetGpuFactories,
2945 base::Unretained(render_thread))); 2926 base::Unretained(render_thread)));
2946 #endif // defined(ENABLE_MOJO_RENDERER) 2927 #endif // defined(ENABLE_MOJO_RENDERER)
2947 } 2928 }
2948 2929
2949 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) 2930 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
2950 auto* const remoting_controller_ptr = remoting_controller.get(); 2931 auto* const remoting_controller_ptr = remoting_controller.get();
2951 media_renderer_factory = 2932 media_renderer_factory =
2952 base::MakeUnique<media::remoting::AdaptiveRendererFactory>( 2933 base::MakeUnique<media::remoting::AdaptiveRendererFactory>(
2953 std::move(media_renderer_factory), std::move(remoting_controller)); 2934 std::move(media_renderer_factory), std::move(remoting_controller));
2954 #endif 2935 #endif
2955 2936
2956 if (!url_index_.get() || url_index_->frame() != frame_) 2937 if (!url_index_.get() || url_index_->frame() != frame_)
2957 url_index_.reset(new media::UrlIndex(frame_)); 2938 url_index_.reset(new media::UrlIndex(frame_));
2958 2939
2940 std::unique_ptr<media::WebMediaPlayerParams> params(
2941 new media::WebMediaPlayerParams(
2942 std::move(media_log),
2943 base::Bind(&ContentRendererClient::DeferMediaLoad,
2944 base::Unretained(GetContentClient()->renderer()),
2945 static_cast<RenderFrame*>(this),
2946 GetWebMediaPlayerDelegate()->has_played_media()),
2947 audio_renderer_sink, render_thread->GetMediaThreadTaskRunner(),
2948 render_thread->GetWorkerTaskRunner(),
2949 render_thread->compositor_task_runner(), context_3d_cb,
2950 base::Bind(&v8::Isolate::AdjustAmountOfExternalAllocatedMemory,
2951 base::Unretained(blink::MainThreadIsolate())),
2952 initial_cdm, media_surface_manager_, media_observer,
2953 max_keyframe_distance_to_disable_background_video,
2954 max_keyframe_distance_to_disable_background_video_mse,
2955 GetWebkitPreferences().enable_instant_source_buffer_gc,
2956 GetContentClient()->renderer()->AllowMediaSuspend(),
2957 embedded_media_experience_enabled));
2958
2959 media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl( 2959 media::WebMediaPlayerImpl* media_player = new media::WebMediaPlayerImpl(
2960 frame_, client, encrypted_client, GetWebMediaPlayerDelegate(), 2960 frame_, client, encrypted_client, GetWebMediaPlayerDelegate(),
2961 std::move(media_renderer_factory), url_index_, params); 2961 std::move(media_renderer_factory), url_index_, std::move(params));
2962 2962
2963 #if defined(OS_ANDROID) // WMPI_CAST 2963 #if defined(OS_ANDROID) // WMPI_CAST
2964 media_player->SetMediaPlayerManager(GetMediaPlayerManager()); 2964 media_player->SetMediaPlayerManager(GetMediaPlayerManager());
2965 media_player->SetDeviceScaleFactor(render_view_->GetDeviceScaleFactor()); 2965 media_player->SetDeviceScaleFactor(render_view_->GetDeviceScaleFactor());
2966 media_player->SetUseFallbackPath(use_fallback_path); 2966 media_player->SetUseFallbackPath(use_fallback_path);
2967 #endif // defined(OS_ANDROID) 2967 #endif // defined(OS_ANDROID)
2968 2968
2969 #if BUILDFLAG(ENABLE_MEDIA_REMOTING) 2969 #if BUILDFLAG(ENABLE_MEDIA_REMOTING)
2970 remoting_controller_ptr->SetDownloadPosterCallback(base::Bind( 2970 remoting_controller_ptr->SetDownloadPosterCallback(base::Bind(
2971 &SingleImageDownloader::DownloadImage, weak_factory_.GetWeakPtr())); 2971 &SingleImageDownloader::DownloadImage, weak_factory_.GetWeakPtr()));
(...skipping 3324 matching lines...) Expand 10 before | Expand all | Expand 10 after
6296 #if BUILDFLAG(ENABLE_WEBRTC) 6296 #if BUILDFLAG(ENABLE_WEBRTC)
6297 RenderThreadImpl* const render_thread = RenderThreadImpl::current(); 6297 RenderThreadImpl* const render_thread = RenderThreadImpl::current();
6298 6298
6299 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner = 6299 scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner =
6300 render_thread->compositor_task_runner(); 6300 render_thread->compositor_task_runner();
6301 if (!compositor_task_runner.get()) 6301 if (!compositor_task_runner.get())
6302 compositor_task_runner = base::ThreadTaskRunnerHandle::Get(); 6302 compositor_task_runner = base::ThreadTaskRunnerHandle::Get();
6303 6303
6304 return new WebMediaPlayerMS( 6304 return new WebMediaPlayerMS(
6305 frame_, client, GetWebMediaPlayerDelegate(), 6305 frame_, client, GetWebMediaPlayerDelegate(),
6306 new RenderMediaLog(url::Origin(security_origin).GetURL()), 6306 base::MakeUnique<RenderMediaLog>(url::Origin(security_origin).GetURL()),
6307 CreateRendererFactory(), render_thread->GetIOTaskRunner(), 6307 CreateRendererFactory(), render_thread->GetIOTaskRunner(),
6308 compositor_task_runner, render_thread->GetMediaThreadTaskRunner(), 6308 compositor_task_runner, render_thread->GetMediaThreadTaskRunner(),
6309 render_thread->GetWorkerTaskRunner(), render_thread->GetGpuFactories(), 6309 render_thread->GetWorkerTaskRunner(), render_thread->GetGpuFactories(),
6310 sink_id, security_origin); 6310 sink_id, security_origin);
6311 #else 6311 #else
6312 return NULL; 6312 return NULL;
6313 #endif // BUILDFLAG(ENABLE_WEBRTC) 6313 #endif // BUILDFLAG(ENABLE_WEBRTC)
6314 } 6314 }
6315 6315
6316 std::unique_ptr<MediaStreamRendererFactory> 6316 std::unique_ptr<MediaStreamRendererFactory>
(...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after
6991 policy(info.default_policy), 6991 policy(info.default_policy),
6992 replaces_current_history_item(info.replaces_current_history_item), 6992 replaces_current_history_item(info.replaces_current_history_item),
6993 history_navigation_in_new_child_frame( 6993 history_navigation_in_new_child_frame(
6994 info.is_history_navigation_in_new_child_frame), 6994 info.is_history_navigation_in_new_child_frame),
6995 client_redirect(info.is_client_redirect), 6995 client_redirect(info.is_client_redirect),
6996 cache_disabled(info.is_cache_disabled), 6996 cache_disabled(info.is_cache_disabled),
6997 form(info.form), 6997 form(info.form),
6998 source_location(info.source_location) {} 6998 source_location(info.source_location) {}
6999 6999
7000 } // namespace content 7000 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698