| 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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 #if defined(OS_WIN) || defined(OS_LINUX) | 64 #if defined(OS_WIN) || defined(OS_LINUX) |
| 65 // TODO(port): Port these to the mac. | 65 // TODO(port): Port these to the mac. |
| 66 #include "chrome/browser/automation/ui_controls.h" | 66 #include "chrome/browser/automation/ui_controls.h" |
| 67 #endif | 67 #endif |
| 68 | 68 |
| 69 #if defined(OS_WIN) | 69 #if defined(OS_WIN) |
| 70 #include "chrome/browser/views/bookmark_bar_view.h" | 70 #include "chrome/browser/views/bookmark_bar_view.h" |
| 71 #include "views/widget/root_view.h" | 71 #include "views/widget/root_view.h" |
| 72 #include "views/widget/widget_win.h" | 72 #include "views/widget/widget_win.h" |
| 73 #include "views/window/window.h" | 73 #include "views/window/window.h" |
| 74 #elif defined(OS_LINUX) |
| 75 #include "chrome/browser/gtk/view_id_util.h" |
| 74 #endif | 76 #endif |
| 75 | 77 |
| 76 using base::Time; | 78 using base::Time; |
| 77 | 79 |
| 78 #if defined(OS_WIN) | 80 #if defined(OS_WIN) |
| 79 static void MoveMouse(const POINT& point) { | 81 static void MoveMouse(const POINT& point) { |
| 80 SetCursorPos(point.x, point.y); | 82 SetCursorPos(point.x, point.y); |
| 81 | 83 |
| 82 // Now, make sure that GetMessagePos returns the values we just set by | 84 // Now, make sure that GetMessagePos returns the values we just set by |
| 83 // simulating a mouse move. The value returned by GetMessagePos is updated | 85 // simulating a mouse move. The value returned by GetMessagePos is updated |
| (...skipping 696 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 780 } | 782 } |
| 781 | 783 |
| 782 virtual std::string GetHTMLContents() { return contents_; } | 784 virtual std::string GetHTMLContents() { return contents_; } |
| 783 | 785 |
| 784 private: | 786 private: |
| 785 std::string contents_; | 787 std::string contents_; |
| 786 | 788 |
| 787 DISALLOW_COPY_AND_ASSIGN(AutomationInterstitialPage); | 789 DISALLOW_COPY_AND_ASSIGN(AutomationInterstitialPage); |
| 788 }; | 790 }; |
| 789 | 791 |
| 792 #if !defined(OS_MACOSX) |
| 793 class ClickTask : public Task { |
| 794 public: |
| 795 ClickTask(gfx::Point point, int flags) : point_(point), flags_(flags) {} |
| 796 virtual ~ClickTask() {} |
| 797 |
| 798 virtual void Run() { |
| 799 ui_controls::MouseButton button = ui_controls::LEFT; |
| 800 if ((flags_ & views::Event::EF_LEFT_BUTTON_DOWN) == |
| 801 views::Event::EF_LEFT_BUTTON_DOWN) { |
| 802 button = ui_controls::LEFT; |
| 803 } else if ((flags_ & views::Event::EF_RIGHT_BUTTON_DOWN) == |
| 804 views::Event::EF_RIGHT_BUTTON_DOWN) { |
| 805 button = ui_controls::RIGHT; |
| 806 } else if ((flags_ & views::Event::EF_MIDDLE_BUTTON_DOWN) == |
| 807 views::Event::EF_MIDDLE_BUTTON_DOWN) { |
| 808 button = ui_controls::MIDDLE; |
| 809 } else { |
| 810 NOTREACHED(); |
| 811 } |
| 812 |
| 813 ui_controls::SendMouseClick(point_, button); |
| 814 } |
| 815 |
| 816 private: |
| 817 gfx::Point point_; |
| 818 int flags_; |
| 819 |
| 820 DISALLOW_COPY_AND_ASSIGN(ClickTask); |
| 821 }; |
| 822 #endif |
| 823 |
| 790 AutomationProvider::AutomationProvider(Profile* profile) | 824 AutomationProvider::AutomationProvider(Profile* profile) |
| 791 : redirect_query_(0), | 825 : redirect_query_(0), |
| 792 profile_(profile), | 826 profile_(profile), |
| 793 reply_message_(NULL) { | 827 reply_message_(NULL) { |
| 794 browser_tracker_.reset(new AutomationBrowserTracker(this)); | 828 browser_tracker_.reset(new AutomationBrowserTracker(this)); |
| 795 tab_tracker_.reset(new AutomationTabTracker(this)); | 829 tab_tracker_.reset(new AutomationTabTracker(this)); |
| 796 window_tracker_.reset(new AutomationWindowTracker(this)); | 830 window_tracker_.reset(new AutomationWindowTracker(this)); |
| 797 autocomplete_edit_tracker_.reset( | 831 autocomplete_edit_tracker_.reset( |
| 798 new AutomationAutocompleteEditTracker(this)); | 832 new AutomationAutocompleteEditTracker(this)); |
| 799 new_tab_ui_load_observer_.reset(new NewTabUILoadObserver(this)); | 833 new_tab_ui_load_observer_.reset(new NewTabUILoadObserver(this)); |
| (...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1474 *success = true; | 1508 *success = true; |
| 1475 gfx::Point point; | 1509 gfx::Point point; |
| 1476 if (screen_coordinates) | 1510 if (screen_coordinates) |
| 1477 views::View::ConvertPointToScreen(view, &point); | 1511 views::View::ConvertPointToScreen(view, &point); |
| 1478 else | 1512 else |
| 1479 views::View::ConvertPointToView(view, root_view, &point); | 1513 views::View::ConvertPointToView(view, root_view, &point); |
| 1480 *bounds = view->GetLocalBounds(false); | 1514 *bounds = view->GetLocalBounds(false); |
| 1481 bounds->set_origin(point); | 1515 bounds->set_origin(point); |
| 1482 } | 1516 } |
| 1483 } | 1517 } |
| 1518 #elif defined(OS_LINUX) |
| 1519 gfx::NativeWindow window = window_tracker_->GetResource(handle); |
| 1520 GtkWidget* widget = ViewIDUtil::GetWidget(GTK_WIDGET(window), |
| 1521 static_cast<ViewID>(view_id)); |
| 1522 if (!widget) |
| 1523 return; |
| 1524 *success = true; |
| 1525 *bounds = gfx::Rect(0, 0, |
| 1526 widget->allocation.width, widget->allocation.height); |
| 1527 gint x, y; |
| 1528 if (screen_coordinates) { |
| 1529 gdk_window_get_origin(widget->window, &x, &y); |
| 1530 if (GTK_WIDGET_NO_WINDOW(widget)) { |
| 1531 x += widget->allocation.x; |
| 1532 y += widget->allocation.y; |
| 1533 } |
| 1534 } else { |
| 1535 gtk_widget_translate_coordinates(widget, GTK_WIDGET(window), |
| 1536 0, 0, &x, &y); |
| 1537 } |
| 1538 bounds->set_origin(gfx::Point(x, y)); |
| 1484 #else | 1539 #else |
| 1485 NOTIMPLEMENTED(); | 1540 NOTIMPLEMENTED(); |
| 1486 #endif | 1541 #endif |
| 1487 } | 1542 } |
| 1488 } | 1543 } |
| 1489 | 1544 |
| 1490 #if defined(OS_WIN) | 1545 #if defined(OS_WIN) |
| 1491 // This task enqueues a mouse event on the event loop, so that the view | 1546 // This task enqueues a mouse event on the event loop, so that the view |
| 1492 // that it's being sent to can do the requisite post-processing. | 1547 // that it's being sent to can do the requisite post-processing. |
| 1493 class MouseEventTask : public Task { | 1548 class MouseEventTask : public Task { |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1593 }; | 1648 }; |
| 1594 #endif // defined(OS_WIN) | 1649 #endif // defined(OS_WIN) |
| 1595 | 1650 |
| 1596 #if defined(OS_WIN) || defined(OS_LINUX) | 1651 #if defined(OS_WIN) || defined(OS_LINUX) |
| 1597 void AutomationProvider::WindowSimulateClick(const IPC::Message& message, | 1652 void AutomationProvider::WindowSimulateClick(const IPC::Message& message, |
| 1598 int handle, | 1653 int handle, |
| 1599 const gfx::Point& click, | 1654 const gfx::Point& click, |
| 1600 int flags) { | 1655 int flags) { |
| 1601 | 1656 |
| 1602 if (window_tracker_->ContainsHandle(handle)) { | 1657 if (window_tracker_->ContainsHandle(handle)) { |
| 1603 gfx::NativeWindow window = window_tracker_->GetResource(handle); | 1658 ui_controls::SendMouseMoveNotifyWhenDone(click.x(), click.y(), |
| 1604 ui_controls::SendMouseMove(click.x(), click.y()); | 1659 new ClickTask(click, flags)); |
| 1605 | |
| 1606 ui_controls::MouseButton button = ui_controls::LEFT; | |
| 1607 if ((flags & views::Event::EF_LEFT_BUTTON_DOWN) == | |
| 1608 views::Event::EF_LEFT_BUTTON_DOWN) { | |
| 1609 button = ui_controls::LEFT; | |
| 1610 } else if ((flags & views::Event::EF_RIGHT_BUTTON_DOWN) == | |
| 1611 views::Event::EF_RIGHT_BUTTON_DOWN) { | |
| 1612 button = ui_controls::RIGHT; | |
| 1613 } else if ((flags & views::Event::EF_MIDDLE_BUTTON_DOWN) == | |
| 1614 views::Event::EF_MIDDLE_BUTTON_DOWN) { | |
| 1615 button = ui_controls::MIDDLE; | |
| 1616 } else { | |
| 1617 NOTREACHED(); | |
| 1618 } | |
| 1619 ui_controls::SendMouseClick(window, click, button); | |
| 1620 } | 1660 } |
| 1621 } | 1661 } |
| 1622 #endif | 1662 #endif |
| 1623 | 1663 |
| 1624 #if defined(OS_WIN) | 1664 #if defined(OS_WIN) |
| 1625 void AutomationProvider::WindowSimulateDrag(int handle, | 1665 void AutomationProvider::WindowSimulateDrag(int handle, |
| 1626 std::vector<POINT> drag_path, | 1666 std::vector<POINT> drag_path, |
| 1627 int flags, | 1667 int flags, |
| 1628 bool press_escape_en_route, | 1668 bool press_escape_en_route, |
| 1629 IPC::Message* reply_message) { | 1669 IPC::Message* reply_message) { |
| (...skipping 1464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3094 NOTREACHED(); | 3134 NOTREACHED(); |
| 3095 return NULL; | 3135 return NULL; |
| 3096 } | 3136 } |
| 3097 | 3137 |
| 3098 RenderViewHost* view_host = tab_contents->render_view_host(); | 3138 RenderViewHost* view_host = tab_contents->render_view_host(); |
| 3099 return view_host; | 3139 return view_host; |
| 3100 } | 3140 } |
| 3101 | 3141 |
| 3102 return NULL; | 3142 return NULL; |
| 3103 } | 3143 } |
| OLD | NEW |