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/media/router/media_router_mojo_impl.h" | 5 #include "chrome/browser/media/router/media_router_mojo_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <utility> |
8 | 9 |
9 #include "base/bind.h" | 10 #include "base/bind.h" |
10 #include "base/guid.h" | 11 #include "base/guid.h" |
11 #include "base/logging.h" | 12 #include "base/logging.h" |
12 #include "base/memory/scoped_vector.h" | 13 #include "base/memory/scoped_vector.h" |
13 #include "base/observer_list.h" | 14 #include "base/observer_list.h" |
14 #include "base/stl_util.h" | 15 #include "base/stl_util.h" |
15 #include "base/strings/stringprintf.h" | 16 #include "base/strings/stringprintf.h" |
16 #include "chrome/browser/media/router/issues_observer.h" | 17 #include "chrome/browser/media/router/issues_observer.h" |
17 #include "chrome/browser/media/router/local_media_routes_observer.h" | 18 #include "chrome/browser/media/router/local_media_routes_observer.h" |
(...skipping 21 matching lines...) Expand all Loading... |
39 ConvertToPresentationSessionMessage(interfaces::RouteMessagePtr input) { | 40 ConvertToPresentationSessionMessage(interfaces::RouteMessagePtr input) { |
40 DCHECK(!input.is_null()); | 41 DCHECK(!input.is_null()); |
41 scoped_ptr<content::PresentationSessionMessage> output; | 42 scoped_ptr<content::PresentationSessionMessage> output; |
42 switch (input->type) { | 43 switch (input->type) { |
43 case interfaces::RouteMessage::Type::TYPE_TEXT: { | 44 case interfaces::RouteMessage::Type::TYPE_TEXT: { |
44 DCHECK(!input->message.is_null()); | 45 DCHECK(!input->message.is_null()); |
45 DCHECK(input->data.is_null()); | 46 DCHECK(input->data.is_null()); |
46 output.reset(new content::PresentationSessionMessage( | 47 output.reset(new content::PresentationSessionMessage( |
47 content::PresentationMessageType::TEXT)); | 48 content::PresentationMessageType::TEXT)); |
48 input->message.Swap(&output->message); | 49 input->message.Swap(&output->message); |
49 return output.Pass(); | 50 return output; |
50 } | 51 } |
51 case interfaces::RouteMessage::Type::TYPE_BINARY: { | 52 case interfaces::RouteMessage::Type::TYPE_BINARY: { |
52 DCHECK(!input->data.is_null()); | 53 DCHECK(!input->data.is_null()); |
53 DCHECK(input->message.is_null()); | 54 DCHECK(input->message.is_null()); |
54 output.reset(new content::PresentationSessionMessage( | 55 output.reset(new content::PresentationSessionMessage( |
55 content::PresentationMessageType::ARRAY_BUFFER)); | 56 content::PresentationMessageType::ARRAY_BUFFER)); |
56 output->data.reset(new std::vector<uint8_t>); | 57 output->data.reset(new std::vector<uint8_t>); |
57 input->data.Swap(output->data.get()); | 58 input->data.Swap(output->data.get()); |
58 return output.Pass(); | 59 return output; |
59 } | 60 } |
60 } | 61 } |
61 | 62 |
62 NOTREACHED() << "Invalid route message type " << input->type; | 63 NOTREACHED() << "Invalid route message type " << input->type; |
63 return output.Pass(); | 64 return output; |
64 } | 65 } |
65 | 66 |
66 } // namespace | 67 } // namespace |
67 | 68 |
68 MediaRouterMojoImpl::MediaRouterMediaRoutesObserver:: | 69 MediaRouterMojoImpl::MediaRouterMediaRoutesObserver:: |
69 MediaRouterMediaRoutesObserver(MediaRouterMojoImpl* router) | 70 MediaRouterMediaRoutesObserver(MediaRouterMojoImpl* router) |
70 : MediaRoutesObserver(router), | 71 : MediaRoutesObserver(router), |
71 router_(router) { | 72 router_(router) { |
72 DCHECK(router); | 73 DCHECK(router); |
73 } | 74 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 | 117 |
117 // static | 118 // static |
118 void MediaRouterMojoImpl::BindToRequest( | 119 void MediaRouterMojoImpl::BindToRequest( |
119 const std::string& extension_id, | 120 const std::string& extension_id, |
120 content::BrowserContext* context, | 121 content::BrowserContext* context, |
121 mojo::InterfaceRequest<interfaces::MediaRouter> request) { | 122 mojo::InterfaceRequest<interfaces::MediaRouter> request) { |
122 MediaRouterMojoImpl* impl = static_cast<MediaRouterMojoImpl*>( | 123 MediaRouterMojoImpl* impl = static_cast<MediaRouterMojoImpl*>( |
123 MediaRouterFactory::GetApiForBrowserContext(context)); | 124 MediaRouterFactory::GetApiForBrowserContext(context)); |
124 DCHECK(impl); | 125 DCHECK(impl); |
125 | 126 |
126 impl->BindToMojoRequest(request.Pass(), extension_id); | 127 impl->BindToMojoRequest(std::move(request), extension_id); |
127 } | 128 } |
128 | 129 |
129 void MediaRouterMojoImpl::BindToMojoRequest( | 130 void MediaRouterMojoImpl::BindToMojoRequest( |
130 mojo::InterfaceRequest<interfaces::MediaRouter> request, | 131 mojo::InterfaceRequest<interfaces::MediaRouter> request, |
131 const std::string& extension_id) { | 132 const std::string& extension_id) { |
132 DCHECK(thread_checker_.CalledOnValidThread()); | 133 DCHECK(thread_checker_.CalledOnValidThread()); |
133 | 134 |
134 binding_.reset( | 135 binding_.reset( |
135 new mojo::Binding<interfaces::MediaRouter>(this, request.Pass())); | 136 new mojo::Binding<interfaces::MediaRouter>(this, std::move(request))); |
136 binding_->set_connection_error_handler(base::Bind( | 137 binding_->set_connection_error_handler(base::Bind( |
137 &MediaRouterMojoImpl::OnConnectionError, base::Unretained(this))); | 138 &MediaRouterMojoImpl::OnConnectionError, base::Unretained(this))); |
138 | 139 |
139 media_route_provider_extension_id_ = extension_id; | 140 media_route_provider_extension_id_ = extension_id; |
140 } | 141 } |
141 | 142 |
142 void MediaRouterMojoImpl::OnConnectionError() { | 143 void MediaRouterMojoImpl::OnConnectionError() { |
143 DCHECK(thread_checker_.CalledOnValidThread()); | 144 DCHECK(thread_checker_.CalledOnValidThread()); |
144 | 145 |
145 media_route_provider_.reset(); | 146 media_route_provider_.reset(); |
(...skipping 20 matching lines...) Expand all Loading... |
166 if (event_page_tracker_->IsEventPageSuspended( | 167 if (event_page_tracker_->IsEventPageSuspended( |
167 media_route_provider_extension_id_)) { | 168 media_route_provider_extension_id_)) { |
168 DVLOG_WITH_INSTANCE(1) | 169 DVLOG_WITH_INSTANCE(1) |
169 << "ExecutePendingRequests was called while extension is suspended."; | 170 << "ExecutePendingRequests was called while extension is suspended."; |
170 media_route_provider_.reset(); | 171 media_route_provider_.reset(); |
171 SetWakeReason(MediaRouteProviderWakeReason::REGISTER_MEDIA_ROUTE_PROVIDER); | 172 SetWakeReason(MediaRouteProviderWakeReason::REGISTER_MEDIA_ROUTE_PROVIDER); |
172 AttemptWakeEventPage(); | 173 AttemptWakeEventPage(); |
173 return; | 174 return; |
174 } | 175 } |
175 | 176 |
176 media_route_provider_ = media_route_provider_ptr.Pass(); | 177 media_route_provider_ = std::move(media_route_provider_ptr); |
177 media_route_provider_.set_connection_error_handler(base::Bind( | 178 media_route_provider_.set_connection_error_handler(base::Bind( |
178 &MediaRouterMojoImpl::OnConnectionError, base::Unretained(this))); | 179 &MediaRouterMojoImpl::OnConnectionError, base::Unretained(this))); |
179 callback.Run(instance_id_); | 180 callback.Run(instance_id_); |
180 ExecutePendingRequests(); | 181 ExecutePendingRequests(); |
181 wakeup_attempt_count_ = 0; | 182 wakeup_attempt_count_ = 0; |
182 } | 183 } |
183 | 184 |
184 void MediaRouterMojoImpl::OnIssue(const interfaces::IssuePtr issue) { | 185 void MediaRouterMojoImpl::OnIssue(const interfaces::IssuePtr issue) { |
185 DCHECK(thread_checker_.CalledOnValidThread()); | 186 DCHECK(thread_checker_.CalledOnValidThread()); |
186 DVLOG_WITH_INSTANCE(1) << "OnIssue " << issue->title; | 187 DVLOG_WITH_INSTANCE(1) << "OnIssue " << issue->title; |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 | 346 |
346 void MediaRouterMojoImpl::SendRouteBinaryMessage( | 347 void MediaRouterMojoImpl::SendRouteBinaryMessage( |
347 const MediaRoute::Id& route_id, | 348 const MediaRoute::Id& route_id, |
348 scoped_ptr<std::vector<uint8_t>> data, | 349 scoped_ptr<std::vector<uint8_t>> data, |
349 const SendRouteMessageCallback& callback) { | 350 const SendRouteMessageCallback& callback) { |
350 DCHECK(thread_checker_.CalledOnValidThread()); | 351 DCHECK(thread_checker_.CalledOnValidThread()); |
351 | 352 |
352 SetWakeReason(MediaRouteProviderWakeReason::SEND_SESSION_BINARY_MESSAGE); | 353 SetWakeReason(MediaRouteProviderWakeReason::SEND_SESSION_BINARY_MESSAGE); |
353 RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoSendSessionBinaryMessage, | 354 RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoSendSessionBinaryMessage, |
354 base::Unretained(this), route_id, | 355 base::Unretained(this), route_id, |
355 base::Passed(data.Pass()), callback)); | 356 base::Passed(std::move(data)), callback)); |
356 } | 357 } |
357 | 358 |
358 void MediaRouterMojoImpl::AddIssue(const Issue& issue) { | 359 void MediaRouterMojoImpl::AddIssue(const Issue& issue) { |
359 DCHECK(thread_checker_.CalledOnValidThread()); | 360 DCHECK(thread_checker_.CalledOnValidThread()); |
360 issue_manager_.AddIssue(issue); | 361 issue_manager_.AddIssue(issue); |
361 } | 362 } |
362 | 363 |
363 void MediaRouterMojoImpl::ClearIssue(const Issue::Id& issue_id) { | 364 void MediaRouterMojoImpl::ClearIssue(const Issue::Id& issue_id) { |
364 DCHECK(thread_checker_.CalledOnValidThread()); | 365 DCHECK(thread_checker_.CalledOnValidThread()); |
365 issue_manager_.ClearIssue(issue_id); | 366 issue_manager_.ClearIssue(issue_id); |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
571 media_route_provider_->SendRouteMessage(route_id, message, callback); | 572 media_route_provider_->SendRouteMessage(route_id, message, callback); |
572 } | 573 } |
573 | 574 |
574 void MediaRouterMojoImpl::DoSendSessionBinaryMessage( | 575 void MediaRouterMojoImpl::DoSendSessionBinaryMessage( |
575 const MediaRoute::Id& route_id, | 576 const MediaRoute::Id& route_id, |
576 scoped_ptr<std::vector<uint8_t>> data, | 577 scoped_ptr<std::vector<uint8_t>> data, |
577 const SendRouteMessageCallback& callback) { | 578 const SendRouteMessageCallback& callback) { |
578 DVLOG_WITH_INSTANCE(1) << "SendRouteBinaryMessage " << route_id; | 579 DVLOG_WITH_INSTANCE(1) << "SendRouteBinaryMessage " << route_id; |
579 mojo::Array<uint8_t> mojo_array; | 580 mojo::Array<uint8_t> mojo_array; |
580 mojo_array.Swap(data.get()); | 581 mojo_array.Swap(data.get()); |
581 media_route_provider_->SendRouteBinaryMessage(route_id, mojo_array.Pass(), | 582 media_route_provider_->SendRouteBinaryMessage(route_id, std::move(mojo_array), |
582 callback); | 583 callback); |
583 } | 584 } |
584 | 585 |
585 void MediaRouterMojoImpl::DoListenForRouteMessages( | 586 void MediaRouterMojoImpl::DoListenForRouteMessages( |
586 const MediaRoute::Id& route_id) { | 587 const MediaRoute::Id& route_id) { |
587 DVLOG_WITH_INSTANCE(1) << "ListenForRouteMessages"; | 588 DVLOG_WITH_INSTANCE(1) << "ListenForRouteMessages"; |
588 if (!ContainsValue(route_ids_listening_for_messages_, route_id)) { | 589 if (!ContainsValue(route_ids_listening_for_messages_, route_id)) { |
589 route_ids_listening_for_messages_.insert(route_id); | 590 route_ids_listening_for_messages_.insert(route_id); |
590 media_route_provider_->ListenForRouteMessages( | 591 media_route_provider_->ListenForRouteMessages( |
591 route_id, base::Bind(&MediaRouterMojoImpl::OnRouteMessagesReceived, | 592 route_id, base::Bind(&MediaRouterMojoImpl::OnRouteMessagesReceived, |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
626 } | 627 } |
627 | 628 |
628 // If |messages| is empty, then |StopListeningForRouteMessages| was invoked | 629 // If |messages| is empty, then |StopListeningForRouteMessages| was invoked |
629 // but we have added back an observer since. Keep listening for more messages, | 630 // but we have added back an observer since. Keep listening for more messages, |
630 // but do not notify observers with empty list. | 631 // but do not notify observers with empty list. |
631 if (!messages.storage().empty()) { | 632 if (!messages.storage().empty()) { |
632 ScopedVector<content::PresentationSessionMessage> session_messages; | 633 ScopedVector<content::PresentationSessionMessage> session_messages; |
633 session_messages.reserve(messages.size()); | 634 session_messages.reserve(messages.size()); |
634 for (size_t i = 0; i < messages.size(); ++i) { | 635 for (size_t i = 0; i < messages.size(); ++i) { |
635 session_messages.push_back( | 636 session_messages.push_back( |
636 ConvertToPresentationSessionMessage(messages[i].Pass()).Pass()); | 637 ConvertToPresentationSessionMessage(std::move(messages[i]))); |
637 } | 638 } |
638 base::ObserverList<PresentationSessionMessagesObserver>::Iterator | 639 base::ObserverList<PresentationSessionMessagesObserver>::Iterator |
639 observer_it(observer_list); | 640 observer_it(observer_list); |
640 bool single_observer = | 641 bool single_observer = |
641 observer_it.GetNext() != nullptr && observer_it.GetNext() == nullptr; | 642 observer_it.GetNext() != nullptr && observer_it.GetNext() == nullptr; |
642 FOR_EACH_OBSERVER(PresentationSessionMessagesObserver, *observer_list, | 643 FOR_EACH_OBSERVER(PresentationSessionMessagesObserver, *observer_list, |
643 OnMessagesReceived(session_messages, single_observer)); | 644 OnMessagesReceived(session_messages, single_observer)); |
644 } | 645 } |
645 | 646 |
646 // Listen for more messages. | 647 // Listen for more messages. |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
830 if (current_wake_reason_ == MediaRouteProviderWakeReason::TOTAL_COUNT) | 831 if (current_wake_reason_ == MediaRouteProviderWakeReason::TOTAL_COUNT) |
831 current_wake_reason_ = reason; | 832 current_wake_reason_ = reason; |
832 } | 833 } |
833 | 834 |
834 void MediaRouterMojoImpl::ClearWakeReason() { | 835 void MediaRouterMojoImpl::ClearWakeReason() { |
835 DCHECK(current_wake_reason_ != MediaRouteProviderWakeReason::TOTAL_COUNT); | 836 DCHECK(current_wake_reason_ != MediaRouteProviderWakeReason::TOTAL_COUNT); |
836 current_wake_reason_ = MediaRouteProviderWakeReason::TOTAL_COUNT; | 837 current_wake_reason_ = MediaRouteProviderWakeReason::TOTAL_COUNT; |
837 } | 838 } |
838 | 839 |
839 } // namespace media_router | 840 } // namespace media_router |
OLD | NEW |