ContentViewMiscTest.java revision a3f7b4e666c476898878fa745f637129375cd889
1// Copyright (c) 2012 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
5package org.chromium.android_webview.test;
6
7import android.content.BroadcastReceiver;
8import android.content.Context;
9import android.content.Intent;
10import android.content.IntentFilter;
11import android.net.Proxy;
12import android.test.FlakyTest;
13import android.test.mock.MockContext;
14import android.test.suitebuilder.annotation.SmallTest;
15
16import org.chromium.android_webview.AwContents;
17import org.chromium.base.test.util.DisabledTest;
18import org.chromium.base.test.util.Feature;
19import org.chromium.base.test.util.UrlUtils;
20import org.chromium.base.ThreadUtils;
21import org.chromium.content.browser.ContentViewCore;
22import org.chromium.content.browser.ContentViewStatics;
23import org.chromium.net.ProxyChangeListener;
24
25import java.util.concurrent.atomic.AtomicBoolean;
26import java.util.concurrent.atomic.AtomicReference;
27import java.util.concurrent.Callable;
28
29/**
30 *  Tests for ContentView methods that don't fall into any other category.
31 */
32public class ContentViewMiscTest extends AwTestBase {
33
34    private TestAwContentsClient mContentsClient;
35    private AwContents mAwContents;
36    private ContentViewCore mContentViewCore;
37
38    @Override
39    public void setUp() throws Exception {
40        super.setUp();
41        mContentsClient = new TestAwContentsClient();
42        final AwTestContainerView testContainerView =
43                createAwTestContainerViewOnMainSync(mContentsClient);
44        mAwContents = testContainerView.getAwContents();
45        mContentViewCore = testContainerView.getContentViewCore();
46    }
47
48    @SmallTest
49    @Feature({"AndroidWebView"})
50    public void testFindAddress() {
51        assertNull(ContentViewStatics.findAddress("This is some random text"));
52
53        String googleAddr = "1600 Amphitheatre Pkwy, Mountain View, CA 94043";
54        assertEquals(googleAddr, ContentViewStatics.findAddress(googleAddr));
55    }
56
57    @SmallTest
58    @Feature({"AndroidWebView"})
59    public void testEnableDisablePlatformNotifications() {
60
61        // Set up mock contexts to use with the listener
62        final AtomicReference<BroadcastReceiver> receiverRef =
63                new AtomicReference<BroadcastReceiver>();
64        final MockContext appContext = new MockContext() {
65            @Override
66            public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
67                receiverRef.set(receiver);
68                return null;
69            }
70        };
71        final MockContext context = new MockContext() {
72            @Override
73            public Context getApplicationContext() {
74                return appContext;
75            }
76        };
77
78        // Set up a delegate so we know when native code is about to get
79        // informed of a proxy change.
80        final AtomicBoolean proxyChanged = new AtomicBoolean();
81        final ProxyChangeListener.Delegate delegate = new ProxyChangeListener.Delegate() {
82            @Override
83            public void proxySettingsChanged() {
84                proxyChanged.set(true);
85            }
86        };
87        Intent intent = new Intent();
88        intent.setAction(Proxy.PROXY_CHANGE_ACTION);
89
90        // Create the listener that's going to be used for the test
91        ProxyChangeListener listener = ProxyChangeListener.create(context);
92        listener.setDelegateForTesting(delegate);
93        listener.start(0);
94
95        // Start the actual tests
96
97        // Make sure everything works by default
98        proxyChanged.set(false);
99        receiverRef.get().onReceive(context, intent);
100        assertEquals(true, proxyChanged.get());
101
102        // Now disable platform notifications and make sure we don't notify
103        // native code.
104        proxyChanged.set(false);
105        ContentViewStatics.disablePlatformNotifications();
106        receiverRef.get().onReceive(context, intent);
107        assertEquals(false, proxyChanged.get());
108
109        // Now re-enable notifications to make sure they work again.
110        ContentViewStatics.enablePlatformNotifications();
111        receiverRef.get().onReceive(context, intent);
112        assertEquals(true, proxyChanged.get());
113    }
114}
115