diff options
author | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-29 00:35:32 +0000 |
---|---|---|
committer | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-29 00:35:32 +0000 |
commit | fce8e2fccb2fdb9ed1f52ab9701e5299cec63677 (patch) | |
tree | 83dbf1e38ae5eb063e7757e9ce21d6636563f503 /chrome/test/interactive_ui | |
parent | 7c2dbdd0bec7444f895082aed1b4d7b939867a17 (diff) | |
download | chromium_src-fce8e2fccb2fdb9ed1f52ab9701e5299cec63677.zip chromium_src-fce8e2fccb2fdb9ed1f52ab9701e5299cec63677.tar.gz chromium_src-fce8e2fccb2fdb9ed1f52ab9701e5299cec63677.tar.bz2 |
Moved the SelfDeletePluginInvokeInSynchronousMouseMove to interactive ui tests
as we need to simulate mousemoves here. ui tests run on machines which are locked,
causing this test to fail.
Moved the NPAPITester and NPAPIVisiblePluginTester classes to a common file
npapi_test_helper.cc so it can be used from both tests.
Relanding the SetCursor patch. It has already been approved by John.
Description below:-
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=jam
Bug=1362948
Review URL: http://codereview.chromium.org/8691
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@4115 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/test/interactive_ui')
-rw-r--r-- | chrome/test/interactive_ui/SConscript | 2 | ||||
-rw-r--r-- | chrome/test/interactive_ui/interactive_ui.vcproj | 16 | ||||
-rw-r--r-- | chrome/test/interactive_ui/npapi_interactive_test.cc | 78 |
3 files changed, 96 insertions, 0 deletions
diff --git a/chrome/test/interactive_ui/SConscript b/chrome/test/interactive_ui/SConscript index 3e79dde..603a25a 100644 --- a/chrome/test/interactive_ui/SConscript +++ b/chrome/test/interactive_ui/SConscript @@ -79,6 +79,8 @@ input_files = [ '$CHROME_DIR/test/ui/ui_test_suite$OBJSUFFIX', '$CHROME_DIR/test/test_file_util$OBJSUFFIX', 'view_event_test_base.cc', + '$CHROME_DIR/test/ui/npapi_test_helper.cc', + '$CHROME_DIR/test/interactive_ui/npapi_interactive_test.cc', ] exe = env_test.ChromeTestProgram('interactive_ui_tests', input_files) diff --git a/chrome/test/interactive_ui/interactive_ui.vcproj b/chrome/test/interactive_ui/interactive_ui.vcproj index adb9663..4d96759 100644 --- a/chrome/test/interactive_ui/interactive_ui.vcproj +++ b/chrome/test/interactive_ui/interactive_ui.vcproj @@ -143,6 +143,14 @@ Name="Common" > <File + RelativePath="..\ui\npapi_test_helper.cc" + > + </File> + <File + RelativePath="..\ui\npapi_test_helper.h" + > + </File> + <File RelativePath="..\..\tools\build\win\precompiled_wtl.cc" > <FileConfiguration @@ -231,6 +239,14 @@ > </File> </Filter> + <Filter + Name="TestNPAPI" + > + <File + RelativePath=".\npapi_interactive_test.cc" + > + </File> + </Filter> </Files> <Globals> </Globals> diff --git a/chrome/test/interactive_ui/npapi_interactive_test.cc b/chrome/test/interactive_ui/npapi_interactive_test.cc new file mode 100644 index 0000000..62b30f4 --- /dev/null +++ b/chrome/test/interactive_ui/npapi_interactive_test.cc @@ -0,0 +1,78 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// +// NPAPI interactive UI tests. +// + +#include "base/file_util.h" +#include "chrome/common/chrome_paths.h" +#include "chrome/test/automation/tab_proxy.h" +#include "chrome/test/ui/npapi_test_helper.h" +#include "net/base/net_util.h" + +const char kTestCompleteCookie[] = "status"; +const char kTestCompleteSuccess[] = "OK"; +const int kShortWaitTimeout = 5 * 1000; + +// 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); + } +} |