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

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: Combine CreateMRController and SetMRStatusObserver 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 f3f9d3d7b190ab84cdb6c0fa62f51936b1f8d6e3..bcfbd50d47ee0da7dcf16bdfad07f94f7bff5856 100644
--- a/chrome/browser/media/router/mojo/media_router_mojo_impl.h
+++ b/chrome/browser/media/router/mojo/media_router_mojo_impl.h
@@ -111,6 +111,8 @@ class MediaRouterMojoImpl : public MediaRouterBase,
const MediaSinkSearchResponseCallback& sink_callback) override;
void ProvideSinks(const std::string& provider_name,
const std::vector<MediaSinkInternal>& sinks) 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_;
@@ -144,6 +146,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,
@@ -214,11 +225,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();
@@ -236,6 +247,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.
@@ -285,6 +298,10 @@ 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,
+ mojom::MediaStatusObserverPtr mojo_observer);
void DoProvideSinks(const std::string& provider_name,
const std::vector<MediaSinkInternal>& sinks);
@@ -378,9 +395,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_;
@@ -431,6 +455,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
« no previous file with comments | « chrome/browser/media/router/mojo/media_router.mojom ('k') | chrome/browser/media/router/mojo/media_router_mojo_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698