Index: chrome/browser/media/router/media_router_dialog_controller.h |
diff --git a/chrome/browser/media/router/media_router_dialog_controller.h b/chrome/browser/media/router/media_router_dialog_controller.h |
index a627b44d91d7c8baa5f41ebc178a359ce57d3acc..86e3620a5bc970d644939d8ce675d792e2847af8 100644 |
--- a/chrome/browser/media/router/media_router_dialog_controller.h |
+++ b/chrome/browser/media/router/media_router_dialog_controller.h |
@@ -6,7 +6,10 @@ |
#define CHROME_BROWSER_MEDIA_ROUTER_MEDIA_ROUTER_DIALOG_CONTROLLER_H_ |
#include "base/macros.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "base/threading/thread_checker.h" |
#include "chrome/browser/media/router/create_presentation_session_request.h" |
+#include "content/public/browser/web_contents_observer.h" |
namespace content { |
class WebContents; |
@@ -14,14 +17,14 @@ class WebContents; |
namespace media_router { |
-// An implementation of this interface is tied to a WebContents known as the |
-// initiator, and is lazily created when a Media Router dialog needs to be |
-// shown. The MediaRouterDialogController allows creating, querying, and |
-// removing a Media Router dialog modal to the initiator WebContents. |
+// An abstract base class for Media Router dialog controllers. Tied to a |
+// WebContents known as the |initiator|, and is lazily created when a Media |
+// Router dialog needs to be shown. The MediaRouterDialogController allows |
+// showing and closing a Media Router dialog modal to the initiator WebContents. |
// This class is not thread safe and must be called on the UI thread. |
class MediaRouterDialogController { |
public: |
- virtual ~MediaRouterDialogController() = default; |
+ virtual ~MediaRouterDialogController(); |
// Gets a reference to the MediaRouterDialogController associated with |
// |web_contents|, creating one if it does not exist. The returned pointer is |
@@ -29,13 +32,59 @@ class MediaRouterDialogController { |
static MediaRouterDialogController* GetOrCreateForWebContents( |
content::WebContents* web_contents); |
- // Creates a Media Router modal dialog using the initiator and parameters |
- // specified in |request|. If the dialog already exists, brings the dialog |
- // to the front, but does not change the dialog with |request|. |
- // Returns WebContents for the media router dialog if a dialog was created. |
- // Otherwise returns false and |request| is deleted. |
- virtual bool ShowMediaRouterDialogForPresentation( |
- scoped_ptr<CreatePresentationSessionRequest> request) = 0; |
+ // Shows the media router dialog modal to |initiator_| and the parameters |
+ // specified in |request|. |
+ // Creates the dialog if it did not exist prior to this call, returns true. |
+ // If the dialog already exists, brings it to the front but doesn't change the |
+ // dialog with |request|, returns false and |request| is deleted. |
+ bool ShowMediaRouterDialogForPresentation( |
+ scoped_ptr<CreatePresentationSessionRequest> request); |
+ |
+ // Shows the media router dialog modal to |initiator_|. |
+ // Creates the dialog if it did not exist prior to this call, returns true. |
+ // If the dialog already exists, brings it to the front, returns false. |
+ virtual bool ShowMediaRouterDialog(); |
+ |
+ // Hides the media router dialog. |
+ // It is a no-op to call this function if there is currently no dialog. |
+ void HideMediaRouterDialog(); |
+ |
+ protected: |
+ // Use MediaRouterDialogController::GetOrCreateForWebContents() to create an |
+ // instance. |
+ explicit MediaRouterDialogController(content::WebContents* initiator); |
+ |
+ void ActivateInitiatorWebContents(); |
+ |
+ scoped_ptr<CreatePresentationSessionRequest> PassPresentationRequest(); |
+ |
+ content::WebContents* initiator() const { return initiator_; } |
+ |
+ // Resets the state of the controller. Must be called from the overrides. |
+ virtual void Reset(); |
+ // Creates a new media router dialog modal to |initiator_|. |
+ virtual void CreateMediaRouterDialog() = 0; |
+ // Closes the media router dialog if it exists. |
+ virtual void CloseMediaRouterDialog() = 0; |
+ // Indicates if the media router dialog already exists. |
+ virtual bool IsShowingMediaRouterDialog() const = 0; |
+ |
+ base::ThreadChecker thread_checker_; |
+ |
+ private: |
+ class InitiatorWebContentsObserver; |
+ |
+ // An observer for the |initiator_| that closes the dialog when |initiator_| |
+ // is destroyed or navigated. |
+ scoped_ptr<InitiatorWebContentsObserver> initiator_observer_; |
+ content::WebContents* const initiator_; |
+ |
+ // Data for dialogs created at the request of the Presentation API. |
+ // Passed from the caller via ShowMediaRouterDialogForPresentation to the |
+ // dialog when it is initialized. |
+ scoped_ptr<CreatePresentationSessionRequest> presentation_request_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(MediaRouterDialogController); |
}; |
} // namespace media_router |