| Index: chrome/browser/ui/views/frame/browser_view_interactive_uitest.cc
|
| diff --git a/chrome/browser/ui/views/frame/browser_view_interactive_uitest.cc b/chrome/browser/ui/views/frame/browser_view_interactive_uitest.cc
|
| index d981a5858645d337f504e911075adde75ec34c93..a571c4e97e0b3ada595f131416dc94bb322b9957 100644
|
| --- a/chrome/browser/ui/views/frame/browser_view_interactive_uitest.cc
|
| +++ b/chrome/browser/ui/views/frame/browser_view_interactive_uitest.cc
|
| @@ -9,6 +9,14 @@
|
| #include "chrome/test/base/in_process_browser_test.h"
|
| #include "ui/views/focus/focus_manager.h"
|
|
|
| +#if defined(USE_AURA)
|
| +#include "chrome/browser/ui/browser_window_state.h"
|
| +#include "ui/aura/client/aura_constants.h"
|
| +#include "ui/aura/window.h"
|
| +#include "ui/aura/window_delegate.h"
|
| +#include "ui/gfx/screen.h"
|
| +#endif
|
| +
|
| using views::FocusManager;
|
|
|
| typedef InProcessBrowserTest BrowserViewTest;
|
| @@ -33,3 +41,116 @@ IN_PROC_BROWSER_TEST_F(BrowserViewTest, MAYBE_FullscreenClearsFocus) {
|
| // Focus is released from the location bar.
|
| EXPECT_FALSE(location_bar_view->Contains(focus_manager->GetFocusedView()));
|
| }
|
| +
|
| +#if defined(USE_AURA)
|
| +namespace {
|
| +
|
| +class BrowserViewTestParam : public BrowserViewTest,
|
| + public testing::WithParamInterface<bool> {
|
| + public:
|
| + bool TestApp() { return GetParam(); }
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +// Test that docked state is remembered for app browser windows and not
|
| +// remembered for tabbed browser windows.
|
| +IN_PROC_BROWSER_TEST_P(BrowserViewTestParam, BrowserRemembersDockedState) {
|
| + // Open a new browser window (app or tabbed depending on a parameter).
|
| + bool test_app = TestApp();
|
| + Browser::CreateParams params =
|
| + test_app ? Browser::CreateParams::CreateForApp(
|
| + "test_browser_app", true /* trusted_source */, gfx::Rect(),
|
| + browser()->profile(), browser()->host_desktop_type())
|
| + : Browser::CreateParams(browser()->profile(),
|
| + browser()->host_desktop_type());
|
| + params.initial_show_state = ui::SHOW_STATE_NORMAL;
|
| + bool is_ash = browser()->host_desktop_type() == chrome::HOST_DESKTOP_TYPE_ASH;
|
| + // Default |browser()| is not used by this test.
|
| + browser()->window()->Close();
|
| +
|
| + // Create a new app browser
|
| + Browser* browser = new Browser(params);
|
| + ASSERT_TRUE(browser);
|
| + gfx::NativeWindow window = browser->window()->GetNativeWindow();
|
| + gfx::Rect original_bounds(gfx::Rect(150, 250, 350, 100));
|
| + window->SetBounds(original_bounds);
|
| + window->Show();
|
| + // Dock the browser window using |kShowStateKey| property.
|
| + gfx::Rect work_area = gfx::Screen::GetScreenFor(window)
|
| + ->GetDisplayNearestPoint(window->bounds().origin())
|
| + .work_area();
|
| + window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_DOCKED);
|
| +
|
| + // Saved placement should reflect docked state (for app windows only in Ash).
|
| + gfx::Rect bounds;
|
| + ui::WindowShowState show_state = ui::SHOW_STATE_NORMAL;
|
| + const views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window);
|
| + widget->widget_delegate()->GetSavedWindowPlacement(widget, &bounds,
|
| + &show_state);
|
| + EXPECT_EQ(is_ash && test_app ? ui::SHOW_STATE_DOCKED : ui::SHOW_STATE_NORMAL,
|
| + show_state);
|
| + // Docking is only relevant on Ash desktop.
|
| + if (!is_ash)
|
| + return;
|
| +
|
| + // Saved placement should reflect restore bounds.
|
| + ASSERT_NE(nullptr, window->GetProperty(aura::client::kRestoreBoundsKey));
|
| + original_bounds = *window->GetProperty(aura::client::kRestoreBoundsKey);
|
| + gfx::Rect expected_bounds = work_area;
|
| + expected_bounds.ClampToCenteredSize(original_bounds.size());
|
| + expected_bounds.set_y(original_bounds.y());
|
| + EXPECT_EQ(expected_bounds.ToString(), bounds.ToString());
|
| + EXPECT_EQ(expected_bounds.ToString(), original_bounds.ToString());
|
| +
|
| + // Browser window should be docked.
|
| + int width = 250; // same as DockedWindowLayoutManager::kIdealWidth.
|
| + if (window->delegate() && window->delegate()->GetMinimumSize().width() != 0)
|
| + width = std::max(width, window->delegate()->GetMinimumSize().width());
|
| + expected_bounds = work_area;
|
| + expected_bounds.set_width(width);
|
| + expected_bounds.set_x(work_area.right() - expected_bounds.width());
|
| + EXPECT_EQ(expected_bounds.ToString(), window->GetTargetBounds().ToString());
|
| + EXPECT_EQ(ui::SHOW_STATE_DOCKED,
|
| + window->GetProperty(aura::client::kShowStateKey));
|
| + browser->window()->Close();
|
| +
|
| + // Newly created browser with the same app name should retain docked state
|
| + // for app browser window but leave it as normal for a tabbed browser.
|
| + browser = new Browser(params);
|
| + ASSERT_TRUE(browser);
|
| + browser->window()->Show();
|
| + window = browser->window()->GetNativeWindow();
|
| + EXPECT_EQ(test_app ? expected_bounds.ToString() : original_bounds.ToString(),
|
| + window->GetTargetBounds().ToString());
|
| + EXPECT_EQ(test_app ? ui::SHOW_STATE_DOCKED : ui::SHOW_STATE_NORMAL,
|
| + window->GetProperty(aura::client::kShowStateKey));
|
| +
|
| + // Undocking the browser window should restore original size and vertical
|
| + // offset while centering the window horizontally.
|
| + // Tabbed window is already not docked.
|
| + expected_bounds = work_area;
|
| + expected_bounds.ClampToCenteredSize(original_bounds.size());
|
| + expected_bounds.set_y(original_bounds.y());
|
| + window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL);
|
| + EXPECT_EQ(expected_bounds.ToString(), window->GetTargetBounds().ToString());
|
| + EXPECT_EQ(ui::SHOW_STATE_NORMAL,
|
| + window->GetProperty(aura::client::kShowStateKey));
|
| + browser->window()->Close();
|
| +
|
| + // Re-create the browser window with the same app name.
|
| + browser = new Browser(params);
|
| + ASSERT_TRUE(browser);
|
| + browser->window()->Show();
|
| +
|
| + // Newly created browser should retain undocked state and bounds.
|
| + window = browser->window()->GetNativeWindow();
|
| + EXPECT_EQ(expected_bounds.ToString(), window->GetTargetBounds().ToString());
|
| + EXPECT_EQ(ui::SHOW_STATE_NORMAL,
|
| + window->GetProperty(aura::client::kShowStateKey));
|
| +}
|
| +
|
| +INSTANTIATE_TEST_CASE_P(BrowserViewTestTabbedOrApp,
|
| + BrowserViewTestParam,
|
| + testing::Bool());
|
| +#endif
|
|
|