summaryrefslogtreecommitdiffstats
path: root/chrome/test/ui
diff options
context:
space:
mode:
authorananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-10-28 21:54:08 +0000
committerananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-10-28 21:54:08 +0000
commit241639dd034255478926cf4e7dea7447717220cc (patch)
treef195e9e508fb13861020865fff013b4d93c3dd52 /chrome/test/ui
parent8907d0469ed010147265c95017102d1d976565f3 (diff)
downloadchromium_src-241639dd034255478926cf4e7dea7447717220cc.zip
chromium_src-241639dd034255478926cf4e7dea7447717220cc.tar.gz
chromium_src-241639dd034255478926cf4e7dea7447717220cc.tar.bz2
Proposed fix for http://b/issue?id=1362948, which is a crash in the rendererwhen we invoke the setCursor call on the parent view in WebPluginImpl::handleEvent.
This crash occurs because the plugin is deleted in the context of a mouse down event. This could occur by invoking a javascript function via NPN_Evaluate. On return from the HandleEvent sync call we attempt to retreive the parent frame, which returns NULL and hence the crash. The fix is to retreive the parent frameview at the start of the WebPluginImpl::handleMouseEvent function and use it whereever needed. Added a unit test which deletes the plugin instance in a mousemove event.R=jamBug=1362948 Review URL: http://codereview.chromium.org/8178 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@4094 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/test/ui')
-rw-r--r--chrome/test/ui/npapi_uitest.cpp38
1 files changed, 37 insertions, 1 deletions
diff --git a/chrome/test/ui/npapi_uitest.cpp b/chrome/test/ui/npapi_uitest.cpp
index bce1497..58c6574 100644
--- a/chrome/test/ui/npapi_uitest.cpp
+++ b/chrome/test/ui/npapi_uitest.cpp
@@ -279,4 +279,40 @@ TEST_F(NPAPIVisiblePluginTester, OpenPopupWindowWithPlugin) {
WaitForFinish("plugin_popup_with_plugin_target", "1", url,
kTestCompleteCookie, kTestCompleteSuccess,
kShortWaitTimeout);
-} \ No newline at end of file
+}
+
+// Tests if a plugin executing a self deleting script in the context of
+// a synchronous mousemove works correctly
+TEST_F(NPAPIVisiblePluginTester, SelfDeletePluginInvokeInSynchronousMouseMove) {
+ if (!UITest::in_process_plugins() && !UITest::in_process_renderer()) {
+ scoped_ptr<TabProxy> tab_proxy(GetActiveTab());
+ HWND tab_window = NULL;
+ tab_proxy->GetHWND(&tab_window);
+
+ EXPECT_TRUE(IsWindow(tab_window));
+
+ show_window_ = true;
+ std::wstring test_case = L"execute_script_delete_in_mouse_move.html";
+ GURL url = GetTestUrl(L"npapi", test_case);
+ NavigateToURL(url);
+
+ POINT cursor_position = {130, 130};
+ ClientToScreen(tab_window, &cursor_position);
+
+ double screen_width = ::GetSystemMetrics( SM_CXSCREEN ) - 1;
+ double screen_height = ::GetSystemMetrics( SM_CYSCREEN ) - 1;
+ double location_x = cursor_position.x * (65535.0f / screen_width);
+ double location_y = cursor_position.y * (65535.0f / screen_height);
+
+ INPUT input_info = {0};
+ input_info.type = INPUT_MOUSE;
+ input_info.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
+ input_info.mi.dx = static_cast<long>(location_x);
+ input_info.mi.dy = static_cast<long>(location_y);
+ ::SendInput(1, &input_info, sizeof(INPUT));
+
+ WaitForFinish("execute_script_delete_in_mouse_move", "1", url,
+ kTestCompleteCookie, kTestCompleteSuccess,
+ kShortWaitTimeout);
+ }
+}