Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(118)

Side by Side Diff: components/invalidation/invalidation_service_android.cc

Issue 1144543009: [Android] Only invalidate objects that were received from Tango on resume. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: +toString Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/invalidation/invalidation_service_android.h" 5 #include "components/invalidation/invalidation_service_android.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/android/jni_array.h" 8 #include "base/android/jni_array.h"
9 #include "base/android/jni_string.h" 9 #include "base/android/jni_string.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 return NULL; 112 return NULL;
113 } 113 }
114 114
115 void InvalidationServiceAndroid::TriggerStateChangeForTest( 115 void InvalidationServiceAndroid::TriggerStateChangeForTest(
116 syncer::InvalidatorState state) { 116 syncer::InvalidatorState state) {
117 DCHECK(CalledOnValidThread()); 117 DCHECK(CalledOnValidThread());
118 invalidator_state_ = state; 118 invalidator_state_ = state;
119 invalidator_registrar_.UpdateInvalidatorState(invalidator_state_); 119 invalidator_registrar_.UpdateInvalidatorState(invalidator_state_);
120 } 120 }
121 121
122 void InvalidationServiceAndroid::RequestSync(JNIEnv* env, 122 void InvalidationServiceAndroid::Invalidate(JNIEnv* env,
123 jobject obj, 123 jobject obj,
124 jint object_source, 124 jint object_source,
125 jstring java_object_id, 125 jstring java_object_id,
126 jlong version, 126 jlong version,
127 jstring java_state) { 127 jstring java_payload) {
128 invalidation::ObjectId object_id(object_source, 128 syncer::ObjectIdInvalidationMap object_invalidation_map;
129 ConvertJavaStringToUTF8(env, java_object_id)); 129 if (!java_object_id) {
130 syncer::ObjectIdSet sync_ids;
131 if (object_source == 0) {
132 sync_ids = invalidator_registrar_.GetAllRegisteredIds();
133 } else {
134 for (const auto& id : invalidator_registrar_.GetAllRegisteredIds()) {
135 if (id.source() == object_source)
136 sync_ids.insert(id);
137 }
138 }
139 object_invalidation_map =
140 syncer::ObjectIdInvalidationMap::InvalidateAll(sync_ids);
141 } else {
142 invalidation::ObjectId object_id(
143 object_source, ConvertJavaStringToUTF8(env, java_object_id));
144 syncer::ObjectIdInvalidationMap object_invalidation_map;
130 145
131 syncer::ObjectIdInvalidationMap object_ids_with_states; 146 if (version == ipc::invalidation::Constants::UNKNOWN) {
132 147 object_invalidation_map.Insert(
133 if (version == ipc::invalidation::Constants::UNKNOWN) { 148 syncer::Invalidation::InitUnknownVersion(object_id));
134 object_ids_with_states.Insert( 149 } else {
135 syncer::Invalidation::InitUnknownVersion(object_id)); 150 ObjectIdVersionMap::iterator it =
136 } else { 151 max_invalidation_versions_.find(object_id);
137 ObjectIdVersionMap::iterator it = 152 if ((it != max_invalidation_versions_.end()) && (version <= it->second)) {
138 max_invalidation_versions_.find(object_id); 153 DVLOG(1) << "Dropping redundant invalidation with version " << version;
139 if ((it != max_invalidation_versions_.end()) && 154 return;
140 (version <= it->second)) { 155 }
141 DVLOG(1) << "Dropping redundant invalidation with version " << version; 156 max_invalidation_versions_[object_id] = version;
142 return; 157 object_invalidation_map.Insert(syncer::Invalidation::Init(
158 object_id, version, ConvertJavaStringToUTF8(env, java_payload)));
143 } 159 }
144 max_invalidation_versions_[object_id] = version;
145 object_ids_with_states.Insert(
146 syncer::Invalidation::Init(object_id, version,
147 ConvertJavaStringToUTF8(env, java_state)));
148 } 160 }
149 161
150 DispatchInvalidations(object_ids_with_states);
151 }
152
153 void InvalidationServiceAndroid::RequestSyncForAllTypes(JNIEnv* env,
154 jobject obj) {
155 syncer::ObjectIdInvalidationMap object_ids_with_states;
156 DispatchInvalidations(object_ids_with_states);
157 }
158
159 void InvalidationServiceAndroid::DispatchInvalidations(
160 syncer::ObjectIdInvalidationMap& object_invalidation_map) {
161 // An empty map implies that we should invalidate all.
162 const syncer::ObjectIdInvalidationMap& effective_invalidation_map =
163 object_invalidation_map.Empty() ?
164 syncer::ObjectIdInvalidationMap::InvalidateAll(
165 invalidator_registrar_.GetAllRegisteredIds()) :
166 object_invalidation_map;
167
168 invalidator_registrar_.DispatchInvalidationsToHandlers( 162 invalidator_registrar_.DispatchInvalidationsToHandlers(
169 effective_invalidation_map); 163 object_invalidation_map);
170 logger_.OnInvalidation(effective_invalidation_map); 164 logger_.OnInvalidation(object_invalidation_map);
171 } 165 }
172 166
173 // static 167 // static
174 bool InvalidationServiceAndroid::RegisterJni(JNIEnv* env) { 168 bool InvalidationServiceAndroid::RegisterJni(JNIEnv* env) {
175 return RegisterNativesImpl(env); 169 return RegisterNativesImpl(env);
176 } 170 }
177 171
178 } // namespace invalidation 172 } // namespace invalidation
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698