// 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_win.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. // TODO(mad): Should we only have the bubble show up on official Chrome build? const char kSRTDownloadURL[] = "https://www.google.com/chrome/srt/"; // Enum values for the SRTPrompt histogram. Don't change order, always add // to the end, before SRT_PROMPT_MAX, of course. enum SRTPromptHistogramValue { SRT_PROMPT_SHOWN = 0, SRT_PROMPT_ACCEPTED = 1, SRT_PROMPT_DENIED = 2, SRT_PROMPT_MAX, }; void RecordSRTPromptHistogram(SRTPromptHistogramValue value) { UMA_HISTOGRAM_ENUMERATION( "SoftwareReporter.PromptUsage", value, SRT_PROMPT_MAX); } } // namespace // SRTGlobalError ------------------------------------------------------------ SRTGlobalError::SRTGlobalError(GlobalErrorService* global_error_service) : global_error_service_(global_error_service) { DCHECK(global_error_service_); } SRTGlobalError::~SRTGlobalError() { } 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) { // The menu item should never get executed while the bubble is shown, unless // we eventually change it to NOT close on deactivate. DCHECK(ShouldCloseOnDeactivate()); DCHECK(GetBubbleView() == NULL); 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) { } 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(); } bool SRTGlobalError::ShouldCloseOnDeactivate() const { return false; } void SRTGlobalError::DismissGlobalError() { global_error_service_->RemoveGlobalError(this); delete this; }