blob: 40610913238d45956870384f9e66157acd40083a [file] [log] [blame]
// Copyright 2019 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 "chrome/browser/chromeos/login/test/help_app_test_helper.h"
#include "base/files/file_path.h"
#include "base/path_service.h"
#include "chrome/browser/chromeos/extensions/signin_screen_policy_provider.h"
#include "chrome/browser/chromeos/login/help_app_launcher.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/browser/extensions/chrome_test_extension_loader.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/grit/generated_resources.h"
#include "ui/aura/env.h"
#include "ui/aura/window.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/views/widget/widget.h"
namespace chromeos {
///////////////////////////////////////////////////////////////////////////////
// HelpAppTestHelper::Waiter
///////////////////////////////////////////////////////////////////////////////
HelpAppTestHelper::Waiter::Waiter() {
aura::Env::GetInstance()->AddObserver(this);
}
HelpAppTestHelper::Waiter::~Waiter() {
aura::Env::GetInstance()->RemoveObserver(this);
window_observer_.RemoveAll();
// Explicitly close any help app dialogs still open to prevent flaky errors in
// browser tests. Remove when crbug.com/951828 is fixed.
for (aura::Window* dialog_window : dialog_windows_)
views::Widget::GetWidgetForNativeView(dialog_window)->CloseNow();
}
void HelpAppTestHelper::Waiter::Wait() {
if (!help_app_dialog_opened_)
run_loop_.Run();
}
void HelpAppTestHelper::Waiter::OnWindowInitialized(aura::Window* window) {
DCHECK(!window_observer_.IsObserving(window));
window_observer_.Add(window);
}
void HelpAppTestHelper::Waiter::OnWindowDestroyed(aura::Window* window) {
if (window_observer_.IsObserving(window))
window_observer_.Remove(window);
dialog_windows_.erase(window);
}
void HelpAppTestHelper::Waiter::OnWindowVisibilityChanged(aura::Window* window,
bool visible) {
if (!IsHelpAppDialog(window))
return;
dialog_windows_.insert(window);
if (visible) {
help_app_dialog_opened_ = true;
run_loop_.Quit();
}
}
bool HelpAppTestHelper::Waiter::IsHelpAppDialog(aura::Window* window) {
return window->GetTitle() ==
l10n_util::GetStringUTF16(IDS_LOGIN_OOBE_HELP_DIALOG_TITLE);
}
///////////////////////////////////////////////////////////////////////////////
// HelpAppTestHelper
///////////////////////////////////////////////////////////////////////////////
HelpAppTestHelper::HelpAppTestHelper() {
auto reset = GetScopedSigninScreenPolicyProviderDisablerForTesting();
base::FilePath test_data_dir;
base::PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir);
extensions::ChromeTestExtensionLoader loader(
ProfileHelper::GetSigninProfile());
loader.set_allow_incognito_access(true);
scoped_refptr<const extensions::Extension> extension =
loader.LoadExtension(test_data_dir.AppendASCII("extensions")
.AppendASCII("api_test")
.AppendASCII("help_app"));
DCHECK(extension && !extension->id().empty());
HelpAppLauncher::SetExtensionIdForTest(extension->id().c_str());
}
HelpAppTestHelper::~HelpAppTestHelper() {
HelpAppLauncher::SetExtensionIdForTest(nullptr);
}
} // namespace chromeos