blob: 0ffa1c7c75aadf3706b2f8f462f0c61fd1268e6b [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/ui/webui/chromeos/account_manager_welcome_dialog.h"
#include <string>
#include "base/logging.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/ui/settings_window_manager_chromeos.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/webui_url_constants.h"
#include "components/prefs/pref_service.h"
#include "ui/aura/window.h"
#include "ui/views/widget/widget.h"
#include "ui/wm/core/shadow_types.h"
#include "url/gurl.h"
namespace chromeos {
namespace {
AccountManagerWelcomeDialog* g_dialog = nullptr;
constexpr int kSigninDialogWidth = 768;
constexpr int kSigninDialogHeight = 640;
constexpr int kMaxNumTimesShown = 1;
} // namespace
AccountManagerWelcomeDialog::AccountManagerWelcomeDialog()
: SystemWebDialogDelegate(GURL(chrome::kChromeUIAccountManagerWelcomeURL),
base::string16() /* title */) {}
AccountManagerWelcomeDialog::~AccountManagerWelcomeDialog() {
DCHECK_EQ(this, g_dialog);
g_dialog = nullptr;
}
// static
bool AccountManagerWelcomeDialog::ShowIfRequired() {
if (g_dialog) {
// If the dialog is already being displayed, bring it to focus instead of
// creating another window.
g_dialog->dialog_window()->Focus();
return true;
}
// Check if the dialog should be shown.
PrefService* pref_service =
ProfileManager::GetActiveUserProfile()->GetPrefs();
const int num_times_shown = pref_service->GetInteger(
prefs::kAccountManagerNumTimesWelcomeScreenShown);
if (num_times_shown >= kMaxNumTimesShown) {
return false;
}
pref_service->SetInteger(prefs::kAccountManagerNumTimesWelcomeScreenShown,
num_times_shown + 1);
// Will be deleted by |SystemWebDialogDelegate::OnDialogClosed|.
g_dialog = new AccountManagerWelcomeDialog();
g_dialog->ShowSystemDialog();
return true;
}
void AccountManagerWelcomeDialog::AdjustWidgetInitParams(
views::Widget::InitParams* params) {
params->z_order = ui::ZOrderLevel::kNormal;
params->shadow_type = views::Widget::InitParams::ShadowType::SHADOW_TYPE_DROP;
params->shadow_elevation = wm::kShadowElevationActiveWindow;
}
void AccountManagerWelcomeDialog::OnDialogClosed(
const std::string& json_retval) {
chrome::SettingsWindowManager::GetInstance()->ShowOSSettings(
ProfileManager::GetActiveUserProfile(), chrome::kAccountManagerSubPage);
SystemWebDialogDelegate::OnDialogClosed(json_retval);
}
void AccountManagerWelcomeDialog::GetDialogSize(gfx::Size* size) const {
size->SetSize(kSigninDialogWidth, kSigninDialogHeight);
}
std::string AccountManagerWelcomeDialog::GetDialogArgs() const {
return std::string();
}
bool AccountManagerWelcomeDialog::ShouldShowDialogTitle() const {
return false;
}
bool AccountManagerWelcomeDialog::ShouldShowCloseButton() const {
return false;
}
} // namespace chromeos