@@ -3539,7 +3539,7 @@ index 5bc523a07233d6efab4ee18d19a6b8f105274664..d640783477744da05c5baed94dc0c168
3539
3539
DocumentWriter& writer() const { return m_writer; }
3540
3540
3541
3541
diff --git a/Source/WebCore/loader/FrameLoader.cpp b/Source/WebCore/loader/FrameLoader.cpp
3542
- index a1285851f259d82a63a86de58c53de3e3b02d914..b2493d7629504bd11594fb7107a2b8b8acfe3e1c 100644
3542
+ index a1285851f259d82a63a86de58c53de3e3b02d914..9b090e501f3212e8522ee77e8aa7fdae521793c1 100644
3543
3543
--- a/Source/WebCore/loader/FrameLoader.cpp
3544
3544
+++ b/Source/WebCore/loader/FrameLoader.cpp
3545
3545
@@ -1180,6 +1180,7 @@ void FrameLoader::loadInSameDocument(const URL& url, SerializedScriptValue* stat
@@ -3577,37 +3577,35 @@ index a1285851f259d82a63a86de58c53de3e3b02d914..b2493d7629504bd11594fb7107a2b8b8
3577
3577
}
3578
3578
3579
3579
void FrameLoader::continueFragmentScrollAfterNavigationPolicy(const ResourceRequest& request, bool shouldContinue)
3580
- @@ -3946,24 +3953,30 @@ String FrameLoader::referrer() const
3580
+ @@ -3946,24 +3953,29 @@ String FrameLoader::referrer() const
3581
3581
3582
3582
void FrameLoader::dispatchDidClearWindowObjectsInAllWorlds()
3583
3583
{
3584
3584
- if (!m_frame.script().canExecuteScripts(NotAboutToExecuteScript))
3585
3585
- return;
3586
- -
3586
+ + // It is essential that the normal world is cleared first.
3587
+ + // Various subsystem (InjectedScriptManager) will reset state upon normal
3588
+ + // world initialization.
3589
+ + DOMWrapperWorld& mainWorld = mainThreadNormalWorld();
3590
+ + dispatchDidClearWindowObjectInWorld(mainWorld);
3591
+
3587
3592
Vector<Ref<DOMWrapperWorld>> worlds;
3588
3593
ScriptController::getAllWorlds(worlds);
3589
3594
- for (auto& world : worlds)
3590
3595
- dispatchDidClearWindowObjectInWorld(world);
3591
- + // It is essential that the normal world is cleared first.
3592
- + // Various subsystem (InjectedScriptManager) will reset state upon normal
3593
- + // world initialization.
3594
- + Vector<DOMWrapperWorld*> nonNormalWorlds;
3595
3596
+ for (auto& world : worlds) {
3596
- + if (world->type () == DOMWrapperWorld::Type::Normal )
3597
+ + if (world.ptr () != &mainWorld )
3597
3598
+ dispatchDidClearWindowObjectInWorld(world);
3598
- + else
3599
- + nonNormalWorlds.append(&world.get());
3600
3599
+ }
3601
- + for (auto* world : nonNormalWorlds)
3602
- + dispatchDidClearWindowObjectInWorld(*world);
3603
3600
}
3604
3601
3605
3602
void FrameLoader::dispatchDidClearWindowObjectInWorld(DOMWrapperWorld& world)
3606
3603
{
3607
3604
- if (!m_frame.script().canExecuteScripts(NotAboutToExecuteScript) || !m_frame.windowProxy().existingJSWindowProxy(world))
3608
3605
- return;
3609
- + if (m_frame.script().canExecuteScripts(NotAboutToExecuteScript) && m_frame.windowProxy().existingJSWindowProxy(world)) {
3610
- + m_client.dispatchDidClearWindowObjectInWorld(world);
3606
+ + if (m_frame.windowProxy().existingJSWindowProxy(world)) {
3607
+ + if (m_frame.script().canExecuteScripts(NotAboutToExecuteScript))
3608
+ + m_client.dispatchDidClearWindowObjectInWorld(world);
3611
3609
3612
3610
- m_client.dispatchDidClearWindowObjectInWorld(world);
3613
3611
-
0 commit comments