| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/webui/media_router/media_router_webui_message_handle
r.h" | 5 #include "chrome/browser/ui/webui/media_router/media_router_webui_message_handle
r.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/metrics/histogram_macros.h" | 10 #include "base/metrics/histogram_macros.h" |
| 11 #include "base/metrics/sparse_histogram.h" | 11 #include "base/metrics/sparse_histogram.h" |
| 12 #include "base/metrics/user_metrics.h" | 12 #include "base/metrics/user_metrics.h" |
| 13 #include "base/strings/string_util.h" |
| 13 #include "base/strings/stringprintf.h" | 14 #include "base/strings/stringprintf.h" |
| 14 #include "base/values.h" | 15 #include "base/values.h" |
| 15 #include "chrome/browser/media/router/issue.h" | 16 #include "chrome/browser/media/router/issue.h" |
| 16 #include "chrome/browser/media/router/media_router_metrics.h" | 17 #include "chrome/browser/media/router/media_router_metrics.h" |
| 17 #include "chrome/browser/profiles/profile.h" | 18 #include "chrome/browser/profiles/profile.h" |
| 18 #include "chrome/browser/ui/webui/media_router/media_router_ui.h" | 19 #include "chrome/browser/ui/webui/media_router/media_router_ui.h" |
| 19 #include "chrome/common/pref_names.h" | 20 #include "chrome/common/pref_names.h" |
| 20 #include "chrome/grit/generated_resources.h" | 21 #include "chrome/grit/generated_resources.h" |
| 21 #include "components/prefs/pref_service.h" | 22 #include "components/prefs/pref_service.h" |
| 22 #include "content/public/browser/web_ui.h" | 23 #include "content/public/browser/web_ui.h" |
| (...skipping 29 matching lines...) Expand all Loading... |
| 52 const char kReportFilter[] = "reportFilter"; | 53 const char kReportFilter[] = "reportFilter"; |
| 53 const char kReportInitialAction[] = "reportInitialAction"; | 54 const char kReportInitialAction[] = "reportInitialAction"; |
| 54 const char kReportInitialState[] = "reportInitialState"; | 55 const char kReportInitialState[] = "reportInitialState"; |
| 55 const char kReportNavigateToView[] = "reportNavigateToView"; | 56 const char kReportNavigateToView[] = "reportNavigateToView"; |
| 56 const char kReportRouteCreationOutcome[] = "reportRouteCreationOutcome"; | 57 const char kReportRouteCreationOutcome[] = "reportRouteCreationOutcome"; |
| 57 const char kReportRouteCreation[] = "reportRouteCreation"; | 58 const char kReportRouteCreation[] = "reportRouteCreation"; |
| 58 const char kReportSelectedCastMode[] = "reportSelectedCastMode"; | 59 const char kReportSelectedCastMode[] = "reportSelectedCastMode"; |
| 59 const char kReportSinkCount[] = "reportSinkCount"; | 60 const char kReportSinkCount[] = "reportSinkCount"; |
| 60 const char kReportTimeToClickSink[] = "reportTimeToClickSink"; | 61 const char kReportTimeToClickSink[] = "reportTimeToClickSink"; |
| 61 const char kReportTimeToInitialActionClose[] = "reportTimeToInitialActionClose"; | 62 const char kReportTimeToInitialActionClose[] = "reportTimeToInitialActionClose"; |
| 63 const char kSearchSinksAndCreateRoute[] = "searchSinksAndCreateRoute"; |
| 62 const char kOnInitialDataReceived[] = "onInitialDataReceived"; | 64 const char kOnInitialDataReceived[] = "onInitialDataReceived"; |
| 63 | 65 |
| 64 // JS function names. | 66 // JS function names. |
| 65 const char kSetInitialData[] = "media_router.ui.setInitialData"; | 67 const char kSetInitialData[] = "media_router.ui.setInitialData"; |
| 66 const char kOnCreateRouteResponseReceived[] = | 68 const char kOnCreateRouteResponseReceived[] = |
| 67 "media_router.ui.onCreateRouteResponseReceived"; | 69 "media_router.ui.onCreateRouteResponseReceived"; |
| 70 const char kReceiveSearchResult[] = "media_router.ui.receiveSearchResult"; |
| 68 const char kSetFirstRunFlowData[] = "media_router.ui.setFirstRunFlowData"; | 71 const char kSetFirstRunFlowData[] = "media_router.ui.setFirstRunFlowData"; |
| 69 const char kSetIssue[] = "media_router.ui.setIssue"; | 72 const char kSetIssue[] = "media_router.ui.setIssue"; |
| 70 const char kSetSinkListAndIdentity[] = "media_router.ui.setSinkListAndIdentity"; | 73 const char kSetSinkListAndIdentity[] = "media_router.ui.setSinkListAndIdentity"; |
| 71 const char kSetRouteList[] = "media_router.ui.setRouteList"; | 74 const char kSetRouteList[] = "media_router.ui.setRouteList"; |
| 72 const char kSetCastModeList[] = "media_router.ui.setCastModeList"; | 75 const char kSetCastModeList[] = "media_router.ui.setCastModeList"; |
| 73 const char kUpdateMaxHeight[] = "media_router.ui.updateMaxHeight"; | 76 const char kUpdateMaxHeight[] = "media_router.ui.updateMaxHeight"; |
| 74 const char kWindowOpen[] = "window.open"; | 77 const char kWindowOpen[] = "window.open"; |
| 75 | 78 |
| 76 std::unique_ptr<base::DictionaryValue> SinksAndIdentityToValue( | 79 std::unique_ptr<base::DictionaryValue> SinksAndIdentityToValue( |
| 77 const std::vector<MediaSinkWithCastModes>& sinks, | 80 const std::vector<MediaSinkWithCastModes>& sinks, |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 show_email = true; | 117 show_email = true; |
| 115 if (!domain.empty() && domain != user_domain) | 118 if (!domain.empty() && domain != user_domain) |
| 116 show_domain = true; | 119 show_domain = true; |
| 117 } | 120 } |
| 118 | 121 |
| 119 int cast_mode_bits = 0; | 122 int cast_mode_bits = 0; |
| 120 for (MediaCastMode cast_mode : sink_with_cast_modes.cast_modes) | 123 for (MediaCastMode cast_mode : sink_with_cast_modes.cast_modes) |
| 121 cast_mode_bits |= cast_mode; | 124 cast_mode_bits |= cast_mode; |
| 122 | 125 |
| 123 sink_val->SetInteger("castModes", cast_mode_bits); | 126 sink_val->SetInteger("castModes", cast_mode_bits); |
| 127 sink_val->SetBoolean( |
| 128 "isPseudoSink", |
| 129 base::StartsWith(sink.id(), "pseudo:", base::CompareCase::SENSITIVE)); |
| 124 sinks_val->Append(sink_val.release()); | 130 sinks_val->Append(sink_val.release()); |
| 125 } | 131 } |
| 126 | 132 |
| 127 sink_list_and_identity->Set("sinks", sinks_val.release()); | 133 sink_list_and_identity->Set("sinks", sinks_val.release()); |
| 128 sink_list_and_identity->SetBoolean("showEmail", show_email); | 134 sink_list_and_identity->SetBoolean("showEmail", show_email); |
| 129 sink_list_and_identity->SetBoolean("showDomain", show_domain); | 135 sink_list_and_identity->SetBoolean("showDomain", show_domain); |
| 130 return sink_list_and_identity; | 136 return sink_list_and_identity; |
| 131 } | 137 } |
| 132 | 138 |
| 133 std::unique_ptr<base::DictionaryValue> RouteToValue( | 139 std::unique_ptr<base::DictionaryValue> RouteToValue( |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 282 base::StringValue(sink_id), *route_value, | 288 base::StringValue(sink_id), *route_value, |
| 283 base::FundamentalValue(route->for_display())); | 289 base::FundamentalValue(route->for_display())); |
| 284 } else { | 290 } else { |
| 285 web_ui()->CallJavascriptFunction(kOnCreateRouteResponseReceived, | 291 web_ui()->CallJavascriptFunction(kOnCreateRouteResponseReceived, |
| 286 base::StringValue(sink_id), | 292 base::StringValue(sink_id), |
| 287 *base::Value::CreateNullValue(), | 293 *base::Value::CreateNullValue(), |
| 288 base::FundamentalValue(false)); | 294 base::FundamentalValue(false)); |
| 289 } | 295 } |
| 290 } | 296 } |
| 291 | 297 |
| 298 void MediaRouterWebUIMessageHandler::ReturnSearchResult( |
| 299 const std::string& sink_id) { |
| 300 DVLOG(2) << "ReturnSearchResult"; |
| 301 web_ui()->CallJavascriptFunction(kReceiveSearchResult, |
| 302 base::StringValue(sink_id)); |
| 303 } |
| 304 |
| 292 void MediaRouterWebUIMessageHandler::UpdateIssue(const Issue* issue) { | 305 void MediaRouterWebUIMessageHandler::UpdateIssue(const Issue* issue) { |
| 293 DVLOG(2) << "UpdateIssue"; | 306 DVLOG(2) << "UpdateIssue"; |
| 294 web_ui()->CallJavascriptFunction(kSetIssue, | 307 web_ui()->CallJavascriptFunction(kSetIssue, |
| 295 issue ? *IssueToValue(*issue) : *base::Value::CreateNullValue()); | 308 issue ? *IssueToValue(*issue) : *base::Value::CreateNullValue()); |
| 296 } | 309 } |
| 297 | 310 |
| 298 void MediaRouterWebUIMessageHandler::UpdateMaxDialogHeight(int height) { | 311 void MediaRouterWebUIMessageHandler::UpdateMaxDialogHeight(int height) { |
| 299 DVLOG(2) << "UpdateMaxDialogHeight"; | 312 DVLOG(2) << "UpdateMaxDialogHeight"; |
| 300 web_ui()->CallJavascriptFunction(kUpdateMaxHeight, | 313 web_ui()->CallJavascriptFunction(kUpdateMaxHeight, |
| 301 base::FundamentalValue(height)); | 314 base::FundamentalValue(height)); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 373 web_ui()->RegisterMessageCallback( | 386 web_ui()->RegisterMessageCallback( |
| 374 kReportTimeToClickSink, | 387 kReportTimeToClickSink, |
| 375 base::Bind(&MediaRouterWebUIMessageHandler::OnReportTimeToClickSink, | 388 base::Bind(&MediaRouterWebUIMessageHandler::OnReportTimeToClickSink, |
| 376 base::Unretained(this))); | 389 base::Unretained(this))); |
| 377 web_ui()->RegisterMessageCallback( | 390 web_ui()->RegisterMessageCallback( |
| 378 kReportTimeToInitialActionClose, | 391 kReportTimeToInitialActionClose, |
| 379 base::Bind( | 392 base::Bind( |
| 380 &MediaRouterWebUIMessageHandler::OnReportTimeToInitialActionClose, | 393 &MediaRouterWebUIMessageHandler::OnReportTimeToInitialActionClose, |
| 381 base::Unretained(this))); | 394 base::Unretained(this))); |
| 382 web_ui()->RegisterMessageCallback( | 395 web_ui()->RegisterMessageCallback( |
| 396 kSearchSinksAndCreateRoute, |
| 397 base::Bind(&MediaRouterWebUIMessageHandler::OnSearchSinksAndCreateRoute, |
| 398 base::Unretained(this))); |
| 399 web_ui()->RegisterMessageCallback( |
| 383 kOnInitialDataReceived, | 400 kOnInitialDataReceived, |
| 384 base::Bind(&MediaRouterWebUIMessageHandler::OnInitialDataReceived, | 401 base::Bind(&MediaRouterWebUIMessageHandler::OnInitialDataReceived, |
| 385 base::Unretained(this))); | 402 base::Unretained(this))); |
| 386 } | 403 } |
| 387 | 404 |
| 388 void MediaRouterWebUIMessageHandler::OnRequestInitialData( | 405 void MediaRouterWebUIMessageHandler::OnRequestInitialData( |
| 389 const base::ListValue* args) { | 406 const base::ListValue* args) { |
| 390 DVLOG(1) << "OnRequestInitialData"; | 407 DVLOG(1) << "OnRequestInitialData"; |
| 391 media_router_ui_->OnUIInitiallyLoaded(); | 408 media_router_ui_->OnUIInitiallyLoaded(); |
| 392 base::DictionaryValue initial_data; | 409 base::DictionaryValue initial_data; |
| (...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 724 DVLOG(1) << "OnReportTimeToInitialActionClose"; | 741 DVLOG(1) << "OnReportTimeToInitialActionClose"; |
| 725 double time_to_close; | 742 double time_to_close; |
| 726 if (!args->GetDouble(0, &time_to_close)) { | 743 if (!args->GetDouble(0, &time_to_close)) { |
| 727 VLOG(0) << "Unable to extract args."; | 744 VLOG(0) << "Unable to extract args."; |
| 728 return; | 745 return; |
| 729 } | 746 } |
| 730 UMA_HISTOGRAM_TIMES("MediaRouter.Ui.Action.CloseLatency", | 747 UMA_HISTOGRAM_TIMES("MediaRouter.Ui.Action.CloseLatency", |
| 731 base::TimeDelta::FromMillisecondsD(time_to_close)); | 748 base::TimeDelta::FromMillisecondsD(time_to_close)); |
| 732 } | 749 } |
| 733 | 750 |
| 751 void MediaRouterWebUIMessageHandler::OnSearchSinksAndCreateRoute( |
| 752 const base::ListValue* args) { |
| 753 DVLOG(1) << "OnSearchSinksAndCreateRoute"; |
| 754 const base::DictionaryValue* args_dict = nullptr; |
| 755 std::string sink_id; |
| 756 std::string search_criteria; |
| 757 std::string domain; |
| 758 int cast_mode_num = -1; |
| 759 if (!args->GetDictionary(0, &args_dict) || |
| 760 !args_dict->GetString("sinkId", &sink_id) || |
| 761 !args_dict->GetString("searchCriteria", &search_criteria) || |
| 762 !args_dict->GetString("domain", &domain) || |
| 763 !args_dict->GetInteger("selectedCastMode", &cast_mode_num)) { |
| 764 DVLOG(1) << "Unable to extract args"; |
| 765 return; |
| 766 } |
| 767 |
| 768 if (search_criteria.empty()) { |
| 769 DVLOG(1) << "Media Router UI did not provide valid search criteria. " |
| 770 "Aborting."; |
| 771 return; |
| 772 } |
| 773 |
| 774 if (!IsValidCastModeNum(cast_mode_num)) { |
| 775 DVLOG(1) << "Invalid cast mode: " << cast_mode_num << ". Aborting."; |
| 776 return; |
| 777 } |
| 778 |
| 779 // TODO(btolsch): Check result and add an issue if it failed. |
| 780 media_router_ui_->SearchSinksAndCreateRoute( |
| 781 sink_id, search_criteria, domain, |
| 782 static_cast<MediaCastMode>(cast_mode_num)); |
| 783 } |
| 784 |
| 734 void MediaRouterWebUIMessageHandler::OnInitialDataReceived( | 785 void MediaRouterWebUIMessageHandler::OnInitialDataReceived( |
| 735 const base::ListValue* args) { | 786 const base::ListValue* args) { |
| 736 DVLOG(1) << "OnInitialDataReceived"; | 787 DVLOG(1) << "OnInitialDataReceived"; |
| 737 media_router_ui_->OnUIInitialDataReceived(); | 788 media_router_ui_->OnUIInitialDataReceived(); |
| 738 MaybeUpdateFirstRunFlowData(); | 789 MaybeUpdateFirstRunFlowData(); |
| 739 } | 790 } |
| 740 | 791 |
| 741 bool MediaRouterWebUIMessageHandler::ActOnIssueType( | 792 bool MediaRouterWebUIMessageHandler::ActOnIssueType( |
| 742 const IssueAction::Type& action_type, | 793 const IssueAction::Type& action_type, |
| 743 const base::DictionaryValue* args) { | 794 const base::DictionaryValue* args) { |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 816 #endif // defined(GOOGLE_CHROME_BUILD) | 867 #endif // defined(GOOGLE_CHROME_BUILD) |
| 817 | 868 |
| 818 return AccountInfo(); | 869 return AccountInfo(); |
| 819 } | 870 } |
| 820 | 871 |
| 821 void MediaRouterWebUIMessageHandler::SetWebUIForTest(content::WebUI* web_ui) { | 872 void MediaRouterWebUIMessageHandler::SetWebUIForTest(content::WebUI* web_ui) { |
| 822 set_web_ui(web_ui); | 873 set_web_ui(web_ui); |
| 823 } | 874 } |
| 824 | 875 |
| 825 } // namespace media_router | 876 } // namespace media_router |
| OLD | NEW |