Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(546)

Unified Diff: content/browser/ssl/ssl_manager.cc

Issue 2869103002: [Android WebView] Propagate Java exceptions thrown in OnReceivedSslError (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/ssl/ssl_manager.cc
diff --git a/content/browser/ssl/ssl_manager.cc b/content/browser/ssl/ssl_manager.cc
index 2a3124acae247b38d959156da59540dc80a6a42e..6e45791b4689e263617f2dc0aa10b0ec43805c5c 100644
--- a/content/browser/ssl/ssl_manager.cc
+++ b/content/browser/ssl/ssl_manager.cc
@@ -125,6 +125,9 @@ void HandleSSLErrorOnUI(
SSLManager* manager = controller->ssl_manager();
manager->OnCertError(std::move(handler));
+ // On Android, OnCertError can cause a Java exception to be thrown - in such a
+ // case we cannot allow calls back into Java here. If adding any additional
+ // code here, make sure it cannot call into Java.
}
} // namespace
@@ -310,6 +313,9 @@ void SSLManager::OnCertError(std::unique_ptr<SSLErrorHandler> handler) {
if (expired_previous_decision)
options_mask |= EXPIRED_PREVIOUS_DECISION;
OnCertErrorInternal(std::move(handler), options_mask);
+ // On Android, OnCertErrorInternal can cause a Java exception to be thrown
+ // - in such a case we cannot allow calls back into Java here. If adding
+ // any additional code here, make sure it cannot call into Java.
estark 2017/05/11 00:50:56 Hmm, I don't think I understand this. Is it a prob
gsennton 2017/05/11 12:17:17 Yes, so what happens is this: OnCertErrorInternal(
break;
case net::ERR_CERT_NO_REVOCATION_MECHANISM:
// Ignore this error.
@@ -330,6 +336,9 @@ void SSLManager::OnCertError(std::unique_ptr<SSLErrorHandler> handler) {
if (expired_previous_decision)
options_mask |= EXPIRED_PREVIOUS_DECISION;
OnCertErrorInternal(std::move(handler), options_mask);
+ // On Android, OnCertErrorInternal can cause a Java exception to be thrown
+ // - in such a case we cannot allow calls back into Java here. If adding
+ // any additional code here, make sure it cannot call into Java.
break;
default:
NOTREACHED();
@@ -393,6 +402,9 @@ void SSLManager::OnCertErrorInternal(std::unique_ptr<SSLErrorHandler> handler,
web_contents, cert_error, ssl_info, request_url, resource_type,
overridable, strict_enforcement, expired_previous_decision,
base::Bind(&OnAllowCertificateWithRecordDecision, true, callback));
+ // On Android, AllowCertificateError can cause a Java exception to be thrown
+ // - in such a case we cannot allow calls back into Java here. If adding any
+ // additional code here, make sure it cannot call into Java.
}
}

Powered by Google App Engine
This is Rietveld 408576698