OLD | NEW |
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 #ifndef CHROME_BROWSER_UI_PANELS_PANEL_H_ | 5 #ifndef CHROME_BROWSER_UI_PANELS_PANEL_H_ |
6 #define CHROME_BROWSER_UI_PANELS_PANEL_H_ | 6 #define CHROME_BROWSER_UI_PANELS_PANEL_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include "chrome/browser/ui/browser_window.h" | |
10 | |
11 #include "base/gtest_prod_util.h" | 9 #include "base/gtest_prod_util.h" |
12 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| 11 #include "chrome/browser/ui/base_window.h" |
13 #include "chrome/browser/ui/panels/panel_constants.h" | 12 #include "chrome/browser/ui/panels/panel_constants.h" |
14 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h" | |
15 #include "content/public/browser/notification_observer.h" | 13 #include "content/public/browser/notification_observer.h" |
16 #include "content/public/browser/notification_registrar.h" | 14 #include "content/public/browser/notification_registrar.h" |
17 #include "ui/gfx/rect.h" | 15 #include "ui/gfx/rect.h" |
18 | 16 |
| 17 class Browser; |
| 18 class BrowserWindow; |
19 class NativePanel; | 19 class NativePanel; |
| 20 class PanelBrowserWindow; |
20 class PanelManager; | 21 class PanelManager; |
21 class PanelStrip; | 22 class PanelStrip; |
22 | 23 |
23 namespace extensions { | 24 namespace content { |
24 class Extension; | 25 class WebContents; |
25 } | 26 } |
26 | 27 |
27 // A platform independent implementation of BrowserWindow for Panels. This | 28 // A platform independent implementation of BaseWindow for Panels. |
28 // class would get the first crack at all the BrowserWindow calls for Panels and | 29 // This class gets the first crack at all the BaseWindow calls for Panels and |
29 // do one or more of the following: | 30 // does one or more of the following: |
30 // - Do nothing. The function is not relevant to Panels. | 31 // - Do nothing. The function is not relevant to Panels. |
31 // - Throw an exceptions. The function shouldn't be called for Panels. | |
32 // - Do Panel specific platform independent processing and then invoke the | 32 // - Do Panel specific platform independent processing and then invoke the |
33 // function on the platform specific BrowserWindow member. For example, | 33 // function on the platform specific member. For example, restrict panel |
34 // Panel size is restricted to certain limits. | 34 // size to certain limits. |
35 // - Invoke an appropriate PanelManager function to do stuff that might affect | 35 // - Invoke an appropriate PanelManager function to do stuff that might affect |
36 // other Panels. For example deleting a panel would rearrange other panels. | 36 // other Panels. For example deleting a panel would rearrange other panels. |
37 class Panel : public BrowserWindow, | 37 class Panel : public BaseWindow, |
38 public TabStripModelObserver, | |
39 public content::NotificationObserver { | 38 public content::NotificationObserver { |
40 public: | 39 public: |
41 enum ExpansionState { | 40 enum ExpansionState { |
42 // The panel is fully expanded with both title-bar and the client-area. | 41 // The panel is fully expanded with both title-bar and the client-area. |
43 EXPANDED, | 42 EXPANDED, |
44 // The panel is shown with the title-bar only. | 43 // The panel is shown with the title-bar only. |
45 TITLE_ONLY, | 44 TITLE_ONLY, |
46 // The panel is shown with 3-pixel line. | 45 // The panel is shown with 3-pixel line. |
47 MINIMIZED | 46 MINIMIZED |
48 }; | 47 }; |
49 | 48 |
50 // Controls how the attention should be drawn. | 49 // Controls how the attention should be drawn. |
51 enum AttentionMode { | 50 enum AttentionMode { |
52 // Uses the panel attention. The panel's titlebar would be painted | 51 // Uses the panel attention. The panel's titlebar would be painted |
53 // differently to attract the user's attention. This is the default mode. | 52 // differently to attract the user's attention. This is the default mode. |
54 USE_PANEL_ATTENTION = 0x01, | 53 USE_PANEL_ATTENTION = 0x01, |
55 // Uses the system attention. On Windows or Linux (depending on Window | 54 // Uses the system attention. On Windows or Linux (depending on Window |
56 // Manager), the app icon on taskbar will be flashed. On MacOS, the dock | 55 // Manager), the app icon on taskbar will be flashed. On MacOS, the dock |
57 // icon will jump once. | 56 // icon will jump once. |
(...skipping 23 matching lines...) Expand all Loading... |
81 // top-most windows. | 80 // top-most windows. |
82 void EnsureFullyVisible(); | 81 void EnsureFullyVisible(); |
83 | 82 |
84 int TitleOnlyHeight() const; | 83 int TitleOnlyHeight() const; |
85 | 84 |
86 // Returns true if the panel can be minimized or restored, depending on the | 85 // Returns true if the panel can be minimized or restored, depending on the |
87 // strip the panel is in. | 86 // strip the panel is in. |
88 bool CanMinimize() const; | 87 bool CanMinimize() const; |
89 bool CanRestore() const; | 88 bool CanRestore() const; |
90 | 89 |
91 // BrowserWindow overrides. | 90 // BaseWindow overrides. |
| 91 virtual bool IsActive() const OVERRIDE; |
| 92 virtual bool IsMaximized() const OVERRIDE; |
| 93 virtual bool IsMinimized() const OVERRIDE; |
| 94 virtual bool IsFullscreen() const OVERRIDE; |
| 95 virtual gfx::Rect GetRestoredBounds() const OVERRIDE; |
| 96 virtual gfx::Rect GetBounds() const OVERRIDE; |
92 virtual void Show() OVERRIDE; | 97 virtual void Show() OVERRIDE; |
93 virtual void ShowInactive() OVERRIDE; | 98 virtual void ShowInactive() OVERRIDE; |
94 virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE; | |
95 virtual void Close() OVERRIDE; | 99 virtual void Close() OVERRIDE; |
96 virtual void Activate() OVERRIDE; | 100 virtual void Activate() OVERRIDE; |
97 virtual void Deactivate() OVERRIDE; | 101 virtual void Deactivate() OVERRIDE; |
98 virtual bool IsActive() const OVERRIDE; | |
99 virtual void FlashFrame(bool flash) OVERRIDE; | |
100 virtual bool IsAlwaysOnTop() const OVERRIDE; | |
101 virtual gfx::NativeWindow GetNativeHandle() OVERRIDE; | |
102 virtual BrowserWindowTesting* GetBrowserWindowTesting() OVERRIDE; | |
103 virtual StatusBubble* GetStatusBubble() OVERRIDE; | |
104 virtual void ToolbarSizeChanged(bool is_animating) OVERRIDE; | |
105 virtual void UpdateTitleBar() OVERRIDE; | |
106 virtual void BookmarkBarStateChanged( | |
107 BookmarkBar::AnimateChangeType change_type) OVERRIDE; | |
108 virtual void UpdateDevTools() OVERRIDE; | |
109 virtual void SetDevToolsDockSide(DevToolsDockSide side) OVERRIDE; | |
110 virtual void UpdateLoadingAnimations(bool should_animate) OVERRIDE; | |
111 virtual void SetStarredState(bool is_starred) OVERRIDE; | |
112 virtual gfx::Rect GetRestoredBounds() const OVERRIDE; | |
113 virtual gfx::Rect GetBounds() const OVERRIDE; | |
114 virtual bool IsMaximized() const OVERRIDE; | |
115 virtual bool IsMinimized() const OVERRIDE; | |
116 virtual void Maximize() OVERRIDE; | 102 virtual void Maximize() OVERRIDE; |
117 virtual void Minimize() OVERRIDE; | 103 virtual void Minimize() OVERRIDE; |
118 virtual void Restore() OVERRIDE; | 104 virtual void Restore() OVERRIDE; |
119 virtual void EnterFullscreen( | 105 virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE; |
120 const GURL& url, FullscreenExitBubbleType type) OVERRIDE; | 106 virtual void SetDraggableRegion(SkRegion* region) OVERRIDE; |
121 virtual void ExitFullscreen() OVERRIDE; | 107 virtual void FlashFrame(bool flash) OVERRIDE; |
122 virtual void UpdateFullscreenExitBubbleContent( | 108 virtual bool IsAlwaysOnTop() const OVERRIDE; |
123 const GURL& url, | |
124 FullscreenExitBubbleType bubble_type) OVERRIDE; | |
125 virtual bool IsFullscreen() const OVERRIDE; | |
126 virtual bool IsFullscreenBubbleVisible() const OVERRIDE; | |
127 virtual LocationBar* GetLocationBar() const OVERRIDE; | |
128 virtual void SetFocusToLocationBar(bool select_all) OVERRIDE; | |
129 virtual void UpdateReloadStopState(bool is_loading, bool force) OVERRIDE; | |
130 virtual void UpdateToolbar(TabContentsWrapper* contents, | |
131 bool should_restore_state) OVERRIDE; | |
132 virtual void FocusToolbar() OVERRIDE; | |
133 virtual void FocusAppMenu() OVERRIDE; | |
134 virtual void FocusBookmarksToolbar() OVERRIDE; | |
135 virtual void RotatePaneFocus(bool forwards) OVERRIDE; | |
136 virtual bool IsBookmarkBarVisible() const OVERRIDE; | |
137 virtual bool IsBookmarkBarAnimating() const OVERRIDE; | |
138 virtual bool IsTabStripEditable() const OVERRIDE; | |
139 virtual bool IsToolbarVisible() const OVERRIDE; | |
140 virtual gfx::Rect GetRootWindowResizerRect() const OVERRIDE; | |
141 virtual bool IsPanel() const OVERRIDE; | |
142 virtual void DisableInactiveFrame() OVERRIDE; | |
143 virtual void ConfirmAddSearchProvider(TemplateURL* template_url, | |
144 Profile* profile) OVERRIDE; | |
145 virtual void ToggleBookmarkBar() OVERRIDE; | |
146 virtual void ShowAboutChromeDialog() OVERRIDE; | |
147 virtual void ShowUpdateChromeDialog() OVERRIDE; | |
148 virtual void ShowTaskManager() OVERRIDE; | |
149 virtual void ShowBackgroundPages() OVERRIDE; | |
150 virtual void ShowBookmarkBubble( | |
151 const GURL& url, bool already_bookmarked) OVERRIDE; | |
152 virtual void ShowChromeToMobileBubble() OVERRIDE; | |
153 #if defined(ENABLE_ONE_CLICK_SIGNIN) | |
154 virtual void ShowOneClickSigninBubble( | |
155 const base::Closure& learn_more_callback, | |
156 const base::Closure& advanced_callback) OVERRIDE; | |
157 #endif | |
158 virtual bool IsDownloadShelfVisible() const OVERRIDE; | |
159 virtual DownloadShelf* GetDownloadShelf() OVERRIDE; | |
160 virtual void ConfirmBrowserCloseWithPendingDownloads() OVERRIDE; | |
161 virtual void UserChangedTheme() OVERRIDE; | |
162 virtual int GetExtraRenderViewHeight() const OVERRIDE; | |
163 virtual void WebContentsFocused(content::WebContents* contents) OVERRIDE; | |
164 virtual void ShowPageInfo(Profile* profile, | |
165 const GURL& url, | |
166 const content::SSLStatus& ssl, | |
167 bool show_history) OVERRIDE; | |
168 virtual void ShowWebsiteSettings(Profile* profile, | |
169 TabContentsWrapper* tab_contents_wrapper, | |
170 const GURL& url, | |
171 const content::SSLStatus& ssl, | |
172 bool show_history) OVERRIDE; | |
173 virtual void ShowAppMenu() OVERRIDE; | |
174 virtual bool PreHandleKeyboardEvent( | |
175 const content::NativeWebKeyboardEvent& event, | |
176 bool* is_keyboard_shortcut) OVERRIDE; | |
177 virtual void HandleKeyboardEvent( | |
178 const content::NativeWebKeyboardEvent& event) OVERRIDE; | |
179 virtual void ShowCreateWebAppShortcutsDialog( | |
180 TabContentsWrapper* tab_contents) OVERRIDE; | |
181 virtual void ShowCreateChromeAppShortcutsDialog( | |
182 Profile* profile, const extensions::Extension* app) OVERRIDE; | |
183 virtual void Cut() OVERRIDE; | |
184 virtual void Copy() OVERRIDE; | |
185 virtual void Paste() OVERRIDE; | |
186 #if defined(OS_MACOSX) | |
187 virtual void OpenTabpose() OVERRIDE; | |
188 virtual void EnterPresentationMode( | |
189 const GURL& url, | |
190 FullscreenExitBubbleType bubble_type) OVERRIDE; | |
191 virtual void ExitPresentationMode() OVERRIDE; | |
192 virtual bool InPresentationMode() OVERRIDE; | |
193 #endif | |
194 virtual void ShowInstant(TabContentsWrapper* preview) OVERRIDE; | |
195 virtual void HideInstant() OVERRIDE; | |
196 virtual gfx::Rect GetInstantBounds() OVERRIDE; | |
197 virtual WindowOpenDisposition GetDispositionForPopupBounds( | |
198 const gfx::Rect& bounds) OVERRIDE; | |
199 virtual FindBar* CreateFindBar() OVERRIDE; | |
200 virtual void ResizeDueToAutoResize(content::WebContents* web_contents, | |
201 const gfx::Size& new_size) OVERRIDE; | |
202 virtual void ShowAvatarBubble(content::WebContents* web_contents, | |
203 const gfx::Rect& rect) OVERRIDE; | |
204 virtual void ShowAvatarBubbleFromAvatarButton() OVERRIDE; | |
205 | |
206 // TabStripModelObserver overrides. | |
207 virtual void TabInsertedAt(TabContentsWrapper* contents, | |
208 int index, | |
209 bool foreground) OVERRIDE; | |
210 | 109 |
211 // content::NotificationObserver overrides. | 110 // content::NotificationObserver overrides. |
212 virtual void Observe(int type, | 111 virtual void Observe(int type, |
213 const content::NotificationSource& source, | 112 const content::NotificationSource& source, |
214 const content::NotificationDetails& details) OVERRIDE; | 113 const content::NotificationDetails& details) OVERRIDE; |
215 | 114 |
216 // Construct a native panel BrowserWindow implementation for the specified | 115 // Construct a native panel BrowserWindow implementation for the specified |
217 // |browser|. | 116 // |browser|. |
218 static NativePanel* CreateNativePanel(Browser* browser, | 117 static NativePanel* CreateNativePanel(Browser* browser, |
219 Panel* panel, | 118 Panel* panel, |
220 const gfx::Rect& bounds); | 119 const gfx::Rect& bounds); |
221 | 120 |
222 // Invoked when the native panel has detected a mouse click on the | 121 // Invoked when the native panel has detected a mouse click on the |
223 // panel's titlebar, minimize or restore buttons. Behavior of the | 122 // panel's titlebar, minimize or restore buttons. Behavior of the |
224 // click may be modified as indicated by |modifier|. | 123 // click may be modified as indicated by |modifier|. |
225 void OnTitlebarClicked(panel::ClickModifier modifier); | 124 void OnTitlebarClicked(panel::ClickModifier modifier); |
226 void OnMinimizeButtonClicked(panel::ClickModifier modifier); | 125 void OnMinimizeButtonClicked(panel::ClickModifier modifier); |
227 void OnRestoreButtonClicked(panel::ClickModifier modifier); | 126 void OnRestoreButtonClicked(panel::ClickModifier modifier); |
228 | 127 |
229 // Used on platforms where the panel cannot determine its window size | 128 // Used on platforms where the panel cannot determine its window size |
230 // until the window has been created. (e.g. GTK) | 129 // until the window has been created. (e.g. GTK) |
231 void OnWindowSizeAvailable(); | 130 void OnWindowSizeAvailable(); |
232 | 131 |
233 // Asynchronous completion of panel close request. | 132 // Asynchronous completion of panel close request. |
234 void OnNativePanelClosed(); | 133 void OnNativePanelClosed(); |
235 | 134 |
236 NativePanel* native_panel() { return native_panel_; } | 135 NativePanel* native_panel() { return native_panel_; } |
237 Browser* browser() const { return browser_; } | 136 Browser* browser() const { return browser_; } |
| 137 BrowserWindow* browser_window() const; |
238 | 138 |
239 // May be NULL if: | 139 // May be NULL if: |
240 // * panel is newly created and has not been positioned yet. | 140 // * panel is newly created and has not been positioned yet. |
241 // * panel is being closed asynchronously. | 141 // * panel is being closed asynchronously. |
242 // Please use it with caution. | 142 // Please use it with caution. |
243 PanelStrip* panel_strip() const { return panel_strip_; } | 143 PanelStrip* panel_strip() const { return panel_strip_; } |
244 | 144 |
245 // Sets the current panel strip that contains this panel. | 145 // Sets the current panel strip that contains this panel. |
246 void set_panel_strip(PanelStrip* new_strip) { panel_strip_ = new_strip; } | 146 void set_panel_strip(PanelStrip* new_strip) { panel_strip_ = new_strip; } |
247 | 147 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
281 // Ensures that the panel's size does not exceed the display area by | 181 // Ensures that the panel's size does not exceed the display area by |
282 // updating maximum and full size of the panel. This is called each time | 182 // updating maximum and full size of the panel. This is called each time |
283 // when display settings are changed. Note that bounds are not updated here | 183 // when display settings are changed. Note that bounds are not updated here |
284 // and the call of setting bounds or refreshing layout should be called after | 184 // and the call of setting bounds or refreshing layout should be called after |
285 // this. | 185 // this. |
286 void LimitSizeToDisplayArea(const gfx::Rect& display_area); | 186 void LimitSizeToDisplayArea(const gfx::Rect& display_area); |
287 | 187 |
288 // Sets whether the panel will auto resize according to its content. | 188 // Sets whether the panel will auto resize according to its content. |
289 void SetAutoResizable(bool resizable); | 189 void SetAutoResizable(bool resizable); |
290 | 190 |
| 191 // Configures the web contents for auto resize, including configurations |
| 192 // on the renderer and detecting renderer changes. |
| 193 void EnableWebContentsAutoResize(content::WebContents* web_contents); |
| 194 |
| 195 // Invoked when the preferred window size of the given panel might need to |
| 196 // get changed due to the contents being auto-resized. |
| 197 void OnWindowAutoResized(const gfx::Size& preferred_window_size); |
| 198 |
291 // Sets minimum and maximum size for the panel. | 199 // Sets minimum and maximum size for the panel. |
292 void SetSizeRange(const gfx::Size& min_size, const gfx::Size& max_size); | 200 void SetSizeRange(const gfx::Size& min_size, const gfx::Size& max_size); |
293 | 201 |
294 // Updates the maximum size of the panel so that it's never smaller than the | 202 // Updates the maximum size of the panel so that it's never smaller than the |
295 // panel's desired size. Note that even if the user resizes the panel smaller | 203 // panel's desired size. Note that even if the user resizes the panel smaller |
296 // later, the increased maximum size will still be in effect. Since it's not | 204 // later, the increased maximum size will still be in effect. Since it's not |
297 // possible currently to switch the panel back to autosizing from | 205 // possible currently to switch the panel back to autosizing from |
298 // user-resizable, it should not be a problem. | 206 // user-resizable, it should not be a problem. |
299 void IncreaseMaxSize(const gfx::Size& desired_panel_size); | 207 void IncreaseMaxSize(const gfx::Size& desired_panel_size); |
300 | 208 |
(...skipping 16 matching lines...) Expand all Loading... |
317 gfx::Size ClampSize(const gfx::Size& size) const; | 225 gfx::Size ClampSize(const gfx::Size& size) const; |
318 | 226 |
319 // Called when the panel's active state changes. | 227 // Called when the panel's active state changes. |
320 // |active| is true if panel became active. | 228 // |active| is true if panel became active. |
321 void OnActiveStateChanged(bool active); | 229 void OnActiveStateChanged(bool active); |
322 | 230 |
323 // Called when the panel starts/ends the user resizing. | 231 // Called when the panel starts/ends the user resizing. |
324 void OnPanelStartUserResizing(); | 232 void OnPanelStartUserResizing(); |
325 void OnPanelEndUserResizing(); | 233 void OnPanelEndUserResizing(); |
326 | 234 |
327 protected: | |
328 virtual void DestroyBrowser() OVERRIDE; | |
329 | |
330 private: | 235 private: |
331 friend class PanelManager; | 236 friend class PanelManager; |
332 friend class PanelBrowserTest; | 237 friend class PanelBrowserTest; |
333 FRIEND_TEST_ALL_PREFIXES(PanelBrowserTest, RestoredBounds); | 238 FRIEND_TEST_ALL_PREFIXES(PanelBrowserTest, RestoredBounds); |
334 | 239 |
335 enum MaxSizePolicy { | 240 enum MaxSizePolicy { |
336 // Default maximum size is proportional to the work area. | 241 // Default maximum size is proportional to the work area. |
337 DEFAULT_MAX_SIZE, | 242 DEFAULT_MAX_SIZE, |
338 // Custom maximum size is used when the panel is resized by the user. | 243 // Custom maximum size is used when the panel is resized by the user. |
339 CUSTOM_MAX_SIZE | 244 CUSTOM_MAX_SIZE |
340 }; | 245 }; |
341 | 246 |
342 // Panel can only be created using PanelManager::CreatePanel(). | 247 // Panel can only be created using PanelManager::CreatePanel(). |
343 // |requested_size| is the desired size for the panel, but actual | 248 // |requested_size| is the desired size for the panel, but actual |
344 // size may differ after panel layout. | 249 // size may differ after panel layout. |
345 Panel(Browser* browser, const gfx::Size& requested_size); | 250 Panel(Browser* browser, const gfx::Size& requested_size); |
346 | 251 |
347 // Configures the web contents for auto resize, including configurations | |
348 // on the renderer and detecting renderer changes. | |
349 void EnableWebContentsAutoResize(content::WebContents* web_contents); | |
350 | |
351 // Configures the renderer for auto resize (if auto resize is enabled). | 252 // Configures the renderer for auto resize (if auto resize is enabled). |
352 void ConfigureAutoResize(content::WebContents* web_contents); | 253 void ConfigureAutoResize(content::WebContents* web_contents); |
353 | 254 |
354 Browser* browser_; // Weak, owned by native panel. | 255 Browser* browser_; // Weak, owned by native panel. |
355 | 256 |
| 257 // A BrowserWindow for the browser to interact with. |
| 258 scoped_ptr<PanelBrowserWindow> panel_browser_window_; |
| 259 |
356 // Current collection of panels to which this panel belongs. This determines | 260 // Current collection of panels to which this panel belongs. This determines |
357 // the panel's screen layout. | 261 // the panel's screen layout. |
358 PanelStrip* panel_strip_; // Owned by PanelManager. | 262 PanelStrip* panel_strip_; // Owned by PanelManager. |
359 | 263 |
360 bool initialized_; | 264 bool initialized_; |
361 | 265 |
362 // Stores the full size of the panel so we can restore it after it's | 266 // Stores the full size of the panel so we can restore it after it's |
363 // been minimized or squeezed due to lack of space in the strip. | 267 // been minimized or squeezed due to lack of space in the strip. |
364 gfx::Size full_size_; | 268 gfx::Size full_size_; |
365 | 269 |
(...skipping 25 matching lines...) Expand all Loading... |
391 AttentionMode attention_mode_; | 295 AttentionMode attention_mode_; |
392 | 296 |
393 ExpansionState expansion_state_; | 297 ExpansionState expansion_state_; |
394 | 298 |
395 content::NotificationRegistrar registrar_; | 299 content::NotificationRegistrar registrar_; |
396 | 300 |
397 DISALLOW_COPY_AND_ASSIGN(Panel); | 301 DISALLOW_COPY_AND_ASSIGN(Panel); |
398 }; | 302 }; |
399 | 303 |
400 #endif // CHROME_BROWSER_UI_PANELS_PANEL_H_ | 304 #endif // CHROME_BROWSER_UI_PANELS_PANEL_H_ |
OLD | NEW |