Skip to content

Commit 82afbdc

Browse files
committed
[Site Isolation] Web Inspector: Only LocalFrame should require frame target and inspector controller
https://webkit.org/b/299493 rdar://161281114 Reviewed by BJ Burg. Given only LocalFrame should end up handling inspector commands and events, it should be worthwhile to tweak the design so that a frame target corresponds to a local frame rather than any frame. This should help simplify our architecture as we start implementing domains for the frame target (so that e.g. we don't need to check whether the inspected frame is local or remote all the time). Here's how frame targets are handled now in each process/component: - In UI process, it was already the case that the number of frame target proxies (WebFrameInspectorTargetProxy) equals to the number of local frames there are, due to each proxy associating with a WebFrameProxy. - In WebCore, only LocalFrame now creates an inspector controller (FrameInspectorController) to provide the inspector agents. - In WebKit, WebFrame now only creates an inspector target (WebFrameInspectorTarget) if it's local. This is now also done lazily as inspection is needed. With this change, future inspector-related objects working with frames can start targeting local frames instead. There's currently few use cases needing to adapt to this change, in WindowProxy, DOMWindow, and FrameConsoleClient, which are updated by this patch as well. No new tests as there's no intended noticeable changes in behavior. Existing inspector tests should cover use cases related to this change. * Source/WebCore/inspector/FrameInspectorController.cpp: (WebCore::FrameInspectorController::FrameInspectorController): * Source/WebCore/inspector/FrameInspectorController.h: * Source/WebCore/page/Frame.cpp: (WebCore::Frame::Frame): (WebCore::Frame::protectedInspectorController): Deleted. * Source/WebCore/page/Frame.h: (WebCore::Frame::inspectorController): Deleted. (WebCore::Frame::console): Deleted. (WebCore::Frame::console const): Deleted. * Source/WebCore/page/LocalFrame.cpp: (WebCore::LocalFrame::LocalFrame): (WebCore::LocalFrame::protectedInspectorController): * Source/WebCore/page/LocalFrame.h: In WebCore, only LocalFrame now has an inspector controller. * Source/WebCore/page/FrameConsoleClient.cpp: (WebCore::FrameConsoleClient::FrameConsoleClient): (WebCore::FrameConsoleClient::addMessage): (WebCore::FrameConsoleClient::messageWithTypeAndLevel): (WebCore::FrameConsoleClient::count): (WebCore::FrameConsoleClient::countReset): (WebCore::FrameConsoleClient::profile): (WebCore::FrameConsoleClient::profileEnd): (WebCore::FrameConsoleClient::takeHeapSnapshot): (WebCore::FrameConsoleClient::time): (WebCore::FrameConsoleClient::timeLog): (WebCore::FrameConsoleClient::timeEnd): (WebCore::FrameConsoleClient::timeStamp): (WebCore::FrameConsoleClient::screenshot): * Source/WebCore/page/FrameConsoleClient.h: Given FrameConsoleClient only operated on local frames, make it also now only owned by LocalFrame instead. * Source/WebCore/bindings/js/WindowProxy.cpp: (WebCore::WindowProxy::setDOMWindow): * Source/WebCore/page/DOMWindow.cpp: (WebCore::DOMWindow::console const): Adapt to now only LocalFrame has a console client. * Source/WebKit/WebProcess/Inspector/WebFrameInspectorTarget.cpp: (WebKit::WebFrameInspectorTarget::connect): (WebKit::WebFrameInspectorTarget::disconnect): (WebKit::WebFrameInspectorTarget::sendMessageToTargetBackend): * Source/WebKit/WebProcess/WebPage/WebFrame.cpp: (WebKit::WebFrame::WebFrame): (WebKit::WebFrame::ensureInspectorTarget): (WebKit::WebFrame::connectInspector): (WebKit::WebFrame::disconnectInspector): (WebKit::WebFrame::sendMessageToInspectorTarget): * Source/WebKit/WebProcess/WebPage/WebFrame.h: Make only local WebFrames create an inspector target, which is now lazily initialized. Canonical link: https://commits.webkit.org/300543@main
1 parent 6a265e4 commit 82afbdc

File tree

13 files changed

+91
-118
lines changed

13 files changed

+91
-118
lines changed

