1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/functional/callback_helpers.h"
#include "base/run_loop.h"
#include "chrome/browser/vr/test/mock_xr_device_hook_base.h"
#include "chrome/browser/vr/test/multi_class_browser_test.h"
#include "chrome/browser/vr/test/ui_utils.h"
#include "chrome/browser/vr/test/webxr_vr_browser_test.h"
#include "chrome/browser/vr/ui_test_input.h"
// Browser tests for testing permission requests that occur during a WebXR
// immersive session.
namespace vr {
// Tests that permission requests that occur when in an immersive session cause
// a notification to appear telling the user that a permission request is
// visible in the browser and that closing the browser while this is still
// displayed does not cause any issues.
// TODO(https://crbug.com/381000093): Test is disabled because the equivalent UI
// does not currently exist on Android. Evaluate the usefulness of this test and
// if other UI needs to be drawn instead.
#if !BUILDFLAG(IS_ANDROID)
WEBXR_VR_ALL_RUNTIMES_BROWSER_TEST_F(
TestInSessionPermissionNotificationCloseWhileVisible) {
MockXRDeviceHookBase mock;
// We need to use a local server for permission requests to not hit a DCHECK.
t->LoadFileAndAwaitInitialization("generic_webxr_page");
t->EnterSessionWithUserGestureOrFail();
// Use location instead of camera/microphone since those automatically reject
// if a suitable device is not connected.
// TODO(bsheedy): Find a way to support more permission types (maybe use
// MockPermissionPromptFactory?).
// AutoResponseForTest is overridden when requesting a session. We don't want
// to change that as we want anything necessary to request a session to get
// granted. However, we want no action to be taken now so that the prompt for
// location comes up and does not get dismissed.
t->SetPermissionAutoResponse(permissions::PermissionRequestManager::NONE);
t->RunJavaScriptOrFail(
"navigator.geolocation.getCurrentPosition( ()=>{}, ()=>{} )");
base::RunLoop().RunUntilIdle();
auto utils = UiUtils::Create();
utils->WaitForVisibilityStatus(
UserFriendlyElementName::kWebXrExternalPromptNotification,
true /* visible */);
}
#endif
// TODO(crbug.com/41434932): Add tests verifying the notification
// disappears when the permission is accepted/denied once we can query element
// visibility at any time using PermissionRequestManagerTestApi.
} // namespace vr
|