chrome网络栈 develop tools 查看缓存
所有chrome内部使用协议查看:
chrome缓存查看器:
http://www.nirsoft.net/utils/chrome_cache_view.html
Chrome DevTools Frontend 运行原理浅析
深入理解 Chrome DevTools
D:\dev\electron7\src\url\url_constants.cc 放着http https file等协议定义。
获取缓存(基于chrome 66)
loop异步获取所有cache:src\net\url_request\view_cache_helper.cc
int ViewCacheHelper::DoLoop(int result) { DCHECK(next_state_ != STATE_NONE); int rv = result; do { State state = next_state_; next_state_ = STATE_NONE; switch (state) { case STATE_GET_BACKEND: DCHECK_EQ(OK, rv); rv = DoGetBackend(); break; case STATE_GET_BACKEND_COMPLETE: rv = DoGetBackendComplete(rv); break; case STATE_OPEN_NEXT_ENTRY: DCHECK_EQ(OK, rv); rv = DoOpenNextEntry(); break; case STATE_OPEN_NEXT_ENTRY_COMPLETE: rv = DoOpenNextEntryComplete(rv); break; case STATE_OPEN_ENTRY: DCHECK_EQ(OK, rv); rv = DoOpenEntry(); break; case STATE_OPEN_ENTRY_COMPLETE: rv = DoOpenEntryComplete(rv); break; case STATE_READ_RESPONSE: DCHECK_EQ(OK, rv); rv = DoReadResponse(); break; case STATE_READ_RESPONSE_COMPLETE: rv = DoReadResponseComplete(rv); break; case STATE_READ_DATA: DCHECK_EQ(OK, rv); rv = DoReadData(); break; case STATE_READ_DATA_COMPLETE: rv = DoReadDataComplete(rv); break; default: NOTREACHED() << "bad state"; rv = ERR_FAILED; break; } } while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE); if (rv != ERR_IO_PENDING) HandleResult(rv); return rv; }
int ViewCacheHelper::DoGetBackend() { next_state_ = STATE_GET_BACKEND_COMPLETE; if (!context_->http_transaction_factory()) return ERR_FAILED; HttpCache* http_cache = context_->http_transaction_factory()->GetCache(); if (!http_cache) return ERR_FAILED; return http_cache->GetBackend( &disk_cache_, base::Bind(&ViewCacheHelper::OnIOComplete, base::Unretained(this))); }
mem_backend_impl.cc从iter里面遍历出某项,里面包含url,对应的数据entry_iter->second;:
class MemBackendImpl::MemIterator final : public Backend::Iterator { public: explicit MemIterator(base::WeakPtr<MemBackendImpl> backend) : backend_(backend) {} int OpenNextEntry(Entry** next_entry, const CompletionCallback& callback) override { if (!backend_) return net::ERR_FAILED; if (!backend_keys_) { backend_keys_ = std::make_unique<Strings>(backend_->entries_.size()); for (const auto& iter : backend_->entries_) backend_keys_->push_back(iter.first); current_ = backend_keys_->begin(); } else { current_++; } while (true) { if (current_ == backend_keys_->end()) { *next_entry = nullptr; backend_keys_.reset(); return net::ERR_FAILED; } const auto& entry_iter = backend_->entries_.find(*current_); if (entry_iter == backend_->entries_.end()) { // The key is no longer in the cache, move on to the next key. current_++; continue; } entry_iter->second->Open(); *next_entry = entry_iter->second; return net::OK; } }
chrome 75:
chrome协议:D:\dev\electron7\src\content\public\common\url_constants.cc
// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "build/build_config.h" #include "content/public/common/url_constants.h" namespace content { // Before adding new chrome schemes please check with security@chromium.org. // There are security implications associated with introducing new schemes. const char kChromeDevToolsScheme[] = "devtools"; const char kChromeErrorScheme[] = "chrome-error"; const char kChromeUIScheme[] = "chrome"; const char kGuestScheme[] = "chrome-guest"; const char kViewSourceScheme[] = "view-source"; #if defined(OS_CHROMEOS) const char kExternalFileScheme[] = "externalfile"; #endif const char kGoogleChromeScheme[] = "googlechrome"; const char kChromeUIAppCacheInternalsHost[] = "appcache-internals"; const char kChromeUIIndexedDBInternalsHost[] = "indexeddb-internals"; const char kChromeUIBlobInternalsHost[] = "blob-internals"; const char kChromeUIBrowserCrashHost[] = "inducebrowsercrashforrealz"; const char kChromeUIDinoHost[] = "dino"; const char kChromeUIGpuHost[] = "gpu"; const char kChromeUIHistogramHost[] = "histograms"; const char kChromeUIMediaInternalsHost[] = "media-internals"; const char kChromeUIMemoryExhaustHost[] = "memory-exhaust"; const char kChromeUINetworkErrorHost[] = "network-error"; const char kChromeUINetworkErrorsListingHost[] = "network-errors"; const char kChromeUIProcessInternalsHost[] = "process-internals"; const char kChromeUIResourcesHost[] = "resources"; const char kChromeUIServiceWorkerInternalsHost[] = "serviceworker-internals"; const char kChromeUITracingHost[] = "tracing"; const char kChromeUIWebRTCInternalsHost[] = "webrtc-internals"; const char kChromeUIBadCastCrashURL[] = "chrome://badcastcrash/"; const char kChromeUICheckCrashURL[] = "chrome://checkcrash/"; const char kChromeUIBrowserCrashURL[] = "chrome://inducebrowsercrashforrealz/"; const char kChromeUIBrowserUIHang[] = "chrome://uithreadhang/"; const char kChromeUICrashURL[] = "chrome://crash/"; const char kChromeUIDelayedBrowserUIHang[] = "chrome://delayeduithreadhang/"; const char kChromeUIDumpURL[] = "chrome://crashdump/"; const char kChromeUIGpuCleanURL[] = "chrome://gpuclean/"; const char kChromeUIGpuCrashURL[] = "chrome://gpucrash/"; const char kChromeUIGpuHangURL[] = "chrome://gpuhang/"; const char kChromeUIHangURL[] = "chrome://hang/"; const char kChromeUIKillURL[] = "chrome://kill/"; const char kChromeUIMemoryExhaustURL[] = "chrome://memory-exhaust/"; const char kChromeUINetworkErrorURL[] = "chrome://network-error/"; const char kChromeUINetworkErrorsListingURL[] = "chrome://network-errors/"; const char kChromeUIPpapiFlashCrashURL[] = "chrome://ppapiflashcrash/"; const char kChromeUIPpapiFlashHangURL[] = "chrome://ppapiflashhang/"; const char kChromeUIProcessInternalsURL[] = "chrome://process-internals"; #if defined(OS_ANDROID) const char kChromeUIGpuJavaCrashURL[] = "chrome://gpu-java-crash/"; #endif #if defined(OS_WIN) const char kChromeUIBrowserHeapCorruptionURL[] = "chrome://inducebrowserheapcorruption/"; const char kChromeUIHeapCorruptionCrashURL[] = "chrome://heapcorruptioncrash/"; #endif #if defined(ADDRESS_SANITIZER) const char kChromeUICrashHeapOverflowURL[] = "chrome://crash/heap-overflow"; const char kChromeUICrashHeapUnderflowURL[] = "chrome://crash/heap-underflow"; const char kChromeUICrashUseAfterFreeURL[] = "chrome://crash/use-after-free"; #if defined(OS_WIN) const char kChromeUICrashCorruptHeapBlockURL[] = "chrome://crash/corrupt-heap-block"; const char kChromeUICrashCorruptHeapURL[] = "chrome://crash/corrupt-heap"; #endif // OS_WIN #endif // ADDRESS_SANITIZER #if DCHECK_IS_ON() const char kChromeUICrashDcheckURL[] = "chrome://crash/dcheck"; #endif // This error URL is loaded in normal web renderer processes, so it should not // have a chrome:// scheme that might let it be confused with a WebUI page. const char kUnreachableWebDataURL[] = "chrome-error://chromewebdata/"; const char kBlockedURL[] = "about:blank#blocked"; const char kChromeUIResourcesURL[] = "chrome://resources/"; const char kChromeUIShorthangURL[] = "chrome://shorthang/"; } // namespace content
chrome://view-http-cache/ 支持看缓存