Commit d2867e8c authored by Matt Falkenhagen's avatar Matt Falkenhagen Committed by Commit Bot

Add more instrumentation for AppCache crash when S13nSW is enabled.

We expect the precreated AppCacheHost to exist in
AppCacheNavigationHandleCore once navigation starts on the IO thread.
But we know it doesn't exist at some point.  This CL add more logging to
try to narrow down possibilities of where the host was lost, if it was
ever created.

Bug: 857005
Change-Id: I0804b6dd972daf6e28e6ee5bf403e30b94df0b1a
Reviewed-on: https://chromium-review.googlesource.com/1125649Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Commit-Queue: Matt Falkenhagen <falken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#572511}
parent 284de34d
......@@ -93,7 +93,30 @@ AppCacheServiceImpl* AppCacheNavigationHandleCore::GetAppCacheService() {
void AppCacheNavigationHandleCore::AddRequestToDebugLog(const GURL& url) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
if (debug_log_)
debug_log_->emplace_back("Req:" + url.spec().substr(0, 64));
debug_log_->emplace_back("Req:host=" + HostToString() +
",url=" + url.spec().substr(0, 64));
}
void AppCacheNavigationHandleCore::AddDefaultFactoryRunToDebugLog(
bool was_request_intercepted) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
if (debug_log_) {
debug_log_->emplace_back(
base::StringPrintf("Fac:host=%s,int=%s", HostToString().c_str(),
was_request_intercepted ? "T" : "F"));
}
}
void AppCacheNavigationHandleCore::AddCreateURLLoaderToDebugLog() {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
if (debug_log_)
debug_log_->emplace_back("Load:host=" + HostToString());
}
void AppCacheNavigationHandleCore::AddNavigationStartToDebugLog() {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
if (debug_log_)
debug_log_->emplace_back("Start:host=" + HostToString());
}
std::string AppCacheNavigationHandleCore::GetDebugLog() {
......@@ -161,4 +184,9 @@ void AppCacheNavigationHandleCore::OnSetSubresourceFactory(
DCHECK(false);
}
std::string AppCacheNavigationHandleCore::HostToString() {
return precreated_host_ ? std::to_string(precreated_host_->host_id())
: "null";
}
} // namespace content
......@@ -48,6 +48,9 @@ class AppCacheNavigationHandleCore : public AppCacheFrontend {
AppCacheServiceImpl* GetAppCacheService();
void AddRequestToDebugLog(const GURL& url);
void AddDefaultFactoryRunToDebugLog(bool was_request_intercepted);
void AddCreateURLLoaderToDebugLog();
void AddNavigationStartToDebugLog();
std::string GetDebugLog();
protected:
......@@ -74,6 +77,8 @@ class AppCacheNavigationHandleCore : public AppCacheFrontend {
network::mojom::URLLoaderFactoryPtr url_loader_factory) override;
private:
std::string HostToString();
std::unique_ptr<AppCacheHost> precreated_host_;
scoped_refptr<ChromeAppCacheService> appcache_service_;
int appcache_host_id_;
......
......@@ -14,6 +14,7 @@
#include "base/trace_event/trace_event.h"
#include "components/download/public/common/download_stats.h"
#include "content/browser/appcache/appcache_navigation_handle.h"
#include "content/browser/appcache/appcache_navigation_handle_core.h"
#include "content/browser/appcache/appcache_request_handler.h"
#include "content/browser/blob_storage/chrome_blob_storage_context.h"
#include "content/browser/devtools/render_frame_devtools_agent_host.h"
......@@ -358,6 +359,9 @@ class NavigationURLLoaderImpl::URLLoaderRequestController
ServiceWorkerNavigationHandleCore* service_worker_navigation_handle_core,
AppCacheNavigationHandleCore* appcache_handle_core,
bool was_request_intercepted) const {
if (appcache_handle_core)
appcache_handle_core->AddDefaultFactoryRunToDebugLog(
was_request_intercepted);
return base::BindOnce(
&URLLoaderRequestController::CreateNonNetworkServiceURLLoader,
weak_factory_.GetWeakPtr(),
......@@ -388,6 +392,9 @@ class NavigationURLLoaderImpl::URLLoaderRequestController
DCHECK(!base::FeatureList::IsEnabled(network::features::kNetworkService));
DCHECK_CURRENTLY_ON(BrowserThread::IO);
if (appcache_handle_core)
appcache_handle_core->AddCreateURLLoaderToDebugLog();
default_loader_used_ = true;
if (signed_exchange_utils::IsSignedExchangeHandlingEnabled()) {
DCHECK(!default_url_loader_factory_getter_);
......@@ -452,6 +459,9 @@ class NavigationURLLoaderImpl::URLLoaderRequestController
DCHECK(!base::FeatureList::IsEnabled(network::features::kNetworkService));
DCHECK_CURRENTLY_ON(BrowserThread::IO);
DCHECK(!started_);
if (appcache_handle_core)
appcache_handle_core->AddNavigationStartToDebugLog();
started_ = true;
request_info_ = std::move(request_info);
frame_tree_node_id_ = request_info_->frame_tree_node_id;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment