Index: chromecast/browser/cast_content_browser_client.cc |
diff --git a/chromecast/browser/cast_content_browser_client.cc b/chromecast/browser/cast_content_browser_client.cc |
index b12a2307eeed662e7195fea43297546d2038cbee..28cbd97d1b67cab31c5bf9d49c3a325863513fc1 100644 |
--- a/chromecast/browser/cast_content_browser_client.cc |
+++ b/chromecast/browser/cast_content_browser_client.cc |
@@ -45,6 +45,7 @@ |
#include "content/public/common/web_preferences.h" |
#include "media/audio/audio_manager_factory.h" |
#include "net/ssl/ssl_cert_request_info.h" |
+#include "net/ssl/ssl_platform_key.h" |
#include "net/url_request/url_request_context_getter.h" |
#include "ui/gl/gl_switches.h" |
@@ -302,7 +303,7 @@ void CastContentBrowserClient::SelectClientCertificate( |
if (!requesting_url.is_valid()) { |
LOG(ERROR) << "Invalid URL string: " |
<< requesting_url.possibly_invalid_spec(); |
- delegate->ContinueWithCertificate(nullptr); |
+ delegate->ContinueWithCertificate(nullptr, nullptr); |
return; |
} |
@@ -316,32 +317,40 @@ void CastContentBrowserClient::SelectClientCertificate( |
// |
// TODO(davidben): Stop using child ID to identify an app. |
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
- content::BrowserThread::PostTaskAndReplyWithResult( |
+ content::BrowserThread::PostTask( |
content::BrowserThread::IO, FROM_HERE, |
base::Bind(&CastContentBrowserClient::SelectClientCertificateOnIOThread, |
- base::Unretained(this), requesting_url, |
- web_contents->GetRenderProcessHost()->GetID()), |
- base::Bind(&content::ClientCertificateDelegate::ContinueWithCertificate, |
- base::Owned(delegate.release()))); |
+ base::Unretained(this), base::Passed(delegate.Pass()), |
+ requesting_url, |
+ web_contents->GetRenderProcessHost()->GetID())); |
} |
-net::X509Certificate* |
-CastContentBrowserClient::SelectClientCertificateOnIOThread( |
+void CastContentBrowserClient::SelectClientCertificateOnIOThread( |
+ scoped_ptr<content::ClientCertificateDelegate> delegate, |
GURL requesting_url, |
int render_process_id) { |
+ net::X509Certificate* cert = nullptr; |
+ net::SSLPrivateKey* private_key = nullptr; |
+ |
DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
CastNetworkDelegate* network_delegate = |
url_request_context_factory_->app_network_delegate(); |
if (network_delegate->IsWhitelisted(requesting_url, |
render_process_id, false)) { |
- return CastNetworkDelegate::DeviceCert(); |
+ cert = CastNetworkDelegate::DeviceCert(); |
+ private_key = CastNetworkDelegate::DeviceKey(); |
} else { |
LOG(ERROR) << "Invalid host for client certificate request: " |
<< requesting_url.host() |
<< " with render_process_id: " |
<< render_process_id; |
- return NULL; |
} |
+ |
+ content::BrowserThread::PostTask( |
+ content::BrowserThread::UI, FROM_HERE, |
+ base::Bind(&content::ClientCertificateDelegate::ContinueWithCertificate, |
+ base::Owned(delegate.release()), make_scoped_refptr(cert), |
+ make_scoped_refptr(private_key))); |
} |
bool CastContentBrowserClient::CanCreateWindow( |