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..7c0a40b1f0700d21d20a9d72355650fa4de79875 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()); |
@@ -179,4 +188,72 @@ 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 { |
+ if (!(request_stage & GetStages())) |
Matt Perry
2012/05/16 23:54:12
seems like all the CreateDeltas have this check. C
battre
2012/05/18 10:29:38
I do this at the caller already. I have replaced t
|
+ return LinkedPtrEventResponseDelta(NULL); |
+ 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 { |
+ if (!(request_stage & GetStages())) |
+ return LinkedPtrEventResponseDelta(NULL); |
+ LinkedPtrEventResponseDelta result( |
+ new extension_web_request_api_helpers::EventResponseDelta( |
+ extension_id, extension_install_time)); |
+ result->new_url = GURL(kEmptyDocumentUrl); |
+ return result; |
+} |
+ |
} // namespace extensions |