From 17435213d85c34b345917eb142f4b9a9780ecc55 Mon Sep 17 00:00:00 2001
From: "darin@chromium.org"
 <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>
Date: Tue, 15 Sep 2009 18:14:36 +0000
Subject: [PATCH] Fix LayoutTests/plugins/destroy-during-npp-new.html

We crash if we try to report geometry for a plugin that has been
removed from the DOM.

This CL makes changes to main.cpp to support the layout test,
which corresponds to http://trac.webkit.org/changeset/48361.

R=jam
BUG=21841
TEST=covered by layout test

Review URL: http://codereview.chromium.org/196126

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@26234 0039d316-1c4b-4281-b951-d872f2087c98
---
 webkit/api/src/WebPluginContainerImpl.cpp       | 3 ++-
 webkit/tools/layout_tests/test_expectations.txt | 1 -
 webkit/tools/npapi_layout_test_plugin/main.cpp  | 5 ++++-
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/webkit/api/src/WebPluginContainerImpl.cpp b/webkit/api/src/WebPluginContainerImpl.cpp
index 0f839a93abe7f..96cbd90aa400a 100644
--- a/webkit/api/src/WebPluginContainerImpl.cpp
+++ b/webkit/api/src/WebPluginContainerImpl.cpp
@@ -211,7 +211,8 @@ void WebPluginContainerImpl::invalidateRect(const WebRect& rect)
 
 void WebPluginContainerImpl::reportGeometry()
 {
-    if (!parent())
+    // We cannot compute geometry without an associated RenderObject.
+    if (!parent() || !m_element->renderer())
         return;
 
     IntRect windowRect, clipRect;
diff --git a/webkit/tools/layout_tests/test_expectations.txt b/webkit/tools/layout_tests/test_expectations.txt
index 0b1fbad0b5652..a266923715553 100755
--- a/webkit/tools/layout_tests/test_expectations.txt
+++ b/webkit/tools/layout_tests/test_expectations.txt
@@ -2317,7 +2317,6 @@ BUG21767 : LayoutTests/http/tests/security/cross-frame-access-enumeration.html =
 // WK roll to 48371
 BUG21840 : LayoutTests/http/tests/loading/basic-auth-resend-wrong-credentials.html = FAIL
 BUG21840 : LayoutTests/http/tests/loading/basic-credentials-sent-automatically.html = FAIL
-BUG21841 : LayoutTests/plugins/destroy-during-npp-new.html = FAIL
 
 // missing upstream baseline from 48368
 BUG21842 SKIP WIN LINUX : LayoutTests/platform/win/accessibility/scroll-to-anchor.html = FAIL
diff --git a/webkit/tools/npapi_layout_test_plugin/main.cpp b/webkit/tools/npapi_layout_test_plugin/main.cpp
index fbd9b82371ee7..b546efe5c590a 100644
--- a/webkit/tools/npapi_layout_test_plugin/main.cpp
+++ b/webkit/tools/npapi_layout_test_plugin/main.cpp
@@ -143,6 +143,8 @@ void NPAPI NP_Shutdown(void)
 {
 }
 
+static void executeScript(const PluginObject* obj, const char* script);
+
 NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, char *argn[], char *argv[], NPSavedData *saved)
 {
     if (browser->version >= 14) {
@@ -164,7 +166,8 @@ NPError NPP_New(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, ch
                         fflush(stdout);
                     }
                 }
-            }
+            } else if (strcasecmp(argn[i], "cleardocumentduringnew") == 0)
+                executeScript(obj, "document.body.innerHTML = ''");
         }
 
         instance->pdata = obj;
-- 
GitLab