Chromium Code Reviews| 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..897f0825c96f6a8cc352e53687a6f1c141eecbe0 |
| --- /dev/null |
| +++ b/android_webview/java/src/org/chromium/android_webview/SslCertLookupTable.java |
| @@ -0,0 +1,60 @@ |
| +// Copyright (c) 2013 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 |
|
boliu
2013/02/01 20:03:23
say UI thread, (same thing, but it's the chromium
Kristian Monsen
2013/02/01 20:51:12
And remove reference to Chromium HTTP stack.
sgurun-gerrit only
2013/02/01 22:08:00
Another good catch. I don't see any reason to talk
|
| + * 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(); |
| + } |
| +} |