Index: chrome/browser/ui/panels/panel.h |
diff --git a/chrome/browser/ui/panels/panel.h b/chrome/browser/ui/panels/panel.h |
deleted file mode 100644 |
index b5d994472c3f56d30ec49eeee04e01b680a33c39..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/panels/panel.h |
+++ /dev/null |
@@ -1,422 +0,0 @@ |
-// Copyright (c) 2012 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_PANELS_PANEL_H_ |
-#define CHROME_BROWSER_UI_PANELS_PANEL_H_ |
- |
-#include <memory> |
-#include <string> |
- |
-#include "base/macros.h" |
-#include "base/memory/weak_ptr.h" |
-#include "base/strings/string16.h" |
-#include "chrome/browser/command_updater.h" |
-#include "chrome/browser/command_updater_delegate.h" |
-#include "chrome/browser/ui/panels/panel_constants.h" |
-#include "components/sessions/core/session_id.h" |
-#include "content/public/browser/notification_observer.h" |
-#include "content/public/browser/notification_registrar.h" |
-#include "content/public/browser/web_contents_observer.h" |
-#include "extensions/browser/extension_registry_observer.h" |
-#include "ui/base/base_window.h" |
-#include "ui/gfx/geometry/rect.h" |
-#include "ui/gfx/image/image.h" |
- |
-class GURL; |
-class NativePanel; |
-class PanelCollection; |
-class PanelHost; |
-class PanelManager; |
-class Profile; |
-class ScopedKeepAlive; |
-class StackedPanelCollection; |
- |
-namespace content { |
-class SiteInstance; |
-class WebContents; |
-struct NativeWebKeyboardEvent; |
-} |
- |
-namespace extensions { |
-class Extension; |
-class ExtensionRegistry; |
-class WindowController; |
-} |
- |
-// A platform independent implementation of ui::BaseWindow for Panels. |
-// This class gets the first crack at all the ui::BaseWindow calls for Panels |
-// and does one or more of the following: |
-// - Do nothing. The function is not relevant to Panels. |
-// - Do Panel specific platform independent processing and then invoke the |
-// function on the platform specific member. For example, restrict panel |
-// size to certain limits. |
-// - Invoke an appropriate PanelManager function to do stuff that might affect |
-// other Panels. For example deleting a panel would rearrange other panels. |
-class Panel : public ui::BaseWindow, |
- public CommandUpdaterDelegate, |
- public content::NotificationObserver, |
- public content::WebContentsObserver, |
- public extensions::ExtensionRegistryObserver { |
- public: |
- enum ExpansionState { |
- // The panel is fully expanded with both title-bar and the client-area. |
- EXPANDED, |
- // The panel is shown with the title-bar only. |
- TITLE_ONLY, |
- // The panel is shown with 3-pixel line. |
- MINIMIZED |
- }; |
- |
- // Controls how the attention should be drawn. |
- enum AttentionMode { |
- // Uses the panel attention. The panel's titlebar would be painted |
- // differently to attract the user's attention. This is the default mode. |
- USE_PANEL_ATTENTION = 0x01, |
- // Uses the system attention. On Windows or Linux (depending on Window |
- // Manager), the app icon on taskbar will be flashed. On MacOS, the dock |
- // icon will jump once. |
- USE_SYSTEM_ATTENTION = 0x02 |
- }; |
- |
- ~Panel() override; |
- |
- // Returns the PanelManager associated with this panel. |
- PanelManager* manager() const; |
- |
- const std::string& app_name() const { return app_name_; } |
- const gfx::Image& app_icon() const { return app_icon_; } |
- const SessionID& session_id() const { return session_id_; } |
- extensions::WindowController* extension_window_controller() const { |
- return extension_window_controller_.get(); |
- } |
- const std::string extension_id() const; |
- |
- CommandUpdater* command_updater(); |
- Profile* profile() const; |
- |
- const extensions::Extension* GetExtension() const; |
- |
- // Returns web contents of the panel, if any. There may be none if web |
- // contents have not been added to the panel yet. |
- content::WebContents* GetWebContents() const; |
- |
- void SetExpansionState(ExpansionState new_expansion_state); |
- |
- bool IsDrawingAttention() const; |
- |
- // This function will only get called by PanelManager when full screen mode |
- // changes i.e it gets called when an app goes into full screen mode or when |
- // an app exits full screen mode. Panel should respond by making sure |
- // a) it does not go on top when some app enters full screen mode. |
- // b) it remains on top when an app exits full screen mode. |
- void FullScreenModeChanged(bool is_full_screen); |
- |
- int TitleOnlyHeight() const; |
- |
- // Returns true if the panel can show minimize or restore button in its |
- // titlebar, depending on its state. |
- bool CanShowMinimizeButton() const; |
- bool CanShowRestoreButton() const; |
- |
- // ui::BaseWindow overrides. |
- bool IsActive() const override; |
- bool IsMaximized() const override; |
- bool IsMinimized() const override; |
- bool IsFullscreen() const override; |
- gfx::NativeWindow GetNativeWindow() const override; |
- gfx::Rect GetRestoredBounds() const override; |
- ui::WindowShowState GetRestoredState() const override; |
- gfx::Rect GetBounds() const override; |
- void Show() override; |
- void Hide() override; |
- void ShowInactive() override; |
- void Close() override; |
- void Activate() override; |
- void Deactivate() override; |
- void Maximize() override; |
- void Minimize() override; |
- void Restore() override; |
- void SetBounds(const gfx::Rect& bounds) override; |
- void FlashFrame(bool flash) override; |
- bool IsAlwaysOnTop() const override; |
- void SetAlwaysOnTop(bool on_top) override; |
- |
- // Overridden from CommandUpdaterDelegate: |
- void ExecuteCommandWithDisposition(int id, WindowOpenDisposition disposition) |
- override; |
- |
- // content::NotificationObserver overrides. |
- void Observe(int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) override; |
- |
- // content::WebContentsObserver overrides. |
- void RenderViewHostChanged(content::RenderViewHost* old_host, |
- content::RenderViewHost* new_host) override; |
- |
- // extensions::ExtensionRegistryObserver. |
- void OnExtensionUnloaded( |
- content::BrowserContext* browser_context, |
- const extensions::Extension* extension, |
- extensions::UnloadedExtensionInfo::Reason reason) override; |
- |
- // Construct a native panel implementation. |
- static NativePanel* CreateNativePanel(Panel* panel, |
- const gfx::Rect& bounds, |
- bool always_on_top); |
- |
- NativePanel* native_panel() const { return native_panel_; } |
- |
- // Invoked when the native panel has detected a mouse click on the |
- // panel's titlebar, minimize or restore buttons. Behavior of the |
- // click may be modified as indicated by |modifier|. |
- void OnTitlebarClicked(panel::ClickModifier modifier); |
- void OnMinimizeButtonClicked(panel::ClickModifier modifier); |
- void OnRestoreButtonClicked(panel::ClickModifier modifier); |
- |
- // Used on platforms where the panel cannot determine its window size |
- // until the window has been created. (e.g. GTK) |
- void OnWindowSizeAvailable(); |
- |
- // Asynchronous completion of panel close request. |
- void OnNativePanelClosed(); |
- |
- // May be NULL if: |
- // * panel is newly created and has not been positioned yet. |
- // * panel is being closed asynchronously. |
- // Please use it with caution. |
- PanelCollection* collection() const { return collection_; } |
- |
- // Sets the current panel collection that contains this panel. |
- void set_collection(PanelCollection* new_collection) { |
- collection_ = new_collection; |
- } |
- |
- StackedPanelCollection* stack() const; |
- |
- ExpansionState expansion_state() const { return expansion_state_; } |
- const gfx::Size& min_size() const { return min_size_; } |
- const gfx::Size& max_size() const { return max_size_; } |
- bool auto_resizable() const { return auto_resizable_; } |
- |
- bool in_preview_mode() const { return in_preview_mode_; } |
- |
- panel::Resizability CanResizeByMouse() const; |
- |
- AttentionMode attention_mode() const { return attention_mode_; } |
- void set_attention_mode(AttentionMode attention_mode) { |
- attention_mode_ = attention_mode; |
- } |
- |
- // The full size is the size of the panel when it is detached or expanded |
- // in the docked collection and squeezing mode is not on. |
- gfx::Size full_size() const { return full_size_; } |
- void set_full_size(const gfx::Size& size) { full_size_ = size; } |
- |
- // Panel must be initialized to be "fully created" and ready for use. |
- // Only called by PanelManager. |
- bool initialized() const { return initialized_; } |
- void Initialize(const GURL& url, |
- content::SiteInstance* source_site_instance, |
- const gfx::Rect& bounds, |
- bool always_on_top); |
- |
- // This is different from BaseWindow::SetBounds(): |
- // * SetPanelBounds() is only called by PanelManager to manage its position. |
- // * SetBounds() is called by the API to try to change the bounds, which may |
- // only change the size for Panel. |
- void SetPanelBounds(const gfx::Rect& bounds); |
- |
- // Updates the panel bounds instantly without any animation. |
- void SetPanelBoundsInstantly(const gfx::Rect& bounds); |
- |
- // Ensures that the panel's size does not exceed the work area by updating |
- // maximum and full size of the panel. This is called each time when display |
- // settings are changed. Note that bounds are not updated here and the call |
- // of setting bounds or refreshing layout should be called after this. |
- void LimitSizeToWorkArea(const gfx::Rect& work_area); |
- |
- // Sets whether the panel will auto resize according to its content. |
- void SetAutoResizable(bool resizable); |
- |
- // Configures the web contents for auto resize, including configurations |
- // on the renderer and detecting renderer changes. |
- void EnableWebContentsAutoResize(content::WebContents* web_contents); |
- |
- // Invoked when the preferred window size of the given panel might need to |
- // get changed due to the contents being auto-resized. |
- void OnContentsAutoResized(const gfx::Size& new_content_size); |
- |
- // Resizes the panel and sets the origin. Invoked when the panel is resized |
- // via the mouse. |
- void OnWindowResizedByMouse(const gfx::Rect& new_bounds); |
- |
- // Sets minimum and maximum size for the panel. |
- void SetSizeRange(const gfx::Size& min_size, const gfx::Size& max_size); |
- |
- // Updates the maximum size of the panel so that it's never smaller than the |
- // panel's desired size. Note that even if the user resizes the panel smaller |
- // later, the increased maximum size will still be in effect. Since it's not |
- // possible currently to switch the panel back to autosizing from |
- // user-resizable, it should not be a problem. |
- void IncreaseMaxSize(const gfx::Size& desired_panel_size); |
- |
- // Handles keyboard events coming back from the renderer. |
- void HandleKeyboardEvent(const content::NativeWebKeyboardEvent& event); |
- |
- // Sets whether the panel is shown in preview mode. When the panel is |
- // being dragged, it is in preview mode. |
- void SetPreviewMode(bool in_preview_mode); |
- |
- // Sets whether the minimize or restore button, if any, are visible. |
- void UpdateMinimizeRestoreButtonVisibility(); |
- |
- // Changes the preferred size to acceptable based on min_size() and max_size() |
- gfx::Size ClampSize(const gfx::Size& size) const; |
- |
- // Called when the panel's active state changes. |
- // |active| is true if panel became active. |
- void OnActiveStateChanged(bool active); |
- |
- // Called when the panel starts/ends the user resizing. |
- void OnPanelStartUserResizing(); |
- void OnPanelEndUserResizing(); |
- |
- // Gives beforeunload handlers the chance to cancel the close. |
- bool ShouldCloseWindow(); |
- |
- // Invoked when the window containing us is closing. Performs the necessary |
- // cleanup. |
- void OnWindowClosing(); |
- |
- // Executes a command if it's enabled. |
- // Returns true if the command is executed. |
- bool ExecuteCommandIfEnabled(int id); |
- |
- // Gets the title of the window from the web contents. |
- base::string16 GetWindowTitle() const; |
- |
- // Gets the Favicon of the web contents. |
- gfx::Image GetCurrentPageIcon() const; |
- |
- // Updates the title bar to display the current title and icon. |
- void UpdateTitleBar(); |
- |
- // Updates UI to reflect change in loading state. |
- void LoadingStateChanged(bool is_loading); |
- |
- // Moves the panel by delta instantly. |
- void MoveByInstantly(const gfx::Vector2d& delta_origin); |
- |
- // Applies |corner_style| to the panel window. |
- void SetWindowCornerStyle(panel::CornerStyle corner_style); |
- |
- // Performs the system minimize for the panel, i.e. becoming iconic. |
- void MinimizeBySystem(); |
- |
- bool IsMinimizedBySystem() const; |
- |
- // Returns true if the panel is shown in the active desktop. The user could |
- // create or use multiple desktops or workspaces. |
- bool IsShownOnActiveDesktop() const; |
- |
- // Turns on/off the shadow effect around the window shape. |
- void ShowShadow(bool show); |
- |
- protected: |
- // Panel can only be created using PanelManager::CreatePanel() or subclass. |
- // |app_name| is the default title for Panels when the page content does not |
- // provide a title. For extensions, this is usually the application name |
- // generated from the extension id. |
- Panel(Profile* profile, const std::string& app_name, |
- const gfx::Size& min_size, const gfx::Size& max_size); |
- |
- private: |
- friend class PanelManager; |
- friend class PanelBrowserTest; |
- |
- enum MaxSizePolicy { |
- // Default maximum size is proportional to the work area. |
- DEFAULT_MAX_SIZE, |
- // Custom maximum size is used when the panel is resized by the user. |
- CUSTOM_MAX_SIZE |
- }; |
- |
- void OnImageLoaded(const gfx::Image& image); |
- |
- // Initialize state for all supported commands. |
- void InitCommandState(); |
- |
- // Configures the renderer for auto resize (if auto resize is enabled). |
- void ConfigureAutoResize(content::WebContents* web_contents); |
- |
- // Load the app's image, firing a load state change when loaded. |
- void UpdateAppIcon(); |
- |
- // Prepares a title string for display (removes embedded newlines, etc). |
- static void FormatTitleForDisplay(base::string16* title); |
- |
- // The application name that is also the name of the window when the |
- // page content does not provide a title. |
- // This name should be set when the panel is created. |
- const std::string app_name_; |
- |
- Profile* profile_; |
- |
- // Current collection of panels to which this panel belongs. This determines |
- // the panel's screen layout. |
- PanelCollection* collection_; // Owned by PanelManager. |
- |
- bool initialized_; |
- |
- // Stores the full size of the panel so we can restore it after it's |
- // been minimized or squeezed due to lack of space in the collection. |
- gfx::Size full_size_; |
- |
- // This is the minimum size that the panel can shrink to. |
- gfx::Size min_size_; |
- |
- // This is the size beyond which the panel is not going to grow to accomodate |
- // the growing content and WebKit would add the scrollbars in such case. |
- gfx::Size max_size_; |
- |
- MaxSizePolicy max_size_policy_; |
- |
- // True if this panel auto resizes based on content. |
- bool auto_resizable_; |
- |
- // True if this panel is in preview mode. When in preview mode, panel bounds |
- // should not be affected by layout refresh. This is currently used by drag |
- // controller to add a panel to the collection without causing its bounds to |
- // change. |
- bool in_preview_mode_; |
- |
- // Platform specifc implementation for panels. It'd be one of |
- // PanelGtk/PanelView/PanelCocoa. |
- NativePanel* native_panel_; // Weak, owns us. |
- |
- AttentionMode attention_mode_; |
- |
- ExpansionState expansion_state_; |
- |
- // The CommandUpdater manages the window commands. |
- CommandUpdater command_updater_; |
- |
- content::NotificationRegistrar registrar_; |
- extensions::ExtensionRegistry* extension_registry_; |
- const SessionID session_id_; |
- std::unique_ptr<extensions::WindowController> extension_window_controller_; |
- std::unique_ptr<PanelHost> panel_host_; |
- |
- // Icon showed in the task bar. |
- gfx::Image app_icon_; |
- |
- std::unique_ptr<ScopedKeepAlive> keep_alive_; |
- |
- base::WeakPtrFactory<Panel> image_loader_ptr_factory_; |
- |
- DISALLOW_COPY_AND_ASSIGN(Panel); |
-}; |
- |
-#endif // CHROME_BROWSER_UI_PANELS_PANEL_H_ |