blob: 6d7d72389710cd971129facb1f518412665b8a51 [file] [log] [blame]
// 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/cpp/immersive/immersive_fullscreen_controller_test_api.h"
#include "chrome/browser/extensions/extension_browsertest.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/exclusive_access/fullscreen_controller_test.h"
#include "chrome/browser/ui/views/frame/browser_view.h"
#include "chrome/browser/ui/views/frame/hosted_app_button_container.h"
#include "chrome/browser/ui/views/frame/hosted_app_menu_button.h"
#include "chrome/browser/ui/views/frame/immersive_mode_controller_ash.h"
#include "chrome/browser/ui/views/frame/top_container_view.h"
#include "chrome/common/web_application_info.h"
#include "chrome/test/base/interactive_test_utils.h"
class HostedAppAshInteractiveUITest : public extensions::ExtensionBrowserTest {
public:
HostedAppAshInteractiveUITest() = default;
~HostedAppAshInteractiveUITest() override = default;
// InProcessBrowserTest override:
void SetUpOnMainThread() override {
WebApplicationInfo web_app_info;
web_app_info.app_url = GURL("https://test.org");
const extensions::Extension* app = InstallBookmarkApp(web_app_info);
Browser* browser = ExtensionBrowserTest::LaunchAppBrowser(app);
browser_view_ = BrowserView::GetBrowserViewForBrowser(browser);
controller_ = browser_view_->immersive_mode_controller();
ash::ImmersiveFullscreenControllerTestApi(
static_cast<ImmersiveModeControllerAsh*>(controller_)->controller())
.SetupForTest();
HostedAppButtonContainer::DisableAnimationForTesting();
}
void CheckHostedAppMenuClickable() {
AppMenuButton* menu_button =
browser_view_->toolbar_button_provider()->GetAppMenuButton();
// Open the app menu by clicking on it.
base::RunLoop open_loop;
ui_test_utils::MoveMouseToCenterAndPress(
menu_button, ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP,
open_loop.QuitClosure());
open_loop.Run();
EXPECT_TRUE(menu_button->IsMenuShowing());
// Close the app menu by clicking on it again.
base::RunLoop close_loop;
ui_test_utils::MoveMouseToCenterAndPress(
menu_button, ui_controls::LEFT, ui_controls::DOWN | ui_controls::UP,
close_loop.QuitClosure());
close_loop.Run();
EXPECT_FALSE(menu_button->IsMenuShowing());
}
BrowserView* browser_view_ = nullptr;
ImmersiveModeController* controller_ = nullptr;
private:
DISALLOW_COPY_AND_ASSIGN(HostedAppAshInteractiveUITest);
};
// Test that the hosted app menu button opens a menu on click.
IN_PROC_BROWSER_TEST_F(HostedAppAshInteractiveUITest, MenuButtonClickable) {
CheckHostedAppMenuClickable();
}
// Test that the hosted app menu button opens a menu on click in immersive mode.
IN_PROC_BROWSER_TEST_F(HostedAppAshInteractiveUITest,
ImmersiveMenuButtonClickable) {
FullscreenNotificationObserver waiter;
chrome::ToggleFullscreenMode(browser());
waiter.Wait();
std::unique_ptr<ImmersiveRevealedLock> revealed_lock(
controller_->GetRevealedLock(
ImmersiveModeControllerAsh::ANIMATE_REVEAL_NO));
CheckHostedAppMenuClickable();
}