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

Unified Diff: chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.cc

Issue 11572061: Create DeclarativeConditionSet, DeclarativeActionSet, and DeclarativeRule templates (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase to Vaclav's CL and fix Dominic's comments Created 8 years 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_webrequest/webrequest_rule.cc
diff --git a/chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.cc b/chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.cc
deleted file mode 100644
index 896a577c779e5c3c5b97133f795b826a796b8a76..0000000000000000000000000000000000000000
--- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.cc
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_rule.h"
-
-#include "base/logging.h"
-#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_action.h"
-#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_condition.h"
-#include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h"
-#include "chrome/browser/extensions/api/web_request/web_request_permissions.h"
-#include "chrome/browser/extensions/extension_info_map.h"
-#include "chrome/common/extensions/extension.h"
-
-namespace {
-const char kInvalidActionDatatype[] = "An action of a rule set had an invalid "
- "structure that should have been caught by the JSON validator.";
-const char kActionCannotBeExecuted[] = "An action can never be executed "
- "because there are is no time in the request life-cycle during which the "
- "conditions can be checked and the action can possibly be executed.";
-} // namespace
-
-namespace extensions {
-
-WebRequestRule::WebRequestRule(
- const GlobalRuleId& id,
- base::Time extension_installation_time,
- scoped_ptr<WebRequestConditionSet> conditions,
- scoped_ptr<WebRequestActionSet> actions,
- Priority priority)
- : id_(id),
- extension_installation_time_(extension_installation_time),
- conditions_(conditions.release()),
- actions_(actions.release()),
- priority_(priority) {
- CHECK(conditions_.get());
- CHECK(actions_.get());
-}
-
-WebRequestRule::~WebRequestRule() {}
-
-// static
-bool WebRequestRule::CheckConsistency(
- WebRequestConditionSet* conditions,
- WebRequestActionSet* actions,
- std::string* error) {
- // Actions and conditions can be checked and executed in specific phases
- // of each web request. We consider a rule inconsistent if there is an action
- // that cannot be triggered by any condition.
- for (WebRequestActionSet::Actions::const_iterator action_iter =
- actions->actions().begin();
- action_iter != actions->actions().end();
- ++action_iter) {
- bool found_matching_condition = false;
- for (WebRequestConditionSet::Conditions::const_iterator condition_iter =
- conditions->conditions().begin();
- condition_iter != conditions->conditions().end() &&
- !found_matching_condition;
- ++condition_iter) {
- // Test the intersection of bit masks, this is intentionally & and not &&.
- if ((*action_iter)->GetStages() & (*condition_iter)->stages())
- found_matching_condition = true;
- }
- if (!found_matching_condition) {
- *error = kActionCannotBeExecuted;
- return false;
- }
- }
- return true;
-}
-
-// static
-scoped_ptr<WebRequestRule> WebRequestRule::Create(
- URLMatcherConditionFactory* url_matcher_condition_factory,
- const std::string& extension_id,
- base::Time extension_installation_time,
- linked_ptr<RulesRegistry::Rule> rule,
- std::string* error) {
- scoped_ptr<WebRequestRule> error_result;
-
- scoped_ptr<WebRequestConditionSet> conditions =
- WebRequestConditionSet::Create(
- url_matcher_condition_factory, rule->conditions, error);
- if (!error->empty())
- return error_result.Pass();
- CHECK(conditions.get());
-
- bool bad_message = false;
- scoped_ptr<WebRequestActionSet> actions =
- WebRequestActionSet::Create(rule->actions, error, &bad_message);
- if (bad_message) {
- // TODO(battre) Export concept of bad_message to caller, the extension
- // should be killed in case it is true.
- *error = kInvalidActionDatatype;
- return error_result.Pass();
- }
- if (!error->empty() || bad_message)
- return error_result.Pass();
- CHECK(actions.get());
-
- if (!CheckConsistency(conditions.get(), actions.get(), error)) {
- DCHECK(!error->empty());
- return error_result.Pass();
- }
-
- CHECK(rule->priority.get());
- int priority = *(rule->priority);
-
- GlobalRuleId rule_id(extension_id, *(rule->id));
- return scoped_ptr<WebRequestRule>(
- new WebRequestRule(rule_id, extension_installation_time,
- conditions.Pass(), actions.Pass(), priority));
-}
-
-std::list<LinkedPtrEventResponseDelta> WebRequestRule::CreateDeltas(
- const ExtensionInfoMap* extension_info_map,
- const RequestData& request_data,
- bool crosses_incognito) const {
- return actions_->CreateDeltas(extension_info_map, extension_id(),
- request_data, crosses_incognito,
- extension_installation_time_);
-}
-
-int WebRequestRule::GetMinimumPriority() const {
- return actions_->GetMinimumPriority();
-}
-
-} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698