ShadowWebView.java revision 3892868c17d4ed48ccf77e25c2cef9bf3b1c82dc
19ef88bf39bff29cb39dee4d84542c8f5a6178748Tyler Schultzpackage com.xtremelabs.robolectric.shadows; 29ef88bf39bff29cb39dee4d84542c8f5a6178748Tyler Schultz 39ef88bf39bff29cb39dee4d84542c8f5a6178748Tyler Schultzimport android.content.Context; 49ef88bf39bff29cb39dee4d84542c8f5a6178748Tyler Schultzimport android.util.AttributeSet; 5258aab42887fa7a6d29fe862eb883c62deafde0cGreg Choi & Mike Graftonimport android.webkit.WebChromeClient; 622ae9206e660fd187ff79a529452dbe2bab504fdRich Humphreyimport android.webkit.WebSettings; 79ef88bf39bff29cb39dee4d84542c8f5a6178748Tyler Schultzimport android.webkit.WebView; 8fbdac5127ba5b6b879408a0a6ae4ac30e2456d8cRich Humphreyimport android.webkit.WebViewClient; 922ae9206e660fd187ff79a529452dbe2bab504fdRich Humphreyimport com.xtremelabs.robolectric.Robolectric; 1022c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implementation; 1122c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implements; 129ef88bf39bff29cb39dee4d84542c8f5a6178748Tyler Schultz 1340c6251719cccc0a84ae99c976d2836b14374ce6Christian Williamsimport java.util.HashMap; 1440c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams 159ef88bf39bff29cb39dee4d84542c8f5a6178748Tyler Schultz@SuppressWarnings({"UnusedDeclaration"}) 169ef88bf39bff29cb39dee4d84542c8f5a6178748Tyler Schultz@Implements(WebView.class) 179ef88bf39bff29cb39dee4d84542c8f5a6178748Tyler Schultzpublic class ShadowWebView extends ShadowAbsoluteLayout { 189ef88bf39bff29cb39dee4d84542c8f5a6178748Tyler Schultz 196cf9d6f657e61d727afc221dd157ae6ca41714baTyler Schultz private String lastUrl; 2040c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams private HashMap<String, Object> javascriptInterfaces = new HashMap<String, Object>(); 2122ae9206e660fd187ff79a529452dbe2bab504fdRich Humphrey private WebSettings webSettings = Robolectric.newInstanceOf(WebSettings.class); 22fbdac5127ba5b6b879408a0a6ae4ac30e2456d8cRich Humphrey private WebViewClient webViewClient = null; 2337c667d06608e4bebd0f45ffbf1555ce5bd30493Zoodles private boolean runFlag = false; 248455cc9031f98a53ad469ebe4b9d92511af8b54fRich Humphrey private boolean clearCacheCalled = false; 258455cc9031f98a53ad469ebe4b9d92511af8b54fRich Humphrey private boolean clearCacheIncludeDiskFiles = false; 269677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey private boolean clearFormDataCalled = false; 279677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey private boolean clearHistoryCalled = false; 289677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey private boolean clearViewCalled = false; 299677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey private boolean destroyCalled = false; 30258aab42887fa7a6d29fe862eb883c62deafde0cGreg Choi & Mike Grafton private WebChromeClient webChromeClient; 313892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz private boolean canGoBack; 323892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz private int goBackInvocations = 0; 336cf9d6f657e61d727afc221dd157ae6ca41714baTyler Schultz 343892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz @Override 353892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz public void __constructor__(Context context, AttributeSet attributeSet) { 369ef88bf39bff29cb39dee4d84542c8f5a6178748Tyler Schultz super.__constructor__(context, attributeSet); 379ef88bf39bff29cb39dee4d84542c8f5a6178748Tyler Schultz } 386cf9d6f657e61d727afc221dd157ae6ca41714baTyler Schultz 396cf9d6f657e61d727afc221dd157ae6ca41714baTyler Schultz @Implementation 406cf9d6f657e61d727afc221dd157ae6ca41714baTyler Schultz public void loadUrl(String url) { 416cf9d6f657e61d727afc221dd157ae6ca41714baTyler Schultz lastUrl = url; 426cf9d6f657e61d727afc221dd157ae6ca41714baTyler Schultz } 4340c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams 4431811e1435d6c72ee6c324ca49769159e80fcd93Tyler Schultz /** 4531811e1435d6c72ee6c324ca49769159e80fcd93Tyler Schultz * Non-Android accessor. 4631811e1435d6c72ee6c324ca49769159e80fcd93Tyler Schultz * 4731811e1435d6c72ee6c324ca49769159e80fcd93Tyler Schultz * @return the last loaded url 4831811e1435d6c72ee6c324ca49769159e80fcd93Tyler Schultz */ 496cf9d6f657e61d727afc221dd157ae6ca41714baTyler Schultz public String getLastLoadedUrl() { 506cf9d6f657e61d727afc221dd157ae6ca41714baTyler Schultz return lastUrl; 516cf9d6f657e61d727afc221dd157ae6ca41714baTyler Schultz } 5240c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams 5340c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams @Implementation 54fbdac5127ba5b6b879408a0a6ae4ac30e2456d8cRich Humphrey public WebSettings getSettings() { 5540c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams return webSettings; 56fbdac5127ba5b6b879408a0a6ae4ac30e2456d8cRich Humphrey } 57fbdac5127ba5b6b879408a0a6ae4ac30e2456d8cRich Humphrey 58fbdac5127ba5b6b879408a0a6ae4ac30e2456d8cRich Humphrey @Implementation 59fbdac5127ba5b6b879408a0a6ae4ac30e2456d8cRich Humphrey public void setWebViewClient(WebViewClient client) { 6040c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams webViewClient = client; 61fbdac5127ba5b6b879408a0a6ae4ac30e2456d8cRich Humphrey } 6240c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams 63258aab42887fa7a6d29fe862eb883c62deafde0cGreg Choi & Mike Grafton @Implementation 64258aab42887fa7a6d29fe862eb883c62deafde0cGreg Choi & Mike Grafton public void setWebChromeClient(WebChromeClient client) { 65258aab42887fa7a6d29fe862eb883c62deafde0cGreg Choi & Mike Grafton webChromeClient = client; 66258aab42887fa7a6d29fe862eb883c62deafde0cGreg Choi & Mike Grafton } 67258aab42887fa7a6d29fe862eb883c62deafde0cGreg Choi & Mike Grafton 68fbdac5127ba5b6b879408a0a6ae4ac30e2456d8cRich Humphrey public WebViewClient getWebViewClient() { 6940c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams return webViewClient; 70fbdac5127ba5b6b879408a0a6ae4ac30e2456d8cRich Humphrey } 7140c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams 72fbdac5127ba5b6b879408a0a6ae4ac30e2456d8cRich Humphrey @Implementation 73fbdac5127ba5b6b879408a0a6ae4ac30e2456d8cRich Humphrey public void addJavascriptInterface(Object obj, String interfaceName) { 7440c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams javascriptInterfaces.put(interfaceName, obj); 75fbdac5127ba5b6b879408a0a6ae4ac30e2456d8cRich Humphrey } 7640c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams 77fbdac5127ba5b6b879408a0a6ae4ac30e2456d8cRich Humphrey public Object getJavascriptInterface(String interfaceName) { 7840c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams return javascriptInterfaces.get(interfaceName); 7940c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams } 803892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz 8137c667d06608e4bebd0f45ffbf1555ce5bd30493Zoodles @Implementation 829677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey public void clearCache(boolean includeDiskFiles) { 833892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz clearCacheCalled = true; 843892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz clearCacheIncludeDiskFiles = includeDiskFiles; 858455cc9031f98a53ad469ebe4b9d92511af8b54fRich Humphrey } 863892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz 878455cc9031f98a53ad469ebe4b9d92511af8b54fRich Humphrey public boolean wasClearCacheCalled() { 883892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz return clearCacheCalled; 898455cc9031f98a53ad469ebe4b9d92511af8b54fRich Humphrey } 903892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz 918455cc9031f98a53ad469ebe4b9d92511af8b54fRich Humphrey public boolean didClearCacheIncludeDiskFiles() { 923892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz return clearCacheIncludeDiskFiles; 938455cc9031f98a53ad469ebe4b9d92511af8b54fRich Humphrey } 943892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz 958455cc9031f98a53ad469ebe4b9d92511af8b54fRich Humphrey @Implementation 969677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey public void clearFormData() { 973892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz clearFormDataCalled = true; 989677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey } 993892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz 1009677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey public boolean wasClearFormDataCalled() { 1013892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz return clearFormDataCalled; 1029677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey } 1033892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz 1049677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey @Implementation 1059677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey public void clearHistory() { 1063892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz clearHistoryCalled = true; 1079677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey } 1083892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz 1099677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey public boolean wasClearHistoryCalled() { 1103892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz return clearHistoryCalled; 1119677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey } 1123892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz 1139677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey @Implementation 1149677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey public void clearView() { 1153892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz clearViewCalled = true; 1169677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey } 1173892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz 1189677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey public boolean wasClearViewCalled() { 1193892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz return clearViewCalled; 1203892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz } 1213892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz 1229677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey @Implementation 1239677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey public void destroy() { 1243892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz destroyCalled = true; 1259677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey } 1263892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz 1279677b3a80b929a57a7ee1d4301d5e9ffb51f3182Rich Humphrey public boolean wasDestroyCalled() { 1283892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz return destroyCalled; 1293892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz } 1303892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz 1313892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz @Implementation 13237c667d06608e4bebd0f45ffbf1555ce5bd30493Zoodles public void post(Runnable action) { 1333892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz action.run(); 1343892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz runFlag = true; 13537c667d06608e4bebd0f45ffbf1555ce5bd30493Zoodles } 1363892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz 13737c667d06608e4bebd0f45ffbf1555ce5bd30493Zoodles public boolean getRunFlag() { 1383892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz return runFlag; 13937c667d06608e4bebd0f45ffbf1555ce5bd30493Zoodles } 140258aab42887fa7a6d29fe862eb883c62deafde0cGreg Choi & Mike Grafton 1413892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz 1423892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz /** 1433892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz * Non-Android accessor. 1443892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz * 1453892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz * @return webChromeClient 1463892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz */ 147258aab42887fa7a6d29fe862eb883c62deafde0cGreg Choi & Mike Grafton public WebChromeClient getWebChromeClient() { 148258aab42887fa7a6d29fe862eb883c62deafde0cGreg Choi & Mike Grafton return webChromeClient; 149258aab42887fa7a6d29fe862eb883c62deafde0cGreg Choi & Mike Grafton } 1503892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz 1513892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz @Implementation 1523892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz public boolean canGoBack() { 1533892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz return canGoBack; 1543892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz } 1553892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz 1563892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz @Implementation 1573892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz public void goBack() { 1583892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz goBackInvocations++; 1593892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz } 1603892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz 1613892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz 1623892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz /** 1633892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz * Non-Android accessor. 1643892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz * 1653892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz * @return goBackInvocations the number of times {@code android.webkit.WebView#goBack()} 1663892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz * was invoked 1673892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz */ 1683892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz public int getGoBackInvocations() { 1693892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz return goBackInvocations; 1703892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz } 1713892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz 1723892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz /** 1733892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz * Non-Android setter. 1743892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz * 1753892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz * Sets the value to return from {@code android.webkit.WebView#canGoBack()} 1763892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz * 1773892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz * @param canGoBack 1783892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz */ 1793892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz public void setCanGoBack(boolean canGoBack) { 1803892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz this.canGoBack = canGoBack; 1813892868c17d4ed48ccf77e25c2cef9bf3b1c82dcMike Mazur & Tyler Schultz } 1829ef88bf39bff29cb39dee4d84542c8f5a6178748Tyler Schultz} 183