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

Unified Diff: chrome/browser/extensions/api/declarative/declarative_api.cc

Issue 9315010: RulesRegistry for declarative APIs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 11 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/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;
}

Powered by Google App Engine
This is Rietveld 408576698