REGRESSION (r66129): Loading full-frame .swf file crashes with flash blocker extensio...
authorbweinstein@apple.com <bweinstein@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 29 Sep 2010 22:59:49 +0000 (22:59 +0000)
committerbweinstein@apple.com <bweinstein@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 29 Sep 2010 22:59:49 +0000 (22:59 +0000)
commitd3760f34bb92974efe41b9e4b0386228f64f66d3
tree19e5eb8f6f5873aba70f0ecab21cb95608ecfade
parente605ffc6a47ce455d979287586d17bcef3940bca
REGRESSION (r66129): Loading full-frame .swf file crashes with flash blocker extension enabled
<https://bugs.webkit.org/show_bug.cgi?id=46773>
<rdar://problem/8390975>

Reviewed by Brady Eidson.

WebCore:

After r66129, start scripts were run on plugin documents, and cancelling the load of a plugin
document could cause Safari to crash.

If a plugin load on an initial document is cancelled, we cancel the main resource load (where the
main resource is the plugin), and if the load is restarted and allowed, we don't go through the manual
loading path like we do on the initial load of a plugin in a plugin document.

Tests: plugins/plugin-document-load-prevented-userscript.html
       plugins/plugin-document-willSendRequest-null.html

* html/HTMLEmbedElement.cpp:
(WebCore::HTMLEmbedElement::updateWidget): If the plugin load was cancelled, and this is in a
    plugin document, call a function on PluginDocument that cancels the main resource load, and
    sets a plugin document flag.
* html/PluginDocument.cpp:
(WebCore::PluginDocumentParser::appendBytes): Null check the widget's renderer, because it could be
    null if the load was cancelled.
(WebCore::PluginDocument::PluginDocument): Initialize the new variable.
(WebCore::PluginDocument::cancelManualPluginLoad): Cancel the main resource load of the plugin document
    (which is a plugin in the case of a plugin document).
* html/PluginDocument.h:
(WebCore::PluginDocument::shouldLoadPluginManually): Returns whether or not we should load the plugin
    manually.
(WebCore::PluginDocument::setShouldLoadPluginManually): Set whether or not we should load the plugin
    manually.
(WebCore::toPluginDocument):
* loader/SubframeLoader.cpp:
(WebCore::SubframeLoader::loadPlugin): Check if we should load the plugin manually according to the plugin
    document.

LayoutTests:

Add tests testing how plugin documents behave when the loading of their plugins are cancelled.

* plugins/plugin-document-load-prevented-userscript-expected.txt: Added.
* plugins/plugin-document-load-prevented-userscript.html: Added. Tests cancelling the load of a
    plugin in a plugin document using beforeload and preventDefault.
* plugins/plugin-document-willSendRequest-null-expected.txt: Added.
* plugins/plugin-document-willSendRequest-null.html: Added. Tests cancelling the load of a plugin
    in a plugin document by having willSendRequest return null.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@68702 268f45cc-cd09-0410-ab3c-d52691b4dbfc
LayoutTests/ChangeLog
LayoutTests/plugins/plugin-document-load-prevented-userscript-expected.txt [new file with mode: 0644]
LayoutTests/plugins/plugin-document-load-prevented-userscript.html [new file with mode: 0644]
LayoutTests/plugins/plugin-document-willSendRequest-null-expected.txt [new file with mode: 0644]
LayoutTests/plugins/plugin-document-willSendRequest-null.html [new file with mode: 0644]
WebCore/ChangeLog
WebCore/html/HTMLEmbedElement.cpp
WebCore/html/PluginDocument.cpp
WebCore/html/PluginDocument.h
WebCore/loader/SubframeLoader.cpp