base_screen_handler.cc revision cedac228d2dd51db4b79ea1e72c7f249408ee061
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) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/logging.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_ui.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)LocalizedValuesBuilder::LocalizedValuesBuilder(base::DictionaryValue* dict) 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : dict_(dict) { 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void LocalizedValuesBuilder::Add(const std::string& key, 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const std::string& message) { 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dict_->SetString(key, message); 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void LocalizedValuesBuilder::Add(const std::string& key, 25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& message) { 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) dict_->SetString(key, message); 27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} 28868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void LocalizedValuesBuilder::Add(const std::string& key, int message_id) { 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dict_->SetString(key, 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) l10n_util::GetStringUTF16(message_id)); 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void LocalizedValuesBuilder::AddF(const std::string& key, 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int message_id, 36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& a) { 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dict_->SetString(key, 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) l10n_util::GetStringFUTF16(message_id, a)); 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void LocalizedValuesBuilder::AddF(const std::string& key, 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int message_id, 43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& a, 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& b) { 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dict_->SetString(key, 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) l10n_util::GetStringFUTF16(message_id, a, b)); 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void LocalizedValuesBuilder::AddF(const std::string& key, 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int message_id, 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int message_id_a) { 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddF(key, message_id, l10n_util::GetStringUTF16(message_id_a)); 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void LocalizedValuesBuilder::AddF(const std::string& key, 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int message_id, 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int message_id_a, 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int message_id_b) { 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddF(key, message_id, 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) l10n_util::GetStringUTF16(message_id_a), 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) l10n_util::GetStringUTF16(message_id_b)); 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 64a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)BaseScreenHandler::BaseScreenHandler() 65a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) : page_is_ready_(false) { 66a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 67a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 68a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)BaseScreenHandler::BaseScreenHandler(const std::string& js_screen_path) 69a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) : page_is_ready_(false), 70a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) js_screen_path_prefix_(js_screen_path + ".") { 71a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) CHECK(!js_screen_path.empty()); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BaseScreenHandler::~BaseScreenHandler() { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BaseScreenHandler::InitializeBase() { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) page_is_ready_ = true; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Initialize(); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void BaseScreenHandler::GetLocalizedStrings(base::DictionaryValue* dict) { 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<LocalizedValuesBuilder> builder(new LocalizedValuesBuilder(dict)); 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DeclareLocalizedValues(builder.get()); 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetAdditionalParameters(dict); 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void BaseScreenHandler::GetAdditionalParameters(base::DictionaryValue* dict) { 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void BaseScreenHandler::CallJS(const std::string& method) { 92a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) web_ui()->CallJavascriptFunction(FullMethodPath(method)); 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BaseScreenHandler::ShowScreen(const char* screen_name, 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::DictionaryValue* data) { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!web_ui()) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::DictionaryValue screen_params; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) screen_params.SetString("id", screen_name); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (data) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) screen_params.SetWithoutPathExpansion("data", data->DeepCopy()); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->CallJavascriptFunction("cr.ui.Oobe.showScreen", screen_params); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::NativeWindow BaseScreenHandler::GetNativeWindow() { 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return LoginDisplayHostImpl::default_host()->GetNativeWindow(); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 110a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)std::string BaseScreenHandler::FullMethodPath(const std::string& method) const { 111a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) DCHECK(!method.empty()); 112a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return js_screen_path_prefix_ + method; 113a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 114a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 116