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

Side by Side Diff: chrome/browser/ui/views/website_settings/website_settings_popup_view.cc

Issue 2306673003: Material Page Info (Views, 3/3): Update site settings section. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove redundant this->? Created 4 years, 2 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 (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/views/website_settings/website_settings_popup_view.h " 5 #include "chrome/browser/ui/views/website_settings/website_settings_popup_view.h "
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <vector> 10 #include <vector>
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 namespace { 65 namespace {
66 66
67 // NOTE(jdonnelly): This use of this process-wide variable assumes that there's 67 // NOTE(jdonnelly): This use of this process-wide variable assumes that there's
68 // never more than one website settings popup shown and that it's associated 68 // never more than one website settings popup shown and that it's associated
69 // with the current window. If this assumption fails in the future, we'll need 69 // with the current window. If this assumption fails in the future, we'll need
70 // to return a weak pointer from ShowPopup so callers can associate it with the 70 // to return a weak pointer from ShowPopup so callers can associate it with the
71 // current window (or other context) and check if the popup they care about is 71 // current window (or other context) and check if the popup they care about is
72 // showing. 72 // showing.
73 bool is_popup_showing = false; 73 bool is_popup_showing = false;
74 74
75 // Left icon margin. 75 // General constants -----------------------------------------------------------
76 const int kIconMarginLeft = 6; 76
77 // Popup width constraints.
78 const int kMinPopupWidth = 320;
79 const int kMaxPopupWidth = 1000;
80
81 // Margin and padding values shared by all sections.
82 const int kSectionPaddingHorizontal = 16;
83
84 // Margin and padding values shared by all sections.
msw 2016/10/08 00:21:57 nit: omit comment and line above (line 81 comment
lgarron 2016/10/08 03:50:04 Comment updated instead.
85 const int kPopupMarginBottom = 16;
86
87 // Security Section (PopupHeaderView) ------------------------------------------
77 88
78 // Margin and padding values for the |PopupHeaderView|. 89 // Margin and padding values for the |PopupHeaderView|.
79 const int kHeaderMarginBottom = 10; 90 const int kHeaderMarginBottom = 10;
80 const int kHeaderPaddingBottom = 16; 91 const int kHeaderPaddingBottom = 16;
81 const int kHeaderPaddingLeft = 18;
82 const int kHeaderPaddingRightForText = kHeaderPaddingLeft;
83 const int kHeaderPaddingTop = 16; 92 const int kHeaderPaddingTop = 16;
84 const int kHeaderPaddingForCloseButton = 8; 93 const int kHeaderPaddingForCloseButton = 8;
85 94
86 // Spacing between labels in the header. 95 // Spacing between labels in the header.
87 const int kHeaderLabelSpacing = 4; 96 const int kHeaderLabelSpacing = 4;
88 97
89 // The max possible width of the popup. 98 // Site Settings Section -------------------------------------------------------
90 const int kMaxPopupWidth = 1000;
91 99
92 // The margins between the popup border and the popup content. 100 // Spacing before and after the cookies view.
msw 2016/10/08 00:21:57 nit: s/before and after/above and below/
lgarron 2016/10/08 03:50:04 Done.
93 const int kPopupMarginBottom = 14; 101 const int kCookiesViewVerticalPadding = 6;
94 102
95 // Padding values for sections on the site settings view. 103 // Square size of the permission images.
96 const int kSiteSettingsViewContentMinWidth = 300; 104 const int kPermissionImageSize = 16;
msw 2016/10/08 00:21:57 nit: any chance we could replace/merge this with k
lgarron 2016/10/08 03:50:04 Replaced.
97 const int kSiteSettingsViewPaddingBottom = 6;
98 const int kSiteSettingsViewPaddingLeft = 18;
99 const int kSiteSettingsViewPaddingRight = 18;
100 const int kSiteSettingsViewPaddingTop = 4;
101 105
102 // Space between the headline and the content of a section. 106 // Spacing between a permission image and the text.
103 const int kSiteSettingsViewHeadlineMarginBottom = 10; 107 const int kPermissionImageSpacing = 6;
104 // Spacing between rows in the "Permissions" and "Cookies and Site Data"
105 // sections.
106 const int kContentRowSpacing = 2;
107 108
108 const int kSiteDataIconColumnWidth = 20; 109 // Spacing between rows in the site settings section
110 const int kPermissionsVerticalSpacing = 12;
111
112 // Button IDs ------------------------------------------------------------------
109 113
110 const int BUTTON_RESET_CERTIFICATE_DECISIONS = 1337; 114 const int BUTTON_RESET_CERTIFICATE_DECISIONS = 1337;
115 const int BUTTON_SITE_SETTINGS = 1338;
111 116
112 } // namespace 117 } // namespace
113 118
114 // |PopupHeaderView| is the UI element (view) that represents the header of the 119 // |PopupHeaderView| is the UI element (view) that represents the header of the
115 // |WebsiteSettingsPopupView|. The header shows the status of the site's 120 // |WebsiteSettingsPopupView|. The header shows the status of the site's
116 // identity check and the name of the site's identity. 121 // identity check and the name of the site's identity.
117 class PopupHeaderView : public views::View { 122 class PopupHeaderView : public views::View {
118 public: 123 public:
119 explicit PopupHeaderView(views::ButtonListener* button_listener, 124 explicit PopupHeaderView(views::ButtonListener* button_listener,
120 views::StyledLabelListener* styled_label_listener); 125 views::StyledLabelListener* styled_label_listener);
121 ~PopupHeaderView() override; 126 ~PopupHeaderView() override;
122 127
123 // Sets the security summary for the current page. 128 // Sets the security summary for the current page.
124 void SetSummary(const base::string16& summary_text); 129 void SetSummary(const base::string16& summary_text);
125 130
126 // Sets the security details for the current page. 131 // Sets the security details for the current page.
127 void SetDetails(const base::string16& details_text, 132 void SetDetails(const base::string16& details_text,
128 bool include_details_link); 133 bool include_details_link);
129 134
130 int GetPreferredNameWidth() const;
131
132 void AddResetDecisionsLabel(); 135 void AddResetDecisionsLabel();
133 136
134 private: 137 private:
135 // The listener for the styled labels in this view. 138 // The listener for the styled labels in this view.
136 views::StyledLabelListener* styled_label_listener_; 139 views::StyledLabelListener* styled_label_listener_;
137 140
138 // The label that displays security summary for the current page. 141 // The label that displays security summary for the current page.
139 views::Label* summary_label_; 142 views::Label* summary_label_;
140 143
141 // The label that displays the status of the identity check for this site. 144 // The label that displays the status of the identity check for this site.
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 : styled_label_listener_(styled_label_listener), 188 : styled_label_listener_(styled_label_listener),
186 summary_label_(nullptr), 189 summary_label_(nullptr),
187 details_label_(nullptr), 190 details_label_(nullptr),
188 reset_decisions_label_container_(nullptr), 191 reset_decisions_label_container_(nullptr),
189 reset_decisions_label_(nullptr) { 192 reset_decisions_label_(nullptr) {
190 views::GridLayout* layout = new views::GridLayout(this); 193 views::GridLayout* layout = new views::GridLayout(this);
191 SetLayoutManager(layout); 194 SetLayoutManager(layout);
192 195
193 const int label_column = 0; 196 const int label_column = 0;
194 views::ColumnSet* column_set = layout->AddColumnSet(label_column); 197 views::ColumnSet* column_set = layout->AddColumnSet(label_column);
195 column_set->AddPaddingColumn(0, kHeaderPaddingLeft); 198 column_set->AddPaddingColumn(0, kSectionPaddingHorizontal);
196 column_set->AddColumn(views::GridLayout::FILL, 199 column_set->AddColumn(views::GridLayout::FILL,
197 views::GridLayout::FILL, 200 views::GridLayout::FILL,
198 1, 201 1,
199 views::GridLayout::USE_PREF, 202 views::GridLayout::USE_PREF,
200 0, 203 0,
201 0); 204 0);
202 column_set->AddPaddingColumn(1, 0); 205 column_set->AddPaddingColumn(1, 0);
203 column_set->AddColumn(views::GridLayout::FILL, 206 column_set->AddColumn(views::GridLayout::FILL,
204 views::GridLayout::FILL, 207 views::GridLayout::FILL,
205 1, 208 1,
206 views::GridLayout::USE_PREF, 209 views::GridLayout::USE_PREF,
207 0, 210 0,
208 0); 211 0);
209 column_set->AddPaddingColumn(0, kHeaderPaddingForCloseButton); 212 column_set->AddPaddingColumn(0, kHeaderPaddingForCloseButton);
210 213
211 // First we add the padding needed for the close button. 214 // First we add the padding needed for the close button.
212 // In order to move down the summary, we simulate additional padding by giving 215 // In order to move down the summary, we simulate additional padding by giving
213 // it an empty border on top later on. 216 // it an empty border on top later on.
214 layout->AddPaddingRow(0, kHeaderPaddingForCloseButton); 217 layout->AddPaddingRow(0, kHeaderPaddingForCloseButton);
215 218
216 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 219 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
217 220
218 layout->StartRow(0, label_column); 221 layout->StartRow(0, label_column);
219 const gfx::FontList& font_list = rb.GetFontListWithDelta(1); 222 const gfx::FontList& font_list = rb.GetFontListWithDelta(1);
220 summary_label_ = new views::Label(base::string16(), font_list); 223 summary_label_ = new views::Label(base::string16(), font_list);
224 summary_label_->SetMultiLine(true);
221 summary_label_->SetBorder(views::Border::CreateEmptyBorder( 225 summary_label_->SetBorder(views::Border::CreateEmptyBorder(
222 kHeaderPaddingTop - kHeaderPaddingForCloseButton, 0, 0, 0)); 226 kHeaderPaddingTop - kHeaderPaddingForCloseButton, 0, 0, 0));
223 layout->AddView(summary_label_, 1, 1, views::GridLayout::LEADING, 227 layout->AddView(summary_label_, 1, 1, views::GridLayout::LEADING,
224 views::GridLayout::TRAILING); 228 views::GridLayout::TRAILING);
225 views::ImageButton* close_button = new views::ImageButton(button_listener); 229 views::ImageButton* close_button = new views::ImageButton(button_listener);
226 close_button->SetImage(views::CustomButton::STATE_NORMAL, 230 close_button->SetImage(views::CustomButton::STATE_NORMAL,
227 rb.GetImageNamed(IDR_CLOSE_2).ToImageSkia()); 231 rb.GetImageNamed(IDR_CLOSE_2).ToImageSkia());
228 close_button->SetImage(views::CustomButton::STATE_HOVERED, 232 close_button->SetImage(views::CustomButton::STATE_HOVERED,
229 rb.GetImageNamed(IDR_CLOSE_2_H).ToImageSkia()); 233 rb.GetImageNamed(IDR_CLOSE_2_H).ToImageSkia());
230 close_button->SetImage(views::CustomButton::STATE_PRESSED, 234 close_button->SetImage(views::CustomButton::STATE_PRESSED,
231 rb.GetImageNamed(IDR_CLOSE_2_P).ToImageSkia()); 235 rb.GetImageNamed(IDR_CLOSE_2_P).ToImageSkia());
232 layout->AddView(close_button, 1, 1, views::GridLayout::TRAILING, 236 layout->AddView(close_button, 1, 1, views::GridLayout::TRAILING,
233 views::GridLayout::LEADING); 237 views::GridLayout::LEADING);
234 238
235 layout->AddPaddingRow(0, kHeaderLabelSpacing); 239 layout->AddPaddingRow(0, kHeaderLabelSpacing);
236 240
237 const int label_column_status = 1; 241 const int label_column_status = 1;
238 views::ColumnSet* column_set_status = 242 views::ColumnSet* column_set_status =
239 layout->AddColumnSet(label_column_status); 243 layout->AddColumnSet(label_column_status);
240 column_set_status->AddPaddingColumn(0, kHeaderPaddingLeft); 244 column_set_status->AddPaddingColumn(0, kSectionPaddingHorizontal);
241 column_set_status->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 245 column_set_status->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL,
242 1, views::GridLayout::USE_PREF, 0, 0); 246 1, views::GridLayout::USE_PREF, 0, 0);
243 column_set_status->AddPaddingColumn(0, kHeaderPaddingRightForText); 247 column_set_status->AddPaddingColumn(0, kSectionPaddingHorizontal);
244 248
245 layout->AddPaddingRow(0, kHeaderLabelSpacing); 249 layout->AddPaddingRow(0, kHeaderLabelSpacing);
246 250
247 layout->StartRow(0, label_column_status); 251 layout->StartRow(0, label_column_status);
248 details_label_ = 252 details_label_ =
249 new views::StyledLabel(base::string16(), styled_label_listener); 253 new views::StyledLabel(base::string16(), styled_label_listener);
250 layout->AddView(details_label_, 1, 1, views::GridLayout::FILL, 254 layout->AddView(details_label_, 1, 1, views::GridLayout::FILL,
251 views::GridLayout::LEADING); 255 views::GridLayout::LEADING);
252 256
253 layout->StartRow(0, label_column_status); 257 layout->StartRow(0, label_column_status);
254 reset_decisions_label_container_ = new views::View(); 258 reset_decisions_label_container_ = new views::View();
255 reset_decisions_label_container_->SetLayoutManager( 259 reset_decisions_label_container_->SetLayoutManager(
256 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0)); 260 new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0));
257 layout->AddView(reset_decisions_label_container_, 1, 1, 261 layout->AddView(reset_decisions_label_container_, 1, 1,
258 views::GridLayout::FILL, views::GridLayout::LEADING); 262 views::GridLayout::FILL, views::GridLayout::LEADING);
259 263
260 layout->AddPaddingRow(1, kHeaderPaddingBottom); 264 layout->AddPaddingRow(1, kHeaderPaddingBottom);
261 } 265 }
262 266
263 PopupHeaderView::~PopupHeaderView() {} 267 PopupHeaderView::~PopupHeaderView() {}
264 268
265 int PopupHeaderView::GetPreferredNameWidth() const {
266 return summary_label_->GetPreferredSize().width();
267 }
268
269 void PopupHeaderView::SetSummary(const base::string16& summary_text) { 269 void PopupHeaderView::SetSummary(const base::string16& summary_text) {
270 summary_label_->SetText(summary_text); 270 summary_label_->SetText(summary_text);
271 } 271 }
272 272
273 void PopupHeaderView::SetDetails(const base::string16& details_text, 273 void PopupHeaderView::SetDetails(const base::string16& details_text,
274 bool include_details_label_link) { 274 bool include_details_label_link) {
275 if (include_details_label_link) { 275 if (include_details_label_link) {
276 base::string16 details_link_text = 276 base::string16 details_link_text =
277 l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_DETAILS_LINK); 277 l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_DETAILS_LINK);
278 278
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 gfx::NativeView parent_window, 440 gfx::NativeView parent_window,
441 Profile* profile, 441 Profile* profile,
442 content::WebContents* web_contents, 442 content::WebContents* web_contents,
443 const GURL& url, 443 const GURL& url,
444 const security_state::SecurityStateModel::SecurityInfo& security_info) 444 const security_state::SecurityStateModel::SecurityInfo& security_info)
445 : content::WebContentsObserver(web_contents), 445 : content::WebContentsObserver(web_contents),
446 BubbleDialogDelegateView(anchor_view, views::BubbleBorder::TOP_LEFT), 446 BubbleDialogDelegateView(anchor_view, views::BubbleBorder::TOP_LEFT),
447 header_(nullptr), 447 header_(nullptr),
448 separator_(nullptr), 448 separator_(nullptr),
449 site_settings_view_(nullptr), 449 site_settings_view_(nullptr),
450 site_data_content_(nullptr), 450 cookies_view_(nullptr),
451 cookie_dialog_link_(nullptr), 451 cookie_dialog_link_(nullptr),
452 permissions_content_(nullptr), 452 permissions_view_(nullptr),
453 site_settings_link_(nullptr),
454 weak_factory_(this) { 453 weak_factory_(this) {
455 set_parent_window(parent_window); 454 set_parent_window(parent_window);
456 455
457 is_devtools_disabled_ = 456 is_devtools_disabled_ =
458 profile->GetPrefs()->GetBoolean(prefs::kDevToolsDisabled); 457 profile->GetPrefs()->GetBoolean(prefs::kDevToolsDisabled);
459 458
460 // Compensate for built-in vertical padding in the anchor view's image. 459 // Compensate for built-in vertical padding in the anchor view's image.
461 set_anchor_view_insets(gfx::Insets( 460 set_anchor_view_insets(gfx::Insets(
462 GetLayoutConstant(LOCATION_BAR_BUBBLE_ANCHOR_VERTICAL_INSET), 0)); 461 GetLayoutConstant(LOCATION_BAR_BUBBLE_ANCHOR_VERTICAL_INSET), 0));
463 462
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 GetWidget()->Close(); 501 GetWidget()->Close();
503 } 502 }
504 503
505 void WebsiteSettingsPopupView::WebContentsDestroyed() { 504 void WebsiteSettingsPopupView::WebContentsDestroyed() {
506 weak_factory_.InvalidateWeakPtrs(); 505 weak_factory_.InvalidateWeakPtrs();
507 } 506 }
508 507
509 void WebsiteSettingsPopupView::OnPermissionChanged( 508 void WebsiteSettingsPopupView::OnPermissionChanged(
510 const WebsiteSettingsUI::PermissionInfo& permission) { 509 const WebsiteSettingsUI::PermissionInfo& permission) {
511 presenter_->OnSitePermissionChanged(permission.type, permission.setting); 510 presenter_->OnSitePermissionChanged(permission.type, permission.setting);
511 // The menu buttons for the permissions might have longer strings now, so we
512 // need to size the whole bubble.
513 SizeToContents();
lgarron 2016/10/07 00:54:36 Is it okay to call this in the observer callback,
msw 2016/10/07 23:56:23 Making a ChildPreferredSizeChanged override that c
lgarron 2016/10/08 03:50:04 Hmm, I can't figure out the right combination of C
msw 2016/10/08 16:15:25 Acknowledged.
512 } 514 }
513 515
514 void WebsiteSettingsPopupView::OnChosenObjectDeleted( 516 void WebsiteSettingsPopupView::OnChosenObjectDeleted(
515 const WebsiteSettingsUI::ChosenObjectInfo& info) { 517 const WebsiteSettingsUI::ChosenObjectInfo& info) {
516 presenter_->OnSiteChosenObjectDeleted(info.ui_info, *info.object); 518 presenter_->OnSiteChosenObjectDeleted(info.ui_info, *info.object);
517 } 519 }
518 520
519 void WebsiteSettingsPopupView::OnWidgetDestroying(views::Widget* widget) { 521 void WebsiteSettingsPopupView::OnWidgetDestroying(views::Widget* widget) {
520 is_popup_showing = false; 522 is_popup_showing = false;
521 presenter_->OnUIClosing(); 523 presenter_->OnUIClosing();
522 } 524 }
523 525
524 int WebsiteSettingsPopupView::GetDialogButtons() const { 526 int WebsiteSettingsPopupView::GetDialogButtons() const {
525 return ui::DIALOG_BUTTON_NONE; 527 return ui::DIALOG_BUTTON_NONE;
526 } 528 }
527 529
528 void WebsiteSettingsPopupView::ButtonPressed(views::Button* button, 530 void WebsiteSettingsPopupView::ButtonPressed(views::Button* button,
529 const ui::Event& event) { 531 const ui::Event& event) {
530 if (button->id() == BUTTON_RESET_CERTIFICATE_DECISIONS) 532 switch (button->id()) {
531 presenter_->OnRevokeSSLErrorBypassButtonPressed(); 533 case BUTTON_RESET_CERTIFICATE_DECISIONS:
532 GetWidget()->Close(); 534 presenter_->OnRevokeSSLErrorBypassButtonPressed();
535 GetWidget()->Close();
536 break;
537 case BUTTON_SITE_SETTINGS:
538 // TODO(palmer): This opens the general Content Settings pane, which is OK
539 // for now. But on Android, it opens a page specific to a given origin
540 // that shows all of the settings for that origin. If/when that's
541 // available on desktop we should link to that here, too.
542 web_contents()->OpenURL(content::OpenURLParams(
543 GURL(chrome::kChromeUIContentSettingsURL), content::Referrer(),
544 WindowOpenDisposition::NEW_FOREGROUND_TAB, ui::PAGE_TRANSITION_LINK,
545 false));
546 presenter_->RecordWebsiteSettingsAction(
547 WebsiteSettings::WEBSITE_SETTINGS_SITE_SETTINGS_OPENED);
548 break;
549 default:
550 NOTREACHED();
551 }
533 } 552 }
534 553
535 void WebsiteSettingsPopupView::LinkClicked(views::Link* source, 554 void WebsiteSettingsPopupView::LinkClicked(views::Link* source,
536 int event_flags) { 555 int event_flags) {
537 // The popup closes automatically when the collected cookies dialog or the 556 // The popup closes automatically when the collected cookies dialog or the
538 // certificate viewer opens. So delay handling of the link clicked to avoid 557 // certificate viewer opens. So delay handling of the link clicked to avoid
539 // a crash in the base class which needs to complete the mouse event handling. 558 // a crash in the base class which needs to complete the mouse event handling.
540 content::BrowserThread::PostTask( 559 content::BrowserThread::PostTask(
541 content::BrowserThread::UI, FROM_HERE, 560 content::BrowserThread::UI, FROM_HERE,
542 base::Bind(&WebsiteSettingsPopupView::HandleLinkClickedAsync, 561 base::Bind(&WebsiteSettingsPopupView::HandleLinkClickedAsync,
543 weak_factory_.GetWeakPtr(), source)); 562 weak_factory_.GetWeakPtr(), source));
544 } 563 }
545 564
546 gfx::Size WebsiteSettingsPopupView::GetPreferredSize() const { 565 gfx::Size WebsiteSettingsPopupView::GetPreferredSize() const {
547 if (header_ == nullptr && site_settings_view_ == nullptr) 566 if (header_ == nullptr && site_settings_view_ == nullptr)
548 return views::View::GetPreferredSize(); 567 return views::View::GetPreferredSize();
549 568
550 int height = 0; 569 int height = 0;
551 if (header_) 570 if (header_)
552 height += header_->GetPreferredSize().height() + kHeaderMarginBottom; 571 height += header_->GetPreferredSize().height() + kHeaderMarginBottom;
553 if (separator_) 572 if (separator_)
554 height += separator_->GetPreferredSize().height(); 573 height += separator_->GetPreferredSize().height();
555 574
556 if (site_settings_view_) 575 if (site_settings_view_)
557 height += site_settings_view_->GetPreferredSize().height(); 576 height += site_settings_view_->GetPreferredSize().height();
558 577
559 int width = kSiteSettingsViewContentMinWidth; 578 int width = kMinPopupWidth;
msw 2016/10/08 00:21:57 q: just checking; should this consider the |cookie
lgarron 2016/10/08 03:50:04 cookies_view and permissions_view_: handled throug
msw 2016/10/08 16:15:25 Acknowledged.
560 if (site_data_content_) 579 if (site_settings_view_)
561 width = std::max(width, site_data_content_->GetPreferredSize().width()); 580 width = std::max(width, site_settings_view_->GetPreferredSize().width());
562 if (permissions_content_)
563 width = std::max(width, permissions_content_->GetPreferredSize().width());
564 if (header_)
565 width = std::max(width, header_->GetPreferredNameWidth());
566 width += kSiteSettingsViewPaddingLeft + kSiteSettingsViewPaddingRight;
567 width = std::min(width, kMaxPopupWidth); 581 width = std::min(width, kMaxPopupWidth);
568 return gfx::Size(width, height); 582 return gfx::Size(width, height);
569 } 583 }
570 584
571 void WebsiteSettingsPopupView::SetCookieInfo( 585 void WebsiteSettingsPopupView::SetCookieInfo(
572 const CookieInfoList& cookie_info_list) { 586 const CookieInfoList& cookie_info_list) {
573 // |cookie_info_list| should only ever have 2 items: first- and third-party 587 // |cookie_info_list| should only ever have 2 items: first- and third-party
574 // cookies. 588 // cookies.
575 DCHECK_EQ(cookie_info_list.size(), 2u); 589 DCHECK_EQ(cookie_info_list.size(), 2u);
576 base::string16 first_party_label_text; 590 int total_allowed = 0;
577 base::string16 third_party_label_text; 591 for (const auto& i : cookie_info_list)
578 for (const auto& i : cookie_info_list) { 592 total_allowed += i.allowed;
579 if (i.is_first_party) { 593 base::string16 label_text = l10n_util::GetPluralStringFUTF16(
580 first_party_label_text = l10n_util::GetPluralStringFUTF16( 594 IDS_WEBSITE_SETTINGS_NUM_COOKIES, total_allowed);
581 IDS_WEBSITE_SETTINGS_FIRST_PARTY_SITE_DATA, i.allowed);
582 } else {
583 third_party_label_text = l10n_util::GetPluralStringFUTF16(
584 IDS_WEBSITE_SETTINGS_THIRD_PARTY_SITE_DATA, i.allowed);
585 }
586 }
587 595
588 if (!cookie_dialog_link_) { 596 if (!cookie_dialog_link_) {
589 cookie_dialog_link_ = new views::Link(first_party_label_text); 597 cookie_dialog_link_ = new views::Link(label_text);
590 cookie_dialog_link_->set_listener(this); 598 cookie_dialog_link_->set_listener(this);
591 } else { 599 } else {
592 cookie_dialog_link_->SetText(first_party_label_text); 600 cookie_dialog_link_->SetText(label_text);
593 } 601 }
594 602
595 views::GridLayout* layout = 603 views::GridLayout* layout =
596 static_cast<views::GridLayout*>(site_data_content_->GetLayoutManager()); 604 static_cast<views::GridLayout*>(cookies_view_->GetLayoutManager());
597 if (!layout) { 605 if (!layout) {
598 layout = new views::GridLayout(site_data_content_); 606 layout = new views::GridLayout(cookies_view_);
599 site_data_content_->SetLayoutManager(layout); 607 cookies_view_->SetLayoutManager(layout);
600 608
601 const int site_data_content_column = 0; 609 const int cookies_view_column = 0;
602 views::ColumnSet* column_set = 610 views::ColumnSet* column_set = layout->AddColumnSet(cookies_view_column);
603 layout->AddColumnSet(site_data_content_column); 611 column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
604 column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1, 612 views::GridLayout::FIXED, kPermissionImageSize, 0);
605 views::GridLayout::FIXED, kSiteDataIconColumnWidth, 613 column_set->AddPaddingColumn(0, kPermissionImageSpacing);
606 0); 614 column_set->AddColumn(views::GridLayout::LEADING, views::GridLayout::FILL,
607 column_set->AddPaddingColumn(0, kIconMarginLeft); 615 0, views::GridLayout::USE_PREF, 0, 0);
608 column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1,
609 views::GridLayout::USE_PREF, 0, 0);
610 // No padding. This third column is for |third_party_label_text| (see
611 // below),
612 // and the text needs to flow naturally from the |first_party_label_text|
613 // link.
614 column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1,
615 views::GridLayout::USE_PREF, 0, 0);
616 616
617 layout->AddPaddingRow(1, 5); 617 layout->AddPaddingRow(0, kCookiesViewVerticalPadding);
618 618
619 layout->StartRow(1, site_data_content_column); 619 layout->StartRow(1, cookies_view_column);
620 WebsiteSettingsUI::PermissionInfo info; 620 WebsiteSettingsUI::PermissionInfo info;
621 info.type = CONTENT_SETTINGS_TYPE_COOKIES; 621 info.type = CONTENT_SETTINGS_TYPE_COOKIES;
622 info.setting = CONTENT_SETTING_ALLOW; 622 info.setting = CONTENT_SETTING_ALLOW;
623 info.is_incognito = 623 info.is_incognito =
624 Profile::FromBrowserContext(web_contents()->GetBrowserContext()) 624 Profile::FromBrowserContext(web_contents()->GetBrowserContext())
625 ->IsOffTheRecord(); 625 ->IsOffTheRecord();
626 views::ImageView* icon = new views::ImageView(); 626 views::ImageView* icon = new views::ImageView();
627 const gfx::Image& image = WebsiteSettingsUI::GetPermissionIcon(info); 627 const gfx::Image& image = WebsiteSettingsUI::GetPermissionIcon(info);
628 icon->SetImage(image.ToImageSkia()); 628 icon->SetImage(image.ToImageSkia());
629 layout->AddView(icon, 1, 1, views::GridLayout::CENTER, 629 layout->AddView(
630 views::GridLayout::CENTER); 630 icon, 1, 2, views::GridLayout::FILL,
631 layout->AddView(cookie_dialog_link_, 1, 1, views::GridLayout::CENTER, 631 // TODO: The vertical alignment may change to CENTER once Harmony is
632 views::GridLayout::CENTER); 632 // implemented. See https://crbug.com/512442#c48
633 base::string16 comma = base::ASCIIToUTF16(", "); 633 views::GridLayout::LEADING);
634 634
635 layout->AddView(new views::Label(comma + third_party_label_text), 1, 1, 635 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
636 views::GridLayout::LEADING, views::GridLayout::CENTER); 636 const gfx::FontList& font_list = rb.GetFontListWithDelta(1);
637 views::Label* cookies_label = new views::Label(
638 l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TITLE_SITE_DATA),
639 font_list);
640 layout->AddView(cookies_label);
641 layout->StartRow(1, cookies_view_column);
642 layout->SkipColumns(1);
637 643
638 layout->AddPaddingRow(1, 6); 644 layout->AddView(cookie_dialog_link_);
645
646 layout->AddPaddingRow(0, kCookiesViewVerticalPadding);
639 } 647 }
640 648
641 layout->Layout(site_data_content_); 649 layout->Layout(cookies_view_);
642 SizeToContents(); 650 SizeToContents();
643 } 651 }
644 652
645 void WebsiteSettingsPopupView::SetPermissionInfo( 653 void WebsiteSettingsPopupView::SetPermissionInfo(
646 const PermissionInfoList& permission_info_list, 654 const PermissionInfoList& permission_info_list,
647 const ChosenObjectInfoList& chosen_object_info_list) { 655 const ChosenObjectInfoList& chosen_object_info_list) {
648 // When a permission is changed, WebsiteSettings::OnSitePermissionChanged() 656 // When a permission is changed, WebsiteSettings::OnSitePermissionChanged()
649 // calls this method with updated permissions. However, PermissionSelectorRow 657 // calls this method with updated permissions. However, PermissionSelectorRow
650 // will have already updated its state, so it's already reflected in the UI. 658 // will have already updated its state, so it's already reflected in the UI.
651 // In addition, if a permission is set to the default setting, WebsiteSettings 659 // In addition, if a permission is set to the default setting, WebsiteSettings
652 // removes it from |permission_info_list|, but the button should remain. 660 // removes it from |permission_info_list|, but the button should remain.
653 if (permissions_content_) { 661 if (permissions_view_) {
654 base::STLDeleteContainerPointers(chosen_object_info_list.begin(), 662 base::STLDeleteContainerPointers(chosen_object_info_list.begin(),
655 chosen_object_info_list.end()); 663 chosen_object_info_list.end());
656 return; 664 return;
657 } 665 }
658 666
659 permissions_content_ = new views::View(); 667 permissions_view_ = new views::View();
660 views::GridLayout* layout = new views::GridLayout(permissions_content_); 668 views::GridLayout* layout = new views::GridLayout(permissions_view_);
661 permissions_content_->SetLayoutManager(layout); 669 permissions_view_->SetLayoutManager(layout);
662 670
663 base::string16 headline = 671 site_settings_view_->AddChildView(permissions_view_);
664 permission_info_list.empty()
665 ? base::string16()
666 : l10n_util::GetStringUTF16(
667 IDS_WEBSITE_SETTINGS_TITLE_SITE_PERMISSIONS);
668 views::View* permissions_section =
669 CreateSection(headline, permissions_content_, nullptr);
670 site_settings_view_->AddChildView(permissions_section);
671 672
672 const int content_column = 0; 673 const int content_column = 0;
673 views::ColumnSet* column_set = layout->AddColumnSet(content_column); 674 views::ColumnSet* column_set = layout->AddColumnSet(content_column);
674 column_set->AddColumn(views::GridLayout::FILL, 675 column_set->AddColumn(views::GridLayout::FILL,
675 views::GridLayout::FILL, 676 views::GridLayout::FILL,
676 1, 677 1,
677 views::GridLayout::USE_PREF, 678 views::GridLayout::USE_PREF,
678 0, 679 0,
679 0); 680 0);
680 for (const auto& permission : permission_info_list) { 681 for (const auto& permission : permission_info_list) {
681 layout->StartRow(1, content_column); 682 layout->StartRow(1, content_column);
682 PermissionSelectorRow* selector = new PermissionSelectorRow( 683 PermissionSelectorRow* selector = new PermissionSelectorRow(
683 web_contents() ? web_contents()->GetVisibleURL() : GURL::EmptyGURL(), 684 web_contents() ? web_contents()->GetVisibleURL() : GURL::EmptyGURL(),
684 permission); 685 permission);
685 selector->AddObserver(this); 686 selector->AddObserver(this);
686 layout->AddView(selector, 687 layout->AddView(selector, 1, 1, views::GridLayout::FILL,
687 1,
688 1,
689 views::GridLayout::LEADING,
690 views::GridLayout::CENTER); 688 views::GridLayout::CENTER);
691 layout->AddPaddingRow(1, kContentRowSpacing); 689 layout->AddPaddingRow(1, kPermissionsVerticalSpacing);
692 } 690 }
693 691
694 for (auto* object : chosen_object_info_list) { 692 for (auto* object : chosen_object_info_list) {
695 layout->StartRow(1, content_column); 693 layout->StartRow(1, content_column);
696 // The view takes ownership of the object info. 694 // The view takes ownership of the object info.
697 auto* object_view = new ChosenObjectRow(base::WrapUnique(object)); 695 auto* object_view = new ChosenObjectRow(base::WrapUnique(object));
698 object_view->AddObserver(this); 696 object_view->AddObserver(this);
699 layout->AddView(object_view, 1, 1, views::GridLayout::LEADING, 697 layout->AddView(object_view, 1, 1, views::GridLayout::LEADING,
700 views::GridLayout::CENTER); 698 views::GridLayout::CENTER);
701 layout->AddPaddingRow(1, kContentRowSpacing); 699 layout->AddPaddingRow(1, kPermissionsVerticalSpacing);
702 } 700 }
703 701
704 layout->Layout(permissions_content_); 702 layout->Layout(permissions_view_);
705 703
706 // Add site settings link. 704 // Add site settings link.
707 site_settings_link_ = new views::Link( 705 views::Link* site_settings_link = new views::Link(
708 l10n_util::GetStringUTF16(IDS_PAGE_INFO_SITE_SETTINGS_LINK)); 706 l10n_util::GetStringUTF16(IDS_PAGE_INFO_SITE_SETTINGS_LINK));
709 site_settings_link_->set_listener(this); 707 site_settings_link->set_listener(this);
710 views::View* link_section = new views::View(); 708 views::View* link_section = new views::View();
711 const int kLinkMarginTop = 4; 709 const int kLinkMarginTop = 4;
712 link_section->SetLayoutManager( 710 link_section->SetLayoutManager(new views::BoxLayout(
713 new views::BoxLayout(views::BoxLayout::kHorizontal, 711 views::BoxLayout::kHorizontal, 0, kLinkMarginTop, 0));
714 kSiteSettingsViewPaddingLeft, kLinkMarginTop, 0)); 712 link_section->AddChildView(site_settings_link);
715 link_section->AddChildView(site_settings_link_);
716 site_settings_view_->AddChildView(link_section); 713 site_settings_view_->AddChildView(link_section);
717 714
718 SizeToContents(); 715 SizeToContents();
719 } 716 }
720 717
721 void WebsiteSettingsPopupView::SetIdentityInfo( 718 void WebsiteSettingsPopupView::SetIdentityInfo(
722 const IdentityInfo& identity_info) { 719 const IdentityInfo& identity_info) {
723 std::unique_ptr<WebsiteSettingsUI::SecurityDescription> security_description = 720 std::unique_ptr<WebsiteSettingsUI::SecurityDescription> security_description =
724 identity_info.GetSecurityDescription(); 721 identity_info.GetSecurityDescription();
725 722
(...skipping 12 matching lines...) Expand all
738 735
739 Layout(); 736 Layout();
740 SizeToContents(); 737 SizeToContents();
741 } 738 }
742 739
743 void WebsiteSettingsPopupView::SetSelectedTab(TabId tab_id) { 740 void WebsiteSettingsPopupView::SetSelectedTab(TabId tab_id) {
744 // TODO(lgarron): Remove this method. (https://crbug.com/571533) 741 // TODO(lgarron): Remove this method. (https://crbug.com/571533)
745 } 742 }
746 743
747 views::View* WebsiteSettingsPopupView::CreateSiteSettingsView() { 744 views::View* WebsiteSettingsPopupView::CreateSiteSettingsView() {
748 views::View* pane = new views::View(); 745 views::View* site_settings_view = new views::View();
msw 2016/10/08 00:21:57 aside: it'd be nice to avoid this container (but m
lgarron 2016/10/08 03:50:04 Ack.
749 pane->SetLayoutManager( 746 views::BoxLayout* box_layout =
750 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 1)); 747 new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0);
748 site_settings_view->SetLayoutManager(box_layout);
749 box_layout->set_cross_axis_alignment(
750 views::BoxLayout::CROSS_AXIS_ALIGNMENT_STRETCH);
751 box_layout->set_inside_border_insets(
752 gfx::Insets(0, kSectionPaddingHorizontal));
751 753
752 // Add cookies and site data section. 754 // Add cookies view.
753 site_data_content_ = new views::View(); 755 cookies_view_ = new views::View();
754 views::View* site_data_section = CreateSection( 756 site_settings_view->AddChildView(cookies_view_);
755 l10n_util::GetStringUTF16(IDS_WEBSITE_SETTINGS_TITLE_SITE_DATA),
756 site_data_content_, nullptr);
757 pane->AddChildView(site_data_section);
758 757
759 return pane; 758 return site_settings_view;
760 } 759 }
761 views::View* WebsiteSettingsPopupView::CreateSection(
762 const base::string16& headline_text,
763 views::View* content,
764 views::Link* link) {
765 views::View* container = new views::View();
766 views::GridLayout* layout = new views::GridLayout(container);
767 container->SetLayoutManager(layout);
768 const int content_column = 0;
769 views::ColumnSet* column_set = layout->AddColumnSet(content_column);
770 column_set->AddPaddingColumn(0, kSiteSettingsViewPaddingLeft);
771 column_set->AddColumn(views::GridLayout::FILL,
772 views::GridLayout::FILL,
773 1,
774 views::GridLayout::USE_PREF,
775 0,
776 0);
777
778 if (headline_text.length() > 0) {
779 layout->AddPaddingRow(1, kSiteSettingsViewPaddingTop);
780 layout->StartRow(1, content_column);
781 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
782 views::Label* headline = new views::Label(
783 headline_text, rb.GetFontList(ui::ResourceBundle::BoldFont));
784 layout->AddView(headline, 1, 1, views::GridLayout::LEADING,
785 views::GridLayout::CENTER);
786 }
787
788 layout->AddPaddingRow(1, kSiteSettingsViewHeadlineMarginBottom);
789 layout->StartRow(1, content_column);
790 layout->AddView(content, 1, 1, views::GridLayout::LEADING,
791 views::GridLayout::CENTER);
792
793 if (link) {
794 layout->AddPaddingRow(1, 4);
795 layout->StartRow(1, content_column);
796 layout->AddView(link, 1, 1, views::GridLayout::LEADING,
797 views::GridLayout::CENTER);
798 }
799
800 layout->AddPaddingRow(1, kSiteSettingsViewPaddingBottom);
801 return container;
802 }
803
804 760
805 void WebsiteSettingsPopupView::HandleLinkClickedAsync(views::Link* source) { 761 void WebsiteSettingsPopupView::HandleLinkClickedAsync(views::Link* source) {
806 if (web_contents() == nullptr || web_contents()->IsBeingDestroyed()) 762 if (web_contents() == nullptr || web_contents()->IsBeingDestroyed())
807 return; 763 return;
808 764 DCHECK_EQ(source, cookie_dialog_link_);
809 if (source == cookie_dialog_link_) { 765 // Count how often the Collected Cookies dialog is opened.
810 // Count how often the Collected Cookies dialog is opened. 766 presenter_->RecordWebsiteSettingsAction(
811 presenter_->RecordWebsiteSettingsAction( 767 WebsiteSettings::WEBSITE_SETTINGS_COOKIES_DIALOG_OPENED);
812 WebsiteSettings::WEBSITE_SETTINGS_COOKIES_DIALOG_OPENED); 768 new CollectedCookiesViews(web_contents());
813
814 new CollectedCookiesViews(web_contents());
815 } else if (source == site_settings_link_) {
816 // TODO(palmer): This opens the general Content Settings pane, which is OK
817 // for now. But on Android, it opens a page specific to a given origin that
818 // shows all of the settings for that origin. If/when that's available on
819 // desktop we should link to that here, too.
820 web_contents()->OpenURL(content::OpenURLParams(
821 GURL(chrome::kChromeUIContentSettingsURL), content::Referrer(),
822 WindowOpenDisposition::NEW_FOREGROUND_TAB, ui::PAGE_TRANSITION_LINK,
823 false));
824 presenter_->RecordWebsiteSettingsAction(
825 WebsiteSettings::WEBSITE_SETTINGS_SITE_SETTINGS_OPENED);
826 } else {
827 NOTREACHED();
828 }
829 } 769 }
830 770
831 void WebsiteSettingsPopupView::StyledLabelLinkClicked(views::StyledLabel* label, 771 void WebsiteSettingsPopupView::StyledLabelLinkClicked(views::StyledLabel* label,
832 const gfx::Range& range, 772 const gfx::Range& range,
833 int event_flags) { 773 int event_flags) {
834 presenter_->RecordWebsiteSettingsAction( 774 presenter_->RecordWebsiteSettingsAction(
835 WebsiteSettings::WEBSITE_SETTINGS_SECURITY_DETAILS_OPENED); 775 WebsiteSettings::WEBSITE_SETTINGS_SECURITY_DETAILS_OPENED);
836 776
837 if (is_devtools_disabled_) { 777 if (is_devtools_disabled_) {
838 DCHECK(certificate_); 778 DCHECK(certificate_);
839 gfx::NativeWindow parent = 779 gfx::NativeWindow parent =
840 anchor_widget() ? anchor_widget()->GetNativeWindow() : nullptr; 780 anchor_widget() ? anchor_widget()->GetNativeWindow() : nullptr;
841 presenter_->RecordWebsiteSettingsAction( 781 presenter_->RecordWebsiteSettingsAction(
842 WebsiteSettings::WEBSITE_SETTINGS_CERTIFICATE_DIALOG_OPENED); 782 WebsiteSettings::WEBSITE_SETTINGS_CERTIFICATE_DIALOG_OPENED);
843 ShowCertificateViewer(web_contents(), parent, certificate_.get()); 783 ShowCertificateViewer(web_contents(), parent, certificate_.get());
844 } else { 784 } else {
845 DevToolsWindow::OpenDevToolsWindow( 785 DevToolsWindow::OpenDevToolsWindow(
846 web_contents(), DevToolsToggleAction::ShowSecurityPanel()); 786 web_contents(), DevToolsToggleAction::ShowSecurityPanel());
847 } 787 }
848 } 788 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698