| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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.content.browser; | 5 package org.chromium.content.browser; |
| 6 | 6 |
| 7 import android.content.Context; | 7 import android.content.Context; |
| 8 import android.test.InstrumentationTestCase; | 8 import android.test.InstrumentationTestCase; |
| 9 import android.test.suitebuilder.annotation.SmallTest; | 9 import android.test.suitebuilder.annotation.SmallTest; |
| 10 | 10 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 } | 30 } |
| 31 } | 31 } |
| 32 | 32 |
| 33 private TestBrowserStartupController(Context context) { | 33 private TestBrowserStartupController(Context context) { |
| 34 super(context); | 34 super(context); |
| 35 } | 35 } |
| 36 | 36 |
| 37 @Override | 37 @Override |
| 38 int contentStart() { | 38 int contentStart() { |
| 39 mInitializedCounter++; | 39 mInitializedCounter++; |
| 40 if(BrowserStartupController.browserMayStartAsynchonously()) { | 40 if (BrowserStartupController.browserMayStartAsynchonously()) { |
| 41 // Post to the UI thread to emulate what would happen in a real
scenario. | 41 // Post to the UI thread to emulate what would happen in a real
scenario. |
| 42 ThreadUtils.postOnUiThread(new Runnable() { | 42 ThreadUtils.postOnUiThread(new Runnable() { |
| 43 @Override | 43 @Override |
| 44 public void run() { | 44 public void run() { |
| 45 BrowserStartupController.browserStartupComplete(mStartup
Result); | 45 BrowserStartupController.browserStartupComplete(mStartup
Result); |
| 46 } | 46 } |
| 47 }); | 47 }); |
| 48 } else { | 48 } else { |
| 49 BrowserStartupController.browserStartupComplete(mStartupResult); | 49 BrowserStartupController.browserStartupComplete(mStartupResult); |
| 50 } | 50 } |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 @SmallTest | 92 @SmallTest |
| 93 public void testSingleAsynchronousStartupRequest() { | 93 public void testSingleAsynchronousStartupRequest() { |
| 94 mController.mStartupResult = BrowserStartupController.STARTUP_SUCCESS; | 94 mController.mStartupResult = BrowserStartupController.STARTUP_SUCCESS; |
| 95 mController.mLibraryLoadSucceeds = true; | 95 mController.mLibraryLoadSucceeds = true; |
| 96 final TestStartupCallback callback = new TestStartupCallback(); | 96 final TestStartupCallback callback = new TestStartupCallback(); |
| 97 | 97 |
| 98 // Kick off the asynchronous startup request. | 98 // Kick off the asynchronous startup request. |
| 99 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 99 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 100 @Override | 100 @Override |
| 101 public void run() { | 101 public void run() { |
| 102 mController.startBrowserProcessesAsync(callback); | 102 try { |
| 103 mController.startBrowserProcessesAsync(callback); |
| 104 } catch (Exception e) { |
| 105 fail("Browser should have started successfully"); |
| 106 } |
| 103 } | 107 } |
| 104 }); | 108 }); |
| 105 | 109 |
| 106 assertTrue("Asynchronous mode should have been set.", | 110 assertTrue("Asynchronous mode should have been set.", |
| 107 BrowserStartupController.browserMayStartAsynchonously()); | 111 BrowserStartupController.browserMayStartAsynchonously()); |
| 108 assertEquals("The browser process should have been initialized one time.
", | 112 assertEquals("The browser process should have been initialized one time.
", 1, |
| 109 1, mController.initializedCounter()); | 113 mController.initializedCounter()); |
| 110 | 114 |
| 111 // Wait for callbacks to complete. | 115 // Wait for callbacks to complete. |
| 112 getInstrumentation().waitForIdleSync(); | 116 getInstrumentation().waitForIdleSync(); |
| 113 | 117 |
| 114 assertTrue("Callback should have been executed.", callback.mHasStartupRe
sult); | 118 assertTrue("Callback should have been executed.", callback.mHasStartupRe
sult); |
| 115 assertTrue("Callback should have been a success.", callback.mWasSuccess)
; | 119 assertTrue("Callback should have been a success.", callback.mWasSuccess)
; |
| 116 assertFalse("Callback should be told that the browser process was not al
ready started.", | 120 assertFalse("Callback should be told that the browser process was not al
ready started.", |
| 117 callback.mAlreadyStarted); | 121 callback.mAlreadyStarted); |
| 118 } | 122 } |
| 119 | 123 |
| 120 @SmallTest | 124 @SmallTest |
| 121 public void testMultipleAsynchronousStartupRequests() { | 125 public void testMultipleAsynchronousStartupRequests() { |
| 122 mController.mStartupResult = BrowserStartupController.STARTUP_SUCCESS; | 126 mController.mStartupResult = BrowserStartupController.STARTUP_SUCCESS; |
| 123 mController.mLibraryLoadSucceeds = true; | 127 mController.mLibraryLoadSucceeds = true; |
| 124 final TestStartupCallback callback1 = new TestStartupCallback(); | 128 final TestStartupCallback callback1 = new TestStartupCallback(); |
| 125 final TestStartupCallback callback2 = new TestStartupCallback(); | 129 final TestStartupCallback callback2 = new TestStartupCallback(); |
| 126 final TestStartupCallback callback3 = new TestStartupCallback(); | 130 final TestStartupCallback callback3 = new TestStartupCallback(); |
| 127 | 131 |
| 128 // Kick off the asynchronous startup requests. | 132 // Kick off the asynchronous startup requests. |
| 129 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 133 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 130 @Override | 134 @Override |
| 131 public void run() { | 135 public void run() { |
| 132 mController.startBrowserProcessesAsync(callback1); | 136 try { |
| 137 mController.startBrowserProcessesAsync(callback1); |
| 138 } catch (Exception e) { |
| 139 fail("Browser should have started successfully"); |
| 140 } |
| 133 } | 141 } |
| 134 }); | 142 }); |
| 135 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 143 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 136 @Override | 144 @Override |
| 137 public void run() { | 145 public void run() { |
| 138 mController.startBrowserProcessesAsync(callback2); | 146 try { |
| 147 mController.startBrowserProcessesAsync(callback2); |
| 148 } catch (Exception e) { |
| 149 fail("Browser should have started successfully"); |
| 150 } |
| 139 } | 151 } |
| 140 }); | 152 }); |
| 141 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 153 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 142 @Override | 154 @Override |
| 143 public void run() { | 155 public void run() { |
| 144 mController.addStartupCompletedObserver(callback3); | 156 mController.addStartupCompletedObserver(callback3); |
| 145 } | 157 } |
| 146 }); | 158 }); |
| 147 | 159 |
| 148 assertTrue("Asynchronous mode should have been set.", | 160 assertTrue("Asynchronous mode should have been set.", |
| 149 BrowserStartupController.browserMayStartAsynchonously()); | 161 BrowserStartupController.browserMayStartAsynchonously()); |
| 150 assertEquals("The browser process should have been initialized one time.
", | 162 assertEquals("The browser process should have been initialized one time.
", 1, |
| 151 1, mController.initializedCounter()); | 163 mController.initializedCounter()); |
| 152 | 164 |
| 153 // Wait for callbacks to complete. | 165 // Wait for callbacks to complete. |
| 154 getInstrumentation().waitForIdleSync(); | 166 getInstrumentation().waitForIdleSync(); |
| 155 | 167 |
| 156 assertTrue("Callback 1 should have been executed.", callback1.mHasStartu
pResult); | 168 assertTrue("Callback 1 should have been executed.", callback1.mHasStartu
pResult); |
| 157 assertTrue("Callback 1 should have been a success.", callback1.mWasSucce
ss); | 169 assertTrue("Callback 1 should have been a success.", callback1.mWasSucce
ss); |
| 158 assertTrue("Callback 2 should have been executed.", callback2.mHasStartu
pResult); | 170 assertTrue("Callback 2 should have been executed.", callback2.mHasStartu
pResult); |
| 159 assertTrue("Callback 2 should have been a success.", callback2.mWasSucce
ss); | 171 assertTrue("Callback 2 should have been a success.", callback2.mWasSucce
ss); |
| 160 assertTrue("Callback 3 should have been executed.", callback3.mHasStartu
pResult); | 172 assertTrue("Callback 3 should have been executed.", callback3.mHasStartu
pResult); |
| 161 assertTrue("Callback 3 should have been a success.", callback3.mWasSucce
ss); | 173 assertTrue("Callback 3 should have been a success.", callback3.mWasSucce
ss); |
| 162 // Some startup tasks might have been enqueued after the browser process
was started, but | 174 // Some startup tasks might have been enqueued after the browser process
was started, but |
| 163 // not the first one which kicked of the startup. | 175 // not the first one which kicked of the startup. |
| 164 assertFalse("Callback 1 should be told that the browser process was not
already started.", | 176 assertFalse("Callback 1 should be told that the browser process was not
already started.", |
| 165 callback1.mAlreadyStarted); | 177 callback1.mAlreadyStarted); |
| 166 } | 178 } |
| 167 | 179 |
| 168 @SmallTest | 180 @SmallTest |
| 169 public void testConsecutiveAsynchronousStartupRequests() { | 181 public void testConsecutiveAsynchronousStartupRequests() { |
| 170 mController.mStartupResult = BrowserStartupController.STARTUP_SUCCESS; | 182 mController.mStartupResult = BrowserStartupController.STARTUP_SUCCESS; |
| 171 mController.mLibraryLoadSucceeds = true; | 183 mController.mLibraryLoadSucceeds = true; |
| 172 final TestStartupCallback callback1 = new TestStartupCallback(); | 184 final TestStartupCallback callback1 = new TestStartupCallback(); |
| 173 final TestStartupCallback callback2 = new TestStartupCallback(); | 185 final TestStartupCallback callback2 = new TestStartupCallback(); |
| 174 | 186 |
| 175 // Kick off the asynchronous startup requests. | 187 // Kick off the asynchronous startup requests. |
| 176 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 188 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 177 @Override | 189 @Override |
| 178 public void run() { | 190 public void run() { |
| 179 mController.startBrowserProcessesAsync(callback1); | 191 try { |
| 192 mController.startBrowserProcessesAsync(callback1); |
| 193 } catch (Exception e) { |
| 194 fail("Browser should have started successfully"); |
| 195 } |
| 180 } | 196 } |
| 181 }); | 197 }); |
| 182 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 198 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 183 @Override | 199 @Override |
| 184 public void run() { | 200 public void run() { |
| 185 mController.addStartupCompletedObserver(callback2); | 201 mController.addStartupCompletedObserver(callback2); |
| 186 } | 202 } |
| 187 }); | 203 }); |
| 188 | 204 |
| 189 assertTrue("Asynchronous mode should have been set.", | 205 assertTrue("Asynchronous mode should have been set.", |
| 190 BrowserStartupController.browserMayStartAsynchonously()); | 206 BrowserStartupController.browserMayStartAsynchonously()); |
| 191 assertEquals("The browser process should have been initialized one time.
", | 207 assertEquals("The browser process should have been initialized one time.
", 1, |
| 192 1, mController.initializedCounter()); | 208 mController.initializedCounter()); |
| 193 | 209 |
| 194 // Wait for callbacks to complete. | 210 // Wait for callbacks to complete. |
| 195 getInstrumentation().waitForIdleSync(); | 211 getInstrumentation().waitForIdleSync(); |
| 196 | 212 |
| 197 assertTrue("Callback 1 should have been executed.", callback1.mHasStartu
pResult); | 213 assertTrue("Callback 1 should have been executed.", callback1.mHasStartu
pResult); |
| 198 assertTrue("Callback 1 should have been a success.", callback1.mWasSucce
ss); | 214 assertTrue("Callback 1 should have been a success.", callback1.mWasSucce
ss); |
| 199 assertTrue("Callback 2 should have been executed.", callback2.mHasStartu
pResult); | 215 assertTrue("Callback 2 should have been executed.", callback2.mHasStartu
pResult); |
| 200 assertTrue("Callback 2 should have been a success.", callback2.mWasSucce
ss); | 216 assertTrue("Callback 2 should have been a success.", callback2.mWasSucce
ss); |
| 201 | 217 |
| 202 final TestStartupCallback callback3 = new TestStartupCallback(); | 218 final TestStartupCallback callback3 = new TestStartupCallback(); |
| 203 final TestStartupCallback callback4 = new TestStartupCallback(); | 219 final TestStartupCallback callback4 = new TestStartupCallback(); |
| 204 | 220 |
| 205 // Kick off more asynchronous startup requests. | 221 // Kick off more asynchronous startup requests. |
| 206 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 222 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 207 @Override | 223 @Override |
| 208 public void run() { | 224 public void run() { |
| 209 mController.startBrowserProcessesAsync(callback3); | 225 try { |
| 226 mController.startBrowserProcessesAsync(callback3); |
| 227 } catch (Exception e) { |
| 228 fail("Browser should have started successfully"); |
| 229 } |
| 210 } | 230 } |
| 211 }); | 231 }); |
| 212 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 232 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 213 @Override | 233 @Override |
| 214 public void run() { | 234 public void run() { |
| 215 mController.addStartupCompletedObserver(callback4); | 235 mController.addStartupCompletedObserver(callback4); |
| 216 } | 236 } |
| 217 }); | 237 }); |
| 218 | 238 |
| 219 // Wait for callbacks to complete. | 239 // Wait for callbacks to complete. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 232 @SmallTest | 252 @SmallTest |
| 233 public void testSingleFailedAsynchronousStartupRequest() { | 253 public void testSingleFailedAsynchronousStartupRequest() { |
| 234 mController.mStartupResult = BrowserStartupController.STARTUP_FAILURE; | 254 mController.mStartupResult = BrowserStartupController.STARTUP_FAILURE; |
| 235 mController.mLibraryLoadSucceeds = true; | 255 mController.mLibraryLoadSucceeds = true; |
| 236 final TestStartupCallback callback = new TestStartupCallback(); | 256 final TestStartupCallback callback = new TestStartupCallback(); |
| 237 | 257 |
| 238 // Kick off the asynchronous startup request. | 258 // Kick off the asynchronous startup request. |
| 239 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 259 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 240 @Override | 260 @Override |
| 241 public void run() { | 261 public void run() { |
| 242 mController.startBrowserProcessesAsync(callback); | 262 try { |
| 263 mController.startBrowserProcessesAsync(callback); |
| 264 } catch (Exception e) { |
| 265 fail("Browser should have started successfully"); |
| 266 } |
| 243 } | 267 } |
| 244 }); | 268 }); |
| 245 | 269 |
| 246 assertTrue("Asynchronous mode should have been set.", | 270 assertTrue("Asynchronous mode should have been set.", |
| 247 BrowserStartupController.browserMayStartAsynchonously()); | 271 BrowserStartupController.browserMayStartAsynchonously()); |
| 248 assertEquals("The browser process should have been initialized one time.
", | 272 assertEquals("The browser process should have been initialized one time.
", 1, |
| 249 1, mController.initializedCounter()); | 273 mController.initializedCounter()); |
| 250 | 274 |
| 251 // Wait for callbacks to complete. | 275 // Wait for callbacks to complete. |
| 252 getInstrumentation().waitForIdleSync(); | 276 getInstrumentation().waitForIdleSync(); |
| 253 | 277 |
| 254 assertTrue("Callback should have been executed.", callback.mHasStartupRe
sult); | 278 assertTrue("Callback should have been executed.", callback.mHasStartupRe
sult); |
| 255 assertTrue("Callback should have been a failure.", callback.mWasFailure)
; | 279 assertTrue("Callback should have been a failure.", callback.mWasFailure)
; |
| 256 } | 280 } |
| 257 | 281 |
| 258 @SmallTest | 282 @SmallTest |
| 259 public void testConsecutiveFailedAsynchronousStartupRequests() { | 283 public void testConsecutiveFailedAsynchronousStartupRequests() { |
| 260 mController.mStartupResult = BrowserStartupController.STARTUP_FAILURE; | 284 mController.mStartupResult = BrowserStartupController.STARTUP_FAILURE; |
| 261 mController.mLibraryLoadSucceeds = true; | 285 mController.mLibraryLoadSucceeds = true; |
| 262 final TestStartupCallback callback1 = new TestStartupCallback(); | 286 final TestStartupCallback callback1 = new TestStartupCallback(); |
| 263 final TestStartupCallback callback2 = new TestStartupCallback(); | 287 final TestStartupCallback callback2 = new TestStartupCallback(); |
| 264 | 288 |
| 265 // Kick off the asynchronous startup requests. | 289 // Kick off the asynchronous startup requests. |
| 266 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 290 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 267 @Override | 291 @Override |
| 268 public void run() { | 292 public void run() { |
| 269 mController.startBrowserProcessesAsync(callback1); | 293 try { |
| 294 mController.startBrowserProcessesAsync(callback1); |
| 295 } catch (Exception e) { |
| 296 fail("Browser should have started successfully"); |
| 297 } |
| 270 } | 298 } |
| 271 }); | 299 }); |
| 272 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 300 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 273 @Override | 301 @Override |
| 274 public void run() { | 302 public void run() { |
| 275 mController.addStartupCompletedObserver(callback2); | 303 mController.addStartupCompletedObserver(callback2); |
| 276 } | 304 } |
| 277 }); | 305 }); |
| 278 | 306 |
| 279 assertTrue("Asynchronous mode should have been set.", | 307 assertTrue("Asynchronous mode should have been set.", |
| 280 BrowserStartupController.browserMayStartAsynchonously()); | 308 BrowserStartupController.browserMayStartAsynchonously()); |
| 281 assertEquals("The browser process should have been initialized one time.
", | 309 assertEquals("The browser process should have been initialized one time.
", 1, |
| 282 1, mController.initializedCounter()); | 310 mController.initializedCounter()); |
| 283 | 311 |
| 284 // Wait for callbacks to complete. | 312 // Wait for callbacks to complete. |
| 285 getInstrumentation().waitForIdleSync(); | 313 getInstrumentation().waitForIdleSync(); |
| 286 | 314 |
| 287 assertTrue("Callback 1 should have been executed.", callback1.mHasStartu
pResult); | 315 assertTrue("Callback 1 should have been executed.", callback1.mHasStartu
pResult); |
| 288 assertTrue("Callback 1 should have been a failure.", callback1.mWasFailu
re); | 316 assertTrue("Callback 1 should have been a failure.", callback1.mWasFailu
re); |
| 289 assertTrue("Callback 2 should have been executed.", callback2.mHasStartu
pResult); | 317 assertTrue("Callback 2 should have been executed.", callback2.mHasStartu
pResult); |
| 290 assertTrue("Callback 2 should have been a failure.", callback2.mWasFailu
re); | 318 assertTrue("Callback 2 should have been a failure.", callback2.mWasFailu
re); |
| 291 | 319 |
| 292 final TestStartupCallback callback3 = new TestStartupCallback(); | 320 final TestStartupCallback callback3 = new TestStartupCallback(); |
| 293 final TestStartupCallback callback4 = new TestStartupCallback(); | 321 final TestStartupCallback callback4 = new TestStartupCallback(); |
| 294 | 322 |
| 295 // Kick off more asynchronous startup requests. | 323 // Kick off more asynchronous startup requests. |
| 296 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 324 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 297 @Override | 325 @Override |
| 298 public void run() { | 326 public void run() { |
| 299 mController.startBrowserProcessesAsync(callback3); | 327 try { |
| 328 mController.startBrowserProcessesAsync(callback3); |
| 329 } catch (Exception e) { |
| 330 fail("Browser should have started successfully"); |
| 331 } |
| 300 } | 332 } |
| 301 }); | 333 }); |
| 302 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 334 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 303 @Override | 335 @Override |
| 304 public void run() { | 336 public void run() { |
| 305 mController.addStartupCompletedObserver(callback4); | 337 mController.addStartupCompletedObserver(callback4); |
| 306 } | 338 } |
| 307 }); | 339 }); |
| 308 | 340 |
| 309 // Wait for callbacks to complete. | 341 // Wait for callbacks to complete. |
| 310 getInstrumentation().waitForIdleSync(); | 342 getInstrumentation().waitForIdleSync(); |
| 311 | 343 |
| 312 assertTrue("Callback 3 should have been executed.", callback3.mHasStartu
pResult); | 344 assertTrue("Callback 3 should have been executed.", callback3.mHasStartu
pResult); |
| 313 assertTrue("Callback 3 should have been a failure.", callback3.mWasFailu
re); | 345 assertTrue("Callback 3 should have been a failure.", callback3.mWasFailu
re); |
| 314 assertTrue("Callback 4 should have been executed.", callback4.mHasStartu
pResult); | 346 assertTrue("Callback 4 should have been executed.", callback4.mHasStartu
pResult); |
| 315 assertTrue("Callback 4 should have been a failure.", callback4.mWasFailu
re); | 347 assertTrue("Callback 4 should have been a failure.", callback4.mWasFailu
re); |
| 316 } | 348 } |
| 317 | 349 |
| 318 @SmallTest | 350 @SmallTest |
| 319 public void testSingleSynchronousRequest() { | 351 public void testSingleSynchronousRequest() { |
| 320 mController.mStartupResult = BrowserStartupController.STARTUP_SUCCESS; | 352 mController.mStartupResult = BrowserStartupController.STARTUP_SUCCESS; |
| 321 mController.mLibraryLoadSucceeds = true; | 353 mController.mLibraryLoadSucceeds = true; |
| 322 // Kick off the synchronous startup. | 354 // Kick off the synchronous startup. |
| 323 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 355 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 324 @Override | 356 @Override |
| 325 public void run() { | 357 public void run() { |
| 326 assertTrue("Browser should have started successfully", | 358 try { |
| 327 mController.startBrowserProcessesSync(1)); | 359 mController.startBrowserProcessesSync(1); |
| 360 } catch (Exception e) { |
| 361 fail("Browser should have started successfully"); |
| 362 } |
| 328 } | 363 } |
| 329 }); | 364 }); |
| 330 assertFalse("Synchronous mode should have been set", | 365 assertFalse("Synchronous mode should have been set", |
| 331 BrowserStartupController.browserMayStartAsynchonously()); | 366 BrowserStartupController.browserMayStartAsynchonously()); |
| 332 | 367 |
| 333 assertEquals("The browser process should have been initialized one time.
", | 368 assertEquals("The browser process should have been initialized one time.
", 1, |
| 334 1, mController.initializedCounter()); | 369 mController.initializedCounter()); |
| 335 } | 370 } |
| 336 | 371 |
| 337 @SmallTest | 372 @SmallTest |
| 338 public void testAsyncThenSyncRequests() { | 373 public void testAsyncThenSyncRequests() { |
| 339 mController.mStartupResult = BrowserStartupController.STARTUP_SUCCESS; | 374 mController.mStartupResult = BrowserStartupController.STARTUP_SUCCESS; |
| 340 mController.mLibraryLoadSucceeds = true; | 375 mController.mLibraryLoadSucceeds = true; |
| 341 final TestStartupCallback callback = new TestStartupCallback(); | 376 final TestStartupCallback callback = new TestStartupCallback(); |
| 342 | 377 |
| 343 // Kick off the startups. | 378 // Kick off the startups. |
| 344 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 379 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 345 @Override | 380 @Override |
| 346 public void run() { | 381 public void run() { |
| 347 mController.startBrowserProcessesAsync(callback); | 382 try { |
| 383 mController.startBrowserProcessesAsync(callback); |
| 384 } catch (Exception e) { |
| 385 fail("Browser should have started successfully"); |
| 386 } |
| 348 // To ensure that the async startup doesn't complete too soon we
have | 387 // To ensure that the async startup doesn't complete too soon we
have |
| 349 // to do both these in a since Runnable instance. This avoids th
e | 388 // to do both these in a since Runnable instance. This avoids th
e |
| 350 // unpredictable race that happens in real situations. | 389 // unpredictable race that happens in real situations. |
| 351 assertTrue("Browser should have started successfully", | 390 try { |
| 352 mController.startBrowserProcessesSync(1)); | 391 mController.startBrowserProcessesSync(1); |
| 392 } catch (Exception e) { |
| 393 fail("Browser should have started successfully"); |
| 394 } |
| 353 } | 395 } |
| 354 }); | 396 }); |
| 355 assertFalse("Synchronous mode should have been set", | 397 assertFalse("Synchronous mode should have been set", |
| 356 BrowserStartupController.browserMayStartAsynchonously()); | 398 BrowserStartupController.browserMayStartAsynchonously()); |
| 357 | 399 |
| 358 assertEquals("The browser process should have been initialized twice.", | 400 assertEquals("The browser process should have been initialized twice.",
2, |
| 359 2, mController.initializedCounter()); | 401 mController.initializedCounter()); |
| 360 | 402 |
| 361 assertTrue("Callback should have been executed.", callback.mHasStartupRe
sult); | 403 assertTrue("Callback should have been executed.", callback.mHasStartupRe
sult); |
| 362 assertTrue("Callback should have been a success.", callback.mWasSuccess)
; | 404 assertTrue("Callback should have been a success.", callback.mWasSuccess)
; |
| 363 assertFalse("Callback should be told that the browser process was not al
ready started.", | 405 assertFalse("Callback should be told that the browser process was not al
ready started.", |
| 364 callback.mAlreadyStarted); | 406 callback.mAlreadyStarted); |
| 365 } | 407 } |
| 366 | 408 |
| 367 @SmallTest | 409 @SmallTest |
| 368 public void testSyncThenAsyncRequests() { | 410 public void testSyncThenAsyncRequests() { |
| 369 mController.mStartupResult = BrowserStartupController.STARTUP_SUCCESS; | 411 mController.mStartupResult = BrowserStartupController.STARTUP_SUCCESS; |
| 370 mController.mLibraryLoadSucceeds = true; | 412 mController.mLibraryLoadSucceeds = true; |
| 371 final TestStartupCallback callback = new TestStartupCallback(); | 413 final TestStartupCallback callback = new TestStartupCallback(); |
| 372 | 414 |
| 373 // Do a synchronous startup first. | 415 // Do a synchronous startup first. |
| 374 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 416 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 375 @Override | 417 @Override |
| 376 public void run() { | 418 public void run() { |
| 377 assertTrue("Browser should have started successfully", | 419 try { |
| 378 mController.startBrowserProcessesSync(1)); | 420 mController.startBrowserProcessesSync(1); |
| 421 } catch (Exception e) { |
| 422 fail("Browser should have started successfully"); |
| 423 } |
| 379 } | 424 } |
| 380 }); | 425 }); |
| 381 | 426 |
| 382 assertEquals("The browser process should have been initialized once.", | 427 assertEquals("The browser process should have been initialized once.", 1
, |
| 383 1, mController.initializedCounter()); | 428 mController.initializedCounter()); |
| 384 | 429 |
| 385 assertFalse("Synchronous mode should have been set", | 430 assertFalse("Synchronous mode should have been set", |
| 386 BrowserStartupController.browserMayStartAsynchonously()); | 431 BrowserStartupController.browserMayStartAsynchonously()); |
| 387 | 432 |
| 388 // Kick off the asynchronous startup request. This should just queue the
callback. | 433 // Kick off the asynchronous startup request. This should just queue the
callback. |
| 389 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 434 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 390 @Override | 435 @Override |
| 391 public void run() { | 436 public void run() { |
| 392 mController.startBrowserProcessesAsync(callback); | 437 try { |
| 438 mController.startBrowserProcessesAsync(callback); |
| 439 } catch (Exception e) { |
| 440 fail("Browser should have started successfully"); |
| 441 } |
| 393 } | 442 } |
| 394 }); | 443 }); |
| 395 | 444 |
| 396 assertEquals("The browser process should not have been initialized a sec
ond time.", | 445 assertEquals("The browser process should not have been initialized a sec
ond time.", 1, |
| 397 1, mController.initializedCounter()); | 446 mController.initializedCounter()); |
| 398 | 447 |
| 399 // Wait for callbacks to complete. | 448 // Wait for callbacks to complete. |
| 400 getInstrumentation().waitForIdleSync(); | 449 getInstrumentation().waitForIdleSync(); |
| 401 | 450 |
| 402 assertTrue("Callback should have been executed.", callback.mHasStartupRe
sult); | 451 assertTrue("Callback should have been executed.", callback.mHasStartupRe
sult); |
| 403 assertTrue("Callback should have been a success.", callback.mWasSuccess)
; | 452 assertTrue("Callback should have been a success.", callback.mWasSuccess)
; |
| 404 assertTrue("Callback should be told that the browser process was already
started.", | 453 assertTrue("Callback should be told that the browser process was already
started.", |
| 405 callback.mAlreadyStarted); | 454 callback.mAlreadyStarted); |
| 406 } | 455 } |
| 407 | 456 |
| 408 @SmallTest | 457 @SmallTest |
| 409 public void testLibraryLoadFails() { | 458 public void testLibraryLoadFails() { |
| 410 mController.mLibraryLoadSucceeds = false; | 459 mController.mLibraryLoadSucceeds = false; |
| 411 final TestStartupCallback callback = new TestStartupCallback(); | 460 final TestStartupCallback callback = new TestStartupCallback(); |
| 412 | 461 |
| 413 // Kick off the asynchronous startup request. | 462 // Kick off the asynchronous startup request. |
| 414 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 463 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 415 @Override | 464 @Override |
| 416 public void run() { | 465 public void run() { |
| 417 mController.startBrowserProcessesAsync(callback); | 466 try { |
| 467 mController.startBrowserProcessesAsync(callback); |
| 468 } catch (Exception e) { |
| 469 fail("Browser should have started successfully"); |
| 470 } |
| 418 } | 471 } |
| 419 }); | 472 }); |
| 420 | 473 |
| 421 assertEquals("The browser process should not have been initialized.", | 474 assertEquals("The browser process should not have been initialized.", 0, |
| 422 0, mController.initializedCounter()); | 475 mController.initializedCounter()); |
| 423 | 476 |
| 424 // Wait for callbacks to complete. | 477 // Wait for callbacks to complete. |
| 425 getInstrumentation().waitForIdleSync(); | 478 getInstrumentation().waitForIdleSync(); |
| 426 | 479 |
| 427 assertTrue("Callback should have been executed.", callback.mHasStartupRe
sult); | 480 assertTrue("Callback should have been executed.", callback.mHasStartupRe
sult); |
| 428 assertFalse("Callback should have been a failure.", callback.mWasSuccess
); | 481 assertFalse("Callback should have been a failure.", callback.mWasSuccess
); |
| 429 assertFalse("Callback should be told that the browser process was not al
ready started.", | 482 assertFalse("Callback should be told that the browser process was not al
ready started.", |
| 430 callback.mAlreadyStarted); | 483 callback.mAlreadyStarted); |
| 431 } | 484 } |
| 432 | 485 |
| 433 } | 486 } |
| OLD | NEW |