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..e043a42ec02dd25b17ce6f42164b945112b26f86 |
--- /dev/null |
+++ b/android_webview/java/src/org/chromium/android_webview/SslCertLookupTable.java |
@@ -0,0 +1,58 @@ |
+// 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. |
benm (inactive)
2013/02/04 17:27:46
singleton
sgurun-gerrit only
2013/02/21 23:32:32
Done.
|
+ * This class is not threadsafe. Used on the UI thread. |
+ */ |
+final class SslCertLookupTable { |
+ private static SslCertLookupTable sTable; |
benm (inactive)
2013/02/04 17:27:46
sInstance?
sgurun-gerrit only
2013/02/21 23:32:32
Done.
|
+ // We store the most severe error we're willing to allow for each host. |
+ private final Bundle table; |
benm (inactive)
2013/02/04 17:27:46
mTable? But a table of what exactly? I think the n
sgurun-gerrit only
2013/02/21 23:32:32
Done.
|
+ |
+ 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(); |
+ } |
+} |