| Index: android_webview/java/src/org/chromium/android_webview/SslCertLookupTable.java
|
| diff --git a/android_webview/java/src/org/chromium/android_webview/SslCertLookupTable.java b/android_webview/java/src/org/chromium/android_webview/SslCertLookupTable.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f3fed5f3ef1c0854ac56cd201b26f526666dc2fb
|
| --- /dev/null
|
| +++ b/android_webview/java/src/org/chromium/android_webview/SslCertLookupTable.java
|
| @@ -0,0 +1,60 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package org.chromium.android_webview;
|
| +
|
| +import android.os.Bundle;
|
| +import android.net.http.SslError;
|
| +
|
| +import java.net.MalformedURLException;
|
| +import java.net.URL;
|
| +
|
| +/**
|
| + * Stores the user's decision of whether to allow or deny an invalid certificate.
|
| + *
|
| + * This class is not threadsafe. It is used only on the WebCore thread. Also, it
|
| + * is used only by the Chromium HTTP stack.
|
| + */
|
| +final class SslCertLookupTable {
|
| + private static SslCertLookupTable sTable;
|
| + // We store the most severe error we're willing to allow for each host.
|
| + private final Bundle table;
|
| +
|
| + public static SslCertLookupTable getInstance() {
|
| + if (sTable == null) {
|
| + sTable = new SslCertLookupTable();
|
| + }
|
| + return sTable;
|
| + }
|
| +
|
| + private SslCertLookupTable() {
|
| + table = new Bundle();
|
| + }
|
| +
|
| + public void setIsAllowed(SslError sslError) {
|
| + String host;
|
| + try {
|
| + host = new URL(sslError.getUrl()).getHost();
|
| + } catch(MalformedURLException e) {
|
| + return;
|
| + }
|
| + table.putInt(host, sslError.getPrimaryError());
|
| + }
|
| +
|
| + // We allow the decision to be re-used if it's for the same host and is for
|
| + // an error of equal or greater severity than this error.
|
| + public boolean isAllowed(SslError sslError) {
|
| + String host;
|
| + try {
|
| + host = new URL(sslError.getUrl()).getHost();
|
| + } catch(MalformedURLException e) {
|
| + return false;
|
| + }
|
| + return table.containsKey(host) && sslError.getPrimaryError() <= table.getInt(host);
|
| + }
|
| +
|
| + public void clear() {
|
| + table.clear();
|
| + }
|
| +}
|
|
|