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

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

Issue 418133012: Add button to page info to revoke user certificate decisions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase on ToT Created 6 years, 4 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 | Annotate | Revision Log
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 <algorithm> 7 #include <algorithm>
8 8
9 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
11 #include "chrome/browser/certificate_viewer.h" 11 #include "chrome/browser/certificate_viewer.h"
12 #include "chrome/browser/infobars/infobar_service.h" 12 #include "chrome/browser/infobars/infobar_service.h"
13 #include "chrome/browser/profiles/profile.h" 13 #include "chrome/browser/profiles/profile.h"
14 #include "chrome/browser/ui/browser.h" 14 #include "chrome/browser/ui/browser.h"
15 #include "chrome/browser/ui/browser_dialogs.h" 15 #include "chrome/browser/ui/browser_dialogs.h"
16 #include "chrome/browser/ui/views/collected_cookies_views.h" 16 #include "chrome/browser/ui/views/collected_cookies_views.h"
17 #include "chrome/browser/ui/views/website_settings/permission_selector_view.h" 17 #include "chrome/browser/ui/views/website_settings/permission_selector_view.h"
18 #include "chrome/browser/ui/website_settings/website_settings.h" 18 #include "chrome/browser/ui/website_settings/website_settings.h"
19 #include "chrome/browser/ui/website_settings/website_settings_utils.h" 19 #include "chrome/browser/ui/website_settings/website_settings_utils.h"
20 #include "chrome/common/url_constants.h" 20 #include "chrome/common/url_constants.h"
21 #include "components/content_settings/core/common/content_settings_types.h" 21 #include "components/content_settings/core/common/content_settings_types.h"
22 #include "content/public/browser/browser_thread.h" 22 #include "content/public/browser/browser_thread.h"
23 #include "content/public/browser/cert_store.h" 23 #include "content/public/browser/cert_store.h"
24 #include "content/public/browser/ssl_host_state_delegate.h"
24 #include "content/public/browser/user_metrics.h" 25 #include "content/public/browser/user_metrics.h"
25 #include "grit/chromium_strings.h" 26 #include "grit/chromium_strings.h"
26 #include "grit/generated_resources.h" 27 #include "grit/generated_resources.h"
27 #include "grit/theme_resources.h" 28 #include "grit/theme_resources.h"
28 #include "grit/ui_resources.h" 29 #include "grit/ui_resources.h"
29 #include "ui/base/l10n/l10n_util.h" 30 #include "ui/base/l10n/l10n_util.h"
30 #include "ui/base/models/simple_menu_model.h" 31 #include "ui/base/models/simple_menu_model.h"
31 #include "ui/base/resource/resource_bundle.h" 32 #include "ui/base/resource/resource_bundle.h"
32 #include "ui/gfx/canvas.h" 33 #include "ui/gfx/canvas.h"
33 #include "ui/gfx/font_list.h" 34 #include "ui/gfx/font_list.h"
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 browser_(browser), 304 browser_(browser),
304 header_(NULL), 305 header_(NULL),
305 tabbed_pane_(NULL), 306 tabbed_pane_(NULL),
306 site_data_content_(NULL), 307 site_data_content_(NULL),
307 cookie_dialog_link_(NULL), 308 cookie_dialog_link_(NULL),
308 permissions_content_(NULL), 309 permissions_content_(NULL),
309 connection_tab_(NULL), 310 connection_tab_(NULL),
310 identity_info_content_(NULL), 311 identity_info_content_(NULL),
311 certificate_dialog_link_(NULL), 312 certificate_dialog_link_(NULL),
312 signed_certificate_timestamps_link_(NULL), 313 signed_certificate_timestamps_link_(NULL),
314 reset_decisions_button_(NULL),
313 cert_id_(0), 315 cert_id_(0),
314 help_center_link_(NULL), 316 help_center_link_(NULL),
315 connection_info_content_(NULL), 317 connection_info_content_(NULL),
316 page_info_content_(NULL), 318 page_info_content_(NULL),
317 weak_factory_(this) { 319 weak_factory_(this) {
318 // Compensate for built-in vertical padding in the anchor view's image. 320 // Compensate for built-in vertical padding in the anchor view's image.
319 set_anchor_view_insets(gfx::Insets(kLocationIconVerticalMargin, 0, 321 set_anchor_view_insets(gfx::Insets(kLocationIconVerticalMargin, 0,
320 kLocationIconVerticalMargin, 0)); 322 kLocationIconVerticalMargin, 0));
321 323
322 views::GridLayout* layout = new views::GridLayout(this); 324 views::GridLayout* layout = new views::GridLayout(this);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 void WebsiteSettingsPopupView::OnPermissionChanged( 373 void WebsiteSettingsPopupView::OnPermissionChanged(
372 const WebsiteSettingsUI::PermissionInfo& permission) { 374 const WebsiteSettingsUI::PermissionInfo& permission) {
373 presenter_->OnSitePermissionChanged(permission.type, permission.setting); 375 presenter_->OnSitePermissionChanged(permission.type, permission.setting);
374 } 376 }
375 377
376 void WebsiteSettingsPopupView::OnWidgetDestroying(views::Widget* widget) { 378 void WebsiteSettingsPopupView::OnWidgetDestroying(views::Widget* widget) {
377 is_popup_showing = false; 379 is_popup_showing = false;
378 presenter_->OnUIClosing(); 380 presenter_->OnUIClosing();
379 } 381 }
380 382
381 void WebsiteSettingsPopupView::ButtonPressed( 383 void WebsiteSettingsPopupView::ButtonPressed(views::Button* button,
382 views::Button* button, 384 const ui::Event& event) {
383 const ui::Event& event) { 385 if (button == reset_decisions_button_) {
384 GetWidget()->Close(); 386 content::SSLHostStateDelegate* delegate =
387 web_contents_->GetBrowserContext()->GetSSLHostStateDelegate();
388 if (delegate)
389 delegate->RevokeUserDecisionsHard(presenter_->site_url().host());
390 GetWidget()->Close();
391 }
385 } 392 }
386 393
387 void WebsiteSettingsPopupView::LinkClicked(views::Link* source, 394 void WebsiteSettingsPopupView::LinkClicked(views::Link* source,
388 int event_flags) { 395 int event_flags) {
389 // The popup closes automatically when the collected cookies dialog or the 396 if (source == cookie_dialog_link_) {
390 // certificate viewer opens. So delay handling of the link clicked to avoid 397 // Count how often the Collected Cookies dialog is opened.
391 // a crash in the base class which needs to complete the mouse event handling. 398 content::RecordAction(
392 content::BrowserThread::PostTask( 399 base::UserMetricsAction("WebsiteSettings_CookiesDialogOpened"));
393 content::BrowserThread::UI, FROM_HERE, 400 new CollectedCookiesViews(web_contents_);
394 base::Bind(&WebsiteSettingsPopupView::HandleLinkClickedAsync, 401 } else if (source == certificate_dialog_link_) {
395 weak_factory_.GetWeakPtr(), source)); 402 gfx::NativeWindow parent =
403 GetAnchorView() ? GetAnchorView()->GetWidget()->GetNativeWindow()
404 : NULL;
Peter Kasting 2014/08/11 22:35:41 Nit: clang-format bug: Wrap like gfx::NativeW
405 ShowCertificateViewerByID(web_contents_, parent, cert_id_);
406 } else if (source == signed_certificate_timestamps_link_) {
407 chrome::ShowSignedCertificateTimestampsViewer(
408 web_contents_, signed_certificate_timestamp_ids_);
409 } else if (source == help_center_link_) {
410 browser_->OpenURL(
411 content::OpenURLParams(GURL(chrome::kPageInfoHelpCenterURL),
412 content::Referrer(),
413 NEW_FOREGROUND_TAB,
414 content::PAGE_TRANSITION_LINK,
415 false));
416 }
396 } 417 }
397 418
398 void WebsiteSettingsPopupView::TabSelectedAt(int index) { 419 void WebsiteSettingsPopupView::TabSelectedAt(int index) {
399 tabbed_pane_->GetSelectedTab()->Layout(); 420 tabbed_pane_->GetSelectedTab()->Layout();
400 SizeToContents(); 421 SizeToContents();
401 } 422 }
402 423
403 gfx::Size WebsiteSettingsPopupView::GetPreferredSize() const { 424 gfx::Size WebsiteSettingsPopupView::GetPreferredSize() const {
404 if (header_ == NULL && tabbed_pane_ == NULL) 425 if (header_ == NULL && tabbed_pane_ == NULL)
405 return views::View::GetPreferredSize(); 426 return views::View::GetPreferredSize();
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 l10n_util::GetStringUTF16(IDS_PAGEINFO_CERT_INFO_BUTTON)); 570 l10n_util::GetStringUTF16(IDS_PAGEINFO_CERT_INFO_BUTTON));
550 certificate_dialog_link_->set_listener(this); 571 certificate_dialog_link_->set_listener(this);
551 572
552 if (!signed_certificate_timestamp_ids_.empty()) { 573 if (!signed_certificate_timestamp_ids_.empty()) {
553 signed_certificate_timestamps_link_ = 574 signed_certificate_timestamps_link_ =
554 new views::Link(l10n_util::GetStringUTF16( 575 new views::Link(l10n_util::GetStringUTF16(
555 IDS_PAGEINFO_CERT_TRANSPARENCY_INFO_BUTTON)); 576 IDS_PAGEINFO_CERT_TRANSPARENCY_INFO_BUTTON));
556 signed_certificate_timestamps_link_->set_listener(this); 577 signed_certificate_timestamps_link_->set_listener(this);
557 } 578 }
558 579
580 if (identity_info.have_bypassed_ssl_error) {
581 reset_decisions_button_ = new views::LabelButton(
582 this,
583 l10n_util::GetStringUTF16(
584 IDS_PAGEINFO_RESET_INVALID_CERTIFICATE_DECISIONS_BUTTON));
585 reset_decisions_button_->SetStyle(views::Button::STYLE_BUTTON);
586 }
587
559 headline = base::UTF8ToUTF16(identity_info.site_identity); 588 headline = base::UTF8ToUTF16(identity_info.site_identity);
560 } 589 }
561 ResetConnectionSection( 590 ResetConnectionSection(
562 identity_info_content_, 591 identity_info_content_,
563 WebsiteSettingsUI::GetIdentityIcon(identity_info.identity_status), 592 WebsiteSettingsUI::GetIdentityIcon(identity_info.identity_status),
564 base::string16(), // The identity section has no headline. 593 base::string16(), // The identity section has no headline.
565 base::UTF8ToUTF16(identity_info.identity_status_description), 594 base::UTF8ToUTF16(identity_info.identity_status_description),
566 certificate_dialog_link_, 595 certificate_dialog_link_,
567 signed_certificate_timestamps_link_); 596 signed_certificate_timestamps_link_,
597 reset_decisions_button_);
568 598
569 ResetConnectionSection( 599 ResetConnectionSection(
570 connection_info_content_, 600 connection_info_content_,
571 WebsiteSettingsUI::GetConnectionIcon(identity_info.connection_status), 601 WebsiteSettingsUI::GetConnectionIcon(identity_info.connection_status),
572 base::string16(), // The connection section has no headline. 602 base::string16(), // The connection section has no headline.
573 base::UTF8ToUTF16(identity_info.connection_status_description), 603 base::UTF8ToUTF16(identity_info.connection_status_description),
574 NULL, 604 NULL,
605 NULL,
575 NULL); 606 NULL);
576 607
577 connection_tab_->InvalidateLayout(); 608 connection_tab_->InvalidateLayout();
578 Layout(); 609 Layout();
579 SizeToContents(); 610 SizeToContents();
580 } 611 }
581 612
582 void WebsiteSettingsPopupView::SetFirstVisit( 613 void WebsiteSettingsPopupView::SetFirstVisit(
583 const base::string16& first_visit) { 614 const base::string16& first_visit) {
584 ResetConnectionSection( 615 ResetConnectionSection(
585 page_info_content_, 616 page_info_content_,
586 WebsiteSettingsUI::GetFirstVisitIcon(first_visit), 617 WebsiteSettingsUI::GetFirstVisitIcon(first_visit),
587 l10n_util::GetStringUTF16(IDS_PAGE_INFO_SITE_INFO_TITLE), 618 l10n_util::GetStringUTF16(IDS_PAGE_INFO_SITE_INFO_TITLE),
588 first_visit, 619 first_visit,
589 NULL, 620 NULL,
621 NULL,
590 NULL); 622 NULL);
591 connection_tab_->InvalidateLayout(); 623 connection_tab_->InvalidateLayout();
592 Layout(); 624 Layout();
593 SizeToContents(); 625 SizeToContents();
594 } 626 }
595 627
596 void WebsiteSettingsPopupView::SetSelectedTab(TabId tab_id) { 628 void WebsiteSettingsPopupView::SetSelectedTab(TabId tab_id) {
597 tabbed_pane_->SelectTabAt(tab_id); 629 tabbed_pane_->SelectTabAt(tab_id);
598 } 630 }
599 631
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
698 layout->AddPaddingRow(1, kPermissionsSectionPaddingBottom); 730 layout->AddPaddingRow(1, kPermissionsSectionPaddingBottom);
699 return container; 731 return container;
700 } 732 }
701 733
702 void WebsiteSettingsPopupView::ResetConnectionSection( 734 void WebsiteSettingsPopupView::ResetConnectionSection(
703 views::View* section_container, 735 views::View* section_container,
704 const gfx::Image& icon, 736 const gfx::Image& icon,
705 const base::string16& headline, 737 const base::string16& headline,
706 const base::string16& text, 738 const base::string16& text,
707 views::Link* link, 739 views::Link* link,
708 views::Link* secondary_link) { 740 views::Link* secondary_link,
741 views::LabelButton* reset_decisions_button) {
709 section_container->RemoveAllChildViews(true); 742 section_container->RemoveAllChildViews(true);
710 743
711 views::GridLayout* layout = new views::GridLayout(section_container); 744 views::GridLayout* layout = new views::GridLayout(section_container);
712 section_container->SetLayoutManager(layout); 745 section_container->SetLayoutManager(layout);
713 views::ColumnSet* column_set = layout->AddColumnSet(0); 746 views::ColumnSet* column_set = layout->AddColumnSet(0);
714 column_set->AddPaddingColumn(0, kConnectionSectionPaddingLeft); 747 column_set->AddPaddingColumn(0, kConnectionSectionPaddingLeft);
715 column_set->AddColumn(views::GridLayout::LEADING, 748 column_set->AddColumn(views::GridLayout::LEADING,
716 views::GridLayout::LEADING, 749 views::GridLayout::LEADING,
717 0, 750 0,
718 views::GridLayout::USE_PREF, 751 views::GridLayout::USE_PREF,
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 if (link) { 804 if (link) {
772 content_layout->StartRow(1, 0); 805 content_layout->StartRow(1, 0);
773 content_layout->AddView(link); 806 content_layout->AddView(link);
774 } 807 }
775 808
776 if (secondary_link) { 809 if (secondary_link) {
777 content_layout->StartRow(1, 0); 810 content_layout->StartRow(1, 0);
778 content_layout->AddView(secondary_link); 811 content_layout->AddView(secondary_link);
779 } 812 }
780 813
814 if (reset_decisions_button) {
815 content_layout->StartRow(1, 0);
816 content_layout->AddView(reset_decisions_button);
817 }
818
781 layout->AddView(content_pane, 1, 1, views::GridLayout::LEADING, 819 layout->AddView(content_pane, 1, 1, views::GridLayout::LEADING,
782 views::GridLayout::LEADING); 820 views::GridLayout::LEADING);
783 layout->AddPaddingRow(0, kConnectionSectionPaddingBottom); 821 layout->AddPaddingRow(0, kConnectionSectionPaddingBottom);
784 } 822 }
785
786 // Used to asynchronously handle clicks since these calls may cause the
787 // destruction of the settings view and the base class window still
788 // needs to be alive to finish handling the mouse click.
789 void WebsiteSettingsPopupView::HandleLinkClickedAsync(views::Link* source) {
790 if (source == cookie_dialog_link_) {
791 // Count how often the Collected Cookies dialog is opened.
792 content::RecordAction(
793 base::UserMetricsAction("WebsiteSettings_CookiesDialogOpened"));
794 new CollectedCookiesViews(web_contents_);
795 } else if (source == certificate_dialog_link_) {
796 gfx::NativeWindow parent =
797 GetAnchorView() ? GetAnchorView()->GetWidget()->GetNativeWindow() :
798 NULL;
799 ShowCertificateViewerByID(web_contents_, parent, cert_id_);
800 } else if (source == signed_certificate_timestamps_link_) {
801 chrome::ShowSignedCertificateTimestampsViewer(
802 web_contents_, signed_certificate_timestamp_ids_);
803 } else if (source == help_center_link_) {
804 browser_->OpenURL(content::OpenURLParams(
805 GURL(chrome::kPageInfoHelpCenterURL),
806 content::Referrer(),
807 NEW_FOREGROUND_TAB,
808 content::PAGE_TRANSITION_LINK,
809 false));
810 }
811 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698