15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/eula_screen.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/browser_process.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/customization_document.h"
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/screen_observer.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/login/wizard_controller.h"
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chromeos/dbus/cryptohome_client.h"
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chromeos/dbus/dbus_method_call_status.h"
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chromeos/dbus/dbus_thread_manager.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)EulaScreen::EulaScreen(ScreenObserver* observer, EulaScreenActor* actor)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : WizardScreen(observer), actor_(actor), password_fetcher_(this) {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(actor_);
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (actor_)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    actor_->SetDelegate(this);
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)EulaScreen::~EulaScreen() {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (actor_)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    actor_->SetDelegate(NULL);
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void EulaScreen::PrepareToShow() {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (actor_)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    actor_->PrepareToShow();
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void EulaScreen::Show() {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Command to own the TPM.
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  DBusThreadManager::Get()->GetCryptohomeClient()->TpmCanAttemptOwnership(
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      EmptyVoidDBusMethodCallback());
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (actor_)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    actor_->Show();
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void EulaScreen::Hide() {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (actor_)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    actor_->Hide();
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string EulaScreen::GetName() const {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return WizardController::kEulaScreenName;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL EulaScreen::GetOemEulaUrl() const {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const StartupCustomizationDocument* customization =
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      StartupCustomizationDocument::GetInstance();
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (customization->IsReady()) {
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // Previously we're using "initial locale" that device initially
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // booted with out-of-box. http://crbug.com/145142
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    std::string locale = g_browser_process->GetApplicationLocale();
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string eula_page = customization->GetEULAPage(locale);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!eula_page.empty())
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return GURL(eula_page);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    VLOG(1) << "No eula found for locale: " << locale;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LOG(ERROR) << "No manifest found.";
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GURL();
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void EulaScreen::OnExit(bool accepted, bool usage_stats_enabled) {
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  get_screen_observer()->SetUsageStatisticsReporting(usage_stats_enabled);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  get_screen_observer()->OnExit(accepted
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   ? ScreenObserver::EULA_ACCEPTED
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   : ScreenObserver::EULA_BACK);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void EulaScreen::InitiatePasswordFetch() {
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (tpm_password_.empty()) {
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    password_fetcher_.Fetch();
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Will call actor after password has been fetched.
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else if (actor_) {
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    actor_->OnPasswordFetched(tpm_password_);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void EulaScreen::OnPasswordFetched(const std::string& tpm_password) {
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tpm_password_ = tpm_password;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (actor_)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    actor_->OnPasswordFetched(tpm_password_);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool EulaScreen::IsUsageStatsEnabled() const {
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return get_screen_observer()->GetUsageStatisticsReporting();
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void EulaScreen::OnActorDestroyed(EulaScreenActor* actor) {
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (actor_ == actor)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    actor_ = NULL;
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
102