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

Side by Side Diff: chrome/browser/ui/views/certificate_selector.cc

Issue 1918143005: Add a serial number column to the certificate selector dialog and fix its size. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix windows build Created 4 years, 7 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
« no previous file with comments | « chrome/app/generated_resources.grd ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/views/certificate_selector.h" 5 #include "chrome/browser/ui/views/certificate_selector.h"
6 6
7 #include <stddef.h> // For size_t. 7 #include <stddef.h> // For size_t.
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/macros.h" 12 #include "base/macros.h"
13 #include "base/memory/ref_counted.h" 13 #include "base/memory/ref_counted.h"
14 #include "base/strings/utf_string_conversions.h" 14 #include "base/strings/utf_string_conversions.h"
15 #include "build/build_config.h" 15 #include "build/build_config.h"
16 #include "chrome/browser/certificate_viewer.h" 16 #include "chrome/browser/certificate_viewer.h"
17 #include "chrome/common/net/x509_certificate_model.h"
17 #include "chrome/grit/generated_resources.h" 18 #include "chrome/grit/generated_resources.h"
18 #include "components/constrained_window/constrained_window_views.h" 19 #include "components/constrained_window/constrained_window_views.h"
19 #include "components/guest_view/browser/guest_view_base.h" 20 #include "components/guest_view/browser/guest_view_base.h"
20 #include "components/web_modal/web_contents_modal_dialog_manager.h" 21 #include "components/web_modal/web_contents_modal_dialog_manager.h"
21 #include "content/public/browser/web_contents.h" 22 #include "content/public/browser/web_contents.h"
22 #include "grit/components_strings.h" 23 #include "grit/components_strings.h"
23 #include "ui/base/l10n/l10n_util.h" 24 #include "ui/base/l10n/l10n_util.h"
24 #include "ui/base/models/table_model.h" 25 #include "ui/base/models/table_model.h"
25 #include "ui/base/models/table_model_observer.h" 26 #include "ui/base/models/table_model_observer.h"
26 #include "ui/views/controls/button/label_button.h" 27 #include "ui/views/controls/button/label_button.h"
27 #include "ui/views/controls/table/table_view.h" 28 #include "ui/views/controls/table/table_view.h"
28 #include "ui/views/layout/grid_layout.h" 29 #include "ui/views/layout/grid_layout.h"
29 #include "ui/views/layout/layout_constants.h" 30 #include "ui/views/layout/layout_constants.h"
30 #include "ui/views/widget/widget.h" 31 #include "ui/views/widget/widget.h"
31 #include "ui/views/window/dialog_client_view.h" 32 #include "ui/views/window/dialog_client_view.h"
32 33
33 #if defined(OS_CHROMEOS) 34 #if defined(OS_CHROMEOS)
34 #include "chrome/browser/chromeos/certificate_provider/certificate_provider_serv ice.h" 35 #include "chrome/browser/chromeos/certificate_provider/certificate_provider_serv ice.h"
35 #include "chrome/browser/chromeos/certificate_provider/certificate_provider_serv ice_factory.h" 36 #include "chrome/browser/chromeos/certificate_provider/certificate_provider_serv ice_factory.h"
36 #include "extensions/browser/extension_registry.h" 37 #include "extensions/browser/extension_registry.h"
37 #include "extensions/browser/extension_registry_factory.h" 38 #include "extensions/browser/extension_registry_factory.h"
38 #endif 39 #endif
39 40
40 namespace chrome { 41 namespace chrome {
41 42
42 const int CertificateSelector::kTableViewWidth = 400; 43 const int CertificateSelector::kTableViewWidth = 500;
43 const int CertificateSelector::kTableViewHeight = 100; 44 const int CertificateSelector::kTableViewHeight = 150;
44 45
45 class CertificateSelector::CertificateTableModel : public ui::TableModel { 46 class CertificateSelector::CertificateTableModel : public ui::TableModel {
46 public: 47 public:
47 // |certs| and |provider_names| must have the same size. 48 // |certs| and |provider_names| must have the same size.
48 CertificateTableModel(const net::CertificateList& certs, 49 CertificateTableModel(const net::CertificateList& certs,
49 const std::vector<std::string>& provider_names); 50 const std::vector<std::string>& provider_names);
50 51
51 // ui::TableModel: 52 // ui::TableModel:
52 int RowCount() override; 53 int RowCount() override;
53 base::string16 GetText(int index, int column_id) override; 54 base::string16 GetText(int index, int column_id) override;
54 void SetObserver(ui::TableModelObserver* observer) override; 55 void SetObserver(ui::TableModelObserver* observer) override;
55 56
56 private: 57 private:
57 struct Row { 58 struct Row {
58 base::string16 subject; 59 base::string16 subject;
59 base::string16 issuer; 60 base::string16 issuer;
60 base::string16 provider; 61 base::string16 provider;
62 base::string16 serial;
61 }; 63 };
62 std::vector<Row> rows_; 64 std::vector<Row> rows_;
63 65
64 DISALLOW_COPY_AND_ASSIGN(CertificateTableModel); 66 DISALLOW_COPY_AND_ASSIGN(CertificateTableModel);
65 }; 67 };
66 68
69 #if defined(OS_WIN)
70 const char kHexCharLookup[0x10] = {
71 '0', '1', '2', '3', '4', '5', '6', '7',
72 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F',
73 };
74
75 std::string BytesToHexString(const std::string& bytes) {
76 std::string result;
77 for (size_t i = 0; i < bytes.size(); ++i) {
78 result.push_back(kHexCharLookup[(bytes[i] >> 4) & 0xf]);
79 result.push_back(kHexCharLookup[bytes[i] & 0xf]);
80 }
81 return result;
82 }
83 #endif
84
67 CertificateSelector::CertificateTableModel::CertificateTableModel( 85 CertificateSelector::CertificateTableModel::CertificateTableModel(
68 const net::CertificateList& certs, 86 const net::CertificateList& certs,
69 const std::vector<std::string>& provider_names) { 87 const std::vector<std::string>& provider_names) {
88 const std::string alternative_text =
89 l10n_util::GetStringUTF8(IDS_CERT_INFO_FIELD_NOT_PRESENT);
70 DCHECK_EQ(certs.size(), provider_names.size()); 90 DCHECK_EQ(certs.size(), provider_names.size());
71 for (size_t i = 0; i < certs.size(); i++) { 91 for (size_t i = 0; i < certs.size(); i++) {
72 net::X509Certificate* cert = certs[i].get(); 92 net::X509Certificate* cert = certs[i].get();
73 Row row; 93 Row row;
74 row.subject = base::UTF8ToUTF16(cert->subject().GetDisplayName()); 94 row.subject = base::UTF8ToUTF16(cert->subject().GetDisplayName());
75 row.issuer = base::UTF8ToUTF16(cert->issuer().GetDisplayName()); 95 row.issuer = base::UTF8ToUTF16(cert->issuer().GetDisplayName());
76 row.provider = base::UTF8ToUTF16(provider_names[i]); 96 row.provider = base::UTF8ToUTF16(provider_names[i]);
97 #if defined(OS_WIN)
98 row.serial = base::UTF8ToUTF16(BytesToHexString(cert->serial_number()));
Ryan Sleevi 2016/04/28 22:13:00 You should actually be able to use this method on
meacer 2016/04/29 00:20:03 Done.
99 #else
100 row.serial =
101 base::UTF8ToUTF16(x509_certificate_model::GetSerialNumberHexified(
102 cert->os_cert_handle(), alternative_text));
103 #endif
77 rows_.push_back(row); 104 rows_.push_back(row);
78 } 105 }
79 } 106 }
80 107
81 int CertificateSelector::CertificateTableModel::RowCount() { 108 int CertificateSelector::CertificateTableModel::RowCount() {
82 return rows_.size(); 109 return rows_.size();
83 } 110 }
84 111
85 base::string16 CertificateSelector::CertificateTableModel::GetText( 112 base::string16 CertificateSelector::CertificateTableModel::GetText(
86 int index, 113 int index,
87 int column_id) { 114 int column_id) {
88 DCHECK_GE(index, 0); 115 DCHECK_GE(index, 0);
89 DCHECK_LT(static_cast<size_t>(index), rows_.size()); 116 DCHECK_LT(static_cast<size_t>(index), rows_.size());
90 117
91 const Row& row = rows_[index]; 118 const Row& row = rows_[index];
92 switch (column_id) { 119 switch (column_id) {
93 case IDS_CERT_SELECTOR_SUBJECT_COLUMN: 120 case IDS_CERT_SELECTOR_SUBJECT_COLUMN:
94 return row.subject; 121 return row.subject;
95 case IDS_CERT_SELECTOR_ISSUER_COLUMN: 122 case IDS_CERT_SELECTOR_ISSUER_COLUMN:
96 return row.issuer; 123 return row.issuer;
97 case IDS_CERT_SELECTOR_PROVIDER_COLUMN: 124 case IDS_CERT_SELECTOR_PROVIDER_COLUMN:
98 return row.provider; 125 return row.provider;
126 case IDS_CERT_SELECTOR_SERIAL_COLUMN:
127 return row.serial;
99 default: 128 default:
100 NOTREACHED(); 129 NOTREACHED();
101 } 130 }
102 return base::string16(); 131 return base::string16();
103 } 132 }
104 133
105 void CertificateSelector::CertificateTableModel::SetObserver( 134 void CertificateSelector::CertificateTableModel::SetObserver(
106 ui::TableModelObserver* observer) {} 135 ui::TableModelObserver* observer) {}
107 136
108 CertificateSelector::CertificateSelector( 137 CertificateSelector::CertificateSelector(
(...skipping 26 matching lines...) Expand all
135 const auto extension = extension_registry->GetExtensionById( 164 const auto extension = extension_registry->GetExtensionById(
136 extension_id, extensions::ExtensionRegistry::ENABLED); 165 extension_id, extensions::ExtensionRegistry::ENABLED);
137 if (!extension) { 166 if (!extension) {
138 // This extension was unloaded in the meantime. Don't show the 167 // This extension was unloaded in the meantime. Don't show the
139 // certificate. 168 // certificate.
140 continue; 169 continue;
141 } 170 }
142 provider_name = extension->short_name(); 171 provider_name = extension->short_name();
143 show_provider_column_ = true; 172 show_provider_column_ = true;
144 } // Otherwise the certificate is provided by the platform. 173 } // Otherwise the certificate is provided by the platform.
145
146 certificates_.push_back(cert); 174 certificates_.push_back(cert);
147 provider_names.push_back(provider_name); 175 provider_names.push_back(provider_name);
148 } 176 }
149 #else 177 #else
150 provider_names.assign(certificates.size(), std::string()); 178 provider_names.assign(certificates.size(), std::string());
151 certificates_ = certificates; 179 certificates_ = certificates;
152 #endif 180 #endif
153
154 model_.reset(new CertificateTableModel(certificates_, provider_names)); 181 model_.reset(new CertificateTableModel(certificates_, provider_names));
155 } 182 }
156 183
157 CertificateSelector::~CertificateSelector() { 184 CertificateSelector::~CertificateSelector() {
158 table_->SetModel(nullptr); 185 table_->SetModel(nullptr);
159 } 186 }
160 187
161 // static 188 // static
162 bool CertificateSelector::CanShow(content::WebContents* web_contents) { 189 bool CertificateSelector::CanShow(content::WebContents* web_contents) {
163 // GetTopLevelWebContents returns |web_contents| if it is not a guest. 190 // GetTopLevelWebContents returns |web_contents| if it is not a guest.
(...skipping 28 matching lines...) Expand all
192 219
193 std::vector<ui::TableColumn> columns; 220 std::vector<ui::TableColumn> columns;
194 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_SUBJECT_COLUMN, 221 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_SUBJECT_COLUMN,
195 ui::TableColumn::LEFT, -1, 0.4f)); 222 ui::TableColumn::LEFT, -1, 0.4f));
196 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_ISSUER_COLUMN, 223 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_ISSUER_COLUMN,
197 ui::TableColumn::LEFT, -1, 0.2f)); 224 ui::TableColumn::LEFT, -1, 0.2f));
198 if (show_provider_column_) { 225 if (show_provider_column_) {
199 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_PROVIDER_COLUMN, 226 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_PROVIDER_COLUMN,
200 ui::TableColumn::LEFT, -1, 0.4f)); 227 ui::TableColumn::LEFT, -1, 0.4f));
201 } 228 }
229 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_SERIAL_COLUMN,
230 ui::TableColumn::LEFT, -1, 0.2f));
202 table_ = new views::TableView(model_.get(), columns, views::TEXT_ONLY, 231 table_ = new views::TableView(model_.get(), columns, views::TEXT_ONLY,
203 true /* single_selection */); 232 true /* single_selection */);
204 table_->SetObserver(this); 233 table_->SetObserver(this);
205 layout->StartRow(1, kColumnSetId); 234 layout->StartRow(1, kColumnSetId);
206 layout->AddView(table_->CreateParentIfNecessary(), 1, 1, 235 layout->AddView(table_->CreateParentIfNecessary(), 1, 1,
207 views::GridLayout::FILL, views::GridLayout::FILL, 236 views::GridLayout::FILL, views::GridLayout::FILL,
208 kTableViewWidth, kTableViewHeight); 237 kTableViewWidth, kTableViewHeight);
209 238
210 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 239 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
211 } 240 }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 void CertificateSelector::OnSelectionChanged() { 290 void CertificateSelector::OnSelectionChanged() {
262 GetDialogClientView()->ok_button()->SetEnabled(GetSelectedCert() != nullptr); 291 GetDialogClientView()->ok_button()->SetEnabled(GetSelectedCert() != nullptr);
263 } 292 }
264 293
265 void CertificateSelector::OnDoubleClick() { 294 void CertificateSelector::OnDoubleClick() {
266 if (GetSelectedCert()) 295 if (GetSelectedCert())
267 GetDialogClientView()->AcceptWindow(); 296 GetDialogClientView()->AcceptWindow();
268 } 297 }
269 298
270 } // namespace chrome 299 } // namespace chrome
OLDNEW
« no previous file with comments | « chrome/app/generated_resources.grd ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698