1 // Copyright (c) 2012 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 #ifndef CHROME_BROWSER_EXTENSIONS_API_PUSH_MESSAGING_PUSH_MESSAGING_INVALIDATION_HANDLER_H_ 6 #define CHROME_BROWSER_EXTENSIONS_API_PUSH_MESSAGING_PUSH_MESSAGING_INVALIDATION_HANDLER_H_ 7 8 #include <set> 9 #include <string> 10 11 #include "base/basictypes.h" 12 #include "base/compiler_specific.h" 13 #include "base/threading/thread_checker.h" 14 #include "chrome/browser/extensions/api/push_messaging/push_messaging_invalidation_mapper.h" 15 #include "sync/notifier/invalidation_handler.h" 16 17 namespace invalidation { 18 class InvalidationService; 19 } 20 21 namespace extensions { 22 23 class PushMessagingInvalidationHandlerDelegate; 24 25 // This class maps extension IDs to the corresponding object IDs, manages 26 // invalidation registrations, and dispatches callbacks for any invalidations 27 // received. 28 class PushMessagingInvalidationHandler : public PushMessagingInvalidationMapper, 29 public syncer::InvalidationHandler { 30 public: 31 // |service| and |delegate| must remain valid for the lifetime of this object. 32 // |extension_ids| is the set of extension IDs for which push messaging is 33 // enabled. 34 PushMessagingInvalidationHandler( 35 invalidation::InvalidationService* service, 36 PushMessagingInvalidationHandlerDelegate* delegate); 37 virtual ~PushMessagingInvalidationHandler(); 38 39 // PushMessagingInvalidationMapper implementation. 40 virtual void SuppressInitialInvalidationsForExtension( 41 const std::string& extension_id) OVERRIDE; 42 virtual void RegisterExtension(const std::string& extension_id) OVERRIDE; 43 virtual void UnregisterExtension(const std::string& extension_id) OVERRIDE; 44 45 // InvalidationHandler implementation. 46 virtual void OnInvalidatorStateChange( 47 syncer::InvalidatorState state) OVERRIDE; 48 virtual void OnIncomingInvalidation( 49 const syncer::ObjectIdInvalidationMap& invalidation_map) OVERRIDE; 50 51 const std::set<std::string>& GetRegisteredExtensionsForTest() const { 52 return registered_extensions_; 53 } 54 55 private: 56 void UpdateRegistrations(); 57 58 base::ThreadChecker thread_checker_; 59 invalidation::InvalidationService* const service_; 60 std::set<std::string> registered_extensions_; 61 syncer::ObjectIdSet suppressed_ids_; 62 PushMessagingInvalidationHandlerDelegate* const delegate_; 63 64 DISALLOW_COPY_AND_ASSIGN(PushMessagingInvalidationHandler); 65 }; 66 67 } // namespace extensions 68 69 #endif // CHROME_BROWSER_EXTENSIONS_API_PUSH_MESSAGING_PUSH_MESSAGING_INVALIDATION_HANDLER_H_ 70