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

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

Issue 495593004: Check the IME component extension's availability on linux_chromeos, so that system fallback VK can … (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nits. Created 6 years, 4 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 876e2682ffdd1026c583ac111e43d856db12830c..418be9fe2906a1133b52713d557dadd4c40388c1 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
@@ -22,9 +22,11 @@
#include "chrome/grit/browser_resources.h"
#include "chrome/grit/generated_resources.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 "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
@@ -238,10 +240,39 @@ extensions::ComponentLoader* GetComponentLoader(Profile* profile) {
ExtensionService* extension_service = extension_system->extension_service();
return extension_service->component_loader();
}
+
+void DoLoadExtension(Profile* profile,
+ const std::string& extension_id,
+ const std::string& manifest,
+ const base::FilePath& file_path) {
+ extensions::ExtensionSystem* extension_system =
+ extensions::ExtensionSystem::Get(profile);
+ ExtensionService* extension_service = extension_system->extension_service();
+ if (extension_service->GetExtensionById(extension_id, false))
+ return;
+ const std::string loaded_extension_id =
+ GetComponentLoader(profile)->Add(manifest, file_path);
+ DCHECK_EQ(loaded_extension_id, extension_id);
+}
+
+bool CheckFilePath(const base::FilePath* file_path) {
+ return base::PathExists(*file_path);
+}
+
+void OnFilePathChecked(Profile* profile,
+ const std::string* extension_id,
+ const std::string* manifest,
+ const base::FilePath* file_path,
+ bool result) {
+ if (result)
+ DoLoadExtension(profile, *extension_id, *manifest, *file_path);
+ else
+ LOG(ERROR) << "IME extension file path not exists: " << file_path->value();
+}
+
} // namespace
-ComponentExtensionIMEManagerImpl::ComponentExtensionIMEManagerImpl()
- : weak_ptr_factory_(this) {
+ComponentExtensionIMEManagerImpl::ComponentExtensionIMEManagerImpl() {
ReadComponentExtensionsInfo(&component_extension_list_);
}
@@ -252,19 +283,31 @@ std::vector<ComponentExtensionIME> ComponentExtensionIMEManagerImpl::ListIME() {
return component_extension_list_;
}
-bool ComponentExtensionIMEManagerImpl::Load(Profile* profile,
+void ComponentExtensionIMEManagerImpl::Load(Profile* profile,
const std::string& extension_id,
const std::string& manifest,
const base::FilePath& file_path) {
- extensions::ExtensionSystem* extension_system =
- extensions::ExtensionSystem::Get(profile);
- ExtensionService* extension_service = extension_system->extension_service();
- if (extension_service->GetExtensionById(extension_id, false))
- return false;
- const std::string loaded_extension_id =
- GetComponentLoader(profile)->Add(manifest, file_path);
- DCHECK_EQ(loaded_extension_id, extension_id);
- return true;
+ if (base::SysInfo::IsRunningOnChromeOS()) {
+ // In the case of real Chrome OS device, the no need to check the file path
+ // for preinstalled files existence.
+ DoLoadExtension(profile, extension_id, manifest, file_path);
+ return;
+ }
+ // If current environment is linux_chromeos, check the existence of file path
+ // to avoid unnecessary extension loading and InputMethodEngine creation, so
+ // that the virtual keyboard web content url won't be override by IME
+ // component extensions.
+ base::FilePath* copied_file_path = new base::FilePath(file_path);
+ content::BrowserThread::PostTaskAndReplyWithResult(
+ content::BrowserThread::FILE,
+ FROM_HERE,
+ base::Bind(&CheckFilePath,
+ base::Unretained(copied_file_path)),
+ base::Bind(&OnFilePathChecked,
+ base::Unretained(profile),
+ base::Owned(new std::string(extension_id)),
+ base::Owned(new std::string(manifest)),
+ base::Owned(copied_file_path)));
}
void ComponentExtensionIMEManagerImpl::Unload(Profile* profile,

Powered by Google App Engine
This is Rietveld 408576698