Index: webkit/glue/plugins/test/plugin_windowless_test.cc |
=================================================================== |
--- webkit/glue/plugins/test/plugin_windowless_test.cc (revision 69426) |
+++ webkit/glue/plugins/test/plugin_windowless_test.cc (working copy) |
@@ -1,261 +0,0 @@ |
-// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#define STRSAFE_NO_DEPRECATE |
-#include "base/string_number_conversions.h" |
-#include "base/string_util.h" |
-#include "webkit/glue/plugins/test/plugin_windowless_test.h" |
-#include "webkit/glue/plugins/test/plugin_client.h" |
- |
-#if defined(OS_MACOSX) |
-#include <ApplicationServices/ApplicationServices.h> |
-#include <Carbon/Carbon.h> |
-#endif |
- |
-namespace NPAPIClient { |
- |
-// Remember the first plugin instance for tests involving multiple instances |
-WindowlessPluginTest* g_other_instance = NULL; |
- |
-WindowlessPluginTest::WindowlessPluginTest(NPP id, |
- NPNetscapeFuncs *host_functions) |
- : PluginTest(id, host_functions) { |
- if (!g_other_instance) |
- g_other_instance = this; |
-} |
- |
-static bool IsPaintEvent(NPEvent* np_event) { |
-#if defined(OS_WIN) |
- return WM_PAINT == np_event->event; |
-#elif defined(OS_MACOSX) |
- return np_event->what == updateEvt; |
-#endif |
-} |
- |
-static bool IsMouseMoveEvent(NPEvent* np_event) { |
-#if defined(OS_WIN) |
- return WM_MOUSEMOVE == np_event->event; |
-#elif defined(OS_MACOSX) |
- return np_event->what == nullEvent; |
-#endif |
-} |
- |
-static bool IsMouseUpEvent(NPEvent* np_event) { |
-#if defined(OS_WIN) |
- return WM_LBUTTONUP == np_event->event; |
-#elif defined(OS_MACOSX) |
- return np_event->what == mouseUp; |
-#endif |
-} |
- |
-static bool IsWindowActivationEvent(NPEvent* np_event) { |
-#if defined(OS_WIN) |
- NOTIMPLEMENTED(); |
- return false; |
-#elif defined(OS_MACOSX) |
- return np_event->what == activateEvt; |
-#endif |
-} |
- |
-int16 WindowlessPluginTest::HandleEvent(void* event) { |
- |
- NPNetscapeFuncs* browser = NPAPIClient::PluginClient::HostFunctions(); |
- |
- NPBool supports_windowless = 0; |
- NPError result = browser->getvalue(id(), NPNVSupportsWindowless, |
- &supports_windowless); |
- if ((result != NPERR_NO_ERROR) || (supports_windowless != TRUE)) { |
- SetError("Failed to read NPNVSupportsWindowless value"); |
- SignalTestCompleted(); |
- return PluginTest::HandleEvent(event); |
- } |
- |
- NPEvent* np_event = reinterpret_cast<NPEvent*>(event); |
- if (IsPaintEvent(np_event)) { |
-#if defined(OS_WIN) |
- HDC paint_dc = reinterpret_cast<HDC>(np_event->wParam); |
- if (paint_dc == NULL) { |
- SetError("Invalid Window DC passed to HandleEvent for WM_PAINT"); |
- SignalTestCompleted(); |
- return NPERR_GENERIC_ERROR; |
- } |
- |
- HRGN clipping_region = CreateRectRgn(0, 0, 0, 0); |
- if (!GetClipRgn(paint_dc, clipping_region)) { |
- SetError("No clipping region set in window DC"); |
- DeleteObject(clipping_region); |
- SignalTestCompleted(); |
- return NPERR_GENERIC_ERROR; |
- } |
- |
- DeleteObject(clipping_region); |
-#endif |
- |
- if (test_name() == "execute_script_delete_in_paint") { |
- ExecuteScriptDeleteInPaint(browser); |
- } else if (test_name() == "multiple_instances_sync_calls") { |
- MultipleInstanceSyncCalls(browser); |
- } |
-#if OS_MACOSX |
- } else if (IsWindowActivationEvent(np_event) && |
- test_name() == "convert_point") { |
- ConvertPoint(browser); |
-#endif |
- } else if (IsMouseMoveEvent(np_event) && |
- test_name() == "execute_script_delete_in_mouse_move") { |
- ExecuteScript(browser, id(), "DeletePluginWithinScript();", NULL); |
- SignalTestCompleted(); |
- } else if (IsMouseUpEvent(np_event) && |
- test_name() == "delete_frame_test") { |
- ExecuteScript( |
- browser, id(), |
- "parent.document.getElementById('frame').outerHTML = ''", NULL); |
- } |
- // If this test failed, then we'd have crashed by now. |
- return PluginTest::HandleEvent(event); |
-} |
- |
-NPError WindowlessPluginTest::ExecuteScript(NPNetscapeFuncs* browser, NPP id, |
- const std::string& script, NPVariant* result) { |
- std::string script_url = "javascript:"; |
- script_url += script; |
- |
- NPString script_string = { script_url.c_str(), script_url.length() }; |
- NPObject *window_obj = NULL; |
- browser->getvalue(id, NPNVWindowNPObject, &window_obj); |
- |
- NPVariant unused_result; |
- if (!result) |
- result = &unused_result; |
- |
- return browser->evaluate(id, window_obj, &script_string, result); |
-} |
- |
-void WindowlessPluginTest::ExecuteScriptDeleteInPaint( |
- NPNetscapeFuncs* browser) { |
- const NPUTF8* urlString = "javascript:DeletePluginWithinScript()"; |
- const NPUTF8* targetString = NULL; |
- browser->geturl(id(), urlString, targetString); |
- SignalTestCompleted(); |
-} |
- |
-void WindowlessPluginTest::MultipleInstanceSyncCalls(NPNetscapeFuncs* browser) { |
- if (this == g_other_instance) |
- return; |
- |
- DCHECK(g_other_instance); |
- ExecuteScript(browser, g_other_instance->id(), "TestCallback();", NULL); |
- SignalTestCompleted(); |
-} |
- |
-#if defined(OS_MACOSX) |
-std::string StringForPoint(int x, int y) { |
- std::string point_string("("); |
- point_string.append(base::IntToString(x)); |
- point_string.append(", "); |
- point_string.append(base::IntToString(y)); |
- point_string.append(")"); |
- return point_string; |
-} |
-#endif |
- |
-void WindowlessPluginTest::ConvertPoint(NPNetscapeFuncs* browser) { |
-#if defined(OS_MACOSX) |
- // First, just sanity-test that round trips work. |
- NPCoordinateSpace spaces[] = { NPCoordinateSpacePlugin, |
- NPCoordinateSpaceWindow, |
- NPCoordinateSpaceFlippedWindow, |
- NPCoordinateSpaceScreen, |
- NPCoordinateSpaceFlippedScreen }; |
- for (unsigned int i = 0; i < arraysize(spaces); ++i) { |
- for (unsigned int j = 0; j < arraysize(spaces); ++j) { |
- double x, y, round_trip_x, round_trip_y; |
- if (!(browser->convertpoint(id(), 0, 0, spaces[i], &x, &y, spaces[j])) || |
- !(browser->convertpoint(id(), x, y, spaces[j], &round_trip_x, |
- &round_trip_y, spaces[i]))) { |
- SetError("Conversion failed"); |
- SignalTestCompleted(); |
- return; |
- } |
- if (i != j && x == 0 && y == 0) { |
- SetError("Converting a coordinate should change it"); |
- SignalTestCompleted(); |
- return; |
- } |
- if (round_trip_x != 0 || round_trip_y != 0) { |
- SetError("Round-trip conversion should return the original point"); |
- SignalTestCompleted(); |
- return; |
- } |
- } |
- } |
- |
- // Now, more extensive testing on a single point. |
- double screen_x, screen_y; |
- browser->convertpoint(id(), 0, 0, NPCoordinateSpacePlugin, |
- &screen_x, &screen_y, NPCoordinateSpaceScreen); |
- double flipped_screen_x, flipped_screen_y; |
- browser->convertpoint(id(), 0, 0, NPCoordinateSpacePlugin, |
- &flipped_screen_x, &flipped_screen_y, |
- NPCoordinateSpaceFlippedScreen); |
- double window_x, window_y; |
- browser->convertpoint(id(), 0, 0, NPCoordinateSpacePlugin, |
- &window_x, &window_y, NPCoordinateSpaceWindow); |
- double flipped_window_x, flipped_window_y; |
- browser->convertpoint(id(), 0, 0, NPCoordinateSpacePlugin, |
- &flipped_window_x, &flipped_window_y, |
- NPCoordinateSpaceFlippedWindow); |
- |
- CGRect main_display_bounds = CGDisplayBounds(CGMainDisplayID()); |
- |
- // Check that all the coordinates are right. The constants below are based on |
- // the window frame set in the UI test and the content offset in the test |
- // html. Y-coordinates are not checked exactly so that the test is robust |
- // against toolbar changes, info and bookmark bar visibility, etc. |
- const int kWindowHeight = 400; |
- const int kWindowXOrigin = 50; |
- const int kWindowYOrigin = 50; |
- const int kPluginXContentOffset = 50; |
- const int kPluginYContentOffset = 50; |
- const int kChromeYTolerance = 200; |
- |
- std::string error_string; |
- if (screen_x != flipped_screen_x) |
- error_string = "Flipping screen coordinates shouldn't change x"; |
- else if (flipped_screen_y != main_display_bounds.size.height - screen_y) |
- error_string = "Flipped screen coordinates should be flipped vertically"; |
- else if (screen_x != kWindowXOrigin + kPluginXContentOffset) |
- error_string = "Screen x location is wrong"; |
- else if (flipped_screen_y < kWindowYOrigin + kPluginYContentOffset || |
- flipped_screen_y > kWindowYOrigin + kPluginYContentOffset + |
- kChromeYTolerance) |
- error_string = "Screen y location is wrong"; |
- else if (window_x != flipped_window_x) |
- error_string = "Flipping window coordinates shouldn't change x"; |
- else if (flipped_window_y != kWindowHeight - window_y) |
- error_string = "Flipped window coordinates should be flipped vertically"; |
- else if (window_x != kPluginXContentOffset) |
- error_string = "Window x location is wrong"; |
- else if (flipped_window_y < kPluginYContentOffset || |
- flipped_window_y > kPluginYContentOffset + kChromeYTolerance) |
- error_string = "Window y location is wrong"; |
- |
- if (!error_string.empty()) { |
- error_string.append(" - "); |
- error_string.append(StringForPoint(screen_x, screen_y)); |
- error_string.append(" - "); |
- error_string.append(StringForPoint(flipped_screen_x, flipped_screen_y)); |
- error_string.append(" - "); |
- error_string.append(StringForPoint(window_x, window_y)); |
- error_string.append(" - "); |
- error_string.append(StringForPoint(flipped_window_x, flipped_window_y)); |
- SetError(error_string); |
- } |
-#else |
- SetError("Unimplemented"); |
-#endif |
- SignalTestCompleted(); |
-} |
- |
-} // namespace NPAPIClient |