OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 } | |
OLD | NEW |