summaryrefslogtreecommitdiffstats
path: root/chrome/browser/net
diff options
context:
space:
mode:
authorbattre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-13 20:35:35 +0000
committerbattre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-13 20:35:35 +0000
commit9045b8828eebdd69aabc29af2ef45337f9cb213f (patch)
tree73b607f60c90b622f74db855d02b21fec75f6df6 /chrome/browser/net
parent6c6abcae8d0f1a0cbb468ec1251529cb866ff2b1 (diff)
downloadchromium_src-9045b8828eebdd69aabc29af2ef45337f9cb213f.zip
chromium_src-9045b8828eebdd69aabc29af2ef45337f9cb213f.tar.gz
chromium_src-9045b8828eebdd69aabc29af2ef45337f9cb213f.tar.bz2
Prevent callbacks after URLRequest/URLRequestJob have been canceled/completed/killed.
With this CL, URLRequestJobs notify their NetworkDelegate when they are being destroyed to insure that the NetworkDelegate does not access any of their variables or call callbacks. Also the WebRequest API does not execute any callbacks if they URLRequest has informed the API that the Request has been completed or canceled. Both cases could happen in rare race conditions. BUG=108968 TEST=no Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=117342 Review URL: http://codereview.chromium.org/9147018 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@117685 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/net')
-rw-r--r--chrome/browser/net/chrome_network_delegate.cc7
-rw-r--r--chrome/browser/net/chrome_network_delegate.h4
2 files changed, 6 insertions, 5 deletions
diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/chrome_network_delegate.cc
index 2bc9977..3a8da6f 100644
--- a/chrome/browser/net/chrome_network_delegate.cc
+++ b/chrome/browser/net/chrome_network_delegate.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -141,7 +141,8 @@ void ChromeNetworkDelegate::OnRawBytesRead(const net::URLRequest& request,
TaskManager::GetInstance()->model()->NotifyBytesRead(request, bytes_read);
}
-void ChromeNetworkDelegate::OnCompleted(net::URLRequest* request) {
+void ChromeNetworkDelegate::OnCompleted(net::URLRequest* request,
+ bool started) {
if (request->status().status() == net::URLRequestStatus::SUCCESS ||
request->status().status() == net::URLRequestStatus::HANDLED_EXTERNALLY) {
bool is_redirect = request->response_headers() &&
@@ -154,7 +155,7 @@ void ChromeNetworkDelegate::OnCompleted(net::URLRequest* request) {
} else if (request->status().status() == net::URLRequestStatus::FAILED ||
request->status().status() == net::URLRequestStatus::CANCELED) {
ExtensionWebRequestEventRouter::GetInstance()->OnErrorOccurred(
- profile_, extension_info_map_.get(), request);
+ profile_, extension_info_map_.get(), request, started);
} else {
NOTREACHED();
}
diff --git a/chrome/browser/net/chrome_network_delegate.h b/chrome/browser/net/chrome_network_delegate.h
index b7f92f7..74b7146 100644
--- a/chrome/browser/net/chrome_network_delegate.h
+++ b/chrome/browser/net/chrome_network_delegate.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -65,7 +65,7 @@ class ChromeNetworkDelegate : public net::NetworkDelegate {
virtual void OnResponseStarted(net::URLRequest* request) OVERRIDE;
virtual void OnRawBytesRead(const net::URLRequest& request,
int bytes_read) OVERRIDE;
- virtual void OnCompleted(net::URLRequest* request) OVERRIDE;
+ virtual void OnCompleted(net::URLRequest* request, bool started) OVERRIDE;
virtual void OnURLRequestDestroyed(net::URLRequest* request) OVERRIDE;
virtual void OnPACScriptError(int line_number,
const string16& error) OVERRIDE;