touch_observer_hud_unittest.cc revision 1e9bf3e0803691d0a228da41fc608347b6db4340
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"
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() {
52ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    return ScreenAsh::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