| Index: chrome/browser/ui/cocoa/browser_window_controller.mm
|
| diff --git a/chrome/browser/ui/cocoa/browser_window_controller.mm b/chrome/browser/ui/cocoa/browser_window_controller.mm
|
| index 3f9f5a88871ab750d2c746cd009394b49cfe2330..37c3996dccff1b278ad2dc1cfcef3108b07ac073 100644
|
| --- a/chrome/browser/ui/cocoa/browser_window_controller.mm
|
| +++ b/chrome/browser/ui/cocoa/browser_window_controller.mm
|
| @@ -55,11 +55,12 @@
|
| #import "chrome/browser/ui/cocoa/find_bar/find_bar_bridge.h"
|
| #import "chrome/browser/ui/cocoa/find_bar/find_bar_cocoa_controller.h"
|
| #import "chrome/browser/ui/cocoa/framed_browser_window.h"
|
| +#import "chrome/browser/ui/cocoa/fullscreen/fullscreen_toolbar_visibility_locks_controller.h"
|
| #include "chrome/browser/ui/cocoa/fullscreen_low_power_coordinator.h"
|
| #import "chrome/browser/ui/cocoa/fullscreen_window.h"
|
| #import "chrome/browser/ui/cocoa/infobars/infobar_container_controller.h"
|
| #import "chrome/browser/ui/cocoa/location_bar/autocomplete_text_field_editor.h"
|
| -#import "chrome/browser/ui/cocoa/fullscreen_toolbar_controller.h"
|
| +#import "chrome/browser/ui/cocoa/fullscreen/fullscreen_toolbar_layout_manager.h"
|
| #include "chrome/browser/ui/cocoa/l10n_util.h"
|
| #import "chrome/browser/ui/cocoa/profiles/avatar_base_controller.h"
|
| #import "chrome/browser/ui/cocoa/profiles/avatar_button_controller.h"
|
| @@ -81,7 +82,6 @@
|
| #include "chrome/browser/ui/window_sizer/window_sizer.h"
|
| #include "chrome/common/chrome_switches.h"
|
| #include "chrome/common/extensions/command.h"
|
| -#include "chrome/common/pref_names.h"
|
| #include "components/bookmarks/browser/bookmark_model.h"
|
| #include "components/bookmarks/managed/managed_bookmark_service.h"
|
| #include "components/signin/core/common/profile_management_switches.h"
|
| @@ -245,10 +245,6 @@ bool IsTabDetachingInFullscreenEnabled() {
|
| NSMakeSize(400, 272) : NSMakeSize(100, 122);
|
| [[self window] setMinSize:minSize];
|
|
|
| - // Create the bar visibility lock set; 10 is arbitrary, but should hopefully
|
| - // be big enough to hold all locks that'll ever be needed.
|
| - barVisibilityLocks_.reset([[NSMutableSet setWithCapacity:10] retain]);
|
| -
|
| // Lion will attempt to automagically save and restore the UI. This
|
| // functionality appears to be leaky (or at least interacts badly with our
|
| // architecture) and thus BrowserWindowController never gets released. This
|
| @@ -341,17 +337,16 @@ bool IsTabDetachingInFullscreenEnabled() {
|
| [[InfoBarContainerController alloc] initWithResizeDelegate:self]);
|
| [self updateInfoBarTipVisibility];
|
|
|
| + fullscreenToolbarLayoutManager_.reset(
|
| + new FullscreenToolbarLayoutManager(self));
|
| +
|
| // We don't want to try and show the bar before it gets placed in its parent
|
| // view, so this step shoudn't be inside the bookmark bar controller's
|
| // |-awakeFromNib|.
|
| windowShim_->BookmarkBarStateChanged(
|
| BookmarkBar::DONT_ANIMATE_STATE_CHANGE);
|
|
|
| - // Allow bar visibility to be changed.
|
| - [self enableBarVisibilityUpdates];
|
| -
|
| [self updateFullscreenCollectionBehavior];
|
| -
|
| [self layoutSubviews];
|
|
|
| // For non-trusted, non-app popup windows, |desiredContentRect| contains the
|
| @@ -389,9 +384,6 @@ bool IsTabDetachingInFullscreenEnabled() {
|
| extensions::ExtensionKeybindingRegistry::ALL_EXTENSIONS,
|
| windowShim_.get()));
|
|
|
| - PrefService* prefs = browser_->profile()->GetPrefs();
|
| - shouldShowFullscreenToolbar_ =
|
| - prefs->GetBoolean(prefs::kShowFullscreenToolbar);
|
| blockLayoutSubviews_ = NO;
|
|
|
| // We are done initializing now.
|
| @@ -403,11 +395,10 @@ bool IsTabDetachingInFullscreenEnabled() {
|
| - (void)dealloc {
|
| browser_->tab_strip_model()->CloseAllTabs();
|
|
|
| - // Explicitly release |fullscreenToolbarController_| here, as it may call back
|
| - // to this BWC in |-dealloc|. We are required to call |-exitFullscreenMode|
|
| - // before releasing the controller.
|
| - [fullscreenToolbarController_ exitFullscreenMode];
|
| - fullscreenToolbarController_.reset();
|
| + // Explicitly release |fullscreenToolbarLayoutManager_| here, as it may call
|
| + // back to this BWC in |-dealloc|. We are required to call
|
| + //|-exitFullscreenMode| before releasing the object.
|
| + fullscreenToolbarLayoutManager_.reset();
|
|
|
| // Explicitly release |fullscreenTransition_| here since it may call back to
|
| // this BWC in |-dealloc|. Reset the fullscreen variables.
|
| @@ -1008,7 +999,7 @@ bool IsTabDetachingInFullscreenEnabled() {
|
| bool willFocusLocationBar =
|
| newContents && newContents->FocusLocationBarByDefault();
|
| if ([self isInAnyFullscreenMode] && !willFocusLocationBar)
|
| - [[self fullscreenToolbarController] revealToolbarForTabStripChanges];
|
| + fullscreenToolbarLayoutManager_->RevealToolbarForTabStripChanges();
|
| }
|
|
|
| - (void)zoomChangedForActiveTab:(BOOL)canShowBubble {
|
| @@ -1443,7 +1434,7 @@ bool IsTabDetachingInFullscreenEnabled() {
|
| - (void)onTabInsertedInForeground:(BOOL)inForeground {
|
| if ([self isInAnyFullscreenMode] && !inForeground &&
|
| ![toolbarController_ isLocationBarFocused]) {
|
| - [[self fullscreenToolbarController] revealToolbarForTabStripChanges];
|
| + fullscreenToolbarLayoutManager_->RevealToolbarForTabStripChanges();
|
| }
|
| }
|
|
|
| @@ -1796,13 +1787,13 @@ willAnimateFromState:(BookmarkBar::State)oldState
|
| [sheet orderOut:self];
|
| }
|
|
|
| -- (FullscreenToolbarController*)fullscreenToolbarController {
|
| - return fullscreenToolbarController_.get();
|
| +- (FullscreenToolbarLayoutManager*)fullscreenToolbarLayoutManager {
|
| + return fullscreenToolbarLayoutManager_.get();
|
| }
|
|
|
| -- (void)setFullscreenToolbarController:
|
| - (FullscreenToolbarController*)controller {
|
| - fullscreenToolbarController_.reset([controller retain]);
|
| +- (void)setFullscreenToolbarLayoutManager:
|
| + (FullscreenToolbarLayoutManager*)controller {
|
| + fullscreenToolbarLayoutManager_.reset(controller);
|
| }
|
|
|
| - (void)executeExtensionCommand:(const std::string&)extension_id
|
| @@ -1834,16 +1825,7 @@ willAnimateFromState:(BookmarkBar::State)oldState
|
| - (void)updateUIForTabFullscreen:
|
| (ExclusiveAccessContext::TabFullscreenState)state {
|
| DCHECK([self isInAnyFullscreenMode]);
|
| - if (state == ExclusiveAccessContext::STATE_ENTER_TAB_FULLSCREEN) {
|
| - [self adjustUIForSlidingFullscreenStyle:FullscreenSlidingStyle::
|
| - OMNIBOX_TABS_NONE];
|
| - return;
|
| - }
|
| -
|
| - [self adjustUIForSlidingFullscreenStyle:
|
| - shouldShowFullscreenToolbar_
|
| - ? FullscreenSlidingStyle::OMNIBOX_TABS_PRESENT
|
| - : FullscreenSlidingStyle::OMNIBOX_TABS_HIDDEN];
|
| + fullscreenToolbarLayoutManager_->UpdateToolbarStyle();
|
| }
|
|
|
| - (void)updateFullscreenExitBubble {
|
| @@ -1860,17 +1842,6 @@ willAnimateFromState:(BookmarkBar::State)oldState
|
| return NO;
|
| }
|
|
|
| -- (void)setFullscreenToolbarVisible:(BOOL)visible {
|
| - if (shouldShowFullscreenToolbar_ == visible)
|
| - return;
|
| -
|
| - shouldShowFullscreenToolbar_ = visible;
|
| - [self adjustUIForSlidingFullscreenStyle:
|
| - shouldShowFullscreenToolbar_
|
| - ? FullscreenSlidingStyle::OMNIBOX_TABS_PRESENT
|
| - : FullscreenSlidingStyle::OMNIBOX_TABS_HIDDEN];
|
| -}
|
| -
|
| - (BOOL)isInAnyFullscreenMode {
|
| return [self isInImmersiveFullscreen] || [self isInAppKitFullscreen];
|
| }
|
| @@ -1886,8 +1857,15 @@ willAnimateFromState:(BookmarkBar::State)oldState
|
| enteringAppKitFullscreen_);
|
| }
|
|
|
| +- (BOOL)isFullscreenForTabContentOrExtension {
|
| + FullscreenController* controller =
|
| + browser_->exclusive_access_manager()->fullscreen_controller();
|
| + return controller->IsWindowFullscreenForTabOrPending() ||
|
| + controller->IsExtensionFullscreenOrPending();
|
| +}
|
| +
|
| - (CGFloat)menubarOffset {
|
| - return [fullscreenToolbarController_ menubarOffset];
|
| + return fullscreenToolbarLayoutManager_->ComputeToolbarLayout().menubarOffset;
|
| }
|
|
|
| - (NSView*)avatarView {
|
| @@ -1938,35 +1916,21 @@ willAnimateFromState:(BookmarkBar::State)oldState
|
| [self layoutSubviews];
|
| }
|
|
|
| -- (BOOL)isBarVisibilityLockedForOwner:(id)owner {
|
| - DCHECK(barVisibilityLocks_);
|
| - return owner ? [barVisibilityLocks_ containsObject:owner]
|
| - : [barVisibilityLocks_ count];
|
| +- (BOOL)isToolbarVisibilityLockedForOwner:(id)owner {
|
| + return [[self fullscreenToolbarVisibilityLocksController]
|
| + isToolbarVisibilityLockedForOwner:owner];
|
| }
|
|
|
| -- (void)lockBarVisibilityForOwner:(id)owner withAnimation:(BOOL)animate {
|
| - if (![self isBarVisibilityLockedForOwner:owner]) {
|
| - [barVisibilityLocks_ addObject:owner];
|
| -
|
| - // If enabled, show the overlay if necessary (and if the fullscreen
|
| - // toolbar is hidden).
|
| - if (barVisibilityUpdatesEnabled_) {
|
| - [fullscreenToolbarController_ lockBarVisibilityWithAnimation:animate];
|
| - }
|
| - }
|
| +- (void)lockToolbarVisibilityForOwner:(id)owner withAnimation:(BOOL)animate {
|
| + [[self fullscreenToolbarVisibilityLocksController]
|
| + lockToolbarVisibilityForOwner:owner
|
| + withAnimation:animate];
|
| }
|
|
|
| -- (void)releaseBarVisibilityForOwner:(id)owner withAnimation:(BOOL)animate {
|
| - if ([self isBarVisibilityLockedForOwner:owner]) {
|
| - [barVisibilityLocks_ removeObject:owner];
|
| -
|
| - // If enabled, hide the overlay if necessary (and if the fullscreen
|
| - // toolbar is hidden).
|
| - if (barVisibilityUpdatesEnabled_ &&
|
| - ![barVisibilityLocks_ count]) {
|
| - [fullscreenToolbarController_ releaseBarVisibilityWithAnimation:animate];
|
| - }
|
| - }
|
| +- (void)releaseToolbarVisibilityForOwner:(id)owner withAnimation:(BOOL)animate {
|
| + [[self fullscreenToolbarVisibilityLocksController]
|
| + releaseToolbarVisibilityForOwner:owner
|
| + withAnimation:animate];
|
| }
|
|
|
| - (BOOL)floatingBarHasFocus {
|
| @@ -1978,6 +1942,15 @@ willAnimateFromState:(BookmarkBar::State)oldState
|
| return exclusiveAccessController_.get();
|
| }
|
|
|
| +- (FullscreenToolbarLayoutManager*)fullscreenToolbarLayoutManager {
|
| + return fullscreenToolbarLayoutManager_.get();
|
| +}
|
| +
|
| +- (FullscreenToolbarVisibilityLocksController*)
|
| + fullscreenToolbarVisibilityLocksController {
|
| + return fullscreenToolbarLayoutManager_->toolbar_visibility_locks();
|
| +}
|
| +
|
| @end // @implementation BrowserWindowController(Fullscreen)
|
|
|
|
|
|
|