diff options
author | bbudge@chromium.org <bbudge@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-28 20:12:34 +0000 |
---|---|---|
committer | bbudge@chromium.org <bbudge@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-28 20:12:34 +0000 |
commit | 4df191a5cac49fbc6b54baf3f492b34d1ad1e54a (patch) | |
tree | d67a6e2815f2ff410fa1fd26d0a60118962ac343 /webkit | |
parent | 4f8db3807e8d73dfaa6dc10837a20fb16e926054 (diff) | |
download | chromium_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.cc | 14 | ||||
-rw-r--r-- | webkit/support/weburl_loader_mock_factory.h | 3 |
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); |