blob: 98f5828873a8d68fdf6d78fa7b55982563241c0e [file] [log] [blame]
// Copyright (c) 2012 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/screens/eula_screen.h"
#include "base/logging.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/customization_document.h"
#include "chrome/browser/chromeos/login/screens/screen_observer.h"
#include "chrome/browser/chromeos/login/wizard_controller.h"
#include "chromeos/dbus/cryptohome_client.h"
#include "chromeos/dbus/dbus_method_call_status.h"
#include "chromeos/dbus/dbus_thread_manager.h"
namespace chromeos {
EulaScreen::EulaScreen(ScreenObserver* observer, EulaScreenActor* actor)
: WizardScreen(observer), actor_(actor), password_fetcher_(this) {
DCHECK(actor_);
if (actor_)
actor_->SetDelegate(this);
}
EulaScreen::~EulaScreen() {
if (actor_)
actor_->SetDelegate(NULL);
}
void EulaScreen::PrepareToShow() {
if (actor_)
actor_->PrepareToShow();
}
void EulaScreen::Show() {
// Command to own the TPM.
DBusThreadManager::Get()->GetCryptohomeClient()->TpmCanAttemptOwnership(
EmptyVoidDBusMethodCallback());
if (actor_)
actor_->Show();
}
void EulaScreen::Hide() {
if (actor_)
actor_->Hide();
}
std::string EulaScreen::GetName() const {
return WizardController::kEulaScreenName;
}
GURL EulaScreen::GetOemEulaUrl() const {
const StartupCustomizationDocument* customization =
StartupCustomizationDocument::GetInstance();
if (customization->IsReady()) {
// Previously we're using "initial locale" that device initially
// booted with out-of-box. http://crbug.com/145142
std::string locale = g_browser_process->GetApplicationLocale();
std::string eula_page = customization->GetEULAPage(locale);
if (!eula_page.empty())
return GURL(eula_page);
VLOG(1) << "No eula found for locale: " << locale;
} else {
LOG(ERROR) << "No manifest found.";
}
return GURL();
}
void EulaScreen::OnExit(bool accepted, bool usage_stats_enabled) {
get_screen_observer()->SetUsageStatisticsReporting(usage_stats_enabled);
get_screen_observer()->OnExit(accepted
? ScreenObserver::EULA_ACCEPTED
: ScreenObserver::EULA_BACK);
}
void EulaScreen::InitiatePasswordFetch() {
if (tpm_password_.empty()) {
password_fetcher_.Fetch();
// Will call actor after password has been fetched.
} else if (actor_) {
actor_->OnPasswordFetched(tpm_password_);
}
}
void EulaScreen::OnPasswordFetched(const std::string& tpm_password) {
tpm_password_ = tpm_password;
if (actor_)
actor_->OnPasswordFetched(tpm_password_);
}
bool EulaScreen::IsUsageStatsEnabled() const {
return get_screen_observer()->GetUsageStatisticsReporting();
}
void EulaScreen::OnActorDestroyed(EulaScreenActor* actor) {
if (actor_ == actor)
actor_ = NULL;
}
} // namespace chromeos