| 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..d3a3dabfa8d6f9028898bc54ab51c33376d21012 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
|
| @@ -51,31 +37,36 @@ namespace media_router {
|
| // manager->OnOffscreenPresentationReceiverCreated(presentation_id,
|
| // base::Bind(&PresentationServiceImpl::OnReceiverConnectionAvailable));
|
| //
|
| -// Controller frame establishes connection with the receiver side, resulting
|
| +// Controlling frame establishes connection with the receiver side, resulting
|
| // in a connection with the two endpoints being the controller
|
| // PresentationConnectionPtr and receiver PresentationConnectionPtr.
|
| // Note calling this will trigger receiver frame's
|
| // PresentationServiceImpl::OnReceiverConnectionAvailable.
|
| //
|
| // manager->RegisterOffscreenPresentationController(
|
| -// presentation_id, controller_frame_id, controller_ptr);
|
| +// presentation_id, controller_frame_id, controller_connection_ptr,
|
| +// receiver_connection_request);
|
| //
|
| // Invoked on receiver's PresentationServiceImpl when controller connection is
|
| // established.
|
| //
|
| // |presentation_receiver_client_|: blink::mojom::PresentationServiceClienPtr
|
| // for the presentation receiver.
|
| -// |PresentationConnectionPtr|: blink::mojom::PresentationConnectionPtr for
|
| -// blink::PresentationConnection object in render process.
|
| +// |controller_connection_ptr|: blink::mojom::PresentationConnectionPtr for
|
| +// blink::PresentationConnection object in controlling frame's render process.
|
| +// |receiver_connection_request|: Mojo InterfaceRequest to be bind to
|
| +// blink::PresentationConnection object in receiver frame's render process.
|
| // void PresentationServiceImpl::OnReceiverConnectionAvailable(
|
| // const content::PresentationSessionInfo& session,
|
| -// PresentationConnectionPtr&& controller) {
|
| +// PresentationConnectionPtr controller_connection_ptr,
|
| +// PresentationConnectionRequest receiver_connection_request) {
|
| // presentation_receiver_client_->OnReceiverConnectionAvailable(
|
| // blink::mojom::PresentationSessionInfo::From(session_info),
|
| -// std::move(controller));
|
| +// std::move(controller_connection_ptr),
|
| +// std::move(receiver_connection_request));
|
| // }
|
| //
|
| -// Send message from controller/receiver to receiver/controller:
|
| +// Send message from controlling/receiver frame to receiver/controlling frame:
|
| //
|
| // |target_connection_|: member variable of
|
| // blink::mojom::PresentationConnectionPtr type,
|
| @@ -87,9 +78,8 @@ namespace media_router {
|
| // target_connection_->OnSessionMessageReceived(std::move(session_message));
|
| // }
|
| //
|
| -// A controller or receiver leaves the offscreen presentation (e.g.,
|
| -// due to navigation) by unregistering themselves from
|
| -// OffscreenPresentation object.
|
| +// A controller or receiver leaves the offscreen presentation (e.g., due to
|
| +// navigation) by unregistering themselves from OffscreenPresentation object.
|
| //
|
| // When the receiver is no longer associated with an offscreen presentation, it
|
| // shall unregister itself with OffscreenPresentationManager. Unregistration
|
| @@ -108,57 +98,63 @@ class OffscreenPresentationManager : public KeyedService {
|
| public:
|
| ~OffscreenPresentationManager() override;
|
|
|
| - // Registers controller PresentationConnectionPtr to presentation
|
| - // with |presentation_id|, |render_frame_id|.
|
| + // Registers controller PresentationConnectionPtr to presentation with
|
| + // |presentation_id| and |render_frame_id|.
|
| // Creates a new presentation if no presentation with |presentation_id|
|
| // exists.
|
| - // |controller|: Not owned by this class. Ownership is transferred to the
|
| - // presentation receiver via |receiver_callback| passed below.
|
| - void RegisterOffscreenPresentationController(
|
| + // |controller_connection_ptr|, |receiver_connection_request|: Not owned by
|
| + // this class. Ownership is transferred to presentation receiver via
|
| + // |receiver_callback| passed below.
|
| + virtual void RegisterOffscreenPresentationController(
|
| const std::string& presentation_id,
|
| const GURL& presentation_url,
|
| const RenderFrameHostId& render_frame_id,
|
| - content::PresentationConnectionPtr controller);
|
| + content::PresentationConnectionPtr controller_connection_ptr,
|
| + content::PresentationConnectionRequest receiver_connection_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(
|
| + // that matches the arguments if the presentation has no |receiver_callback|
|
| + // and any other pending controller.
|
| + virtual void UnregisterOffscreenPresentationController(
|
| const std::string& presentation_id,
|
| const RenderFrameHostId& render_frame_id);
|
|
|
| - // Registers ReceiverConnectionAvailableCallback to presentation
|
| - // with |presentation_id|.
|
| - void OnOffscreenPresentationReceiverCreated(
|
| + // Registers |receiver_callback| to presentation with |presentation_id| and
|
| + // |presentation_url|.
|
| + virtual void OnOffscreenPresentationReceiverCreated(
|
| const std::string& presentation_id,
|
| const GURL& presentation_url,
|
| const content::ReceiverConnectionAvailableCallback& receiver_callback);
|
|
|
| - // Unregisters the ReceiverConnectionAvailableCallback associated with
|
| + // Unregisters ReceiverConnectionAvailableCallback associated with
|
| // |presentation_id|.
|
| - void OnOffscreenPresentationReceiverTerminated(
|
| + virtual void OnOffscreenPresentationReceiverTerminated(
|
| const std::string& presentation_id);
|
|
|
| private:
|
| // Represents an offscreen presentation registered with
|
| - // OffscreenPresentationManager.
|
| - // Contains callback to the receiver to inform it of new connections
|
| - // established from a controller.
|
| - // Contains set of controllers registered to OffscreenPresentationManager
|
| - // before corresponding receiver.
|
| + // OffscreenPresentationManager. Contains callback to the receiver to inform
|
| + // it of new connections established from a controller. Contains set of
|
| + // controllers registered to OffscreenPresentationManager before corresponding
|
| + // receiver.
|
| class OffscreenPresentation {
|
| public:
|
| OffscreenPresentation(const std::string& presentation_id,
|
| const GURL& presentation_url);
|
| ~OffscreenPresentation();
|
|
|
| - // 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);
|
| + // Register controller with |render_frame_id|. If |receiver_callback_| has
|
| + // been set, invoke |receiver_callback_| with |controller_connection_ptr|
|
| + // and |receiver_connection_request| as parameter, else creates a
|
| + // ControllerConnection object with |controller_connection_ptr| and
|
| + // |receiver_connection_request|, and store it in |pending_controllers_|
|
| + // map.
|
| + void RegisterController(
|
| + const RenderFrameHostId& render_frame_id,
|
| + content::PresentationConnectionPtr controller_connection_ptr,
|
| + content::PresentationConnectionRequest receiver_connection_request);
|
|
|
| // Unregister controller with |render_frame_id|. Do nothing if there is no
|
| // pending controller with |render_frame_id|.
|
| @@ -185,10 +181,26 @@ class OffscreenPresentationManager : public KeyedService {
|
| // Callback to invoke whenever a receiver connection is available.
|
| content::ReceiverConnectionAvailableCallback receiver_callback_;
|
|
|
| - // Contains Mojo pointers to controller PresentationConnections registered
|
| - // via |RegisterController()| before |receiver_callback_| is set.
|
| + // Stores controller information.
|
| + // |controller_connection_ptr|: Mojo::InterfacePtr to
|
| + // blink::PresentationConnection object in controlling frame;
|
| + // |receiver_connection_request|: Mojo::InterfaceRequest to be bind to
|
| + // blink::PresentationConnection object in receiver frame.
|
| + struct ControllerConnection {
|
| + public:
|
| + ControllerConnection(
|
| + content::PresentationConnectionPtr controller_connection_ptr,
|
| + content::PresentationConnectionRequest receiver_connection_request);
|
| + ~ControllerConnection();
|
| +
|
| + content::PresentationConnectionPtr controller_connection_ptr;
|
| + content::PresentationConnectionRequest receiver_connection_request;
|
| + };
|
| +
|
| + // Contains ControllerConnection objects registered via
|
| + // |RegisterController()| before |receiver_callback_| is set.
|
| std::unordered_map<RenderFrameHostId,
|
| - content::PresentationConnectionPtr,
|
| + std::unique_ptr<ControllerConnection>,
|
| RenderFrameHostIdHasher>
|
| pending_controllers_;
|
|
|
| @@ -198,6 +210,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();
|
|
|