diff options
author | imcheng <imcheng@chromium.org> | 2016-03-01 16:09:31 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-02 00:10:54 +0000 |
commit | 12ac33c211887abb76d8b8eb9c7c10c630357db6 (patch) | |
tree | 1a6e2896a3b285798f291d5f41b0a113008955f3 | |
parent | ed36c042c549047dffbb49789350721b26f6f3fa (diff) | |
download | chromium_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}
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) { |