summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbattre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-09 14:43:49 +0000
committerbattre@chromium.org <battre@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-09 14:43:49 +0000
commit8268c04853700c0cb5a307832160c35148a27ee7 (patch)
tree851f2badf5217987080edf9f787bc5a9c14f845f
parentbfda4f55dd00f1992309a1e3f5ab887987ac7c1f (diff)
downloadchromium_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
-rw-r--r--chrome/browser/extensions/extension_webrequest_api.cc17
-rw-r--r--chrome/browser/extensions/extension_webrequest_api.h1
-rw-r--r--chrome/browser/extensions/extension_webrequest_api_constants.cc1
-rw-r--r--chrome/browser/extensions/extension_webrequest_api_constants.h1
-rw-r--r--chrome/common/extensions/api/extension_api.json9
-rw-r--r--chrome/common/extensions/docs/experimental.webRequest.html204
-rw-r--r--chrome/test/data/extensions/api_test/webrequest/events/test.html17
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);
},