terms_of_service_screen_handler.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "grit/chromium_strings.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "grit/generated_resources.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace chromeos {
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TermsOfServiceScreenHandler::TermsOfServiceScreenHandler()
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : screen_(NULL),
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      show_on_init_(false),
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      load_error_(false) {
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TermsOfServiceScreenHandler::~TermsOfServiceScreenHandler() {
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (screen_)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    screen_->OnActorDestroyed(this);
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TermsOfServiceScreenHandler::RegisterMessages() {
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AddCallback("termsOfServiceBack",
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              &TermsOfServiceScreenHandler::HandleBack);
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  AddCallback("termsOfServiceAccept",
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              &TermsOfServiceScreenHandler::HandleAccept);
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TermsOfServiceScreenHandler::DeclareLocalizedValues(
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    LocalizedValuesBuilder* builder) {
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("termsOfServiceScreenHeading",
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               IDS_TERMS_OF_SERVICE_SCREEN_HEADING);
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("termsOfServiceScreenSubheading",
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               IDS_TERMS_OF_SERVICE_SCREEN_SUBHEADING);
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("termsOfServiceContentHeading",
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               IDS_TERMS_OF_SERVICE_SCREEN_CONTENT_HEADING);
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("termsOfServiceLoading", IDS_TERMS_OF_SERVICE_SCREEN_LOADING);
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("termsOfServiceError", IDS_TERMS_OF_SERVICE_SCREEN_ERROR);
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("termsOfServiceTryAgain", IDS_TERMS_OF_SERVICE_SCREEN_TRY_AGAIN);
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("termsOfServiceBackButton",
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               IDS_TERMS_OF_SERVICE_SCREEN_BACK_BUTTON);
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  builder->Add("termsOfServiceAcceptButton",
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               IDS_TERMS_OF_SERVICE_SCREEN_ACCEPT_BUTTON);
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TermsOfServiceScreenHandler::SetDelegate(Delegate* screen) {
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  screen_ = screen;
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TermsOfServiceScreenHandler::Show() {
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!page_is_ready()) {
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    show_on_init_ = true;
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Updates the domain name shown in the UI.
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  UpdateDomainInUI();
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Update the UI to show an error message or the Terms of Service.
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  UpdateTermsOfServiceInUI();
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ShowScreen(OobeUI::kScreenTermsOfService, NULL);
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TermsOfServiceScreenHandler::Hide() {
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TermsOfServiceScreenHandler::SetDomain(const std::string& domain) {
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  domain_ = domain;
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  UpdateDomainInUI();
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TermsOfServiceScreenHandler::OnLoadError() {
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  load_error_ = true;
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  terms_of_service_ = "";
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  UpdateTermsOfServiceInUI();
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TermsOfServiceScreenHandler::OnLoadSuccess(
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const std::string& terms_of_service) {
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  load_error_ = false;
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  terms_of_service_ = terms_of_service;
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  UpdateTermsOfServiceInUI();
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TermsOfServiceScreenHandler::Initialize() {
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (show_on_init_) {
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    Show();
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    show_on_init_ = false;
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TermsOfServiceScreenHandler::UpdateDomainInUI() {
96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (page_is_ready())
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    CallJS("cr.ui.Oobe.setTermsOfServiceDomain", domain_);
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TermsOfServiceScreenHandler::UpdateTermsOfServiceInUI() {
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!page_is_ready())
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // If either |load_error_| or |terms_of_service_| is set, the download of the
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Terms of Service has completed and the UI should be updated. Otherwise, the
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // download is still in progress and the UI will be updated when the
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // OnLoadError() or the OnLoadSuccess() callback is called.
108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (load_error_)
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    CallJS("cr.ui.Oobe.setTermsOfServiceLoadError");
110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  else if (!terms_of_service_.empty())
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    CallJS("cr.ui.Oobe.setTermsOfService", terms_of_service_);
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TermsOfServiceScreenHandler::HandleBack() {
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (screen_)
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    screen_->OnDecline();
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void TermsOfServiceScreenHandler::HandleAccept() {
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!screen_)
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // If the Terms of Service have not been successfully downloaded, the "accept
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // and continue" button should not be accessible. If the user managed to
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // activate it somehow anway, do not treat this as acceptance of the Terms
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // and Conditions and end the session instead, as if the user had declined.
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (terms_of_service_.empty())
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    screen_->OnDecline();
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  else
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    screen_->OnAccept();
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace chromeos
134