blob: a4eefc9d0b215fff966d0385180766953e6c83e2 [file] [log] [blame]
Andres Medinaa65ad1b2019-06-26 22:18:191// 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
Lei Zhang2b7bae72021-05-10 19:17:037#include "base/logging.h"
Andres Medinaa65ad1b2019-06-26 22:18:198#include "chromecast/browser/application_media_info_manager.h"
9#include "chromecast/browser/cast_session_id_map.h"
10#include "content/public/browser/web_contents.h"
11
12namespace chromecast {
13namespace shell {
14namespace {
15
16const char kUserDataKey[] = "chromecast.shell.RenderBlockUserData.key";
17
18CastRendererBlockData* GetOrCreateCastRendererBlockData(
19 content::WebContents* web_contents) {
20 CastRendererBlockData* data = static_cast<CastRendererBlockData*>(
21 web_contents->GetUserData(kUserDataKey));
22 if (!data) {
23 auto cast_renderer_block_data = std::make_unique<CastRendererBlockData>();
24 data = cast_renderer_block_data.get();
25 web_contents->SetUserData(kUserDataKey,
26 std::move(cast_renderer_block_data));
27 }
28 return data;
29}
30
31} // namespace
32
33// static
34void CastRendererBlockData::SetRendererBlockForWebContents(
35 content::WebContents* web_contents,
36 bool blocked) {
37 DCHECK(web_contents);
38 CastRendererBlockData* data = GetOrCreateCastRendererBlockData(web_contents);
39 data->SetBlocked(blocked);
40}
41
42// static
43void CastRendererBlockData::SetApplicationMediaInfoManagerForWebContents(
44 content::WebContents* web_contents,
45 media::ApplicationMediaInfoManager* application_media_info_manager) {
46 DCHECK(web_contents);
47 CastRendererBlockData* data = GetOrCreateCastRendererBlockData(web_contents);
48 data->SetApplicationMediaInfoManager(application_media_info_manager);
49}
50
51CastRendererBlockData::CastRendererBlockData() : blocked_(false) {}
52CastRendererBlockData::~CastRendererBlockData() = default;
53
54void CastRendererBlockData::SetBlocked(bool blocked) {
55 LOG(INFO) << "Setting blocked to: " << blocked << " from " << blocked_;
56 blocked_ = blocked;
57 if (application_media_info_manager_) {
58 application_media_info_manager_->SetRendererBlock(blocked);
59 }
60}
61
62void CastRendererBlockData::SetApplicationMediaInfoManager(
63 media::ApplicationMediaInfoManager* application_media_info_manager) {
64 DCHECK(application_media_info_manager);
65 application_media_info_manager_ =
66 base::AsWeakPtr(application_media_info_manager);
67 application_media_info_manager_->SetRendererBlock(blocked_);
68}
69
70} // namespace shell
71} // namespace chromecast