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