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