1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file. 4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// An implementation of SyncNotifier that wraps InvalidationNotifier 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// on its own thread. 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#ifndef CHROME_BROWSER_SYNC_NOTIFIER_NON_BLOCKING_INVALIDATION_NOTIFIER_H_ 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#define CHROME_BROWSER_SYNC_NOTIFIER_NON_BLOCKING_INVALIDATION_NOTIFIER_H_ 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#pragma once 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <string> 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/basictypes.h" 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted.h" 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/sync/notifier/sync_notifier.h" 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "jingle/notifier/base/notifier_options.h" 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace base { 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass MessageLoopProxy; 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace sync_notifier { 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass NonBlockingInvalidationNotifier : public SyncNotifier { 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NonBlockingInvalidationNotifier( 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const notifier::NotifierOptions& notifier_options, 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& client_info); 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~NonBlockingInvalidationNotifier(); 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // SyncNotifier implementation. 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void AddObserver(SyncNotifierObserver* observer); 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void RemoveObserver(SyncNotifierObserver* observer); 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SetState(const std::string& state); 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void UpdateCredentials( 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& email, const std::string& token); 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void UpdateEnabledTypes(const syncable::ModelTypeSet& types); 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void SendNotification(); 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void CheckOrSetValidThread(); 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // The real guts of NonBlockingInvalidationNotifier, which allows this class 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // to not be refcounted. 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen class Core; 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<Core> core_; 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<base::MessageLoopProxy> construction_message_loop_proxy_; 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<base::MessageLoopProxy> method_message_loop_proxy_; 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_refptr<base::MessageLoopProxy> io_message_loop_proxy_; 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(NonBlockingInvalidationNotifier); 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace sync_notifier 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif // CHROME_BROWSER_SYNC_NOTIFIER_NON_BLOCKING_INVALIDATION_NOTIFIER_H_ 57