| 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
|
|
|