Chromium Code Reviews| Index: chrome/browser/ui/webui/media_router/media_router_ui.cc |
| 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 296124c1f59c59f22c0c1b7be8b843fb45a79392..dba41820c4bb2830aa9c7af1f3aedc940824d034 100644 |
| --- a/chrome/browser/ui/webui/media_router/media_router_ui.cc |
| +++ b/chrome/browser/ui/webui/media_router/media_router_ui.cc |
| @@ -7,6 +7,7 @@ |
| #include <string> |
| #include "base/strings/string_util.h" |
| +#include "base/strings/utf_string_conversions.h" |
| #include "chrome/browser/media/router/create_presentation_session_request.h" |
| #include "chrome/browser/media/router/issue.h" |
| #include "chrome/browser/media/router/issues_observer.h" |
| @@ -26,15 +27,21 @@ |
| #include "chrome/browser/ui/webui/media_router/media_router_resources_provider.h" |
| #include "chrome/browser/ui/webui/media_router/media_router_webui_message_handler.h" |
| #include "chrome/common/url_constants.h" |
| +#include "chrome/grit/generated_resources.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/browser/web_ui.h" |
| #include "content/public/browser/web_ui_data_source.h" |
| +#include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
| +#include "ui/base/l10n/l10n_util.h" |
| #include "ui/web_dialogs/web_dialog_delegate.h" |
| namespace media_router { |
| namespace { |
| +// The amount of time to wait for a response when creating a new route. |
| +const int kCreateRouteTimeoutSeconds = 20; |
| + |
| std::string GetHostFromURL(const GURL& gurl) { |
| if (gurl.is_empty()) |
| return std::string(); |
| @@ -44,6 +51,20 @@ std::string GetHostFromURL(const GURL& gurl) { |
| return host; |
| } |
| +std::string GetTruncatedHostFromURL(const GURL& gurl) { |
| + std::string host = GetHostFromURL(gurl); |
| + |
| + const std::string truncated = |
| + net::registry_controlled_domains::GetDomainAndRegistry( |
| + host, |
| + net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES); |
| + // The truncation will be empty in some scenarios (e.g. host is |
| + // simply an IP address). Fail gracefully. |
| + if (truncated.empty()) |
| + return host; |
| + return truncated; |
| +} |
| + |
| } // namespace |
| // This class calls to refresh the UI when the highest priority issue is |
| @@ -261,7 +282,7 @@ std::string MediaRouterUI::GetInitialHeaderText() const { |
| return std::string(); |
| return MediaCastModeToDescription(GetPreferredCastMode(cast_modes_), |
| - GetHostFromURL(frame_url_)); |
| + GetTruncatedHostFromURL(frame_url_)); |
| } |
| std::string MediaRouterUI::GetInitialHeaderTextTooltip() const { |
| @@ -302,6 +323,7 @@ void MediaRouterUI::OnRouteResponseReceived(const MediaSink::Id& sink_id, |
| handler_->OnCreateRouteResponseReceived(sink_id, route); |
| has_pending_route_request_ = false; |
| requesting_route_for_default_source_ = false; |
| + route_creation_timer_.Stop(); |
| } |
| bool MediaRouterUI::DoCreateRoute(const MediaSink::Id& sink_id, |
| @@ -364,12 +386,32 @@ bool MediaRouterUI::DoCreateRoute(const MediaSink::Id& sink_id, |
| } |
| } |
| + // Start the timer. |
| + route_creation_timer_.Start( |
| + FROM_HERE, base::TimeDelta::FromSeconds(kCreateRouteTimeoutSeconds), |
| + this, &MediaRouterUI::RouteCreationTimeout); |
| + |
| router_->CreateRoute(source.id(), sink_id, origin, |
| SessionTabHelper::IdForTab(initiator_), |
| route_response_callbacks); |
| + |
| return true; |
| } |
| +void MediaRouterUI::RouteCreationTimeout() { |
| + has_pending_route_request_ = false; |
| + requesting_route_for_default_source_ = false; |
| + |
| + Issue issue( |
| + l10n_util::GetStringFUTF8(IDS_MEDIA_ROUTER_ISSUE_CREATE_ROUTE_TIMEOUT, |
| + base::UTF8ToUTF16(GetTruncatedHostFromURL( |
| + frame_url_))), |
| + std::string(), IssueAction(IssueAction::TYPE_DISMISS), |
| + std::vector<IssueAction>(), std::string(), Issue::NOTIFICATION, |
| + false, std::string()); |
| + AddIssue(issue); |
|
imcheng
2015/09/29 19:08:53
We can also consider doing away with the timer on
apacible
2015/09/30 18:05:46
We actually don't have a timer on the WebUI side,
|
| +} |
| + |
| std::string MediaRouterUI::GetFrameURLHost() const { |
| return GetHostFromURL(frame_url_); |
| } |