diff options
author | jianli@chromium.org <jianli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-15 18:49:58 +0000 |
---|---|---|
committer | jianli@chromium.org <jianli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-15 18:49:58 +0000 |
commit | 6aa4a1c041ca9bd2c3087c3c059a87193b1a82e1 (patch) | |
tree | 8e833c393312e866250077c15bc1d90464fe99d7 /base/message_loop_unittest.cc | |
parent | 963dfb5a05c5b0e3fa8ed74d803f01cb10fd455e (diff) | |
download | chromium_src-6aa4a1c041ca9bd2c3087c3c059a87193b1a82e1.zip chromium_src-6aa4a1c041ca9bd2c3087c3c059a87193b1a82e1.tar.gz chromium_src-6aa4a1c041ca9bd2c3087c3c059a87193b1a82e1.tar.bz2 |
Support dragging a virtual file out of the browser.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/351029
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@36378 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/message_loop_unittest.cc')
-rw-r--r-- | base/message_loop_unittest.cc | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/base/message_loop_unittest.cc b/base/message_loop_unittest.cc index 74491ce..00a1dfe 100644 --- a/base/message_loop_unittest.cc +++ b/base/message_loop_unittest.cc @@ -1107,7 +1107,12 @@ class DispatcherImpl : public MessageLoopForUI::Dispatcher { virtual bool Dispatch(const MSG& msg) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); - return (++dispatch_count_ != 2); + // Do not count WM_TIMER since it is not what we post and it will cause + // flakiness. + if (msg.message != WM_TIMER) + ++dispatch_count_; + // We treat WM_LBUTTONUP as the last message. + return msg.message != WM_LBUTTONUP; } int dispatch_count_; @@ -1130,6 +1135,37 @@ void RunTest_Dispatcher(MessageLoop::Type message_loop_type) { ASSERT_EQ(2, dispatcher.dispatch_count_); } +LRESULT CALLBACK MsgFilterProc(int code, WPARAM wparam, LPARAM lparam) { + if (code == base::MessagePumpForUI::kMessageFilterCode) { + MSG* msg = reinterpret_cast<MSG*>(lparam); + if (msg->message == WM_LBUTTONDOWN) + return TRUE; + } + return FALSE; +} + +void RunTest_DispatcherWithMessageHook(MessageLoop::Type message_loop_type) { + MessageLoop loop(message_loop_type); + + class MyTask : public Task { + public: + virtual void Run() { + PostMessage(NULL, WM_LBUTTONDOWN, 0, 0); + PostMessage(NULL, WM_LBUTTONUP, 'A', 0); + } + }; + Task* task = new MyTask(); + MessageLoop::current()->PostDelayedTask(FROM_HERE, task, 100); + HHOOK msg_hook = SetWindowsHookEx(WH_MSGFILTER, + MsgFilterProc, + NULL, + GetCurrentThreadId()); + DispatcherImpl dispatcher; + MessageLoopForUI::current()->Run(&dispatcher); + ASSERT_EQ(1, dispatcher.dispatch_count_); + UnhookWindowsHookEx(msg_hook); +} + class TestIOHandler : public MessageLoopForIO::IOHandler { public: TestIOHandler(const wchar_t* name, HANDLE signal, bool wait); @@ -1423,6 +1459,11 @@ TEST(MessageLoopTest, Dispatcher) { RunTest_Dispatcher(MessageLoop::TYPE_UI); } +TEST(MessageLoopTest, DispatcherWithMessageHook) { + // This test requires a UI loop + RunTest_DispatcherWithMessageHook(MessageLoop::TYPE_UI); +} + TEST(MessageLoopTest, IOHandler) { RunTest_IOHandler(); } |