1 // Copyright 2019 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chromecast/browser/cast_renderer_block_data.h" 6 7 #include "chromecast/browser/application_media_info_manager.h" 8 #include "chromecast/browser/cast_session_id_map.h" 9 #include "content/public/browser/web_contents.h" 10 11 namespace chromecast { 12 namespace shell { 13 namespace { 14 15 const char kUserDataKey[] = "chromecast.shell.RenderBlockUserData.key"; 16 GetOrCreateCastRendererBlockData(content::WebContents * web_contents)17CastRendererBlockData* GetOrCreateCastRendererBlockData( 18 content::WebContents* web_contents) { 19 CastRendererBlockData* data = static_cast<CastRendererBlockData*>( 20 web_contents->GetUserData(kUserDataKey)); 21 if (!data) { 22 auto cast_renderer_block_data = std::make_unique<CastRendererBlockData>(); 23 data = cast_renderer_block_data.get(); 24 web_contents->SetUserData(kUserDataKey, 25 std::move(cast_renderer_block_data)); 26 } 27 return data; 28 } 29 30 } // namespace 31 32 // static SetRendererBlockForWebContents(content::WebContents * web_contents,bool blocked)33void CastRendererBlockData::SetRendererBlockForWebContents( 34 content::WebContents* web_contents, 35 bool blocked) { 36 DCHECK(web_contents); 37 CastRendererBlockData* data = GetOrCreateCastRendererBlockData(web_contents); 38 data->SetBlocked(blocked); 39 } 40 41 // static SetApplicationMediaInfoManagerForWebContents(content::WebContents * web_contents,media::ApplicationMediaInfoManager * application_media_info_manager)42void CastRendererBlockData::SetApplicationMediaInfoManagerForWebContents( 43 content::WebContents* web_contents, 44 media::ApplicationMediaInfoManager* application_media_info_manager) { 45 DCHECK(web_contents); 46 CastRendererBlockData* data = GetOrCreateCastRendererBlockData(web_contents); 47 data->SetApplicationMediaInfoManager(application_media_info_manager); 48 } 49 CastRendererBlockData()50CastRendererBlockData::CastRendererBlockData() : blocked_(false) {} 51 CastRendererBlockData::~CastRendererBlockData() = default; 52 SetBlocked(bool blocked)53void CastRendererBlockData::SetBlocked(bool blocked) { 54 LOG(INFO) << "Setting blocked to: " << blocked << " from " << blocked_; 55 blocked_ = blocked; 56 if (application_media_info_manager_) { 57 application_media_info_manager_->SetRendererBlock(blocked); 58 } 59 } 60 SetApplicationMediaInfoManager(media::ApplicationMediaInfoManager * application_media_info_manager)61void CastRendererBlockData::SetApplicationMediaInfoManager( 62 media::ApplicationMediaInfoManager* application_media_info_manager) { 63 DCHECK(application_media_info_manager); 64 application_media_info_manager_ = 65 base::AsWeakPtr(application_media_info_manager); 66 application_media_info_manager_->SetRendererBlock(blocked_); 67 } 68 69 } // namespace shell 70 } // namespace chromecast 71