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

Unified Diff: chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflinePageRequestTest.java

Issue 2245733004: Serve offline page for online URL on disconnected or bad networks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix junit test Created 4 years, 4 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/offlinepages/OfflinePageRequestTest.java
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflinePageRequestTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflinePageRequestTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..e3decca283be63b946c66f7c535633fa5c55a7ba
--- /dev/null
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflinePageRequestTest.java
@@ -0,0 +1,126 @@
+// Copyright 2016 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.offlinepages;
+
+import android.os.Environment;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import org.chromium.base.ThreadUtils;
+import org.chromium.base.test.util.CommandLineFlags;
+import org.chromium.chrome.browser.ChromeActivity;
+import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.OfflinePageModelObserver;
+import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.SavePageCallback;
+import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.test.ChromeActivityTestCaseBase;
+import org.chromium.components.offlinepages.SavePageResult;
+import org.chromium.net.NetworkChangeNotifier;
+import org.chromium.net.test.EmbeddedTestServer;
+
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
+
+/** Unit tests for offline page request handling. */
+@CommandLineFlags.Add("enable-features=OfflineBookmarks")
+public class OfflinePageRequestTest extends ChromeActivityTestCaseBase<ChromeActivity> {
+ private static final String TEST_PAGE = "/chrome/test/data/android/test.html";
+ private static final String ABOUT_PAGE = "/chrome/test/data/android/about.html";
+ private static final int TIMEOUT_MS = 5000;
+ private static final ClientId CLIENT_ID =
+ new ClientId(OfflinePageBridge.BOOKMARK_NAMESPACE, "1234");
+
+ private OfflinePageBridge mOfflinePageBridge;
+ private EmbeddedTestServer mTestServer;
+
+ public OfflinePageRequestTest() {
+ super(ChromeActivity.class);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ final Semaphore semaphore = new Semaphore(0);
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ if (!NetworkChangeNotifier.isInitialized()) {
+ NetworkChangeNotifier.init(getActivity().getBaseContext());
+ }
+
+ Profile profile = Profile.getLastUsedProfile();
+ mOfflinePageBridge = OfflinePageBridge.getForProfile(profile);
+ if (mOfflinePageBridge.isOfflinePageModelLoaded()) {
+ semaphore.release();
+ } else {
+ mOfflinePageBridge.addObserver(new OfflinePageModelObserver() {
+ @Override
+ public void offlinePageModelLoaded() {
+ semaphore.release();
+ mOfflinePageBridge.removeObserver(this);
+ }
+ });
+ }
+ }
+ });
+ assertTrue(semaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+
+ mTestServer = EmbeddedTestServer.createAndStartFileServer(
+ getInstrumentation().getContext(), Environment.getExternalStorageDirectory());
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ mTestServer.stopAndDestroyServer();
+ super.tearDown();
+ }
+
+ @Override
+ public void startMainActivity() throws InterruptedException {
+ startMainActivityOnBlankPage();
+ }
+
+ @SmallTest
+ public void testLoadOfflinePageOnDisconnectedNetwork() throws Exception {
+ NetworkChangeNotifier.forceConnectivityState(true);
+ Tab tab = getActivity().getActivityTab();
+
+ // Load and save an offline page.
+ String testUrl = mTestServer.getURL(TEST_PAGE);
+ savePage(testUrl);
+ assertFalse(tab.isOfflinePage());
+
+ // Load another page.
+ String aboutUrl = mTestServer.getURL(ABOUT_PAGE);
+ loadUrl(aboutUrl);
+ assertFalse(tab.isOfflinePage());
+
+ // Switch to offline and load the page that saves an offline copy.
+ NetworkChangeNotifier.forceConnectivityState(false);
+ loadUrl(testUrl);
+ assertTrue(tab.isOfflinePage());
+ }
+
+ private void savePage(String url) throws InterruptedException {
+ loadUrl(url);
+
+ final Semaphore semaphore = new Semaphore(0);
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ mOfflinePageBridge.savePage(getActivity().getActivityTab().getWebContents(),
+ CLIENT_ID, new SavePageCallback() {
+ @Override
+ public void onSavePageDone(
+ int savePageResult, String url, long offlineId) {
+ assertEquals(
+ "Save failed.", SavePageResult.SUCCESS, savePageResult);
+ semaphore.release();
+ }
+ });
+ }
+ });
+ assertTrue(semaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS));
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698