summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorbattre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-14 19:26:10 +0000
committerbattre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-14 19:26:10 +0000
commit5796dc94436c7d92b0b913aeb091ff6ea98ee575 (patch)
tree139f193789e8b2f412eaa4574b0af916fb7e896d /chrome
parentf667e2ee48c8347341b5dc18a409ee7f564cb266 (diff)
downloadchromium_src-5796dc94436c7d92b0b913aeb091ff6ea98ee575.zip
chromium_src-5796dc94436c7d92b0b913aeb091ff6ea98ee575.tar.gz
chromium_src-5796dc94436c7d92b0b913aeb091ff6ea98ee575.tar.bz2
Replace onRequestSent with onSendHeaders in webrequest API
This CL replaces the onRequestSent signal of the webrequest API with a new onSendHeader signal. The sequence is now: onBeforeRequest -> onBeforeSendHeaders -> onSendHeaders. This change allows us to completely remove the webrequest API from the network transaction layer and stay in the URL request layer. That solve the problem that the network layer may convert one URLRequest to multiple HTTP requests which should be transparent to the webrequest API. It also solves the problem that requests answered from the cache did not trigger an onRequestSent event. Given the choice of removing onRequestSent completely and replacing it with onSendHeaders, I chose the latter so that extensions can see the headers sent to the network after other extensions had a chance to modify them. BUG=no TEST=no Review URL: http://codereview.chromium.org/7353021 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@92584 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-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
11 files changed, 457 insertions, 260 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"]);