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

Side by Side Diff: chrome/browser/media/router/mojo/media_router_mojo_impl.cc

Issue 2627463003: Convert MediaRouter mojom apis to intake url::Origin objects instead of strings (Closed)
Patch Set: comment and ternary op Created 3 years, 11 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/media/router/mojo/media_router_mojo_impl.h" 5 #include "chrome/browser/media/router/mojo/media_router_mojo_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 169
170 void MediaRouterMojoImpl::OnIssue(const IssueInfo& issue) { 170 void MediaRouterMojoImpl::OnIssue(const IssueInfo& issue) {
171 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 171 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
172 DVLOG_WITH_INSTANCE(1) << "OnIssue " << issue.title; 172 DVLOG_WITH_INSTANCE(1) << "OnIssue " << issue.title;
173 issue_manager_.AddIssue(issue); 173 issue_manager_.AddIssue(issue);
174 } 174 }
175 175
176 void MediaRouterMojoImpl::OnSinksReceived( 176 void MediaRouterMojoImpl::OnSinksReceived(
177 const std::string& media_source, 177 const std::string& media_source,
178 std::vector<mojom::MediaSinkPtr> sinks, 178 std::vector<mojom::MediaSinkPtr> sinks,
179 const std::vector<std::string>& origins) { 179 const std::vector<url::Origin>& origins) {
180 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 180 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
181 DVLOG_WITH_INSTANCE(1) << "OnSinksReceived"; 181 DVLOG_WITH_INSTANCE(1) << "OnSinksReceived";
182 auto it = sinks_queries_.find(media_source); 182 auto it = sinks_queries_.find(media_source);
183 if (it == sinks_queries_.end()) { 183 if (it == sinks_queries_.end()) {
184 DVLOG_WITH_INSTANCE(1) << "Received sink list without MediaSinksQuery."; 184 DVLOG_WITH_INSTANCE(1) << "Received sink list without MediaSinksQuery.";
185 return; 185 return;
186 } 186 }
187 187
188 std::vector<GURL> origin_list; 188 std::vector<url::Origin> origin_list(origins);
189 origin_list.reserve(origins.size());
190 for (size_t i = 0; i < origins.size(); ++i) {
191 GURL origin(origins[i]);
192 if (!origin.is_valid()) {
193 LOG(WARNING) << "Received invalid origin: " << origin
194 << ". Dropping result.";
195 return;
196 }
197 origin_list.push_back(origin);
198 }
199 189
200 std::vector<MediaSink> sink_list; 190 std::vector<MediaSink> sink_list;
201 sink_list.reserve(sinks.size()); 191 sink_list.reserve(sinks.size());
202 for (size_t i = 0; i < sinks.size(); ++i) 192 for (size_t i = 0; i < sinks.size(); ++i)
203 sink_list.push_back(sinks[i].To<MediaSink>()); 193 sink_list.push_back(sinks[i].To<MediaSink>());
204 194
205 auto* sinks_query = it->second.get(); 195 auto* sinks_query = it->second.get();
206 sinks_query->has_cached_result = true; 196 sinks_query->has_cached_result = true;
207 sinks_query->origins.swap(origin_list); 197 sinks_query->origins.swap(origin_list);
dcheng 2017/01/26 04:16:32 Maybe just assign |origins| directly here? It's th
steimel 2017/01/27 00:28:59 Done.
208 sinks_query->cached_sink_list.swap(sink_list); 198 sinks_query->cached_sink_list.swap(sink_list);
209 199
210 if (!sinks_query->observers.might_have_observers()) { 200 if (!sinks_query->observers.might_have_observers()) {
211 DVLOG_WITH_INSTANCE(1) 201 DVLOG_WITH_INSTANCE(1)
212 << "Received sink list without any active observers: " << media_source; 202 << "Received sink list without any active observers: " << media_source;
213 } else { 203 } else {
214 for (auto& observer : sinks_query->observers) { 204 for (auto& observer : sinks_query->observers) {
215 observer.OnSinksUpdated(sinks_query->cached_sink_list, 205 observer.OnSinksUpdated(sinks_query->cached_sink_list,
216 sinks_query->origins); 206 sinks_query->origins);
217 } 207 }
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 MediaRouterMojoMetrics::RecordJoinRouteResultCode(result->result_code()); 262 MediaRouterMojoMetrics::RecordJoinRouteResultCode(result->result_code());
273 else 263 else
274 MediaRouterMojoMetrics::RecordCreateRouteResultCode(result->result_code()); 264 MediaRouterMojoMetrics::RecordCreateRouteResultCode(result->result_code());
275 265
276 RunRouteRequestCallbacks(std::move(result), callbacks); 266 RunRouteRequestCallbacks(std::move(result), callbacks);
277 } 267 }
278 268
279 void MediaRouterMojoImpl::CreateRoute( 269 void MediaRouterMojoImpl::CreateRoute(
280 const MediaSource::Id& source_id, 270 const MediaSource::Id& source_id,
281 const MediaSink::Id& sink_id, 271 const MediaSink::Id& sink_id,
282 const GURL& origin, 272 const url::Origin& origin,
283 content::WebContents* web_contents, 273 content::WebContents* web_contents,
284 const std::vector<MediaRouteResponseCallback>& callbacks, 274 const std::vector<MediaRouteResponseCallback>& callbacks,
285 base::TimeDelta timeout, 275 base::TimeDelta timeout,
286 bool incognito) { 276 bool incognito) {
287 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 277 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
288 278
289 if (!origin.is_valid()) {
290 DVLOG_WITH_INSTANCE(1) << "Invalid origin: " << origin;
291 std::unique_ptr<RouteRequestResult> result = RouteRequestResult::FromError(
292 "Invalid origin", RouteRequestResult::INVALID_ORIGIN);
293 MediaRouterMojoMetrics::RecordCreateRouteResultCode(result->result_code());
294 RunRouteRequestCallbacks(std::move(result), callbacks);
295 return;
296 }
297
298 SetWakeReason(MediaRouteProviderWakeReason::CREATE_ROUTE); 279 SetWakeReason(MediaRouteProviderWakeReason::CREATE_ROUTE);
299 int tab_id = SessionTabHelper::IdForTab(web_contents); 280 int tab_id = SessionTabHelper::IdForTab(web_contents);
300 RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoCreateRoute, 281 RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoCreateRoute,
301 base::Unretained(this), source_id, sink_id, 282 base::Unretained(this), source_id, sink_id, origin,
302 origin.is_empty() ? "" : origin.spec(), tab_id, 283 tab_id, callbacks, timeout, incognito));
303 callbacks, timeout, incognito));
304 } 284 }
305 285
306 void MediaRouterMojoImpl::JoinRoute( 286 void MediaRouterMojoImpl::JoinRoute(
307 const MediaSource::Id& source_id, 287 const MediaSource::Id& source_id,
308 const std::string& presentation_id, 288 const std::string& presentation_id,
309 const GURL& origin, 289 const url::Origin& origin,
310 content::WebContents* web_contents, 290 content::WebContents* web_contents,
311 const std::vector<MediaRouteResponseCallback>& callbacks, 291 const std::vector<MediaRouteResponseCallback>& callbacks,
312 base::TimeDelta timeout, 292 base::TimeDelta timeout,
313 bool incognito) { 293 bool incognito) {
314 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 294 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
315 295
316 std::unique_ptr<RouteRequestResult> error_result; 296 if (!HasJoinableRoute()) {
317 if (!origin.is_valid()) {
318 DVLOG_WITH_INSTANCE(1) << "Invalid origin: " << origin;
319 error_result = RouteRequestResult::FromError(
320 "Invalid origin", RouteRequestResult::INVALID_ORIGIN);
321 } else if (!HasJoinableRoute()) {
322 DVLOG_WITH_INSTANCE(1) << "No joinable routes"; 297 DVLOG_WITH_INSTANCE(1) << "No joinable routes";
323 error_result = RouteRequestResult::FromError( 298 std::unique_ptr<RouteRequestResult> result = RouteRequestResult::FromError(
324 "Route not found", RouteRequestResult::ROUTE_NOT_FOUND); 299 "Route not found", RouteRequestResult::ROUTE_NOT_FOUND);
325 } 300 MediaRouterMojoMetrics::RecordJoinRouteResultCode(result->result_code());
326 301 RunRouteRequestCallbacks(std::move(result), callbacks);
327 if (error_result) {
328 MediaRouterMojoMetrics::RecordJoinRouteResultCode(
329 error_result->result_code());
330 RunRouteRequestCallbacks(std::move(error_result), callbacks);
331 return; 302 return;
332 } 303 }
333 304
334 SetWakeReason(MediaRouteProviderWakeReason::JOIN_ROUTE); 305 SetWakeReason(MediaRouteProviderWakeReason::JOIN_ROUTE);
335 int tab_id = SessionTabHelper::IdForTab(web_contents); 306 int tab_id = SessionTabHelper::IdForTab(web_contents);
336 RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoJoinRoute, 307 RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoJoinRoute,
337 base::Unretained(this), source_id, presentation_id, 308 base::Unretained(this), source_id, presentation_id,
338 origin.is_empty() ? "" : origin.spec(), tab_id, 309 origin, tab_id, callbacks, timeout, incognito));
339 callbacks, timeout, incognito));
340 } 310 }
341 311
342 void MediaRouterMojoImpl::ConnectRouteByRouteId( 312 void MediaRouterMojoImpl::ConnectRouteByRouteId(
343 const MediaSource::Id& source_id, 313 const MediaSource::Id& source_id,
344 const MediaRoute::Id& route_id, 314 const MediaRoute::Id& route_id,
345 const GURL& origin, 315 const url::Origin& origin,
346 content::WebContents* web_contents, 316 content::WebContents* web_contents,
347 const std::vector<MediaRouteResponseCallback>& callbacks, 317 const std::vector<MediaRouteResponseCallback>& callbacks,
348 base::TimeDelta timeout, 318 base::TimeDelta timeout,
349 bool incognito) { 319 bool incognito) {
350 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 320 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
351 321
352 if (!origin.is_valid()) {
353 DVLOG_WITH_INSTANCE(1) << "Invalid origin: " << origin;
354 std::unique_ptr<RouteRequestResult> result = RouteRequestResult::FromError(
355 "Invalid origin", RouteRequestResult::INVALID_ORIGIN);
356 MediaRouterMojoMetrics::RecordJoinRouteResultCode(result->result_code());
357 RunRouteRequestCallbacks(std::move(result), callbacks);
358 return;
359 }
360
361 SetWakeReason(MediaRouteProviderWakeReason::CONNECT_ROUTE_BY_ROUTE_ID); 322 SetWakeReason(MediaRouteProviderWakeReason::CONNECT_ROUTE_BY_ROUTE_ID);
362 int tab_id = SessionTabHelper::IdForTab(web_contents); 323 int tab_id = SessionTabHelper::IdForTab(web_contents);
363 RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoConnectRouteByRouteId, 324 RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoConnectRouteByRouteId,
364 base::Unretained(this), source_id, route_id, 325 base::Unretained(this), source_id, route_id, origin,
365 origin.is_empty() ? "" : origin.spec(), tab_id, 326 tab_id, callbacks, timeout, incognito));
366 callbacks, timeout, incognito));
367 } 327 }
368 328
369 void MediaRouterMojoImpl::TerminateRoute(const MediaRoute::Id& route_id) { 329 void MediaRouterMojoImpl::TerminateRoute(const MediaRoute::Id& route_id) {
370 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 330 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
371 DVLOG(2) << "TerminateRoute " << route_id; 331 DVLOG(2) << "TerminateRoute " << route_id;
372 SetWakeReason(MediaRouteProviderWakeReason::TERMINATE_ROUTE); 332 SetWakeReason(MediaRouteProviderWakeReason::TERMINATE_ROUTE);
373 RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoTerminateRoute, 333 RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoTerminateRoute,
374 base::Unretained(this), route_id)); 334 base::Unretained(this), route_id));
375 } 335 }
376 336
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 new_query = true; 412 new_query = true;
453 sinks_query = base::MakeUnique<MediaSinksQuery>(); 413 sinks_query = base::MakeUnique<MediaSinksQuery>();
454 } else { 414 } else {
455 DCHECK(!sinks_query->observers.HasObserver(observer)); 415 DCHECK(!sinks_query->observers.HasObserver(observer));
456 } 416 }
457 417
458 // If sink availability is UNAVAILABLE, then there is no need to call MRPM. 418 // If sink availability is UNAVAILABLE, then there is no need to call MRPM.
459 // |observer| can be immediately notified with an empty list. 419 // |observer| can be immediately notified with an empty list.
460 sinks_query->observers.AddObserver(observer); 420 sinks_query->observers.AddObserver(observer);
461 if (availability_ == mojom::MediaRouter::SinkAvailability::UNAVAILABLE) { 421 if (availability_ == mojom::MediaRouter::SinkAvailability::UNAVAILABLE) {
462 observer->OnSinksUpdated(std::vector<MediaSink>(), std::vector<GURL>()); 422 observer->OnSinksUpdated(std::vector<MediaSink>(),
423 std::vector<url::Origin>());
463 } else { 424 } else {
464 // Need to call MRPM to start observing sinks if the query is new. 425 // Need to call MRPM to start observing sinks if the query is new.
465 if (new_query) { 426 if (new_query) {
466 SetWakeReason(MediaRouteProviderWakeReason::START_OBSERVING_MEDIA_SINKS); 427 SetWakeReason(MediaRouteProviderWakeReason::START_OBSERVING_MEDIA_SINKS);
467 RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoStartObservingMediaSinks, 428 RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoStartObservingMediaSinks,
468 base::Unretained(this), source_id)); 429 base::Unretained(this), source_id));
469 } else if (sinks_query->has_cached_result) { 430 } else if (sinks_query->has_cached_result) {
470 observer->OnSinksUpdated(sinks_query->cached_sink_list, 431 observer->OnSinksUpdated(sinks_query->cached_sink_list,
471 sinks_query->origins); 432 sinks_query->origins);
472 } 433 }
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 SetWakeReason( 556 SetWakeReason(
596 MediaRouteProviderWakeReason::STOP_LISTENING_FOR_ROUTE_MESSAGES); 557 MediaRouteProviderWakeReason::STOP_LISTENING_FOR_ROUTE_MESSAGES);
597 RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoStopListeningForRouteMessages, 558 RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoStopListeningForRouteMessages,
598 base::Unretained(this), route_id)); 559 base::Unretained(this), route_id));
599 } 560 }
600 } 561 }
601 562
602 void MediaRouterMojoImpl::DoCreateRoute( 563 void MediaRouterMojoImpl::DoCreateRoute(
603 const MediaSource::Id& source_id, 564 const MediaSource::Id& source_id,
604 const MediaSink::Id& sink_id, 565 const MediaSink::Id& sink_id,
605 const std::string& origin, 566 const url::Origin& origin,
606 int tab_id, 567 int tab_id,
607 const std::vector<MediaRouteResponseCallback>& callbacks, 568 const std::vector<MediaRouteResponseCallback>& callbacks,
608 base::TimeDelta timeout, 569 base::TimeDelta timeout,
609 bool incognito) { 570 bool incognito) {
610 std::string presentation_id = MediaRouterBase::CreatePresentationId(); 571 std::string presentation_id = MediaRouterBase::CreatePresentationId();
611 DVLOG_WITH_INSTANCE(1) << "DoCreateRoute " << source_id << "=>" << sink_id 572 DVLOG_WITH_INSTANCE(1) << "DoCreateRoute " << source_id << "=>" << sink_id
612 << ", presentation ID: " << presentation_id; 573 << ", presentation ID: " << presentation_id;
613
614 media_route_provider_->CreateRoute( 574 media_route_provider_->CreateRoute(
615 source_id, sink_id, presentation_id, origin, tab_id, timeout, incognito, 575 source_id, sink_id, presentation_id, origin, tab_id, timeout, incognito,
616 base::Bind(&MediaRouterMojoImpl::RouteResponseReceived, 576 base::Bind(&MediaRouterMojoImpl::RouteResponseReceived,
617 base::Unretained(this), presentation_id, incognito, callbacks, 577 base::Unretained(this), presentation_id, incognito, callbacks,
618 false)); 578 false));
619 } 579 }
620 580
621 void MediaRouterMojoImpl::DoJoinRoute( 581 void MediaRouterMojoImpl::DoJoinRoute(
622 const MediaSource::Id& source_id, 582 const MediaSource::Id& source_id,
623 const std::string& presentation_id, 583 const std::string& presentation_id,
624 const std::string& origin, 584 const url::Origin& origin,
625 int tab_id, 585 int tab_id,
626 const std::vector<MediaRouteResponseCallback>& callbacks, 586 const std::vector<MediaRouteResponseCallback>& callbacks,
627 base::TimeDelta timeout, 587 base::TimeDelta timeout,
628 bool incognito) { 588 bool incognito) {
629 DVLOG_WITH_INSTANCE(1) << "DoJoinRoute " << source_id 589 DVLOG_WITH_INSTANCE(1) << "DoJoinRoute " << source_id
630 << ", presentation ID: " << presentation_id; 590 << ", presentation ID: " << presentation_id;
631 591
632 media_route_provider_->JoinRoute( 592 media_route_provider_->JoinRoute(
633 source_id, presentation_id, origin, tab_id, timeout, incognito, 593 source_id, presentation_id, origin, tab_id, timeout, incognito,
634 base::Bind(&MediaRouterMojoImpl::RouteResponseReceived, 594 base::Bind(&MediaRouterMojoImpl::RouteResponseReceived,
635 base::Unretained(this), presentation_id, incognito, callbacks, 595 base::Unretained(this), presentation_id, incognito, callbacks,
636 true)); 596 true));
637 } 597 }
638 598
639 void MediaRouterMojoImpl::DoConnectRouteByRouteId( 599 void MediaRouterMojoImpl::DoConnectRouteByRouteId(
640 const MediaSource::Id& source_id, 600 const MediaSource::Id& source_id,
641 const MediaRoute::Id& route_id, 601 const MediaRoute::Id& route_id,
642 const std::string& origin, 602 const url::Origin& origin,
643 int tab_id, 603 int tab_id,
644 const std::vector<MediaRouteResponseCallback>& callbacks, 604 const std::vector<MediaRouteResponseCallback>& callbacks,
645 base::TimeDelta timeout, 605 base::TimeDelta timeout,
646 bool incognito) { 606 bool incognito) {
647 std::string presentation_id = MediaRouterBase::CreatePresentationId(); 607 std::string presentation_id = MediaRouterBase::CreatePresentationId();
648 DVLOG_WITH_INSTANCE(1) << "DoConnectRouteByRouteId " << source_id 608 DVLOG_WITH_INSTANCE(1) << "DoConnectRouteByRouteId " << source_id
649 << ", route ID: " << route_id 609 << ", route ID: " << route_id
650 << ", presentation ID: " << presentation_id; 610 << ", presentation ID: " << presentation_id;
651 611
652 media_route_provider_->ConnectRouteByRouteId( 612 media_route_provider_->ConnectRouteByRouteId(
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
987 base::Unretained(this), source_id)); 947 base::Unretained(this), source_id));
988 } 948 }
989 949
990 void MediaRouterMojoImpl::DoUpdateMediaSinks( 950 void MediaRouterMojoImpl::DoUpdateMediaSinks(
991 const MediaSource::Id& source_id) { 951 const MediaSource::Id& source_id) {
992 DVLOG_WITH_INSTANCE(1) << "DoUpdateMediaSinks" << source_id; 952 DVLOG_WITH_INSTANCE(1) << "DoUpdateMediaSinks" << source_id;
993 media_route_provider_->UpdateMediaSinks(source_id); 953 media_route_provider_->UpdateMediaSinks(source_id);
994 } 954 }
995 955
996 } // namespace media_router 956 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698