Home | History | Annotate | Download | only in screens
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/chromeos/login/screens/eula_screen.h"
      6 
      7 #include "base/logging.h"
      8 #include "chrome/browser/browser_process.h"
      9 #include "chrome/browser/chromeos/customization_document.h"
     10 #include "chrome/browser/chromeos/login/screens/screen_observer.h"
     11 #include "chrome/browser/chromeos/login/wizard_controller.h"
     12 #include "chromeos/dbus/cryptohome_client.h"
     13 #include "chromeos/dbus/dbus_method_call_status.h"
     14 #include "chromeos/dbus/dbus_thread_manager.h"
     15 
     16 namespace chromeos {
     17 
     18 EulaScreen::EulaScreen(ScreenObserver* observer, EulaScreenActor* actor)
     19     : WizardScreen(observer), actor_(actor), password_fetcher_(this) {
     20   DCHECK(actor_);
     21   if (actor_)
     22     actor_->SetDelegate(this);
     23 }
     24 
     25 EulaScreen::~EulaScreen() {
     26   if (actor_)
     27     actor_->SetDelegate(NULL);
     28 }
     29 
     30 void EulaScreen::PrepareToShow() {
     31   if (actor_)
     32     actor_->PrepareToShow();
     33 }
     34 
     35 void EulaScreen::Show() {
     36   // Command to own the TPM.
     37   DBusThreadManager::Get()->GetCryptohomeClient()->TpmCanAttemptOwnership(
     38       EmptyVoidDBusMethodCallback());
     39   if (actor_)
     40     actor_->Show();
     41 }
     42 
     43 void EulaScreen::Hide() {
     44   if (actor_)
     45     actor_->Hide();
     46 }
     47 
     48 std::string EulaScreen::GetName() const {
     49   return WizardController::kEulaScreenName;
     50 }
     51 
     52 GURL EulaScreen::GetOemEulaUrl() const {
     53   const StartupCustomizationDocument* customization =
     54       StartupCustomizationDocument::GetInstance();
     55   if (customization->IsReady()) {
     56     // Previously we're using "initial locale" that device initially
     57     // booted with out-of-box. http://crbug.com/145142
     58     std::string locale = g_browser_process->GetApplicationLocale();
     59     std::string eula_page = customization->GetEULAPage(locale);
     60     if (!eula_page.empty())
     61       return GURL(eula_page);
     62 
     63     VLOG(1) << "No eula found for locale: " << locale;
     64   } else {
     65     LOG(ERROR) << "No manifest found.";
     66   }
     67   return GURL();
     68 }
     69 
     70 void EulaScreen::OnExit(bool accepted, bool usage_stats_enabled) {
     71   get_screen_observer()->SetUsageStatisticsReporting(usage_stats_enabled);
     72   get_screen_observer()->OnExit(accepted
     73                    ? ScreenObserver::EULA_ACCEPTED
     74                    : ScreenObserver::EULA_BACK);
     75 }
     76 
     77 void EulaScreen::InitiatePasswordFetch() {
     78   if (tpm_password_.empty()) {
     79     password_fetcher_.Fetch();
     80     // Will call actor after password has been fetched.
     81   } else if (actor_) {
     82     actor_->OnPasswordFetched(tpm_password_);
     83   }
     84 }
     85 
     86 void EulaScreen::OnPasswordFetched(const std::string& tpm_password) {
     87   tpm_password_ = tpm_password;
     88   if (actor_)
     89     actor_->OnPasswordFetched(tpm_password_);
     90 }
     91 
     92 bool EulaScreen::IsUsageStatsEnabled() const {
     93   return get_screen_observer()->GetUsageStatisticsReporting();
     94 }
     95 
     96 void EulaScreen::OnActorDestroyed(EulaScreenActor* actor) {
     97   if (actor_ == actor)
     98     actor_ = NULL;
     99 }
    100 
    101 }  // namespace chromeos
    102