summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/extensions/extension_webrequest_api.cc75
-rw-r--r--chrome/browser/extensions/extension_webrequest_api.h15
-rw-r--r--chrome/browser/extensions/extension_webrequest_api_constants.cc2
-rw-r--r--chrome/browser/extensions/extension_webrequest_api_constants.h2
-rw-r--r--chrome/browser/net/chrome_network_delegate.cc15
-rw-r--r--chrome/browser/net/chrome_network_delegate.h20
-rw-r--r--chrome/common/extensions/api/extension_api.json9
-rw-r--r--chrome/common/extensions/docs/experimental.webRequest.html516
-rw-r--r--chrome/common/extensions/docs/samples.json2
-rw-r--r--chrome/test/data/extensions/api_test/webrequest/api/test.html2
-rw-r--r--chrome/test/data/extensions/api_test/webrequest/events/test.html59
-rw-r--r--net/base/network_delegate.cc13
-rw-r--r--net/base/network_delegate.h14
-rw-r--r--net/http/http_cache_transaction.cc7
-rw-r--r--net/http/http_network_transaction.cc11
-rw-r--r--net/proxy/network_delegate_error_observer_unittest.cc3
-rw-r--r--net/url_request/url_request.cc3
-rw-r--r--net/url_request/url_request.h6
-rw-r--r--net/url_request/url_request_http_job.cc7
-rw-r--r--net/url_request/url_request_test_util.cc25
-rw-r--r--net/url_request/url_request_test_util.h3
-rw-r--r--net/url_request/url_request_unittest.cc5
22 files changed, 490 insertions, 324 deletions
diff --git a/chrome/browser/extensions/extension_webrequest_api.cc b/chrome/browser/extensions/extension_webrequest_api.cc
index 16fb741..a021fe3 100644
--- a/chrome/browser/extensions/extension_webrequest_api.cc
+++ b/chrome/browser/extensions/extension_webrequest_api.cc
@@ -42,7 +42,7 @@ static const char* const kWebRequestEvents[] = {
keys::kOnBeforeSendHeaders,
keys::kOnCompleted,
keys::kOnErrorOccurred,
- keys::kOnRequestSent,
+ keys::kOnSendHeaders,
keys::kOnResponseStarted
};
@@ -145,15 +145,13 @@ ListValue* GetResponseHeadersList(const net::HttpResponseHeaders* headers) {
return headers_value;
}
-ListValue* GetRequestHeadersList(const net::HttpRequestHeaders* headers) {
+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.value());
- headers_value->Append(header);
- }
+ for (net::HttpRequestHeaders::Iterator it(headers); it.GetNext(); ) {
+ DictionaryValue* header = new DictionaryValue();
+ header->SetString(keys::kHeaderNameKey, it.name());
+ header->SetString(keys::kHeaderValueKey, it.value());
+ headers_value->Append(header);
}
return headers_value;
}
@@ -348,16 +346,6 @@ int ExtensionWebRequestEventRouter::OnBeforeRequest(
if (!HasWebRequestScheme(request->url()))
return net::OK;
- // If this is an HTTP request, keep track of it. HTTP-specific events only
- // have the request ID, so we'll need to look up the URLRequest from that.
- // We need to do this even if no extension subscribes to OnBeforeRequest to
- // guarantee that |http_requests_| is populated if an extension subscribes
- // to OnBeforeSendHeaders or OnRequestSent.
- if (request->url().SchemeIs(chrome::kHttpScheme) ||
- request->url().SchemeIs(chrome::kHttpsScheme)) {
- http_requests_[request->identifier()] = request;
- }
-
int tab_id = -1;
int window_id = -1;
ResourceType::Type resource_type = ResourceType::LAST_TYPE;
@@ -426,7 +414,7 @@ int ExtensionWebRequestEventRouter::OnBeforeSendHeaders(
dict->SetDouble(keys::kTimeStampKey, base::Time::Now().ToDoubleT() * 1000);
if (extra_info_spec & ExtraInfoSpec::REQUEST_HEADERS)
- dict->Set(keys::kRequestHeadersKey, GetRequestHeadersList(headers));
+ dict->Set(keys::kRequestHeadersKey, GetRequestHeadersList(*headers));
// TODO(battre): implement request line.
args.Append(dict);
@@ -440,27 +428,20 @@ int ExtensionWebRequestEventRouter::OnBeforeSendHeaders(
return net::OK;
}
-void ExtensionWebRequestEventRouter::OnRequestSent(
+void ExtensionWebRequestEventRouter::OnSendHeaders(
void* profile,
ExtensionInfoMap* extension_info_map,
- uint64 request_id,
- const net::HostPortPair& socket_address,
+ net::URLRequest* request,
const net::HttpRequestHeaders& headers) {
if (!profile)
return;
base::Time time(base::Time::Now());
- HttpRequestMap::iterator iter = http_requests_.find(request_id);
- if (iter == http_requests_.end())
- return;
-
- net::URLRequest* request = iter->second;
-
if (!HasWebRequestScheme(request->url()))
return;
- if (GetAndSetSignaled(request->identifier(), kOnRequestSent))
+ if (GetAndSetSignaled(request->identifier(), kOnSendHeaders))
return;
ClearSignaled(request->identifier(), kOnBeforeRedirect);
@@ -468,7 +449,7 @@ void ExtensionWebRequestEventRouter::OnRequestSent(
int extra_info_spec = 0;
std::vector<const EventListener*> listeners =
GetMatchingListeners(profile, extension_info_map,
- keys::kOnRequestSent, request, &extra_info_spec);
+ keys::kOnSendHeaders, request, &extra_info_spec);
if (listeners.empty())
return;
@@ -477,10 +458,9 @@ void ExtensionWebRequestEventRouter::OnRequestSent(
dict->SetString(keys::kRequestIdKey,
base::Uint64ToString(request->identifier()));
dict->SetString(keys::kUrlKey, request->url().spec());
- dict->SetString(keys::kIpKey, socket_address.host());
dict->SetDouble(keys::kTimeStampKey, time.ToDoubleT() * 1000);
if (extra_info_spec & ExtraInfoSpec::REQUEST_HEADERS)
- dict->Set(keys::kRequestHeadersKey, GetRequestHeadersList(&headers));
+ dict->Set(keys::kRequestHeadersKey, GetRequestHeadersList(headers));
// TODO(battre): support "request line".
args.Append(dict);
@@ -505,7 +485,7 @@ void ExtensionWebRequestEventRouter::OnBeforeRedirect(
ClearSignaled(request->identifier(), kOnBeforeRequest);
ClearSignaled(request->identifier(), kOnBeforeSendHeaders);
- ClearSignaled(request->identifier(), kOnRequestSent);
+ ClearSignaled(request->identifier(), kOnSendHeaders);
int extra_info_spec = 0;
std::vector<const EventListener*> listeners =
@@ -516,6 +496,8 @@ void ExtensionWebRequestEventRouter::OnBeforeRedirect(
int http_status_code = request->GetResponseCode();
+ std::string response_ip = request->GetSocketAddress().host();
+
ListValue args;
DictionaryValue* dict = new DictionaryValue();
dict->SetString(keys::kRequestIdKey,
@@ -523,6 +505,8 @@ void ExtensionWebRequestEventRouter::OnBeforeRedirect(
dict->SetString(keys::kUrlKey, request->url().spec());
dict->SetString(keys::kRedirectUrlKey, new_location.spec());
dict->SetInteger(keys::kStatusCodeKey, http_status_code);
+ if (!response_ip.empty())
+ dict->SetString(keys::kIpKey, response_ip);
dict->SetDouble(keys::kTimeStampKey, time.ToDoubleT() * 1000);
if (extra_info_spec & ExtraInfoSpec::RESPONSE_HEADERS) {
dict->Set(keys::kResponseHeadersKey,
@@ -563,11 +547,15 @@ void ExtensionWebRequestEventRouter::OnResponseStarted(
if (request->response_headers())
response_code = request->response_headers()->response_code();
+ std::string response_ip = request->GetSocketAddress().host();
+
ListValue args;
DictionaryValue* dict = new DictionaryValue();
dict->SetString(keys::kRequestIdKey,
base::Uint64ToString(request->identifier()));
dict->SetString(keys::kUrlKey, request->url().spec());
+ if (!response_ip.empty())
+ dict->SetString(keys::kIpKey, response_ip);
dict->SetInteger(keys::kStatusCodeKey, response_code);
dict->SetDouble(keys::kTimeStampKey, time.ToDoubleT() * 1000);
if (extra_info_spec & ExtraInfoSpec::RESPONSE_HEADERS) {
@@ -609,12 +597,16 @@ void ExtensionWebRequestEventRouter::OnCompleted(
if (request->response_headers())
response_code = request->response_headers()->response_code();
+ std::string response_ip = request->GetSocketAddress().host();
+
ListValue args;
DictionaryValue* dict = new DictionaryValue();
dict->SetString(keys::kRequestIdKey,
base::Uint64ToString(request->identifier()));
dict->SetString(keys::kUrlKey, request->url().spec());
dict->SetInteger(keys::kStatusCodeKey, response_code);
+ if (!response_ip.empty())
+ dict->SetString(keys::kIpKey, response_ip);
dict->SetDouble(keys::kTimeStampKey, time.ToDoubleT() * 1000);
if (extra_info_spec & ExtraInfoSpec::RESPONSE_HEADERS) {
dict->Set(keys::kResponseHeadersKey,
@@ -651,11 +643,15 @@ void ExtensionWebRequestEventRouter::OnErrorOccurred(
if (listeners.empty())
return;
+ std::string response_ip = request->GetSocketAddress().host();
+
ListValue args;
DictionaryValue* dict = new DictionaryValue();
dict->SetString(keys::kRequestIdKey,
base::Uint64ToString(request->identifier()));
dict->SetString(keys::kUrlKey, request->url().spec());
+ if (!response_ip.empty())
+ dict->SetString(keys::kIpKey, response_ip);
dict->SetString(keys::kErrorKey,
net::ErrorToString(request->status().os_error()));
dict->SetDouble(keys::kTimeStampKey, time.ToDoubleT() * 1000);
@@ -668,17 +664,6 @@ void ExtensionWebRequestEventRouter::OnURLRequestDestroyed(
void* profile, net::URLRequest* request) {
blocked_requests_.erase(request->identifier());
signaled_requests_.erase(request->identifier());
- http_requests_.erase(request->identifier());
-}
-
-void ExtensionWebRequestEventRouter::OnHttpTransactionDestroyed(
- void* profile, uint64 request_id) {
- if (blocked_requests_.find(request_id) != blocked_requests_.end() &&
- blocked_requests_[request_id].event == kOnBeforeSendHeaders) {
- // Ensure we don't call into the deleted HttpTransaction.
- blocked_requests_[request_id].callback = NULL;
- blocked_requests_[request_id].request_headers = NULL;
- }
}
bool ExtensionWebRequestEventRouter::DispatchEvent(
diff --git a/chrome/browser/extensions/extension_webrequest_api.h b/chrome/browser/extensions/extension_webrequest_api.h
index 87395c1..2dd415c 100644
--- a/chrome/browser/extensions/extension_webrequest_api.h
+++ b/chrome/browser/extensions/extension_webrequest_api.h
@@ -45,7 +45,7 @@ class ExtensionWebRequestEventRouter {
kInvalidEvent = 0,
kOnBeforeRequest = 1 << 0,
kOnBeforeSendHeaders = 1 << 1,
- kOnRequestSent = 1 << 2,
+ kOnSendHeaders = 1 << 2,
kOnBeforeRedirect = 1 << 3,
kOnResponseStarted = 1 << 4,
kOnErrorOccurred = 1 << 5,
@@ -131,12 +131,11 @@ class ExtensionWebRequestEventRouter {
net::CompletionCallback* callback,
net::HttpRequestHeaders* headers);
- // Dispatches the onRequestSent event. This is fired for HTTP(s) requests
+ // Dispatches the onSendHeaders event. This is fired for HTTP(s) requests
// only.
- void OnRequestSent(void* profile,
+ void OnSendHeaders(void* profile,
ExtensionInfoMap* extension_info_map,
- uint64 request_id,
- const net::HostPortPair& socket_address,
+ net::URLRequest* request,
const net::HttpRequestHeaders& headers);
// Dispatches the onBeforeRedirect event. This is fired for HTTP(s) requests
@@ -164,7 +163,6 @@ class ExtensionWebRequestEventRouter {
// Notifications when objects are going away.
void OnURLRequestDestroyed(void* profile, net::URLRequest* request);
- void OnHttpTransactionDestroyed(void* profile, uint64 request_id);
// Called when an event listener handles a blocking event and responds.
void OnEventHandled(
@@ -207,7 +205,6 @@ class ExtensionWebRequestEventRouter {
typedef std::map<std::string, std::set<EventListener> > ListenerMapForProfile;
typedef std::map<void*, ListenerMapForProfile> ListenerMap;
typedef std::map<uint64, BlockedRequest> BlockedRequestMap;
- typedef std::map<uint64, net::URLRequest*> HttpRequestMap;
// Map of request_id -> bit vector of EventTypes already signaled
typedef std::map<uint64, int> SignaledRequestMap;
typedef std::map<void*, void*> CrossProfileMap;
@@ -280,10 +277,6 @@ class ExtensionWebRequestEventRouter {
// to respond.
BlockedRequestMap blocked_requests_;
- // A map of HTTP(s) network requests. We use this to look up the URLRequest
- // from the request ID given to us for HTTP-specific events.
- HttpRequestMap http_requests_;
-
// A map of request ids to a bitvector indicating which events have been
// signaled and should not be sent again.
SignaledRequestMap signaled_requests_;
diff --git a/chrome/browser/extensions/extension_webrequest_api_constants.cc b/chrome/browser/extensions/extension_webrequest_api_constants.cc
index e5f8caf..e627e18 100644
--- a/chrome/browser/extensions/extension_webrequest_api_constants.cc
+++ b/chrome/browser/extensions/extension_webrequest_api_constants.cc
@@ -29,7 +29,7 @@ const char kOnBeforeSendHeaders[] =
const char kOnCompleted[] = "experimental.webRequest.onCompleted";
const char kOnErrorOccurred[] = "experimental.webRequest.onErrorOccurred";
const char kOnResponseStarted[] = "experimental.webRequest.onResponseStarted";
-const char kOnRequestSent[] = "experimental.webRequest.onRequestSent";
+const char kOnSendHeaders[] = "experimental.webRequest.onSendHeaders";
const char kInvalidRedirectUrl[] = "redirectUrl '*' is not a valid URL.";
const char kInvalidBlockingResponse[] =
diff --git a/chrome/browser/extensions/extension_webrequest_api_constants.h b/chrome/browser/extensions/extension_webrequest_api_constants.h
index 074ac9c..bc3f5ba 100644
--- a/chrome/browser/extensions/extension_webrequest_api_constants.h
+++ b/chrome/browser/extensions/extension_webrequest_api_constants.h
@@ -35,7 +35,7 @@ extern const char kOnBeforeSendHeaders[];
extern const char kOnCompleted[];
extern const char kOnErrorOccurred[];
extern const char kOnResponseStarted[];
-extern const char kOnRequestSent[];
+extern const char kOnSendHeaders[];
// Error messages.
extern const char kInvalidRedirectUrl[];
diff --git a/chrome/browser/net/chrome_network_delegate.cc b/chrome/browser/net/chrome_network_delegate.cc
index 29213ad..d5a27ce 100644
--- a/chrome/browser/net/chrome_network_delegate.cc
+++ b/chrome/browser/net/chrome_network_delegate.cc
@@ -82,13 +82,11 @@ int ChromeNetworkDelegate::OnBeforeSendHeaders(
profile_, extension_info_map_.get(), request, callback, headers);
}
-void ChromeNetworkDelegate::OnRequestSent(
- uint64 request_id,
- const net::HostPortPair& socket_address,
+void ChromeNetworkDelegate::OnSendHeaders(
+ net::URLRequest* request,
const net::HttpRequestHeaders& headers) {
- ExtensionWebRequestEventRouter::GetInstance()->OnRequestSent(
- profile_, extension_info_map_.get(), request_id,
- socket_address, headers);
+ ExtensionWebRequestEventRouter::GetInstance()->OnSendHeaders(
+ profile_, extension_info_map_.get(), request, headers);
}
void ChromeNetworkDelegate::OnBeforeRedirect(net::URLRequest* request,
@@ -134,11 +132,6 @@ void ChromeNetworkDelegate::OnURLRequestDestroyed(net::URLRequest* request) {
profile_, request);
}
-void ChromeNetworkDelegate::OnHttpTransactionDestroyed(uint64 request_id) {
- ExtensionWebRequestEventRouter::GetInstance()->OnHttpTransactionDestroyed(
- profile_, request_id);
-}
-
void ChromeNetworkDelegate::OnPACScriptError(int line_number,
const string16& error) {
ExtensionProxyEventRouter::GetInstance()->OnPACScriptError(
diff --git a/chrome/browser/net/chrome_network_delegate.h b/chrome/browser/net/chrome_network_delegate.h
index 1959bc9..182b069 100644
--- a/chrome/browser/net/chrome_network_delegate.h
+++ b/chrome/browser/net/chrome_network_delegate.h
@@ -47,17 +47,17 @@ class ChromeNetworkDelegate : public net::NetworkDelegate {
virtual int OnBeforeSendHeaders(net::URLRequest* request,
net::CompletionCallback* callback,
net::HttpRequestHeaders* headers) OVERRIDE;
- virtual void OnRequestSent(uint64 request_id,
- const net::HostPortPair& socket_address,
- const net::HttpRequestHeaders& headers);
+ virtual void OnSendHeaders(net::URLRequest* request,
+ const net::HttpRequestHeaders& headers) OVERRIDE;
virtual void OnBeforeRedirect(net::URLRequest* request,
- const GURL& new_location);
- virtual void OnResponseStarted(net::URLRequest* request);
- virtual void OnRawBytesRead(const net::URLRequest& request, int bytes_read);
- virtual void OnCompleted(net::URLRequest* request);
- virtual void OnURLRequestDestroyed(net::URLRequest* request);
- virtual void OnHttpTransactionDestroyed(uint64 request_id);
- virtual void OnPACScriptError(int line_number, const string16& error);
+ const GURL& new_location) OVERRIDE;
+ 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 OnURLRequestDestroyed(net::URLRequest* request) OVERRIDE;
+ virtual void OnPACScriptError(int line_number,
+ const string16& error) OVERRIDE;
scoped_refptr<ExtensionEventRouterForwarder> event_router_;
void* profile_;
diff --git a/chrome/common/extensions/api/extension_api.json b/chrome/common/extensions/api/extension_api.json
index bb3b5c5..38a7782 100644
--- a/chrome/common/extensions/api/extension_api.json
+++ b/chrome/common/extensions/api/extension_api.json
@@ -4135,9 +4135,9 @@
}
},
{
- "name": "onRequestSent",
+ "name": "onSendHeaders",
"type": "function",
- "description": "Fires when a request is sent to the server.",
+ "description": "Fires just before a request is going to be sent to the server (modifications of prvious onBeforeSendHeaders callbacks are visible by the time onSendHeaders is fired).",
"parameters": [
{
"type": "object",
@@ -4145,7 +4145,6 @@
"properties": {
"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."},
"requestHeaders": {"$ref": "HttpHeaders", "optional": true, "description": "The HTTP request headers that have been sent out with this request."}
}
@@ -4181,6 +4180,7 @@
"properties": {
"requestId": {"type": "string", "description": "The ID of the request."},
"url": {"type": "string"},
+ "ip": {"type": "string", "optional": true, "description": "The server IP address that the request was actually sent to. Note that it may be a literal IPv6 address."},
"statusCode": {"type": "integer", "description": "Standard HTTP status code returned by the server."},
"timeStamp": {"type": "number", "description": "The time when the status line and response headers were received, in milliseconds since the epoch."},
"responseHeaders": {"$ref": "HttpHeaders", "optional": true, "description": "The HTTP response headers that were received along with this response."},
@@ -4218,6 +4218,7 @@
"properties": {
"requestId": {"type": "string", "description": "The ID of the request."},
"url": {"type": "string", "description": "The URL of the current request."},
+ "ip": {"type": "string", "optional": true, "description": "The server IP address that the request was actually sent to. Note that it may be a literal IPv6 address."},
"statusCode": {"type": "integer", "description": "Standard HTTP status code returned by the server."},
"redirectUrl": {"type": "string", "description": "The new URL."},
"timeStamp": {"type": "number", "description": "The time when the browser was about to make the redirect, in milliseconds since the epoch."},
@@ -4256,6 +4257,7 @@
"properties": {
"requestId": {"type": "string", "description": "The ID of the request."},
"url": {"type": "string", "description": "The URL of the current request."},
+ "ip": {"type": "string", "optional": true, "description": "The server IP address that the request was actually sent to. Note that it may be a literal IPv6 address."},
"statusCode": {"type": "integer", "description": "Standard HTTP status code returned by the server."},
"timeStamp": {"type": "number", "description": "The time when the response was received completely, in milliseconds since the epoch."},
"responseHeaders": {"$ref": "HttpHeaders", "optional": true, "description": "The HTTP response headers that were received along with this response."},
@@ -4293,6 +4295,7 @@
"properties": {
"requestId": {"type": "string", "description": "The ID of the request."},
"url": {"type": "string", "description": "The URL of the current request."},
+ "ip": {"type": "string", "optional": true, "description": "The server IP address that the request was actually sent to. Note that it may be a literal IPv6 address."},
"error": {"type": "string", "description": "The error description. This string is <em>not</em> guaranteed to remain backwards compatible between releases. You must not parse and act based upon its content."},
"timeStamp": {"type": "number", "description": "The time when the error occurred, in milliseconds since the epoch."}
}
diff --git a/chrome/common/extensions/docs/experimental.webRequest.html b/chrome/common/extensions/docs/experimental.webRequest.html
index f3ebc79..716035d 100644
--- a/chrome/common/extensions/docs/experimental.webRequest.html
+++ b/chrome/common/extensions/docs/experimental.webRequest.html
@@ -300,9 +300,9 @@
</li><li>
<a href="#event-onErrorOccurred">onErrorOccurred</a>
</li><li>
- <a href="#event-onRequestSent">onRequestSent</a>
- </li><li>
<a href="#event-onResponseStarted">onResponseStarted</a>
+ </li><li>
+ <a href="#event-onSendHeaders">onSendHeaders</a>
</li>
</ol>
</li>
@@ -727,6 +727,74 @@ unexpected results.
</div><div>
<div>
<dt>
+ <var>ip</var>
+ <em>
+
+ <!-- TYPE -->
+ <div style="display:inline">
+ (
+ <span class="optional">optional</span>
+ <span class="enum" style="display: none; ">enumerated</span>
+ <span id="typeTemplate">
+ <span style="display: none; ">
+ <a> Type</a>
+ </span>
+ <span>
+ <span style="display: none; ">
+ array of <span><span></span></span>
+ </span>
+ <span>string</span>
+ <span style="display: none; "></span>
+ </span>
+ </span>
+ )
+ </div>
+
+ </em>
+ </dt>
+ <dd class="todo" style="display: none; ">
+ Undocumented.
+ </dd>
+ <dd>The server IP address that the request was actually sent to. Note that it may be a literal IPv6 address.</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><div>
+ <div>
+ <dt>
<var>statusCode</var>
<em>
@@ -2776,6 +2844,74 @@ unexpected results.
</div><div>
<div>
<dt>
+ <var>ip</var>
+ <em>
+
+ <!-- TYPE -->
+ <div style="display:inline">
+ (
+ <span class="optional">optional</span>
+ <span class="enum" style="display: none; ">enumerated</span>
+ <span id="typeTemplate">
+ <span style="display: none; ">
+ <a> Type</a>
+ </span>
+ <span>
+ <span style="display: none; ">
+ array of <span><span></span></span>
+ </span>
+ <span>string</span>
+ <span style="display: none; "></span>
+ </span>
+ </span>
+ )
+ </div>
+
+ </em>
+ </dt>
+ <dd class="todo" style="display: none; ">
+ Undocumented.
+ </dd>
+ <dd>The server IP address that the request was actually sent to. Note that it may be a literal IPv6 address.</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><div>
+ <div>
+ <dt>
<var>statusCode</var>
<em>
@@ -3437,6 +3573,74 @@ unexpected results.
</div><div>
<div>
<dt>
+ <var>ip</var>
+ <em>
+
+ <!-- TYPE -->
+ <div style="display:inline">
+ (
+ <span class="optional">optional</span>
+ <span class="enum" style="display: none; ">enumerated</span>
+ <span id="typeTemplate">
+ <span style="display: none; ">
+ <a> Type</a>
+ </span>
+ <span>
+ <span style="display: none; ">
+ array of <span><span></span></span>
+ </span>
+ <span>string</span>
+ <span style="display: none; "></span>
+ </span>
+ </span>
+ )
+ </div>
+
+ </em>
+ </dt>
+ <dd class="todo" style="display: none; ">
+ Undocumented.
+ </dd>
+ <dd>The server IP address that the request was actually sent to. Note that it may be a literal IPv6 address.</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><div>
+ <div>
+ <dt>
<var>error</var>
<em>
@@ -3681,17 +3885,17 @@ unexpected results.
</div> <!-- /description -->
</div><div class="apiItem">
- <a name="event-onRequestSent"></a>
- <h4>onRequestSent</h4>
+ <a name="event-onResponseStarted"></a>
+ <h4>onResponseStarted</h4>
<div class="summary">
<!-- Note: intentionally longer 80 columns -->
- <span class="subdued">chrome.experimental.webRequest.</span><span>onRequestSent</span><span class="subdued">.addListener</span>(function(<span>object details</span>) <span class="subdued">{...}</span><span>, RequestFilter filter, array of string extraInfoSpec</span>));
+ <span class="subdued">chrome.experimental.webRequest.</span><span>onResponseStarted</span><span class="subdued">.addListener</span>(function(<span>object details</span>) <span class="subdued">{...}</span><span>, RequestFilter filter, array of string extraInfoSpec</span>));
</div>
<div class="description">
<p class="todo" style="display: none; ">Undocumented.</p>
- <p>Fires when a request is sent to the server.</p>
+ <p>Fires when the first byte of the response body is received. For HTTP requests, this means that the status line and response headers are available.</p>
<!-- LISTENER PARAMETERS -->
<div>
@@ -3891,7 +4095,7 @@ unexpected results.
<!-- TYPE -->
<div style="display:inline">
(
- <span class="optional" style="display: none; ">optional</span>
+ <span class="optional">optional</span>
<span class="enum" style="display: none; ">enumerated</span>
<span id="typeTemplate">
<span style="display: none; ">
@@ -3913,7 +4117,75 @@ unexpected results.
<dd class="todo" style="display: none; ">
Undocumented.
</dd>
- <dd>The server IP address that is actually connected to. Note that it may be a literal IPv6 address.</dd>
+ <dd>The server IP address that the request was actually sent to. Note that it may be a literal IPv6 address.</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><div>
+ <div>
+ <dt>
+ <var>statusCode</var>
+ <em>
+
+ <!-- TYPE -->
+ <div style="display:inline">
+ (
+ <span class="optional" style="display: none; ">optional</span>
+ <span class="enum" style="display: none; ">enumerated</span>
+ <span id="typeTemplate">
+ <span style="display: none; ">
+ <a> Type</a>
+ </span>
+ <span>
+ <span style="display: none; ">
+ array of <span><span></span></span>
+ </span>
+ <span>integer</span>
+ <span style="display: none; "></span>
+ </span>
+ </span>
+ )
+ </div>
+
+ </em>
+ </dt>
+ <dd class="todo" style="display: none; ">
+ Undocumented.
+ </dd>
+ <dd>Standard HTTP status code returned by the server.</dd>
<dd style="display: none; ">
This parameter was added in version
<b><span></span></b>.
@@ -3981,7 +4253,7 @@ unexpected results.
<dd class="todo" style="display: none; ">
Undocumented.
</dd>
- <dd>The time when the browser finished sending the request, in milliseconds since the epoch.</dd>
+ <dd>The time when the status line and response headers were received, in milliseconds since the epoch.</dd>
<dd style="display: none; ">
This parameter was added in version
<b><span></span></b>.
@@ -4021,7 +4293,7 @@ unexpected results.
</div><div>
<div>
<dt>
- <var>requestHeaders</var>
+ <var>responseHeaders</var>
<em>
<!-- TYPE -->
@@ -4049,7 +4321,75 @@ unexpected results.
<dd class="todo" style="display: none; ">
Undocumented.
</dd>
- <dd>The HTTP request headers that have been sent out with this request.</dd>
+ <dd>The HTTP response headers that were received along with this response.</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><div>
+ <div>
+ <dt>
+ <var>statusLine</var>
+ <em>
+
+ <!-- TYPE -->
+ <div style="display:inline">
+ (
+ <span class="optional">optional</span>
+ <span class="enum" style="display: none; ">enumerated</span>
+ <span id="typeTemplate">
+ <span style="display: none; ">
+ <a> Type</a>
+ </span>
+ <span>
+ <span style="display: none; ">
+ array of <span><span></span></span>
+ </span>
+ <span>string</span>
+ <span style="display: none; "></span>
+ </span>
+ </span>
+ )
+ </div>
+
+ </em>
+ </dt>
+ <dd class="todo" style="display: none; ">
+ Undocumented.
+ </dd>
+ <dd>HTTP status line of the response</dd>
<dd style="display: none; ">
This parameter was added in version
<b><span></span></b>.
@@ -4208,7 +4548,7 @@ unexpected results.
array of <span><span></span></span>
</span>
<span>string</span>
- <span>["requestLine", "requestHeaders"]</span>
+ <span>["statusLine", "responseHeaders"]</span>
</span>
</span></span>
</span>
@@ -4276,17 +4616,17 @@ unexpected results.
</div> <!-- /description -->
</div><div class="apiItem">
- <a name="event-onResponseStarted"></a>
- <h4>onResponseStarted</h4>
+ <a name="event-onSendHeaders"></a>
+ <h4>onSendHeaders</h4>
<div class="summary">
<!-- Note: intentionally longer 80 columns -->
- <span class="subdued">chrome.experimental.webRequest.</span><span>onResponseStarted</span><span class="subdued">.addListener</span>(function(<span>object details</span>) <span class="subdued">{...}</span><span>, RequestFilter filter, array of string extraInfoSpec</span>));
+ <span class="subdued">chrome.experimental.webRequest.</span><span>onSendHeaders</span><span class="subdued">.addListener</span>(function(<span>object details</span>) <span class="subdued">{...}</span><span>, RequestFilter filter, array of string extraInfoSpec</span>));
</div>
<div class="description">
<p class="todo" style="display: none; ">Undocumented.</p>
- <p>Fires when the first byte of the response body is received. For HTTP requests, this means that the status line and response headers are available.</p>
+ <p>Fires just before a request is going to be sent to the server (modifications of prvious onBeforeSendHeaders callbacks are visible by the time onSendHeaders is fired).</p>
<!-- LISTENER PARAMETERS -->
<div>
@@ -4480,74 +4820,6 @@ unexpected results.
</div><div>
<div>
<dt>
- <var>statusCode</var>
- <em>
-
- <!-- TYPE -->
- <div style="display:inline">
- (
- <span class="optional" style="display: none; ">optional</span>
- <span class="enum" style="display: none; ">enumerated</span>
- <span id="typeTemplate">
- <span style="display: none; ">
- <a> Type</a>
- </span>
- <span>
- <span style="display: none; ">
- array of <span><span></span></span>
- </span>
- <span>integer</span>
- <span style="display: none; "></span>
- </span>
- </span>
- )
- </div>
-
- </em>
- </dt>
- <dd class="todo" style="display: none; ">
- Undocumented.
- </dd>
- <dd>Standard HTTP status code returned by the server.</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><div>
- <div>
- <dt>
<var>timeStamp</var>
<em>
@@ -4576,7 +4848,7 @@ unexpected results.
<dd class="todo" style="display: none; ">
Undocumented.
</dd>
- <dd>The time when the status line and response headers were received, in milliseconds since the epoch.</dd>
+ <dd>The time when the browser finished sending the request, in milliseconds since the epoch.</dd>
<dd style="display: none; ">
This parameter was added in version
<b><span></span></b>.
@@ -4616,7 +4888,7 @@ unexpected results.
</div><div>
<div>
<dt>
- <var>responseHeaders</var>
+ <var>requestHeaders</var>
<em>
<!-- TYPE -->
@@ -4644,75 +4916,7 @@ unexpected results.
<dd class="todo" style="display: none; ">
Undocumented.
</dd>
- <dd>The HTTP response headers that were received along with this response.</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><div>
- <div>
- <dt>
- <var>statusLine</var>
- <em>
-
- <!-- TYPE -->
- <div style="display:inline">
- (
- <span class="optional">optional</span>
- <span class="enum" style="display: none; ">enumerated</span>
- <span id="typeTemplate">
- <span style="display: none; ">
- <a> Type</a>
- </span>
- <span>
- <span style="display: none; ">
- array of <span><span></span></span>
- </span>
- <span>string</span>
- <span style="display: none; "></span>
- </span>
- </span>
- )
- </div>
-
- </em>
- </dt>
- <dd class="todo" style="display: none; ">
- Undocumented.
- </dd>
- <dd>HTTP status line of the response</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>.
@@ -4871,7 +5075,7 @@ unexpected results.
array of <span><span></span></span>
</span>
<span>string</span>
- <span>["statusLine", "responseHeaders"]</span>
+ <span>["requestLine", "requestHeaders"]</span>
</span>
</span></span>
</span>
diff --git a/chrome/common/extensions/docs/samples.json b/chrome/common/extensions/docs/samples.json
index 44ae5eb..48804bae 100644
--- a/chrome/common/extensions/docs/samples.json
+++ b/chrome/common/extensions/docs/samples.json
@@ -84,8 +84,8 @@
"chrome.experimental.webRequest.onBeforeSendHeaders": "experimental.webRequest.html#event-onBeforeSendHeaders",
"chrome.experimental.webRequest.onCompleted": "experimental.webRequest.html#event-onCompleted",
"chrome.experimental.webRequest.onErrorOccurred": "experimental.webRequest.html#event-onErrorOccurred",
- "chrome.experimental.webRequest.onRequestSent": "experimental.webRequest.html#event-onRequestSent",
"chrome.experimental.webRequest.onResponseStarted": "experimental.webRequest.html#event-onResponseStarted",
+ "chrome.experimental.webRequest.onSendHeaders": "experimental.webRequest.html#event-onSendHeaders",
"chrome.extension.connect": "extension.html#method-connect",
"chrome.extension.getBackgroundPage": "extension.html#method-getBackgroundPage",
"chrome.extension.getExtensionTabs": "extension.html#method-getExtensionTabs",
diff --git a/chrome/test/data/extensions/api_test/webrequest/api/test.html b/chrome/test/data/extensions/api_test/webrequest/api/test.html
index d8f863f..d2724c9 100644
--- a/chrome/test/data/extensions/api_test/webrequest/api/test.html
+++ b/chrome/test/data/extensions/api_test/webrequest/api/test.html
@@ -5,7 +5,7 @@ chrome.test.runTests([
function(details) {});
chrome.experimental.webRequest.onBeforeSendHeaders.addListener(
function(details) {});
- chrome.experimental.webRequest.onRequestSent.addListener(
+ chrome.experimental.webRequest.onSendHeaders.addListener(
function(details) {});
chrome.experimental.webRequest.onBeforeRedirect.addListener(
function(details) {});
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 46eff6c..bbddc9b 100644
--- a/chrome/test/data/extensions/api_test/webrequest/events/test.html
+++ b/chrome/test/data/extensions/api_test/webrequest/events/test.html
@@ -180,9 +180,9 @@ function initListeners(filter, extraInfoSpec) {
function(details) {
return captureEvent("onBeforeSendHeaders", details);
}, filter, intersect(extraInfoSpec, ["blocking", "requestHeaders"]));
- chrome.experimental.webRequest.onRequestSent.addListener(
+ chrome.experimental.webRequest.onSendHeaders.addListener(
function(details) {
- return captureEvent("onRequestSent", details);
+ return captureEvent("onSendHeaders", details);
}, filter, intersect(extraInfoSpec, ["requestHeaders"]));
chrome.experimental.webRequest.onResponseStarted.addListener(
function(details) {
@@ -214,7 +214,7 @@ function removeListeners() {
}
helper(chrome.experimental.webRequest.onBeforeRequest);
helper(chrome.experimental.webRequest.onBeforeSendHeaders);
- helper(chrome.experimental.webRequest.onRequestSent);
+ helper(chrome.experimental.webRequest.onSendHeaders);
helper(chrome.experimental.webRequest.onResponseStarted);
helper(chrome.experimental.webRequest.onBeforeRedirect);
helper(chrome.experimental.webRequest.onCompleted);
@@ -240,13 +240,15 @@ runTests([
details: {
url: getURL("simpleLoad/a.html"),
statusCode: 200
+ // Request to chrome-extension:// url has no IP.
}
},
{ label: "a-onCompleted",
event: "onCompleted",
details: {
url: getURL("simpleLoad/a.html"),
- statusCode: 200
+ statusCode: 200,
+ // Request to chrome-extension:// url has no IP.
}
},
],
@@ -276,11 +278,10 @@ runTests([
requestHeadersValid: true
}
},
- { label: "onRequestSent-1",
- event: "onRequestSent",
+ { label: "onSendHeaders-1",
+ event: "onSendHeaders",
details: {
url: URL_HTTP_SIMPLE_LOAD_REDIRECT,
- ip: "127.0.0.1",
requestHeadersValid: true
}
},
@@ -291,6 +292,7 @@ runTests([
redirectUrl: URL_HTTP_SIMPLE_LOAD,
statusCode: 301,
responseHeadersExist: true,
+ ip: "127.0.0.1",
statusLine: "HTTP/1.0 301 Moved Permanently"
}
},
@@ -310,11 +312,10 @@ runTests([
requestHeadersValid: true
}
},
- { label: "onRequestSent-2",
- event: "onRequestSent",
+ { label: "onSendHeaders-2",
+ event: "onSendHeaders",
details: {
url: URL_HTTP_SIMPLE_LOAD,
- ip: "127.0.0.1",
requestHeadersValid: true
}
},
@@ -324,6 +325,7 @@ runTests([
url: URL_HTTP_SIMPLE_LOAD,
statusCode: 200,
responseHeadersExist: true,
+ ip: "127.0.0.1",
statusLine: "HTTP/1.0 200 OK",
}
},
@@ -332,15 +334,16 @@ runTests([
details: {
url: URL_HTTP_SIMPLE_LOAD,
statusCode: 200,
+ ip: "127.0.0.1",
responseHeadersExist: true,
statusLine: "HTTP/1.0 200 OK"
}
}
],
[ // event order
- ["onBeforeRequest-1", "onBeforeSendHeaders-1", "onRequestSent-1",
+ ["onBeforeRequest-1", "onBeforeSendHeaders-1", "onSendHeaders-1",
"onBeforeRedirect",
- "onBeforeRequest-2", "onBeforeSendHeaders-2", "onRequestSent-2",
+ "onBeforeRequest-2", "onBeforeSendHeaders-2", "onSendHeaders-2",
"onResponseStarted", "onCompleted"] ],
{}, // filter
["requestHeaders", "responseHeaders", "statusLine"]);
@@ -385,6 +388,7 @@ runTests([
details: {
url: getURL("complexLoad/a.html"),
statusCode: 200
+ // Request to chrome-extension:// url has no IP.
}
},
{ label: "b.html-onResponseStarted",
@@ -392,6 +396,7 @@ runTests([
details: {
url: getURL("complexLoad/b.html"),
statusCode: 200
+ // Request to chrome-extension:// url has no IP.
}
},
{ label: "b.jpg-onResponseStarted",
@@ -399,6 +404,7 @@ runTests([
details: {
url: getURL("complexLoad/b.jpg"),
statusCode: 200
+ // Request to chrome-extension:// url has no IP.
}
},
{ label: "a.html-onCompleted",
@@ -406,6 +412,7 @@ runTests([
details: {
url: getURL("complexLoad/a.html"),
statusCode: 200
+ // Request to chrome-extension:// url has no IP.
}
},
{ label: "b.html-onCompleted",
@@ -413,6 +420,7 @@ runTests([
details: {
url: getURL("complexLoad/b.html"),
statusCode: 200
+ // Request to chrome-extension:// url has no IP.
}
},
{ label: "b.jpg-onCompleted",
@@ -420,6 +428,7 @@ runTests([
details: {
url: getURL("complexLoad/b.jpg"),
statusCode: 200
+ // Request to chrome-extension:// url has no IP.
}
},
],
@@ -456,6 +465,7 @@ runTests([
details: {
url: getURL("complexLoad/a.html"),
error: "net::ERR_EMPTY_RESPONSE"
+ // Request to chrome-extension:// url has no IP.
}
},
],
@@ -490,6 +500,7 @@ runTests([
details: {
url: getURL("complexLoad/a.html"),
error: "net::ERR_ABORTED"
+ // Request to chrome-extension:// url has no IP.
}
},
{ label: "onBeforeRequest-2",
@@ -506,6 +517,7 @@ runTests([
details: {
url: getURL("simpleLoad/a.html"),
statusCode: 200
+ // Request to chrome-extension:// url has no IP.
}
},
{ label: "onCompleted",
@@ -513,6 +525,7 @@ runTests([
details: {
url: getURL("simpleLoad/a.html"),
statusCode: 200
+ // Request to chrome-extension:// url has no IP.
}
},
],
@@ -553,6 +566,7 @@ runTests([
details: {
url: getURL("complexLoad/a.html"),
statusCode: 200
+ // Request to chrome-extension:// url has no IP.
}
},
{ label: "b-onResponseStarted",
@@ -560,6 +574,7 @@ runTests([
details: {
url: getURL("complexLoad/b.jpg"),
statusCode: 200
+ // Request to chrome-extension:// url has no IP.
}
},
{ label: "a-onCompleted",
@@ -567,6 +582,7 @@ runTests([
details: {
url: getURL("complexLoad/a.html"),
statusCode: 200
+ // Request to chrome-extension:// url has no IP.
}
},
{ label: "b-onCompleted",
@@ -574,6 +590,7 @@ runTests([
details: {
url: getURL("complexLoad/b.jpg"),
statusCode: 200
+ // Request to chrome-extension:// url has no IP.
}
},
],
@@ -611,7 +628,8 @@ runTests([
event: "onErrorOccurred",
details: {
url: getURL("does_not_exist.html"),
- error: "net::ERR_FILE_NOT_FOUND"
+ error: "net::ERR_FILE_NOT_FOUND",
+ // Request to chrome-extension:// url has no IP.
}
},
],
@@ -643,30 +661,31 @@ runTests([
},
retval: {requestHeaders: [{name: "User-Agent", value: "FoobarUA"}]}
},
- { label: "onRequestSent",
- event: "onRequestSent",
+ { label: "onSendHeaders",
+ event: "onSendHeaders",
details: {
- url: URL_ECHO_USER_AGENT,
- ip: "127.0.0.1"
+ url: URL_ECHO_USER_AGENT
}
},
{ label: "onResponseStarted",
event: "onResponseStarted",
details: {
url: URL_ECHO_USER_AGENT,
- statusCode: 200
+ statusCode: 200,
+ ip: "127.0.0.1"
}
},
{ label: "onCompleted",
event: "onCompleted",
details: {
url: URL_ECHO_USER_AGENT,
- statusCode: 200
+ statusCode: 200,
+ ip: "127.0.0.1"
}
},
],
[ // event order
- ["onBeforeRequest", "onBeforeSendHeaders", "onRequestSent",
+ ["onBeforeRequest", "onBeforeSendHeaders", "onSendHeaders",
"onResponseStarted", "onCompleted"]
],
{}, ["blocking"]);
diff --git a/net/base/network_delegate.cc b/net/base/network_delegate.cc
index ecb9a01..fc4ff57 100644
--- a/net/base/network_delegate.cc
+++ b/net/base/network_delegate.cc
@@ -26,12 +26,10 @@ int NetworkDelegate::NotifyBeforeSendHeaders(URLRequest* request,
return OnBeforeSendHeaders(request, callback, headers);
}
-void NetworkDelegate::NotifyRequestSent(
- uint64 request_id,
- const HostPortPair& socket_address,
- const HttpRequestHeaders& headers) {
+void NetworkDelegate::NotifySendHeaders(URLRequest* request,
+ const HttpRequestHeaders& headers) {
DCHECK(CalledOnValidThread());
- OnRequestSent(request_id, socket_address, headers);
+ OnSendHeaders(request, headers);
}
void NetworkDelegate::NotifyResponseStarted(URLRequest* request) {
@@ -65,11 +63,6 @@ void NetworkDelegate::NotifyURLRequestDestroyed(URLRequest* request) {
OnURLRequestDestroyed(request);
}
-void NetworkDelegate::NotifyHttpTransactionDestroyed(uint64 request_id) {
- DCHECK(CalledOnValidThread());
- OnHttpTransactionDestroyed(request_id);
-}
-
void NetworkDelegate::NotifyPACScriptError(int line_number,
const string16& error) {
DCHECK(CalledOnValidThread());
diff --git a/net/base/network_delegate.h b/net/base/network_delegate.h
index df9fef8..0c0c556 100644
--- a/net/base/network_delegate.h
+++ b/net/base/network_delegate.h
@@ -43,8 +43,7 @@ class NetworkDelegate : public base::NonThreadSafe {
int NotifyBeforeSendHeaders(URLRequest* request,
CompletionCallback* callback,
HttpRequestHeaders* headers);
- void NotifyRequestSent(uint64 request_id,
- const HostPortPair& socket_address,
+ void NotifySendHeaders(URLRequest* request,
const HttpRequestHeaders& headers);
void NotifyBeforeRedirect(URLRequest* request,
const GURL& new_location);
@@ -52,7 +51,6 @@ class NetworkDelegate : public base::NonThreadSafe {
void NotifyRawBytesRead(const URLRequest& request, int bytes_read);
void NotifyCompleted(URLRequest* request);
void NotifyURLRequestDestroyed(URLRequest* request);
- void NotifyHttpTransactionDestroyed(uint64 request_id);
void NotifyPACScriptError(int line_number, const string16& error);
private:
@@ -77,10 +75,8 @@ class NetworkDelegate : public base::NonThreadSafe {
CompletionCallback* callback,
HttpRequestHeaders* headers) = 0;
- // 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,
+ // Called right before the HTTP request(s) are being sent to the network.
+ virtual void OnSendHeaders(URLRequest* request,
const HttpRequestHeaders& headers) = 0;
// Called right after a redirect response code was received.
@@ -101,10 +97,6 @@ class NetworkDelegate : public base::NonThreadSafe {
// a virtual method call.
virtual void OnURLRequestDestroyed(URLRequest* request) = 0;
- // Called when the HttpTransaction for the request with the given ID is
- // destroyed.
- virtual void OnHttpTransactionDestroyed(uint64 request_id) = 0;
-
// Corresponds to ProxyResolverJSBindings::OnError.
virtual void OnPACScriptError(int line_number, const string16& error) = 0;
};
diff --git a/net/http/http_cache_transaction.cc b/net/http/http_cache_transaction.cc
index ac3e373..b849dad 100644
--- a/net/http/http_cache_transaction.cc
+++ b/net/http/http_cache_transaction.cc
@@ -23,7 +23,6 @@
#include "net/base/load_flags.h"
#include "net/base/net_errors.h"
#include "net/base/net_log.h"
-#include "net/base/network_delegate.h"
#include "net/base/ssl_cert_request_info.h"
#include "net/base/ssl_config_service.h"
#include "net/disk_cache/disk_cache.h"
@@ -139,12 +138,6 @@ HttpCache::Transaction::~Transaction() {
// after this point.
callback_ = NULL;
- if (request_ && cache_ && cache_->GetSession() &&
- cache_->GetSession()->network_delegate()) {
- cache_->GetSession()->network_delegate()->NotifyHttpTransactionDestroyed(
- request_->request_id);
- }
-
if (cache_) {
if (entry_) {
bool cancel_request = reading_;
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc
index bbd19b3..d856d02 100644
--- a/net/http/http_network_transaction.cc
+++ b/net/http/http_network_transaction.cc
@@ -25,7 +25,6 @@
#include "net/base/load_flags.h"
#include "net/base/net_errors.h"
#include "net/base/net_util.h"
-#include "net/base/network_delegate.h"
#include "net/base/ssl_cert_request_info.h"
#include "net/base/ssl_connection_status_flags.h"
#include "net/base/upload_data_stream.h"
@@ -114,11 +113,6 @@ HttpNetworkTransaction::HttpNetworkTransaction(HttpNetworkSession* session)
}
HttpNetworkTransaction::~HttpNetworkTransaction() {
- if (request_ && session_->network_delegate()) {
- session_->network_delegate()->NotifyHttpTransactionDestroyed(
- request_->request_id);
- }
-
if (stream_.get()) {
HttpResponseHeaders* headers = GetResponseHeaders();
// TODO(mbelshe): The stream_ should be able to compute whether or not the
@@ -770,11 +764,6 @@ int HttpNetworkTransaction::DoSendRequest() {
}
int HttpNetworkTransaction::DoSendRequestComplete(int result) {
- if (session_->network_delegate()) {
- session_->network_delegate()->NotifyRequestSent(
- request_->request_id, response_.socket_address, request_headers_);
- }
-
if (result < 0)
return HandleIOError(result);
next_state_ = STATE_READ_HEADERS;
diff --git a/net/proxy/network_delegate_error_observer_unittest.cc b/net/proxy/network_delegate_error_observer_unittest.cc
index ca81258..5979909 100644
--- a/net/proxy/network_delegate_error_observer_unittest.cc
+++ b/net/proxy/network_delegate_error_observer_unittest.cc
@@ -35,8 +35,7 @@ class TestNetworkDelegate : public net::NetworkDelegate {
HttpRequestHeaders* headers) {
return net::OK;
}
- virtual void OnRequestSent(uint64 request_id,
- const HostPortPair& socket_address,
+ virtual void OnSendHeaders(URLRequest* request,
const HttpRequestHeaders& headers) {}
virtual void OnBeforeRedirect(URLRequest* request,
const GURL& new_location) {}
diff --git a/net/url_request/url_request.cc b/net/url_request/url_request.cc
index f058c2f..6187463 100644
--- a/net/url_request/url_request.cc
+++ b/net/url_request/url_request.cc
@@ -46,6 +46,7 @@ void StripPostSpecificHeaders(HttpRequestHeaders* headers) {
headers->RemoveHeader(HttpRequestHeaders::kOrigin);
}
+// TODO(battre): Delete this, see http://crbug.com/89321:
// This counter keeps track of the identifiers used for URL requests so far.
// 0 is reserved to represent an invalid ID.
uint64 g_next_url_request_identifier = 1;
@@ -730,7 +731,7 @@ void URLRequest::NotifyAuthRequired(AuthChallengeInfo* auth_info) {
//}
// This fixes URLRequestTestHTTP.BasicAuth but not
// URLRequestTestHTTP.BasicAuthWithCookies. In both cases we observe a
- // call sequence of OnBeforeSendHeaders -> OnRequestSent ->
+ // call sequence of OnBeforeSendHeaders -> OnSendHeaders ->
// OnBeforeSendHeaders.
if (delegate_)
diff --git a/net/url_request/url_request.h b/net/url_request/url_request.h
index de4ca27..def281f 100644
--- a/net/url_request/url_request.h
+++ b/net/url_request/url_request.h
@@ -682,6 +682,12 @@ class NET_API URLRequest : NON_EXPORTED_BASE(public base::NonThreadSafe) {
// this to determine which URLRequest to allocate sockets to first.
RequestPriority priority_;
+ // TODO(battre): The only consumer of the identifier_ is currently the
+ // web request API. We need to match identifiers of requests between the
+ // web request API and the web navigation API. As the URLRequest does not
+ // exist when the web navigation API is triggered, the tracking probably
+ // needs to be done outside of the URLRequest anyway. Therefore, this
+ // identifier should be deleted here. http://crbug.com/89321
// A globally unique identifier for this request.
const uint64 identifier_;
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc
index 3256c04..7ff619d 100644
--- a/net/url_request/url_request_http_job.cc
+++ b/net/url_request/url_request_http_job.cc
@@ -318,7 +318,7 @@ void URLRequestHttpJob::NotifyHeadersComplete() {
DCHECK(!response_info_->auth_challenge.get());
// TODO(battre): This breaks the webrequest API for
// URLRequestTestHTTP.BasicAuthWithCookies
- // where OnBeforeSendHeaders -> OnRequestSent -> OnBeforeSendHeaders
+ // where OnBeforeSendHeaders -> OnSendHeaders -> OnBeforeSendHeaders
// occurs.
RestartTransactionWithAuth(string16(), string16());
return;
@@ -380,6 +380,11 @@ void URLRequestHttpJob::StartTransactionInternal() {
int rv;
+ if (request_->context() && request_->context()->network_delegate()) {
+ request_->context()->network_delegate()->NotifySendHeaders(
+ request_, request_info_.extra_headers);
+ }
+
if (transaction_.get()) {
rv = transaction_->RestartWithAuth(username_, password_, &start_callback_);
username_.clear();
diff --git a/net/url_request/url_request_test_util.cc b/net/url_request/url_request_test_util.cc
index cc6f1b9..59d00f0 100644
--- a/net/url_request/url_request_test_util.cc
+++ b/net/url_request/url_request_test_util.cc
@@ -20,7 +20,7 @@ namespace {
// events in the wrong order.
const int kStageBeforeURLRequest = 1 << 0;
const int kStageBeforeSendHeaders = 1 << 1;
-const int kStageRequestSent = 1 << 2;
+const int kStageSendHeaders = 1 << 2;
const int kStageBeforeRedirect = 1 << 3;
const int kStageResponseStarted = 1 << 4;
const int kStageCompletedSuccess = 1 << 5;
@@ -359,31 +359,28 @@ int TestNetworkDelegate::OnBeforeSendHeaders(
EXPECT_TRUE(next_states_[req_id] & kStageBeforeSendHeaders) <<
event_order_[req_id];
next_states_[req_id] =
- kStageRequestSent |
+ kStageSendHeaders |
kStageCompletedError; // request canceled by delegate
- // In case we can answer a request from the cache we can respond directly.
- next_states_[req_id] |= kStageResponseStarted;
-
return net::OK;
}
-void TestNetworkDelegate::OnRequestSent(
- uint64 request_id,
- const net::HostPortPair& socket_address,
+void TestNetworkDelegate::OnSendHeaders(
+ net::URLRequest* request,
const net::HttpRequestHeaders& headers) {
- event_order_[request_id] += "OnRequestSent\n";
- InitRequestStatesIfNew(request_id);
- EXPECT_TRUE(next_states_[request_id] & kStageRequestSent) <<
- event_order_[request_id];
- next_states_[request_id] =
+ int req_id = request->identifier();
+ event_order_[req_id] += "OnSendHeaders\n";
+ InitRequestStatesIfNew(req_id);
+ EXPECT_TRUE(next_states_[req_id] & kStageSendHeaders) <<
+ event_order_[req_id];
+ next_states_[req_id] =
kStageBeforeRedirect |
kStageResponseStarted |
kStageCompletedError; // e.g. proxy resolution problem
// Basic authentication sends a second request from the URLRequestHttpJob
// layer before the URLRequest reports that a response has started.
- next_states_[request_id] |= kStageBeforeSendHeaders;
+ next_states_[req_id] |= kStageBeforeSendHeaders;
}
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 14cee1c..3bd1292 100644
--- a/net/url_request/url_request_test_util.h
+++ b/net/url_request/url_request_test_util.h
@@ -202,8 +202,7 @@ class TestNetworkDelegate : public net::NetworkDelegate {
virtual int OnBeforeSendHeaders(net::URLRequest* request,
net::CompletionCallback* callback,
net::HttpRequestHeaders* headers);
- virtual void OnRequestSent(uint64 request_id,
- const net::HostPortPair& socket_address,
+ virtual void OnSendHeaders(net::URLRequest* request,
const net::HttpRequestHeaders& headers);
virtual void OnBeforeRedirect(net::URLRequest* request,
const GURL& new_location);
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc
index 9e5092d..d929155 100644
--- a/net/url_request/url_request_unittest.cc
+++ b/net/url_request/url_request_unittest.cc
@@ -1497,11 +1497,6 @@ TEST_F(URLRequestTestHTTP, VaryHeader) {
}
// expect a cache hit
-
- // TODO(battre): We have a sequence OnBeforeSendHeaders -> OnResponseStarted
- // here because the cache hit does not trigger a OnRequestSent event.
- // Do we need it?
-
{
TestDelegate d;
URLRequest req(test_server_.GetURL("echoheadercache?foo"), &d);