Chromium Code Reviews| Index: chrome/browser/ui/fullscreen_controller.h |
| diff --git a/chrome/browser/ui/fullscreen_controller.h b/chrome/browser/ui/fullscreen_controller.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..6c707f7e10158ebe482ff20eec2230cc6bf36272 |
| --- /dev/null |
| +++ b/chrome/browser/ui/fullscreen_controller.h |
| @@ -0,0 +1,104 @@ |
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef CHROME_BROWSER_UI_FULLSCREEN_CONTROLLER_H_ |
| +#define CHROME_BROWSER_UI_FULLSCREEN_CONTROLLER_H_ |
| +#pragma once |
| + |
| +#include "base/basictypes.h" |
| +#include "base/memory/ref_counted.h" |
| +#include "base/task.h" |
| +#include "chrome/browser/ui/fullscreen_exit_bubble_type.h" |
| +#include "chrome/common/content_settings.h" |
| + |
| +class Browser; |
| +class BrowserWindow; |
| +class GURL; |
| +class Profile; |
| +class TabContents; |
| +class TabContentsWrapper; |
| + |
| +// There are two different kinds of fullscreen mode - "tab fullscreen" and |
|
Peter Kasting
2011/11/21 19:17:46
Nit: This comment seems sort of randomly placed he
|
| +// "browser fullscreen". "Tab fullscreen" refers to when a tab enters |
| +// fullscreen mode via the JS fullscreen API, and "browser fullscreen" refers |
| +// to the user putting the browser itself into fullscreen mode from the UI. The |
| +// difference is that tab fullscreen has implications for how the contents of |
| +// the tab render (eg: a video element may grow to consume the whole tab), |
| +// whereas browser fullscreen mode doesn't. Therefore if a user forces an exit |
| +// from tab fullscreen, we need to notify the tab so it can stop rendering in |
| +// its fullscreen mode. |
| + |
| +// This class implements fullscreen and mouselock behaviour. |
| +class FullscreenController : public base::RefCounted<FullscreenController> { |
| + public: |
| + FullscreenController(BrowserWindow* window, |
| + Profile* profile, |
| + Browser* browser); |
| + virtual ~FullscreenController(); |
| + |
| + // Querying. |
| + bool IsFullscreenForTab() const; |
| + bool IsFullscreenForTab(const TabContents* tab) const; |
| + |
| + // Requests. |
| + void RequestToLockMouse(TabContents* tab); |
| + void ToggleFullscreenModeForTab(TabContents* tab, bool enter_fullscreen); |
| +#if defined(OS_MACOSX) |
| + void TogglePresentationMode(bool for_tab); |
| +#endif |
| + // TODO(koz): Change |for_tab| to an enum. |
| + void ToggleFullscreenMode(bool for_tab); |
| + |
| + // Notifications. |
| + void LostMouseLock(); |
| + void OnTabClosing(TabContents* tab_contents); |
| + void OnTabDeactivated(TabContentsWrapper* contents); |
| + void OnAcceptFullscreenPermission(const GURL& url, |
| + FullscreenExitBubbleType bubble_type); |
| + void OnDenyFullscreenPermission(FullscreenExitBubbleType bubble_type); |
| + void WindowFullscreenStateChanged(); |
| + bool HandleUserPressedEscape(); |
| + |
| + FullscreenExitBubbleType GetFullscreenExitBubbleType() const; |
| + |
| + private: |
| + enum MouseLockState { |
| + MOUSELOCK_NOT_REQUESTED, |
| + // The page requests to lock the mouse and the user hasn't responded to the |
| + // request. |
| + MOUSELOCK_REQUESTED, |
| + // Mouse lock has been allowed by the user. |
| + MOUSELOCK_ACCEPTED |
| + }; |
| + |
| + // Notifies the tab that it has been forced out of fullscreen mode if |
| + // necessary. |
| + void NotifyTabOfFullscreenExitIfNecessary(); |
| + // Make the current tab exit fullscreen mode if it is in it. |
| + void ExitTabbedFullscreenModeIfNecessary(); |
| + void UpdateFullscreenExitBubbleContent(); |
| + void NotifyFullscreenChange(); |
| + ContentSetting GetFullscreenSetting(const GURL& url) const; |
| + ContentSetting GetMouseLockSetting(const GURL& url) const; |
| + |
| + BrowserWindow* window_; |
| + Profile* profile_; |
| + Browser* browser_; |
| + |
| + // If there is currently a tab in fullscreen mode (entered via |
| + // webkitRequestFullScreen), this is its wrapper. |
| + TabContentsWrapper* fullscreened_tab_; |
| + |
| + // True if the current tab entered fullscreen mode via webkitRequestFullScreen |
| + bool tab_caused_fullscreen_; |
| + // True if tab fullscreen has been allowed, either by settings or by user |
| + // clicking the allow button on the fullscreen infobar. |
| + bool tab_fullscreen_accepted_; |
| + |
| + MouseLockState mouse_lock_state_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(FullscreenController); |
| +}; |
| + |
| +#endif // CHROME_BROWSER_UI_FULLSCREEN_CONTROLLER_H_ |