Index: LayoutTests/fast/storage/resources/serialized-script-value.js |
diff --git a/LayoutTests/fast/storage/resources/serialized-script-value.js b/LayoutTests/fast/storage/resources/serialized-script-value.js |
index 17a719422192df442d68dc00acecf224ac3d333e..5132ab9383b2ee029536ff4d1d84173192e1573e 100644 |
--- a/LayoutTests/fast/storage/resources/serialized-script-value.js |
+++ b/LayoutTests/fast/storage/resources/serialized-script-value.js |
@@ -1,3 +1,12 @@ |
+var kSerializedScriptValueVersion = 4; |
+ |
+function forVersion(version, values) { |
+ var versionTag = 0xff; |
+ var versionPrefix = [ (version << 8) | versionTag ]; |
+ |
+ return versionPrefix.concat(values) |
+} |
+ |
function expectBufferValue(bytesPerElement, expectedValues, buffer) { |
expectedBufferValues = expectedValues; |
var arrayClass; |
@@ -60,6 +69,8 @@ function areValuesIdentical(a, b) { |
function _testSerialization(bytesPerElement, obj, values, oldFormat, serializeExceptionValue) { |
debug(""); |
+ values = forVersion(kSerializedScriptValueVersion, values); |
+ |
if (!serializeExceptionValue) { |
self.obj = obj; |
debug("Deserialize to " + JSON.stringify(obj) + ":"); |
@@ -113,4 +124,44 @@ function testBlobSerialization() { |
xhr2.send(); |
self.blobContent2 = xhr2.response; |
shouldBe("self.blobContent1", "self.blobContent2"); |
-} |
+} |
+ |
+function testFileSerialization() { |
+ debug(""); |
+ window.jsTestIsAsync = true; |
+ |
+ function checkIfSameContent(file1, file2, continuation) { |
+ function step1() { |
+ var fileReader = new FileReader(); |
+ fileReader.onload = function () { |
+ self.fileContents1 = fileReader.result; |
+ step2(); |
+ }; |
+ fileReader.readAsText(file1); |
+ } |
+ function step2() { |
+ var fileReader = new FileReader(); |
+ fileReader.onload = function () { |
+ self.fileContents2 = fileReader.result; |
+ finish(); |
+ }; |
+ fileReader.readAsText(file2); |
+ } |
+ function finish() { |
+ shouldBe("self.fileContents1", "self.fileContents2"); |
+ continuation(); |
+ } |
+ step1(); |
+ } |
+ |
+ debug("Test deserialization of File objects"); |
+ self.fileObj1 = new File(['The', ' contents'], 'testfile.txt', {type: 'text/plain', lastModified: 0}); |
+ self.fileObj2 = internals.deserializeBuffer(internals.serializeObject(self.fileObj1)); |
+ shouldBeTrue("areValuesIdentical(fileObj1, fileObj2)"); |
+ self.dictionaryWithFile1 = {file: fileObj1, string: 'stringValue'}; |
+ self.dictionaryWithFile2 = internals.deserializeBuffer(internals.serializeObject(dictionaryWithFile1)); |
+ shouldBeTrue("areValuesIdentical(dictionaryWithFile1, dictionaryWithFile2)"); |
+ |
+ // Read and compare actual contents. |
+ checkIfSameContent(self.fileObj1, self.fileObj2, finishJSTest); |
+} |