⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 273438 in webkit


Ignore:
Timestamp:
Feb 24, 2021, 2:03:41 PM (6 years ago)
Author:
Chris Dumez
Message:

Regression(r268700) postMessage changes prototype of basic types
​https://bugs.webkit.org/show_bug.cgi?id=222228
<rdar://problem/74612853>

Reviewed by Geoffrey Garen.

Source/WebCore:

r268700 updated ScriptExecutionContext::globalObject() to call:
WebCore::globalObject(mainThreadNormalWorld(), downcast<Document>(*this).page())
instead of
frame ? frame->script().globalObject(mainThreadNormalWorld()) : nullptr

This was not right for subframes because globalObject() gets the globalObject from
the page's main frame instead of the document's frame.

This patch gets rid of the error-prone WebCore::globalObject() taking in a Page*
and replaces it with one taking in a Frame* to avoid such issues in the future.

Test: fast/dom/Window/postMessage-Object-prototype.html

  • bindings/js/ScriptState.cpp:

(WebCore::globalObject):

  • bindings/js/ScriptState.h:
  • dom/ScriptExecutionContext.cpp:

(WebCore::ScriptExecutionContext::globalObject):

  • inspector/InspectorFrontendHost.cpp:

(WebCore::InspectorFrontendHost::addSelfToGlobalObjectInWorld):
(WebCore::InspectorFrontendHost::showContextMenu):

LayoutTests:

Add layout test coverage.

  • fast/dom/Window/postMessage-Object-prototype-expected.txt: Added.
  • fast/dom/Window/postMessage-Object-prototype.html: Added.
  • fast/dom/Window/resources/postMessage-Object-prototype-frame.html: Added.
Location:
trunk
Files:
3 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r273436 r273438  
     12021-02-24  Chris Dumez  <cdumez@apple.com>
     2
     3        Regression(r268700) postMessage changes prototype of basic types
     4        https://bugs.webkit.org/show_bug.cgi?id=222228
     5        <rdar://problem/74612853>
     6
     7        Reviewed by Geoffrey Garen.
     8
     9        Add layout test coverage.
     10
     11        * fast/dom/Window/postMessage-Object-prototype-expected.txt: Added.
     12        * fast/dom/Window/postMessage-Object-prototype.html: Added.
     13        * fast/dom/Window/resources/postMessage-Object-prototype-frame.html: Added.
     14
    1152021-02-24  Jonathan Bedard  <jbedard@apple.com>
    216
  • trunk/Source/WebCore/ChangeLog

    r273435 r273438  
     12021-02-24  Chris Dumez  <cdumez@apple.com>
     2
     3        Regression(r268700) postMessage changes prototype of basic types
     4        https://bugs.webkit.org/show_bug.cgi?id=222228
     5        <rdar://problem/74612853>
     6
     7        Reviewed by Geoffrey Garen.
     8
     9        r268700 updated ScriptExecutionContext::globalObject() to call:
     10        `WebCore::globalObject(mainThreadNormalWorld(), downcast<Document>(*this).page())`
     11        instead of
     12        `frame ? frame->script().globalObject(mainThreadNormalWorld()) : nullptr`
     13
     14        This was not right for subframes because globalObject() gets the globalObject from
     15        the page's main frame instead of the document's frame.
     16
     17        This patch gets rid of the error-prone WebCore::globalObject() taking in a Page*
     18        and replaces it with one taking in a Frame* to avoid such issues in the future.
     19
     20        Test: fast/dom/Window/postMessage-Object-prototype.html
     21
     22        * bindings/js/ScriptState.cpp:
     23        (WebCore::globalObject):
     24        * bindings/js/ScriptState.h:
     25        * dom/ScriptExecutionContext.cpp:
     26        (WebCore::ScriptExecutionContext::globalObject):
     27        * inspector/InspectorFrontendHost.cpp:
     28        (WebCore::InspectorFrontendHost::addSelfToGlobalObjectInWorld):
     29        (WebCore::InspectorFrontendHost::showContextMenu):
     30
    1312021-02-24  Ziran Sun  <zsun@igalia.com>
    232
  • trunk/Source/WebCore/bindings/js/ScriptState.cpp

    r268775 r273438  
    9393}
    9494
    95 JSC::JSGlobalObject* globalObject(DOMWrapperWorld& world, Page* page)
     95JSC::JSGlobalObject* globalObject(DOMWrapperWorld& world, Frame* frame)
    9696{
    97     return page ? page->mainFrame().script().globalObject(world) : nullptr;
     97    return frame ? frame->script().globalObject(world) : nullptr;
    9898}
    9999
  • trunk/Source/WebCore/bindings/js/ScriptState.h

    r268700 r273438  
    4343class Frame;
    4444class Node;
    45 class Page;
    4645class ScriptExecutionContext;
    4746class WorkerOrWorkletGlobalScope;
    … …  
    5453
    5554JSC::JSGlobalObject* globalObject(DOMWrapperWorld&, Node*);
    56 WEBCORE_EXPORT JSC::JSGlobalObject* globalObject(DOMWrapperWorld&, Page*);
     55WEBCORE_EXPORT JSC::JSGlobalObject* globalObject(DOMWrapperWorld&, Frame*);
    5756JSC::JSGlobalObject* globalObject(WorkerOrWorkletGlobalScope&);
    5857
  • trunk/Source/WebCore/dom/ScriptExecutionContext.cpp

    r268868 r273438  
    513513{
    514514    if (is<Document>(*this))
    515         return WebCore::globalObject(mainThreadNormalWorld(), downcast<Document>(*this).page());
     515        return WebCore::globalObject(mainThreadNormalWorld(), downcast<Document>(*this).frame());
    516516
    517517    if (is<WorkerOrWorkletGlobalScope>(*this))
  • trunk/Source/WebCore/inspector/InspectorFrontendHost.cpp

    r273077 r273438  
    159159void InspectorFrontendHost::addSelfToGlobalObjectInWorld(DOMWrapperWorld& world)
    160160{
    161     auto& lexicalGlobalObject = *globalObject(world, m_frontendPage);
     161    auto& lexicalGlobalObject = *globalObject(world, m_frontendPage ? &m_frontendPage->mainFrame() : nullptr);
    162162    auto& vm = lexicalGlobalObject.vm();
    163163    JSC::JSLockHolder lock(vm);
    … …  
    504504    ASSERT(m_frontendPage);
    505505
    506     auto& lexicalGlobalObject = *globalObject(debuggerWorld(), m_frontendPage);
     506    auto& lexicalGlobalObject = *globalObject(debuggerWorld(), &m_frontendPage->mainFrame());
    507507    auto& vm = lexicalGlobalObject.vm();
    508508    auto value = lexicalGlobalObject.get(&lexicalGlobalObject, JSC::Identifier::fromString(vm, "InspectorFrontendAPI"));
Note: See TracChangeset for help on using the changeset viewer.