void DocLoader::clearPreloads() { #if PRELOAD_DEBUG printPreloadStats(); #endif ListHashSet<CachedResource*>::iterator end = m_preloads.end(); for (ListHashSet<CachedResource*>::iterator it = m_preloads.begin(); it != end; ++it) { CachedResource* res = *it; res->decreasePreloadCount(); if (res->canDelete() && !res->inCache()) delete res; else if (res->preloadResult() == CachedResource::PreloadNotReferenced) cache()->remove(res); } m_preloads.clear(); }
void MemoryCache::revalidationSucceeded(CachedResource& revalidatingResource, const ResourceResponse& response) { ASSERT(revalidatingResource.resourceToRevalidate()); CachedResource& resource = *revalidatingResource.resourceToRevalidate(); ASSERT(!resource.inCache()); ASSERT(resource.isLoaded()); // Calling remove() can potentially delete revalidatingResource, which we use // below. This mustn't be the case since revalidation means it is loaded // and so canDelete() is false. ASSERT(!revalidatingResource.canDelete()); remove(revalidatingResource); auto& resources = ensureSessionResourceMap(resource.sessionID()); #if ENABLE(CACHE_PARTITIONING) auto key = std::make_pair(resource.url(), resource.cachePartition()); #else auto& key = resource.url(); #endif ASSERT(!resources.get(key)); resources.set(key, &resource); resource.setInCache(true); resource.updateResponseAfterRevalidation(response); insertInLRUList(resource); int delta = resource.size(); if (resource.decodedSize() && resource.hasClients()) insertInLiveDecodedResourcesList(resource); if (delta) adjustSize(resource.hasClients(), delta); revalidatingResource.switchClientsToRevalidatedResource(); ASSERT(!revalidatingResource.m_deleted); // this deletes the revalidating resource revalidatingResource.clearResourceToRevalidate(); }