Index: net/http/mock_http_cache.cc |
diff --git a/net/http/mock_http_cache.cc b/net/http/mock_http_cache.cc |
index 47125a30cc53f4bdf2969ae35e1c5b607c2706c4..1800fbdaa69e18bcfaa7403f0602d8d1fded904c 100644 |
--- a/net/http/mock_http_cache.cc |
+++ b/net/http/mock_http_cache.cc |
@@ -68,6 +68,7 @@ struct MockDiskEntry::CallbackInfo { |
MockDiskEntry::MockDiskEntry(const std::string& key) |
: key_(key), |
+ oracle_byte_(0), |
doomed_(false), |
sparse_(false), |
fail_requests_(false), |
@@ -98,6 +99,10 @@ base::Time MockDiskEntry::GetLastModified() const { |
return base::Time::Now(); |
} |
+void MockDiskEntry::SetOracleByte(uint8_t val) { |
+ oracle_byte_ = val; |
+} |
+ |
int32_t MockDiskEntry::GetDataSize(int index) const { |
DCHECK(index >= 0 && index < kNumCacheEntryDataIndices); |
return static_cast<int32_t>(data_[index].size()); |
@@ -390,6 +395,13 @@ int32_t MockDiskCache::GetEntryCount() const { |
int MockDiskCache::OpenEntry(const std::string& key, |
disk_cache::Entry** entry, |
const CompletionCallback& callback) { |
+ return OpenEntryWithOracleByte(key, entry, OracleCallback(), callback); |
+} |
+ |
+int MockDiskCache::OpenEntryWithOracleByte(const std::string& key, |
+ disk_cache::Entry** entry, |
+ const OracleCallback& oracle, |
+ const CompletionCallback& callback) { |
DCHECK(!callback.is_null()); |
if (fail_requests_) |
return ERR_CACHE_OPEN_FAILURE; |
@@ -398,6 +410,12 @@ int MockDiskCache::OpenEntry(const std::string& key, |
if (it == entries_.end()) |
return ERR_CACHE_OPEN_FAILURE; |
+ if (!oracle.is_null() && oracle.Run(it->second->GetOracleByte()) == |
+ Backend::OracleJudgement::MISS_AND_DOOM) { |
+ it->second->Doom(); |
+ // Will be handled immediately below. |
+ } |
+ |
if (it->second->is_doomed()) { |
it->second->Release(); |
entries_.erase(it); |