15976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org// Copyright 2010 Google Inc. All Rights Reserved 25976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 35976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 45976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/gunit.h" 55976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/common.h" 65976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/logging.h" 75976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/win32window.h" 85976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/win32windowpicker.h" 95976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#include "talk/base/windowpicker.h" 105976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 115976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#ifndef WIN32 125976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#error Only for Windows 135976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org#endif 145976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 155976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgnamespace talk_base { 165976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 175976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgstatic const TCHAR* kVisibleWindowTitle = L"Visible Window"; 185976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgstatic const TCHAR* kInvisibleWindowTitle = L"Invisible Window"; 195976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 205976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgclass Win32WindowPickerForTest : public Win32WindowPicker { 215976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org public: 225976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org Win32WindowPickerForTest() { 235976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(visible_window_.Create(NULL, kVisibleWindowTitle, WS_VISIBLE, 245976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 0, 0, 0, 0, 0)); 255976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(invisible_window_.Create(NULL, kInvisibleWindowTitle, 0, 265976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 0, 0, 0, 0, 0)); 275976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 285976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 295976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ~Win32WindowPickerForTest() { 305976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org visible_window_.Destroy(); 315976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org invisible_window_.Destroy(); 325976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 335976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 345976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org virtual bool GetWindowList(WindowDescriptionList* descriptions) { 355976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!Win32WindowPicker::EnumProc(visible_window_.handle(), 365976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org reinterpret_cast<LPARAM>(descriptions))) { 375976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return false; 385976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 395976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org if (!Win32WindowPicker::EnumProc(invisible_window_.handle(), 405976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org reinterpret_cast<LPARAM>(descriptions))) { 415976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return false; 425976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 435976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return true; 445976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 455976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 465976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org Win32Window* visible_window() { 475976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return &visible_window_; 485976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 495976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 505976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org Win32Window* invisible_window() { 515976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org return &invisible_window_; 525976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org } 535976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 545976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org private: 555976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org Win32Window visible_window_; 565976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org Win32Window invisible_window_; 575976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org}; 585976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 595976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(Win32WindowPickerTest, TestGetWindowList) { 605976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org Win32WindowPickerForTest window_picker; 615976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org WindowDescriptionList descriptions; 625976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(window_picker.GetWindowList(&descriptions)); 635976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(1, descriptions.size()); 645976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org WindowDescription desc = descriptions.front(); 655976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(window_picker.visible_window()->handle(), desc.id().id()); 665976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org TCHAR window_title[500]; 675976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org GetWindowText(window_picker.visible_window()->handle(), window_title, 685976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org ARRAY_SIZE(window_title)); 695976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_EQ(0, wcscmp(window_title, kVisibleWindowTitle)); 705976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 715976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 725976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(Win32WindowPickerTest, TestIsVisible) { 735976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org Win32WindowPickerForTest window_picker; 745976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org HWND visible_id = window_picker.visible_window()->handle(); 755976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org HWND invisible_id = window_picker.invisible_window()->handle(); 765976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_TRUE(window_picker.IsVisible(WindowId(visible_id))); 775976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org EXPECT_FALSE(window_picker.IsVisible(WindowId(invisible_id))); 785976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 795976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 805976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.orgTEST(Win32WindowPickerTest, TestMoveToFront) { 815976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org Win32WindowPickerForTest window_picker; 825976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org HWND visible_id = window_picker.visible_window()->handle(); 835976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org HWND invisible_id = window_picker.invisible_window()->handle(); 845976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 855976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // There are a number of condition where SetForegroundWindow might 865976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // fail depending on the state of the calling process. To be on the 875976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // safe side we doesn't expect MoveToFront to return true, just test 885976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org // that we don't crash. 895976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org window_picker.MoveToFront(WindowId(visible_id)); 905976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org window_picker.MoveToFront(WindowId(invisible_id)); 915976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} 925976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org 935976650443d68ccfadf1dea24999ee459dd2819mflodman@webrtc.org} // namespace talk_base 94