diff options
-rw-r--r-- | chrome/browser/extensions/extension_bookmarks_module.cc | 9 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_bookmarks_module.h | 2 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_function.h | 2 | ||||
-rw-r--r-- | chrome/browser/sync/engine/build_commit_command.cc | 15 | ||||
-rw-r--r-- | chrome/browser/sync/engine/build_commit_command.h | 2 | ||||
-rw-r--r-- | chrome/browser/sync/engine/process_commit_response_command.cc | 10 | ||||
-rw-r--r-- | chrome/browser/sync/engine/process_commit_response_command.h | 9 | ||||
-rw-r--r-- | chrome/browser/sync/engine/syncer.cc | 30 | ||||
-rw-r--r-- | chrome/browser/sync/engine/syncer.h | 5 | ||||
-rw-r--r-- | chrome/browser/sync/engine/syncer_session.h | 12 | ||||
-rw-r--r-- | chrome/browser/sync/protocol/sync.proto | 21 | ||||
-rw-r--r-- | chrome/browser/sync/util/extensions_activity_monitor.cc | 93 | ||||
-rw-r--r-- | chrome/browser/sync/util/extensions_activity_monitor.h | 74 | ||||
-rw-r--r-- | chrome/browser/sync/util/extensions_activity_monitor_unittest.cc | 234 | ||||
-rwxr-xr-x | chrome/chrome.gyp | 11 | ||||
-rw-r--r-- | chrome/common/notification_type.h | 10 |
16 files changed, 18 insertions, 521 deletions
diff --git a/chrome/browser/extensions/extension_bookmarks_module.cc b/chrome/browser/extensions/extension_bookmarks_module.cc index ee5257c..73cb032 100644 --- a/chrome/browser/extensions/extension_bookmarks_module.cc +++ b/chrome/browser/extensions/extension_bookmarks_module.cc @@ -114,14 +114,7 @@ void BookmarksFunction::Run() { ExtensionBookmarkEventRouter* event_router = ExtensionBookmarkEventRouter::GetSingleton(); event_router->Observe(model); - bool success = RunImpl(); - if (success) { - NotificationService::current()->Notify( - NotificationType::EXTENSION_BOOKMARKS_API_INVOKED, - Source<const Extension>(GetExtension()), - Details<const BookmarksFunction>(this)); - } - SendResponse(success); + SendResponse(RunImpl()); } bool BookmarksFunction::GetBookmarkIdAsInt64( diff --git a/chrome/browser/extensions/extension_bookmarks_module.h b/chrome/browser/extensions/extension_bookmarks_module.h index acaf91d..6d86bc8 100644 --- a/chrome/browser/extensions/extension_bookmarks_module.h +++ b/chrome/browser/extensions/extension_bookmarks_module.h @@ -69,7 +69,7 @@ class BookmarksFunction : public AsyncExtensionFunction, protected: // Helper to get the bookmark id as int64 from the given string id. - // Sets error_ to an error string if the given id string can't be parsed + // Sets error_ to an errro string if the given id string can't be parsed // as an int64. In case of error, doesn't change id and returns false. bool GetBookmarkIdAsInt64(const std::string& id_string, int64* id); diff --git a/chrome/browser/extensions/extension_function.h b/chrome/browser/extensions/extension_function.h index e8a77dd..6090f8a 100644 --- a/chrome/browser/extensions/extension_function.h +++ b/chrome/browser/extensions/extension_function.h @@ -37,7 +37,7 @@ class ExtensionFunction : public base::RefCounted<ExtensionFunction> { // Specifies the name of the function. void set_name(const std::string& name) { name_ = name; } - const std::string name() const { return name_; } + const std::string name() { return name_; } // Specifies the raw arguments to the function, as a JSON value. virtual void SetArgs(const Value* args) = 0; diff --git a/chrome/browser/sync/engine/build_commit_command.cc b/chrome/browser/sync/engine/build_commit_command.cc index 5058bba..46200c6 100644 --- a/chrome/browser/sync/engine/build_commit_command.cc +++ b/chrome/browser/sync/engine/build_commit_command.cc @@ -30,20 +30,6 @@ namespace browser_sync { BuildCommitCommand::BuildCommitCommand() {} BuildCommitCommand::~BuildCommitCommand() {} -void BuildCommitCommand::AddExtensionsActivityToMessage( - SyncerSession* session, CommitMessage* message) { - const ExtensionsActivityMonitor::Records& records = - session->extensions_activity(); - for (ExtensionsActivityMonitor::Records::const_iterator it = records.begin(); - it != records.end(); ++it) { - sync_pb::CommitMessage_ChromiumExtensionsActivity* activity_message = - message->add_extensions_activity(); - activity_message->set_extension_id(it->second.extension_id); - activity_message->set_bookmark_writes_since_last_commit( - it->second.bookmark_write_count); - } -} - void BuildCommitCommand::ExecuteImpl(SyncerSession* session) { ClientToServerMessage message; message.set_share(ToUTF8(session->account_name()).get_string()); @@ -52,7 +38,6 @@ void BuildCommitCommand::ExecuteImpl(SyncerSession* session) { CommitMessage* commit_message = message.mutable_commit(); commit_message->set_cache_guid( session->write_transaction()->directory()->cache_guid()); - AddExtensionsActivityToMessage(session, commit_message); const vector<Id>& commit_ids = session->commit_ids(); for (size_t i = 0; i < commit_ids.size(); i++) { diff --git a/chrome/browser/sync/engine/build_commit_command.h b/chrome/browser/sync/engine/build_commit_command.h index 1c29590..445024f 100644 --- a/chrome/browser/sync/engine/build_commit_command.h +++ b/chrome/browser/sync/engine/build_commit_command.h @@ -19,8 +19,6 @@ class BuildCommitCommand : public SyncerCommand { virtual void ExecuteImpl(SyncerSession *session); private: - void AddExtensionsActivityToMessage(SyncerSession* session, - CommitMessage* message); DISALLOW_COPY_AND_ASSIGN(BuildCommitCommand); }; diff --git a/chrome/browser/sync/engine/process_commit_response_command.cc b/chrome/browser/sync/engine/process_commit_response_command.cc index 72fd0e6..3deec6d 100644 --- a/chrome/browser/sync/engine/process_commit_response_command.cc +++ b/chrome/browser/sync/engine/process_commit_response_command.cc @@ -52,19 +52,11 @@ void ResetErrorCounters(SyncerStatus status) { status.zero_consecutive_errors(); } -ProcessCommitResponseCommand::ProcessCommitResponseCommand( - ExtensionsActivityMonitor* monitor) : extensions_monitor_(monitor) {} +ProcessCommitResponseCommand::ProcessCommitResponseCommand() {} ProcessCommitResponseCommand::~ProcessCommitResponseCommand() {} void ProcessCommitResponseCommand::ModelChangingExecuteImpl( SyncerSession* session) { - ProcessCommitResponse(session); - if (!session->HadSuccessfulCommits()) - extensions_monitor_->PutRecords(session->extensions_activity()); -} - -void ProcessCommitResponseCommand::ProcessCommitResponse( - SyncerSession* session) { // TODO(sync): This function returns if it sees problems. We probably want // to flag the need for an update or similar. ScopedDirLookup dir(session->dirman(), session->account_name()); diff --git a/chrome/browser/sync/engine/process_commit_response_command.h b/chrome/browser/sync/engine/process_commit_response_command.h index 9950ba4..4e7c94b 100644 --- a/chrome/browser/sync/engine/process_commit_response_command.h +++ b/chrome/browser/sync/engine/process_commit_response_command.h @@ -23,7 +23,7 @@ namespace browser_sync { class ProcessCommitResponseCommand : public ModelChangingSyncerCommand { public: - explicit ProcessCommitResponseCommand(ExtensionsActivityMonitor* monitor); + ProcessCommitResponseCommand(); virtual ~ProcessCommitResponseCommand(); virtual void ModelChangingExecuteImpl(SyncerSession* session); @@ -36,9 +36,6 @@ class ProcessCommitResponseCommand : public ModelChangingSyncerCommand { std::set<syncable::Id>* deleted_folders, SyncerSession* const session); - // Actually does the work of execute. - void ProcessCommitResponse(SyncerSession* session); - void ProcessSuccessfulCommitResponse(syncable::WriteTransaction* trans, const CommitResponse_EntryResponse& server_entry, const syncable::Id& pre_commit_id, syncable::MutableEntry* local_entry, @@ -50,10 +47,6 @@ class ProcessCommitResponseCommand : public ModelChangingSyncerCommand { const CommitResponse_EntryResponse& server_entry, syncable::MutableEntry* local_entry); - // We may need to update this with records from a commit attempt if the - // attempt failed. - ExtensionsActivityMonitor* extensions_monitor_; - DISALLOW_COPY_AND_ASSIGN(ProcessCommitResponseCommand); }; diff --git a/chrome/browser/sync/engine/syncer.cc b/chrome/browser/sync/engine/syncer.cc index cc73232..de8b1b2 100644 --- a/chrome/browser/sync/engine/syncer.cc +++ b/chrome/browser/sync/engine/syncer.cc @@ -5,8 +5,6 @@ #include "chrome/browser/sync/engine/syncer.h" #include "base/format_macros.h" -#include "base/message_loop.h" -#include "chrome/browser/chrome_thread.h" #include "chrome/browser/sync/engine/apply_updates_command.h" #include "chrome/browser/sync/engine/build_and_process_conflict_sets_command.h" #include "chrome/browser/sync/engine/build_commit_command.h" @@ -68,24 +66,12 @@ Syncer::Syncer( syncer_event_channel_.reset(new SyncerEventChannel(shutdown)); shutdown_channel_.reset(new ShutdownChannel(this)); - extensions_monitor_ = new ExtensionsActivityMonitor( - ChromeThread::GetMessageLoop(ChromeThread::UI)); - ScopedDirLookup dir(dirman_, account_name_); // The directory must be good here. CHECK(dir.good()); } -Syncer::~Syncer() { - MessageLoop* ui_loop = ChromeThread::GetMessageLoop(ChromeThread::UI); - if (ui_loop) { - ui_loop->DeleteSoon(FROM_HERE, extensions_monitor_); - } else { - NOTREACHED(); - delete extensions_monitor_; - } - extensions_monitor_ = NULL; -} +Syncer::~Syncer() {} void Syncer::RequestNudge(int milliseconds) { SyncerEvent event; @@ -106,17 +92,6 @@ bool Syncer::SyncShare(SyncProcessState* process_state) { SyncerSession session(&cycle_state, process_state); session.set_source(TestAndSetUpdatesSource()); session.set_notifications_enabled(notifications_enabled()); - // This isn't perfect, as we can end up bundling extensions activity - // intended for the next session into the current one. We could do a - // test-and-reset as with the source, but note that also falls short if - // the commit request fails (due to lost connection, for example), as we will - // fall all the way back to the syncer thread main loop in that case, and - // wind up creating a new session when a connection is established, losing - // the records set here on the original attempt. This should provide us - // with the right data "most of the time", and we're only using this for - // analysis purposes, so Law of Large Numbers FTW. - extensions_monitor_->GetAndClearRecords( - session.mutable_extensions_activity()); SyncShare(&session, SYNCER_BEGIN, SYNCER_END); return session.HasMoreToSync(); } @@ -230,8 +205,7 @@ void Syncer::SyncShare(SyncerSession* session, } case PROCESS_COMMIT_RESPONSE: { LOG(INFO) << "Processing the commit response"; - ProcessCommitResponseCommand process_response_command( - extensions_monitor_); + ProcessCommitResponseCommand process_response_command; process_response_command.Execute(session); next_step = BUILD_AND_PROCESS_CONFLICT_SETS; break; diff --git a/chrome/browser/sync/engine/syncer.h b/chrome/browser/sync/engine/syncer.h index 067193b..2d6ba6a 100644 --- a/chrome/browser/sync/engine/syncer.h +++ b/chrome/browser/sync/engine/syncer.h @@ -19,7 +19,6 @@ #include "chrome/browser/sync/syncable/directory_event.h" #include "chrome/browser/sync/util/event_sys-inl.h" #include "chrome/browser/sync/util/event_sys.h" -#include "chrome/browser/sync/util/extensions_activity_monitor.h" #include "testing/gtest/include/gtest/gtest_prod.h" // For FRIEND_TEST namespace syncable { @@ -181,10 +180,6 @@ class Syncer { // by the SyncerThread that created us. ModelSafeWorker* model_safe_worker_; - // We use this to stuff extensions activity into CommitMessages so the server - // can correlate commit traffic with extension-related bookmark mutations. - ExtensionsActivityMonitor* extensions_monitor_; - // The source of the last nudge. sync_pb::GetUpdatesCallerInfo::GET_UPDATES_SOURCE updates_source_; diff --git a/chrome/browser/sync/engine/syncer_session.h b/chrome/browser/sync/engine/syncer_session.h index 5e4710b..83643d7 100644 --- a/chrome/browser/sync/engine/syncer_session.h +++ b/chrome/browser/sync/engine/syncer_session.h @@ -22,7 +22,6 @@ #include "chrome/browser/sync/engine/syncer_types.h" #include "chrome/browser/sync/engine/syncproto.h" #include "chrome/browser/sync/util/event_sys.h" -#include "chrome/browser/sync/util/extensions_activity_monitor.h" #include "chrome/browser/sync/util/sync_types.h" #include "testing/gtest/include/gtest/gtest_prod.h" // For FRIEND_TEST @@ -308,14 +307,6 @@ class SyncerSession { source_ = source; } - const ExtensionsActivityMonitor::Records& extensions_activity() const { - return extensions_activity_; - } - - ExtensionsActivityMonitor::Records* mutable_extensions_activity() { - return &extensions_activity_; - } - bool notifications_enabled() const { return notifications_enabled_; } @@ -364,9 +355,6 @@ class SyncerSession { // The source for initiating this syncer session. sync_pb::GetUpdatesCallerInfo::GET_UPDATES_SOURCE source_; - // Information about extensions activity since the last successful commit. - ExtensionsActivityMonitor::Records extensions_activity_; - // True if notifications are enabled when this session was created. bool notifications_enabled_; diff --git a/chrome/browser/sync/protocol/sync.proto b/chrome/browser/sync/protocol/sync.proto index ad7f61f..c9b50cc 100644 --- a/chrome/browser/sync/protocol/sync.proto +++ b/chrome/browser/sync/protocol/sync.proto @@ -172,22 +172,6 @@ message CommitMessage { // A GUID that identifies the committing sync client. This value will be // returned as originator_cache_guid for any new items. optional string cache_guid = 2; - - // This message contains diagnostic information used to correlate - // commit-related traffic with extensions-related mutations to the - // data models in chromium. It plays no functional role in - // processing this CommitMessage. - message ChromiumExtensionsActivity { - // The human-readable ID identifying the extension responsible - // for the traffic reported in this ChromiumExtensionsActivity. - optional string extension_id = 1; - - // How many times the extension successfully invoked a write - // operation through the bookmarks API since the last CommitMessage. - optional uint32 bookmark_writes_since_last_commit = 2; - } - - repeated ChromiumExtensionsActivity extensions_activity = 3; }; message GetUpdatesCallerInfo { @@ -219,7 +203,7 @@ message AuthenticateMessage { message ClientToServerMessage { required string share = 1; - optional int32 protocol_version = 2 [default = 22]; + optional int32 protocol_version = 2 [default = 21]; enum CONTENTS { COMMIT = 1; GET_UPDATES = 2; @@ -259,7 +243,8 @@ message CommitResponse { optional string parent_id_string = 4; // This value is the same as the position_in_parent value returned within - // the SyncEntity message in GetUpdatesResponse. + // the SyncEntity message in GetUpdatesResponse. It is returned if the + // item was assigned a new position. optional int64 position_in_parent = 5; // The item's current version. diff --git a/chrome/browser/sync/util/extensions_activity_monitor.cc b/chrome/browser/sync/util/extensions_activity_monitor.cc deleted file mode 100644 index e65dfb7..0000000 --- a/chrome/browser/sync/util/extensions_activity_monitor.cc +++ /dev/null @@ -1,93 +0,0 @@ -// 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. - -#include "chrome/browser/sync/util/extensions_activity_monitor.h" - -#include "base/task.h" -#include "chrome/browser/chrome_thread.h" -#include "chrome/browser/extensions/extension_bookmarks_module.h" -#include "chrome/common/extensions/extension.h" -#include "chrome/common/notification_service.h" - -namespace browser_sync { - -namespace { -// A helper task to register an ExtensionsActivityMonitor as an observer of -// events on the UI thread (even though the monitor may live on another thread). -// This liberates ExtensionsActivityMonitor from having to be ref counted. -class RegistrationTask : public Task { - public: - RegistrationTask(ExtensionsActivityMonitor* monitor, - MessageLoop* ui_loop, - NotificationRegistrar* registrar) - : monitor_(monitor), ui_loop_(ui_loop), registrar_(registrar) {} - virtual ~RegistrationTask() {} - - virtual void Run() { - DCHECK_EQ(MessageLoop::current(), - ChromeThread::GetMessageLoop(ChromeThread::UI)); - - // It would be nice if we could specify a Source for each specific function - // we wanted to observe, but the actual function objects are allocated on - // the fly so there is no reliable object to point to (same problem if we - // wanted to use the string name). Thus, we use all sources and filter in - // Observe. - registrar_->Add(monitor_, NotificationType::EXTENSION_BOOKMARKS_API_INVOKED, - NotificationService::AllSources()); - } - - private: - ExtensionsActivityMonitor* monitor_; - MessageLoop* const ui_loop_; - NotificationRegistrar* registrar_; - DISALLOW_COPY_AND_ASSIGN(RegistrationTask); -}; -} // namespace - -ExtensionsActivityMonitor::ExtensionsActivityMonitor(MessageLoop* ui_loop) - : ui_loop_(ui_loop) { - ui_loop_->PostTask(FROM_HERE, new RegistrationTask(this, ui_loop, - ®istrar_)); -} - -ExtensionsActivityMonitor::~ExtensionsActivityMonitor() { - DCHECK_EQ(MessageLoop::current(), ui_loop_); - // The registrar calls RemoveAll in its dtor (which would happen in a moment) - // but explicitly call this so it is clear why we need to be on the ui_loop_. - registrar_.RemoveAll(); -} - -void ExtensionsActivityMonitor::GetAndClearRecords(Records* buffer) { - AutoLock lock(records_lock_); - buffer->clear(); - buffer->swap(records_); -} - -void ExtensionsActivityMonitor::PutRecords(const Records& records) { - AutoLock lock(records_lock_); - for (Records::const_iterator i = records.begin(); i != records.end(); ++i) { - records_[i->first].extension_id = i->second.extension_id; - records_[i->first].bookmark_write_count += i->second.bookmark_write_count; - } -} - -void ExtensionsActivityMonitor::Observe(NotificationType type, - const NotificationSource& source, - const NotificationDetails& details) { - AutoLock lock(records_lock_); - DCHECK_EQ(MessageLoop::current(), ui_loop_); - const Extension* extension = Source<const Extension>(source).ptr(); - const BookmarksFunction* f = Details<const BookmarksFunction>(details).ptr(); - if (f->name() == "bookmarks.update" || - f->name() == "bookmarks.move" || - f->name() == "bookmarks.create" || - f->name() == "bookmarks.removeTree" || - f->name() == "bookmarks.remove") { - Record& record = records_[extension->id()]; - record.extension_id = extension->id(); - record.bookmark_write_count++; - } -} - -} // namespace browser_sync diff --git a/chrome/browser/sync/util/extensions_activity_monitor.h b/chrome/browser/sync/util/extensions_activity_monitor.h deleted file mode 100644 index 5e4e4ae..0000000 --- a/chrome/browser/sync/util/extensions_activity_monitor.h +++ /dev/null @@ -1,74 +0,0 @@ -// 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_
\ No newline at end of file diff --git a/chrome/browser/sync/util/extensions_activity_monitor_unittest.cc b/chrome/browser/sync/util/extensions_activity_monitor_unittest.cc deleted file mode 100644 index ae917df..0000000 --- a/chrome/browser/sync/util/extensions_activity_monitor_unittest.cc +++ /dev/null @@ -1,234 +0,0 @@ -// 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 entry. - -#include "chrome/browser/sync/util/extensions_activity_monitor.h" - -#include "base/file_path.h" -#include "base/string_util.h" -#include "base/waitable_event.h" -#include "chrome/browser/chrome_thread.h" -#include "chrome/browser/extensions/extension_bookmarks_module.h" -#include "chrome/common/extensions/extension.h" -#include "chrome/common/extensions/extension_constants.h" -#include "chrome/common/notification_service.h" -#include "testing/gtest/include/gtest/gtest.h" - -using browser_sync::ExtensionsActivityMonitor; -namespace keys = extension_manifest_keys; - -namespace { - -static const char* kTestExtensionPath1 = "c:\\testextension1"; -static const char* kTestExtensionPath2 = "c:\\testextension2"; -static const char* kTestExtensionVersion = "1.0.0.0"; -static const char* kTestExtensionName = "foo extension"; - -template <class FunctionType> -class BookmarkAPIEventTask : public Task { - public: - BookmarkAPIEventTask(FunctionType* t, Extension* e, size_t repeats, - base::WaitableEvent* done) : - function_(t), extension_(e), repeats_(repeats), done_(done) {} - virtual void Run() { - for (size_t i = 0; i < repeats_; i++) { - NotificationService::current()->Notify( - NotificationType::EXTENSION_BOOKMARKS_API_INVOKED, - Source<Extension>(extension_.get()), - Details<const BookmarksFunction>(function_.get())); - } - done_->Signal(); - } - private: - scoped_ptr<Extension> extension_; - scoped_refptr<FunctionType> function_; - size_t repeats_; - base::WaitableEvent* done_; - - DISALLOW_COPY_AND_ASSIGN(BookmarkAPIEventTask); -}; - -class BookmarkAPIEventGenerator { - public: - BookmarkAPIEventGenerator(MessageLoop* ui_loop) : ui_loop_(ui_loop) {} - virtual ~BookmarkAPIEventGenerator() {} - template <class T> - void NewEvent(const std::string& extension_path, - T* bookmarks_function, size_t repeats) { - FilePath path(UTF8ToWide(extension_path)); - Extension* extension = new Extension(path); - std::string error; - DictionaryValue input; - input.SetString(keys::kVersion, kTestExtensionVersion); - input.SetString(keys::kName, kTestExtensionName); - extension->InitFromValue(input, false, &error); - bookmarks_function->set_name(T::function_name()); - base::WaitableEvent done_event(false, false); - ui_loop_->PostTask(FROM_HERE, new BookmarkAPIEventTask<T>( - bookmarks_function, extension, repeats, &done_event)); - done_event.Wait(); - } - - private: - MessageLoop* ui_loop_; - DISALLOW_COPY_AND_ASSIGN(BookmarkAPIEventGenerator); -}; -} // namespace - -class DoUIThreadSetupTask : public Task { - public: - DoUIThreadSetupTask(NotificationService** service, - base::WaitableEvent* done) - : service_(service), signal_when_done_(done) {} - virtual ~DoUIThreadSetupTask() {} - virtual void Run() { - *service_ = new NotificationService(); - signal_when_done_->Signal(); - } - private: - NotificationService** service_; - base::WaitableEvent* signal_when_done_; - DISALLOW_COPY_AND_ASSIGN(DoUIThreadSetupTask); -}; - -class ExtensionsActivityMonitorTest : public testing::Test { - public: - ExtensionsActivityMonitorTest() : service_(NULL), - ui_thread_(ChromeThread::UI) { } - virtual ~ExtensionsActivityMonitorTest() {} - - virtual void SetUp() { - ui_thread_.Start(); - base::WaitableEvent service_created(false, false); - ui_thread_.message_loop()->PostTask(FROM_HERE, - new DoUIThreadSetupTask(&service_, &service_created)); - service_created.Wait(); - } - - virtual void TearDown() { - ui_thread_.message_loop()->DeleteSoon(FROM_HERE, service_); - ui_thread_.Stop(); - } - - MessageLoop* ui_loop() { return ui_thread_.message_loop(); } - - static std::string GetExtensionIdForPath(const std::string& extension_path) { - std::string error; - FilePath path(UTF8ToWide(extension_path)); - Extension e(path); - DictionaryValue input; - input.SetString(keys::kVersion, kTestExtensionVersion); - input.SetString(keys::kName, kTestExtensionName); - e.InitFromValue(input, false, &error); - EXPECT_EQ("", error); - return e.id(); - } - private: - NotificationService* service_; - ChromeThread ui_thread_; -}; - -TEST_F(ExtensionsActivityMonitorTest, Basic) { - ExtensionsActivityMonitor* monitor = new ExtensionsActivityMonitor(ui_loop()); - BookmarkAPIEventGenerator generator(ui_loop()); - - generator.NewEvent<RemoveBookmarkFunction>(kTestExtensionPath1, - new RemoveBookmarkFunction(), 1); - generator.NewEvent<MoveBookmarkFunction>(kTestExtensionPath1, - new MoveBookmarkFunction(), 1); - generator.NewEvent<UpdateBookmarkFunction>(kTestExtensionPath1, - new UpdateBookmarkFunction(), 2); - generator.NewEvent<CreateBookmarkFunction>(kTestExtensionPath1, - new CreateBookmarkFunction(), 3); - generator.NewEvent<SearchBookmarksFunction>(kTestExtensionPath1, - new SearchBookmarksFunction(), 5); - const int writes_by_extension1 = 1 + 1 + 2 + 3; - - generator.NewEvent<RemoveTreeBookmarkFunction>(kTestExtensionPath2, - new RemoveTreeBookmarkFunction(), 8); - generator.NewEvent<GetBookmarkTreeFunction>(kTestExtensionPath2, - new GetBookmarkTreeFunction(), 13); - generator.NewEvent<GetBookmarkChildrenFunction>(kTestExtensionPath2, - new GetBookmarkChildrenFunction(), 21); - generator.NewEvent<GetBookmarksFunction>(kTestExtensionPath2, - new GetBookmarksFunction(), 33); - const int writes_by_extension2 = 8; - - ExtensionsActivityMonitor::Records results; - monitor->GetAndClearRecords(&results); - - std::string id1 = GetExtensionIdForPath(kTestExtensionPath1); - std::string id2 = GetExtensionIdForPath(kTestExtensionPath2); - - EXPECT_EQ(2, results.size()); - EXPECT_TRUE(results.end() != results.find(id1)); - EXPECT_TRUE(results.end() != results.find(id2)); - EXPECT_EQ(writes_by_extension1, results[id1].bookmark_write_count); - EXPECT_EQ(writes_by_extension2, results[id2].bookmark_write_count); - - ui_loop()->DeleteSoon(FROM_HERE, monitor); -} - -TEST_F(ExtensionsActivityMonitorTest, Put) { - ExtensionsActivityMonitor* monitor = new ExtensionsActivityMonitor(ui_loop()); - BookmarkAPIEventGenerator generator(ui_loop()); - std::string id1 = GetExtensionIdForPath(kTestExtensionPath1); - std::string id2 = GetExtensionIdForPath(kTestExtensionPath2); - - generator.NewEvent<CreateBookmarkFunction>(kTestExtensionPath1, - new CreateBookmarkFunction(), 5); - generator.NewEvent<MoveBookmarkFunction>(kTestExtensionPath2, - new MoveBookmarkFunction(), 8); - - ExtensionsActivityMonitor::Records results; - monitor->GetAndClearRecords(&results); - - EXPECT_EQ(2, results.size()); - EXPECT_EQ(5, results[id1].bookmark_write_count); - EXPECT_EQ(8, results[id2].bookmark_write_count); - - generator.NewEvent<GetBookmarksFunction>(kTestExtensionPath2, - new GetBookmarksFunction(), 3); - generator.NewEvent<UpdateBookmarkFunction>(kTestExtensionPath2, - new UpdateBookmarkFunction(), 2); - - // Simulate a commit failure, which augments the active record set with the - // refugee records. - monitor->PutRecords(results); - ExtensionsActivityMonitor::Records new_records; - monitor->GetAndClearRecords(&new_records); - - EXPECT_EQ(2, results.size()); - EXPECT_EQ(id1, new_records[id1].extension_id); - EXPECT_EQ(id2, new_records[id2].extension_id); - EXPECT_EQ(5, new_records[id1].bookmark_write_count); - EXPECT_EQ(8 + 2, new_records[id2].bookmark_write_count); - ui_loop()->DeleteSoon(FROM_HERE, monitor); -} - -TEST_F(ExtensionsActivityMonitorTest, MultiGet) { - ExtensionsActivityMonitor* monitor = new ExtensionsActivityMonitor(ui_loop()); - BookmarkAPIEventGenerator generator(ui_loop()); - std::string id1 = GetExtensionIdForPath(kTestExtensionPath1); - - generator.NewEvent<CreateBookmarkFunction>(kTestExtensionPath1, - new CreateBookmarkFunction(), 5); - - ExtensionsActivityMonitor::Records results; - monitor->GetAndClearRecords(&results); - - EXPECT_EQ(1, results.size()); - EXPECT_EQ(5, results[id1].bookmark_write_count); - - monitor->GetAndClearRecords(&results); - EXPECT_TRUE(results.empty()); - - generator.NewEvent<CreateBookmarkFunction>(kTestExtensionPath1, - new CreateBookmarkFunction(), 3); - monitor->GetAndClearRecords(&results); - - EXPECT_EQ(1, results.size()); - EXPECT_EQ(3, results[id1].bookmark_write_count); - - ui_loop()->DeleteSoon(FROM_HERE, monitor); -}
\ No newline at end of file diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp index 8cbe8fa..71486f6 100755 --- a/chrome/chrome.gyp +++ b/chrome/chrome.gyp @@ -6737,7 +6737,6 @@ 'browser/sync/util/character_set_converters_unittest.cc', 'browser/sync/util/crypto_helpers_unittest.cc', 'browser/sync/util/event_sys_unittest.cc', - 'browser/sync/util/extensions_activity_monitor_unittest.cc', 'browser/sync/util/highres_timer_unittest.cc', 'browser/sync/util/path_helpers_unittest.cc', 'browser/sync/util/query_helpers_unittest.cc', @@ -6761,12 +6760,11 @@ '_USE_32BIT_TIME_T', ], 'dependencies': [ - 'common', - 'debugger', - '../skia/skia.gyp:skia', '../testing/gtest.gyp:gtest', '../third_party/libjingle/libjingle.gyp:libjingle', - 'syncapi', + 'notifier', + 'sync', + 'sync_proto', 'test_support_unit', ], 'conditions': [ @@ -6904,8 +6902,6 @@ 'browser/sync/util/dbgq.h', 'browser/sync/util/event_sys-inl.h', 'browser/sync/util/event_sys.h', - 'browser/sync/util/extensions_activity_monitor.cc', - 'browser/sync/util/extensions_activity_monitor.h', 'browser/sync/util/fast_dump.h', 'browser/sync/util/highres_timer.h', 'browser/sync/util/highres_timer_linux.cc', @@ -6938,7 +6934,6 @@ '_USE_32BIT_TIME_T', ], 'dependencies': [ - '../skia/skia.gyp:skia', '../third_party/libjingle/libjingle.gyp:libjingle', 'sync_proto', ], diff --git a/chrome/common/notification_type.h b/chrome/common/notification_type.h index 739a007..fddbeb6 100644 --- a/chrome/common/notification_type.h +++ b/chrome/common/notification_type.h @@ -612,6 +612,11 @@ class NotificationType { // are all source and no details. SESSION_END, + // Personalization --------------------------------------------------------- + + PERSONALIZATION, + PERSONALIZATION_CREATED, + // Privacy blacklists ------------------------------------------------------ // Sent when a privacy blacklist path provider changes the list of its @@ -709,11 +714,6 @@ class NotificationType { EXTENSION_TEST_PASSED, EXTENSION_TEST_FAILED, - // Sent when an bookmarks extensions API function was successfully invoked. - // The source is the id of the extension that invoked the function, and the - // details are a pointer to the const BookmarksFunction in question. - EXTENSION_BOOKMARKS_API_INVOKED, - // Privacy Blacklist ------------------------------------------------------- // Sent by the resource dispatcher host when a resource is blocked. |