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/ui/webui/chromeos/login/enrollment_screen_handler.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <algorithm> 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "base/bind.h" 10558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "base/bind_helpers.h" 11558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "base/compiler_specific.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/macros.h" 131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/message_loop/message_loop.h" 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/strings/string_util.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/strings/stringprintf.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/values.h" 17558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/browser_process.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_helper.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browsing_data/browsing_data_remover.h" 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" 21558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/chromeos/policy/policy_oauth2_token_fetcher.h" 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/extensions/signin/gaia_auth_extension_loader.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/authenticated_user_email_retriever.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h" 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/network/network_state.h" 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/network/network_state_handler.h" 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/browser/cloud/message_util.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 31558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "google_apis/gaia/gaia_auth_fetcher.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/gaia_auth_util.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/gaia_constants.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/gaia_urls.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "google_apis/gaia/google_service_auth_error.h" 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "net/url_request/url_request_context_getter.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace chromeos { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 42a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const char kJsScreenPath[] = "login.OAuthEnrollmentScreen"; 43a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Enrollment step names. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kEnrollmentStepSignin[] = "signin"; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kEnrollmentStepSuccess[] = "success"; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Enrollment mode strings. 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char* const kModeStrings[EnrollmentScreenActor::ENROLLMENT_MODE_COUNT] = 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { "manual", "forced", "auto", "recovery" }; 51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochstd::string EnrollmentModeToString(EnrollmentScreenActor::EnrollmentMode mode) { 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CHECK(0 <= mode && mode < EnrollmentScreenActor::ENROLLMENT_MODE_COUNT); 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return kModeStrings[mode]; 55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A helper class that takes care of asynchronously revoking a given token. 581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class TokenRevoker : public GaiaAuthConsumer { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TokenRevoker() 611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) : gaia_fetcher_(this, 621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GaiaConstants::kChromeOSSource, 631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) g_browser_process->system_request_context()) {} 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~TokenRevoker() {} 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 66558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch void Start(const std::string& token) { 67558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch gaia_fetcher_.StartRevokeOAuth2Token(token); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 70558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // GaiaAuthConsumer: 71558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch virtual void OnOAuth2RevokeTokenCompleted() OVERRIDE { 721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::MessageLoop::current()->DeleteSoon(FROM_HERE, this); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 76558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch GaiaAuthFetcher gaia_fetcher_; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TokenRevoker); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Returns network name by service path. 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdochstd::string GetNetworkName(const std::string& service_path) { 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const NetworkState* network = 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NetworkHandler::Get()->network_state_handler()->GetNetworkState( 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_path); 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!network) 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return std::string(); 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return network->name(); 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool IsBehindCaptivePortal(NetworkStateInformer::State state, 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ErrorScreenActor::ErrorReason reason) { 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return state == NetworkStateInformer::CAPTIVE_PORTAL || 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch reason == ErrorScreenActor::ERROR_REASON_PORTAL_DETECTED; 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool IsProxyError(NetworkStateInformer::State state, 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ErrorScreenActor::ErrorReason reason) { 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return state == NetworkStateInformer::PROXY_AUTH_REQUIRED || 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch reason == ErrorScreenActor::ERROR_REASON_PROXY_AUTH_CANCELLED || 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch reason == ErrorScreenActor::ERROR_REASON_PROXY_CONNECTION_FAILED; 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} // namespace 1051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// EnrollmentScreenHandler, public ------------------------------ 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 108116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEnrollmentScreenHandler::EnrollmentScreenHandler( 109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const scoped_refptr<NetworkStateInformer>& network_state_informer, 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ErrorScreenActor* error_screen_actor) 111a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) : BaseScreenHandler(kJsScreenPath), 112a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) controller_(NULL), 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_on_init_(false), 114effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch enrollment_mode_(ENROLLMENT_MODE_MANUAL), 115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch browsing_data_remover_(NULL), 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch frame_error_(net::OK), 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch network_state_informer_(network_state_informer), 118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch error_screen_actor_(error_screen_actor), 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch weak_ptr_factory_(this) { 120a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) set_async_assets_load_id(OobeUI::kScreenOobeEnrollment); 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(network_state_informer_.get()); 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(error_screen_actor_); 123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch network_state_informer_->AddObserver(this); 124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (chromeos::LoginDisplayHostImpl::default_host()) { 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chromeos::WebUILoginView* login_view = 127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chromeos::LoginDisplayHostImpl::default_host()->GetWebUILoginView(); 128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (login_view) 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch login_view->AddFrameObserver(this); 130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)EnrollmentScreenHandler::~EnrollmentScreenHandler() { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (browsing_data_remover_) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browsing_data_remover_->RemoveObserver(this); 136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch network_state_informer_->RemoveObserver(this); 137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (chromeos::LoginDisplayHostImpl::default_host()) { 139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chromeos::WebUILoginView* login_view = 140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chromeos::LoginDisplayHostImpl::default_host()->GetWebUILoginView(); 141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (login_view) 142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch login_view->RemoveFrameObserver(this); 143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// EnrollmentScreenHandler, WebUIMessageHandler implementation -- 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void EnrollmentScreenHandler::RegisterMessages() { 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) AddCallback("oauthEnrollRetrieveAuthenticatedUserEmail", 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) &EnrollmentScreenHandler::HandleRetrieveAuthenticatedUserEmail); 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("oauthEnrollClose", 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &EnrollmentScreenHandler::HandleClose); 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("oauthEnrollCompleteLogin", 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &EnrollmentScreenHandler::HandleCompleteLogin); 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddCallback("oauthEnrollRetry", 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &EnrollmentScreenHandler::HandleRetry); 157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AddCallback("frameLoadingCompleted", 158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &EnrollmentScreenHandler::HandleFrameLoadingCompleted); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// EnrollmentScreenHandler 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// EnrollmentScreenActor implementation ----------------------------------- 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 164effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid EnrollmentScreenHandler::SetParameters( 165effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch Controller* controller, 166effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EnrollmentMode enrollment_mode, 167effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::string& management_domain) { 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller_ = controller; 169effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch enrollment_mode_ = enrollment_mode; 170effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch management_domain_ = management_domain; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void EnrollmentScreenHandler::PrepareToShow() { 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void EnrollmentScreenHandler::Show() { 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!page_is_ready()) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_on_init_ = true; 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoShow(); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void EnrollmentScreenHandler::Hide() { 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void EnrollmentScreenHandler::FetchOAuthToken() { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromWebUI(web_ui()); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) oauth_fetcher_.reset( 189558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch new policy::PolicyOAuth2TokenFetcher( 190558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch profile->GetRequestContext(), 191558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch g_browser_process->system_request_context(), 192558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::Bind(&EnrollmentScreenHandler::OnTokenFetched, 193558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch base::Unretained(this)))); 194558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch oauth_fetcher_->Start(); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void EnrollmentScreenHandler::ResetAuth(const base::Closure& callback) { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) auth_reset_callbacks_.push_back(callback); 1991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (browsing_data_remover_) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 202558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (oauth_fetcher_) { 2031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (!oauth_fetcher_->oauth2_access_token().empty()) 2041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) (new TokenRevoker())->Start(oauth_fetcher_->oauth2_access_token()); 2051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (!oauth_fetcher_->oauth2_refresh_token().empty()) 2071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) (new TokenRevoker())->Start(oauth_fetcher_->oauth2_refresh_token()); 208558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch } 209558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile = Profile::FromBrowserContext( 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->GetWebContents()->GetBrowserContext()); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browsing_data_remover_ = 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataRemover::CreateForUnboundedRange(profile); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browsing_data_remover_->AddObserver(this); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browsing_data_remover_->Remove(BrowsingDataRemover::REMOVE_SITE_DATA, 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowsingDataHelper::UNPROTECTED_WEB); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void EnrollmentScreenHandler::ShowSigninScreen() { 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowStep(kEnrollmentStepSignin); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void EnrollmentScreenHandler::ShowEnrollmentSpinnerScreen() { 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowWorking(IDS_ENTERPRISE_ENROLLMENT_WORKING); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void EnrollmentScreenHandler::ShowLoginSpinnerScreen() { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowWorking(IDS_ENTERPRISE_ENROLLMENT_RESUMING_LOGIN); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void EnrollmentScreenHandler::ShowAuthError( 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GoogleServiceAuthError& error) { 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (error.state()) { 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GoogleServiceAuthError::NONE: 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GoogleServiceAuthError::CAPTCHA_REQUIRED: 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GoogleServiceAuthError::TWO_FACTOR: 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GoogleServiceAuthError::HOSTED_NOT_ALLOWED: 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS: 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GoogleServiceAuthError::REQUEST_CANCELED: 240eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case GoogleServiceAuthError::UNEXPECTED_SERVICE_RESPONSE: 241eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch case GoogleServiceAuthError::SERVICE_ERROR: 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowError(IDS_ENTERPRISE_ENROLLMENT_AUTH_FATAL_ERROR, false); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GoogleServiceAuthError::USER_NOT_SIGNED_UP: 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GoogleServiceAuthError::ACCOUNT_DELETED: 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GoogleServiceAuthError::ACCOUNT_DISABLED: 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowError(IDS_ENTERPRISE_ENROLLMENT_AUTH_ACCOUNT_ERROR, true); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GoogleServiceAuthError::CONNECTION_FAILED: 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GoogleServiceAuthError::SERVICE_UNAVAILABLE: 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowError(IDS_ENTERPRISE_ENROLLMENT_AUTH_NETWORK_ERROR, true); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GoogleServiceAuthError::NUM_STATES: 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void EnrollmentScreenHandler::ShowUIError(UIError error) { 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (error) { 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case UI_ERROR_DOMAIN_MISMATCH: 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowError(IDS_ENTERPRISE_ENROLLMENT_STATUS_LOCK_WRONG_USER, true); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case UI_ERROR_AUTO_ENROLLMENT_BAD_MODE: 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowError(IDS_ENTERPRISE_AUTO_ENROLLMENT_BAD_MODE, true); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case UI_ERROR_FATAL: 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowError(IDS_ENTERPRISE_ENROLLMENT_FATAL_ENROLLMENT_ERROR, true); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void EnrollmentScreenHandler::ShowEnrollmentStatus( 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy::EnrollmentStatus status) { 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (status.status()) { 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case policy::EnrollmentStatus::STATUS_SUCCESS: 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowStep(kEnrollmentStepSuccess); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 280010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) case policy::EnrollmentStatus::STATUS_NO_STATE_KEYS: 281010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ShowError(IDS_ENTERPRISE_ENROLLMENT_STATUS_NO_STATE_KEYS, false); 282010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return; 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case policy::EnrollmentStatus::STATUS_REGISTRATION_FAILED: 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Some special cases for generating a nicer message that's more helpful. 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (status.client_status()) { 286effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch case policy::DM_STATUS_SERVICE_MANAGEMENT_NOT_SUPPORTED: 287effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ShowError(IDS_ENTERPRISE_ENROLLMENT_ACCOUNT_ERROR, true); 288effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch break; 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case policy::DM_STATUS_SERVICE_MISSING_LICENSES: 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowError(IDS_ENTERPRISE_ENROLLMENT_MISSING_LICENSES_ERROR, true); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) case policy::DM_STATUS_SERVICE_DEPROVISIONED: 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ShowError(IDS_ENTERPRISE_ENROLLMENT_DEPROVISIONED_ERROR, true); 2945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) break; 295effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch case policy::DM_STATUS_SERVICE_DOMAIN_MISMATCH: 296effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ShowError(IDS_ENTERPRISE_ENROLLMENT_DOMAIN_MISMATCH_ERROR, true); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowErrorMessage( 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringFUTF8( 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_ENTERPRISE_ENROLLMENT_STATUS_REGISTRATION_FAILED, 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy::FormatDeviceManagementStatus(status.client_status())), 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) case policy::EnrollmentStatus::STATUS_ROBOT_AUTH_FETCH_FAILED: 3071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ShowError(IDS_ENTERPRISE_ENROLLMENT_ROBOT_AUTH_FETCH_FAILED, true); 3081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return; 3091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) case policy::EnrollmentStatus::STATUS_ROBOT_REFRESH_FETCH_FAILED: 3101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ShowError(IDS_ENTERPRISE_ENROLLMENT_ROBOT_REFRESH_FETCH_FAILED, true); 3111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return; 3121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) case policy::EnrollmentStatus::STATUS_ROBOT_REFRESH_STORE_FAILED: 3131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ShowError(IDS_ENTERPRISE_ENROLLMENT_ROBOT_REFRESH_STORE_FAILED, true); 3141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case policy::EnrollmentStatus::STATUS_REGISTRATION_BAD_MODE: 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowError(IDS_ENTERPRISE_ENROLLMENT_STATUS_REGISTRATION_BAD_MODE, false); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case policy::EnrollmentStatus::STATUS_POLICY_FETCH_FAILED: 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowErrorMessage( 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringFUTF8( 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_ENTERPRISE_ENROLLMENT_STATUS_POLICY_FETCH_FAILED, 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy::FormatDeviceManagementStatus(status.client_status())), 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case policy::EnrollmentStatus::STATUS_VALIDATION_FAILED: 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowErrorMessage( 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringFUTF8( 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_ENTERPRISE_ENROLLMENT_STATUS_VALIDATION_FAILED, 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy::FormatValidationStatus(status.validation_status())), 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case policy::EnrollmentStatus::STATUS_LOCK_ERROR: 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowError(IDS_ENTERPRISE_ENROLLMENT_STATUS_LOCK_ERROR, false); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case policy::EnrollmentStatus::STATUS_LOCK_TIMEOUT: 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowError(IDS_ENTERPRISE_ENROLLMENT_STATUS_LOCK_TIMEOUT, false); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case policy::EnrollmentStatus::STATUS_LOCK_WRONG_USER: 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowError(IDS_ENTERPRISE_ENROLLMENT_STATUS_LOCK_WRONG_USER, true); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case policy::EnrollmentStatus::STATUS_STORE_ERROR: 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowErrorMessage( 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringFUTF8( 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_ENTERPRISE_ENROLLMENT_STATUS_STORE_ERROR, 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) policy::FormatStoreStatus(status.store_status(), 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) status.validation_status())), 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case policy::EnrollmentStatus::STATUS_STORE_TOKEN_AND_ID_FAILED: 3505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // This error should not happen for enterprise enrollment. 3515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ShowError(IDS_ENTERPRISE_ENROLLMENT_STATUS_STORE_TOKEN_AND_ID_FAILED, 3525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) true); 3535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) NOTREACHED(); 3545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return; 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// EnrollmentScreenHandler BaseScreenHandler implementation ----- 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void EnrollmentScreenHandler::Initialize() { 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (show_on_init_) { 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Show(); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) show_on_init_ = false; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void EnrollmentScreenHandler::DeclareLocalizedValues( 369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LocalizedValuesBuilder* builder) { 370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("oauthEnrollScreenTitle", 371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_ENTERPRISE_ENROLLMENT_SCREEN_TITLE); 372effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch builder->Add("oauthEnrollDescription", IDS_ENTERPRISE_ENROLLMENT_DESCRIPTION); 373effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch builder->Add("oauthEnrollReEnrollmentText", 374effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch IDS_ENTERPRISE_ENROLLMENT_RE_ENROLLMENT_TEXT); 375c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("oauthEnrollRetry", IDS_ENTERPRISE_ENROLLMENT_RETRY); 376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("oauthEnrollCancel", IDS_ENTERPRISE_ENROLLMENT_CANCEL); 377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("oauthEnrollDone", IDS_ENTERPRISE_ENROLLMENT_DONE); 378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("oauthEnrollSuccess", IDS_ENTERPRISE_ENROLLMENT_SUCCESS); 379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("oauthEnrollExplain", IDS_ENTERPRISE_ENROLLMENT_EXPLAIN); 380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("oauthEnrollExplainLink", 381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_ENTERPRISE_ENROLLMENT_EXPLAIN_LINK); 382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("oauthEnrollExplainButton", 383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_ENTERPRISE_ENROLLMENT_EXPLAIN_BUTTON); 384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("oauthEnrollCancelAutoEnrollmentReally", 385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_ENTERPRISE_ENROLLMENT_CANCEL_AUTO_REALLY); 386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("oauthEnrollCancelAutoEnrollmentConfirm", 387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_ENTERPRISE_ENROLLMENT_CANCEL_AUTO_CONFIRM); 388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) builder->Add("oauthEnrollCancelAutoEnrollmentGoBack", 389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IDS_ENTERPRISE_ENROLLMENT_CANCEL_AUTO_GO_BACK); 390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 391c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 392c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void EnrollmentScreenHandler::OnBrowsingDataRemoverDone() { 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browsing_data_remover_->RemoveObserver(this); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browsing_data_remover_ = NULL; 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::vector<base::Closure> callbacks_to_run; 3971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) callbacks_to_run.swap(auth_reset_callbacks_); 3981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) for (std::vector<base::Closure>::iterator callback(callbacks_to_run.begin()); 3991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) callback != callbacks_to_run.end(); ++callback) { 4001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) callback->Run(); 4011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 404116680a4aac90f2aa7413d9095a592090648e557Ben MurdochOobeUI::Screen EnrollmentScreenHandler::GetCurrentScreen() const { 405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch OobeUI::Screen screen = OobeUI::SCREEN_UNKNOWN; 406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch OobeUI* oobe_ui = static_cast<OobeUI*>(web_ui()->GetController()); 407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (oobe_ui) 408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch screen = oobe_ui->current_screen(); 409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return screen; 410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 412116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool EnrollmentScreenHandler::IsOnEnrollmentScreen() const { 413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return (GetCurrentScreen() == OobeUI::SCREEN_OOBE_ENROLLMENT); 414116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 415116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 416116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool EnrollmentScreenHandler::IsEnrollmentScreenHiddenByError() const { 417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return (GetCurrentScreen() == OobeUI::SCREEN_ERROR_MESSAGE && 418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch error_screen_actor_->parent_screen() == 419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch OobeUI::SCREEN_OOBE_ENROLLMENT); 420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// TODO(rsorokin): This function is mostly copied from SigninScreenHandler and 423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// should be refactored in the future. 424116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid EnrollmentScreenHandler::UpdateState( 425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ErrorScreenActor::ErrorReason reason) { 426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!IsOnEnrollmentScreen() && !IsEnrollmentScreenHiddenByError()) 427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; 428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 429116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NetworkStateInformer::State state = network_state_informer_->state(); 430116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string network_path = network_state_informer_->network_path(); 431116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const bool is_online = (state == NetworkStateInformer::ONLINE); 432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const bool is_behind_captive_portal = 433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch (state == NetworkStateInformer::CAPTIVE_PORTAL); 434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const bool is_frame_error = 435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch (frame_error() != net::OK) || 436116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch (reason == ErrorScreenActor::ERROR_REASON_FRAME_ERROR); 437116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 438116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LOG(WARNING) << "EnrollmentScreenHandler::UpdateState(): " 439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch << "state=" << NetworkStateInformer::StatusString(state) << ", " 440116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch << "reason=" << ErrorScreenActor::ErrorReasonString(reason); 441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 442116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (is_online || !is_behind_captive_portal) 443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch error_screen_actor_->HideCaptivePortal(); 444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (is_frame_error) { 446116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LOG(WARNING) << "Retry page load"; 447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // TODO(rsorokin): Too many consecutive reloads. 448116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CallJS("doReload"); 449116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 450116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 451116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!is_online || is_frame_error) 452116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetupAndShowOfflineMessage(state, reason); 453116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch else 454116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch HideOfflineMessage(state, reason); 455116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 456116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 457116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid EnrollmentScreenHandler::SetupAndShowOfflineMessage( 458116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NetworkStateInformer::State state, 459116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ErrorScreenActor::ErrorReason reason) { 460116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string network_path = network_state_informer_->network_path(); 461116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const bool is_behind_captive_portal = IsBehindCaptivePortal(state, reason); 462116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const bool is_proxy_error = IsProxyError(state, reason); 463116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const bool is_frame_error = 464116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch (frame_error() != net::OK) || 465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch (reason == ErrorScreenActor::ERROR_REASON_FRAME_ERROR); 466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (is_proxy_error) { 468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch error_screen_actor_->SetErrorState(ErrorScreen::ERROR_STATE_PROXY, 469116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string()); 470116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } else if (is_behind_captive_portal) { 471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Do not bother a user with obsessive captive portal showing. This 472116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // check makes captive portal being shown only once: either when error 473116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // screen is shown for the first time or when switching from another 474116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // error screen (offline, proxy). 475116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (IsOnEnrollmentScreen() || (error_screen_actor_->error_state() != 476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ErrorScreen::ERROR_STATE_PORTAL)) { 477116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch error_screen_actor_->FixCaptivePortal(); 478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 479116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string network_name = GetNetworkName(network_path); 480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch error_screen_actor_->SetErrorState(ErrorScreen::ERROR_STATE_PORTAL, 481116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch network_name); 482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } else if (is_frame_error) { 483116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch error_screen_actor_->SetErrorState( 484116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ErrorScreen::ERROR_STATE_AUTH_EXT_TIMEOUT, std::string()); 485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } else { 486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch error_screen_actor_->SetErrorState(ErrorScreen::ERROR_STATE_OFFLINE, 487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string()); 488116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (GetCurrentScreen() != OobeUI::SCREEN_ERROR_MESSAGE) { 491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::DictionaryValue params; 492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string network_type = network_state_informer_->network_type(); 493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch params.SetString("lastNetworkType", network_type); 494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch error_screen_actor_->SetUIState(ErrorScreen::UI_STATE_SIGNIN); 495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch error_screen_actor_->Show(OobeUI::SCREEN_OOBE_ENROLLMENT, 496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ¶ms, 497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&EnrollmentScreenHandler::DoShow, 498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch weak_ptr_factory_.GetWeakPtr())); 499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 501116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 502116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid EnrollmentScreenHandler::HideOfflineMessage( 503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NetworkStateInformer::State state, 504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ErrorScreenActor::ErrorReason reason) { 505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (IsEnrollmentScreenHiddenByError()) 506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch error_screen_actor_->Hide(); 507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 508116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 509116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid EnrollmentScreenHandler::OnFrameError( 510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& frame_unique_name) { 511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (frame_unique_name == "oauth-enroll-signin-frame") { 512116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch HandleFrameLoadingCompleted(net::ERR_FAILED); 513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 514116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 515c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// EnrollmentScreenHandler, private ----------------------------- 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void EnrollmentScreenHandler::HandleRetrieveAuthenticatedUserEmail( 5185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) double attempt_token) { 5195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) email_retriever_.reset(new AuthenticatedUserEmailRetriever( 5205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Bind(&EnrollmentScreenHandler::CallJS<double, std::string>, 5215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::Unretained(this), 5225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) "setAuthenticatedUserEmail", 5235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) attempt_token), 5245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Profile::FromWebUI(web_ui())->GetRequestContext())); 5255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 5265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 5271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void EnrollmentScreenHandler::HandleClose(const std::string& reason) { 528116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(controller_); 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (reason == "cancel" || reason == "autocancel") 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller_->OnCancel(); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (reason == "done") 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller_->OnConfirmationClosed(); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 538c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void EnrollmentScreenHandler::HandleCompleteLogin(const std::string& user) { 539116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(controller_); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller_->OnLoginDone(gaia::SanitizeEmail(user)); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 543c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void EnrollmentScreenHandler::HandleRetry() { 544116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(controller_); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) controller_->OnRetry(); 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 548116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid EnrollmentScreenHandler::HandleFrameLoadingCompleted(int status) { 549116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const net::Error frame_error = static_cast<net::Error>(status); 550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch frame_error_ = frame_error; 551116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (network_state_informer_->state() != NetworkStateInformer::ONLINE) 553116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; 554116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (frame_error_) 555116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UpdateState(ErrorScreenActor::ERROR_REASON_FRAME_ERROR); 556116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch else 557116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UpdateState(ErrorScreenActor::ERROR_REASON_UPDATE); 558116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 559116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 560c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void EnrollmentScreenHandler::ShowStep(const char* step) { 561a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CallJS("showStep", std::string(step)); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void EnrollmentScreenHandler::ShowError(int message_id, bool retry) { 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShowErrorMessage(l10n_util::GetStringUTF8(message_id), retry); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void EnrollmentScreenHandler::ShowErrorMessage(const std::string& message, 5691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool retry) { 570a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CallJS("showError", message, retry); 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 573c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void EnrollmentScreenHandler::ShowWorking(int message_id) { 574a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CallJS("showWorking", l10n_util::GetStringUTF16(message_id)); 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 577558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochvoid EnrollmentScreenHandler::OnTokenFetched( 578558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const std::string& token, 579558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const GoogleServiceAuthError& error) { 580558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (!controller_) 581558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 583558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (error.state() != GoogleServiceAuthError::NONE) 584558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch controller_->OnAuthError(error); 585558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch else 586558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch controller_->OnOAuthTokenAvailable(token); 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 589c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void EnrollmentScreenHandler::DoShow() { 5905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue screen_data; 5911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci screen_data.SetString( 5921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "signin_url", 5931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::StringPrintf("%s/main.html", extensions::kGaiaAuthExtensionOrigin)); 59490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) screen_data.SetString("gaiaUrl", GaiaUrls::GetInstance()->gaia_url().spec()); 595effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch screen_data.SetString("enrollment_mode", 596effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch EnrollmentModeToString(enrollment_mode_)); 597effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch screen_data.SetString("management_domain", management_domain_); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShowScreen(OobeUI::kScreenOobeEnrollment, &screen_data); 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 603