| Index: extensions/browser/api/networking_private/networking_private_chromeos.cc | 
| diff --git a/extensions/browser/api/networking_private/networking_private_chromeos.cc b/extensions/browser/api/networking_private/networking_private_chromeos.cc | 
| index c030fda7e2c51b23d06bcdee768c5dca504803e2..7acc8894d38e74adc69520da2dc91f43f71de8b1 100644 | 
| --- a/extensions/browser/api/networking_private/networking_private_chromeos.cc | 
| +++ b/extensions/browser/api/networking_private/networking_private_chromeos.cc | 
| @@ -18,6 +18,7 @@ | 
| #include "chromeos/network/device_state.h" | 
| #include "chromeos/network/managed_network_configuration_handler.h" | 
| #include "chromeos/network/network_activation_handler.h" | 
| +#include "chromeos/network/network_certificate_handler.h" | 
| #include "chromeos/network/network_connection_handler.h" | 
| #include "chromeos/network/network_device_handler.h" | 
| #include "chromeos/network/network_event_log.h" | 
| @@ -43,6 +44,7 @@ | 
| #include "third_party/cros_system_api/dbus/service_constants.h" | 
|  | 
| using chromeos::NetworkHandler; | 
| +using chromeos::NetworkCertificateHandler; | 
| using chromeos::NetworkStateHandler; | 
| using chromeos::NetworkTypePattern; | 
| using chromeos::ShillManagerClient; | 
| @@ -299,6 +301,20 @@ void SetManualProxy(base::DictionaryValue* manual, | 
| SetProxyEffectiveValue(port_dict, state, base::MakeUnique<base::Value>(port)); | 
| } | 
|  | 
| +private_api::Certificate GetCertDictionary( | 
| +    const NetworkCertificateHandler::Certificate& cert) { | 
| +  private_api::Certificate api_cert; | 
| +  api_cert.hash = cert.hash; | 
| +  api_cert.issued_by = cert.issued_by; | 
| +  api_cert.issued_to = cert.issued_to; | 
| +  api_cert.hardware_backed = cert.hardware_backed; | 
| +  if (!cert.pem.empty()) | 
| +    api_cert.pem = base::MakeUnique<std::string>(cert.pem); | 
| +  if (!cert.pkcs11_id.empty()) | 
| +    api_cert.pkcs11_id = base::MakeUnique<std::string>(cert.pkcs11_id); | 
| +  return api_cert; | 
| +} | 
| + | 
| }  // namespace | 
|  | 
| //////////////////////////////////////////////////////////////////////////////// | 
| @@ -746,6 +762,25 @@ NetworkingPrivateChromeOS::GetGlobalPolicy() { | 
| return result; | 
| } | 
|  | 
| +std::unique_ptr<base::DictionaryValue> | 
| +NetworkingPrivateChromeOS::GetCertificateLists() { | 
| +  private_api::CertificateLists result; | 
| +  const std::vector<NetworkCertificateHandler::Certificate>& server_cas = | 
| +      NetworkHandler::Get() | 
| +          ->network_certificate_handler() | 
| +          ->server_ca_certificates(); | 
| +  for (const auto& cert : server_cas) | 
| +    result.server_ca_certificates.push_back(GetCertDictionary(cert)); | 
| + | 
| +  std::vector<private_api::Certificate> user_cert_list; | 
| +  const std::vector<NetworkCertificateHandler::Certificate>& user_certs = | 
| +      NetworkHandler::Get()->network_certificate_handler()->user_certificates(); | 
| +  for (const auto& cert : user_certs) | 
| +    result.user_certificates.push_back(GetCertDictionary(cert)); | 
| + | 
| +  return result.ToValue(); | 
| +} | 
| + | 
| bool NetworkingPrivateChromeOS::EnableNetworkType(const std::string& type) { | 
| NetworkTypePattern pattern = | 
| chromeos::onc::NetworkTypePatternFromOncType(type); | 
|  |