| Index: chrome/browser/media/router/offscreen_presentation_manager.h
|
| diff --git a/chrome/browser/media/router/offscreen_presentation_manager.h b/chrome/browser/media/router/offscreen_presentation_manager.h
|
| index df276101817b84457e4d5f89f3ab08bffc4f3997..8eec5331cb0072b0d0bf73168723cf24f8a33f0e 100644
|
| --- a/chrome/browser/media/router/offscreen_presentation_manager.h
|
| +++ b/chrome/browser/media/router/offscreen_presentation_manager.h
|
| @@ -18,20 +18,6 @@
|
|
|
| class GURL;
|
|
|
| -// TODO(zhaobin): move these back to
|
| -// content/public/browser/presentation_service_delegate.h when they are actually
|
| -// used in content.
|
| -namespace content {
|
| -// TODO(zhaobin): A class stub for blink::mojom::PresentationConnectionPtr.
|
| -// presentation.mojom is under security review. Change this to
|
| -// blink::mojom::PresentationConnectionPtr once that is done.
|
| -class PresentationConnectionPtr {};
|
| -
|
| -using ReceiverConnectionAvailableCallback =
|
| - base::Callback<void(const content::PresentationSessionInfo&,
|
| - PresentationConnectionPtr)>;
|
| -} // namespace content
|
| -
|
| namespace media_router {
|
| // Manages all offscreen presentations started in the associated Profile and
|
| // facilitates communication between the controllers and the receiver of an
|
| @@ -114,31 +100,32 @@ class OffscreenPresentationManager : public KeyedService {
|
| // exists.
|
| // |controller|: Not owned by this class. Ownership is transferred to the
|
| // presentation receiver via |receiver_callback| passed below.
|
| - void RegisterOffscreenPresentationController(
|
| + virtual void RegisterOffscreenPresentationController(
|
| const std::string& presentation_id,
|
| const GURL& presentation_url,
|
| const RenderFrameHostId& render_frame_id,
|
| - content::PresentationConnectionPtr controller);
|
| + content::PresentationConnectionPtr controller_conn_ptr,
|
| + content::PresentationConnectionRequest receiver_conn_request);
|
|
|
| // Unregisters controller PresentationConnectionPtr to presentation with
|
| // |presentation_id|, |render_frame_id|. It does nothing if there is no
|
| // controller that matches the provided arguments. It removes presentation
|
| // that matches the arguments if the presentation has no receiver_callback and
|
| // any other pending controller.
|
| - void UnregisterOffscreenPresentationController(
|
| + virtual void UnregisterOffscreenPresentationController(
|
| const std::string& presentation_id,
|
| const RenderFrameHostId& render_frame_id);
|
|
|
| // Registers ReceiverConnectionAvailableCallback to presentation
|
| // with |presentation_id|.
|
| - void OnOffscreenPresentationReceiverCreated(
|
| + virtual void OnOffscreenPresentationReceiverCreated(
|
| const std::string& presentation_id,
|
| const GURL& presentation_url,
|
| const content::ReceiverConnectionAvailableCallback& receiver_callback);
|
|
|
| // Unregisters the ReceiverConnectionAvailableCallback associated with
|
| // |presentation_id|.
|
| - void OnOffscreenPresentationReceiverTerminated(
|
| + virtual void OnOffscreenPresentationReceiverTerminated(
|
| const std::string& presentation_id);
|
|
|
| private:
|
| @@ -157,8 +144,10 @@ class OffscreenPresentationManager : public KeyedService {
|
| // Register |controller| with |render_frame_id|. If |receiver_callback_| has
|
| // been set, invoke |receiver_callback_| with |controller| as parameter,
|
| // else store |controller| in |pending_controllers_| map.
|
| - void RegisterController(const RenderFrameHostId& render_frame_id,
|
| - content::PresentationConnectionPtr controller);
|
| + void RegisterController(
|
| + const RenderFrameHostId& render_frame_id,
|
| + content::PresentationConnectionPtr controller_conn_ptr,
|
| + content::PresentationConnectionRequest receiver_conn_request);
|
|
|
| // Unregister controller with |render_frame_id|. Do nothing if there is no
|
| // pending controller with |render_frame_id|.
|
| @@ -185,10 +174,21 @@ class OffscreenPresentationManager : public KeyedService {
|
| // Callback to invoke whenever a receiver connection is available.
|
| content::ReceiverConnectionAvailableCallback receiver_callback_;
|
|
|
| + struct ControllerConnection {
|
| + public:
|
| + ControllerConnection(
|
| + content::PresentationConnectionPtr controller_conn_ptr,
|
| + content::PresentationConnectionRequest receiver_conn_request);
|
| + ~ControllerConnection();
|
| +
|
| + content::PresentationConnectionPtr controller_conn_ptr;
|
| + content::PresentationConnectionRequest receiver_conn_request;
|
| + };
|
| +
|
| // Contains Mojo pointers to controller PresentationConnections registered
|
| // via |RegisterController()| before |receiver_callback_| is set.
|
| std::unordered_map<RenderFrameHostId,
|
| - content::PresentationConnectionPtr,
|
| + std::unique_ptr<ControllerConnection>,
|
| RenderFrameHostIdHasher>
|
| pending_controllers_;
|
|
|
| @@ -198,6 +198,9 @@ class OffscreenPresentationManager : public KeyedService {
|
| private:
|
| friend class OffscreenPresentationManagerFactory;
|
| friend class OffscreenPresentationManagerTest;
|
| + friend class MockOffscreenPresentationManager;
|
| + FRIEND_TEST_ALL_PREFIXES(PresentationServiceDelegateImplTest,
|
| + ConnectToOffscreenPresentation);
|
|
|
| // Used by OffscreenPresentationManagerFactory::GetOrCreateForBrowserContext.
|
| OffscreenPresentationManager();
|
|
|