1 /* 2 * Copyright (C) 2012 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.webkit; 18 19 import android.annotation.NonNull; 20 import android.annotation.SystemApi; 21 import android.content.Context; 22 import android.content.Intent; 23 import android.net.Network; 24 import android.net.Uri; 25 26 import java.util.List; 27 28 /** 29 * This is the main entry-point into the WebView back end implementations, which the WebView 30 * proxy class uses to instantiate all the other objects as needed. The backend must provide an 31 * implementation of this interface, and make it available to the WebView via mechanism TBD. 32 * @hide 33 */ 34 @SystemApi 35 public interface WebViewFactoryProvider { 36 /** 37 * This Interface provides glue for implementing the backend of WebView static methods which 38 * cannot be implemented in-situ in the proxy class. 39 */ 40 interface Statics { 41 /** 42 * Implements the API method: 43 * {@link android.webkit.WebView#findAddress(String)} 44 */ findAddress(String addr)45 String findAddress(String addr); 46 47 /** 48 * Implements the API method: 49 * {@link android.webkit.WebSettings#getDefaultUserAgent(Context) } 50 */ getDefaultUserAgent(Context context)51 String getDefaultUserAgent(Context context); 52 53 /** 54 * Used for tests only. 55 */ freeMemoryForTests()56 void freeMemoryForTests(); 57 58 /** 59 * Implements the API method: 60 * {@link android.webkit.WebView#setWebContentsDebuggingEnabled(boolean) } 61 */ setWebContentsDebuggingEnabled(boolean enable)62 void setWebContentsDebuggingEnabled(boolean enable); 63 64 /** 65 * Implements the API method: 66 * {@link android.webkit.WebView#clearClientCertPreferences(Runnable) } 67 */ clearClientCertPreferences(Runnable onCleared)68 void clearClientCertPreferences(Runnable onCleared); 69 70 /** 71 * Implements the API method: 72 * {@link android.webkit.WebView#setSlowWholeDocumentDrawEnabled(boolean) } 73 */ enableSlowWholeDocumentDraw()74 void enableSlowWholeDocumentDraw(); 75 76 /** 77 * Implement the API method 78 * {@link android.webkit.WebChromeClient.FileChooserParams#parseResult(int, Intent)} 79 */ parseFileChooserResult(int resultCode, Intent intent)80 Uri[] parseFileChooserResult(int resultCode, Intent intent); 81 82 /** 83 * Implement the API method 84 * {@link android.webkit.WebView#startSafeBrowsing(Context , ValueCallback<Boolean>)} 85 */ initSafeBrowsing(Context context, ValueCallback<Boolean> callback)86 void initSafeBrowsing(Context context, ValueCallback<Boolean> callback); 87 88 /** 89 * Implement the API method 90 * {@link android.webkit.WebView#setSafeBrowsingWhitelist(List<String>, 91 * ValueCallback<Boolean>)} 92 */ setSafeBrowsingWhitelist(List<String> hosts, ValueCallback<Boolean> callback)93 void setSafeBrowsingWhitelist(List<String> hosts, ValueCallback<Boolean> callback); 94 95 /** 96 * Implement the API method 97 * {@link android.webkit.WebView#getSafeBrowsingPrivacyPolicyUrl()} 98 */ 99 @NonNull getSafeBrowsingPrivacyPolicyUrl()100 Uri getSafeBrowsingPrivacyPolicyUrl(); 101 } 102 getStatics()103 Statics getStatics(); 104 105 /** 106 * Construct a new WebViewProvider. 107 * @param webView the WebView instance bound to this implementation instance. Note it will not 108 * necessarily be fully constructed at the point of this call: defer real initialization to 109 * WebViewProvider.init(). 110 * @param privateAccess provides access into WebView internal methods. 111 */ createWebView(WebView webView, WebView.PrivateAccess privateAccess)112 WebViewProvider createWebView(WebView webView, WebView.PrivateAccess privateAccess); 113 114 /** 115 * Gets the singleton GeolocationPermissions instance for this WebView implementation. The 116 * implementation must return the same instance on subsequent calls. 117 * @return the single GeolocationPermissions instance. 118 */ getGeolocationPermissions()119 GeolocationPermissions getGeolocationPermissions(); 120 121 /** 122 * Gets the singleton CookieManager instance for this WebView implementation. The 123 * implementation must return the same instance on subsequent calls. 124 * 125 * @return the singleton CookieManager instance 126 */ getCookieManager()127 CookieManager getCookieManager(); 128 129 /** 130 * Gets the TokenBindingService instance for this WebView implementation. The 131 * implementation must return the same instance on subsequent calls. 132 * 133 * @deprecated this method only returns {@code null} 134 * @return the TokenBindingService instance (which is always {@code null}) 135 */ getTokenBindingService()136 TokenBindingService getTokenBindingService(); 137 138 /** 139 * Gets the TracingController instance for this WebView implementation. The 140 * implementation must return the same instance on subsequent calls. 141 * 142 * @return the TracingController instance 143 */ getTracingController()144 TracingController getTracingController(); 145 146 /** 147 * Gets the ServiceWorkerController instance for this WebView implementation. The 148 * implementation must return the same instance on subsequent calls. 149 * 150 * @return the ServiceWorkerController instance 151 */ getServiceWorkerController()152 ServiceWorkerController getServiceWorkerController(); 153 154 /** 155 * Gets the singleton WebIconDatabase instance for this WebView implementation. The 156 * implementation must return the same instance on subsequent calls. 157 * 158 * @return the singleton WebIconDatabase instance 159 */ getWebIconDatabase()160 WebIconDatabase getWebIconDatabase(); 161 162 /** 163 * Gets the singleton WebStorage instance for this WebView implementation. The 164 * implementation must return the same instance on subsequent calls. 165 * 166 * @return the singleton WebStorage instance 167 */ getWebStorage()168 WebStorage getWebStorage(); 169 170 /** 171 * Gets the singleton WebViewDatabase instance for this WebView implementation. The 172 * implementation must return the same instance on subsequent calls. 173 * 174 * @return the singleton WebViewDatabase instance 175 */ getWebViewDatabase(Context context)176 WebViewDatabase getWebViewDatabase(Context context); 177 178 /** 179 * Gets the default PacProcessor instance. 180 * @return the PacProcessor instance 181 */ 182 @NonNull getPacProcessor()183 default PacProcessor getPacProcessor() { 184 throw new UnsupportedOperationException("Not implemented"); 185 } 186 187 /** 188 * Create a new PacProcessor instance. 189 * 190 * @param network a {@link Network} which needs to be associated 191 * with the returned {@link PacProcessor}. 192 * If {@code null} the method returns default {@link PacProcessor}. 193 * @return the {@link PacProcessor} instance associated with {@link Network}. 194 */ 195 @NonNull createPacProcessor()196 default PacProcessor createPacProcessor() { 197 throw new UnsupportedOperationException("Not implemented"); 198 } 199 200 /** 201 * Gets the classloader used to load internal WebView implementation classes. This interface 202 * should only be used by the WebView Support Library. 203 */ getWebViewClassLoader()204 ClassLoader getWebViewClassLoader(); 205 } 206