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