chrome_invalidation_client.h revision 72a454cd3513ac24fbdd0e0cb9ad70b86a99b801
1// Copyright (c) 2010 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// A simple wrapper around invalidation::InvalidationClient that 6// handles all the startup/shutdown details and hookups. 7 8#ifndef CHROME_BROWSER_SYNC_NOTIFIER_CHROME_INVALIDATION_CLIENT_H_ 9#define CHROME_BROWSER_SYNC_NOTIFIER_CHROME_INVALIDATION_CLIENT_H_ 10#pragma once 11 12#include <string> 13 14#include "base/basictypes.h" 15#include "base/scoped_callback_factory.h" 16#include "base/scoped_ptr.h" 17#include "base/threading/non_thread_safe.h" 18#include "base/weak_ptr.h" 19#include "chrome/browser/sync/notifier/chrome_system_resources.h" 20#include "chrome/browser/sync/notifier/state_writer.h" 21#include "chrome/browser/sync/syncable/model_type.h" 22#include "google/cacheinvalidation/invalidation-client.h" 23 24namespace talk_base { 25class Task; 26} // namespace 27 28namespace sync_notifier { 29 30class CacheInvalidationPacketHandler; 31class RegistrationManager; 32 33// TODO(akalin): Hook this up to a NetworkChangeNotifier so we can 34// properly notify invalidation_client_. 35 36class ChromeInvalidationClient 37 : public invalidation::InvalidationListener, 38 public StateWriter { 39 public: 40 class Listener { 41 public: 42 virtual ~Listener(); 43 44 virtual void OnInvalidate(syncable::ModelType model_type, 45 const std::string& payload) = 0; 46 47 virtual void OnInvalidateAll() = 0; 48 }; 49 50 ChromeInvalidationClient(); 51 52 // Calls Stop(). 53 virtual ~ChromeInvalidationClient(); 54 55 // Does not take ownership of |listener| or |state_writer|. 56 // |base_task| must still be non-NULL. 57 void Start( 58 const std::string& client_id, const std::string& client_info, 59 const std::string& state, Listener* listener, 60 StateWriter* state_writer, base::WeakPtr<talk_base::Task> base_task); 61 62 void Stop(); 63 64 // Changes the task used to |base_task|, which must still be 65 // non-NULL. Must only be called between calls to Start() and 66 // Stop(). 67 void ChangeBaseTask(base::WeakPtr<talk_base::Task> base_task); 68 69 // Register the sync types that we're interested in getting 70 // notifications for. Must only be called between calls to Start() 71 // and Stop(). 72 void RegisterTypes(); 73 74 // invalidation::InvalidationListener implementation. 75 // 76 // TODO(akalin): Move these into a private inner class. 77 78 virtual void Invalidate(const invalidation::Invalidation& invalidation, 79 invalidation::Closure* callback); 80 81 virtual void InvalidateAll(invalidation::Closure* callback); 82 83 virtual void RegistrationStateChanged( 84 const invalidation::ObjectId& object_id, 85 invalidation::RegistrationState new_state, 86 const invalidation::UnknownHint& unknown_hint); 87 88 virtual void AllRegistrationsLost(invalidation::Closure* callback); 89 90 virtual void RegistrationLost(const invalidation::ObjectId& object_id, 91 invalidation::Closure* callback); 92 93 // StateWriter implementation. 94 virtual void WriteState(const std::string& state); 95 96 private: 97 friend class ChromeInvalidationClientTest; 98 99 // Should only be called between calls to Start() and Stop(). 100 void HandleOutboundPacket( 101 invalidation::NetworkEndpoint* const& network_endpoint); 102 103 base::NonThreadSafe non_thread_safe_; 104 ChromeSystemResources chrome_system_resources_; 105 base::ScopedCallbackFactory<ChromeInvalidationClient> 106 scoped_callback_factory_; 107 scoped_ptr<invalidation::NetworkCallback> handle_outbound_packet_callback_; 108 Listener* listener_; 109 StateWriter* state_writer_; 110 scoped_ptr<invalidation::InvalidationClient> invalidation_client_; 111 scoped_ptr<CacheInvalidationPacketHandler> 112 cache_invalidation_packet_handler_; 113 scoped_ptr<RegistrationManager> registration_manager_; 114 115 DISALLOW_COPY_AND_ASSIGN(ChromeInvalidationClient); 116}; 117 118} // namespace sync_notifier 119 120#endif // CHROME_BROWSER_SYNC_NOTIFIER_CHROME_INVALIDATION_CLIENT_H_ 121