| Index: chrome/browser/automation/automation_provider_json.cc
|
| diff --git a/chrome/browser/automation/automation_provider_json.cc b/chrome/browser/automation/automation_provider_json.cc
|
| index 9cc328ea9e3886fba9c64116b15274b773ba3740..27c8474a3072690a4d459f7c77b4d16e31392728 100644
|
| --- a/chrome/browser/automation/automation_provider_json.cc
|
| +++ b/chrome/browser/automation/automation_provider_json.cc
|
| @@ -10,6 +10,8 @@
|
| #include "chrome/browser/autocomplete/autocomplete_match.h"
|
| #include "chrome/browser/automation/automation_provider.h"
|
| #include "chrome/browser/automation/automation_util.h"
|
| +#include "chrome/browser/extensions/extension_service.h"
|
| +#include "chrome/browser/profiles/profile.h"
|
| #include "chrome/common/automation_id.h"
|
| #include "chrome/common/automation_messages.h"
|
| #include "content/browser/tab_contents/tab_contents.h"
|
| @@ -135,12 +137,12 @@ bool GetBrowserAndTabFromJSONArgs(
|
|
|
| bool GetAutomationIdFromJSONArgs(
|
| DictionaryValue* args,
|
| - const std::string& key_name,
|
| + const std::string& key,
|
| AutomationId* id,
|
| std::string* error) {
|
| Value* id_value;
|
| - if (!args->Get(key_name, &id_value)) {
|
| - *error = base::StringPrintf("Missing parameter '%s'", key_name.c_str());
|
| + if (!args->Get(key, &id_value)) {
|
| + *error = base::StringPrintf("Missing parameter '%s'", key.c_str());
|
| return false;
|
| }
|
| return AutomationId::FromValue(id_value, id, error);
|
| @@ -169,3 +171,61 @@ bool GetRenderViewFromJSONArgs(
|
| }
|
| return true;
|
| }
|
| +
|
| +namespace {
|
| +
|
| +bool GetExtensionFromJSONArgsHelper(
|
| + base::DictionaryValue* args,
|
| + const std::string& key,
|
| + Profile* profile,
|
| + bool include_disabled,
|
| + const Extension** extension,
|
| + std::string* error) {
|
| + std::string id;
|
| + if (!args->GetString(key, &id)) {
|
| + *error = base::StringPrintf("Missing or invalid key: %s", key.c_str());
|
| + return false;
|
| + }
|
| + ExtensionService* service = profile->GetExtensionService();
|
| + if (!service) {
|
| + *error = "No extensions service.";
|
| + return false;
|
| + }
|
| + if (!service->GetInstalledExtension(id)) {
|
| + // The extension ID does not correspond to any extension, whether crashed
|
| + // or not.
|
| + *error = base::StringPrintf("Extension %s is not installed.",
|
| + id.c_str());
|
| + return false;
|
| + }
|
| + const Extension* installed_extension =
|
| + service->GetExtensionById(id, include_disabled);
|
| + if (!installed_extension) {
|
| + *error = "Extension is disabled or has crashed.";
|
| + return false;
|
| + }
|
| + *extension = installed_extension;
|
| + return true;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +bool GetExtensionFromJSONArgs(
|
| + base::DictionaryValue* args,
|
| + const std::string& key,
|
| + Profile* profile,
|
| + const Extension** extension,
|
| + std::string* error) {
|
| + return GetExtensionFromJSONArgsHelper(
|
| + args, key, profile, true /* include_disabled */, extension, error);
|
| +}
|
| +
|
| +bool GetEnabledExtensionFromJSONArgs(
|
| + base::DictionaryValue* args,
|
| + const std::string& key,
|
| + Profile* profile,
|
| + const Extension** extension,
|
| + std::string* error) {
|
| + return GetExtensionFromJSONArgsHelper(
|
| + args, key, profile, false /* include_disabled */, extension, error);
|
| +}
|
|
|