diff options
author | battre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-13 11:05:15 +0000 |
---|---|---|
committer | battre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-13 11:05:15 +0000 |
commit | 783573b8fb2326144387e6198a5c76ec4b449aea (patch) | |
tree | 9bd2400c709a83156eebdd578de3efa830b50756 | |
parent | 40d1ad6e65a61be12f82f0ad9a1710b353e5c60b (diff) | |
download | chromium_src-783573b8fb2326144387e6198a5c76ec4b449aea.zip chromium_src-783573b8fb2326144387e6198a5c76ec4b449aea.tar.gz chromium_src-783573b8fb2326144387e6198a5c76ec4b449aea.tar.bz2 |
Implemented RequestHeaders field in extraInfoSpec of webRequest API
BUG=60101
TEST=no
Review URL: http://codereview.chromium.org/6931055
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@85260 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/extensions/extension_webrequest_api.cc | 35 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_webrequest_api.h | 3 | ||||
-rw-r--r-- | chrome/browser/net/chrome_network_delegate.cc | 5 | ||||
-rw-r--r-- | chrome/browser/net/chrome_network_delegate.h | 3 | ||||
-rw-r--r-- | chrome/common/extensions/api/extension_api.json | 3 | ||||
-rw-r--r-- | chrome/common/extensions/docs/experimental.webRequest.html | 68 | ||||
-rw-r--r-- | chrome/test/data/extensions/api_test/webrequest/events/test.html | 8 | ||||
-rw-r--r-- | net/base/network_delegate.cc | 5 | ||||
-rw-r--r-- | net/base/network_delegate.h | 7 | ||||
-rw-r--r-- | net/http/http_network_transaction.cc | 2 | ||||
-rw-r--r-- | net/proxy/network_delegate_error_observer_unittest.cc | 3 | ||||
-rw-r--r-- | net/url_request/url_request_test_util.cc | 3 | ||||
-rw-r--r-- | net/url_request/url_request_test_util.h | 3 |
13 files changed, 119 insertions, 29 deletions
diff --git a/chrome/browser/extensions/extension_webrequest_api.cc b/chrome/browser/extensions/extension_webrequest_api.cc index df62282..63ddd3e 100644 --- a/chrome/browser/extensions/extension_webrequest_api.cc +++ b/chrome/browser/extensions/extension_webrequest_api.cc @@ -139,7 +139,7 @@ void EventHandledOnIOThread( // Creates a list of HttpHeaders (see extension_api.json). If |headers| is // NULL, the list is empty. Ownership is passed to the caller. -ListValue* GetResponseHeadersList(net::HttpResponseHeaders* headers) { +ListValue* GetResponseHeadersList(const net::HttpResponseHeaders* headers) { ListValue* headers_value = new ListValue(); if (headers) { void* iter = NULL; @@ -155,6 +155,19 @@ ListValue* GetResponseHeadersList(net::HttpResponseHeaders* headers) { return headers_value; } +ListValue* GetRequestHeadersList(const net::HttpRequestHeaders* headers) { + ListValue* headers_value = new ListValue(); + if (headers) { + for (net::HttpRequestHeaders::Iterator it(*headers); it.GetNext(); ) { + DictionaryValue* header = new DictionaryValue(); + header->SetString(keys::kHeaderNameKey, it.name()); + header->SetString(keys::kHeaderValueKey, it.name()); + headers_value->Append(header); + } + } + return headers_value; +} + // Creates a StringValue with the status line of |headers|. If |headers| is // NULL, an empty string is returned. Ownership is passed to the caller. StringValue* GetStatusLine(net::HttpResponseHeaders* headers) { @@ -414,16 +427,9 @@ int ExtensionWebRequestEventRouter::OnBeforeSendHeaders( dict->SetString(keys::kUrlKey, request->url().spec()); dict->SetDouble(keys::kTimeStampKey, base::Time::Now().ToDoubleT() * 1000); - if (extra_info_spec & ExtraInfoSpec::REQUEST_HEADERS) { - ListValue* headers_value = new ListValue(); - for (net::HttpRequestHeaders::Iterator it(*headers); it.GetNext(); ) { - DictionaryValue* header = new DictionaryValue(); - header->SetString(keys::kHeaderNameKey, it.name()); - header->SetString(keys::kHeaderValueKey, it.name()); - headers_value->Append(header); - } - dict->Set(keys::kRequestHeadersKey, headers_value); - } + if (extra_info_spec & ExtraInfoSpec::REQUEST_HEADERS) + dict->Set(keys::kRequestHeadersKey, GetRequestHeadersList(headers)); + // TODO(battre): implement request line. args.Append(dict); @@ -440,7 +446,8 @@ void ExtensionWebRequestEventRouter::OnRequestSent( ProfileId profile_id, ExtensionEventRouterForwarder* event_router, uint64 request_id, - const net::HostPortPair& socket_address) { + const net::HostPortPair& socket_address, + const net::HttpRequestHeaders& headers) { if (profile_id == Profile::kInvalidProfileId) return; base::Time time(base::Time::Now()); @@ -470,7 +477,9 @@ void ExtensionWebRequestEventRouter::OnRequestSent( dict->SetString(keys::kUrlKey, request->url().spec()); dict->SetString(keys::kIpKey, socket_address.host()); dict->SetDouble(keys::kTimeStampKey, time.ToDoubleT() * 1000); - // TODO(battre): support "request line" and "request headers". + if (extra_info_spec & ExtraInfoSpec::REQUEST_HEADERS) + dict->Set(keys::kRequestHeadersKey, GetRequestHeadersList(&headers)); + // TODO(battre): support "request line". args.Append(dict); DispatchEvent(profile_id, event_router, request, listeners, args); diff --git a/chrome/browser/extensions/extension_webrequest_api.h b/chrome/browser/extensions/extension_webrequest_api.h index 4afe531..3c83a5e 100644 --- a/chrome/browser/extensions/extension_webrequest_api.h +++ b/chrome/browser/extensions/extension_webrequest_api.h @@ -129,7 +129,8 @@ class ExtensionWebRequestEventRouter { void OnRequestSent(ProfileId profile_id, ExtensionEventRouterForwarder* event_router, uint64 request_id, - const net::HostPortPair& socket_address); + const net::HostPortPair& socket_address, + const net::HttpRequestHeaders& headers); // Dispatches the onBeforeRedirect event. This is fired for HTTP(s) requests // only. diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/chrome_network_delegate.cc index 6d8a542..ee3afad 100644 --- a/chrome/browser/net/chrome_network_delegate.cc +++ b/chrome/browser/net/chrome_network_delegate.cc @@ -82,9 +82,10 @@ int ChromeNetworkDelegate::OnBeforeSendHeaders( void ChromeNetworkDelegate::OnRequestSent( uint64 request_id, - const net::HostPortPair& socket_address) { + const net::HostPortPair& socket_address, + const net::HttpRequestHeaders& headers) { ExtensionWebRequestEventRouter::GetInstance()->OnRequestSent( - profile_id_, event_router_.get(), request_id, socket_address); + profile_id_, event_router_.get(), request_id, socket_address, headers); } void ChromeNetworkDelegate::OnBeforeRedirect(net::URLRequest* request, diff --git a/chrome/browser/net/chrome_network_delegate.h b/chrome/browser/net/chrome_network_delegate.h index a26bc31..aa556de 100644 --- a/chrome/browser/net/chrome_network_delegate.h +++ b/chrome/browser/net/chrome_network_delegate.h @@ -46,7 +46,8 @@ class ChromeNetworkDelegate : public net::NetworkDelegate { net::CompletionCallback* callback, net::HttpRequestHeaders* headers); virtual void OnRequestSent(uint64 request_id, - const net::HostPortPair& socket_address); + const net::HostPortPair& socket_address, + const net::HttpRequestHeaders& headers); virtual void OnBeforeRedirect(net::URLRequest* request, const GURL& new_location); virtual void OnResponseStarted(net::URLRequest* request); diff --git a/chrome/common/extensions/api/extension_api.json b/chrome/common/extensions/api/extension_api.json index 36d28b4..cdaf051 100644 --- a/chrome/common/extensions/api/extension_api.json +++ b/chrome/common/extensions/api/extension_api.json @@ -3853,7 +3853,8 @@ "requestId": {"type": "string", "description": "The ID of the request."}, "url": {"type": "string"}, "ip": {"type": "string", "description": "The server IP address that is actually connected to. Note that it may be a literal IPv6 address."}, - "timeStamp": {"type": "number", "description": "The time when the browser finished sending the request, in milliseconds since the epoch."} + "timeStamp": {"type": "number", "description": "The time when the browser finished sending the request, in milliseconds since the epoch."}, + "requestHeaders": {"$ref": "HttpHeaders", "optional": true, "description": "The HTTP request headers that have been sent out with this request."} } } ], diff --git a/chrome/common/extensions/docs/experimental.webRequest.html b/chrome/common/extensions/docs/experimental.webRequest.html index 27155f3..709ec15 100644 --- a/chrome/common/extensions/docs/experimental.webRequest.html +++ b/chrome/common/extensions/docs/experimental.webRequest.html @@ -4018,6 +4018,74 @@ unexpected results. </dd> </div> + </div><div> + <div> + <dt> + <var>requestHeaders</var> + <em> + + <!-- TYPE --> + <div style="display:inline"> + ( + <span class="optional">optional</span> + <span class="enum" style="display: none; ">enumerated</span> + <span id="typeTemplate"> + <span> + <a href="experimental.webRequest.html#type-HttpHeaders">HttpHeaders</a> + </span> + <span style="display: none; "> + <span> + array of <span><span></span></span> + </span> + <span>paramType</span> + <span></span> + </span> + </span> + ) + </div> + + </em> + </dt> + <dd class="todo" style="display: none; "> + Undocumented. + </dd> + <dd>The HTTP request headers that have been sent out with this request.</dd> + <dd style="display: none; "> + This parameter was added in version + <b><span></span></b>. + You must omit this parameter in earlier versions, + and you may omit it in any version. If you require this + parameter, the manifest key + <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a> + can ensure that your extension won't be run in an earlier browser version. + </dd> + + <!-- OBJECT PROPERTIES --> + <dd style="display: none; "> + <dl> + <div> + <div> + </div> + </div> + </dl> + </dd> + + <!-- OBJECT METHODS --> + <dd style="display: none; "> + <div></div> + </dd> + + <!-- OBJECT EVENT FIELDS --> + <dd style="display: none; "> + <div></div> + </dd> + + <!-- FUNCTION PARAMETERS --> + <dd style="display: none; "> + <div></div> + </dd> + + </div> </div> </dl> </dd> diff --git a/chrome/test/data/extensions/api_test/webrequest/events/test.html b/chrome/test/data/extensions/api_test/webrequest/events/test.html index 6f04e4d..b286f01 100644 --- a/chrome/test/data/extensions/api_test/webrequest/events/test.html +++ b/chrome/test/data/extensions/api_test/webrequest/events/test.html @@ -173,7 +173,7 @@ function initListeners(filter, extraInfoSpec) { chrome.experimental.webRequest.onRequestSent.addListener( function(details) { return captureEvent("onRequestSent", details); - }, filter); + }, filter, intersect(extraInfoSpec, ["requestHeaders"])); chrome.experimental.webRequest.onResponseStarted.addListener( function(details) { return captureEvent("onResponseStarted", details); @@ -270,7 +270,8 @@ runTests([ event: "onRequestSent", details: { url: URL_HTTP_SIMPLE_LOAD_REDIRECT, - ip: "127.0.0.1" + ip: "127.0.0.1", + requestHeadersExist: true } }, { label: "onBeforeRedirect", @@ -303,7 +304,8 @@ runTests([ event: "onRequestSent", details: { url: URL_HTTP_SIMPLE_LOAD, - ip: "127.0.0.1" + ip: "127.0.0.1", + requestHeadersExist: true } }, { label: "onResponseStarted", diff --git a/net/base/network_delegate.cc b/net/base/network_delegate.cc index f9165728..d895667 100644 --- a/net/base/network_delegate.cc +++ b/net/base/network_delegate.cc @@ -28,9 +28,10 @@ int NetworkDelegate::NotifyBeforeSendHeaders(uint64 request_id, void NetworkDelegate::NotifyRequestSent( uint64 request_id, - const HostPortPair& socket_address) { + const HostPortPair& socket_address, + const HttpRequestHeaders& headers) { DCHECK(CalledOnValidThread()); - OnRequestSent(request_id, socket_address); + OnRequestSent(request_id, socket_address, headers); } void NetworkDelegate::NotifyResponseStarted(URLRequest* request) { diff --git a/net/base/network_delegate.h b/net/base/network_delegate.h index f0f3325..ce913e9 100644 --- a/net/base/network_delegate.h +++ b/net/base/network_delegate.h @@ -43,7 +43,9 @@ class NetworkDelegate : public base::NonThreadSafe { int NotifyBeforeSendHeaders(uint64 request_id, CompletionCallback* callback, HttpRequestHeaders* headers); - void NotifyRequestSent(uint64 request_id, const HostPortPair& socket_address); + void NotifyRequestSent(uint64 request_id, + const HostPortPair& socket_address, + const HttpRequestHeaders& headers); void NotifyBeforeRedirect(URLRequest* request, const GURL& new_location); void NotifyResponseStarted(URLRequest* request); @@ -86,7 +88,8 @@ class NetworkDelegate : public base::NonThreadSafe { // Called right after the HTTP headers have been sent and notifies where // the request has actually been sent to. virtual void OnRequestSent(uint64 request_id, - const HostPortPair& socket_address) = 0; + const HostPortPair& socket_address, + const HttpRequestHeaders& headers) = 0; // Called right after a redirect response code was received. virtual void OnBeforeRedirect(URLRequest* request, diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc index f298679..9054346 100644 --- a/net/http/http_network_transaction.cc +++ b/net/http/http_network_transaction.cc @@ -794,7 +794,7 @@ int HttpNetworkTransaction::DoSendRequest() { int HttpNetworkTransaction::DoSendRequestComplete(int result) { if (session_->network_delegate()) { session_->network_delegate()->NotifyRequestSent( - request_->request_id, response_.socket_address); + request_->request_id, response_.socket_address, request_headers_); } if (result < 0) diff --git a/net/proxy/network_delegate_error_observer_unittest.cc b/net/proxy/network_delegate_error_observer_unittest.cc index b5f09c6..f76f2d0 100644 --- a/net/proxy/network_delegate_error_observer_unittest.cc +++ b/net/proxy/network_delegate_error_observer_unittest.cc @@ -35,7 +35,8 @@ class TestNetworkDelegate : public net::NetworkDelegate { return net::OK; } virtual void OnRequestSent(uint64 request_id, - const HostPortPair& socket_address) {} + const HostPortPair& socket_address, + const HttpRequestHeaders& headers) {} virtual void OnBeforeRedirect(URLRequest* request, const GURL& new_location) {} virtual void OnResponseStarted(URLRequest* request) {} diff --git a/net/url_request/url_request_test_util.cc b/net/url_request/url_request_test_util.cc index 4f4fa65..680f12d 100644 --- a/net/url_request/url_request_test_util.cc +++ b/net/url_request/url_request_test_util.cc @@ -262,7 +262,8 @@ int TestNetworkDelegate::OnBeforeSendHeaders( void TestNetworkDelegate::OnRequestSent( uint64 request_id, - const net::HostPortPair& socket_address) { + const net::HostPortPair& socket_address, + const net::HttpRequestHeaders& headers) { } void TestNetworkDelegate::OnBeforeRedirect(net::URLRequest* request, diff --git a/net/url_request/url_request_test_util.h b/net/url_request/url_request_test_util.h index 777d060..c4371c7 100644 --- a/net/url_request/url_request_test_util.h +++ b/net/url_request/url_request_test_util.h @@ -189,7 +189,8 @@ class TestNetworkDelegate : public net::NetworkDelegate { net::CompletionCallback* callback, net::HttpRequestHeaders* headers); virtual void OnRequestSent(uint64 request_id, - const net::HostPortPair& socket_address); + const net::HostPortPair& socket_address, + const net::HttpRequestHeaders& headers); virtual void OnBeforeRedirect(net::URLRequest* request, const GURL& new_location); virtual void OnResponseStarted(net::URLRequest* request); |