Chromium Code Reviews| Index: chrome/browser/media/router/mojo/media_router_mojo_impl.cc |
| diff --git a/chrome/browser/media/router/mojo/media_router_mojo_impl.cc b/chrome/browser/media/router/mojo/media_router_mojo_impl.cc |
| index 39acd69c62328e60b2b78272fa4942d9a5df745c..574c7901ab36a5aa5ab5e7882393b93ceda3897e 100644 |
| --- a/chrome/browser/media/router/mojo/media_router_mojo_impl.cc |
| +++ b/chrome/browser/media/router/mojo/media_router_mojo_impl.cc |
| @@ -16,6 +16,8 @@ |
| #include "base/stl_util.h" |
| #include "base/strings/stringprintf.h" |
| #include "chrome/browser/media/router/discovery/dial/dial_media_sink_service_proxy.h" |
| +#include "chrome/browser/media/router/event_page_request_manager.h" |
| +#include "chrome/browser/media/router/event_page_request_manager_factory.h" |
| #include "chrome/browser/media/router/issues_observer.h" |
| #include "chrome/browser/media/router/media_router_factory.h" |
| #include "chrome/browser/media/router/media_router_feature.h" |
| @@ -30,7 +32,7 @@ |
| #include "chrome/common/media_router/media_source_helper.h" |
| #include "chrome/common/media_router/route_message.h" |
| #include "content/public/browser/browser_thread.h" |
| -#include "extensions/browser/process_manager.h" |
| +#include "extensions/common/extension.h" |
| #define DVLOG_WITH_INSTANCE(level) \ |
| DVLOG(level) << "MR #" << instance_id_ << ": " |
| @@ -60,18 +62,16 @@ MediaRouterMojoImpl::MediaSinksQuery::MediaSinksQuery() = default; |
| MediaRouterMojoImpl::MediaSinksQuery::~MediaSinksQuery() = default; |
| -MediaRouterMojoImpl::MediaRouterMojoImpl( |
| - extensions::EventPageTracker* event_page_tracker, |
| - content::BrowserContext* context, |
| - FirewallCheck check_firewall) |
| - : event_page_tracker_(event_page_tracker), |
| - instance_id_(base::GenerateGUID()), |
| +MediaRouterMojoImpl::MediaRouterMojoImpl(content::BrowserContext* context, |
| + FirewallCheck check_firewall) |
| + : instance_id_(base::GenerateGUID()), |
| availability_(mojom::MediaRouter::SinkAvailability::UNAVAILABLE), |
| - current_wake_reason_(MediaRouteProviderWakeReason::TOTAL_COUNT), |
| context_(context), |
| + event_page_request_manager_( |
| + EventPageRequestManagerFactory::GetApiForBrowserContext(context)), |
| weak_factory_(this) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| - DCHECK(event_page_tracker_); |
| + DCHECK(event_page_request_manager_); |
| #if defined(OS_WIN) |
| if (check_firewall == FirewallCheck::RUN) { |
| CanFirewallUseLocalPorts( |
| @@ -105,12 +105,12 @@ void MediaRouterMojoImpl::BindToMojoRequest( |
| const extensions::Extension& extension) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| - binding_.reset( |
| - new mojo::Binding<mojom::MediaRouter>(this, std::move(request))); |
| + binding_ = base::MakeUnique<mojo::Binding<mojom::MediaRouter>>( |
| + this, std::move(request)); |
| binding_->set_connection_error_handler(base::Bind( |
| &MediaRouterMojoImpl::OnConnectionError, base::Unretained(this))); |
| - media_route_provider_extension_id_ = extension.id(); |
| + event_page_request_manager_->SetExtensionId(extension.id()); |
|
imcheng
2017/06/30 00:17:39
I think this method will need to move to the proxy
takumif
2017/07/01 01:16:44
I agree.
|
| if (!provider_version_was_recorded_) { |
| MediaRouterMojoMetrics::RecordMediaRouteProviderVersion(extension); |
| provider_version_was_recorded_ = true; |
| @@ -120,19 +120,9 @@ void MediaRouterMojoImpl::BindToMojoRequest( |
| void MediaRouterMojoImpl::OnConnectionError() { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| + event_page_request_manager_->OnMojoConnectionError(); |
| media_route_provider_.reset(); |
| binding_.reset(); |
| - |
| - // If |OnConnectionError| is invoked while there are pending requests, then |
| - // it means we tried to wake the extension, but weren't able to complete the |
| - // connection to media route provider. Since we do not know whether the error |
| - // is transient, reattempt the wakeup. |
| - if (!pending_requests_.empty()) { |
| - DLOG_WITH_INSTANCE(ERROR) << "A connection error while there are pending " |
| - "requests."; |
| - SetWakeReason(MediaRouteProviderWakeReason::CONNECTION_ERROR); |
| - AttemptWakeEventPage(); |
| - } |
| } |
| void MediaRouterMojoImpl::RegisterMediaRouteProvider( |
| @@ -147,16 +137,6 @@ void MediaRouterMojoImpl::RegisterMediaRouteProvider( |
| // ExecutePendingRequests(). |
| is_mdns_enabled_ = false; |
| #endif |
| - if (event_page_tracker_->IsEventPageSuspended( |
| - media_route_provider_extension_id_)) { |
| - DVLOG_WITH_INSTANCE(1) |
| - << "RegisterMediaRouteProvider was called while extension is " |
| - "suspended."; |
| - media_route_provider_.reset(); |
| - SetWakeReason(MediaRouteProviderWakeReason::REGISTER_MEDIA_ROUTE_PROVIDER); |
| - AttemptWakeEventPage(); |
| - return; |
| - } |
| media_route_provider_ = std::move(media_route_provider_ptr); |
| media_route_provider_.set_connection_error_handler(base::Bind( |
| @@ -169,10 +149,8 @@ void MediaRouterMojoImpl::RegisterMediaRouteProvider( |
| config->enable_dial_discovery = !media_router::DialLocalDiscoveryEnabled(); |
| config->enable_cast_discovery = !media_router::CastDiscoveryEnabled(); |
| std::move(callback).Run(instance_id_, std::move(config)); |
| - ExecutePendingRequests(); |
| + event_page_request_manager_->OnMojoConnectionsReady(); |
| SyncStateToMediaRouteProvider(); |
| - |
| - wakeup_attempt_count_ = 0; |
| } |
| void MediaRouterMojoImpl::OnIssue(const IssueInfo& issue) { |
| @@ -243,6 +221,11 @@ void MediaRouterMojoImpl::OnRoutesUpdated( |
| RemoveInvalidRouteControllers(routes); |
| } |
| +const std::string& MediaRouterMojoImpl::media_route_provider_extension_id() |
|
imcheng
2017/06/30 00:17:39
As a TODO we should remove this method and have th
takumif
2017/07/01 01:16:45
Right, I added a TODO in the .h to remove this met
|
| + const { |
| + return event_page_request_manager_->media_route_provider_extension_id(); |
| +} |
| + |
| void MediaRouterMojoImpl::RouteResponseReceived( |
| const std::string& presentation_id, |
| bool is_incognito, |
| @@ -286,11 +269,13 @@ void MediaRouterMojoImpl::CreateRoute( |
| bool incognito) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| - SetWakeReason(MediaRouteProviderWakeReason::CREATE_ROUTE); |
| + event_page_request_manager_->SetWakeReason( |
|
imcheng
2017/06/30 00:17:39
Will the pattern of SetWakeReason+RunOrDefer be re
takumif
2017/07/01 01:16:44
Yes, all the references to event_page_request_mana
|
| + MediaRouteProviderWakeReason::CREATE_ROUTE); |
| int tab_id = SessionTabHelper::IdForTab(web_contents); |
| - RunOrDefer(base::BindOnce(&MediaRouterMojoImpl::DoCreateRoute, |
| - base::Unretained(this), source_id, sink_id, origin, |
| - tab_id, std::move(callbacks), timeout, incognito)); |
| + event_page_request_manager_->RunOrDefer( |
| + base::BindOnce(&MediaRouterMojoImpl::DoCreateRoute, |
| + weak_factory_.GetWeakPtr(), source_id, sink_id, origin, |
| + tab_id, std::move(callbacks), timeout, incognito)); |
| } |
| void MediaRouterMojoImpl::JoinRoute( |
| @@ -312,12 +297,13 @@ void MediaRouterMojoImpl::JoinRoute( |
| return; |
| } |
| - SetWakeReason(MediaRouteProviderWakeReason::JOIN_ROUTE); |
| + event_page_request_manager_->SetWakeReason( |
| + MediaRouteProviderWakeReason::JOIN_ROUTE); |
| int tab_id = SessionTabHelper::IdForTab(web_contents); |
| - RunOrDefer(base::BindOnce(&MediaRouterMojoImpl::DoJoinRoute, |
| - base::Unretained(this), source_id, presentation_id, |
| - origin, tab_id, std::move(callbacks), timeout, |
| - incognito)); |
| + event_page_request_manager_->RunOrDefer( |
| + base::BindOnce(&MediaRouterMojoImpl::DoJoinRoute, |
| + weak_factory_.GetWeakPtr(), source_id, presentation_id, |
| + origin, tab_id, std::move(callbacks), timeout, incognito)); |
| } |
| void MediaRouterMojoImpl::ConnectRouteByRouteId( |
| @@ -330,27 +316,33 @@ void MediaRouterMojoImpl::ConnectRouteByRouteId( |
| bool incognito) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| - SetWakeReason(MediaRouteProviderWakeReason::CONNECT_ROUTE_BY_ROUTE_ID); |
| + event_page_request_manager_->SetWakeReason( |
| + MediaRouteProviderWakeReason::CONNECT_ROUTE_BY_ROUTE_ID); |
| int tab_id = SessionTabHelper::IdForTab(web_contents); |
| - RunOrDefer(base::BindOnce(&MediaRouterMojoImpl::DoConnectRouteByRouteId, |
| - base::Unretained(this), source_id, route_id, origin, |
| - tab_id, std::move(callbacks), timeout, incognito)); |
| + event_page_request_manager_->RunOrDefer( |
| + base::BindOnce(&MediaRouterMojoImpl::DoConnectRouteByRouteId, |
| + weak_factory_.GetWeakPtr(), source_id, route_id, origin, |
| + tab_id, std::move(callbacks), timeout, incognito)); |
| } |
| void MediaRouterMojoImpl::TerminateRoute(const MediaRoute::Id& route_id) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| DVLOG(2) << "TerminateRoute " << route_id; |
| - SetWakeReason(MediaRouteProviderWakeReason::TERMINATE_ROUTE); |
| - RunOrDefer(base::BindOnce(&MediaRouterMojoImpl::DoTerminateRoute, |
| - base::Unretained(this), route_id)); |
| + event_page_request_manager_->SetWakeReason( |
| + MediaRouteProviderWakeReason::TERMINATE_ROUTE); |
| + event_page_request_manager_->RunOrDefer( |
| + base::BindOnce(&MediaRouterMojoImpl::DoTerminateRoute, |
| + weak_factory_.GetWeakPtr(), route_id)); |
| } |
| void MediaRouterMojoImpl::DetachRoute(const MediaRoute::Id& route_id) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| - SetWakeReason(MediaRouteProviderWakeReason::DETACH_ROUTE); |
| - RunOrDefer(base::BindOnce(&MediaRouterMojoImpl::DoDetachRoute, |
| - base::Unretained(this), route_id)); |
| + event_page_request_manager_->SetWakeReason( |
| + MediaRouteProviderWakeReason::DETACH_ROUTE); |
| + event_page_request_manager_->RunOrDefer( |
| + base::BindOnce(&MediaRouterMojoImpl::DoDetachRoute, |
| + weak_factory_.GetWeakPtr(), route_id)); |
| } |
| void MediaRouterMojoImpl::SendRouteMessage(const MediaRoute::Id& route_id, |
| @@ -358,10 +350,11 @@ void MediaRouterMojoImpl::SendRouteMessage(const MediaRoute::Id& route_id, |
| SendRouteMessageCallback callback) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| - SetWakeReason(MediaRouteProviderWakeReason::SEND_SESSION_MESSAGE); |
| - RunOrDefer(base::BindOnce(&MediaRouterMojoImpl::DoSendSessionMessage, |
| - base::Unretained(this), route_id, message, |
| - std::move(callback))); |
| + event_page_request_manager_->SetWakeReason( |
| + MediaRouteProviderWakeReason::SEND_SESSION_MESSAGE); |
| + event_page_request_manager_->RunOrDefer(base::BindOnce( |
| + &MediaRouterMojoImpl::DoSendSessionMessage, weak_factory_.GetWeakPtr(), |
| + route_id, message, std::move(callback))); |
| } |
| void MediaRouterMojoImpl::SendRouteBinaryMessage( |
| @@ -370,10 +363,12 @@ void MediaRouterMojoImpl::SendRouteBinaryMessage( |
| SendRouteMessageCallback callback) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| - SetWakeReason(MediaRouteProviderWakeReason::SEND_SESSION_BINARY_MESSAGE); |
| - RunOrDefer(base::BindOnce(&MediaRouterMojoImpl::DoSendSessionBinaryMessage, |
| - base::Unretained(this), route_id, std::move(data), |
| - std::move(callback))); |
| + event_page_request_manager_->SetWakeReason( |
| + MediaRouteProviderWakeReason::SEND_SESSION_BINARY_MESSAGE); |
| + event_page_request_manager_->RunOrDefer( |
| + base::BindOnce(&MediaRouterMojoImpl::DoSendSessionBinaryMessage, |
| + weak_factory_.GetWeakPtr(), route_id, |
| + base::Passed(std::move(data)), std::move(callback))); |
| } |
| void MediaRouterMojoImpl::AddIssue(const IssueInfo& issue_info) { |
| @@ -404,10 +399,11 @@ void MediaRouterMojoImpl::SearchSinks( |
| MediaSinkSearchResponseCallback sink_callback) { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| - SetWakeReason(MediaRouteProviderWakeReason::SEARCH_SINKS); |
| - RunOrDefer(base::BindOnce(&MediaRouterMojoImpl::DoSearchSinks, |
| - base::Unretained(this), sink_id, source_id, |
| - search_input, domain, std::move(sink_callback))); |
| + event_page_request_manager_->SetWakeReason( |
| + MediaRouteProviderWakeReason::SEARCH_SINKS); |
| + event_page_request_manager_->RunOrDefer(base::BindOnce( |
| + &MediaRouterMojoImpl::DoSearchSinks, weak_factory_.GetWeakPtr(), sink_id, |
| + source_id, search_input, domain, std::move(sink_callback))); |
| } |
| scoped_refptr<MediaRouteController> MediaRouterMojoImpl::GetRouteController( |
| @@ -426,11 +422,13 @@ scoped_refptr<MediaRouteController> MediaRouterMojoImpl::GetRouteController( |
| new MediaRouteController(route_id, std::move(mojo_media_controller), |
| this); |
| - SetWakeReason(MediaRouteProviderWakeReason::CREATE_MEDIA_ROUTE_CONTROLLER); |
| - RunOrDefer(base::BindOnce(&MediaRouterMojoImpl::DoCreateMediaRouteController, |
| - base::Unretained(this), route_id, |
| - std::move(mojo_media_controller_request), |
| - route_controller->BindObserverPtr())); |
| + event_page_request_manager_->SetWakeReason( |
| + MediaRouteProviderWakeReason::CREATE_MEDIA_ROUTE_CONTROLLER); |
| + event_page_request_manager_->RunOrDefer( |
| + base::BindOnce(&MediaRouterMojoImpl::DoCreateMediaRouteController, |
| + weak_factory_.GetWeakPtr(), route_id, |
| + std::move(mojo_media_controller_request), |
| + route_controller->BindObserverPtr())); |
| route_controllers_.emplace(route_id, route_controller.get()); |
| return route_controller; |
| } |
| @@ -441,10 +439,11 @@ void MediaRouterMojoImpl::ProvideSinks(const std::string& provider_name, |
| DVLOG_WITH_INSTANCE(1) << "OnDialMediaSinkDiscovered found " << sinks.size() |
| << " devices..."; |
| - SetWakeReason(MediaRouteProviderWakeReason::PROVIDE_SINKS); |
| - RunOrDefer(base::Bind(&MediaRouterMojoImpl::DoProvideSinks, |
| - base::Unretained(this), provider_name, |
| - std::move(sinks))); |
| + event_page_request_manager_->SetWakeReason( |
| + MediaRouteProviderWakeReason::PROVIDE_SINKS); |
| + event_page_request_manager_->RunOrDefer( |
|
imcheng
2017/06/30 00:17:39
Seems like WakeReason could be part of the RunOrDe
takumif
2017/07/01 01:16:45
Added wake reason as a param to this method. This
|
| + base::Bind(&MediaRouterMojoImpl::DoProvideSinks, |
| + weak_factory_.GetWeakPtr(), provider_name, std::move(sinks))); |
| } |
| bool MediaRouterMojoImpl::RegisterMediaSinksObserver( |
| @@ -472,10 +471,11 @@ bool MediaRouterMojoImpl::RegisterMediaSinksObserver( |
| } else { |
| // Need to call MRPM to start observing sinks if the query is new. |
| if (is_new_query) { |
| - SetWakeReason(MediaRouteProviderWakeReason::START_OBSERVING_MEDIA_SINKS); |
| - RunOrDefer( |
| + event_page_request_manager_->SetWakeReason( |
| + MediaRouteProviderWakeReason::START_OBSERVING_MEDIA_SINKS); |
| + event_page_request_manager_->RunOrDefer( |
| base::BindOnce(&MediaRouterMojoImpl::DoStartObservingMediaSinks, |
| - base::Unretained(this), source_id)); |
| + weak_factory_.GetWeakPtr(), source_id)); |
| } else if (sinks_query->cached_sink_list) { |
| observer->OnSinksUpdated(*sinks_query->cached_sink_list, |
| sinks_query->origins); |
| @@ -506,11 +506,13 @@ void MediaRouterMojoImpl::UnregisterMediaSinksObserver( |
| // Otherwise, the MRPM would have discarded the queries already. |
| if (availability_ != |
| mojom::MediaRouter::SinkAvailability::UNAVAILABLE) { |
| - SetWakeReason(MediaRouteProviderWakeReason::STOP_OBSERVING_MEDIA_SINKS); |
| + event_page_request_manager_->SetWakeReason( |
| + MediaRouteProviderWakeReason::STOP_OBSERVING_MEDIA_SINKS); |
| // The |sinks_queries_| entry will be removed in the immediate or deferred |
| // |DoStopObservingMediaSinks| call. |
| - RunOrDefer(base::BindOnce(&MediaRouterMojoImpl::DoStopObservingMediaSinks, |
| - base::Unretained(this), source_id)); |
| + event_page_request_manager_->RunOrDefer( |
| + base::BindOnce(&MediaRouterMojoImpl::DoStopObservingMediaSinks, |
| + weak_factory_.GetWeakPtr(), source_id)); |
| } else { |
| sinks_queries_.erase(source_id); |
| } |
| @@ -532,9 +534,11 @@ void MediaRouterMojoImpl::RegisterMediaRoutesObserver( |
| routes_query->observers.AddObserver(observer); |
| if (is_new_query) { |
| - SetWakeReason(MediaRouteProviderWakeReason::START_OBSERVING_MEDIA_ROUTES); |
| - RunOrDefer(base::BindOnce(&MediaRouterMojoImpl::DoStartObservingMediaRoutes, |
| - base::Unretained(this), source_id)); |
| + event_page_request_manager_->SetWakeReason( |
| + MediaRouteProviderWakeReason::START_OBSERVING_MEDIA_ROUTES); |
| + event_page_request_manager_->RunOrDefer( |
| + base::BindOnce(&MediaRouterMojoImpl::DoStartObservingMediaRoutes, |
| + weak_factory_.GetWeakPtr(), source_id)); |
| // The MRPM will call MediaRouterMojoImpl::OnRoutesUpdated() soon, if there |
| // are any existing routes the new observer should be aware of. |
| } else if (routes_query->cached_route_list) { |
| @@ -581,9 +585,11 @@ void MediaRouterMojoImpl::UnregisterMediaRoutesObserver( |
| // is not inside the ObserverList iteration. |
| it->second->observers.RemoveObserver(observer); |
| if (!it->second->observers.might_have_observers()) { |
| - SetWakeReason(MediaRouteProviderWakeReason::STOP_OBSERVING_MEDIA_ROUTES); |
| - RunOrDefer(base::BindOnce(&MediaRouterMojoImpl::DoStopObservingMediaRoutes, |
| - base::Unretained(this), source_id)); |
| + event_page_request_manager_->SetWakeReason( |
| + MediaRouteProviderWakeReason::STOP_OBSERVING_MEDIA_ROUTES); |
| + event_page_request_manager_->RunOrDefer( |
| + base::BindOnce(&MediaRouterMojoImpl::DoStopObservingMediaRoutes, |
| + weak_factory_.GetWeakPtr(), source_id)); |
| } |
| } |
| @@ -613,11 +619,11 @@ void MediaRouterMojoImpl::RegisterRouteMessageObserver( |
| bool should_listen = !observer_list->might_have_observers(); |
| observer_list->AddObserver(observer); |
| if (should_listen) { |
| - SetWakeReason( |
| + event_page_request_manager_->SetWakeReason( |
| MediaRouteProviderWakeReason::START_LISTENING_FOR_ROUTE_MESSAGES); |
| - RunOrDefer( |
| + event_page_request_manager_->RunOrDefer( |
| base::Bind(&MediaRouterMojoImpl::DoStartListeningForRouteMessages, |
| - base::Unretained(this), route_id)); |
| + weak_factory_.GetWeakPtr(), route_id)); |
| } |
| } |
| @@ -634,11 +640,11 @@ void MediaRouterMojoImpl::UnregisterRouteMessageObserver( |
| it->second->RemoveObserver(observer); |
| if (!it->second->might_have_observers()) { |
| message_observers_.erase(route_id); |
| - SetWakeReason( |
| + event_page_request_manager_->SetWakeReason( |
| MediaRouteProviderWakeReason::STOP_LISTENING_FOR_ROUTE_MESSAGES); |
| - RunOrDefer( |
| + event_page_request_manager_->RunOrDefer( |
| base::BindOnce(&MediaRouterMojoImpl::DoStopListeningForRouteMessages, |
| - base::Unretained(this), route_id)); |
| + weak_factory_.GetWeakPtr(), route_id)); |
| } |
| } |
| @@ -819,7 +825,7 @@ void MediaRouterMojoImpl::OnSinkAvailabilityUpdated( |
| } else { |
| // Sinks are now available. Tell MRPM to start all sink queries again. |
| for (const auto& source_and_query : sinks_queries_) { |
| - RunOrDefer( |
| + event_page_request_manager_->RunOrDefer( |
| base::BindOnce(&MediaRouterMojoImpl::DoStartObservingMediaSinks, |
| base::Unretained(this), source_and_query.first)); |
| } |
| @@ -917,76 +923,6 @@ void MediaRouterMojoImpl::DoStopObservingMediaRoutes( |
| routes_queries_.erase(source_id); |
| } |
| -void MediaRouterMojoImpl::EnqueueTask(base::OnceClosure closure) { |
| - pending_requests_.push_back(std::move(closure)); |
| - if (pending_requests_.size() > kMaxPendingRequests) { |
| - DLOG_WITH_INSTANCE(ERROR) << "Reached max queue size. Dropping oldest " |
| - << "request."; |
| - pending_requests_.pop_front(); |
| - } |
| - DVLOG_WITH_INSTANCE(2) << "EnqueueTask (queue-length=" |
| - << pending_requests_.size() << ")"; |
| -} |
| - |
| -void MediaRouterMojoImpl::RunOrDefer(base::OnceClosure request) { |
| - DCHECK(event_page_tracker_); |
| - |
| - if (media_route_provider_extension_id_.empty()) { |
| - DVLOG_WITH_INSTANCE(1) << "Extension ID not known yet."; |
| - EnqueueTask(std::move(request)); |
| - } else if (event_page_tracker_->IsEventPageSuspended( |
| - media_route_provider_extension_id_)) { |
| - DVLOG_WITH_INSTANCE(1) << "Waking event page."; |
| - EnqueueTask(std::move(request)); |
| - AttemptWakeEventPage(); |
| - media_route_provider_.reset(); |
| - } else if (!media_route_provider_) { |
| - DVLOG_WITH_INSTANCE(1) << "Extension is awake, awaiting ProvideMediaRouter " |
| - " to be called."; |
| - EnqueueTask(std::move(request)); |
| - } else { |
| - std::move(request).Run(); |
| - } |
| -} |
| - |
| -void MediaRouterMojoImpl::AttemptWakeEventPage() { |
| - ++wakeup_attempt_count_; |
| - if (wakeup_attempt_count_ > kMaxWakeupAttemptCount) { |
| - DLOG_WITH_INSTANCE(ERROR) << "Attempted too many times to wake up event " |
| - << "page."; |
| - DrainPendingRequests(); |
| - wakeup_attempt_count_ = 0; |
| - MediaRouterMojoMetrics::RecordMediaRouteProviderWakeup( |
| - MediaRouteProviderWakeup::ERROR_TOO_MANY_RETRIES); |
| - return; |
| - } |
| - |
| - DVLOG_WITH_INSTANCE(1) << "Attempting to wake up event page: attempt " |
| - << wakeup_attempt_count_; |
| - |
| - // This return false if the extension is already awake. |
| - // Callback is bound using WeakPtr because |event_page_tracker_| outlives |
| - // |this|. |
| - if (!event_page_tracker_->WakeEventPage( |
| - media_route_provider_extension_id_, |
| - base::Bind(&MediaRouterMojoImpl::EventPageWakeComplete, |
| - weak_factory_.GetWeakPtr()))) { |
| - DLOG_WITH_INSTANCE(ERROR) << "Failed to schedule a wakeup for event page."; |
| - } |
| -} |
| - |
| -void MediaRouterMojoImpl::ExecutePendingRequests() { |
| - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| - DCHECK(media_route_provider_); |
| - DCHECK(event_page_tracker_); |
| - DCHECK(!media_route_provider_extension_id_.empty()); |
| - |
| - for (auto& next_request : pending_requests_) |
| - std::move(next_request).Run(); |
| - |
| - pending_requests_.clear(); |
| -} |
| - |
| void MediaRouterMojoImpl::SyncStateToMediaRouteProvider() { |
| DCHECK(media_route_provider_); |
| @@ -1022,51 +958,16 @@ void MediaRouterMojoImpl::SyncStateToMediaRouteProvider() { |
| StartDiscovery(); |
| } |
| -void MediaRouterMojoImpl::EventPageWakeComplete(bool success) { |
| - if (success) { |
| - MediaRouterMojoMetrics::RecordMediaRouteProviderWakeReason( |
| - current_wake_reason_); |
| - ClearWakeReason(); |
| - MediaRouterMojoMetrics::RecordMediaRouteProviderWakeup( |
| - MediaRouteProviderWakeup::SUCCESS); |
| - return; |
| - } |
| - |
| - // This is likely an non-retriable error. Drop the pending requests. |
| - DLOG_WITH_INSTANCE(ERROR) |
| - << "An error encountered while waking the event page."; |
| - ClearWakeReason(); |
| - DrainPendingRequests(); |
| - MediaRouterMojoMetrics::RecordMediaRouteProviderWakeup( |
| - MediaRouteProviderWakeup::ERROR_UNKNOWN); |
| -} |
| - |
| -void MediaRouterMojoImpl::DrainPendingRequests() { |
| - DLOG_WITH_INSTANCE(ERROR) |
| - << "Draining request queue. (queue-length=" << pending_requests_.size() |
| - << ")"; |
| - pending_requests_.clear(); |
| -} |
| - |
| -void MediaRouterMojoImpl::SetWakeReason(MediaRouteProviderWakeReason reason) { |
| - DCHECK(reason != MediaRouteProviderWakeReason::TOTAL_COUNT); |
| - if (current_wake_reason_ == MediaRouteProviderWakeReason::TOTAL_COUNT) |
| - current_wake_reason_ = reason; |
| -} |
| - |
| -void MediaRouterMojoImpl::ClearWakeReason() { |
| - DCHECK(current_wake_reason_ != MediaRouteProviderWakeReason::TOTAL_COUNT); |
| - current_wake_reason_ = MediaRouteProviderWakeReason::TOTAL_COUNT; |
| -} |
| - |
| #if defined(OS_WIN) |
| void MediaRouterMojoImpl::EnsureMdnsDiscoveryEnabled() { |
| if (is_mdns_enabled_) |
| return; |
| - SetWakeReason(MediaRouteProviderWakeReason::ENABLE_MDNS_DISCOVERY); |
| - RunOrDefer(base::BindOnce(&MediaRouterMojoImpl::DoEnsureMdnsDiscoveryEnabled, |
| - base::Unretained(this))); |
| + event_page_request_manager_->SetWakeReason( |
| + MediaRouteProviderWakeReason::ENABLE_MDNS_DISCOVERY); |
| + event_page_request_manager_->RunOrDefer( |
| + base::BindOnce(&MediaRouterMojoImpl::DoEnsureMdnsDiscoveryEnabled, |
| + weak_factory_.GetWeakPtr())); |
| should_enable_mdns_discovery_ = true; |
| } |
| @@ -1101,9 +1002,11 @@ void MediaRouterMojoImpl::StartDiscovery() { |
| void MediaRouterMojoImpl::UpdateMediaSinks( |
| const MediaSource::Id& source_id) { |
| - SetWakeReason(MediaRouteProviderWakeReason::UPDATE_MEDIA_SINKS); |
| - RunOrDefer(base::BindOnce(&MediaRouterMojoImpl::DoUpdateMediaSinks, |
| - base::Unretained(this), source_id)); |
| + event_page_request_manager_->SetWakeReason( |
| + MediaRouteProviderWakeReason::UPDATE_MEDIA_SINKS); |
| + event_page_request_manager_->RunOrDefer( |
| + base::BindOnce(&MediaRouterMojoImpl::DoUpdateMediaSinks, |
| + weak_factory_.GetWeakPtr(), source_id)); |
| } |
| void MediaRouterMojoImpl::DoUpdateMediaSinks( |