Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(853)

Side by Side Diff: webkit/appcache/appcache_storage_impl.cc

Issue 3529009: Fix http/tests/appcache/foreign-fallback.html (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "webkit/appcache/appcache_storage_impl.h" 5 #include "webkit/appcache/appcache_storage_impl.h"
6 6
7 #include "app/sql/connection.h" 7 #include "app/sql/connection.h"
8 #include "app/sql/transaction.h" 8 #include "app/sql/transaction.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 } 546 }
547 } 547 }
548 548
549 virtual void Run(); 549 virtual void Run();
550 virtual void RunCompleted(); 550 virtual void RunCompleted();
551 551
552 GURL url_; 552 GURL url_;
553 std::set<int64> cache_ids_in_use_; 553 std::set<int64> cache_ids_in_use_;
554 AppCacheEntry entry_; 554 AppCacheEntry entry_;
555 AppCacheEntry fallback_entry_; 555 AppCacheEntry fallback_entry_;
556 GURL fallback_url_;
556 int64 cache_id_; 557 int64 cache_id_;
557 GURL manifest_url_; 558 GURL manifest_url_;
558 }; 559 };
559 560
560 namespace { 561 namespace {
561 bool SortByLength( 562 bool SortByLength(
562 const AppCacheDatabase::FallbackNameSpaceRecord& lhs, 563 const AppCacheDatabase::FallbackNameSpaceRecord& lhs,
563 const AppCacheDatabase::FallbackNameSpaceRecord& rhs) { 564 const AppCacheDatabase::FallbackNameSpaceRecord& rhs) {
564 return lhs.namespace_url.spec().length() > rhs.namespace_url.spec().length(); 565 return lhs.namespace_url.spec().length() > rhs.namespace_url.spec().length();
565 } 566 }
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 630
630 AppCacheDatabase::EntryRecord entry_record; 631 AppCacheDatabase::EntryRecord entry_record;
631 if (take_new_candidate && 632 if (take_new_candidate &&
632 database_->FindEntry(iter->cache_id, iter->fallback_entry_url, 633 database_->FindEntry(iter->cache_id, iter->fallback_entry_url,
633 &entry_record)) { 634 &entry_record)) {
634 AppCacheDatabase::GroupRecord group_record; 635 AppCacheDatabase::GroupRecord group_record;
635 if (!database_->FindGroupForCache(iter->cache_id, &group_record)) { 636 if (!database_->FindGroupForCache(iter->cache_id, &group_record)) {
636 NOTREACHED() << "A cache without a group is not expected."; 637 NOTREACHED() << "A cache without a group is not expected.";
637 continue; 638 continue;
638 } 639 }
640 if (entry_record.flags & AppCacheEntry::FOREIGN)
641 continue;
kinuko 2010/11/02 07:47:23 do we want to check this before looking up a group
michaeln 2010/11/02 20:25:36 Yes, thank you!
639 cache_id_ = iter->cache_id; 642 cache_id_ = iter->cache_id;
643 fallback_url_ = iter->fallback_entry_url;
640 manifest_url_ = group_record.manifest_url; 644 manifest_url_ = group_record.manifest_url;
641 fallback_entry_ = AppCacheEntry( 645 fallback_entry_ = AppCacheEntry(
642 entry_record.flags, entry_record.response_id); 646 entry_record.flags, entry_record.response_id);
643 if (is_cache_in_use) 647 if (is_cache_in_use)
644 break; // Stop iterating since we favor hits from in-use caches. 648 break; // Stop iterating since we favor hits from in-use caches.
645 candidate_fallback_namespace = iter->namespace_url; 649 candidate_fallback_namespace = iter->namespace_url;
646 has_candidate = true; 650 has_candidate = true;
647 } 651 }
648 } 652 }
649 } 653 }
650 } 654 }
651 655
652 void AppCacheStorageImpl::FindMainResponseTask::RunCompleted() { 656 void AppCacheStorageImpl::FindMainResponseTask::RunCompleted() {
653 storage_->CheckPolicyAndCallOnMainResponseFound( 657 storage_->CheckPolicyAndCallOnMainResponseFound(
654 &delegates_, url_, entry_, fallback_entry_, cache_id_, manifest_url_); 658 &delegates_, url_, entry_, fallback_url_, fallback_entry_,
659 cache_id_, manifest_url_);
655 } 660 }
656 661
657 // MarkEntryAsForeignTask ------- 662 // MarkEntryAsForeignTask -------
658 663
659 class AppCacheStorageImpl::MarkEntryAsForeignTask : public DatabaseTask { 664 class AppCacheStorageImpl::MarkEntryAsForeignTask : public DatabaseTask {
660 public: 665 public:
661 MarkEntryAsForeignTask( 666 MarkEntryAsForeignTask(
662 AppCacheStorageImpl* storage, const GURL& url, int64 cache_id) 667 AppCacheStorageImpl* storage, const GURL& url, int64 cache_id)
663 : DatabaseTask(storage), cache_id_(cache_id), entry_url_(url) {} 668 : DatabaseTask(storage), cache_id_(cache_id), entry_url_(url) {}
664 669
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
1040 task->Schedule(); 1045 task->Schedule();
1041 } 1046 }
1042 1047
1043 void AppCacheStorageImpl::DeliverShortCircuitedFindMainResponse( 1048 void AppCacheStorageImpl::DeliverShortCircuitedFindMainResponse(
1044 const GURL& url, AppCacheEntry found_entry, 1049 const GURL& url, AppCacheEntry found_entry,
1045 scoped_refptr<AppCacheGroup> group, scoped_refptr<AppCache> cache, 1050 scoped_refptr<AppCacheGroup> group, scoped_refptr<AppCache> cache,
1046 scoped_refptr<DelegateReference> delegate_ref) { 1051 scoped_refptr<DelegateReference> delegate_ref) {
1047 if (delegate_ref->delegate) { 1052 if (delegate_ref->delegate) {
1048 DelegateReferenceVector delegates(1, delegate_ref); 1053 DelegateReferenceVector delegates(1, delegate_ref);
1049 CheckPolicyAndCallOnMainResponseFound( 1054 CheckPolicyAndCallOnMainResponseFound(
1050 &delegates, url, found_entry, AppCacheEntry(), 1055 &delegates, url, found_entry,
1056 GURL(), AppCacheEntry(),
1051 cache.get() ? cache->cache_id() : kNoCacheId, 1057 cache.get() ? cache->cache_id() : kNoCacheId,
1052 group.get() ? group->manifest_url() : GURL()); 1058 group.get() ? group->manifest_url() : GURL());
1053 } 1059 }
1054 } 1060 }
1055 1061
1056 void AppCacheStorageImpl::CheckPolicyAndCallOnMainResponseFound( 1062 void AppCacheStorageImpl::CheckPolicyAndCallOnMainResponseFound(
1057 DelegateReferenceVector* delegates, const GURL& url, 1063 DelegateReferenceVector* delegates,
1058 const AppCacheEntry& entry, const AppCacheEntry& fallback_entry, 1064 const GURL& url, const AppCacheEntry& entry,
1065 const GURL& fallback_url, const AppCacheEntry& fallback_entry,
1059 int64 cache_id, const GURL& manifest_url) { 1066 int64 cache_id, const GURL& manifest_url) {
1060 if (!manifest_url.is_empty()) { 1067 if (!manifest_url.is_empty()) {
1061 // Check the policy prior to returning a main resource from the appcache. 1068 // Check the policy prior to returning a main resource from the appcache.
1062 AppCachePolicy* policy = service()->appcache_policy(); 1069 AppCachePolicy* policy = service()->appcache_policy();
1063 if (policy && !policy->CanLoadAppCache(manifest_url)) { 1070 if (policy && !policy->CanLoadAppCache(manifest_url)) {
1064 FOR_EACH_DELEGATE( 1071 FOR_EACH_DELEGATE(
1065 (*delegates), 1072 (*delegates),
1066 OnMainResponseFound(url, AppCacheEntry(), AppCacheEntry(), 1073 OnMainResponseFound(url, AppCacheEntry(),
1074 GURL(), AppCacheEntry(),
1067 kNoCacheId, manifest_url, true)); 1075 kNoCacheId, manifest_url, true));
1068 return; 1076 return;
1069 } 1077 }
1070 } 1078 }
1071 1079
1072 FOR_EACH_DELEGATE( 1080 FOR_EACH_DELEGATE(
1073 (*delegates), 1081 (*delegates),
1074 OnMainResponseFound(url, entry, fallback_entry, 1082 OnMainResponseFound(url, entry,
1083 fallback_url, fallback_entry,
1075 cache_id, manifest_url, false)); 1084 cache_id, manifest_url, false));
1076 } 1085 }
1077 1086
1078 void AppCacheStorageImpl::FindResponseForSubRequest( 1087 void AppCacheStorageImpl::FindResponseForSubRequest(
1079 AppCache* cache, const GURL& url, 1088 AppCache* cache, const GURL& url,
1080 AppCacheEntry* found_entry, AppCacheEntry* found_fallback_entry, 1089 AppCacheEntry* found_entry, AppCacheEntry* found_fallback_entry,
1081 bool* found_network_namespace) { 1090 bool* found_network_namespace) {
1082 DCHECK(cache && cache->is_complete()); 1091 DCHECK(cache && cache->is_complete());
1083 1092
1084 // When a group is forcibly deleted, all subresource loads for pages 1093 // When a group is forcibly deleted, all subresource loads for pages
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
1319 Disable(); 1328 Disable();
1320 if (!is_incognito_) { 1329 if (!is_incognito_) {
1321 VLOG(1) << "Deleting existing appcache data and starting over."; 1330 VLOG(1) << "Deleting existing appcache data and starting over.";
1322 AppCacheThread::PostTask(AppCacheThread::db(), FROM_HERE, 1331 AppCacheThread::PostTask(AppCacheThread::db(), FROM_HERE,
1323 NewRunnableFunction(DeleteDirectory, cache_directory_)); 1332 NewRunnableFunction(DeleteDirectory, cache_directory_));
1324 } 1333 }
1325 } 1334 }
1326 } 1335 }
1327 1336
1328 } // namespace appcache 1337 } // namespace appcache
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698