Changeset 141296 in webkit


Ignore:
Timestamp:
Jan 30, 2013 12:22:45 PM (11 years ago)
Author:
adamk@chromium.org
Message:

[JSC] MutationObservers should not create circular, leaky references
https://bugs.webkit.org/show_bug.cgi?id=93661

Reviewed by Adam Barth.

This patch makes JSMutationCallback an entirely-custom class that
holds a weak reference to the function it wraps. To keep that function
alive, it also adds a PrivateName between the JSMutationObserver
wrapper and the function when the MutationObserver is constructed.

Unlike the generated JSC callbacks, JSMutationCallback doesn't hold a
reference to the JSDOMGlobalObject, instead holding the
DOMWrapperWorld it was created in. As an ActiveDOMCallback, it also
holds a weak pointer to ScriptExecutionContext (via ContextDestructionObserver).

It's not clear to me how to write a test for this. There's an existing
manual test in ManualTests/leak-cycle-observer-wrapper.html which may
be of use but which doesn't seem to currently give meaningful output.

  • CMakeLists.txt:
  • DerivedSources.cpp:
  • DerivedSources.make:
  • DerivedSources.pri:
  • GNUmakefile.list.am:
  • Target.pri:
  • UseJSC.cmake:
  • WebCore.gypi:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.vcxproj/WebCore.vcxproj:
  • WebCore.vcxproj/WebCore.vcxproj.filters:
  • WebCore.xcodeproj/project.pbxproj:
  • bindings/js/JSBindingsAllInOne.cpp:
  • bindings/js/JSMutationCallback.cpp: Added.

(WebCore):
(WebCore::JSMutationCallback::JSMutationCallback):
(WebCore::JSMutationCallback::~JSMutationCallback):
(WebCore::JSMutationCallback::handleEvent):

  • bindings/js/JSMutationCallback.h: Added.

(WebCore):
(JSMutationCallback): Instead of a JSCallbackData, hold a weak ref to the callback and a RefPtr to the DOMWrapperWorld.
(WebCore::JSMutationCallback::create):

  • bindings/js/JSMutationCallbackCustom.cpp: Removed.
  • bindings/js/JSMutationObserverCustom.cpp:

(WebCore::JSMutationObserverConstructor::constructJSMutationObserver):
When constructing the JSMutationObserver, add a reference via PrivateName from the MutationObserver to the callback function.

  • dom/MutationCallback.idl: Removed. Neither JSC nor V8 use an IDL file to generate this class any more.
