blob: 81845969c9af80bb8a42fef9a95c939124bed497 [file] [log] [blame]
// Copyright 2017 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.
#ifndef CHROME_BROWSER_SEARCH_SEARCH_ENGINE_BASE_URL_TRACKER_H_
#define CHROME_BROWSER_SEARCH_SEARCH_ENGINE_BASE_URL_TRACKER_H_
#include <memory>
#include "base/callback.h"
#include "base/macros.h"
#include "base/optional.h"
#include "base/scoped_observer.h"
#include "components/search_engines/template_url_data.h"
#include "components/search_engines/template_url_service_observer.h"
#include "url/gurl.h"
class SearchTermsData;
class TemplateURLService;
// A helper class that watches for changes to the base URL of the default search
// engine. Typically this changes when a different DSE is selected. For Google,
// it can also change without changing the DSE, when the Google base URL is
// updated. This can happen in the case of country (i.e. TLD) changes.
class SearchEngineBaseURLTracker : public TemplateURLServiceObserver {
public:
enum class ChangeReason {
DEFAULT_SEARCH_PROVIDER,
GOOGLE_BASE_URL,
};
using BaseURLChangedCallback = base::Callback<void(ChangeReason)>;
SearchEngineBaseURLTracker(
TemplateURLService* template_url_service,
std::unique_ptr<SearchTermsData> search_terms_data,
const BaseURLChangedCallback& base_url_changed_callback);
~SearchEngineBaseURLTracker() override;
private:
// TemplateURLServiceObserver implementation.
void OnTemplateURLServiceChanged() override;
// Returns true if the base URL of the current search engine is Google.
bool HasGoogleBaseURL();
TemplateURLService* template_url_service_;
std::unique_ptr<SearchTermsData> search_terms_data_;
BaseURLChangedCallback base_url_changed_callback_;
ScopedObserver<TemplateURLService, TemplateURLServiceObserver> observer_;
// Used to check whether notifications from TemplateURLService indicate a
// change that affects the default search provider.
GURL previous_google_base_url_;
base::Optional<TemplateURLData> previous_default_search_provider_data_;
DISALLOW_COPY_AND_ASSIGN(SearchEngineBaseURLTracker);
};
#endif // CHROME_BROWSER_SEARCH_SEARCH_ENGINE_BASE_URL_TRACKER_H_