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