Add WebURLLoaderMockFactory::GetLastHandledAsynchronousRequest.

This provides a way of getting the last request that was actually (mock) served,
so that WebKit unit tests can, e.g., inspect headers that were "actually" sent
out.

BUG=http://crbug.com/134615 and https://bugs.webkit.org/show_bug.cgi?id=90893
TEST=see WebKit bug (forthcoming WebKit unit test)

Review URL: https://chromiumcodereview.appspot.com/10735037

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@145960 0039d316-1c4b-4281-b951-d872f2087c98
parent 3d7c43f8
......@@ -487,6 +487,11 @@ void ServeAsynchronousMockedRequests() {
ServeAsynchronousRequests();
}
WebKit::WebURLRequest GetLastHandledAsynchronousMockedRequest() {
return test_environment->webkit_platform_support()->url_loader_factory()->
GetLastHandledAsynchronousRequest();
}
// Wrapper for debug_util
bool BeingDebugged() {
return base::debug::BeingDebugged();
......
......@@ -129,6 +129,9 @@ void UnregisterAllMockedURLs();
// returns all the pending requests have been processed.
void ServeAsynchronousMockedRequests();
// Returns the last request that handled by |ServeAsynchronousMockedRequests()|.
WebKit::WebURLRequest GetLastHandledAsynchronousMockedRequest();
// Wrappers to minimize dependecy.
// -------- Debugging
......
......@@ -61,6 +61,7 @@ void WebURLLoaderMockFactory::UnregisterAllURLs() {
}
void WebURLLoaderMockFactory::ServeAsynchronousRequests() {
last_handled_asynchronous_request_.reset();
// Serving a request might trigger more requests, so we cannot iterate on
// pending_loaders_ as it might get modified.
while (!pending_loaders_.empty()) {
......@@ -70,6 +71,7 @@ void WebURLLoaderMockFactory::ServeAsynchronousRequests() {
WebURLResponse response;
WebURLError error;
WebData data;
last_handled_asynchronous_request_ = request;
LoadRequest(request, &response, &error, &data);
// Follow any redirects while the loader is still active.
while (response.httpStatusCode() >= 300 &&
......@@ -77,6 +79,7 @@ void WebURLLoaderMockFactory::ServeAsynchronousRequests() {
WebURLRequest newRequest = loader->ServeRedirect(response);
if (!IsPending(loader) || loader->isDeferred())
break;
last_handled_asynchronous_request_ = newRequest;
LoadRequest(newRequest, &response, &error, &data);
}
// Serve the request if the loader is still active.
......@@ -87,6 +90,11 @@ void WebURLLoaderMockFactory::ServeAsynchronousRequests() {
}
}
WebKit::WebURLRequest
WebURLLoaderMockFactory::GetLastHandledAsynchronousRequest() {
return last_handled_asynchronous_request_;
}
bool WebURLLoaderMockFactory::IsMockedURL(const WebKit::WebURL& url) {
return url_to_reponse_info_.find(url) != url_to_reponse_info_.end();
}
......
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
......@@ -52,6 +52,9 @@ class WebURLLoaderMockFactory {
// Serves all the pending asynchronous requests.
void ServeAsynchronousRequests();
// Returns the last request handled by |ServeAsynchronousRequests()|.
WebKit::WebURLRequest GetLastHandledAsynchronousRequest();
// Returns true if |url| was registered for being mocked.
bool IsMockedURL(const WebKit::WebURL& url);
......@@ -91,6 +94,8 @@ class WebURLLoaderMockFactory {
typedef std::map<WebKit::WebURL, ResponseInfo> URLToResponseMap;
URLToResponseMap url_to_reponse_info_;
WebKit::WebURLRequest last_handled_asynchronous_request_;
DISALLOW_COPY_AND_ASSIGN(WebURLLoaderMockFactory);
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment