1b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun/* 2b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Copyright (C) 2014 The Android Open Source Project 3b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * 4b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Licensed under the Apache License, Version 2.0 (the "License"); 5b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * you may not use this file except in compliance with the License. 6b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * You may obtain a copy of the License at 7b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * 8b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * http://www.apache.org/licenses/LICENSE-2.0 9b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * 10b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Unless required by applicable law or agreed to in writing, software 11b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * distributed under the License is distributed on an "AS IS" BASIS, 12b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * See the License for the specific language governing permissions and 14b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * limitations under the License. 15b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */ 16b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun 17b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurunpackage android.webkit; 18b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun 19b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurunimport java.security.Principal; 20b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurunimport java.security.PrivateKey; 21b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurunimport java.security.cert.X509Certificate; 22b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun 23b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun/** 24b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * ClientCertRequest: The user receives an instance of this class as 25b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * a parameter of {@link WebViewClient#onReceivedClientCertRequest}. 26b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * The request includes the parameters to choose the client certificate, 27b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * such as the host name and the port number requesting the cert, the acceptable 28b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * key types and the principals. 29b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * 30ee89ab4dd5fa92dbbda255cf74537c44f74e1483Selim Gurun * The user should call one of the class methods to indicate how to deal 31b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * with the client certificate request. All methods should be called on 32b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * UI thread. 33b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * 34b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * WebView caches the {@link #proceed} and {@link #cancel} responses in memory 35b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * and uses them to handle future client certificate requests for the same 36b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * host/port pair. The user can clear the cached data using 37b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * {@link WebView#clearClientCertPreferences}. 38b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * 39b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */ 40ee89ab4dd5fa92dbbda255cf74537c44f74e1483Selim Gurunpublic abstract class ClientCertRequest { 41ee89ab4dd5fa92dbbda255cf74537c44f74e1483Selim Gurun 42ee89ab4dd5fa92dbbda255cf74537c44f74e1483Selim Gurun public ClientCertRequest() { } 43ee89ab4dd5fa92dbbda255cf74537c44f74e1483Selim Gurun 44b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun /** 45b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Returns the acceptable types of asymmetric keys (can be null). 46b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */ 47ee89ab4dd5fa92dbbda255cf74537c44f74e1483Selim Gurun public abstract String[] getKeyTypes(); 48b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun 49b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun /** 50b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Returns the acceptable certificate issuers for the certificate 51b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * matching the private key (can be null). 52b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */ 53ee89ab4dd5fa92dbbda255cf74537c44f74e1483Selim Gurun public abstract Principal[] getPrincipals(); 54b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun 55b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun /** 56b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Returns the host name of the server requesting the certificate. 57b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */ 58ee89ab4dd5fa92dbbda255cf74537c44f74e1483Selim Gurun public abstract String getHost(); 59b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun 60b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun /** 61b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Returns the port number of the server requesting the certificate. 62b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */ 63ee89ab4dd5fa92dbbda255cf74537c44f74e1483Selim Gurun public abstract int getPort(); 64b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun 65b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun /** 66b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Proceed with the specified private key and client certificate chain. 67b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Remember the user's positive choice and use it for future requests. 68b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */ 69ee89ab4dd5fa92dbbda255cf74537c44f74e1483Selim Gurun public abstract void proceed(PrivateKey privateKey, X509Certificate[] chain); 70b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun 71b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun /** 72b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Ignore the request for now. Do not remember user's choice. 73b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */ 74ee89ab4dd5fa92dbbda255cf74537c44f74e1483Selim Gurun public abstract void ignore(); 75b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun 76b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun /** 77b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * Cancel this request. Remember the user's choice and use it for 78b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun * future requests. 79b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun */ 80ee89ab4dd5fa92dbbda255cf74537c44f74e1483Selim Gurun public abstract void cancel(); 81b6aa97e0a0cd13846c148716fc0c7947422cea04Selim Gurun} 82