Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4593)

Unified Diff: chrome/browser/media/router/media_router_dialog_controller.h

Issue 1243173003: [MediaRouter] Moved the code useful for Android to MediaRouterDialogController (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@build-media-router-android
Patch Set: Fixed the unit test Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698