TestCallbackHelperContainer.java revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
1ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Copyright 2012 The Chromium Authors. All rights reserved. 2ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// found in the LICENSE file. 4ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)package org.chromium.content.browser.test.util; 6ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)import org.chromium.content.browser.ContentView; 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)import org.chromium.content.browser.ContentViewCore; 10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 11ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochimport java.util.concurrent.TimeUnit; 12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import java.util.concurrent.TimeoutException; 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)/** 15ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * This class is used to provide callback hooks for tests and related classes. 16558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch */ 17558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochpublic class TestCallbackHelperContainer { 18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch private final TestContentViewClient mTestContentViewClient; 19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch private final TestWebContentsObserver mTestWebContentsObserver; 20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public TestCallbackHelperContainer(ContentView contentView) { 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu mTestContentViewClient = new TestContentViewClient(); 23ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch contentView.getContentViewCore().setContentViewClient(mTestContentViewClient); 24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch mTestWebContentsObserver = new TestWebContentsObserver(contentView.getContentViewCore()); 25ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 26ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 27ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch protected TestCallbackHelperContainer( 28ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch TestContentViewClient viewClient, TestWebContentsObserver contentsObserver) { 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mTestContentViewClient = viewClient; 30d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) mTestWebContentsObserver = contentsObserver; 31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 32ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 33ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public static class OnPageFinishedHelper extends CallbackHelper { 34ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch private String mUrl; 35ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public void notifyCalled(String url) { 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) mUrl = url; 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) notifyCalled(); 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public String getUrl() { 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) assert getCallCount() > 0; 41ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return mUrl; 42ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 44ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 45ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public static class OnPageStartedHelper extends CallbackHelper { 46ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch private String mUrl; 47ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public void notifyCalled(String url) { 48ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch mUrl = url; 49ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch notifyCalled(); 50ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public String getUrl() { 52ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch assert getCallCount() > 0; 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return mUrl; 54ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 55ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 56ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 57ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public static class OnReceivedErrorHelper extends CallbackHelper { 58ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch private int mErrorCode; 59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) private String mDescription; 60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) private String mFailingUrl; 61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public void notifyCalled(int errorCode, String description, String failingUrl) { 62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) mErrorCode = errorCode; 63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) mDescription = description; 64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) mFailingUrl = failingUrl; 65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) notifyCalled(); 66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public int getErrorCode() { 68ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch assert getCallCount() > 0; 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return mErrorCode; 70ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 71ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public String getDescription() { 72ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch assert getCallCount() > 0; 73ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return mDescription; 74ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 75a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public String getFailingUrl() { 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) assert getCallCount() > 0; 77c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return mFailingUrl; 78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 81ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public static class OnEvaluateJavaScriptResultHelper extends CallbackHelper { 824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private String mJsonResult; 83a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 84ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** 85ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Starts evaluation of a given JavaScript code on a given contentViewCore. 86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * @param contentViewCore A ContentViewCore instance to be used. 87ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * @param code A JavaScript code to be evaluated. 88c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch */ 89c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void evaluateJavaScript(ContentViewCore contentViewCore, String code) { 90c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ContentViewCore.JavaScriptCallback callback = 91c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch new ContentViewCore.JavaScriptCallback() { 9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) @Override 93a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public void handleJavaScriptResult(String jsonResult) { 94ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch notifyCalled(jsonResult); 9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 96ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch }; 97ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch contentViewCore.evaluateJavaScript(code, callback); 9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) mJsonResult = null; 99ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 101ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** 102ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Returns true if the evaluation started by evaluateJavaScript() has completed. 103ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch */ 104ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public boolean hasValue() { 10558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return mJsonResult != null; 106ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 107ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 108ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** 109a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * Returns the JSON result of a previously completed JavaScript evaluation and 110ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * resets the helper to accept new evaluations. 111ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * @return String JSON result of a previously completed JavaScript evaluation. 112c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch */ 113ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public String getJsonResultAndClear() { 114ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch assert hasValue(); 115ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch String result = mJsonResult; 116c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mJsonResult = null; 117ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return result; 118ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 119ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 120ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 121ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch /** 122ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * Returns a criteria that checks that the evaluation has finished. 123a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) */ 124ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public Criteria getHasValueCriteria() { 125010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return new Criteria() { 126010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) @Override 127010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public boolean isSatisfied() { 128010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return hasValue(); 129ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 130010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) }; 131010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 132010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 133010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) /** 134010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * Waits till the JavaScript evaluation finishes and returns true if a value was returned, 135010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * false if it timed-out. 136010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) */ 137010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public boolean waitUntilHasValue(long timeout, TimeUnit timeoutUnits) 138ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch throws InterruptedException, TimeoutException { 139010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) waitUntilCriteria(getHasValueCriteria(), timeout, timeoutUnits); 140010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return hasValue(); 141010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 142ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 143ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public boolean waitUntilHasValue() throws InterruptedException, TimeoutException { 144010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) waitUntilCriteria(getHasValueCriteria()); 145010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return hasValue(); 146ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 147ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 148ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public void notifyCalled(String jsonResult) { 149010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) assert !hasValue(); 150ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch mJsonResult = jsonResult; 151ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch notifyCalled(); 152ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 155ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public static class OnStartContentIntentHelper extends CallbackHelper { 156010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) private String mIntentUrl; 157010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public void notifyCalled(String intentUrl) { 158ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch mIntentUrl = intentUrl; 159ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch notifyCalled(); 160a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 161a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public String getIntentUrl() { 162a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) assert getCallCount() > 0; 163ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return mIntentUrl; 164ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 165ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 166ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public OnPageStartedHelper getOnPageStartedHelper() { 168ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return mTestWebContentsObserver.getOnPageStartedHelper(); 169c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 170ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 171ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public OnPageFinishedHelper getOnPageFinishedHelper() { 1724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return mTestWebContentsObserver.getOnPageFinishedHelper(); 173ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 174ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 175a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public OnReceivedErrorHelper getOnReceivedErrorHelper() { 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return mTestWebContentsObserver.getOnReceivedErrorHelper(); 17746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 17846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public OnStartContentIntentHelper getOnStartContentIntentHelper() { 180effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return mTestContentViewClient.getOnStartContentIntentHelper(); 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 182a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 183a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)