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

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: msw 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"
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
67 CertificateSelector::CertificateTableModel::CertificateTableModel( 69 CertificateSelector::CertificateTableModel::CertificateTableModel(
68 const net::CertificateList& certs, 70 const net::CertificateList& certs,
69 const std::vector<std::string>& provider_names) { 71 const std::vector<std::string>& provider_names) {
70 DCHECK_EQ(certs.size(), provider_names.size()); 72 DCHECK_EQ(certs.size(), provider_names.size());
71 for (size_t i = 0; i < certs.size(); i++) { 73 for (size_t i = 0; i < certs.size(); i++) {
72 net::X509Certificate* cert = certs[i].get(); 74 net::X509Certificate* cert = certs[i].get();
73 Row row; 75 Row row;
74 row.subject = base::UTF8ToUTF16(cert->subject().GetDisplayName()); 76 row.subject = base::UTF8ToUTF16(cert->subject().GetDisplayName());
75 row.issuer = base::UTF8ToUTF16(cert->issuer().GetDisplayName()); 77 row.issuer = base::UTF8ToUTF16(cert->issuer().GetDisplayName());
76 row.provider = base::UTF8ToUTF16(provider_names[i]); 78 row.provider = base::UTF8ToUTF16(provider_names[i]);
79 if (cert->serial_number().size() < std::numeric_limits<size_t>::max() / 2) {
80 row.serial = base::UTF8ToUTF16(base::HexEncode(
81 cert->serial_number().data(), cert->serial_number().size()));
82 }
77 rows_.push_back(row); 83 rows_.push_back(row);
78 } 84 }
79 } 85 }
80 86
81 int CertificateSelector::CertificateTableModel::RowCount() { 87 int CertificateSelector::CertificateTableModel::RowCount() {
82 return rows_.size(); 88 return rows_.size();
83 } 89 }
84 90
85 base::string16 CertificateSelector::CertificateTableModel::GetText( 91 base::string16 CertificateSelector::CertificateTableModel::GetText(
86 int index, 92 int index,
87 int column_id) { 93 int column_id) {
88 DCHECK_GE(index, 0); 94 DCHECK_GE(index, 0);
89 DCHECK_LT(static_cast<size_t>(index), rows_.size()); 95 DCHECK_LT(static_cast<size_t>(index), rows_.size());
90 96
91 const Row& row = rows_[index]; 97 const Row& row = rows_[index];
92 switch (column_id) { 98 switch (column_id) {
93 case IDS_CERT_SELECTOR_SUBJECT_COLUMN: 99 case IDS_CERT_SELECTOR_SUBJECT_COLUMN:
94 return row.subject; 100 return row.subject;
95 case IDS_CERT_SELECTOR_ISSUER_COLUMN: 101 case IDS_CERT_SELECTOR_ISSUER_COLUMN:
96 return row.issuer; 102 return row.issuer;
97 case IDS_CERT_SELECTOR_PROVIDER_COLUMN: 103 case IDS_CERT_SELECTOR_PROVIDER_COLUMN:
98 return row.provider; 104 return row.provider;
105 case IDS_CERT_SELECTOR_SERIAL_COLUMN:
106 return row.serial;
99 default: 107 default:
100 NOTREACHED(); 108 NOTREACHED();
101 } 109 }
102 return base::string16(); 110 return base::string16();
103 } 111 }
104 112
105 void CertificateSelector::CertificateTableModel::SetObserver( 113 void CertificateSelector::CertificateTableModel::SetObserver(
106 ui::TableModelObserver* observer) {} 114 ui::TableModelObserver* observer) {}
107 115
108 CertificateSelector::CertificateSelector( 116 CertificateSelector::CertificateSelector(
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 200
193 std::vector<ui::TableColumn> columns; 201 std::vector<ui::TableColumn> columns;
194 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_SUBJECT_COLUMN, 202 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_SUBJECT_COLUMN,
195 ui::TableColumn::LEFT, -1, 0.4f)); 203 ui::TableColumn::LEFT, -1, 0.4f));
196 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_ISSUER_COLUMN, 204 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_ISSUER_COLUMN,
197 ui::TableColumn::LEFT, -1, 0.2f)); 205 ui::TableColumn::LEFT, -1, 0.2f));
198 if (show_provider_column_) { 206 if (show_provider_column_) {
199 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_PROVIDER_COLUMN, 207 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_PROVIDER_COLUMN,
200 ui::TableColumn::LEFT, -1, 0.4f)); 208 ui::TableColumn::LEFT, -1, 0.4f));
201 } 209 }
210 columns.push_back(ui::TableColumn(IDS_CERT_SELECTOR_SERIAL_COLUMN,
211 ui::TableColumn::LEFT, -1, 0.2f));
202 table_ = new views::TableView(model_.get(), columns, views::TEXT_ONLY, 212 table_ = new views::TableView(model_.get(), columns, views::TEXT_ONLY,
203 true /* single_selection */); 213 true /* single_selection */);
204 table_->SetObserver(this); 214 table_->SetObserver(this);
205 layout->StartRow(1, kColumnSetId); 215 layout->StartRow(1, kColumnSetId);
206 layout->AddView(table_->CreateParentIfNecessary(), 1, 1, 216 layout->AddView(table_->CreateParentIfNecessary(), 1, 1,
207 views::GridLayout::FILL, views::GridLayout::FILL, 217 views::GridLayout::FILL, views::GridLayout::FILL,
208 kTableViewWidth, kTableViewHeight); 218 kTableViewWidth, kTableViewHeight);
209 219
210 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 220 layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
211 } 221 }
212 222
223 ui::TableModel* CertificateSelector::table_model_for_testing() const {
224 return model_.get();
225 }
226
213 net::X509Certificate* CertificateSelector::GetSelectedCert() const { 227 net::X509Certificate* CertificateSelector::GetSelectedCert() const {
214 const int selected = table_->FirstSelectedRow(); 228 const int selected = table_->FirstSelectedRow();
215 if (selected < 0) // Nothing is selected in |table_|. 229 if (selected < 0) // Nothing is selected in |table_|.
216 return nullptr; 230 return nullptr;
217 CHECK_LT(static_cast<size_t>(selected), certificates_.size()); 231 CHECK_LT(static_cast<size_t>(selected), certificates_.size());
218 return certificates_[selected].get(); 232 return certificates_[selected].get();
219 } 233 }
220 234
221 bool CertificateSelector::CanResize() const { 235 bool CertificateSelector::CanResize() const {
222 return true; 236 return true;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 void CertificateSelector::OnSelectionChanged() { 275 void CertificateSelector::OnSelectionChanged() {
262 GetDialogClientView()->ok_button()->SetEnabled(GetSelectedCert() != nullptr); 276 GetDialogClientView()->ok_button()->SetEnabled(GetSelectedCert() != nullptr);
263 } 277 }
264 278
265 void CertificateSelector::OnDoubleClick() { 279 void CertificateSelector::OnDoubleClick() {
266 if (GetSelectedCert()) 280 if (GetSelectedCert())
267 GetDialogClientView()->AcceptWindow(); 281 GetDialogClientView()->AcceptWindow();
268 } 282 }
269 283
270 } // namespace chrome 284 } // namespace chrome
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/certificate_selector.h ('k') | chrome/browser/ui/views/certificate_selector_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698