Index: chrome/browser/ui/cocoa/browser_window_controller.h |
diff --git a/chrome/browser/ui/cocoa/browser_window_controller.h b/chrome/browser/ui/cocoa/browser_window_controller.h |
index d575bd89311487408028a5d74cc5cb8c0ef259e7..8086d0589ab52e29d45f2ed8eb2506f3e1e41dc0 100644 |
--- a/chrome/browser/ui/cocoa/browser_window_controller.h |
+++ b/chrome/browser/ui/cocoa/browser_window_controller.h |
@@ -57,6 +57,14 @@ namespace extensions { |
class Command; |
} |
+namespace fullscreen_mac { |
+enum SlidingStyle { |
+ OMNIBOX_TABS_PRESENT = 0, // Tab strip and omnibox both visible. |
+ OMNIBOX_PRESENT, // Tab strip hidden. |
Robert Sesek
2014/08/27 22:04:30
When is this mode used?
erikchen
2014/08/28 00:50:28
Only for simplified fullscreen.
|
+ OMNIBOX_TABS_HIDDEN, // Tab strip and omnibox both hidden. |
+}; |
+} // namespace fullscreen_mac |
+ |
@interface BrowserWindowController : |
TabWindowController<NSUserInterfaceValidations, |
BookmarkBarControllerDelegate, |
@@ -81,7 +89,6 @@ class Command; |
base::scoped_nsobject<OverlayableContentsController> |
overlayableContentsController_; |
base::scoped_nsobject<PresentationModeController> presentationModeController_; |
- base::scoped_nsobject<FullscreenModeController> fullscreenModeController_; |
base::scoped_nsobject<FullscreenExitBubbleController> |
fullscreenExitBubbleController_; |
@@ -133,6 +140,9 @@ class Command; |
// True between |-windowWillEnterFullScreen:| and |-windowDidEnterFullScreen:| |
// to indicate that the window is in the process of transitioning into |
// fullscreen mode. |
+ // |
+ // TODO(erikchen): This flag is used when entering AppKit Fullscreen and |
+ // immersive fullscreen. This is confusing. |
BOOL enteringFullscreen_; |
// True between |-setPresentationMode:url:bubbleType:| and |
@@ -148,6 +158,9 @@ class Command; |
// The proportion of the floating bar which is shown (in presentation mode). |
CGFloat floatingBarShownFraction_; |
+ // Whether the omnibox is hidden in fullscreen. |
+ fullscreen_mac::SlidingStyle fullscreenStyle_; |
+ |
// Various UI elements/events may want to ensure that the floating bar is |
// visible (in presentation mode), e.g., because of where the mouse is or |
// where keyboard focus is. Whenever an object requires bar visibility, it has |
@@ -401,6 +414,71 @@ class Command; |
@end // @interface BrowserWindowController(WindowType) |
+// Fullscreen terminology: |
+// |
+// ---------------------------------------------------------------------------- |
+// There are 2 APIs that cause the window to get resized, and possibly move |
+// spaces. |
+// |
+// + AppKitFullscreen API: AppKit touts a feature known as "fullscreen". This |
+// involves moving the current window to a different space, and resizing the |
+// window to take up the entire size of the screen. |
+// |
+// + Immersive fullscreen: An alternative to AppKitFullscreen API. Uses on 10.6 |
+// (before AppKitFullscreen API was available), and on certain HTML/Flash |
+// content. This is a method defined by Chrome. |
+// |
+// The Immersive fullscreen API can be called after the AppKitFullscreen API. |
+// Calling the AppKitFullscreen API while immersive fullscreen API has been |
+// invoked causes all fullscreen modes to exit. |
+// |
+// ---------------------------------------------------------------------------- |
+// There are 3 "styles" of omnibox sliding. |
+// + OMNIBOX_TABS_PRESENT: Both the omnibox and the tabstrip are present. |
+// Moving the cursor to the top causes the menubar to appear, and everything |
+// else to slide down. |
+// + OMNIBOX_PRESENT: The tabstrip is hidden. Moving the cursor to the top |
+// shows the tabstrip and menubar, sliding everything else down. |
+// + OMNIBOX_TABS_HIDDEN: Both tabstrip and omnibox are hidden. Moving cursor |
+// to top shows tabstrip, omnibox, and menu bar. |
+// |
+// The omnibox sliding styles are used in conjunction with the fullscreen APIs. |
+// There is exactly 1 sliding style active at a time. The sliding is mangaged |
+// by the presentationModeController_. (poorly named). |
+// |
+// ---------------------------------------------------------------------------- |
+// There are several "fullscreen modes" bantered around. Technically, any |
+// fullscreen API can be combined with any sliding style. |
+// |
+// + System fullscreen***deprecated***: This term is confusing. Don't use it. |
+// I've tried to remove all references to it. It either refers to the |
Robert Sesek
2014/08/27 22:04:30
Please only use the third person in comments.
erikchen
2014/08/28 00:50:28
Done. I went through the whole CL and removed all
|
+// AppKitFullscreen API, or the behavior that users expect to see when they |
+// click the fullscreen button, or some Chrome specific implementation that |
+// uses the AppKitFullscreen API. |
+// |
+// + Canonical Fullscreen: When a user clicks on the fullscreen button, they |
Robert Sesek
2014/08/27 22:04:30
This is as system fullscreen.
erikchen
2014/08/28 00:50:28
What do you mean by your comment? Is that a questi
|
+// expect a fullscreen behavior similar to other AppKit apps. |
+// - AppKitFullscreen API + OMNIBOX_TABS_PRESENT. |
+// - The button click directly invokes the AppKitFullscreen API. We get a |
+// callback, and call adjustUIForOmniboxFullscreen. |
+// - We have a menu item that is intended to invoke the same behavior. When |
+// they click the menu item, or use its hotkey, we manually invoke the |
+// AppKitFullscreen API. |
+// |
+// + Presentation Mode: |
+// - OMNIBOX_TABS_HIDDEN, typically with AppKitFullscreen API, but can |
+// also be with Immersive fullscreen API. |
+// - We set a flag, indicating that we want Presentation Mode instead of |
+// Canonical Fullscreen. Then we invoke the AppKitFullscreen API. |
+// |
+// + HTML5 fullscreen. <-- Currently uses AppKitFullscreen API. We want |
+// this to change. |
+// |
+// + Simplified fullscreen. Hidden by default. Some users have manually |
Robert Sesek
2014/08/27 22:04:30
Just kill this.
erikchen
2014/08/28 00:50:28
Okay. I will do so in a separate CL.
|
+// enabled it. |
+// - OMNIBOX_PRESENT. Can be with either fullscreen API. |
+// |
+// + Flash fullscreen. |
// Methods having to do with fullscreen and presentation mode. |
@interface BrowserWindowController(Fullscreen) |
@@ -409,43 +487,41 @@ class Command; |
// or exit Lion fullscreen mode. Must not be called on Snow Leopard or earlier. |
- (void)handleLionToggleFullscreen; |
-// Enters (or exits) fullscreen mode. This method is safe to call on all OS |
-// versions. |
-- (void)enterFullscreen; |
-- (void)exitFullscreen; |
+// Enters Canonical Fullscreen. |
+- (void)enterFullscreenWithChrome; |
// Updates the contents of the fullscreen exit bubble with |url| and |
// |bubbleType|. |
- (void)updateFullscreenExitBubbleURL:(const GURL&)url |
bubbleType:(FullscreenExitBubbleType)bubbleType; |
-// Returns fullscreen state: YES when the window is in fullscreen or is |
-// animating into fullscreen. |
-- (BOOL)isFullscreen; |
+// Returns YES if the code is in or entering any fullscreen mode. |
+- (BOOL)isInOrEnteringAnyFullscreenMode; |
Robert Sesek
2014/08/27 22:04:30
Not sure how helpful the "OrEntering" naming is an
erikchen
2014/08/28 00:50:28
Updated method names to remove "OrEntering".
|
// Returns YES if the browser window is currently in fullscreen via the built-in |
// immersive mechanism. |
- (BOOL)isInImmersiveFullscreen; |
-// Returns YES if the browser window is currently in fullscreen via the Cocoa |
-// System Fullscreen API. |
-- (BOOL)isInSystemFullscreen; |
+// Returns YES if the browser window is currently in fullscreen via the AppKit |
+// Fullscreen API. |
+- (BOOL)isInOrEnteringAppKitFullscreen; |
+ |
+// Returns YES if the PresentationModeController exists and hence the omnibox |
+// and other UI is expected to slide. |
+- (BOOL)isInFullscreenWithOmniboxSliding; |
-// Enters (or exits) presentation mode. Also enters fullscreen mode if this |
-// window is not already fullscreen. This method is safe to call on all OS |
-// versions. |
+// Enters (or exits) presentation mode. |
- (void)enterPresentationModeForURL:(const GURL&)url |
bubbleType:(FullscreenExitBubbleType)bubbleType; |
-- (void)exitPresentationMode; |
-// For simplified fullscreen: Enters fullscreen for a tab at a URL. The |url| |
-// is guaranteed to be non-empty; see -enterFullscreen for the user-initiated |
-// fullscreen mode. Called on Snow Leopard and Lion+. |
-- (void)enterFullscreenForURL:(const GURL&)url |
- bubbleType:(FullscreenExitBubbleType)bubbleType; |
+// Tries to enter presentation mode. Falls back to simplified fullscreen. |
+- (void)enterGenericFullscreenForURL:(const GURL&)url |
Robert Sesek
2014/08/27 22:04:30
Why is this generic? Fullscreen for a URL is a spe
erikchen
2014/08/28 00:50:28
Renamed the method to enterHTML5FullscreenForURL
|
+ bubbleType:(FullscreenExitBubbleType)bubbleType; |
+// Exits the current fullscreen mode. |
+- (void)exitGenericFullscreen; |
-// Returns presentation mode state. This method is safe to call on all OS |
-// versions. |
+// Whether the system is in the very specific fullscreen mode: Presentation |
+// Mode. |
- (BOOL)inPresentationMode; |
// Resizes the fullscreen window to fit the screen it's currently on. Called by |