summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/extensions/api/declarative_webrequest/webrequest_action.h')
-rw-r--r--chrome/browser/extensions/api/declarative_webrequest/webrequest_action.h64
1 files changed, 45 insertions, 19 deletions
diff --git a/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.h b/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.h
index 1745e9a..1c7fdda 100644
--- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.h
+++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.h
@@ -11,6 +11,7 @@
#include "base/compiler_specific.h"
#include "base/memory/linked_ptr.h"
+#include "base/memory/ref_counted.h"
#include "chrome/browser/extensions/api/declarative/declarative_rule.h"
#include "chrome/browser/extensions/api/declarative_webrequest/request_stage.h"
#include "chrome/browser/extensions/api/web_request/web_request_api_helpers.h"
@@ -49,7 +50,7 @@ typedef linked_ptr<extension_web_request_api_helpers::EventResponseDelta>
LinkedPtrEventResponseDelta;
// Base class for all WebRequestActions of the declarative Web Request API.
-class WebRequestAction {
+class WebRequestAction : public base::RefCounted<WebRequestAction> {
public:
// Type identifiers for concrete WebRequestActions. If you add a new type,
// also update |action_names| in WebRequestActionFactory, update the
@@ -91,8 +92,6 @@ class WebRequestAction {
std::set<std::string>* ignored_tags;
};
- virtual ~WebRequestAction();
-
int stages() const {
return stages_;
}
@@ -101,6 +100,10 @@ class WebRequestAction {
return type_;
}
+ // Compares the Type of two WebRequestActions, needs to be overridden for
+ // parameterized types.
+ virtual bool Equals(const WebRequestAction* other) const;
+
// Return the JavaScript type name corresponding to type(). If there are
// more names, they are returned separated by a colon.
const std::string& GetName() const;
@@ -131,9 +134,10 @@ class WebRequestAction {
// Sets |error| and returns NULL in case of a semantic error that cannot
// be caught by schema validation. Sets |bad_message| and returns NULL
// in case the input is syntactically unexpected.
- static scoped_ptr<WebRequestAction> Create(const base::Value& json_action,
- std::string* error,
- bool* bad_message);
+ static scoped_refptr<const WebRequestAction> Create(
+ const base::Value& json_action,
+ std::string* error,
+ bool* bad_message);
// Returns a description of the modification to the request caused by
// this action.
@@ -149,6 +153,8 @@ class WebRequestAction {
ApplyInfo* apply_info) const;
protected:
+ friend class base::RefCounted<WebRequestAction>;
+ virtual ~WebRequestAction();
WebRequestAction(int stages,
Type type,
int minimum_priority,
@@ -179,7 +185,6 @@ typedef DeclarativeActionSet<WebRequestAction> WebRequestActionSet;
class WebRequestCancelAction : public WebRequestAction {
public:
WebRequestCancelAction();
- virtual ~WebRequestCancelAction();
// Implementation of WebRequestAction:
virtual LinkedPtrEventResponseDelta CreateDelta(
@@ -188,6 +193,7 @@ class WebRequestCancelAction : public WebRequestAction {
const base::Time& extension_install_time) const OVERRIDE;
private:
+ virtual ~WebRequestCancelAction();
DISALLOW_COPY_AND_ASSIGN(WebRequestCancelAction);
};
@@ -195,15 +201,17 @@ class WebRequestCancelAction : public WebRequestAction {
class WebRequestRedirectAction : public WebRequestAction {
public:
explicit WebRequestRedirectAction(const GURL& redirect_url);
- virtual ~WebRequestRedirectAction();
// Implementation of WebRequestAction:
+ virtual bool Equals(const WebRequestAction* other) const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta(
const WebRequestData& request_data,
const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE;
private:
+ virtual ~WebRequestRedirectAction();
+
GURL redirect_url_; // Target to which the request shall be redirected.
DISALLOW_COPY_AND_ASSIGN(WebRequestRedirectAction);
@@ -213,7 +221,6 @@ class WebRequestRedirectAction : public WebRequestAction {
class WebRequestRedirectToTransparentImageAction : public WebRequestAction {
public:
WebRequestRedirectToTransparentImageAction();
- virtual ~WebRequestRedirectToTransparentImageAction();
// Implementation of WebRequestAction:
virtual LinkedPtrEventResponseDelta CreateDelta(
@@ -222,6 +229,7 @@ class WebRequestRedirectToTransparentImageAction : public WebRequestAction {
const base::Time& extension_install_time) const OVERRIDE;
private:
+ virtual ~WebRequestRedirectToTransparentImageAction();
DISALLOW_COPY_AND_ASSIGN(WebRequestRedirectToTransparentImageAction);
};
@@ -230,7 +238,6 @@ class WebRequestRedirectToTransparentImageAction : public WebRequestAction {
class WebRequestRedirectToEmptyDocumentAction : public WebRequestAction {
public:
WebRequestRedirectToEmptyDocumentAction();
- virtual ~WebRequestRedirectToEmptyDocumentAction();
// Implementation of WebRequestAction:
virtual LinkedPtrEventResponseDelta CreateDelta(
@@ -239,6 +246,7 @@ class WebRequestRedirectToEmptyDocumentAction : public WebRequestAction {
const base::Time& extension_install_time) const OVERRIDE;
private:
+ virtual ~WebRequestRedirectToEmptyDocumentAction();
DISALLOW_COPY_AND_ASSIGN(WebRequestRedirectToEmptyDocumentAction);
};
@@ -249,19 +257,21 @@ class WebRequestRedirectByRegExAction : public WebRequestAction {
// capture groups are referenced in Perl style ($1, $2, ...).
explicit WebRequestRedirectByRegExAction(scoped_ptr<re2::RE2> from_pattern,
const std::string& to_pattern);
- virtual ~WebRequestRedirectByRegExAction();
// Conversion of capture group styles between Perl style ($1, $2, ...) and
// RE2 (\1, \2, ...).
static std::string PerlToRe2Style(const std::string& perl);
// Implementation of WebRequestAction:
+ virtual bool Equals(const WebRequestAction* other) const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta(
const WebRequestData& request_data,
const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE;
private:
+ virtual ~WebRequestRedirectByRegExAction();
+
scoped_ptr<re2::RE2> from_pattern_;
std::string to_pattern_;
@@ -273,15 +283,17 @@ class WebRequestSetRequestHeaderAction : public WebRequestAction {
public:
WebRequestSetRequestHeaderAction(const std::string& name,
const std::string& value);
- virtual ~WebRequestSetRequestHeaderAction();
// Implementation of WebRequestAction:
+ virtual bool Equals(const WebRequestAction* other) const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta(
const WebRequestData& request_data,
const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE;
private:
+ virtual ~WebRequestSetRequestHeaderAction();
+
std::string name_;
std::string value_;
DISALLOW_COPY_AND_ASSIGN(WebRequestSetRequestHeaderAction);
@@ -291,15 +303,17 @@ class WebRequestSetRequestHeaderAction : public WebRequestAction {
class WebRequestRemoveRequestHeaderAction : public WebRequestAction {
public:
explicit WebRequestRemoveRequestHeaderAction(const std::string& name);
- virtual ~WebRequestRemoveRequestHeaderAction();
// Implementation of WebRequestAction:
+ virtual bool Equals(const WebRequestAction* other) const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta(
const WebRequestData& request_data,
const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE;
private:
+ virtual ~WebRequestRemoveRequestHeaderAction();
+
std::string name_;
DISALLOW_COPY_AND_ASSIGN(WebRequestRemoveRequestHeaderAction);
};
@@ -309,15 +323,17 @@ class WebRequestAddResponseHeaderAction : public WebRequestAction {
public:
WebRequestAddResponseHeaderAction(const std::string& name,
const std::string& value);
- virtual ~WebRequestAddResponseHeaderAction();
// Implementation of WebRequestAction:
+ virtual bool Equals(const WebRequestAction* other) const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta(
const WebRequestData& request_data,
const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE;
private:
+ virtual ~WebRequestAddResponseHeaderAction();
+
std::string name_;
std::string value_;
DISALLOW_COPY_AND_ASSIGN(WebRequestAddResponseHeaderAction);
@@ -329,15 +345,17 @@ class WebRequestRemoveResponseHeaderAction : public WebRequestAction {
explicit WebRequestRemoveResponseHeaderAction(const std::string& name,
const std::string& value,
bool has_value);
- virtual ~WebRequestRemoveResponseHeaderAction();
// Implementation of WebRequestAction:
+ virtual bool Equals(const WebRequestAction* other) const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta(
const WebRequestData& request_data,
const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE;
private:
+ virtual ~WebRequestRemoveResponseHeaderAction();
+
std::string name_;
std::string value_;
bool has_value_;
@@ -349,9 +367,9 @@ class WebRequestIgnoreRulesAction : public WebRequestAction {
public:
explicit WebRequestIgnoreRulesAction(int minimum_priority,
const std::string& ignore_tag);
- virtual ~WebRequestIgnoreRulesAction();
// Implementation of WebRequestAction:
+ virtual bool Equals(const WebRequestAction* other) const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta(
const WebRequestData& request_data,
const std::string& extension_id,
@@ -359,6 +377,8 @@ class WebRequestIgnoreRulesAction : public WebRequestAction {
const std::string& ignore_tag() const { return ignore_tag_; }
private:
+ virtual ~WebRequestIgnoreRulesAction();
+
// Rules are ignored if they have a tag matching |ignore_tag_| and
// |ignore_tag_| is non-empty.
std::string ignore_tag_;
@@ -373,15 +393,17 @@ class WebRequestRequestCookieAction : public WebRequestAction {
explicit WebRequestRequestCookieAction(
linked_ptr<RequestCookieModification> request_cookie_modification);
- virtual ~WebRequestRequestCookieAction();
// Implementation of WebRequestAction:
+ virtual bool Equals(const WebRequestAction* other) const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta(
const WebRequestData& request_data,
const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE;
private:
+ virtual ~WebRequestRequestCookieAction();
+
linked_ptr<RequestCookieModification> request_cookie_modification_;
DISALLOW_COPY_AND_ASSIGN(WebRequestRequestCookieAction);
};
@@ -394,15 +416,17 @@ class WebRequestResponseCookieAction : public WebRequestAction {
explicit WebRequestResponseCookieAction(
linked_ptr<ResponseCookieModification> response_cookie_modification);
- virtual ~WebRequestResponseCookieAction();
// Implementation of WebRequestAction:
+ virtual bool Equals(const WebRequestAction* other) const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta(
const WebRequestData& request_data,
const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE;
private:
+ virtual ~WebRequestResponseCookieAction();
+
linked_ptr<ResponseCookieModification> response_cookie_modification_;
DISALLOW_COPY_AND_ASSIGN(WebRequestResponseCookieAction);
};
@@ -412,15 +436,17 @@ class WebRequestResponseCookieAction : public WebRequestAction {
class WebRequestSendMessageToExtensionAction : public WebRequestAction {
public:
explicit WebRequestSendMessageToExtensionAction(const std::string& message);
- virtual ~WebRequestSendMessageToExtensionAction();
// Implementation of WebRequestAction:
+ virtual bool Equals(const WebRequestAction* other) const OVERRIDE;
virtual LinkedPtrEventResponseDelta CreateDelta(
const WebRequestData& request_data,
const std::string& extension_id,
const base::Time& extension_install_time) const OVERRIDE;
private:
+ virtual ~WebRequestSendMessageToExtensionAction();
+
std::string message_;
DISALLOW_COPY_AND_ASSIGN(WebRequestSendMessageToExtensionAction);
};