diff options
author | michaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-19 00:49:15 +0000 |
---|---|---|
committer | michaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-19 00:49:15 +0000 |
commit | c034941e26f9e62e7f5c9b58cd7a3f52bac1b1db (patch) | |
tree | f30ac577ee0832957e9df113393ab33e307b6697 /webkit/appcache/web_application_cache_host_impl.cc | |
parent | 2f69b38816cc86ffff8c255a6984376e2aa02c10 (diff) | |
download | chromium_src-c034941e26f9e62e7f5c9b58cd7a3f52bac1b1db.zip chromium_src-c034941e26f9e62e7f5c9b58cd7a3f52bac1b1db.tar.gz chromium_src-c034941e26f9e62e7f5c9b58cd7a3f52bac1b1db.tar.bz2 |
Defend against selectCache() being called multiple times. There is a bug filed upstream to fix the HTML parser such that
it won't generate multiple calls to this, but given the complexity of the parser I'm putting this defense directly in the
appcache system.
BUG=72986,73118
TEST=manually run Poppit
Review URL: http://codereview.chromium.org/6546004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@75481 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/appcache/web_application_cache_host_impl.cc')
-rw-r--r-- | webkit/appcache/web_application_cache_host_impl.cc | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/webkit/appcache/web_application_cache_host_impl.cc b/webkit/appcache/web_application_cache_host_impl.cc index 3d9deb9..0bdc11f 100644 --- a/webkit/appcache/web_application_cache_host_impl.cc +++ b/webkit/appcache/web_application_cache_host_impl.cc @@ -72,7 +72,8 @@ WebApplicationCacheHostImpl::WebApplicationCacheHostImpl( status_(UNCACHED), is_scheme_supported_(false), is_get_method_(false), - is_new_master_entry_(MAYBE) { + is_new_master_entry_(MAYBE), + was_select_cache_called_(false) { DCHECK(client && backend && (host_id_ != kNoHostId)); backend_->RegisterHost(host_id_); @@ -171,6 +172,10 @@ void WebApplicationCacheHostImpl::willStartSubResourceRequest( } void WebApplicationCacheHostImpl::selectCacheWithoutManifest() { + if (was_select_cache_called_) + return; + was_select_cache_called_ = true; + status_ = (document_response_.appCacheID() == kNoCacheId) ? UNCACHED : CHECKING; is_new_master_entry_ = NO; @@ -181,6 +186,10 @@ void WebApplicationCacheHostImpl::selectCacheWithoutManifest() { bool WebApplicationCacheHostImpl::selectCacheWithManifest( const WebURL& manifest_url) { + if (was_select_cache_called_) + return true; + was_select_cache_called_ = true; + GURL manifest_gurl(ClearUrlRef(manifest_url)); // 6.9.6 The application cache selection algorithm |