Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1086)

Unified Diff: chrome/browser/media/router/mojo/media_route_controller_unittest.cc

Issue 2728543009: [Media Router] Custom Controls 2 - add MediaRouter::GetRouteController() (Closed)
Patch Set: Combine CreateMRController and SetMRStatusObserver Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « chrome/browser/media/router/mojo/media_route_controller.cc ('k') | chrome/browser/media/router/mojo/media_router.mojom » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698