Source/WebCore/bindings/js/WindowProxy.cpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -189,17 +189,18 @@ void WindowProxy::setDOMWindow(DOMWindow* newDOMWindow)
189189

190190
windowProxy->setWindow(*newDOMWindow);
191191

192-
ScriptController* scriptController = nullptr;
193-
RefPtr page = m_frame->page();
194-
if (auto* localFrame = dynamicDowncast<LocalFrame>(*m_frame))
195-
scriptController = &localFrame->script();
192+
if (RefPtr localFrame = dynamicDowncast<LocalFrame>(m_frame.get())) {
193+
CheckedRef scriptController = localFrame->script();
194+
195+
// ScriptController's m_cacheableBindingRootObject persists between page navigations
196+
// so needs to know about the new JSDOMWindow.
197+
if (RefPtr cacheableBindingRootObject = scriptController->existingCacheableBindingRootObject())
198+
cacheableBindingRootObject->updateGlobalObject(windowProxy->window());
196199

197-
// ScriptController's m_cacheableBindingRootObject persists between page navigations
198-
// so needs to know about the new JSDOMWindow.
199-
if (RefPtr cacheableBindingRootObject = scriptController ? scriptController->existingCacheableBindingRootObject() : nullptr)
200-
cacheableBindingRootObject->updateGlobalObject(windowProxy->window());
200+
windowProxy->window()->setConsoleClient(localFrame->console());
201+
}
201202

202-
windowProxy->window()->setConsoleClient(m_frame->console());
203+
RefPtr page = m_frame->page();
203204
windowProxy->attachDebugger(page ? page->debugger() : nullptr);
204205
if (page)
205206
windowProxy->window()->setProfileGroup(page->group().identifier());

Source/WebCore/inspector/FrameInspectorController.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ using namespace Inspector;
5555

5656
WTF_MAKE_TZONE_ALLOCATED_IMPL(FrameInspectorController);
5757

58-
FrameInspectorController::FrameInspectorController(Frame& frame)
58+
FrameInspectorController::FrameInspectorController(LocalFrame& frame)
5959
: m_frame(frame)
6060
, m_instrumentingAgents(InstrumentingAgents::create(*this))
6161
, m_injectedScriptManager(makeUniqueRef<WebInjectedScriptManager>(*this, WebInjectedScriptHost::create()))

Source/WebCore/inspector/FrameInspectorController.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,18 +47,18 @@ class FrontendRouter;
4747

