summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorimcheng <imcheng@chromium.org>2016-03-01 16:09:31 -0800
committerCommit bot <commit-bot@chromium.org>2016-03-02 00:10:54 +0000
commit12ac33c211887abb76d8b8eb9c7c10c630357db6 (patch)
tree1a6e2896a3b285798f291d5f41b0a113008955f3
parented36c042c549047dffbb49789350721b26f6f3fa (diff)
downloadchromium_src-12ac33c211887abb76d8b8eb9c7c10c630357db6.zip
chromium_src-12ac33c211887abb76d8b8eb9c7c10c630357db6.tar.gz
chromium_src-12ac33c211887abb76d8b8eb9c7c10c630357db6.tar.bz2
[Media Router] Custom messages for route creation timeouts.
Each cast mode type now has a custom timeout and issue message. Also make the different messages more consistent with each other. takes over https://codereview.chromium.org/1509023002/ TODO: tests BUG=567368 Review URL: https://codereview.chromium.org/1736363002 Cr-Commit-Position: refs/heads/master@{#378618}
-rw-r--r--chrome/app/media_router_strings.grdp7
-rw-r--r--chrome/browser/media/router/test_helper.h4
-rw-r--r--chrome/browser/ui/webui/media_router/media_router_ui.cc48
-rw-r--r--chrome/browser/ui/webui/media_router/media_router_ui.h13
-rw-r--r--chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc53
5 files changed, 87 insertions, 38 deletions
diff --git a/chrome/app/media_router_strings.grdp b/chrome/app/media_router_strings.grdp
index 95cc37f..e506f08 100644
--- a/chrome/app/media_router_strings.grdp
+++ b/chrome/app/media_router_strings.grdp
@@ -87,10 +87,13 @@
Error
</message>
<message name="IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT" desc="Title of an issue to show when the user attempts to create a route and the Media Router times out while waiting for a route creation response.">
- <ph name="HOST_NAME">$1<ex>youtube.com</ex></ph> not responding. Unable to cast.
+ Unable to cast <ph name="HOST_NAME">$1<ex>youtube.com</ex></ph>.
+ </message>
+ <message name="IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT_FOR_DESKTOP" desc="Title of an issue to show when the user attempts to create a route to mirror the desktop and the Media Router times out while waiting for a route creation response.">
+ Unable to cast desktop. Check to see if you confirmed the prompt to start sharing your screen.
</message>
<message name="IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT_FOR_TAB" desc="Title of an issue to show when the user attempts to create a route to mirror a tab and the Media Router times out while waiting for a route creation response.">
- Tab not responding. Unable to cast.
+ Unable to cast tab.
</message>
<message name="IDS_MEDIA_ROUTER_ISSUE_PENDING_ROUTE" desc="Title of an issue to show when the user attempts to create more than one route at a time.">
Only one session can be created at a time.
diff --git a/chrome/browser/media/router/test_helper.h b/chrome/browser/media/router/test_helper.h
index c3369e1..6eb05a1 100644
--- a/chrome/browser/media/router/test_helper.h
+++ b/chrome/browser/media/router/test_helper.h
@@ -75,6 +75,10 @@ MATCHER_P(EqualsIssue, other, "") {
return true;
}
+MATCHER_P(IssueTitleEquals, title, "") {
+ return arg.title() == title;
+}
+
MATCHER_P(StateChageInfoEquals, other, "") {
return arg.state == other.state && arg.close_reason == other.close_reason &&
arg.message == other.message;
diff --git a/chrome/browser/ui/webui/media_router/media_router_ui.cc b/chrome/browser/ui/webui/media_router/media_router_ui.cc
index 0069f87..52f2ec2 100644
--- a/chrome/browser/ui/webui/media_router/media_router_ui.cc
+++ b/chrome/browser/ui/webui/media_router/media_router_ui.cc
@@ -389,7 +389,8 @@ bool MediaRouterUI::CreateOrConnectRoute(const MediaSink::Id& sink_id,
std::vector<MediaRouteResponseCallback> route_response_callbacks;
route_response_callbacks.push_back(base::Bind(
&MediaRouterUI::OnRouteResponseReceived, weak_factory_.GetWeakPtr(),
- current_route_request_id_, sink_id));
+ current_route_request_id_, sink_id, cast_mode,
+ base::UTF8ToUTF16(GetTruncatedPresentationRequestSourceName())));
if (for_default_source) {
if (create_session_request_) {
// |create_session_request_| will be nullptr after this call, as the
@@ -473,9 +474,12 @@ void MediaRouterUI::OnRoutesUpdated(
if (ui_initialized_) handler_->UpdateRoutes(routes_, joinable_route_ids_);
}
-void MediaRouterUI::OnRouteResponseReceived(int route_request_id,
- const MediaSink::Id& sink_id,
- const RouteRequestResult& result) {
+void MediaRouterUI::OnRouteResponseReceived(
+ int route_request_id,
+ const MediaSink::Id& sink_id,
+ MediaCastMode cast_mode,
+ const base::string16& presentation_request_source_name,
+ const RouteRequestResult& result) {
DVLOG(1) << "OnRouteResponseReceived";
// If we receive a new route that we aren't expecting, do nothing.
if (route_request_id != current_route_request_id_) return;
@@ -490,20 +494,32 @@ void MediaRouterUI::OnRouteResponseReceived(int route_request_id,
current_route_request_id_ = -1;
if (result.result_code() == RouteRequestResult::TIMED_OUT)
- SendIssueForRouteTimeout();
+ SendIssueForRouteTimeout(cast_mode, presentation_request_source_name);
}
-void MediaRouterUI::SendIssueForRouteTimeout() {
- base::string16 host =
- base::UTF8ToUTF16(GetTruncatedPresentationRequestSourceName());
-
- // TODO(apacible): Update error messages based on current cast mode
- // (e.g. desktop).
- std::string issue_title =
- host.empty() ? l10n_util::GetStringUTF8(
- IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT_FOR_TAB)
- : l10n_util::GetStringFUTF8(
- IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT, host);
+void MediaRouterUI::SendIssueForRouteTimeout(
+ MediaCastMode cast_mode,
+ const base::string16& presentation_request_source_name) {
+ std::string issue_title;
+ switch (cast_mode) {
+ case DEFAULT:
+ DLOG_IF(ERROR, presentation_request_source_name.empty())
+ << "Empty presentation request source name.";
+ issue_title =
+ l10n_util::GetStringFUTF8(IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT,
+ presentation_request_source_name);
+ break;
+ case TAB_MIRROR:
+ issue_title = l10n_util::GetStringUTF8(
+ IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT_FOR_TAB);
+ break;
+ case DESKTOP_MIRROR:
+ issue_title = l10n_util::GetStringUTF8(
+ IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT_FOR_DESKTOP);
+ break;
+ default:
+ NOTREACHED();
+ }
Issue issue(issue_title, std::string(),
IssueAction(IssueAction::TYPE_DISMISS),
diff --git a/chrome/browser/ui/webui/media_router/media_router_ui.h b/chrome/browser/ui/webui/media_router/media_router_ui.h
index 3daf9ea..478f12a 100644
--- a/chrome/browser/ui/webui/media_router/media_router_ui.h
+++ b/chrome/browser/ui/webui/media_router/media_router_ui.h
@@ -200,12 +200,17 @@ class MediaRouterUI : public ConstrainedWebDialogUI,
// Callback passed to MediaRouter to receive response to route creation
// requests.
- void OnRouteResponseReceived(int route_request_id,
- const MediaSink::Id& sink_id,
- const RouteRequestResult& result);
+ void OnRouteResponseReceived(
+ int route_request_id,
+ const MediaSink::Id& sink_id,
+ MediaCastMode cast_mode,
+ const base::string16& presentation_request_source_name,
+ const RouteRequestResult& result);
// Creates and sends an issue if route creation timed out.
- void SendIssueForRouteTimeout();
+ void SendIssueForRouteTimeout(
+ MediaCastMode cast_mode,
+ const base::string16& presentation_request_source_name);
// Initializes the dialog with mirroring sources derived from |initiator|.
void InitCommon(content::WebContents* initiator);
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 35fff88..6f0d1d2 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
@@ -3,11 +3,14 @@
// found in the LICENSE file.
#include "base/bind.h"
+#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/media/router/media_route.h"
#include "chrome/browser/media/router/mock_media_router.h"
#include "chrome/browser/media/router/route_request_result.h"
+#include "chrome/browser/media/router/test_helper.h"
#include "chrome/browser/ui/webui/media_router/media_router_ui.h"
#include "chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h"
+#include "chrome/grit/generated_resources.h"
#include "chrome/test/base/testing_profile.h"
#include "content/public/test/test_browser_thread_bundle.h"
#include "content/public/test/test_web_ui.h"
@@ -18,6 +21,7 @@
#include "extensions/common/value_builder.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/base/l10n/l10n_util.h"
using testing::_;
using testing::AnyNumber;
@@ -71,46 +75,63 @@ class MediaRouterUITest : public ::testing::Test {
scoped_ptr<MediaRouterWebUIMessageHandler> message_handler_;
};
-TEST_F(MediaRouterUITest, RouteRequestTimedOut) {
+TEST_F(MediaRouterUITest, RouteCreationTimeoutForTab) {
CreateMediaRouterUI(&profile_);
std::vector<MediaRouteResponseCallback> callbacks;
- EXPECT_CALL(mock_router_, CreateRoute(_, _, _, _, _, _, _))
+ EXPECT_CALL(
+ mock_router_,
+ CreateRoute(_, _, _, _, _, base::TimeDelta::FromSeconds(60), false))
.WillOnce(SaveArg<4>(&callbacks));
media_router_ui_->CreateRoute("sinkId", MediaCastMode::TAB_MIRROR);
- EXPECT_CALL(mock_router_, AddIssue(_));
+ std::string expected_title = l10n_util::GetStringUTF8(
+ IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT_FOR_TAB);
+ EXPECT_CALL(mock_router_, AddIssue(IssueTitleEquals(expected_title)));
scoped_ptr<RouteRequestResult> result =
RouteRequestResult::FromError("Timed out", RouteRequestResult::TIMED_OUT);
for (const auto& callback : callbacks)
callback.Run(*result);
}
-TEST_F(MediaRouterUITest, RouteCreationTimeoutForTab) {
- CreateMediaRouterUI(&profile_);
- EXPECT_CALL(
- mock_router_,
- CreateRoute(_, _, _, _, _, base::TimeDelta::FromSeconds(60), false));
- media_router_ui_->CreateRoute("sinkId", MediaCastMode::TAB_MIRROR);
-}
-
TEST_F(MediaRouterUITest, RouteCreationTimeoutForDesktop) {
CreateMediaRouterUI(&profile_);
+ std::vector<MediaRouteResponseCallback> callbacks;
EXPECT_CALL(
mock_router_,
- CreateRoute(_, _, _, _, _, base::TimeDelta::FromSeconds(120), false));
+ CreateRoute(_, _, _, _, _, base::TimeDelta::FromSeconds(120), false))
+ .WillOnce(SaveArg<4>(&callbacks));
media_router_ui_->CreateRoute("sinkId", MediaCastMode::DESKTOP_MIRROR);
+
+ std::string expected_title = l10n_util::GetStringUTF8(
+ IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT_FOR_DESKTOP);
+ EXPECT_CALL(mock_router_, AddIssue(IssueTitleEquals(expected_title)));
+ scoped_ptr<RouteRequestResult> result =
+ RouteRequestResult::FromError("Timed out", RouteRequestResult::TIMED_OUT);
+ for (const auto& callback : callbacks)
+ callback.Run(*result);
}
TEST_F(MediaRouterUITest, RouteCreationTimeoutForPresentation) {
CreateMediaRouterUI(&profile_);
- PresentationRequest presentation_request(
- RenderFrameHostId(0, 0), "https://fooUrl", GURL("https://frameUrl"));
+ PresentationRequest presentation_request(RenderFrameHostId(0, 0),
+ "https://presentationurl.fakeurl",
+ GURL("https://frameurl.fakeurl"));
media_router_ui_->OnDefaultPresentationChanged(presentation_request);
-
+ std::vector<MediaRouteResponseCallback> callbacks;
EXPECT_CALL(
mock_router_,
- CreateRoute(_, _, _, _, _, base::TimeDelta::FromSeconds(20), false));
+ CreateRoute(_, _, _, _, _, base::TimeDelta::FromSeconds(20), false))
+ .WillOnce(SaveArg<4>(&callbacks));
media_router_ui_->CreateRoute("sinkId", MediaCastMode::DEFAULT);
+
+ std::string expected_title =
+ l10n_util::GetStringFUTF8(IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT,
+ base::UTF8ToUTF16("frameurl.fakeurl"));
+ EXPECT_CALL(mock_router_, AddIssue(IssueTitleEquals(expected_title)));
+ scoped_ptr<RouteRequestResult> result =
+ RouteRequestResult::FromError("Timed out", RouteRequestResult::TIMED_OUT);
+ for (const auto& callback : callbacks)
+ callback.Run(*result);
}
TEST_F(MediaRouterUITest, RouteRequestFromIncognito) {