Chromium Code Reviews| 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. |
| } |
| } |