| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/certificate_viewer_webui.h" | 5 #include "chrome/browser/ui/webui/certificate_viewer_webui.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 284 } | 284 } |
| 285 | 285 |
| 286 void CertificateViewerDialogHandler::RequestCertificateFields( | 286 void CertificateViewerDialogHandler::RequestCertificateFields( |
| 287 const base::ListValue* args) { | 287 const base::ListValue* args) { |
| 288 int cert_index = GetCertificateIndex(args); | 288 int cert_index = GetCertificateIndex(args); |
| 289 if (cert_index < 0) | 289 if (cert_index < 0) |
| 290 return; | 290 return; |
| 291 | 291 |
| 292 net::X509Certificate::OSCertHandle cert = cert_chain_[cert_index]; | 292 net::X509Certificate::OSCertHandle cert = cert_chain_[cert_index]; |
| 293 | 293 |
| 294 base::ListValue root_list; | |
| 295 base::DictionaryValue* node_details; | |
| 296 base::DictionaryValue* alt_node_details; | |
| 297 base::ListValue* cert_sub_fields; | |
| 298 root_list.Append( | |
| 299 base::WrapUnique(node_details = new base::DictionaryValue())); | |
| 300 node_details->SetString("label", x509_certificate_model::GetTitle(cert)); | |
| 301 | |
| 302 base::ListValue* cert_fields; | |
| 303 node_details->Set("children", cert_fields = new base::ListValue()); | |
| 304 cert_fields->Append( | |
| 305 base::WrapUnique(node_details = new base::DictionaryValue())); | |
| 306 | |
| 307 node_details->SetString("label", | |
| 308 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_CERTIFICATE)); | |
| 309 node_details->Set("children", cert_fields = new base::ListValue()); | |
| 310 | |
| 311 // Main certificate fields. | 294 // Main certificate fields. |
| 312 cert_fields->Append( | 295 auto cert_fields = base::MakeUnique<base::ListValue>(); |
| 313 base::WrapUnique(node_details = new base::DictionaryValue())); | 296 auto node_details = base::MakeUnique<base::DictionaryValue>(); |
| 314 node_details->SetString("label", | 297 node_details->SetString("label", |
| 315 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_VERSION)); | 298 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_VERSION)); |
| 316 std::string version = x509_certificate_model::GetVersion(cert); | 299 std::string version = x509_certificate_model::GetVersion(cert); |
| 317 if (!version.empty()) | 300 if (!version.empty()) { |
| 318 node_details->SetString("payload.val", | 301 node_details->SetString("payload.val", |
| 319 l10n_util::GetStringFUTF8(IDS_CERT_DETAILS_VERSION_FORMAT, | 302 l10n_util::GetStringFUTF8(IDS_CERT_DETAILS_VERSION_FORMAT, |
| 320 base::UTF8ToUTF16(version))); | 303 base::UTF8ToUTF16(version))); |
| 304 } |
| 305 cert_fields->Append(std::move(node_details)); |
| 321 | 306 |
| 322 cert_fields->Append( | 307 node_details = base::MakeUnique<base::DictionaryValue>(); |
| 323 base::WrapUnique(node_details = new base::DictionaryValue())); | |
| 324 node_details->SetString("label", | 308 node_details->SetString("label", |
| 325 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SERIAL_NUMBER)); | 309 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SERIAL_NUMBER)); |
| 326 node_details->SetString("payload.val", | 310 node_details->SetString("payload.val", |
| 327 x509_certificate_model::GetSerialNumberHexified(cert, | 311 x509_certificate_model::GetSerialNumberHexified(cert, |
| 328 l10n_util::GetStringUTF8(IDS_CERT_INFO_FIELD_NOT_PRESENT))); | 312 l10n_util::GetStringUTF8(IDS_CERT_INFO_FIELD_NOT_PRESENT))); |
| 313 cert_fields->Append(std::move(node_details)); |
| 329 | 314 |
| 330 cert_fields->Append( | 315 node_details = base::MakeUnique<base::DictionaryValue>(); |
| 331 base::WrapUnique(node_details = new base::DictionaryValue())); | |
| 332 node_details->SetString("label", | 316 node_details->SetString("label", |
| 333 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_CERTIFICATE_SIG_ALG)); | 317 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_CERTIFICATE_SIG_ALG)); |
| 334 node_details->SetString("payload.val", | 318 node_details->SetString("payload.val", |
| 335 x509_certificate_model::ProcessSecAlgorithmSignature(cert)); | 319 x509_certificate_model::ProcessSecAlgorithmSignature(cert)); |
| 320 cert_fields->Append(std::move(node_details)); |
| 336 | 321 |
| 337 cert_fields->Append( | 322 node_details = base::MakeUnique<base::DictionaryValue>(); |
| 338 base::WrapUnique(node_details = new base::DictionaryValue())); | |
| 339 node_details->SetString("label", | 323 node_details->SetString("label", |
| 340 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_ISSUER)); | 324 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_ISSUER)); |
| 341 node_details->SetString("payload.val", | 325 node_details->SetString("payload.val", |
| 342 x509_certificate_model::GetIssuerName(cert)); | 326 x509_certificate_model::GetIssuerName(cert)); |
| 327 cert_fields->Append(std::move(node_details)); |
| 343 | 328 |
| 344 // Validity period. | 329 // Validity period. |
| 345 cert_fields->Append( | 330 auto cert_sub_fields = base::MakeUnique<base::ListValue>(); |
| 346 base::WrapUnique(node_details = new base::DictionaryValue())); | |
| 347 node_details->SetString("label", | |
| 348 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_VALIDITY)); | |
| 349 | 331 |
| 350 node_details->Set("children", cert_sub_fields = new base::ListValue()); | 332 auto sub_node_details = base::MakeUnique<base::DictionaryValue>(); |
| 351 cert_sub_fields->Append( | 333 sub_node_details->SetString( |
| 352 base::WrapUnique(node_details = new base::DictionaryValue())); | 334 "label", l10n_util::GetStringUTF8(IDS_CERT_DETAILS_NOT_BEFORE)); |
| 353 node_details->SetString("label", | 335 |
| 354 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_NOT_BEFORE)); | 336 auto alt_node_details = base::MakeUnique<base::DictionaryValue>(); |
| 355 cert_sub_fields->Append( | |
| 356 base::WrapUnique(alt_node_details = new base::DictionaryValue())); | |
| 357 alt_node_details->SetString("label", | 337 alt_node_details->SetString("label", |
| 358 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_NOT_AFTER)); | 338 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_NOT_AFTER)); |
| 339 |
| 359 base::Time issued, expires; | 340 base::Time issued, expires; |
| 360 if (x509_certificate_model::GetTimes(cert, &issued, &expires)) { | 341 if (x509_certificate_model::GetTimes(cert, &issued, &expires)) { |
| 361 node_details->SetString( | 342 sub_node_details->SetString( |
| 362 "payload.val", | 343 "payload.val", |
| 363 base::UTF16ToUTF8( | 344 base::UTF16ToUTF8( |
| 364 base::TimeFormatShortDateAndTimeWithTimeZone(issued))); | 345 base::TimeFormatShortDateAndTimeWithTimeZone(issued))); |
| 365 alt_node_details->SetString( | 346 alt_node_details->SetString( |
| 366 "payload.val", | 347 "payload.val", |
| 367 base::UTF16ToUTF8( | 348 base::UTF16ToUTF8( |
| 368 base::TimeFormatShortDateAndTimeWithTimeZone(expires))); | 349 base::TimeFormatShortDateAndTimeWithTimeZone(expires))); |
| 369 } | 350 } |
| 351 cert_sub_fields->Append(std::move(sub_node_details)); |
| 352 cert_sub_fields->Append(std::move(alt_node_details)); |
| 370 | 353 |
| 371 cert_fields->Append( | 354 node_details = base::MakeUnique<base::DictionaryValue>(); |
| 372 base::WrapUnique(node_details = new base::DictionaryValue())); | 355 node_details->SetString("label", |
| 356 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_VALIDITY)); |
| 357 node_details->Set("children", std::move(cert_sub_fields)); |
| 358 cert_fields->Append(std::move(node_details)); |
| 359 |
| 360 node_details = base::MakeUnique<base::DictionaryValue>(); |
| 373 node_details->SetString("label", | 361 node_details->SetString("label", |
| 374 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT)); | 362 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT)); |
| 375 node_details->SetString("payload.val", | 363 node_details->SetString("payload.val", |
| 376 x509_certificate_model::GetSubjectName(cert)); | 364 x509_certificate_model::GetSubjectName(cert)); |
| 365 cert_fields->Append(std::move(node_details)); |
| 377 | 366 |
| 378 // Subject key information. | 367 // Subject key information. |
| 379 cert_fields->Append( | 368 cert_sub_fields = base::MakeUnique<base::ListValue>(); |
| 380 base::WrapUnique(node_details = new base::DictionaryValue())); | |
| 381 node_details->SetString("label", | |
| 382 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT_KEY_INFO)); | |
| 383 | 369 |
| 384 node_details->Set("children", cert_sub_fields = new base::ListValue()); | 370 sub_node_details = base::MakeUnique<base::DictionaryValue>(); |
| 385 cert_sub_fields->Append( | 371 sub_node_details->SetString( |
| 386 base::WrapUnique(node_details = new base::DictionaryValue())); | 372 "label", l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT_KEY_ALG)); |
| 387 node_details->SetString("label", | 373 sub_node_details->SetString( |
| 388 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT_KEY_ALG)); | 374 "payload.val", |
| 389 node_details->SetString("payload.val", | |
| 390 x509_certificate_model::ProcessSecAlgorithmSubjectPublicKey(cert)); | 375 x509_certificate_model::ProcessSecAlgorithmSubjectPublicKey(cert)); |
| 391 cert_sub_fields->Append( | 376 cert_sub_fields->Append(std::move(sub_node_details)); |
| 392 base::WrapUnique(node_details = new base::DictionaryValue())); | 377 |
| 393 node_details->SetString("label", | 378 sub_node_details = base::MakeUnique<base::DictionaryValue>(); |
| 394 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT_KEY)); | 379 sub_node_details->SetString( |
| 395 node_details->SetString("payload.val", | 380 "label", l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT_KEY)); |
| 396 x509_certificate_model::ProcessSubjectPublicKeyInfo(cert)); | 381 sub_node_details->SetString( |
| 382 "payload.val", x509_certificate_model::ProcessSubjectPublicKeyInfo(cert)); |
| 383 cert_sub_fields->Append(std::move(sub_node_details)); |
| 384 |
| 385 node_details = base::MakeUnique<base::DictionaryValue>(); |
| 386 node_details->SetString( |
| 387 "label", l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT_KEY_INFO)); |
| 388 node_details->Set("children", std::move(cert_sub_fields)); |
| 389 cert_fields->Append(std::move(node_details)); |
| 397 | 390 |
| 398 // Extensions. | 391 // Extensions. |
| 399 x509_certificate_model::Extensions extensions; | 392 x509_certificate_model::Extensions extensions; |
| 400 x509_certificate_model::GetExtensions( | 393 x509_certificate_model::GetExtensions( |
| 401 l10n_util::GetStringUTF8(IDS_CERT_EXTENSION_CRITICAL), | 394 l10n_util::GetStringUTF8(IDS_CERT_EXTENSION_CRITICAL), |
| 402 l10n_util::GetStringUTF8(IDS_CERT_EXTENSION_NON_CRITICAL), | 395 l10n_util::GetStringUTF8(IDS_CERT_EXTENSION_NON_CRITICAL), |
| 403 cert, &extensions); | 396 cert, &extensions); |
| 404 | 397 |
| 405 if (!extensions.empty()) { | 398 if (!extensions.empty()) { |
| 406 cert_fields->Append( | 399 cert_sub_fields = base::MakeUnique<base::ListValue>(); |
| 407 base::WrapUnique(node_details = new base::DictionaryValue())); | |
| 408 node_details->SetString("label", | |
| 409 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_EXTENSIONS)); | |
| 410 | 400 |
| 411 node_details->Set("children", cert_sub_fields = new base::ListValue()); | |
| 412 for (x509_certificate_model::Extensions::const_iterator i = | 401 for (x509_certificate_model::Extensions::const_iterator i = |
| 413 extensions.begin(); i != extensions.end(); ++i) { | 402 extensions.begin(); i != extensions.end(); ++i) { |
| 414 cert_sub_fields->Append( | 403 sub_node_details = base::MakeUnique<base::DictionaryValue>(); |
| 415 base::WrapUnique(node_details = new base::DictionaryValue())); | 404 sub_node_details->SetString("label", i->name); |
| 416 node_details->SetString("label", i->name); | 405 sub_node_details->SetString("payload.val", i->value); |
| 417 node_details->SetString("payload.val", i->value); | 406 cert_sub_fields->Append(std::move(sub_node_details)); |
| 418 } | 407 } |
| 408 |
| 409 node_details = base::MakeUnique<base::DictionaryValue>(); |
| 410 node_details->SetString( |
| 411 "label", l10n_util::GetStringUTF8(IDS_CERT_DETAILS_EXTENSIONS)); |
| 412 node_details->Set("children", std::move(cert_sub_fields)); |
| 413 cert_fields->Append(std::move(node_details)); |
| 419 } | 414 } |
| 420 | 415 |
| 421 cert_fields->Append( | 416 // Details certificate information. |
| 422 base::WrapUnique(node_details = new base::DictionaryValue())); | 417 node_details = base::MakeUnique<base::DictionaryValue>(); |
| 423 node_details->SetString("label", | 418 node_details->SetString("label", |
| 424 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_CERTIFICATE_SIG_ALG)); | 419 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_CERTIFICATE_SIG_ALG)); |
| 425 node_details->SetString("payload.val", | 420 node_details->SetString("payload.val", |
| 426 x509_certificate_model::ProcessSecAlgorithmSignatureWrap(cert)); | 421 x509_certificate_model::ProcessSecAlgorithmSignatureWrap(cert)); |
| 422 cert_fields->Append(std::move(node_details)); |
| 427 | 423 |
| 428 cert_fields->Append( | 424 node_details = base::MakeUnique<base::DictionaryValue>(); |
| 429 base::WrapUnique(node_details = new base::DictionaryValue())); | |
| 430 node_details->SetString("label", | 425 node_details->SetString("label", |
| 431 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_CERTIFICATE_SIG_VALUE)); | 426 l10n_util::GetStringUTF8(IDS_CERT_DETAILS_CERTIFICATE_SIG_VALUE)); |
| 432 node_details->SetString("payload.val", | 427 node_details->SetString("payload.val", |
| 433 x509_certificate_model::ProcessRawBitsSignatureWrap(cert)); | 428 x509_certificate_model::ProcessRawBitsSignatureWrap(cert)); |
| 429 cert_fields->Append(std::move(node_details)); |
| 434 | 430 |
| 435 cert_fields->Append( | 431 // Fingerprint information. |
| 436 base::WrapUnique(node_details = new base::DictionaryValue())); | 432 cert_sub_fields = base::MakeUnique<base::ListValue>(); |
| 437 node_details->SetString("label", | |
| 438 l10n_util::GetStringUTF8(IDS_CERT_INFO_FINGERPRINTS_GROUP)); | |
| 439 node_details->Set("children", cert_sub_fields = new base::ListValue()); | |
| 440 | 433 |
| 441 cert_sub_fields->Append( | 434 sub_node_details = base::MakeUnique<base::DictionaryValue>(); |
| 442 base::WrapUnique(node_details = new base::DictionaryValue())); | 435 sub_node_details->SetString( |
| 443 node_details->SetString("label", | 436 "label", |
| 444 l10n_util::GetStringUTF8(IDS_CERT_INFO_SHA256_FINGERPRINT_LABEL)); | 437 l10n_util::GetStringUTF8(IDS_CERT_INFO_SHA256_FINGERPRINT_LABEL)); |
| 445 node_details->SetString("payload.val", | 438 sub_node_details->SetString("payload.val", |
| 446 x509_certificate_model::HashCertSHA256(cert)); | 439 x509_certificate_model::HashCertSHA256(cert)); |
| 447 cert_sub_fields->Append( | 440 cert_sub_fields->Append(std::move(sub_node_details)); |
| 448 base::WrapUnique(node_details = new base::DictionaryValue())); | 441 |
| 449 node_details->SetString("label", | 442 sub_node_details = base::MakeUnique<base::DictionaryValue>(); |
| 450 l10n_util::GetStringUTF8(IDS_CERT_INFO_SHA1_FINGERPRINT_LABEL)); | 443 sub_node_details->SetString( |
| 451 node_details->SetString("payload.val", | 444 "label", l10n_util::GetStringUTF8(IDS_CERT_INFO_SHA1_FINGERPRINT_LABEL)); |
| 452 x509_certificate_model::HashCertSHA1(cert)); | 445 sub_node_details->SetString("payload.val", |
| 446 x509_certificate_model::HashCertSHA1(cert)); |
| 447 cert_sub_fields->Append(std::move(sub_node_details)); |
| 448 |
| 449 node_details = base::MakeUnique<base::DictionaryValue>(); |
| 450 node_details->SetString( |
| 451 "label", l10n_util::GetStringUTF8(IDS_CERT_INFO_FINGERPRINTS_GROUP)); |
| 452 node_details->Set("children", std::move(cert_sub_fields)); |
| 453 cert_fields->Append(std::move(node_details)); |
| 454 |
| 455 // Certificate information. |
| 456 node_details = base::MakeUnique<base::DictionaryValue>(); |
| 457 node_details->SetString( |
| 458 "label", l10n_util::GetStringUTF8(IDS_CERT_DETAILS_CERTIFICATE)); |
| 459 node_details->Set("children", std::move(cert_fields)); |
| 460 cert_fields = base::MakeUnique<base::ListValue>(); |
| 461 cert_fields->Append(std::move(node_details)); |
| 462 |
| 463 // Top level information. |
| 464 base::ListValue root_list; |
| 465 node_details = base::MakeUnique<base::DictionaryValue>(); |
| 466 node_details->SetString("label", x509_certificate_model::GetTitle(cert)); |
| 467 node_details->Set("children", std::move(cert_fields)); |
| 468 root_list.Append(std::move(node_details)); |
| 453 | 469 |
| 454 // Send certificate information to javascript. | 470 // Send certificate information to javascript. |
| 455 web_ui()->CallJavascriptFunctionUnsafe("cert_viewer.getCertificateFields", | 471 web_ui()->CallJavascriptFunctionUnsafe("cert_viewer.getCertificateFields", |
| 456 root_list); | 472 root_list); |
| 457 } | 473 } |
| 458 | 474 |
| 459 int CertificateViewerDialogHandler::GetCertificateIndex( | 475 int CertificateViewerDialogHandler::GetCertificateIndex( |
| 460 const base::ListValue* args) const { | 476 const base::ListValue* args) const { |
| 461 int cert_index; | 477 int cert_index; |
| 462 double val; | 478 double val; |
| 463 if (!(args->GetDouble(0, &val))) | 479 if (!(args->GetDouble(0, &val))) |
| 464 return -1; | 480 return -1; |
| 465 cert_index = static_cast<int>(val); | 481 cert_index = static_cast<int>(val); |
| 466 if (cert_index < 0 || cert_index >= static_cast<int>(cert_chain_.size())) | 482 if (cert_index < 0 || cert_index >= static_cast<int>(cert_chain_.size())) |
| 467 return -1; | 483 return -1; |
| 468 return cert_index; | 484 return cert_index; |
| 469 } | 485 } |
| OLD | NEW |