summaryrefslogtreecommitdiffstats
path: root/chrome/browser/sync/util/extensions_activity_monitor.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/sync/util/extensions_activity_monitor.h')
-rw-r--r--chrome/browser/sync/util/extensions_activity_monitor.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/chrome/browser/sync/util/extensions_activity_monitor.h b/chrome/browser/sync/util/extensions_activity_monitor.h
new file mode 100644
index 0000000..9f5a1a3
--- /dev/null
+++ b/chrome/browser/sync/util/extensions_activity_monitor.h
@@ -0,0 +1,71 @@
+// 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
+ // ChromeThread::UI.
+ ExtensionsActivityMonitor();
+ ~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_;
+
+ // Used only from UI loop.
+ NotificationRegistrar registrar_;
+};
+
+} // namespace browser_sync
+
+#endif // CHROME_BROWSER_SYNC_UTIL_EXTENSIONS_ACTIVITY_MONITOR_H_