summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorbbudge@chromium.org <bbudge@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-28 20:12:34 +0000
committerbbudge@chromium.org <bbudge@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-28 20:12:34 +0000
commit4df191a5cac49fbc6b54baf3f492b34d1ad1e54a (patch)
treed67a6e2815f2ff410fa1fd26d0a60118962ac343 /webkit
parent4f8db3807e8d73dfaa6dc10837a20fb16e926054 (diff)
downloadchromium_src-4df191a5cac49fbc6b54baf3f492b34d1ad1e54a.zip
chromium_src-4df191a5cac49fbc6b54baf3f492b34d1ad1e54a.tar.gz
chromium_src-4df191a5cac49fbc6b54baf3f492b34d1ad1e54a.tar.bz2
Make WebURLLoaderMock handle redirects correctly in the case where the
client cancels while auditing the redirect. BUG=none TEST=webkit_unit_tests --gtest_filter= AssociatedURLLoaderTests.* Review URL: https://chromiumcodereview.appspot.com/9874008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@129467 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r--webkit/support/weburl_loader_mock_factory.cc14
-rw-r--r--webkit/support/weburl_loader_mock_factory.h3
2 files changed, 13 insertions, 4 deletions
diff --git a/webkit/support/weburl_loader_mock_factory.cc b/webkit/support/weburl_loader_mock_factory.cc
index d6bcf09..ccf3891 100644
--- a/webkit/support/weburl_loader_mock_factory.cc
+++ b/webkit/support/weburl_loader_mock_factory.cc
@@ -71,17 +71,18 @@ void WebURLLoaderMockFactory::ServeAsynchronousRequests() {
WebURLError error;
WebData data;
LoadRequest(request, &response, &error, &data);
- // Follow any redirect chain.
+ // Follow any redirects while the loader is still active.
while (response.httpStatusCode() >= 300 &&
response.httpStatusCode() < 400) {
WebURLRequest newRequest = loader->ServeRedirect(response);
- if (loader->isDeferred())
+ if (!IsPending(loader) || loader->isDeferred())
break;
LoadRequest(newRequest, &response, &error, &data);
}
- if (!loader->isDeferred())
+ // Serve the request if the loader is still active.
+ if (IsPending(loader) && !loader->isDeferred())
loader->ServeAsynchronousRequest(response, data, error);
- // If the load has been canceled, the loader may not be in the map.
+ // The loader might have already been removed.
pending_loaders_.erase(loader);
}
}
@@ -136,6 +137,11 @@ void WebURLLoaderMockFactory::LoadRequest(const WebURLRequest& request,
*response = iter->second.response;
}
+bool WebURLLoaderMockFactory::IsPending(WebURLLoaderMock* loader) {
+ LoaderToRequestMap::iterator iter = pending_loaders_.find(loader);
+ return iter != pending_loaders_.end();
+}
+
// static
bool WebURLLoaderMockFactory::ReadFile(const FilePath& file_path,
WebData* data) {
diff --git a/webkit/support/weburl_loader_mock_factory.h b/webkit/support/weburl_loader_mock_factory.h
index 090eb4a..6c9d80a 100644
--- a/webkit/support/weburl_loader_mock_factory.h
+++ b/webkit/support/weburl_loader_mock_factory.h
@@ -76,6 +76,9 @@ class WebURLLoaderMockFactory {
WebKit::WebURLError* error,
WebKit::WebData* data);
+ // Checks if the loader is pending. Otherwise, it may have been deleted.
+ bool IsPending(WebURLLoaderMock* loader);
+
// Reads |m_filePath| and puts its content in |data|.
// Returns true if it successfully read the file.
static bool ReadFile(const FilePath& file_path, WebKit::WebData* data);