| Index: chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionNavigationTest.java | 
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionNavigationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionNavigationTest.java | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..6797be25d851b09a0643ca40c7c54be7d28a7315 | 
| --- /dev/null | 
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/permissions/PermissionNavigationTest.java | 
| @@ -0,0 +1,67 @@ | 
| +// Copyright 2017 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +package org.chromium.chrome.browser.permissions; | 
| + | 
| +import android.support.test.filters.MediumTest; | 
| + | 
| +import org.junit.Assert; | 
| + | 
| +import org.chromium.base.test.util.CallbackHelper; | 
| +import org.chromium.base.test.util.CommandLineFlags; | 
| +import org.chromium.base.test.util.Feature; | 
| +import org.chromium.base.test.util.RetryOnFailure; | 
| +import org.chromium.chrome.browser.tab.EmptyTabObserver; | 
| +import org.chromium.chrome.browser.tab.Tab; | 
| +import org.chromium.content.browser.test.util.CriteriaHelper; | 
| + | 
| +/** | 
| + * Test suite for interaction between permissions requests and navigation. | 
| + */ | 
| +@RetryOnFailure | 
| +public class PermissionNavigationTest extends PermissionTestCaseBase { | 
| +    private static final String TEST_FILE = "/content/test/data/android/permission_navigation.html"; | 
| + | 
| +    public PermissionNavigationTest() {} | 
| + | 
| +    /** | 
| +     * Check that modal permission prompts and queued permission requests are removed upon | 
| +     * navigation. | 
| +     * | 
| +     * @throws Exception | 
| +     */ | 
| +    @MediumTest | 
| +    @Feature({"Permissions"}) | 
| +    @CommandLineFlags.Add({NO_GESTURE_FEATURE, FORCE_FIELDTRIAL, FORCE_FIELDTRIAL_PARAMS}) | 
| +    public void testNavigationDismissesModalPermissionPrompt() throws Exception { | 
| +        setUpUrl(TEST_FILE); | 
| +        runJavaScriptCodeInCurrentTab("requestGeolocationPermission()"); | 
| +        DialogShownCriteria criteriaShown = new DialogShownCriteria("Dialog not shown", true); | 
| +        CriteriaHelper.pollUiThread(criteriaShown); | 
| +        Assert.assertEquals(0, PermissionDialogController.getInstance().getQueueLengthForTesting()); | 
| + | 
| +        runJavaScriptCodeInCurrentTab("requestNotificationPermission()"); | 
| +        Assert.assertEquals(1, PermissionDialogController.getInstance().getQueueLengthForTesting()); | 
| + | 
| +        runJavaScriptCodeInCurrentTab("navigate()"); | 
| + | 
| +        Tab tab = getActivity().getActivityTab(); | 
| +        final CallbackHelper callbackHelper = new CallbackHelper(); | 
| +        EmptyTabObserver navigationWaiter = new EmptyTabObserver() { | 
| +            @Override | 
| +            public void onDidFinishNavigation(Tab tab, String url, boolean isInMainFrame, | 
| +                    boolean isErrorPage, boolean hasCommitted, boolean isSameDocument, | 
| +                    boolean isFragmentNavigation, Integer pageTransition, int errorCode, | 
| +                    int httpStatusCode) { | 
| +                callbackHelper.notifyCalled(); | 
| +            } | 
| +        }; | 
| +        tab.addObserver(navigationWaiter); | 
| +        callbackHelper.waitForCallback(0); | 
| +        tab.removeObserver(navigationWaiter); | 
| + | 
| +        DialogShownCriteria criteriaNotShown = new DialogShownCriteria("Dialog shown", false); | 
| +        CriteriaHelper.pollUiThread(criteriaNotShown); | 
| +    } | 
| +} | 
|  |