Commit b66ac187 authored by kinuko's avatar kinuko Committed by Commit bot

Make ExecutionContext aware about how it can return CoreProbeSink

Currently ToCoreProbe code checks the given ExecutionContext's type
and calls different code to get its CoreProbeSink, but in this way
we need to keep adding new ToCoreProbe code every time we add
new ExecutionContext, which sounds a bit cumbersome.

This CL adds ExecutionContext::GetProbeSink() virtual method
to mitigate that.

BUG=538751

Review-Url: https://codereview.chromium.org/2847703002
Cr-Commit-Position: refs/heads/master@{#468243}
parent 01c3eb8f
......@@ -6666,6 +6666,13 @@ void Document::DecrementPasswordCount() {
SendSensitiveInputVisibility();
}
CoreProbeSink* Document::GetProbeSink() {
LocalFrame* frame = GetFrame();
if (!frame && TemplateDocumentHost())
frame = TemplateDocumentHost()->GetFrame();
return probe::ToCoreProbeSink(frame);
}
DEFINE_TRACE(Document) {
visitor->Trace(imports_controller_);
visitor->Trace(doc_type_);
......
......@@ -1318,6 +1318,8 @@ class CORE_EXPORT Document : public ContainerNode,
void IncrementPasswordCount();
void DecrementPasswordCount();
CoreProbeSink* GetProbeSink() final;
protected:
Document(const DocumentInit&, DocumentClassFlags = kDefaultDocumentClass);
......
......@@ -43,14 +43,15 @@
namespace blink {
class SuspendableObject;
class ConsoleMessage;
class CoreProbeSink;
class DOMTimerCoordinator;
class ErrorEvent;
class EventQueue;
class EventTarget;
class ExecutionContextTask;
class LocalDOMWindow;
class SuspendableObject;
class PublicURLManager;
class SecurityOrigin;
class ScriptState;
......@@ -181,6 +182,8 @@ class CORE_EXPORT ExecutionContext : public ContextLifecycleNotifier,
void SetReferrerPolicy(ReferrerPolicy);
virtual ReferrerPolicy GetReferrerPolicy() const { return referrer_policy_; }
virtual CoreProbeSink* GetProbeSink() { return nullptr; }
protected:
ExecutionContext();
virtual ~ExecutionContext();
......
......@@ -41,11 +41,8 @@
#include "core/inspector/InspectorTraceEvents.h"
#include "core/inspector/MainThreadDebugger.h"
#include "core/inspector/ThreadDebugger.h"
#include "core/inspector/WorkerInspectorController.h"
#include "core/page/Page.h"
#include "core/workers/MainThreadWorkletGlobalScope.h"
#include "core/workers/WorkerGlobalScope.h"
#include "core/workers/WorkerThread.h"
#include "platform/instrumentation/tracing/TraceEvent.h"
#include "platform/loader/fetch/FetchInitiatorInfo.h"
......@@ -139,22 +136,5 @@ void ContinueWithPolicyIgnore(LocalFrame* frame,
DidReceiveResourceResponseButCanceled(frame, loader, identifier, r, resource);
}
CoreProbeSink* ToCoreProbeSink(WorkerGlobalScope* worker_global_scope) {
if (!worker_global_scope)
return nullptr;
if (WorkerInspectorController* controller =
worker_global_scope->GetThread()->GetWorkerInspectorController())
return controller->InstrumentingAgents();
return nullptr;
}
CoreProbeSink* ToCoreProbeSinkForNonDocumentContext(ExecutionContext* context) {
if (context->IsWorkerGlobalScope())
return ToCoreProbeSink(ToWorkerGlobalScope(context));
if (context->IsMainThreadWorkletGlobalScope())
return ToCoreProbeSink(ToMainThreadWorkletGlobalScope(context)->GetFrame());
return nullptr;
}
} // namespace probe
} // namespace blink
......@@ -45,7 +45,6 @@ namespace blink {
class CoreProbeSink;
class Resource;
class ThreadDebugger;
class WorkerGlobalScope;
namespace probe {
......@@ -66,19 +65,12 @@ class CORE_EXPORT AsyncTask {
};
// Called from generated instrumentation code.
CORE_EXPORT CoreProbeSink* ToCoreProbeSink(WorkerGlobalScope*);
CORE_EXPORT CoreProbeSink* ToCoreProbeSinkForNonDocumentContext(
ExecutionContext*);
inline CoreProbeSink* ToCoreProbeSink(LocalFrame* frame) {
return frame ? frame->InstrumentingAgents() : nullptr;
}
inline CoreProbeSink* ToCoreProbeSink(Document& document) {
LocalFrame* frame = document.GetFrame();
if (!frame && document.TemplateDocumentHost())
frame = document.TemplateDocumentHost()->GetFrame();
return ToCoreProbeSink(frame);
return document.GetProbeSink();
}
inline CoreProbeSink* ToCoreProbeSink(Document* document) {
......@@ -86,10 +78,7 @@ inline CoreProbeSink* ToCoreProbeSink(Document* document) {
}
inline CoreProbeSink* ToCoreProbeSink(ExecutionContext* context) {
if (!context)
return nullptr;
return context->IsDocument() ? ToCoreProbeSink(*ToDocument(context))
: ToCoreProbeSinkForNonDocumentContext(context);
return context ? context->GetProbeSink() : nullptr;
}
inline CoreProbeSink* ToCoreProbeSink(Node* node) {
......
......@@ -11,6 +11,7 @@
#include "core/frame/FrameConsole.h"
#include "core/frame/LocalFrame.h"
#include "core/inspector/MainThreadDebugger.h"
#include "core/probe/CoreProbes.h"
namespace blink {
......@@ -124,6 +125,10 @@ void MainThreadWorkletGlobalScope::ExceptionThrown(ErrorEvent* event) {
MainThreadDebugger::Instance()->ExceptionThrown(this, event);
}
CoreProbeSink* MainThreadWorkletGlobalScope::GetProbeSink() {
return probe::ToCoreProbeSink(GetFrame());
}
DEFINE_TRACE(MainThreadWorkletGlobalScope) {
visitor->Trace(loader_map_);
WorkletGlobalScope::Trace(visitor);
......
......@@ -53,6 +53,7 @@ class CORE_EXPORT MainThreadWorkletGlobalScope
// ExecutionContext
void AddConsoleMessage(ConsoleMessage*) final;
void ExceptionThrown(ErrorEvent*) final;
CoreProbeSink* GetProbeSink() final;
DECLARE_VIRTUAL_TRACE();
......
......@@ -39,6 +39,7 @@
#include "core/frame/DOMTimerCoordinator.h"
#include "core/inspector/ConsoleMessage.h"
#include "core/inspector/ConsoleMessageStorage.h"
#include "core/inspector/WorkerInspectorController.h"
#include "core/inspector/WorkerThreadDebugger.h"
#include "core/loader/WorkerFetchContext.h"
#include "core/loader/WorkerThreadableLoader.h"
......@@ -283,6 +284,13 @@ WorkerEventQueue* WorkerGlobalScope::GetEventQueue() const {
return event_queue_.Get();
}
CoreProbeSink* WorkerGlobalScope::GetProbeSink() {
if (WorkerInspectorController* controller =
GetThread()->GetWorkerInspectorController())
return controller->InstrumentingAgents();
return nullptr;
}
bool WorkerGlobalScope::IsSecureContext(String& error_message) const {
// Until there are APIs that are available in workers and that
// require a privileged context test that checks ancestors, just do
......
......@@ -135,6 +135,8 @@ class CORE_EXPORT WorkerGlobalScope
WorkerEventQueue* GetEventQueue() const final;
bool IsSecureContext(String& error_message) const override;
CoreProbeSink* GetProbeSink() final;
// EventTarget
ExecutionContext* GetExecutionContext() const final;
......
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