touch_observer_hud_unittest.cc revision ca12bfac764ba476d6cd062bf1dde12cc64c3f40
1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/touch/touch_observer_hud.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/ash_switches.h" 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/display/display_manager.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/root_window_controller.h" 10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "ash/screen_ash.h" 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/shell.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/test/ash_test_base.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/test/display_manager_test_api.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ash/touch/touch_hud_debug.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ash/wm/property_util.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/command_line.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/format_macros.h" 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ui/aura/window.h" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace ash { 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace internal { 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class TouchHudTest : public test::AshTestBase { 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) TouchHudTest() {} 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~TouchHudTest() {} 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetUp() OVERRIDE { 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Add ash-touch-hud flag to enable touch HUD. This flag should be set 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // before Ash environment is set up, i.e., before 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // test::AshTestBase::SetUp(). 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitch( 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ash::switches::kAshTouchHud); 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::AshTestBase::SetUp(); 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Initialize display infos. They should be initialized after Ash 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // environment is set up, i.e., after test::AshTestBase::SetUp(). 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal_display_id_ = test::DisplayManagerTestApi(GetDisplayManager()). 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetFirstDisplayAsInternalDisplay(); 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) external_display_id_ = 10; 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mirrored_display_id_ = 11; 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal_display_info_ = 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateDisplayInfo(internal_display_id_, gfx::Rect(0, 0, 500, 500)); 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) external_display_info_ = 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateDisplayInfo(external_display_id_, gfx::Rect(1, 1, 100, 100)); 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mirrored_display_info_ = 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateDisplayInfo(mirrored_display_id_, gfx::Rect(0, 0, 100, 100)); 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 53ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch gfx::Display GetPrimaryDisplay() { 54ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return Shell::GetScreen()->GetPrimaryDisplay(); 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Display& GetSecondaryDisplay() { 58ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return ScreenAsh::GetSecondaryDisplay(); 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetupSingleDisplay() { 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_.clear(); 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_.push_back(internal_display_info_); 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayManager()->OnNativeDisplaysChanged(display_info_list_); 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetupDualDisplays() { 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_.clear(); 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_.push_back(internal_display_info_); 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_.push_back(external_display_info_); 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayManager()->OnNativeDisplaysChanged(display_info_list_); 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetInternalAsPrimary() { 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Display& internal_display = 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayManager()->GetDisplayForId(internal_display_id_); 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayController()->SetPrimaryDisplay(internal_display); 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetExternalAsPrimary() { 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Display& external_display = 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayManager()->GetDisplayForId(external_display_id_); 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayController()->SetPrimaryDisplay(external_display); 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void MirrorDisplays() { 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(2U, display_info_list_.size()); 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(internal_display_id_, display_info_list_[0].id()); 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(external_display_id_, display_info_list_[1].id()); 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_[1] = mirrored_display_info_; 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayManager()->OnNativeDisplaysChanged(display_info_list_); 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void UnmirrorDisplays() { 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(2U, display_info_list_.size()); 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(internal_display_id_, display_info_list_[0].id()); 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(mirrored_display_id_, display_info_list_[1].id()); 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_[1] = external_display_info_; 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayManager()->OnNativeDisplaysChanged(display_info_list_); 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void RemoveInternalDisplay() { 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_LT(0U, display_info_list_.size()); 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(internal_display_id_, display_info_list_[0].id()); 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_.erase(display_info_list_.begin()); 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayManager()->OnNativeDisplaysChanged(display_info_list_); 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void RemoveExternalDisplay() { 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(2U, display_info_list_.size()); 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_.pop_back(); 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayManager()->OnNativeDisplaysChanged(display_info_list_); 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void AddInternalDisplay() { 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(0U, display_info_list_.size()); 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_.push_back(internal_display_info_); 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayManager()->OnNativeDisplaysChanged(display_info_list_); 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void AddExternalDisplay() { 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(1U, display_info_list_.size()); 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_.push_back(external_display_info_); 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayManager()->OnNativeDisplaysChanged(display_info_list_); 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int64 internal_display_id() const { 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return internal_display_id_; 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int64 external_display_id() const { 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return external_display_id_; 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void CheckInternalDisplay() { 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_NE(static_cast<internal::TouchObserverHUD*>(NULL), 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetInternalTouchHud()); 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetInternalTouchHud()->display_id_); 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(GetInternalRootWindow(), GetInternalTouchHud()->root_window_); 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(GetInternalRootWindow(), 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetInternalTouchHud()->widget_->GetNativeView()->GetRootWindow()); 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(GetInternalDisplay().size(), 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetInternalTouchHud()->widget_->GetWindowBoundsInScreen().size()); 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void CheckExternalDisplay() { 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_NE(static_cast<internal::TouchObserverHUD*>(NULL), 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetExternalTouchHud()); 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(external_display_id(), GetExternalTouchHud()->display_id_); 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(GetExternalRootWindow(), GetExternalTouchHud()->root_window_); 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(GetExternalRootWindow(), 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetExternalTouchHud()->widget_->GetNativeView()->GetRootWindow()); 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(GetExternalDisplay().size(), 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetExternalTouchHud()->widget_->GetWindowBoundsInScreen().size()); 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DisplayManager* GetDisplayManager() { 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return Shell::GetInstance()->display_manager(); 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DisplayController* GetDisplayController() { 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return Shell::GetInstance()->display_controller(); 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Display& GetInternalDisplay() { 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetDisplayManager()->GetDisplayForId(internal_display_id_); 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Display& GetExternalDisplay() { 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetDisplayManager()->GetDisplayForId(external_display_id_); 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) aura::RootWindow* GetInternalRootWindow() { 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetDisplayController()->GetRootWindowForDisplayId( 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal_display_id_); 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) aura::RootWindow* GetExternalRootWindow() { 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetDisplayController()->GetRootWindowForDisplayId( 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) external_display_id_); 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) aura::RootWindow* GetPrimaryRootWindow() { 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Display& display = GetPrimaryDisplay(); 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetDisplayController()->GetRootWindowForDisplayId(display.id()); 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) aura::RootWindow* GetSecondaryRootWindow() { 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Display& display = GetSecondaryDisplay(); 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetDisplayController()->GetRootWindowForDisplayId(display.id()); 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal::RootWindowController* GetInternalRootController() { 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) aura::RootWindow* root = GetInternalRootWindow(); 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetRootWindowController(root); 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal::RootWindowController* GetExternalRootController() { 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) aura::RootWindow* root = GetExternalRootWindow(); 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetRootWindowController(root); 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal::RootWindowController* GetPrimaryRootController() { 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) aura::RootWindow* root = GetPrimaryRootWindow(); 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetRootWindowController(root); 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal::RootWindowController* GetSecondaryRootController() { 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) aura::RootWindow* root = GetSecondaryRootWindow(); 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetRootWindowController(root); 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal::TouchObserverHUD* GetInternalTouchHud() { 215eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return GetInternalRootController()->touch_hud_debug(); 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal::TouchObserverHUD* GetExternalTouchHud() { 219eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return GetExternalRootController()->touch_hud_debug(); 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal::TouchObserverHUD* GetPrimaryTouchHud() { 223eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return GetPrimaryRootController()->touch_hud_debug(); 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal::TouchObserverHUD* GetSecondaryTouchHud() { 227eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return GetSecondaryRootController()->touch_hud_debug(); 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DisplayInfo CreateDisplayInfo(int64 id, const gfx::Rect& bounds) { 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DisplayInfo info(id, base::StringPrintf("x-%"PRId64, id), false); 232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) info.SetBounds(bounds); 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return info; 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int64 internal_display_id_; 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int64 external_display_id_; 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int64 mirrored_display_id_; 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DisplayInfo internal_display_info_; 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DisplayInfo external_display_info_; 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DisplayInfo mirrored_display_info_; 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<DisplayInfo> display_info_list_; 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TouchHudTest); 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Checks if touch HUDs are correctly initialized for displays. 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TouchHudTest, Basic) { 2507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!SupportsMultipleDisplays()) 2517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 2527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Setup a dual display setting. 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetupDualDisplays(); 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if touch HUDs are set correctly and associated with appropriate 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // displays. 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckExternalDisplay(); 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Checks if touch HUDs are correctly handled when primary display is changed. 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TouchHudTest, SwapPrimaryDisplay) { 2647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!SupportsMultipleDisplays()) 2657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 2667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Setup a dual display setting. 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetupDualDisplays(); 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Set the primary display to the external one. 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetExternalAsPrimary(); 272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if displays' touch HUDs are not swapped as root windows are. 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(external_display_id(), GetPrimaryDisplay().id()); 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetSecondaryDisplay().id()); 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckExternalDisplay(); 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Set the primary display back to the internal one. 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetInternalAsPrimary(); 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if displays' touch HUDs are not swapped back as root windows are. 283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetPrimaryDisplay().id()); 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(external_display_id(), GetSecondaryDisplay().id()); 285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckExternalDisplay(); 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Checks if touch HUDs are correctly handled when displays are mirrored. 290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TouchHudTest, MirrorDisplays) { 2917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!SupportsMultipleDisplays()) 2927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 2937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Setup a dual display setting. 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetupDualDisplays(); 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Mirror displays. 298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MirrorDisplays(); 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if the internal display is intact. 301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetPrimaryDisplay().id()); 302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Unmirror displays. 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UnmirrorDisplays(); 306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if external display is added back correctly. 308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetPrimaryDisplay().id()); 309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(external_display_id(), GetSecondaryDisplay().id()); 310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckExternalDisplay(); 312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Checks if touch HUDs are correctly handled when displays are mirrored after 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// setting the external display as the primary one. 316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TouchHudTest, SwapPrimaryThenMirrorDisplays) { 3177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!SupportsMultipleDisplays()) 3187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 3197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Setup a dual display setting. 321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetupDualDisplays(); 322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Set the primary display to the external one. 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetExternalAsPrimary(); 325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Mirror displays. 327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MirrorDisplays(); 328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if the internal display is set as the primary one. 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetPrimaryDisplay().id()); 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Unmirror displays. 334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UnmirrorDisplays(); 335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 336c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if the external display is added back as the primary display and 337c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // touch HUDs are set correctly. 338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(external_display_id(), GetPrimaryDisplay().id()); 339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetSecondaryDisplay().id()); 340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 341c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckExternalDisplay(); 342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Checks if touch HUDs are correctly handled when the external display, which 345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// is the secondary one, is removed. 346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TouchHudTest, RemoveSecondaryDisplay) { 3477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!SupportsMultipleDisplays()) 3487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 3497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 350c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Setup a dual display setting. 351c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetupDualDisplays(); 352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Remove external display which is the secondary one. 354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RemoveExternalDisplay(); 355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if the internal display is intact. 357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetPrimaryDisplay().id()); 358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Add external display back. 361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddExternalDisplay(); 362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 363c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if displays' touch HUDs are set correctly. 364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetPrimaryDisplay().id()); 365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(external_display_id(), GetSecondaryDisplay().id()); 366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckExternalDisplay(); 368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Checks if touch HUDs are correctly handled when the external display, which 371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// is set as the primary display, is removed. 372c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TouchHudTest, RemovePrimaryDisplay) { 3737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!SupportsMultipleDisplays()) 3747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 3757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Setup a dual display setting. 377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetupDualDisplays(); 378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Set the primary display to the external one. 380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetExternalAsPrimary(); 381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Remove the external display which is the primary display. 383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RemoveExternalDisplay(); 384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if the internal display is set as the primary one. 386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetPrimaryDisplay().id()); 387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Add the external display back. 390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddExternalDisplay(); 391c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 392c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if the external display is set as primary and touch HUDs are set 393c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // correctly. 394c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(external_display_id(), GetPrimaryDisplay().id()); 395c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetSecondaryDisplay().id()); 396c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 397c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckExternalDisplay(); 398c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 399c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 400c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Checks if touch HUDs are correctly handled when all displays are removed. 401c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(TouchHudTest, Headless) { 4027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!SupportsMultipleDisplays()) 4037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 4047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 405c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Setup a single display setting. 406c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetupSingleDisplay(); 407c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 408c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Remove the only display which is the internal one. 409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RemoveInternalDisplay(); 410c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Add the internal display back. 412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddInternalDisplay(); 413c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if the display's touch HUD is set correctly. 415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetPrimaryDisplay().id()); 416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 417c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 418c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 419c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace internal 420c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace ash 421