Chromium Code Reviews| Index: chrome/browser/safe_browsing/srt_global_error.cc |
| diff --git a/chrome/browser/safe_browsing/srt_global_error.cc b/chrome/browser/safe_browsing/srt_global_error.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..3366115207451085d1140b963bf7bb322d696246 |
| --- /dev/null |
| +++ b/chrome/browser/safe_browsing/srt_global_error.cc |
| @@ -0,0 +1,120 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/safe_browsing/srt_global_error.h" |
| + |
| +#include "base/callback.h" |
| +#include "base/metrics/histogram.h" |
| +#include "chrome/app/chrome_command_ids.h" |
| +#include "chrome/browser/ui/browser.h" |
| +#include "chrome/browser/ui/global_error/global_error_service.h" |
| +#include "grit/chromium_strings.h" |
| +#include "grit/generated_resources.h" |
| +#include "grit/google_chrome_strings.h" |
| +#include "ui/base/l10n/l10n_util.h" |
| + |
| +namespace { |
| +// The download link of the Software Removal Tool. |
| +const char kSRTDownloadURL[] = "http://www.google.com/chrome/srt/"; |
|
engedy
2014/09/24 10:14:45
We should explicitly use HTTPS here, as www.google
MAD
2014/09/24 11:12:33
Done.
|
| + |
| +// Enum values for the SRTPrompt histogram. Don't change order, always add |
| +// to the end, and adjust SRT_PROMPT_MAX. |
| +enum SRTPromptHistogramValue { |
| + SRT_PROMPT_SHOWN = 0, |
| + SRT_PROMPT_ACCEPTED = 1, |
| + SRT_PROMPT_DENIED = 2, |
| + SRT_PROMPT_MAX = 3, |
| +}; |
| + |
| +void RecordSRTPromptHistogram(SRTPromptHistogramValue value) { |
| + UMA_HISTOGRAM_ENUMERATION("SRTPrompt", value, SRT_PROMPT_MAX); |
| +} |
| + |
| +} // namespace |
| + |
| +// SRTGlobalError ------------------------------------------------------------ |
| + |
| +SRTGlobalError::SRTGlobalError(GlobalErrorService* global_error_service) |
| + : global_error_service_(global_error_service) { |
| +} |
| + |
| +SRTGlobalError::~SRTGlobalError() { |
| +} |
| + |
| +// static |
| +bool SRTGlobalError::IsSupportedOnPlatform() { |
| +// The Software Removal Tool only runs on windows. |
| +#if defined(OS_WIN) |
| + return true; |
| +#else |
| + return false; |
| +#endif |
| +} |
| + |
| +bool SRTGlobalError::HasMenuItem() { |
| + return true; |
| +} |
| + |
| +int SRTGlobalError::MenuItemCommandID() { |
| + return IDC_SHOW_SRT_BUBBLE; |
| +} |
| + |
| +base::string16 SRTGlobalError::MenuItemLabel() { |
| + return l10n_util::GetStringUTF16(IDS_SRT_MENU_ITEM); |
| +} |
| + |
| +void SRTGlobalError::ExecuteMenuItem(Browser* browser) { |
| + ShowBubbleView(browser); |
| +} |
| + |
| +void SRTGlobalError::ShowBubbleView(Browser* browser) { |
| + RecordSRTPromptHistogram(SRT_PROMPT_SHOWN); |
| + GlobalErrorWithStandardBubble::ShowBubbleView(browser); |
| +} |
| + |
| +base::string16 SRTGlobalError::GetBubbleViewTitle() { |
| + return l10n_util::GetStringUTF16(IDS_SRT_BUBBLE_TITLE); |
| +} |
| + |
| +std::vector<base::string16> SRTGlobalError::GetBubbleViewMessages() { |
| + std::vector<base::string16> messages; |
| + messages.push_back(l10n_util::GetStringUTF16(IDS_SRT_BUBBLE_TEXT)); |
| + return messages; |
| +} |
| + |
| +base::string16 SRTGlobalError::GetBubbleViewAcceptButtonLabel() { |
| + return l10n_util::GetStringUTF16(IDS_SRT_BUBBLE_DOWNLOAD_BUTTON_TEXT); |
| +} |
| + |
| +base::string16 SRTGlobalError::GetBubbleViewCancelButtonLabel() { |
| + return l10n_util::GetStringUTF16(IDS_NO_THANKS); |
| +} |
| + |
| +void SRTGlobalError::OnBubbleViewDidClose(Browser* browser) { |
| + // If the bubble closes and the error has been dismissed, it can be destroyed. |
| + if (!global_error_service_) |
| + delete this; |
| +} |
| + |
| +void SRTGlobalError::BubbleViewAcceptButtonPressed(Browser* browser) { |
| + RecordSRTPromptHistogram(SRT_PROMPT_ACCEPTED); |
| + browser->OpenURL(content::OpenURLParams(GURL(kSRTDownloadURL), |
| + content::Referrer(), |
| + NEW_FOREGROUND_TAB, |
| + ui::PAGE_TRANSITION_LINK, |
| + false)); |
| + DismissGlobalError(); |
| +} |
| + |
| +void SRTGlobalError::BubbleViewCancelButtonPressed(Browser* browser) { |
| + RecordSRTPromptHistogram(SRT_PROMPT_DENIED); |
| + DismissGlobalError(); |
| +} |
| + |
| +void SRTGlobalError::DismissGlobalError() { |
| + if (global_error_service_) { |
| + global_error_service_->RemoveGlobalError(this); |
|
engedy
2014/09/24 10:14:45
I am unsure about the details of the GlobalErrorBu
MAD
2014/09/24 11:12:33
Actually, the call to Close the Widget is synchron
|
| + global_error_service_ = NULL; |
| + } |
| +} |