blob: fcf2a9a1ceec85b313b27f64f09373f1be9d7149 [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/gtest_prod_util.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:
// TODO(jkrcal): Rewrite the tests using the public API - observing status
// changes instead of calling private GetStatusFromDeps() directly.
FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsStatusServiceImplTest,
SigninNeededIfSpecifiedByParam);
FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsStatusServiceImplTest,
NoSigninNeeded);
FRIEND_TEST_ALL_PREFIXES(RemoteSuggestionsStatusServiceImplTest,
DisabledViaPref);
// Callback for the PrefChangeRegistrar.
void OnSnippetsEnabledChanged();
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_;
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_