touch_observer_hud_unittest.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ash/screen_util.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" 151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ash/touch/touch_hud_projection.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) 241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class TouchHudTestBase : public test::AshTestBase { 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TouchHudTestBase() {} 271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual ~TouchHudTestBase() {} 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SetUp() OVERRIDE { 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) test::AshTestBase::SetUp(); 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Initialize display infos. They should be initialized after Ash 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // environment is set up, i.e., after test::AshTestBase::SetUp(). 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal_display_id_ = test::DisplayManagerTestApi(GetDisplayManager()). 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetFirstDisplayAsInternalDisplay(); 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) external_display_id_ = 10; 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mirrored_display_id_ = 11; 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal_display_info_ = 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateDisplayInfo(internal_display_id_, gfx::Rect(0, 0, 500, 500)); 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) external_display_info_ = 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateDisplayInfo(external_display_id_, gfx::Rect(1, 1, 100, 100)); 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) mirrored_display_info_ = 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateDisplayInfo(mirrored_display_id_, gfx::Rect(0, 0, 100, 100)); 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 47ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch gfx::Display GetPrimaryDisplay() { 48ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return Shell::GetScreen()->GetPrimaryDisplay(); 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Display& GetSecondaryDisplay() { 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return ScreenUtil::GetSecondaryDisplay(); 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetupSingleDisplay() { 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_.clear(); 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_.push_back(internal_display_info_); 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayManager()->OnNativeDisplaysChanged(display_info_list_); 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetupDualDisplays() { 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_.clear(); 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_.push_back(internal_display_info_); 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_.push_back(external_display_info_); 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayManager()->OnNativeDisplaysChanged(display_info_list_); 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetInternalAsPrimary() { 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Display& internal_display = 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayManager()->GetDisplayForId(internal_display_id_); 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayController()->SetPrimaryDisplay(internal_display); 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetExternalAsPrimary() { 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Display& external_display = 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayManager()->GetDisplayForId(external_display_id_); 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayController()->SetPrimaryDisplay(external_display); 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void MirrorDisplays() { 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(2U, display_info_list_.size()); 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(internal_display_id_, display_info_list_[0].id()); 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(external_display_id_, display_info_list_[1].id()); 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_[1] = mirrored_display_info_; 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayManager()->OnNativeDisplaysChanged(display_info_list_); 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void UnmirrorDisplays() { 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(2U, display_info_list_.size()); 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(internal_display_id_, display_info_list_[0].id()); 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(mirrored_display_id_, display_info_list_[1].id()); 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_[1] = external_display_info_; 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayManager()->OnNativeDisplaysChanged(display_info_list_); 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void RemoveInternalDisplay() { 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_LT(0U, display_info_list_.size()); 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(internal_display_id_, display_info_list_[0].id()); 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_.erase(display_info_list_.begin()); 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayManager()->OnNativeDisplaysChanged(display_info_list_); 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void RemoveExternalDisplay() { 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(2U, display_info_list_.size()); 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_.pop_back(); 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayManager()->OnNativeDisplaysChanged(display_info_list_); 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void AddInternalDisplay() { 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(0U, display_info_list_.size()); 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_.push_back(internal_display_info_); 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayManager()->OnNativeDisplaysChanged(display_info_list_); 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void AddExternalDisplay() { 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK_EQ(1U, display_info_list_.size()); 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) display_info_list_.push_back(external_display_info_); 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) GetDisplayManager()->OnNativeDisplaysChanged(display_info_list_); 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int64 internal_display_id() const { 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return internal_display_id_; 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int64 external_display_id() const { 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return external_display_id_; 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) protected: 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DisplayManager* GetDisplayManager() { 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return Shell::GetInstance()->display_manager(); 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DisplayController* GetDisplayController() { 135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return Shell::GetInstance()->display_controller(); 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Display& GetInternalDisplay() { 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetDisplayManager()->GetDisplayForId(internal_display_id_); 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Display& GetExternalDisplay() { 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetDisplayManager()->GetDisplayForId(external_display_id_); 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* GetInternalRootWindow() { 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetDisplayController()->GetRootWindowForDisplayId( 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal_display_id_); 149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* GetExternalRootWindow() { 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetDisplayController()->GetRootWindowForDisplayId( 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) external_display_id_); 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* GetPrimaryRootWindow() { 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Display& display = GetPrimaryDisplay(); 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetDisplayController()->GetRootWindowForDisplayId(display.id()); 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* GetSecondaryRootWindow() { 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Display& display = GetSecondaryDisplay(); 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetDisplayController()->GetRootWindowForDisplayId(display.id()); 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal::RootWindowController* GetInternalRootController() { 1671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* root = GetInternalRootWindow(); 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetRootWindowController(root); 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal::RootWindowController* GetExternalRootController() { 1721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* root = GetExternalRootWindow(); 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetRootWindowController(root); 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal::RootWindowController* GetPrimaryRootController() { 1771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* root = GetPrimaryRootWindow(); 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetRootWindowController(root); 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) internal::RootWindowController* GetSecondaryRootController() { 1821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* root = GetSecondaryRootWindow(); 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return GetRootWindowController(root); 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DisplayInfo CreateDisplayInfo(int64 id, const gfx::Rect& bounds) { 1871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DisplayInfo info(id, base::StringPrintf("x-%" PRId64, id), false); 1881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) info.SetBounds(bounds); 1891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return info; 1901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) aura::Window* GetRootWindowForTouchHud(internal::TouchObserverHUD* hud) { 1931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return hud->root_window_; 1941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) views::Widget* GetWidgetForTouchHud(internal::TouchObserverHUD* hud) { 1971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return hud->widget_; 1981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 1991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) int64 internal_display_id_; 2011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) int64 external_display_id_; 2021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) int64 mirrored_display_id_; 2031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DisplayInfo internal_display_info_; 2041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DisplayInfo external_display_info_; 2051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DisplayInfo mirrored_display_info_; 2061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) std::vector<DisplayInfo> display_info_list_; 2081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TouchHudTestBase); 2101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}; 2111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class TouchHudDebugTest : public TouchHudTestBase { 2131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) public: 2141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TouchHudDebugTest() {} 2151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual ~TouchHudDebugTest() {} 2161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void SetUp() OVERRIDE { 2181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Add ash-touch-hud flag to enable debug touch HUD. This flag should be set 2191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // before Ash environment is set up, i.e., before TouchHudTestBase::SetUp(). 2201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CommandLine::ForCurrentProcess()->AppendSwitch( 2211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ash::switches::kAshTouchHud); 2221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TouchHudTestBase::SetUp(); 2241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 2251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void CheckInternalDisplay() { 2271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_NE(static_cast<internal::TouchObserverHUD*>(NULL), 2281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetInternalTouchHudDebug()); 2291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(internal_display_id(), GetInternalTouchHudDebug()->display_id()); 2301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(GetInternalRootWindow(), 2311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetRootWindowForTouchHud(GetInternalTouchHudDebug())); 2321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(GetInternalRootWindow(), 2331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetWidgetForTouchHud(GetInternalTouchHudDebug())-> 2341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetNativeView()->GetRootWindow()); 2351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(GetInternalDisplay().size(), 2361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetWidgetForTouchHud(GetInternalTouchHudDebug())-> 2371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetWindowBoundsInScreen().size()); 2381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 2391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void CheckExternalDisplay() { 2411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_NE(static_cast<internal::TouchHudDebug*>(NULL), 2421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetExternalTouchHudDebug()); 2431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(external_display_id(), GetExternalTouchHudDebug()->display_id()); 2441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(GetExternalRootWindow(), 2451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetRootWindowForTouchHud(GetExternalTouchHudDebug())); 2461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(GetExternalRootWindow(), 2471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetWidgetForTouchHud(GetExternalTouchHudDebug())-> 2481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetNativeView()->GetRootWindow()); 2491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(GetExternalDisplay().size(), 2501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetWidgetForTouchHud(GetExternalTouchHudDebug())-> 2511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetWindowBoundsInScreen().size()); 2521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 2531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) private: 2551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) internal::TouchHudDebug* GetInternalTouchHudDebug() { 256eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return GetInternalRootController()->touch_hud_debug(); 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) internal::TouchHudDebug* GetExternalTouchHudDebug() { 260eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return GetExternalRootController()->touch_hud_debug(); 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) internal::TouchHudDebug* GetPrimaryTouchHudDebug() { 264eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return GetPrimaryRootController()->touch_hud_debug(); 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) internal::TouchHudDebug* GetSecondaryTouchHudDebug() { 268eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return GetSecondaryRootController()->touch_hud_debug(); 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TouchHudDebugTest); 2721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}; 2731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class TouchHudProjectionTest : public TouchHudTestBase { 2751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) public: 2761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) TouchHudProjectionTest() {} 2771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual ~TouchHudProjectionTest() {} 2781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void EnableTouchHudProjection() { 2801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) Shell::GetInstance()->SetTouchHudProjectionEnabled(true); 281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void DisableTouchHudProjection() { 2841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) Shell::GetInstance()->SetTouchHudProjectionEnabled(false); 2851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) internal::TouchHudProjection* GetInternalTouchHudProjection() { 2881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return GetInternalRootController()->touch_hud_projection(); 2891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) int GetInternalTouchPointsCount() { 2921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return GetInternalTouchHudProjection()->points_.size(); 2931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 2941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 2951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void SendTouchEventToInternalHud(ui::EventType type, 2961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const gfx::Point& location, 2971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) int touch_id) { 2981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ui::TouchEvent event(type, location, touch_id, event_time); 2991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetInternalTouchHudProjection()->OnTouchEvent(&event); 3001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Advance time for next event. 3021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) event_time += base::TimeDelta::FromMilliseconds(100); 3031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 3041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) private: 3061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::TimeDelta event_time; 3071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TouchHudProjectionTest); 309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Checks if debug touch HUD is correctly initialized for a single display. 3121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(TouchHudDebugTest, SingleDisplay) { 3131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Setup a single display setting. 3141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetupSingleDisplay(); 3151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Check if touch HUD is set correctly and associated with appropriate 3171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // display. 3181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) CheckInternalDisplay(); 3191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 3201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Checks if debug touch HUDs are correctly initialized for two displays. 3221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(TouchHudDebugTest, DualDisplays) { 3237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!SupportsMultipleDisplays()) 3247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 3257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Setup a dual display setting. 327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetupDualDisplays(); 328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if touch HUDs are set correctly and associated with appropriate 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // displays. 331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckExternalDisplay(); 333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Checks if debug touch HUDs are correctly handled when primary display is 3361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// changed. 3371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(TouchHudDebugTest, SwapPrimaryDisplay) { 3387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!SupportsMultipleDisplays()) 3397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 3407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 341c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Setup a dual display setting. 342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetupDualDisplays(); 343c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 344c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Set the primary display to the external one. 345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetExternalAsPrimary(); 346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if displays' touch HUDs are not swapped as root windows are. 348c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(external_display_id(), GetPrimaryDisplay().id()); 349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetSecondaryDisplay().id()); 350c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 351c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckExternalDisplay(); 352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Set the primary display back to the internal one. 354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetInternalAsPrimary(); 355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if displays' touch HUDs are not swapped back as root windows are. 357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetPrimaryDisplay().id()); 358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(external_display_id(), GetSecondaryDisplay().id()); 359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckExternalDisplay(); 361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Checks if debug touch HUDs are correctly handled when displays are mirrored. 3641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(TouchHudDebugTest, MirrorDisplays) { 3657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!SupportsMultipleDisplays()) 3667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 3677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Setup a dual display setting. 369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetupDualDisplays(); 370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Mirror displays. 372c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MirrorDisplays(); 373c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 374c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if the internal display is intact. 375c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetPrimaryDisplay().id()); 376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Unmirror displays. 379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UnmirrorDisplays(); 380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if external display is added back correctly. 382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetPrimaryDisplay().id()); 383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(external_display_id(), GetSecondaryDisplay().id()); 384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckExternalDisplay(); 386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Checks if debug touch HUDs are correctly handled when displays are mirrored 3891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// after setting the external display as the primary one. 3901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(TouchHudDebugTest, SwapPrimaryThenMirrorDisplays) { 3917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!SupportsMultipleDisplays()) 3927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 3937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 394c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Setup a dual display setting. 395c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetupDualDisplays(); 396c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 397c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Set the primary display to the external one. 398c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetExternalAsPrimary(); 399c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 400c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Mirror displays. 401c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MirrorDisplays(); 402c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 403c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if the internal display is set as the primary one. 404c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetPrimaryDisplay().id()); 405c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 406c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 407c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Unmirror displays. 408c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UnmirrorDisplays(); 409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 410c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if the external display is added back as the primary display and 411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // touch HUDs are set correctly. 412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(external_display_id(), GetPrimaryDisplay().id()); 413c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetSecondaryDisplay().id()); 414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckExternalDisplay(); 416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 417c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Checks if debug touch HUDs are correctly handled when the external display, 4191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// which is the secondary one, is removed. 4201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(TouchHudDebugTest, RemoveSecondaryDisplay) { 4217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!SupportsMultipleDisplays()) 4227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 4237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 424c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Setup a dual display setting. 425c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetupDualDisplays(); 426c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 427c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Remove external display which is the secondary one. 428c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RemoveExternalDisplay(); 429c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 430c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if the internal display is intact. 431c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetPrimaryDisplay().id()); 432c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 433c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Add external display back. 435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddExternalDisplay(); 436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if displays' touch HUDs are set correctly. 438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetPrimaryDisplay().id()); 439c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(external_display_id(), GetSecondaryDisplay().id()); 440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckExternalDisplay(); 442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Checks if debug touch HUDs are correctly handled when the external display, 4451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// which is set as the primary display, is removed. 4461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(TouchHudDebugTest, RemovePrimaryDisplay) { 4477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!SupportsMultipleDisplays()) 4487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 4497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Setup a dual display setting. 451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetupDualDisplays(); 452c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 453c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Set the primary display to the external one. 454c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetExternalAsPrimary(); 455c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 456c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Remove the external display which is the primary display. 457c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RemoveExternalDisplay(); 458c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 459c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if the internal display is set as the primary one. 460c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetPrimaryDisplay().id()); 461c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 462c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 463c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Add the external display back. 464c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddExternalDisplay(); 465c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 466c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if the external display is set as primary and touch HUDs are set 467c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // correctly. 468c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(external_display_id(), GetPrimaryDisplay().id()); 469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetSecondaryDisplay().id()); 470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 471c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckExternalDisplay(); 472c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 473c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Checks if debug touch HUDs are correctly handled when all displays are 4751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// removed. 4761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(TouchHudDebugTest, Headless) { 4777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!SupportsMultipleDisplays()) 4787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 4797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 480c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Setup a single display setting. 481c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) SetupSingleDisplay(); 482c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 483c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Remove the only display which is the internal one. 484c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RemoveInternalDisplay(); 485c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 486c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Add the internal display back. 487c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddInternalDisplay(); 488c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 489c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Check if the display's touch HUD is set correctly. 490c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(internal_display_id(), GetPrimaryDisplay().id()); 491c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CheckInternalDisplay(); 492c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 493c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Checks projection touch HUD with a sequence of touch-pressed, touch-moved, 4951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// and touch-released events. 4961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(TouchHudProjectionTest, TouchMoveRelease) { 4971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetupSingleDisplay(); 4981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(NULL, GetInternalTouchHudProjection()); 4991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EnableTouchHudProjection(); 5011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_NE(static_cast<internal::TouchHudProjection*>(NULL), 5021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetInternalTouchHudProjection()); 5031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(0, GetInternalTouchPointsCount()); 5041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SendTouchEventToInternalHud(ui::ET_TOUCH_PRESSED, gfx::Point(10, 10), 1); 5061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(1, GetInternalTouchPointsCount()); 5071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SendTouchEventToInternalHud(ui::ET_TOUCH_MOVED, gfx::Point(10, 20), 1); 5091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(1, GetInternalTouchPointsCount()); 5101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SendTouchEventToInternalHud(ui::ET_TOUCH_RELEASED, gfx::Point(10, 20), 1); 5121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(0, GetInternalTouchPointsCount()); 5131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Disabling projection touch HUD shoud remove it without crashing. 5151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DisableTouchHudProjection(); 5161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(NULL, GetInternalTouchHudProjection()); 5171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 5181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Checks projection touch HUD with a sequence of touch-pressed, touch-moved, 5201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// and touch-cancelled events. 5211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(TouchHudProjectionTest, TouchMoveCancel) { 5221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetupSingleDisplay(); 5231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(NULL, GetInternalTouchHudProjection()); 5241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EnableTouchHudProjection(); 5261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_NE(static_cast<internal::TouchHudProjection*>(NULL), 5271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetInternalTouchHudProjection()); 5281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(0, GetInternalTouchPointsCount()); 5291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SendTouchEventToInternalHud(ui::ET_TOUCH_PRESSED, gfx::Point(10, 10), 1); 5311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(1, GetInternalTouchPointsCount()); 5321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SendTouchEventToInternalHud(ui::ET_TOUCH_MOVED, gfx::Point(10, 20), 1); 5341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(1, GetInternalTouchPointsCount()); 5351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SendTouchEventToInternalHud(ui::ET_TOUCH_CANCELLED, gfx::Point(10, 20), 1); 5371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(0, GetInternalTouchPointsCount()); 5381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Disabling projection touch HUD shoud remove it without crashing. 5401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DisableTouchHudProjection(); 5411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(NULL, GetInternalTouchHudProjection()); 5421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 5431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Checks projection touch HUD with two simultaneous touches. 5451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(TouchHudProjectionTest, DoubleTouch) { 5461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetupSingleDisplay(); 5471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(NULL, GetInternalTouchHudProjection()); 5481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EnableTouchHudProjection(); 5501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_NE(static_cast<internal::TouchHudProjection*>(NULL), 5511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetInternalTouchHudProjection()); 5521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(0, GetInternalTouchPointsCount()); 5531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SendTouchEventToInternalHud(ui::ET_TOUCH_PRESSED, gfx::Point(10, 10), 1); 5551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(1, GetInternalTouchPointsCount()); 5561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SendTouchEventToInternalHud(ui::ET_TOUCH_PRESSED, gfx::Point(20, 10), 2); 5581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(2, GetInternalTouchPointsCount()); 5591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SendTouchEventToInternalHud(ui::ET_TOUCH_MOVED, gfx::Point(10, 20), 1); 5611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(2, GetInternalTouchPointsCount()); 5621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SendTouchEventToInternalHud(ui::ET_TOUCH_MOVED, gfx::Point(20, 20), 2); 5641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(2, GetInternalTouchPointsCount()); 5651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SendTouchEventToInternalHud(ui::ET_TOUCH_RELEASED, gfx::Point(10, 20), 1); 5671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(1, GetInternalTouchPointsCount()); 5681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SendTouchEventToInternalHud(ui::ET_TOUCH_RELEASED, gfx::Point(20, 20), 2); 5701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(0, GetInternalTouchPointsCount()); 5711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Disabling projection touch HUD shoud remove it without crashing. 5731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DisableTouchHudProjection(); 5741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(NULL, GetInternalTouchHudProjection()); 5751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 5761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Checks if turning off touch HUD projection while touching the screen is 5781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// handled correctly. 5791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST_F(TouchHudProjectionTest, DisableWhileTouching) { 5801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetupSingleDisplay(); 5811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(NULL, GetInternalTouchHudProjection()); 5821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EnableTouchHudProjection(); 5841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_NE(static_cast<internal::TouchHudProjection*>(NULL), 5851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetInternalTouchHudProjection()); 5861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(0, GetInternalTouchPointsCount()); 5871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SendTouchEventToInternalHud(ui::ET_TOUCH_PRESSED, gfx::Point(10, 10), 1); 5891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(1, GetInternalTouchPointsCount()); 5901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 5911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Disabling projection touch HUD shoud remove it without crashing. 5921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DisableTouchHudProjection(); 5931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_EQ(NULL, GetInternalTouchHudProjection()); 5941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 5951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 596c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace internal 597c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace ash 598