| 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 e3806675770561476bd146bfdff8f2956178916f..956dd5f289ea38d6acb75ade469a46265d26aed2 100644
|
| --- a/chrome/browser/extensions/api/declarative/declarative_api.cc
|
| +++ b/chrome/browser/extensions/api/declarative/declarative_api.cc
|
| @@ -5,29 +5,95 @@
|
| #include "chrome/browser/extensions/api/declarative/declarative_api.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/extension_service.h"
|
| +#include "chrome/browser/profiles/profile.h"
|
|
|
| namespace extensions {
|
|
|
| bool AddRulesFunction::RunImpl() {
|
| - // LOG(ERROR) << "AddRulesFunction called";
|
| + std::string event_name;
|
| + EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &event_name));
|
|
|
| ListValue* rules_list = NULL;
|
| EXTENSION_FUNCTION_VALIDATE(args_->GetList(1, &rules_list));
|
|
|
| - // TODO(battre): Generate unique IDs and priorities here.
|
| + 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 =
|
| + profile()->GetExtensionService()->GetRulesRegistryService();
|
| +
|
| + if (!rules_registry->AddRules(event_name, extension_id(), rules, &error_))
|
| + return false;
|
|
|
| result_.reset(rules_list->DeepCopy());
|
| return true;
|
| }
|
|
|
| bool RemoveRulesFunction::RunImpl() {
|
| - // LOG(ERROR) << "RemoveRulesFunction called";
|
| + std::string event_name;
|
| + EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &event_name));
|
| +
|
| + ListValue* rule_identifiers_list = NULL;
|
| + 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 =
|
| + profile()->GetExtensionService()->GetRulesRegistryService();
|
| +
|
| + if (!rules_registry->RemoveRules(event_name, extension_id(), rule_identifiers,
|
| + &error_))
|
| + return false;
|
| +
|
| 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 = NULL;
|
| + 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 =
|
| + profile()->GetExtensionService()->GetRulesRegistryService();
|
| +
|
| + 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;
|
| }
|
|
|
|
|