[chromecast] MediaBlock: Added cast renderer initialization block.
Allowed a new type of media block that blocks cast_renderer
initialization instead of webmediaplayer loading.
Test: Manual test blocking is happening at the renderer by inspecting
device logs
Bug: b/134961542
Change-Id: I97b0e59a6752c43d14b8e96327079aa8669b1c00
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1673829
Reviewed-by: Sean Topping <[email protected]>
Reviewed-by: Yuchen Liu <[email protected]>
Auto-Submit: Andres Medina <[email protected]>
Commit-Queue: Andres Medina <[email protected]>
Cr-Commit-Position: refs/heads/master@{#672687}
diff --git a/chromecast/browser/cast_renderer_block_data.cc b/chromecast/browser/cast_renderer_block_data.cc
new file mode 100644
index 0000000..62d77db
--- /dev/null
+++ b/chromecast/browser/cast_renderer_block_data.cc
@@ -0,0 +1,70 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// 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 "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,
+ 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(
+ media::ApplicationMediaInfoManager* application_media_info_manager) {
+ DCHECK(application_media_info_manager);
+ application_media_info_manager_ =
+ base::AsWeakPtr(application_media_info_manager);
+ application_media_info_manager_->SetRendererBlock(blocked_);
+}
+
+} // namespace shell
+} // namespace chromecast