[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