summaryrefslogtreecommitdiffstats
path: root/chrome/test
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/test')
-rw-r--r--chrome/test/data/npapi/execute_script_delete_in_mouse_move.html39
-rw-r--r--chrome/test/ui/npapi_uitest.cpp38
2 files changed, 76 insertions, 1 deletions
diff --git a/chrome/test/data/npapi/execute_script_delete_in_mouse_move.html b/chrome/test/data/npapi/execute_script_delete_in_mouse_move.html
new file mode 100644
index 0000000..a82cde7
--- /dev/null
+++ b/chrome/test/data/npapi/execute_script_delete_in_mouse_move.html
@@ -0,0 +1,39 @@
+<html>
+
+<head>
+<script src="npapi.js"></script>
+
+<script>
+function DeletePluginWithinScript() {
+ var plugin_div = document.getElementById("PluginDiv");
+ plugin_div.innerHTML = "Object Deleted";
+ onSuccess("execute_script_delete_in_mouse_move", 1);
+}
+</script>
+</head>
+
+<body>
+<div id="statusPanel" style="border: 1px solid red; width: 100%">
+Test running....
+</div>
+
+
+NPObject Proxy Test<p>
+
+Tests the case where a plugin instance is deleted in the context
+of a synchronous mouse event.
+
+<DIV ID=PluginDiv>
+<embed type="application/vnd.npapi-test"
+ src="foo"
+ name="execute_script_delete_in_mouse_move"
+ id="1"
+ mode="np_embed"
+>
+</DIV>
+<script>
+ var height = document.body.offsetHeight;
+</script>
+
+</body>
+</html>
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);
+ }
+}