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

Unified Diff: chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc

Issue 2859953002: Reland [Media Router] Custom Controls 3 - add plumbing through MRUI and MRWebUIMessageHandler (Closed)
Patch Set: Fix test failures 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/ui/webui/media_router/media_router_webui_message_handler_unittest.cc
diff --git a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc
index 5d53704782b38890ba477a1b321f40148d9def74..5b346b2351065754bb091c1fab37a43eddcdc2e2 100644
--- a/chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc
+++ b/chrome/browser/ui/webui/media_router/media_router_webui_message_handler_unittest.cc
@@ -2,29 +2,88 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h"
#include "base/macros.h"
#include "base/strings/stringprintf.h"
+#include "chrome/browser/media/router/mock_media_router.h"
+#include "chrome/browser/media/router/mojo/media_router_mojo_test.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/webui/media_router/media_router_ui.h"
#include "chrome/browser/ui/webui/media_router/media_router_web_ui_test.h"
-#include "chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h"
#include "content/public/browser/browser_context.h"
#include "content/public/test/test_web_ui.h"
#include "extensions/common/constants.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
+using testing::_;
using testing::Return;
using testing::ReturnRef;
namespace media_router {
+namespace {
+
const char kProviderExtensionIdForTesting[] = "test_id";
const char kControllerPathForTesting[] = "test_path";
const char kUserEmailForTesting[] = "nobody@example.com";
const char kUserDomainForTesting[] = "example.com";
+bool GetBooleanFromDict(const base::DictionaryValue* dict,
+ const std::string& key) {
+ bool value = false;
+ EXPECT_TRUE(dict->GetBoolean(key, &value));
+ return value;
+}
+
+double GetDoubleFromDict(const base::DictionaryValue* dict,
+ const std::string& key) {
+ double value = 0;
+ EXPECT_TRUE(dict->GetDouble(key, &value));
+ return value;
+}
+
+int GetIntegerFromDict(const base::DictionaryValue* dict,
+ const std::string& key) {
+ int value = 0;
+ EXPECT_TRUE(dict->GetInteger(key, &value));
+ return value;
+}
+
+std::string GetStringFromDict(const base::DictionaryValue* dict,
+ const std::string& key) {
+ std::string value;
+ EXPECT_TRUE(dict->GetString(key, &value));
+ return value;
+}
+
+// Creates a local route for display.
+MediaRoute CreateRoute() {
+ MediaRoute::Id route_id("routeId123");
+ MediaSink::Id sink_id("sinkId123");
+ MediaSink sink(sink_id, "The sink", MediaSink::IconType::CAST);
+ std::string description("This is a route");
+ bool is_local = true;
+ bool is_for_display = true;
+ MediaRoute route(route_id, MediaSource("mediaSource"), sink_id, description,
+ is_local, kControllerPathForTesting, is_for_display);
+
+ return route;
+}
+
+MediaSinkWithCastModes CreateMediaSinkWithCastMode(const std::string& sink_id,
+ MediaCastMode cast_mode) {
+ std::string sink_name("The sink");
+ MediaSinkWithCastModes media_sink_with_cast_modes(
+ MediaSink(sink_id, sink_name, MediaSink::IconType::CAST));
+ media_sink_with_cast_modes.cast_modes.insert(cast_mode);
+
+ return media_sink_with_cast_modes;
+}
+
+} // namespace
+
class MockMediaRouterUI : public MediaRouterUI {
public:
explicit MockMediaRouterUI(content::WebUI* web_ui)
@@ -36,6 +95,15 @@ class MockMediaRouterUI : public MediaRouterUI {
MOCK_METHOD1(RecordCastModeSelection, void(MediaCastMode cast_mode));
MOCK_CONST_METHOD0(cast_modes, const std::set<MediaCastMode>&());
MOCK_CONST_METHOD0(GetRouteProviderExtensionId, const std::string&());
+ MOCK_METHOD1(OnMediaControllerUIAvailable,
+ void(const MediaRoute::Id& route_id));
+ MOCK_METHOD0(OnMediaControllerUIClosed, void());
+ MOCK_METHOD0(PlayRoute, void());
+ MOCK_METHOD0(PauseRoute, void());
+ MOCK_METHOD1(SeekRoute, void(base::TimeDelta time));
+ MOCK_METHOD1(SetRouteMute, void(bool mute));
+ MOCK_METHOD1(SetRouteVolume, void(float volume));
+ MOCK_CONST_METHOD0(GetMediaRouteController, const MediaRouteController*());
};
class TestMediaRouterWebUIMessageHandler
@@ -71,8 +139,8 @@ class TestMediaRouterWebUIMessageHandler
class MediaRouterWebUIMessageHandlerTest : public MediaRouterWebUITest {
public:
MediaRouterWebUIMessageHandlerTest()
- : web_ui_(new content::TestWebUI()),
- provider_extension_id_(kProviderExtensionIdForTesting) {}
+ : web_ui_(base::MakeUnique<content::TestWebUI>()),
+ provider_extension_id_(kProviderExtensionIdForTesting) {}
~MediaRouterWebUIMessageHandlerTest() override {}
// BrowserWithTestWindowTest:
@@ -81,9 +149,9 @@ class MediaRouterWebUIMessageHandlerTest : public MediaRouterWebUITest {
chrome::NewTab(browser());
web_ui_->set_web_contents(
browser()->tab_strip_model()->GetActiveWebContents());
- mock_media_router_ui_.reset(new MockMediaRouterUI(web_ui_.get()));
- handler_.reset(
- new TestMediaRouterWebUIMessageHandler(mock_media_router_ui_.get()));
+ mock_media_router_ui_ = base::MakeUnique<MockMediaRouterUI>(web_ui_.get());
+ handler_ = base::MakeUnique<TestMediaRouterWebUIMessageHandler>(
+ mock_media_router_ui_.get());
handler_->SetWebUIForTest(web_ui_.get());
}
@@ -98,6 +166,45 @@ class MediaRouterWebUIMessageHandlerTest : public MediaRouterWebUITest {
return provider_extension_id_;
}
+ // Gets the call data for the function call made to |web_ui_|. There needs
+ // to be one call made, and its function name must be |function_name|.
+ const content::TestWebUI::CallData& GetCallData(
+ const std::string& function_name) {
+ EXPECT_EQ(1u, web_ui_->call_data().size());
+ const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
+ EXPECT_EQ(function_name, call_data.function_name());
+
+ return call_data;
+ }
+
+ // Gets the dictionary passed into a call to the |web_ui_| as the argument.
+ // There needs to be one call made, and its function name must be
+ // |function_name|.
+ const base::DictionaryValue* ExtractDictFromCallArg(
+ const std::string& function_name) {
+ const content::TestWebUI::CallData& call_data = GetCallData(function_name);
+ const base::Value* arg1 = call_data.arg1();
+ const base::DictionaryValue* dict_value = nullptr;
+ CHECK(arg1->GetAsDictionary(&dict_value));
+
+ return dict_value;
+ }
+
+ // Gets the first element of the list passed in as the argument to a call to
+ // the |web_ui_| as a dictionary. There needs to be one call made, and its
+ // function name must be |function_name|.
+ const base::DictionaryValue* ExtractDictFromListFromCallArg(
+ const std::string& function_name) {
+ const content::TestWebUI::CallData& call_data = GetCallData(function_name);
+ const base::Value* arg1 = call_data.arg1();
+ const base::ListValue* list_value = nullptr;
+ CHECK(arg1->GetAsList(&list_value));
+ const base::DictionaryValue* dict_value = nullptr;
+ CHECK(list_value->GetDictionary(0, &dict_value));
+
+ return dict_value;
+ }
+
protected:
std::unique_ptr<content::TestWebUI> web_ui_;
std::unique_ptr<MockMediaRouterUI> mock_media_router_ui_;
@@ -107,173 +214,86 @@ class MediaRouterWebUIMessageHandlerTest : public MediaRouterWebUITest {
TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinks) {
MediaSink::Id sink_id("sinkId123");
- std::string sink_name("The sink");
+ MediaSinkWithCastModes media_sink_with_cast_modes =
+ CreateMediaSinkWithCastMode(sink_id, MediaCastMode::TAB_MIRROR);
- std::vector<MediaSinkWithCastModes> media_sink_with_cast_modes_list;
- MediaSinkWithCastModes media_sink_with_cast_modes(
- MediaSink(sink_id, sink_name, MediaSink::IconType::CAST));
- media_sink_with_cast_modes.cast_modes.insert(MediaCastMode::TAB_MIRROR);
- media_sink_with_cast_modes_list.push_back(media_sink_with_cast_modes);
-
- handler_->UpdateSinks(media_sink_with_cast_modes_list);
- EXPECT_EQ(1u, web_ui_->call_data().size());
- const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
- EXPECT_EQ("media_router.ui.setSinkListAndIdentity",
- call_data.function_name());
- const base::Value* arg1 = call_data.arg1();
- const base::DictionaryValue* sinks_with_identity_value = nullptr;
- ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value));
+ handler_->UpdateSinks({media_sink_with_cast_modes});
+ const base::DictionaryValue* sinks_with_identity_value =
+ ExtractDictFromCallArg("media_router.ui.setSinkListAndIdentity");
// Email is not displayed if there is no sinks with domain.
- bool show_email = false;
- bool actual_show_email = false;
- EXPECT_TRUE(
- sinks_with_identity_value->GetBoolean("showEmail", &actual_show_email));
- EXPECT_EQ(show_email, actual_show_email);
+ EXPECT_FALSE(GetBooleanFromDict(sinks_with_identity_value, "showEmail"));
// Domain is not displayed if there is no sinks with domain.
- bool show_domain = false;
- bool actual_show_domain = false;
- EXPECT_TRUE(
- sinks_with_identity_value->GetBoolean("showDomain", &actual_show_domain));
- EXPECT_EQ(show_domain, actual_show_domain);
+ EXPECT_FALSE(GetBooleanFromDict(sinks_with_identity_value, "showDomain"));
const base::ListValue* sinks_list_value = nullptr;
ASSERT_TRUE(sinks_with_identity_value->GetList("sinks", &sinks_list_value));
const base::DictionaryValue* sink_value = nullptr;
ASSERT_TRUE(sinks_list_value->GetDictionary(0, &sink_value));
- std::string value;
- EXPECT_TRUE(sink_value->GetString("id", &value));
- EXPECT_EQ(sink_id, value);
-
- EXPECT_TRUE(sink_value->GetString("name", &value));
- EXPECT_EQ(sink_name, value);
-
- int cast_mode_bits = -1;
- ASSERT_TRUE(sink_value->GetInteger("castModes", &cast_mode_bits));
- EXPECT_EQ(static_cast<int>(MediaCastMode::TAB_MIRROR), cast_mode_bits);
+ EXPECT_EQ(sink_id, GetStringFromDict(sink_value, "id"));
+ EXPECT_EQ(media_sink_with_cast_modes.sink.name(),
+ GetStringFromDict(sink_value, "name"));
+ EXPECT_EQ(static_cast<int>(MediaCastMode::TAB_MIRROR),
+ GetIntegerFromDict(sink_value, "castModes"));
}
TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithIdentity) {
- MediaSink::Id sink_id("sinkId123");
- std::string sink_name("The sink");
-
- std::vector<MediaSinkWithCastModes> media_sink_with_cast_modes_list;
- MediaSinkWithCastModes media_sink_with_cast_modes(
- MediaSink(sink_id, sink_name, MediaSink::IconType::CAST));
+ MediaSinkWithCastModes media_sink_with_cast_modes =
+ CreateMediaSinkWithCastMode("sinkId123", MediaCastMode::TAB_MIRROR);
media_sink_with_cast_modes.sink.set_domain(kUserDomainForTesting);
- media_sink_with_cast_modes.cast_modes.insert(MediaCastMode::TAB_MIRROR);
- media_sink_with_cast_modes_list.push_back(media_sink_with_cast_modes);
-
- handler_->UpdateSinks(media_sink_with_cast_modes_list);
- EXPECT_EQ(1u, web_ui_->call_data().size());
- const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
- EXPECT_EQ("media_router.ui.setSinkListAndIdentity",
- call_data.function_name());
- const base::Value* arg1 = call_data.arg1();
- const base::DictionaryValue* sinks_with_identity_value = nullptr;
- ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value));
- bool show_email = true;
- bool actual_show_email = false;
- EXPECT_TRUE(
- sinks_with_identity_value->GetBoolean("showEmail", &actual_show_email));
- EXPECT_EQ(show_email, actual_show_email);
+ handler_->UpdateSinks({media_sink_with_cast_modes});
+ const base::DictionaryValue* sinks_with_identity_value =
+ ExtractDictFromCallArg("media_router.ui.setSinkListAndIdentity");
+ EXPECT_TRUE(GetBooleanFromDict(sinks_with_identity_value, "showEmail"));
// Sink domain is not displayed if it matches user domain.
- bool show_domain = false;
- bool actual_show_domain = false;
- EXPECT_TRUE(
- sinks_with_identity_value->GetBoolean("showDomain", &actual_show_domain));
- EXPECT_EQ(show_domain, actual_show_domain);
-
- std::string value;
- EXPECT_TRUE(sinks_with_identity_value->GetString("userEmail", &value));
- EXPECT_EQ(kUserEmailForTesting, value);
+ EXPECT_FALSE(GetBooleanFromDict(sinks_with_identity_value, "showDomain"));
+ EXPECT_EQ(kUserEmailForTesting,
+ GetStringFromDict(sinks_with_identity_value, "userEmail"));
}
TEST_F(MediaRouterWebUIMessageHandlerTest,
UpdateSinksWithIdentityAndPseudoSink) {
- MediaSink::Id sink_id("pseudo:sinkId123");
- std::string sink_name("The sink");
-
- std::vector<MediaSinkWithCastModes> media_sink_with_cast_modes_list;
- MediaSinkWithCastModes media_sink_with_cast_modes(
- MediaSink(sink_id, sink_name, MediaSink::IconType::CAST));
+ MediaSinkWithCastModes media_sink_with_cast_modes =
+ CreateMediaSinkWithCastMode("pseudo:sinkId1", MediaCastMode::TAB_MIRROR);
media_sink_with_cast_modes.sink.set_domain(kUserDomainForTesting);
- media_sink_with_cast_modes.cast_modes.insert(MediaCastMode::TAB_MIRROR);
- media_sink_with_cast_modes_list.push_back(media_sink_with_cast_modes);
- handler_->UpdateSinks(media_sink_with_cast_modes_list);
- EXPECT_EQ(1u, web_ui_->call_data().size());
- const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
- EXPECT_EQ("media_router.ui.setSinkListAndIdentity",
- call_data.function_name());
- const base::Value* arg1 = call_data.arg1();
- const base::DictionaryValue* sinks_with_identity_value = nullptr;
- ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value));
-
- bool show_email = false;
- bool actual_show_email = true;
- EXPECT_TRUE(
- sinks_with_identity_value->GetBoolean("showEmail", &actual_show_email));
- EXPECT_EQ(show_email, actual_show_email);
+ handler_->UpdateSinks({media_sink_with_cast_modes});
+ const base::DictionaryValue* sinks_with_identity_value =
+ ExtractDictFromCallArg("media_router.ui.setSinkListAndIdentity");
+
+ EXPECT_FALSE(GetBooleanFromDict(sinks_with_identity_value, "showEmail"));
}
TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithIdentityAndDomain) {
- MediaSink::Id sink_id("sinkId123");
- std::string sink_name("The sink");
+ MediaSinkWithCastModes media_sink_with_cast_modes =
+ CreateMediaSinkWithCastMode("sinkId123", MediaCastMode::TAB_MIRROR);
std::string domain_name("google.com");
-
- std::vector<MediaSinkWithCastModes> media_sink_with_cast_modes_list;
- MediaSinkWithCastModes media_sink_with_cast_modes(
- MediaSink(sink_id, sink_name, MediaSink::IconType::CAST));
media_sink_with_cast_modes.sink.set_domain(domain_name);
- media_sink_with_cast_modes.cast_modes.insert(MediaCastMode::TAB_MIRROR);
- media_sink_with_cast_modes_list.push_back(media_sink_with_cast_modes);
- handler_->UpdateSinks(media_sink_with_cast_modes_list);
- EXPECT_EQ(1u, web_ui_->call_data().size());
- const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
- EXPECT_EQ("media_router.ui.setSinkListAndIdentity",
- call_data.function_name());
- const base::Value* arg1 = call_data.arg1();
- const base::DictionaryValue* sinks_with_identity_value = nullptr;
- ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value));
+ handler_->UpdateSinks({media_sink_with_cast_modes});
+ const base::DictionaryValue* sinks_with_identity_value =
+ ExtractDictFromCallArg("media_router.ui.setSinkListAndIdentity");
// Domain is displayed for sinks with domains that are not the user domain.
- bool show_domain = true;
- bool actual_show_domain = false;
- EXPECT_TRUE(
- sinks_with_identity_value->GetBoolean("showDomain", &actual_show_domain));
- EXPECT_EQ(show_domain, actual_show_domain);
+ EXPECT_TRUE(GetBooleanFromDict(sinks_with_identity_value, "showDomain"));
}
TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithNoDomain) {
- MediaSink::Id sink_id("sinkId123");
- std::string sink_name("The sink");
+ MediaSinkWithCastModes media_sink_with_cast_modes =
+ CreateMediaSinkWithCastMode("sinkId123", MediaCastMode::TAB_MIRROR);
std::string user_email("nobody@gmail.com");
std::string user_domain("NO_HOSTED_DOMAIN");
std::string domain_name("default");
-
- handler_->SetEmailAndDomain(user_email, user_domain);
-
- std::vector<MediaSinkWithCastModes> media_sink_with_cast_modes_list;
- MediaSinkWithCastModes media_sink_with_cast_modes(
- MediaSink(sink_id, sink_name, MediaSink::IconType::CAST));
media_sink_with_cast_modes.sink.set_domain(domain_name);
- media_sink_with_cast_modes.cast_modes.insert(MediaCastMode::TAB_MIRROR);
- media_sink_with_cast_modes_list.push_back(media_sink_with_cast_modes);
- handler_->UpdateSinks(media_sink_with_cast_modes_list);
- EXPECT_EQ(1u, web_ui_->call_data().size());
- const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
- EXPECT_EQ("media_router.ui.setSinkListAndIdentity",
- call_data.function_name());
- const base::Value* arg1 = call_data.arg1();
- const base::DictionaryValue* sinks_with_identity_value = nullptr;
- ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value));
+ handler_->SetEmailAndDomain(user_email, user_domain);
+ handler_->UpdateSinks({media_sink_with_cast_modes});
+ const base::DictionaryValue* sinks_with_identity_value =
+ ExtractDictFromCallArg("media_router.ui.setSinkListAndIdentity");
const base::ListValue* sinks_list_value = nullptr;
ASSERT_TRUE(sinks_with_identity_value->GetList("sinks", &sinks_list_value));
@@ -281,38 +301,21 @@ TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithNoDomain) {
ASSERT_TRUE(sinks_list_value->GetDictionary(0, &sink_value));
// Domain should not be shown if there were only default sink domains.
- bool show_domain = false;
- bool actual_show_domain = false;
- EXPECT_TRUE(
- sinks_with_identity_value->GetBoolean("showDomain", &actual_show_domain));
- EXPECT_EQ(show_domain, actual_show_domain);
+ EXPECT_FALSE(GetBooleanFromDict(sinks_with_identity_value, "showDomain"));
// Sink domain should be empty if user has no hosted domain.
- std::string value;
- EXPECT_TRUE(sink_value->GetString("domain", &value));
- EXPECT_EQ(std::string(), value);
+ EXPECT_EQ(std::string(), GetStringFromDict(sink_value, "domain"));
}
TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithDefaultDomain) {
- MediaSink::Id sink_id("sinkId123");
- std::string sink_name("The sink");
+ MediaSinkWithCastModes media_sink_with_cast_modes =
+ CreateMediaSinkWithCastMode("sinkId123", MediaCastMode::TAB_MIRROR);
std::string domain_name("default");
-
- std::vector<MediaSinkWithCastModes> media_sink_with_cast_modes_list;
- MediaSinkWithCastModes media_sink_with_cast_modes(
- MediaSink(sink_id, sink_name, MediaSink::IconType::CAST));
media_sink_with_cast_modes.sink.set_domain(domain_name);
- media_sink_with_cast_modes.cast_modes.insert(MediaCastMode::TAB_MIRROR);
- media_sink_with_cast_modes_list.push_back(media_sink_with_cast_modes);
- handler_->UpdateSinks(media_sink_with_cast_modes_list);
- EXPECT_EQ(1u, web_ui_->call_data().size());
- const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
- EXPECT_EQ("media_router.ui.setSinkListAndIdentity",
- call_data.function_name());
- const base::Value* arg1 = call_data.arg1();
- const base::DictionaryValue* sinks_with_identity_value = nullptr;
- ASSERT_TRUE(arg1->GetAsDictionary(&sinks_with_identity_value));
+ handler_->UpdateSinks({media_sink_with_cast_modes});
+ const base::DictionaryValue* sinks_with_identity_value =
+ ExtractDictFromCallArg("media_router.ui.setSinkListAndIdentity");
const base::ListValue* sinks_list_value = nullptr;
ASSERT_TRUE(sinks_with_identity_value->GetList("sinks", &sinks_list_value));
@@ -320,224 +323,157 @@ TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateSinksWithDefaultDomain) {
ASSERT_TRUE(sinks_list_value->GetDictionary(0, &sink_value));
// Domain should not be shown if there were only default sink domains.
- bool show_domain = false;
- bool actual_show_domain = false;
- EXPECT_TRUE(
- sinks_with_identity_value->GetBoolean("showDomain", &actual_show_domain));
- EXPECT_EQ(show_domain, actual_show_domain);
+ EXPECT_FALSE(GetBooleanFromDict(sinks_with_identity_value, "showDomain"));
// Sink domain should be updated from 'default' to user domain.
- std::string value;
- EXPECT_TRUE(sink_value->GetString("domain", &value));
- EXPECT_EQ(kUserDomainForTesting, value);
+ EXPECT_EQ(kUserDomainForTesting, GetStringFromDict(sink_value, "domain"));
}
TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateRoutes) {
- MediaRoute::Id route_id("routeId123");
- MediaSink::Id sink_id("sinkId123");
- MediaSink sink(sink_id, "The sink", MediaSink::IconType::CAST);
- MediaSource media_source("mediaSource");
- std::string description("This is a route");
- bool is_local = true;
- std::vector<MediaRoute> routes;
- routes.push_back(MediaRoute(route_id, media_source, sink_id, description,
- is_local, kControllerPathForTesting, true));
- std::vector<MediaRoute::Id> joinable_route_ids;
- joinable_route_ids.push_back(route_id);
+ const MediaRoute route = CreateRoute();
+ std::vector<MediaRoute::Id> joinable_route_ids = {route.media_route_id()};
std::unordered_map<MediaRoute::Id, MediaCastMode> current_cast_modes;
- current_cast_modes.insert(std::make_pair(route_id, MediaCastMode::DEFAULT));
+ current_cast_modes.insert(
+ std::make_pair(route.media_route_id(), MediaCastMode::DEFAULT));
EXPECT_CALL(*mock_media_router_ui_, GetRouteProviderExtensionId()).WillOnce(
ReturnRef(provider_extension_id()));
- handler_->UpdateRoutes(routes, joinable_route_ids, current_cast_modes);
- EXPECT_EQ(1u, web_ui_->call_data().size());
- const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
- EXPECT_EQ("media_router.ui.setRouteList", call_data.function_name());
- const base::Value* arg1 = call_data.arg1();
- const base::ListValue* routes_list_value = nullptr;
- ASSERT_TRUE(arg1->GetAsList(&routes_list_value));
- const base::DictionaryValue* route_value = nullptr;
- ASSERT_TRUE(routes_list_value->GetDictionary(0, &route_value));
-
- std::string value;
- EXPECT_TRUE(route_value->GetString("id", &value));
- EXPECT_EQ(route_id, value);
- EXPECT_TRUE(route_value->GetString("sinkId", &value));
- EXPECT_EQ(sink_id, value);
- EXPECT_TRUE(route_value->GetString("description", &value));
- EXPECT_EQ(description, value);
-
- bool actual_is_local = false;
- EXPECT_TRUE(route_value->GetBoolean("isLocal", &actual_is_local));
- EXPECT_EQ(is_local, actual_is_local);
- bool actual_can_join = false;
- EXPECT_TRUE(route_value->GetBoolean("canJoin", &actual_can_join));
- EXPECT_TRUE(actual_can_join);
- int actual_current_cast_mode = -1;
- EXPECT_TRUE(
- route_value->GetInteger("currentCastMode", &actual_current_cast_mode));
- EXPECT_EQ(MediaCastMode::DEFAULT, actual_current_cast_mode);
-
- std::string custom_controller_path;
- EXPECT_TRUE(route_value->GetString("customControllerPath",
- &custom_controller_path));
+ handler_->UpdateRoutes({route}, joinable_route_ids, current_cast_modes);
+ const base::DictionaryValue* route_value =
+ ExtractDictFromListFromCallArg("media_router.ui.setRouteList");
+
+ EXPECT_EQ(route.media_route_id(), GetStringFromDict(route_value, "id"));
+ EXPECT_EQ(route.media_sink_id(), GetStringFromDict(route_value, "sinkId"));
+ EXPECT_EQ(route.description(), GetStringFromDict(route_value, "description"));
+ EXPECT_EQ(route.is_local(), GetBooleanFromDict(route_value, "isLocal"));
+ EXPECT_TRUE(GetBooleanFromDict(route_value, "canJoin"));
+ EXPECT_EQ(MediaCastMode::DEFAULT,
+ GetIntegerFromDict(route_value, "currentCastMode"));
std::string expected_path = base::StringPrintf("%s://%s/%s",
extensions::kExtensionScheme,
kProviderExtensionIdForTesting,
kControllerPathForTesting);
- EXPECT_EQ(expected_path, custom_controller_path);
+ EXPECT_EQ(expected_path,
+ GetStringFromDict(route_value, "customControllerPath"));
}
TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateRoutesIncognito) {
handler_->set_incognito_for_test(true);
-
- MediaRoute::Id route_id("routeId123");
- MediaSink::Id sink_id("sinkId123");
- MediaSink sink(sink_id, "The sink", MediaSink::IconType::CAST);
- MediaSource media_source("mediaSource");
- std::string description("This is a route");
- bool is_local = true;
- std::vector<MediaRoute> routes;
- routes.push_back(MediaRoute(route_id, media_source, sink_id, description,
- is_local, kControllerPathForTesting, true));
+ const MediaRoute route = CreateRoute();
EXPECT_CALL(*mock_media_router_ui_, GetRouteProviderExtensionId())
.WillOnce(ReturnRef(provider_extension_id()));
- handler_->UpdateRoutes(routes, std::vector<MediaRoute::Id>(),
+ handler_->UpdateRoutes({route}, std::vector<MediaRoute::Id>(),
std::unordered_map<MediaRoute::Id, MediaCastMode>());
- EXPECT_EQ(1u, web_ui_->call_data().size());
- const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
- EXPECT_EQ("media_router.ui.setRouteList", call_data.function_name());
- const base::Value* arg1 = call_data.arg1();
- const base::ListValue* routes_list_value = nullptr;
- ASSERT_TRUE(arg1->GetAsList(&routes_list_value));
- const base::DictionaryValue* route_value = nullptr;
- ASSERT_TRUE(routes_list_value->GetDictionary(0, &route_value));
+ const base::DictionaryValue* route_value =
+ ExtractDictFromListFromCallArg("media_router.ui.setRouteList");
+
+ EXPECT_EQ(route.media_route_id(), GetStringFromDict(route_value, "id"));
+ EXPECT_EQ(route.media_sink_id(), GetStringFromDict(route_value, "sinkId"));
+ EXPECT_EQ(route.description(), GetStringFromDict(route_value, "description"));
+ EXPECT_EQ(route.is_local(), GetBooleanFromDict(route_value, "isLocal"));
+ EXPECT_FALSE(GetBooleanFromDict(route_value, "canJoin"));
- std::string value;
- EXPECT_TRUE(route_value->GetString("id", &value));
- EXPECT_EQ(route_id, value);
- EXPECT_TRUE(route_value->GetString("sinkId", &value));
- EXPECT_EQ(sink_id, value);
- EXPECT_TRUE(route_value->GetString("description", &value));
- EXPECT_EQ(description, value);
-
- bool actual_is_local = false;
- EXPECT_TRUE(route_value->GetBoolean("isLocal", &actual_is_local));
- EXPECT_EQ(is_local, actual_is_local);
- bool actual_can_join = false;
- EXPECT_TRUE(route_value->GetBoolean("canJoin", &actual_can_join));
- EXPECT_FALSE(actual_can_join);
int actual_current_cast_mode = -1;
EXPECT_FALSE(
route_value->GetInteger("currentCastMode", &actual_current_cast_mode));
-
std::string custom_controller_path;
EXPECT_FALSE(
route_value->GetString("customControllerPath", &custom_controller_path));
}
+TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateMediaRouteStatus) {
+ MediaStatus status;
+ status.title = "test title";
+ status.description = "test description";
+ status.can_play_pause = true;
+ status.can_set_volume = true;
+ status.is_paused = true;
+ status.duration = base::TimeDelta::FromSeconds(90);
+ status.current_time = base::TimeDelta::FromSeconds(80);
+ status.volume = 0.9;
+
+ handler_->UpdateMediaRouteStatus(status);
+ const base::DictionaryValue* status_value =
+ ExtractDictFromCallArg("media_router.ui.updateRouteStatus");
+
+ EXPECT_EQ(status.title, GetStringFromDict(status_value, "title"));
+ EXPECT_EQ(status.description, GetStringFromDict(status_value, "description"));
+ EXPECT_EQ(status.can_play_pause,
+ GetBooleanFromDict(status_value, "canPlayPause"));
+ EXPECT_EQ(status.can_mute, GetBooleanFromDict(status_value, "canMute"));
+ EXPECT_EQ(status.can_set_volume,
+ GetBooleanFromDict(status_value, "canSetVolume"));
+ EXPECT_EQ(status.can_seek, GetBooleanFromDict(status_value, "canSeek"));
+ EXPECT_EQ(status.is_paused, GetBooleanFromDict(status_value, "isPaused"));
+ EXPECT_EQ(status.is_muted, GetBooleanFromDict(status_value, "isMuted"));
+ EXPECT_EQ(status.duration.InSeconds(),
+ GetIntegerFromDict(status_value, "duration"));
+ EXPECT_EQ(status.current_time.InSeconds(),
+ GetIntegerFromDict(status_value, "currentTime"));
+ EXPECT_EQ(status.volume, GetDoubleFromDict(status_value, "volume"));
+}
+
TEST_F(MediaRouterWebUIMessageHandlerTest, OnCreateRouteResponseReceived) {
- MediaRoute::Id route_id("routeId123");
- MediaSink::Id sink_id("sinkId123");
- MediaSink sink(sink_id, "The sink", MediaSink::IconType::CAST);
- std::string description("This is a route");
- bool is_local = true;
- bool is_for_display = true;
+ MediaRoute route = CreateRoute();
bool incognito = false;
- MediaRoute route(route_id, MediaSource("mediaSource"), sink_id, description,
- is_local, kControllerPathForTesting, is_for_display);
route.set_incognito(incognito);
EXPECT_CALL(*mock_media_router_ui_, GetRouteProviderExtensionId())
.WillOnce(ReturnRef(provider_extension_id()));
- handler_->OnCreateRouteResponseReceived(sink_id, &route);
- EXPECT_EQ(1u, web_ui_->call_data().size());
- const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
- EXPECT_EQ("media_router.ui.onCreateRouteResponseReceived",
- call_data.function_name());
- const base::Value* arg1 = call_data.arg1();
+ handler_->OnCreateRouteResponseReceived(route.media_sink_id(), &route);
+ const content::TestWebUI::CallData& call_data =
+ GetCallData("media_router.ui.onCreateRouteResponseReceived");
const base::Value* sink_id_value = nullptr;
- ASSERT_TRUE(arg1->GetAsString(&sink_id_value));
- EXPECT_EQ(sink_id, sink_id_value->GetString());
+ ASSERT_TRUE(call_data.arg1()->GetAsString(&sink_id_value));
+ EXPECT_EQ(route.media_sink_id(), sink_id_value->GetString());
- const base::Value* arg2 = call_data.arg2();
const base::DictionaryValue* route_value = nullptr;
- ASSERT_TRUE(arg2->GetAsDictionary(&route_value));
- std::string value;
- EXPECT_TRUE(route_value->GetString("id", &value));
- EXPECT_EQ(route_id, value);
- EXPECT_TRUE(route_value->GetString("sinkId", &value));
- EXPECT_EQ(sink_id, value);
- EXPECT_TRUE(route_value->GetString("description", &value));
- EXPECT_EQ(description, value);
-
- bool actual_is_local = false;
- EXPECT_TRUE(route_value->GetBoolean("isLocal", &actual_is_local));
- EXPECT_EQ(is_local, actual_is_local);
-
- std::string actual_path;
- EXPECT_TRUE(route_value->GetString("customControllerPath", &actual_path));
+ ASSERT_TRUE(call_data.arg2()->GetAsDictionary(&route_value));
+ EXPECT_EQ(route.media_route_id(), GetStringFromDict(route_value, "id"));
+ EXPECT_EQ(route.media_sink_id(), GetStringFromDict(route_value, "sinkId"));
+ EXPECT_EQ(route.description(), GetStringFromDict(route_value, "description"));
+ EXPECT_EQ(route.is_local(), GetBooleanFromDict(route_value, "isLocal"));
std::string expected_path = base::StringPrintf(
"%s://%s/%s", extensions::kExtensionScheme,
kProviderExtensionIdForTesting, kControllerPathForTesting);
- EXPECT_EQ(expected_path, actual_path);
+ EXPECT_EQ(expected_path,
+ GetStringFromDict(route_value, "customControllerPath"));
- const base::Value* arg3 = call_data.arg3();
bool route_for_display = false;
- ASSERT_TRUE(arg3->GetAsBoolean(&route_for_display));
- EXPECT_EQ(is_for_display, route_for_display);
+ ASSERT_TRUE(call_data.arg3()->GetAsBoolean(&route_for_display));
+ EXPECT_TRUE(route_for_display);
}
TEST_F(MediaRouterWebUIMessageHandlerTest,
OnCreateRouteResponseReceivedIncognito) {
handler_->set_incognito_for_test(true);
-
- MediaRoute::Id route_id("routeId123");
- MediaSink::Id sink_id("sinkId123");
- MediaSink sink(sink_id, "The sink", MediaSink::IconType::CAST);
- std::string description("This is a route");
- bool is_local = true;
- bool is_for_display = true;
+ MediaRoute route = CreateRoute();
bool incognito = true;
- MediaRoute route(route_id, MediaSource("mediaSource"), sink_id, description,
- is_local, kControllerPathForTesting, is_for_display);
route.set_incognito(incognito);
EXPECT_CALL(*mock_media_router_ui_, GetRouteProviderExtensionId()).WillOnce(
ReturnRef(provider_extension_id()));
- handler_->OnCreateRouteResponseReceived(sink_id, &route);
- EXPECT_EQ(1u, web_ui_->call_data().size());
- const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
- EXPECT_EQ("media_router.ui.onCreateRouteResponseReceived",
- call_data.function_name());
- const base::Value* arg1 = call_data.arg1();
+ handler_->OnCreateRouteResponseReceived(route.media_sink_id(), &route);
+ const content::TestWebUI::CallData& call_data =
+ GetCallData("media_router.ui.onCreateRouteResponseReceived");
const base::Value* sink_id_value = nullptr;
- ASSERT_TRUE(arg1->GetAsString(&sink_id_value));
- EXPECT_EQ(sink_id, sink_id_value->GetString());
+ ASSERT_TRUE(call_data.arg1()->GetAsString(&sink_id_value));
+ EXPECT_EQ(route.media_sink_id(), sink_id_value->GetString());
- const base::Value* arg2 = call_data.arg2();
const base::DictionaryValue* route_value = nullptr;
- ASSERT_TRUE(arg2->GetAsDictionary(&route_value));
- std::string value;
- EXPECT_TRUE(route_value->GetString("id", &value));
- EXPECT_EQ(route_id, value);
- EXPECT_TRUE(route_value->GetString("sinkId", &value));
- EXPECT_EQ(sink_id, value);
- EXPECT_TRUE(route_value->GetString("description", &value));
- EXPECT_EQ(description, value);
-
- bool actual_is_local = false;
- EXPECT_TRUE(route_value->GetBoolean("isLocal", &actual_is_local));
- EXPECT_EQ(is_local, actual_is_local);
+ ASSERT_TRUE(call_data.arg2()->GetAsDictionary(&route_value));
+ EXPECT_EQ(route.media_route_id(), GetStringFromDict(route_value, "id"));
+ EXPECT_EQ(route.media_sink_id(), GetStringFromDict(route_value, "sinkId"));
+ EXPECT_EQ(route.description(), GetStringFromDict(route_value, "description"));
+ EXPECT_EQ(route.is_local(), GetBooleanFromDict(route_value, "isLocal"));
std::string actual_path;
EXPECT_FALSE(route_value->GetString("customControllerPath", &actual_path));
- const base::Value* arg3 = call_data.arg3();
bool route_for_display = false;
- ASSERT_TRUE(arg3->GetAsBoolean(&route_for_display));
- EXPECT_EQ(is_for_display, route_for_display);
+ ASSERT_TRUE(call_data.arg3()->GetAsBoolean(&route_for_display));
+ EXPECT_TRUE(route_for_display);
}
TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateIssue) {
@@ -555,50 +491,36 @@ TEST_F(MediaRouterWebUIMessageHandlerTest, UpdateIssue) {
const Issue::Id& issue_id = issue.id();
handler_->UpdateIssue(issue);
- EXPECT_EQ(1u, web_ui_->call_data().size());
- const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
- EXPECT_EQ("media_router.ui.setIssue", call_data.function_name());
- const base::Value* arg1 = call_data.arg1();
- const base::DictionaryValue* issue_value = nullptr;
- ASSERT_TRUE(arg1->GetAsDictionary(&issue_value));
+ const base::DictionaryValue* issue_value =
+ ExtractDictFromCallArg("media_router.ui.setIssue");
// Initialized to invalid issue id.
- int actual_issue_id = -1;
- std::string value;
- EXPECT_TRUE(issue_value->GetInteger("id", &actual_issue_id));
- EXPECT_EQ(issue_id, actual_issue_id);
- EXPECT_TRUE(issue_value->GetString("title", &value));
- EXPECT_EQ(issue_title, value);
- EXPECT_TRUE(issue_value->GetString("message", &value));
- EXPECT_EQ(issue_message, value);
+ EXPECT_EQ(issue_id, GetIntegerFromDict(issue_value, "id"));
+ EXPECT_EQ(issue_title, GetStringFromDict(issue_value, "title"));
+ EXPECT_EQ(issue_message, GetStringFromDict(issue_value, "message"));
// Initialized to invalid action type.
- int action_type_num = -1;
- EXPECT_TRUE(issue_value->GetInteger("defaultActionType", &action_type_num));
- EXPECT_EQ(static_cast<int>(default_action), action_type_num);
- EXPECT_TRUE(issue_value->GetInteger("secondaryActionType", &action_type_num));
- EXPECT_EQ(static_cast<int>(secondary_actions[0]), action_type_num);
-
- EXPECT_TRUE(issue_value->GetString("routeId", &value));
- EXPECT_EQ(route_id, value);
+ EXPECT_EQ(static_cast<int>(default_action),
+ GetIntegerFromDict(issue_value, "defaultActionType"));
+ EXPECT_EQ(static_cast<int>(secondary_actions[0]),
+ GetIntegerFromDict(issue_value, "secondaryActionType"));
+ EXPECT_EQ(route_id, GetStringFromDict(issue_value, "routeId"));
// The issue is blocking since it is FATAL.
- bool actual_is_blocking = false;
- EXPECT_TRUE(issue_value->GetBoolean("isBlocking", &actual_is_blocking));
- EXPECT_TRUE(actual_is_blocking);
+ EXPECT_TRUE(GetBooleanFromDict(issue_value, "isBlocking"));
}
TEST_F(MediaRouterWebUIMessageHandlerTest, RecordCastModeSelection) {
base::ListValue args;
args.AppendInteger(MediaCastMode::DEFAULT);
- EXPECT_CALL(*mock_media_router_ui_.get(),
+ EXPECT_CALL(*mock_media_router_ui_,
RecordCastModeSelection(MediaCastMode::DEFAULT))
.Times(1);
handler_->OnReportSelectedCastMode(&args);
args.Clear();
args.AppendInteger(MediaCastMode::TAB_MIRROR);
- EXPECT_CALL(*mock_media_router_ui_.get(),
+ EXPECT_CALL(*mock_media_router_ui_,
RecordCastModeSelection(MediaCastMode::TAB_MIRROR))
.Times(1);
handler_->OnReportSelectedCastMode(&args);
@@ -620,9 +542,7 @@ TEST_F(MediaRouterWebUIMessageHandlerTest, RetrieveCastModeSelection) {
ASSERT_EQ("media_router.ui.setInitialData", call_data1.function_name());
const base::DictionaryValue* initial_data = nullptr;
ASSERT_TRUE(call_data1.arg1()->GetAsDictionary(&initial_data));
- bool use_tab_mirroring = false;
- EXPECT_TRUE(initial_data->GetBoolean("useTabMirroring", &use_tab_mirroring));
- EXPECT_TRUE(use_tab_mirroring);
+ EXPECT_TRUE(GetBooleanFromDict(initial_data, "useTabMirroring"));
EXPECT_CALL(*mock_media_router_ui_,
UserSelectedTabMirroringForCurrentOrigin())
@@ -631,8 +551,111 @@ TEST_F(MediaRouterWebUIMessageHandlerTest, RetrieveCastModeSelection) {
const content::TestWebUI::CallData& call_data2 = *web_ui_->call_data()[1];
ASSERT_EQ("media_router.ui.setInitialData", call_data2.function_name());
ASSERT_TRUE(call_data2.arg1()->GetAsDictionary(&initial_data));
- EXPECT_TRUE(initial_data->GetBoolean("useTabMirroring", &use_tab_mirroring));
- EXPECT_FALSE(use_tab_mirroring);
+ EXPECT_FALSE(GetBooleanFromDict(initial_data, "useTabMirroring"));
+}
+
+TEST_F(MediaRouterWebUIMessageHandlerTest, OnRouteDetailsOpenedAndClosed) {
+ const std::string route_id = "routeId123";
+ base::ListValue args_list;
+ base::DictionaryValue* args;
+ args_list.Append(base::MakeUnique<base::DictionaryValue>());
+ args_list.GetDictionary(0, &args);
+ args->SetString("routeId", route_id);
+
+ EXPECT_CALL(*mock_media_router_ui_, OnMediaControllerUIAvailable(route_id));
+ handler_->OnMediaControllerAvailable(&args_list);
+
+ args_list.Clear();
+ EXPECT_CALL(*mock_media_router_ui_, OnMediaControllerUIClosed());
+ handler_->OnMediaControllerClosed(&args_list);
+}
+
+TEST_F(MediaRouterWebUIMessageHandlerTest, OnMediaCommandsReceived) {
+ mojom::MediaControllerPtr mojo_media_controller;
+ mojo::MakeRequest(&mojo_media_controller);
+ MockMediaRouter media_router;
+ scoped_refptr<MockMediaRouteController> controller =
+ new MockMediaRouteController("routeId", std::move(mojo_media_controller),
+ &media_router);
+ EXPECT_CALL(*mock_media_router_ui_, GetMediaRouteController())
+ .WillRepeatedly(Return(controller.get()));
+ MediaStatus status;
+ status.duration = base::TimeDelta::FromSeconds(100);
+ handler_->UpdateMediaRouteStatus(status);
+
+ base::ListValue args_list;
+
+ EXPECT_CALL(*controller, Play());
+ handler_->OnPlayCurrentMedia(&args_list);
+
+ EXPECT_CALL(*controller, Pause());
+ handler_->OnPauseCurrentMedia(&args_list);
+
+ base::DictionaryValue* args;
+ args_list.Append(base::MakeUnique<base::DictionaryValue>());
+ args_list.GetDictionary(0, &args);
+
+ const int time = 50;
+ args->SetInteger("time", time);
+ EXPECT_CALL(*controller, Seek(base::TimeDelta::FromSeconds(time)));
+ handler_->OnSeekCurrentMedia(&args_list);
+
+ args->Clear();
+ args->SetBoolean("mute", true);
+ EXPECT_CALL(*controller, SetMute(true));
+ handler_->OnSetCurrentMediaMute(&args_list);
+
+ const double volume = 0.4;
+ args->Clear();
+ args->SetDouble("volume", volume);
+ EXPECT_CALL(*controller, SetVolume(volume));
+ handler_->OnSetCurrentMediaVolume(&args_list);
+}
+
+TEST_F(MediaRouterWebUIMessageHandlerTest, OnInvalidMediaCommandsReceived) {
+ mojom::MediaControllerPtr mojo_media_controller;
+ mojo::MakeRequest(&mojo_media_controller);
+ MockMediaRouter media_router;
+ scoped_refptr<MockMediaRouteController> controller =
+ new MockMediaRouteController("routeId", std::move(mojo_media_controller),
+ &media_router);
+ EXPECT_CALL(*mock_media_router_ui_, GetMediaRouteController())
+ .WillRepeatedly(Return(controller.get()));
+
+ MediaStatus status;
+ status.duration = base::TimeDelta::FromSeconds(100);
+ handler_->UpdateMediaRouteStatus(status);
+
+ EXPECT_CALL(*controller, Seek(_)).Times(0);
+ EXPECT_CALL(*controller, SetVolume(_)).Times(0);
+
+ base::ListValue args_list;
+
+ base::DictionaryValue* args;
+ args_list.Append(base::MakeUnique<base::DictionaryValue>());
+ args_list.GetDictionary(0, &args);
+
+ // Seek positions greater than the duration or negative should be ignored.
+ args->SetInteger("time", 101);
+ handler_->OnSeekCurrentMedia(&args_list);
+ args->SetInteger("time", -10);
+ handler_->OnSeekCurrentMedia(&args_list);
+
+ args->Clear();
+
+ // Volumes outside of the [0, 1] range should be ignored.
+ args->SetDouble("volume", 1.5);
+ handler_->OnSetCurrentMediaVolume(&args_list);
+ args->SetDouble("volume", 1.5);
+ handler_->OnSetCurrentMediaVolume(&args_list);
+}
+
+TEST_F(MediaRouterWebUIMessageHandlerTest, OnRouteControllerInvalidated) {
+ handler_->OnRouteControllerInvalidated();
+ EXPECT_EQ(1u, web_ui_->call_data().size());
+ const content::TestWebUI::CallData& call_data = *web_ui_->call_data()[0];
+ EXPECT_EQ("media_router.ui.onRouteControllerInvalidated",
+ call_data.function_name());
}
} // namespace media_router
« no previous file with comments | « chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc ('k') | chrome/common/chrome_features.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698