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

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: sleevi comments 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
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/string_number_conversions.h"
14 #include "base/strings/utf_string_conversions.h" 15 #include "base/strings/utf_string_conversions.h"
15 #include "build/build_config.h" 16 #include "build/build_config.h"
16 #include "chrome/browser/certificate_viewer.h" 17 #include "chrome/browser/certificate_viewer.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"
25
msw 2016/04/29 18:04:54 nit: remove
meacer 2016/04/29 21:50:53 Done.
24 #include "ui/base/models/table_model.h" 26 #include "ui/base/models/table_model.h"
25 #include "ui/base/models/table_model_observer.h" 27 #include "ui/base/models/table_model_observer.h"
26 #include "ui/views/controls/button/label_button.h" 28 #include "ui/views/controls/button/label_button.h"
27 #include "ui/views/controls/table/table_view.h" 29 #include "ui/views/controls/table/table_view.h"
28 #include "ui/views/layout/grid_layout.h" 30 #include "ui/views/layout/grid_layout.h"
29 #include "ui/views/layout/layout_constants.h" 31 #include "ui/views/layout/layout_constants.h"
30 #include "ui/views/widget/widget.h" 32 #include "ui/views/widget/widget.h"
31 #include "ui/views/window/dialog_client_view.h" 33 #include "ui/views/window/dialog_client_view.h"
32 34
33 #if defined(OS_CHROMEOS) 35 #if defined(OS_CHROMEOS)
34 #include "chrome/browser/chromeos/certificate_provider/certificate_provider_serv ice.h" 36 #include "chrome/browser/chromeos/certificate_provider/certificate_provider_serv ice.h"
35 #include "chrome/browser/chromeos/certificate_provider/certificate_provider_serv ice_factory.h" 37 #include "chrome/browser/chromeos/certificate_provider/certificate_provider_serv ice_factory.h"
36 #include "extensions/browser/extension_registry.h" 38 #include "extensions/browser/extension_registry.h"
37 #include "extensions/browser/extension_registry_factory.h" 39 #include "extensions/browser/extension_registry_factory.h"
38 #endif 40 #endif
39 41
40 namespace chrome { 42 namespace chrome {
41 43
42 const int CertificateSelector::kTableViewWidth = 400; 44 const int CertificateSelector::kTableViewWidth = 500;
43 const int CertificateSelector::kTableViewHeight = 100; 45 const int CertificateSelector::kTableViewHeight = 150;
44 46
45 class CertificateSelector::CertificateTableModel : public ui::TableModel { 47 class CertificateSelector::CertificateTableModel : public ui::TableModel {
46 public: 48 public:
47 // |certs| and |provider_names| must have the same size. 49 // |certs| and |provider_names| must have the same size.
48 CertificateTableModel(const net::CertificateList& certs, 50 CertificateTableModel(const net::CertificateList& certs,
49 const std::vector<std::string>& provider_names); 51 const std::vector<std::string>& provider_names);
50 52
51 // ui::TableModel: 53 // ui::TableModel:
52 int RowCount() override; 54 int RowCount() override;
53 base::string16 GetText(int index, int column_id) override; 55 base::string16 GetText(int index, int column_id) override;
54 void SetObserver(ui::TableModelObserver* observer) override; 56 void SetObserver(ui::TableModelObserver* observer) override;
55 57
56 private: 58 private:
57 struct Row { 59 struct Row {
58 base::string16 subject; 60 base::string16 subject;
59 base::string16 issuer; 61 base::string16 issuer;
60 base::string16 provider; 62 base::string16 provider;
63 base::string16 serial;
61 }; 64 };
62 std::vector<Row> rows_; 65 std::vector<Row> rows_;
63 66
64 DISALLOW_COPY_AND_ASSIGN(CertificateTableModel); 67 DISALLOW_COPY_AND_ASSIGN(CertificateTableModel);
65 }; 68 };
66 69
67 CertificateSelector::CertificateTableModel::CertificateTableModel( 70 CertificateSelector::CertificateTableModel::CertificateTableModel(
68 const net::CertificateList& certs, 71 const net::CertificateList& certs,
69 const std::vector<std::string>& provider_names) { 72 const std::vector<std::string>& provider_names) {
70 DCHECK_EQ(certs.size(), provider_names.size()); 73 DCHECK_EQ(certs.size(), provider_names.size());
71 for (size_t i = 0; i < certs.size(); i++) { 74 for (size_t i = 0; i < certs.size(); i++) {
72 net::X509Certificate* cert = certs[i].get(); 75 net::X509Certificate* cert = certs[i].get();
73 Row row; 76 Row row;
74 row.subject = base::UTF8ToUTF16(cert->subject().GetDisplayName()); 77 row.subject = base::UTF8ToUTF16(cert->subject().GetDisplayName());
75 row.issuer = base::UTF8ToUTF16(cert->issuer().GetDisplayName()); 78 row.issuer = base::UTF8ToUTF16(cert->issuer().GetDisplayName());
76 row.provider = base::UTF8ToUTF16(provider_names[i]); 79 row.provider = base::UTF8ToUTF16(provider_names[i]);
80 row.serial = base::UTF8ToUTF16(base::HexEncode(
msw 2016/04/29 18:04:54 nit: maybe ensure the size is less than (std::nume
meacer 2016/04/29 21:50:53 Ryan mentioned earlier that serial lengths are lim
81 cert->serial_number().data(), cert->serial_number().size()));
msw 2016/04/29 18:04:54 I know absolutely nothing about DER encoding or he
77 rows_.push_back(row); 82 rows_.push_back(row);
78 } 83 }
79 } 84 }
80 85
81 int CertificateSelector::CertificateTableModel::RowCount() { 86 int CertificateSelector::CertificateTableModel::RowCount() {
82 return rows_.size(); 87 return rows_.size();
83 } 88 }
84 89
85 base::string16 CertificateSelector::CertificateTableModel::GetText( 90 base::string16 CertificateSelector::CertificateTableModel::GetText(
86 int index, 91 int index,
87 int column_id) { 92 int column_id) {
88 DCHECK_GE(index, 0); 93 DCHECK_GE(index, 0);
89 DCHECK_LT(static_cast<size_t>(index), rows_.size()); 94 DCHECK_LT(static_cast<size_t>(index), rows_.size());
90 95
91 const Row& row = rows_[index]; 96 const Row& row = rows_[index];
92 switch (column_id) { 97 switch (column_id) {
93 case IDS_CERT_SELECTOR_SUBJECT_COLUMN: 98 case IDS_CERT_SELECTOR_SUBJECT_COLUMN:
94 return row.subject; 99 return row.subject;
95 case IDS_CERT_SELECTOR_ISSUER_COLUMN: 100 case IDS_CERT_SELECTOR_ISSUER_COLUMN:
96 return row.issuer; 101 return row.issuer;
97 case IDS_CERT_SELECTOR_PROVIDER_COLUMN: 102 case IDS_CERT_SELECTOR_PROVIDER_COLUMN:
98 return row.provider; 103 return row.provider;
104 case IDS_CERT_SELECTOR_SERIAL_COLUMN:
105 return row.serial;
99 default: 106 default:
100 NOTREACHED(); 107 NOTREACHED();
101 } 108 }
102 return base::string16(); 109 return base::string16();
103 } 110 }
104 111
105 void CertificateSelector::CertificateTableModel::SetObserver( 112 void CertificateSelector::CertificateTableModel::SetObserver(
106 ui::TableModelObserver* observer) {} 113 ui::TableModelObserver* observer) {}
107 114
108 CertificateSelector::CertificateSelector( 115 CertificateSelector::CertificateSelector(
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 199
193 std::vector<ui::TableColumn> columns; 200 std::vector<ui::TableColumn> columns;
194 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_SUBJECT_COLUMN, 201 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_SUBJECT_COLUMN,
195 ui::TableColumn::LEFT, -1, 0.4f)); 202 ui::TableColumn::LEFT, -1, 0.4f));
196 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_ISSUER_COLUMN, 203 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_ISSUER_COLUMN,
197 ui::TableColumn::LEFT, -1, 0.2f)); 204 ui::TableColumn::LEFT, -1, 0.2f));
198 if (show_provider_column_) { 205 if (show_provider_column_) {
199 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_PROVIDER_COLUMN, 206 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_PROVIDER_COLUMN,
200 ui::TableColumn::LEFT, -1, 0.4f)); 207 ui::TableColumn::LEFT, -1, 0.4f));
201 } 208 }
209 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_SERIAL_COLUMN,
210 ui::TableColumn::LEFT, -1, 0.2f));
202 table_ = new views::TableView(model_.get(), columns, views::TEXT_ONLY, 211 table_ = new views::TableView(model_.get(), columns, views::TEXT_ONLY,
203 true /* single_selection */); 212 true /* single_selection */);
204 table_->SetObserver(this); 213 table_->SetObserver(this);
205 layout->StartRow(1, kColumnSetId); 214 layout->StartRow(1, kColumnSetId);
206 layout->AddView(table_->CreateParentIfNecessary(), 1, 1, 215 layout->AddView(table_->CreateParentIfNecessary(), 1, 1,
207 views::GridLayout::FILL, views::GridLayout::FILL, 216 views::GridLayout::FILL, views::GridLayout::FILL,
208 kTableViewWidth, kTableViewHeight); 217 kTableViewWidth, kTableViewHeight);
209 218
210 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 219 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
211 } 220 }
212 221
222 ui::TableModel* CertificateSelector::table_model_for_testing() const {
223 return model_.get();
224 }
225
213 net::X509Certificate* CertificateSelector::GetSelectedCert() const { 226 net::X509Certificate* CertificateSelector::GetSelectedCert() const {
214 const int selected = table_->FirstSelectedRow(); 227 const int selected = table_->FirstSelectedRow();
215 if (selected < 0) // Nothing is selected in |table_|. 228 if (selected < 0) // Nothing is selected in |table_|.
216 return nullptr; 229 return nullptr;
217 CHECK_LT(static_cast<size_t>(selected), certificates_.size()); 230 CHECK_LT(static_cast<size_t>(selected), certificates_.size());
218 return certificates_[selected].get(); 231 return certificates_[selected].get();
219 } 232 }
220 233
221 bool CertificateSelector::CanResize() const { 234 bool CertificateSelector::CanResize() const {
222 return true; 235 return true;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 void CertificateSelector::OnSelectionChanged() { 274 void CertificateSelector::OnSelectionChanged() {
262 GetDialogClientView()->ok_button()->SetEnabled(GetSelectedCert() != nullptr); 275 GetDialogClientView()->ok_button()->SetEnabled(GetSelectedCert() != nullptr);
263 } 276 }
264 277
265 void CertificateSelector::OnDoubleClick() { 278 void CertificateSelector::OnDoubleClick() {
266 if (GetSelectedCert()) 279 if (GetSelectedCert())
267 GetDialogClientView()->AcceptWindow(); 280 GetDialogClientView()->AcceptWindow();
268 } 281 }
269 282
270 } // namespace chrome 283 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698