Home | History | Annotate | Download | only in push_messaging
      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