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 3 // found in the LICENSE file. 4 5 package org.chromium.android_webview.test; 6 7 import android.support.test.InstrumentationRegistry; 8 9 import androidx.test.filters.SmallTest; 10 11 import org.junit.Assert; 12 import org.junit.Rule; 13 import org.junit.Test; 14 import org.junit.runner.RunWith; 15 16 import org.chromium.android_webview.AwContentsLifecycleNotifier; 17 import org.chromium.base.test.util.CallbackHelper; 18 import org.chromium.base.test.util.Feature; 19 20 /** 21 * AwContentsLifecycleNotifier tests. 22 */ 23 @RunWith(AwJUnit4ClassRunner.class) 24 public class AwContentsLifecycleNotifierTest { 25 @Rule 26 public AwActivityTestRule mActivityTestRule = new AwActivityTestRule(); 27 28 private TestAwContentsClient mContentsClient = new TestAwContentsClient(); 29 30 private static class LifecycleObserver implements AwContentsLifecycleNotifier.Observer { 31 public CallbackHelper mFirstWebViewCreatedCallback = new CallbackHelper(); 32 public CallbackHelper mLastWebViewDestroyedCallback = new CallbackHelper(); 33 34 @Override onFirstWebViewCreated()35 public void onFirstWebViewCreated() { 36 mFirstWebViewCreatedCallback.notifyCalled(); 37 } 38 39 @Override onLastWebViewDestroyed()40 public void onLastWebViewDestroyed() { 41 mLastWebViewDestroyedCallback.notifyCalled(); 42 } 43 } 44 45 @Test 46 @SmallTest 47 @Feature({"AndroidWebView"}) testNotifierCreate()48 public void testNotifierCreate() throws Throwable { 49 LifecycleObserver observer = new LifecycleObserver(); 50 AwContentsLifecycleNotifier.addObserver(observer); 51 Assert.assertFalse(AwContentsLifecycleNotifier.hasWebViewInstances()); 52 53 AwTestContainerView awTestContainerView = 54 mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient); 55 observer.mFirstWebViewCreatedCallback.waitForCallback(0, 1); 56 Assert.assertTrue(AwContentsLifecycleNotifier.hasWebViewInstances()); 57 58 InstrumentationRegistry.getInstrumentation().runOnMainSync( 59 () -> mActivityTestRule.getActivity().removeAllViews()); 60 mActivityTestRule.destroyAwContentsOnMainSync(awTestContainerView.getAwContents()); 61 observer.mLastWebViewDestroyedCallback.waitForCallback(0, 1); 62 Assert.assertFalse(AwContentsLifecycleNotifier.hasWebViewInstances()); 63 } 64 } 65