| Index: chrome/browser/sync/engine/syncer.cc
|
| ===================================================================
|
| --- chrome/browser/sync/engine/syncer.cc (revision 30303)
|
| +++ chrome/browser/sync/engine/syncer.cc (working copy)
|
| @@ -5,6 +5,8 @@
|
| #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"
|
| @@ -66,12 +68,21 @@
|
| syncer_event_channel_.reset(new SyncerEventChannel(shutdown));
|
| shutdown_channel_.reset(new ShutdownChannel(this));
|
|
|
| + extensions_monitor_ = new ExtensionsActivityMonitor();
|
| +
|
| ScopedDirLookup dir(dirman_, account_name_);
|
| // The directory must be good here.
|
| CHECK(dir.good());
|
| }
|
|
|
| -Syncer::~Syncer() {}
|
| +Syncer::~Syncer() {
|
| + if (!ChromeThread::DeleteSoon(ChromeThread::UI, FROM_HERE,
|
| + extensions_monitor_)) {
|
| + // In unittests, there may be no UI thread, so the above will fail.
|
| + delete extensions_monitor_;
|
| + }
|
| + extensions_monitor_ = NULL;
|
| +}
|
|
|
| void Syncer::RequestNudge(int milliseconds) {
|
| SyncerEvent event;
|
| @@ -92,6 +103,17 @@
|
| 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();
|
| }
|
| @@ -205,7 +227,8 @@
|
| }
|
| case PROCESS_COMMIT_RESPONSE: {
|
| LOG(INFO) << "Processing the commit response";
|
| - ProcessCommitResponseCommand process_response_command;
|
| + ProcessCommitResponseCommand process_response_command(
|
| + extensions_monitor_);
|
| process_response_command.Execute(session);
|
| next_step = BUILD_AND_PROCESS_CONFLICT_SETS;
|
| break;
|
|
|