Commit d9b50c29 authored by Evan Stade's avatar Evan Stade Committed by Commit Bot

Update ChromeNativeAppWindowViewsAuraAshBrowserTest wrt tablet mode

Use the shell test api (mojo) instead of direct access to ash::Shell.

Bug: 760811
Change-Id: If8526428917d72eeeb852698cb6cb31498eef741
Reviewed-on: https://chromium-review.googlesource.com/1175068
Commit-Queue: Evan Stade <estade@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#583093}
parent 27d0e842
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/public/interfaces/constants.mojom.h"
#include "ash/public/interfaces/shell_test_api.mojom.h"
#include "base/run_loop.h"
#include "chrome/browser/ui/ash/tablet_mode_client.h"
#include "chrome/browser/ui/ash/tablet_mode_client_observer.h"
#include "content/public/common/service_manager_connection.h"
#include "services/service_manager/public/cpp/connector.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace test {
namespace {
// A helper used to wait for an expected change to the tablet mode state.
class TestTabletModeClientObserver : public TabletModeClientObserver {
public:
explicit TestTabletModeClientObserver(bool target_state)
: target_state_(target_state) {
TabletModeClient::Get()->AddObserver(this);
}
~TestTabletModeClientObserver() override {
TabletModeClient::Get()->RemoveObserver(this);
}
void OnTabletModeToggled(bool enabled) override {
if (enabled == target_state_)
run_loop_.Quit();
}
base::RunLoop* run_loop() { return &run_loop_; }
private:
const bool target_state_;
base::RunLoop run_loop_;
DISALLOW_COPY_AND_ASSIGN(TestTabletModeClientObserver);
};
} // namespace
// Enables or disables the tablet mode and waits to until the change has made
// its way back into Chrome (from Ash). Should only be called to toggle the
// current mode.
void SetAndWaitForTabletMode(bool enabled) {
ASSERT_NE(enabled, TabletModeClient::Get()->tablet_mode_enabled());
ash::mojom::ShellTestApiPtr shell_test_api;
content::ServiceManagerConnection::GetForProcess()
->GetConnector()
->BindInterface(ash::mojom::kServiceName, &shell_test_api);
shell_test_api->EnableTabletModeWindowManager(enabled);
TestTabletModeClientObserver observer(enabled);
observer.run_loop()->Run();
ASSERT_EQ(enabled, TabletModeClient::Get()->tablet_mode_enabled());
}
} // namespace test
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_ASH_TABLET_MODE_CLIENT_TEST_UTIL_H_
#define CHROME_BROWSER_UI_ASH_TABLET_MODE_CLIENT_TEST_UTIL_H_
namespace test {
// Enables or disables the tablet mode and waits to until the change has made
// its way back into Chrome (from Ash). Should only be called to toggle the
// current mode.
void SetAndWaitForTabletMode(bool enabled);
} // namespace test
#endif // CHROME_BROWSER_UI_ASH_TABLET_MODE_CLIENT_TEST_UTIL_H_
...@@ -3,10 +3,9 @@ ...@@ -3,10 +3,9 @@
// found in the LICENSE file. // found in the LICENSE file.
#include "ash/public/cpp/immersive/immersive_fullscreen_controller.h" #include "ash/public/cpp/immersive/immersive_fullscreen_controller.h"
#include "ash/shell.h"
#include "ash/wm/tablet_mode/tablet_mode_controller.h"
#include "chrome/browser/apps/platform_apps/app_browsertest_util.h" #include "chrome/browser/apps/platform_apps/app_browsertest_util.h"
#include "chrome/browser/ui/ash/tablet_mode_client.h" #include "chrome/browser/ui/ash/tablet_mode_client.h"
#include "chrome/browser/ui/ash/tablet_mode_client_test_util.h"
#include "chrome/browser/ui/views/apps/chrome_native_app_window_views_aura_ash.h" #include "chrome/browser/ui/views/apps/chrome_native_app_window_views_aura_ash.h"
#include "chromeos/login/login_state.h" #include "chromeos/login/login_state.h"
#include "chromeos/login/scoped_test_public_session_login_state.h" #include "chromeos/login/scoped_test_public_session_login_state.h"
...@@ -52,15 +51,11 @@ IN_PROC_BROWSER_TEST_F(ChromeNativeAppWindowViewsAuraAshBrowserTest, ...@@ -52,15 +51,11 @@ IN_PROC_BROWSER_TEST_F(ChromeNativeAppWindowViewsAuraAshBrowserTest,
// Verify that since the auto hide title bars in tablet mode feature turned // Verify that since the auto hide title bars in tablet mode feature turned
// on, immersive mode is enabled once tablet mode is entered, and disabled // on, immersive mode is enabled once tablet mode is entered, and disabled
// once tablet mode is exited. // once tablet mode is exited.
ash::TabletModeController* tablet_mode_controller = ASSERT_NO_FATAL_FAILURE(test::SetAndWaitForTabletMode(true));
ash::Shell::Get()->tablet_mode_controller();
tablet_mode_controller->EnableTabletModeWindowManager(true);
tablet_mode_controller->FlushForTesting();
EXPECT_TRUE(window->immersive_fullscreen_controller_->IsEnabled()); EXPECT_TRUE(window->immersive_fullscreen_controller_->IsEnabled());
EXPECT_EQ(0, client_view->bounds().y()); EXPECT_EQ(0, client_view->bounds().y());
tablet_mode_controller->EnableTabletModeWindowManager(false); ASSERT_NO_FATAL_FAILURE(test::SetAndWaitForTabletMode(false));
tablet_mode_controller->FlushForTesting();
EXPECT_FALSE(window->immersive_fullscreen_controller_->IsEnabled()); EXPECT_FALSE(window->immersive_fullscreen_controller_->IsEnabled());
EXPECT_EQ(kFrameHeight, client_view->bounds().y()); EXPECT_EQ(kFrameHeight, client_view->bounds().y());
...@@ -68,26 +63,22 @@ IN_PROC_BROWSER_TEST_F(ChromeNativeAppWindowViewsAuraAshBrowserTest, ...@@ -68,26 +63,22 @@ IN_PROC_BROWSER_TEST_F(ChromeNativeAppWindowViewsAuraAshBrowserTest,
// will remain fullscreened after exiting tablet mode. // will remain fullscreened after exiting tablet mode.
app_window->OSFullscreen(); app_window->OSFullscreen();
EXPECT_TRUE(window->immersive_fullscreen_controller_->IsEnabled()); EXPECT_TRUE(window->immersive_fullscreen_controller_->IsEnabled());
tablet_mode_controller->EnableTabletModeWindowManager(true); ASSERT_NO_FATAL_FAILURE(test::SetAndWaitForTabletMode(true));
tablet_mode_controller->FlushForTesting();
EXPECT_TRUE(window->immersive_fullscreen_controller_->IsEnabled()); EXPECT_TRUE(window->immersive_fullscreen_controller_->IsEnabled());
tablet_mode_controller->EnableTabletModeWindowManager(false); ASSERT_NO_FATAL_FAILURE(test::SetAndWaitForTabletMode(false));
tablet_mode_controller->FlushForTesting();
EXPECT_TRUE(window->immersive_fullscreen_controller_->IsEnabled()); EXPECT_TRUE(window->immersive_fullscreen_controller_->IsEnabled());
app_window->Restore(); app_window->Restore();
// Verify that minimized windows do not have immersive mode enabled. // Verify that minimized windows do not have immersive mode enabled.
app_window->Minimize(); app_window->Minimize();
EXPECT_FALSE(window->immersive_fullscreen_controller_->IsEnabled()); EXPECT_FALSE(window->immersive_fullscreen_controller_->IsEnabled());
tablet_mode_controller->EnableTabletModeWindowManager(true); ASSERT_NO_FATAL_FAILURE(test::SetAndWaitForTabletMode(true));
tablet_mode_controller->FlushForTesting();
EXPECT_FALSE(window->immersive_fullscreen_controller_->IsEnabled()); EXPECT_FALSE(window->immersive_fullscreen_controller_->IsEnabled());
window->Show(); window->Show();
EXPECT_TRUE(window->immersive_fullscreen_controller_->IsEnabled()); EXPECT_TRUE(window->immersive_fullscreen_controller_->IsEnabled());
app_window->Minimize(); app_window->Minimize();
EXPECT_FALSE(window->immersive_fullscreen_controller_->IsEnabled()); EXPECT_FALSE(window->immersive_fullscreen_controller_->IsEnabled());
tablet_mode_controller->EnableTabletModeWindowManager(false); ASSERT_NO_FATAL_FAILURE(test::SetAndWaitForTabletMode(false));
tablet_mode_controller->FlushForTesting();
EXPECT_FALSE(window->immersive_fullscreen_controller_->IsEnabled()); EXPECT_FALSE(window->immersive_fullscreen_controller_->IsEnabled());
// Verify that activation change should not change the immersive // Verify that activation change should not change the immersive
...@@ -115,12 +106,10 @@ IN_PROC_BROWSER_TEST_F(ChromeNativeAppWindowViewsAuraAshBrowserTest, ...@@ -115,12 +106,10 @@ IN_PROC_BROWSER_TEST_F(ChromeNativeAppWindowViewsAuraAshBrowserTest,
app_window->OSFullscreen(); app_window->OSFullscreen();
EXPECT_EQ(ui::SHOW_STATE_MAXIMIZED, window->GetRestoredState()); EXPECT_EQ(ui::SHOW_STATE_MAXIMIZED, window->GetRestoredState());
ash::Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager( ASSERT_NO_FATAL_FAILURE(test::SetAndWaitForTabletMode(true));
true);
EXPECT_TRUE(window->IsFullscreen()); EXPECT_TRUE(window->IsFullscreen());
EXPECT_EQ(ui::SHOW_STATE_MAXIMIZED, window->GetRestoredState()); EXPECT_EQ(ui::SHOW_STATE_MAXIMIZED, window->GetRestoredState());
ash::Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager( ASSERT_NO_FATAL_FAILURE(test::SetAndWaitForTabletMode(false));
false);
EXPECT_EQ(ui::SHOW_STATE_MAXIMIZED, window->GetRestoredState()); EXPECT_EQ(ui::SHOW_STATE_MAXIMIZED, window->GetRestoredState());
CloseAppWindow(app_window); CloseAppWindow(app_window);
...@@ -138,13 +127,9 @@ IN_PROC_BROWSER_TEST_F(ChromeNativeAppWindowViewsAuraAshBrowserTest, ...@@ -138,13 +127,9 @@ IN_PROC_BROWSER_TEST_F(ChromeNativeAppWindowViewsAuraAshBrowserTest,
app_window->ForcedFullscreen(); app_window->ForcedFullscreen();
ash::TabletModeController* tablet_mode_controller = ASSERT_NO_FATAL_FAILURE(test::SetAndWaitForTabletMode(true));
ash::Shell::Get()->tablet_mode_controller();
tablet_mode_controller->EnableTabletModeWindowManager(true);
tablet_mode_controller->FlushForTesting();
EXPECT_FALSE(window->immersive_fullscreen_controller_->IsEnabled()); EXPECT_FALSE(window->immersive_fullscreen_controller_->IsEnabled());
tablet_mode_controller->EnableTabletModeWindowManager(false); ASSERT_NO_FATAL_FAILURE(test::SetAndWaitForTabletMode(false));
tablet_mode_controller->FlushForTesting();
EXPECT_FALSE(window->immersive_fullscreen_controller_->IsEnabled()); EXPECT_FALSE(window->immersive_fullscreen_controller_->IsEnabled());
} }
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include "chrome/browser/profiles/profile_io_data.h" #include "chrome/browser/profiles/profile_io_data.h"
#include "chrome/browser/ssl/cert_verifier_browser_test.h" #include "chrome/browser/ssl/cert_verifier_browser_test.h"
#include "chrome/browser/ui/ash/tablet_mode_client.h" #include "chrome/browser/ui/ash/tablet_mode_client.h"
#include "chrome/browser/ui/ash/tablet_mode_client_test_util.h"
#include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/exclusive_access/fullscreen_controller.h" #include "chrome/browser/ui/exclusive_access/fullscreen_controller.h"
#include "chrome/browser/ui/exclusive_access/fullscreen_controller_test.h" #include "chrome/browser/ui/exclusive_access/fullscreen_controller_test.h"
...@@ -41,54 +42,6 @@ ...@@ -41,54 +42,6 @@
#include "ui/base/ui_base_features.h" #include "ui/base/ui_base_features.h"
#include "ui/views/animation/test/ink_drop_host_view_test_api.h" #include "ui/views/animation/test/ink_drop_host_view_test_api.h"
namespace {
// A helper used to wait for an expected change to the tablet mode state.
class TestTabletModeClientObserver : public TabletModeClientObserver {
public:
explicit TestTabletModeClientObserver(bool target_state)
: target_state_(target_state) {
TabletModeClient::Get()->AddObserver(this);
}
~TestTabletModeClientObserver() override {
TabletModeClient::Get()->RemoveObserver(this);
}
void OnTabletModeToggled(bool enabled) override {
if (enabled == target_state_)
run_loop_.Quit();
}
base::RunLoop* run_loop() { return &run_loop_; }
private:
const bool target_state_;
base::RunLoop run_loop_;
DISALLOW_COPY_AND_ASSIGN(TestTabletModeClientObserver);
};
// Enables or disables the tablet mode and waits to until the change has made
// its way back into Chrome (from Ash). Should only be called to toggle the
// current mode.
void SetAndWaitForTabletMode(bool enabled) {
ASSERT_NE(enabled, TabletModeClient::Get()->tablet_mode_enabled());
ash::mojom::ShellTestApiPtr shell_test_api;
content::ServiceManagerConnection::GetForProcess()
->GetConnector()
->BindInterface(ash::mojom::kServiceName, &shell_test_api);
shell_test_api->EnableTabletModeWindowManager(enabled);
TestTabletModeClientObserver observer(enabled);
observer.run_loop()->Run();
ASSERT_EQ(enabled, TabletModeClient::Get()->tablet_mode_enabled());
}
} // namespace
class ImmersiveModeControllerAshHostedAppBrowserTest class ImmersiveModeControllerAshHostedAppBrowserTest
: public extensions::ExtensionBrowserTest { : public extensions::ExtensionBrowserTest {
public: public:
...@@ -279,7 +232,7 @@ IN_PROC_BROWSER_TEST_F(ImmersiveModeControllerAshHostedAppBrowserTest, ...@@ -279,7 +232,7 @@ IN_PROC_BROWSER_TEST_F(ImmersiveModeControllerAshHostedAppBrowserTest,
// Verify that after entering tablet mode, immersive mode is enabled, and the // Verify that after entering tablet mode, immersive mode is enabled, and the
// the associated window's top inset is 0 (the top of the window is not // the associated window's top inset is 0 (the top of the window is not
// visible). // visible).
ASSERT_NO_FATAL_FAILURE(SetAndWaitForTabletMode(true)); ASSERT_NO_FATAL_FAILURE(test::SetAndWaitForTabletMode(true));
EXPECT_TRUE(controller()->IsEnabled()); EXPECT_TRUE(controller()->IsEnabled());
EXPECT_EQ(0, aura_window->GetProperty(aura::client::kTopViewInset)); EXPECT_EQ(0, aura_window->GetProperty(aura::client::kTopViewInset));
...@@ -297,12 +250,12 @@ IN_PROC_BROWSER_TEST_F(ImmersiveModeControllerAshHostedAppBrowserTest, ...@@ -297,12 +250,12 @@ IN_PROC_BROWSER_TEST_F(ImmersiveModeControllerAshHostedAppBrowserTest,
// mode. // mode.
ToggleFullscreen(); ToggleFullscreen();
EXPECT_TRUE(controller()->IsEnabled()); EXPECT_TRUE(controller()->IsEnabled());
ASSERT_NO_FATAL_FAILURE(SetAndWaitForTabletMode(false)); ASSERT_NO_FATAL_FAILURE(test::SetAndWaitForTabletMode(false));
EXPECT_TRUE(controller()->IsEnabled()); EXPECT_TRUE(controller()->IsEnabled());
// Verify that immersive mode remains if the browser was fullscreened when // Verify that immersive mode remains if the browser was fullscreened when
// entering tablet mode. // entering tablet mode.
ASSERT_NO_FATAL_FAILURE(SetAndWaitForTabletMode(true)); ASSERT_NO_FATAL_FAILURE(test::SetAndWaitForTabletMode(true));
EXPECT_TRUE(controller()->IsEnabled()); EXPECT_TRUE(controller()->IsEnabled());
// Verify that if the browser is not fullscreened, upon exiting tablet mode, // Verify that if the browser is not fullscreened, upon exiting tablet mode,
...@@ -310,7 +263,7 @@ IN_PROC_BROWSER_TEST_F(ImmersiveModeControllerAshHostedAppBrowserTest, ...@@ -310,7 +263,7 @@ IN_PROC_BROWSER_TEST_F(ImmersiveModeControllerAshHostedAppBrowserTest,
// greater than 0 (the top of the window is visible). // greater than 0 (the top of the window is visible).
ToggleFullscreen(); ToggleFullscreen();
EXPECT_TRUE(controller()->IsEnabled()); EXPECT_TRUE(controller()->IsEnabled());
ASSERT_NO_FATAL_FAILURE(SetAndWaitForTabletMode(false)); ASSERT_NO_FATAL_FAILURE(test::SetAndWaitForTabletMode(false));
EXPECT_FALSE(controller()->IsEnabled()); EXPECT_FALSE(controller()->IsEnabled());
// TODO(estade): make kTopviewInset work in OopAsh. // TODO(estade): make kTopviewInset work in OopAsh.
...@@ -342,7 +295,7 @@ IN_PROC_BROWSER_TEST_F(ImmersiveModeControllerAshHostedAppBrowserTest, ...@@ -342,7 +295,7 @@ IN_PROC_BROWSER_TEST_F(ImmersiveModeControllerAshHostedAppBrowserTest,
EXPECT_TRUE(frame_test_api.size_button()->visible()); EXPECT_TRUE(frame_test_api.size_button()->visible());
// Verify the size button is hidden in tablet mode. // Verify the size button is hidden in tablet mode.
SetAndWaitForTabletMode(true); test::SetAndWaitForTabletMode(true);
frame_test_api.EndAnimations(); frame_test_api.EndAnimations();
EXPECT_FALSE(frame_test_api.size_button()->visible()); EXPECT_FALSE(frame_test_api.size_button()->visible());
...@@ -351,7 +304,7 @@ IN_PROC_BROWSER_TEST_F(ImmersiveModeControllerAshHostedAppBrowserTest, ...@@ -351,7 +304,7 @@ IN_PROC_BROWSER_TEST_F(ImmersiveModeControllerAshHostedAppBrowserTest,
// Verify the size button is visible in clamshell mode, and that it does not // Verify the size button is visible in clamshell mode, and that it does not
// cover the other two buttons. // cover the other two buttons.
SetAndWaitForTabletMode(false); test::SetAndWaitForTabletMode(false);
frame_test_api.EndAnimations(); frame_test_api.EndAnimations();
EXPECT_TRUE(frame_test_api.size_button()->visible()); EXPECT_TRUE(frame_test_api.size_button()->visible());
...@@ -368,7 +321,7 @@ IN_PROC_BROWSER_TEST_F(ImmersiveModeControllerAshHostedAppBrowserTest, ...@@ -368,7 +321,7 @@ IN_PROC_BROWSER_TEST_F(ImmersiveModeControllerAshHostedAppBrowserTest,
IN_PROC_BROWSER_TEST_F(ImmersiveModeControllerAshHostedAppBrowserTest, IN_PROC_BROWSER_TEST_F(ImmersiveModeControllerAshHostedAppBrowserTest,
FrameLayoutStartInTabletMode) { FrameLayoutStartInTabletMode) {
// Start in tablet mode // Start in tablet mode
SetAndWaitForTabletMode(true); test::SetAndWaitForTabletMode(true);
BrowserNonClientFrameViewAsh* frame_view = nullptr; BrowserNonClientFrameViewAsh* frame_view = nullptr;
{ {
...@@ -389,6 +342,6 @@ IN_PROC_BROWSER_TEST_F(ImmersiveModeControllerAshHostedAppBrowserTest, ...@@ -389,6 +342,6 @@ IN_PROC_BROWSER_TEST_F(ImmersiveModeControllerAshHostedAppBrowserTest,
// Verify the size button is visible in clamshell mode, and that it does not // Verify the size button is visible in clamshell mode, and that it does not
// cover the other two buttons. // cover the other two buttons.
SetAndWaitForTabletMode(false); test::SetAndWaitForTabletMode(false);
VerifyButtonsInImmersiveMode(frame_view); VerifyButtonsInImmersiveMode(frame_view);
} }
...@@ -1778,6 +1778,8 @@ test("browser_tests") { ...@@ -1778,6 +1778,8 @@ test("browser_tests") {
"../browser/ui/ash/shelf_browsertest.cc", "../browser/ui/ash/shelf_browsertest.cc",
"../browser/ui/ash/system_tray_client_browsertest.cc", "../browser/ui/ash/system_tray_client_browsertest.cc",
"../browser/ui/ash/system_tray_tray_cast_browsertest_media_router_chromeos.cc", "../browser/ui/ash/system_tray_tray_cast_browsertest_media_router_chromeos.cc",
"../browser/ui/ash/tablet_mode_client_test_util.cc",
"../browser/ui/ash/tablet_mode_client_test_util.h",
"../browser/ui/ash/tablet_mode_page_behavior_browsertest.cc", "../browser/ui/ash/tablet_mode_page_behavior_browsertest.cc",
"../browser/ui/ash/time_to_first_present_recorder_browsertest.cc", "../browser/ui/ash/time_to_first_present_recorder_browsertest.cc",
"../browser/ui/ash/volume_controller_browsertest.cc", "../browser/ui/ash/volume_controller_browsertest.cc",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment