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 @@
package org.chromium.chrome.browser.offlinepages;
import android.content.Intent;
import android.net.Uri;
import android.support.test.InstrumentationRegistry;
import android.util.Base64;
......@@ -15,6 +16,7 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestRule;
import org.junit.runner.RunWith;
import org.chromium.base.ApiCompatibilityUtils;
......@@ -22,14 +24,20 @@ import org.chromium.base.Callback;
import org.chromium.base.task.PostTask;
import org.chromium.base.test.util.CommandLineFlags;
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.incognito.IncognitoDataTestUtils;
import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.OfflinePageModelObserver;
import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.SavePageCallback;
import org.chromium.chrome.browser.offlinepages.downloads.OfflinePageDownloadBridge;
import org.chromium.chrome.browser.profiles.Profile;
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.ChromeTabbedActivityTestRule;
import org.chromium.chrome.test.util.browser.Features;
import org.chromium.components.offlinepages.DeletePageResult;
import org.chromium.components.offlinepages.SavePageResult;
import org.chromium.content_public.browser.LoadUrlParams;
......@@ -58,9 +66,15 @@ import java.util.concurrent.atomic.AtomicReference;
@RunWith(ChromeJUnit4ClassRunner.class)
@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
public class OfflinePageBridgeTest {
@Rule
public TestRule mProcessor = new Features.InstrumentationProcessor();
@Rule
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 int TIMEOUT_MS = 5000;
private static final ClientId TEST_CLIENT_ID =
......@@ -69,17 +83,13 @@ public class OfflinePageBridgeTest {
private OfflinePageBridge mOfflinePageBridge;
private EmbeddedTestServer mTestServer;
private String mTestPage;
private Profile mProfile;
private void initializeBridgeForProfile(final boolean incognitoProfile)
throws InterruptedException {
private void initializeBridgeForProfile() throws InterruptedException {
final Semaphore semaphore = new Semaphore(0);
PostTask.runOrPostTask(UiThreadTaskTraits.DEFAULT, () -> {
Profile profile = Profile.getLastUsedRegularProfile();
if (incognitoProfile) {
profile = profile.getOffTheRecordProfile();
}
// Ensure we start in an offline state.
mOfflinePageBridge = OfflinePageBridge.getForProfile(profile);
mOfflinePageBridge = OfflinePageBridge.getForProfile(mProfile);
if (mOfflinePageBridge == null || mOfflinePageBridge.isOfflinePageModelLoaded()) {
semaphore.release();
return;
......@@ -93,19 +103,13 @@ public class OfflinePageBridgeTest {
});
});
Assert.assertTrue(semaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS));
if (!incognitoProfile) Assert.assertNotNull(mOfflinePageBridge);
}
private OfflinePageBridge getBridgeForProfileKey(final boolean incognitoProfile)
throws InterruptedException {
private OfflinePageBridge getBridgeForProfileKey() throws InterruptedException {
final Semaphore semaphore = new Semaphore(0);
AtomicReference<OfflinePageBridge> offlinePageBridgeRef = new AtomicReference<>();
PostTask.runOrPostTask(UiThreadTaskTraits.DEFAULT, () -> {
Profile profile = Profile.getLastUsedRegularProfile();
if (incognitoProfile) {
profile = profile.getOffTheRecordProfile();
}
ProfileKey profileKey = profile.getProfileKey();
ProfileKey profileKey = mProfile.getProfileKey();
// Ensure we start in an offline state.
OfflinePageBridge offlinePageBridge = OfflinePageBridge.getForProfileKey(profileKey);
offlinePageBridgeRef.set(offlinePageBridge);
......@@ -122,7 +126,6 @@ public class OfflinePageBridgeTest {
});
});
Assert.assertTrue(semaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS));
if (!incognitoProfile) Assert.assertNotNull(offlinePageBridgeRef.get());
return offlinePageBridgeRef.get();
}
......@@ -138,7 +141,10 @@ public class OfflinePageBridgeTest {
}
});
initializeBridgeForProfile(false);
TestThreadUtils.runOnUiThreadBlocking(
() -> { mProfile = Profile.getLastUsedRegularProfile(); });
initializeBridgeForProfile();
mTestServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext());
mTestPage = mTestServer.getURL(TEST_PAGE);
......@@ -152,7 +158,7 @@ public class OfflinePageBridgeTest {
@Test
@MediumTest
public void testProfileAndKeyMapToSameOfflinePageBridge() throws Exception {
OfflinePageBridge offlinePageBridgeRetrievedByKey = getBridgeForProfileKey(false);
OfflinePageBridge offlinePageBridgeRetrievedByKey = getBridgeForProfileKey();
Assert.assertSame(mOfflinePageBridge, offlinePageBridgeRetrievedByKey);
}
......@@ -201,15 +207,50 @@ public class OfflinePageBridgeTest {
@Test
@MediumTest
public void testOfflinePageBridgeDisabledInIncognito() throws Exception {
initializeBridgeForProfile(true);
public void testOfflinePageBridgeDisabled_InIncognitoTabbedActivity() throws Exception {
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);
}
@Test
@MediumTest
public void testOfflinePageBridgeForProfileKeyDisabledInIncognito() throws Exception {
OfflinePageBridge offlinePageBridgeRetrievedByKey = getBridgeForProfileKey(true);
@Features.EnableFeatures({ChromeFeatureList.CCT_INCOGNITO})
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);
}
......@@ -550,4 +591,11 @@ public class OfflinePageBridgeTest {
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