summaryrefslogtreecommitdiffstats
path: root/chrome/browser/net/chrome_network_delegate.cc
diff options
context:
space:
mode:
authorbattre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-13 10:41:01 +0000
committerbattre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-13 10:41:01 +0000
commita83dd330dfcc8914c2f1a348d619f0c39b8da50e (patch)
tree8b292fe9f4a8293ce9faad34ccff25a2dabd9336 /chrome/browser/net/chrome_network_delegate.cc
parentb5523b350fa5eee2eaf1aa4fb9bc63f14815539a (diff)
downloadchromium_src-a83dd330dfcc8914c2f1a348d619f0c39b8da50e.zip
chromium_src-a83dd330dfcc8914c2f1a348d619f0c39b8da50e.tar.gz
chromium_src-a83dd330dfcc8914c2f1a348d619f0c39b8da50e.tar.bz2
Fix leaking request IDs in webRequest API
The current webRequest API did not guarantee that either onCompleted or onErrorOccurred is called for each request. If an extension fills a REQUEST_ID -> URL hashmap for all requests at the onBeforeRequest event, and tried to delete the entries on onCompleted and onErrorOccurred, some entries remained in the hashmap. BUG=86139 TEST=execute example extension attached to bug Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=92331 Review URL: http://codereview.chromium.org/7190007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@92349 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/net/chrome_network_delegate.cc')
-rw-r--r--chrome/browser/net/chrome_network_delegate.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/chrome_network_delegate.cc
index 48350a8..1a182bc 100644
--- a/chrome/browser/net/chrome_network_delegate.cc
+++ b/chrome/browser/net/chrome_network_delegate.cc
@@ -110,7 +110,8 @@ void ChromeNetworkDelegate::OnRawBytesRead(const net::URLRequest& request,
}
void ChromeNetworkDelegate::OnCompleted(net::URLRequest* request) {
- if (request->status().status() == net::URLRequestStatus::SUCCESS) {
+ if (request->status().status() == net::URLRequestStatus::SUCCESS ||
+ request->status().status() == net::URLRequestStatus::HANDLED_EXTERNALLY) {
bool is_redirect = request->response_headers() &&
net::HttpResponseHeaders::IsRedirectResponseCode(
request->response_headers()->response_code());
@@ -118,9 +119,12 @@ void ChromeNetworkDelegate::OnCompleted(net::URLRequest* request) {
ExtensionWebRequestEventRouter::GetInstance()->OnCompleted(
profile_id_, extension_info_map_.get(), request);
}
- } else if (request->status().status() == net::URLRequestStatus::FAILED) {
+ } else if (request->status().status() == net::URLRequestStatus::FAILED ||
+ request->status().status() == net::URLRequestStatus::CANCELED) {
ExtensionWebRequestEventRouter::GetInstance()->OnErrorOccurred(
profile_id_, extension_info_map_.get(), request);
+ } else {
+ NOTREACHED();
}
ForwardProxyErrors(request, event_router_.get(), profile_id_);
}