Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(628)

Unified Diff: chrome/browser/chromeos/input_method/component_extension_ime_manager_impl.cc

Issue 389913002: Moving IME manifests to chrome resources. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased. Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/input_method/component_extension_ime_manager_impl.cc
diff --git a/chrome/browser/chromeos/input_method/component_extension_ime_manager_impl.cc b/chrome/browser/chromeos/input_method/component_extension_ime_manager_impl.cc
index 35c42bd86b3ea91fff07fb4bd61b058f33a65466..0cfa0c21e4a7b62b018485aad23485f6aef723ea 100644
--- a/chrome/browser/chromeos/input_method/component_extension_ime_manager_impl.cc
+++ b/chrome/browser/chromeos/input_method/component_extension_ime_manager_impl.cc
@@ -4,7 +4,10 @@
#include "chrome/browser/chromeos/input_method/component_extension_ime_manager_impl.h"
+#include <algorithm>
+
#include "base/file_util.h"
+#include "base/json/json_string_value_serializer.h"
#include "base/logging.h"
#include "base/path_service.h"
#include "chrome/browser/extensions/component_loader.h"
@@ -15,13 +18,14 @@
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_file_util.h"
#include "chromeos/ime/extension_ime_util.h"
-#include "content/public/browser/browser_thread.h"
#include "extensions/browser/extension_system.h"
#include "extensions/common/extension.h"
#include "extensions/common/extension_l10n_util.h"
-#include "extensions/common/file_util.h"
#include "extensions/common/manifest_constants.h"
+#include "grit/browser_resources.h"
+#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/resource/resource_bundle.h"
namespace chromeos {
@@ -29,63 +33,201 @@ namespace {
struct WhitelistedComponentExtensionIME {
const char* id;
- const char* path;
+ int manifest_resource_id;
} whitelisted_component_extension[] = {
- {
- // ChromeOS Hangul Input.
- extension_ime_util::kHangulExtensionId,
- "/usr/share/chromeos-assets/input_methods/hangul",
- },
-#if defined(OFFICIAL_BUILD)
- {
- // Official Google XKB Input.
- extension_ime_util::kXkbExtensionId,
- "/usr/share/chromeos-assets/input_methods/google_xkb",
- },
- {
- // Google input tools.
- extension_ime_util::kT13nExtensionId,
- "/usr/share/chromeos-assets/input_methods/input_tools",
- },
-#else
- {
- // Open-sourced ChromeOS xkb extension.
- extension_ime_util::kXkbExtensionId,
- "/usr/share/chromeos-assets/input_methods/xkb",
- },
- {
- // Open-sourced ChromeOS Keyboards extension.
- extension_ime_util::kM17nExtensionId,
- "/usr/share/chromeos-assets/input_methods/keyboard_layouts",
- },
- {
- // Open-sourced Pinyin Chinese Input Method.
- extension_ime_util::kChinesePinyinExtensionId,
- "/usr/share/chromeos-assets/input_methods/pinyin",
- },
- {
- // Open-sourced Zhuyin Chinese Input Method.
- extension_ime_util::kChineseZhuyinExtensionId,
- "/usr/share/chromeos-assets/input_methods/zhuyin",
- },
- {
- // Open-sourced Cangjie Chinese Input Method.
- extension_ime_util::kChineseCangjieExtensionId,
- "/usr/share/chromeos-assets/input_methods/cangjie",
- },
- {
- // Japanese Mozc Input.
- extension_ime_util::kMozcExtensionId,
- "/usr/share/chromeos-assets/input_methods/nacl_mozc",
- },
-#endif
- {
- // Braille hardware keyboard IME that works together with ChromeVox.
- extension_misc::kBrailleImeExtensionId,
- extension_misc::kBrailleImeExtensionPath,
- },
+ {// ChromeOS Hangul Input.
+ extension_ime_util::kHangulExtensionId, IDR_HANGUL_MANIFEST,
+ },
+ {// Official Google XKB Input.
+ extension_ime_util::kXkbExtensionId, IDR_GOOGLE_XKB_MANIFEST,
+ },
+ {// Google input tools.
+ extension_ime_util::kT13nExtensionId, IDR_GOOGLE_INPUT_TOOLS_MANIFEST,
+ },
+ {// Open-sourced ChromeOS xkb extension.
+ extension_ime_util::kXkbExtensionId, IDR_XKB_MANIFEST,
+ },
+ {// Open-sourced ChromeOS Keyboards extension.
+ extension_ime_util::kM17nExtensionId, IDR_M17N_MANIFEST,
+ },
+ {// Open-sourced Pinyin Chinese Input Method.
+ extension_ime_util::kChinesePinyinExtensionId, IDR_PINYIN_MANIFEST,
+ },
+ {// Open-sourced Zhuyin Chinese Input Method.
+ extension_ime_util::kChineseZhuyinExtensionId, IDR_ZHUYIN_MANIFEST,
+ },
+ {// Open-sourced Cangjie Chinese Input Method.
+ extension_ime_util::kChineseCangjieExtensionId, IDR_CANGJIE_MANIFEST,
+ },
+ {// Japanese Mozc Input.
+ extension_ime_util::kMozcExtensionId, IDR_MOZC_MANIFEST,
+ },
+ {// Braille hardware keyboard IME that works together with ChromeVox.
+ extension_misc::kBrailleImeExtensionId, IDR_BRAILLE_MANIFEST,
+ },
+};
+
+const struct InputMethodNameMap {
+ const char* message_name;
+ int resource_id;
+ bool operator()(const InputMethodNameMap& m1,
+ const InputMethodNameMap& m2) const {
Nico 2014/07/22 17:05:08 Is this for lower bound? Shouldn't this be operato
Shu Chen 2014/07/23 00:56:45 Done.
+ return strcmp(m1.message_name, m2.message_name) < 0;
+ }
+} kInputMethodNameMap[] = {
+ {"__MSG_INPUTMETHOD_ARRAY__", IDS_IME_NAME_INPUTMETHOD_ARRAY},
+ {"__MSG_INPUTMETHOD_CANGJIE__", IDS_IME_NAME_INPUTMETHOD_CANGJIE},
+ {"__MSG_INPUTMETHOD_DAYI__", IDS_IME_NAME_INPUTMETHOD_DAYI},
+ {"__MSG_INPUTMETHOD_HANGUL_2_SET__",
+ IDS_IME_NAME_INPUTMETHOD_HANGUL_2_SET},
+ {"__MSG_INPUTMETHOD_HANGUL_3_SET_390__",
+ IDS_IME_NAME_INPUTMETHOD_HANGUL_3_SET_390},
+ {"__MSG_INPUTMETHOD_HANGUL_3_SET_FINAL__",
+ IDS_IME_NAME_INPUTMETHOD_HANGUL_3_SET_FINAL},
+ {"__MSG_INPUTMETHOD_HANGUL_3_SET_NO_SHIFT__",
+ IDS_IME_NAME_INPUTMETHOD_HANGUL_3_SET_NO_SHIFT},
+ {"__MSG_INPUTMETHOD_HANGUL_AHNMATAE__",
+ IDS_IME_NAME_INPUTMETHOD_HANGUL_AHNMATAE},
+ {"__MSG_INPUTMETHOD_HANGUL_ROMAJA__",
+ IDS_IME_NAME_INPUTMETHOD_HANGUL_ROMAJA},
+ {"__MSG_INPUTMETHOD_MOZC_JP__", IDS_IME_NAME_INPUTMETHOD_MOZC_JP},
+ {"__MSG_INPUTMETHOD_MOZC_US__", IDS_IME_NAME_INPUTMETHOD_MOZC_US},
+ {"__MSG_INPUTMETHOD_PINYIN__", IDS_IME_NAME_INPUTMETHOD_PINYIN},
+ {"__MSG_INPUTMETHOD_QUICK__", IDS_IME_NAME_INPUTMETHOD_QUICK},
+ {"__MSG_INPUTMETHOD_TRADITIONAL_PINYIN__",
+ IDS_IME_NAME_INPUTMETHOD_TRADITIONAL_PINYIN},
+ {"__MSG_INPUTMETHOD_WUBI__", IDS_IME_NAME_INPUTMETHOD_WUBI},
+ {"__MSG_INPUTMETHOD_ZHUYIN__", IDS_IME_NAME_INPUTMETHOD_ZHUYIN},
+ {"__MSG_KEYBOARD_ARABIC__", IDS_IME_NAME_KEYBOARD_ARABIC},
+ {"__MSG_KEYBOARD_ARMENIAN_PHONETIC__",
+ IDS_IME_NAME_KEYBOARD_ARMENIAN_PHONETIC},
+ {"__MSG_KEYBOARD_BELARUSIAN__", IDS_IME_NAME_KEYBOARD_BELARUSIAN},
+ {"__MSG_KEYBOARD_BELGIAN__", IDS_IME_NAME_KEYBOARD_BELGIAN},
+ {"__MSG_KEYBOARD_BENGALI_PHONETIC__",
+ IDS_IME_NAME_KEYBOARD_BENGALI_PHONETIC},
+ {"__MSG_KEYBOARD_BRAZILIAN__", IDS_IME_NAME_KEYBOARD_BRAZILIAN},
+ {"__MSG_KEYBOARD_BULGARIAN_PHONETIC__",
+ IDS_IME_NAME_KEYBOARD_BULGARIAN_PHONETIC},
+ {"__MSG_KEYBOARD_BULGARIAN__", IDS_IME_NAME_KEYBOARD_BULGARIAN},
+ {"__MSG_KEYBOARD_CANADIAN_ENGLISH__",
+ IDS_IME_NAME_KEYBOARD_CANADIAN_ENGLISH},
+ {"__MSG_KEYBOARD_CANADIAN_FRENCH__",
+ IDS_IME_NAME_KEYBOARD_CANADIAN_FRENCH},
+ {"__MSG_KEYBOARD_CANADIAN_MULTILINGUAL__",
+ IDS_IME_NAME_KEYBOARD_CANADIAN_MULTILINGUAL},
+ {"__MSG_KEYBOARD_CATALAN__", IDS_IME_NAME_KEYBOARD_CATALAN},
+ {"__MSG_KEYBOARD_CROATIAN__", IDS_IME_NAME_KEYBOARD_CROATIAN},
+ {"__MSG_KEYBOARD_CZECH_QWERTY__", IDS_IME_NAME_KEYBOARD_CZECH_QWERTY},
+ {"__MSG_KEYBOARD_CZECH__", IDS_IME_NAME_KEYBOARD_CZECH},
+ {"__MSG_KEYBOARD_DANISH__", IDS_IME_NAME_KEYBOARD_DANISH},
+ {"__MSG_KEYBOARD_DEVANAGARI_PHONETIC__",
+ IDS_IME_NAME_KEYBOARD_DEVANAGARI_PHONETIC},
+ {"__MSG_KEYBOARD_ESTONIAN__", IDS_IME_NAME_KEYBOARD_ESTONIAN},
+ {"__MSG_KEYBOARD_ETHIOPIC__", IDS_IME_NAME_KEYBOARD_ETHIOPIC},
+ {"__MSG_KEYBOARD_FINNISH__", IDS_IME_NAME_KEYBOARD_FINNISH},
+ {"__MSG_KEYBOARD_FRENCH__", IDS_IME_NAME_KEYBOARD_FRENCH},
+ {"__MSG_KEYBOARD_GEORGIAN__", IDS_IME_NAME_KEYBOARD_GEORGIAN},
+ {"__MSG_KEYBOARD_GERMAN_NEO_2__", IDS_IME_NAME_KEYBOARD_GERMAN_NEO_2},
+ {"__MSG_KEYBOARD_GERMAN__", IDS_IME_NAME_KEYBOARD_GERMAN},
+ {"__MSG_KEYBOARD_GREEK__", IDS_IME_NAME_KEYBOARD_GREEK},
+ {"__MSG_KEYBOARD_GUJARATI_PHONETIC__",
+ IDS_IME_NAME_KEYBOARD_GUJARATI_PHONETIC},
+ {"__MSG_KEYBOARD_HEBREW__", IDS_IME_NAME_KEYBOARD_HEBREW},
+ {"__MSG_KEYBOARD_HUNGARIAN__", IDS_IME_NAME_KEYBOARD_HUNGARIAN},
+ {"__MSG_KEYBOARD_ICELANDIC__", IDS_IME_NAME_KEYBOARD_ICELANDIC},
+ {"__MSG_KEYBOARD_IRISH__", IDS_IME_NAME_KEYBOARD_IRISH},
+ {"__MSG_KEYBOARD_ITALIAN__", IDS_IME_NAME_KEYBOARD_ITALIAN},
+ {"__MSG_KEYBOARD_JAPANESE__", IDS_IME_NAME_KEYBOARD_JAPANESE},
+ {"__MSG_KEYBOARD_KANNADA_PHONETIC__",
+ IDS_IME_NAME_KEYBOARD_KANNADA_PHONETIC},
+ {"__MSG_KEYBOARD_KHMER__", IDS_IME_NAME_KEYBOARD_KHMER},
+ {"__MSG_KEYBOARD_LAO__", IDS_IME_NAME_KEYBOARD_LAO},
+ {"__MSG_KEYBOARD_LATIN_AMERICAN__", IDS_IME_NAME_KEYBOARD_LATIN_AMERICAN},
+ {"__MSG_KEYBOARD_LATVIAN__", IDS_IME_NAME_KEYBOARD_LATVIAN},
+ {"__MSG_KEYBOARD_LITHUANIAN__", IDS_IME_NAME_KEYBOARD_LITHUANIAN},
+ {"__MSG_KEYBOARD_MALAYALAM_PHONETIC__",
+ IDS_IME_NAME_KEYBOARD_MALAYALAM_PHONETIC},
+ {"__MSG_KEYBOARD_MONGOLIAN__", IDS_IME_NAME_KEYBOARD_MONGOLIAN},
+ {"__MSG_KEYBOARD_MYANMAR_MYANSAN__",
+ IDS_IME_NAME_KEYBOARD_MYANMAR_MYANSAN},
+ {"__MSG_KEYBOARD_MYANMAR__", IDS_IME_NAME_KEYBOARD_MYANMAR},
+ {"__MSG_KEYBOARD_NEPALI_INSCRIPT__",
+ IDS_IME_NAME_KEYBOARD_NEPALI_INSCRIPT},
+ {"__MSG_KEYBOARD_NEPALI_PHONETIC__",
+ IDS_IME_NAME_KEYBOARD_NEPALI_PHONETIC},
+ {"__MSG_KEYBOARD_NORWEGIAN__", IDS_IME_NAME_KEYBOARD_NORWEGIAN},
+ {"__MSG_KEYBOARD_PERSIAN__", IDS_IME_NAME_KEYBOARD_PERSIAN},
+ {"__MSG_KEYBOARD_POLISH__", IDS_IME_NAME_KEYBOARD_POLISH},
+ {"__MSG_KEYBOARD_PORTUGUESE__", IDS_IME_NAME_KEYBOARD_PORTUGUESE},
+ {"__MSG_KEYBOARD_ROMANIAN__", IDS_IME_NAME_KEYBOARD_ROMANIAN},
+ {"__MSG_KEYBOARD_RUSSIAN_PHONETIC__",
+ IDS_IME_NAME_KEYBOARD_RUSSIAN_PHONETIC},
+ {"__MSG_KEYBOARD_RUSSIAN__", IDS_IME_NAME_KEYBOARD_RUSSIAN},
+ {"__MSG_KEYBOARD_SERBIAN__", IDS_IME_NAME_KEYBOARD_SERBIAN},
+ {"__MSG_KEYBOARD_SINHALA__", IDS_IME_NAME_KEYBOARD_SINHALA},
+ {"__MSG_KEYBOARD_SLOVAKIAN__", IDS_IME_NAME_KEYBOARD_SLOVAKIAN},
+ {"__MSG_KEYBOARD_SLOVENIAN__", IDS_IME_NAME_KEYBOARD_SLOVENIAN},
+ {"__MSG_KEYBOARD_SORANIKURDISH_AR__",
+ IDS_IME_NAME_KEYBOARD_SORANIKURDISH_AR},
+ {"__MSG_KEYBOARD_SORANIKURDISH_EN__",
+ IDS_IME_NAME_KEYBOARD_SORANIKURDISH_EN},
+ {"__MSG_KEYBOARD_SPANISH__", IDS_IME_NAME_KEYBOARD_SPANISH},
+ {"__MSG_KEYBOARD_SWEDISH__", IDS_IME_NAME_KEYBOARD_SWEDISH},
+ {"__MSG_KEYBOARD_SWISS_FRENCH__", IDS_IME_NAME_KEYBOARD_SWISS_FRENCH},
+ {"__MSG_KEYBOARD_SWISS__", IDS_IME_NAME_KEYBOARD_SWISS},
+ {"__MSG_KEYBOARD_TAMIL_INSCRIPT__", IDS_IME_NAME_KEYBOARD_TAMIL_INSCRIPT},
+ {"__MSG_KEYBOARD_TAMIL_ITRANS__", IDS_IME_NAME_KEYBOARD_TAMIL_ITRANS},
+ {"__MSG_KEYBOARD_TAMIL_PHONETIC__", IDS_IME_NAME_KEYBOARD_TAMIL_PHONETIC},
+ {"__MSG_KEYBOARD_TAMIL_TAMIL99__", IDS_IME_NAME_KEYBOARD_TAMIL_TAMIL99},
+ {"__MSG_KEYBOARD_TAMIL_TYPEWRITER__",
+ IDS_IME_NAME_KEYBOARD_TAMIL_TYPEWRITER},
+ {"__MSG_KEYBOARD_TELUGU_PHONETIC__",
+ IDS_IME_NAME_KEYBOARD_TELUGU_PHONETIC},
+ {"__MSG_KEYBOARD_THAI_KEDMANEE__", IDS_IME_NAME_KEYBOARD_THAI_KEDMANEE},
+ {"__MSG_KEYBOARD_THAI_PATTACHOTE__",
+ IDS_IME_NAME_KEYBOARD_THAI_PATTACHOTE},
+ {"__MSG_KEYBOARD_THAI_TIS__", IDS_IME_NAME_KEYBOARD_THAI_TIS},
+ {"__MSG_KEYBOARD_TURKISH__", IDS_IME_NAME_KEYBOARD_TURKISH},
+ {"__MSG_KEYBOARD_UKRAINIAN__", IDS_IME_NAME_KEYBOARD_UKRAINIAN},
+ {"__MSG_KEYBOARD_UK_DVORAK__", IDS_IME_NAME_KEYBOARD_UK_DVORAK},
+ {"__MSG_KEYBOARD_UK__", IDS_IME_NAME_KEYBOARD_UK},
+ {"__MSG_KEYBOARD_US_COLEMAK__", IDS_IME_NAME_KEYBOARD_US_COLEMAK},
+ {"__MSG_KEYBOARD_US_DVORAK__", IDS_IME_NAME_KEYBOARD_US_DVORAK},
+ {"__MSG_KEYBOARD_US_EXTENDED__", IDS_IME_NAME_KEYBOARD_US_EXTENDED},
+ {"__MSG_KEYBOARD_US_INTERNATIONAL__",
+ IDS_IME_NAME_KEYBOARD_US_INTERNATIONAL},
+ {"__MSG_KEYBOARD_US__", IDS_IME_NAME_KEYBOARD_US},
+ {"__MSG_KEYBOARD_VIETNAMESE_TCVN__",
+ IDS_IME_NAME_KEYBOARD_VIETNAMESE_TCVN},
+ {"__MSG_KEYBOARD_VIETNAMESE_TELEX__",
+ IDS_IME_NAME_KEYBOARD_VIETNAMESE_TELEX},
+ {"__MSG_KEYBOARD_VIETNAMESE_VIQR__",
+ IDS_IME_NAME_KEYBOARD_VIETNAMESE_VIQR},
+ {"__MSG_KEYBOARD_VIETNAMESE_VNI__", IDS_IME_NAME_KEYBOARD_VIETNAMESE_VNI},
+ {"__MSG_TRANSLITERATION_AM__", IDS_IME_NAME_TRANSLITERATION_AM},
+ {"__MSG_TRANSLITERATION_AR__", IDS_IME_NAME_TRANSLITERATION_AR},
+ {"__MSG_TRANSLITERATION_BN__", IDS_IME_NAME_TRANSLITERATION_BN},
+ {"__MSG_TRANSLITERATION_EL__", IDS_IME_NAME_TRANSLITERATION_EL},
+ {"__MSG_TRANSLITERATION_FA__", IDS_IME_NAME_TRANSLITERATION_FA},
+ {"__MSG_TRANSLITERATION_GU__", IDS_IME_NAME_TRANSLITERATION_GU},
+ {"__MSG_TRANSLITERATION_HE__", IDS_IME_NAME_TRANSLITERATION_HE},
+ {"__MSG_TRANSLITERATION_HI__", IDS_IME_NAME_TRANSLITERATION_HI},
+ {"__MSG_TRANSLITERATION_KN__", IDS_IME_NAME_TRANSLITERATION_KN},
+ {"__MSG_TRANSLITERATION_ML__", IDS_IME_NAME_TRANSLITERATION_ML},
+ {"__MSG_TRANSLITERATION_MR__", IDS_IME_NAME_TRANSLITERATION_MR},
+ {"__MSG_TRANSLITERATION_NE__", IDS_IME_NAME_TRANSLITERATION_NE},
+ {"__MSG_TRANSLITERATION_OR__", IDS_IME_NAME_TRANSLITERATION_OR},
+ {"__MSG_TRANSLITERATION_PA__", IDS_IME_NAME_TRANSLITERATION_PA},
+ {"__MSG_TRANSLITERATION_SA__", IDS_IME_NAME_TRANSLITERATION_SA},
+ {"__MSG_TRANSLITERATION_SR__", IDS_IME_NAME_TRANSLITERATION_SR},
+ {"__MSG_TRANSLITERATION_TA__", IDS_IME_NAME_TRANSLITERATION_TA},
+ {"__MSG_TRANSLITERATION_TE__", IDS_IME_NAME_TRANSLITERATION_TE},
+ {"__MSG_TRANSLITERATION_TI__", IDS_IME_NAME_TRANSLITERATION_TI},
+ {"__MSG_TRANSLITERATION_UR__", IDS_IME_NAME_TRANSLITERATION_UR},
};
+const char* kImePathKeyName = "ime_path";
Nico 2014/07/22 17:05:08 Make this `const char kImePathKeyName[]`, else the
Shu Chen 2014/07/23 00:56:45 Done.
+
extensions::ComponentLoader* GetComponentLoader() {
// TODO(skuhne, nkostylev): At this time the only thing which makes sense here
// is to use the active profile. Nkostylev is working on getting IME settings
@@ -100,22 +242,23 @@ extensions::ComponentLoader* GetComponentLoader() {
} // namespace
ComponentExtensionIMEManagerImpl::ComponentExtensionIMEManagerImpl()
- : is_initialized_(false),
- weak_ptr_factory_(this) {
+ : weak_ptr_factory_(this) {
+ ReadComponentExtensionsInfo(&component_extension_list_);
}
ComponentExtensionIMEManagerImpl::~ComponentExtensionIMEManagerImpl() {
}
std::vector<ComponentExtensionIME> ComponentExtensionIMEManagerImpl::ListIME() {
- DCHECK(thread_checker_.CalledOnValidThread());
return component_extension_list_;
}
bool ComponentExtensionIMEManagerImpl::Load(const std::string& extension_id,
const std::string& manifest,
const base::FilePath& file_path) {
- DCHECK(thread_checker_.CalledOnValidThread());
+ if (!base::PathExists(file_path))
+ return false;
+
Profile* profile = ProfileManager::GetActiveUserProfile();
extensions::ExtensionSystem* extension_system =
extensions::ExtensionSystem::Get(profile);
@@ -130,50 +273,21 @@ bool ComponentExtensionIMEManagerImpl::Load(const std::string& extension_id,
void ComponentExtensionIMEManagerImpl::Unload(const std::string& extension_id,
const base::FilePath& file_path) {
- DCHECK(thread_checker_.CalledOnValidThread());
// Remove(extension_id) does nothing when the extension has already been
// removed or not been registered.
GetComponentLoader()->Remove(extension_id);
}
scoped_ptr<base::DictionaryValue> ComponentExtensionIMEManagerImpl::GetManifest(
- const base::FilePath& file_path) {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE));
+ const std::string& manifest_string) {
std::string error;
- scoped_ptr<base::DictionaryValue> manifest(
- extensions::file_util::LoadManifest(file_path, &error));
+ JSONStringValueSerializer serializer(manifest_string);
+ scoped_ptr<base::Value> manifest(serializer.Deserialize(NULL, &error));
if (!manifest.get())
LOG(ERROR) << "Failed at getting manifest";
- if (!extension_l10n_util::LocalizeExtension(file_path,
- manifest.get(),
- &error)) {
- LOG(ERROR) << "Localization failed for: " << file_path.value()
- << " Error: " << error;
- }
- return manifest.Pass();
-}
-
-void ComponentExtensionIMEManagerImpl::InitializeAsync(
- const base::Closure& callback) {
- DCHECK(!is_initialized_);
- DCHECK(thread_checker_.CalledOnValidThread());
-
- std::vector<ComponentExtensionIME>* component_extension_ime_list
- = new std::vector<ComponentExtensionIME>;
- content::BrowserThread::PostTaskAndReply(
- content::BrowserThread::FILE,
- FROM_HERE,
- base::Bind(&ComponentExtensionIMEManagerImpl::ReadComponentExtensionsInfo,
- base::Unretained(component_extension_ime_list)),
- base::Bind(
- &ComponentExtensionIMEManagerImpl::OnReadComponentExtensionsInfo,
- weak_ptr_factory_.GetWeakPtr(),
- base::Owned(component_extension_ime_list),
- callback));
-}
-bool ComponentExtensionIMEManagerImpl::IsInitialized() {
- return is_initialized_;
+ return scoped_ptr<base::DictionaryValue>(
+ static_cast<base::DictionaryValue*>(manifest.release())).Pass();
}
// static
@@ -181,7 +295,6 @@ bool ComponentExtensionIMEManagerImpl::ReadEngineComponent(
const ComponentExtensionIME& component_extension,
const base::DictionaryValue& dict,
ComponentExtensionEngine* out) {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE));
DCHECK(out);
std::string type;
if (!dict.GetString(extensions::manifest_keys::kType, &type))
@@ -193,6 +306,19 @@ bool ComponentExtensionIMEManagerImpl::ReadEngineComponent(
if (!dict.GetString(extensions::manifest_keys::kName, &out->display_name))
return false;
+ // Localizes the input method name.
+ if (out->display_name.find("__MSG_") == 0) {
+ const InputMethodNameMap* map = kInputMethodNameMap;
+ size_t map_size = arraysize(kInputMethodNameMap);
+ std::string name = StringToUpperASCII(out->display_name);
+ const InputMethodNameMap map_key = {name.c_str(), 0};
+ const InputMethodNameMap* p =
+ std::lower_bound(map, map + map_size, map_key, map_key);
+ if (p != map + map_size && !map_key(*p, map_key) && !map_key(map_key, *p))
+ out->display_name = l10n_util::GetStringUTF8(p->resource_id);
+ }
+ DCHECK(out->display_name.find("__MSG_") == std::string::npos);
+
std::set<std::string> languages;
const base::Value* language_value = NULL;
if (dict.Get(extensions::manifest_keys::kLanguage, &language_value)) {
@@ -257,10 +383,12 @@ bool ComponentExtensionIMEManagerImpl::ReadExtensionInfo(
const base::DictionaryValue& manifest,
const std::string& extension_id,
ComponentExtensionIME* out) {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE));
if (!manifest.GetString(extensions::manifest_keys::kDescription,
&out->description))
return false;
+ std::string path;
+ if (manifest.GetString(kImePathKeyName, &path))
+ out->path = base::FilePath(path);
std::string url_string;
if (manifest.GetString(extensions::manifest_keys::kOptionsPage,
&url_string)) {
@@ -278,31 +406,19 @@ bool ComponentExtensionIMEManagerImpl::ReadExtensionInfo(
// static
void ComponentExtensionIMEManagerImpl::ReadComponentExtensionsInfo(
std::vector<ComponentExtensionIME>* out_imes) {
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::FILE));
DCHECK(out_imes);
for (size_t i = 0; i < arraysize(whitelisted_component_extension); ++i) {
ComponentExtensionIME component_ime;
- component_ime.path = base::FilePath(
- whitelisted_component_extension[i].path);
-
- if (!component_ime.path.IsAbsolute()) {
- base::FilePath resources_path;
- if (!PathService::Get(chrome::DIR_RESOURCES, &resources_path))
- NOTREACHED();
- component_ime.path = resources_path.Append(component_ime.path);
- }
- const base::FilePath manifest_path =
- component_ime.path.Append("manifest.json");
-
- if (!base::PathExists(component_ime.path) ||
- !base::PathExists(manifest_path))
- continue;
-
- if (!base::ReadFileToString(manifest_path, &component_ime.manifest))
+ ResourceBundle& rb = ResourceBundle::GetSharedInstance();
+ component_ime.manifest =
+ rb.GetRawDataResource(
+ whitelisted_component_extension[i].manifest_resource_id)
+ .as_string();
+ if (component_ime.manifest.empty())
continue;
scoped_ptr<base::DictionaryValue> manifest =
- GetManifest(component_ime.path);
+ GetManifest(component_ime.manifest);
if (!manifest.get())
continue;
@@ -312,6 +428,13 @@ void ComponentExtensionIMEManagerImpl::ReadComponentExtensionsInfo(
continue;
component_ime.id = whitelisted_component_extension[i].id;
+ if (!component_ime.path.IsAbsolute()) {
+ base::FilePath resources_path;
+ if (!PathService::Get(chrome::DIR_RESOURCES, &resources_path))
+ NOTREACHED();
+ component_ime.path = resources_path.Append(component_ime.path);
+ }
+
const base::ListValue* component_list;
if (!manifest->GetList(extensions::manifest_keys::kInputComponents,
&component_list))
@@ -330,14 +453,4 @@ void ComponentExtensionIMEManagerImpl::ReadComponentExtensionsInfo(
}
}
-void ComponentExtensionIMEManagerImpl::OnReadComponentExtensionsInfo(
- std::vector<ComponentExtensionIME>* result,
- const base::Closure& callback) {
- DCHECK(thread_checker_.CalledOnValidThread());
- DCHECK(result);
- component_extension_list_ = *result;
- is_initialized_ = true;
- callback.Run();
-}
-
} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698