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

Unified Diff: chrome/browser/extensions/api/web_request/web_request_api.cc

Issue 212693002: Do not cancel request when an error occurs in a webRequest event handler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 9 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/web_request/web_request_api.cc
diff --git a/chrome/browser/extensions/api/web_request/web_request_api.cc b/chrome/browser/extensions/api/web_request/web_request_api.cc
index e1095698c6533201d7933cd7d3ff3088689ea94a..8b84b2dcafd5686745bf353de2d12d6938284001 100644
--- a/chrome/browser/extensions/api/web_request/web_request_api.cc
+++ b/chrome/browser/extensions/api/web_request/web_request_api.cc
@@ -2229,14 +2229,13 @@ bool WebRequestAddEventListener::RunImpl() {
return true;
}
-void WebRequestEventHandled::CancelWithError(
+void WebRequestEventHandled::RespondWithError(
const std::string& event_name,
const std::string& sub_event_name,
uint64 request_id,
scoped_ptr<ExtensionWebRequestEventRouter::EventResponse> response,
const std::string& error) {
error_ = error;
- response->cancel = true;
ExtensionWebRequestEventRouter::GetInstance()->OnEventHandled(
profile_id(),
extension_id(),
@@ -2274,11 +2273,11 @@ bool WebRequestEventHandled::RunImpl() {
if (value->HasKey("cancel")) {
// Don't allow cancel mixed with other keys.
if (value->size() != 1) {
- CancelWithError(event_name,
- sub_event_name,
- request_id,
- response.Pass(),
- keys::kInvalidBlockingResponse);
+ RespondWithError(event_name,
+ sub_event_name,
+ request_id,
+ response.Pass(),
+ keys::kInvalidBlockingResponse);
return false;
}
@@ -2293,12 +2292,12 @@ bool WebRequestEventHandled::RunImpl() {
&new_url_str));
response->new_url = GURL(new_url_str);
if (!response->new_url.is_valid()) {
- CancelWithError(event_name,
- sub_event_name,
- request_id,
- response.Pass(),
- ErrorUtils::FormatErrorMessage(
- keys::kInvalidRedirectUrl, new_url_str));
+ RespondWithError(event_name,
+ sub_event_name,
+ request_id,
+ response.Pass(),
+ ErrorUtils::FormatErrorMessage(
+ keys::kInvalidRedirectUrl, new_url_str));
return false;
}
}
@@ -2308,21 +2307,23 @@ bool WebRequestEventHandled::RunImpl() {
if (hasRequestHeaders || hasResponseHeaders) {
if (hasRequestHeaders && hasResponseHeaders) {
// Allow only one of the keys, not both.
- CancelWithError(event_name,
- sub_event_name,
- request_id,
- response.Pass(),
- keys::kInvalidHeaderKeyCombination);
+ RespondWithError(event_name,
+ sub_event_name,
+ request_id,
+ response.Pass(),
+ keys::kInvalidHeaderKeyCombination);
return false;
}
base::ListValue* headers_value = NULL;
+ scoped_ptr<net::HttpRequestHeaders> request_headers;
+ scoped_ptr<helpers::ResponseHeaders> response_headers;
if (hasRequestHeaders) {
- response->request_headers.reset(new net::HttpRequestHeaders());
+ request_headers.reset(new net::HttpRequestHeaders());
EXTENSION_FUNCTION_VALIDATE(value->GetList(keys::kRequestHeadersKey,
&headers_value));
} else {
- response->response_headers.reset(new helpers::ResponseHeaders());
+ response_headers.reset(new helpers::ResponseHeaders());
EXTENSION_FUNCTION_VALIDATE(value->GetList(keys::kResponseHeadersKey,
&headers_value));
}
@@ -2336,37 +2337,40 @@ bool WebRequestEventHandled::RunImpl() {
if (!FromHeaderDictionary(header_value, &name, &value)) {
std::string serialized_header;
base::JSONWriter::Write(header_value, &serialized_header);
- CancelWithError(event_name,
- sub_event_name,
- request_id,
- response.Pass(),
- ErrorUtils::FormatErrorMessage(keys::kInvalidHeader,
- serialized_header));
+ RespondWithError(event_name,
+ sub_event_name,
+ request_id,
+ response.Pass(),
+ ErrorUtils::FormatErrorMessage(keys::kInvalidHeader,
+ serialized_header));
return false;
}
if (!helpers::IsValidHeaderName(name)) {
- CancelWithError(event_name,
- sub_event_name,
- request_id,
- response.Pass(),
- keys::kInvalidHeaderName);
+ RespondWithError(event_name,
+ sub_event_name,
+ request_id,
+ response.Pass(),
+ keys::kInvalidHeaderName);
return false;
}
if (!helpers::IsValidHeaderValue(value)) {
- CancelWithError(event_name,
- sub_event_name,
- request_id,
- response.Pass(),
- ErrorUtils::FormatErrorMessage(
- keys::kInvalidHeaderValue, name));
+ RespondWithError(event_name,
+ sub_event_name,
+ request_id,
+ response.Pass(),
+ ErrorUtils::FormatErrorMessage(
+ keys::kInvalidHeaderValue, name));
return false;
}
if (hasRequestHeaders)
- response->request_headers->SetHeader(name, value);
+ request_headers->SetHeader(name, value);
else
- response->response_headers->push_back(helpers::ResponseHeader(name,
- value));
+ response_headers->push_back(helpers::ResponseHeader(name, value));
}
+ if (hasRequestHeaders)
+ response->request_headers.reset(request_headers.release());
+ else
+ response->response_headers.reset(response_headers.release());
}
if (value->HasKey(keys::kAuthCredentialsKey)) {

Powered by Google App Engine
This is Rietveld 408576698