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

Unified Diff: third_party/mojo/src/mojo/public/java/bindings/src/org/chromium/mojo/bindings/Decoder.java

Issue 954643002: Update mojo sdk to rev 3d23dae011859a2aae49f1d1adde705c8e85d819 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: use run_renderer_in_process() Created 5 years, 10 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: third_party/mojo/src/mojo/public/java/bindings/src/org/chromium/mojo/bindings/Decoder.java
diff --git a/third_party/mojo/src/mojo/public/java/bindings/src/org/chromium/mojo/bindings/Decoder.java b/third_party/mojo/src/mojo/public/java/bindings/src/org/chromium/mojo/bindings/Decoder.java
index b95b6dd40ea26f7e3afd1180f1e568a7155da96e..fa1eb2366337942de57b43403057981b10438d99 100644
--- a/third_party/mojo/src/mojo/public/java/bindings/src/org/chromium/mojo/bindings/Decoder.java
+++ b/third_party/mojo/src/mojo/public/java/bindings/src/org/chromium/mojo/bindings/Decoder.java
@@ -120,22 +120,47 @@ public class Decoder {
// Claim the memory for the header.
mValidator.claimMemory(mBaseOffset, mBaseOffset + DataHeader.HEADER_SIZE);
int size = readInt(DataHeader.SIZE_OFFSET);
- int numFields = readInt(DataHeader.NUM_FIELDS_OFFSET);
+ int elementsOrVersion = readInt(DataHeader.ELEMENTS_OR_VERSION_OFFSET);
if (size < 0) {
throw new DeserializationException(
"Negative size. Unsigned integers are not valid for java.");
}
- if (numFields < 0) {
+ if (elementsOrVersion < 0) {
throw new DeserializationException(
- "Negative number of fields. Unsigned integers are not valid for java.");
+ "Negative elements or version. Unsigned integers are not valid for java.");
}
// Claim the remaining memory.
mValidator.claimMemory(mBaseOffset + DataHeader.HEADER_SIZE, mBaseOffset + size);
- DataHeader res = new DataHeader(size, numFields);
+ DataHeader res = new DataHeader(size, elementsOrVersion);
return res;
}
+ public DataHeader readAndValidateDataHeader(DataHeader[] versionArray) {
+ DataHeader header = readDataHeader();
+ int maxVersionIndex = versionArray.length - 1;
+ if (header.elementsOrVersion <= versionArray[maxVersionIndex].elementsOrVersion) {
+ DataHeader referenceHeader = null;
+ for (int index = maxVersionIndex; index >= 0; index--) {
+ DataHeader dataHeader = versionArray[index];
+ if (header.elementsOrVersion >= dataHeader.elementsOrVersion) {
+ referenceHeader = dataHeader;
+ break;
+ }
+ }
+ if (referenceHeader == null || referenceHeader.size != header.size) {
+ throw new DeserializationException(
+ "Header doesn't correspond to any known version.");
+ }
+ } else {
+ if (header.size < versionArray[maxVersionIndex].size) {
+ throw new DeserializationException("Message newer than the last known version"
+ + " cannot be shorter than required by the last known version.");
+ }
+ }
+ return header;
+ }
+
/**
* Deserializes a {@link DataHeader} at the given offset and checks if it is correct for an
* array where element have the given size.
@@ -153,9 +178,9 @@ public class Decoder {
throw new DeserializationException(
"Incorrect header for map. The size is incorrect.");
}
- if (si.numFields != BindingsHelper.MAP_STRUCT_HEADER.numFields) {
+ if (si.elementsOrVersion != BindingsHelper.MAP_STRUCT_HEADER.elementsOrVersion) {
throw new DeserializationException(
- "Incorrect header for map. The number of fields is incorrect.");
+ "Incorrect header for map. The version is incorrect.");
}
}
@@ -244,10 +269,10 @@ public class Decoder {
return null;
}
DataHeader si = d.readDataHeaderForBooleanArray(expectedLength);
- byte[] bytes = new byte[(si.numFields + 7) / BindingsHelper.ALIGNMENT];
+ byte[] bytes = new byte[(si.elementsOrVersion + 7) / BindingsHelper.ALIGNMENT];
d.mMessage.getData().position(d.mBaseOffset + DataHeader.HEADER_SIZE);
d.mMessage.getData().get(bytes);
- boolean[] result = new boolean[si.numFields];
+ boolean[] result = new boolean[si.elementsOrVersion];
for (int i = 0; i < bytes.length; ++i) {
for (int j = 0; j < BindingsHelper.ALIGNMENT; ++j) {
int booleanIndex = i * BindingsHelper.ALIGNMENT + j;
@@ -268,7 +293,7 @@ public class Decoder {
return null;
}
DataHeader si = d.readDataHeaderForArray(1, expectedLength);
- byte[] result = new byte[si.numFields];
+ byte[] result = new byte[si.elementsOrVersion];
d.mMessage.getData().position(d.mBaseOffset + DataHeader.HEADER_SIZE);
d.mMessage.getData().get(result);
return result;
@@ -283,7 +308,7 @@ public class Decoder {
return null;
}
DataHeader si = d.readDataHeaderForArray(2, expectedLength);
- short[] result = new short[si.numFields];
+ short[] result = new short[si.elementsOrVersion];
d.mMessage.getData().position(d.mBaseOffset + DataHeader.HEADER_SIZE);
d.mMessage.getData().asShortBuffer().get(result);
return result;
@@ -298,7 +323,7 @@ public class Decoder {
return null;
}
DataHeader si = d.readDataHeaderForArray(4, expectedLength);
- int[] result = new int[si.numFields];
+ int[] result = new int[si.elementsOrVersion];
d.mMessage.getData().position(d.mBaseOffset + DataHeader.HEADER_SIZE);
d.mMessage.getData().asIntBuffer().get(result);
return result;
@@ -313,7 +338,7 @@ public class Decoder {
return null;
}
DataHeader si = d.readDataHeaderForArray(4, expectedLength);
- float[] result = new float[si.numFields];
+ float[] result = new float[si.elementsOrVersion];
d.mMessage.getData().position(d.mBaseOffset + DataHeader.HEADER_SIZE);
d.mMessage.getData().asFloatBuffer().get(result);
return result;
@@ -328,7 +353,7 @@ public class Decoder {
return null;
}
DataHeader si = d.readDataHeaderForArray(8, expectedLength);
- long[] result = new long[si.numFields];
+ long[] result = new long[si.elementsOrVersion];
d.mMessage.getData().position(d.mBaseOffset + DataHeader.HEADER_SIZE);
d.mMessage.getData().asLongBuffer().get(result);
return result;
@@ -343,7 +368,7 @@ public class Decoder {
return null;
}
DataHeader si = d.readDataHeaderForArray(8, expectedLength);
- double[] result = new double[si.numFields];
+ double[] result = new double[si.elementsOrVersion];
d.mMessage.getData().position(d.mBaseOffset + DataHeader.HEADER_SIZE);
d.mMessage.getData().asDoubleBuffer().get(result);
return result;
@@ -447,7 +472,7 @@ public class Decoder {
return null;
}
DataHeader si = d.readDataHeaderForArray(4, expectedLength);
- Handle[] result = new Handle[si.numFields];
+ Handle[] result = new Handle[si.elementsOrVersion];
for (int i = 0; i < result.length; ++i) {
result[i] = d.readHandle(
DataHeader.HEADER_SIZE + BindingsHelper.SERIALIZED_HANDLE_SIZE * i,
@@ -466,7 +491,7 @@ public class Decoder {
return null;
}
DataHeader si = d.readDataHeaderForArray(4, expectedLength);
- UntypedHandle[] result = new UntypedHandle[si.numFields];
+ UntypedHandle[] result = new UntypedHandle[si.elementsOrVersion];
for (int i = 0; i < result.length; ++i) {
result[i] = d.readUntypedHandle(
DataHeader.HEADER_SIZE + BindingsHelper.SERIALIZED_HANDLE_SIZE * i,
@@ -485,7 +510,7 @@ public class Decoder {
return null;
}
DataHeader si = d.readDataHeaderForArray(4, expectedLength);
- DataPipe.ConsumerHandle[] result = new DataPipe.ConsumerHandle[si.numFields];
+ DataPipe.ConsumerHandle[] result = new DataPipe.ConsumerHandle[si.elementsOrVersion];
for (int i = 0; i < result.length; ++i) {
result[i] = d.readConsumerHandle(
DataHeader.HEADER_SIZE + BindingsHelper.SERIALIZED_HANDLE_SIZE * i,
@@ -504,7 +529,7 @@ public class Decoder {
return null;
}
DataHeader si = d.readDataHeaderForArray(4, expectedLength);
- DataPipe.ProducerHandle[] result = new DataPipe.ProducerHandle[si.numFields];
+ DataPipe.ProducerHandle[] result = new DataPipe.ProducerHandle[si.elementsOrVersion];
for (int i = 0; i < result.length; ++i) {
result[i] = d.readProducerHandle(
DataHeader.HEADER_SIZE + BindingsHelper.SERIALIZED_HANDLE_SIZE * i,
@@ -524,7 +549,7 @@ public class Decoder {
return null;
}
DataHeader si = d.readDataHeaderForArray(4, expectedLength);
- MessagePipeHandle[] result = new MessagePipeHandle[si.numFields];
+ MessagePipeHandle[] result = new MessagePipeHandle[si.elementsOrVersion];
for (int i = 0; i < result.length; ++i) {
result[i] = d.readMessagePipeHandle(
DataHeader.HEADER_SIZE + BindingsHelper.SERIALIZED_HANDLE_SIZE * i,
@@ -544,7 +569,7 @@ public class Decoder {
return null;
}
DataHeader si = d.readDataHeaderForArray(4, expectedLength);
- SharedBufferHandle[] result = new SharedBufferHandle[si.numFields];
+ SharedBufferHandle[] result = new SharedBufferHandle[si.elementsOrVersion];
for (int i = 0; i < result.length; ++i) {
result[i] = d.readSharedBufferHandle(
DataHeader.HEADER_SIZE + BindingsHelper.SERIALIZED_HANDLE_SIZE * i,
@@ -564,7 +589,7 @@ public class Decoder {
return null;
}
DataHeader si = d.readDataHeaderForArray(4, expectedLength);
- S[] result = manager.buildArray(si.numFields);
+ S[] result = manager.buildArray(si.elementsOrVersion);
for (int i = 0; i < result.length; ++i) {
// This cast is necessary because java 6 doesn't handle wildcard correctly when using
// Manager<S, ? extends S>
@@ -588,7 +613,7 @@ public class Decoder {
}
DataHeader si = d.readDataHeaderForArray(4, expectedLength);
@SuppressWarnings("unchecked")
- InterfaceRequest<I>[] result = new InterfaceRequest[si.numFields];
+ InterfaceRequest<I>[] result = new InterfaceRequest[si.elementsOrVersion];
for (int i = 0; i < result.length; ++i) {
result[i] = d.readInterfaceRequest(
DataHeader.HEADER_SIZE + BindingsHelper.SERIALIZED_HANDLE_SIZE * i,
@@ -610,13 +635,13 @@ public class Decoder {
*/
private DataHeader readDataHeaderForBooleanArray(int expectedLength) {
DataHeader dataHeader = readDataHeader();
- if (dataHeader.size < DataHeader.HEADER_SIZE + (dataHeader.numFields + 7) / 8) {
+ if (dataHeader.size < DataHeader.HEADER_SIZE + (dataHeader.elementsOrVersion + 7) / 8) {
throw new DeserializationException("Array header is incorrect.");
}
if (expectedLength != BindingsHelper.UNSPECIFIED_ARRAY_LENGTH
- && dataHeader.numFields != expectedLength) {
- throw new DeserializationException("Incorrect array length. Expected: "
- + expectedLength + ", but got: " + dataHeader.numFields + ".");
+ && dataHeader.elementsOrVersion != expectedLength) {
+ throw new DeserializationException("Incorrect array length. Expected: " + expectedLength
+ + ", but got: " + dataHeader.elementsOrVersion + ".");
}
return dataHeader;
}
@@ -626,13 +651,14 @@ public class Decoder {
*/
private DataHeader readDataHeaderForArray(long elementSize, int expectedLength) {
DataHeader dataHeader = readDataHeader();
- if (dataHeader.size < (DataHeader.HEADER_SIZE + elementSize * dataHeader.numFields)) {
+ if (dataHeader.size
+ < (DataHeader.HEADER_SIZE + elementSize * dataHeader.elementsOrVersion)) {
throw new DeserializationException("Array header is incorrect.");
}
if (expectedLength != BindingsHelper.UNSPECIFIED_ARRAY_LENGTH
- && dataHeader.numFields != expectedLength) {
- throw new DeserializationException("Incorrect array length. Expected: "
- + expectedLength + ", but got: " + dataHeader.numFields + ".");
+ && dataHeader.elementsOrVersion != expectedLength) {
+ throw new DeserializationException("Incorrect array length. Expected: " + expectedLength
+ + ", but got: " + dataHeader.elementsOrVersion + ".");
}
return dataHeader;
}

Powered by Google App Engine
This is Rietveld 408576698