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

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

Issue 2869103002: [Android WebView] Propagate Java exceptions thrown in OnReceivedSslError (Closed)
Patch Set: Add comments to ssl_manager.h as well. 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 a4b1b910fa00ff53b33e4a96986804608b44ad7d..b50f3a10290849ad63c962124d48243813130ab5 100644
--- a/content/browser/ssl/ssl_manager.cc
+++ b/content/browser/ssl/ssl_manager.cc
@@ -96,6 +96,10 @@ class SSLManagerSet : public base::SupportsUserData::Data {
DISALLOW_COPY_AND_ASSIGN(SSLManagerSet);
};
+// On Android, HandleSSLErrorOnUI can cause a Java exception to be thrown - in
+// such a case we cannot allow calls back into Java afterwards. Make sure that
+// nothing calls into Java after calling this method - the easiest way to do so
+// is to post this as a separate task.
void HandleSSLErrorOnUI(
const base::Callback<WebContents*(void)>& web_contents_getter,
const base::WeakPtr<SSLErrorHandler::Delegate>& delegate,
@@ -125,6 +129,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 +317,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;
case net::ERR_CERT_NO_REVOCATION_MECHANISM:
// Ignore this error.
@@ -330,6 +340,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();
@@ -399,6 +412,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.
}
void SSLManager::UpdateEntry(NavigationEntryImpl* entry,
« android_webview/browser/aw_contents_client_bridge.cc ('K') | « content/browser/ssl/ssl_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698