Index: chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc |
diff --git a/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc b/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc |
index 716d1a78b68e84e3f9f86f3f921f8a7fd22c0dd6..91589e402ead8a5b486a869edb5e61c634a23dc1 100644 |
--- a/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc |
+++ b/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc |
@@ -11,6 +11,7 @@ |
#include "base/strings/utf_string_conversions.h" |
#include "chrome/browser/media/router/create_presentation_connection_request.h" |
#include "chrome/browser/media/router/mock_media_router.h" |
+#include "chrome/browser/media/router/mojo/media_router_mojo_test.h" |
#include "chrome/browser/media/router/test_helper.h" |
#include "chrome/browser/sessions/session_tab_helper.h" |
#include "chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h" |
@@ -34,11 +35,22 @@ using content::WebContents; |
using testing::_; |
using testing::AnyNumber; |
using testing::Invoke; |
+using testing::Mock; |
using testing::Return; |
using testing::SaveArg; |
namespace media_router { |
+class MockMediaRouterWebUIMessageHandler |
+ : public MediaRouterWebUIMessageHandler { |
+ public: |
+ explicit MockMediaRouterWebUIMessageHandler(MediaRouterUI* media_router_ui) |
+ : MediaRouterWebUIMessageHandler(media_router_ui) {} |
+ ~MockMediaRouterWebUIMessageHandler() override {} |
+ |
+ MOCK_METHOD1(UpdateMediaRouteStatus, void(const MediaStatus& status)); |
+}; |
+ |
class PresentationRequestCallbacks { |
public: |
explicit PresentationRequestCallbacks( |
@@ -88,9 +100,9 @@ class MediaRouterUITest : public ChromeRenderViewHostTestHarness { |
web_ui_contents_.reset( |
WebContents::Create(WebContents::CreateParams(profile))); |
web_ui_.set_web_contents(web_ui_contents_.get()); |
- media_router_ui_.reset(new MediaRouterUI(&web_ui_)); |
- message_handler_.reset( |
- new MediaRouterWebUIMessageHandler(media_router_ui_.get())); |
+ media_router_ui_ = base::MakeUnique<MediaRouterUI>(&web_ui_); |
+ message_handler_ = base::MakeUnique<MockMediaRouterWebUIMessageHandler>( |
+ media_router_ui_.get()); |
EXPECT_CALL(mock_router_, RegisterMediaSinksObserver(_)) |
.WillRepeatedly(Invoke([this](MediaSinksObserver* observer) { |
this->media_sinks_observers_.push_back(observer); |
@@ -111,13 +123,34 @@ class MediaRouterUITest : public ChromeRenderViewHostTestHarness { |
return sink; |
} |
+ // Notifies MediaRouterUI that a route details view has been opened. Expects |
+ // MediaRouterUI to request a MediaRouteController, and gives it a mock |
+ // controller. Returns a reference to the mock controller. |
+ scoped_refptr<MockMediaRouteController> OpenUIDetailsView( |
+ const MediaRoute::Id& route_id) { |
+ MediaSource media_source("mediaSource"); |
+ MediaRoute route(route_id, media_source, "sinkId", "", true, "", true); |
+ mojom::MediaControllerPtr mojo_media_controller; |
+ mojo::MakeRequest(&mojo_media_controller); |
+ scoped_refptr<MockMediaRouteController> controller = |
+ new MockMediaRouteController(route_id, std::move(mojo_media_controller), |
+ &mock_router_); |
+ |
+ media_router_ui_->OnRoutesUpdated({route}, std::vector<MediaRoute::Id>()); |
+ EXPECT_CALL(mock_router_, GetRouteController(route_id)) |
+ .WillOnce(Return(controller)); |
+ media_router_ui_->OnMediaControllerUIAvailable(route_id); |
+ |
+ return controller; |
+ } |
+ |
protected: |
MockMediaRouter mock_router_; |
content::TestWebUI web_ui_; |
std::unique_ptr<WebContents> web_ui_contents_; |
std::unique_ptr<CreatePresentationConnectionRequest> create_session_request_; |
std::unique_ptr<MediaRouterUI> media_router_ui_; |
- std::unique_ptr<MediaRouterWebUIMessageHandler> message_handler_; |
+ std::unique_ptr<MockMediaRouterWebUIMessageHandler> message_handler_; |
std::vector<MediaSinksObserver*> media_sinks_observers_; |
}; |
@@ -600,4 +633,32 @@ TEST_F(MediaRouterUITest, RecordDesktopMirroringCastModeSelection) { |
EXPECT_TRUE(media_router_ui_->UserSelectedTabMirroringForCurrentOrigin()); |
} |
+TEST_F(MediaRouterUITest, OpenAndCloseUIDetailsView) { |
+ const std::string route_id = "routeId"; |
+ CreateMediaRouterUI(profile()); |
+ OpenUIDetailsView(route_id); |
+ |
+ // When the route details view is closed, the route controller observer should |
+ // be destroyed, also triggering the destruction of the controller. |
+ EXPECT_CALL(mock_router_, DetachRouteController(route_id, _)); |
+ media_router_ui_->OnMediaControllerUIClosed(); |
+ |
+ EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_router_)); |
+} |
+ |
+TEST_F(MediaRouterUITest, SendMediaStatusUpdate) { |
+ MediaStatus status; |
+ status.title = "test title"; |
+ CreateMediaRouterUI(profile()); |
+ scoped_refptr<MockMediaRouteController> controller = |
+ OpenUIDetailsView("routeId"); |
+ |
+ // The route controller observer held by MediaRouterUI should send the status |
+ // update to the message handler. |
+ EXPECT_CALL(*message_handler_, UpdateMediaRouteStatus(status)); |
+ controller->OnMediaStatusUpdated(status); |
+ |
+ EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_router_)); |
+} |
+ |
} // namespace media_router |