4848
namespace WebCore {
4949

50-
class Frame;
5150
class InspectorBackendClient;
5251
class InspectorFrontendClient;
5352
class InspectorInstrumentation;
5453
class InstrumentingAgents;
54+
class LocalFrame;
5555
class WebInjectedScriptManager;
5656

5757
class FrameInspectorController final : public Inspector::InspectorEnvironment, public CanMakeWeakPtr<FrameInspectorController> {
5858
WTF_MAKE_NONCOPYABLE(FrameInspectorController);
5959
WTF_MAKE_TZONE_ALLOCATED(FrameInspectorController);
6060
public:
61-
FrameInspectorController(Frame&);
61+
FrameInspectorController(LocalFrame&);
6262
~FrameInspectorController() override;
6363

6464
WEBCORE_EXPORT void ref() const;
@@ -83,7 +83,7 @@ class FrameInspectorController final : public Inspector::InspectorEnvironment, p
8383

8484
void createLazyAgents();
8585

86-
WeakRef<Frame> m_frame;
86+
WeakRef<LocalFrame> m_frame;
8787
const Ref<InstrumentingAgents> m_instrumentingAgents;
8888
const UniqueRef<WebInjectedScriptManager> m_injectedScriptManager;
8989
const Ref<Inspector::FrontendRouter> m_frontendRouter;

Source/WebCore/page/DOMWindow.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ void DOMWindow::close()
138138

139139
FrameConsoleClient* DOMWindow::console() const
140140
{
141-
RefPtr frame = this->frame();
141+
RefPtr frame = dynamicDowncast<LocalFrame>(this->frame());
142142
return frame ? &frame->console() : nullptr;
143143
}
144144

Source/WebCore/page/Frame.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,7 @@
2727
#include "Frame.h"
2828

2929
#include "ContainerNodeInlines.h"
30-
#include "FrameConsoleClient.h"
3130
#include "FrameInlines.h"
32-
#include "FrameInspectorController.h"
3331
#include "FrameLoader.h"
3432
#include "FrameLoaderClient.h"
3533
#include "HTMLFrameOwnerElement.h"
@@ -121,8 +119,6 @@ Frame::Frame(Page& page, FrameIdentifier frameID, FrameType frameType, HTMLFrame
121119
, m_navigationScheduler(makeUniqueRefWithoutRefCountedCheck<NavigationScheduler>(*this))
122120
, m_opener(opener)
123121
, m_frameTreeSyncData(WTFMove(frameTreeSyncData))
124-
, m_inspectorController(makeUniqueRefWithoutRefCountedCheck<FrameInspectorController>(*this))
125-
, m_consoleClient(makeUniqueRef<FrameConsoleClient>(*this))
126122
{
127123
relaxAdoptionRequirement();
128124
if (parent && addToFrameTree == AddToFrameTree::Yes)
@@ -340,11 +336,6 @@ bool Frame::frameCanCreatePaymentSession() const
340336
return m_frameTreeSyncData->frameCanCreatePaymentSession;
341337
}
342338

343-
Ref<FrameInspectorController> Frame::protectedInspectorController()
344-
{
345-
return m_inspectorController.get();
346-
}
347-
348339
bool Frame::isPrinting() const
349340
{
350341
return m_isPrinting;

Source/WebCore/page/Frame.h

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ namespace WebCore {
4141
class DOMWindow;
4242
class Event;
4343
class FloatSize;
44-
class FrameConsoleClient;
45-
class FrameInspectorController;
4644
class FrameLoaderClient;
4745
class FrameLoadRequest;
4846
class FrameView;
@@ -149,11 +147,6 @@ class Frame : public RefCountedAndCanMakeWeakPtr<Frame> {
149147
FrameTreeSyncData& frameTreeSyncData() const { return m_frameTreeSyncData.get(); }
150148
WEBCORE_EXPORT virtual RefPtr<SecurityOrigin> frameDocumentSecurityOrigin() const = 0;
151149

152-
FrameInspectorController& inspectorController() { return m_inspectorController.get(); }
153-
WEBCORE_EXPORT Ref<FrameInspectorController> protectedInspectorController();
154-
FrameConsoleClient& console() { return m_consoleClient.get(); }
155-
const FrameConsoleClient& console() const { return m_consoleClient.get(); }
156-
157150
WEBCORE_EXPORT virtual void setPrinting(bool printing, FloatSize pageSize, FloatSize originalPageSize, float maximumShrinkRatio, AdjustViewSize, NotifyUIProcess = NotifyUIProcess::Yes);
158151
WEBCORE_EXPORT bool isPrinting() const;
159152

@@ -182,9 +175,6 @@ class Frame : public RefCountedAndCanMakeWeakPtr<Frame> {
182175
bool m_isPrinting { false };
183176

184177
Ref<FrameTreeSyncData> m_frameTreeSyncData;
185-
186-
const UniqueRef<FrameInspectorController> m_inspectorController;
187-
const UniqueRef<FrameConsoleClient> m_consoleClient;
188178
};
189179

190180
} // namespace WebCore

Source/WebCore/page/FrameConsoleClient.cpp

Lines changed: 37 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include "Document.h"
3737
#include "ElementChildIteratorInlines.h"
3838
#include "Frame.h"
39+
#include "FrameInlines.h"
3940
#include "FrameSnapshotting.h"
4041
#include "HTMLCanvasElement.h"
4142
#include "HTMLImageElement.h"
@@ -96,7 +97,7 @@ using namespace Inspector;
9697

9798
WTF_MAKE_TZONE_ALLOCATED_IMPL(FrameConsoleClient);
9899

99-
FrameConsoleClient::FrameConsoleClient(Frame& frame)
100+
FrameConsoleClient::FrameConsoleClient(LocalFrame& frame)
100101
: m_frame(frame)
101102
{
102103
}
@@ -139,10 +140,7 @@ void FrameConsoleClient::logMessageToSystemConsole(const Inspector::ConsoleMessa
139140

140141
void FrameConsoleClient::addMessage(std::unique_ptr<Inspector::ConsoleMessage>&& consoleMessage)
141142
{
142-
RefPtr frame = dynamicDowncast<LocalFrame>(m_frame.get());
143-
if (!frame)
144-
return;
145-
143+
Ref frame = m_frame.get();
146144
RefPtr page = frame->page();
147145
if (!page)
148146
return;
@@ -173,7 +171,7 @@ void FrameConsoleClient::addMessage(std::unique_ptr<Inspector::ConsoleMessage>&&
173171
#if ENABLE(WEBDRIVER_BIDI)
174172
AutomationInstrumentation::addMessageToConsole(consoleMessage);
175173
#endif
176-
InspectorInstrumentation::addMessageToConsole(*frame, WTFMove(consoleMessage));
174+
InspectorInstrumentation::addMessageToConsole(frame.get(), WTFMove(consoleMessage));
177175
}
178176

179177
void FrameConsoleClient::addMessage(MessageSource source, MessageLevel level, const String& message, unsigned long requestIdentifier, Document* document)
@@ -209,10 +207,6 @@ void FrameConsoleClient::addMessage(MessageSource source, MessageLevel level, co
209207

210208
void FrameConsoleClient::messageWithTypeAndLevel(MessageType type, MessageLevel level, JSC::JSGlobalObject* lexicalGlobalObject, Ref<Inspector::ScriptArguments>&& arguments)
211209
{
212-
RefPtr frame = dynamicDowncast<LocalFrame>(m_frame.get());
213-
if (!frame)
214-
return;
215-
216210
String messageText;
217211
std::span<const String> additionalArguments;
218212
Vector<String> messageArgumentsVector = arguments->getArgumentsAsStrings();
@@ -230,7 +224,8 @@ void FrameConsoleClient::messageWithTypeAndLevel(MessageType type, MessageLevel
230224
#if ENABLE(WEBDRIVER_BIDI)
231225
AutomationInstrumentation::addMessageToConsole(message);
232226
#endif
233-
InspectorInstrumentation::addMessageToConsole(*frame, WTFMove(message));
227+
Ref frame = m_frame.get();
228+
InspectorInstrumentation::addMessageToConsole(frame.get(), WTFMove(message));
234229

235230
RefPtr page = frame->page();
236231
if (!page)
@@ -252,84 +247,57 @@ void FrameConsoleClient::messageWithTypeAndLevel(MessageType type, MessageLevel
252247

253248
void FrameConsoleClient::count(JSC::JSGlobalObject* lexicalGlobalObject, const String& label)
254249
{
255-
RefPtr frame = dynamicDowncast<LocalFrame>(m_frame.get());
256-
if (!frame)
257-
return;
258-
259-
InspectorInstrumentation::consoleCount(*frame, lexicalGlobalObject, label);
250+
Ref frame = m_frame.get();
251+
InspectorInstrumentation::consoleCount(frame.get(), lexicalGlobalObject, label);
260252
}
261253

262254
void FrameConsoleClient::countReset(JSC::JSGlobalObject* lexicalGlobalObject, const String& label)
263255
{
264-
RefPtr frame = dynamicDowncast<LocalFrame>(m_frame.get());
265-
if (!frame)
266-
return;
267-
268-
InspectorInstrumentation::consoleCountReset(*frame, lexicalGlobalObject, label);
256+
Ref frame = m_frame.get();
257+
InspectorInstrumentation::consoleCountReset(frame.get(), lexicalGlobalObject, label);
269258
}
270259

271260
void FrameConsoleClient::profile(JSC::JSGlobalObject*, const String& title)
272261
{
273-
RefPtr frame = dynamicDowncast<LocalFrame>(m_frame.get());
274-
if (!frame)
275-
return;
276-
277-
InspectorInstrumentation::startProfiling(*frame, title);
262+
Ref frame = m_frame.get();
263+
InspectorInstrumentation::startProfiling(frame.get(), title);
278264
}
279265

280266
void FrameConsoleClient::profileEnd(JSC::JSGlobalObject*, const String& title)
281267
{
282-
RefPtr frame = dynamicDowncast<LocalFrame>(m_frame.get());
283-
if (!frame)
284-
return;
285-
268+
Ref frame = m_frame.get();
286269
// FIXME: <https://webkit.org/b/153499> Web Inspector: console.profile should use the new Sampling Profiler
287-
InspectorInstrumentation::stopProfiling(*frame, title);
270+
InspectorInstrumentation::stopProfiling(frame.get(), title);
288271
}
289272

290273
void FrameConsoleClient::takeHeapSnapshot(JSC::JSGlobalObject*, const String& title)
291274
{
292-
RefPtr frame = dynamicDowncast<LocalFrame>(m_frame.get());
293-
if (!frame)
294-
return;
295-
296-
InspectorInstrumentation::takeHeapSnapshot(*frame, title);
275+
Ref frame = m_frame.get();
276+
InspectorInstrumentation::takeHeapSnapshot(frame.get(), title);
297277
}
298278

299279
void FrameConsoleClient::time(JSC::JSGlobalObject* lexicalGlobalObject, const String& label)
300280
{
301-
RefPtr frame = dynamicDowncast<LocalFrame>(m_frame.get());
302-
if (!frame)
303-
return;
304-
305-
InspectorInstrumentation::startConsoleTiming(*frame, lexicalGlobalObject, label);
281+
Ref frame = m_frame.get();
282+
InspectorInstrumentation::startConsoleTiming(frame.get(), lexicalGlobalObject, label);
306283
}
307284

308285
void FrameConsoleClient::timeLog(JSC::JSGlobalObject* lexicalGlobalObject, const String& label, Ref<ScriptArguments>&& arguments)
309286
{
310-
RefPtr frame = dynamicDowncast<LocalFrame>(m_frame.get());
311-
if (!frame)
312-
return;
313-
314-
InspectorInstrumentation::logConsoleTiming(*frame, lexicalGlobalObject, label, WTFMove(arguments));
287+
Ref frame = m_frame.get();
288+
InspectorInstrumentation::logConsoleTiming(frame.get(), lexicalGlobalObject, label, WTFMove(arguments));
315289
}
316290

317291
void FrameConsoleClient::timeEnd(JSC::JSGlobalObject* lexicalGlobalObject, const String& label)
318292
{
319-
RefPtr frame = dynamicDowncast<LocalFrame>(m_frame.get());
320-
if (!frame)
321-
return;
322-
323-
InspectorInstrumentation::stopConsoleTiming(*frame, lexicalGlobalObject, label);
293+
Ref frame = m_frame.get();
294+
InspectorInstrumentation::stopConsoleTiming(frame.get(), lexicalGlobalObject, label);
324295
}
325296

326297
void FrameConsoleClient::timeStamp(JSC::JSGlobalObject*, Ref<ScriptArguments>&& arguments)
327298
{
328-
RefPtr frame = dynamicDowncast<LocalFrame>(m_frame.get());
329-
if (!frame)
330-
return;
331-
332-
InspectorInstrumentation::consoleTimeStamp(*frame, WTFMove(arguments));
299+
Ref frame = m_frame.get();
300+
InspectorInstrumentation::consoleTimeStamp(frame.get(), WTFMove(arguments));
333301
}
334302

335303
static JSC::JSObject* objectArgumentAt(ScriptArguments& arguments, unsigned index)
@@ -434,10 +402,9 @@ void FrameConsoleClient::screenshot(JSC::JSGlobalObject* lexicalGlobalObject, Re
434402

435403
if (dataURL.isEmpty()) {
436404
if (!snapshot) {
437-
if (RefPtr localFrame = dynamicDowncast<LocalFrame>(m_frame.get())) {
438-
if (RefPtr localMainFrame = localFrame->localMainFrame())
439-
snapshot = WebCore::snapshotNode(*localMainFrame, *node, { { }, PixelFormat::BGRA8, DestinationColorSpace::SRGB() });
440-
}
405+
Ref frame = m_frame.get();
406+
if (RefPtr localMainFrame = frame->localMainFrame())
407+
snapshot = WebCore::snapshotNode(*localMainFrame, *node, { { }, PixelFormat::BGRA8, DestinationColorSpace::SRGB() });
441408
}
442409

443410
if (snapshot)
@@ -469,11 +436,10 @@ void FrameConsoleClient::screenshot(JSC::JSGlobalObject* lexicalGlobalObject, Re
469436
} else if (auto* rect = JSDOMRectReadOnly::toWrapped(vm, possibleTarget)) {
470437
target = possibleTarget;
471438
if (InspectorInstrumentation::hasFrontends()) [[unlikely]] {
472-
if (RefPtr localFrame = dynamicDowncast<LocalFrame>(m_frame.get())) {
473-
if (RefPtr localMainFrame = localFrame->localMainFrame()) {
474-
if (auto snapshot = WebCore::snapshotFrameRect(*localMainFrame, enclosingIntRect(rect->toFloatRect()), { { }, PixelFormat::BGRA8, DestinationColorSpace::SRGB() }))
475-
dataURL = snapshot->toDataURL("image/png"_s, std::nullopt, PreserveResolution::Yes);
476-
}
439+
Ref frame = m_frame.get();
440+
if (RefPtr localMainFrame = frame->localMainFrame()) {
441+
if (auto snapshot = WebCore::snapshotFrameRect(*localMainFrame, enclosingIntRect(rect->toFloatRect()), { { }, PixelFormat::BGRA8, DestinationColorSpace::SRGB() }))
442+
dataURL = snapshot->toDataURL("image/png"_s, std::nullopt, PreserveResolution::Yes);
477443
}
478444
}
479445
} else {
@@ -487,13 +453,12 @@ void FrameConsoleClient::screenshot(JSC::JSGlobalObject* lexicalGlobalObject, Re
487453

488454
if (InspectorInstrumentation::hasFrontends()) [[unlikely]] {
489455
if (!target) {
490-
if (RefPtr localFrame = dynamicDowncast<LocalFrame>(m_frame.get())) {
491-
if (RefPtr localMainFrame = localFrame->localMainFrame()) {
492-
// If no target is provided, capture an image of the viewport.
493-
auto viewportRect = localMainFrame->view()->unobscuredContentRect();
494-
if (auto snapshot = WebCore::snapshotFrameRect(*localMainFrame, viewportRect, { { }, PixelFormat::BGRA8, DestinationColorSpace::SRGB() }))
495-
dataURL = snapshot->toDataURL("image/png"_s, std::nullopt, PreserveResolution::Yes);
496-
}
456+
Ref frame = m_frame.get();
457+
if (RefPtr localMainFrame = frame->localMainFrame()) {
458+
// If no target is provided, capture an image of the viewport.
459+
auto viewportRect = localMainFrame->view()->unobscuredContentRect();
460+
if (auto snapshot = WebCore::snapshotFrameRect(*localMainFrame, viewportRect, { { }, PixelFormat::BGRA8, DestinationColorSpace::SRGB() }))
461+
dataURL = snapshot->toDataURL("image/png"_s, std::nullopt, PreserveResolution::Yes);
497462
}
498463
}
499464

Source/WebCore/page/FrameConsoleClient.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,14 @@ using JSC::MessageType;
4747
namespace WebCore {
4848

4949
class Document;
50-
class Frame;
50+
class LocalFrame;
5151
class StringCallback;
5252

5353
class WEBCORE_EXPORT FrameConsoleClient final : public JSC::ConsoleClient, public CanMakeCheckedPtr<FrameConsoleClient> {
5454
WTF_MAKE_TZONE_ALLOCATED_EXPORT(FrameConsoleClient, WEBCORE_EXPORT);
5555
WTF_OVERRIDE_DELETE_FOR_CHECKED_PTR(FrameConsoleClient);
5656
public:
57-
explicit FrameConsoleClient(Frame&);
57+
explicit FrameConsoleClient(LocalFrame&);
5858
virtual ~FrameConsoleClient();
5959

6060
FrameConsoleClient(const FrameConsoleClient&) = delete;
@@ -93,7 +93,7 @@ class WEBCORE_EXPORT FrameConsoleClient final : public JSC::ConsoleClient, publi
9393
void recordEnd(JSC::JSGlobalObject*, Ref<Inspector::ScriptArguments>&&) override;
9494
void screenshot(JSC::JSGlobalObject*, Ref<Inspector::ScriptArguments>&&) override;
9595

96-
WeakRef<Frame> m_frame;
96+
WeakRef<LocalFrame> m_frame;
9797
};
9898

9999
} // namespace WebCore

0 commit comments

Comments
 (0)