• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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 // Simple system resources class that uses the current message loop
6 // for scheduling.  Assumes the current message loop is already
7 // running.
8 
9 #ifndef CHROME_BROWSER_SYNC_NOTIFIER_CHROME_SYSTEM_RESOURCES_H_
10 #define CHROME_BROWSER_SYNC_NOTIFIER_CHROME_SYSTEM_RESOURCES_H_
11 #pragma once
12 
13 #include <set>
14 #include <string>
15 
16 #include "base/memory/scoped_ptr.h"
17 #include "base/message_loop.h"
18 #include "base/task.h"
19 #include "base/threading/non_thread_safe.h"
20 #include "chrome/browser/sync/notifier/state_writer.h"
21 #include "google/cacheinvalidation/invalidation-client.h"
22 
23 namespace sync_notifier {
24 
25 class ChromeSystemResources : public invalidation::SystemResources {
26  public:
27   explicit ChromeSystemResources(StateWriter* state_writer);
28 
29   ~ChromeSystemResources();
30 
31   // invalidation::SystemResources implementation.
32 
33   virtual invalidation::Time current_time();
34 
35   virtual void StartScheduler();
36 
37   virtual void StopScheduler();
38 
39   virtual void ScheduleWithDelay(invalidation::TimeDelta delay,
40                                  invalidation::Closure* task);
41 
42   virtual void ScheduleImmediately(invalidation::Closure* task);
43 
44   virtual void ScheduleOnListenerThread(invalidation::Closure* task);
45 
46   virtual bool IsRunningOnInternalThread();
47 
48   virtual void Log(LogLevel level, const char* file, int line,
49                    const char* format, ...);
50 
51   virtual void WriteState(const invalidation::string& state,
52                           invalidation::StorageCallback* callback);
53 
54  private:
55   base::NonThreadSafe non_thread_safe_;
56   scoped_ptr<ScopedRunnableMethodFactory<ChromeSystemResources> >
57       scoped_runnable_method_factory_;
58   // Holds all posted tasks that have not yet been run.
59   std::set<invalidation::Closure*> posted_tasks_;
60   StateWriter* state_writer_;
61 
62   // TODO(tim): Trying to debug bug crbug.com/64652.
63   const MessageLoop* created_on_loop_;
64 
65   // If the scheduler has been started, inserts |task| into
66   // |posted_tasks_| and returns a Task* to post.  Otherwise,
67   // immediately deletes |task| and returns NULL.
68   Task* MakeTaskToPost(invalidation::Closure* task);
69 
70   // Runs the task, deletes it, and removes it from |posted_tasks_|.
71   void RunPostedTask(invalidation::Closure* task);
72 
73   // Runs the given storage callback with "true" and deletes it.
74   void RunAndDeleteStorageCallback(
75       invalidation::StorageCallback* callback);
76 };
77 
78 }  // namespace sync_notifier
79 
80 #endif  // CHROME_BROWSER_SYNC_NOTIFIER_CHROME_SYSTEM_RESOURCES_H_
81