Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(525)

Side by Side Diff: chrome/browser/automation/automation_provider_win.cc

Issue 211033: Automated ui test porting + cleanup:... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: all green\! Created 11 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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 "chrome/browser/automation/ui_controls.h" 7 #include "chrome/browser/automation/ui_controls.h"
8 #include "chrome/browser/browser_window.h" 8 #include "chrome/browser/browser_window.h"
9 #include "chrome/browser/external_tab_container.h" 9 #include "chrome/browser/external_tab_container.h"
10 #include "chrome/browser/tab_contents/tab_contents.h" 10 #include "chrome/browser/tab_contents/tab_contents.h"
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 reinterpret_cast<LPARAM>(window))) { 67 reinterpret_cast<LPARAM>(window))) {
68 // We enumerated all the windows and did not find the foreground window, 68 // We enumerated all the windows and did not find the foreground window,
69 // it is not our window, ignore it. 69 // it is not our window, ignore it.
70 *handle = 0; 70 *handle = 0;
71 return; 71 return;
72 } 72 }
73 73
74 *handle = window_tracker_->Add(window); 74 *handle = window_tracker_->Add(window);
75 } 75 }
76 76
77 void AutomationProvider::GetWindowHWND(int handle, HWND* win32_handle) {
78 *win32_handle = window_tracker_->GetResource(handle);
79 }
80
81 void AutomationProvider::WindowGetViewBounds(int handle, int view_id, 77 void AutomationProvider::WindowGetViewBounds(int handle, int view_id,
82 bool screen_coordinates, 78 bool screen_coordinates,
83 bool* success, 79 bool* success,
84 gfx::Rect* bounds) { 80 gfx::Rect* bounds) {
85 *success = false; 81 *success = false;
86 if (window_tracker_->ContainsHandle(handle)) { 82 if (window_tracker_->ContainsHandle(handle)) {
87 gfx::NativeWindow window = window_tracker_->GetResource(handle); 83 gfx::NativeWindow window = window_tracker_->GetResource(handle);
88 views::RootView* root_view = views::WidgetWin::FindRootView(window); 84 views::RootView* root_view = views::WidgetWin::FindRootView(window);
89 if (root_view) { 85 if (root_view) {
90 views::View* view = root_view->GetViewByID(view_id); 86 views::View* view = root_view->GetViewByID(view_id);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 } 173 }
178 174
179 private: 175 private:
180 AutomationProvider* provider_; 176 AutomationProvider* provider_;
181 IPC::Message* reply_message_; 177 IPC::Message* reply_message_;
182 178
183 DISALLOW_COPY_AND_ASSIGN(WindowDragResponseTask); 179 DISALLOW_COPY_AND_ASSIGN(WindowDragResponseTask);
184 }; 180 };
185 181
186 void AutomationProvider::WindowSimulateDrag(int handle, 182 void AutomationProvider::WindowSimulateDrag(int handle,
187 std::vector<POINT> drag_path, 183 std::vector<gfx::Point> drag_path,
188 int flags, 184 int flags,
189 bool press_escape_en_route, 185 bool press_escape_en_route,
190 IPC::Message* reply_message) { 186 IPC::Message* reply_message) {
191 bool succeeded = false;
192 if (browser_tracker_->ContainsHandle(handle) && (drag_path.size() > 1)) { 187 if (browser_tracker_->ContainsHandle(handle) && (drag_path.size() > 1)) {
193 gfx::NativeWindow window = 188 gfx::NativeWindow window =
194 browser_tracker_->GetResource(handle)->window()->GetNativeHandle(); 189 browser_tracker_->GetResource(handle)->window()->GetNativeHandle();
195 succeeded = true;
196 190
197 UINT down_message = 0; 191 UINT down_message = 0;
198 UINT up_message = 0; 192 UINT up_message = 0;
199 WPARAM wparam_flags = 0; 193 WPARAM wparam_flags = 0;
200 if (flags & views::Event::EF_SHIFT_DOWN) 194 if (flags & views::Event::EF_SHIFT_DOWN)
201 wparam_flags |= MK_SHIFT; 195 wparam_flags |= MK_SHIFT;
202 if (flags & views::Event::EF_CONTROL_DOWN) 196 if (flags & views::Event::EF_CONTROL_DOWN)
203 wparam_flags |= MK_CONTROL; 197 wparam_flags |= MK_CONTROL;
204 if (flags & views::Event::EF_LEFT_BUTTON_DOWN) { 198 if (flags & views::Event::EF_LEFT_BUTTON_DOWN) {
205 wparam_flags |= MK_LBUTTON; 199 wparam_flags |= MK_LBUTTON;
206 down_message = WM_LBUTTONDOWN; 200 down_message = WM_LBUTTONDOWN;
207 up_message = WM_LBUTTONUP; 201 up_message = WM_LBUTTONUP;
208 } 202 }
209 if (flags & views::Event::EF_MIDDLE_BUTTON_DOWN) { 203 if (flags & views::Event::EF_MIDDLE_BUTTON_DOWN) {
210 wparam_flags |= MK_MBUTTON; 204 wparam_flags |= MK_MBUTTON;
211 down_message = WM_MBUTTONDOWN; 205 down_message = WM_MBUTTONDOWN;
212 up_message = WM_MBUTTONUP; 206 up_message = WM_MBUTTONUP;
213 } 207 }
214 if (flags & views::Event::EF_RIGHT_BUTTON_DOWN) { 208 if (flags & views::Event::EF_RIGHT_BUTTON_DOWN) {
215 wparam_flags |= MK_RBUTTON; 209 wparam_flags |= MK_RBUTTON;
216 down_message = WM_LBUTTONDOWN; 210 down_message = WM_LBUTTONDOWN;
217 up_message = WM_LBUTTONUP; 211 up_message = WM_LBUTTONUP;
218 } 212 }
219 213
220 Browser* browser = browser_tracker_->GetResource(handle); 214 Browser* browser = browser_tracker_->GetResource(handle);
221 DCHECK(browser); 215 DCHECK(browser);
222 HWND top_level_hwnd = 216 HWND top_level_hwnd =
223 reinterpret_cast<HWND>(browser->window()->GetNativeHandle()); 217 reinterpret_cast<HWND>(browser->window()->GetNativeHandle());
224 POINT temp = drag_path[0]; 218 POINT temp = drag_path[0].ToPOINT();
225 MapWindowPoints(top_level_hwnd, HWND_DESKTOP, &temp, 1); 219 MapWindowPoints(top_level_hwnd, HWND_DESKTOP, &temp, 1);
226 MoveMouse(temp); 220 MoveMouse(temp);
227 SendMessage(top_level_hwnd, down_message, wparam_flags, 221 SendMessage(top_level_hwnd, down_message, wparam_flags,
228 MAKELPARAM(drag_path[0].x, drag_path[0].y)); 222 MAKELPARAM(drag_path[0].x(), drag_path[0].y()));
229 for (int i = 1; i < static_cast<int>(drag_path.size()); ++i) { 223 for (int i = 1; i < static_cast<int>(drag_path.size()); ++i) {
230 temp = drag_path[i]; 224 temp = drag_path[i].ToPOINT();
231 MapWindowPoints(top_level_hwnd, HWND_DESKTOP, &temp, 1); 225 MapWindowPoints(top_level_hwnd, HWND_DESKTOP, &temp, 1);
232 MoveMouse(temp); 226 MoveMouse(temp);
233 SendMessage(top_level_hwnd, WM_MOUSEMOVE, wparam_flags, 227 SendMessage(top_level_hwnd, WM_MOUSEMOVE, wparam_flags,
234 MAKELPARAM(drag_path[i].x, drag_path[i].y)); 228 MAKELPARAM(drag_path[i].x(), drag_path[i].y()));
235 } 229 }
236 POINT end = drag_path[drag_path.size() - 1]; 230 POINT end = drag_path[drag_path.size() - 1].ToPOINT();
237 MapWindowPoints(top_level_hwnd, HWND_DESKTOP, &end, 1); 231 MapWindowPoints(top_level_hwnd, HWND_DESKTOP, &end, 1);
238 MoveMouse(end); 232 MoveMouse(end);
239 233
240 if (press_escape_en_route) { 234 if (press_escape_en_route) {
241 // Press Escape. 235 // Press Escape.
242 ui_controls::SendKeyPress(window, VK_ESCAPE, 236 ui_controls::SendKeyPress(window, VK_ESCAPE,
243 ((flags & views::Event::EF_CONTROL_DOWN) 237 ((flags & views::Event::EF_CONTROL_DOWN)
244 == views::Event::EF_CONTROL_DOWN), 238 == views::Event::EF_CONTROL_DOWN),
245 ((flags & views::Event::EF_SHIFT_DOWN) == 239 ((flags & views::Event::EF_SHIFT_DOWN) ==
246 views::Event::EF_SHIFT_DOWN), 240 views::Event::EF_SHIFT_DOWN),
247 ((flags & views::Event::EF_ALT_DOWN) == 241 ((flags & views::Event::EF_ALT_DOWN) ==
248 views::Event::EF_ALT_DOWN)); 242 views::Event::EF_ALT_DOWN));
249 } 243 }
250 SendMessage(top_level_hwnd, up_message, wparam_flags, 244 SendMessage(top_level_hwnd, up_message, wparam_flags,
251 MAKELPARAM(end.x, end.y)); 245 MAKELPARAM(end.x, end.y));
252 246
253 MessageLoop::current()->PostTask(FROM_HERE, new InvokeTaskLaterTask( 247 MessageLoop::current()->PostTask(FROM_HERE, new InvokeTaskLaterTask(
254 new WindowDragResponseTask(this, reply_message))); 248 new WindowDragResponseTask(this, reply_message)));
255 } else { 249 } else {
256 AutomationMsg_WindowDrag::WriteReplyParams(reply_message, true); 250 AutomationMsg_WindowDrag::WriteReplyParams(reply_message, false);
257 Send(reply_message); 251 Send(reply_message);
258 } 252 }
259 } 253 }
260 254
261 void AutomationProvider::GetFocusedViewID(int handle, int* view_id) { 255 void AutomationProvider::GetFocusedViewID(int handle, int* view_id) {
262 *view_id = -1; 256 *view_id = -1;
263 if (window_tracker_->ContainsHandle(handle)) { 257 if (window_tracker_->ContainsHandle(handle)) {
264 HWND hwnd = window_tracker_->GetResource(handle); 258 HWND hwnd = window_tracker_->GetResource(handle);
265 views::FocusManager* focus_manager = 259 views::FocusManager* focus_manager =
266 views::FocusManager::GetFocusManagerForNativeView(hwnd); 260 views::FocusManager::GetFocusManagerForNativeView(hwnd);
(...skipping 16 matching lines...) Expand all
283 browser->window()->GetBrowserWindowTesting(); 277 browser->window()->GetBrowserWindowTesting();
284 BookmarkBarView* bookmark_bar = testing->GetBookmarkBarView(); 278 BookmarkBarView* bookmark_bar = testing->GetBookmarkBarView();
285 if (bookmark_bar) { 279 if (bookmark_bar) {
286 *animating = bookmark_bar->IsAnimating(); 280 *animating = bookmark_bar->IsAnimating();
287 *visible = browser->window()->IsBookmarkBarVisible(); 281 *visible = browser->window()->IsBookmarkBarVisible();
288 } 282 }
289 } 283 }
290 } 284 }
291 } 285 }
292 286
287 void AutomationProvider::GetWindowBounds(int handle, gfx::Rect* bounds,
288 bool* success) {
289 *success = false;
290 HWND hwnd = window_tracker_->GetResource(handle);
291 if (hwnd) {
292 *success = true;
293 WINDOWPLACEMENT window_placement;
294 GetWindowPlacement(hwnd, &window_placement);
295 *bounds = window_placement.rcNormalPosition;
296 }
297 }
298
293 void AutomationProvider::SetWindowBounds(int handle, const gfx::Rect& bounds, 299 void AutomationProvider::SetWindowBounds(int handle, const gfx::Rect& bounds,
294 bool* success) { 300 bool* success) {
295 *success = false; 301 *success = false;
296 if (window_tracker_->ContainsHandle(handle)) { 302 if (window_tracker_->ContainsHandle(handle)) {
297 HWND hwnd = window_tracker_->GetResource(handle); 303 HWND hwnd = window_tracker_->GetResource(handle);
298 if (::MoveWindow(hwnd, bounds.x(), bounds.y(), bounds.width(), 304 if (::MoveWindow(hwnd, bounds.x(), bounds.y(), bounds.width(),
299 bounds.height(), true)) { 305 bounds.height(), true)) {
300 *success = true; 306 *success = true;
301 } 307 }
302 } 308 }
303 } 309 }
304 310
305 void AutomationProvider::SetWindowVisible(int handle, bool visible, 311 void AutomationProvider::SetWindowVisible(int handle, bool visible,
306 bool* result) { 312 bool* result) {
307 if (window_tracker_->ContainsHandle(handle)) { 313 if (window_tracker_->ContainsHandle(handle)) {
308 HWND hwnd = window_tracker_->GetResource(handle); 314 HWND hwnd = window_tracker_->GetResource(handle);
309 ::ShowWindow(hwnd, visible ? SW_SHOW : SW_HIDE); 315 ::ShowWindow(hwnd, visible ? SW_SHOW : SW_HIDE);
310 *result = true; 316 *result = true;
311 } else { 317 } else {
312 *result = false; 318 *result = false;
313 } 319 }
314 } 320 }
315 321
316 void AutomationProvider::ActivateWindow(int handle) { 322 void AutomationProvider::ActivateWindow(int handle) {
317 if (window_tracker_->ContainsHandle(handle)) { 323 if (window_tracker_->ContainsHandle(handle)) {
318 ::SetActiveWindow(window_tracker_->GetResource(handle)); 324 ::SetActiveWindow(window_tracker_->GetResource(handle));
319 } 325 }
320 } 326 }
321 327
328 void AutomationProvider::IsWindowMaximized(int handle, bool* is_maximized,
329 bool* success) {
330 *success = false;
331
332 HWND hwnd = window_tracker_->GetResource(handle);
333 if (hwnd) {
334 *success = true;
335 WINDOWPLACEMENT window_placement;
336 GetWindowPlacement(hwnd, &window_placement);
337 *is_maximized = (window_placement.showCmd == SW_MAXIMIZE);
338 }
339 }
340
322 void AutomationProvider::GetTabHWND(int handle, HWND* tab_hwnd) { 341 void AutomationProvider::GetTabHWND(int handle, HWND* tab_hwnd) {
323 *tab_hwnd = NULL; 342 *tab_hwnd = NULL;
324 343
325 if (tab_tracker_->ContainsHandle(handle)) { 344 if (tab_tracker_->ContainsHandle(handle)) {
326 NavigationController* tab = tab_tracker_->GetResource(handle); 345 NavigationController* tab = tab_tracker_->GetResource(handle);
327 *tab_hwnd = tab->tab_contents()->GetNativeView(); 346 *tab_hwnd = tab->tab_contents()->GetNativeView();
328 } 347 }
329 } 348 }
330 349
331 void AutomationProvider::CreateExternalTab( 350 void AutomationProvider::CreateExternalTab(
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 ExternalTabContainer* AutomationProvider::GetExternalTabForHandle(int handle) { 420 ExternalTabContainer* AutomationProvider::GetExternalTabForHandle(int handle) {
402 if (tab_tracker_->ContainsHandle(handle)) { 421 if (tab_tracker_->ContainsHandle(handle)) {
403 NavigationController* tab = tab_tracker_->GetResource(handle); 422 NavigationController* tab = tab_tracker_->GetResource(handle);
404 return ExternalTabContainer::GetContainerForTab( 423 return ExternalTabContainer::GetContainerForTab(
405 tab->tab_contents()->GetNativeView()); 424 tab->tab_contents()->GetNativeView());
406 } 425 }
407 426
408 return NULL; 427 return NULL;
409 } 428 }
410 429
411 void AutomationProvider::OnTabReposition(
412 int tab_handle, const IPC::Reposition_Params& params) {
413 if (!tab_tracker_->ContainsHandle(tab_handle))
414 return;
415
416 if (!IsWindow(params.window))
417 return;
418
419 unsigned long process_id = 0;
420 unsigned long thread_id = 0;
421
422 thread_id = GetWindowThreadProcessId(params.window, &process_id);
423
424 if (thread_id != GetCurrentThreadId()) {
425 NOTREACHED();
426 return;
427 }
428
429 SetWindowPos(params.window, params.window_insert_after, params.left,
430 params.top, params.width, params.height, params.flags);
431
432 if (params.set_parent) {
433 if (IsWindow(params.parent_window)) {
434 if (!SetParent(params.window, params.parent_window))
435 DLOG(WARNING) << "SetParent failed. Error 0x%x" << GetLastError();
436 }
437 }
438 }
439
440 void AutomationProvider::OnForwardContextMenuCommandToChrome(int tab_handle, 430 void AutomationProvider::OnForwardContextMenuCommandToChrome(int tab_handle,
441 int command) { 431 int command) {
442 if (tab_tracker_->ContainsHandle(tab_handle)) { 432 if (tab_tracker_->ContainsHandle(tab_handle)) {
443 NavigationController* tab = tab_tracker_->GetResource(tab_handle); 433 NavigationController* tab = tab_tracker_->GetResource(tab_handle);
444 if (!tab) { 434 if (!tab) {
445 NOTREACHED(); 435 NOTREACHED();
446 return; 436 return;
447 } 437 }
448 438
449 TabContents* tab_contents = tab->tab_contents(); 439 TabContents* tab_contents = tab->tab_contents();
(...skipping 28 matching lines...) Expand all
478 TabContents* tab_contents = external_tab_container->tab_contents(); 468 TabContents* tab_contents = external_tab_container->tab_contents();
479 *tab_handle = external_tab_container->tab_handle(); 469 *tab_handle = external_tab_container->tab_handle();
480 external_tab_container->set_tab_handle(*tab_handle); 470 external_tab_container->set_tab_handle(*tab_handle);
481 *tab_container_window = external_tab_container->GetNativeView(); 471 *tab_container_window = external_tab_container->GetNativeView();
482 *tab_window = tab_contents->GetNativeView(); 472 *tab_window = tab_contents->GetNativeView();
483 } else { 473 } else {
484 external_tab_container->Uninitialize(); 474 external_tab_container->Uninitialize();
485 } 475 }
486 } 476 }
487 477
478 void AutomationProvider::TerminateSession(int handle, bool* success) {
479 *success = false;
480
481 if (browser_tracker_->ContainsHandle(handle)) {
482 Browser* browser = browser_tracker_->GetResource(handle);
483 HWND window = browser->window()->GetNativeHandle();
484 *success = (::PostMessageW(window, WM_ENDSESSION, 0, 0) == TRUE);
485 }
486 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698