Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1842)

Unified Diff: chrome/browser/protector/default_search_provider_change.cc

Issue 11493003: Remove the protector service. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix implicit ExtensionSystem -> TemplateURLService dependency Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/protector/default_search_provider_change.cc
diff --git a/chrome/browser/protector/default_search_provider_change.cc b/chrome/browser/protector/default_search_provider_change.cc
deleted file mode 100644
index d27e666a62df295f0e21f257eca9ba50089eb1fa..0000000000000000000000000000000000000000
--- a/chrome/browser/protector/default_search_provider_change.cc
+++ /dev/null
@@ -1,433 +0,0 @@
-// Copyright (c) 2012 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 <algorithm>
-
-#include "base/basictypes.h"
-#include "base/compiler_specific.h"
-#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/metrics/histogram.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/protector/base_setting_change.h"
-#include "chrome/browser/protector/histograms.h"
-#include "chrome/browser/protector/protector_service.h"
-#include "chrome/browser/protector/protector_service_factory.h"
-#include "chrome/browser/search_engines/template_url.h"
-#include "chrome/browser/search_engines/template_url_prepopulate_data.h"
-#include "chrome/browser/search_engines/template_url_service.h"
-#include "chrome/browser/search_engines/template_url_service_factory.h"
-#include "chrome/browser/search_engines/template_url_service_observer.h"
-#include "chrome/browser/webdata/keyword_table.h"
-#include "chrome/common/chrome_notification_types.h"
-#include "chrome/common/url_constants.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
-#include "content/public/browser/notification_service.h"
-#include "googleurl/src/gurl.h"
-#include "grit/chromium_strings.h"
-#include "grit/generated_resources.h"
-#include "grit/theme_resources.h"
-#include "ui/base/l10n/l10n_util.h"
-
-namespace protector {
-
-namespace {
-
-// Maximum length of the search engine name to be displayed.
-const size_t kMaxDisplayedNameLength = 16;
-
-// Matches TemplateURL with all fields set from the prepopulated data equal
-// to fields in another TemplateURL.
-class TemplateURLIsSame {
- public:
- // Creates a matcher based on |other|.
- explicit TemplateURLIsSame(const TemplateURL* other) : other_(other) {
- }
-
- // Returns true if both |other| and |url| are NULL or have same field values.
- bool operator()(const TemplateURL* url) {
- if (url == other_ )
- return true;
- if (!url || !other_)
- return false;
- return url->short_name() == other_->short_name() &&
- url->HasSameKeywordAs(*other_) &&
- url->url() == other_->url() &&
- url->suggestions_url() == other_->suggestions_url() &&
- url->instant_url() == other_->instant_url() &&
- url->safe_for_autoreplace() == other_->safe_for_autoreplace() &&
- url->favicon_url() == other_->favicon_url() &&
- url->show_in_default_list() == other_->show_in_default_list() &&
- url->input_encodings() == other_->input_encodings() &&
- url->prepopulate_id() == other_->prepopulate_id();
- }
-
- private:
- const TemplateURL* other_;
-};
-
-} // namespace
-
-// Default search engine change tracked by Protector.
-class DefaultSearchProviderChange : public BaseSettingChange,
- public TemplateURLServiceObserver,
- public content::NotificationObserver {
- public:
- DefaultSearchProviderChange(TemplateURL* new_search_provider,
- TemplateURL* backup_search_provider);
-
- // BaseSettingChange overrides:
- virtual bool Init(Profile* profile) OVERRIDE;
- virtual void InitWhenDisabled(Profile* profile) OVERRIDE;
- virtual void Apply(Browser* browser) OVERRIDE;
- virtual void Discard(Browser* browser) OVERRIDE;
- virtual void Timeout() OVERRIDE;
- virtual int GetBadgeIconID() const OVERRIDE;
- virtual int GetMenuItemIconID() const OVERRIDE;
- virtual int GetBubbleIconID() const OVERRIDE;
- virtual string16 GetBubbleTitle() const OVERRIDE;
- virtual string16 GetBubbleMessage() const OVERRIDE;
- virtual string16 GetApplyButtonText() const OVERRIDE;
- virtual string16 GetDiscardButtonText() const OVERRIDE;
- virtual DisplayName GetApplyDisplayName() const OVERRIDE;
- virtual GURL GetNewSettingURL() const OVERRIDE;
-
- private:
- virtual ~DefaultSearchProviderChange();
-
- // TemplateURLServiceObserver overrides:
- virtual void OnTemplateURLServiceChanged() OVERRIDE;
-
- // content::NotificationObserver overrides:
- virtual void Observe(int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) OVERRIDE;
-
- // Sets the default search provider to |*search_provider|. If a matching
- // TemplateURL already exists, it is reused and |*search_provider| is reset.
- // Otherwise, adds |*search_provider| to keywords and releases it.
- // In both cases, |*search_provider| is NULL after this call.
- // Returns the new default search provider (either |*search_provider| or the
- // reused TemplateURL).
- const TemplateURL* SetDefaultSearchProvider(
- scoped_ptr<TemplateURL>* search_provider);
-
- // Returns true if |new_search_provider_| can be used as the default search
- // provider.
- bool NewSearchProviderValid() const;
-
- // Opens the Search engine settings page in a new tab.
- void OpenSearchEngineSettings(Browser* browser);
-
- // Returns the TemplateURLService instance for the Profile this change is
- // related to.
- TemplateURLService* GetTemplateURLService();
-
- // Histogram ID of the new search provider.
- int new_histogram_id_;
- // Indicates that the default search was restored to the prepopulated default
- // search engines.
- bool is_fallback_;
- // Indicates that the the prepopulated default search is the same as
- // |new_search_provider_|.
- bool fallback_is_new_;
- // ID of |new_search_provider_|.
- TemplateURLID new_id_;
- // The default search at the moment the change was detected. Will be used to
- // restore the new default search back if Apply is called. Will be set to
- // |NULL| if removed from the TemplateURLService.
- TemplateURL* new_search_provider_;
- // Default search provider set by Init for the period until user makes a
- // choice and either Apply or Discard is performed. Never is |NULL| during
- // that period since the change will dismiss itself if this provider gets
- // deleted or stops being the default.
- const TemplateURL* default_search_provider_;
- // Stores backup of the default search until it becomes owned by the
- // TemplateURLService or deleted.
- scoped_ptr<TemplateURL> backup_search_provider_;
- content::NotificationRegistrar registrar_;
-
- DISALLOW_COPY_AND_ASSIGN(DefaultSearchProviderChange);
-};
-
-DefaultSearchProviderChange::DefaultSearchProviderChange(
- TemplateURL* new_search_provider,
- TemplateURL* backup_search_provider)
- : new_histogram_id_(GetSearchProviderHistogramID(new_search_provider)),
- is_fallback_(false),
- fallback_is_new_(false),
- new_search_provider_(new_search_provider),
- default_search_provider_(NULL),
- backup_search_provider_(backup_search_provider) {
- if (backup_search_provider) {
- UMA_HISTOGRAM_ENUMERATION(
- kProtectorHistogramSearchProviderHijacked,
- new_histogram_id_,
- kProtectorMaxSearchProviderID);
- } else {
- UMA_HISTOGRAM_ENUMERATION(
- kProtectorHistogramSearchProviderCorrupt,
- new_histogram_id_,
- kProtectorMaxSearchProviderID);
- }
-}
-
-DefaultSearchProviderChange::~DefaultSearchProviderChange() {
- if (profile())
- GetTemplateURLService()->RemoveObserver(this);
-}
-
-bool DefaultSearchProviderChange::Init(Profile* profile) {
- if (!BaseSettingChange::Init(profile))
- return false;
-
- if (!backup_search_provider_.get() ||
- !backup_search_provider_->SupportsReplacement()) {
- // Fallback to a prepopulated default search provider, ignoring any
- // overrides in Prefs.
- backup_search_provider_.reset(
- TemplateURLPrepopulateData::GetPrepopulatedDefaultSearch(NULL));
- is_fallback_ = true;
- VLOG(1) << "Fallback search provider: "
- << backup_search_provider_->short_name();
- }
-
- default_search_provider_ = SetDefaultSearchProvider(&backup_search_provider_);
- DCHECK(default_search_provider_);
- // |backup_search_provider_| should be |NULL| since now.
- DCHECK(!backup_search_provider_.get());
- if (is_fallback_ && default_search_provider_ == new_search_provider_)
- fallback_is_new_ = true;
-
- int restored_histogram_id =
- GetSearchProviderHistogramID(default_search_provider_);
- UMA_HISTOGRAM_ENUMERATION(
- kProtectorHistogramSearchProviderRestored,
- restored_histogram_id,
- kProtectorMaxSearchProviderID);
-
- if (is_fallback_) {
- VLOG(1) << "Fallback to search provider: "
- << default_search_provider_->short_name();
- UMA_HISTOGRAM_ENUMERATION(
- kProtectorHistogramSearchProviderFallback,
- restored_histogram_id,
- kProtectorMaxSearchProviderID);
- }
-
- // Listen for the default search provider changes.
- GetTemplateURLService()->AddObserver(this);
-
- if (new_search_provider_) {
- // Listen for removal of |new_search_provider_|.
- new_id_ = new_search_provider_->id();
- registrar_.Add(
- this, chrome::NOTIFICATION_TEMPLATE_URL_REMOVED,
- content::Source<Profile>(profile->GetOriginalProfile()));
- }
-
- return true;
-}
-
-void DefaultSearchProviderChange::InitWhenDisabled(Profile* profile) {
- // The --no-protector case is handled in TemplateURLService internals.
- // TODO(ivankr): move it here.
- NOTREACHED();
-}
-
-void DefaultSearchProviderChange::Apply(Browser* browser) {
- UMA_HISTOGRAM_ENUMERATION(
- kProtectorHistogramSearchProviderApplied,
- new_histogram_id_,
- kProtectorMaxSearchProviderID);
-
- GetTemplateURLService()->RemoveObserver(this);
- if (NewSearchProviderValid()) {
- GetTemplateURLService()->SetDefaultSearchProvider(new_search_provider_);
- } else {
- // Open settings page in case the new setting is invalid.
- OpenSearchEngineSettings(browser);
- }
-}
-
-void DefaultSearchProviderChange::Discard(Browser* browser) {
- UMA_HISTOGRAM_ENUMERATION(
- kProtectorHistogramSearchProviderDiscarded,
- new_histogram_id_,
- kProtectorMaxSearchProviderID);
-
- GetTemplateURLService()->RemoveObserver(this);
- if (is_fallback_) {
- // Open settings page in case the old setting is invalid.
- OpenSearchEngineSettings(browser);
- }
- // Nothing to do otherwise since we have already set the search engine
- // to |old_id_| in |Init|.
-}
-
-void DefaultSearchProviderChange::Timeout() {
- UMA_HISTOGRAM_ENUMERATION(
- kProtectorHistogramSearchProviderTimeout,
- new_histogram_id_,
- kProtectorMaxSearchProviderID);
-}
-
-int DefaultSearchProviderChange::GetBadgeIconID() const {
- return IDR_SEARCH_ENGINE_CHANGE_BADGE;
-}
-
-int DefaultSearchProviderChange::GetMenuItemIconID() const {
- return IDR_SEARCH_ENGINE_CHANGE_MENU;
-}
-
-int DefaultSearchProviderChange::GetBubbleIconID() const {
- return IDR_SEARCH_ENGINE_CHANGE_ALERT;
-}
-
-string16 DefaultSearchProviderChange::GetBubbleTitle() const {
- return l10n_util::GetStringUTF16(IDS_SEARCH_ENGINE_CHANGE_TITLE);
-}
-
-string16 DefaultSearchProviderChange::GetBubbleMessage() const {
- if (is_fallback_) {
- return l10n_util::GetStringFUTF16(
- IDS_SEARCH_ENGINE_CHANGE_NO_BACKUP_MESSAGE,
- default_search_provider_->short_name());
- }
- return l10n_util::GetStringUTF16(IDS_SEARCH_ENGINE_CHANGE_MESSAGE);
-}
-
-string16 DefaultSearchProviderChange::GetApplyButtonText() const {
- if (NewSearchProviderValid()) {
- // If backup search engine is lost and fallback was made to the current
- // search provider then there is no need to show this button.
- if (fallback_is_new_)
- return string16();
- string16 name = new_search_provider_->short_name();
- return (name.length() > kMaxDisplayedNameLength) ?
- l10n_util::GetStringUTF16(IDS_CHANGE_SEARCH_ENGINE_NO_NAME) :
- l10n_util::GetStringFUTF16(IDS_CHANGE_SEARCH_ENGINE, name);
- }
- if (is_fallback_) {
- // Both settings are lost: don't show this button.
- return string16();
- }
- // New setting is lost, offer to go to settings.
- return l10n_util::GetStringUTF16(IDS_SELECT_SEARCH_ENGINE);
-}
-
-string16 DefaultSearchProviderChange::GetDiscardButtonText() const {
- if (!is_fallback_) {
- string16 name = default_search_provider_->short_name();
- return (name.length() > kMaxDisplayedNameLength) ?
- l10n_util::GetStringUTF16(IDS_KEEP_SETTING) :
- l10n_util::GetStringFUTF16(IDS_KEEP_SEARCH_ENGINE, name);
- }
- // Old setting is lost, offer to go to settings.
- return l10n_util::GetStringUTF16(IDS_SELECT_SEARCH_ENGINE);
-}
-
-BaseSettingChange::DisplayName
-DefaultSearchProviderChange::GetApplyDisplayName() const {
- if (NewSearchProviderValid() &&
- new_search_provider_->short_name().length() <= kMaxDisplayedNameLength) {
- return DisplayName(kDefaultSearchProviderChangeNamePriority,
- new_search_provider_->short_name());
- }
- // Return the default empty name.
- return BaseSettingChange::GetApplyDisplayName();
-}
-
-GURL DefaultSearchProviderChange::GetNewSettingURL() const {
- if (is_fallback_) {
- // Do not collide this change when fallback was made, since the message
- // and Discard behaviour is pretty different.
- return GURL();
- }
- if (!NewSearchProviderValid())
- return GURL();
- return TemplateURLService::GenerateSearchURL(new_search_provider_);
-}
-
-void DefaultSearchProviderChange::OnTemplateURLServiceChanged() {
- TemplateURLService* url_service = GetTemplateURLService();
- if (url_service->GetDefaultSearchProvider() != default_search_provider_) {
- VLOG(1) << "Default search provider has been changed by user";
- default_search_provider_ = NULL;
- url_service->RemoveObserver(this);
- // Will delete this DefaultSearchProviderChange instance.
- ProtectorServiceFactory::GetForProfile(profile())->DismissChange(this);
- }
-}
-
-void DefaultSearchProviderChange::Observe(
- int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
- DCHECK(type == chrome::NOTIFICATION_TEMPLATE_URL_REMOVED);
- TemplateURLID id = *content::Details<TemplateURLID>(details).ptr();
- if (id == new_id_)
- new_search_provider_ = NULL;
- registrar_.Remove(this, type, source);
- // TODO(ivankr): should the change be dismissed as well? Probably not,
- // since this may happend due to Sync or whatever. In that case, if user
- // clicks on 'Change to...', the Search engine settings page will be opened.
-}
-
-const TemplateURL* DefaultSearchProviderChange::SetDefaultSearchProvider(
- scoped_ptr<TemplateURL>* search_provider) {
- TemplateURLService* url_service = GetTemplateURLService();
- TemplateURLService::TemplateURLVector urls = url_service->GetTemplateURLs();
- TemplateURL* new_default_provider = NULL;
-
- // Check if this provider already exists and add it otherwise.
- TemplateURLService::TemplateURLVector::const_iterator i =
- std::find_if(urls.begin(), urls.end(),
- TemplateURLIsSame(search_provider->get()));
- if (i != urls.end()) {
- VLOG(1) << "Provider already exists";
- new_default_provider = *i;
- search_provider->reset();
- } else {
- VLOG(1) << "No match, adding new provider";
- new_default_provider = search_provider->get();
- url_service->Add(search_provider->release());
- UMA_HISTOGRAM_ENUMERATION(
- kProtectorHistogramSearchProviderMissing,
- GetSearchProviderHistogramID(new_default_provider),
- kProtectorMaxSearchProviderID);
- }
-
- // TODO(ivankr): handle keyword conflicts with existing providers.
- DCHECK(new_default_provider);
- VLOG(1) << "Default search provider set to: "
- << new_default_provider->short_name();
- url_service->SetDefaultSearchProvider(new_default_provider);
- return new_default_provider;
-}
-
-bool DefaultSearchProviderChange::NewSearchProviderValid() const {
- return new_search_provider_ && new_search_provider_->SupportsReplacement();
-}
-
-void DefaultSearchProviderChange::OpenSearchEngineSettings(Browser* browser) {
- ProtectorServiceFactory::GetForProfile(profile())->OpenTab(
- GURL(std::string(chrome::kChromeUISettingsURL) +
- chrome::kSearchEnginesSubPage), browser);
-}
-
-TemplateURLService* DefaultSearchProviderChange::GetTemplateURLService() {
- TemplateURLService* url_service =
- TemplateURLServiceFactory::GetForProfile(profile());
- DCHECK(url_service);
- return url_service;
-}
-
-BaseSettingChange* CreateDefaultSearchProviderChange(TemplateURL* actual,
- TemplateURL* backup) {
- return new DefaultSearchProviderChange(actual, backup);
-}
-
-} // namespace protector

Powered by Google App Engine
This is Rietveld 408576698