15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/tab_contents/spelling_bubble_model.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/theme_resources.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::OpenURLParams;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::Referrer;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SpellingBubbleModel::SpellingBubbleModel(Profile* profile,
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         WebContents* web_contents,
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         bool include_autocorrect)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : profile_(profile),
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents_(web_contents),
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      include_autocorrect_(include_autocorrect) {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SpellingBubbleModel::~SpellingBubbleModel() {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
34d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)base::string16 SpellingBubbleModel::GetTitle() const {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_SPELLING_ASK_GOOGLE);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
38d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)base::string16 SpellingBubbleModel::GetMessageText() const {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16(IDS_CONTENT_CONTEXT_SPELLING_BUBBLE_TEXT);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::Image* SpellingBubbleModel::GetIcon() const {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return &ResourceBundle::GetSharedInstance().GetImageNamed(
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDR_PRODUCT_LOGO_16);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
47d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)base::string16 SpellingBubbleModel::GetButtonLabel(BubbleButton button) const {
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16(button == BUTTON_OK ?
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_CONTENT_CONTEXT_SPELLING_BUBBLE_ENABLE :
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_CONTENT_CONTEXT_SPELLING_BUBBLE_DISABLE);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SpellingBubbleModel::Accept() {
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetPref(true);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SpellingBubbleModel::Cancel() {
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetPref(false);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
61d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)base::string16 SpellingBubbleModel::GetLinkText() const {
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return l10n_util::GetStringUTF16(IDS_LEARN_MORE);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SpellingBubbleModel::LinkClicked() {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OpenURLParams params(
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      GURL(chrome::kPrivacyLearnMoreURL), Referrer(), NEW_FOREGROUND_TAB,
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      content::PAGE_TRANSITION_LINK, false);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  web_contents_->OpenURL(params);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void SpellingBubbleModel::SetPref(bool enabled) {
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PrefService* pref = profile_->GetPrefs();
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DCHECK(pref);
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  pref->SetBoolean(prefs::kSpellCheckUseSpellingService, enabled);
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (include_autocorrect_)
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    pref->SetBoolean(prefs::kEnableAutoSpellCorrect, enabled);
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
79