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)17 CastRendererBlockData* 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)33 void 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)42 void 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()50 CastRendererBlockData::CastRendererBlockData() : blocked_(false) {}
51 CastRendererBlockData::~CastRendererBlockData() = default;
52 
SetBlocked(bool blocked)53 void 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)61 void 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