1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/callback_forward.h"
6#include "base/memory/ref_counted.h"
7#include "base/threading/non_thread_safe.h"
8#include "components/invalidation/invalidation_service.h"
9#include "components/invalidation/p2p_invalidator.h"
10#include "components/keyed_service/core/keyed_service.h"
11
12#ifndef COMPONENTS_INVALIDATION_P2P_INVALIDATION_SERVICE_H_
13#define COMPONENTS_INVALIDATION_P2P_INVALIDATION_SERVICE_H_
14
15namespace net {
16class URLRequestContextGetter;
17}
18
19namespace syncer {
20class P2PInvalidator;
21}
22
23namespace invalidation {
24
25class InvalidationLogger;
26
27// This service is a wrapper around P2PInvalidator.  Unlike other
28// InvalidationServices, it can both send and receive invalidations.  It is used
29// only in tests, where we're unable to connect to a real invalidations server.
30class P2PInvalidationService : public base::NonThreadSafe,
31                               public InvalidationService {
32 public:
33  P2PInvalidationService(
34      scoped_ptr<IdentityProvider> identity_provider,
35      const scoped_refptr<net::URLRequestContextGetter>& request_context,
36      syncer::P2PNotificationTarget notification_target);
37  virtual ~P2PInvalidationService();
38
39  // InvalidationService implementation.
40  // It is an error to have registered handlers when the service is destroyed.
41  virtual void RegisterInvalidationHandler(
42      syncer::InvalidationHandler* handler) OVERRIDE;
43  virtual void UpdateRegisteredInvalidationIds(
44      syncer::InvalidationHandler* handler,
45      const syncer::ObjectIdSet& ids) OVERRIDE;
46  virtual void UnregisterInvalidationHandler(
47      syncer::InvalidationHandler* handler) OVERRIDE;
48  virtual syncer::InvalidatorState GetInvalidatorState() const OVERRIDE;
49  virtual std::string GetInvalidatorClientId() const OVERRIDE;
50  virtual InvalidationLogger* GetInvalidationLogger() OVERRIDE;
51  virtual void RequestDetailedStatus(
52      base::Callback<void(const base::DictionaryValue&)> caller) const OVERRIDE;
53  virtual IdentityProvider* GetIdentityProvider() OVERRIDE;
54
55  void UpdateCredentials(const std::string& username,
56                         const std::string& password);
57
58  void SendInvalidation(const syncer::ObjectIdSet& ids);
59
60 private:
61  scoped_ptr<IdentityProvider> identity_provider_;
62  scoped_ptr<syncer::P2PInvalidator> invalidator_;
63  std::string invalidator_id_;
64
65  DISALLOW_COPY_AND_ASSIGN(P2PInvalidationService);
66};
67
68}  // namespace invalidation
69
70#endif  // COMPONENTS_INVALIDATION_P2P_INVALIDATION_SERVICE_H_
71