Commit a5fbc9db authored by Rohit Agarwal's avatar Rohit Agarwal Committed by Commit Bot

Audit Profile usage in OfflinePageBridgeTest.

This CL refactors the test code on profile and adds Incognito CCT tests.

Bug: 1060940
Change-Id: I1e340b9dc34d080c1b2a191720c37d7c6db17cda
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2489903Reviewed-by: default avatarMarc Treib <treib@chromium.org>
Commit-Queue: Rohit Agarwal <roagarwal@chromium.org>
Cr-Commit-Position: refs/heads/master@{#819409}
parent f88400eb
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
package org.chromium.chrome.browser.offlinepages; package org.chromium.chrome.browser.offlinepages;
import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.support.test.InstrumentationRegistry; import android.support.test.InstrumentationRegistry;
import android.util.Base64; import android.util.Base64;
...@@ -15,6 +16,7 @@ import org.junit.Assert; ...@@ -15,6 +16,7 @@ import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.rules.TestRule;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.chromium.base.ApiCompatibilityUtils; import org.chromium.base.ApiCompatibilityUtils;
...@@ -22,14 +24,20 @@ import org.chromium.base.Callback; ...@@ -22,14 +24,20 @@ import org.chromium.base.Callback;
import org.chromium.base.task.PostTask; import org.chromium.base.task.PostTask;
import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.DisabledTest; import org.chromium.base.test.util.DisabledTest;
import org.chromium.chrome.browser.customtabs.CustomTabActivityTestRule;
import org.chromium.chrome.browser.customtabs.CustomTabsTestUtils;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.browser.incognito.IncognitoDataTestUtils;
import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.OfflinePageModelObserver; import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.OfflinePageModelObserver;
import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.SavePageCallback; import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.SavePageCallback;
import org.chromium.chrome.browser.offlinepages.downloads.OfflinePageDownloadBridge; import org.chromium.chrome.browser.offlinepages.downloads.OfflinePageDownloadBridge;
import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.profiles.ProfileKey; import org.chromium.chrome.browser.profiles.ProfileKey;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule; import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
import org.chromium.chrome.test.util.browser.Features;
import org.chromium.components.offlinepages.DeletePageResult; import org.chromium.components.offlinepages.DeletePageResult;
import org.chromium.components.offlinepages.SavePageResult; import org.chromium.components.offlinepages.SavePageResult;
import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.content_public.browser.LoadUrlParams;
...@@ -58,9 +66,15 @@ import java.util.concurrent.atomic.AtomicReference; ...@@ -58,9 +66,15 @@ import java.util.concurrent.atomic.AtomicReference;
@RunWith(ChromeJUnit4ClassRunner.class) @RunWith(ChromeJUnit4ClassRunner.class)
@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
public class OfflinePageBridgeTest { public class OfflinePageBridgeTest {
@Rule
public TestRule mProcessor = new Features.InstrumentationProcessor();
@Rule @Rule
public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule();
@Rule
public CustomTabActivityTestRule mCustomTabActivityTestRule = new CustomTabActivityTestRule();
private static final String TEST_PAGE = "/chrome/test/data/android/about.html"; private static final String TEST_PAGE = "/chrome/test/data/android/about.html";
private static final int TIMEOUT_MS = 5000; private static final int TIMEOUT_MS = 5000;
private static final ClientId TEST_CLIENT_ID = private static final ClientId TEST_CLIENT_ID =
...@@ -69,17 +83,13 @@ public class OfflinePageBridgeTest { ...@@ -69,17 +83,13 @@ public class OfflinePageBridgeTest {
private OfflinePageBridge mOfflinePageBridge; private OfflinePageBridge mOfflinePageBridge;
private EmbeddedTestServer mTestServer; private EmbeddedTestServer mTestServer;
private String mTestPage; private String mTestPage;
private Profile mProfile;
private void initializeBridgeForProfile(final boolean incognitoProfile) private void initializeBridgeForProfile() throws InterruptedException {
throws InterruptedException {
final Semaphore semaphore = new Semaphore(0); final Semaphore semaphore = new Semaphore(0);
PostTask.runOrPostTask(UiThreadTaskTraits.DEFAULT, () -> { PostTask.runOrPostTask(UiThreadTaskTraits.DEFAULT, () -> {
Profile profile = Profile.getLastUsedRegularProfile();
if (incognitoProfile) {
profile = profile.getOffTheRecordProfile();
}
// Ensure we start in an offline state. // Ensure we start in an offline state.
mOfflinePageBridge = OfflinePageBridge.getForProfile(profile); mOfflinePageBridge = OfflinePageBridge.getForProfile(mProfile);
if (mOfflinePageBridge == null || mOfflinePageBridge.isOfflinePageModelLoaded()) { if (mOfflinePageBridge == null || mOfflinePageBridge.isOfflinePageModelLoaded()) {
semaphore.release(); semaphore.release();
return; return;
...@@ -93,19 +103,13 @@ public class OfflinePageBridgeTest { ...@@ -93,19 +103,13 @@ public class OfflinePageBridgeTest {
}); });
}); });
Assert.assertTrue(semaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS)); Assert.assertTrue(semaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS));
if (!incognitoProfile) Assert.assertNotNull(mOfflinePageBridge);
} }
private OfflinePageBridge getBridgeForProfileKey(final boolean incognitoProfile) private OfflinePageBridge getBridgeForProfileKey() throws InterruptedException {
throws InterruptedException {
final Semaphore semaphore = new Semaphore(0); final Semaphore semaphore = new Semaphore(0);
AtomicReference<OfflinePageBridge> offlinePageBridgeRef = new AtomicReference<>(); AtomicReference<OfflinePageBridge> offlinePageBridgeRef = new AtomicReference<>();
PostTask.runOrPostTask(UiThreadTaskTraits.DEFAULT, () -> { PostTask.runOrPostTask(UiThreadTaskTraits.DEFAULT, () -> {
Profile profile = Profile.getLastUsedRegularProfile(); ProfileKey profileKey = mProfile.getProfileKey();
if (incognitoProfile) {
profile = profile.getOffTheRecordProfile();
}
ProfileKey profileKey = profile.getProfileKey();
// Ensure we start in an offline state. // Ensure we start in an offline state.
OfflinePageBridge offlinePageBridge = OfflinePageBridge.getForProfileKey(profileKey); OfflinePageBridge offlinePageBridge = OfflinePageBridge.getForProfileKey(profileKey);
offlinePageBridgeRef.set(offlinePageBridge); offlinePageBridgeRef.set(offlinePageBridge);
...@@ -122,7 +126,6 @@ public class OfflinePageBridgeTest { ...@@ -122,7 +126,6 @@ public class OfflinePageBridgeTest {
}); });
}); });
Assert.assertTrue(semaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS)); Assert.assertTrue(semaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS));
if (!incognitoProfile) Assert.assertNotNull(offlinePageBridgeRef.get());
return offlinePageBridgeRef.get(); return offlinePageBridgeRef.get();
} }
...@@ -138,7 +141,10 @@ public class OfflinePageBridgeTest { ...@@ -138,7 +141,10 @@ public class OfflinePageBridgeTest {
} }
}); });
initializeBridgeForProfile(false); TestThreadUtils.runOnUiThreadBlocking(
() -> { mProfile = Profile.getLastUsedRegularProfile(); });
initializeBridgeForProfile();
mTestServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext()); mTestServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext());
mTestPage = mTestServer.getURL(TEST_PAGE); mTestPage = mTestServer.getURL(TEST_PAGE);
...@@ -152,7 +158,7 @@ public class OfflinePageBridgeTest { ...@@ -152,7 +158,7 @@ public class OfflinePageBridgeTest {
@Test @Test
@MediumTest @MediumTest
public void testProfileAndKeyMapToSameOfflinePageBridge() throws Exception { public void testProfileAndKeyMapToSameOfflinePageBridge() throws Exception {
OfflinePageBridge offlinePageBridgeRetrievedByKey = getBridgeForProfileKey(false); OfflinePageBridge offlinePageBridgeRetrievedByKey = getBridgeForProfileKey();
Assert.assertSame(mOfflinePageBridge, offlinePageBridgeRetrievedByKey); Assert.assertSame(mOfflinePageBridge, offlinePageBridgeRetrievedByKey);
} }
...@@ -201,15 +207,50 @@ public class OfflinePageBridgeTest { ...@@ -201,15 +207,50 @@ public class OfflinePageBridgeTest {
@Test @Test
@MediumTest @MediumTest
public void testOfflinePageBridgeDisabledInIncognito() throws Exception { public void testOfflinePageBridgeDisabled_InIncognitoTabbedActivity() throws Exception {
initializeBridgeForProfile(true); TestThreadUtils.runOnUiThreadBlocking(
() -> { mProfile = Profile.getLastUsedRegularProfile().getPrimaryOTRProfile(); });
initializeBridgeForProfile();
Assert.assertEquals(null, mOfflinePageBridge);
}
@Test
@MediumTest
public void testOfflinePageBridgeForProfileKeyDisabled_InIncognitoTabbedActivity()
throws Exception {
TestThreadUtils.runOnUiThreadBlocking(
() -> { mProfile = Profile.getLastUsedRegularProfile().getPrimaryOTRProfile(); });
OfflinePageBridge offlinePageBridgeRetrievedByKey = getBridgeForProfileKey();
Assert.assertNull(offlinePageBridgeRetrievedByKey);
}
@Test
@MediumTest
@Features.EnableFeatures({ChromeFeatureList.CCT_INCOGNITO})
public void testOfflinePageBridgeDisabled_InIncognitoCCT() throws Exception {
prepareAndLaunchIncognitoCCT();
TestThreadUtils.runOnUiThreadBlocking(() -> {
Tab tab = mCustomTabActivityTestRule.getActivity().getActivityTab();
mProfile = Profile.fromWebContents(tab.getWebContents());
Assert.assertTrue(mProfile.isOffTheRecord());
Assert.assertFalse(mProfile.isPrimaryOTRProfile());
});
initializeBridgeForProfile();
Assert.assertEquals(null, mOfflinePageBridge); Assert.assertEquals(null, mOfflinePageBridge);
} }
@Test @Test
@MediumTest @MediumTest
public void testOfflinePageBridgeForProfileKeyDisabledInIncognito() throws Exception { @Features.EnableFeatures({ChromeFeatureList.CCT_INCOGNITO})
OfflinePageBridge offlinePageBridgeRetrievedByKey = getBridgeForProfileKey(true); public void testOfflinePageBridgeForProfileKeyDisabled_InIncognitoCCT() throws Exception {
prepareAndLaunchIncognitoCCT();
TestThreadUtils.runOnUiThreadBlocking(() -> {
Tab tab = mCustomTabActivityTestRule.getActivity().getActivityTab();
mProfile = Profile.fromWebContents(tab.getWebContents());
Assert.assertTrue(mProfile.isOffTheRecord());
Assert.assertFalse(mProfile.isPrimaryOTRProfile());
});
OfflinePageBridge offlinePageBridgeRetrievedByKey = getBridgeForProfileKey();
Assert.assertNull(offlinePageBridgeRetrievedByKey); Assert.assertNull(offlinePageBridgeRetrievedByKey);
} }
...@@ -550,4 +591,11 @@ public class OfflinePageBridgeTest { ...@@ -550,4 +591,11 @@ public class OfflinePageBridgeTest {
outputChannel.close(); outputChannel.close();
} }
} }
private void prepareAndLaunchIncognitoCCT() throws TimeoutException {
Intent intent = CustomTabsTestUtils.createMinimalIncognitoCustomTabIntent(
InstrumentationRegistry.getContext(), "about:blank");
IncognitoDataTestUtils.fireAndWaitForCctWarmup();
mCustomTabActivityTestRule.startCustomTabActivityWithIntent(intent);
}
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment