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

Unified Diff: components/invalidation/android/java/src/org/chromium/components/invalidation/PendingInvalidation.java

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: Rebase with upstream + Use Json Reader,Writer Created 5 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: components/invalidation/android/java/src/org/chromium/components/invalidation/PendingInvalidation.java
diff --git a/components/invalidation/android/java/src/org/chromium/components/invalidation/PendingInvalidation.java b/components/invalidation/android/java/src/org/chromium/components/invalidation/PendingInvalidation.java
new file mode 100644
index 0000000000000000000000000000000000000000..9fa3b0c2aee45a73c47484c5cd02af3366ed13a9
--- /dev/null
+++ b/components/invalidation/android/java/src/org/chromium/components/invalidation/PendingInvalidation.java
@@ -0,0 +1,122 @@
+// Copyright 2015 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.
+
+package org.chromium.components.invalidation;
+
+import android.os.Bundle;
+import android.util.JsonReader;
+import android.util.JsonWriter;
+
+import org.chromium.base.Log;
+
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+
+/**
+ * A container class that stores the received invalidations.
+ * It plays the role of abstracting conversions to and from other storage types like String
+ * (storing in prefStore) and Bundle (ContentProvider).
+ */
+public class PendingInvalidation {
nyquist 2015/05/22 20:21:07 Should this class have a simple test for serializa
knn 2015/06/04 18:23:29 Done.
+ static final String TAG = Log.makeTag("invalidation");
+
+ static final String INVALIDATION_OBJECT_SOURCE_KEY = "objectSource";
+ static final String INVALIDATION_OBJECT_ID_KEY = "objectId";
+ static final String INVALIDATION_VERSION_KEY = "version";
+ static final String INVALIDATION_PAYLOAD_KEY = "payload";
+
+ public final String mObjectId;
+ public final int mObjectSource;
+ public final long mVersion;
+ public final String mPayload;
+
+ public PendingInvalidation(String id, int source, long version, String payload) {
+ mObjectId = id;
+ mObjectSource = source;
+ mVersion = version;
+ mPayload = payload;
+ }
+
+ public PendingInvalidation(Bundle bundle) {
+ mObjectId = bundle.getString(INVALIDATION_OBJECT_ID_KEY);
+ mObjectSource = bundle.getInt(INVALIDATION_OBJECT_SOURCE_KEY);
+ mVersion = bundle.getLong(INVALIDATION_VERSION_KEY);
+ mPayload = bundle.getString(INVALIDATION_PAYLOAD_KEY);
+ }
+
+ public final boolean isInvalidateAll() {
+ return mObjectId == null;
+ }
+
+ public static PendingInvalidation fromString(String invalidationString) {
+ JsonReader reader = new JsonReader(new StringReader(invalidationString));
+ String objectId = null;
+ // There is already some special handling for objectSource and version value 0 as unknown.
+ int objectSource = 0;
+ long version = 0L;
+ String payload = null;
+ try {
+ reader.beginObject();
+ while (reader.hasNext()) {
+ String key = reader.nextName();
+ switch (key) {
+ case INVALIDATION_OBJECT_ID_KEY:
+ objectId = reader.nextString();
+ break;
+ case INVALIDATION_OBJECT_SOURCE_KEY:
+ objectSource = reader.nextInt();
+ break;
+ case INVALIDATION_VERSION_KEY:
+ version = reader.nextLong();
+ break;
+ case INVALIDATION_PAYLOAD_KEY:
+ payload = reader.nextString();
+ break;
+ default:
+ reader.skipValue();
+ }
+ }
+ reader.endObject();
+ reader.close();
+ } catch (IOException e) {
+ // Handled below.
Bernhard Bauer 2015/05/21 16:21:25 We shouldn't really get an IO exception from a Str
+ }
+ if (objectSource == 0) return null;
+ if (objectId == null) {
+ Log.e(TAG, "No objectId found while parsing cached invalidation.");
+ Log.e(TAG, "Proceeding with invalidating all ids for source %d.", objectSource);
+ }
+ return new PendingInvalidation(objectId, objectSource, version, payload);
+ }
+
+ @Override
+ public String toString() {
+ StringWriter stringWriter = new StringWriter();
nyquist 2015/05/22 20:21:07 I would much rather us storing Protocol Buffers th
knn 2015/06/04 18:23:29 Serializing to file to avoid the byte -> string ug
Bernhard Bauer 2015/06/05 08:20:48 You could Base64-encode the byte array to get a st
knn 2015/06/05 15:09:52 Done.
+ JsonWriter jsonWriter = new JsonWriter(stringWriter);
+ try {
+ jsonWriter.beginObject();
+ jsonWriter.name(INVALIDATION_OBJECT_SOURCE_KEY).value(mObjectSource);
+ if (mObjectId != null) jsonWriter.name(INVALIDATION_OBJECT_ID_KEY).value(mObjectId);
+ jsonWriter.name(INVALIDATION_VERSION_KEY).value(mVersion);
+ if (mPayload != null) jsonWriter.name(INVALIDATION_PAYLOAD_KEY).value(mPayload);
+ jsonWriter.endObject();
+ jsonWriter.close();
+ } catch (IOException e) {
+ // Nothing to be done now. Will handle during de-serialization.
+ }
+ return stringWriter.toString();
+ }
+
+ public Bundle toBundle() {
+ Bundle bundle = new Bundle();
+ if (!isInvalidateAll()) {
+ bundle.putString(INVALIDATION_OBJECT_ID_KEY, mObjectId);
+ bundle.putInt(INVALIDATION_OBJECT_SOURCE_KEY, mObjectSource);
+ bundle.putLong(INVALIDATION_VERSION_KEY, mVersion);
+ bundle.putString(INVALIDATION_PAYLOAD_KEY, mPayload);
+ }
+ return bundle;
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698