blob: ed0234bdac22783b854c13f077c63d1b2b7ce42d [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 COMPONENTS_NTP_SNIPPETS_REMOTE_REMOTE_SUGGESTIONS_STATUS_SERVICE_IMPL_H_
#define COMPONENTS_NTP_SNIPPETS_REMOTE_REMOTE_SUGGESTIONS_STATUS_SERVICE_IMPL_H_
#include "base/callback.h"
#include "base/scoped_observer.h"
#include "components/ntp_snippets/remote/remote_suggestions_status_service.h"
#include "components/prefs/pref_change_registrar.h"
class PrefRegistrySimple;
class PrefService;
namespace ntp_snippets {
class RemoteSuggestionsStatusServiceImpl
: public RemoteSuggestionsStatusService {
public:
RemoteSuggestionsStatusServiceImpl(bool is_signed_in,
PrefService* pref_service,
const std::string& additional_toggle_pref);
~RemoteSuggestionsStatusServiceImpl() override;
static void RegisterProfilePrefs(PrefRegistrySimple* registry);
// RemoteSuggestionsStatusService implementation.
void Init(const StatusChangeCallback& callback) override;
void OnSignInStateChanged(bool has_signed_in) override;
private:
// Callbacks for the PrefChangeRegistrar.
void OnSnippetsEnabledChanged();
void OnListVisibilityChanged();
void OnStateChanged(RemoteSuggestionsStatus new_status);
bool IsSignedIn() const;
// Returns whether the service is explicitly disabled, by the user or by a
// policy for example.
bool IsExplicitlyDisabled() const;
RemoteSuggestionsStatus GetStatusFromDeps() const;
RemoteSuggestionsStatus status_;
StatusChangeCallback status_change_callback_;
// Name of a preference to be used as an additional toggle to guard the
// remote suggestions provider.
std::string additional_toggle_pref_;
bool is_signed_in_;
// Whether the list of remote suggestions was ever visible during the session.
// In case it was visible and then gets hidden, the service will only be
// disabled on the next startup of browser, provided that the list is still
// hidden then.
bool list_visible_during_session_;
PrefService* pref_service_;
PrefChangeRegistrar pref_change_registrar_;
DISALLOW_COPY_AND_ASSIGN(RemoteSuggestionsStatusServiceImpl);
};
} // namespace ntp_snippets
#endif // COMPONENTS_NTP_SNIPPETS_REMOTE_REMOTE_SUGGESTIONS_STATUS_SERVICE_IMPL_H_