Home | History | Annotate | Download | only in automation
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/automation/testing_automation_provider.h"
      6 
      7 #include <windows.h>
      8 
      9 #include "base/string_util.h"
     10 #include "base/utf_string_conversions.h"
     11 #include "chrome/browser/automation/automation_browser_tracker.h"
     12 #include "chrome/browser/automation/automation_window_tracker.h"
     13 #include "chrome/browser/ui/browser_window.h"
     14 
     15 void TestingAutomationProvider::ActivateWindow(int handle) {
     16   if (window_tracker_->ContainsHandle(handle)) {
     17     ::SetActiveWindow(window_tracker_->GetResource(handle));
     18   }
     19 }
     20 
     21 void TestingAutomationProvider::IsWindowMaximized(int handle,
     22                                                   bool* is_maximized,
     23                                                   bool* success) {
     24   *success = false;
     25 
     26   HWND hwnd = window_tracker_->GetResource(handle);
     27   if (hwnd) {
     28     *success = true;
     29     WINDOWPLACEMENT window_placement;
     30     GetWindowPlacement(hwnd, &window_placement);
     31     *is_maximized = (window_placement.showCmd == SW_MAXIMIZE);
     32   }
     33 }
     34 
     35 void TestingAutomationProvider::TerminateSession(int handle, bool* success) {
     36   *success = false;
     37 
     38   if (browser_tracker_->ContainsHandle(handle)) {
     39     Browser* browser = browser_tracker_->GetResource(handle);
     40     HWND window = browser->window()->GetNativeHandle();
     41     *success = (::PostMessageW(window, WM_ENDSESSION, 0, 0) == TRUE);
     42   }
     43 }
     44 
     45 void TestingAutomationProvider::GetWindowBounds(int handle,
     46                                                 gfx::Rect* bounds,
     47                                                 bool* success) {
     48   *success = false;
     49   HWND hwnd = window_tracker_->GetResource(handle);
     50   if (hwnd) {
     51     *success = true;
     52     WINDOWPLACEMENT window_placement;
     53     GetWindowPlacement(hwnd, &window_placement);
     54     *bounds = window_placement.rcNormalPosition;
     55   }
     56 }
     57 
     58 void TestingAutomationProvider::SetWindowBounds(int handle,
     59                                                 const gfx::Rect& bounds,
     60                                                 bool* success) {
     61   *success = false;
     62   if (window_tracker_->ContainsHandle(handle)) {
     63     HWND hwnd = window_tracker_->GetResource(handle);
     64     if (::MoveWindow(hwnd, bounds.x(), bounds.y(), bounds.width(),
     65                      bounds.height(), true)) {
     66       *success = true;
     67     }
     68   }
     69 }
     70 
     71 void TestingAutomationProvider::SetWindowVisible(int handle,
     72                                                  bool visible,
     73                                                  bool* result) {
     74   if (window_tracker_->ContainsHandle(handle)) {
     75     HWND hwnd = window_tracker_->GetResource(handle);
     76     ::ShowWindow(hwnd, visible ? SW_SHOW : SW_HIDE);
     77     *result = true;
     78   } else {
     79     *result = false;
     80   }
     81 }
     82 
     83 void TestingAutomationProvider::GetWindowTitle(int handle, string16* text) {
     84   gfx::NativeWindow window = window_tracker_->GetResource(handle);
     85   std::wstring result;
     86   int length = ::GetWindowTextLength(window) + 1;
     87   ::GetWindowText(window, WriteInto(&result, length), length);
     88   text->assign(WideToUTF16(result));
     89 }
     90 
     91