diff options
Diffstat (limited to 'chrome/browser')
17 files changed, 107 insertions, 89 deletions
diff --git a/chrome/browser/chromeos/frame/browser_view.cc b/chrome/browser/chromeos/frame/browser_view.cc index c25ccbd..9efb707 100644 --- a/chrome/browser/chromeos/frame/browser_view.cc +++ b/chrome/browser/chromeos/frame/browser_view.cc @@ -449,7 +449,9 @@ void BrowserView::ChildPreferredSizeChanged(View* child) { Layout(); } -bool BrowserView::GetSavedWindowBounds(gfx::Rect* bounds) const { +bool BrowserView::GetSavedWindowPlacement( + gfx::Rect* bounds, + ui::WindowShowState* show_state) const { if (!CommandLine::ForCurrentProcess()->HasSwitch(switches::kChromeosFrame)) { // Typically we don't request a full screen size. This means we'll request a // non-full screen size, layout/paint at that size, then the window manager @@ -457,9 +459,10 @@ bool BrowserView::GetSavedWindowBounds(gfx::Rect* bounds) const { // resize/paint. To avoid this we always request a full screen size. *bounds = gfx::Screen::GetMonitorWorkAreaNearestWindow( GTK_WIDGET(GetWidget()->GetNativeWindow())); + *show_state = ui::SHOW_STATE_NORMAL; return true; } - return ::BrowserView::GetSavedWindowBounds(bounds); + return ::BrowserView::GetSavedWindowPlacement(bounds, show_state); } void BrowserView::Cut() { diff --git a/chrome/browser/chromeos/frame/browser_view.h b/chrome/browser/chromeos/frame/browser_view.h index 9d7ae95..b938e21 100644 --- a/chrome/browser/chromeos/frame/browser_view.h +++ b/chrome/browser/chromeos/frame/browser_view.h @@ -61,7 +61,9 @@ class BrowserView : public ::BrowserView, virtual void FocusChromeOSStatus() OVERRIDE; virtual views::LayoutManager* CreateLayoutManager() const OVERRIDE; virtual void ChildPreferredSizeChanged(View* child) OVERRIDE; - virtual bool GetSavedWindowBounds(gfx::Rect* bounds) const OVERRIDE; + virtual bool GetSavedWindowPlacement( + gfx::Rect* bounds, + ui::WindowShowState* show_state) const OVERRIDE; virtual void Cut() OVERRIDE; virtual void Copy() OVERRIDE; virtual void Paste() OVERRIDE; diff --git a/chrome/browser/chromeos/frame/panel_browser_view.cc b/chrome/browser/chromeos/frame/panel_browser_view.cc index fba8fa8..de39b0e 100644 --- a/chrome/browser/chromeos/frame/panel_browser_view.cc +++ b/chrome/browser/chromeos/frame/panel_browser_view.cc @@ -110,16 +110,16 @@ WindowOpenDisposition PanelBrowserView::GetDispositionForPopupBounds( return chromeos::BrowserView::DispositionForPopupBounds(bounds); } -bool PanelBrowserView::GetSavedWindowBounds(gfx::Rect* bounds) const { - bool res = ::BrowserView::GetSavedWindowBounds(bounds); - if (res) +bool PanelBrowserView::GetSavedWindowPlacement( + gfx::Rect* bounds, + ui::WindowShowState* show_state) const { + bool result = ::BrowserView::GetSavedWindowPlacement(bounds, show_state); + if (result) { LimitBounds(bounds); - return res; -} - -bool PanelBrowserView::GetSavedMaximizedState(bool* maximized) const { - // Panels have no maximized state. - return false; + // Panels have no maximized state. + *show_state = ui::SHOW_STATE_NORMAL; + } + return result; } //////////////////////////////////////////////////////////////////////////////// diff --git a/chrome/browser/chromeos/frame/panel_browser_view.h b/chrome/browser/chromeos/frame/panel_browser_view.h index 819419e..99ec9ab 100644 --- a/chrome/browser/chromeos/frame/panel_browser_view.h +++ b/chrome/browser/chromeos/frame/panel_browser_view.h @@ -35,8 +35,9 @@ class PanelBrowserView : public ::BrowserView, virtual void UpdateTitleBar() OVERRIDE; virtual WindowOpenDisposition GetDispositionForPopupBounds( const gfx::Rect& bounds) OVERRIDE; - virtual bool GetSavedWindowBounds(gfx::Rect* bounds) const OVERRIDE; - virtual bool GetSavedMaximizedState(bool* maximized) const OVERRIDE; + virtual bool GetSavedWindowPlacement( + gfx::Rect* bounds, + ui::WindowShowState* show_state) const OVERRIDE; // views::Widget::Observer overrides. virtual void OnWidgetActivationChanged(views::Widget* widget, diff --git a/chrome/browser/sessions/session_restore.cc b/chrome/browser/sessions/session_restore.cc index b18eb7b..2cbe188 100644 --- a/chrome/browser/sessions/session_restore.cc +++ b/chrome/browser/sessions/session_restore.cc @@ -598,6 +598,15 @@ class SessionRestoreImpl : public NotificationObserver { // tabbed browsers exist. Browser* last_browser = NULL; bool has_tabbed_browser = false; + + // Determine if there is a visible window. + bool has_visible_browser = false; + for (std::vector<SessionWindow*>::iterator i = windows->begin(); + i != windows->end(); ++i) { + if ((*i)->show_state != ui::SHOW_STATE_MINIMIZED) + has_visible_browser = true; + } + for (std::vector<SessionWindow*>::iterator i = windows->begin(); i != windows->end(); ++i) { Browser* browser = NULL; @@ -613,10 +622,15 @@ class SessionRestoreImpl : public NotificationObserver { chromeos::BootTimesLoader::Get()->AddLoginTimeMarker( "SessionRestore-CreateRestoredBrowser-Start", false); #endif + // Show the first window if none are visible. + ui::WindowShowState show_state = (*i)->show_state; + if (!has_visible_browser) { + show_state = ui::SHOW_STATE_NORMAL; + has_visible_browser = true; + } + browser = CreateRestoredBrowser( - static_cast<Browser::Type>((*i)->type), - (*i)->bounds, - (*i)->show_state); + static_cast<Browser::Type>((*i)->type), (*i)->bounds, show_state); #if defined(OS_CHROMEOS) chromeos::BootTimesLoader::Get()->AddLoginTimeMarker( "SessionRestore-CreateRestoredBrowser-End", false); diff --git a/chrome/browser/sessions/session_service.cc b/chrome/browser/sessions/session_service.cc index dbb0f94..8e3f1d73 100644 --- a/chrome/browser/sessions/session_service.cc +++ b/chrome/browser/sessions/session_service.cc @@ -970,9 +970,11 @@ bool SessionService::CreateTabsAndWindows( payload.y, payload.w, payload.h); + // SHOW_STATE_INACTIVE is not persisted. ui::WindowShowState show_state = ui::SHOW_STATE_NORMAL; if (payload.show_state > ui::SHOW_STATE_DEFAULT && - payload.show_state < ui::SHOW_STATE_MAX) { + payload.show_state < ui::SHOW_STATE_MAX && + payload.show_state != ui::SHOW_STATE_INACTIVE) { show_state = static_cast<ui::WindowShowState>(payload.show_state); } else { NOTREACHED(); diff --git a/chrome/browser/ui/browser_browsertest.cc b/chrome/browser/ui/browser_browsertest.cc index 9735848..61b2020 100644 --- a/chrome/browser/ui/browser_browsertest.cc +++ b/chrome/browser/ui/browser_browsertest.cc @@ -974,6 +974,20 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, StartMaximized) { } } +// Makes sure the browser doesn't crash when +// set_show_state(ui::SHOW_STATE_MINIMIZED) has been invoked. +IN_PROC_BROWSER_TEST_F(BrowserTest, StartMinimized) { + // Can't test TYPE_PANEL as they are currently created differently (and can't + // end up minimized). + Browser::Type types[] = { Browser::TYPE_TABBED, Browser::TYPE_POPUP }; + for (size_t i = 0; i < ARRAYSIZE_UNSAFE(types); ++i) { + Browser* min_browser = new Browser(types[i], browser()->profile()); + min_browser->set_show_state(ui::SHOW_STATE_MINIMIZED); + min_browser->InitBrowserWindow(); + AddBlankTabAndShow(min_browser); + } +} + // TODO(ben): this test was never enabled. It has bit-rotted since being added. // It originally lived in browser_unittest.cc, but has been moved here to make // room for real browser unit tests. diff --git a/chrome/browser/ui/panels/panel_browser_view.cc b/chrome/browser/ui/panels/panel_browser_view.cc index 603b6d6..a6ffc55 100644 --- a/chrome/browser/ui/panels/panel_browser_view.cc +++ b/chrome/browser/ui/panels/panel_browser_view.cc @@ -107,8 +107,11 @@ void PanelBrowserView::UpdateTitleBar() { GetFrameView()->UpdateTitleBar(); } -bool PanelBrowserView::GetSavedWindowBounds(gfx::Rect* bounds) const { +bool PanelBrowserView::GetSavedWindowPlacement( + gfx::Rect* bounds, + ui::WindowShowState* show_state) const { *bounds = GetPanelBounds(); + *show_state = ui::SHOW_STATE_NORMAL; return true; } diff --git a/chrome/browser/ui/panels/panel_browser_view.h b/chrome/browser/ui/panels/panel_browser_view.h index 5ecbfbe..c855fd0 100644 --- a/chrome/browser/ui/panels/panel_browser_view.h +++ b/chrome/browser/ui/panels/panel_browser_view.h @@ -56,7 +56,9 @@ class PanelBrowserView : public BrowserView, virtual bool CanMaximize() const OVERRIDE; virtual void SetBounds(const gfx::Rect& bounds) OVERRIDE; virtual void UpdateTitleBar() OVERRIDE; - virtual bool GetSavedWindowBounds(gfx::Rect* bounds) const OVERRIDE; + virtual bool GetSavedWindowPlacement( + gfx::Rect* bounds, + ui::WindowShowState* show_state) const OVERRIDE; virtual bool AcceleratorPressed(const views::Accelerator& accelerator) OVERRIDE; diff --git a/chrome/browser/ui/views/accessibility_event_router_views_unittest.cc b/chrome/browser/ui/views/accessibility_event_router_views_unittest.cc index 24649bd..3526b0a 100644 --- a/chrome/browser/ui/views/accessibility_event_router_views_unittest.cc +++ b/chrome/browser/ui/views/accessibility_event_router_views_unittest.cc @@ -35,14 +35,12 @@ class AccessibilityViewsDelegate : public views::ViewsDelegate { virtual void SaveWindowPlacement(const views::Widget* window, const std::wstring& window_name, const gfx::Rect& bounds, - bool maximized) OVERRIDE { + ui::WindowShowState show_state) OVERRIDE { } - virtual bool GetSavedWindowBounds(const std::wstring& window_name, - gfx::Rect* bounds) const OVERRIDE { - return false; - } - virtual bool GetSavedMaximizedState(const std::wstring& window_name, - bool* maximized) const OVERRIDE { + virtual bool GetSavedWindowPlacement( + const std::wstring& window_name, + gfx::Rect* bounds, + ui::WindowShowState* show_state) const OVERRIDE { return false; } virtual void NotifyAccessibilityEvent( diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc index c033a9d..0667da3 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc @@ -74,13 +74,11 @@ class ViewsDelegateImpl : public views::ViewsDelegate { virtual void SaveWindowPlacement(const views::Widget* window, const std::wstring& window_name, const gfx::Rect& bounds, - bool maximized) OVERRIDE {} - virtual bool GetSavedWindowBounds(const std::wstring& window_name, - gfx::Rect* bounds) const OVERRIDE { - return false; - } - virtual bool GetSavedMaximizedState(const std::wstring& window_name, - bool* maximized) const OVERRIDE { + ui::WindowShowState show_state) OVERRIDE {} + virtual bool GetSavedWindowPlacement( + const std::wstring& window_name, + gfx::Rect* bounds, + ui::WindowShowState* show_state) const OVERRIDE { return false; } diff --git a/chrome/browser/ui/views/chrome_views_delegate.cc b/chrome/browser/ui/views/chrome_views_delegate.cc index a471e6f..a6b7eef 100644 --- a/chrome/browser/ui/views/chrome_views_delegate.cc +++ b/chrome/browser/ui/views/chrome_views_delegate.cc @@ -61,7 +61,7 @@ views::View* ChromeViewsDelegate::GetDefaultParentView() { void ChromeViewsDelegate::SaveWindowPlacement(const views::Widget* window, const std::wstring& window_name, const gfx::Rect& bounds, - bool maximized) { + ui::WindowShowState show_state) { PrefService* prefs = GetPrefsForWindow(window); if (!prefs) return; @@ -73,7 +73,8 @@ void ChromeViewsDelegate::SaveWindowPlacement(const views::Widget* window, window_preferences->SetInteger("top", bounds.y()); window_preferences->SetInteger("right", bounds.right()); window_preferences->SetInteger("bottom", bounds.bottom()); - window_preferences->SetBoolean("maximized", maximized); + window_preferences->SetBoolean("maximized", + show_state == ui::SHOW_STATE_MAXIMIZED); scoped_ptr<WindowSizer::MonitorInfoProvider> monitor_info_provider( WindowSizer::CreateDefaultMonitorInfoProvider()); @@ -85,8 +86,10 @@ void ChromeViewsDelegate::SaveWindowPlacement(const views::Widget* window, window_preferences->SetInteger("work_area_bottom", work_area.bottom()); } -bool ChromeViewsDelegate::GetSavedWindowBounds(const std::wstring& window_name, - gfx::Rect* bounds) const { +bool ChromeViewsDelegate::GetSavedWindowPlacement( + const std::wstring& window_name, + gfx::Rect* bounds, + ui::WindowShowState* show_state) const { PrefService* prefs = g_browser_process->local_state(); if (!prefs) return false; @@ -102,22 +105,13 @@ bool ChromeViewsDelegate::GetSavedWindowBounds(const std::wstring& window_name, return false; bounds->SetRect(left, top, right - left, bottom - top); - return true; -} - -bool ChromeViewsDelegate::GetSavedMaximizedState( - const std::wstring& window_name, - bool* maximized) const { - PrefService* prefs = g_browser_process->local_state(); - if (!prefs) - return false; - DCHECK(prefs->FindPreference(WideToUTF8(window_name).c_str())); - const DictionaryValue* dictionary = - prefs->GetDictionary(WideToUTF8(window_name).c_str()); + bool maximized = false; + if (dictionary) + dictionary->GetBoolean("maximized", &maximized); + *show_state = maximized ? ui::SHOW_STATE_MAXIMIZED : ui::SHOW_STATE_NORMAL; - return dictionary && dictionary->GetBoolean("maximized", maximized) && - maximized; + return true; } void ChromeViewsDelegate::NotifyAccessibilityEvent( diff --git a/chrome/browser/ui/views/chrome_views_delegate.h b/chrome/browser/ui/views/chrome_views_delegate.h index fb3121e..a874348 100644 --- a/chrome/browser/ui/views/chrome_views_delegate.h +++ b/chrome/browser/ui/views/chrome_views_delegate.h @@ -25,11 +25,11 @@ class ChromeViewsDelegate : public views::ViewsDelegate { virtual void SaveWindowPlacement(const views::Widget* window, const std::wstring& window_name, const gfx::Rect& bounds, - bool maximized) OVERRIDE; - virtual bool GetSavedWindowBounds(const std::wstring& window_name, - gfx::Rect* bounds) const OVERRIDE; - virtual bool GetSavedMaximizedState(const std::wstring& window_name, - bool* maximized) const OVERRIDE; + ui::WindowShowState show_state) OVERRIDE; + virtual bool GetSavedWindowPlacement( + const std::wstring& window_name, + gfx::Rect* bounds, + ui::WindowShowState* show_state) const OVERRIDE; virtual void NotifyAccessibilityEvent( views::View* view, ui::AccessibilityTypes::Event event_type) OVERRIDE; virtual void NotifyMenuItemFocused( diff --git a/chrome/browser/ui/views/frame/browser_frame.cc b/chrome/browser/ui/views/frame/browser_frame.cc index 20f685a..31d2b67b 100644 --- a/chrome/browser/ui/views/frame/browser_frame.cc +++ b/chrome/browser/ui/views/frame/browser_frame.cc @@ -48,8 +48,7 @@ void BrowserFrame::InitBrowserFrame() { // Typed panel/popup can only return a size once the widget has been // created. params.bounds = browser_view_->browser()->GetSavedWindowBounds(); - params.maximize = browser_view_->browser()->GetSavedWindowShowState() == - ui::SHOW_STATE_MAXIMIZED; + params.show_state = browser_view_->browser()->GetSavedWindowShowState(); } Init(params); #if defined(OS_CHROMEOS) diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc index d246005..4020129 100644 --- a/chrome/browser/ui/views/frame/browser_view.cc +++ b/chrome/browser/ui/views/frame/browser_view.cc @@ -790,9 +790,7 @@ bool BrowserView::IsMaximized() const { } bool BrowserView::IsMinimized() const { - // TODO(dhollowa): Add support for session restore of minimized state. - // http://crbug.com/43274 - return false; + return frame_->IsMinimized(); } void BrowserView::SetFullscreen(bool fullscreen) { @@ -1634,23 +1632,22 @@ std::wstring BrowserView::GetWindowName() const { } void BrowserView::SaveWindowPlacement(const gfx::Rect& bounds, - bool maximized) { - // TODO(dhollowa): Add support for session restore of minimized state. - // http://crbug.com/43274 - + ui::WindowShowState show_state) { // If IsFullscreen() is true, we've just changed into fullscreen mode, and // we're catching the going-into-fullscreen sizing and positioning calls, // which we want to ignore. if (!IsFullscreen() && browser_->ShouldSaveWindowPlacement()) { - WidgetDelegate::SaveWindowPlacement(bounds, maximized); - browser_->SaveWindowPlacement(bounds, - maximized ? ui::SHOW_STATE_MAXIMIZED : - ui::SHOW_STATE_NORMAL); + WidgetDelegate::SaveWindowPlacement(bounds, show_state); + browser_->SaveWindowPlacement(bounds, show_state); } } -bool BrowserView::GetSavedWindowBounds(gfx::Rect* bounds) const { +bool BrowserView::GetSavedWindowPlacement( + gfx::Rect* bounds, + ui::WindowShowState* show_state) const { *bounds = browser_->GetSavedWindowBounds(); + *show_state = browser_->GetSavedWindowShowState(); + if ((browser_->is_type_popup() || browser_->is_type_panel()) && !browser_->is_devtools()) { // We are a popup window. The value passed in |bounds| represents two @@ -1689,13 +1686,6 @@ bool BrowserView::GetSavedWindowBounds(gfx::Rect* bounds) const { return true; } -bool BrowserView::GetSavedMaximizedState(bool* maximized) const { - // TODO(dhollowa): Add support for session restore of minimized state. - // http://crbug.com/43274 - *maximized = browser_->GetSavedWindowShowState() == ui::SHOW_STATE_MAXIMIZED; - return true; -} - views::View* BrowserView::GetContentsView() { return contents_container_; } diff --git a/chrome/browser/ui/views/frame/browser_view.h b/chrome/browser/ui/views/frame/browser_view.h index 9cf273c..bb660ad 100644 --- a/chrome/browser/ui/views/frame/browser_view.h +++ b/chrome/browser/ui/views/frame/browser_view.h @@ -394,9 +394,10 @@ class BrowserView : public BrowserBubbleHost, virtual bool ExecuteWindowsCommand(int command_id) OVERRIDE; virtual std::wstring GetWindowName() const OVERRIDE; virtual void SaveWindowPlacement(const gfx::Rect& bounds, - bool maximized) OVERRIDE; - virtual bool GetSavedWindowBounds(gfx::Rect* bounds) const OVERRIDE; - virtual bool GetSavedMaximizedState(bool* maximized) const OVERRIDE; + ui::WindowShowState show_state) OVERRIDE; + virtual bool GetSavedWindowPlacement( + gfx::Rect* bounds, + ui::WindowShowState* show_state) const OVERRIDE; virtual views::View* GetContentsView() OVERRIDE; virtual views::ClientView* CreateClientView(views::Widget* widget) OVERRIDE; virtual void OnWindowBeginUserBoundsChange() OVERRIDE; diff --git a/chrome/browser/ui/views/menu_model_adapter_test.cc b/chrome/browser/ui/views/menu_model_adapter_test.cc index a13e165..39a15da 100644 --- a/chrome/browser/ui/views/menu_model_adapter_test.cc +++ b/chrome/browser/ui/views/menu_model_adapter_test.cc @@ -44,16 +44,13 @@ class TestViewsDelegate : public views::ViewsDelegate { virtual void SaveWindowPlacement(const views::Widget* widget, const std::wstring& window_name, const gfx::Rect& bounds, - bool maximized) OVERRIDE { + ui::WindowShowState show_state) OVERRIDE { } - virtual bool GetSavedWindowBounds(const std::wstring& window_name, - gfx::Rect* bounds) const OVERRIDE { - return false; - } - - virtual bool GetSavedMaximizedState(const std::wstring& window_name, - bool* maximized) const OVERRIDE { + virtual bool GetSavedWindowPlacement( + const std::wstring& window_name, + gfx::Rect* bounds, + ui::WindowShowState* show_state) const OVERRIDE { return false; } |