[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/application_media_info_manager_unittest.cc b/chromecast/browser/application_media_info_manager_unittest.cc
new file mode 100644
index 0000000..e673fcb
--- /dev/null
+++ b/chromecast/browser/application_media_info_manager_unittest.cc
@@ -0,0 +1,96 @@
+// Copyright 2016 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/application_media_info_manager.h"
+
+#include <memory>
+#include <utility>
+
+#include "base/bind.h"
+#include "content/public/test/test_content_client_initializer.h"
+#include "content/public/test/test_renderer_host.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace chromecast {
+namespace media {
+
+using ::testing::_;
+using ::testing::Invoke;
+
+namespace {
+
+const char kSessionId[] = "test-session-id";
+constexpr bool kMixedAudioEnabled = true;
+
+}  // namespace
+
+class ApplicationMediaInfoManagerTest
+    : public content::RenderViewHostTestHarness {
+ public:
+  ApplicationMediaInfoManagerTest() : started_(false) {}
+  ~ApplicationMediaInfoManagerTest() override {}
+
+  void SetUp() override {
+    initializer_ = std::make_unique<content::TestContentClientInitializer>();
+    content::RenderViewHostTestHarness::SetUp();
+    application_media_info_manager_ =
+        std::make_unique<ApplicationMediaInfoManager>(
+            main_rfh(), mojo::MakeRequest(&application_media_info_manager_ptr_),
+            kSessionId, kMixedAudioEnabled);
+  }
+
+  void OnCastApplicationMediaInfo(
+      ::media::mojom::CastApplicationMediaInfoPtr ptr) {
+    EXPECT_EQ(ptr->application_session_id, kSessionId);
+    EXPECT_EQ(ptr->mixer_audio_enabled, kMixedAudioEnabled);
+    started_ = true;
+  }
+
+  ::media::mojom::CastApplicationMediaInfoManagerPtr
+      application_media_info_manager_ptr_;
+  std::unique_ptr<content::TestContentClientInitializer> initializer_;
+  std::unique_ptr<ApplicationMediaInfoManager> application_media_info_manager_;
+  bool started_;
+};
+
+TEST_F(ApplicationMediaInfoManagerTest, NoBlock_GetMediaInfo) {
+  application_media_info_manager_ptr_->GetCastApplicationMediaInfo(
+      base::BindOnce(
+          &ApplicationMediaInfoManagerTest::OnCastApplicationMediaInfo,
+          base::Unretained(this)));
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(started_);
+}
+
+TEST_F(ApplicationMediaInfoManagerTest, Block_GetMediaInfo_Unblock) {
+  application_media_info_manager_->SetRendererBlock(true);
+  base::RunLoop().RunUntilIdle();
+  application_media_info_manager_ptr_->GetCastApplicationMediaInfo(
+      base::BindOnce(
+          &ApplicationMediaInfoManagerTest::OnCastApplicationMediaInfo,
+          base::Unretained(this)));
+  base::RunLoop().RunUntilIdle();
+  EXPECT_FALSE(started_);
+  application_media_info_manager_->SetRendererBlock(false);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(started_);
+}
+
+TEST_F(ApplicationMediaInfoManagerTest, Block_Unblock_GetMediaInfo) {
+  application_media_info_manager_->SetRendererBlock(true);
+  base::RunLoop().RunUntilIdle();
+  application_media_info_manager_->SetRendererBlock(false);
+  base::RunLoop().RunUntilIdle();
+  EXPECT_FALSE(started_);
+  application_media_info_manager_ptr_->GetCastApplicationMediaInfo(
+      base::BindOnce(
+          &ApplicationMediaInfoManagerTest::OnCastApplicationMediaInfo,
+          base::Unretained(this)));
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(started_);
+}
+
+}  // namespace media
+}  // namespace chromecast