Index: content/public/android/javatests/src/org/chromium/content/browser/BrowserStartupControllerTest.java |
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/BrowserStartupControllerTest.java b/content/public/android/javatests/src/org/chromium/content/browser/BrowserStartupControllerTest.java |
deleted file mode 100644 |
index 188aa080dd5bab2e417d3ac6e0c07f64dbcb59c7..0000000000000000000000000000000000000000 |
--- a/content/public/android/javatests/src/org/chromium/content/browser/BrowserStartupControllerTest.java |
+++ /dev/null |
@@ -1,482 +0,0 @@ |
-// Copyright 2013 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.content.browser; |
- |
-import android.content.Context; |
-import android.test.InstrumentationTestCase; |
-import android.test.suitebuilder.annotation.SmallTest; |
- |
-import org.chromium.base.ThreadUtils; |
-import org.chromium.base.test.util.AdvancedMockContext; |
-import org.chromium.content.common.ProcessInitException; |
-import org.chromium.content.common.ResultCodes; |
- |
-public class BrowserStartupControllerTest extends InstrumentationTestCase { |
- |
- private TestBrowserStartupController mController; |
- |
- private static class TestBrowserStartupController extends BrowserStartupController { |
- |
- private int mStartupResult; |
- private boolean mLibraryLoadSucceeds; |
- private int mInitializedCounter = 0; |
- |
- @Override |
- void prepareToStartBrowserProcess(int numRenderers) throws ProcessInitException { |
- if (!mLibraryLoadSucceeds) { |
- throw new ProcessInitException(ResultCodes.RESULT_CODE_NATIVE_LIBRARY_LOAD_FAILED); |
- } |
- } |
- |
- private TestBrowserStartupController(Context context) { |
- super(context); |
- } |
- |
- @Override |
- int contentStart() { |
- mInitializedCounter++; |
- if (BrowserStartupController.browserMayStartAsynchonously()) { |
- // Post to the UI thread to emulate what would happen in a real scenario. |
- ThreadUtils.postOnUiThread(new Runnable() { |
- @Override |
- public void run() { |
- BrowserStartupController.browserStartupComplete(mStartupResult); |
- } |
- }); |
- } else { |
- BrowserStartupController.browserStartupComplete(mStartupResult); |
- } |
- return mStartupResult; |
- } |
- |
- private int initializedCounter() { |
- return mInitializedCounter; |
- } |
- } |
- |
- private static class TestStartupCallback implements BrowserStartupController.StartupCallback { |
- private boolean mWasSuccess; |
- private boolean mWasFailure; |
- private boolean mHasStartupResult; |
- private boolean mAlreadyStarted; |
- |
- @Override |
- public void onSuccess(boolean alreadyStarted) { |
- assert !mHasStartupResult; |
- mWasSuccess = true; |
- mAlreadyStarted = alreadyStarted; |
- mHasStartupResult = true; |
- } |
- |
- @Override |
- public void onFailure() { |
- assert !mHasStartupResult; |
- mWasFailure = true; |
- mHasStartupResult = true; |
- } |
- } |
- |
- @Override |
- protected void setUp() throws Exception { |
- super.setUp(); |
- Context context = new AdvancedMockContext(getInstrumentation().getTargetContext()); |
- mController = new TestBrowserStartupController(context); |
- // Setting the static singleton instance field enables more correct testing, since it is |
- // is possible to call {@link BrowserStartupController#browserStartupComplete(int)} instead |
- // of {@link BrowserStartupController#executeEnqueuedCallbacks(int, boolean)} directly. |
- BrowserStartupController.overrideInstanceForTest(mController); |
- } |
- |
- @SmallTest |
- public void testSingleAsynchronousStartupRequest() { |
- mController.mStartupResult = BrowserStartupController.STARTUP_SUCCESS; |
- mController.mLibraryLoadSucceeds = true; |
- final TestStartupCallback callback = new TestStartupCallback(); |
- |
- // Kick off the asynchronous startup request. |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- try { |
- mController.startBrowserProcessesAsync(callback); |
- } catch (Exception e) { |
- fail("Browser should have started successfully"); |
- } |
- } |
- }); |
- |
- assertTrue("Asynchronous mode should have been set.", |
- BrowserStartupController.browserMayStartAsynchonously()); |
- assertEquals("The browser process should have been initialized one time.", 1, |
- mController.initializedCounter()); |
- |
- // Wait for callbacks to complete. |
- getInstrumentation().waitForIdleSync(); |
- |
- assertTrue("Callback should have been executed.", callback.mHasStartupResult); |
- assertTrue("Callback should have been a success.", callback.mWasSuccess); |
- assertFalse("Callback should be told that the browser process was not already started.", |
- callback.mAlreadyStarted); |
- } |
- |
- @SmallTest |
- public void testMultipleAsynchronousStartupRequests() { |
- mController.mStartupResult = BrowserStartupController.STARTUP_SUCCESS; |
- mController.mLibraryLoadSucceeds = true; |
- final TestStartupCallback callback1 = new TestStartupCallback(); |
- final TestStartupCallback callback2 = new TestStartupCallback(); |
- final TestStartupCallback callback3 = new TestStartupCallback(); |
- |
- // Kick off the asynchronous startup requests. |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- try { |
- mController.startBrowserProcessesAsync(callback1); |
- } catch (Exception e) { |
- fail("Browser should have started successfully"); |
- } |
- } |
- }); |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- try { |
- mController.startBrowserProcessesAsync(callback2); |
- } catch (Exception e) { |
- fail("Browser should have started successfully"); |
- } |
- } |
- }); |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- mController.addStartupCompletedObserver(callback3); |
- } |
- }); |
- |
- assertTrue("Asynchronous mode should have been set.", |
- BrowserStartupController.browserMayStartAsynchonously()); |
- assertEquals("The browser process should have been initialized one time.", 1, |
- mController.initializedCounter()); |
- |
- // Wait for callbacks to complete. |
- getInstrumentation().waitForIdleSync(); |
- |
- assertTrue("Callback 1 should have been executed.", callback1.mHasStartupResult); |
- assertTrue("Callback 1 should have been a success.", callback1.mWasSuccess); |
- assertTrue("Callback 2 should have been executed.", callback2.mHasStartupResult); |
- assertTrue("Callback 2 should have been a success.", callback2.mWasSuccess); |
- assertTrue("Callback 3 should have been executed.", callback3.mHasStartupResult); |
- assertTrue("Callback 3 should have been a success.", callback3.mWasSuccess); |
- // Some startup tasks might have been enqueued after the browser process was started, but |
- // not the first one which kicked of the startup. |
- assertFalse("Callback 1 should be told that the browser process was not already started.", |
- callback1.mAlreadyStarted); |
- } |
- |
- @SmallTest |
- public void testConsecutiveAsynchronousStartupRequests() { |
- mController.mStartupResult = BrowserStartupController.STARTUP_SUCCESS; |
- mController.mLibraryLoadSucceeds = true; |
- final TestStartupCallback callback1 = new TestStartupCallback(); |
- final TestStartupCallback callback2 = new TestStartupCallback(); |
- |
- // Kick off the asynchronous startup requests. |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- try { |
- mController.startBrowserProcessesAsync(callback1); |
- } catch (Exception e) { |
- fail("Browser should have started successfully"); |
- } |
- } |
- }); |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- mController.addStartupCompletedObserver(callback2); |
- } |
- }); |
- |
- assertTrue("Asynchronous mode should have been set.", |
- BrowserStartupController.browserMayStartAsynchonously()); |
- assertEquals("The browser process should have been initialized one time.", 1, |
- mController.initializedCounter()); |
- |
- // Wait for callbacks to complete. |
- getInstrumentation().waitForIdleSync(); |
- |
- assertTrue("Callback 1 should have been executed.", callback1.mHasStartupResult); |
- assertTrue("Callback 1 should have been a success.", callback1.mWasSuccess); |
- assertTrue("Callback 2 should have been executed.", callback2.mHasStartupResult); |
- assertTrue("Callback 2 should have been a success.", callback2.mWasSuccess); |
- |
- final TestStartupCallback callback3 = new TestStartupCallback(); |
- final TestStartupCallback callback4 = new TestStartupCallback(); |
- |
- // Kick off more asynchronous startup requests. |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- try { |
- mController.startBrowserProcessesAsync(callback3); |
- } catch (Exception e) { |
- fail("Browser should have started successfully"); |
- } |
- } |
- }); |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- mController.addStartupCompletedObserver(callback4); |
- } |
- }); |
- |
- // Wait for callbacks to complete. |
- getInstrumentation().waitForIdleSync(); |
- |
- assertTrue("Callback 3 should have been executed.", callback3.mHasStartupResult); |
- assertTrue("Callback 3 should have been a success.", callback3.mWasSuccess); |
- assertTrue("Callback 3 should be told that the browser process was already started.", |
- callback3.mAlreadyStarted); |
- assertTrue("Callback 4 should have been executed.", callback4.mHasStartupResult); |
- assertTrue("Callback 4 should have been a success.", callback4.mWasSuccess); |
- assertTrue("Callback 4 should be told that the browser process was already started.", |
- callback4.mAlreadyStarted); |
- } |
- |
- @SmallTest |
- public void testSingleFailedAsynchronousStartupRequest() { |
- mController.mStartupResult = BrowserStartupController.STARTUP_FAILURE; |
- mController.mLibraryLoadSucceeds = true; |
- final TestStartupCallback callback = new TestStartupCallback(); |
- |
- // Kick off the asynchronous startup request. |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- try { |
- mController.startBrowserProcessesAsync(callback); |
- } catch (Exception e) { |
- fail("Browser should have started successfully"); |
- } |
- } |
- }); |
- |
- assertTrue("Asynchronous mode should have been set.", |
- BrowserStartupController.browserMayStartAsynchonously()); |
- assertEquals("The browser process should have been initialized one time.", 1, |
- mController.initializedCounter()); |
- |
- // Wait for callbacks to complete. |
- getInstrumentation().waitForIdleSync(); |
- |
- assertTrue("Callback should have been executed.", callback.mHasStartupResult); |
- assertTrue("Callback should have been a failure.", callback.mWasFailure); |
- } |
- |
- @SmallTest |
- public void testConsecutiveFailedAsynchronousStartupRequests() { |
- mController.mStartupResult = BrowserStartupController.STARTUP_FAILURE; |
- mController.mLibraryLoadSucceeds = true; |
- final TestStartupCallback callback1 = new TestStartupCallback(); |
- final TestStartupCallback callback2 = new TestStartupCallback(); |
- |
- // Kick off the asynchronous startup requests. |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- try { |
- mController.startBrowserProcessesAsync(callback1); |
- } catch (Exception e) { |
- fail("Browser should have started successfully"); |
- } |
- } |
- }); |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- mController.addStartupCompletedObserver(callback2); |
- } |
- }); |
- |
- assertTrue("Asynchronous mode should have been set.", |
- BrowserStartupController.browserMayStartAsynchonously()); |
- assertEquals("The browser process should have been initialized one time.", 1, |
- mController.initializedCounter()); |
- |
- // Wait for callbacks to complete. |
- getInstrumentation().waitForIdleSync(); |
- |
- assertTrue("Callback 1 should have been executed.", callback1.mHasStartupResult); |
- assertTrue("Callback 1 should have been a failure.", callback1.mWasFailure); |
- assertTrue("Callback 2 should have been executed.", callback2.mHasStartupResult); |
- assertTrue("Callback 2 should have been a failure.", callback2.mWasFailure); |
- |
- final TestStartupCallback callback3 = new TestStartupCallback(); |
- final TestStartupCallback callback4 = new TestStartupCallback(); |
- |
- // Kick off more asynchronous startup requests. |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- try { |
- mController.startBrowserProcessesAsync(callback3); |
- } catch (Exception e) { |
- fail("Browser should have started successfully"); |
- } |
- } |
- }); |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- mController.addStartupCompletedObserver(callback4); |
- } |
- }); |
- |
- // Wait for callbacks to complete. |
- getInstrumentation().waitForIdleSync(); |
- |
- assertTrue("Callback 3 should have been executed.", callback3.mHasStartupResult); |
- assertTrue("Callback 3 should have been a failure.", callback3.mWasFailure); |
- assertTrue("Callback 4 should have been executed.", callback4.mHasStartupResult); |
- assertTrue("Callback 4 should have been a failure.", callback4.mWasFailure); |
- } |
- |
- @SmallTest |
- public void testSingleSynchronousRequest() { |
- mController.mStartupResult = BrowserStartupController.STARTUP_SUCCESS; |
- mController.mLibraryLoadSucceeds = true; |
- // Kick off the synchronous startup. |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- try { |
- mController.startBrowserProcessesSync(1); |
- } catch (Exception e) { |
- fail("Browser should have started successfully"); |
- } |
- } |
- }); |
- assertFalse("Synchronous mode should have been set", |
- BrowserStartupController.browserMayStartAsynchonously()); |
- |
- assertEquals("The browser process should have been initialized one time.", 1, |
- mController.initializedCounter()); |
- } |
- |
- @SmallTest |
- public void testAsyncThenSyncRequests() { |
- mController.mStartupResult = BrowserStartupController.STARTUP_SUCCESS; |
- mController.mLibraryLoadSucceeds = true; |
- final TestStartupCallback callback = new TestStartupCallback(); |
- |
- // Kick off the startups. |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- try { |
- mController.startBrowserProcessesAsync(callback); |
- } catch (Exception e) { |
- fail("Browser should have started successfully"); |
- } |
- // To ensure that the async startup doesn't complete too soon we have |
- // to do both these in a since Runnable instance. This avoids the |
- // unpredictable race that happens in real situations. |
- try { |
- mController.startBrowserProcessesSync(1); |
- } catch (Exception e) { |
- fail("Browser should have started successfully"); |
- } |
- } |
- }); |
- assertFalse("Synchronous mode should have been set", |
- BrowserStartupController.browserMayStartAsynchonously()); |
- |
- assertEquals("The browser process should have been initialized twice.", 2, |
- mController.initializedCounter()); |
- |
- assertTrue("Callback should have been executed.", callback.mHasStartupResult); |
- assertTrue("Callback should have been a success.", callback.mWasSuccess); |
- assertFalse("Callback should be told that the browser process was not already started.", |
- callback.mAlreadyStarted); |
- } |
- |
- @SmallTest |
- public void testSyncThenAsyncRequests() { |
- mController.mStartupResult = BrowserStartupController.STARTUP_SUCCESS; |
- mController.mLibraryLoadSucceeds = true; |
- final TestStartupCallback callback = new TestStartupCallback(); |
- |
- // Do a synchronous startup first. |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- try { |
- mController.startBrowserProcessesSync(1); |
- } catch (Exception e) { |
- fail("Browser should have started successfully"); |
- } |
- } |
- }); |
- |
- assertEquals("The browser process should have been initialized once.", 1, |
- mController.initializedCounter()); |
- |
- assertFalse("Synchronous mode should have been set", |
- BrowserStartupController.browserMayStartAsynchonously()); |
- |
- // Kick off the asynchronous startup request. This should just queue the callback. |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- try { |
- mController.startBrowserProcessesAsync(callback); |
- } catch (Exception e) { |
- fail("Browser should have started successfully"); |
- } |
- } |
- }); |
- |
- assertEquals("The browser process should not have been initialized a second time.", 1, |
- mController.initializedCounter()); |
- |
- // Wait for callbacks to complete. |
- getInstrumentation().waitForIdleSync(); |
- |
- assertTrue("Callback should have been executed.", callback.mHasStartupResult); |
- assertTrue("Callback should have been a success.", callback.mWasSuccess); |
- assertTrue("Callback should be told that the browser process was already started.", |
- callback.mAlreadyStarted); |
- } |
- |
- @SmallTest |
- public void testLibraryLoadFails() { |
- mController.mLibraryLoadSucceeds = false; |
- final TestStartupCallback callback = new TestStartupCallback(); |
- |
- // Kick off the asynchronous startup request. |
- ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
- @Override |
- public void run() { |
- try { |
- mController.startBrowserProcessesAsync(callback); |
- fail("Browser should not have started successfully"); |
- } catch (Exception e) { |
- // Exception expected, ignore. |
- } |
- } |
- }); |
- |
- assertEquals("The browser process should not have been initialized.", 0, |
- mController.initializedCounter()); |
- |
- // Wait for callbacks to complete. |
- getInstrumentation().waitForIdleSync(); |
- } |
- |
-} |