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

Side by Side Diff: chrome/browser/ui/cocoa/browser_window_controller.h

Issue 533383002: mac, fullscreen: Major refactor. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Clone of patch set 4 from https://codereview.chromium.org/523723002/ Created 6 years, 3 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_UI_COCOA_BROWSER_WINDOW_CONTROLLER_H_ 5 #ifndef CHROME_BROWSER_UI_COCOA_BROWSER_WINDOW_CONTROLLER_H_
6 #define CHROME_BROWSER_UI_COCOA_BROWSER_WINDOW_CONTROLLER_H_ 6 #define CHROME_BROWSER_UI_COCOA_BROWSER_WINDOW_CONTROLLER_H_
7 7
8 // A class acting as the Objective-C controller for the Browser 8 // A class acting as the Objective-C controller for the Browser
9 // object. Handles interactions between Cocoa and the cross-platform 9 // object. Handles interactions between Cocoa and the cross-platform
10 // code. Each window has a single toolbar and, by virtue of being a 10 // code. Each window has a single toolbar and, by virtue of being a
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 base::scoped_nsobject<ToolbarController> toolbarController_; 74 base::scoped_nsobject<ToolbarController> toolbarController_;
75 base::scoped_nsobject<TabStripController> tabStripController_; 75 base::scoped_nsobject<TabStripController> tabStripController_;
76 base::scoped_nsobject<FindBarCocoaController> findBarCocoaController_; 76 base::scoped_nsobject<FindBarCocoaController> findBarCocoaController_;
77 base::scoped_nsobject<InfoBarContainerController> infoBarContainerController_; 77 base::scoped_nsobject<InfoBarContainerController> infoBarContainerController_;
78 base::scoped_nsobject<DownloadShelfController> downloadShelfController_; 78 base::scoped_nsobject<DownloadShelfController> downloadShelfController_;
79 base::scoped_nsobject<BookmarkBarController> bookmarkBarController_; 79 base::scoped_nsobject<BookmarkBarController> bookmarkBarController_;
80 base::scoped_nsobject<DevToolsController> devToolsController_; 80 base::scoped_nsobject<DevToolsController> devToolsController_;
81 base::scoped_nsobject<OverlayableContentsController> 81 base::scoped_nsobject<OverlayableContentsController>
82 overlayableContentsController_; 82 overlayableContentsController_;
83 base::scoped_nsobject<PresentationModeController> presentationModeController_; 83 base::scoped_nsobject<PresentationModeController> presentationModeController_;
84 base::scoped_nsobject<FullscreenModeController> fullscreenModeController_;
85 base::scoped_nsobject<FullscreenExitBubbleController> 84 base::scoped_nsobject<FullscreenExitBubbleController>
86 fullscreenExitBubbleController_; 85 fullscreenExitBubbleController_;
87 86
88 // Strong. StatusBubble is a special case of a strong reference that 87 // Strong. StatusBubble is a special case of a strong reference that
89 // we don't wrap in a scoped_ptr because it is acting the same 88 // we don't wrap in a scoped_ptr because it is acting the same
90 // as an NSWindowController in that it wraps a window that must 89 // as an NSWindowController in that it wraps a window that must
91 // be shut down before our destructors are called. 90 // be shut down before our destructors are called.
92 StatusBubbleMac* statusBubble_; 91 StatusBubbleMac* statusBubble_;
93 92
94 BookmarkBubbleController* bookmarkBubbleController_; // Weak. 93 BookmarkBubbleController* bookmarkBubbleController_; // Weak.
(...skipping 30 matching lines...) Expand all
125 124
126 // The borderless window used in fullscreen mode when Cocoa's System 125 // The borderless window used in fullscreen mode when Cocoa's System
127 // Fullscreen API is not being used (or not available, before OS 10.7). 126 // Fullscreen API is not being used (or not available, before OS 10.7).
128 base::scoped_nsobject<NSWindow> fullscreenWindow_; 127 base::scoped_nsobject<NSWindow> fullscreenWindow_;
129 128
130 // The Cocoa implementation of the PermissionBubbleView. 129 // The Cocoa implementation of the PermissionBubbleView.
131 scoped_ptr<PermissionBubbleCocoa> permissionBubbleCocoa_; 130 scoped_ptr<PermissionBubbleCocoa> permissionBubbleCocoa_;
132 131
133 // True between |-windowWillEnterFullScreen:| and |-windowDidEnterFullScreen:| 132 // True between |-windowWillEnterFullScreen:| and |-windowDidEnterFullScreen:|
134 // to indicate that the window is in the process of transitioning into 133 // to indicate that the window is in the process of transitioning into
135 // fullscreen mode. 134 // AppKit fullscreen mode.
136 BOOL enteringFullscreen_; 135 BOOL enteringAppKitFullscreen_;
136
137 // Only adjust the tab strip once while entering fullscreen. See the
138 // implementation of -[BrowserWindowController updateSubviewZOrder:] for more
139 // details.
140 BOOL hasAdjustedTabStripWhileEnteringAppKitFullscreen_;
141
142 // True between |enterImmersiveFullscreen| and |-windowDidEnterFullScreen:|
143 // to indicate that the window is in the process of transitioning into
144 // AppKit fullscreen mode.
145 BOOL enteringImmersiveFullscreen_;
137 146
138 // True between |-setPresentationMode:url:bubbleType:| and 147 // True between |-setPresentationMode:url:bubbleType:| and
139 // |-windowDidEnterFullScreen:| to indicate that the window is in the process 148 // |-windowDidEnterFullScreen:| to indicate that the window is in the process
140 // of transitioning into fullscreen presentation mode. 149 // of transitioning into fullscreen presentation mode.
141 BOOL enteringPresentationMode_; 150 BOOL enteringPresentationMode_;
142 151
143 // The size of the original (non-fullscreen) window. This is saved just 152 // The size of the original (non-fullscreen) window. This is saved just
144 // before entering fullscreen mode and is only valid when |-isFullscreen| 153 // before entering fullscreen mode and is only valid when |-isFullscreen|
145 // returns YES. 154 // returns YES.
146 NSRect savedRegularWindowFrame_; 155 NSRect savedRegularWindowFrame_;
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 - (BOOL)supportsBookmarkBar; 397 - (BOOL)supportsBookmarkBar;
389 398
390 // Called to check if this controller's window is a tabbed window (e.g., not a 399 // Called to check if this controller's window is a tabbed window (e.g., not a
391 // pop-up window). Returns YES if it is, NO otherwise. 400 // pop-up window). Returns YES if it is, NO otherwise.
392 // Note: The |-has...| methods are usually preferred, so this method is largely 401 // Note: The |-has...| methods are usually preferred, so this method is largely
393 // deprecated. 402 // deprecated.
394 - (BOOL)isTabbedWindow; 403 - (BOOL)isTabbedWindow;
395 404
396 @end // @interface BrowserWindowController(WindowType) 405 @end // @interface BrowserWindowController(WindowType)
397 406
407 // Fullscreen terminology:
408 //
409 // ----------------------------------------------------------------------------
410 // There are 2 APIs that cause the window to get resized, and possibly move
411 // spaces.
412 //
413 // + AppKitFullscreen API: AppKit touts a feature known as "fullscreen". This
414 // involves moving the current window to a different space, and resizing the
415 // window to take up the entire size of the screen.
416 //
417 // + Immersive fullscreen: An alternative to AppKitFullscreen API. Uses on 10.6
418 // (before AppKitFullscreen API was available), and on certain HTML/Flash
419 // content. This is a method defined by Chrome.
420 //
421 // The Immersive fullscreen API can be called after the AppKitFullscreen API.
422 // Calling the AppKitFullscreen API while immersive fullscreen API has been
423 // invoked causes all fullscreen modes to exit.
424 //
425 // ----------------------------------------------------------------------------
426 // There are 3 "styles" of omnibox sliding.
427 // + OMNIBOX_TABS_PRESENT: Both the omnibox and the tabstrip are present.
428 // Moving the cursor to the top causes the menubar to appear, and everything
429 // else to slide down.
430 // + OMNIBOX_PRESENT: The tabstrip is hidden. Moving the cursor to the top
431 // shows the tabstrip and menubar, sliding everything else down.
432 // + OMNIBOX_TABS_HIDDEN: Both tabstrip and omnibox are hidden. Moving cursor
433 // to top shows tabstrip, omnibox, and menu bar.
434 //
435 // The omnibox sliding styles are used in conjunction with the fullscreen APIs.
436 // There is exactly 1 sliding style active at a time. The sliding is mangaged
437 // by the presentationModeController_. (poorly named).
438 //
439 // ----------------------------------------------------------------------------
440 // There are several "fullscreen modes" bantered around. Technically, any
441 // fullscreen API can be combined with any sliding style.
442 //
443 // + System fullscreen***deprecated***: This term is confusing. Don't use it.
444 // It either refers to the AppKitFullscreen API, or the behavior that users
445 // expect to see when they click the fullscreen button, or some Chrome specific
446 // implementation that uses the AppKitFullscreen API.
447 //
448 // + Canonical Fullscreen: When a user clicks on the fullscreen button, they
449 // expect a fullscreen behavior similar to other AppKit apps.
450 // - AppKitFullscreen API + OMNIBOX_TABS_PRESENT.
451 // - The button click directly invokes the AppKitFullscreen API. This class
452 // get a callback, and calls adjustUIForOmniboxFullscreen.
453 // - There is a menu item that is intended to invoke the same behavior. When
454 // the user clicks the menu item, or use its hotkey, this class invokes the
455 // AppKitFullscreen API.
456 //
457 // + Presentation Mode:
458 // - OMNIBOX_TABS_HIDDEN, typically with AppKitFullscreen API, but can
459 // also be with Immersive fullscreen API.
460 // - This class sets a flag, indicating that it wants Presentation Mode
461 // instead of Canonical Fullscreen. Then it invokes the AppKitFullscreen API.
462 //
463 // + HTML5 fullscreen. <-- Currently uses AppKitFullscreen API. This should
464 // eventually migrate to the Immersive Fullscreen API.
465 //
466 // TODO(erikchen): Remove this.
467 // + Simplified fullscreen. Hidden by default. Some users have manually
468 // enabled it.
469 // - OMNIBOX_PRESENT. Can be with either fullscreen API.
398 470
399 // Methods having to do with fullscreen and presentation mode. 471 // Methods having to do with fullscreen and presentation mode.
400 @interface BrowserWindowController(Fullscreen) 472 @interface BrowserWindowController(Fullscreen)
401 473
402 // Toggles fullscreen mode. Meant to be called by Lion windows when they enter 474 // Toggles fullscreen mode. Meant to be called by Lion windows when they enter
403 // or exit Lion fullscreen mode. Must not be called on Snow Leopard or earlier. 475 // or exit Lion fullscreen mode. Must not be called on Snow Leopard or earlier.
404 - (void)handleLionToggleFullscreen; 476 - (void)handleLionToggleFullscreen;
405 477
406 // Enters (or exits) fullscreen mode. This method is safe to call on all OS 478 // Enters Canonical Fullscreen.
407 // versions. 479 - (void)enterFullscreenWithChrome;
408 - (void)enterFullscreen;
409 - (void)exitFullscreen;
410 480
411 // Updates the contents of the fullscreen exit bubble with |url| and 481 // Updates the contents of the fullscreen exit bubble with |url| and
412 // |bubbleType|. 482 // |bubbleType|.
413 - (void)updateFullscreenExitBubbleURL:(const GURL&)url 483 - (void)updateFullscreenExitBubbleURL:(const GURL&)url
414 bubbleType:(FullscreenExitBubbleType)bubbleType; 484 bubbleType:(FullscreenExitBubbleType)bubbleType;
415 485
416 // Returns fullscreen state: YES when the window is in fullscreen or is 486 // Returns YES if the browser window is in or entering any fullscreen mode.
417 // animating into fullscreen. 487 - (BOOL)isInAnyFullscreenMode;
418 - (BOOL)isFullscreen;
419 488
420 // Returns YES if the browser window is currently in fullscreen via the built-in 489 // Returns YES if the browser window is currently in or entering fullscreen via
421 // immersive mechanism. 490 // the built-in immersive mechanism.
422 - (BOOL)isInImmersiveFullscreen; 491 - (BOOL)isInImmersiveFullscreen;
423 492
424 // Returns YES if the browser window is currently in fullscreen via the Cocoa 493 // Returns YES if the browser window is currently in or entering fullscreen via
425 // System Fullscreen API. 494 // the AppKit Fullscreen API.
426 - (BOOL)isInSystemFullscreen; 495 - (BOOL)isInAppKitFullscreen;
427 496
428 // Enters (or exits) presentation mode. Also enters fullscreen mode if this 497 // Returns YES if the PresentationModeController exists and hence the omnibox
429 // window is not already fullscreen. This method is safe to call on all OS 498 // and other UI is expected to slide.
430 // versions. 499 - (BOOL)isInFullscreenWithOmniboxSliding;
500
501 // Enters (or exits) presentation mode.
431 - (void)enterPresentationModeForURL:(const GURL&)url 502 - (void)enterPresentationModeForURL:(const GURL&)url
432 bubbleType:(FullscreenExitBubbleType)bubbleType; 503 bubbleType:(FullscreenExitBubbleType)bubbleType;
433 - (void)exitPresentationMode;
434 504
435 // For simplified fullscreen: Enters fullscreen for a tab at a URL. The |url| 505 // Tries to enter presentation mode. Falls back to simplified fullscreen.
436 // is guaranteed to be non-empty; see -enterFullscreen for the user-initiated 506 - (void)enterHTML5FullscreenForURL:(const GURL&)url
437 // fullscreen mode. Called on Snow Leopard and Lion+. 507 bubbleType:(FullscreenExitBubbleType)bubbleType;
438 - (void)enterFullscreenForURL:(const GURL&)url
439 bubbleType:(FullscreenExitBubbleType)bubbleType;
440 508
441 // Returns presentation mode state. This method is safe to call on all OS 509 // Exits the current fullscreen mode.
442 // versions. 510 - (void)exitAnyFullscreen;
511
512 // Whether the system is in the very specific fullscreen mode: Presentation
513 // Mode.
443 - (BOOL)inPresentationMode; 514 - (BOOL)inPresentationMode;
444 515
445 // Resizes the fullscreen window to fit the screen it's currently on. Called by 516 // Resizes the fullscreen window to fit the screen it's currently on. Called by
446 // the PresentationModeController when there is a change in monitor placement or 517 // the PresentationModeController when there is a change in monitor placement or
447 // resolution. 518 // resolution.
448 - (void)resizeFullscreenWindow; 519 - (void)resizeFullscreenWindow;
449 520
450 // Gets or sets the fraction of the floating bar (presentation mode overlay)
451 // that is shown. 0 is completely hidden, 1 is fully shown.
452 - (CGFloat)floatingBarShownFraction;
453 - (void)setFloatingBarShownFraction:(CGFloat)fraction;
454
455 // Query/lock/release the requirement that the tab strip/toolbar/attached 521 // Query/lock/release the requirement that the tab strip/toolbar/attached
456 // bookmark bar bar cluster is visible (e.g., when one of its elements has 522 // bookmark bar bar cluster is visible (e.g., when one of its elements has
457 // focus). This is required for the floating bar in presentation mode, but 523 // focus). This is required for the floating bar in presentation mode, but
458 // should also be called when not in presentation mode; see the comments for 524 // should also be called when not in presentation mode; see the comments for
459 // |barVisibilityLocks_| for more details. Double locks/releases by the same 525 // |barVisibilityLocks_| for more details. Double locks/releases by the same
460 // owner are ignored. If |animate:| is YES, then an animation may be performed, 526 // owner are ignored. If |animate:| is YES, then an animation may be performed,
461 // possibly after a small delay if |delay:| is YES. If |animate:| is NO, 527 // possibly after a small delay if |delay:| is YES. If |animate:| is NO,
462 // |delay:| will be ignored. In the case of multiple calls, later calls have 528 // |delay:| will be ignored. In the case of multiple calls, later calls have
463 // precedence with the rule that |animate:NO| has precedence over |animate:YES|, 529 // precedence with the rule that |animate:NO| has precedence over |animate:YES|,
464 // and |delay:NO| has precedence over |delay:YES|. 530 // and |delay:NO| has precedence over |delay:YES|.
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 // positioned relative to. 582 // positioned relative to.
517 - (NSRect)omniboxPopupAnchorRect; 583 - (NSRect)omniboxPopupAnchorRect;
518 584
519 // Force a layout of info bars. 585 // Force a layout of info bars.
520 - (void)layoutInfoBars; 586 - (void)layoutInfoBars;
521 587
522 @end // @interface BrowserWindowController (TestingAPI) 588 @end // @interface BrowserWindowController (TestingAPI)
523 589
524 590
525 #endif // CHROME_BROWSER_UI_COCOA_BROWSER_WINDOW_CONTROLLER_H_ 591 #endif // CHROME_BROWSER_UI_COCOA_BROWSER_WINDOW_CONTROLLER_H_
OLDNEW
« no previous file with comments | « chrome/browser/ui/cocoa/browser_window_cocoa_unittest.mm ('k') | chrome/browser/ui/cocoa/browser_window_controller.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698