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

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

Issue 10386172: Implemented declarative redirects to transparent image and empty document. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix error caused by rebasing Created 8 years, 7 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_webrequest/webrequest_action.cc
diff --git a/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc b/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc
index 6220ccd7fcd95c3a92fcbd0265cd665b7ab221cb..c23ee123f44f40ad3d088920e925ce27207e6c11 100644
--- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc
+++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc
@@ -22,6 +22,10 @@ const char kExpectedDictionary[] = "Expected a dictionary as action.";
const char kInvalidInstanceTypeError[] =
"An action has an invalid instanceType: %s";
const char kMissingRedirectUrl[] = "No redirection target specified.";
+
+const char kTransparentImageUrl[] = "data:image/png;base64,iVBORw0KGgoAAAANSUh"
+ "EUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg==";
+const char kEmptyDocumentUrl[] = "data:text/html,";
} // namespace
//
@@ -50,8 +54,8 @@ scoped_ptr<WebRequestAction> WebRequestAction::Create(
}
// TODO(battre): Change this into a proper factory.
+ *error = "";
if (instance_type == keys::kCancelRequestType) {
- *error = "";
return scoped_ptr<WebRequestAction>(new WebRequestCancelAction);
} else if (instance_type == keys::kRedirectRequestType) {
std::string redirect_url_string;
@@ -59,10 +63,15 @@ scoped_ptr<WebRequestAction> WebRequestAction::Create(
*error = kMissingRedirectUrl;
return scoped_ptr<WebRequestAction>(NULL);
}
- *error = "";
GURL redirect_url(redirect_url_string);
return scoped_ptr<WebRequestAction>(
new WebRequestRedirectAction(redirect_url));
+ } else if (instance_type == keys::kRedirectToTransparentImageType) {
+ return scoped_ptr<WebRequestAction>(
+ new WebRequestRedirectToTransparentImageAction);
+ } else if (instance_type == keys::kRedirectToEmptyDocumentType) {
+ return scoped_ptr<WebRequestAction>(
+ new WebRequestRedirectToEmptyDocumentAction);
}
*error = base::StringPrintf(kInvalidInstanceTypeError, instance_type.c_str());
@@ -137,8 +146,7 @@ LinkedPtrEventResponseDelta WebRequestCancelAction::CreateDelta(
RequestStages request_stage,
const std::string& extension_id,
const base::Time& extension_install_time) const {
- if (!(request_stage & GetStages()))
- return LinkedPtrEventResponseDelta(NULL);
+ CHECK(request_stage & GetStages());
LinkedPtrEventResponseDelta result(
new extension_web_request_api_helpers::EventResponseDelta(
extension_id, extension_install_time));
@@ -168,8 +176,7 @@ LinkedPtrEventResponseDelta WebRequestRedirectAction::CreateDelta(
RequestStages request_stage,
const std::string& extension_id,
const base::Time& extension_install_time) const {
- if (!(request_stage & GetStages()))
- return LinkedPtrEventResponseDelta(NULL);
+ CHECK(request_stage & GetStages());
if (request->url() == redirect_url_)
return LinkedPtrEventResponseDelta(NULL);
LinkedPtrEventResponseDelta result(
@@ -179,4 +186,70 @@ LinkedPtrEventResponseDelta WebRequestRedirectAction::CreateDelta(
return result;
}
+//
+// WebRequestRedirectToTransparentImageAction
+//
+
+WebRequestRedirectToTransparentImageAction::
+WebRequestRedirectToTransparentImageAction() {}
+
+WebRequestRedirectToTransparentImageAction::
+~WebRequestRedirectToTransparentImageAction() {}
+
+int WebRequestRedirectToTransparentImageAction::GetStages() const {
+ return ON_BEFORE_REQUEST;
+}
+
+WebRequestAction::Type
+WebRequestRedirectToTransparentImageAction::GetType() const {
+ return WebRequestAction::ACTION_REDIRECT_TO_TRANSPARENT_IMAGE;
+}
+
+LinkedPtrEventResponseDelta
+WebRequestRedirectToTransparentImageAction::CreateDelta(
+ net::URLRequest* request,
+ RequestStages request_stage,
+ const std::string& extension_id,
+ const base::Time& extension_install_time) const {
+ CHECK(request_stage & GetStages());
+ LinkedPtrEventResponseDelta result(
+ new extension_web_request_api_helpers::EventResponseDelta(
+ extension_id, extension_install_time));
+ result->new_url = GURL(kTransparentImageUrl);
+ return result;
+}
+
+//
+// WebRequestRedirectToEmptyDocumentAction
+//
+
+WebRequestRedirectToEmptyDocumentAction::
+WebRequestRedirectToEmptyDocumentAction() {}
+
+WebRequestRedirectToEmptyDocumentAction::
+~WebRequestRedirectToEmptyDocumentAction() {}
+
+int WebRequestRedirectToEmptyDocumentAction::GetStages() const {
+ return ON_BEFORE_REQUEST;
+}
+
+WebRequestAction::Type
+WebRequestRedirectToEmptyDocumentAction::GetType() const {
+ return WebRequestAction::ACTION_REDIRECT_TO_EMPTY_DOCUMENT;
+}
+
+LinkedPtrEventResponseDelta
+WebRequestRedirectToEmptyDocumentAction::CreateDelta(
+ net::URLRequest* request,
+ RequestStages request_stage,
+ const std::string& extension_id,
+ const base::Time& extension_install_time) const {
+ CHECK(request_stage & GetStages());
+ LinkedPtrEventResponseDelta result(
+ new extension_web_request_api_helpers::EventResponseDelta(
+ extension_id, extension_install_time));
+ result->new_url = GURL(kEmptyDocumentUrl);
+ return result;
+}
+
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698