| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // This file contains the definition for EventSendingController. | 5 // This file contains the definition for EventSendingController. |
| 6 // | 6 // |
| 7 // Some notes about drag and drop handling: | 7 // Some notes about drag and drop handling: |
| 8 // Windows drag and drop goes through a system call to DoDragDrop. At that | 8 // Windows drag and drop goes through a system call to DoDragDrop. At that |
| 9 // point, program control is given to Windows which then periodically makes | 9 // point, program control is given to Windows which then periodically makes |
| 10 // callbacks into the webview. This won't work for layout tests, so instead, | 10 // callbacks into the webview. This won't work for layout tests, so instead, |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 #include "base/time.h" | 28 #include "base/time.h" |
| 29 #include "base/string_number_conversions.h" | 29 #include "base/string_number_conversions.h" |
| 30 #include "base/string_util.h" | 30 #include "base/string_util.h" |
| 31 #include "base/utf_string_conversions.h" | 31 #include "base/utf_string_conversions.h" |
| 32 #include "third_party/WebKit/WebKit/chromium/public/WebDragData.h" | 32 #include "third_party/WebKit/WebKit/chromium/public/WebDragData.h" |
| 33 #include "third_party/WebKit/WebKit/chromium/public/WebDragOperation.h" | 33 #include "third_party/WebKit/WebKit/chromium/public/WebDragOperation.h" |
| 34 #include "third_party/WebKit/WebKit/chromium/public/WebPoint.h" | 34 #include "third_party/WebKit/WebKit/chromium/public/WebPoint.h" |
| 35 #include "third_party/WebKit/WebKit/chromium/public/WebString.h" | 35 #include "third_party/WebKit/WebKit/chromium/public/WebString.h" |
| 36 #include "third_party/WebKit/WebKit/chromium/public/WebTouchPoint.h" | 36 #include "third_party/WebKit/WebKit/chromium/public/WebTouchPoint.h" |
| 37 #include "third_party/WebKit/WebKit/chromium/public/WebView.h" | 37 #include "third_party/WebKit/WebKit/chromium/public/WebView.h" |
| 38 #include "third_party/WebKit/WebKit/chromium/public/WebBindings.h" | |
| 39 #include "webkit/glue/webkit_glue.h" | 38 #include "webkit/glue/webkit_glue.h" |
| 40 #include "webkit/tools/test_shell/test_shell.h" | 39 #include "webkit/tools/test_shell/test_shell.h" |
| 41 #include "webkit/tools/test_shell/test_webview_delegate.h" | 40 #include "webkit/tools/test_shell/test_webview_delegate.h" |
| 42 | 41 |
| 43 #if defined(OS_WIN) | 42 #if defined(OS_WIN) |
| 44 #include "third_party/WebKit/WebKit/chromium/public/win/WebInputEventFactory.h" | 43 #include "third_party/WebKit/WebKit/chromium/public/win/WebInputEventFactory.h" |
| 45 using WebKit::WebInputEventFactory; | 44 using WebKit::WebInputEventFactory; |
| 46 #endif | 45 #endif |
| 47 | 46 |
| 48 // TODO(mpcomplete): layout before each event? | 47 // TODO(mpcomplete): layout before each event? |
| (...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 764 break; | 763 break; |
| 765 } | 764 } |
| 766 default: | 765 default: |
| 767 NOTREACHED(); | 766 NOTREACHED(); |
| 768 } | 767 } |
| 769 } | 768 } |
| 770 | 769 |
| 771 replaying_saved_events = false; | 770 replaying_saved_events = false; |
| 772 } | 771 } |
| 773 | 772 |
| 774 // Because actual context menu is implemented by the browser side, | |
| 775 // this function does only what LayoutTests are expecting: | |
| 776 // - Many test checks the count of items. So returning non-zero value | |
| 777 // makes sense. | |
| 778 // - Some test compares the count before and after some action. So | |
| 779 // changing the count based on flags also makes sense. This function | |
| 780 // is doing such for some flags. | |
| 781 // - Some test even checks actual string content. So providing it | |
| 782 // would be also helpful. | |
| 783 static std::vector<WebString> | |
| 784 MakeMenuItemStringsFor(const WebKit::WebContextMenuData* context_menu, | |
| 785 MockSpellCheck* spellcheck) { | |
| 786 // These constants are based on Safari's context menu because tests | |
| 787 // are made for it. | |
| 788 static const char* kNonEditableMenuStrings[] = { | |
| 789 "Back", "Reload Page", "Open in Dashbaord", "<separator>", | |
| 790 "View Source", "Save Page As", "Print Page", "Inspect Element", | |
| 791 0 }; | |
| 792 static const char* kEditableMenuStrings[] = { | |
| 793 "Cut", "Copy", "<separator>", "Paste", "Spelling and Grammar", | |
| 794 "Substitutions, Transformations", "Font", "Speech", | |
| 795 "Paragraph Direction", "<separator>", 0 }; | |
| 796 | |
| 797 // This is possible because mouse events are cancelleable. | |
| 798 if (!context_menu) | |
| 799 return std::vector<WebString>(); | |
| 800 | |
| 801 std::vector<WebString> strings; | |
| 802 | |
| 803 if (context_menu->isEditable) { | |
| 804 for (const char** item = kEditableMenuStrings; *item; ++item) | |
| 805 strings.push_back(WebString::fromUTF8(*item)); | |
| 806 std::vector<string16> suggestions; | |
| 807 spellcheck->FillSuggestions(context_menu->misspelledWord, &suggestions); | |
| 808 for (size_t i = 0; i < suggestions.size(); ++i) | |
| 809 strings.push_back(WebString(suggestions[i])); | |
| 810 } else { | |
| 811 for (const char** item = kNonEditableMenuStrings; *item; ++item) | |
| 812 strings.push_back(WebString::fromUTF8(*item)); | |
| 813 } | |
| 814 | |
| 815 return strings; | |
| 816 } | |
| 817 | |
| 818 void EventSendingController::contextClick( | 773 void EventSendingController::contextClick( |
| 819 const CppArgumentList& args, CppVariant* result) { | 774 const CppArgumentList& args, CppVariant* result) { |
| 820 result->SetNull(); | 775 result->SetNull(); |
| 821 | 776 |
| 822 webview()->layout(); | 777 webview()->layout(); |
| 823 | 778 |
| 824 // Clears last context menu data because we need to know if the | |
| 825 // context menu be requested after following mouse events. | |
| 826 shell_->delegate()->ClearContextMenuData(); | |
| 827 | |
| 828 UpdateClickCountForButton(WebMouseEvent::ButtonRight); | 779 UpdateClickCountForButton(WebMouseEvent::ButtonRight); |
| 829 | 780 |
| 830 // Generate right mouse down and up. | 781 // Generate right mouse down and up. |
| 831 | 782 |
| 832 WebMouseEvent event; | 783 WebMouseEvent event; |
| 833 pressed_button_ = WebMouseEvent::ButtonRight; | 784 pressed_button_ = WebMouseEvent::ButtonRight; |
| 834 InitMouseEvent(WebInputEvent::MouseDown, WebMouseEvent::ButtonRight, | 785 InitMouseEvent(WebInputEvent::MouseDown, WebMouseEvent::ButtonRight, |
| 835 last_mouse_pos_, &event); | 786 last_mouse_pos_, &event); |
| 836 webview()->handleInputEvent(event); | 787 webview()->handleInputEvent(event); |
| 837 | 788 |
| 838 InitMouseEvent(WebInputEvent::MouseUp, WebMouseEvent::ButtonRight, | 789 InitMouseEvent(WebInputEvent::MouseUp, WebMouseEvent::ButtonRight, |
| 839 last_mouse_pos_, &event); | 790 last_mouse_pos_, &event); |
| 840 webview()->handleInputEvent(event); | 791 webview()->handleInputEvent(event); |
| 841 | 792 |
| 842 pressed_button_ = WebMouseEvent::ButtonNone; | 793 pressed_button_ = WebMouseEvent::ButtonNone; |
| 843 | |
| 844 result->Set(WebKit::WebBindings::makeStringArray( | |
| 845 MakeMenuItemStringsFor( | |
| 846 shell_->delegate()->last_context_menu_data(), | |
| 847 shell_->delegate()->mock_spellcheck()))); | |
| 848 | |
| 849 } | 794 } |
| 850 | 795 |
| 851 void EventSendingController::scheduleAsynchronousClick( | 796 void EventSendingController::scheduleAsynchronousClick( |
| 852 const CppArgumentList& args, CppVariant* result) { | 797 const CppArgumentList& args, CppVariant* result) { |
| 853 result->SetNull(); | 798 result->SetNull(); |
| 854 | 799 |
| 855 MessageLoop::current()->PostTask(FROM_HERE, | 800 MessageLoop::current()->PostTask(FROM_HERE, |
| 856 method_factory_.NewRunnableMethod(&EventSendingController::mouseDown, | 801 method_factory_.NewRunnableMethod(&EventSendingController::mouseDown, |
| 857 args, static_cast<CppVariant*>(NULL))); | 802 args, static_cast<CppVariant*>(NULL))); |
| 858 MessageLoop::current()->PostTask(FROM_HERE, | 803 MessageLoop::current()->PostTask(FROM_HERE, |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1072 | 1017 |
| 1073 void EventSendingController::fireKeyboardEventsToElement( | 1018 void EventSendingController::fireKeyboardEventsToElement( |
| 1074 const CppArgumentList& args, CppVariant* result) { | 1019 const CppArgumentList& args, CppVariant* result) { |
| 1075 result->SetNull(); | 1020 result->SetNull(); |
| 1076 } | 1021 } |
| 1077 | 1022 |
| 1078 void EventSendingController::clearKillRing( | 1023 void EventSendingController::clearKillRing( |
| 1079 const CppArgumentList& args, CppVariant* result) { | 1024 const CppArgumentList& args, CppVariant* result) { |
| 1080 result->SetNull(); | 1025 result->SetNull(); |
| 1081 } | 1026 } |
| OLD | NEW |