| Index: chrome/browser/media/router/mojo/media_route_controller_unittest.cc
|
| diff --git a/chrome/browser/media/router/mojo/media_route_controller_unittest.cc b/chrome/browser/media/router/mojo/media_route_controller_unittest.cc
|
| index 17487a583f9e0f3e1acc5484b33d4bd65d6aa705..dcfc7481db931b01c91c83b829ab0056cd518d19 100644
|
| --- a/chrome/browser/media/router/mojo/media_route_controller_unittest.cc
|
| +++ b/chrome/browser/media/router/mojo/media_route_controller_unittest.cc
|
| @@ -8,31 +8,21 @@
|
| #include <utility>
|
|
|
| #include "base/run_loop.h"
|
| +#include "chrome/browser/media/router/mock_media_router.h"
|
| #include "chrome/browser/media/router/mojo/media_router_mojo_test.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| +using ::testing::Mock;
|
| using ::testing::StrictMock;
|
|
|
| namespace media_router {
|
|
|
| -class MockMediaController : public mojom::MediaController {
|
| - public:
|
| - MOCK_METHOD0(Play, void());
|
| - MOCK_METHOD0(Pause, void());
|
| - MOCK_METHOD1(SetMute, void(bool mute));
|
| - MOCK_METHOD1(SetVolume, void(float volume));
|
| - MOCK_METHOD1(Seek, void(base::TimeDelta time));
|
| -};
|
| +namespace {
|
|
|
| -class MockMediaRouteControllerObserver : public MediaRouteController::Observer {
|
| - public:
|
| - MockMediaRouteControllerObserver(
|
| - scoped_refptr<MediaRouteController> controller)
|
| - : MediaRouteController::Observer(controller) {}
|
| +constexpr char kRouteId[] = "routeId";
|
|
|
| - MOCK_METHOD1(OnMediaStatusUpdated, void(const MediaStatus& status));
|
| -};
|
| +} // namespace
|
|
|
| class MediaRouteControllerTest : public ::testing::Test {
|
| public:
|
| @@ -43,12 +33,11 @@ class MediaRouteControllerTest : public ::testing::Test {
|
| mojom::MediaControllerPtr media_controller_ptr;
|
| mojom::MediaControllerRequest media_controller_request =
|
| mojo::MakeRequest(&media_controller_ptr);
|
| - media_controller_binding_ =
|
| - base::MakeUnique<mojo::Binding<mojom::MediaController>>(
|
| - &mock_media_controller_, std::move(media_controller_request));
|
| + mock_media_controller_.Bind(std::move(media_controller_request));
|
|
|
| observer_ = base::MakeUnique<MockMediaRouteControllerObserver>(
|
| - new MediaRouteController("routeId", std::move(media_controller_ptr)));
|
| + base::MakeShared<MediaRouteController>(
|
| + kRouteId, std::move(media_controller_ptr), &router_));
|
| }
|
|
|
| scoped_refptr<MediaRouteController> GetController() const {
|
| @@ -63,9 +52,8 @@ class MediaRouteControllerTest : public ::testing::Test {
|
| GetController());
|
| }
|
|
|
| + MockMediaRouter router_;
|
| MockMediaController mock_media_controller_;
|
| - std::unique_ptr<mojo::Binding<mojom::MediaController>>
|
| - media_controller_binding_;
|
| std::unique_ptr<MockMediaRouteControllerObserver> observer_;
|
|
|
| content::TestBrowserThreadBundle test_thread_bundle_;
|
| @@ -97,18 +85,52 @@ TEST_F(MediaRouteControllerTest, NotifyMediaRouteControllerObservers) {
|
| MediaStatus status;
|
| status.title = "test media status";
|
|
|
| + // Get a mojo pointer for |controller_|, so that we can notify it of status
|
| + // updates via mojo.
|
| + mojom::MediaStatusObserverPtr mojo_observer =
|
| + GetController()->BindObserverPtr();
|
| +
|
| EXPECT_CALL(*observer1, OnMediaStatusUpdated(status));
|
| EXPECT_CALL(*observer2, OnMediaStatusUpdated(status));
|
| - // TODO(takumif): Use a mojom::MediaStatusObserverPtr bound to the controller.
|
| - GetController()->OnMediaStatusUpdated(status);
|
| + mojo_observer->OnMediaStatusUpdated(status);
|
| + base::RunLoop().RunUntilIdle();
|
|
|
| observer1.reset();
|
| auto observer3 = CreateObserver();
|
|
|
| EXPECT_CALL(*observer2, OnMediaStatusUpdated(status));
|
| EXPECT_CALL(*observer3, OnMediaStatusUpdated(status));
|
| - // TODO(takumif): Use a mojom::MediaStatusObserverPtr bound to the controller.
|
| - GetController()->OnMediaStatusUpdated(status);
|
| + mojo_observer->OnMediaStatusUpdated(status);
|
| + base::RunLoop().RunUntilIdle();
|
| +}
|
| +
|
| +TEST_F(MediaRouteControllerTest, DestroyControllerOnDisconnect) {
|
| + // DetachRouteController() should be called when the connection to
|
| + // |mock_media_controller_| is invalidated.
|
| + EXPECT_CALL(router_, DetachRouteController(kRouteId, GetController().get()))
|
| + .Times(1);
|
| + mock_media_controller_.CloseBinding();
|
| +
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_TRUE(Mock::VerifyAndClearExpectations(&router_));
|
| +}
|
| +
|
| +TEST_F(MediaRouteControllerTest, DestroyControllerOnNoObservers) {
|
| + auto observer1 = CreateObserver();
|
| + auto observer2 = CreateObserver();
|
| + // Get a pointer to the controller to use in EXPECT_CALL().
|
| + MediaRouteController* controller = GetController().get();
|
| + // Get rid of |observer_| and its reference to the controller.
|
| + observer_.reset();
|
| +
|
| + EXPECT_CALL(router_, DetachRouteController(kRouteId, controller)).Times(0);
|
| + observer1.reset();
|
| +
|
| + // DetachRouteController() should be called when the controller no longer
|
| + // has any observers.
|
| + EXPECT_CALL(router_, DetachRouteController(kRouteId, controller)).Times(1);
|
| + observer2.reset();
|
| + EXPECT_TRUE(Mock::VerifyAndClearExpectations(&router_));
|
| }
|
|
|
| } // namespace media_router
|
|
|