| 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 63a0931fd481765ec0e24451181ded11b25bb0c1..ec8e696fa07aae9209983e207d7ff18119f3d302 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());
|
| 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()
|
| + 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,12 @@ void MediaRouterMojoImpl::CreateRoute(
|
| bool incognito) {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
|
|
| - SetWakeReason(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),
|
| + MediaRouteProviderWakeReason::CREATE_ROUTE);
|
| }
|
|
|
| void MediaRouterMojoImpl::JoinRoute(
|
| @@ -312,12 +296,12 @@ void MediaRouterMojoImpl::JoinRoute(
|
| return;
|
| }
|
|
|
| - 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),
|
| + MediaRouteProviderWakeReason::JOIN_ROUTE);
|
| }
|
|
|
| void MediaRouterMojoImpl::ConnectRouteByRouteId(
|
| @@ -330,27 +314,30 @@ void MediaRouterMojoImpl::ConnectRouteByRouteId(
|
| bool incognito) {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
|
|
| - 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),
|
| + MediaRouteProviderWakeReason::CONNECT_ROUTE_BY_ROUTE_ID);
|
| }
|
|
|
| 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_->RunOrDefer(
|
| + base::BindOnce(&MediaRouterMojoImpl::DoTerminateRoute,
|
| + weak_factory_.GetWeakPtr(), route_id),
|
| + MediaRouteProviderWakeReason::TERMINATE_ROUTE);
|
| }
|
|
|
| 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_->RunOrDefer(
|
| + base::BindOnce(&MediaRouterMojoImpl::DoDetachRoute,
|
| + weak_factory_.GetWeakPtr(), route_id),
|
| + MediaRouteProviderWakeReason::DETACH_ROUTE);
|
| }
|
|
|
| void MediaRouterMojoImpl::SendRouteMessage(const MediaRoute::Id& route_id,
|
| @@ -358,10 +345,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_->RunOrDefer(
|
| + base::BindOnce(&MediaRouterMojoImpl::DoSendSessionMessage,
|
| + weak_factory_.GetWeakPtr(), route_id, message,
|
| + std::move(callback)),
|
| + MediaRouteProviderWakeReason::SEND_SESSION_MESSAGE);
|
| }
|
|
|
| void MediaRouterMojoImpl::SendRouteBinaryMessage(
|
| @@ -370,10 +358,11 @@ 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_->RunOrDefer(
|
| + base::BindOnce(&MediaRouterMojoImpl::DoSendSessionBinaryMessage,
|
| + weak_factory_.GetWeakPtr(), route_id,
|
| + base::Passed(std::move(data)), std::move(callback)),
|
| + MediaRouteProviderWakeReason::SEND_SESSION_BINARY_MESSAGE);
|
| }
|
|
|
| void MediaRouterMojoImpl::AddIssue(const IssueInfo& issue_info) {
|
| @@ -404,10 +393,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_->RunOrDefer(
|
| + base::BindOnce(&MediaRouterMojoImpl::DoSearchSinks,
|
| + weak_factory_.GetWeakPtr(), sink_id, source_id,
|
| + search_input, domain, std::move(sink_callback)),
|
| + MediaRouteProviderWakeReason::SEARCH_SINKS);
|
| }
|
|
|
| scoped_refptr<MediaRouteController> MediaRouterMojoImpl::GetRouteController(
|
| @@ -426,11 +416,12 @@ 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_->RunOrDefer(
|
| + base::BindOnce(&MediaRouterMojoImpl::DoCreateMediaRouteController,
|
| + weak_factory_.GetWeakPtr(), route_id,
|
| + std::move(mojo_media_controller_request),
|
| + route_controller->BindObserverPtr()),
|
| + MediaRouteProviderWakeReason::CREATE_MEDIA_ROUTE_CONTROLLER);
|
| route_controllers_.emplace(route_id, route_controller.get());
|
| return route_controller;
|
| }
|
| @@ -441,10 +432,10 @@ 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_->RunOrDefer(
|
| + base::Bind(&MediaRouterMojoImpl::DoProvideSinks,
|
| + weak_factory_.GetWeakPtr(), provider_name, std::move(sinks)),
|
| + MediaRouteProviderWakeReason::PROVIDE_SINKS);
|
| }
|
|
|
| bool MediaRouterMojoImpl::RegisterMediaSinksObserver(
|
| @@ -472,10 +463,10 @@ 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_->RunOrDefer(
|
| base::BindOnce(&MediaRouterMojoImpl::DoStartObservingMediaSinks,
|
| - base::Unretained(this), source_id));
|
| + weak_factory_.GetWeakPtr(), source_id),
|
| + MediaRouteProviderWakeReason::START_OBSERVING_MEDIA_SINKS);
|
| } else if (sinks_query->cached_sink_list) {
|
| observer->OnSinksUpdated(*sinks_query->cached_sink_list,
|
| sinks_query->origins);
|
| @@ -506,11 +497,12 @@ void MediaRouterMojoImpl::UnregisterMediaSinksObserver(
|
| // Otherwise, the MRPM would have discarded the queries already.
|
| if (availability_ !=
|
| mojom::MediaRouter::SinkAvailability::UNAVAILABLE) {
|
| - 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),
|
| + MediaRouteProviderWakeReason::STOP_OBSERVING_MEDIA_SINKS);
|
| } else {
|
| sinks_queries_.erase(source_id);
|
| }
|
| @@ -532,9 +524,10 @@ 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_->RunOrDefer(
|
| + base::BindOnce(&MediaRouterMojoImpl::DoStartObservingMediaRoutes,
|
| + weak_factory_.GetWeakPtr(), source_id),
|
| + MediaRouteProviderWakeReason::START_OBSERVING_MEDIA_ROUTES);
|
| // 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 +574,10 @@ 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_->RunOrDefer(
|
| + base::BindOnce(&MediaRouterMojoImpl::DoStopObservingMediaRoutes,
|
| + weak_factory_.GetWeakPtr(), source_id),
|
| + MediaRouteProviderWakeReason::STOP_OBSERVING_MEDIA_ROUTES);
|
| }
|
| }
|
|
|
| @@ -613,11 +607,10 @@ void MediaRouterMojoImpl::RegisterRouteMessageObserver(
|
| bool should_listen = !observer_list->might_have_observers();
|
| observer_list->AddObserver(observer);
|
| if (should_listen) {
|
| - 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),
|
| + MediaRouteProviderWakeReason::START_LISTENING_FOR_ROUTE_MESSAGES);
|
| }
|
| }
|
|
|
| @@ -634,11 +627,10 @@ void MediaRouterMojoImpl::UnregisterRouteMessageObserver(
|
| it->second->RemoveObserver(observer);
|
| if (!it->second->might_have_observers()) {
|
| message_observers_.erase(route_id);
|
| - 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),
|
| + MediaRouteProviderWakeReason::STOP_LISTENING_FOR_ROUTE_MESSAGES);
|
| }
|
| }
|
|
|
| @@ -819,9 +811,10 @@ 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));
|
| + base::Unretained(this), source_and_query.first),
|
| + MediaRouteProviderWakeReason::START_OBSERVING_MEDIA_SINKS);
|
| }
|
| }
|
| }
|
| @@ -917,76 +910,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 +945,15 @@ 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_->RunOrDefer(
|
| + base::BindOnce(&MediaRouterMojoImpl::DoEnsureMdnsDiscoveryEnabled,
|
| + weak_factory_.GetWeakPtr()),
|
| + MediaRouteProviderWakeReason::ENABLE_MDNS_DISCOVERY);
|
| should_enable_mdns_discovery_ = true;
|
| }
|
|
|
| @@ -1101,9 +988,10 @@ 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_->RunOrDefer(
|
| + base::BindOnce(&MediaRouterMojoImpl::DoUpdateMediaSinks,
|
| + weak_factory_.GetWeakPtr(), source_id),
|
| + MediaRouteProviderWakeReason::UPDATE_MEDIA_SINKS);
|
| }
|
|
|
| void MediaRouterMojoImpl::DoUpdateMediaSinks(
|
|
|