| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/gtk/certificate_viewer.h" | 5 #include "chrome/browser/ui/gtk/certificate_viewer.h" |
| 6 | 6 |
| 7 #include <gtk/gtk.h> | 7 #include <gtk/gtk.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/i18n/time_formatting.h" | 12 #include "base/i18n/time_formatting.h" |
| 13 #include "base/memory/scoped_ptr.h" | 13 #include "base/memory/scoped_ptr.h" |
| 14 #include "base/string_number_conversions.h" | 14 #include "base/string_number_conversions.h" |
| 15 #include "base/time.h" | 15 #include "base/time.h" |
| 16 #include "base/utf_string_conversions.h" | 16 #include "base/utf_string_conversions.h" |
| 17 #include "chrome/browser/ui/gtk/certificate_dialogs.h" | 17 #include "chrome/browser/ui/gtk/certificate_dialogs.h" |
| 18 #include "chrome/browser/ui/gtk/gtk_util.h" | 18 #include "chrome/browser/ui/gtk/gtk_util.h" |
| 19 #include "chrome/common/net/x509_certificate_model.h" | 19 #include "chrome/common/net/x509_certificate_model.h" |
| 20 #include "grit/generated_resources.h" | 20 #include "grit/generated_resources.h" |
| 21 #include "net/base/x509_certificate.h" | 21 #include "net/base/x509_certificate.h" |
| 22 #include "ui/base/gtk/gtk_hig_constants.h" | |
| 23 #include "ui/base/l10n/l10n_util.h" | 22 #include "ui/base/l10n/l10n_util.h" |
| 24 #include "ui/gfx/gtk_util.h" | 23 #include "ui/gfx/gtk_util.h" |
| 25 | 24 |
| 26 namespace { | 25 namespace { |
| 27 | 26 |
| 28 const char kDetailsFontFamily[] = "monospace"; | 27 const char kDetailsFontFamily[] = "monospace"; |
| 29 | 28 |
| 30 //////////////////////////////////////////////////////////////////////////////// | 29 //////////////////////////////////////////////////////////////////////////////// |
| 31 // Gtk utility functions. | 30 // Gtk utility functions. |
| 32 | 31 |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 UTF8ToUTF16( | 141 UTF8ToUTF16( |
| 143 x509_certificate_model::GetTitle( | 142 x509_certificate_model::GetTitle( |
| 144 cert_chain_list_.front()))).c_str(), | 143 cert_chain_list_.front()))).c_str(), |
| 145 parent, | 144 parent, |
| 146 // Non-modal. | 145 // Non-modal. |
| 147 GTK_DIALOG_NO_SEPARATOR, | 146 GTK_DIALOG_NO_SEPARATOR, |
| 148 GTK_STOCK_CLOSE, | 147 GTK_STOCK_CLOSE, |
| 149 GTK_RESPONSE_CLOSE, | 148 GTK_RESPONSE_CLOSE, |
| 150 NULL); | 149 NULL); |
| 151 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog_)->vbox), | 150 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog_)->vbox), |
| 152 ui::kContentAreaSpacing); | 151 gtk_util::kContentAreaSpacing); |
| 153 | 152 |
| 154 x509_certificate_model::RegisterDynamicOids(); | 153 x509_certificate_model::RegisterDynamicOids(); |
| 155 InitGeneralPage(); | 154 InitGeneralPage(); |
| 156 InitDetailsPage(); | 155 InitDetailsPage(); |
| 157 | 156 |
| 158 notebook_ = gtk_notebook_new(); | 157 notebook_ = gtk_notebook_new(); |
| 159 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog_)->vbox), notebook_); | 158 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog_)->vbox), notebook_); |
| 160 | 159 |
| 161 gtk_notebook_append_page( | 160 gtk_notebook_append_page( |
| 162 GTK_NOTEBOOK(notebook_), | 161 GTK_NOTEBOOK(notebook_), |
| (...skipping 14 matching lines...) Expand all Loading... |
| 177 g_signal_connect(dialog_, "response", G_CALLBACK(OnResponse), NULL); | 176 g_signal_connect(dialog_, "response", G_CALLBACK(OnResponse), NULL); |
| 178 g_signal_connect(dialog_, "destroy", G_CALLBACK(OnDestroy), this); | 177 g_signal_connect(dialog_, "destroy", G_CALLBACK(OnDestroy), this); |
| 179 } | 178 } |
| 180 | 179 |
| 181 CertificateViewer::~CertificateViewer() { | 180 CertificateViewer::~CertificateViewer() { |
| 182 x509_certificate_model::DestroyCertChain(&cert_chain_list_); | 181 x509_certificate_model::DestroyCertChain(&cert_chain_list_); |
| 183 } | 182 } |
| 184 | 183 |
| 185 void CertificateViewer::InitGeneralPage() { | 184 void CertificateViewer::InitGeneralPage() { |
| 186 net::X509Certificate::OSCertHandle cert = cert_chain_list_.front(); | 185 net::X509Certificate::OSCertHandle cert = cert_chain_list_.front(); |
| 187 general_page_vbox_ = gtk_vbox_new(FALSE, ui::kContentAreaSpacing); | 186 general_page_vbox_ = gtk_vbox_new(FALSE, gtk_util::kContentAreaSpacing); |
| 188 gtk_container_set_border_width(GTK_CONTAINER(general_page_vbox_), | 187 gtk_container_set_border_width(GTK_CONTAINER(general_page_vbox_), |
| 189 ui::kContentAreaBorder); | 188 gtk_util::kContentAreaBorder); |
| 190 | 189 |
| 191 GtkWidget* uses_vbox = gtk_vbox_new(FALSE, ui::kControlSpacing); | 190 GtkWidget* uses_vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); |
| 192 gtk_box_pack_start(GTK_BOX(general_page_vbox_), uses_vbox, FALSE, FALSE, 0); | 191 gtk_box_pack_start(GTK_BOX(general_page_vbox_), uses_vbox, FALSE, FALSE, 0); |
| 193 gtk_box_pack_start( | 192 gtk_box_pack_start( |
| 194 GTK_BOX(uses_vbox), | 193 GTK_BOX(uses_vbox), |
| 195 gtk_util::CreateBoldLabel( | 194 gtk_util::CreateBoldLabel( |
| 196 l10n_util::GetStringUTF8(IDS_CERT_INFO_VERIFIED_USAGES_GROUP)), | 195 l10n_util::GetStringUTF8(IDS_CERT_INFO_VERIFIED_USAGES_GROUP)), |
| 197 FALSE, FALSE, 0); | 196 FALSE, FALSE, 0); |
| 198 | 197 |
| 199 std::vector<std::string> usages; | 198 std::vector<std::string> usages; |
| 200 x509_certificate_model::GetUsageStrings(cert, &usages); | 199 x509_certificate_model::GetUsageStrings(cert, &usages); |
| 201 for (size_t i = 0; i < usages.size(); ++i) | 200 for (size_t i = 0; i < usages.size(); ++i) |
| 202 gtk_box_pack_start( | 201 gtk_box_pack_start( |
| 203 GTK_BOX(uses_vbox), | 202 GTK_BOX(uses_vbox), |
| 204 gtk_util::IndentWidget(gtk_util::LeftAlignMisc(gtk_label_new( | 203 gtk_util::IndentWidget(gtk_util::LeftAlignMisc(gtk_label_new( |
| 205 usages[i].c_str()))), | 204 usages[i].c_str()))), |
| 206 FALSE, FALSE, 0); | 205 FALSE, FALSE, 0); |
| 207 | 206 |
| 208 gtk_box_pack_start(GTK_BOX(general_page_vbox_), gtk_hseparator_new(), | 207 gtk_box_pack_start(GTK_BOX(general_page_vbox_), gtk_hseparator_new(), |
| 209 FALSE, FALSE, 0); | 208 FALSE, FALSE, 0); |
| 210 | 209 |
| 211 const int num_rows = 21; | 210 const int num_rows = 21; |
| 212 GtkTable* table = GTK_TABLE(gtk_table_new(num_rows, 2, FALSE)); | 211 GtkTable* table = GTK_TABLE(gtk_table_new(num_rows, 2, FALSE)); |
| 213 gtk_table_set_col_spacing(table, 0, ui::kLabelSpacing); | 212 gtk_table_set_col_spacing(table, 0, gtk_util::kLabelSpacing); |
| 214 gtk_table_set_row_spacings(table, ui::kControlSpacing); | 213 gtk_table_set_row_spacings(table, gtk_util::kControlSpacing); |
| 215 | 214 |
| 216 gtk_box_pack_start(GTK_BOX(general_page_vbox_), GTK_WIDGET(table), | 215 gtk_box_pack_start(GTK_BOX(general_page_vbox_), GTK_WIDGET(table), |
| 217 FALSE, FALSE, 0); | 216 FALSE, FALSE, 0); |
| 218 int row = 0; | 217 int row = 0; |
| 219 const std::string alternative_text = | 218 const std::string alternative_text = |
| 220 l10n_util::GetStringUTF8(IDS_CERT_INFO_FIELD_NOT_PRESENT); | 219 l10n_util::GetStringUTF8(IDS_CERT_INFO_FIELD_NOT_PRESENT); |
| 221 AddTitle(table, row++, | 220 AddTitle(table, row++, |
| 222 l10n_util::GetStringUTF8(IDS_CERT_INFO_SUBJECT_GROUP)); | 221 l10n_util::GetStringUTF8(IDS_CERT_INFO_SUBJECT_GROUP)); |
| 223 AddKeyValue(table, row++, | 222 AddKeyValue(table, row++, |
| 224 l10n_util::GetStringUTF8(IDS_CERT_INFO_COMMON_NAME_LABEL), | 223 l10n_util::GetStringUTF8(IDS_CERT_INFO_COMMON_NAME_LABEL), |
| (...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 518 // static | 517 // static |
| 519 GtkTreeStore* CertificateViewer::CreateFieldsTreeStore( | 518 GtkTreeStore* CertificateViewer::CreateFieldsTreeStore( |
| 520 net::X509Certificate::OSCertHandle cert) { | 519 net::X509Certificate::OSCertHandle cert) { |
| 521 GtkTreeStore* fields_store = gtk_tree_store_new(FIELDS_COLUMNS, G_TYPE_STRING, | 520 GtkTreeStore* fields_store = gtk_tree_store_new(FIELDS_COLUMNS, G_TYPE_STRING, |
| 522 G_TYPE_STRING); | 521 G_TYPE_STRING); |
| 523 FillTreeStoreWithCertFields(fields_store, cert); | 522 FillTreeStoreWithCertFields(fields_store, cert); |
| 524 return fields_store; | 523 return fields_store; |
| 525 } | 524 } |
| 526 | 525 |
| 527 void CertificateViewer::InitDetailsPage() { | 526 void CertificateViewer::InitDetailsPage() { |
| 528 details_page_vbox_ = gtk_vbox_new(FALSE, ui::kContentAreaSpacing); | 527 details_page_vbox_ = gtk_vbox_new(FALSE, gtk_util::kContentAreaSpacing); |
| 529 gtk_container_set_border_width(GTK_CONTAINER(details_page_vbox_), | 528 gtk_container_set_border_width(GTK_CONTAINER(details_page_vbox_), |
| 530 ui::kContentAreaBorder); | 529 gtk_util::kContentAreaBorder); |
| 531 | 530 |
| 532 GtkWidget* hierarchy_vbox = gtk_vbox_new(FALSE, ui::kControlSpacing); | 531 GtkWidget* hierarchy_vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); |
| 533 gtk_box_pack_start(GTK_BOX(details_page_vbox_), hierarchy_vbox, | 532 gtk_box_pack_start(GTK_BOX(details_page_vbox_), hierarchy_vbox, |
| 534 FALSE, FALSE, 0); | 533 FALSE, FALSE, 0); |
| 535 | 534 |
| 536 gtk_box_pack_start(GTK_BOX(hierarchy_vbox), | 535 gtk_box_pack_start(GTK_BOX(hierarchy_vbox), |
| 537 gtk_util::CreateBoldLabel(l10n_util::GetStringUTF8( | 536 gtk_util::CreateBoldLabel(l10n_util::GetStringUTF8( |
| 538 IDS_CERT_DETAILS_CERTIFICATE_HIERARCHY_LABEL)), | 537 IDS_CERT_DETAILS_CERTIFICATE_HIERARCHY_LABEL)), |
| 539 FALSE, FALSE, 0); | 538 FALSE, FALSE, 0); |
| 540 | 539 |
| 541 GtkTreeStore* hierarchy_store = gtk_tree_store_new(HIERARCHY_COLUMNS, | 540 GtkTreeStore* hierarchy_store = gtk_tree_store_new(HIERARCHY_COLUMNS, |
| 542 G_TYPE_STRING, | 541 G_TYPE_STRING, |
| (...skipping 18 matching lines...) Expand all Loading... |
| 561 GtkWidget* hierarchy_scroll_window = gtk_scrolled_window_new(NULL, NULL); | 560 GtkWidget* hierarchy_scroll_window = gtk_scrolled_window_new(NULL, NULL); |
| 562 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(hierarchy_scroll_window), | 561 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(hierarchy_scroll_window), |
| 563 GTK_POLICY_AUTOMATIC, | 562 GTK_POLICY_AUTOMATIC, |
| 564 GTK_POLICY_NEVER); | 563 GTK_POLICY_NEVER); |
| 565 gtk_scrolled_window_set_shadow_type( | 564 gtk_scrolled_window_set_shadow_type( |
| 566 GTK_SCROLLED_WINDOW(hierarchy_scroll_window), GTK_SHADOW_ETCHED_IN); | 565 GTK_SCROLLED_WINDOW(hierarchy_scroll_window), GTK_SHADOW_ETCHED_IN); |
| 567 gtk_container_add(GTK_CONTAINER(hierarchy_scroll_window), hierarchy_tree); | 566 gtk_container_add(GTK_CONTAINER(hierarchy_scroll_window), hierarchy_tree); |
| 568 gtk_box_pack_start(GTK_BOX(hierarchy_vbox), | 567 gtk_box_pack_start(GTK_BOX(hierarchy_vbox), |
| 569 hierarchy_scroll_window, FALSE, FALSE, 0); | 568 hierarchy_scroll_window, FALSE, FALSE, 0); |
| 570 | 569 |
| 571 GtkWidget* fields_vbox = gtk_vbox_new(FALSE, ui::kControlSpacing); | 570 GtkWidget* fields_vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); |
| 572 gtk_box_pack_start(GTK_BOX(details_page_vbox_), fields_vbox, | 571 gtk_box_pack_start(GTK_BOX(details_page_vbox_), fields_vbox, |
| 573 TRUE, TRUE, 0); | 572 TRUE, TRUE, 0); |
| 574 gtk_box_pack_start(GTK_BOX(fields_vbox), | 573 gtk_box_pack_start(GTK_BOX(fields_vbox), |
| 575 gtk_util::CreateBoldLabel(l10n_util::GetStringUTF8( | 574 gtk_util::CreateBoldLabel(l10n_util::GetStringUTF8( |
| 576 IDS_CERT_DETAILS_CERTIFICATE_FIELDS_LABEL)), | 575 IDS_CERT_DETAILS_CERTIFICATE_FIELDS_LABEL)), |
| 577 FALSE, FALSE, 0); | 576 FALSE, FALSE, 0); |
| 578 | 577 |
| 579 fields_tree_ = gtk_tree_view_new(); | 578 fields_tree_ = gtk_tree_view_new(); |
| 580 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(fields_tree_), FALSE); | 579 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(fields_tree_), FALSE); |
| 581 gtk_tree_view_append_column( | 580 gtk_tree_view_append_column( |
| 582 GTK_TREE_VIEW(fields_tree_), | 581 GTK_TREE_VIEW(fields_tree_), |
| 583 gtk_tree_view_column_new_with_attributes("", gtk_cell_renderer_text_new(), | 582 gtk_tree_view_column_new_with_attributes("", gtk_cell_renderer_text_new(), |
| 584 "text", FIELDS_NAME, | 583 "text", FIELDS_NAME, |
| 585 NULL)); | 584 NULL)); |
| 586 GtkTreeSelection* fields_selection = gtk_tree_view_get_selection( | 585 GtkTreeSelection* fields_selection = gtk_tree_view_get_selection( |
| 587 GTK_TREE_VIEW(fields_tree_)); | 586 GTK_TREE_VIEW(fields_tree_)); |
| 588 gtk_tree_selection_set_mode(fields_selection, GTK_SELECTION_SINGLE); | 587 gtk_tree_selection_set_mode(fields_selection, GTK_SELECTION_SINGLE); |
| 589 g_signal_connect(fields_selection, "changed", | 588 g_signal_connect(fields_selection, "changed", |
| 590 G_CALLBACK(OnFieldsSelectionChanged), this); | 589 G_CALLBACK(OnFieldsSelectionChanged), this); |
| 591 GtkWidget* fields_scroll_window = gtk_scrolled_window_new(NULL, NULL); | 590 GtkWidget* fields_scroll_window = gtk_scrolled_window_new(NULL, NULL); |
| 592 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(fields_scroll_window), | 591 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(fields_scroll_window), |
| 593 GTK_POLICY_AUTOMATIC, | 592 GTK_POLICY_AUTOMATIC, |
| 594 GTK_POLICY_AUTOMATIC); | 593 GTK_POLICY_AUTOMATIC); |
| 595 gtk_scrolled_window_set_shadow_type( | 594 gtk_scrolled_window_set_shadow_type( |
| 596 GTK_SCROLLED_WINDOW(fields_scroll_window), GTK_SHADOW_ETCHED_IN); | 595 GTK_SCROLLED_WINDOW(fields_scroll_window), GTK_SHADOW_ETCHED_IN); |
| 597 gtk_container_add(GTK_CONTAINER(fields_scroll_window), fields_tree_); | 596 gtk_container_add(GTK_CONTAINER(fields_scroll_window), fields_tree_); |
| 598 gtk_box_pack_start(GTK_BOX(fields_vbox), | 597 gtk_box_pack_start(GTK_BOX(fields_vbox), |
| 599 fields_scroll_window, TRUE, TRUE, 0); | 598 fields_scroll_window, TRUE, TRUE, 0); |
| 600 | 599 |
| 601 GtkWidget* value_vbox = gtk_vbox_new(FALSE, ui::kControlSpacing); | 600 GtkWidget* value_vbox = gtk_vbox_new(FALSE, gtk_util::kControlSpacing); |
| 602 gtk_box_pack_start(GTK_BOX(details_page_vbox_), value_vbox, | 601 gtk_box_pack_start(GTK_BOX(details_page_vbox_), value_vbox, |
| 603 TRUE, TRUE, 0); | 602 TRUE, TRUE, 0); |
| 604 gtk_box_pack_start(GTK_BOX(value_vbox), | 603 gtk_box_pack_start(GTK_BOX(value_vbox), |
| 605 gtk_util::CreateBoldLabel(l10n_util::GetStringUTF8( | 604 gtk_util::CreateBoldLabel(l10n_util::GetStringUTF8( |
| 606 IDS_CERT_DETAILS_CERTIFICATE_FIELD_VALUE_LABEL)), | 605 IDS_CERT_DETAILS_CERTIFICATE_FIELD_VALUE_LABEL)), |
| 607 FALSE, FALSE, 0); | 606 FALSE, FALSE, 0); |
| 608 | 607 |
| 609 // TODO(mattm): fix text view coloring (should have grey background). | 608 // TODO(mattm): fix text view coloring (should have grey background). |
| 610 GtkWidget* field_value_view = gtk_text_view_new(); | 609 GtkWidget* field_value_view = gtk_text_view_new(); |
| 611 gtk_text_view_set_editable(GTK_TEXT_VIEW(field_value_view), FALSE); | 610 gtk_text_view_set_editable(GTK_TEXT_VIEW(field_value_view), FALSE); |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 712 net::X509Certificate::OSCertHandle cert) { | 711 net::X509Certificate::OSCertHandle cert) { |
| 713 net::X509Certificate::OSCertHandles cert_chain; | 712 net::X509Certificate::OSCertHandles cert_chain; |
| 714 x509_certificate_model::GetCertChainFromCert(cert, &cert_chain); | 713 x509_certificate_model::GetCertChainFromCert(cert, &cert_chain); |
| 715 (new CertificateViewer(parent, cert_chain))->Show(); | 714 (new CertificateViewer(parent, cert_chain))->Show(); |
| 716 } | 715 } |
| 717 | 716 |
| 718 void ShowCertificateViewer(gfx::NativeWindow parent, | 717 void ShowCertificateViewer(gfx::NativeWindow parent, |
| 719 net::X509Certificate* cert) { | 718 net::X509Certificate* cert) { |
| 720 ShowCertificateViewer(parent, cert->os_cert_handle()); | 719 ShowCertificateViewer(parent, cert->os_cert_handle()); |
| 721 } | 720 } |
| OLD | NEW |