diff options
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); |