Commit 1aba972d authored by Yutaka Hirano's avatar Yutaka Hirano Committed by Commit Bot

Introduce ThreadableLoader::ModuleId for crash investigation

This CL adds DocumentThreadableLoader::module_id_ to see which module is
to blame for the CHECK failure.

I'll revert this change once the cause is found.

Bug: 837511
Change-Id: I76a724d1d8277d5e70afed85bb5576df99d997ca
Reviewed-on: https://chromium-review.googlesource.com/1125546Reviewed-by: default avatarAdam Rice <ricea@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Yutaka Hirano <yhirano@chromium.org>
Cr-Commit-Position: refs/heads/master@{#572481}
parent 58fc8914
...@@ -433,6 +433,7 @@ void WebAssociatedURLLoaderImpl::LoadAsynchronously( ...@@ -433,6 +433,7 @@ void WebAssociatedURLLoaderImpl::LoadAsynchronously(
Document* document = ToDocument(observer_->LifecycleContext()); Document* document = ToDocument(observer_->LifecycleContext());
DCHECK(document); DCHECK(document);
loader_ = DocumentThreadableLoader::Create( loader_ = DocumentThreadableLoader::Create(
ThreadableLoader::ModuleId::kWebAssociatedUrlLoader,
*ThreadableLoadingContext::Create(*document), client_adapter_.get(), *ThreadableLoadingContext::Create(*document), client_adapter_.get(),
options, resource_loader_options); options, resource_loader_options);
loader_->Start(webcore_request); loader_->Start(webcore_request);
......
...@@ -857,9 +857,9 @@ void FetchManager::Loader::PerformHTTPFetch(ExceptionState& exception_state) { ...@@ -857,9 +857,9 @@ void FetchManager::Loader::PerformHTTPFetch(ExceptionState& exception_state) {
ThreadableLoaderOptions threadable_loader_options; ThreadableLoaderOptions threadable_loader_options;
probe::willStartFetch(execution_context_, this); probe::willStartFetch(execution_context_, this);
threadable_loader_ = ThreadableLoader::Create(*execution_context_, this, threadable_loader_ = ThreadableLoader::Create(
threadable_loader_options, ThreadableLoader::ModuleId::kFetchManager, *execution_context_, this,
resource_loader_options); threadable_loader_options, resource_loader_options);
threadable_loader_->Start(request); threadable_loader_->Start(request);
} }
...@@ -887,9 +887,9 @@ void FetchManager::Loader::PerformDataFetch() { ...@@ -887,9 +887,9 @@ void FetchManager::Loader::PerformDataFetch() {
ThreadableLoaderOptions threadable_loader_options; ThreadableLoaderOptions threadable_loader_options;
probe::willStartFetch(execution_context_, this); probe::willStartFetch(execution_context_, this);
threadable_loader_ = ThreadableLoader::Create(*execution_context_, this, threadable_loader_ = ThreadableLoader::Create(
threadable_loader_options, ThreadableLoader::ModuleId::kFetchManager, *execution_context_, this,
resource_loader_options); threadable_loader_options, resource_loader_options);
threadable_loader_->Start(request); threadable_loader_->Start(request);
} }
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include "third_party/blink/renderer/core/loader/document_threadable_loader.h" #include "third_party/blink/renderer/core/loader/document_threadable_loader.h"
#include <memory> #include <memory>
#include "base/debug/alias.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/single_thread_task_runner.h" #include "base/single_thread_task_runner.h"
#include "services/network/public/mojom/cors.mojom-blink.h" #include "services/network/public/mojom/cors.mojom-blink.h"
...@@ -187,8 +188,9 @@ void DocumentThreadableLoader::LoadResourceSynchronously( ...@@ -187,8 +188,9 @@ void DocumentThreadableLoader::LoadResourceSynchronously(
ThreadableLoaderClient& client, ThreadableLoaderClient& client,
const ThreadableLoaderOptions& options, const ThreadableLoaderOptions& options,
const ResourceLoaderOptions& resource_loader_options) { const ResourceLoaderOptions& resource_loader_options) {
(new DocumentThreadableLoader(loading_context, &client, kLoadSynchronously, (new DocumentThreadableLoader(ModuleId::kSync, loading_context, &client,
options, resource_loader_options)) kLoadSynchronously, options,
resource_loader_options))
->Start(request); ->Start(request);
} }
...@@ -242,22 +244,25 @@ DocumentThreadableLoader::CreateAccessControlPreflightRequestForTesting( ...@@ -242,22 +244,25 @@ DocumentThreadableLoader::CreateAccessControlPreflightRequestForTesting(
// static // static
DocumentThreadableLoader* DocumentThreadableLoader::Create( DocumentThreadableLoader* DocumentThreadableLoader::Create(
ModuleId id,
ThreadableLoadingContext& loading_context, ThreadableLoadingContext& loading_context,
ThreadableLoaderClient* client, ThreadableLoaderClient* client,
const ThreadableLoaderOptions& options, const ThreadableLoaderOptions& options,
const ResourceLoaderOptions& resource_loader_options) { const ResourceLoaderOptions& resource_loader_options) {
return new DocumentThreadableLoader(loading_context, client, return new DocumentThreadableLoader(id, loading_context, client,
kLoadAsynchronously, options, kLoadAsynchronously, options,
resource_loader_options); resource_loader_options);
} }
DocumentThreadableLoader::DocumentThreadableLoader( DocumentThreadableLoader::DocumentThreadableLoader(
ModuleId module_id,
ThreadableLoadingContext& loading_context, ThreadableLoadingContext& loading_context,
ThreadableLoaderClient* client, ThreadableLoaderClient* client,
BlockingBehavior blocking_behavior, BlockingBehavior blocking_behavior,
const ThreadableLoaderOptions& options, const ThreadableLoaderOptions& options,
const ResourceLoaderOptions& resource_loader_options) const ResourceLoaderOptions& resource_loader_options)
: client_(client), : module_id_(module_id),
client_(client),
loading_context_(&loading_context), loading_context_(&loading_context),
options_(options), options_(options),
resource_loader_options_(resource_loader_options), resource_loader_options_(resource_loader_options),
...@@ -551,6 +556,8 @@ void DocumentThreadableLoader::MakeCrossOriginAccessRequest( ...@@ -551,6 +556,8 @@ void DocumentThreadableLoader::MakeCrossOriginAccessRequest(
} }
DocumentThreadableLoader::~DocumentThreadableLoader() { DocumentThreadableLoader::~DocumentThreadableLoader() {
const auto module_id = module_id_;
base::debug::Alias(&module_id);
CHECK(!client_); CHECK(!client_);
DCHECK(!GetResource()); DCHECK(!GetResource());
} }
......
...@@ -72,7 +72,8 @@ class CORE_EXPORT DocumentThreadableLoader final : public ThreadableLoader, ...@@ -72,7 +72,8 @@ class CORE_EXPORT DocumentThreadableLoader final : public ThreadableLoader,
static std::unique_ptr<ResourceRequest> static std::unique_ptr<ResourceRequest>
CreateAccessControlPreflightRequestForTesting(const ResourceRequest&); CreateAccessControlPreflightRequestForTesting(const ResourceRequest&);
static DocumentThreadableLoader* Create(ThreadableLoadingContext&, static DocumentThreadableLoader* Create(ModuleId,
ThreadableLoadingContext&,
ThreadableLoaderClient*, ThreadableLoaderClient*,
const ThreadableLoaderOptions&, const ThreadableLoaderOptions&,
const ResourceLoaderOptions&); const ResourceLoaderOptions&);
...@@ -99,7 +100,8 @@ class CORE_EXPORT DocumentThreadableLoader final : public ThreadableLoader, ...@@ -99,7 +100,8 @@ class CORE_EXPORT DocumentThreadableLoader final : public ThreadableLoader,
const ResourceRequest&, const ResourceRequest&,
const SecurityOrigin*); const SecurityOrigin*);
DocumentThreadableLoader(ThreadableLoadingContext&, DocumentThreadableLoader(ModuleId,
ThreadableLoadingContext&,
ThreadableLoaderClient*, ThreadableLoaderClient*,
BlockingBehavior, BlockingBehavior,
const ThreadableLoaderOptions&, const ThreadableLoaderOptions&,
...@@ -176,6 +178,7 @@ class CORE_EXPORT DocumentThreadableLoader final : public ThreadableLoader, ...@@ -176,6 +178,7 @@ class CORE_EXPORT DocumentThreadableLoader final : public ThreadableLoader,
// TODO(kinuko): Remove dependency to document. // TODO(kinuko): Remove dependency to document.
Document* GetDocument() const; Document* GetDocument() const;
const ModuleId module_id_;
ThreadableLoaderClient* client_; ThreadableLoaderClient* client_;
Member<ThreadableLoadingContext> loading_context_; Member<ThreadableLoadingContext> loading_context_;
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
namespace blink { namespace blink {
ThreadableLoader* ThreadableLoader::Create( ThreadableLoader* ThreadableLoader::Create(
ModuleId id,
ExecutionContext& context, ExecutionContext& context,
ThreadableLoaderClient* client, ThreadableLoaderClient* client,
const ThreadableLoaderOptions& options, const ThreadableLoaderOptions& options,
...@@ -46,7 +47,7 @@ ThreadableLoader* ThreadableLoader::Create( ...@@ -46,7 +47,7 @@ ThreadableLoader* ThreadableLoader::Create(
if (context.IsWorkerGlobalScope()) if (context.IsWorkerGlobalScope())
ToWorkerGlobalScope(&context)->EnsureFetcher(); ToWorkerGlobalScope(&context)->EnsureFetcher();
return DocumentThreadableLoader::Create( return DocumentThreadableLoader::Create(
*ThreadableLoadingContext::Create(context), client, options, id, *ThreadableLoadingContext::Create(context), client, options,
resource_loader_options); resource_loader_options);
} }
......
...@@ -94,6 +94,18 @@ struct CrossThreadCopier<ThreadableLoaderOptions> { ...@@ -94,6 +94,18 @@ struct CrossThreadCopier<ThreadableLoaderOptions> {
class CORE_EXPORT ThreadableLoader class CORE_EXPORT ThreadableLoader
: public GarbageCollectedFinalized<ThreadableLoader> { : public GarbageCollectedFinalized<ThreadableLoader> {
public: public:
enum class ModuleId {
kFetchManager,
kWorkerClassicScriptLoader,
kXmlHttpRequest,
kBackgroundFetchIconLoader,
kEventSource,
kNotificationImageLoader,
kWebAssociatedUrlLoader,
kWorkerThreadableLoader,
kSync,
kTest,
};
static void LoadResourceSynchronously(ExecutionContext&, static void LoadResourceSynchronously(ExecutionContext&,
const ResourceRequest&, const ResourceRequest&,
ThreadableLoaderClient&, ThreadableLoaderClient&,
...@@ -131,7 +143,8 @@ class CORE_EXPORT ThreadableLoader ...@@ -131,7 +143,8 @@ class CORE_EXPORT ThreadableLoader
// also for cancellation happened inside the loader.) // also for cancellation happened inside the loader.)
// //
// ThreadableLoaderClient methods may call cancel(). // ThreadableLoaderClient methods may call cancel().
static ThreadableLoader* Create(ExecutionContext&, static ThreadableLoader* Create(ModuleId,
ExecutionContext&,
ThreadableLoaderClient*, ThreadableLoaderClient*,
const ThreadableLoaderOptions&, const ThreadableLoaderOptions&,
const ResourceLoaderOptions&); const ResourceLoaderOptions&);
......
...@@ -195,6 +195,7 @@ class DocumentThreadableLoaderTestHelper : public ThreadableLoaderTestHelper { ...@@ -195,6 +195,7 @@ class DocumentThreadableLoaderTestHelper : public ThreadableLoaderTestHelper {
ThreadableLoaderOptions options; ThreadableLoaderOptions options;
ResourceLoaderOptions resource_loader_options; ResourceLoaderOptions resource_loader_options;
loader_ = DocumentThreadableLoader::Create( loader_ = DocumentThreadableLoader::Create(
ThreadableLoader::ModuleId::kTest,
*ThreadableLoadingContext::Create(GetDocument()), client, options, *ThreadableLoadingContext::Create(GetDocument()), client, options,
resource_loader_options); resource_loader_options);
} }
...@@ -394,7 +395,8 @@ class WorkerThreadableLoaderTestHelper : public ThreadableLoaderTestHelper { ...@@ -394,7 +395,8 @@ class WorkerThreadableLoaderTestHelper : public ThreadableLoaderTestHelper {
// isWorkerGlobalScope(). // isWorkerGlobalScope().
DCHECK(worker_thread_->GlobalScope()->IsWorkerGlobalScope()); DCHECK(worker_thread_->GlobalScope()->IsWorkerGlobalScope());
loader_ = ThreadableLoader::Create(*worker_thread_->GlobalScope(), client, loader_ = ThreadableLoader::Create(ThreadableLoader::ModuleId::kTest,
*worker_thread_->GlobalScope(), client,
options, resource_loader_options); options, resource_loader_options);
DCHECK(loader_); DCHECK(loader_);
event->Signal(); event->Signal();
......
...@@ -673,7 +673,8 @@ void WorkerThreadableLoader::ParentThreadLoaderHolder::Start( ...@@ -673,7 +673,8 @@ void WorkerThreadableLoader::ParentThreadLoaderHolder::Start(
original_resource_loader_options; original_resource_loader_options;
resource_loader_options.request_initiator_context = kWorkerContext; resource_loader_options.request_initiator_context = kWorkerContext;
parent_thread_loader_ = DocumentThreadableLoader::Create( parent_thread_loader_ = DocumentThreadableLoader::Create(
loading_context, this, options, resource_loader_options); ModuleId::kWorkerThreadableLoader, loading_context, this, options,
resource_loader_options);
parent_thread_loader_->Start(ResourceRequest(request.get())); parent_thread_loader_->Start(ResourceRequest(request.get()));
} }
......
...@@ -119,7 +119,8 @@ void WorkerClassicScriptLoader::LoadAsynchronously( ...@@ -119,7 +119,8 @@ void WorkerClassicScriptLoader::LoadAsynchronously(
scoped_refptr<WorkerClassicScriptLoader> protect(this); scoped_refptr<WorkerClassicScriptLoader> protect(this);
need_to_cancel_ = true; need_to_cancel_ = true;
threadable_loader_ = ThreadableLoader::Create( threadable_loader_ = ThreadableLoader::Create(
execution_context, this, options, resource_loader_options); ThreadableLoader::ModuleId::kWorkerClassicScriptLoader, execution_context,
this, options, resource_loader_options);
threadable_loader_->Start(request); threadable_loader_->Start(request);
if (failed_) if (failed_)
NotifyFinished(); NotifyFinished();
......
...@@ -1128,8 +1128,9 @@ void XMLHttpRequest::CreateRequest(scoped_refptr<EncodedFormData> http_body, ...@@ -1128,8 +1128,9 @@ void XMLHttpRequest::CreateRequest(scoped_refptr<EncodedFormData> http_body,
// TODO(yhirano): Turn this CHECK into DCHECK: see https://crbug.com/570946. // TODO(yhirano): Turn this CHECK into DCHECK: see https://crbug.com/570946.
CHECK(!loader_); CHECK(!loader_);
DCHECK(send_flag_); DCHECK(send_flag_);
loader_ = ThreadableLoader::Create(execution_context, this, options, loader_ = ThreadableLoader::Create(
resource_loader_options); ThreadableLoader::ModuleId::kXmlHttpRequest, execution_context, this,
options, resource_loader_options);
loader_->Start(request); loader_->Start(request);
return; return;
......
...@@ -85,9 +85,10 @@ void BackgroundFetchIconLoader::DidGetIconDisplaySizeIfSoLoadIcon( ...@@ -85,9 +85,10 @@ void BackgroundFetchIconLoader::DidGetIconDisplaySizeIfSoLoadIcon(
resource_request.SetPriority(ResourceLoadPriority::kMedium); resource_request.SetPriority(ResourceLoadPriority::kMedium);
resource_request.SetRequestorOrigin(execution_context->GetSecurityOrigin()); resource_request.SetRequestorOrigin(execution_context->GetSecurityOrigin());
threadable_loader_ = ThreadableLoader::Create(*execution_context, this, threadable_loader_ = ThreadableLoader::Create(
threadable_loader_options, ThreadableLoader::ModuleId::kBackgroundFetchIconLoader,
resource_loader_options); *execution_context, this, threadable_loader_options,
resource_loader_options);
threadable_loader_->Start(resource_request); threadable_loader_->Start(resource_request);
} }
......
...@@ -160,7 +160,8 @@ void EventSource::Connect() { ...@@ -160,7 +160,8 @@ void EventSource::Connect() {
probe::willSendEventSourceRequest(&execution_context, this); probe::willSendEventSourceRequest(&execution_context, this);
// probe::documentThreadableLoaderStartedLoadingForClient // probe::documentThreadableLoaderStartedLoadingForClient
// will be called synchronously. // will be called synchronously.
loader_ = ThreadableLoader::Create(execution_context, this, options, loader_ = ThreadableLoader::Create(ThreadableLoader::ModuleId::kEventSource,
execution_context, this, options,
resource_loader_options); resource_loader_options);
loader_->Start(request); loader_->Start(request);
} }
......
...@@ -119,7 +119,8 @@ void NotificationImageLoader::Start(ExecutionContext* context, ...@@ -119,7 +119,8 @@ void NotificationImageLoader::Start(ExecutionContext* context,
resource_request.SetRequestorOrigin(context->GetSecurityOrigin()); resource_request.SetRequestorOrigin(context->GetSecurityOrigin());
threadable_loader_ = ThreadableLoader::Create( threadable_loader_ = ThreadableLoader::Create(
*context, this, threadable_loader_options, resource_loader_options); ThreadableLoader::ModuleId::kNotificationImageLoader, *context, this,
threadable_loader_options, resource_loader_options);
threadable_loader_->Start(resource_request); threadable_loader_->Start(resource_request);
} }
......
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