• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright 2010 The WebRTC Project Authors. All rights reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 #include "webrtc/base/gunit.h"
11 #include "webrtc/base/common.h"
12 #include "webrtc/base/logging.h"
13 #include "webrtc/base/win32window.h"
14 #include "webrtc/base/win32windowpicker.h"
15 #include "webrtc/base/windowpicker.h"
16 
17 #if !defined(WEBRTC_WIN)
18 #error Only for Windows
19 #endif
20 
21 namespace rtc {
22 
23 static const TCHAR* kVisibleWindowTitle = L"Visible Window";
24 static const TCHAR* kInvisibleWindowTitle = L"Invisible Window";
25 
26 class Win32WindowPickerForTest : public Win32WindowPicker {
27  public:
Win32WindowPickerForTest()28   Win32WindowPickerForTest() {
29     EXPECT_TRUE(visible_window_.Create(NULL, kVisibleWindowTitle, WS_VISIBLE,
30                                        0, 0, 0, 0, 0));
31     EXPECT_TRUE(invisible_window_.Create(NULL, kInvisibleWindowTitle, 0,
32                                          0, 0, 0, 0, 0));
33   }
34 
~Win32WindowPickerForTest()35   ~Win32WindowPickerForTest() {
36     visible_window_.Destroy();
37     invisible_window_.Destroy();
38   }
39 
GetWindowList(WindowDescriptionList * descriptions)40   virtual bool GetWindowList(WindowDescriptionList* descriptions) {
41     if (!Win32WindowPicker::EnumProc(visible_window_.handle(),
42                                      reinterpret_cast<LPARAM>(descriptions))) {
43       return false;
44     }
45     if (!Win32WindowPicker::EnumProc(invisible_window_.handle(),
46                                      reinterpret_cast<LPARAM>(descriptions))) {
47       return false;
48     }
49     return true;
50   }
51 
visible_window()52   Win32Window* visible_window() {
53     return &visible_window_;
54   }
55 
invisible_window()56   Win32Window* invisible_window() {
57     return &invisible_window_;
58   }
59 
60  private:
61   Win32Window visible_window_;
62   Win32Window invisible_window_;
63 };
64 
TEST(Win32WindowPickerTest,TestGetWindowList)65 TEST(Win32WindowPickerTest, TestGetWindowList) {
66   Win32WindowPickerForTest window_picker;
67   WindowDescriptionList descriptions;
68   EXPECT_TRUE(window_picker.GetWindowList(&descriptions));
69   EXPECT_EQ(1, descriptions.size());
70   WindowDescription desc = descriptions.front();
71   EXPECT_EQ(window_picker.visible_window()->handle(), desc.id().id());
72   TCHAR window_title[500];
73   GetWindowText(window_picker.visible_window()->handle(), window_title,
74                 ARRAY_SIZE(window_title));
75   EXPECT_EQ(0, wcscmp(window_title, kVisibleWindowTitle));
76 }
77 
TEST(Win32WindowPickerTest,TestIsVisible)78 TEST(Win32WindowPickerTest, TestIsVisible) {
79   Win32WindowPickerForTest window_picker;
80   HWND visible_id = window_picker.visible_window()->handle();
81   HWND invisible_id = window_picker.invisible_window()->handle();
82   EXPECT_TRUE(window_picker.IsVisible(WindowId(visible_id)));
83   EXPECT_FALSE(window_picker.IsVisible(WindowId(invisible_id)));
84 }
85 
TEST(Win32WindowPickerTest,TestMoveToFront)86 TEST(Win32WindowPickerTest, TestMoveToFront) {
87   Win32WindowPickerForTest window_picker;
88   HWND visible_id = window_picker.visible_window()->handle();
89   HWND invisible_id = window_picker.invisible_window()->handle();
90 
91   // There are a number of condition where SetForegroundWindow might
92   // fail depending on the state of the calling process. To be on the
93   // safe side we doesn't expect MoveToFront to return true, just test
94   // that we don't crash.
95   window_picker.MoveToFront(WindowId(visible_id));
96   window_picker.MoveToFront(WindowId(invisible_id));
97 }
98 
99 }  // namespace rtc
100