| /* | 
 |  *  Copyright 2010 The WebRTC Project Authors. All rights reserved. | 
 |  * | 
 |  *  Use of this source code is governed by a BSD-style license | 
 |  *  that can be found in the LICENSE file in the root of the source | 
 |  *  tree. An additional intellectual property rights grant can be found | 
 |  *  in the file PATENTS.  All contributing project authors may | 
 |  *  be found in the AUTHORS file in the root of the source tree. | 
 |  */ | 
 | #include "webrtc/base/arraysize.h" | 
 | #include "webrtc/base/gunit.h" | 
 | #include "webrtc/base/common.h" | 
 | #include "webrtc/base/logging.h" | 
 | #include "webrtc/base/win32window.h" | 
 | #include "webrtc/base/win32windowpicker.h" | 
 | #include "webrtc/base/windowpicker.h" | 
 |  | 
 | #if !defined(WEBRTC_WIN) | 
 | #error Only for Windows | 
 | #endif | 
 |  | 
 | namespace rtc { | 
 |  | 
 | static const TCHAR* kVisibleWindowTitle = L"Visible Window"; | 
 | static const TCHAR* kInvisibleWindowTitle = L"Invisible Window"; | 
 |  | 
 | class Win32WindowPickerForTest : public Win32WindowPicker { | 
 |  public: | 
 |   Win32WindowPickerForTest() { | 
 |     EXPECT_TRUE(visible_window_.Create(NULL, kVisibleWindowTitle, WS_VISIBLE, | 
 |                                        0, 0, 0, 0, 0)); | 
 |     EXPECT_TRUE(invisible_window_.Create(NULL, kInvisibleWindowTitle, 0, | 
 |                                          0, 0, 0, 0, 0)); | 
 |   } | 
 |  | 
 |   ~Win32WindowPickerForTest() { | 
 |     visible_window_.Destroy(); | 
 |     invisible_window_.Destroy(); | 
 |   } | 
 |  | 
 |   virtual bool GetWindowList(WindowDescriptionList* descriptions) { | 
 |     if (!Win32WindowPicker::EnumProc(visible_window_.handle(), | 
 |                                      reinterpret_cast<LPARAM>(descriptions))) { | 
 |       return false; | 
 |     } | 
 |     if (!Win32WindowPicker::EnumProc(invisible_window_.handle(), | 
 |                                      reinterpret_cast<LPARAM>(descriptions))) { | 
 |       return false; | 
 |     } | 
 |     return true; | 
 |   } | 
 |  | 
 |   Win32Window* visible_window() { | 
 |     return &visible_window_; | 
 |   } | 
 |  | 
 |   Win32Window* invisible_window() { | 
 |     return &invisible_window_; | 
 |   } | 
 |  | 
 |  private: | 
 |   Win32Window visible_window_; | 
 |   Win32Window invisible_window_; | 
 | }; | 
 |  | 
 | TEST(Win32WindowPickerTest, TestGetWindowList) { | 
 |   Win32WindowPickerForTest window_picker; | 
 |   WindowDescriptionList descriptions; | 
 |   EXPECT_TRUE(window_picker.GetWindowList(&descriptions)); | 
 |   EXPECT_EQ(1, descriptions.size()); | 
 |   WindowDescription desc = descriptions.front(); | 
 |   EXPECT_EQ(window_picker.visible_window()->handle(), desc.id().id()); | 
 |   TCHAR window_title[500]; | 
 |   GetWindowText(window_picker.visible_window()->handle(), window_title, | 
 |                 arraysize(window_title)); | 
 |   EXPECT_EQ(0, wcscmp(window_title, kVisibleWindowTitle)); | 
 | } | 
 |  | 
 | TEST(Win32WindowPickerTest, TestIsVisible) { | 
 |   Win32WindowPickerForTest window_picker; | 
 |   HWND visible_id = window_picker.visible_window()->handle(); | 
 |   HWND invisible_id = window_picker.invisible_window()->handle(); | 
 |   EXPECT_TRUE(window_picker.IsVisible(WindowId(visible_id))); | 
 |   EXPECT_FALSE(window_picker.IsVisible(WindowId(invisible_id))); | 
 | } | 
 |  | 
 | TEST(Win32WindowPickerTest, TestMoveToFront) { | 
 |   Win32WindowPickerForTest window_picker; | 
 |   HWND visible_id = window_picker.visible_window()->handle(); | 
 |   HWND invisible_id = window_picker.invisible_window()->handle(); | 
 |  | 
 |   // There are a number of condition where SetForegroundWindow might | 
 |   // fail depending on the state of the calling process. To be on the | 
 |   // safe side we doesn't expect MoveToFront to return true, just test | 
 |   // that we don't crash. | 
 |   window_picker.MoveToFront(WindowId(visible_id)); | 
 |   window_picker.MoveToFront(WindowId(invisible_id)); | 
 | } | 
 |  | 
 | }  // namespace rtc |