summaryrefslogtreecommitdiffstats
path: root/webkit/tools/test_shell/event_sending_controller.cc
diff options
context:
space:
mode:
authorjcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-12 21:01:11 +0000
committerjcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-12 21:01:11 +0000
commitcb42d4d11b9f03d76d914648cb8ad362f80c9b57 (patch)
treef6714f0bd185a8959f3fc3186f94476aaff4017c /webkit/tools/test_shell/event_sending_controller.cc
parente24b70c4852ca81ac9719942d82bc753256904d7 (diff)
downloadchromium_src-cb42d4d11b9f03d76d914648cb8ad362f80c9b57.zip
chromium_src-cb42d4d11b9f03d76d914648cb8ad362f80c9b57.tar.gz
chromium_src-cb42d4d11b9f03d76d914648cb8ad362f80c9b57.tar.bz2
This adds the implementation for the JS method eventSender.scheduleAsynchronousClick which makes the test
LayoutTests/fast/events/popup-blocking-click-in-iframe.html pass. Review URL: http://codereview.chromium.org/20320 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@9704 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/tools/test_shell/event_sending_controller.cc')
-rw-r--r--webkit/tools/test_shell/event_sending_controller.cc31
1 files changed, 26 insertions, 5 deletions
diff --git a/webkit/tools/test_shell/event_sending_controller.cc b/webkit/tools/test_shell/event_sending_controller.cc
index 4a067b1..76e8a06 100644
--- a/webkit/tools/test_shell/event_sending_controller.cc
+++ b/webkit/tools/test_shell/event_sending_controller.cc
@@ -23,7 +23,9 @@
#include "config.h"
#include "KeyboardCodes.h"
+#include "base/compiler_specific.h"
#include "base/logging.h"
+#include "base/message_loop.h"
#include "base/ref_counted.h"
#include "base/string_util.h"
#include "base/time.h"
@@ -122,7 +124,8 @@ void ApplyKeyModifiers(const CppVariant* arg, WebKeyboardEvent* event) {
} // anonymous namespace
-EventSendingController::EventSendingController(TestShell* shell) {
+EventSendingController::EventSendingController(TestShell* shell)
+ : ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) {
// Set static shell_ variable since we can't do it in an initializer list.
// We also need to be careful not to assign shell_ to new windows which are
// temporary.
@@ -140,11 +143,15 @@ EventSendingController::EventSendingController(TestShell* shell) {
BindMethod("leapForward", &EventSendingController::leapForward);
BindMethod("keyDown", &EventSendingController::keyDown);
BindMethod("dispatchMessage", &EventSendingController::dispatchMessage);
- BindMethod("enableDOMUIEventLogging", &EventSendingController::enableDOMUIEventLogging);
- BindMethod("fireKeyboardEventsToElement", &EventSendingController::fireKeyboardEventsToElement);
+ BindMethod("enableDOMUIEventLogging",
+ &EventSendingController::enableDOMUIEventLogging);
+ BindMethod("fireKeyboardEventsToElement",
+ &EventSendingController::fireKeyboardEventsToElement);
BindMethod("clearKillRing", &EventSendingController::clearKillRing);
BindMethod("textZoomIn", &EventSendingController::textZoomIn);
BindMethod("textZoomOut", &EventSendingController::textZoomOut);
+ BindMethod("scheduleAsynchronousClick",
+ &EventSendingController::scheduleAsynchronousClick);
// When set to true (the default value), we batch mouse move and mouse up
// events so we can simulate drag & drop.
@@ -224,7 +231,8 @@ int EventSendingController::GetButtonNumberFromSingleArg(
void EventSendingController::mouseDown(
const CppArgumentList& args, CppVariant* result) {
- result->SetNull();
+ if (result) // Could be NULL if invoked asynchronously.
+ result->SetNull();
webview()->Layout();
@@ -253,7 +261,8 @@ void EventSendingController::mouseDown(
void EventSendingController::mouseUp(
const CppArgumentList& args, CppVariant* result) {
- result->SetNull();
+ if (result) // Could be NULL if invoked asynchronously.
+ result->SetNull();
webview()->Layout();
@@ -517,6 +526,18 @@ void EventSendingController::contextClick(
pressed_button_ = WebMouseEvent::BUTTON_NONE;
}
+void EventSendingController::scheduleAsynchronousClick(
+ const CppArgumentList& args, CppVariant* result) {
+ result->SetNull();
+
+ MessageLoop::current()->PostTask(FROM_HERE,
+ method_factory_.NewRunnableMethod(&EventSendingController::mouseDown,
+ args, static_cast<CppVariant*>(NULL)));
+ MessageLoop::current()->PostTask(FROM_HERE,
+ method_factory_.NewRunnableMethod(&EventSendingController::mouseUp,
+ args, static_cast<CppVariant*>(NULL)));
+}
+
//
// Unimplemented stubs
//