Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(156)

Side by Side Diff: chrome/browser/ui/webui/settings/certificates_handler.cc

Issue 1812673002: MD Settings: Certificate manager, error dialog. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@certificate_decrypt_dialog
Patch Set: Nit Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/webui/settings/certificates_handler.h" 5 #include "chrome/browser/ui/webui/settings/certificates_handler.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 #include <algorithm> 10 #include <algorithm>
(...skipping 12 matching lines...) Expand all
23 #include "base/strings/utf_string_conversions.h" 23 #include "base/strings/utf_string_conversions.h"
24 #include "base/values.h" 24 #include "base/values.h"
25 #include "build/build_config.h" 25 #include "build/build_config.h"
26 #include "chrome/browser/browser_process.h" 26 #include "chrome/browser/browser_process.h"
27 #include "chrome/browser/certificate_viewer.h" 27 #include "chrome/browser/certificate_viewer.h"
28 #include "chrome/browser/profiles/profile.h" 28 #include "chrome/browser/profiles/profile.h"
29 #include "chrome/browser/ui/certificate_dialogs.h" 29 #include "chrome/browser/ui/certificate_dialogs.h"
30 #include "chrome/browser/ui/chrome_select_file_policy.h" 30 #include "chrome/browser/ui/chrome_select_file_policy.h"
31 #include "chrome/browser/ui/crypto_module_password_dialog_nss.h" 31 #include "chrome/browser/ui/crypto_module_password_dialog_nss.h"
32 #include "chrome/browser/ui/webui/certificate_viewer_webui.h" 32 #include "chrome/browser/ui/webui/certificate_viewer_webui.h"
33 #include "chrome/grit/generated_resources.h" 33 #include "chrome/grit/settings_strings.h"
34 #include "content/public/browser/browser_thread.h" 34 #include "content/public/browser/browser_thread.h"
35 #include "content/public/browser/web_contents.h" 35 #include "content/public/browser/web_contents.h"
36 #include "grit/components_strings.h" 36 #include "grit/components_strings.h"
37 #include "net/base/crypto_module.h" 37 #include "net/base/crypto_module.h"
38 #include "net/base/net_errors.h" 38 #include "net/base/net_errors.h"
39 #include "net/cert/x509_certificate.h" 39 #include "net/cert/x509_certificate.h"
40 #include "net/der/input.h" 40 #include "net/der/input.h"
41 #include "net/der/parser.h" 41 #include "net/der/parser.h"
42 #include "ui/base/l10n/l10n_util.h" 42 #include "ui/base/l10n/l10n_util.h"
43 43
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 IMPORT_SERVER_FILE_SELECTED, 77 IMPORT_SERVER_FILE_SELECTED,
78 IMPORT_CA_FILE_SELECTED, 78 IMPORT_CA_FILE_SELECTED,
79 }; 79 };
80 80
81 std::string OrgNameToId(const std::string& org) { 81 std::string OrgNameToId(const std::string& org) {
82 return "org-" + org; 82 return "org-" + org;
83 } 83 }
84 84
85 struct DictionaryIdComparator { 85 struct DictionaryIdComparator {
86 explicit DictionaryIdComparator(icu::Collator* collator) 86 explicit DictionaryIdComparator(icu::Collator* collator)
87 : collator_(collator) { 87 : collator_(collator) {}
88 }
89 88
90 bool operator()(const base::Value* a, 89 bool operator()(const base::Value* a, const base::Value* b) const {
91 const base::Value* b) const {
92 DCHECK(a->GetType() == base::Value::TYPE_DICTIONARY); 90 DCHECK(a->GetType() == base::Value::TYPE_DICTIONARY);
93 DCHECK(b->GetType() == base::Value::TYPE_DICTIONARY); 91 DCHECK(b->GetType() == base::Value::TYPE_DICTIONARY);
94 const base::DictionaryValue* a_dict = 92 const base::DictionaryValue* a_dict =
95 reinterpret_cast<const base::DictionaryValue*>(a); 93 reinterpret_cast<const base::DictionaryValue*>(a);
96 const base::DictionaryValue* b_dict = 94 const base::DictionaryValue* b_dict =
97 reinterpret_cast<const base::DictionaryValue*>(b); 95 reinterpret_cast<const base::DictionaryValue*>(b);
98 base::string16 a_str; 96 base::string16 a_str;
99 base::string16 b_str; 97 base::string16 b_str;
100 a_dict->GetString(kNameField, &a_str); 98 a_dict->GetString(kNameField, &a_str);
101 b_dict->GetString(kNameField, &b_str); 99 b_dict->GetString(kNameField, &b_str);
102 if (collator_ == NULL) 100 if (collator_ == NULL)
103 return a_str < b_str; 101 return a_str < b_str;
104 return base::i18n::CompareString16WithCollator(*collator_, a_str, b_str) == 102 return base::i18n::CompareString16WithCollator(*collator_, a_str, b_str) ==
105 UCOL_LESS; 103 UCOL_LESS;
106 } 104 }
107 105
108 icu::Collator* collator_; 106 icu::Collator* collator_;
109 }; 107 };
110 108
111 std::string NetErrorToString(int net_error) { 109 std::string NetErrorToString(int net_error) {
112 switch (net_error) { 110 switch (net_error) {
113 // TODO(mattm): handle more cases. 111 // TODO(mattm): handle more cases.
114 case net::ERR_IMPORT_CA_CERT_NOT_CA: 112 case net::ERR_IMPORT_CA_CERT_NOT_CA:
115 return l10n_util::GetStringUTF8(IDS_CERT_MANAGER_ERROR_NOT_CA); 113 return l10n_util::GetStringUTF8(
114 IDS_SETTINGS_CERTIFICATE_MANAGER_ERROR_NOT_CA);
116 case net::ERR_IMPORT_CERT_ALREADY_EXISTS: 115 case net::ERR_IMPORT_CERT_ALREADY_EXISTS:
117 return l10n_util::GetStringUTF8( 116 return l10n_util::GetStringUTF8(
118 IDS_CERT_MANAGER_ERROR_CERT_ALREADY_EXISTS); 117 IDS_SETTINGS_CERTIFICATE_MANAGER_ERROR_CERT_ALREADY_EXISTS);
119 default: 118 default:
120 return l10n_util::GetStringUTF8(IDS_CERT_MANAGER_UNKNOWN_ERROR); 119 return l10n_util::GetStringUTF8(
120 IDS_SETTINGS_CERTIFICATE_MANAGER_UNKNOWN_ERROR);
121 } 121 }
122 } 122 }
123 123
124 // Struct to bind the Equals member function to an object for use in find_if. 124 // Struct to bind the Equals member function to an object for use in find_if.
125 struct CertEquals { 125 struct CertEquals {
126 explicit CertEquals(const net::X509Certificate* cert) : cert_(cert) {} 126 explicit CertEquals(const net::X509Certificate* cert) : cert_(cert) {}
127 bool operator()(const scoped_refptr<net::X509Certificate> cert) const { 127 bool operator()(const scoped_refptr<net::X509Certificate> cert) const {
128 return cert_->Equals(cert.get()); 128 return cert_->Equals(cert.get());
129 } 129 }
130 const net::X509Certificate* cert_; 130 const net::X509Certificate* cert_;
131 }; 131 };
132 132
133 // Determine whether a certificate was stored with web trust by a policy. 133 // Determine whether a certificate was stored with web trust by a policy.
134 bool IsPolicyInstalledWithWebTrust( 134 bool IsPolicyInstalledWithWebTrust(const net::CertificateList& web_trust_certs,
135 const net::CertificateList& web_trust_certs, 135 net::X509Certificate* cert) {
136 net::X509Certificate* cert) {
137 return std::find_if(web_trust_certs.begin(), web_trust_certs.end(), 136 return std::find_if(web_trust_certs.begin(), web_trust_certs.end(),
138 CertEquals(cert)) != web_trust_certs.end(); 137 CertEquals(cert)) != web_trust_certs.end();
139 } 138 }
140 139
141 #if defined(OS_CHROMEOS) 140 #if defined(OS_CHROMEOS)
142 void ShowCertificateViewerModalDialog(content::WebContents* web_contents, 141 void ShowCertificateViewerModalDialog(content::WebContents* web_contents,
143 gfx::NativeWindow parent, 142 gfx::NativeWindow parent,
144 net::X509Certificate* cert) { 143 net::X509Certificate* cert) {
145 CertificateViewerModalDialog* dialog = new CertificateViewerModalDialog(cert); 144 CertificateViewerModalDialog* dialog = new CertificateViewerModalDialog(cert);
146 dialog->Show(web_contents, parent); 145 dialog->Show(web_contents, parent);
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 ~CertIdMap() {} 197 ~CertIdMap() {}
199 198
200 std::string CertToId(net::X509Certificate* cert); 199 std::string CertToId(net::X509Certificate* cert);
201 net::X509Certificate* IdToCert(const std::string& id); 200 net::X509Certificate* IdToCert(const std::string& id);
202 net::X509Certificate* CallbackArgsToCert(const base::ListValue* args); 201 net::X509Certificate* CallbackArgsToCert(const base::ListValue* args);
203 202
204 private: 203 private:
205 typedef std::map<net::X509Certificate*, int32_t> CertMap; 204 typedef std::map<net::X509Certificate*, int32_t> CertMap;
206 205
207 // Creates an ID for cert and looks up the cert for an ID. 206 // Creates an ID for cert and looks up the cert for an ID.
208 IDMap<net::X509Certificate>id_map_; 207 IDMap<net::X509Certificate> id_map_;
209 208
210 // Finds the ID for a cert. 209 // Finds the ID for a cert.
211 CertMap cert_map_; 210 CertMap cert_map_;
212 211
213 DISALLOW_COPY_AND_ASSIGN(CertIdMap); 212 DISALLOW_COPY_AND_ASSIGN(CertIdMap);
214 }; 213 };
215 214
216 std::string CertIdMap::CertToId(net::X509Certificate* cert) { 215 std::string CertIdMap::CertToId(net::X509Certificate* cert) {
217 CertMap::const_iterator iter = cert_map_.find(cert); 216 CertMap::const_iterator iter = cert_map_.find(cert);
218 if (iter != cert_map_.end()) 217 if (iter != cert_map_.end())
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 const std::string& data, 269 const std::string& data,
271 const WriteCallback& callback, 270 const WriteCallback& callback,
272 base::CancelableTaskTracker* tracker); 271 base::CancelableTaskTracker* tracker);
273 272
274 private: 273 private:
275 friend class base::RefCountedThreadSafe<FileAccessProvider>; 274 friend class base::RefCountedThreadSafe<FileAccessProvider>;
276 virtual ~FileAccessProvider() {} 275 virtual ~FileAccessProvider() {}
277 276
278 // Reads file at |path|. |saved_errno| is 0 on success or errno on failure. 277 // Reads file at |path|. |saved_errno| is 0 on success or errno on failure.
279 // When success, |data| has file content. 278 // When success, |data| has file content.
280 void DoRead(const base::FilePath& path, 279 void DoRead(const base::FilePath& path, int* saved_errno, std::string* data);
281 int* saved_errno,
282 std::string* data);
283 // Writes data to file at |path|. |saved_errno| is 0 on success or errno on 280 // Writes data to file at |path|. |saved_errno| is 0 on success or errno on
284 // failure. When success, |bytes_written| has number of bytes written. 281 // failure. When success, |bytes_written| has number of bytes written.
285 void DoWrite(const base::FilePath& path, 282 void DoWrite(const base::FilePath& path,
286 const std::string& data, 283 const std::string& data,
287 int* saved_errno, 284 int* saved_errno,
288 int* bytes_written); 285 int* bytes_written);
289 }; 286 };
290 287
291 base::CancelableTaskTracker::TaskId FileAccessProvider::StartRead( 288 base::CancelableTaskTracker::TaskId FileAccessProvider::StartRead(
292 const base::FilePath& path, 289 const base::FilePath& path,
(...skipping 16 matching lines...) Expand all
309 const std::string& data, 306 const std::string& data,
310 const WriteCallback& callback, 307 const WriteCallback& callback,
311 base::CancelableTaskTracker* tracker) { 308 base::CancelableTaskTracker* tracker) {
312 // Owned by reply callback posted below. 309 // Owned by reply callback posted below.
313 int* saved_errno = new int(0); 310 int* saved_errno = new int(0);
314 int* bytes_written = new int(0); 311 int* bytes_written = new int(0);
315 312
316 // Post task to file thread to write file. 313 // Post task to file thread to write file.
317 return tracker->PostTaskAndReply( 314 return tracker->PostTaskAndReply(
318 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE).get(), 315 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE).get(),
319 FROM_HERE, 316 FROM_HERE, base::Bind(&FileAccessProvider::DoWrite, this, path, data,
320 base::Bind(&FileAccessProvider::DoWrite, 317 saved_errno, bytes_written),
321 this, 318 base::Bind(callback, base::Owned(saved_errno),
322 path, 319 base::Owned(bytes_written)));
323 data,
324 saved_errno,
325 bytes_written),
326 base::Bind(
327 callback, base::Owned(saved_errno), base::Owned(bytes_written)));
328 } 320 }
329 321
330 void FileAccessProvider::DoRead(const base::FilePath& path, 322 void FileAccessProvider::DoRead(const base::FilePath& path,
331 int* saved_errno, 323 int* saved_errno,
332 std::string* data) { 324 std::string* data) {
333 bool success = base::ReadFileToString(path, data); 325 bool success = base::ReadFileToString(path, data);
334 *saved_errno = success ? 0 : errno; 326 *saved_errno = success ? 0 : errno;
335 } 327 }
336 328
337 void FileAccessProvider::DoWrite(const base::FilePath& path, 329 void FileAccessProvider::DoWrite(const base::FilePath& path,
338 const std::string& data, 330 const std::string& data,
339 int* saved_errno, 331 int* saved_errno,
340 int* bytes_written) { 332 int* bytes_written) {
341 *bytes_written = base::WriteFile(path, data.data(), data.size()); 333 *bytes_written = base::WriteFile(path, data.data(), data.size());
342 *saved_errno = *bytes_written >= 0 ? 0 : errno; 334 *saved_errno = *bytes_written >= 0 ? 0 : errno;
343 } 335 }
344 336
345 /////////////////////////////////////////////////////////////////////////////// 337 ///////////////////////////////////////////////////////////////////////////////
346 // CertificatesHandler 338 // CertificatesHandler
347 339
348 CertificatesHandler::CertificatesHandler( 340 CertificatesHandler::CertificatesHandler(bool show_certs_in_modal_dialog)
349 bool show_certs_in_modal_dialog)
350 : show_certs_in_modal_dialog_(show_certs_in_modal_dialog), 341 : show_certs_in_modal_dialog_(show_certs_in_modal_dialog),
351 requested_certificate_manager_model_(false), 342 requested_certificate_manager_model_(false),
352 use_hardware_backed_(false), 343 use_hardware_backed_(false),
353 file_access_provider_(new FileAccessProvider()), 344 file_access_provider_(new FileAccessProvider()),
354 cert_id_map_(new CertIdMap), 345 cert_id_map_(new CertIdMap),
355 weak_ptr_factory_(this) {} 346 weak_ptr_factory_(this) {}
356 347
357 CertificatesHandler::~CertificatesHandler() { 348 CertificatesHandler::~CertificatesHandler() {}
358 }
359 349
360 void CertificatesHandler::RegisterMessages() { 350 void CertificatesHandler::RegisterMessages() {
361 web_ui()->RegisterMessageCallback( 351 web_ui()->RegisterMessageCallback(
362 "viewCertificate", 352 "viewCertificate", base::Bind(&CertificatesHandler::HandleViewCertificate,
363 base::Bind(&CertificatesHandler::HandleViewCertificate, 353 base::Unretained(this)));
364 base::Unretained(this)));
365 354
366 web_ui()->RegisterMessageCallback( 355 web_ui()->RegisterMessageCallback(
367 "getCaCertificateTrust", 356 "getCaCertificateTrust",
368 base::Bind(&CertificatesHandler::HandleGetCATrust, 357 base::Bind(&CertificatesHandler::HandleGetCATrust,
369 base::Unretained(this))); 358 base::Unretained(this)));
370 web_ui()->RegisterMessageCallback( 359 web_ui()->RegisterMessageCallback(
371 "editCaCertificateTrust", 360 "editCaCertificateTrust",
372 base::Bind(&CertificatesHandler::HandleEditCATrust, 361 base::Bind(&CertificatesHandler::HandleEditCATrust,
373 base::Unretained(this))); 362 base::Unretained(this)));
374 363
(...skipping 15 matching lines...) Expand all
390 "importPersonalCertificate", 379 "importPersonalCertificate",
391 base::Bind(&CertificatesHandler::HandleImportPersonal, 380 base::Bind(&CertificatesHandler::HandleImportPersonal,
392 base::Unretained(this))); 381 base::Unretained(this)));
393 web_ui()->RegisterMessageCallback( 382 web_ui()->RegisterMessageCallback(
394 "importPersonalCertificatePasswordSelected", 383 "importPersonalCertificatePasswordSelected",
395 base::Bind(&CertificatesHandler::HandleImportPersonalPasswordSelected, 384 base::Bind(&CertificatesHandler::HandleImportPersonalPasswordSelected,
396 base::Unretained(this))); 385 base::Unretained(this)));
397 386
398 web_ui()->RegisterMessageCallback( 387 web_ui()->RegisterMessageCallback(
399 "importCaCertificate", 388 "importCaCertificate",
400 base::Bind(&CertificatesHandler::HandleImportCA, 389 base::Bind(&CertificatesHandler::HandleImportCA, base::Unretained(this)));
401 base::Unretained(this)));
402 web_ui()->RegisterMessageCallback( 390 web_ui()->RegisterMessageCallback(
403 "importCaCertificateTrustSelected", 391 "importCaCertificateTrustSelected",
404 base::Bind(&CertificatesHandler::HandleImportCATrustSelected, 392 base::Bind(&CertificatesHandler::HandleImportCATrustSelected,
405 base::Unretained(this))); 393 base::Unretained(this)));
406 394
407 web_ui()->RegisterMessageCallback( 395 web_ui()->RegisterMessageCallback(
408 "importServerCertificate", 396 "importServerCertificate",
409 base::Bind(&CertificatesHandler::HandleImportServer, 397 base::Bind(&CertificatesHandler::HandleImportServer,
410 base::Unretained(this))); 398 base::Unretained(this)));
411 399
(...skipping 22 matching lines...) Expand all
434 if (service) 422 if (service)
435 service->GetWebTrustedCertificates(&web_trusted_certs); 423 service->GetWebTrustedCertificates(&web_trusted_certs);
436 #endif 424 #endif
437 PopulateTree("personalCerts", net::USER_CERT, web_trusted_certs); 425 PopulateTree("personalCerts", net::USER_CERT, web_trusted_certs);
438 PopulateTree("serverCerts", net::SERVER_CERT, web_trusted_certs); 426 PopulateTree("serverCerts", net::SERVER_CERT, web_trusted_certs);
439 PopulateTree("caCerts", net::CA_CERT, web_trusted_certs); 427 PopulateTree("caCerts", net::CA_CERT, web_trusted_certs);
440 PopulateTree("otherCerts", net::OTHER_CERT, web_trusted_certs); 428 PopulateTree("otherCerts", net::OTHER_CERT, web_trusted_certs);
441 } 429 }
442 430
443 void CertificatesHandler::FileSelected(const base::FilePath& path, 431 void CertificatesHandler::FileSelected(const base::FilePath& path,
444 int index, 432 int index,
445 void* params) { 433 void* params) {
446 switch (reinterpret_cast<intptr_t>(params)) { 434 switch (reinterpret_cast<intptr_t>(params)) {
447 case EXPORT_PERSONAL_FILE_SELECTED: 435 case EXPORT_PERSONAL_FILE_SELECTED:
448 ExportPersonalFileSelected(path); 436 ExportPersonalFileSelected(path);
449 break; 437 break;
450 case IMPORT_PERSONAL_FILE_SELECTED: 438 case IMPORT_PERSONAL_FILE_SELECTED:
451 ImportPersonalFileSelected(path); 439 ImportPersonalFileSelected(path);
452 break; 440 break;
453 case IMPORT_SERVER_FILE_SELECTED: 441 case IMPORT_SERVER_FILE_SELECTED:
454 ImportServerFileSelected(path); 442 ImportServerFileSelected(path);
455 break; 443 break;
(...skipping 19 matching lines...) Expand all
475 } 463 }
476 } 464 }
477 465
478 void CertificatesHandler::HandleViewCertificate(const base::ListValue* args) { 466 void CertificatesHandler::HandleViewCertificate(const base::ListValue* args) {
479 net::X509Certificate* cert = cert_id_map_->CallbackArgsToCert(args); 467 net::X509Certificate* cert = cert_id_map_->CallbackArgsToCert(args);
480 if (!cert) 468 if (!cert)
481 return; 469 return;
482 #if defined(OS_CHROMEOS) 470 #if defined(OS_CHROMEOS)
483 if (show_certs_in_modal_dialog_) { 471 if (show_certs_in_modal_dialog_) {
484 ShowCertificateViewerModalDialog(web_ui()->GetWebContents(), 472 ShowCertificateViewerModalDialog(web_ui()->GetWebContents(),
485 GetParentWindow(), 473 GetParentWindow(), cert);
486 cert);
487 return; 474 return;
488 } 475 }
489 #endif 476 #endif
490 ShowCertificateViewer(web_ui()->GetWebContents(), GetParentWindow(), cert); 477 ShowCertificateViewer(web_ui()->GetWebContents(), GetParentWindow(), cert);
491 } 478 }
492 479
493 void CertificatesHandler::AssignWebUICallbackId(const base::ListValue* args) { 480 void CertificatesHandler::AssignWebUICallbackId(const base::ListValue* args) {
494 CHECK_LE(1U, args->GetSize()); 481 CHECK_LE(1U, args->GetSize());
495 CHECK(webui_callback_id_.empty()); 482 CHECK(webui_callback_id_.empty());
496 CHECK(args->GetString(0, &webui_callback_id_)); 483 CHECK(args->GetString(0, &webui_callback_id_));
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 CHECK(cert); 517 CHECK(cert);
531 518
532 bool trust_ssl = false; 519 bool trust_ssl = false;
533 bool trust_email = false; 520 bool trust_email = false;
534 bool trust_obj_sign = false; 521 bool trust_obj_sign = false;
535 CHECK(args->GetBoolean(2, &trust_ssl)); 522 CHECK(args->GetBoolean(2, &trust_ssl));
536 CHECK(args->GetBoolean(3, &trust_email)); 523 CHECK(args->GetBoolean(3, &trust_email));
537 CHECK(args->GetBoolean(4, &trust_obj_sign)); 524 CHECK(args->GetBoolean(4, &trust_obj_sign));
538 525
539 bool result = certificate_manager_model_->SetCertTrust( 526 bool result = certificate_manager_model_->SetCertTrust(
540 cert, 527 cert, net::CA_CERT,
541 net::CA_CERT,
542 trust_ssl * net::NSSCertDatabase::TRUSTED_SSL + 528 trust_ssl * net::NSSCertDatabase::TRUSTED_SSL +
543 trust_email * net::NSSCertDatabase::TRUSTED_EMAIL + 529 trust_email * net::NSSCertDatabase::TRUSTED_EMAIL +
544 trust_obj_sign * net::NSSCertDatabase::TRUSTED_OBJ_SIGN); 530 trust_obj_sign * net::NSSCertDatabase::TRUSTED_OBJ_SIGN);
545 if (!result) { 531 if (!result) {
546 // TODO(mattm): better error messages? 532 // TODO(mattm): better error messages?
547 RejectCallbackWithError( 533 RejectCallbackWithError(
548 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_SET_TRUST_ERROR_TITLE), 534 l10n_util::GetStringUTF8(
549 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_UNKNOWN_ERROR)); 535 IDS_SETTINGS_CERTIFICATE_MANAGER_SET_TRUST_ERROR_TITLE),
536 l10n_util::GetStringUTF8(
537 IDS_SETTINGS_CERTIFICATE_MANAGER_UNKNOWN_ERROR));
550 } else { 538 } else {
551 ResolveCallback(*base::Value::CreateNullValue()); 539 ResolveCallback(*base::Value::CreateNullValue());
552 } 540 }
553 } 541 }
554 542
555 void CertificatesHandler::HandleExportPersonal(const base::ListValue* args) { 543 void CertificatesHandler::HandleExportPersonal(const base::ListValue* args) {
556 CHECK_EQ(2U, args->GetSize()); 544 CHECK_EQ(2U, args->GetSize());
557 AssignWebUICallbackId(args); 545 AssignWebUICallbackId(args);
558 std::string node_id; 546 std::string node_id;
559 CHECK(args->GetString(1, &node_id)); 547 CHECK(args->GetString(1, &node_id));
560 548
561 net::X509Certificate* cert = cert_id_map_->IdToCert(node_id); 549 net::X509Certificate* cert = cert_id_map_->IdToCert(node_id);
562 CHECK(cert); 550 CHECK(cert);
563 selected_cert_list_.push_back(cert); 551 selected_cert_list_.push_back(cert);
564 552
565 ui::SelectFileDialog::FileTypeInfo file_type_info; 553 ui::SelectFileDialog::FileTypeInfo file_type_info;
566 file_type_info.extensions.resize(1); 554 file_type_info.extensions.resize(1);
567 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("p12")); 555 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("p12"));
568 file_type_info.extension_description_overrides.push_back( 556 file_type_info.extension_description_overrides.push_back(
569 l10n_util::GetStringUTF16(IDS_CERT_MANAGER_PKCS12_FILES)); 557 l10n_util::GetStringUTF16(IDS_SETTINGS_CERTIFICATE_MANAGER_PKCS12_FILES));
570 file_type_info.include_all_files = true; 558 file_type_info.include_all_files = true;
571 select_file_dialog_ = ui::SelectFileDialog::Create( 559 select_file_dialog_ = ui::SelectFileDialog::Create(
572 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); 560 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents()));
573 select_file_dialog_->SelectFile( 561 select_file_dialog_->SelectFile(
574 ui::SelectFileDialog::SELECT_SAVEAS_FILE, base::string16(), 562 ui::SelectFileDialog::SELECT_SAVEAS_FILE, base::string16(),
575 base::FilePath(), &file_type_info, 1, FILE_PATH_LITERAL("p12"), 563 base::FilePath(), &file_type_info, 1, FILE_PATH_LITERAL("p12"),
576 GetParentWindow(), 564 GetParentWindow(),
577 reinterpret_cast<void*>(EXPORT_PERSONAL_FILE_SELECTED)); 565 reinterpret_cast<void*>(EXPORT_PERSONAL_FILE_SELECTED));
578 } 566 }
579 567
580 void CertificatesHandler::ExportPersonalFileSelected( 568 void CertificatesHandler::ExportPersonalFileSelected(
581 const base::FilePath& path) { 569 const base::FilePath& path) {
582 file_path_ = path; 570 file_path_ = path;
583 ResolveCallback(*base::Value::CreateNullValue()); 571 ResolveCallback(*base::Value::CreateNullValue());
584 } 572 }
585 573
586 void CertificatesHandler::HandleExportPersonalPasswordSelected( 574 void CertificatesHandler::HandleExportPersonalPasswordSelected(
587 const base::ListValue* args) { 575 const base::ListValue* args) {
588 CHECK_EQ(2U, args->GetSize()); 576 CHECK_EQ(2U, args->GetSize());
589 AssignWebUICallbackId(args); 577 AssignWebUICallbackId(args);
590 CHECK(args->GetString(1, &password_)); 578 CHECK(args->GetString(1, &password_));
591 579
592 // Currently, we don't support exporting more than one at a time. If we do, 580 // Currently, we don't support exporting more than one at a time. If we do,
593 // this would need to either change this to use UnlockSlotsIfNecessary or 581 // this would need to either change this to use UnlockSlotsIfNecessary or
594 // change UnlockCertSlotIfNecessary to take a CertificateList. 582 // change UnlockCertSlotIfNecessary to take a CertificateList.
595 DCHECK_EQ(selected_cert_list_.size(), 1U); 583 DCHECK_EQ(selected_cert_list_.size(), 1U);
596 584
597 // TODO(mattm): do something smarter about non-extractable keys 585 // TODO(mattm): do something smarter about non-extractable keys
598 chrome::UnlockCertSlotIfNecessary( 586 chrome::UnlockCertSlotIfNecessary(
599 selected_cert_list_[0].get(), 587 selected_cert_list_[0].get(), chrome::kCryptoModulePasswordCertExport,
600 chrome::kCryptoModulePasswordCertExport,
601 net::HostPortPair(), // unused. 588 net::HostPortPair(), // unused.
602 GetParentWindow(), 589 GetParentWindow(),
603 base::Bind(&CertificatesHandler::ExportPersonalSlotsUnlocked, 590 base::Bind(&CertificatesHandler::ExportPersonalSlotsUnlocked,
604 base::Unretained(this))); 591 base::Unretained(this)));
605 } 592 }
606 593
607 void CertificatesHandler::ExportPersonalSlotsUnlocked() { 594 void CertificatesHandler::ExportPersonalSlotsUnlocked() {
608 std::string output; 595 std::string output;
609 int num_exported = certificate_manager_model_->cert_db()->ExportToPKCS12( 596 int num_exported = certificate_manager_model_->cert_db()->ExportToPKCS12(
610 selected_cert_list_, 597 selected_cert_list_, password_, &output);
611 password_,
612 &output);
613 if (!num_exported) { 598 if (!num_exported) {
614 RejectCallbackWithError( 599 RejectCallbackWithError(
615 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_PKCS12_EXPORT_ERROR_TITLE), 600 l10n_util::GetStringUTF8(
616 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_UNKNOWN_ERROR)); 601 IDS_SETTINGS_CERTIFICATE_MANAGER_PKCS12_EXPORT_ERROR_TITLE),
602 l10n_util::GetStringUTF8(
603 IDS_SETTINGS_CERTIFICATE_MANAGER_UNKNOWN_ERROR));
617 ImportExportCleanup(); 604 ImportExportCleanup();
618 return; 605 return;
619 } 606 }
620 file_access_provider_->StartWrite( 607 file_access_provider_->StartWrite(
621 file_path_, 608 file_path_, output,
622 output,
623 base::Bind(&CertificatesHandler::ExportPersonalFileWritten, 609 base::Bind(&CertificatesHandler::ExportPersonalFileWritten,
624 base::Unretained(this)), 610 base::Unretained(this)),
625 &tracker_); 611 &tracker_);
626 } 612 }
627 613
628 void CertificatesHandler::ExportPersonalFileWritten( 614 void CertificatesHandler::ExportPersonalFileWritten(const int* write_errno,
629 const int* write_errno, const int* bytes_written) { 615 const int* bytes_written) {
630 ImportExportCleanup(); 616 ImportExportCleanup();
631 if (*write_errno) { 617 if (*write_errno) {
632 RejectCallbackWithError( 618 RejectCallbackWithError(
633 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_PKCS12_EXPORT_ERROR_TITLE), 619 l10n_util::GetStringUTF8(
634 l10n_util::GetStringFUTF8(IDS_CERT_MANAGER_WRITE_ERROR_FORMAT, 620 IDS_SETTINGS_CERTIFICATE_MANAGER_PKCS12_EXPORT_ERROR_TITLE),
635 UTF8ToUTF16( 621 l10n_util::GetStringFUTF8(
636 base::safe_strerror(*write_errno)))); 622 IDS_SETTINGS_CERTIFICATE_MANAGER_WRITE_ERROR_FORMAT,
623 UTF8ToUTF16(base::safe_strerror(*write_errno))));
637 } else { 624 } else {
638 ResolveCallback(*base::Value::CreateNullValue()); 625 ResolveCallback(*base::Value::CreateNullValue());
639 } 626 }
640 } 627 }
641 628
642 void CertificatesHandler::HandleImportPersonal(const base::ListValue* args) { 629 void CertificatesHandler::HandleImportPersonal(const base::ListValue* args) {
643 CHECK_EQ(2U, args->GetSize()); 630 CHECK_EQ(2U, args->GetSize());
644 AssignWebUICallbackId(args); 631 AssignWebUICallbackId(args);
645 CHECK(args->GetBoolean(1, &use_hardware_backed_)); 632 CHECK(args->GetBoolean(1, &use_hardware_backed_));
646 633
647 ui::SelectFileDialog::FileTypeInfo file_type_info; 634 ui::SelectFileDialog::FileTypeInfo file_type_info;
648 file_type_info.extensions.resize(1); 635 file_type_info.extensions.resize(1);
649 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("p12")); 636 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("p12"));
650 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("pfx")); 637 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("pfx"));
651 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("crt")); 638 file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("crt"));
652 file_type_info.extension_description_overrides.push_back( 639 file_type_info.extension_description_overrides.push_back(
653 l10n_util::GetStringUTF16(IDS_CERT_USAGE_SSL_CLIENT)); 640 l10n_util::GetStringUTF16(
641 IDS_SETTINGS_CERTIFICATE_MANAGER_USAGE_SSL_CLIENT));
654 file_type_info.include_all_files = true; 642 file_type_info.include_all_files = true;
655 select_file_dialog_ = ui::SelectFileDialog::Create( 643 select_file_dialog_ = ui::SelectFileDialog::Create(
656 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); 644 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents()));
657 select_file_dialog_->SelectFile( 645 select_file_dialog_->SelectFile(
658 ui::SelectFileDialog::SELECT_OPEN_FILE, base::string16(), 646 ui::SelectFileDialog::SELECT_OPEN_FILE, base::string16(),
659 base::FilePath(), &file_type_info, 1, FILE_PATH_LITERAL("p12"), 647 base::FilePath(), &file_type_info, 1, FILE_PATH_LITERAL("p12"),
660 GetParentWindow(), 648 GetParentWindow(),
661 reinterpret_cast<void*>(IMPORT_PERSONAL_FILE_SELECTED)); 649 reinterpret_cast<void*>(IMPORT_PERSONAL_FILE_SELECTED));
662 } 650 }
663 651
664 void CertificatesHandler::ImportPersonalFileSelected( 652 void CertificatesHandler::ImportPersonalFileSelected(
665 const base::FilePath& path) { 653 const base::FilePath& path) {
666 file_access_provider_->StartRead( 654 file_access_provider_->StartRead(
667 path, base::Bind(&CertificatesHandler::ImportPersonalFileRead, 655 path, base::Bind(&CertificatesHandler::ImportPersonalFileRead,
668 base::Unretained(this)), 656 base::Unretained(this)),
669 &tracker_); 657 &tracker_);
670 } 658 }
671 659
672 void CertificatesHandler::ImportPersonalFileRead( 660 void CertificatesHandler::ImportPersonalFileRead(const int* read_errno,
673 const int* read_errno, const std::string* data) { 661 const std::string* data) {
674 if (*read_errno) { 662 if (*read_errno) {
675 ImportExportCleanup(); 663 ImportExportCleanup();
676 RejectCallbackWithError( 664 RejectCallbackWithError(
677 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_IMPORT_ERROR_TITLE), 665 l10n_util::GetStringUTF8(
678 l10n_util::GetStringFUTF8(IDS_CERT_MANAGER_READ_ERROR_FORMAT, 666 IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_ERROR_TITLE),
679 UTF8ToUTF16( 667 l10n_util::GetStringFUTF8(
680 base::safe_strerror(*read_errno)))); 668 IDS_SETTINGS_CERTIFICATE_MANAGER_READ_ERROR_FORMAT,
669 UTF8ToUTF16(base::safe_strerror(*read_errno))));
681 return; 670 return;
682 } 671 }
683 672
684 file_data_ = *data; 673 file_data_ = *data;
685 674
686 if (CouldBePFX(file_data_)) { 675 if (CouldBePFX(file_data_)) {
687 ResolveCallback(base::FundamentalValue(true)); 676 ResolveCallback(base::FundamentalValue(true));
688 return; 677 return;
689 } 678 }
690 679
691 // Non .p12/.pfx files are assumed to be single/chain certificates without 680 // Non .p12/.pfx files are assumed to be single/chain certificates without
692 // private key data. The default extension according to spec is '.crt', 681 // private key data. The default extension according to spec is '.crt',
693 // however other extensions are also used in some places to represent these 682 // however other extensions are also used in some places to represent these
694 // certificates. 683 // certificates.
695 int result = certificate_manager_model_->ImportUserCert(file_data_); 684 int result = certificate_manager_model_->ImportUserCert(file_data_);
696 ImportExportCleanup(); 685 ImportExportCleanup();
697 int string_id; 686 int string_id;
698 switch (result) { 687 switch (result) {
699 case net::OK: 688 case net::OK:
700 ResolveCallback(base::FundamentalValue(false)); 689 ResolveCallback(base::FundamentalValue(false));
701 return; 690 return;
702 case net::ERR_NO_PRIVATE_KEY_FOR_CERT: 691 case net::ERR_NO_PRIVATE_KEY_FOR_CERT:
703 string_id = IDS_CERT_MANAGER_IMPORT_MISSING_KEY; 692 string_id = IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_MISSING_KEY;
704 break; 693 break;
705 case net::ERR_CERT_INVALID: 694 case net::ERR_CERT_INVALID:
706 string_id = IDS_CERT_MANAGER_IMPORT_INVALID_FILE; 695 string_id = IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_INVALID_FILE;
707 break; 696 break;
708 default: 697 default:
709 string_id = IDS_CERT_MANAGER_UNKNOWN_ERROR; 698 string_id = IDS_SETTINGS_CERTIFICATE_MANAGER_UNKNOWN_ERROR;
710 break; 699 break;
711 } 700 }
712 RejectCallbackWithError( 701 RejectCallbackWithError(
713 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_IMPORT_ERROR_TITLE), 702 l10n_util::GetStringUTF8(
703 IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_ERROR_TITLE),
714 l10n_util::GetStringUTF8(string_id)); 704 l10n_util::GetStringUTF8(string_id));
715 } 705 }
716 706
717 void CertificatesHandler::HandleImportPersonalPasswordSelected( 707 void CertificatesHandler::HandleImportPersonalPasswordSelected(
718 const base::ListValue* args) { 708 const base::ListValue* args) {
719 CHECK_EQ(2U, args->GetSize()); 709 CHECK_EQ(2U, args->GetSize());
720 AssignWebUICallbackId(args); 710 AssignWebUICallbackId(args);
721 CHECK(args->GetString(1, &password_)); 711 CHECK(args->GetString(1, &password_));
722 712
723 if (use_hardware_backed_) { 713 if (use_hardware_backed_) {
724 module_ = certificate_manager_model_->cert_db()->GetPrivateModule(); 714 module_ = certificate_manager_model_->cert_db()->GetPrivateModule();
725 } else { 715 } else {
726 module_ = certificate_manager_model_->cert_db()->GetPublicModule(); 716 module_ = certificate_manager_model_->cert_db()->GetPublicModule();
727 } 717 }
728 718
729 net::CryptoModuleList modules; 719 net::CryptoModuleList modules;
730 modules.push_back(module_); 720 modules.push_back(module_);
731 chrome::UnlockSlotsIfNecessary( 721 chrome::UnlockSlotsIfNecessary(
732 modules, 722 modules, chrome::kCryptoModulePasswordCertImport,
733 chrome::kCryptoModulePasswordCertImport,
734 net::HostPortPair(), // unused. 723 net::HostPortPair(), // unused.
735 GetParentWindow(), 724 GetParentWindow(),
736 base::Bind(&CertificatesHandler::ImportPersonalSlotUnlocked, 725 base::Bind(&CertificatesHandler::ImportPersonalSlotUnlocked,
737 base::Unretained(this))); 726 base::Unretained(this)));
738 } 727 }
739 728
740 void CertificatesHandler::ImportPersonalSlotUnlocked() { 729 void CertificatesHandler::ImportPersonalSlotUnlocked() {
741 // Determine if the private key should be unextractable after the import. 730 // Determine if the private key should be unextractable after the import.
742 // We do this by checking the value of |use_hardware_backed_| which is set 731 // We do this by checking the value of |use_hardware_backed_| which is set
743 // to true if importing into a hardware module. Currently, this only happens 732 // to true if importing into a hardware module. Currently, this only happens
744 // for Chrome OS when the "Import and Bind" option is chosen. 733 // for Chrome OS when the "Import and Bind" option is chosen.
745 bool is_extractable = !use_hardware_backed_; 734 bool is_extractable = !use_hardware_backed_;
746 int result = certificate_manager_model_->ImportFromPKCS12( 735 int result = certificate_manager_model_->ImportFromPKCS12(
747 module_.get(), file_data_, password_, is_extractable); 736 module_.get(), file_data_, password_, is_extractable);
748 ImportExportCleanup(); 737 ImportExportCleanup();
749 int string_id; 738 int string_id;
750 switch (result) { 739 switch (result) {
751 case net::OK: 740 case net::OK:
752 ResolveCallback(*base::Value::CreateNullValue()); 741 ResolveCallback(*base::Value::CreateNullValue());
753 return; 742 return;
754 case net::ERR_PKCS12_IMPORT_BAD_PASSWORD: 743 case net::ERR_PKCS12_IMPORT_BAD_PASSWORD:
755 // TODO(mattm): if the error was a bad password, we should reshow the 744 // TODO(mattm): if the error was a bad password, we should reshow the
756 // password dialog after the user dismisses the error dialog. 745 // password dialog after the user dismisses the error dialog.
757 string_id = IDS_CERT_MANAGER_BAD_PASSWORD; 746 string_id = IDS_SETTINGS_CERTIFICATE_MANAGER_BAD_PASSWORD;
758 break; 747 break;
759 case net::ERR_PKCS12_IMPORT_INVALID_MAC: 748 case net::ERR_PKCS12_IMPORT_INVALID_MAC:
760 string_id = IDS_CERT_MANAGER_IMPORT_INVALID_MAC; 749 string_id = IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_INVALID_MAC;
761 break; 750 break;
762 case net::ERR_PKCS12_IMPORT_INVALID_FILE: 751 case net::ERR_PKCS12_IMPORT_INVALID_FILE:
763 string_id = IDS_CERT_MANAGER_IMPORT_INVALID_FILE; 752 string_id = IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_INVALID_FILE;
764 break; 753 break;
765 case net::ERR_PKCS12_IMPORT_UNSUPPORTED: 754 case net::ERR_PKCS12_IMPORT_UNSUPPORTED:
766 string_id = IDS_CERT_MANAGER_IMPORT_UNSUPPORTED; 755 string_id = IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_UNSUPPORTED;
767 break; 756 break;
768 default: 757 default:
769 string_id = IDS_CERT_MANAGER_UNKNOWN_ERROR; 758 string_id = IDS_SETTINGS_CERTIFICATE_MANAGER_UNKNOWN_ERROR;
770 break; 759 break;
771 } 760 }
772 RejectCallbackWithError( 761 RejectCallbackWithError(
773 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_IMPORT_ERROR_TITLE), 762 l10n_util::GetStringUTF8(
763 IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_ERROR_TITLE),
774 l10n_util::GetStringUTF8(string_id)); 764 l10n_util::GetStringUTF8(string_id));
775 } 765 }
776 766
777 void CertificatesHandler::HandleCancelImportExportProcess( 767 void CertificatesHandler::HandleCancelImportExportProcess(
778 const base::ListValue* args) { 768 const base::ListValue* args) {
779 ImportExportCleanup(); 769 ImportExportCleanup();
780 } 770 }
781 771
782 void CertificatesHandler::ImportExportCleanup() { 772 void CertificatesHandler::ImportExportCleanup() {
783 file_path_.clear(); 773 file_path_.clear();
(...skipping 11 matching lines...) Expand all
795 select_file_dialog_ = NULL; 785 select_file_dialog_ = NULL;
796 } 786 }
797 787
798 void CertificatesHandler::HandleImportServer(const base::ListValue* args) { 788 void CertificatesHandler::HandleImportServer(const base::ListValue* args) {
799 CHECK_EQ(1U, args->GetSize()); 789 CHECK_EQ(1U, args->GetSize());
800 AssignWebUICallbackId(args); 790 AssignWebUICallbackId(args);
801 791
802 select_file_dialog_ = ui::SelectFileDialog::Create( 792 select_file_dialog_ = ui::SelectFileDialog::Create(
803 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); 793 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents()));
804 ShowCertSelectFileDialog( 794 ShowCertSelectFileDialog(
805 select_file_dialog_.get(), 795 select_file_dialog_.get(), ui::SelectFileDialog::SELECT_OPEN_FILE,
806 ui::SelectFileDialog::SELECT_OPEN_FILE, 796 base::FilePath(), GetParentWindow(),
807 base::FilePath(),
808 GetParentWindow(),
809 reinterpret_cast<void*>(IMPORT_SERVER_FILE_SELECTED)); 797 reinterpret_cast<void*>(IMPORT_SERVER_FILE_SELECTED));
810 } 798 }
811 799
812 void CertificatesHandler::ImportServerFileSelected( 800 void CertificatesHandler::ImportServerFileSelected(const base::FilePath& path) {
813 const base::FilePath& path) {
814 file_access_provider_->StartRead( 801 file_access_provider_->StartRead(
815 path, base::Bind(&CertificatesHandler::ImportServerFileRead, 802 path, base::Bind(&CertificatesHandler::ImportServerFileRead,
816 base::Unretained(this)), 803 base::Unretained(this)),
817 &tracker_); 804 &tracker_);
818 } 805 }
819 806
820 void CertificatesHandler::ImportServerFileRead(const int* read_errno, 807 void CertificatesHandler::ImportServerFileRead(const int* read_errno,
821 const std::string* data) { 808 const std::string* data) {
822 if (*read_errno) { 809 if (*read_errno) {
823 ImportExportCleanup(); 810 ImportExportCleanup();
824 RejectCallbackWithError( 811 RejectCallbackWithError(
825 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_SERVER_IMPORT_ERROR_TITLE), 812 l10n_util::GetStringUTF8(
826 l10n_util::GetStringFUTF8(IDS_CERT_MANAGER_READ_ERROR_FORMAT, 813 IDS_SETTINGS_CERTIFICATE_MANAGER_SERVER_IMPORT_ERROR_TITLE),
827 UTF8ToUTF16( 814 l10n_util::GetStringFUTF8(
828 base::safe_strerror(*read_errno)))); 815 IDS_SETTINGS_CERTIFICATE_MANAGER_READ_ERROR_FORMAT,
816 UTF8ToUTF16(base::safe_strerror(*read_errno))));
829 return; 817 return;
830 } 818 }
831 819
832 selected_cert_list_ = net::X509Certificate::CreateCertificateListFromBytes( 820 selected_cert_list_ = net::X509Certificate::CreateCertificateListFromBytes(
833 data->data(), data->size(), net::X509Certificate::FORMAT_AUTO); 821 data->data(), data->size(), net::X509Certificate::FORMAT_AUTO);
834 if (selected_cert_list_.empty()) { 822 if (selected_cert_list_.empty()) {
835 ImportExportCleanup(); 823 ImportExportCleanup();
836 RejectCallbackWithError( 824 RejectCallbackWithError(
837 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_SERVER_IMPORT_ERROR_TITLE), 825 l10n_util::GetStringUTF8(
838 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_CERT_PARSE_ERROR)); 826 IDS_SETTINGS_CERTIFICATE_MANAGER_SERVER_IMPORT_ERROR_TITLE),
827 l10n_util::GetStringUTF8(
828 IDS_SETTINGS_CERTIFICATE_MANAGER_CERT_PARSE_ERROR));
839 return; 829 return;
840 } 830 }
841 831
842 net::NSSCertDatabase::ImportCertFailureList not_imported; 832 net::NSSCertDatabase::ImportCertFailureList not_imported;
843 // TODO(mattm): Add UI for trust. http://crbug.com/76274 833 // TODO(mattm): Add UI for trust. http://crbug.com/76274
844 bool result = certificate_manager_model_->ImportServerCert( 834 bool result = certificate_manager_model_->ImportServerCert(
845 selected_cert_list_, 835 selected_cert_list_, net::NSSCertDatabase::TRUST_DEFAULT, &not_imported);
846 net::NSSCertDatabase::TRUST_DEFAULT,
847 &not_imported);
848 if (!result) { 836 if (!result) {
849 RejectCallbackWithError( 837 RejectCallbackWithError(
850 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_SERVER_IMPORT_ERROR_TITLE), 838 l10n_util::GetStringUTF8(
851 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_UNKNOWN_ERROR)); 839 IDS_SETTINGS_CERTIFICATE_MANAGER_SERVER_IMPORT_ERROR_TITLE),
840 l10n_util::GetStringUTF8(
841 IDS_SETTINGS_CERTIFICATE_MANAGER_UNKNOWN_ERROR));
852 } else if (!not_imported.empty()) { 842 } else if (!not_imported.empty()) {
853 RejectCallbackWithImportError( 843 RejectCallbackWithImportError(
854 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_SERVER_IMPORT_ERROR_TITLE), 844 l10n_util::GetStringUTF8(
845 IDS_SETTINGS_CERTIFICATE_MANAGER_SERVER_IMPORT_ERROR_TITLE),
855 not_imported); 846 not_imported);
856 } else { 847 } else {
857 ResolveCallback(*base::Value::CreateNullValue()); 848 ResolveCallback(*base::Value::CreateNullValue());
858 } 849 }
859 ImportExportCleanup(); 850 ImportExportCleanup();
860 } 851 }
861 852
862 void CertificatesHandler::HandleImportCA(const base::ListValue* args) { 853 void CertificatesHandler::HandleImportCA(const base::ListValue* args) {
863 CHECK_EQ(1U, args->GetSize()); 854 CHECK_EQ(1U, args->GetSize());
864 AssignWebUICallbackId(args); 855 AssignWebUICallbackId(args);
865 856
866 select_file_dialog_ = ui::SelectFileDialog::Create( 857 select_file_dialog_ = ui::SelectFileDialog::Create(
867 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents())); 858 this, new ChromeSelectFilePolicy(web_ui()->GetWebContents()));
868 ShowCertSelectFileDialog(select_file_dialog_.get(), 859 ShowCertSelectFileDialog(select_file_dialog_.get(),
869 ui::SelectFileDialog::SELECT_OPEN_FILE, 860 ui::SelectFileDialog::SELECT_OPEN_FILE,
870 base::FilePath(), 861 base::FilePath(), GetParentWindow(),
871 GetParentWindow(),
872 reinterpret_cast<void*>(IMPORT_CA_FILE_SELECTED)); 862 reinterpret_cast<void*>(IMPORT_CA_FILE_SELECTED));
873 } 863 }
874 864
875 void CertificatesHandler::ImportCAFileSelected( 865 void CertificatesHandler::ImportCAFileSelected(const base::FilePath& path) {
876 const base::FilePath& path) {
877 file_access_provider_->StartRead( 866 file_access_provider_->StartRead(
878 path, base::Bind(&CertificatesHandler::ImportCAFileRead, 867 path, base::Bind(&CertificatesHandler::ImportCAFileRead,
879 base::Unretained(this)), 868 base::Unretained(this)),
880 &tracker_); 869 &tracker_);
881 } 870 }
882 871
883 void CertificatesHandler::ImportCAFileRead(const int* read_errno, 872 void CertificatesHandler::ImportCAFileRead(const int* read_errno,
884 const std::string* data) { 873 const std::string* data) {
885 if (*read_errno) { 874 if (*read_errno) {
886 ImportExportCleanup(); 875 ImportExportCleanup();
887 RejectCallbackWithError( 876 RejectCallbackWithError(
888 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_CA_IMPORT_ERROR_TITLE), 877 l10n_util::GetStringUTF8(
889 l10n_util::GetStringFUTF8(IDS_CERT_MANAGER_READ_ERROR_FORMAT, 878 IDS_SETTINGS_CERTIFICATE_MANAGER_CA_IMPORT_ERROR_TITLE),
890 UTF8ToUTF16( 879 l10n_util::GetStringFUTF8(
891 base::safe_strerror(*read_errno)))); 880 IDS_SETTINGS_CERTIFICATE_MANAGER_READ_ERROR_FORMAT,
881 UTF8ToUTF16(base::safe_strerror(*read_errno))));
892 return; 882 return;
893 } 883 }
894 884
895 selected_cert_list_ = net::X509Certificate::CreateCertificateListFromBytes( 885 selected_cert_list_ = net::X509Certificate::CreateCertificateListFromBytes(
896 data->data(), data->size(), net::X509Certificate::FORMAT_AUTO); 886 data->data(), data->size(), net::X509Certificate::FORMAT_AUTO);
897 if (selected_cert_list_.empty()) { 887 if (selected_cert_list_.empty()) {
898 ImportExportCleanup(); 888 ImportExportCleanup();
899 RejectCallbackWithError( 889 RejectCallbackWithError(
900 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_CA_IMPORT_ERROR_TITLE), 890 l10n_util::GetStringUTF8(
901 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_CERT_PARSE_ERROR)); 891 IDS_SETTINGS_CERTIFICATE_MANAGER_CA_IMPORT_ERROR_TITLE),
892 l10n_util::GetStringUTF8(
893 IDS_SETTINGS_CERTIFICATE_MANAGER_CERT_PARSE_ERROR));
902 return; 894 return;
903 } 895 }
904 896
905 scoped_refptr<net::X509Certificate> root_cert = 897 scoped_refptr<net::X509Certificate> root_cert =
906 certificate_manager_model_->cert_db()->FindRootInList( 898 certificate_manager_model_->cert_db()->FindRootInList(
907 selected_cert_list_); 899 selected_cert_list_);
908 900
909 // TODO(mattm): check here if root_cert is not a CA cert and show error. 901 // TODO(mattm): check here if root_cert is not a CA cert and show error.
910 902
911 base::StringValue cert_name(root_cert->subject().GetDisplayName()); 903 base::StringValue cert_name(root_cert->subject().GetDisplayName());
(...skipping 16 matching lines...) Expand all
928 // http://crbug.com/128411 920 // http://crbug.com/128411
929 net::NSSCertDatabase::ImportCertFailureList not_imported; 921 net::NSSCertDatabase::ImportCertFailureList not_imported;
930 bool result = certificate_manager_model_->ImportCACerts( 922 bool result = certificate_manager_model_->ImportCACerts(
931 selected_cert_list_, 923 selected_cert_list_,
932 trust_ssl * net::NSSCertDatabase::TRUSTED_SSL + 924 trust_ssl * net::NSSCertDatabase::TRUSTED_SSL +
933 trust_email * net::NSSCertDatabase::TRUSTED_EMAIL + 925 trust_email * net::NSSCertDatabase::TRUSTED_EMAIL +
934 trust_obj_sign * net::NSSCertDatabase::TRUSTED_OBJ_SIGN, 926 trust_obj_sign * net::NSSCertDatabase::TRUSTED_OBJ_SIGN,
935 &not_imported); 927 &not_imported);
936 if (!result) { 928 if (!result) {
937 RejectCallbackWithError( 929 RejectCallbackWithError(
938 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_CA_IMPORT_ERROR_TITLE), 930 l10n_util::GetStringUTF8(
939 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_UNKNOWN_ERROR)); 931 IDS_SETTINGS_CERTIFICATE_MANAGER_CA_IMPORT_ERROR_TITLE),
932 l10n_util::GetStringUTF8(
933 IDS_SETTINGS_CERTIFICATE_MANAGER_UNKNOWN_ERROR));
940 } else if (!not_imported.empty()) { 934 } else if (!not_imported.empty()) {
941 RejectCallbackWithImportError( 935 RejectCallbackWithImportError(
942 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_CA_IMPORT_ERROR_TITLE), 936 l10n_util::GetStringUTF8(
937 IDS_SETTINGS_CERTIFICATE_MANAGER_CA_IMPORT_ERROR_TITLE),
943 not_imported); 938 not_imported);
944 } else { 939 } else {
945 ResolveCallback(*base::Value::CreateNullValue()); 940 ResolveCallback(*base::Value::CreateNullValue());
946 } 941 }
947 ImportExportCleanup(); 942 ImportExportCleanup();
948 } 943 }
949 944
950 void CertificatesHandler::HandleExportCertificate(const base::ListValue* args) { 945 void CertificatesHandler::HandleExportCertificate(const base::ListValue* args) {
951 net::X509Certificate* cert = cert_id_map_->CallbackArgsToCert(args); 946 net::X509Certificate* cert = cert_id_map_->CallbackArgsToCert(args);
952 if (!cert) 947 if (!cert)
953 return; 948 return;
954 ShowCertExportDialog(web_ui()->GetWebContents(), GetParentWindow(), cert); 949 ShowCertExportDialog(web_ui()->GetWebContents(), GetParentWindow(), cert);
955 } 950 }
956 951
957 void CertificatesHandler::HandleDeleteCertificate(const base::ListValue* args) { 952 void CertificatesHandler::HandleDeleteCertificate(const base::ListValue* args) {
958 CHECK_EQ(2U, args->GetSize()); 953 CHECK_EQ(2U, args->GetSize());
959 AssignWebUICallbackId(args); 954 AssignWebUICallbackId(args);
960 std::string node_id; 955 std::string node_id;
961 CHECK(args->GetString(1, &node_id)); 956 CHECK(args->GetString(1, &node_id));
962 957
963 net::X509Certificate* cert = cert_id_map_->IdToCert(node_id); 958 net::X509Certificate* cert = cert_id_map_->IdToCert(node_id);
964 CHECK(cert); 959 CHECK(cert);
965 960
966 bool result = certificate_manager_model_->Delete(cert); 961 bool result = certificate_manager_model_->Delete(cert);
967 if (!result) { 962 if (!result) {
968 // TODO(mattm): better error messages? 963 // TODO(mattm): better error messages?
969 RejectCallbackWithError( 964 RejectCallbackWithError(
970 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_DELETE_CERT_ERROR_TITLE), 965 l10n_util::GetStringUTF8(
971 l10n_util::GetStringUTF8(IDS_CERT_MANAGER_UNKNOWN_ERROR)); 966 IDS_SETTINGS_CERTIFICATE_MANAGER_DELETE_CERT_ERROR_TITLE),
967 l10n_util::GetStringUTF8(
968 IDS_SETTINGS_CERTIFICATE_MANAGER_UNKNOWN_ERROR));
972 } else { 969 } else {
973 ResolveCallback(*base::Value::CreateNullValue()); 970 ResolveCallback(*base::Value::CreateNullValue());
974 } 971 }
975 } 972 }
976 973
977 void CertificatesHandler::OnCertificateManagerModelCreated( 974 void CertificatesHandler::OnCertificateManagerModelCreated(
978 scoped_ptr<CertificateManagerModel> model) { 975 scoped_ptr<CertificateManagerModel> model) {
979 certificate_manager_model_ = std::move(model); 976 certificate_manager_model_ = std::move(model);
980 CertificateManagerModelReady(); 977 CertificateManagerModelReady();
981 } 978 }
982 979
983 void CertificatesHandler::CertificateManagerModelReady() { 980 void CertificatesHandler::CertificateManagerModelReady() {
984 base::FundamentalValue user_db_available_value( 981 base::FundamentalValue user_db_available_value(
985 certificate_manager_model_->is_user_db_available()); 982 certificate_manager_model_->is_user_db_available());
986 base::FundamentalValue tpm_available_value( 983 base::FundamentalValue tpm_available_value(
987 certificate_manager_model_->is_tpm_available()); 984 certificate_manager_model_->is_tpm_available());
988 web_ui()->CallJavascriptFunction( 985 web_ui()->CallJavascriptFunction(
989 "cr.webUIListenerCallback", 986 "cr.webUIListenerCallback", base::StringValue("certificates-model-ready"),
990 base::StringValue("certificates-model-ready"), 987 user_db_available_value, tpm_available_value);
991 user_db_available_value,
992 tpm_available_value);
993 certificate_manager_model_->Refresh(); 988 certificate_manager_model_->Refresh();
994 } 989 }
995 990
996 void CertificatesHandler::HandleRefreshCertificates( 991 void CertificatesHandler::HandleRefreshCertificates(
997 const base::ListValue* args) { 992 const base::ListValue* args) {
998 if (certificate_manager_model_) { 993 if (certificate_manager_model_) {
999 // Already have a model, the webui must be re-loading. Just re-run the 994 // Already have a model, the webui must be re-loading. Just re-run the
1000 // webui initialization. 995 // webui initialization.
1001 CertificateManagerModelReady(); 996 CertificateManagerModelReady();
1002 return; 997 return;
1003 } 998 }
1004 999
1005 if (!requested_certificate_manager_model_) { 1000 if (!requested_certificate_manager_model_) {
1006 // Request that a model be created. 1001 // Request that a model be created.
1007 CertificateManagerModel::Create( 1002 CertificateManagerModel::Create(
1008 Profile::FromWebUI(web_ui()), 1003 Profile::FromWebUI(web_ui()), this,
1009 this,
1010 base::Bind(&CertificatesHandler::OnCertificateManagerModelCreated, 1004 base::Bind(&CertificatesHandler::OnCertificateManagerModelCreated,
1011 weak_ptr_factory_.GetWeakPtr())); 1005 weak_ptr_factory_.GetWeakPtr()));
1012 requested_certificate_manager_model_ = true; 1006 requested_certificate_manager_model_ = true;
1013 return; 1007 return;
1014 } 1008 }
1015 1009
1016 // We are already waiting for a CertificateManagerModel to be created, no need 1010 // We are already waiting for a CertificateManagerModel to be created, no need
1017 // to do anything. 1011 // to do anything.
1018 } 1012 }
1019 1013
1020 void CertificatesHandler::PopulateTree( 1014 void CertificatesHandler::PopulateTree(
1021 const std::string& tab_name, 1015 const std::string& tab_name,
1022 net::CertType type, 1016 net::CertType type,
1023 const net::CertificateList& web_trust_certs) { 1017 const net::CertificateList& web_trust_certs) {
1024 scoped_ptr<icu::Collator> collator; 1018 scoped_ptr<icu::Collator> collator;
1025 UErrorCode error = U_ZERO_ERROR; 1019 UErrorCode error = U_ZERO_ERROR;
1026 collator.reset( 1020 collator.reset(icu::Collator::createInstance(
1027 icu::Collator::createInstance( 1021 icu::Locale(g_browser_process->GetApplicationLocale().c_str()), error));
1028 icu::Locale(g_browser_process->GetApplicationLocale().c_str()),
1029 error));
1030 if (U_FAILURE(error)) 1022 if (U_FAILURE(error))
1031 collator.reset(NULL); 1023 collator.reset(NULL);
1032 DictionaryIdComparator comparator(collator.get()); 1024 DictionaryIdComparator comparator(collator.get());
1033 CertificateManagerModel::OrgGroupingMap map; 1025 CertificateManagerModel::OrgGroupingMap map;
1034 1026
1035 certificate_manager_model_->FilterAndBuildOrgGroupingMap(type, &map); 1027 certificate_manager_model_->FilterAndBuildOrgGroupingMap(type, &map);
1036 1028
1037 { 1029 {
1038 scoped_ptr<base::ListValue> nodes = make_scoped_ptr(new base::ListValue()); 1030 scoped_ptr<base::ListValue> nodes = make_scoped_ptr(new base::ListValue());
1039 for (CertificateManagerModel::OrgGroupingMap::iterator i = map.begin(); 1031 for (CertificateManagerModel::OrgGroupingMap::iterator i = map.begin();
1040 i != map.end(); ++i) { 1032 i != map.end(); ++i) {
1041 // Populate first level (org name). 1033 // Populate first level (org name).
1042 base::DictionaryValue* dict = new base::DictionaryValue; 1034 base::DictionaryValue* dict = new base::DictionaryValue;
1043 dict->SetString(kKeyField, OrgNameToId(i->first)); 1035 dict->SetString(kKeyField, OrgNameToId(i->first));
1044 dict->SetString(kNameField, i->first); 1036 dict->SetString(kNameField, i->first);
1045 1037
1046 // Populate second level (certs). 1038 // Populate second level (certs).
1047 base::ListValue* subnodes = new base::ListValue; 1039 base::ListValue* subnodes = new base::ListValue;
1048 for (net::CertificateList::const_iterator org_cert_it = i->second.begin(); 1040 for (net::CertificateList::const_iterator org_cert_it = i->second.begin();
1049 org_cert_it != i->second.end(); ++org_cert_it) { 1041 org_cert_it != i->second.end(); ++org_cert_it) {
1050 base::DictionaryValue* cert_dict = new base::DictionaryValue; 1042 base::DictionaryValue* cert_dict = new base::DictionaryValue;
1051 net::X509Certificate* cert = org_cert_it->get(); 1043 net::X509Certificate* cert = org_cert_it->get();
1052 cert_dict->SetString(kKeyField, cert_id_map_->CertToId(cert)); 1044 cert_dict->SetString(kKeyField, cert_id_map_->CertToId(cert));
1053 cert_dict->SetString( 1045 cert_dict->SetString(
1054 kNameField, certificate_manager_model_->GetColumnText( 1046 kNameField, certificate_manager_model_->GetColumnText(
1055 *cert, CertificateManagerModel::COL_SUBJECT_NAME)); 1047 *cert, CertificateManagerModel::COL_SUBJECT_NAME));
1056 cert_dict->SetBoolean( 1048 cert_dict->SetBoolean(
1057 kReadonlyField, 1049 kReadonlyField,
1058 certificate_manager_model_->cert_db()->IsReadOnly(cert)); 1050 certificate_manager_model_->cert_db()->IsReadOnly(cert));
1059 // Policy-installed certificates with web trust are trusted. 1051 // Policy-installed certificates with web trust are trusted.
1060 bool policy_trusted = 1052 bool policy_trusted =
1061 IsPolicyInstalledWithWebTrust(web_trust_certs, cert); 1053 IsPolicyInstalledWithWebTrust(web_trust_certs, cert);
1062 cert_dict->SetBoolean( 1054 cert_dict->SetBoolean(
1063 kUntrustedField, 1055 kUntrustedField,
1064 !policy_trusted && 1056 !policy_trusted &&
1065 certificate_manager_model_->cert_db()->IsUntrusted(cert)); 1057 certificate_manager_model_->cert_db()->IsUntrusted(cert));
1066 cert_dict->SetBoolean(kPolicyField, policy_trusted); 1058 cert_dict->SetBoolean(kPolicyField, policy_trusted);
1067 // TODO(hshi): This should be determined by testing for PKCS #11 1059 // TODO(hshi): This should be determined by testing for PKCS #11
1068 // CKA_EXTRACTABLE attribute. We may need to use the NSS function 1060 // CKA_EXTRACTABLE attribute. We may need to use the NSS function
1069 // PK11_ReadRawAttribute to do that. 1061 // PK11_ReadRawAttribute to do that.
1070 cert_dict->SetBoolean( 1062 cert_dict->SetBoolean(
1071 kExtractableField, 1063 kExtractableField,
1072 !certificate_manager_model_->IsHardwareBacked(cert)); 1064 !certificate_manager_model_->IsHardwareBacked(cert));
1073 // TODO(mattm): Other columns. 1065 // TODO(mattm): Other columns.
1074 subnodes->Append(cert_dict); 1066 subnodes->Append(cert_dict);
1075 } 1067 }
1076 std::sort(subnodes->begin(), subnodes->end(), comparator); 1068 std::sort(subnodes->begin(), subnodes->end(), comparator);
1077 1069
1078 dict->Set(kSubnodesField, subnodes); 1070 dict->Set(kSubnodesField, subnodes);
1079 nodes->Append(dict); 1071 nodes->Append(dict);
1080 } 1072 }
1081 std::sort(nodes->begin(), nodes->end(), comparator); 1073 std::sort(nodes->begin(), nodes->end(), comparator);
1082 1074
1083 web_ui()->CallJavascriptFunction("cr.webUIListenerCallback", 1075 web_ui()->CallJavascriptFunction("cr.webUIListenerCallback",
1084 base::StringValue("certificates-changed"), 1076 base::StringValue("certificates-changed"),
1085 base::StringValue(tab_name), 1077 base::StringValue(tab_name), *nodes);
1086 *nodes);
1087 } 1078 }
1088 } 1079 }
1089 1080
1090 void CertificatesHandler::ResolveCallback(const base::Value& response) { 1081 void CertificatesHandler::ResolveCallback(const base::Value& response) {
1091 DCHECK(!webui_callback_id_.empty()); 1082 DCHECK(!webui_callback_id_.empty());
1092 ResolveJavascriptCallback(base::StringValue(webui_callback_id_), response); 1083 ResolveJavascriptCallback(base::StringValue(webui_callback_id_), response);
1093 webui_callback_id_.clear(); 1084 webui_callback_id_.clear();
1094 } 1085 }
1095 1086
1096 void CertificatesHandler::RejectCallback(const base::Value& response) { 1087 void CertificatesHandler::RejectCallback(const base::Value& response) {
1097 DCHECK(!webui_callback_id_.empty()); 1088 DCHECK(!webui_callback_id_.empty());
1098 RejectJavascriptCallback(base::StringValue(webui_callback_id_), response); 1089 RejectJavascriptCallback(base::StringValue(webui_callback_id_), response);
1099 webui_callback_id_.clear(); 1090 webui_callback_id_.clear();
1100 } 1091 }
1101 1092
1102 void CertificatesHandler::RejectCallbackWithError( 1093 void CertificatesHandler::RejectCallbackWithError(const std::string& title,
1103 const std::string& title, 1094 const std::string& error) {
1104 const std::string& error) {
1105 scoped_ptr<base::DictionaryValue> error_info(new base::DictionaryValue); 1095 scoped_ptr<base::DictionaryValue> error_info(new base::DictionaryValue);
1106 error_info->SetString(kErrorTitle, title); 1096 error_info->SetString(kErrorTitle, title);
1107 error_info->SetString(kErrorDescription, error); 1097 error_info->SetString(kErrorDescription, error);
1108 RejectCallback(*error_info); 1098 RejectCallback(*error_info);
1109 } 1099 }
1110 1100
1111 void CertificatesHandler::RejectCallbackWithImportError( 1101 void CertificatesHandler::RejectCallbackWithImportError(
1112 const std::string& title, 1102 const std::string& title,
1113 const net::NSSCertDatabase::ImportCertFailureList& not_imported) { 1103 const net::NSSCertDatabase::ImportCertFailureList& not_imported) {
1114 std::string error; 1104 std::string error;
1115 if (selected_cert_list_.size() == 1) 1105 if (selected_cert_list_.size() == 1)
1116 error = l10n_util::GetStringUTF8( 1106 error = l10n_util::GetStringUTF8(
1117 IDS_CERT_MANAGER_IMPORT_SINGLE_NOT_IMPORTED); 1107 IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_SINGLE_NOT_IMPORTED);
1118 else if (not_imported.size() == selected_cert_list_.size()) 1108 else if (not_imported.size() == selected_cert_list_.size())
1119 error = l10n_util::GetStringUTF8(IDS_CERT_MANAGER_IMPORT_ALL_NOT_IMPORTED); 1109 error = l10n_util::GetStringUTF8(
1110 IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_ALL_NOT_IMPORTED);
1120 else 1111 else
1121 error = l10n_util::GetStringUTF8(IDS_CERT_MANAGER_IMPORT_SOME_NOT_IMPORTED); 1112 error = l10n_util::GetStringUTF8(
1113 IDS_SETTINGS_CERTIFICATE_MANAGER_IMPORT_SOME_NOT_IMPORTED);
1122 1114
1123 scoped_ptr<base::ListValue> cert_error_list = 1115 scoped_ptr<base::ListValue> cert_error_list =
1124 make_scoped_ptr(new base::ListValue()); 1116 make_scoped_ptr(new base::ListValue());
1125 for (size_t i = 0; i < not_imported.size(); ++i) { 1117 for (size_t i = 0; i < not_imported.size(); ++i) {
1126 const net::NSSCertDatabase::ImportCertFailure& failure = not_imported[i]; 1118 const net::NSSCertDatabase::ImportCertFailure& failure = not_imported[i];
1127 base::DictionaryValue* dict = new base::DictionaryValue; 1119 base::DictionaryValue* dict = new base::DictionaryValue;
1128 dict->SetString( 1120 dict->SetString(kNameField,
1129 kNameField, failure.certificate->subject().GetDisplayName()); 1121 failure.certificate->subject().GetDisplayName());
1130 dict->SetString(kErrorField, NetErrorToString(failure.net_error)); 1122 dict->SetString(kErrorField, NetErrorToString(failure.net_error));
1131 cert_error_list->Append(dict); 1123 cert_error_list->Append(dict);
1132 } 1124 }
1133 1125
1134 scoped_ptr<base::DictionaryValue> error_info(new base::DictionaryValue); 1126 scoped_ptr<base::DictionaryValue> error_info(new base::DictionaryValue);
1135 error_info->SetString(kErrorTitle, title); 1127 error_info->SetString(kErrorTitle, title);
1136 error_info->SetString(kErrorDescription, error); 1128 error_info->SetString(kErrorDescription, error);
1137 error_info->Set( 1129 error_info->Set(kCertificateErrors,
1138 kCertificateErrors, make_scoped_ptr(cert_error_list.release())); 1130 make_scoped_ptr(cert_error_list.release()));
1139 RejectCallback(*error_info); 1131 RejectCallback(*error_info);
1140 } 1132 }
1141 1133
1142 gfx::NativeWindow CertificatesHandler::GetParentWindow() const { 1134 gfx::NativeWindow CertificatesHandler::GetParentWindow() const {
1143 return web_ui()->GetWebContents()->GetTopLevelNativeWindow(); 1135 return web_ui()->GetWebContents()->GetTopLevelNativeWindow();
1144 } 1136 }
1145 1137
1146 } // namespace settings 1138 } // namespace settings
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698