// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromecast/browser/cast_renderer_block_data.h"
#include "base/logging.h"
#include "chromecast/browser/application_media_info_manager.h"
#include "chromecast/browser/cast_session_id_map.h"
#include "content/public/browser/web_contents.h"
namespace chromecast {
namespace shell {
namespace {
const char kUserDataKey[] = "chromecast.shell.RenderBlockUserData.key";
CastRendererBlockData* GetOrCreateCastRendererBlockData(
content::WebContents* web_contents) {
CastRendererBlockData* data = static_cast<CastRendererBlockData*>(
web_contents->GetUserData(kUserDataKey));
if (!data) {
auto cast_renderer_block_data = std::make_unique<CastRendererBlockData>();
data = cast_renderer_block_data.get();
web_contents->SetUserData(kUserDataKey,
std::move(cast_renderer_block_data));
}
return data;
}
} // namespace
// static
void CastRendererBlockData::SetRendererBlockForWebContents(
content::WebContents* web_contents,
bool blocked) {
DCHECK(web_contents);
CastRendererBlockData* data = GetOrCreateCastRendererBlockData(web_contents);
data->SetBlocked(blocked);
}
// static
void CastRendererBlockData::SetApplicationMediaInfoManagerForWebContents(
content::WebContents* web_contents,
base::WeakPtr<media::ApplicationMediaInfoManager>
application_media_info_manager) {
DCHECK(web_contents);
CastRendererBlockData* data = GetOrCreateCastRendererBlockData(web_contents);
data->SetApplicationMediaInfoManager(application_media_info_manager);
}
CastRendererBlockData::CastRendererBlockData() : blocked_(false) {}
CastRendererBlockData::~CastRendererBlockData() = default;
void CastRendererBlockData::SetBlocked(bool blocked) {
LOG(INFO) << "Setting blocked to: " << blocked << " from " << blocked_;
blocked_ = blocked;
if (application_media_info_manager_) {
application_media_info_manager_->SetRendererBlock(blocked);
}
}
void CastRendererBlockData::SetApplicationMediaInfoManager(
base::WeakPtr<media::ApplicationMediaInfoManager>
application_media_info_manager) {
DCHECK(application_media_info_manager);
application_media_info_manager_ = application_media_info_manager;
application_media_info_manager_->SetRendererBlock(blocked_);
}
} // namespace shell
} // namespace chromecast