Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (243662 => 243663)
--- trunk/Source/_javascript_Core/ChangeLog 2019-03-29 20:56:20 UTC (rev 243662)
+++ trunk/Source/_javascript_Core/ChangeLog 2019-03-29 21:49:53 UTC (rev 243663)
@@ -1,3 +1,21 @@
+2019-03-29 Devin Rousso <[email protected]>
+
+ Web Inspector: add fast returns for instrumentation hooks that have no affect before a frontend is connected
+ https://bugs.webkit.org/show_bug.cgi?id=196382
+ <rdar://problem/49403417>
+
+ Reviewed by Joseph Pecoraro.
+
+ Ensure that all instrumentation hooks use `FAST_RETURN_IF_NO_FRONTENDS` or check that
+ `developerExtrasEnabled`. There should be no activity to/from any inspector objects until
+ developer extras are enabled.
+
+ * inspector/agents/InspectorConsoleAgent.cpp:
+ (Inspector::InspectorConsoleAgent::startTiming):
+ (Inspector::InspectorConsoleAgent::stopTiming):
+ (Inspector::InspectorConsoleAgent::count):
+ (Inspector::InspectorConsoleAgent::addConsoleMessage):
+
2019-03-29 Cathie Chen <[email protected]>
Implement ResizeObserver.
Modified: trunk/Source/_javascript_Core/inspector/agents/InspectorConsoleAgent.cpp (243662 => 243663)
--- trunk/Source/_javascript_Core/inspector/agents/InspectorConsoleAgent.cpp 2019-03-29 20:56:20 UTC (rev 243662)
+++ trunk/Source/_javascript_Core/inspector/agents/InspectorConsoleAgent.cpp 2019-03-29 21:49:53 UTC (rev 243663)
@@ -128,6 +128,9 @@
void InspectorConsoleAgent::startTiming(const String& title)
{
+ if (!m_injectedScriptManager.inspectorEnvironment().developerExtrasEnabled())
+ return;
+
ASSERT(!title.isNull());
if (title.isNull())
return;
@@ -143,6 +146,9 @@
void InspectorConsoleAgent::stopTiming(const String& title, Ref<ScriptCallStack>&& callStack)
{
+ if (!m_injectedScriptManager.inspectorEnvironment().developerExtrasEnabled())
+ return;
+
ASSERT(!title.isNull());
if (title.isNull())
return;
@@ -181,6 +187,9 @@
void InspectorConsoleAgent::count(JSC::ExecState* state, Ref<ScriptArguments>&& arguments)
{
+ if (!m_injectedScriptManager.inspectorEnvironment().developerExtrasEnabled())
+ return;
+
Ref<ScriptCallStack> callStack = createScriptCallStackForConsole(state);
String title;
@@ -214,7 +223,9 @@
void InspectorConsoleAgent::addConsoleMessage(std::unique_ptr<ConsoleMessage> consoleMessage)
{
- ASSERT(m_injectedScriptManager.inspectorEnvironment().developerExtrasEnabled());
+ if (!m_injectedScriptManager.inspectorEnvironment().developerExtrasEnabled())
+ return;
+
ASSERT_ARG(consoleMessage, consoleMessage);
ConsoleMessage* previousMessage = m_consoleMessages.isEmpty() ? nullptr : m_consoleMessages.last().get();
Modified: trunk/Source/WebCore/ChangeLog (243662 => 243663)
--- trunk/Source/WebCore/ChangeLog 2019-03-29 20:56:20 UTC (rev 243662)
+++ trunk/Source/WebCore/ChangeLog 2019-03-29 21:49:53 UTC (rev 243663)
@@ -1,3 +1,38 @@
+2019-03-29 Devin Rousso <[email protected]>
+
+ Web Inspector: add fast returns for instrumentation hooks that have no affect before a frontend is connected
+ https://bugs.webkit.org/show_bug.cgi?id=196382
+ <rdar://problem/49403417>
+
+ Reviewed by Joseph Pecoraro.
+
+ Ensure that all instrumentation hooks use `FAST_RETURN_IF_NO_FRONTENDS` or check that
+ `developerExtrasEnabled`. There should be no activity to/from any inspector objects until
+ developer extras are enabled.
+
+ * inspector/InspectorInstrumentation.h:
+ (WebCore::InspectorInstrumentation::didClearWindowObjectInWorld):
+ (WebCore::InspectorInstrumentation::scriptExecutionBlockedByCSP):
+ (WebCore::InspectorInstrumentation::domContentLoadedEventFired):
+ (WebCore::InspectorInstrumentation::loadEventFired):
+ (WebCore::InspectorInstrumentation::frameDetachedFromParent):
+ (WebCore::InspectorInstrumentation::loaderDetachedFromFrame):
+ (WebCore::InspectorInstrumentation::frameStartedLoading):
+ (WebCore::InspectorInstrumentation::frameStoppedLoading):
+ (WebCore::InspectorInstrumentation::frameScheduledNavigation):
+ (WebCore::InspectorInstrumentation::frameClearedScheduledNavigation):
+ * inspector/InspectorInstrumentation.cpp:
+ (WebCore::InspectorInstrumentation::frameWindowDiscardedImpl):
+ (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
+ (WebCore::InspectorInstrumentation::didFailLoadingImpl):
+ (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
+ (WebCore::InspectorInstrumentation::consoleCountImpl):
+ (WebCore::InspectorInstrumentation::startConsoleTimingImpl):
+ (WebCore::InspectorInstrumentation::stopConsoleTimingImpl):
+
+ * inspector/agents/WebConsoleAgent.cpp:
+ (WebCore::WebConsoleAgent::frameWindowDiscarded):
+
2019-03-29 Chris Dumez <[email protected]>
Set window.closed immediately when close() is invoked
Modified: trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp (243662 => 243663)
--- trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp 2019-03-29 20:56:20 UTC (rev 243662)
+++ trunk/Source/WebCore/inspector/InspectorInstrumentation.cpp 2019-03-29 21:49:53 UTC (rev 243663)
@@ -204,6 +204,9 @@
void InspectorInstrumentation::frameWindowDiscardedImpl(InstrumentingAgents& instrumentingAgents, DOMWindow* window)
{
+ if (!instrumentingAgents.inspectorEnvironment().developerExtrasEnabled())
+ return;
+
if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent())
consoleAgent->frameWindowDiscarded(window);
}
@@ -605,6 +608,9 @@
void InspectorInstrumentation::didReceiveResourceResponseImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier, DocumentLoader* loader, const ResourceResponse& response, ResourceLoader* resourceLoader)
{
+ if (!instrumentingAgents.inspectorEnvironment().developerExtrasEnabled())
+ return;
+
if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent())
networkAgent->didReceiveResponse(identifier, loader, response, resourceLoader);
if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent())
@@ -631,6 +637,9 @@
void InspectorInstrumentation::didFailLoadingImpl(InstrumentingAgents& instrumentingAgents, unsigned long identifier, DocumentLoader* loader, const ResourceError& error)
{
+ if (!instrumentingAgents.inspectorEnvironment().developerExtrasEnabled())
+ return;
+
if (InspectorNetworkAgent* networkAgent = instrumentingAgents.inspectorNetworkAgent())
networkAgent->didFailLoading(identifier, loader, error);
if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent())
@@ -821,6 +830,9 @@
void InspectorInstrumentation::addMessageToConsoleImpl(InstrumentingAgents& instrumentingAgents, std::unique_ptr<ConsoleMessage> message)
{
+ if (!instrumentingAgents.inspectorEnvironment().developerExtrasEnabled())
+ return;
+
MessageSource source = message->source();
MessageType type = message->type();
String messageText = message->message();
@@ -836,6 +848,9 @@
void InspectorInstrumentation::consoleCountImpl(InstrumentingAgents& instrumentingAgents, JSC::ExecState* state, Ref<ScriptArguments>&& arguments)
{
+ if (!instrumentingAgents.inspectorEnvironment().developerExtrasEnabled())
+ return;
+
if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent())
consoleAgent->count(state, WTFMove(arguments));
}
@@ -848,6 +863,9 @@
void InspectorInstrumentation::startConsoleTimingImpl(InstrumentingAgents& instrumentingAgents, Frame& frame, const String& title)
{
+ if (!instrumentingAgents.inspectorEnvironment().developerExtrasEnabled())
+ return;
+
if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent())
timelineAgent->time(frame, title);
if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent())
@@ -856,6 +874,9 @@
void InspectorInstrumentation::startConsoleTimingImpl(InstrumentingAgents& instrumentingAgents, const String& title)
{
+ if (!instrumentingAgents.inspectorEnvironment().developerExtrasEnabled())
+ return;
+
if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent())
consoleAgent->startTiming(title);
}
@@ -862,6 +883,9 @@
void InspectorInstrumentation::stopConsoleTimingImpl(InstrumentingAgents& instrumentingAgents, Frame& frame, const String& title, Ref<ScriptCallStack>&& stack)
{
+ if (!instrumentingAgents.inspectorEnvironment().developerExtrasEnabled())
+ return;
+
if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent())
consoleAgent->stopTiming(title, WTFMove(stack));
if (InspectorTimelineAgent* timelineAgent = instrumentingAgents.inspectorTimelineAgent())
@@ -870,6 +894,9 @@
void InspectorInstrumentation::stopConsoleTimingImpl(InstrumentingAgents& instrumentingAgents, const String& title, Ref<ScriptCallStack>&& stack)
{
+ if (!instrumentingAgents.inspectorEnvironment().developerExtrasEnabled())
+ return;
+
if (WebConsoleAgent* consoleAgent = instrumentingAgents.webConsoleAgent())
consoleAgent->stopTiming(title, WTFMove(stack));
}
Modified: trunk/Source/WebCore/inspector/InspectorInstrumentation.h (243662 => 243663)
--- trunk/Source/WebCore/inspector/InspectorInstrumentation.h 2019-03-29 20:56:20 UTC (rev 243662)
+++ trunk/Source/WebCore/inspector/InspectorInstrumentation.h 2019-03-29 21:49:53 UTC (rev 243663)
@@ -475,6 +475,7 @@
inline void InspectorInstrumentation::didClearWindowObjectInWorld(Frame& frame, DOMWrapperWorld& world)
{
+ FAST_RETURN_IF_NO_FRONTENDS(void());
if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))
didClearWindowObjectInWorldImpl(*instrumentingAgents, frame, world);
}
@@ -1088,6 +1089,7 @@
inline void InspectorInstrumentation::scriptExecutionBlockedByCSP(ScriptExecutionContext* context, const String& directiveText)
{
+ FAST_RETURN_IF_NO_FRONTENDS(void());
if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForContext(context))
scriptExecutionBlockedByCSPImpl(*instrumentingAgents, directiveText);
}
@@ -1101,6 +1103,7 @@
inline void InspectorInstrumentation::domContentLoadedEventFired(Frame& frame)
{
+ FAST_RETURN_IF_NO_FRONTENDS(void());
if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))
domContentLoadedEventFiredImpl(*instrumentingAgents, frame);
}
@@ -1107,6 +1110,7 @@
inline void InspectorInstrumentation::loadEventFired(Frame* frame)
{
+ FAST_RETURN_IF_NO_FRONTENDS(void());
if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))
loadEventFiredImpl(*instrumentingAgents, frame);
}
@@ -1113,6 +1117,7 @@
inline void InspectorInstrumentation::frameDetachedFromParent(Frame& frame)
{
+ FAST_RETURN_IF_NO_FRONTENDS(void());
if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))
frameDetachedFromParentImpl(*instrumentingAgents, frame);
}
@@ -1132,6 +1137,7 @@
inline void InspectorInstrumentation::loaderDetachedFromFrame(Frame& frame, DocumentLoader& loader)
{
+ FAST_RETURN_IF_NO_FRONTENDS(void());
if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))
loaderDetachedFromFrameImpl(*instrumentingAgents, loader);
}
@@ -1138,6 +1144,7 @@
inline void InspectorInstrumentation::frameStartedLoading(Frame& frame)
{
+ FAST_RETURN_IF_NO_FRONTENDS(void());
if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))
frameStartedLoadingImpl(*instrumentingAgents, frame);
}
@@ -1144,6 +1151,7 @@
inline void InspectorInstrumentation::frameStoppedLoading(Frame& frame)
{
+ FAST_RETURN_IF_NO_FRONTENDS(void());
if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))
frameStoppedLoadingImpl(*instrumentingAgents, frame);
}
@@ -1150,6 +1158,7 @@
inline void InspectorInstrumentation::frameScheduledNavigation(Frame& frame, Seconds delay)
{
+ FAST_RETURN_IF_NO_FRONTENDS(void());
if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))
frameScheduledNavigationImpl(*instrumentingAgents, frame, delay);
}
@@ -1156,6 +1165,7 @@
inline void InspectorInstrumentation::frameClearedScheduledNavigation(Frame& frame)
{
+ FAST_RETURN_IF_NO_FRONTENDS(void());
if (InstrumentingAgents* instrumentingAgents = instrumentingAgentsForFrame(frame))
frameClearedScheduledNavigationImpl(*instrumentingAgents, frame);
}
Modified: trunk/Source/WebCore/inspector/agents/WebConsoleAgent.cpp (243662 => 243663)
--- trunk/Source/WebCore/inspector/agents/WebConsoleAgent.cpp 2019-03-29 20:56:20 UTC (rev 243662)
+++ trunk/Source/WebCore/inspector/agents/WebConsoleAgent.cpp 2019-03-29 21:49:53 UTC (rev 243663)
@@ -50,6 +50,9 @@
void WebConsoleAgent::frameWindowDiscarded(DOMWindow* window)
{
+ if (!m_injectedScriptManager.inspectorEnvironment().developerExtrasEnabled())
+ return;
+
for (auto& message : m_consoleMessages) {
JSC::ExecState* exec = message->scriptState();
if (!exec)