Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/partnercustomizations/PartnerDisableIncognitoModeIntegrationTest.java

Issue 1141283003: Upstream oodles of Chrome for Android code into Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: final patch? Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/javatests/src/org/chromium/chrome/browser/partnercustomizations/PartnerDisableIncognitoModeIntegrationTest.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/partnercustomizations/PartnerDisableIncognitoModeIntegrationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/partnercustomizations/PartnerDisableIncognitoModeIntegrationTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..172dfbff1671aaa1f00e91e7c41d54e725741bda
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/partnercustomizations/PartnerDisableIncognitoModeIntegrationTest.java
@@ -0,0 +1,174 @@
+// Copyright 2015 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.partnercustomizations;
+
+import android.content.Context;
+import android.net.Uri;
+import android.os.Bundle;
+import android.test.suitebuilder.annotation.MediumTest;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.widget.PopupMenu;
+
+import com.google.android.apps.chrome.R;
+
+import org.chromium.base.ThreadUtils;
+import org.chromium.base.test.util.Feature;
+import org.chromium.chrome.browser.preferences.PrefServiceBridge;
+import org.chromium.chrome.test.partnercustomizations.TestPartnerBrowserCustomizationsProvider;
+import org.chromium.chrome.test.util.TestHttpServerClient;
+import org.chromium.content.browser.test.util.Criteria;
+import org.chromium.content.browser.test.util.CriteriaHelper;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+
+/**
+ * Integration tests for the partner disabling incognito mode feature.
+ */
+public class PartnerDisableIncognitoModeIntegrationTest extends
+ BasePartnerBrowserCustomizationIntegrationTest {
+
+ private static final String TEST_URLS[] = {
+ TestHttpServerClient.getUrl("chrome/test/data/android/about.html"),
+ TestHttpServerClient.getUrl("chrome/test/data/android/ok.txt"),
+ TestHttpServerClient.getUrl("chrome/test/data/android/test.html")
+ };
+
+ @Override
+ public void startMainActivity() throws InterruptedException {
+ // Each test will launch main activity, so purposefully omit here.
+ }
+
+ private void setParentalControlsEnabled(boolean enabled) {
+ Uri uri = PartnerBrowserCustomizations.buildQueryUri(
+ PartnerBrowserCustomizations.PARTNER_DISABLE_INCOGNITO_MODE_PATH);
+ Bundle bundle = new Bundle();
+ bundle.putBoolean(
+ TestPartnerBrowserCustomizationsProvider.INCOGNITO_MODE_DISABLED_KEY, enabled);
+ Context context = getInstrumentation().getTargetContext();
+ context.getContentResolver().call(uri, "setIncognitoModeDisabled", null, bundle);
+ }
+
+ private void assertIncognitoMenuItemEnabled(boolean enabled) throws ExecutionException {
+ Menu menu = ThreadUtils.runOnUiThreadBlocking(new Callable<Menu>() {
+ @Override
+ public Menu call() throws Exception {
+ // PopupMenu is a convenient way of building a temp menu.
+ PopupMenu tempMenu = new PopupMenu(
+ getActivity(), getActivity().findViewById(R.id.menu_anchor_stub));
+ tempMenu.inflate(R.menu.main_menu);
+ Menu menu = tempMenu.getMenu();
+
+ getActivity().prepareMenu(menu);
+ return menu;
+ }
+ });
+ for (int i = 0; i < menu.size(); ++i) {
+ MenuItem item = menu.getItem(i);
+ if (item.getItemId() == R.id.new_incognito_tab_menu_id && item.isVisible()) {
+ assertEquals("Menu item enabled state is not correct.", enabled, item.isEnabled());
+ }
+ }
+ }
+
+ private boolean waitForParentalControlsEnabledState(final boolean parentalControlsEnabled)
+ throws InterruptedException {
+ return CriteriaHelper.pollForCriteria(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Boolean>() {
+ @Override
+ public Boolean call() throws Exception {
+ // areParentalControlsEnabled is updated on a background thread, so we
+ // also wait on the isIncognitoModeEnabled to ensure the updates on the
+ // UI thread have also triggered.
+ boolean retVal = parentalControlsEnabled
+ == PartnerBrowserCustomizations.isIncognitoDisabled();
+ retVal &= parentalControlsEnabled
+ != PrefServiceBridge.getInstance().isIncognitoModeEnabled();
+ return retVal;
+ }
+ });
+ }
+ });
+ }
+
+ private void toggleActivityForegroundState() {
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ getActivity().onPause();
+ }
+ });
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ getActivity().onStop();
+ }
+ });
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ getActivity().onStart();
+ }
+ });
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ getActivity().onResume();
+ }
+ });
+ }
+
+ @MediumTest
+ @Feature({"DisableIncognitoMode"})
+ public void testIncognitoEnabledIfNoParentalControls() throws InterruptedException {
+ setParentalControlsEnabled(false);
+ startMainActivityOnBlankPage();
+ assertTrue(waitForParentalControlsEnabledState(false));
+ newIncognitoTabFromMenu();
+ }
+
+ @MediumTest
+ @Feature({"DisableIncognitoMode"})
+ public void testIncognitoMenuItemEnabledBasedOnParentalControls()
+ throws InterruptedException, ExecutionException {
+ setParentalControlsEnabled(true);
+ startMainActivityOnBlankPage();
+ assertTrue(waitForParentalControlsEnabledState(true));
+ assertIncognitoMenuItemEnabled(false);
+
+ setParentalControlsEnabled(false);
+ toggleActivityForegroundState();
+ assertTrue(waitForParentalControlsEnabledState(false));
+ assertIncognitoMenuItemEnabled(true);
+ }
+
+ @MediumTest
+ @Feature({"DisableIncognitoMode"})
+ public void testEnabledParentalControlsClosesIncognitoTabs() throws InterruptedException {
+ setParentalControlsEnabled(false);
+ startMainActivityOnBlankPage();
+ assertTrue(waitForParentalControlsEnabledState(false));
+
+ loadUrlInNewTab(TEST_URLS[0], true);
+ loadUrlInNewTab(TEST_URLS[1], true);
+ loadUrlInNewTab(TEST_URLS[2], true);
+ loadUrlInNewTab(TEST_URLS[0], false);
+
+ setParentalControlsEnabled(true);
+ toggleActivityForegroundState();
+ assertTrue(waitForParentalControlsEnabledState(true));
+
+ assertTrue("Incognito tabs did not close as expected",
+ CriteriaHelper.pollForCriteria(new Criteria() {
+ @Override
+ public boolean isSatisfied() {
+ return incognitoTabsCount() == 0;
+ }
+ }));
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698