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

Side by Side Diff: chrome/browser/ui/panels/panel_browser_window.cc

Issue 10411036: Separate BrowserWindow from Panel class. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix mac unit_tests compile Created 8 years, 7 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 | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/panels/panel_browser_window.h"
6
7 #include "base/logging.h"
8 #include "chrome/browser/ui/browser.h"
9 #include "chrome/browser/ui/browser_finder.h"
10 #include "chrome/browser/ui/panels/panel.h"
11 #include "chrome/browser/ui/panels/native_panel.h"
12 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
13 #include "chrome/browser/ui/tabs/tab_strip_model.h"
14 #include "chrome/browser/ui/window_sizer.h"
15 #include "content/public/browser/web_contents.h"
16 #include "ui/gfx/rect.h"
17
18 #if defined(USE_AURA)
19 #include "chrome/browser/ui/panels/panel_browser_view.h"
20 #endif
21
22 using content::NativeWebKeyboardEvent;
23 using content::SSLStatus;
24 using content::WebContents;
25
26 PanelBrowserWindow::PanelBrowserWindow(Browser* browser, Panel* panel,
27 NativePanel* native_panel)
28 : browser_(browser),
29 panel_(panel),
30 native_panel_(native_panel) {
31 browser_->tab_strip_model()->AddObserver(this);
32 }
33
34 PanelBrowserWindow::~PanelBrowserWindow() {
35 browser_->tab_strip_model()->RemoveObserver(this);
36 // Invoked by native panel destructor via panel destructor.
37 // Do not access native_panel_ nor panel_ here.
38 }
39
40 // ----------------------------------------------
41 // BaseWindow interface - just delegates to Panel
42 // ----------------------------------------------
43 bool PanelBrowserWindow::IsActive() const {
44 return panel_->IsActive();
45 }
46
47 bool PanelBrowserWindow::IsMaximized() const {
48 return panel_->IsMaximized();
49 }
50
51 bool PanelBrowserWindow::IsMinimized() const {
52 return panel_->IsMinimized();
53 }
54
55 bool PanelBrowserWindow::IsFullscreen() const {
56 return panel_->IsFullscreen();
57 }
58
59 gfx::Rect PanelBrowserWindow::GetRestoredBounds() const {
60 return panel_->GetRestoredBounds();
61 }
62
63 gfx::Rect PanelBrowserWindow::GetBounds() const {
64 return panel_->GetBounds();
65 }
66
67 void PanelBrowserWindow::Show() {
68 panel_->Show();
69 }
70
71 void PanelBrowserWindow::ShowInactive() {
72 panel_->ShowInactive();
73 }
74
75 void PanelBrowserWindow::Close() {
76 panel_->Close();
77 }
78
79 void PanelBrowserWindow::Activate() {
80 panel_->Activate();
81 }
82
83 void PanelBrowserWindow::Deactivate() {
84 panel_->Deactivate();
85 }
86
87 void PanelBrowserWindow::Maximize() {
88 panel_->Maximize();
89 }
90
91 void PanelBrowserWindow::Minimize() {
92 panel_->Minimize();
93 }
94
95 void PanelBrowserWindow::Restore() {
96 panel_->Restore();
97 }
98
99 void PanelBrowserWindow::SetBounds(const gfx::Rect& bounds) {
100 panel_->SetBounds(bounds);
101 }
102
103 void PanelBrowserWindow::SetDraggableRegion(SkRegion* region) {
104 panel_->SetDraggableRegion(region);
105 }
106
107 void PanelBrowserWindow::FlashFrame(bool flash) {
108 panel_->FlashFrame(flash);
109 }
110
111 bool PanelBrowserWindow::IsAlwaysOnTop() const {
112 return panel_->IsAlwaysOnTop();
113 }
114
115 // ------------------------------------------------------------
116 // BrowserWindow interface - either does nothing, delegates to
117 // native panel, delegates to Panel (WebContents handling)
118 // or invoke logic that has nothing to do with panels (GetDownloadShelf).
119 // -----------------------------------------------------------
120 gfx::NativeWindow PanelBrowserWindow::GetNativeHandle() {
121 return native_panel_->GetNativePanelHandle();
122 }
123
124 BrowserWindowTesting* PanelBrowserWindow::GetBrowserWindowTesting() {
125 NOTIMPLEMENTED();
126 return NULL;
127 }
128
129 StatusBubble* PanelBrowserWindow::GetStatusBubble() {
130 // TODO(jennb): Implement. http://crbug.com/102723
131 return NULL;
132 }
133
134 void PanelBrowserWindow::ToolbarSizeChanged(bool is_animating) {
135 NOTIMPLEMENTED();
136 }
137
138 void PanelBrowserWindow::UpdateTitleBar() {
139 native_panel_->UpdatePanelTitleBar();
140 }
141
142 void PanelBrowserWindow::BookmarkBarStateChanged(
143 BookmarkBar::AnimateChangeType change_type) {
144 NOTIMPLEMENTED();
145 }
146
147 void PanelBrowserWindow::UpdateDevTools() {
148 NOTIMPLEMENTED();
149 }
150
151 void PanelBrowserWindow::SetDevToolsDockSide(DevToolsDockSide side) {
152 NOTIMPLEMENTED();
153 }
154
155 void PanelBrowserWindow::UpdateLoadingAnimations(bool should_animate) {
156 native_panel_->UpdatePanelLoadingAnimations(should_animate);
157 }
158
159 void PanelBrowserWindow::SetStarredState(bool is_starred) {
160 // Since panels are typically not bookmarked extension UI windows, they don't
161 // have starred state.
162 }
163
164 void PanelBrowserWindow::EnterFullscreen(
165 const GURL& url, FullscreenExitBubbleType type) {
166 NOTIMPLEMENTED();
167 }
168
169 void PanelBrowserWindow::ExitFullscreen() {
170 NOTIMPLEMENTED();
171 }
172
173 void PanelBrowserWindow::UpdateFullscreenExitBubbleContent(
174 const GURL& url,
175 FullscreenExitBubbleType bubble_type) {
176 NOTIMPLEMENTED();
177 }
178
179 bool PanelBrowserWindow::IsFullscreenBubbleVisible() const {
180 NOTIMPLEMENTED();
181 return false;
182 }
183
184 LocationBar* PanelBrowserWindow::GetLocationBar() const {
185 #if defined(USE_AURA)
186 // TODO(stevenjb): Remove this when Aura panels are implemented post R18.
187 PanelBrowserView* panel_view = static_cast<PanelBrowserView*>(native_panel_);
188 return panel_view->GetLocationBar();
189 #else
190 // Panels do not have a location bar.
191 return NULL;
192 #endif
193 }
194
195 void PanelBrowserWindow::SetFocusToLocationBar(bool select_all) {
196 #if defined(USE_AURA)
197 // TODO(stevenjb): Remove this when Aura panels are implemented post R18.
198 PanelBrowserView* panel_view = static_cast<PanelBrowserView*>(native_panel_);
199 panel_view->SetFocusToLocationBar(select_all);
200 #else
201 // Panels do not have a location bar.
202 #endif
203 }
204
205 void PanelBrowserWindow::UpdateReloadStopState(bool is_loading, bool force) {
206 // Panels don't have stop/reload indicator.
207 }
208
209 void PanelBrowserWindow::UpdateToolbar(TabContentsWrapper* contents,
210 bool should_restore_state) {
211 // Panels do not have a toolbar.
212 }
213
214 void PanelBrowserWindow::FocusToolbar() {
215 // Panels do not have a toolbar.
216 }
217
218 void PanelBrowserWindow::FocusAppMenu() {
219 NOTIMPLEMENTED();
220 }
221
222 void PanelBrowserWindow::FocusBookmarksToolbar() {
223 NOTIMPLEMENTED();
224 }
225
226 void PanelBrowserWindow::RotatePaneFocus(bool forwards) {
227 NOTIMPLEMENTED();
228 }
229
230 bool PanelBrowserWindow::IsBookmarkBarVisible() const {
231 return false;
232 }
233
234 bool PanelBrowserWindow::IsBookmarkBarAnimating() const {
235 return false;
236 }
237
238 // This is used by extensions to decide if a window can be closed.
239 // Always return true as panels do not have tabs that can be dragged,
240 // during which extensions will avoid closing a window.
241 bool PanelBrowserWindow::IsTabStripEditable() const {
242 return true;
243 }
244
245 bool PanelBrowserWindow::IsToolbarVisible() const {
246 NOTIMPLEMENTED();
247 return false;
248 }
249
250 gfx::Rect PanelBrowserWindow::GetRootWindowResizerRect() const {
251 return gfx::Rect();
252 }
253
254 bool PanelBrowserWindow::IsPanel() const {
255 return true;
256 }
257
258 void PanelBrowserWindow::DisableInactiveFrame() {
259 NOTIMPLEMENTED();
260 }
261
262 void PanelBrowserWindow::ConfirmAddSearchProvider(TemplateURL* template_url,
263 Profile* profile) {
264 NOTIMPLEMENTED();
265 }
266
267 void PanelBrowserWindow::ToggleBookmarkBar() {
268 NOTIMPLEMENTED();
269 }
270
271 void PanelBrowserWindow::ShowAboutChromeDialog() {
272 NOTIMPLEMENTED();
273 }
274
275 void PanelBrowserWindow::ShowUpdateChromeDialog() {
276 NOTIMPLEMENTED();
277 }
278
279 void PanelBrowserWindow::ShowTaskManager() {
280 native_panel_->ShowTaskManagerForPanel();
281 }
282
283 void PanelBrowserWindow::ShowBackgroundPages() {
284 NOTIMPLEMENTED();
285 }
286
287 void PanelBrowserWindow::ShowBookmarkBubble(const GURL& url,
288 bool already_bookmarked) {
289 NOTIMPLEMENTED();
290 }
291
292 void PanelBrowserWindow::ShowChromeToMobileBubble() {
293 NOTIMPLEMENTED();
294 }
295
296 #if defined(ENABLE_ONE_CLICK_SIGNIN)
297 void PanelBrowserWindow::ShowOneClickSigninBubble(
298 const base::Closure& learn_more_callback,
299 const base::Closure& advanced_callback) {
300 NOTIMPLEMENTED();
301 }
302 #endif
303
304 bool PanelBrowserWindow::IsDownloadShelfVisible() const {
305 return false;
306 }
307
308 DownloadShelf* PanelBrowserWindow::GetDownloadShelf() {
309 Profile* profile = browser_->profile();
310 Browser* tabbed_browser = browser::FindTabbedBrowser(profile, true);
311
312 if (!tabbed_browser) {
313 // Set initial bounds so window will not be positioned at an offset
314 // to this panel as panels are at the bottom of the screen.
315 gfx::Rect window_bounds;
316 WindowSizer::GetBrowserWindowBounds(std::string(), gfx::Rect(),
317 browser_, &window_bounds);
318 Browser::CreateParams params(Browser::TYPE_TABBED, profile);
319 params.initial_bounds = window_bounds;
320 tabbed_browser = Browser::CreateWithParams(params);
321 tabbed_browser->NewTab();
322 }
323
324 tabbed_browser->window()->Show(); // Ensure download shelf is visible.
325 return tabbed_browser->window()->GetDownloadShelf();
326 }
327
328 void PanelBrowserWindow::ConfirmBrowserCloseWithPendingDownloads() {
329 NOTIMPLEMENTED();
330 }
331
332 void PanelBrowserWindow::UserChangedTheme() {
333 native_panel_->NotifyPanelOnUserChangedTheme();
334 }
335
336 int PanelBrowserWindow::GetExtraRenderViewHeight() const {
337 // This is currently used only on Linux and that returns the height for
338 // optional elements like bookmark bar, download bar etc. Not applicable to
339 // panels.
340 return 0;
341 }
342
343 void PanelBrowserWindow::WebContentsFocused(WebContents* contents) {
344 native_panel_->PanelWebContentsFocused(contents);
345 }
346
347 void PanelBrowserWindow::ShowPageInfo(Profile* profile,
348 const GURL& url,
349 const SSLStatus& ssl,
350 bool show_history) {
351 NOTIMPLEMENTED();
352 }
353 void PanelBrowserWindow::ShowWebsiteSettings(
354 Profile* profile,
355 TabContentsWrapper* tab_contents_wrapper,
356 const GURL& url,
357 const content::SSLStatus& ssl,
358 bool show_history) {
359 NOTIMPLEMENTED();
360 }
361
362 void PanelBrowserWindow::ShowAppMenu() {
363 NOTIMPLEMENTED();
364 }
365
366 bool PanelBrowserWindow::PreHandleKeyboardEvent(
367 const content::NativeWebKeyboardEvent& event,
368 bool* is_keyboard_shortcut) {
369 return native_panel_->PreHandlePanelKeyboardEvent(event,
370 is_keyboard_shortcut);
371 }
372
373 void PanelBrowserWindow::HandleKeyboardEvent(
374 const content::NativeWebKeyboardEvent& event) {
375 native_panel_->HandlePanelKeyboardEvent(event);
376 }
377
378 void PanelBrowserWindow::ShowCreateWebAppShortcutsDialog(
379 TabContentsWrapper* tab_contents) {
380 NOTIMPLEMENTED();
381 }
382
383 void PanelBrowserWindow::ShowCreateChromeAppShortcutsDialog(
384 Profile* profile,
385 const extensions::Extension* app) {
386 NOTIMPLEMENTED();
387 }
388
389 void PanelBrowserWindow::Cut() {
390 native_panel_->PanelCut();
391 }
392
393 void PanelBrowserWindow::Copy() {
394 native_panel_->PanelCopy();
395 }
396
397 void PanelBrowserWindow::Paste() {
398 native_panel_->PanelPaste();
399 }
400
401 #if defined(OS_MACOSX)
402 void PanelBrowserWindow::OpenTabpose() {
403 NOTIMPLEMENTED();
404 }
405
406 void PanelBrowserWindow::EnterPresentationMode(
407 const GURL& url,
408 FullscreenExitBubbleType content_type) {
409 NOTIMPLEMENTED();
410 }
411
412 void PanelBrowserWindow::ExitPresentationMode() {
413 NOTIMPLEMENTED();
414 }
415
416 bool PanelBrowserWindow::InPresentationMode() {
417 NOTIMPLEMENTED();
418 return false;
419 }
420 #endif
421
422 void PanelBrowserWindow::ShowInstant(TabContentsWrapper* preview) {
423 NOTIMPLEMENTED();
424 }
425
426 void PanelBrowserWindow::HideInstant() {
427 NOTIMPLEMENTED();
428 }
429
430 gfx::Rect PanelBrowserWindow::GetInstantBounds() {
431 NOTIMPLEMENTED();
432 return gfx::Rect();
433 }
434
435 WindowOpenDisposition PanelBrowserWindow::GetDispositionForPopupBounds(
436 const gfx::Rect& bounds) {
437 #if defined(USE_AURA)
438 // TODO(stevenjb): Remove this when Aura panels are implemented post R18.
439 PanelBrowserView* panel_view = static_cast<PanelBrowserView*>(native_panel_);
440 return panel_view->GetDispositionForPopupBounds(bounds);
441 #else
442 return NEW_POPUP;
443 #endif
444 }
445
446 FindBar* PanelBrowserWindow::CreateFindBar() {
447 return native_panel_->CreatePanelFindBar();
448 }
449
450 void PanelBrowserWindow::ResizeDueToAutoResize(WebContents* web_contents,
451 const gfx::Size& pref_size) {
452 DCHECK(panel_->auto_resizable());
453 return panel_->OnWindowAutoResized(
454 native_panel_->WindowSizeFromContentSize(pref_size));
455 }
456
457 void PanelBrowserWindow::ShowAvatarBubble(WebContents* web_contents,
458 const gfx::Rect& rect) {
459 // Panels will never show a new tab page so this should never be called.
460 NOTREACHED();
461 }
462
463 void PanelBrowserWindow::ShowAvatarBubbleFromAvatarButton() {
464 // Panels will never show an avatar button so this should never be called.
465 NOTREACHED();
466 }
467
468 void PanelBrowserWindow::DestroyBrowser() {
469 native_panel_->DestroyPanelBrowser();
470 }
471
472 void PanelBrowserWindow::TabInsertedAt(TabContentsWrapper* contents,
473 int index,
474 bool foreground) {
475 if (panel_->auto_resizable()) {
476 DCHECK_EQ(0, index);
477 panel_->EnableWebContentsAutoResize(contents->web_contents());
478 }
479 }
480
481
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698