| 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..1409765fb53ace15bef26156018644ae19334012 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* pkey = 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();
|
| + pkey = 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(pkey)));
|
| }
|
|
|
| bool CastContentBrowserClient::CanCreateWindow(
|
|
|