1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file. 4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/webui/chromeos/enterprise_enrollment_ui.h" 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/json/json_reader.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/json/json_writer.h" 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/lazy_instance.h" 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted_memory.h" 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/message_loop.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/stringprintf.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/values.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/profiles/profile.h" 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/webui/chrome_url_data_manager.h" 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/common/jstemplate_builder.h" 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/common/url_constants.h" 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/browser/renderer_host/render_view_host.h" 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/browser/tab_contents/tab_contents.h" 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/bindings_policy.h" 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/property_bag.h" 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "grit/browser_resources.h" 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "grit/chromium_strings.h" 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "grit/generated_resources.h" 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "ui/base/l10n/l10n_util.h" 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "ui/base/resource/resource_bundle.h" 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace chromeos { 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstatic base::LazyInstance< 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen PropertyAccessor<EnterpriseEnrollmentUI::Controller*> > 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen g_enrollment_ui_controller_property(base::LINKER_INITIALIZED); 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstatic const char kEnterpriseEnrollmentGaiaLoginPath[] = "gaialogin"; 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// WebUIMessageHandler implementation which handles events occuring on the page, 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// such as the user pressing the signin button. 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass EnterpriseEnrollmentMessageHandler : public WebUIMessageHandler { 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EnterpriseEnrollmentMessageHandler(); 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~EnterpriseEnrollmentMessageHandler(); 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // WebUIMessageHandler implementation. 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void RegisterMessages() OVERRIDE; 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Handlers for WebUI messages. 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void HandleSubmitAuth(const ListValue* args); 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void HandleCancelAuth(const ListValue* args); 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void HandleConfirmationClose(const ListValue* args); 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Gets the currently installed enrollment controller (if any). 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EnterpriseEnrollmentUI::Controller* GetController(); 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(EnterpriseEnrollmentMessageHandler); 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// A data source that provides the resources for the enterprise enrollment page. 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// The enterprise enrollment page requests the HTML and other resources from 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// this source. 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass EnterpriseEnrollmentDataSource : public ChromeURLDataManager::DataSource { 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EnterpriseEnrollmentDataSource(); 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // DataSource implementation. 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void StartDataRequest(const std::string& path, 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool is_off_the_record, 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int request_id) OVERRIDE; 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual std::string GetMimeType(const std::string& path) const OVERRIDE; 70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~EnterpriseEnrollmentDataSource(); 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Saves i18n string for |resource_id| to the |key| property of |dictionary|. 75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static void AddString(DictionaryValue* dictionary, 76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& key, 77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int resource_id); 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static void AddString(DictionaryValue* dictionary, 79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& key, 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int resource_id, 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const string16& arg1); 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(EnterpriseEnrollmentDataSource); 84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenEnterpriseEnrollmentMessageHandler::EnterpriseEnrollmentMessageHandler() {} 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenEnterpriseEnrollmentMessageHandler::~EnterpriseEnrollmentMessageHandler() {} 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid EnterpriseEnrollmentMessageHandler::RegisterMessages() { 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen web_ui_->RegisterMessageCallback( 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "SubmitAuth", 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NewCallback( 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this, &EnterpriseEnrollmentMessageHandler::HandleSubmitAuth)); 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen web_ui_->RegisterMessageCallback( 96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "DialogClose", 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NewCallback( 98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this, &EnterpriseEnrollmentMessageHandler::HandleCancelAuth)); 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen web_ui_->RegisterMessageCallback( 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "confirmationClose", 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NewCallback( 102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen this, &EnterpriseEnrollmentMessageHandler::HandleConfirmationClose)); 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid EnterpriseEnrollmentMessageHandler::HandleSubmitAuth( 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const ListValue* value) { 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EnterpriseEnrollmentUI::Controller* controller = GetController(); 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!controller) { 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NOTREACHED(); 110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Value carries single list entry, which is a json-encoded string that 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // contains the auth parameters (see gaia_login.js). 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string json_params; 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!value->GetString(0, &json_params)) { 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NOTREACHED(); 118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Check the value type. 122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<Value> params(base::JSONReader::Read(json_params, false)); 123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!params.get() || !params->IsType(Value::TYPE_DICTIONARY)) { 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NOTREACHED(); 125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Read the parameters. 129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* params_dict = static_cast<DictionaryValue*>(params.get()); 130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string user; 131ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string pass; 132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string captcha; 133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string access_code; 134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!params_dict->GetString("user", &user) || 135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen !params_dict->GetString("pass", &pass) || 136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen !params_dict->GetString("captcha", &captcha) || 137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen !params_dict->GetString("access_code", &access_code)) { 138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NOTREACHED(); 139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen controller->OnAuthSubmitted(user, pass, captcha, access_code); 143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid EnterpriseEnrollmentMessageHandler::HandleCancelAuth( 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const ListValue* value) { 147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EnterpriseEnrollmentUI::Controller* controller = GetController(); 148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!controller) { 149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NOTREACHED(); 150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen controller->OnAuthCancelled(); 154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid EnterpriseEnrollmentMessageHandler::HandleConfirmationClose( 157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const ListValue* value) { 158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EnterpriseEnrollmentUI::Controller* controller = GetController(); 159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!controller) { 160ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NOTREACHED(); 161ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen controller->OnConfirmationClosed(); 165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenEnterpriseEnrollmentUI::Controller* 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EnterpriseEnrollmentMessageHandler::GetController() { 169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return EnterpriseEnrollmentUI::GetController(web_ui_); 170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenEnterpriseEnrollmentDataSource::EnterpriseEnrollmentDataSource() 173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : DataSource(chrome::kChromeUIEnterpriseEnrollmentHost, 174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen MessageLoop::current()) {} 175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 176ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid EnterpriseEnrollmentDataSource::StartDataRequest(const std::string& path, 177ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool is_off_the_record, 178ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int request_id) { 179ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ResourceBundle& resource_bundle = ResourceBundle::GetSharedInstance(); 180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue strings; 182ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string response; 183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (path.empty()) { 184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "loginHeader", 185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_ENTERPRISE_ENROLLMENT_LOGIN_HEADER), 186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "loginExplain", 187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_ENTERPRISE_ENROLLMENT_LOGIN_EXPLAIN, 188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)); 189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "cloudHeader", 190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_ENTERPRISE_ENROLLMENT_CLOUD_HEADER), 191ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "cloudExplain", 192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_ENTERPRISE_ENROLLMENT_CLOUD_EXPLAIN); 193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "accesscontrolHeader", 194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_ENTERPRISE_ENROLLMENT_ACCESSCONTROL_HEADER), 195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "accesscontrolExplain", 196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_ENTERPRISE_ENROLLMENT_ACCESSCONTROL_EXPLAIN); 197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "confirmationHeader", 198ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_ENTERPRISE_ENROLLMENT_CONFIRMATION_HEADER); 199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "confirmationMessage", 200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_ENTERPRISE_ENROLLMENT_CONFIRMATION_MESSAGE); 201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "confirmationClose", 202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_ENTERPRISE_ENROLLMENT_CONFIRMATION_CLOSE); 203ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static const base::StringPiece html( 205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen resource_bundle.GetRawDataResource(IDR_ENTERPRISE_ENROLLMENT_HTML)); 206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetFontAndTextDirection(&strings); 207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen response = jstemplate_builder::GetI18nTemplateHtml(html, &strings); 208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else if (path == kEnterpriseEnrollmentGaiaLoginPath) { 209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen strings.SetString("invalidpasswordhelpurl", ""); 210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen strings.SetString("invalidaccessaccounturl", ""); 211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen strings.SetString("cannotaccessaccount", ""); 212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen strings.SetString("cannotaccessaccounturl", ""); 213ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen strings.SetString("createaccount", ""); 214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen strings.SetString("createnewaccounturl", ""); 215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen strings.SetString("getaccesscodehelp", ""); 216ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen strings.SetString("getaccesscodeurl", ""); 217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // None of the strings used here currently have sync-specific wording in 219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // them. We have a unit test to catch if that happens. 220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen strings.SetString("introduction", ""); 221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "signinprefix", IDS_SYNC_LOGIN_SIGNIN_PREFIX); 222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "signinsuffix", IDS_SYNC_LOGIN_SIGNIN_SUFFIX); 223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "cannotbeblank", IDS_SYNC_CANNOT_BE_BLANK); 224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "emaillabel", IDS_SYNC_LOGIN_EMAIL); 225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "passwordlabel", IDS_SYNC_LOGIN_PASSWORD); 226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "invalidcredentials", 227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_SYNC_INVALID_USER_CREDENTIALS); 228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "signin", IDS_SYNC_SIGNIN); 229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "couldnotconnect", IDS_SYNC_LOGIN_COULD_NOT_CONNECT); 230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "cancel", IDS_CANCEL); 231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "settingup", IDS_SYNC_LOGIN_SETTING_UP); 232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "success", IDS_SYNC_SUCCESS); 233ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "errorsigningin", IDS_SYNC_ERROR_SIGNING_IN); 234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "captchainstructions", 235ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_SYNC_GAIA_CAPTCHA_INSTRUCTIONS); 236ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "invalidaccesscode", 237ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDS_SYNC_INVALID_ACCESS_CODE_LABEL); 238ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddString(&strings, "enteraccesscode", IDS_SYNC_ENTER_ACCESS_CODE_LABEL); 239ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 240ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static const base::StringPiece html(resource_bundle.GetRawDataResource( 241ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IDR_GAIA_LOGIN_HTML)); 242ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SetFontAndTextDirection(&strings); 243ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen response = jstemplate_builder::GetI18nTemplateHtml(html, &strings); 244ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 245ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 246ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Send the response. 247ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<RefCountedBytes> html_bytes(new RefCountedBytes()); 248ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen html_bytes->data.resize(response.size()); 249ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::copy(response.begin(), response.end(), html_bytes->data.begin()); 250ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SendResponse(request_id, html_bytes); 251ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 252ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 253ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenstd::string EnterpriseEnrollmentDataSource::GetMimeType( 254ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& path) const { 255ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return "text/html"; 256ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 257ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 258ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenEnterpriseEnrollmentDataSource::~EnterpriseEnrollmentDataSource() {} 259ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 260ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid EnterpriseEnrollmentDataSource::AddString(DictionaryValue* dictionary, 261ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& key, 262ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int resource_id) { 263ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen dictionary->SetString(key, l10n_util::GetStringUTF16(resource_id)); 264ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 265ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 266ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid EnterpriseEnrollmentDataSource::AddString(DictionaryValue* dictionary, 267ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& key, 268ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int resource_id, 269ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const string16& arg1) { 270ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen dictionary->SetString(key, l10n_util::GetStringFUTF16(resource_id, arg1)); 271ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 272ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 273ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenEnterpriseEnrollmentUI::EnterpriseEnrollmentUI(TabContents* contents) 274ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen : WebUI(contents) {} 275ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 276ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenEnterpriseEnrollmentUI::~EnterpriseEnrollmentUI() {} 277ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 278ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid EnterpriseEnrollmentUI::RenderViewCreated( 279ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen RenderViewHost* render_view_host) { 280ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Bail out early if the controller doesn't exist or web ui is disabled. 281ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!GetController(this) || !(bindings_ & BindingsPolicy::WEB_UI)) 282ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 283ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 284ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen WebUIMessageHandler* handler = new EnterpriseEnrollmentMessageHandler(); 285ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AddMessageHandler(handler->Attach(this)); 286ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 287ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Set up the data source, so the enrollment page can be loaded. 288ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen tab_contents()->profile()->GetChromeURLDataManager()->AddDataSource( 289ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new EnterpriseEnrollmentDataSource()); 290ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 291ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string user; 292ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool has_init_user = GetController(this)->GetInitialUser(&user); 293ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!has_init_user) 294ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen user = ""; 295ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Set the arguments for showing the gaia login page. 296ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue args; 297ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen args.SetString("user", user); 298ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen args.SetInteger("error", 0); 299ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen args.SetBoolean("editable_user", !has_init_user); 300ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen args.SetString("initialScreen", "login-screen"); 301ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string json_args; 302ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::JSONWriter::Write(&args, false, &json_args); 303ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen render_view_host->SetWebUIProperty("dialogArguments", json_args); 304ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 305ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 306ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// static 307ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenEnterpriseEnrollmentUI::Controller* EnterpriseEnrollmentUI::GetController( 308ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen WebUI* ui) { 309ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Controller** controller = 310ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen g_enrollment_ui_controller_property.Get().GetProperty( 311ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ui->tab_contents()->property_bag()); 312ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 313ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return controller ? *controller : NULL; 314ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 315ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 316ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// static 317ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid EnterpriseEnrollmentUI::SetController( 318ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContents* contents, 319ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EnterpriseEnrollmentUI::Controller* controller) { 320ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen g_enrollment_ui_controller_property.Get().SetProperty( 321ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen contents->property_bag(), 322ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen controller); 323ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 324ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 325ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace chromeos 326