// Copyright 2019 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 COMPONENTS_SEARCH_SEARCH_PROVIDER_OBSERVER_H_
#define COMPONENTS_SEARCH_SEARCH_PROVIDER_OBSERVER_H_

#include "base/memory/raw_ptr.h"
#include "base/scoped_observation.h"
#include "components/search_engines/template_url_service.h"
#include "components/search_engines/template_url_service_observer.h"

// Keeps track of any changes in search engine provider and call
// the provided callback if a third-party search provider (i.e. a third-party
// NTP) is being used.
class SearchProviderObserver : public TemplateURLServiceObserver {
 public:
  explicit SearchProviderObserver(TemplateURLService* service,
                                  base::RepeatingClosure callback);
  ~SearchProviderObserver() override;

  virtual bool is_google();

 private:
  // TemplateURLServiceObserver:
  void OnTemplateURLServiceChanged() override;
  void OnTemplateURLServiceShuttingDown() override;

  base::ScopedObservation<TemplateURLService, TemplateURLServiceObserver>
      service_observation_{this};
  // May be nullptr in tests.
  raw_ptr<TemplateURLService> service_;
  bool is_google_;
  base::RepeatingClosure callback_;
};

#endif  // COMPONENTS_SEARCH_SEARCH_PROVIDER_OBSERVER_H_