Location:
trunk/Source/WebCore
Files:
2 added
2 deleted
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/CMakeLists.txt

    r141216 r141296  
    375375    dom/MessagePort.idl
    376376    dom/MouseEvent.idl
    377     dom/MutationCallback.idl
    378377    dom/MutationEvent.idl
    379378    dom/MutationObserver.idl
  • trunk/Source/WebCore/ChangeLog

    r141292 r141296  
     12013-01-30  Adam Klein  <adamk@chromium.org>
     2
     3        [JSC] MutationObservers should not create circular, leaky references
     4        https://bugs.webkit.org/show_bug.cgi?id=93661
     5
     6        Reviewed by Adam Barth.
     7
     8        This patch makes JSMutationCallback an entirely-custom class that
     9        holds a weak reference to the function it wraps. To keep that function
     10        alive, it also adds a PrivateName between the JSMutationObserver
     11        wrapper and the function when the MutationObserver is constructed.
     12
     13        Unlike the generated JSC callbacks, JSMutationCallback doesn't hold a
     14        reference to the JSDOMGlobalObject, instead holding the
     15        DOMWrapperWorld it was created in. As an ActiveDOMCallback, it also
     16        holds a weak pointer to ScriptExecutionContext (via ContextDestructionObserver).
     17
     18        It's not clear to me how to write a test for this. There's an existing
     19        manual test in ManualTests/leak-cycle-observer-wrapper.html which may
     20        be of use but which doesn't seem to currently give meaningful output.
     21
     22        * CMakeLists.txt:
     23        * DerivedSources.cpp:
     24        * DerivedSources.make:
     25        * DerivedSources.pri:
     26        * GNUmakefile.list.am:
     27        * Target.pri:
     28        * UseJSC.cmake:
     29        * WebCore.gypi:
     30        * WebCore.vcproj/WebCore.vcproj:
     31        * WebCore.vcxproj/WebCore.vcxproj:
     32        * WebCore.vcxproj/WebCore.vcxproj.filters:
     33        * WebCore.xcodeproj/project.pbxproj:
     34        * bindings/js/JSBindingsAllInOne.cpp:
     35        * bindings/js/JSMutationCallback.cpp: Added.
     36        (WebCore):
     37        (WebCore::JSMutationCallback::JSMutationCallback):
     38        (WebCore::JSMutationCallback::~JSMutationCallback):
     39        (WebCore::JSMutationCallback::handleEvent):
     40        * bindings/js/JSMutationCallback.h: Added.
     41        (WebCore):
     42        (JSMutationCallback): Instead of a JSCallbackData, hold a weak ref to the callback and a RefPtr to the DOMWrapperWorld.
     43        (WebCore::JSMutationCallback::create):
     44        * bindings/js/JSMutationCallbackCustom.cpp: Removed.
     45        * bindings/js/JSMutationObserverCustom.cpp:
     46        (WebCore::JSMutationObserverConstructor::constructJSMutationObserver):
     47        When constructing the JSMutationObserver, add a reference via PrivateName from the MutationObserver to the callback function.
     48        * dom/MutationCallback.idl: Removed. Neither JSC nor V8 use an IDL file to generate this class any more.
     49
    1502013-01-30  Elliott Sprehn  <esprehn@chromium.org>
    251
  • trunk/Source/WebCore/DerivedSources.cpp

    r140997 r141296  
    255255#include "JSMetadataCallback.cpp"
    256256#include "JSMouseEvent.cpp"
    257 #include "JSMutationCallback.cpp"
    258257#include "JSMutationEvent.cpp"
    259258#include "JSMutationObserver.cpp"
  • trunk/Source/WebCore/DerivedSources.make

    r141013 r141296  
    242242    $(WebCore)/dom/MessagePort.idl \
    243243    $(WebCore)/dom/MouseEvent.idl \
    244     $(WebCore)/dom/MutationCallback.idl \
    245244    $(WebCore)/dom/MutationEvent.idl \
    246245    $(WebCore)/dom/MutationObserver.idl \
  • trunk/Source/WebCore/DerivedSources.pri

    r140997 r141296  
    255255    $$PWD/dom/MessageEvent.idl \
    256256    $$PWD/dom/MessagePort.idl \
    257     $$PWD/dom/MutationCallback.idl \
    258257    $$PWD/dom/MutationEvent.idl \
    259258    $$PWD/dom/MutationObserver.idl \
  • trunk/Source/WebCore/GNUmakefile.list.am

    r141291 r141296  
    540540        DerivedSources/WebCore/JSMouseEvent.cpp \
    541541        DerivedSources/WebCore/JSMouseEvent.h \
    542         DerivedSources/WebCore/JSMutationCallback.cpp \
    543         DerivedSources/WebCore/JSMutationCallback.h \
    544542        DerivedSources/WebCore/JSMutationEvent.cpp \
    545543        DerivedSources/WebCore/JSMutationEvent.h \
     
    13891387        $(WebCore)/dom/MessagePort.idl \
    13901388        $(WebCore)/dom/MouseEvent.idl \
    1391         $(WebCore)/dom/MutationCallback.idl \
    13921389        $(WebCore)/dom/MutationEvent.idl \
    13931390        $(WebCore)/dom/MutationObserver.idl \
     
    23832380        Source/WebCore/bindings/js/JSMessagePortCustom.h \
    23842381        Source/WebCore/bindings/js/JSMicroDataItemValueCustom.cpp \
    2385         Source/WebCore/bindings/js/JSMutationCallbackCustom.cpp \
     2382        Source/WebCore/bindings/js/JSMutationCallback.cpp \
     2383        Source/WebCore/bindings/js/JSMutationCallback.h \
    23862384        Source/WebCore/bindings/js/JSMutationObserverCustom.cpp \
    23872385        Source/WebCore/bindings/js/JSNamedNodeMapCustom.cpp \
  • trunk/Source/WebCore/Target.pri

    r141255 r141296  
    154154     bindings/js/JSMessagePortCustom.h \
    155155     bindings/js/JSMicroDataItemValueCustom.cpp \
    156      bindings/js/JSMutationCallbackCustom.cpp \
     156     bindings/js/JSMutationCallback.cpp \
    157157     bindings/js/JSMutationObserverCustom.cpp \
    158158     bindings/js/JSNamedNodeMapCustom.cpp \
     
    13671367    bindings/js/JSLazyEventListener.h \
    13681368    bindings/js/JSLocationCustom.h \
     1369    bindings/js/JSMutationCallback.h \
    13691370    bindings/js/JSNodeCustom.h \
    13701371    bindings/js/JSNodeFilterCondition.h \
  • trunk/Source/WebCore/UseJSC.cmake

    r141063 r141296  
    114114    bindings/js/JSMessagePortCustom.cpp
    115115    bindings/js/JSMicroDataItemValueCustom.cpp
    116     bindings/js/JSMutationCallbackCustom.cpp
     116    bindings/js/JSMutationCallback.cpp
    117117    bindings/js/JSMutationObserverCustom.cpp
    118118    bindings/js/JSNamedNodeMapCustom.cpp
  • trunk/Source/WebCore/WebCore.gypi

    r141291 r141296  
    65686568            '<(PRODUCT_DIR)/DerivedSources/WebCore/JSMouseEvent.cpp',
    65696569            '<(PRODUCT_DIR)/DerivedSources/WebCore/JSMouseEvent.h',
    6570             '<(PRODUCT_DIR)/DerivedSources/WebCore/JSMutationCallback.cpp',
    6571             '<(PRODUCT_DIR)/DerivedSources/WebCore/JSMutationCallback.h',
    65726570            '<(PRODUCT_DIR)/DerivedSources/WebCore/JSMutationEvent.cpp',
    65736571            '<(PRODUCT_DIR)/DerivedSources/WebCore/JSMutationEvent.h',
  • trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj

    r141272 r141296  
    1173511735                        </File>
    1173611736                        <File
    11737                                 RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSMutationCallback.cpp"
    11738                                 >
    11739                                 <FileConfiguration
    11740                                         Name="Debug|Win32"
    11741                                         ExcludedFromBuild="true"
    11742                                         >
    11743                                         <Tool
    11744                                                 Name="VCCLCompilerTool"
    11745                                         />
    11746                                 </FileConfiguration>
    11747                                 <FileConfiguration
    11748                                         Name="Release|Win32"
    11749                                         ExcludedFromBuild="true"
    11750                                         >
    11751                                         <Tool
    11752                                                 Name="VCCLCompilerTool"
    11753                                         />
    11754                                 </FileConfiguration>
    11755                                 <FileConfiguration
    11756                                         Name="Debug_Cairo_CFLite|Win32"
    11757                                         ExcludedFromBuild="true"
    11758                                         >
    11759                                         <Tool
    11760                                                 Name="VCCLCompilerTool"
    11761                                         />
    11762                                 </FileConfiguration>
    11763                                 <FileConfiguration
    11764                                         Name="Release_Cairo_CFLite|Win32"
    11765                                         ExcludedFromBuild="true"
    11766                                         >
    11767                                         <Tool
    11768                                                 Name="VCCLCompilerTool"
    11769                                         />
    11770                                 </FileConfiguration>
    11771                                 <FileConfiguration
    11772                                         Name="Debug_All|Win32"
    11773                                         ExcludedFromBuild="true"
    11774                                         >
    11775                                         <Tool
    11776                                                 Name="VCCLCompilerTool"
    11777                                         />
    11778                                 </FileConfiguration>
    11779                                 <FileConfiguration
    11780                                         Name="Production|Win32"
    11781                                         ExcludedFromBuild="true"
    11782                                         >
    11783                                         <Tool
    11784                                                 Name="VCCLCompilerTool"
    11785                                         />
    11786                                 </FileConfiguration>
    11787                         </File>
    11788                         <File
    11789                                 RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSMutationCallback.h"
    11790                                 >
    11791                         </File>
    11792                         <File
    1179311737                                RelativePath="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSMutationEvent.cpp"
    1179411738                                >
     
    7039870342                                </File>
    7039970343                                <File
    70400                                         RelativePath="..\bindings\js\JSMutationCallbackCustom.cpp"
     70344                                        RelativePath="..\bindings\js\JSMutationCallback.cpp"
    7040170345                                        >
    7040270346                                        <FileConfiguration
     
    7044870392                                                />
    7044970393                                        </FileConfiguration>
     70394                                </File>
     70395                                <File
     70396                                        RelativePath="..\bindings\js\JSMutationCallback.h"
     70397                                        >
    7045070398                                </File>
    7045170399                                <File
  • trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj

    r141219 r141296  
    872872    </ClCompile>
    873873    <ClCompile Include="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSMouseEvent.cpp">
    874       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
    875       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
    876     </ClCompile>
    877     <ClCompile Include="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSMutationCallback.cpp">
    878874      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
    879875      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
     
    52985294      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
    52995295    </ClCompile>
    5300     <ClCompile Include="..\bindings\js\JSMutationCallbackCustom.cpp">
     5296    <ClCompile Include="..\bindings\js\JSMutationCallback.cpp">
    53015297      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
    53025298      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
     
    60236019    <ClInclude Include="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSMicroDataItemValue.h" />
    60246020    <ClInclude Include="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSMouseEvent.h" />
    6025     <ClInclude Include="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSMutationCallback.h" />
    60266021    <ClInclude Include="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSMutationEvent.h" />
    60276022    <ClInclude Include="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSMutationObserver.h" />
     
    80078002    <ClInclude Include="..\bindings\js\JSMainThreadExecState.h" />
    80088003    <ClInclude Include="..\bindings\js\JSMessagePortCustom.h" />
     8004    <ClInclude Include="..\bindings\js\JSMutationCallback.h" />
    80098005    <ClInclude Include="..\bindings\js\JSNodeCustom.h" />
    80108006    <ClInclude Include="..\bindings\js\JSNodeFilterCondition.h" />
  • trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters

    r141219 r141296  
    943943      <Filter>DerivedSources</Filter>
    944944    </ClCompile>
    945     <ClCompile Include="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSMutationCallback.cpp">
    946       <Filter>DerivedSources</Filter>
    947     </ClCompile>
    948945    <ClCompile Include="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSMutationEvent.cpp">
    949946      <Filter>DerivedSources</Filter>
     
    60256022      <Filter>bindings\js</Filter>
    60266023    </ClCompile>
    6027     <ClCompile Include="..\bindings\js\JSMutationCallbackCustom.cpp">
     6024    <ClCompile Include="..\bindings\js\JSMutationCallback.cpp">
    60286025      <Filter>bindings\js</Filter>
    60296026    </ClCompile>
     
    74497446      <Filter>DerivedSources</Filter>
    74507447    </ClInclude>
    7451     <ClInclude Include="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSMutationCallback.h">
    7452       <Filter>DerivedSources</Filter>
    7453     </ClInclude>
    74547448    <ClInclude Include="$(ConfigurationBuildDir)\obj\$(ProjectName)\DerivedSources\JSMutationEvent.h">
    74557449      <Filter>DerivedSources</Filter>
     
    1277812772    </ClInclude>
    1277912773    <ClInclude Include="..\bindings\js\JSMessagePortCustom.h">
     12774      <Filter>bindings\js</Filter>
     12775    </ClInclude>
     12776    <ClInclude Include="..\bindings\js\JSMutationCallback.h">
    1278012777      <Filter>bindings\js</Filter>
    1278112778    </ClInclude>
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r141219 r141296  
    59515951                C6F0900E14327B6100685849 /* MutationObserver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6F0900514327B6100685849 /* MutationObserver.cpp */; };
    59525952                C6F0900F14327B6100685849 /* MutationObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F0900614327B6100685849 /* MutationObserver.h */; settings = {ATTRIBUTES = (Private, ); }; };
    5953                 C6F0902814327D4F00685849 /* JSMutationCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6F0902014327D4F00685849 /* JSMutationCallback.cpp */; };
    5954                 C6F0902914327D4F00685849 /* JSMutationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F0902114327D4F00685849 /* JSMutationCallback.h */; };
    59555953                C6F0902C14327D4F00685849 /* JSMutationObserver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6F0902414327D4F00685849 /* JSMutationObserver.cpp */; };
    59565954                C6F0902D14327D4F00685849 /* JSMutationObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F0902514327D4F00685849 /* JSMutationObserver.h */; };
    59575955                C6F0917F143A2BB900685849 /* JSMutationObserverCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6F0917E143A2BB900685849 /* JSMutationObserverCustom.cpp */; };
    5958                 C6F09185143A6C3B00685849 /* JSMutationCallbackCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6F09184143A6C3B00685849 /* JSMutationCallbackCustom.cpp */; };
    59595956                C6F41047130C6E8900393DE4 /* EntryBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6F41046130C6E8900393DE4 /* EntryBase.cpp */; };
     5957                C6F420A216B7164E0052A9F2 /* JSMutationCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C6F420A016B7164E0052A9F2 /* JSMutationCallback.cpp */; };
     5958                C6F420A316B7164E0052A9F2 /* JSMutationCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = C6F420A116B7164E0052A9F2 /* JSMutationCallback.h */; };
    59605959                CA3BF67C10D99BAE00E6CE53 /* ScrollAnimator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CA3BF67B10D99BAE00E6CE53 /* ScrollAnimator.cpp */; };
    59615960                CA3BF67E10D99BAE00E6CE53 /* ScrollAnimator.h in Headers */ = {isa = PBXBuildFile; fileRef = CA3BF67D10D99BAE00E6CE53 /* ScrollAnimator.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    1348613485                C6F08FC81431000D00685849 /* JSMutationRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMutationRecord.h; sourceTree = "<group>"; };
    1348713486                C6F0900114327B6100685849 /* MutationCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MutationCallback.h; sourceTree = "<group>"; };
    13488                 C6F0900214327B6100685849 /* MutationCallback.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MutationCallback.idl; sourceTree = "<group>"; };
    1348913487                C6F0900514327B6100685849 /* MutationObserver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MutationObserver.cpp; sourceTree = "<group>"; };
    1349013488                C6F0900614327B6100685849 /* MutationObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MutationObserver.h; sourceTree = "<group>"; };
    1349113489                C6F0900714327B6100685849 /* MutationObserver.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MutationObserver.idl; sourceTree = "<group>"; };
    13492                 C6F0902014327D4F00685849 /* JSMutationCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMutationCallback.cpp; sourceTree = "<group>"; };
    13493                 C6F0902114327D4F00685849 /* JSMutationCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMutationCallback.h; sourceTree = "<group>"; };
    1349413490                C6F0902414327D4F00685849 /* JSMutationObserver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMutationObserver.cpp; sourceTree = "<group>"; };
    1349513491                C6F0902514327D4F00685849 /* JSMutationObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMutationObserver.h; sourceTree = "<group>"; };
    1349613492                C6F0917E143A2BB900685849 /* JSMutationObserverCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMutationObserverCustom.cpp; sourceTree = "<group>"; };
    13497                 C6F09184143A6C3B00685849 /* JSMutationCallbackCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMutationCallbackCustom.cpp; sourceTree = "<group>"; };
    1349813493                C6F41046130C6E8900393DE4 /* EntryBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EntryBase.cpp; path = Modules/filesystem/EntryBase.cpp; sourceTree = "<group>"; };
     13494                C6F420A016B7164E0052A9F2 /* JSMutationCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMutationCallback.cpp; sourceTree = "<group>"; };
     13495                C6F420A116B7164E0052A9F2 /* JSMutationCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMutationCallback.h; sourceTree = "<group>"; };
    1349913496                CA3BF67B10D99BAE00E6CE53 /* ScrollAnimator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollAnimator.cpp; sourceTree = "<group>"; };
    1350013497                CA3BF67D10D99BAE00E6CE53 /* ScrollAnimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollAnimator.h; sourceTree = "<group>"; };
     
    1946119458                                FE80DA610E9C4703000D6F75 /* JSGeoposition.cpp */,
    1946219459                                FE80DA620E9C4703000D6F75 /* JSGeoposition.h */,
    19463                                 C6F0902014327D4F00685849 /* JSMutationCallback.cpp */,
    19464                                 C6F0902114327D4F00685849 /* JSMutationCallback.h */,
    1946519460                                C6F0902414327D4F00685849 /* JSMutationObserver.cpp */,
    1946619461                                C6F0902514327D4F00685849 /* JSMutationObserver.h */,
     
    2078720782                                8F934D841189F1EE00508D5D /* JSMainThreadExecState.cpp */,
    2078820783                                8F934D831189F1EE00508D5D /* JSMainThreadExecState.h */,
     20784                                C6F420A016B7164E0052A9F2 /* JSMutationCallback.cpp */,
     20785                                C6F420A116B7164E0052A9F2 /* JSMutationCallback.h */,
    2078920786                                93B70D4F09EB0C7C009D8468 /* JSPluginElementFunctions.cpp */,
    2079020787                                93B70D5009EB0C7C009D8468 /* JSPluginElementFunctions.h */,
     
    2097220969                                41F584C6104652CB009CAA64 /* JSMessagePortCustom.h */,
    2097320970                                1059457215B42953004D37FD /* JSMicroDataItemValueCustom.cpp */,
    20974                                 C6F09184143A6C3B00685849 /* JSMutationCallbackCustom.cpp */,
    2097520971                                C6F0917E143A2BB900685849 /* JSMutationObserverCustom.cpp */,
    2097620972                                BCD9C25F0C17AA67005C90A2 /* JSNamedNodeMapCustom.cpp */,
     
    2240522401                                85031B320A44EFC700F992E0 /* MouseRelatedEvent.h */,
    2240622402                                C6F0900114327B6100685849 /* MutationCallback.h */,
    22407                                 C6F0900214327B6100685849 /* MutationCallback.idl */,
    2240822403                                85031B330A44EFC700F992E0 /* MutationEvent.cpp */,
    2240922404                                85031B340A44EFC700F992E0 /* MutationEvent.h */,
     
    2477724772                                1059457A15B42A43004D37FD /* JSMicroDataItemValue.h in Headers */,
    2477824773                                A86629D109DA2B48009633A5 /* JSMouseEvent.h in Headers */,
    24779                                 C6F0902914327D4F00685849 /* JSMutationCallback.h in Headers */,
     24774                                C6F420A316B7164E0052A9F2 /* JSMutationCallback.h in Headers */,
    2478024775                                65DF31FC09D1CC60000BE325 /* JSMutationEvent.h in Headers */,
    2478124776                                C6F0902D14327D4F00685849 /* JSMutationObserver.h in Headers */,
     
    2811628111                                1059457315B42953004D37FD /* JSMicroDataItemValueCustom.cpp in Sources */,
    2811728112                                A86629D209DA2B48009633A5 /* JSMouseEvent.cpp in Sources */,
    28118                                 C6F0902814327D4F00685849 /* JSMutationCallback.cpp in Sources */,
    28119                                 C6F09185143A6C3B00685849 /* JSMutationCallbackCustom.cpp in Sources */,
     28113                                C6F420A216B7164E0052A9F2 /* JSMutationCallback.cpp in Sources */,
    2812028114                                65DF31FB09D1CC60000BE325 /* JSMutationEvent.cpp in Sources */,
    2812128115                                C6F0902C14327D4F00685849 /* JSMutationObserver.cpp in Sources */,
  • trunk/Source/WebCore/bindings/js/JSBindingsAllInOne.cpp

    r141063 r141296  
    119119#include "JSMessagePortCustom.cpp"
    120120#include "JSMicroDataItemValueCustom.cpp"
    121 #include "JSMutationCallbackCustom.cpp"
     121#include "JSMutationCallback.cpp"
    122122#include "JSMutationObserverCustom.cpp"
    123123#include "JSNamedNodeMapCustom.cpp"
  • trunk/Source/WebCore/bindings/js/JSMutationObserverCustom.cpp

    r138811 r141296  
    3636#include "MutationObserver.h"
    3737#include <runtime/Error.h>
     38#include <runtime/PrivateName.h>
    3839
    3940using namespace JSC;
     
    5354
    5455    JSMutationObserverConstructor* jsConstructor = jsCast<JSMutationObserverConstructor*>(exec->callee());
    55     RefPtr<MutationCallback> callback = JSMutationCallback::create(object, jsConstructor->globalObject());
    56     return JSValue::encode(asObject(toJS(exec, jsConstructor->globalObject(), MutationObserver::create(callback.release()))));
     56    RefPtr<JSMutationCallback> callback = JSMutationCallback::create(object, jsConstructor->globalObject());
     57    JSObject* jsObserver = asObject(toJS(exec, jsConstructor->globalObject(), MutationObserver::create(callback.release())));
     58    PrivateName propertyName;
     59    jsObserver->putDirect(jsConstructor->globalObject()->globalData(), propertyName, object);
     60    return JSValue::encode(jsObserver);
    5761}
    5862
Note: See TracChangeset for help on using the changeset viewer.