| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #include "chrome/browser/ui/views/frame/browser_view.h" | 5 #include "chrome/browser/ui/views/frame/browser_view.h" |
| 6 | 6 |
| 7 #if defined(OS_LINUX) | 7 #if defined(OS_LINUX) |
| 8 #include <gtk/gtk.h> | 8 #include <gtk/gtk.h> |
| 9 #endif | 9 #endif |
| 10 | 10 |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 #if defined(OS_CHROMEOS) | 98 #if defined(OS_CHROMEOS) |
| 99 #include "chrome/browser/ui/views/keyboard_overlay_delegate.h" | 99 #include "chrome/browser/ui/views/keyboard_overlay_delegate.h" |
| 100 #endif | 100 #endif |
| 101 | 101 |
| 102 using base::TimeDelta; | 102 using base::TimeDelta; |
| 103 using views::ColumnSet; | 103 using views::ColumnSet; |
| 104 using views::GridLayout; | 104 using views::GridLayout; |
| 105 | 105 |
| 106 // The height of the status bubble. | 106 // The height of the status bubble. |
| 107 static const int kStatusBubbleHeight = 20; | 107 static const int kStatusBubbleHeight = 20; |
| 108 // The name of a key to store on the window handle so that other code can | |
| 109 // locate this object using just the handle. | |
| 110 static const char* const kBrowserViewKey = "__BROWSER_VIEW__"; | |
| 111 // How frequently we check for hung plugin windows. | 108 // How frequently we check for hung plugin windows. |
| 112 static const int kDefaultHungPluginDetectFrequency = 2000; | 109 static const int kDefaultHungPluginDetectFrequency = 2000; |
| 113 // How long do we wait before we consider a window hung (in ms). | 110 // How long do we wait before we consider a window hung (in ms). |
| 114 static const int kDefaultPluginMessageResponseTimeout = 30000; | 111 static const int kDefaultPluginMessageResponseTimeout = 30000; |
| 115 // The number of milliseconds between loading animation frames. | 112 // The number of milliseconds between loading animation frames. |
| 116 static const int kLoadingAnimationFrameTimeMs = 30; | 113 static const int kLoadingAnimationFrameTimeMs = 30; |
| 117 // The amount of space we expect the window border to take up. | 114 // The amount of space we expect the window border to take up. |
| 118 static const int kWindowBorderWidth = 5; | 115 static const int kWindowBorderWidth = 5; |
| 119 | 116 |
| 120 // If not -1, windows are shown with this state. | 117 // If not -1, windows are shown with this state. |
| (...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 443 contents_(NULL), | 440 contents_(NULL), |
| 444 contents_split_(NULL), | 441 contents_split_(NULL), |
| 445 initialized_(false), | 442 initialized_(false), |
| 446 ignore_layout_(true) | 443 ignore_layout_(true) |
| 447 #if defined(OS_WIN) | 444 #if defined(OS_WIN) |
| 448 , hung_window_detector_(&hung_plugin_action_), | 445 , hung_window_detector_(&hung_plugin_action_), |
| 449 ticker_(0) | 446 ticker_(0) |
| 450 #endif | 447 #endif |
| 451 { | 448 { |
| 452 browser_->tabstrip_model()->AddObserver(this); | 449 browser_->tabstrip_model()->AddObserver(this); |
| 453 | |
| 454 registrar_.Add(this, | 450 registrar_.Add(this, |
| 455 NotificationType::SIDEBAR_CHANGED, | 451 NotificationType::SIDEBAR_CHANGED, |
| 456 Source<SidebarManager>(SidebarManager::GetInstance())); | 452 Source<SidebarManager>(SidebarManager::GetInstance())); |
| 457 } | 453 } |
| 458 | 454 |
| 459 BrowserView::~BrowserView() { | 455 BrowserView::~BrowserView() { |
| 460 browser_->tabstrip_model()->RemoveObserver(this); | 456 browser_->tabstrip_model()->RemoveObserver(this); |
| 461 | 457 |
| 462 #if defined(OS_WIN) | 458 #if defined(OS_WIN) |
| 463 // Remove this observer. | 459 // Remove this observer. |
| 464 if (aeropeek_manager_.get()) | 460 if (aeropeek_manager_.get()) |
| 465 browser_->tabstrip_model()->RemoveObserver(aeropeek_manager_.get()); | 461 browser_->tabstrip_model()->RemoveObserver(aeropeek_manager_.get()); |
| 466 | 462 |
| 467 // Stop hung plugin monitoring. | 463 // Stop hung plugin monitoring. |
| 468 ticker_.Stop(); | 464 ticker_.Stop(); |
| 469 ticker_.UnregisterTickHandler(&hung_window_detector_); | 465 ticker_.UnregisterTickHandler(&hung_window_detector_); |
| 470 #endif | 466 #endif |
| 471 | 467 |
| 472 // We destroy the download shelf before |browser_| to remove its child | 468 // We destroy the download shelf before |browser_| to remove its child |
| 473 // download views from the set of download observers (since the observed | 469 // download views from the set of download observers (since the observed |
| 474 // downloads can be destroyed along with |browser_| and the observer | 470 // downloads can be destroyed along with |browser_| and the observer |
| 475 // notifications will call back into deleted objects). | 471 // notifications will call back into deleted objects). |
| 476 download_shelf_.reset(); | 472 download_shelf_.reset(); |
| 477 | 473 |
| 478 // The TabStrip attaches a listener to the model. Make sure we shut down the | 474 // The TabStrip attaches a listener to the model. Make sure we shut down the |
| 479 // TabStrip first so that it can cleanly remove the listener. | 475 // TabStrip first so that it can cleanly remove the listener. |
| 480 tabstrip_->parent()->RemoveChildView(tabstrip_); | 476 if(tabstrip_) { |
| 481 delete tabstrip_; | 477 tabstrip_->parent()->RemoveChildView(tabstrip_); |
| 482 tabstrip_ = NULL; | 478 delete tabstrip_; |
| 483 | 479 tabstrip_ = NULL; |
| 480 } |
| 484 // Child views maintain PrefMember attributes that point to | 481 // Child views maintain PrefMember attributes that point to |
| 485 // OffTheRecordProfile's PrefService which gets deleted by ~Browser. | 482 // OffTheRecordProfile's PrefService which gets deleted by ~Browser. |
| 486 RemoveAllChildViews(true); | 483 RemoveAllChildViews(true); |
| 487 // Explicitly set browser_ to NULL. | 484 // Explicitly set browser_ to NULL. |
| 488 browser_.reset(); | 485 browser_.reset(); |
| 489 } | 486 } |
| 490 | 487 |
| 491 // static | 488 // static |
| 492 BrowserView* BrowserView::GetBrowserViewForNativeWindow( | 489 BrowserView* BrowserView::GetBrowserViewForNativeWindow( |
| 493 gfx::NativeWindow window) { | 490 gfx::NativeWindow window) { |
| (...skipping 1193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1687 set_window(window); | 1684 set_window(window); |
| 1688 return this; | 1685 return this; |
| 1689 } | 1686 } |
| 1690 | 1687 |
| 1691 /////////////////////////////////////////////////////////////////////////////// | 1688 /////////////////////////////////////////////////////////////////////////////// |
| 1692 // BrowserView, views::ClientView overrides: | 1689 // BrowserView, views::ClientView overrides: |
| 1693 | 1690 |
| 1694 bool BrowserView::CanClose() { | 1691 bool BrowserView::CanClose() { |
| 1695 // You cannot close a frame for which there is an active originating drag | 1692 // You cannot close a frame for which there is an active originating drag |
| 1696 // session. | 1693 // session. |
| 1697 if (tabstrip_->IsDragSessionActive()) | 1694 if (tabstrip_) { |
| 1698 return false; | 1695 if (tabstrip_->IsDragSessionActive()) |
| 1699 | 1696 return false; |
| 1697 } |
| 1700 // Give beforeunload handlers the chance to cancel the close before we hide | 1698 // Give beforeunload handlers the chance to cancel the close before we hide |
| 1701 // the window below. | 1699 // the window below. |
| 1702 if (!browser_->ShouldCloseWindow()) | 1700 if (!browser_->ShouldCloseWindow()) |
| 1703 return false; | 1701 return false; |
| 1704 | 1702 |
| 1705 if (!browser_->tabstrip_model()->empty()) { | 1703 if (!browser_->tabstrip_model()->empty()) { |
| 1706 // Tab strip isn't empty. Hide the frame (so it appears to have closed | 1704 // Tab strip isn't empty. Hide the frame (so it appears to have closed |
| 1707 // immediately) and close all the tabs, allowing the renderers to shut | 1705 // immediately) and close all the tabs, allowing the renderers to shut |
| 1708 // down. When the tab strip is empty we'll be called back again. | 1706 // down. When the tab strip is empty we'll be called back again. |
| 1709 frame_->GetWindow()->HideWindow(); | 1707 frame_->GetWindow()->HideWindow(); |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1848 new BrowserTabStripController(browser_.get(), model); | 1846 new BrowserTabStripController(browser_.get(), model); |
| 1849 | 1847 |
| 1850 tabstrip_ = CreateTabStrip(tabstrip_controller, UseVerticalTabs()); | 1848 tabstrip_ = CreateTabStrip(tabstrip_controller, UseVerticalTabs()); |
| 1851 | 1849 |
| 1852 tabstrip_->SetAccessibleName(l10n_util::GetStringUTF16(IDS_ACCNAME_TABSTRIP)); | 1850 tabstrip_->SetAccessibleName(l10n_util::GetStringUTF16(IDS_ACCNAME_TABSTRIP)); |
| 1853 AddChildView(tabstrip_); | 1851 AddChildView(tabstrip_); |
| 1854 | 1852 |
| 1855 tabstrip_controller->InitFromModel(tabstrip_); | 1853 tabstrip_controller->InitFromModel(tabstrip_); |
| 1856 } | 1854 } |
| 1857 | 1855 |
| 1856 void BrowserView::InitToolbar(Browser* browser) { |
| 1857 toolbar_ = new ToolbarView(browser_.get()); |
| 1858 AddChildView(toolbar_); |
| 1859 toolbar_->Init(browser_->profile()); |
| 1860 toolbar_->SetAccessibleName(l10n_util::GetStringUTF16(IDS_ACCNAME_TOOLBAR)); |
| 1861 } |
| 1862 |
| 1858 /////////////////////////////////////////////////////////////////////////////// | 1863 /////////////////////////////////////////////////////////////////////////////// |
| 1859 // BrowserView, private: | 1864 // BrowserView, private: |
| 1860 | 1865 |
| 1861 void BrowserView::Init() { | 1866 void BrowserView::Init() { |
| 1862 SetLayoutManager(CreateLayoutManager()); | 1867 if(!GetLayoutManager()) |
| 1868 SetLayoutManager(CreateLayoutManager()); |
| 1869 |
| 1863 // Stow a pointer to this object onto the window handle so that we can get at | 1870 // Stow a pointer to this object onto the window handle so that we can get at |
| 1864 // it later when all we have is a native view. | 1871 // it later when all we have is a native view. |
| 1865 GetWidget()->SetNativeWindowProperty(kBrowserViewKey, this); | 1872 GetWidget()->SetNativeWindowProperty(kBrowserViewKey, this); |
| 1866 | 1873 |
| 1867 // Stow a pointer to the browser's profile onto the window handle so that we | 1874 // Stow a pointer to the browser's profile onto the window handle so that we |
| 1868 // can get it later when all we have is a native view. | 1875 // can get it later when all we have is a native view. |
| 1869 GetWindow()->SetNativeWindowProperty(Profile::kProfileKey, | 1876 GetWindow()->SetNativeWindowProperty(Profile::kProfileKey, |
| 1870 browser_->profile()); | 1877 browser_->profile()); |
| 1871 | 1878 |
| 1872 // Start a hung plugin window detector for this browser object (as long as | 1879 // Start a hung plugin window detector for this browser object (as long as |
| 1873 // hang detection is not disabled). | 1880 // hang detection is not disabled). |
| 1874 if (!CommandLine::ForCurrentProcess()->HasSwitch( | 1881 if (!CommandLine::ForCurrentProcess()->HasSwitch( |
| 1875 switches::kDisableHangMonitor)) { | 1882 switches::kDisableHangMonitor)) { |
| 1876 InitHangMonitor(); | 1883 InitHangMonitor(); |
| 1877 } | 1884 } |
| 1878 | 1885 |
| 1879 LoadAccelerators(); | 1886 LoadAccelerators(); |
| 1880 SetAccessibleName(l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)); | 1887 SetAccessibleName(l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)); |
| 1881 | 1888 |
| 1882 InitTabStrip(browser_->tabstrip_model()); | 1889 InitTabStrip(browser_->tabstrip_model()); |
| 1883 | 1890 |
| 1884 toolbar_ = new ToolbarView(browser_.get()); | 1891 InitToolbar(browser_.get()); |
| 1885 AddChildView(toolbar_); | |
| 1886 toolbar_->Init(browser_->profile()); | |
| 1887 toolbar_->SetAccessibleName(l10n_util::GetStringUTF16(IDS_ACCNAME_TOOLBAR)); | |
| 1888 | 1892 |
| 1889 infobar_container_ = new InfoBarContainer(this); | 1893 infobar_container_ = new InfoBarContainer(this); |
| 1890 AddChildView(infobar_container_); | 1894 AddChildView(infobar_container_); |
| 1891 | 1895 |
| 1892 contents_container_ = new TabContentsContainer; | 1896 contents_container_ = new TabContentsContainer; |
| 1893 contents_ = new ContentsContainer(contents_container_); | 1897 contents_ = new ContentsContainer(contents_container_); |
| 1894 | 1898 |
| 1895 SkColor bg_color = GetWidget()->GetThemeProvider()-> | 1899 SkColor bg_color = GetWidget()->GetThemeProvider()-> |
| 1896 GetColor(BrowserThemeProvider::COLOR_TOOLBAR); | 1900 GetColor(BrowserThemeProvider::COLOR_TOOLBAR); |
| 1897 | 1901 |
| (...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2570 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)); | 2574 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)); |
| 2571 | 2575 |
| 2572 return view; | 2576 return view; |
| 2573 } | 2577 } |
| 2574 #endif | 2578 #endif |
| 2575 | 2579 |
| 2576 // static | 2580 // static |
| 2577 FindBar* BrowserWindow::CreateFindBar(Browser* browser) { | 2581 FindBar* BrowserWindow::CreateFindBar(Browser* browser) { |
| 2578 return browser::CreateFindBar(static_cast<BrowserView*>(browser->window())); | 2582 return browser::CreateFindBar(static_cast<BrowserView*>(browser->window())); |
| 2579 } | 2583 } |
| OLD | NEW |