| Index: chrome/browser/sync/js/js_sync_manager_observer.cc
|
| diff --git a/chrome/browser/sync/js/js_sync_manager_observer.cc b/chrome/browser/sync/js/js_sync_manager_observer.cc
|
| index 34eb060f738d246fd9f010e35aed1463810759d2..7f4a85ef4a5d7b0706ad05d9c56550ff0522c924 100644
|
| --- a/chrome/browser/sync/js/js_sync_manager_observer.cc
|
| +++ b/chrome/browser/sync/js/js_sync_manager_observer.cc
|
| @@ -8,6 +8,7 @@
|
|
|
| #include "base/location.h"
|
| #include "base/logging.h"
|
| +#include "base/string_number_conversions.h"
|
| #include "base/values.h"
|
| #include "chrome/browser/sync/internal_api/change_record.h"
|
| #include "chrome/browser/sync/js/js_arg_list.h"
|
| @@ -29,21 +30,41 @@ void JsSyncManagerObserver::SetJsEventHandler(
|
| event_handler_ = event_handler;
|
| }
|
|
|
| +namespace {
|
| +
|
| +// Max number of changes we attempt to convert to values (to avoid
|
| +// running out of memory).
|
| +const size_t kChangeLimit = 300;
|
| +
|
| +} // namespace
|
| +
|
| void JsSyncManagerObserver::OnChangesApplied(
|
| syncable::ModelType model_type,
|
| - const sync_api::BaseTransaction* trans,
|
| + int64 write_transaction_id,
|
| const sync_api::ImmutableChangeRecordList& changes) {
|
| if (!event_handler_.IsInitialized()) {
|
| return;
|
| }
|
| DictionaryValue details;
|
| details.SetString("modelType", syncable::ModelTypeToString(model_type));
|
| - ListValue* change_values = new ListValue();
|
| - details.Set("changes", change_values);
|
| - for (sync_api::ChangeRecordList::const_iterator it =
|
| - changes.Get().begin(); it != changes.Get().end(); ++it) {
|
| - change_values->Append(it->ToValue(trans));
|
| + details.SetString("writeTransactionId",
|
| + base::Int64ToString(write_transaction_id));
|
| + Value* changes_value = NULL;
|
| + const size_t changes_size = changes.Get().size();
|
| + if (changes_size <= kChangeLimit) {
|
| + ListValue* changes_list = new ListValue();
|
| + for (sync_api::ChangeRecordList::const_iterator it =
|
| + changes.Get().begin(); it != changes.Get().end(); ++it) {
|
| + changes_list->Append(it->ToValue());
|
| + }
|
| + changes_value = changes_list;
|
| + } else {
|
| + changes_value =
|
| + Value::CreateStringValue(
|
| + base::Uint64ToString(static_cast<uint64>(changes_size)) +
|
| + " changes");
|
| }
|
| + details.Set("changes", changes_value);
|
| HandleJsEvent(FROM_HERE, "onChangesApplied", JsEventDetails(&details));
|
| }
|
|
|
|
|