| 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 5b475eff047206108e46af4e9b7fa883a1a51706..d1d1d69a18a9d24ce2c17af1d7a488cef3f4d861 100644
|
| --- a/chromecast/browser/cast_content_browser_client.cc
|
| +++ b/chromecast/browser/cast_content_browser_client.cc
|
| @@ -48,6 +48,7 @@
|
| #include "content/public/common/url_constants.h"
|
| #include "content/public/common/web_preferences.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"
|
|
|
| @@ -284,7 +285,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;
|
| }
|
|
|
| @@ -298,32 +299,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(std::move(delegate)),
|
| + 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(
|
|
|