summaryrefslogtreecommitdiffstats
path: root/net/url_request
diff options
context:
space:
mode:
authormpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-30 22:31:51 +0000
committermpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-30 22:31:51 +0000
commit4875ba17099e50f482ec826fc38e7922096b7be2 (patch)
tree7bb5ec4498187f7c9673ada84c54aca1c0cdd6e5 /net/url_request
parentb04f6c6aea3ffd3a03368b67abacc1f36d2f8ce8 (diff)
downloadchromium_src-4875ba17099e50f482ec826fc38e7922096b7be2.zip
chromium_src-4875ba17099e50f482ec826fc38e7922096b7be2.tar.gz
chromium_src-4875ba17099e50f482ec826fc38e7922096b7be2.tar.bz2
Add request_id to HttpRequestInfo and pass it to the NetworkDelegate for events.
This lets us look up the request associated with an http transaction and send event details for the webRequest.onBeforeRequest extension event. I also hooked up the onBeforeRequest event for HTTP network and cache transactions so that they are separate from other requests. This lets us have the request header information. BUG=60101 TEST=no Review URL: http://codereview.chromium.org/6698009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@79905 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/url_request')
-rw-r--r--net/url_request/url_request.cc8
-rw-r--r--net/url_request/url_request_http_job.cc1
-rw-r--r--net/url_request/url_request_test_util.cc14
-rw-r--r--net/url_request/url_request_test_util.h7
-rw-r--r--net/url_request/url_request_unittest.cc4
5 files changed, 24 insertions, 10 deletions
diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc
index 17e23a5..5c437c2 100644
--- a/net/url_request/url_request.cc
+++ b/net/url_request/url_request.cc
@@ -44,7 +44,8 @@ void StripPostSpecificHeaders(HttpRequestHeaders* headers) {
}
// This counter keeps track of the identifiers used for URL requests so far.
-uint64 g_next_url_request_identifier = 0;
+// 0 is reserved to represent an invalid ID.
+uint64 g_next_url_request_identifier = 1;
// This lock protects g_next_url_request_identifier.
base::Lock g_next_url_request_identifier_lock;
@@ -130,6 +131,9 @@ URLRequest::URLRequest(const GURL& url, Delegate* delegate)
}
URLRequest::~URLRequest() {
+ if (context_ && context_->network_delegate())
+ context_->network_delegate()->NotifyURLRequestDestroyed(this);
+
if (before_request_callback_)
before_request_callback_->Cancel();
@@ -362,7 +366,7 @@ void URLRequest::Start() {
before_request_callback_ = new CancelableCompletionCallback<URLRequest>(
this, &URLRequest::BeforeRequestComplete);
if (context_->network_delegate()->NotifyBeforeURLRequest(
- this, before_request_callback_)) {
+ this, before_request_callback_) == net::ERR_IO_PENDING) {
before_request_callback_->AddRef(); // balanced in BeforeRequestComplete
net_log_.BeginEvent(NetLog::TYPE_URL_REQUEST_BLOCKED_ON_EXTENSION, NULL);
return; // paused
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc
index 1a3e28e..b3eaa0c 100644
--- a/net/url_request/url_request_http_job.cc
+++ b/net/url_request/url_request_http_job.cc
@@ -764,6 +764,7 @@ void URLRequestHttpJob::Start() {
request_info_.method = request_->method();
request_info_.load_flags = request_->load_flags();
request_info_.priority = request_->priority();
+ request_info_.request_id = request_->identifier();
if (request_->context()) {
request_info_.extra_headers.SetHeaderIfMissing(
diff --git a/net/url_request/url_request_test_util.cc b/net/url_request/url_request_test_util.cc
index d13ee06..e3627c4 100644
--- a/net/url_request/url_request_test_util.cc
+++ b/net/url_request/url_request_test_util.cc
@@ -296,13 +296,16 @@ TestNetworkDelegate::TestNetworkDelegate()
TestNetworkDelegate::~TestNetworkDelegate() {}
-bool TestNetworkDelegate::OnBeforeURLRequest(
+int TestNetworkDelegate::OnBeforeURLRequest(
net::URLRequest* request, net::CompletionCallback* callback) {
- return false;
+ return net::OK;
}
-void TestNetworkDelegate::OnSendHttpRequest(
- net::HttpRequestHeaders* headers) {
+int TestNetworkDelegate::OnBeforeSendHeaders(
+ uint64 request_id,
+ net::HttpRequestHeaders* headers,
+ net::CompletionCallback* callback) {
+ return net::OK;
}
void TestNetworkDelegate::OnResponseStarted(net::URLRequest* request) {
@@ -320,6 +323,9 @@ void TestNetworkDelegate::OnReadCompleted(net::URLRequest* request,
}
}
+void TestNetworkDelegate::OnURLRequestDestroyed(net::URLRequest* request) {
+}
+
net::URLRequestJob* TestNetworkDelegate::OnMaybeCreateURLRequestJob(
net::URLRequest* request) {
return NULL;
diff --git a/net/url_request/url_request_test_util.h b/net/url_request/url_request_test_util.h
index 6dcd39d..789c82a 100644
--- a/net/url_request/url_request_test_util.h
+++ b/net/url_request/url_request_test_util.h
@@ -201,11 +201,14 @@ class TestNetworkDelegate : public net::NetworkDelegate {
private:
// net::NetworkDelegate:
- virtual bool OnBeforeURLRequest(net::URLRequest* request,
+ virtual int OnBeforeURLRequest(net::URLRequest* request,
+ net::CompletionCallback* callback);
+ virtual int OnBeforeSendHeaders(uint64 request_id,
+ net::HttpRequestHeaders* headers,
net::CompletionCallback* callback);
- virtual void OnSendHttpRequest(net::HttpRequestHeaders* headers);
virtual void OnResponseStarted(net::URLRequest* request);
virtual void OnReadCompleted(net::URLRequest* request, int bytes_read);
+ virtual void OnURLRequestDestroyed(net::URLRequest* request);
virtual net::URLRequestJob* OnMaybeCreateURLRequestJob(
net::URLRequest* request);
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc
index 4f454d0..d12bc8a 100644
--- a/net/url_request/url_request_unittest.cc
+++ b/net/url_request/url_request_unittest.cc
@@ -239,10 +239,10 @@ TEST_F(URLRequestTestHTTP, NetworkDelegateTunnelConnectionFailed) {
TestDelegate d;
{
+ TestNetworkDelegate network_delegate; // must outlive URLRequest
URLRequest r(GURL("https://www.redirect.com/"), &d);
scoped_refptr<TestURLRequestContext> context(
new TestURLRequestContext(test_server_.host_port_pair().ToString()));
- TestNetworkDelegate network_delegate;
context->set_network_delegate(&network_delegate);
r.set_context(context);
@@ -2403,13 +2403,13 @@ TEST_F(URLRequestTest, Identifiers) {
// delegate.
TEST_F(URLRequestTest, NetworkDelegateProxyError) {
TestDelegate d;
+ TestNetworkDelegate network_delegate;
TestURLRequest req(GURL("http://example.com"), &d);
req.set_method("GET");
scoped_ptr<MockHostResolverBase> host_resolver(
new MockHostResolver);
host_resolver->rules()->AddSimulatedFailure("*");
- TestNetworkDelegate network_delegate;
scoped_refptr<TestURLRequestContext> context(
new TestURLRequestContext("myproxy:70", host_resolver.release()));
context->set_network_delegate(&network_delegate);