11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/safe_browsing/srt_global_error_win.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/callback.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/metrics/histogram.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/app/chrome_command_ids.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/ui/browser.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/ui/global_error/global_error_service.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "grit/chromium_strings.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "grit/generated_resources.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "grit/google_chrome_strings.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/base/l10n/l10n_util.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace { 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// The download link of the Software Removal Tool. 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// TODO(mad): Should we only have the bubble show up on official Chrome build? 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kSRTDownloadURL[] = "https://www.google.com/chrome/srt/"; 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Enum values for the SRTPrompt histogram. Don't change order, always add 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// to the end, before SRT_PROMPT_MAX, of course. 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccienum SRTPromptHistogramValue { 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SRT_PROMPT_SHOWN = 0, 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SRT_PROMPT_ACCEPTED = 1, 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SRT_PROMPT_DENIED = 2, 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SRT_PROMPT_MAX, 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid RecordSRTPromptHistogram(SRTPromptHistogramValue value) { 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UMA_HISTOGRAM_ENUMERATION( 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "SoftwareReporter.PromptUsage", value, SRT_PROMPT_MAX); 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// SRTGlobalError ------------------------------------------------------------ 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciSRTGlobalError::SRTGlobalError(GlobalErrorService* global_error_service) 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : global_error_service_(global_error_service) { 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(global_error_service_); 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciSRTGlobalError::~SRTGlobalError() { 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool SRTGlobalError::HasMenuItem() { 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return true; 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint SRTGlobalError::MenuItemCommandID() { 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return IDC_SHOW_SRT_BUBBLE; 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibase::string16 SRTGlobalError::MenuItemLabel() { 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return l10n_util::GetStringUTF16(IDS_SRT_MENU_ITEM); 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid SRTGlobalError::ExecuteMenuItem(Browser* browser) { 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The menu item should never get executed while the bubble is shown, unless 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // we eventually change it to NOT close on deactivate. 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(ShouldCloseOnDeactivate()); 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(GetBubbleView() == NULL); 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ShowBubbleView(browser); 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid SRTGlobalError::ShowBubbleView(Browser* browser) { 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RecordSRTPromptHistogram(SRT_PROMPT_SHOWN); 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GlobalErrorWithStandardBubble::ShowBubbleView(browser); 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibase::string16 SRTGlobalError::GetBubbleViewTitle() { 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return l10n_util::GetStringUTF16(IDS_SRT_BUBBLE_TITLE); 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistd::vector<base::string16> SRTGlobalError::GetBubbleViewMessages() { 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::vector<base::string16> messages; 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci messages.push_back(l10n_util::GetStringUTF16(IDS_SRT_BUBBLE_TEXT)); 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return messages; 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibase::string16 SRTGlobalError::GetBubbleViewAcceptButtonLabel() { 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return l10n_util::GetStringUTF16(IDS_SRT_BUBBLE_DOWNLOAD_BUTTON_TEXT); 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibase::string16 SRTGlobalError::GetBubbleViewCancelButtonLabel() { 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return l10n_util::GetStringUTF16(IDS_NO_THANKS); 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid SRTGlobalError::OnBubbleViewDidClose(Browser* browser) { 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid SRTGlobalError::BubbleViewAcceptButtonPressed(Browser* browser) { 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RecordSRTPromptHistogram(SRT_PROMPT_ACCEPTED); 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci browser->OpenURL(content::OpenURLParams(GURL(kSRTDownloadURL), 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::Referrer(), 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NEW_FOREGROUND_TAB, 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::PAGE_TRANSITION_LINK, 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci false)); 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DismissGlobalError(); 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid SRTGlobalError::BubbleViewCancelButtonPressed(Browser* browser) { 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RecordSRTPromptHistogram(SRT_PROMPT_DENIED); 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DismissGlobalError(); 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 11034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)bool SRTGlobalError::ShouldCloseOnDeactivate() const { 11134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) return false; 11234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)} 11334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid SRTGlobalError::DismissGlobalError() { 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci global_error_service_->RemoveGlobalError(this); 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci delete this; 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 118