Chromium Code Reviews| Index: chromecast/browser/cast_browser_main_parts.cc |
| diff --git a/chromecast/browser/cast_browser_main_parts.cc b/chromecast/browser/cast_browser_main_parts.cc |
| index b4202898a59a35bdca35fcae6509eb4dc46d85cc..6251a345db839343ad6a20b26a4f0a46cbaa9681 100644 |
| --- a/chromecast/browser/cast_browser_main_parts.cc |
| +++ b/chromecast/browser/cast_browser_main_parts.cc |
| @@ -251,6 +251,12 @@ CastBrowserMainParts::CastBrowserMainParts( |
| CastBrowserMainParts::~CastBrowserMainParts() { |
| } |
| +scoped_refptr<base::SingleThreadTaskRunner> |
| +CastBrowserMainParts::GetMediaTaskRunner() const { |
| + // TODO(alokp): Obtain task runner from a local thread or mojo media app. |
| + return media::MediaMessageLoop::GetTaskRunner(); |
| +} |
| + |
| void CastBrowserMainParts::PreMainMessageLoopStart() { |
| // GroupedHistograms needs to be initialized before any threads are created |
| // to prevent race conditions between calls to Preregister and those threads |
| @@ -383,16 +389,22 @@ void CastBrowserMainParts::PreMainMessageLoopRun() { |
| // TODO(halliwell) move audio builds to use ozone_platform_cast, then can |
| // simplify this by removing DISABLE_DISPLAY condition. Should then also |
| // assert(ozone_platform_cast) in BUILD.gn where it depends on //ui/ozone. |
| + video_plane_controller_.reset( |
| + new media::VideoPlaneController(GetMediaTaskRunner())); |
| + cast_browser_process_->cast_screen()->SetDisplayResizeCallback( |
| + base::Bind(&media::VideoPlaneController::SetGraphicsPlaneResolution, |
| + base::Unretained(video_plane_controller_.get()))); |
| ui::OverlayManagerCast::SetOverlayCompositedCallback( |
| base::Bind(&media::VideoPlaneController::SetGeometry, |
| - base::Unretained(media::VideoPlaneController::GetInstance()))); |
| + base::Unretained(video_plane_controller_.get()))); |
| #endif |
| cast_browser_process_->SetCastService( |
| cast_browser_process_->browser_client()->CreateCastService( |
| cast_browser_process_->browser_context(), |
| cast_browser_process_->pref_service(), |
| - url_request_context_factory_->GetSystemGetter())); |
| + url_request_context_factory_->GetSystemGetter(), |
| + video_plane_controller_.get())); |
| cast_browser_process_->cast_service()->Initialize(); |
| // Initializing metrics service and network delegates must happen after cast |
| @@ -452,5 +464,12 @@ void CastBrowserMainParts::PostMainMessageLoopRun() { |
| #endif |
| } |
| +void CastBrowserMainParts::PostDestroyThreads() { |
| + // Finalize CastMediaShlib on media thread to ensure it's not accessed |
| + // after Finalize. |
| + GetMediaTaskRunner()->PostTask(FROM_HERE, |
| + base::Bind(&media::CastMediaShlib::Finalize)); |
|
halliwell
2016/03/23 13:12:17
PostDestroyThreads is commented as "after threads
alokp
2016/03/23 16:19:33
Yes it only applies to threads managed by BrowserM
|
| +} |
| + |
| } // namespace shell |
| } // namespace chromecast |