| Index: net/cert/x509_certificate.cc
|
| diff --git a/net/cert/x509_certificate.cc b/net/cert/x509_certificate.cc
|
| index 797793fa634c49d905918dba03b9ad2f16663f69..70bbd66a23e7f93fa68affbd92f1bac2a4069179 100644
|
| --- a/net/cert/x509_certificate.cc
|
| +++ b/net/cert/x509_certificate.cc
|
| @@ -12,6 +12,7 @@
|
| #include <string>
|
| #include <vector>
|
|
|
| +#include "base/trace_event/trace_event.h"
|
| #include "base/base64.h"
|
| #include "base/lazy_instance.h"
|
| #include "base/logging.h"
|
| @@ -265,6 +266,8 @@ scoped_refptr<X509Certificate> X509Certificate::CreateFromHandle(
|
| // static
|
| scoped_refptr<X509Certificate> X509Certificate::CreateFromDERCertChain(
|
| const std::vector<base::StringPiece>& der_certs) {
|
| + TRACE_EVENT0("toplevel", "X509Certificate::CreateFromDERCertChain");
|
| +
|
| // TODO(cbentzel): Remove ScopedTracker below once crbug.com/424386 is fixed.
|
| tracked_objects::ScopedTracker tracking_profile(
|
| FROM_HERE_WITH_EXPLICIT_FUNCTION(
|
| @@ -273,6 +276,8 @@ scoped_refptr<X509Certificate> X509Certificate::CreateFromDERCertChain(
|
| if (der_certs.empty())
|
| return NULL;
|
|
|
| + TRACE_EVENT0("toplevel", "X509Certificate::CreateFromDERCertChain::A");
|
| +
|
| X509Certificate::OSCertHandles intermediate_ca_certs;
|
| for (size_t i = 1; i < der_certs.size(); i++) {
|
| OSCertHandle handle = CreateOSCertHandleFromBytes(
|
| @@ -282,18 +287,23 @@ scoped_refptr<X509Certificate> X509Certificate::CreateFromDERCertChain(
|
| intermediate_ca_certs.push_back(handle);
|
| }
|
|
|
| + TRACE_EVENT0("toplevel", "X509Certificate::CreateFromDERCertChain::B");
|
| OSCertHandle handle = NULL;
|
| // Return NULL if we failed to parse any of the certs.
|
| if (der_certs.size() - 1 == intermediate_ca_certs.size()) {
|
| handle = CreateOSCertHandleFromBytes(
|
| const_cast<char*>(der_certs[0].data()), der_certs[0].size());
|
| }
|
| + TRACE_EVENT0("toplevel", "X509Certificate::CreateFromDERCertChain::C");
|
|
|
| scoped_refptr<X509Certificate> cert = nullptr;
|
| if (handle) {
|
| + TRACE_EVENT0("toplevel", "X509Certificate::CreateFromDERCertChain::C.1");
|
| cert = CreateFromHandle(handle, intermediate_ca_certs);
|
| + TRACE_EVENT0("toplevel", "X509Certificate::CreateFromDERCertChain::C.2");
|
| FreeOSCertHandle(handle);
|
| }
|
| + TRACE_EVENT0("toplevel", "X509Certificate::CreateFromDERCertChain::D");
|
|
|
| for (size_t i = 0; i < intermediate_ca_certs.size(); i++)
|
| FreeOSCertHandle(intermediate_ca_certs[i]);
|
| @@ -319,6 +329,8 @@ scoped_refptr<X509Certificate> X509Certificate::CreateFromBytes(
|
| scoped_refptr<X509Certificate> X509Certificate::CreateFromPickle(
|
| base::PickleIterator* pickle_iter,
|
| PickleType type) {
|
| + TRACE_EVENT0("toplevel", "X509Certificate::CreateFromPickle");
|
| +
|
| if (type == PICKLETYPE_CERTIFICATE_CHAIN_V3) {
|
| int chain_length = 0;
|
| if (!pickle_iter->ReadLength(&chain_length))
|
| @@ -328,8 +340,10 @@ scoped_refptr<X509Certificate> X509Certificate::CreateFromPickle(
|
| const char* data = NULL;
|
| int data_length = 0;
|
| for (int i = 0; i < chain_length; ++i) {
|
| + TRACE_EVENT0("toplevel", "X509Certificate::CreateFromPickle::A");
|
| if (!pickle_iter->ReadData(&data, &data_length))
|
| return NULL;
|
| + TRACE_EVENT0("toplevel", "X509Certificate::CreateFromPickle::B");
|
| cert_chain.push_back(base::StringPiece(data, data_length));
|
| }
|
| return CreateFromDERCertChain(cert_chain);
|
| @@ -379,6 +393,7 @@ scoped_refptr<X509Certificate> X509Certificate::CreateFromPickle(
|
| return NULL;
|
| }
|
| }
|
| +
|
| if (zero_check)
|
| *pickle_iter = saved_iter;
|
| #endif // defined(OS_POSIX) && !defined(OS_MACOSX) && defined(__x86_64__)
|
| @@ -743,7 +758,9 @@ SHA256HashValue X509Certificate::CalculateChainFingerprint256(
|
| X509Certificate::X509Certificate(OSCertHandle cert_handle,
|
| const OSCertHandles& intermediates)
|
| : cert_handle_(DupOSCertHandle(cert_handle)) {
|
| + TRACE_EVENT0("toplevel", "X509Certificate::X509Certificate::A");
|
| InsertOrUpdateCache(&cert_handle_);
|
| + TRACE_EVENT0("toplevel", "X509Certificate::X509Certificate::B");
|
| for (size_t i = 0; i < intermediates.size(); ++i) {
|
| // Duplicate the incoming certificate, as the caller retains ownership
|
| // of |intermediates|.
|
| @@ -753,6 +770,7 @@ X509Certificate::X509Certificate(OSCertHandle cert_handle,
|
| InsertOrUpdateCache(&intermediate);
|
| intermediate_ca_certs_.push_back(intermediate);
|
| }
|
| + TRACE_EVENT0("toplevel", "X509Certificate::X509Certificate::C");
|
| // Platform-specific initialization.
|
| Initialize();
|
| }
|
|
|