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

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

Issue 2547703002: [Media Router] Handle multiple Presentation URLs when creating routes (Closed)
Patch Set: rebase Created 4 years 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_ui.h" 5 #include "chrome/browser/ui/webui/media_router/media_router_ui.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <unordered_map> 9 #include <unordered_map>
10 #include <utility> 10 #include <utility>
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 case TAB_MIRROR: 85 case TAB_MIRROR:
86 return base::TimeDelta::FromSeconds(kCreateRouteTimeoutSecondsForTab); 86 return base::TimeDelta::FromSeconds(kCreateRouteTimeoutSecondsForTab);
87 case DESKTOP_MIRROR: 87 case DESKTOP_MIRROR:
88 return base::TimeDelta::FromSeconds(kCreateRouteTimeoutSecondsForDesktop); 88 return base::TimeDelta::FromSeconds(kCreateRouteTimeoutSecondsForDesktop);
89 default: 89 default:
90 NOTREACHED(); 90 NOTREACHED();
91 return base::TimeDelta(); 91 return base::TimeDelta();
92 } 92 }
93 } 93 }
94 94
95 // Returns the first source in |sources| that can be connected to by using the
96 // "Cast" button in the dialog, or an empty source if there is none. This is
97 // used by the Media Router to find such a matching route if it exists.
98 MediaSource GetSourceForRouteObserver(const std::vector<MediaSource>& sources) {
99 auto source_it =
100 std::find_if(sources.begin(), sources.end(), CanConnectToMediaSource);
101 return source_it != sources.end() ? *source_it : MediaSource("");
102 }
103
95 } // namespace 104 } // namespace
96 105
97 // static 106 // static
98 std::string MediaRouterUI::GetExtensionName( 107 std::string MediaRouterUI::GetExtensionName(
99 const GURL& gurl, extensions::ExtensionRegistry* registry) { 108 const GURL& gurl, extensions::ExtensionRegistry* registry) {
100 if (gurl.is_empty() || !registry) return std::string(); 109 if (gurl.is_empty() || !registry) return std::string();
101 110
102 const extensions::Extension* extension = 111 const extensions::Extension* extension =
103 registry->enabled_extensions().GetExtensionOrAppByURL(gurl); 112 registry->enabled_extensions().GetExtensionOrAppByURL(gurl);
104 113
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 } 312 }
304 } 313 }
305 314
306 void MediaRouterUI::OnDefaultPresentationChanged( 315 void MediaRouterUI::OnDefaultPresentationChanged(
307 const PresentationRequest& presentation_request) { 316 const PresentationRequest& presentation_request) {
308 std::vector<MediaSource> sources = presentation_request.GetMediaSources(); 317 std::vector<MediaSource> sources = presentation_request.GetMediaSources();
309 presentation_request_.reset(new PresentationRequest(presentation_request)); 318 presentation_request_.reset(new PresentationRequest(presentation_request));
310 query_result_manager_->SetSourcesForCastMode( 319 query_result_manager_->SetSourcesForCastMode(
311 MediaCastMode::DEFAULT, sources, 320 MediaCastMode::DEFAULT, sources,
312 presentation_request_->frame_url().GetOrigin()); 321 presentation_request_->frame_url().GetOrigin());
313 // Register for MediaRoute updates. 322 // Register for MediaRoute updates. NOTE(mfoltz): If there are multiple
314 // TODO(crbug.com/627655): Use multiple URLs. 323 // sources that can be connected to via the dialog, this will break. We will
324 // need to observe multiple sources (keyed by sinks) in that case. As this is
325 // Cast-specific for the forseeable future, it may be simpler to plumb a new
326 // observer API for this case.
327 const MediaSource source_for_route_observer =
328 GetSourceForRouteObserver(sources);
315 routes_observer_.reset(new UIMediaRoutesObserver( 329 routes_observer_.reset(new UIMediaRoutesObserver(
316 router_, sources[0].id(), 330 router_, source_for_route_observer.id(),
317 base::Bind(&MediaRouterUI::OnRoutesUpdated, base::Unretained(this)))); 331 base::Bind(&MediaRouterUI::OnRoutesUpdated, base::Unretained(this))));
318 332
319 UpdateCastModes(); 333 UpdateCastModes();
320 } 334 }
321 335
322 void MediaRouterUI::OnDefaultPresentationRemoved() { 336 void MediaRouterUI::OnDefaultPresentationRemoved() {
323 presentation_request_.reset(); 337 presentation_request_.reset();
324 query_result_manager_->RemoveSourcesForCastMode(MediaCastMode::DEFAULT); 338 query_result_manager_->RemoveSourcesForCastMode(MediaCastMode::DEFAULT);
325 // Register for MediaRoute updates without a media source. 339 // Register for MediaRoute updates without a media source.
326 routes_observer_.reset(new UIMediaRoutesObserver( 340 routes_observer_.reset(new UIMediaRoutesObserver(
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
739 } 753 }
740 754
741 std::string MediaRouterUI::GetSerializedInitiatorOrigin() const { 755 std::string MediaRouterUI::GetSerializedInitiatorOrigin() const {
742 url::Origin origin = initiator_ 756 url::Origin origin = initiator_
743 ? url::Origin(initiator_->GetLastCommittedURL()) 757 ? url::Origin(initiator_->GetLastCommittedURL())
744 : url::Origin(); 758 : url::Origin();
745 return origin.Serialize(); 759 return origin.Serialize();
746 } 760 }
747 761
748 } // namespace media_router 762 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698