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