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