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

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

Issue 2728543009: [Media Router] Custom Controls 2 - add MediaRouter::GetRouteController() (Closed)
Patch Set: Address Derek's comments Created 3 years, 8 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.h
diff --git a/chrome/browser/media/router/mojo/media_router_mojo_impl.h b/chrome/browser/media/router/mojo/media_router_mojo_impl.h
index 8601ffeac592a74f94f67a6ec435b5ce1fc446a4..db7d8b00f9d5c0c9e318a555745e5e66c0a0946c 100644
--- a/chrome/browser/media/router/mojo/media_router_mojo_impl.h
+++ b/chrome/browser/media/router/mojo/media_router_mojo_impl.h
@@ -109,6 +109,8 @@ class MediaRouterMojoImpl : public MediaRouterBase,
const std::string& search_input,
const std::string& domain,
const MediaSinkSearchResponseCallback& sink_callback) override;
+ scoped_refptr<MediaRouteController> GetRouteController(
+ const MediaRoute::Id& route_id) override;
const std::string& media_route_provider_extension_id() const {
return media_route_provider_extension_id_;
@@ -142,6 +144,15 @@ class MediaRouterMojoImpl : public MediaRouterBase,
FRIEND_TEST_ALL_PREFIXES(MediaRouterMojoImplTest,
RouteMessagesMultipleObservers);
FRIEND_TEST_ALL_PREFIXES(MediaRouterMojoImplTest, HandleIssue);
+ FRIEND_TEST_ALL_PREFIXES(MediaRouterMojoImplTest, GetRouteController);
+ FRIEND_TEST_ALL_PREFIXES(MediaRouterMojoImplTest,
+ GetRouteControllerMultipleTimes);
+ FRIEND_TEST_ALL_PREFIXES(MediaRouterMojoImplTest,
+ GetRouteControllerAfterInvalidation);
+ FRIEND_TEST_ALL_PREFIXES(MediaRouterMojoImplTest,
+ GetRouteControllerAfterRouteInvalidation);
+ FRIEND_TEST_ALL_PREFIXES(MediaRouterMojoImplTest,
+ FailToCreateRouteController);
FRIEND_TEST_ALL_PREFIXES(MediaRouterMojoExtensionTest,
DeferredBindingAndSuspension);
FRIEND_TEST_ALL_PREFIXES(MediaRouterMojoExtensionTest,
@@ -212,11 +223,11 @@ class MediaRouterMojoImpl : public MediaRouterBase,
const extensions::Extension& extension);
// Enqueues a closure for later execution by ExecutePendingRequests().
- void EnqueueTask(const base::Closure& closure);
+ void EnqueueTask(base::OnceClosure closure);
// Runs a closure if the extension monitored by |extension_monitor_| is
// active, or defers it for later execution if the extension is suspended.
- void RunOrDefer(const base::Closure& request);
+ void RunOrDefer(base::OnceClosure request);
// Dispatches the Mojo requests queued in |pending_requests_|.
void ExecutePendingRequests();
@@ -234,6 +245,8 @@ class MediaRouterMojoImpl : public MediaRouterBase,
void UnregisterIssuesObserver(IssuesObserver* observer) override;
void RegisterRouteMessageObserver(RouteMessageObserver* observer) override;
void UnregisterRouteMessageObserver(RouteMessageObserver* observer) override;
+ void DetachRouteController(const MediaRoute::Id& route_id,
+ MediaRouteController* controller) override;
// Notifies |observer| of any existing cached routes, if it is still
// registered.
@@ -283,6 +296,13 @@ class MediaRouterMojoImpl : public MediaRouterBase,
const std::string& search_input,
const std::string& domain,
const MediaSinkSearchResponseCallback& sink_callback);
+ void DoCreateMediaRouteController(
+ const MediaRoute::Id& route_id,
+ mojom::MediaControllerRequest mojo_media_controller_request,
+ base::Callback<void(bool)> callback);
+ void DoSetMediaRouteStatusObserver(
+ const MediaRoute::Id& route_id,
+ mojom::MediaStatusObserverPtr mojo_observer);
// Error handler callback for |binding_| and |media_route_provider_|.
void OnConnectionError();
@@ -373,9 +393,16 @@ class MediaRouterMojoImpl : public MediaRouterBase,
void UpdateMediaSinks(const MediaSource::Id& source_id);
void DoUpdateMediaSinks(const MediaSource::Id& source_id);
+ // Invalidates and removes controllers from |route_controllers_| whose media
+ // routes do not appear in |routes|.
+ void RemoveInvalidRouteControllers(const std::vector<MediaRoute>& routes);
+
+ // Callback called by MRP's CreateMediaRouteController().
+ void OnMediaControllerCreated(const MediaRoute::Id& route_id, bool success);
+
// Pending requests queued to be executed once component extension
// becomes ready.
- std::deque<base::Closure> pending_requests_;
+ std::deque<base::OnceClosure> pending_requests_;
std::unordered_map<MediaSource::Id, std::unique_ptr<MediaSinksQuery>>
sinks_queries_;
@@ -426,6 +453,10 @@ class MediaRouterMojoImpl : public MediaRouterBase,
// initial event page wakeup attempt.
bool provider_version_was_recorded_ = false;
+ // Stores route controllers that can be used to send media commands to the
+ // extension.
+ std::unordered_map<MediaRoute::Id, MediaRouteController*> route_controllers_;
+
#if defined(OS_WIN)
// A pair of flags to ensure that mDNS discovery is only enabled on Windows
// when there will be appropriate context for the user to associate a firewall

Powered by Google App Engine
This is Rietveld 408576698