OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/common/extensions/api/input_ime/input_components_handler.h" | 5 #include "chrome/common/extensions/api/input_ime/input_components_handler.h" |
6 | 6 |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 for (size_t i = 0; i < list_value->GetSize(); ++i) { | 57 for (size_t i = 0; i < list_value->GetSize(); ++i) { |
58 const base::DictionaryValue* module_value = NULL; | 58 const base::DictionaryValue* module_value = NULL; |
59 std::string name_str; | 59 std::string name_str; |
60 InputComponentType type; | 60 InputComponentType type; |
61 std::string id_str; | 61 std::string id_str; |
62 std::string description_str; | 62 std::string description_str; |
63 std::set<std::string> languages; | 63 std::set<std::string> languages; |
64 std::set<std::string> layouts; | 64 std::set<std::string> layouts; |
65 std::string shortcut_keycode_str; | 65 std::string shortcut_keycode_str; |
66 GURL input_view_url; | 66 GURL input_view_url; |
| 67 GURL options_page_url; |
67 bool shortcut_alt = false; | 68 bool shortcut_alt = false; |
68 bool shortcut_ctrl = false; | 69 bool shortcut_ctrl = false; |
69 bool shortcut_shift = false; | 70 bool shortcut_shift = false; |
70 | 71 |
71 if (!list_value->GetDictionary(i, &module_value)) { | 72 if (!list_value->GetDictionary(i, &module_value)) { |
72 *error = base::ASCIIToUTF16(errors::kInvalidInputComponents); | 73 *error = base::ASCIIToUTF16(errors::kInvalidInputComponents); |
73 return false; | 74 return false; |
74 } | 75 } |
75 | 76 |
76 // Get input_components[i].name. | 77 // Get input_components[i].name. |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 if (module_value->GetString(keys::kInputView, &input_view_str)) { | 188 if (module_value->GetString(keys::kInputView, &input_view_str)) { |
188 input_view_url = extension->GetResourceURL(input_view_str); | 189 input_view_url = extension->GetResourceURL(input_view_str); |
189 if (!input_view_url.is_valid()) { | 190 if (!input_view_url.is_valid()) { |
190 *error = ErrorUtils::FormatErrorMessageUTF16( | 191 *error = ErrorUtils::FormatErrorMessageUTF16( |
191 errors::kInvalidInputView, | 192 errors::kInvalidInputView, |
192 base::IntToString(i)); | 193 base::IntToString(i)); |
193 return false; | 194 return false; |
194 } | 195 } |
195 } | 196 } |
196 | 197 |
| 198 // Get input_components[i].options_page_url. |
| 199 // Note: 'options_page' is optional in manifest. |
| 200 std::string options_page_str; |
| 201 if (module_value->GetString(keys::kImeOptionsPage, &options_page_str)) { |
| 202 options_page_url = extension->GetResourceURL(options_page_str); |
| 203 if (!options_page_url.is_valid()) { |
| 204 *error = ErrorUtils::FormatErrorMessageUTF16( |
| 205 errors::kInvalidOptionsPage, |
| 206 base::IntToString(i)); |
| 207 return false; |
| 208 } |
| 209 } else { |
| 210 // Fall back to extension's options page for backward compatibility. |
| 211 options_page_url = extensions::ManifestURL::GetOptionsPage(extension); |
| 212 } |
| 213 |
197 info->input_components.push_back(InputComponentInfo()); | 214 info->input_components.push_back(InputComponentInfo()); |
198 info->input_components.back().name = name_str; | 215 info->input_components.back().name = name_str; |
199 info->input_components.back().type = type; | 216 info->input_components.back().type = type; |
200 info->input_components.back().id = id_str; | 217 info->input_components.back().id = id_str; |
201 info->input_components.back().description = description_str; | 218 info->input_components.back().description = description_str; |
202 info->input_components.back().languages = languages; | 219 info->input_components.back().languages = languages; |
203 info->input_components.back().layouts.insert(layouts.begin(), | 220 info->input_components.back().layouts.insert(layouts.begin(), |
204 layouts.end()); | 221 layouts.end()); |
205 info->input_components.back().shortcut_keycode = shortcut_keycode_str; | 222 info->input_components.back().shortcut_keycode = shortcut_keycode_str; |
206 info->input_components.back().shortcut_alt = shortcut_alt; | 223 info->input_components.back().shortcut_alt = shortcut_alt; |
207 info->input_components.back().shortcut_ctrl = shortcut_ctrl; | 224 info->input_components.back().shortcut_ctrl = shortcut_ctrl; |
208 info->input_components.back().shortcut_shift = shortcut_shift; | 225 info->input_components.back().shortcut_shift = shortcut_shift; |
209 info->input_components.back().options_page_url = | 226 info->input_components.back().options_page_url = options_page_url; |
210 extensions::ManifestURL::GetOptionsPage(extension); | |
211 info->input_components.back().input_view_url = input_view_url; | 227 info->input_components.back().input_view_url = input_view_url; |
212 } | 228 } |
213 extension->SetManifestData(keys::kInputComponents, info.release()); | 229 extension->SetManifestData(keys::kInputComponents, info.release()); |
214 return true; | 230 return true; |
215 } | 231 } |
216 | 232 |
217 const std::vector<std::string> | 233 const std::vector<std::string> |
218 InputComponentsHandler::PrerequisiteKeys() const { | 234 InputComponentsHandler::PrerequisiteKeys() const { |
219 return SingleKey(keys::kOptionsPage); | 235 return SingleKey(keys::kOptionsPage); |
220 } | 236 } |
221 | 237 |
222 const std::vector<std::string> InputComponentsHandler::Keys() const { | 238 const std::vector<std::string> InputComponentsHandler::Keys() const { |
223 return SingleKey(keys::kInputComponents); | 239 return SingleKey(keys::kInputComponents); |
224 } | 240 } |
225 | 241 |
226 } // namespace extensions | 242 } // namespace extensions |
OLD | NEW |