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

Side by Side Diff: chrome/browser/ui/webui/media_router/media_router_webui_message_handler.cc

Issue 1805813002: [Media Router] Wiring for searching route providers for new sinks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Clarifying pseudo sink comments Created 4 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 unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698