| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser.offlinepages; | 5 package org.chromium.chrome.browser.offlinepages; |
| 6 | 6 |
| 7 import android.content.Context; | 7 import android.content.Context; |
| 8 import android.os.Environment; | 8 import android.os.Environment; |
| 9 import android.test.suitebuilder.annotation.SmallTest; | 9 import android.test.suitebuilder.annotation.SmallTest; |
| 10 | 10 |
| 11 import org.chromium.base.ThreadUtils; | 11 import org.chromium.base.ThreadUtils; |
| 12 import org.chromium.base.test.util.CommandLineFlags; | 12 import org.chromium.base.test.util.CommandLineFlags; |
| 13 import org.chromium.chrome.browser.ChromeActivity; | 13 import org.chromium.chrome.browser.ChromeActivity; |
| 14 import org.chromium.chrome.browser.ChromeSwitches; | 14 import org.chromium.chrome.browser.ChromeSwitches; |
| 15 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.DeletePageCall
back; | 15 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.DeletePageCall
back; |
| 16 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.MultipleOfflin
ePageItemCallback; |
| 16 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.OfflinePageMod
elObserver; | 17 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.OfflinePageMod
elObserver; |
| 17 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.SavePageCallba
ck; | 18 import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.SavePageCallba
ck; |
| 18 import org.chromium.chrome.browser.profiles.Profile; | 19 import org.chromium.chrome.browser.profiles.Profile; |
| 19 import org.chromium.chrome.test.ChromeActivityTestCaseBase; | 20 import org.chromium.chrome.test.ChromeActivityTestCaseBase; |
| 20 import org.chromium.components.offlinepages.DeletePageResult; | 21 import org.chromium.components.offlinepages.DeletePageResult; |
| 21 import org.chromium.components.offlinepages.SavePageResult; | 22 import org.chromium.components.offlinepages.SavePageResult; |
| 22 import org.chromium.content.browser.test.util.Criteria; | 23 import org.chromium.content.browser.test.util.Criteria; |
| 23 import org.chromium.content.browser.test.util.CriteriaHelper; | 24 import org.chromium.content.browser.test.util.CriteriaHelper; |
| 24 import org.chromium.net.NetworkChangeNotifier; | 25 import org.chromium.net.NetworkChangeNotifier; |
| 25 import org.chromium.net.test.EmbeddedTestServer; | 26 import org.chromium.net.test.EmbeddedTestServer; |
| 26 | 27 |
| 27 import java.util.ArrayList; | 28 import java.util.ArrayList; |
| 28 import java.util.List; | 29 import java.util.List; |
| 29 import java.util.concurrent.Semaphore; | 30 import java.util.concurrent.Semaphore; |
| 30 import java.util.concurrent.TimeUnit; | 31 import java.util.concurrent.TimeUnit; |
| 32 import java.util.concurrent.atomic.AtomicInteger; |
| 31 import java.util.concurrent.atomic.AtomicReference; | 33 import java.util.concurrent.atomic.AtomicReference; |
| 32 | 34 |
| 33 /** Unit tests for {@link OfflinePageBridge}. */ | 35 /** Unit tests for {@link OfflinePageBridge}. */ |
| 34 @CommandLineFlags.Add({ChromeSwitches.ENABLE_OFFLINE_PAGES}) | 36 @CommandLineFlags.Add({ChromeSwitches.ENABLE_OFFLINE_PAGES}) |
| 35 public class OfflinePageBridgeTest extends ChromeActivityTestCaseBase<ChromeActi
vity> { | 37 public class OfflinePageBridgeTest extends ChromeActivityTestCaseBase<ChromeActi
vity> { |
| 36 private static final String TEST_PAGE = "/chrome/test/data/android/about.htm
l"; | 38 private static final String TEST_PAGE = "/chrome/test/data/android/about.htm
l"; |
| 37 private static final int TIMEOUT_MS = 5000; | 39 private static final int TIMEOUT_MS = 5000; |
| 38 private static final long POLLING_INTERVAL = 100; | 40 private static final long POLLING_INTERVAL = 100; |
| 39 private static final ClientId BOOKMARK_ID = | 41 private static final ClientId BOOKMARK_ID = |
| 40 new ClientId(OfflinePageBridge.BOOKMARK_NAMESPACE, "1234"); | 42 new ClientId(OfflinePageBridge.BOOKMARK_NAMESPACE, "1234"); |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 295 } | 297 } |
| 296 }); | 298 }); |
| 297 } | 299 } |
| 298 }); | 300 }); |
| 299 assertTrue(semaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS)); | 301 assertTrue(semaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS)); |
| 300 } | 302 } |
| 301 | 303 |
| 302 private void deletePage(final ClientId bookmarkId, final int expectedResult) | 304 private void deletePage(final ClientId bookmarkId, final int expectedResult) |
| 303 throws InterruptedException { | 305 throws InterruptedException { |
| 304 final Semaphore semaphore = new Semaphore(0); | 306 final Semaphore semaphore = new Semaphore(0); |
| 307 final AtomicInteger deletePageResultRef = new AtomicInteger(); |
| 305 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 308 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 306 @Override | 309 @Override |
| 307 public void run() { | 310 public void run() { |
| 308 mOfflinePageBridge.deletePage(bookmarkId, new DeletePageCallback
() { | 311 mOfflinePageBridge.deletePage(bookmarkId, new DeletePageCallback
() { |
| 309 @Override | 312 @Override |
| 310 public void onDeletePageDone(int deletePageResult) { | 313 public void onDeletePageDone(int deletePageResult) { |
| 311 assertEquals("Delete result incorrect.", expectedResult,
deletePageResult); | 314 deletePageResultRef.set(deletePageResult); |
| 312 semaphore.release(); | 315 semaphore.release(); |
| 313 } | 316 } |
| 314 }); | 317 }); |
| 315 } | 318 } |
| 316 }); | 319 }); |
| 317 assertTrue(semaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS)); | 320 assertTrue(semaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS)); |
| 321 assertEquals("Delete result incorrect.", expectedResult, deletePageResul
tRef.get()); |
| 318 } | 322 } |
| 319 | 323 |
| 320 private List<OfflinePageItem> getAllPages() | 324 private List<OfflinePageItem> getAllPages() throws InterruptedException { |
| 321 throws InterruptedException { | |
| 322 final List<OfflinePageItem> result = new ArrayList<OfflinePageItem>(); | 325 final List<OfflinePageItem> result = new ArrayList<OfflinePageItem>(); |
| 323 final Semaphore semaphore = new Semaphore(0); | 326 final Semaphore semaphore = new Semaphore(0); |
| 324 ThreadUtils.runOnUiThread(new Runnable() { | 327 ThreadUtils.runOnUiThread(new Runnable() { |
| 325 @Override | 328 @Override |
| 326 public void run() { | 329 public void run() { |
| 327 mOfflinePageBridge.getAllPagesAsync( | 330 mOfflinePageBridge.getAllPages(new MultipleOfflinePageItemCallba
ck() { |
| 328 new OfflinePageBridge.MultipleOfflinePageItemCallback()
{ | 331 @Override |
| 329 @Override | 332 public void onResult(List<OfflinePageItem> pages) { |
| 330 public void onResult(List<OfflinePageItem> pages) { | 333 result.addAll(pages); |
| 331 result.addAll(pages); | 334 semaphore.release(); |
| 332 semaphore.release(); | 335 } |
| 333 } | 336 }); |
| 334 }); | |
| 335 } | 337 } |
| 336 }); | 338 }); |
| 337 assertTrue(semaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS)); | 339 assertTrue(semaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS)); |
| 338 return result; | 340 return result; |
| 339 } | 341 } |
| 340 | 342 |
| 341 private void forceConnectivityStateOnUiThread(final boolean state) { | 343 private void forceConnectivityStateOnUiThread(final boolean state) { |
| 342 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 344 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 343 @Override | 345 @Override |
| 344 public void run() { | 346 public void run() { |
| 345 NetworkChangeNotifier.forceConnectivityState(state); | 347 NetworkChangeNotifier.forceConnectivityState(state); |
| 346 } | 348 } |
| 347 }); | 349 }); |
| 348 } | 350 } |
| 349 | 351 |
| 350 private OfflinePageItem getPageByClientId(final ClientId clientId) throws In
terruptedException { | 352 private OfflinePageItem getPageByClientId(final ClientId clientId) throws In
terruptedException { |
| 351 final OfflinePageItem[] result = {null}; | 353 final OfflinePageItem[] result = {null}; |
| 352 final Semaphore semaphore = new Semaphore(0); | 354 final Semaphore semaphore = new Semaphore(0); |
| 353 ThreadUtils.runOnUiThread(new Runnable() { | 355 ThreadUtils.runOnUiThread(new Runnable() { |
| 354 @Override | 356 @Override |
| 355 public void run() { | 357 public void run() { |
| 356 mOfflinePageBridge.getPagesByClientId( | 358 mOfflinePageBridge.getPagesByClientId( |
| 357 clientId, new OfflinePageBridge.MultipleOfflinePageItemC
allback() { | 359 clientId, new MultipleOfflinePageItemCallback() { |
| 358 @Override | 360 @Override |
| 359 public void onResult(List<OfflinePageItem> items) { | 361 public void onResult(List<OfflinePageItem> items) { |
| 360 if (!items.isEmpty()) { | 362 if (!items.isEmpty()) { |
| 361 result[0] = items.get(0); | 363 result[0] = items.get(0); |
| 362 } | 364 } |
| 363 semaphore.release(); | 365 semaphore.release(); |
| 364 } | 366 } |
| 365 }); | 367 }); |
| 366 } | 368 } |
| 367 }); | 369 }); |
| 368 assertTrue(semaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS)); | 370 assertTrue(semaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS)); |
| 369 return result[0]; | 371 return result[0]; |
| 370 } | 372 } |
| 371 } | 373 } |
| OLD | NEW |