| Index: chrome/browser/extensions/api/declarative/declarative_api.cc
|
| diff --git a/chrome/browser/extensions/api/declarative/declarative_api.cc b/chrome/browser/extensions/api/declarative/declarative_api.cc
|
| index ca5fd83edad85faed77c6683dbe86fb7dd9f2d59..e838f353462df6ead7866315d2dcff13cbdbb42b 100644
|
| --- a/chrome/browser/extensions/api/declarative/declarative_api.cc
|
| +++ b/chrome/browser/extensions/api/declarative/declarative_api.cc
|
| @@ -4,12 +4,41 @@
|
|
|
| #include "chrome/browser/extensions/api/declarative/declarative_api.h"
|
|
|
| +#include "base/bind.h"
|
| #include "base/values.h"
|
| +#include "chrome/browser/extensions/api/declarative/rules_registry.h"
|
| +#include "chrome/browser/extensions/api/declarative/rules_registry_service.h"
|
| +#include "chrome/browser/extensions/api/declarative/rules_registry_service_factory.h"
|
|
|
| namespace extensions {
|
|
|
| bool AddRulesFunction::RunImpl() {
|
| - // LOG(ERROR) << "AddRulesFunction called";
|
| + // The name of the event object which had the addRules() function that was
|
| + // called.
|
| + std::string event_name;
|
| + EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &event_name));
|
| +
|
| + ListValue* rules_list;
|
| + EXTENSION_FUNCTION_VALIDATE(args_->GetList(1, &rules_list));
|
| +
|
| + std::vector<DictionaryValue*> rules;
|
| + for (ListValue::iterator i = rules_list->begin();
|
| + i != rules_list->end();
|
| + ++i) {
|
| + DictionaryValue* rule;
|
| + EXTENSION_FUNCTION_VALIDATE((*i)->GetAsDictionary(&rule));
|
| + rules.push_back(rule);
|
| + }
|
| +
|
| + RulesRegistryService* rules_registry =
|
| + RulesRegistryServiceFactory::GetInstance()->GetForProfile(profile_);
|
| +
|
| + EXTENSION_FUNCTION_VALIDATE(
|
| + rules_registry->AddRules(
|
| + event_name,
|
| + extension_id(),
|
| + rules,
|
| + base::Bind(&AddRulesFunction::SetError, this)));
|
|
|
| // We always return an empty list here. The binding of return values
|
| // is handled in JavaScript by event.js.
|
| @@ -18,13 +47,64 @@ bool AddRulesFunction::RunImpl() {
|
| }
|
|
|
| bool RemoveRulesFunction::RunImpl() {
|
| - // LOG(ERROR) << "RemoveRulesFunction called";
|
| + std::string event_name;
|
| + EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &event_name));
|
| +
|
| + ListValue* rule_identifiers_list;
|
| + EXTENSION_FUNCTION_VALIDATE(args_->GetList(1, &rule_identifiers_list));
|
| +
|
| + std::vector<std::string> rule_identifiers;
|
| + for (ListValue::iterator i = rule_identifiers_list->begin();
|
| + i != rule_identifiers_list->end();
|
| + ++i) {
|
| + std::string rule_id;
|
| + EXTENSION_FUNCTION_VALIDATE((*i)->GetAsString(&rule_id));
|
| + rule_identifiers.push_back(rule_id);
|
| + }
|
| +
|
| + RulesRegistryService* rules_registry =
|
| + RulesRegistryServiceFactory::GetInstance()->GetForProfile(profile_);
|
| +
|
| + EXTENSION_FUNCTION_VALIDATE(
|
| + rules_registry->RemoveRules(
|
| + event_name,
|
| + extension_id(),
|
| + rule_identifiers,
|
| + base::Bind(&AddRulesFunction::SetError, this)));
|
| +
|
| return true;
|
| }
|
|
|
| bool GetRulesFunction::RunImpl() {
|
| - // LOG(ERROR) << "GetRulesFunction called";
|
| - result_.reset(new ListValue());
|
| + std::string event_name;
|
| + EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &event_name));
|
| +
|
| + ListValue* rule_identifiers_list;
|
| + EXTENSION_FUNCTION_VALIDATE(args_->GetList(1, &rule_identifiers_list));
|
| +
|
| + std::vector<std::string> rule_identifiers;
|
| + for (ListValue::iterator i = rule_identifiers_list->begin();
|
| + i != rule_identifiers_list->end();
|
| + ++i) {
|
| + std::string rule_id;
|
| + EXTENSION_FUNCTION_VALIDATE((*i)->GetAsString(&rule_id));
|
| + rule_identifiers.push_back(rule_id);
|
| + }
|
| +
|
| + RulesRegistryService* rules_registry =
|
| + RulesRegistryServiceFactory::GetInstance()->GetForProfile(profile_);
|
| +
|
| + typedef std::vector<DictionaryValue*> RulesList;
|
| +
|
| + RulesList rules;
|
| + rules_registry->GetRules(
|
| + event_name, extension_id(), rule_identifiers, &rules);
|
| +
|
| + scoped_ptr<ListValue> result(new ListValue);
|
| + for (RulesList::iterator i = rules.begin(); i != rules.end(); ++i)
|
| + result->Append(*i);
|
| +
|
| + result_.reset(result.release());
|
| return true;
|
| }
|
|
|
|
|