Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(122)

Side by Side Diff: chrome/browser/android/vr_shell/ui_scene_manager_unittest.cc

Issue 2921383002: [vr] Close exit prompt when clicking on background (Closed)
Patch Set: fix: loading bar when cancelled Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/android/vr_shell/ui_scene_manager.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/android/vr_shell/ui_scene_manager.h" 5 #include "chrome/browser/android/vr_shell/ui_scene_manager.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/test/scoped_task_environment.h" 9 #include "base/test/scoped_task_environment.h"
10 #include "chrome/browser/android/vr_shell/ui_browser_interface.h" 10 #include "chrome/browser/android/vr_shell/ui_browser_interface.h"
(...skipping 17 matching lines...) Expand all
28 MOCK_METHOD0(NavigateBack, void()); 28 MOCK_METHOD0(NavigateBack, void());
29 MOCK_METHOD0(ExitCct, void()); 29 MOCK_METHOD0(ExitCct, void());
30 MOCK_METHOD1(OnUnsupportedMode, void(UiUnsupportedMode mode)); 30 MOCK_METHOD1(OnUnsupportedMode, void(UiUnsupportedMode mode));
31 31
32 private: 32 private:
33 DISALLOW_COPY_AND_ASSIGN(MockBrowserInterface); 33 DISALLOW_COPY_AND_ASSIGN(MockBrowserInterface);
34 }; 34 };
35 35
36 std::set<UiElementDebugId> kElementsVisibleInBrowsing = { 36 std::set<UiElementDebugId> kElementsVisibleInBrowsing = {
37 kContentQuad, kBackplane, kCeiling, kFloor, kUrlBar, kLoadingIndicator}; 37 kContentQuad, kBackplane, kCeiling, kFloor, kUrlBar, kLoadingIndicator};
38 std::set<UiElementDebugId> kElementsVisibleWithExitPrompt = {
39 kExitPrompt, kExitPromptBackplane, kCeiling, kFloor};
38 40
39 } // namespace 41 } // namespace
40 42
41 class UiSceneManagerTest : public testing::Test { 43 class UiSceneManagerTest : public testing::Test {
42 public: 44 public:
43 void SetUp() override { browser_ = base::MakeUnique<MockBrowserInterface>(); } 45 void SetUp() override { browser_ = base::MakeUnique<MockBrowserInterface>(); }
44 46
45 protected: 47 protected:
46 enum InCct : bool { 48 enum InCct : bool {
47 kNotInCct = false, 49 kNotInCct = false,
48 kInCct = true, 50 kInCct = true,
49 }; 51 };
50 52
51 enum InWebVr : bool { 53 enum InWebVr : bool {
52 kNotInWebVr = false, 54 kNotInWebVr = false,
53 kInWebVr = true, 55 kInWebVr = true,
54 }; 56 };
55 57
56 void MakeManager(InCct in_cct, InWebVr in_web_vr) { 58 void MakeManager(InCct in_cct, InWebVr in_web_vr) {
57 scene_ = base::MakeUnique<UiScene>(); 59 scene_ = base::MakeUnique<UiScene>();
58 manager_ = base::MakeUnique<UiSceneManager>(browser_.get(), scene_.get(), 60 manager_ = base::MakeUnique<UiSceneManager>(browser_.get(), scene_.get(),
59 in_cct, in_web_vr); 61 in_cct, in_web_vr);
60 } 62 }
61 63
62 bool IsVisible(UiElementDebugId debug_id) { 64 bool IsVisible(UiElementDebugId debug_id) {
63 UiElement* element = scene_->GetUiElementByDebugId(debug_id); 65 UiElement* element = scene_->GetUiElementByDebugId(debug_id);
64 return element ? element->visible() : false; 66 return element ? element->visible() : false;
65 } 67 }
66 68
69 void VerifyElementsVisible(const std::string& debug_name,
70 const std::set<UiElementDebugId>& elements) {
71 SCOPED_TRACE(debug_name);
72 for (const auto& element : scene_->GetUiElements()) {
73 SCOPED_TRACE(element->debug_id());
74 bool should_be_visible =
75 elements.find(element->debug_id()) != elements.end();
76 EXPECT_EQ(should_be_visible, element->visible());
77 }
78 }
79
67 base::test::ScopedTaskEnvironment scoped_task_environment_; 80 base::test::ScopedTaskEnvironment scoped_task_environment_;
68 std::unique_ptr<MockBrowserInterface> browser_; 81 std::unique_ptr<MockBrowserInterface> browser_;
69 std::unique_ptr<UiScene> scene_; 82 std::unique_ptr<UiScene> scene_;
70 std::unique_ptr<UiSceneManager> manager_; 83 std::unique_ptr<UiSceneManager> manager_;
71 }; 84 };
72 85
73 TEST_F(UiSceneManagerTest, ExitPresentAndFullscreenOnAppButtonClick) { 86 TEST_F(UiSceneManagerTest, ExitPresentAndFullscreenOnAppButtonClick) {
74 MakeManager(kNotInCct, kInWebVr); 87 MakeManager(kNotInCct, kInWebVr);
75 88
76 // Clicking app button should trigger to exit presentation. 89 // Clicking app button should trigger to exit presentation.
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 } 209 }
197 210
198 TEST_F(UiSceneManagerTest, UiUpdatesForFullscreenChanges) { 211 TEST_F(UiSceneManagerTest, UiUpdatesForFullscreenChanges) {
199 std::set<UiElementDebugId> visible_in_fullscreen = { 212 std::set<UiElementDebugId> visible_in_fullscreen = {
200 kContentQuad, kCloseButton, kBackplane, kCeiling, kFloor}; 213 kContentQuad, kCloseButton, kBackplane, kCeiling, kFloor};
201 214
202 MakeManager(kNotInCct, kNotInWebVr); 215 MakeManager(kNotInCct, kNotInWebVr);
203 216
204 // Hold onto the background color to make sure it changes. 217 // Hold onto the background color to make sure it changes.
205 SkColor initial_background = scene_->GetWorldBackgroundColor(); 218 SkColor initial_background = scene_->GetWorldBackgroundColor();
219 VerifyElementsVisible("Initial", kElementsVisibleInBrowsing);
206 220
207 for (const auto& element : scene_->GetUiElements()) { 221 // In fullscreen mode, content elements should be visible, control elements
208 SCOPED_TRACE(element->debug_id()); 222 // should be hidden.
209 bool should_be_visible =
210 kElementsVisibleInBrowsing.find(element->debug_id()) !=
211 kElementsVisibleInBrowsing.end();
212 EXPECT_EQ(should_be_visible, element->visible());
213 }
214
215 // Transistion to fullscreen.
216 manager_->SetFullscreen(true); 223 manager_->SetFullscreen(true);
217 224 VerifyElementsVisible("In fullscreen", visible_in_fullscreen);
218 // Content elements should be visible, control elements should be hidden.
219 for (const auto& element : scene_->GetUiElements()) {
220 SCOPED_TRACE(element->debug_id());
221 bool should_be_visible = visible_in_fullscreen.find(element->debug_id()) !=
222 visible_in_fullscreen.end();
223 EXPECT_EQ(should_be_visible, element->visible());
224 }
225
226 { 225 {
227 SCOPED_TRACE("Entered Fullsceen"); 226 SCOPED_TRACE("Entered Fullsceen");
228 // Make sure background has changed for fullscreen. 227 // Make sure background has changed for fullscreen.
229 EXPECT_NE(initial_background, scene_->GetWorldBackgroundColor()); 228 EXPECT_NE(initial_background, scene_->GetWorldBackgroundColor());
230 } 229 }
231 230
232 // Exit fullscreen. 231 // Everything should return to original state after leaving fullscreen.
233 manager_->SetFullscreen(false); 232 manager_->SetFullscreen(false);
234 233 VerifyElementsVisible("Restore initial", kElementsVisibleInBrowsing);
235 // Everything should return to original state after leaving fullscreen.
236 for (const auto& element : scene_->GetUiElements()) {
237 SCOPED_TRACE(element->debug_id());
238 bool should_be_visible =
239 kElementsVisibleInBrowsing.find(element->debug_id()) !=
240 kElementsVisibleInBrowsing.end();
241 EXPECT_EQ(should_be_visible, element->visible());
242 }
243 { 234 {
244 SCOPED_TRACE("Exited Fullsceen"); 235 SCOPED_TRACE("Exited Fullsceen");
245 EXPECT_EQ(initial_background, scene_->GetWorldBackgroundColor()); 236 EXPECT_EQ(initial_background, scene_->GetWorldBackgroundColor());
246 } 237 }
247 } 238 }
248 239
249 TEST_F(UiSceneManagerTest, UiUpdatesExitPrompt) { 240 TEST_F(UiSceneManagerTest, UiUpdatesExitPrompt) {
250 std::set<UiElementDebugId> visible_when_prompting = {kExitPrompt, kBackplane,
251 kCeiling, kFloor};
252 MakeManager(kNotInCct, kNotInWebVr); 241 MakeManager(kNotInCct, kNotInWebVr);
253 242
254 manager_->SetWebVrSecureOrigin(true); 243 manager_->SetWebVrSecureOrigin(true);
255 244
256 // Initial state. 245 // Initial state.
257 for (const auto& element : scene_->GetUiElements()) { 246 VerifyElementsVisible("Initial", kElementsVisibleInBrowsing);
258 SCOPED_TRACE(element->debug_id());
259 bool should_be_visible =
260 kElementsVisibleInBrowsing.find(element->debug_id()) !=
261 kElementsVisibleInBrowsing.end();
262 EXPECT_EQ(should_be_visible, element->visible());
263 }
264 247
265 // Exit prompt visible state. 248 // Exit prompt visible state.
266 manager_->OnSecurityIconClicked(); 249 manager_->OnSecurityIconClickedForTesting();
267 for (const auto& element : scene_->GetUiElements()) { 250 VerifyElementsVisible("Prompt visible", kElementsVisibleWithExitPrompt);
268 SCOPED_TRACE(element->debug_id());
269 bool should_be_visible = visible_when_prompting.find(element->debug_id()) !=
270 visible_when_prompting.end();
271 EXPECT_EQ(should_be_visible, element->visible());
272 }
273 251
274 // Back to initial state. 252 // Back to initial state.
275 manager_->OnExitPromptPrimaryButtonClicked(); 253 manager_->OnExitPromptPrimaryButtonClickedForTesting();
276 for (const auto& element : scene_->GetUiElements()) { 254 VerifyElementsVisible("Restore initial", kElementsVisibleInBrowsing);
amp 2017/06/07 17:18:41 If we pass the same string to the scoped trace it
amp 2017/06/07 17:36:45 Turns out the test that failed is already output,
277 SCOPED_TRACE(element->debug_id()); 255 }
278 bool should_be_visible = 256
279 kElementsVisibleInBrowsing.find(element->debug_id()) != 257 TEST_F(UiSceneManagerTest, BackplaneClickClosesExitPrompt) {
280 kElementsVisibleInBrowsing.end(); 258 MakeManager(kNotInCct, kNotInWebVr);
281 EXPECT_EQ(should_be_visible, element->visible()); 259
282 } 260 manager_->SetWebVrSecureOrigin(true);
261
262 // Initial state.
263 VerifyElementsVisible("Initial", kElementsVisibleInBrowsing);
264
265 // Exit prompt visible state.
266 manager_->OnSecurityIconClickedForTesting();
267 VerifyElementsVisible("Prompt visble", kElementsVisibleWithExitPrompt);
268
269 // Back to initial state.
270 scene_->GetUiElementByDebugId(kExitPromptBackplane)
271 ->OnButtonUp(gfx::PointF());
272 VerifyElementsVisible("Restore initial", kElementsVisibleInBrowsing);
283 } 273 }
284 274
285 TEST_F(UiSceneManagerTest, UiUpdatesForWebVR) { 275 TEST_F(UiSceneManagerTest, UiUpdatesForWebVR) {
286 MakeManager(kNotInCct, kInWebVr); 276 MakeManager(kNotInCct, kInWebVr);
287 277
288 manager_->SetWebVrSecureOrigin(true); 278 manager_->SetWebVrSecureOrigin(true);
289 manager_->SetAudioCapturingIndicator(true); 279 manager_->SetAudioCapturingIndicator(true);
290 manager_->SetVideoCapturingIndicator(true); 280 manager_->SetVideoCapturingIndicator(true);
291 manager_->SetScreenCapturingIndicator(true); 281 manager_->SetScreenCapturingIndicator(true);
292 282
293 // All elements should be hidden. 283 // All elements should be hidden.
294 for (const auto& element : scene_->GetUiElements()) { 284 VerifyElementsVisible("Elements hidden", {});
295 SCOPED_TRACE(element->debug_id());
296 EXPECT_FALSE(element->visible());
297 }
298 } 285 }
299 286
300 TEST_F(UiSceneManagerTest, UiUpdateTransitionToWebVR) { 287 TEST_F(UiSceneManagerTest, UiUpdateTransitionToWebVR) {
301 MakeManager(kNotInCct, kNotInWebVr); 288 MakeManager(kNotInCct, kNotInWebVr);
302 manager_->SetAudioCapturingIndicator(true); 289 manager_->SetAudioCapturingIndicator(true);
303 manager_->SetVideoCapturingIndicator(true); 290 manager_->SetVideoCapturingIndicator(true);
304 manager_->SetScreenCapturingIndicator(true); 291 manager_->SetScreenCapturingIndicator(true);
305 292
306 // Transition to WebVR mode 293 // Transition to WebVR mode
307 manager_->SetWebVrMode(true); 294 manager_->SetWebVrMode(true);
308 manager_->SetWebVrSecureOrigin(true); 295 manager_->SetWebVrSecureOrigin(true);
309 296
310 // All elements should be hidden. 297 // All elements should be hidden.
311 for (const auto& element : scene_->GetUiElements()) { 298 VerifyElementsVisible("Elements hidden", {});
312 SCOPED_TRACE(element->debug_id());
313 EXPECT_FALSE(element->visible());
314 }
315 } 299 }
316 300
317 TEST_F(UiSceneManagerTest, CaptureIndicatorsVisibility) { 301 TEST_F(UiSceneManagerTest, CaptureIndicatorsVisibility) {
318 MakeManager(kNotInCct, kNotInWebVr); 302 MakeManager(kNotInCct, kNotInWebVr);
319 EXPECT_FALSE(IsVisible(kAudioCaptureIndicator)); 303 EXPECT_FALSE(IsVisible(kAudioCaptureIndicator));
320 EXPECT_FALSE(IsVisible(kVideoCaptureIndicator)); 304 EXPECT_FALSE(IsVisible(kVideoCaptureIndicator));
321 EXPECT_FALSE(IsVisible(kScreenCaptureIndicator)); 305 EXPECT_FALSE(IsVisible(kScreenCaptureIndicator));
322 306
323 manager_->SetAudioCapturingIndicator(true); 307 manager_->SetAudioCapturingIndicator(true);
324 manager_->SetVideoCapturingIndicator(true); 308 manager_->SetVideoCapturingIndicator(true);
(...skipping 15 matching lines...) Expand all
340 324
341 manager_->SetAudioCapturingIndicator(false); 325 manager_->SetAudioCapturingIndicator(false);
342 manager_->SetVideoCapturingIndicator(false); 326 manager_->SetVideoCapturingIndicator(false);
343 manager_->SetScreenCapturingIndicator(false); 327 manager_->SetScreenCapturingIndicator(false);
344 328
345 EXPECT_FALSE(IsVisible(kAudioCaptureIndicator)); 329 EXPECT_FALSE(IsVisible(kAudioCaptureIndicator));
346 EXPECT_FALSE(IsVisible(kVideoCaptureIndicator)); 330 EXPECT_FALSE(IsVisible(kVideoCaptureIndicator));
347 EXPECT_FALSE(IsVisible(kScreenCaptureIndicator)); 331 EXPECT_FALSE(IsVisible(kScreenCaptureIndicator));
348 } 332 }
349 } // namespace vr_shell 333 } // namespace vr_shell
OLDNEW
« no previous file with comments | « chrome/browser/android/vr_shell/ui_scene_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698