12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/terms_of_service_screen_handler.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include <vector>
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/bind.h"
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/bind_helpers.h"
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/prefs/pref_service.h"
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/strings/string_split.h"
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/values.h"
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/browser_process.h"
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/base/locale_util.h"
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/login/screens/core_oobe_actor.h"
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/chromeos/profiles/profile_helper.h"
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/profiles/profile.h"
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/common/pref_names.h"
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/chromium_strings.h"
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h"
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chromeos/ime/input_method_manager.h"
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/user_manager/user.h"
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/user_manager/user_manager.h"
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/browser/web_ui.h"
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
30a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)namespace {
31a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
32a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const char kJsScreenPath[] = "login.TermsOfServiceScreen";
33a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
34a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}  // namespace
35a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos {
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TermsOfServiceScreenHandler::TermsOfServiceScreenHandler(
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    CoreOobeActor* core_oobe_actor)
40a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    : BaseScreenHandler(kJsScreenPath),
41a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      screen_(NULL),
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      core_oobe_actor_(core_oobe_actor),
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      show_on_init_(false),
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      load_error_(false) {
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TermsOfServiceScreenHandler::~TermsOfServiceScreenHandler() {
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (screen_)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    screen_->OnActorDestroyed(this);
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TermsOfServiceScreenHandler::RegisterMessages() {
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AddCallback("termsOfServiceBack",
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              &TermsOfServiceScreenHandler::HandleBack);
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AddCallback("termsOfServiceAccept",
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              &TermsOfServiceScreenHandler::HandleAccept);
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TermsOfServiceScreenHandler::DeclareLocalizedValues(
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    LocalizedValuesBuilder* builder) {
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("termsOfServiceScreenHeading",
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               IDS_TERMS_OF_SERVICE_SCREEN_HEADING);
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("termsOfServiceScreenSubheading",
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               IDS_TERMS_OF_SERVICE_SCREEN_SUBHEADING);
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("termsOfServiceContentHeading",
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               IDS_TERMS_OF_SERVICE_SCREEN_CONTENT_HEADING);
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("termsOfServiceLoading", IDS_TERMS_OF_SERVICE_SCREEN_LOADING);
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("termsOfServiceError", IDS_TERMS_OF_SERVICE_SCREEN_ERROR);
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("termsOfServiceTryAgain", IDS_TERMS_OF_SERVICE_SCREEN_TRY_AGAIN);
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("termsOfServiceBackButton",
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               IDS_TERMS_OF_SERVICE_SCREEN_BACK_BUTTON);
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("termsOfServiceAcceptButton",
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               IDS_TERMS_OF_SERVICE_SCREEN_ACCEPT_BUTTON);
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TermsOfServiceScreenHandler::SetDelegate(Delegate* screen) {
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  screen_ = screen;
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TermsOfServiceScreenHandler::Show() {
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!page_is_ready()) {
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    show_on_init_ = true;
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const std::string locale =
876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      ProfileHelper::Get()
886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          ->GetProfileByUserUnsafe(
896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)              user_manager::UserManager::Get()->GetActiveUser())
906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          ->GetPrefs()
916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          ->GetString(prefs::kApplicationLocale);
926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (locale.empty() || locale == g_browser_process->GetApplicationLocale()) {
945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // If the user has not chosen a UI locale yet or the chosen locale matches
955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // the current UI locale, show the screen immediately.
965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    DoShow();
975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return;
985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Switch to the user's UI locale before showing the screen.
1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  scoped_ptr<locale_util::SwitchLanguageCallback> callback(
1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      new locale_util::SwitchLanguageCallback(
1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          base::Bind(&TermsOfServiceScreenHandler::OnLanguageChangedCallback,
1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                     base::Unretained(this))));
1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  locale_util::SwitchLanguage(locale,
1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                              true,   // enable_locale_keyboard_layouts
1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                              false,  // login_layouts_only
1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                              callback.Pass());
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TermsOfServiceScreenHandler::Hide() {
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TermsOfServiceScreenHandler::SetDomain(const std::string& domain) {
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  domain_ = domain;
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  UpdateDomainInUI();
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TermsOfServiceScreenHandler::OnLoadError() {
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  load_error_ = true;
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  terms_of_service_ = "";
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  UpdateTermsOfServiceInUI();
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TermsOfServiceScreenHandler::OnLoadSuccess(
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const std::string& terms_of_service) {
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  load_error_ = false;
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  terms_of_service_ = terms_of_service;
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  UpdateTermsOfServiceInUI();
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TermsOfServiceScreenHandler::Initialize() {
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (show_on_init_) {
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    Show();
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    show_on_init_ = false;
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void TermsOfServiceScreenHandler::OnLanguageChangedCallback(
1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& requested_locale,
1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& loaded_locale,
1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const bool success) {
1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Update the screen contents to the new locale.
1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  base::DictionaryValue localized_strings;
1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  static_cast<OobeUI*>(web_ui()->GetController())
1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      ->GetLocalizedStrings(&localized_strings);
1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  core_oobe_actor_->ReloadContent(localized_strings);
1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DoShow();
1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void TermsOfServiceScreenHandler::DoShow() {
1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Determine the user's most preferred input method.
1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  std::vector<std::string> input_methods;
1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  base::SplitString(
1566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      ProfileHelper::Get()
1576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          ->GetProfileByUserUnsafe(
1586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)              user_manager::UserManager::Get()->GetActiveUser())
1596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          ->GetPrefs()
1606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          ->GetString(prefs::kLanguagePreloadEngines),
1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      ',',
1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      &input_methods);
1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!input_methods.empty()) {
1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // If the user has a preferred input method, enable it and switch to it.
1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    chromeos::input_method::InputMethodManager* input_method_manager =
1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        chromeos::input_method::InputMethodManager::Get();
16803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    input_method_manager->GetActiveIMEState()->EnableInputMethod(
16903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        input_methods.front());
17003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    input_method_manager->GetActiveIMEState()->ChangeInputMethod(
17103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        input_methods.front(), false /* show_message */);
1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Updates the domain name shown in the UI.
1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  UpdateDomainInUI();
1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Update the UI to show an error message or the Terms of Service.
1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  UpdateTermsOfServiceInUI();
1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ShowScreen(OobeUI::kScreenTermsOfService, NULL);
1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TermsOfServiceScreenHandler::UpdateDomainInUI() {
184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (page_is_ready())
1853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    CallJS("setDomain", domain_);
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TermsOfServiceScreenHandler::UpdateTermsOfServiceInUI() {
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!page_is_ready())
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // If either |load_error_| or |terms_of_service_| is set, the download of the
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Terms of Service has completed and the UI should be updated. Otherwise, the
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // download is still in progress and the UI will be updated when the
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // OnLoadError() or the OnLoadSuccess() callback is called.
196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (load_error_)
1973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    CallJS("setTermsOfServiceLoadError");
198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  else if (!terms_of_service_.empty())
1993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    CallJS("setTermsOfService", terms_of_service_);
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TermsOfServiceScreenHandler::HandleBack() {
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (screen_)
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    screen_->OnDecline();
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TermsOfServiceScreenHandler::HandleAccept() {
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!screen_)
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // If the Terms of Service have not been successfully downloaded, the "accept
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // and continue" button should not be accessible. If the user managed to
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // activate it somehow anway, do not treat this as acceptance of the Terms
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // and Conditions and end the session instead, as if the user had declined.
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (terms_of_service_.empty())
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    screen_->OnDecline();
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  else
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    screen_->OnAccept();
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace chromeos
222