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

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridgeTest.java

Issue 1739503002: Makes the OfflinePageBridge.getAllPages method asynchronous. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix some comments. Created 4 years, 8 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 unified diff | Download patch
OLDNEW
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698