Chromium Code Reviews| Index: chrome/browser/ui/cocoa/browser/exclusive_access_controller_views.mm |
| diff --git a/chrome/browser/ui/cocoa/browser/exclusive_access_controller_views.mm b/chrome/browser/ui/cocoa/browser/exclusive_access_controller_views.mm |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..c3004f3f14041b6c2255751d79cf8ed37bded048 |
| --- /dev/null |
| +++ b/chrome/browser/ui/cocoa/browser/exclusive_access_controller_views.mm |
| @@ -0,0 +1,120 @@ |
| +// Copyright 2016 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. |
| + |
| +#import "chrome/browser/ui/cocoa/browser/exclusive_access_controller_views.h" |
| + |
| +#include "chrome/browser/download/download_shelf.h" |
| +#include "chrome/browser/fullscreen.h" |
| +#include "chrome/browser/ui/browser_window.h" |
| +#import "chrome/browser/ui/cocoa/browser_window_controller.h" |
| +#import "chrome/browser/ui/cocoa/exclusive_access_bubble_window_controller.h" |
| +#include "chrome/browser/ui/status_bubble.h" |
| + |
| +ExclusiveAccessController::ExclusiveAccessController( |
| + BrowserWindowController* controller, |
| + Browser* browser) |
| + : controller_(controller), |
| + browser_(browser), |
| + bubble_type_(EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE) {} |
| + |
| +ExclusiveAccessController::~ExclusiveAccessController() {} |
| + |
| +void ExclusiveAccessController::Show() { |
| + [cocoa_bubble_ closeImmediately]; |
| + cocoa_bubble_.reset([[ExclusiveAccessBubbleWindowController alloc] |
| + initWithOwner:controller_ |
| + exclusive_access_manager:browser_->exclusive_access_manager() |
| + profile:browser_->profile() |
| + url:url_ |
| + bubbleType:bubble_type_]); |
| + [cocoa_bubble_ showWindow]; |
| +} |
| + |
| +void ExclusiveAccessController::Destroy() { |
| + [cocoa_bubble_ closeImmediately]; |
| + cocoa_bubble_.reset(); |
| + url_ = GURL(); |
| + bubble_type_ = EXCLUSIVE_ACCESS_BUBBLE_TYPE_NONE; |
| +} |
| + |
| +void ExclusiveAccessController::Layout(CGFloat max_y) { |
| + [cocoa_bubble_ positionInWindowAtTop:max_y]; |
| +} |
| + |
| +Profile* ExclusiveAccessController::GetProfile() { |
| + return browser_->profile(); |
| +} |
| + |
| +bool ExclusiveAccessController::IsFullscreen() const { |
| + return [controller_ isInAnyFullscreenMode]; |
| +} |
| + |
| +bool ExclusiveAccessController::SupportsFullscreenWithToolbar() const { |
| + return chrome::mac::SupportsSystemFullscreen(); |
| +} |
| + |
| +void ExclusiveAccessController::UpdateFullscreenWithToolbar(bool with_toolbar) { |
| + [controller_ updateFullscreenWithToolbar:with_toolbar]; |
| +} |
| + |
| +void ExclusiveAccessController::ToggleFullscreenToolbar() { |
| + [controller_ toggleFullscreenToolbar]; |
| +} |
| + |
| +bool ExclusiveAccessController::IsFullscreenWithToolbar() const { |
| + return IsFullscreen() && ![controller_ inPresentationMode]; |
| +} |
| + |
| +// See browser_window_controller.h for a detailed explanation of the logic in |
|
scheib
2016/02/02 23:14:41
Be more specific -- the "Fullscreen terminology" s
tapted
2016/02/02 23:55:23
Done.
|
| +// this method. |
| +void ExclusiveAccessController::EnterFullscreen( |
| + const GURL& url, |
| + ExclusiveAccessBubbleType bubble_type, |
| + bool with_toolbar) { |
| + url_ = url; |
| + bubble_type_ = bubble_type; |
| + if (browser_->exclusive_access_manager() |
| + ->fullscreen_controller() |
| + ->IsWindowFullscreenForTabOrPending()) |
| + [controller_ enterWebContentFullscreen]; |
| + else if (!url.is_empty()) |
| + [controller_ enterExtensionFullscreen]; |
| + else |
| + [controller_ enterBrowserFullscreenWithToolbar:with_toolbar]; |
| +} |
| + |
| +void ExclusiveAccessController::ExitFullscreen() { |
| + [controller_ exitAnyFullscreen]; |
| +} |
| + |
| +void ExclusiveAccessController::UpdateExclusiveAccessExitBubbleContent( |
| + const GURL& url, |
| + ExclusiveAccessBubbleType bubble_type) { |
| + url_ = url; |
| + bubble_type_ = bubble_type; |
| + [controller_ updateFullscreenExitBubble]; |
| +} |
| + |
| +void ExclusiveAccessController::OnExclusiveAccessUserInput() { |
| + // TODO(mgiuca): Route this signal to the exclusive access bubble on Mac. |
| +} |
| + |
| +content::WebContents* ExclusiveAccessController::GetActiveWebContents() { |
| + return browser_->tab_strip_model()->GetActiveWebContents(); |
| +} |
| + |
| +void ExclusiveAccessController::UnhideDownloadShelf() { |
| + GetBrowserWindow()->GetDownloadShelf()->Unhide(); |
| +} |
| + |
| +void ExclusiveAccessController::HideDownloadShelf() { |
| + GetBrowserWindow()->GetDownloadShelf()->Hide(); |
| + StatusBubble* statusBubble = GetBrowserWindow()->GetStatusBubble(); |
| + if (statusBubble) |
| + statusBubble->Hide(); |
| +} |
| + |
| +BrowserWindow* ExclusiveAccessController::GetBrowserWindow() const { |
| + return [controller_ browserWindow]; |
| +} |