summaryrefslogtreecommitdiffstats
path: root/chrome/browser/automation/ui_controls_win.cc
diff options
context:
space:
mode:
authorfinnur@chromium.org <finnur@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-01 15:19:40 +0000
committerfinnur@chromium.org <finnur@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-12-01 15:19:40 +0000
commit3b94427c99bdf12836fd455eeb1499fdde511e26 (patch)
tree07d81236cb8b177a565d10a808a5601ef6c0ff5b /chrome/browser/automation/ui_controls_win.cc
parentb2fcd0e0c8850eda2135b6fe270af5f453682f23 (diff)
downloadchromium_src-3b94427c99bdf12836fd455eeb1499fdde511e26.zip
chromium_src-3b94427c99bdf12836fd455eeb1499fdde511e26.tar.gz
chromium_src-3b94427c99bdf12836fd455eeb1499fdde511e26.tar.bz2
Revert 67849 - Figure out error in test PrepopulateRespectBlank.
Revert previous traces and add one targeted test. My traces seem to indicate that something else than a Chrome window has focus when the test fails. Lets figure out what that is... BUG=62937 TEST=Tracking down problem in test Review URL: http://codereview.chromium.org/5463001 TBR=finnur@chromium.org Review URL: http://codereview.chromium.org/5451002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@67852 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/automation/ui_controls_win.cc')
-rw-r--r--chrome/browser/automation/ui_controls_win.cc48
1 files changed, 44 insertions, 4 deletions
diff --git a/chrome/browser/automation/ui_controls_win.cc b/chrome/browser/automation/ui_controls_win.cc
index 25469ad..dfa2af6 100644
--- a/chrome/browser/automation/ui_controls_win.cc
+++ b/chrome/browser/automation/ui_controls_win.cc
@@ -8,6 +8,7 @@
#include "app/keyboard_codes.h"
#include "base/logging.h"
#include "base/message_loop.h"
+#include "base/string_util.h"
#include "base/win_util.h"
#include "base/ref_counted.h"
#include "base/task.h"
@@ -17,6 +18,12 @@ namespace ui_controls {
namespace {
+void Checkpoint(const char* message, const base::TimeTicks& start_time) {
+ LOG(INFO) << message << " : "
+ << (base::TimeTicks::Now() - start_time).InMilliseconds()
+ << " ms" << std::flush;
+}
+
// InputDispatcher ------------------------------------------------------------
// InputDispatcher is used to listen for a mouse/keyboard event. When the
@@ -38,7 +45,7 @@ class InputDispatcher : public base::RefCounted<InputDispatcher> {
~InputDispatcher();
- // Notifies the task and release this (which should delete it).
+ // Notifies the task and release this (which should delete it).
void NotifyTask();
// The task we notify.
@@ -71,14 +78,25 @@ LRESULT CALLBACK MouseHook(int n_code, WPARAM w_param, LPARAM l_param) {
// Callback from hook when a key message is received.
LRESULT CALLBACK KeyHook(int n_code, WPARAM w_param, LPARAM l_param) {
+ base::TimeTicks start_time = base::TimeTicks::Now();
+ char msg[512];
+ base::snprintf(msg, 512, "KeyHook starts: %d", n_code);
+ Checkpoint(msg, start_time);
+
HHOOK next_hook = next_hook_;
+ base::snprintf(msg, 512, "n_code == HC_ACTION: %d, %d",
+ l_param, !!(l_param & (1 << 30)));
+ Checkpoint(msg, start_time);
if (n_code == HC_ACTION) {
DCHECK(current_dispatcher_);
- if (l_param & (1 << 30)) {
- // Only send on key up.
+ if (l_param & (1 << 30)) { // Only send on key up.
+ Checkpoint("MatchingMessageFound", start_time);
current_dispatcher_->MatchingMessageFound();
+ } else {
+ Checkpoint("Not key up", start_time);
}
}
+ Checkpoint("KeyHook ends, calling next hook.", start_time);
return CallNextHookEx(next_hook, n_code, w_param, l_param);
}
@@ -166,77 +184,99 @@ bool SendKeyEvent(app::KeyboardCode key, bool up) {
bool SendKeyPressImpl(app::KeyboardCode key,
bool control, bool shift, bool alt,
Task* task) {
+ base::TimeTicks start_time = base::TimeTicks::Now();
+ Checkpoint("SendKeyPressImpl starts", start_time);
+
scoped_refptr<InputDispatcher> dispatcher(
task ? new InputDispatcher(task, WM_KEYUP) : NULL);
// If a pop-up menu is open, it won't receive events sent using SendInput.
// Check for a pop-up menu using its window class (#32768) and if one
// exists, send the key event directly there.
+ Checkpoint("FindWindow", start_time);
HWND popup_menu = ::FindWindow(L"#32768", 0);
if (popup_menu != NULL && popup_menu == ::GetTopWindow(NULL)) {
+ Checkpoint("Found popup window", start_time);
WPARAM w_param = app::WindowsKeyCodeForKeyboardCode(key);
LPARAM l_param = 0;
+ Checkpoint("Send WM_KEYDOWN", start_time);
::SendMessage(popup_menu, WM_KEYDOWN, w_param, l_param);
+ Checkpoint("Send WM_KEYUP", start_time);
::SendMessage(popup_menu, WM_KEYUP, w_param, l_param);
+ Checkpoint("Send Done", start_time);
if (dispatcher.get())
dispatcher->AddRef();
return true;
}
- INPUT input[8] = { 0 }; // 8, assuming all the modifiers are activated.
+ Checkpoint("Found no popup window", start_time);
+
+ INPUT input[8] = { 0 }; // 8, assuming all the modifiers are activated
UINT i = 0;
if (control) {
+ Checkpoint("FillKeyboardInput Control", start_time);
if (!FillKeyboardInput(app::VKEY_CONTROL, &input[i], false))
return false;
i++;
}
if (shift) {
+ Checkpoint("FillKeyboardInput Shift", start_time);
if (!FillKeyboardInput(app::VKEY_SHIFT, &input[i], false))
return false;
i++;
}
if (alt) {
+ Checkpoint("FillKeyboardInput Alt", start_time);
if (!FillKeyboardInput(app::VKEY_MENU, &input[i], false))
return false;
i++;
}
+ Checkpoint("FillKeyboardInput 1", start_time);
if (!FillKeyboardInput(key, &input[i], false))
return false;
i++;
+ Checkpoint("FillKeyboardInput 2", start_time);
if (!FillKeyboardInput(key, &input[i], true))
return false;
i++;
if (alt) {
+ Checkpoint("FillKeyboardInput Alt2", start_time);
if (!FillKeyboardInput(app::VKEY_MENU, &input[i], true))
return false;
i++;
}
if (shift) {
+ Checkpoint("FillKeyboardInput Shift2", start_time);
if (!FillKeyboardInput(app::VKEY_SHIFT, &input[i], true))
return false;
i++;
}
if (control) {
+ Checkpoint("FillKeyboardInput Ctrl2", start_time);
if (!FillKeyboardInput(app::VKEY_CONTROL, &input[i], true))
return false;
i++;
}
+ Checkpoint("SendInput called", start_time);
if (::SendInput(i, input, sizeof(INPUT)) != i)
return false;
+ Checkpoint("SendInput done", start_time);
+
if (dispatcher.get())
dispatcher->AddRef();
+ Checkpoint("Test done", start_time);
return true;
}