OLD | NEW |
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 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 #include "chrome/browser/automation/automation_provider.h" | 5 #include "chrome/browser/automation/automation_provider.h" |
6 | 6 |
7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
8 #include "app/message_box_flags.h" | 8 #include "app/message_box_flags.h" |
9 #include "base/file_version_info.h" | 9 #include "base/file_version_info.h" |
10 #include "base/json_reader.h" | 10 #include "base/json_reader.h" |
(...skipping 955 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
966 #if defined(OS_WIN) | 966 #if defined(OS_WIN) |
967 IPC_MESSAGE_HANDLER(AutomationMsg_WindowHWND, GetWindowHWND) | 967 IPC_MESSAGE_HANDLER(AutomationMsg_WindowHWND, GetWindowHWND) |
968 #endif // defined(OS_WIN) | 968 #endif // defined(OS_WIN) |
969 IPC_MESSAGE_HANDLER(AutomationMsg_WindowExecuteCommandAsync, | 969 IPC_MESSAGE_HANDLER(AutomationMsg_WindowExecuteCommandAsync, |
970 ExecuteBrowserCommandAsync) | 970 ExecuteBrowserCommandAsync) |
971 IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_WindowExecuteCommand, | 971 IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_WindowExecuteCommand, |
972 ExecuteBrowserCommand) | 972 ExecuteBrowserCommand) |
973 IPC_MESSAGE_HANDLER(AutomationMsg_WindowViewBounds, WindowGetViewBounds) | 973 IPC_MESSAGE_HANDLER(AutomationMsg_WindowViewBounds, WindowGetViewBounds) |
974 IPC_MESSAGE_HANDLER(AutomationMsg_SetWindowBounds, SetWindowBounds) | 974 IPC_MESSAGE_HANDLER(AutomationMsg_SetWindowBounds, SetWindowBounds) |
975 IPC_MESSAGE_HANDLER(AutomationMsg_SetWindowVisible, SetWindowVisible) | 975 IPC_MESSAGE_HANDLER(AutomationMsg_SetWindowVisible, SetWindowVisible) |
976 #if defined(OS_WIN) | 976 #if defined(OS_WIN) || defined(OS_LINUX) |
977 IPC_MESSAGE_HANDLER(AutomationMsg_WindowClick, WindowSimulateClick) | 977 IPC_MESSAGE_HANDLER(AutomationMsg_WindowClick, WindowSimulateClick) |
978 #endif // defined(OS_WIN) | |
979 #if defined(OS_WIN) || defined(OS_LINUX) | |
980 IPC_MESSAGE_HANDLER(AutomationMsg_WindowKeyPress, WindowSimulateKeyPress) | 978 IPC_MESSAGE_HANDLER(AutomationMsg_WindowKeyPress, WindowSimulateKeyPress) |
981 #endif | 979 #endif |
982 #if defined(OS_WIN) | 980 #if defined(OS_WIN) |
983 IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_WindowDrag, | 981 IPC_MESSAGE_HANDLER_DELAY_REPLY(AutomationMsg_WindowDrag, |
984 WindowSimulateDrag) | 982 WindowSimulateDrag) |
985 #endif // defined(OS_WIN) | 983 #endif // defined(OS_WIN) |
986 IPC_MESSAGE_HANDLER(AutomationMsg_TabCount, GetTabCount) | 984 IPC_MESSAGE_HANDLER(AutomationMsg_TabCount, GetTabCount) |
987 IPC_MESSAGE_HANDLER(AutomationMsg_Tab, GetTab) | 985 IPC_MESSAGE_HANDLER(AutomationMsg_Tab, GetTab) |
988 #if defined(OS_WIN) | 986 #if defined(OS_WIN) |
989 IPC_MESSAGE_HANDLER(AutomationMsg_TabHWND, GetTabHWND) | 987 IPC_MESSAGE_HANDLER(AutomationMsg_TabHWND, GetTabHWND) |
(...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1483 AutomationMsg_WindowExecuteCommand::WriteReplyParams(reply_message, false); | 1481 AutomationMsg_WindowExecuteCommand::WriteReplyParams(reply_message, false); |
1484 Send(reply_message); | 1482 Send(reply_message); |
1485 } | 1483 } |
1486 | 1484 |
1487 void AutomationProvider::WindowGetViewBounds(int handle, int view_id, | 1485 void AutomationProvider::WindowGetViewBounds(int handle, int view_id, |
1488 bool screen_coordinates, | 1486 bool screen_coordinates, |
1489 bool* success, | 1487 bool* success, |
1490 gfx::Rect* bounds) { | 1488 gfx::Rect* bounds) { |
1491 *success = false; | 1489 *success = false; |
1492 | 1490 |
1493 #if defined(OS_WIN) | 1491 gfx::NativeWindow window = window_tracker_->GetResource(handle); |
1494 void* iter = NULL; | 1492 if (window) { |
1495 if (window_tracker_->ContainsHandle(handle)) { | 1493 #if defined(TOOLKIT_VIEWS) |
1496 HWND hwnd = window_tracker_->GetResource(handle); | 1494 views::RootView* root_view = views::WidgetWin::FindRootView(window); |
1497 views::RootView* root_view = views::WidgetWin::FindRootView(hwnd); | |
1498 if (root_view) { | 1495 if (root_view) { |
1499 views::View* view = root_view->GetViewByID(view_id); | 1496 views::View* view = root_view->GetViewByID(view_id); |
1500 if (view) { | 1497 if (view) { |
1501 *success = true; | 1498 *success = true; |
1502 gfx::Point point; | 1499 gfx::Point point; |
1503 if (screen_coordinates) | 1500 if (screen_coordinates) |
1504 views::View::ConvertPointToScreen(view, &point); | 1501 views::View::ConvertPointToScreen(view, &point); |
1505 else | 1502 else |
1506 views::View::ConvertPointToView(view, root_view, &point); | 1503 views::View::ConvertPointToView(view, root_view, &point); |
1507 *bounds = view->GetLocalBounds(false); | 1504 *bounds = view->GetLocalBounds(false); |
1508 bounds->set_origin(point); | 1505 bounds->set_origin(point); |
1509 } | 1506 } |
1510 } | 1507 } |
| 1508 #else |
| 1509 NOTIMPLEMENTED(); |
| 1510 #endif |
1511 } | 1511 } |
1512 #else | |
1513 // TODO(port): Enable when window_tracker is ported. | |
1514 NOTIMPLEMENTED(); | |
1515 #endif | |
1516 } | 1512 } |
1517 | 1513 |
1518 #if defined(OS_WIN) | 1514 #if defined(OS_WIN) |
1519 | 1515 |
1520 // This task enqueues a mouse event on the event loop, so that the view | 1516 // This task enqueues a mouse event on the event loop, so that the view |
1521 // that it's being sent to can do the requisite post-processing. | 1517 // that it's being sent to can do the requisite post-processing. |
1522 class MouseEventTask : public Task { | 1518 class MouseEventTask : public Task { |
1523 public: | 1519 public: |
1524 MouseEventTask(views::View* view, | 1520 MouseEventTask(views::View* view, |
1525 views::Event::EventType type, | 1521 views::Event::EventType type, |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1613 AutomationMsg_WindowDrag::WriteReplyParams(reply_message_, true); | 1609 AutomationMsg_WindowDrag::WriteReplyParams(reply_message_, true); |
1614 provider_->Send(reply_message_); | 1610 provider_->Send(reply_message_); |
1615 } | 1611 } |
1616 | 1612 |
1617 private: | 1613 private: |
1618 AutomationProvider* provider_; | 1614 AutomationProvider* provider_; |
1619 IPC::Message* reply_message_; | 1615 IPC::Message* reply_message_; |
1620 | 1616 |
1621 DISALLOW_COPY_AND_ASSIGN(WindowDragResponseTask); | 1617 DISALLOW_COPY_AND_ASSIGN(WindowDragResponseTask); |
1622 }; | 1618 }; |
| 1619 #endif // defined(OS_WIN) |
1623 | 1620 |
| 1621 #if defined(OS_WIN) || defined(OS_LINUX) |
1624 void AutomationProvider::WindowSimulateClick(const IPC::Message& message, | 1622 void AutomationProvider::WindowSimulateClick(const IPC::Message& message, |
1625 int handle, | 1623 int handle, |
1626 POINT click, | 1624 const gfx::Point& click, |
1627 int flags) { | 1625 int flags) { |
1628 HWND hwnd = 0; | 1626 gfx::NativeWindow window = window_tracker_->GetResource(handle); |
1629 | 1627 |
1630 if (window_tracker_->ContainsHandle(handle)) { | 1628 if (window) { |
1631 hwnd = window_tracker_->GetResource(handle); | 1629 ui_controls::SendMouseMove(click.x(), click.y()); |
1632 | |
1633 ui_controls::SendMouseMove(click.x, click.y); | |
1634 | 1630 |
1635 ui_controls::MouseButton button = ui_controls::LEFT; | 1631 ui_controls::MouseButton button = ui_controls::LEFT; |
1636 if ((flags & views::Event::EF_LEFT_BUTTON_DOWN) == | 1632 if ((flags & views::Event::EF_LEFT_BUTTON_DOWN) == |
1637 views::Event::EF_LEFT_BUTTON_DOWN) { | 1633 views::Event::EF_LEFT_BUTTON_DOWN) { |
1638 button = ui_controls::LEFT; | 1634 button = ui_controls::LEFT; |
1639 } else if ((flags & views::Event::EF_RIGHT_BUTTON_DOWN) == | 1635 } else if ((flags & views::Event::EF_RIGHT_BUTTON_DOWN) == |
1640 views::Event::EF_RIGHT_BUTTON_DOWN) { | 1636 views::Event::EF_RIGHT_BUTTON_DOWN) { |
1641 button = ui_controls::RIGHT; | 1637 button = ui_controls::RIGHT; |
1642 } else if ((flags & views::Event::EF_MIDDLE_BUTTON_DOWN) == | 1638 } else if ((flags & views::Event::EF_MIDDLE_BUTTON_DOWN) == |
1643 views::Event::EF_MIDDLE_BUTTON_DOWN) { | 1639 views::Event::EF_MIDDLE_BUTTON_DOWN) { |
1644 button = ui_controls::MIDDLE; | 1640 button = ui_controls::MIDDLE; |
1645 } else { | 1641 } else { |
1646 NOTREACHED(); | 1642 NOTREACHED(); |
1647 } | 1643 } |
1648 ui_controls::SendMouseClick(button); | 1644 ui_controls::SendMouseClick(window, click, button); |
1649 } | 1645 } |
1650 } | 1646 } |
| 1647 #endif |
1651 | 1648 |
| 1649 #if defined(OS_WIN) |
1652 void AutomationProvider::WindowSimulateDrag(int handle, | 1650 void AutomationProvider::WindowSimulateDrag(int handle, |
1653 std::vector<POINT> drag_path, | 1651 std::vector<POINT> drag_path, |
1654 int flags, | 1652 int flags, |
1655 bool press_escape_en_route, | 1653 bool press_escape_en_route, |
1656 IPC::Message* reply_message) { | 1654 IPC::Message* reply_message) { |
1657 bool succeeded = false; | 1655 bool succeeded = false; |
1658 if (browser_tracker_->ContainsHandle(handle) && (drag_path.size() > 1)) { | 1656 gfx::NativeWindow window = window_tracker_->GetResource(handle); |
| 1657 if (window && (drag_path.size() > 1)) { |
1659 succeeded = true; | 1658 succeeded = true; |
1660 | 1659 |
1661 UINT down_message = 0; | 1660 UINT down_message = 0; |
1662 UINT up_message = 0; | 1661 UINT up_message = 0; |
1663 WPARAM wparam_flags = 0; | 1662 WPARAM wparam_flags = 0; |
1664 if (flags & views::Event::EF_SHIFT_DOWN) | 1663 if (flags & views::Event::EF_SHIFT_DOWN) |
1665 wparam_flags |= MK_SHIFT; | 1664 wparam_flags |= MK_SHIFT; |
1666 if (flags & views::Event::EF_CONTROL_DOWN) | 1665 if (flags & views::Event::EF_CONTROL_DOWN) |
1667 wparam_flags |= MK_CONTROL; | 1666 wparam_flags |= MK_CONTROL; |
1668 if (flags & views::Event::EF_LEFT_BUTTON_DOWN) { | 1667 if (flags & views::Event::EF_LEFT_BUTTON_DOWN) { |
(...skipping 27 matching lines...) Expand all Loading... |
1696 MoveMouse(temp); | 1695 MoveMouse(temp); |
1697 SendMessage(top_level_hwnd, WM_MOUSEMOVE, wparam_flags, | 1696 SendMessage(top_level_hwnd, WM_MOUSEMOVE, wparam_flags, |
1698 MAKELPARAM(drag_path[i].x, drag_path[i].y)); | 1697 MAKELPARAM(drag_path[i].x, drag_path[i].y)); |
1699 } | 1698 } |
1700 POINT end = drag_path[drag_path.size() - 1]; | 1699 POINT end = drag_path[drag_path.size() - 1]; |
1701 MapWindowPoints(top_level_hwnd, HWND_DESKTOP, &end, 1); | 1700 MapWindowPoints(top_level_hwnd, HWND_DESKTOP, &end, 1); |
1702 MoveMouse(end); | 1701 MoveMouse(end); |
1703 | 1702 |
1704 if (press_escape_en_route) { | 1703 if (press_escape_en_route) { |
1705 // Press Escape. | 1704 // Press Escape. |
1706 ui_controls::SendKeyPress(VK_ESCAPE, | 1705 ui_controls::SendKeyPress(window, VK_ESCAPE, |
1707 ((flags & views::Event::EF_CONTROL_DOWN) | 1706 ((flags & views::Event::EF_CONTROL_DOWN) |
1708 == views::Event::EF_CONTROL_DOWN), | 1707 == views::Event::EF_CONTROL_DOWN), |
1709 ((flags & views::Event::EF_SHIFT_DOWN) == | 1708 ((flags & views::Event::EF_SHIFT_DOWN) == |
1710 views::Event::EF_SHIFT_DOWN), | 1709 views::Event::EF_SHIFT_DOWN), |
1711 ((flags & views::Event::EF_ALT_DOWN) == | 1710 ((flags & views::Event::EF_ALT_DOWN) == |
1712 views::Event::EF_ALT_DOWN)); | 1711 views::Event::EF_ALT_DOWN)); |
1713 } | 1712 } |
1714 SendMessage(top_level_hwnd, up_message, wparam_flags, | 1713 SendMessage(top_level_hwnd, up_message, wparam_flags, |
1715 MAKELPARAM(end.x, end.y)); | 1714 MAKELPARAM(end.x, end.y)); |
1716 | 1715 |
1717 MessageLoop::current()->PostTask(FROM_HERE, new InvokeTaskLaterTask( | 1716 MessageLoop::current()->PostTask(FROM_HERE, new InvokeTaskLaterTask( |
1718 new WindowDragResponseTask(this, reply_message))); | 1717 new WindowDragResponseTask(this, reply_message))); |
1719 } else { | 1718 } else { |
1720 AutomationMsg_WindowDrag::WriteReplyParams(reply_message, true); | 1719 AutomationMsg_WindowDrag::WriteReplyParams(reply_message, true); |
1721 Send(reply_message); | 1720 Send(reply_message); |
1722 } | 1721 } |
1723 } | 1722 } |
1724 #endif // defined(OS_WIN) | 1723 #endif // defined(OS_WIN) |
1725 | 1724 |
1726 #if defined(OS_WIN) || defined(OS_LINUX) | 1725 #if defined(OS_WIN) || defined(OS_LINUX) |
1727 void AutomationProvider::WindowSimulateKeyPress(const IPC::Message& message, | 1726 void AutomationProvider::WindowSimulateKeyPress(const IPC::Message& message, |
1728 int handle, | 1727 int handle, |
1729 wchar_t key, | 1728 wchar_t key, |
1730 int flags) { | 1729 int flags) { |
1731 if (!window_tracker_->ContainsHandle(handle)) | 1730 gfx::NativeWindow window = window_tracker_->GetResource(handle); |
| 1731 if (!window) |
1732 return; | 1732 return; |
1733 | 1733 |
1734 // The key event is sent to whatever window is active. | 1734 // The key event is sent to whatever window is active. |
1735 ui_controls::SendKeyPress(key, | 1735 ui_controls::SendKeyPress(window, key, |
1736 ((flags & views::Event::EF_CONTROL_DOWN) == | 1736 ((flags & views::Event::EF_CONTROL_DOWN) == |
1737 views::Event::EF_CONTROL_DOWN), | 1737 views::Event::EF_CONTROL_DOWN), |
1738 ((flags & views::Event::EF_SHIFT_DOWN) == | 1738 ((flags & views::Event::EF_SHIFT_DOWN) == |
1739 views::Event::EF_SHIFT_DOWN), | 1739 views::Event::EF_SHIFT_DOWN), |
1740 ((flags & views::Event::EF_ALT_DOWN) == | 1740 ((flags & views::Event::EF_ALT_DOWN) == |
1741 views::Event::EF_ALT_DOWN)); | 1741 views::Event::EF_ALT_DOWN)); |
1742 } | 1742 } |
1743 #endif | 1743 #endif |
1744 | 1744 |
1745 #if defined(OS_WIN) | 1745 #if defined(OS_WIN) |
(...skipping 1350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3096 NOTREACHED(); | 3096 NOTREACHED(); |
3097 return NULL; | 3097 return NULL; |
3098 } | 3098 } |
3099 | 3099 |
3100 RenderViewHost* view_host = tab_contents->render_view_host(); | 3100 RenderViewHost* view_host = tab_contents->render_view_host(); |
3101 return view_host; | 3101 return view_host; |
3102 } | 3102 } |
3103 | 3103 |
3104 return NULL; | 3104 return NULL; |
3105 } | 3105 } |
OLD | NEW |