| OLD | NEW |
| 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 16 matching lines...) Expand all Loading... |
| 27 MOCK_METHOD0(ExitFullscreen, void()); | 27 MOCK_METHOD0(ExitFullscreen, void()); |
| 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}; |
| 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 Loading... |
| 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); |
| 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", std::set<UiElementDebugId>{}); |
| 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", std::set<UiElementDebugId>{}); |
| 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 Loading... |
| 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 |
| OLD | NEW |