Chromium Code Reviews| Index: chrome/browser/ui/views/website_settings/website_settings_popup_view.cc |
| diff --git a/chrome/browser/ui/views/website_settings/website_settings_popup_view.cc b/chrome/browser/ui/views/website_settings/website_settings_popup_view.cc |
| index 3d2a10dada4d4418708d6028aee98cb63a31f82a..80d6ae036604e9e4cd668668ee66552be9d86017 100644 |
| --- a/chrome/browser/ui/views/website_settings/website_settings_popup_view.cc |
| +++ b/chrome/browser/ui/views/website_settings/website_settings_popup_view.cc |
| @@ -21,6 +21,7 @@ |
| #include "components/content_settings/core/common/content_settings_types.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/cert_store.h" |
| +#include "content/public/browser/ssl_host_state_delegate.h" |
| #include "content/public/browser/user_metrics.h" |
| #include "grit/chromium_strings.h" |
| #include "grit/generated_resources.h" |
| @@ -310,6 +311,7 @@ WebsiteSettingsPopupView::WebsiteSettingsPopupView( |
| identity_info_content_(NULL), |
| certificate_dialog_link_(NULL), |
| signed_certificate_timestamps_link_(NULL), |
| + reset_decisions_button_(NULL), |
| cert_id_(0), |
| help_center_link_(NULL), |
| connection_info_content_(NULL), |
| @@ -378,21 +380,40 @@ void WebsiteSettingsPopupView::OnWidgetDestroying(views::Widget* widget) { |
| presenter_->OnUIClosing(); |
| } |
| -void WebsiteSettingsPopupView::ButtonPressed( |
| - views::Button* button, |
| - const ui::Event& event) { |
| - GetWidget()->Close(); |
| +void WebsiteSettingsPopupView::ButtonPressed(views::Button* button, |
| + const ui::Event& event) { |
| + if (button == reset_decisions_button_) { |
| + content::SSLHostStateDelegate* delegate = |
| + web_contents_->GetBrowserContext()->GetSSLHostStateDelegate(); |
| + if (delegate) |
| + delegate->RevokeUserDecisionsHard(presenter_->site_url().host()); |
| + GetWidget()->Close(); |
| + } |
| } |
| void WebsiteSettingsPopupView::LinkClicked(views::Link* source, |
| int event_flags) { |
| - // The popup closes automatically when the collected cookies dialog or the |
| - // certificate viewer opens. So delay handling of the link clicked to avoid |
| - // a crash in the base class which needs to complete the mouse event handling. |
| - content::BrowserThread::PostTask( |
| - content::BrowserThread::UI, FROM_HERE, |
| - base::Bind(&WebsiteSettingsPopupView::HandleLinkClickedAsync, |
| - weak_factory_.GetWeakPtr(), source)); |
| + if (source == cookie_dialog_link_) { |
| + // Count how often the Collected Cookies dialog is opened. |
| + content::RecordAction( |
| + base::UserMetricsAction("WebsiteSettings_CookiesDialogOpened")); |
| + new CollectedCookiesViews(web_contents_); |
| + } else if (source == certificate_dialog_link_) { |
| + gfx::NativeWindow parent = |
| + GetAnchorView() ? GetAnchorView()->GetWidget()->GetNativeWindow() |
| + : NULL; |
|
Peter Kasting
2014/08/11 22:35:41
Nit: clang-format bug: Wrap like
gfx::NativeW
|
| + ShowCertificateViewerByID(web_contents_, parent, cert_id_); |
| + } else if (source == signed_certificate_timestamps_link_) { |
| + chrome::ShowSignedCertificateTimestampsViewer( |
| + web_contents_, signed_certificate_timestamp_ids_); |
| + } else if (source == help_center_link_) { |
| + browser_->OpenURL( |
| + content::OpenURLParams(GURL(chrome::kPageInfoHelpCenterURL), |
| + content::Referrer(), |
| + NEW_FOREGROUND_TAB, |
| + content::PAGE_TRANSITION_LINK, |
| + false)); |
| + } |
| } |
| void WebsiteSettingsPopupView::TabSelectedAt(int index) { |
| @@ -556,6 +577,14 @@ void WebsiteSettingsPopupView::SetIdentityInfo( |
| signed_certificate_timestamps_link_->set_listener(this); |
| } |
| + if (identity_info.have_bypassed_ssl_error) { |
| + reset_decisions_button_ = new views::LabelButton( |
| + this, |
| + l10n_util::GetStringUTF16( |
| + IDS_PAGEINFO_RESET_INVALID_CERTIFICATE_DECISIONS_BUTTON)); |
| + reset_decisions_button_->SetStyle(views::Button::STYLE_BUTTON); |
| + } |
| + |
| headline = base::UTF8ToUTF16(identity_info.site_identity); |
| } |
| ResetConnectionSection( |
| @@ -564,7 +593,8 @@ void WebsiteSettingsPopupView::SetIdentityInfo( |
| base::string16(), // The identity section has no headline. |
| base::UTF8ToUTF16(identity_info.identity_status_description), |
| certificate_dialog_link_, |
| - signed_certificate_timestamps_link_); |
| + signed_certificate_timestamps_link_, |
| + reset_decisions_button_); |
| ResetConnectionSection( |
| connection_info_content_, |
| @@ -572,6 +602,7 @@ void WebsiteSettingsPopupView::SetIdentityInfo( |
| base::string16(), // The connection section has no headline. |
| base::UTF8ToUTF16(identity_info.connection_status_description), |
| NULL, |
| + NULL, |
| NULL); |
| connection_tab_->InvalidateLayout(); |
| @@ -587,6 +618,7 @@ void WebsiteSettingsPopupView::SetFirstVisit( |
| l10n_util::GetStringUTF16(IDS_PAGE_INFO_SITE_INFO_TITLE), |
| first_visit, |
| NULL, |
| + NULL, |
| NULL); |
| connection_tab_->InvalidateLayout(); |
| Layout(); |
| @@ -705,7 +737,8 @@ void WebsiteSettingsPopupView::ResetConnectionSection( |
| const base::string16& headline, |
| const base::string16& text, |
| views::Link* link, |
| - views::Link* secondary_link) { |
| + views::Link* secondary_link, |
| + views::LabelButton* reset_decisions_button) { |
| section_container->RemoveAllChildViews(true); |
| views::GridLayout* layout = new views::GridLayout(section_container); |
| @@ -778,34 +811,12 @@ void WebsiteSettingsPopupView::ResetConnectionSection( |
| content_layout->AddView(secondary_link); |
| } |
| + if (reset_decisions_button) { |
| + content_layout->StartRow(1, 0); |
| + content_layout->AddView(reset_decisions_button); |
| + } |
| + |
| layout->AddView(content_pane, 1, 1, views::GridLayout::LEADING, |
| views::GridLayout::LEADING); |
| layout->AddPaddingRow(0, kConnectionSectionPaddingBottom); |
| } |
| - |
| -// Used to asynchronously handle clicks since these calls may cause the |
| -// destruction of the settings view and the base class window still |
| -// needs to be alive to finish handling the mouse click. |
| -void WebsiteSettingsPopupView::HandleLinkClickedAsync(views::Link* source) { |
| - if (source == cookie_dialog_link_) { |
| - // Count how often the Collected Cookies dialog is opened. |
| - content::RecordAction( |
| - base::UserMetricsAction("WebsiteSettings_CookiesDialogOpened")); |
| - new CollectedCookiesViews(web_contents_); |
| - } else if (source == certificate_dialog_link_) { |
| - gfx::NativeWindow parent = |
| - GetAnchorView() ? GetAnchorView()->GetWidget()->GetNativeWindow() : |
| - NULL; |
| - ShowCertificateViewerByID(web_contents_, parent, cert_id_); |
| - } else if (source == signed_certificate_timestamps_link_) { |
| - chrome::ShowSignedCertificateTimestampsViewer( |
| - web_contents_, signed_certificate_timestamp_ids_); |
| - } else if (source == help_center_link_) { |
| - browser_->OpenURL(content::OpenURLParams( |
| - GURL(chrome::kPageInfoHelpCenterURL), |
| - content::Referrer(), |
| - NEW_FOREGROUND_TAB, |
| - content::PAGE_TRANSITION_LINK, |
| - false)); |
| - } |
| -} |