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

Side by Side Diff: chrome/browser/ui/cocoa/browser_window_controller_private.mm

Issue 390503003: Enables permission bubbles to remain visible during fulscreen on Mac. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix tests Created 6 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 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 #import "chrome/browser/ui/cocoa/browser_window_controller_private.h" 5 #import "chrome/browser/ui/cocoa/browser_window_controller_private.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/mac/mac_util.h" 10 #include "base/mac/mac_util.h"
(...skipping 19 matching lines...) Expand all
30 #import "chrome/browser/ui/cocoa/nsview_additions.h" 30 #import "chrome/browser/ui/cocoa/nsview_additions.h"
31 #import "chrome/browser/ui/cocoa/presentation_mode_controller.h" 31 #import "chrome/browser/ui/cocoa/presentation_mode_controller.h"
32 #import "chrome/browser/ui/cocoa/profiles/avatar_button_controller.h" 32 #import "chrome/browser/ui/cocoa/profiles/avatar_button_controller.h"
33 #import "chrome/browser/ui/cocoa/profiles/avatar_icon_controller.h" 33 #import "chrome/browser/ui/cocoa/profiles/avatar_icon_controller.h"
34 #import "chrome/browser/ui/cocoa/status_bubble_mac.h" 34 #import "chrome/browser/ui/cocoa/status_bubble_mac.h"
35 #import "chrome/browser/ui/cocoa/tab_contents/overlayable_contents_controller.h" 35 #import "chrome/browser/ui/cocoa/tab_contents/overlayable_contents_controller.h"
36 #import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h" 36 #import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h"
37 #import "chrome/browser/ui/cocoa/tabs/tab_strip_view.h" 37 #import "chrome/browser/ui/cocoa/tabs/tab_strip_view.h"
38 #import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h" 38 #import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h"
39 #import "chrome/browser/ui/cocoa/version_independent_window.h" 39 #import "chrome/browser/ui/cocoa/version_independent_window.h"
40 #import "chrome/browser/ui/cocoa/website_settings/permission_bubble_cocoa.h"
40 #include "chrome/browser/ui/fullscreen/fullscreen_controller.h" 41 #include "chrome/browser/ui/fullscreen/fullscreen_controller.h"
41 #include "chrome/browser/ui/tabs/tab_strip_model.h" 42 #include "chrome/browser/ui/tabs/tab_strip_model.h"
42 #include "chrome/common/chrome_switches.h" 43 #include "chrome/common/chrome_switches.h"
43 #include "chrome/common/pref_names.h" 44 #include "chrome/common/pref_names.h"
44 #include "content/public/browser/render_widget_host_view.h" 45 #include "content/public/browser/render_widget_host_view.h"
45 #include "content/public/browser/web_contents.h" 46 #include "content/public/browser/web_contents.h"
46 #import "ui/base/cocoa/focus_tracker.h" 47 #import "ui/base/cocoa/focus_tracker.h"
47 #include "ui/base/ui_base_types.h" 48 #include "ui/base/ui_base_types.h"
48 49
49 using content::RenderWidgetHostView; 50 using content::RenderWidgetHostView;
(...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 // FocusTracker will fail to restore focus to anything, so we set the focus 629 // FocusTracker will fail to restore focus to anything, so we set the focus
629 // to the tab contents as a reasonable fall-back. 630 // to the tab contents as a reasonable fall-back.
630 [self focusTabContents]; 631 [self focusTabContents];
631 } 632 }
632 [sourceWindow orderOut:self]; 633 [sourceWindow orderOut:self];
633 634
634 // We're done moving focus, so re-enable bar visibility changes. 635 // We're done moving focus, so re-enable bar visibility changes.
635 [self enableBarVisibilityUpdates]; 636 [self enableBarVisibilityUpdates];
636 } 637 }
637 638
639 - (void)permissionBubbleWindowWillClose:(NSNotification*)notification {
Robert Sesek 2014/07/14 14:13:32 This needs to be declared in the .h
leng 2014/07/14 18:17:24 Done.
640 DCHECK(permissionBubbleCocoa_);
641
642 NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
643 [center removeObserver:self
644 name:NSWindowWillCloseNotification
645 object:[notification object]];
646 [presentationModeController_ setAlwaysShowDropdown:NO];
647 }
648
638 - (void)setPresentationModeInternal:(BOOL)presentationMode 649 - (void)setPresentationModeInternal:(BOOL)presentationMode
639 forceDropdown:(BOOL)forceDropdown { 650 forceDropdown:(BOOL)forceDropdown {
640 if (presentationMode == [self inPresentationMode]) 651 if (presentationMode == [self inPresentationMode])
641 return; 652 return;
642 653
643 if (presentationMode) { 654 if (presentationMode) {
644 BOOL fullscreen_for_tab = 655 BOOL fullscreen_for_tab =
645 browser_->fullscreen_controller()->IsWindowFullscreenForTabOrPending(); 656 browser_->fullscreen_controller()->IsWindowFullscreenForTabOrPending();
646 BOOL kiosk_mode = 657 BOOL kiosk_mode =
647 CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode); 658 CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode);
648 BOOL showDropdown = !fullscreen_for_tab && 659 BOOL showDropdown = !fullscreen_for_tab &&
649 !kiosk_mode && 660 !kiosk_mode &&
650 (forceDropdown || [self floatingBarHasFocus]); 661 (forceDropdown || [self floatingBarHasFocus]);
651 NSView* contentView = [[self window] contentView];
652 presentationModeController_.reset( 662 presentationModeController_.reset(
653 [[PresentationModeController alloc] initWithBrowserController:self]); 663 [[PresentationModeController alloc] initWithBrowserController:self]);
664
665 if (permissionBubbleCocoa_ && permissionBubbleCocoa_->IsVisible()) {
666 DCHECK(permissionBubbleCocoa_->window());
667 // A visible permission bubble will force the dropdown to remain visible.
668 [presentationModeController_ setAlwaysShowDropdown:YES];
669 showDropdown = YES;
670 // Register to be notified when the permission bubble is closed, to
671 // allow fullscreen to hide the dropdown.
672 NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
673 [center addObserver:self
674 selector:@selector(permissionBubbleWindowWillClose:)
675 name:NSWindowWillCloseNotification
676 object:permissionBubbleCocoa_->window()];
677 }
678 if (showDropdown) {
679 // Turn on layered mode for the window's root view for the entry
680 // animation. Without this, the OS fullscreen animation for entering
681 // fullscreen mode does not correctly draw the tab strip.
682 // It will be turned off (set back to NO) when the animation finishes,
683 // in -windowDidEnterFullScreen:.
684 // Leaving wantsLayer on for the duration of presentation mode causes
685 // performance issues when the dropdown is animated in/out. It also does
686 // not seem to be required for the exit animation.
687 [[[self window] cr_windowView] setWantsLayer:YES];
688 }
689 NSView* contentView = [[self window] contentView];
654 [presentationModeController_ enterPresentationModeForContentView:contentView 690 [presentationModeController_ enterPresentationModeForContentView:contentView
655 showDropdown:showDropdown]; 691 showDropdown:showDropdown];
656 } else { 692 } else {
657 [presentationModeController_ exitPresentationMode]; 693 [presentationModeController_ exitPresentationMode];
658 presentationModeController_.reset(); 694 presentationModeController_.reset();
659 } 695 }
660 696
661 [self adjustUIForPresentationMode:presentationMode]; 697 [self adjustUIForPresentationMode:presentationMode];
662 [self layoutSubviews]; 698 [self layoutSubviews];
663 } 699 }
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
864 900
865 const CommandLine* command_line = CommandLine::ForCurrentProcess(); 901 const CommandLine* command_line = CommandLine::ForCurrentProcess();
866 if (command_line->HasSwitch(switches::kEnableSimplifiedFullscreen) && 902 if (command_line->HasSwitch(switches::kEnableSimplifiedFullscreen) &&
867 fullscreenUrl_.is_empty()) { 903 fullscreenUrl_.is_empty()) {
868 fullscreenModeController_.reset([[FullscreenModeController alloc] 904 fullscreenModeController_.reset([[FullscreenModeController alloc]
869 initWithBrowserWindowController:self]); 905 initWithBrowserWindowController:self]);
870 } 906 }
871 907
872 [self showFullscreenExitBubbleIfNecessary]; 908 [self showFullscreenExitBubbleIfNecessary];
873 browser_->WindowFullscreenStateChanged(); 909 browser_->WindowFullscreenStateChanged();
910 [[[self window] cr_windowView] setWantsLayer:NO];
874 } 911 }
875 912
876 - (void)windowWillExitFullScreen:(NSNotification*)notification { 913 - (void)windowWillExitFullScreen:(NSNotification*)notification {
877 if (notification) // For System Fullscreen when non-nil. 914 if (notification) // For System Fullscreen when non-nil.
878 [self registerForContentViewResizeNotifications]; 915 [self registerForContentViewResizeNotifications];
879 fullscreenModeController_.reset(); 916 fullscreenModeController_.reset();
880 [self destroyFullscreenExitBubbleIfNecessary]; 917 [self destroyFullscreenExitBubbleIfNecessary];
881 [self setPresentationModeInternal:NO forceDropdown:NO]; 918 [self setPresentationModeInternal:NO forceDropdown:NO];
882 } 919 }
883 920
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
1026 devTools->SetAllowOverlappingViews(allowOverlappingViews); 1063 devTools->SetAllowOverlappingViews(allowOverlappingViews);
1027 } 1064 }
1028 1065
1029 - (void)updateInfoBarTipVisibility { 1066 - (void)updateInfoBarTipVisibility {
1030 // If there's no toolbar then hide the infobar tip. 1067 // If there's no toolbar then hide the infobar tip.
1031 [infoBarContainerController_ 1068 [infoBarContainerController_
1032 setShouldSuppressTopInfoBarTip:![self hasToolbar]]; 1069 setShouldSuppressTopInfoBarTip:![self hasToolbar]];
1033 } 1070 }
1034 1071
1035 @end // @implementation BrowserWindowController(Private) 1072 @end // @implementation BrowserWindowController(Private)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698