1 // Copyright 2020 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.externalnav;
6 
7 import android.content.Intent;
8 import android.net.Uri;
9 
10 import androidx.test.filters.SmallTest;
11 
12 import org.junit.After;
13 import org.junit.Assert;
14 import org.junit.Test;
15 import org.junit.runner.RunWith;
16 
17 import org.chromium.chrome.browser.externalnav.IntentWithRequestMetadataHandler.RequestMetadata;
18 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
19 
20 /**
21  * Instrumentation tests for {@link IntentWithRequestMetadataHandler}.
22  */
23 @RunWith(ChromeJUnit4ClassRunner.class)
24 public class IntentWithRequestMetadataHandlerTest {
25     @After
tearDown()26     public void tearDown() {
27         IntentWithRequestMetadataHandler.getInstance().clear();
28     }
29 
30     @Test
31     @SmallTest
testCanUseRequestMetadataTokenOnlyOnce()32     public void testCanUseRequestMetadataTokenOnlyOnce() {
33         Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("content://abc"));
34         IntentWithRequestMetadataHandler.getInstance().onNewIntentWithRequestMetadata(
35                 intent, new RequestMetadata(true, true, null));
36         Assert.assertTrue(
37                 intent.hasExtra(IntentWithRequestMetadataHandler.EXTRA_REQUEST_METADATA_TOKEN));
38         RequestMetadata metadata =
39                 IntentWithRequestMetadataHandler.getInstance().getRequestMetadataAndClear(intent);
40         Assert.assertTrue(metadata.hasUserGesture());
41         Assert.assertTrue(metadata.isRendererInitiated());
42         Assert.assertNull(
43                 IntentWithRequestMetadataHandler.getInstance().getRequestMetadataAndClear(intent));
44     }
45 
46     @Test
47     @SmallTest
testModifiedRequestMetadataToken()48     public void testModifiedRequestMetadataToken() {
49         Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("content://abc"));
50         IntentWithRequestMetadataHandler.getInstance().onNewIntentWithRequestMetadata(
51                 intent, new RequestMetadata(true, true, null));
52         intent.setData(Uri.parse("content://xyz"));
53         Assert.assertNull(
54                 IntentWithRequestMetadataHandler.getInstance().getRequestMetadataAndClear(intent));
55     }
56 
57     @Test
58     @SmallTest
testPreviousRequestMetadataToken()59     public void testPreviousRequestMetadataToken() {
60         Intent intent1 = new Intent(Intent.ACTION_VIEW, Uri.parse("content://abc"));
61         IntentWithRequestMetadataHandler.getInstance().onNewIntentWithRequestMetadata(
62                 intent1, new RequestMetadata(true, true, null));
63         Intent intent2 = new Intent(Intent.ACTION_VIEW, Uri.parse("content://xyz"));
64         IntentWithRequestMetadataHandler.getInstance().onNewIntentWithRequestMetadata(
65                 intent2, new RequestMetadata(true, false, null));
66         Assert.assertNull(
67                 IntentWithRequestMetadataHandler.getInstance().getRequestMetadataAndClear(intent1));
68     }
69 }
70