OLD | NEW |
(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 |
OLD | NEW |