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

Unified Diff: chrome/browser/media/router/mojo/media_router_mojo_impl.cc

Issue 2949933002: [Media Router] Factor extension-related logic out of MediaRouterMojoImpl (Closed)
Patch Set: Remove includes Created 3 years, 5 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 side-by-side diff with in-line comments
Download patch
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(

Powered by Google App Engine
This is Rietveld 408576698