WebContentsObserverAndroidTest.java revision 5f1c94371a64b3196d4be9466099bb892df9b88e
1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file. 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)package org.chromium.content.browser; 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuimport android.test.suitebuilder.annotation.SmallTest; 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuimport org.chromium.base.ThreadUtils; 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)import org.chromium.base.test.util.Feature; 11e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochimport org.chromium.base.test.util.UrlUtils; 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuimport org.chromium.content.browser.test.util.CallbackHelper; 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import org.chromium.content_public.browser.WebContents; 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuimport org.chromium.content_shell_apk.ContentShellActivity; 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuimport org.chromium.content_shell_apk.ContentShellTestBase; 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuimport java.util.concurrent.Callable; 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)/** 2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) * Tests for the WebContentsObserverAndroid APIs. 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)public class WebContentsObserverAndroidTest extends ContentShellTestBase { 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private static final String URL = UrlUtils.encodeHtmlDataUri( 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) "<html><head></head><body>didFirstVisuallyNonEmptyPaint test</body></html>"); 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private static class TestWebContentsObserverAndroid extends WebContentsObserverAndroid { 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private CallbackHelper mDidFirstVisuallyNonEmptyPaintCallbackHelper = new CallbackHelper(); 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public TestWebContentsObserverAndroid(WebContents webContents) { 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) super(webContents); 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) } 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public CallbackHelper getDidFirstVisuallyNonEmptyPaintCallbackHelper() { 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return mDidFirstVisuallyNonEmptyPaintCallbackHelper; 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu @Override 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public void didFirstVisuallyNonEmptyPaint() { 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu mDidFirstVisuallyNonEmptyPaintCallbackHelper.notifyCalled(); 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu @Override 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu protected void setUp() throws Exception { 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu super.setUp(); 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ContentShellActivity activity = launchContentShellWithUrl(null); 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu assertNotNull(activity); 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu waitForActiveShellToBeDoneLoading(); 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu @SmallTest 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu @Feature({"Navigation"}) 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public void testDidFirstVisuallyNonEmptyPaint() throws Throwable { 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu TestWebContentsObserverAndroid observer = ThreadUtils.runOnUiThreadBlocking( 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu new Callable<TestWebContentsObserverAndroid>() { 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu @Override 575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public TestWebContentsObserverAndroid call() throws Exception { 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return new TestWebContentsObserverAndroid( 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu getContentViewCore().getWebContents()); 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }); 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int callCount = observer.getDidFirstVisuallyNonEmptyPaintCallbackHelper().getCallCount(); 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu getInstrumentation().runOnMainSync(new Runnable() { 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu @Override 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu public void run() { 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu getContentViewCore().loadUrl(new LoadUrlParams(URL)); 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }); 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu observer.getDidFirstVisuallyNonEmptyPaintCallbackHelper().waitForCallback(callCount); 715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu