diff options
author | battre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-09 14:43:49 +0000 |
---|---|---|
committer | battre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-09 14:43:49 +0000 |
commit | 8268c04853700c0cb5a307832160c35148a27ee7 (patch) | |
tree | 851f2badf5217987080edf9f787bc5a9c14f845f | |
parent | bfda4f55dd00f1992309a1e3f5ab887987ac7c1f (diff) | |
download | chromium_src-8268c04853700c0cb5a307832160c35148a27ee7.zip chromium_src-8268c04853700c0cb5a307832160c35148a27ee7.tar.gz chromium_src-8268c04853700c0cb5a307832160c35148a27ee7.tar.bz2 |
Implemented statusLine field in extraInfoSpec of webRequest API
BUG=60101
TEST=no
Review URL: http://codereview.chromium.org/6928057
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@84615 0039d316-1c4b-4281-b951-d872f2087c98
7 files changed, 237 insertions, 13 deletions
diff --git a/chrome/browser/extensions/extension_webrequest_api.cc b/chrome/browser/extensions/extension_webrequest_api.cc index 5059d74..ed66a45 100644 --- a/chrome/browser/extensions/extension_webrequest_api.cc +++ b/chrome/browser/extensions/extension_webrequest_api.cc @@ -155,6 +155,12 @@ ListValue* GetResponseHeadersList(net::HttpResponseHeaders* headers) { return headers_value; } +// Creates a StringValue with the status line of |headers|. If |headers| is +// NULL, an empty string is returned. Ownership is passed to the caller. +StringValue* GetStatusLine(net::HttpResponseHeaders* headers) { + return new StringValue(headers ? headers->GetStatusLine() : ""); +} + } // namespace // Represents a single unique listener to an event, along with whatever filter @@ -507,7 +513,8 @@ void ExtensionWebRequestEventRouter::OnBeforeRedirect( dict->Set(keys::kResponseHeadersKey, GetResponseHeadersList(request->response_headers())); } - // TODO(battre): support "statusLine". + if (extra_info_spec & ExtraInfoSpec::STATUS_LINE) + dict->Set(keys::kStatusLineKey, GetStatusLine(request->response_headers())); args.Append(dict); DispatchEvent(profile_id, event_router, request, listeners, args); @@ -549,7 +556,8 @@ void ExtensionWebRequestEventRouter::OnResponseStarted( dict->Set(keys::kResponseHeadersKey, GetResponseHeadersList(request->response_headers())); } - // TODO(battre): support "statusLine". + if (extra_info_spec & ExtraInfoSpec::STATUS_LINE) + dict->Set(keys::kStatusLineKey, GetStatusLine(request->response_headers())); args.Append(dict); DispatchEvent(profile_id, event_router, request, listeners, args); @@ -591,7 +599,8 @@ void ExtensionWebRequestEventRouter::OnCompleted( dict->Set(keys::kResponseHeadersKey, GetResponseHeadersList(request->response_headers())); } - // TODO(battre): support "statusLine". + if (extra_info_spec & ExtraInfoSpec::STATUS_LINE) + dict->Set(keys::kStatusLineKey, GetStatusLine(request->response_headers())); args.Append(dict); DispatchEvent(profile_id, event_router, request, listeners, args); @@ -671,6 +680,8 @@ bool ExtensionWebRequestEventRouter::DispatchEvent( dict->Remove(keys::kRequestHeadersKey, NULL); if (!((*it)->extra_info_spec & ExtraInfoSpec::RESPONSE_HEADERS)) dict->Remove(keys::kResponseHeadersKey, NULL); + if (!((*it)->extra_info_spec & ExtraInfoSpec::STATUS_LINE)) + dict->Remove(keys::kStatusLineKey, NULL); base::JSONWriter::Write(args_filtered.get(), false, &json_args); event_router->DispatchEventToExtension( diff --git a/chrome/browser/extensions/extension_webrequest_api.h b/chrome/browser/extensions/extension_webrequest_api.h index af340f5d..4afe531 100644 --- a/chrome/browser/extensions/extension_webrequest_api.h +++ b/chrome/browser/extensions/extension_webrequest_api.h @@ -24,6 +24,7 @@ class DictionaryValue; class ExtensionEventRouterForwarder; class GURL; class ListValue; +class StringValue; namespace net { class HostPortPair; diff --git a/chrome/browser/extensions/extension_webrequest_api_constants.cc b/chrome/browser/extensions/extension_webrequest_api_constants.cc index 4269a03..e5f8caf 100644 --- a/chrome/browser/extensions/extension_webrequest_api_constants.cc +++ b/chrome/browser/extensions/extension_webrequest_api_constants.cc @@ -12,6 +12,7 @@ const char kMethodKey[] = "method"; const char kRedirectUrlKey[] = "redirectUrl"; const char kRequestIdKey[] = "requestId"; const char kStatusCodeKey[] = "statusCode"; +const char kStatusLineKey[] = "statusLine"; const char kTabIdKey[] = "tabId"; const char kTimeStampKey[] = "timeStamp"; const char kTypeKey[] = "type"; diff --git a/chrome/browser/extensions/extension_webrequest_api_constants.h b/chrome/browser/extensions/extension_webrequest_api_constants.h index b9f218f..074ac9c 100644 --- a/chrome/browser/extensions/extension_webrequest_api_constants.h +++ b/chrome/browser/extensions/extension_webrequest_api_constants.h @@ -17,6 +17,7 @@ extern const char kMethodKey[]; extern const char kRedirectUrlKey[]; extern const char kRequestIdKey[]; extern const char kStatusCodeKey[]; +extern const char kStatusLineKey[]; extern const char kTabIdKey[]; extern const char kTimeStampKey[]; extern const char kTypeKey[]; diff --git a/chrome/common/extensions/api/extension_api.json b/chrome/common/extensions/api/extension_api.json index 7db6f2c..a1c4834 100644 --- a/chrome/common/extensions/api/extension_api.json +++ b/chrome/common/extensions/api/extension_api.json @@ -3751,7 +3751,8 @@ "url": {"type": "string"}, "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."} + "responseHeaders": {"$ref": "HttpHeaders", "optional": true, "description": "The HTTP response headers that were received along with this response."}, + "statusLine": {"type": "string", "optional": true, "description": "HTTP status line of the response"} } } ], @@ -3788,7 +3789,8 @@ "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."}, - "responseHeaders": {"$ref": "HttpHeaders", "optional": true, "description": "The HTTP response headers that were received along with this redirect."} + "responseHeaders": {"$ref": "HttpHeaders", "optional": true, "description": "The HTTP response headers that were received along with this redirect."}, + "statusLine": {"type": "string", "optional": true, "description": "HTTP status line of the response"} } } ], @@ -3824,7 +3826,8 @@ "url": {"type": "string", "description": "The URL of the current request."}, "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."} + "responseHeaders": {"$ref": "HttpHeaders", "optional": true, "description": "The HTTP response headers that were received along with this response."}, + "statusLine": {"type": "string", "optional": true, "description": "HTTP status line of the response"} } } ], diff --git a/chrome/common/extensions/docs/experimental.webRequest.html b/chrome/common/extensions/docs/experimental.webRequest.html index 280a30a..0fbc86e 100644 --- a/chrome/common/extensions/docs/experimental.webRequest.html +++ b/chrome/common/extensions/docs/experimental.webRequest.html @@ -996,6 +996,74 @@ unexpected results. </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>. + You must omit this parameter in earlier versions, + and you may omit it in any version. If you require this + parameter, the manifest key + <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a> + can ensure that your extension won't be run in an earlier browser version. + </dd> + + <!-- OBJECT PROPERTIES --> + <dd style="display: none; "> + <dl> + <div> + <div> + </div> + </div> + </dl> + </dd> + + <!-- OBJECT METHODS --> + <dd style="display: none; "> + <div></div> + </dd> + + <!-- OBJECT EVENT FIELDS --> + <dd style="display: none; "> + <div></div> + </dd> + + <!-- FUNCTION PARAMETERS --> + <dd style="display: none; "> + <div></div> + </dd> + + </div> </div> </dl> </dd> @@ -2909,6 +2977,74 @@ unexpected results. </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>. + You must omit this parameter in earlier versions, + and you may omit it in any version. If you require this + parameter, the manifest key + <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a> + can ensure that your extension won't be run in an earlier browser version. + </dd> + + <!-- OBJECT PROPERTIES --> + <dd style="display: none; "> + <dl> + <div> + <div> + </div> + </div> + </dl> + </dd> + + <!-- OBJECT METHODS --> + <dd style="display: none; "> + <div></div> + </dd> + + <!-- OBJECT EVENT FIELDS --> + <dd style="display: none; "> + <div></div> + </dd> + + <!-- FUNCTION PARAMETERS --> + <dd style="display: none; "> + <div></div> + </dd> + + </div> </div> </dl> </dd> @@ -4477,6 +4613,74 @@ unexpected results. </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>. + You must omit this parameter in earlier versions, + and you may omit it in any version. If you require this + parameter, the manifest key + <a href="manifest.html#minimum_chrome_version">minimum_chrome_version</a> + can ensure that your extension won't be run in an earlier browser version. + </dd> + + <!-- OBJECT PROPERTIES --> + <dd style="display: none; "> + <dl> + <div> + <div> + </div> + </div> + </dl> + </dd> + + <!-- OBJECT METHODS --> + <dd style="display: none; "> + <div></div> + </dd> + + <!-- OBJECT EVENT FIELDS --> + <dd style="display: none; "> + <div></div> + </dd> + + <!-- FUNCTION PARAMETERS --> + <dd style="display: none; "> + <div></div> + </dd> + + </div> </div> </dl> </dd> diff --git a/chrome/test/data/extensions/api_test/webrequest/events/test.html b/chrome/test/data/extensions/api_test/webrequest/events/test.html index f2453ed..5b7930a 100644 --- a/chrome/test/data/extensions/api_test/webrequest/events/test.html +++ b/chrome/test/data/extensions/api_test/webrequest/events/test.html @@ -177,15 +177,15 @@ function initListeners(filter, extraInfoSpec) { chrome.experimental.webRequest.onResponseStarted.addListener( function(details) { return captureEvent("onResponseStarted", details); - }, filter, intersect(extraInfoSpec, ["responseHeaders"])); + }, filter, intersect(extraInfoSpec, ["responseHeaders", "statusLine"])); chrome.experimental.webRequest.onBeforeRedirect.addListener( function(details) { return captureEvent("onBeforeRedirect", details); - }, filter, intersect(extraInfoSpec, ["responseHeaders"])); + }, filter, intersect(extraInfoSpec, ["responseHeaders", "statusLine"])); chrome.experimental.webRequest.onCompleted.addListener( function(details) { return captureEvent("onCompleted", details); - }, filter, intersect(extraInfoSpec, ["responseHeaders"])); + }, filter, intersect(extraInfoSpec, ["responseHeaders", "statusLine"])); chrome.experimental.webRequest.onErrorOccurred.addListener( function(details) { return captureEvent("onErrorOccurred", details); @@ -279,7 +279,8 @@ runTests([ url: URL_HTTP_SIMPLE_LOAD_REDIRECT, redirectUrl: URL_HTTP_SIMPLE_LOAD, statusCode: 301, - responseHeadersExist: true + responseHeadersExist: true, + statusLine: "HTTP/1.0 301 Moved Permanently" } }, { label: "onBeforeRequest-2", @@ -310,7 +311,8 @@ runTests([ details: { url: URL_HTTP_SIMPLE_LOAD, statusCode: 200, - responseHeadersExist: true + responseHeadersExist: true, + statusLine: "HTTP/1.0 200 OK", } }, { label: "onCompleted", @@ -318,7 +320,8 @@ runTests([ details: { url: URL_HTTP_SIMPLE_LOAD, statusCode: 200, - responseHeadersExist: true + responseHeadersExist: true, + statusLine: "HTTP/1.0 200 OK" } } ], @@ -328,7 +331,7 @@ runTests([ "onBeforeRequest-2", "onBeforeSendHeaders-2", "onRequestSent-2", "onResponseStarted", "onCompleted"] ], {}, // filter - ["requestHeaders", "responseHeaders"]); + ["requestHeaders", "responseHeaders", "statusLine"]); navigateAndWait(URL_HTTP_SIMPLE_LOAD_REDIRECT); }, |