| Index: chrome/browser/media/router/offscreen_presentation_manager_unittest.cc
|
| diff --git a/chrome/browser/media/router/offscreen_presentation_manager_unittest.cc b/chrome/browser/media/router/offscreen_presentation_manager_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f64a215d69c387d0ed80f2e7c0226a106df2f18f
|
| --- /dev/null
|
| +++ b/chrome/browser/media/router/offscreen_presentation_manager_unittest.cc
|
| @@ -0,0 +1,291 @@
|
| +// 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 <vector>
|
| +
|
| +#include "base/bind.h"
|
| +#include "chrome/browser/media/router/offscreen_presentation_manager.h"
|
| +#include "chrome/browser/media/router/test_helper.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "url/gurl.h"
|
| +
|
| +using testing::_;
|
| +
|
| +namespace media_router {
|
| +
|
| +namespace {
|
| +const char kPresentationId[] = "presentationId";
|
| +const char kPresentationId2[] = "presentationId2";
|
| +const char kPresentationUrl[] = "presentationUrl";
|
| +} // namespace
|
| +
|
| +class MockReceiverConnectionAvailableCallback {
|
| + public:
|
| + void OnReceiverConnectionAvailable(
|
| + const content::PresentationSessionInfo& session_info,
|
| + content::PresentationConnectionPtr&& receiver_callback) {
|
| + OnReceiverConnectionAvailableRaw(session_info, receiver_callback.get());
|
| + }
|
| +
|
| + MOCK_METHOD2(OnReceiverConnectionAvailableRaw,
|
| + void(const content::PresentationSessionInfo&,
|
| + blink::mojom::PresentationConnection*));
|
| +};
|
| +
|
| +class OffscreenPresentationManagerTest : public ::testing::Test {
|
| + public:
|
| + OffscreenPresentationManager* manager() { return &manager_; }
|
| +
|
| + void VerifyPresentationsSize(size_t expected) {
|
| + EXPECT_EQ(expected, manager_.offscreen_presentations_.size());
|
| + }
|
| +
|
| + void VerifyControllerSize(size_t expected,
|
| + const std::string& presentationId) {
|
| + EXPECT_TRUE(
|
| + base::ContainsKey(manager_.offscreen_presentations_, presentationId));
|
| + EXPECT_EQ(expected, manager_.offscreen_presentations_[presentationId]
|
| + ->pending_controllers_.size());
|
| + }
|
| +
|
| + void RegisterController(const std::string& presentation_id,
|
| + content::PresentationConnectionPtr controller) {
|
| + manager()->RegisterOffscreenPresentationController(
|
| + presentation_id, GURL(kPresentationUrl), RenderFrameHostId(1, 1),
|
| + std::move(controller));
|
| + }
|
| +
|
| + void RegisterController(const RenderFrameHostId& render_frame_id,
|
| + content::PresentationConnectionPtr controller) {
|
| + manager()->RegisterOffscreenPresentationController(
|
| + kPresentationId, GURL(kPresentationUrl), render_frame_id,
|
| + std::move(controller));
|
| + }
|
| +
|
| + void RegisterController(content::PresentationConnectionPtr controller) {
|
| + manager()->RegisterOffscreenPresentationController(
|
| + kPresentationId, GURL(kPresentationUrl), RenderFrameHostId(1, 1),
|
| + std::move(controller));
|
| + }
|
| +
|
| + void RegisterReceiver(
|
| + MockReceiverConnectionAvailableCallback& receiver_callback) {
|
| + RegisterReceiver(kPresentationId, receiver_callback);
|
| + }
|
| +
|
| + void RegisterReceiver(
|
| + const std::string& presentation_id,
|
| + MockReceiverConnectionAvailableCallback& receiver_callback) {
|
| + manager()->OnOffscreenPresentationReceiverCreated(
|
| + presentation_id, GURL(kPresentationUrl),
|
| + base::Bind(&MockReceiverConnectionAvailableCallback::
|
| + OnReceiverConnectionAvailable,
|
| + base::Unretained(&receiver_callback)));
|
| + }
|
| +
|
| + void UnregisterController(const RenderFrameHostId& render_frame_id) {
|
| + manager()->UnregisterOffscreenPresentationController(kPresentationId,
|
| + render_frame_id);
|
| + }
|
| +
|
| + void UnregisterController() {
|
| + manager()->UnregisterOffscreenPresentationController(
|
| + kPresentationId, RenderFrameHostId(1, 1));
|
| + }
|
| +
|
| + void UnregisterReceiver() {
|
| + manager()->OnOffscreenPresentationReceiverTerminated(kPresentationId);
|
| + }
|
| +
|
| + private:
|
| + OffscreenPresentationManager manager_;
|
| +};
|
| +
|
| +TEST_F(OffscreenPresentationManagerTest, RegisterUnregisterController) {
|
| + content::PresentationConnectionPtr controller;
|
| + RegisterController(std::move(controller));
|
| + VerifyPresentationsSize(1);
|
| + UnregisterController();
|
| + VerifyPresentationsSize(0);
|
| +}
|
| +
|
| +TEST_F(OffscreenPresentationManagerTest, RegisterUnregisterReceiver) {
|
| + MockReceiverConnectionAvailableCallback receiver_callback;
|
| + RegisterReceiver(receiver_callback);
|
| + VerifyPresentationsSize(1);
|
| + UnregisterReceiver();
|
| + VerifyPresentationsSize(0);
|
| +}
|
| +
|
| +TEST_F(OffscreenPresentationManagerTest, UnregisterNonexistentController) {
|
| + UnregisterController();
|
| + VerifyPresentationsSize(0);
|
| +}
|
| +
|
| +TEST_F(OffscreenPresentationManagerTest, UnregisterNonexistentReceiver) {
|
| + UnregisterReceiver();
|
| + VerifyPresentationsSize(0);
|
| +}
|
| +
|
| +TEST_F(OffscreenPresentationManagerTest,
|
| + RegisterMultipleControllersSamePresentation) {
|
| + content::PresentationConnectionPtr controller1;
|
| + RegisterController(RenderFrameHostId(1, 1), std::move(controller1));
|
| + content::PresentationConnectionPtr controller2;
|
| + RegisterController(RenderFrameHostId(1, 2), std::move(controller2));
|
| + VerifyPresentationsSize(1);
|
| +}
|
| +
|
| +TEST_F(OffscreenPresentationManagerTest,
|
| + RegisterMultipleControllersDifferentPresentations) {
|
| + content::PresentationConnectionPtr controller1;
|
| + RegisterController(kPresentationId, std::move(controller1));
|
| + content::PresentationConnectionPtr controller2;
|
| + RegisterController(kPresentationId2, std::move(controller2));
|
| + VerifyPresentationsSize(2);
|
| +}
|
| +
|
| +TEST_F(OffscreenPresentationManagerTest,
|
| + RegisterControllerThenReceiverInvokesCallback) {
|
| + content::PresentationConnectionPtr controller;
|
| + MockReceiverConnectionAvailableCallback receiver_callback;
|
| +
|
| + VerifyPresentationsSize(0);
|
| +
|
| + RegisterController(std::move(controller));
|
| + EXPECT_CALL(receiver_callback, OnReceiverConnectionAvailableRaw(_, _));
|
| + RegisterReceiver(receiver_callback);
|
| +}
|
| +
|
| +TEST_F(OffscreenPresentationManagerTest,
|
| + UnregisterReceiverFromConnectedPresentation) {
|
| + content::PresentationConnectionPtr controller;
|
| + MockReceiverConnectionAvailableCallback receiver_callback;
|
| +
|
| + VerifyPresentationsSize(0);
|
| +
|
| + RegisterController(std::move(controller));
|
| + EXPECT_CALL(receiver_callback, OnReceiverConnectionAvailableRaw(_, _));
|
| + RegisterReceiver(receiver_callback);
|
| + UnregisterReceiver();
|
| +
|
| + VerifyPresentationsSize(0);
|
| +}
|
| +
|
| +TEST_F(OffscreenPresentationManagerTest,
|
| + UnregisterControllerFromConnectedPresentation) {
|
| + content::PresentationConnectionPtr controller;
|
| + MockReceiverConnectionAvailableCallback receiver_callback;
|
| +
|
| + VerifyPresentationsSize(0);
|
| +
|
| + RegisterController(std::move(controller));
|
| + EXPECT_CALL(receiver_callback, OnReceiverConnectionAvailableRaw(_, _));
|
| + RegisterReceiver(receiver_callback);
|
| + UnregisterController();
|
| +
|
| + VerifyPresentationsSize(1);
|
| +}
|
| +
|
| +TEST_F(OffscreenPresentationManagerTest,
|
| + UnregisterReceiverThenControllerFromConnectedPresentation) {
|
| + content::PresentationConnectionPtr controller;
|
| + MockReceiverConnectionAvailableCallback receiver_callback;
|
| +
|
| + VerifyPresentationsSize(0);
|
| +
|
| + RegisterController(std::move(controller));
|
| + EXPECT_CALL(receiver_callback, OnReceiverConnectionAvailableRaw(_, _));
|
| + RegisterReceiver(receiver_callback);
|
| + UnregisterReceiver();
|
| + UnregisterController();
|
| +
|
| + VerifyPresentationsSize(0);
|
| +}
|
| +
|
| +TEST_F(OffscreenPresentationManagerTest,
|
| + UnregisterControllerThenReceiverFromConnectedPresentation) {
|
| + content::PresentationConnectionPtr controller;
|
| + MockReceiverConnectionAvailableCallback receiver_callback;
|
| +
|
| + VerifyPresentationsSize(0);
|
| +
|
| + RegisterController(std::move(controller));
|
| + EXPECT_CALL(receiver_callback, OnReceiverConnectionAvailableRaw(_, _));
|
| + RegisterReceiver(receiver_callback);
|
| + UnregisterController();
|
| + UnregisterReceiver();
|
| +
|
| + VerifyPresentationsSize(0);
|
| +}
|
| +
|
| +TEST_F(OffscreenPresentationManagerTest,
|
| + RegisterTwoControllersThenReceiverInvokesCallbackTwice) {
|
| + content::PresentationConnectionPtr controller1;
|
| + RegisterController(RenderFrameHostId(1, 1), std::move(controller1));
|
| + content::PresentationConnectionPtr controller2;
|
| + RegisterController(RenderFrameHostId(1, 2), std::move(controller2));
|
| +
|
| + MockReceiverConnectionAvailableCallback receiver_callback;
|
| + EXPECT_CALL(receiver_callback, OnReceiverConnectionAvailableRaw(_, _))
|
| + .Times(2);
|
| + RegisterReceiver(receiver_callback);
|
| +}
|
| +
|
| +TEST_F(OffscreenPresentationManagerTest,
|
| + RegisterControllerReceiverConontrollerInvokesCallbackTwice) {
|
| + content::PresentationConnectionPtr controller1;
|
| + RegisterController(RenderFrameHostId(1, 1), std::move(controller1));
|
| +
|
| + MockReceiverConnectionAvailableCallback receiver_callback;
|
| + EXPECT_CALL(receiver_callback, OnReceiverConnectionAvailableRaw(_, _))
|
| + .Times(2);
|
| + RegisterReceiver(receiver_callback);
|
| +
|
| + content::PresentationConnectionPtr controller2;
|
| + RegisterController(RenderFrameHostId(1, 2), std::move(controller2));
|
| +}
|
| +
|
| +TEST_F(OffscreenPresentationManagerTest,
|
| + UnregisterFirstControllerFromeConnectedPresentation) {
|
| + content::PresentationConnectionPtr controller1;
|
| + RegisterController(RenderFrameHostId(1, 1), std::move(controller1));
|
| + content::PresentationConnectionPtr controller2;
|
| + RegisterController(RenderFrameHostId(1, 2), std::move(controller2));
|
| +
|
| + MockReceiverConnectionAvailableCallback receiver_callback;
|
| + EXPECT_CALL(receiver_callback, OnReceiverConnectionAvailableRaw(_, _))
|
| + .Times(2);
|
| + RegisterReceiver(receiver_callback);
|
| + UnregisterController(RenderFrameHostId(1, 1));
|
| + UnregisterController(RenderFrameHostId(1, 1));
|
| +
|
| + VerifyPresentationsSize(1);
|
| +}
|
| +
|
| +TEST_F(OffscreenPresentationManagerTest, TwoPresentations) {
|
| + content::PresentationConnectionPtr controller1;
|
| + RegisterController(kPresentationId, std::move(controller1));
|
| +
|
| + MockReceiverConnectionAvailableCallback receiver_callback1;
|
| + EXPECT_CALL(receiver_callback1, OnReceiverConnectionAvailableRaw(_, _))
|
| + .Times(1);
|
| + RegisterReceiver(kPresentationId, receiver_callback1);
|
| +
|
| + content::PresentationConnectionPtr controller2;
|
| + RegisterController(kPresentationId2, std::move(controller2));
|
| +
|
| + MockReceiverConnectionAvailableCallback receiver_callback2;
|
| + EXPECT_CALL(receiver_callback2, OnReceiverConnectionAvailableRaw(_, _))
|
| + .Times(1);
|
| + RegisterReceiver(kPresentationId2, receiver_callback2);
|
| +
|
| + VerifyPresentationsSize(2);
|
| +
|
| + UnregisterReceiver();
|
| + VerifyPresentationsSize(1);
|
| +}
|
| +
|
| +} // namespace media_router
|
|
|