1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.chrome.browser.vr.util;
6 
7 import org.chromium.base.test.util.CriteriaHelper;
8 import org.chromium.components.permissions.PermissionDialogController;
9 import org.chromium.content_public.browser.test.util.TestThreadUtils;
10 import org.chromium.ui.modaldialog.ModalDialogProperties;
11 
12 /**
13  * Utility class for interacting with permission prompts outside of the VR Browser. For interaction
14  * in the VR Browser, see NativeUiUtils.
15  */
16 public class PermissionUtils {
17     public static final long DIALOG_POLLING_INTERVAL_MS = 250;
18     /**
19      * Blocks until a permission prompt appears.
20      */
waitForPermissionPrompt()21     public static void waitForPermissionPrompt() {
22         CriteriaHelper.pollUiThread(() -> {
23             return PermissionDialogController.getInstance().isDialogShownForTest();
24         }, "Permission prompt did not appear in allotted time");
25     }
26 
27     /**
28      * Blocks until the consent prompt is dismissed.
29      */
waitForPermissionPromptDismissal()30     public static void waitForPermissionPromptDismissal() {
31         CriteriaHelper.pollUiThread(
32                 ()
33                         -> {
34                     return !PermissionDialogController.getInstance().isDialogShownForTest();
35                 },
36                 "Consent prompt did not get dismissed in allotted time",
37                 CriteriaHelper.DEFAULT_MAX_TIME_TO_POLL, DIALOG_POLLING_INTERVAL_MS);
38     }
39 
40     /**
41      * Accepts the currently displayed permission prompt.
42      */
acceptPermissionPrompt()43     public static void acceptPermissionPrompt() {
44         TestThreadUtils.runOnUiThreadBlocking(() -> {
45             PermissionDialogController.getInstance().clickButtonForTest(
46                     ModalDialogProperties.ButtonType.POSITIVE);
47         });
48     }
49 
50     /**
51      * Denies the currently displayed permission prompt.
52      */
denyPermissionPrompt()53     public static void denyPermissionPrompt() {
54         TestThreadUtils.runOnUiThreadBlocking(() -> {
55             PermissionDialogController.getInstance().clickButtonForTest(
56                     ModalDialogProperties.ButtonType.NEGATIVE);
57         });
58     }
59 }
60