| Index: net/socket/ssl_client_socket_nss.cc | 
| =================================================================== | 
| --- net/socket/ssl_client_socket_nss.cc	(revision 48650) | 
| +++ net/socket/ssl_client_socket_nss.cc	(working copy) | 
| @@ -656,6 +656,29 @@ | 
| return transport_->SetSendBufferSize(size); | 
| } | 
|  | 
| +#if defined(OS_WIN) | 
| +// static | 
| +X509Certificate::OSCertHandle SSLClientSocketNSS::CreateOSCert( | 
| +    const SECItem& der_cert) { | 
| +  // TODO(wtc): close cert_store_ at shutdown. | 
| +  if (!cert_store_) | 
| +    cert_store_ = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, NULL, 0, NULL); | 
| + | 
| +  X509Certificate::OSCertHandle cert_handle = NULL; | 
| +  BOOL ok = CertAddEncodedCertificateToStore( | 
| +      cert_store_, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, | 
| +      der_cert.data, der_cert.len, CERT_STORE_ADD_USE_EXISTING, &cert_handle); | 
| +  return ok ? cert_handle : NULL; | 
| +} | 
| +#elif defined(OS_MACOSX) | 
| +// static | 
| +X509Certificate::OSCertHandle SSLClientSocketNSS::CreateOSCert( | 
| +    const SECItem& der_cert) { | 
| +  return X509Certificate::CreateOSCertHandleFromBytes( | 
| +      reinterpret_cast<char*>(der_cert.data), der_cert.len); | 
| +} | 
| +#endif | 
| + | 
| X509Certificate *SSLClientSocketNSS::UpdateServerCert() { | 
| // We set the server_cert_ from OwnAuthCertHandler(), but this handler | 
| // does not necessarily get called if we are continuing a cached SSL | 
| @@ -686,9 +709,7 @@ | 
| if (IsProblematicComodoEVCACert(*node->cert)) | 
| continue; | 
| #endif | 
| -          cert_handle = X509Certificate::CreateOSCertHandleFromBytes( | 
| -              reinterpret_cast<char*>(node->cert->derCert.data), | 
| -              node->cert->derCert.len); | 
| +          cert_handle = CreateOSCert(node->cert->derCert); | 
| DCHECK(cert_handle); | 
| intermediate_ca_certs.push_back(cert_handle); | 
| } | 
| @@ -696,9 +717,7 @@ | 
| } | 
|  | 
| // Finally create the X509Certificate object. | 
| -      cert_handle = X509Certificate::CreateOSCertHandleFromBytes( | 
| -          reinterpret_cast<char*>(server_cert_nss_->derCert.data), | 
| -          server_cert_nss_->derCert.len); | 
| +      cert_handle = CreateOSCert(server_cert_nss_->derCert); | 
| DCHECK(cert_handle); | 
| server_cert_ = X509Certificate::CreateFromHandle( | 
| cert_handle, | 
|  |