Skip to content
  • aroben@apple.com's avatar
    Pass NPP_SetWindow a null window handle during plugin destruction on non-Mac platforms · ae094af7
    aroben@apple.com authored
    This matches WebKit1.
    
    Fixes <http://webkit.org/b/47009> WebKit2 needs to call NPP_SetWindow when destroying a
    plugin
    
    Reviewed by Anders Carlsson.
    
    Source/WebKit2:
    
    * WebProcess/Plugins/Netscape/NetscapePlugin.cpp:
    (WebKit::NetscapePlugin::destroy): Null out our NPWindow's window handle and pass it to
    NPP_SetWindow (unless we're on Mac).
    
    Tools:
    
    Test that NPP_SetWindow is passed a null window handle during plugin destruction on non-Mac platforms
    
    * DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp:
    (pluginLogWithArguments): Moved code to format and log the message here...
    (pluginLog): ...from here.
    
    * DumpRenderTree/TestNetscapePlugIn/PluginObject.h: Added pluginLogWithArguments.
    
    * DumpRenderTree/TestNetscapePlugIn/PluginTest.cpp:
    (PluginTest::log): Added. Calls through to pluginLogWithArguments.
    
    * DumpRenderTree/TestNetscapePlugIn/PluginTest.h: Added log.
    
    * DumpRenderTree/TestNetscapePlugIn/Tests/NPPSetWindowCalledDuringDestruction.cpp: Added.
    (NPPSetWindowCalledDuringDestruction::setWillBeDestroyed): Records that destruction is about
    to begin.
    (NPPSetWindowCalledDuringDestruction::NPPSetWindowCalledDuringDestruction): Simple
    constructor.
    (NPPSetWindowCalledDuringDestruction::NPP_GetValue): Creates and returns a ScriptObject that
    can be used to invoke our setWillBeDestroyed function.
    (NPPSetWindowCalledDuringDestruction::NPP_SetWindow): Records what has happened (and logs if
    anything unexpected happens).
    (NPPSetWindowCalledDuringDestruction::NPP_Destroy): On Mac, logs a failure message if
    NPP_SetWindow was called during destruction. On other platforms, logs a failure message if
    NPP_SetWindow was *not* called during destruction.
    (NPPSetWindowCalledDuringDestruction::ScriptObject::hasMethod): Return true for our only
    method, setWillBeDestroyed.
    (NPPSetWindowCalledDuringDestruction::ScriptObject::invoke): Call through to the PluginTest
    object.
    
    * DumpRenderTree/DumpRenderTree.xcodeproj/project.pbxproj:
    * DumpRenderTree/TestNetscapePlugIn/win/TestNetscapePlugin.vcproj:
    * DumpRenderTree/qt/TestNetscapePlugin/TestNetscapePlugin.pro:
    * GNUmakefile.am:
    Added new test.
    
    * Scripts/old-run-webkit-tests: Skip the new test when using out-of-process plugins with
    WebKit1 on Mac, since it can't work properly due to <http://webkit.org/b/58077>.
    
    LayoutTests:
    
    Test that NPP_SetWindow is passed a null window handle during plugin destruction on non-Mac platforms
    
    * platform/win-wk2/Skipped: Removed a test that no longer crashes thanks to this fix.
    
    * plugins/npp-set-window-called-during-destruction-expected.txt: Added.
    * plugins/npp-set-window-called-during-destruction.html: Added.
    
    * platform/mac/plugins/npp-set-window-called-during-destruction-expected.txt: Added. This is
    different from the cross-platform results because we don't expect NPP_SetWindow to be called
    during destruction.
    
    * platform/win/plugins/npp-set-window-called-during-destruction-expected.txt: Added. This is
    a copy of the cross-platform results, needed to override the Mac-specific results.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@83300 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    ae094af7