| // Copyright (c) 2015 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. |
| |
| #ifndef CHROME_BROWSER_UI_EXCLUSIVE_ACCESS_EXCLUSIVE_ACCESS_CONTEXT_H_ |
| #define CHROME_BROWSER_UI_EXCLUSIVE_ACCESS_EXCLUSIVE_ACCESS_CONTEXT_H_ |
| |
| #include "build/build_config.h" |
| #include "chrome/browser/ui/exclusive_access/exclusive_access_bubble_hide_callback.h" |
| #include "chrome/browser/ui/exclusive_access/exclusive_access_bubble_type.h" |
| |
| class ExclusiveAccessBubbleViews; |
| class GURL; |
| class Profile; |
| |
| namespace content { |
| class WebContents; |
| } |
| |
| // Context in which exclusive access operation is being performed. This |
| // interface is implemented once in Browser context and in Platform Application |
| // context. |
| class ExclusiveAccessContext { |
| public: |
| enum TabFullscreenState { |
| STATE_ENTER_TAB_FULLSCREEN, |
| STATE_EXIT_TAB_FULLSCREEN, |
| }; |
| |
| virtual ~ExclusiveAccessContext() {} |
| |
| // Returns the current profile associated with the window. |
| virtual Profile* GetProfile() = 0; |
| |
| // Returns true if the window hosting the exclusive access bubble is |
| // fullscreen. |
| virtual bool IsFullscreen() const = 0; |
| |
| // Called when we transition between tab and browser fullscreen. This method |
| // updates the UI by showing/hiding the tab strip, toolbar and bookmark bar |
| // in the browser fullscreen. Currently only supported on Mac. |
| virtual void UpdateUIForTabFullscreen(TabFullscreenState state); |
| |
| // Updates the toolbar state to be hidden or shown in fullscreen according to |
| // the preference's state. Only supported on Mac. |
| virtual void UpdateFullscreenToolbar(); |
| |
| // Enters fullscreen and update exit bubble. |
| virtual void EnterFullscreen(const GURL& url, |
| ExclusiveAccessBubbleType bubble_type) = 0; |
| |
| // Exits fullscreen and update exit bubble. |
| virtual void ExitFullscreen() = 0; |
| |
| // Updates the content of exclusive access exit bubble content. |
| virtual void UpdateExclusiveAccessExitBubbleContent( |
| const GURL& url, |
| ExclusiveAccessBubbleType bubble_type, |
| ExclusiveAccessBubbleHideCallback bubble_first_hide_callback, |
| bool force_update) = 0; |
| |
| // Informs the exclusive access system of some user input, which may update |
| // internal timers and/or re-display the bubble. |
| virtual void OnExclusiveAccessUserInput() = 0; |
| |
| // Returns the currently active WebContents, or nullptr if there is none. |
| virtual content::WebContents* GetActiveWebContents() = 0; |
| |
| // TODO(sriramsr): This is abstraction violation as the following two function |
| // does not apply to a platform app window. Ideally, the BrowserView should |
| // hide/unhide its download shelf widget when it is instructed to enter/exit |
| // fullscreen mode. |
| // Displays the download shelf associated with currently active window. |
| virtual void UnhideDownloadShelf() = 0; |
| |
| // Hides download shelf associated with currently active window. |
| virtual void HideDownloadShelf() = 0; |
| |
| // TODO(yuweih): These two methods may not be needed once MacViews is |
| // launched. |
| // Returns true if there is no browser control in fullscreen, i.e. the browser |
| // doesn't drop a slide-down panel with controls in it. |
| virtual bool ShouldHideUIForFullscreen() const = 0; |
| |
| // Accessor for the FullscreenExitBubbleViews. |
| virtual ExclusiveAccessBubbleViews* GetExclusiveAccessBubble() = 0; |
| }; |
| |
| #endif // CHROME_BROWSER_UI_EXCLUSIVE_ACCESS_EXCLUSIVE_ACCESS_CONTEXT_H_ |