summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHui Shu <hush@google.com>2014-12-12 12:04:53 -0800
committerPaul Miller <paulmiller@google.com>2014-12-15 14:26:02 -0800
commit83109aa23599e63402ee03cd93f67d3ff874e241 (patch)
treebf2fb2365b59581adc77071e09b32e77f86e137b
parent366f592b24e7eed6d8f10b4a68d8f0dca4f3dddf (diff)
downloadchromium_org-83109aa23599e63402ee03cd93f67d3ff874e241.tar.gz
Remember user's decisions on SSL errors.
Cherry pick from https://codereview.chromium.org/794023002 Original description: After CL: https://codereview.chromium.org/369703002, Android WebView just has a NULL SSLHostStateDelegate. So it does not remember any user decisions on SSL errors. This is a regression of behavior from L (m37). History: JB behavior: Larger error codes are assumed to have higher severity. And if the user has allowed an SSL error with a high severity, the user won't be prompted for a lower severity SSL error. K and L behavior: A specific SSL error will be allowed only if the error bit field is a subset of previously allowed error codes. trunk behavior for webview (without this patch): We don't remember user's decision at all. This CL: Maintain the same behavior with K and L. Conflicts: android_webview/browser/aw_browser_context.h android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java android_webview/javatests/src/org/chromium/android_webview/test/TestAwContentsClient.java BUG: 18665047 Change-Id: I0ecbc0b78e9323ef911cd61679fec5e4a6146489
-rw-r--r--android_webview/android_webview.gyp2
-rw-r--r--android_webview/android_webview_common.target.darwin-arm.mk1
-rw-r--r--android_webview/android_webview_common.target.darwin-arm64.mk1
-rw-r--r--android_webview/android_webview_common.target.darwin-mips.mk1
-rw-r--r--android_webview/android_webview_common.target.darwin-x86.mk1
-rw-r--r--android_webview/android_webview_common.target.darwin-x86_64.mk1
-rw-r--r--android_webview/android_webview_common.target.linux-arm.mk1
-rw-r--r--android_webview/android_webview_common.target.linux-arm64.mk1
-rw-r--r--android_webview/android_webview_common.target.linux-mips.mk1
-rw-r--r--android_webview/android_webview_common.target.linux-x86.mk1
-rw-r--r--android_webview/android_webview_common.target.linux-x86_64.mk1
-rw-r--r--android_webview/browser/aw_browser_context.cc5
-rw-r--r--android_webview/browser/aw_browser_context.h2
-rw-r--r--android_webview/browser/aw_ssl_host_state_delegate.cc89
-rw-r--r--android_webview/browser/aw_ssl_host_state_delegate.h77
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java50
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/TestAwContentsClient.java26
17 files changed, 257 insertions, 4 deletions
diff --git a/android_webview/android_webview.gyp b/android_webview/android_webview.gyp
index ec1436dd85..c91ceeddfe 100644
--- a/android_webview/android_webview.gyp
+++ b/android_webview/android_webview.gyp
@@ -122,6 +122,8 @@
'browser/aw_request_interceptor.h',
'browser/aw_resource_context.cc',
'browser/aw_resource_context.h',
+ 'browser/aw_ssl_host_state_delegate.cc',
+ 'browser/aw_ssl_host_state_delegate.h',
'browser/aw_result_codes.h',
'browser/aw_web_preferences_populater.cc',
'browser/aw_web_preferences_populater.h',
diff --git a/android_webview/android_webview_common.target.darwin-arm.mk b/android_webview/android_webview_common.target.darwin-arm.mk
index 100e3279fa..064bf4e75c 100644
--- a/android_webview/android_webview_common.target.darwin-arm.mk
+++ b/android_webview/android_webview_common.target.darwin-arm.mk
@@ -46,6 +46,7 @@ LOCAL_SRC_FILES := \
android_webview/browser/aw_quota_permission_context.cc \
android_webview/browser/aw_request_interceptor.cc \
android_webview/browser/aw_resource_context.cc \
+ android_webview/browser/aw_ssl_host_state_delegate.cc \
android_webview/browser/aw_web_preferences_populater.cc \
android_webview/browser/aw_web_resource_response.cc \
android_webview/browser/browser_view_renderer.cc \
diff --git a/android_webview/android_webview_common.target.darwin-arm64.mk b/android_webview/android_webview_common.target.darwin-arm64.mk
index 7873d2e494..b60d543221 100644
--- a/android_webview/android_webview_common.target.darwin-arm64.mk
+++ b/android_webview/android_webview_common.target.darwin-arm64.mk
@@ -46,6 +46,7 @@ LOCAL_SRC_FILES := \
android_webview/browser/aw_quota_permission_context.cc \
android_webview/browser/aw_request_interceptor.cc \
android_webview/browser/aw_resource_context.cc \
+ android_webview/browser/aw_ssl_host_state_delegate.cc \
android_webview/browser/aw_web_preferences_populater.cc \
android_webview/browser/aw_web_resource_response.cc \
android_webview/browser/browser_view_renderer.cc \
diff --git a/android_webview/android_webview_common.target.darwin-mips.mk b/android_webview/android_webview_common.target.darwin-mips.mk
index 3a97f2d88f..88b816fd9b 100644
--- a/android_webview/android_webview_common.target.darwin-mips.mk
+++ b/android_webview/android_webview_common.target.darwin-mips.mk
@@ -46,6 +46,7 @@ LOCAL_SRC_FILES := \
android_webview/browser/aw_quota_permission_context.cc \
android_webview/browser/aw_request_interceptor.cc \
android_webview/browser/aw_resource_context.cc \
+ android_webview/browser/aw_ssl_host_state_delegate.cc \
android_webview/browser/aw_web_preferences_populater.cc \
android_webview/browser/aw_web_resource_response.cc \
android_webview/browser/browser_view_renderer.cc \
diff --git a/android_webview/android_webview_common.target.darwin-x86.mk b/android_webview/android_webview_common.target.darwin-x86.mk
index e66d988187..5c79f51b72 100644
--- a/android_webview/android_webview_common.target.darwin-x86.mk
+++ b/android_webview/android_webview_common.target.darwin-x86.mk
@@ -46,6 +46,7 @@ LOCAL_SRC_FILES := \
android_webview/browser/aw_quota_permission_context.cc \
android_webview/browser/aw_request_interceptor.cc \
android_webview/browser/aw_resource_context.cc \
+ android_webview/browser/aw_ssl_host_state_delegate.cc \
android_webview/browser/aw_web_preferences_populater.cc \
android_webview/browser/aw_web_resource_response.cc \
android_webview/browser/browser_view_renderer.cc \
diff --git a/android_webview/android_webview_common.target.darwin-x86_64.mk b/android_webview/android_webview_common.target.darwin-x86_64.mk
index 7d32438fde..fc8c7d09aa 100644
--- a/android_webview/android_webview_common.target.darwin-x86_64.mk
+++ b/android_webview/android_webview_common.target.darwin-x86_64.mk
@@ -46,6 +46,7 @@ LOCAL_SRC_FILES := \
android_webview/browser/aw_quota_permission_context.cc \
android_webview/browser/aw_request_interceptor.cc \
android_webview/browser/aw_resource_context.cc \
+ android_webview/browser/aw_ssl_host_state_delegate.cc \
android_webview/browser/aw_web_preferences_populater.cc \
android_webview/browser/aw_web_resource_response.cc \
android_webview/browser/browser_view_renderer.cc \
diff --git a/android_webview/android_webview_common.target.linux-arm.mk b/android_webview/android_webview_common.target.linux-arm.mk
index 100e3279fa..064bf4e75c 100644
--- a/android_webview/android_webview_common.target.linux-arm.mk
+++ b/android_webview/android_webview_common.target.linux-arm.mk
@@ -46,6 +46,7 @@ LOCAL_SRC_FILES := \
android_webview/browser/aw_quota_permission_context.cc \
android_webview/browser/aw_request_interceptor.cc \
android_webview/browser/aw_resource_context.cc \
+ android_webview/browser/aw_ssl_host_state_delegate.cc \
android_webview/browser/aw_web_preferences_populater.cc \
android_webview/browser/aw_web_resource_response.cc \
android_webview/browser/browser_view_renderer.cc \
diff --git a/android_webview/android_webview_common.target.linux-arm64.mk b/android_webview/android_webview_common.target.linux-arm64.mk
index 7873d2e494..b60d543221 100644
--- a/android_webview/android_webview_common.target.linux-arm64.mk
+++ b/android_webview/android_webview_common.target.linux-arm64.mk
@@ -46,6 +46,7 @@ LOCAL_SRC_FILES := \
android_webview/browser/aw_quota_permission_context.cc \
android_webview/browser/aw_request_interceptor.cc \
android_webview/browser/aw_resource_context.cc \
+ android_webview/browser/aw_ssl_host_state_delegate.cc \
android_webview/browser/aw_web_preferences_populater.cc \
android_webview/browser/aw_web_resource_response.cc \
android_webview/browser/browser_view_renderer.cc \
diff --git a/android_webview/android_webview_common.target.linux-mips.mk b/android_webview/android_webview_common.target.linux-mips.mk
index 3a97f2d88f..88b816fd9b 100644
--- a/android_webview/android_webview_common.target.linux-mips.mk
+++ b/android_webview/android_webview_common.target.linux-mips.mk
@@ -46,6 +46,7 @@ LOCAL_SRC_FILES := \
android_webview/browser/aw_quota_permission_context.cc \
android_webview/browser/aw_request_interceptor.cc \
android_webview/browser/aw_resource_context.cc \
+ android_webview/browser/aw_ssl_host_state_delegate.cc \
android_webview/browser/aw_web_preferences_populater.cc \
android_webview/browser/aw_web_resource_response.cc \
android_webview/browser/browser_view_renderer.cc \
diff --git a/android_webview/android_webview_common.target.linux-x86.mk b/android_webview/android_webview_common.target.linux-x86.mk
index e66d988187..5c79f51b72 100644
--- a/android_webview/android_webview_common.target.linux-x86.mk
+++ b/android_webview/android_webview_common.target.linux-x86.mk
@@ -46,6 +46,7 @@ LOCAL_SRC_FILES := \
android_webview/browser/aw_quota_permission_context.cc \
android_webview/browser/aw_request_interceptor.cc \
android_webview/browser/aw_resource_context.cc \
+ android_webview/browser/aw_ssl_host_state_delegate.cc \
android_webview/browser/aw_web_preferences_populater.cc \
android_webview/browser/aw_web_resource_response.cc \
android_webview/browser/browser_view_renderer.cc \
diff --git a/android_webview/android_webview_common.target.linux-x86_64.mk b/android_webview/android_webview_common.target.linux-x86_64.mk
index 7d32438fde..fc8c7d09aa 100644
--- a/android_webview/android_webview_common.target.linux-x86_64.mk
+++ b/android_webview/android_webview_common.target.linux-x86_64.mk
@@ -46,6 +46,7 @@ LOCAL_SRC_FILES := \
android_webview/browser/aw_quota_permission_context.cc \
android_webview/browser/aw_request_interceptor.cc \
android_webview/browser/aw_resource_context.cc \
+ android_webview/browser/aw_ssl_host_state_delegate.cc \
android_webview/browser/aw_web_preferences_populater.cc \
android_webview/browser/aw_web_resource_response.cc \
android_webview/browser/browser_view_renderer.cc \
diff --git a/android_webview/browser/aw_browser_context.cc b/android_webview/browser/aw_browser_context.cc
index 80bef323ee..44dae72f64 100644
--- a/android_webview/browser/aw_browser_context.cc
+++ b/android_webview/browser/aw_browser_context.cc
@@ -295,7 +295,10 @@ content::PushMessagingService* AwBrowserContext::GetPushMessagingService() {
}
content::SSLHostStateDelegate* AwBrowserContext::GetSSLHostStateDelegate() {
- return NULL;
+ if (!ssl_host_state_delegate_.get()) {
+ ssl_host_state_delegate_.reset(new AwSSLHostStateDelegate());
+ }
+ return ssl_host_state_delegate_.get();
}
void AwBrowserContext::RebuildTable(
diff --git a/android_webview/browser/aw_browser_context.h b/android_webview/browser/aw_browser_context.h
index 76ad8b6482..e7fcde7fa1 100644
--- a/android_webview/browser/aw_browser_context.h
+++ b/android_webview/browser/aw_browser_context.h
@@ -8,6 +8,7 @@
#include <vector>
#include "android_webview/browser/aw_download_manager_delegate.h"
+#include "android_webview/browser/aw_ssl_host_state_delegate.h"
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/files/file_path.h"
@@ -142,6 +143,7 @@ class AwBrowserContext : public content::BrowserContext,
data_reduction_proxy_statistics_;
scoped_ptr<data_reduction_proxy::DataReductionProxySettings>
data_reduction_proxy_settings_;
+ scoped_ptr<AwSSLHostStateDelegate> ssl_host_state_delegate_;
DISALLOW_COPY_AND_ASSIGN(AwBrowserContext);
};
diff --git a/android_webview/browser/aw_ssl_host_state_delegate.cc b/android_webview/browser/aw_ssl_host_state_delegate.cc
new file mode 100644
index 0000000000..59d717fbe7
--- /dev/null
+++ b/android_webview/browser/aw_ssl_host_state_delegate.cc
@@ -0,0 +1,89 @@
+// Copyright (c) 2014 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.
+
+#include "android_webview/browser/aw_ssl_host_state_delegate.h"
+
+#include "net/base/hash_value.h"
+
+using content::SSLHostStateDelegate;
+
+namespace android_webview {
+
+namespace internal {
+net::SHA256HashValue getChainFingerprint256(const net::X509Certificate& cert) {
+ net::SHA256HashValue fingerprint =
+ net::X509Certificate::CalculateChainFingerprint256(
+ cert.os_cert_handle(), cert.GetIntermediateCertificates());
+ return fingerprint;
+}
+
+CertPolicy::CertPolicy() {
+}
+CertPolicy::~CertPolicy() {
+}
+
+// For an allowance, we consider a given |cert| to be a match to a saved
+// allowed cert if the |error| is an exact match to or subset of the errors
+// in the saved CertStatus.
+bool CertPolicy::Check(const net::X509Certificate& cert,
+ net::CertStatus error) const {
+ net::SHA256HashValue fingerprint = getChainFingerprint256(cert);
+ std::map<net::SHA256HashValue, net::CertStatus,
+ net::SHA256HashValueLessThan>::const_iterator allowed_iter =
+ allowed_.find(fingerprint);
+ if ((allowed_iter != allowed_.end()) && (allowed_iter->second & error) &&
+ ((allowed_iter->second & error) == error)) {
+ return true;
+ }
+ return false;
+}
+
+void CertPolicy::Allow(const net::X509Certificate& cert,
+ net::CertStatus error) {
+ // If this same cert had already been saved with a different error status,
+ // this will replace it with the new error status.
+ net::SHA256HashValue fingerprint = getChainFingerprint256(cert);
+ allowed_[fingerprint] = error;
+}
+
+} // namespace internal
+
+AwSSLHostStateDelegate::AwSSLHostStateDelegate() {
+}
+
+AwSSLHostStateDelegate::~AwSSLHostStateDelegate() {
+}
+
+void AwSSLHostStateDelegate::HostRanInsecureContent(const std::string& host,
+ int pid) {
+ // Intentional no-op for Android WebView.
+}
+
+bool AwSSLHostStateDelegate::DidHostRunInsecureContent(const std::string& host,
+ int pid) const {
+ // Intentional no-op for Android WebView.
+ return false;
+}
+
+void AwSSLHostStateDelegate::AllowCert(const std::string& host,
+ const net::X509Certificate& cert,
+ net::CertStatus error) {
+ cert_policy_for_host_[host].Allow(cert, error);
+}
+
+void AwSSLHostStateDelegate::Clear() {
+ cert_policy_for_host_.clear();
+}
+
+SSLHostStateDelegate::CertJudgment AwSSLHostStateDelegate::QueryPolicy(
+ const std::string& host,
+ const net::X509Certificate& cert,
+ net::CertStatus error,
+ bool* expired_previous_decision) {
+ return cert_policy_for_host_[host].Check(cert, error)
+ ? SSLHostStateDelegate::ALLOWED
+ : SSLHostStateDelegate::DENIED;
+}
+
+} // namespace android_webview
diff --git a/android_webview/browser/aw_ssl_host_state_delegate.h b/android_webview/browser/aw_ssl_host_state_delegate.h
new file mode 100644
index 0000000000..1297af9c13
--- /dev/null
+++ b/android_webview/browser/aw_ssl_host_state_delegate.h
@@ -0,0 +1,77 @@
+// Copyright (c) 2014 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.
+
+#ifndef ANDROID_WEBVIEW_BROWSER_AW_SSL_HOST_STATE_DELEGATE_H_
+#define ANDROID_WEBVIEW_BROWSER_AW_SSL_HOST_STATE_DELEGATE_H_
+
+#include <map>
+#include <string>
+
+#include "content/public/browser/ssl_host_state_delegate.h"
+#include "net/base/hash_value.h"
+#include "net/cert/cert_status_flags.h"
+#include "net/cert/x509_certificate.h"
+
+namespace android_webview {
+
+namespace internal {
+// This class maintains the policy for storing actions on certificate errors.
+class CertPolicy {
+ public:
+ CertPolicy();
+ ~CertPolicy();
+ // Returns true if the user has decided to proceed through the ssl error
+ // before. For a certificate to be allowed, it must not have any
+ // *additional* errors from when it was allowed.
+ bool Check(const net::X509Certificate& cert, net::CertStatus error) const;
+
+ // Causes the policy to allow this certificate for a given |error|. And
+ // remember the user's choice.
+ void Allow(const net::X509Certificate& cert, net::CertStatus error);
+
+ private:
+ // The set of fingerprints of allowed certificates.
+ std::map<net::SHA256HashValue, net::CertStatus, net::SHA256HashValueLessThan>
+ allowed_;
+};
+
+} // namespace internal
+
+class AwSSLHostStateDelegate : public content::SSLHostStateDelegate {
+ public:
+ AwSSLHostStateDelegate();
+ virtual ~AwSSLHostStateDelegate();
+
+ // Records that |cert| is permitted to be used for |host| in the future, for
+ // a specified |error| type.
+ void AllowCert(const std::string& host,
+ const net::X509Certificate& cert,
+ net::CertStatus error) override;
+
+ void Clear() override;
+
+ // Queries whether |cert| is allowed or denied for |host| and |error|.
+ content::SSLHostStateDelegate::CertJudgment QueryPolicy(
+ const std::string& host,
+ const net::X509Certificate& cert,
+ net::CertStatus error,
+ bool* expired_previous_decision) override;
+
+ // Records that a host has run insecure content.
+ void HostRanInsecureContent(const std::string& host, int pid) override;
+
+ // Returns whether the specified host ran insecure content.
+ bool DidHostRunInsecureContent(const std::string& host,
+ int pid) const override;
+
+ private:
+ // Certificate policies for each host.
+ std::map<std::string, internal::CertPolicy> cert_policy_for_host_;
+
+ DISALLOW_COPY_AND_ASSIGN(AwSSLHostStateDelegate);
+};
+
+} // namespace android_webview
+
+#endif // ANDROID_WEBVIEW_BROWSER_AW_SSL_HOST_STATE_DELEGATE_H_
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
index d2db7ddad7..2b40274878 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
@@ -508,4 +508,54 @@ public class AwContentsTest extends AwTestBase {
}
}
+ // TODO(hush): more ssl tests. And put the ssl tests into a separate test
+ // class.
+ @Feature({"AndroidWebView"})
+ @SmallTest
+ // If the user allows the ssl error, the same ssl error will not trigger
+ // the onReceivedSslError callback; If the user denies it, the same ssl
+ // error will still trigger the onReceivedSslError callback.
+ public void testSslPreferences() throws Throwable {
+ final AwTestContainerView testContainer =
+ createAwTestContainerViewOnMainSync(mContentsClient);
+ final AwContents awContents = testContainer.getAwContents();
+ TestWebServer webServer = TestWebServer.startSsl();
+ final String pagePath = "/hello.html";
+ final String pageUrl =
+ webServer.setResponse(pagePath, "<html><body>hello world</body></html>", null);
+ final CallbackHelper onReceivedSslErrorHelper =
+ mContentsClient.getOnReceivedSslErrorHelper();
+ int onSslErrorCallCount = onReceivedSslErrorHelper.getCallCount();
+
+ loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(), pageUrl);
+
+ assertEquals(onSslErrorCallCount + 1, onReceivedSslErrorHelper.getCallCount());
+ assertEquals(1, webServer.getRequestCount(pagePath));
+
+ // Now load the page again. This time, we expect no ssl error, because
+ // user's decision should be remembered.
+ onSslErrorCallCount = onReceivedSslErrorHelper.getCallCount();
+ loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(), pageUrl);
+ assertEquals(onSslErrorCallCount, onReceivedSslErrorHelper.getCallCount());
+
+ // Now clear the ssl preferences then load the same url again. Expect to see
+ // onReceivedSslError getting called again.
+ awContents.clearSslPreferences();
+ onSslErrorCallCount = onReceivedSslErrorHelper.getCallCount();
+ loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(), pageUrl);
+ assertEquals(onSslErrorCallCount + 1, onReceivedSslErrorHelper.getCallCount());
+
+ // Now clear the stored decisions and tell the client to deny ssl errors.
+ awContents.clearSslPreferences();
+ mContentsClient.setAllowSslError(false);
+ onSslErrorCallCount = onReceivedSslErrorHelper.getCallCount();
+ loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(), pageUrl);
+ assertEquals(onSslErrorCallCount + 1, onReceivedSslErrorHelper.getCallCount());
+
+ // Now load the same page again. This time, we still expect onReceivedSslError,
+ // because we only remember user's decision if it is "allow".
+ onSslErrorCallCount = onReceivedSslErrorHelper.getCallCount();
+ loadUrlSync(awContents, mContentsClient.getOnPageFinishedHelper(), pageUrl);
+ assertEquals(onSslErrorCallCount + 1, onReceivedSslErrorHelper.getCallCount());
+ }
}
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/TestAwContentsClient.java b/android_webview/javatests/src/org/chromium/android_webview/test/TestAwContentsClient.java
index da69a39568..7956e8caa7 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/TestAwContentsClient.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/TestAwContentsClient.java
@@ -5,7 +5,9 @@
package org.chromium.android_webview.test;
import android.graphics.Picture;
+import android.net.http.SslError;
import android.webkit.ConsoleMessage;
+import android.webkit.ValueCallback;
import org.chromium.base.ThreadUtils;
import org.chromium.content.browser.test.util.CallbackHelper;
@@ -19,9 +21,11 @@ import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnRece
*/
public class TestAwContentsClient extends NullContentsClient {
private String mUpdatedTitle;
+ private boolean mAllowSslError;
private final OnPageStartedHelper mOnPageStartedHelper;
private final OnPageFinishedHelper mOnPageFinishedHelper;
private final OnReceivedErrorHelper mOnReceivedErrorHelper;
+ private final CallbackHelper mOnReceivedSslErrorHelper;
private final OnDownloadStartHelper mOnDownloadStartHelper;
private final OnReceivedLoginRequestHelper mOnReceivedLoginRequestHelper;
private final OnEvaluateJavaScriptResultHelper mOnEvaluateJavaScriptResultHelper;
@@ -36,6 +40,7 @@ public class TestAwContentsClient extends NullContentsClient {
mOnPageStartedHelper = new OnPageStartedHelper();
mOnPageFinishedHelper = new OnPageFinishedHelper();
mOnReceivedErrorHelper = new OnReceivedErrorHelper();
+ mOnReceivedSslErrorHelper = new CallbackHelper();
mOnDownloadStartHelper = new OnDownloadStartHelper();
mOnReceivedLoginRequestHelper = new OnReceivedLoginRequestHelper();
mOnEvaluateJavaScriptResultHelper = new OnEvaluateJavaScriptResultHelper();
@@ -44,6 +49,7 @@ public class TestAwContentsClient extends NullContentsClient {
mPictureListenerHelper = new PictureListenerHelper();
mShouldOverrideUrlLoadingHelper = new ShouldOverrideUrlLoadingHelper();
mDoUpdateVisitedHistoryHelper = new DoUpdateVisitedHistoryHelper();
+ mAllowSslError = true;
}
public OnPageStartedHelper getOnPageStartedHelper() {
@@ -58,6 +64,10 @@ public class TestAwContentsClient extends NullContentsClient {
return mOnReceivedErrorHelper;
}
+ public CallbackHelper getOnReceivedSslErrorHelper() {
+ return mOnReceivedSslErrorHelper;
+ }
+
public OnDownloadStartHelper getOnDownloadStartHelper() {
return mOnDownloadStartHelper;
}
@@ -140,6 +150,16 @@ public class TestAwContentsClient extends NullContentsClient {
mOnReceivedErrorHelper.notifyCalled(errorCode, description, failingUrl);
}
+ @Override
+ public void onReceivedSslError(ValueCallback<Boolean> callback, SslError error) {
+ callback.onReceiveValue(mAllowSslError);
+ mOnReceivedSslErrorHelper.notifyCalled();
+ }
+
+ public void setAllowSslError(boolean allow) {
+ mAllowSslError = allow;
+ }
+
/**
* CallbackHelper for OnDownloadStart.
*/
@@ -240,7 +260,7 @@ public class TestAwContentsClient extends NullContentsClient {
}
/**
- * Callback helper for onScaleChangedScaled.
+ * Callback helper for AddMessageToConsole.
*/
public static class AddMessageToConsoleHelper extends CallbackHelper {
private int mLevel;
@@ -283,7 +303,7 @@ public class TestAwContentsClient extends NullContentsClient {
}
/**
- * Callback helper for onScaleChangedScaled.
+ * Callback helper for PictureListener.
*/
public static class PictureListenerHelper extends CallbackHelper {
// Generally null, depending on |invalidationOnly| in enableOnNewPicture()
@@ -306,7 +326,7 @@ public class TestAwContentsClient extends NullContentsClient {
}
/**
- * Callback helper for onScaleChangedScaled.
+ * Callback helper for ShouldOverrideUrlLoading.
*/
public static class ShouldOverrideUrlLoadingHelper extends CallbackHelper {
private String mShouldOverrideUrlLoadingUrl;