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