| Index: chrome/browser/sync/util/extensions_activity_monitor.h | 
| =================================================================== | 
| --- chrome/browser/sync/util/extensions_activity_monitor.h	(revision 0) | 
| +++ chrome/browser/sync/util/extensions_activity_monitor.h	(revision 0) | 
| @@ -0,0 +1,74 @@ | 
| +// Copyright (c) 2009 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +#ifndef CHROME_BROWSER_SYNC_UTIL_EXTENSIONS_ACTIVITY_MONITOR_H_ | 
| +#define CHROME_BROWSER_SYNC_UTIL_EXTENSIONS_ACTIVITY_MONITOR_H_ | 
| + | 
| +#include "base/lock.h" | 
| +#include "base/message_loop.h" | 
| +#include "base/ref_counted.h" | 
| +#include "chrome/common/notification_observer.h" | 
| +#include "chrome/common/notification_registrar.h" | 
| + | 
| +namespace browser_sync { | 
| + | 
| +// A class to monitor usage of extensions APIs to send to sync servers, with | 
| +// the ability to purge data once sync servers have acknowledged it (successful | 
| +// commit response). | 
| +// | 
| +// This can be used from any thread (it is a 'monitor' in the synchronization | 
| +// sense as well), HOWEVER | 
| +// | 
| +// *** IT MUST BE DELETED FROM THE UI LOOP *** | 
| +// | 
| +// Consider using MessageLoop::DeleteSoon. (Yes, this means if you allocate | 
| +// an ExtensionsActivityMonitor on a thread other than UI, you must 'new' it). | 
| +class ExtensionsActivityMonitor : public NotificationObserver { | 
| + public: | 
| +  // A data record of activity performed by extension |extension_id|. | 
| +  struct Record { | 
| +    Record() : bookmark_write_count(0U) {} | 
| + | 
| +    // The human-readable ID identifying the extension responsible | 
| +    // for the activity reported in this Record. | 
| +    std::string extension_id; | 
| + | 
| +    // How many times the extension successfully invoked a write | 
| +    // operation through the bookmarks API since the last CommitMessage. | 
| +    uint32 bookmark_write_count; | 
| +  }; | 
| + | 
| +  typedef std::map<std::string, Record> Records; | 
| + | 
| +  // Creates an ExtensionsActivityMonitor to monitor extensions activities on | 
| +  // |ui_loop|. | 
| +  explicit ExtensionsActivityMonitor(MessageLoop* ui_loop); | 
| +  ~ExtensionsActivityMonitor(); | 
| + | 
| +  // Fills |buffer| with snapshot of current records in constant time by | 
| +  // swapping.  This is done mutually exclusively w.r.t methods of this class. | 
| +  void GetAndClearRecords(Records* buffer); | 
| + | 
| +  // Add |records| piece-wise (by extension id) to the set of active records. | 
| +  // This is done mutually exclusively w.r.t the methods of this class. | 
| +  void PutRecords(const Records& records); | 
| + | 
| +  // NotificationObserver implementation.  Called on |ui_loop_|. | 
| +  virtual void Observe(NotificationType type, | 
| +                       const NotificationSource& source, | 
| +                       const NotificationDetails& details); | 
| + private: | 
| +  Records records_; | 
| +  mutable Lock records_lock_; | 
| + | 
| +  // Kept for convenience. | 
| +  MessageLoop* const ui_loop_; | 
| + | 
| +  // Used only from UI loop. | 
| +  NotificationRegistrar registrar_; | 
| +}; | 
| + | 
| +}  // namespace browser_sync | 
| + | 
| +#endif  // CHROME_BROWSER_SYNC_UTIL_EXTENSIONS_ACTIVITY_MONITOR_H_ | 
|  | 
| Property changes on: chrome\browser\sync\util\extensions_activity_monitor.h | 
| ___________________________________________________________________ | 
| Added: svn:eol-style | 
| + LF | 
|  | 
|  |