- Revision
- 118897
- Author
- [email protected]
- Date
- 2012-05-29 23:34:18 -0700 (Tue, 29 May 2012)
Log Message
[FileAPI] The result attribute of FileReader shuold use null to replace empty string
https://bugs.webkit.org/show_bug.cgi?id=87578
Patch by Li Yin <[email protected]> on 2012-05-29
Reviewed by Jian Li.
Source/WebCore:
Spec: http://www.w3.org/TR/FileAPI/#dfn-result
If the readyState is EMPTY (no read method has been called) or an error
in reading the File or Blob has occurred (using any read method), then the
result attribute MUST return null.
Currently, Firefox11, Opera and IE 10 follows the spec, but Webkit based
browser doesn't.
WebKit should change the returned value empty string into null to keep
conformance with the spec.
Tests: fast/files/read-file-async.html
fast/files/workers/worker-read-file-async.html
* fileapi/FileReader.cpp:
(WebCore::FileReader::arrayBufferResult):
(WebCore::FileReader::stringResult):
LayoutTests:
Spec: http://www.w3.org/TR/FileAPI/#dfn-result
If the readyState is EMPTY (no read method has been called) or an error in
reading the File or Blob has occurred (using any read method), then the result
attribute MUST return null.
Currently, webkit return empty string, not null.
* fast/files/read-file-async-expected.txt:
* fast/files/resources/read-common.js:
(logResult):
(loadFailed):
* fast/files/resources/read-file-test-cases.js:
(testReadAgainAfterFailedReadStep1):
* fast/files/workers/worker-read-file-async-expected.txt:
Modified Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (118896 => 118897)
--- trunk/LayoutTests/ChangeLog 2012-05-30 06:33:40 UTC (rev 118896)
+++ trunk/LayoutTests/ChangeLog 2012-05-30 06:34:18 UTC (rev 118897)
@@ -1,3 +1,25 @@
+2012-05-29 Li Yin <[email protected]>
+
+ [FileAPI] The result attribute of FileReader shuold use null to replace empty string
+ https://bugs.webkit.org/show_bug.cgi?id=87578
+
+ Reviewed by Jian Li.
+
+ Spec: http://www.w3.org/TR/FileAPI/#dfn-result
+ If the readyState is EMPTY (no read method has been called) or an error in
+ reading the File or Blob has occurred (using any read method), then the result
+ attribute MUST return null.
+
+ Currently, webkit return empty string, not null.
+
+ * fast/files/read-file-async-expected.txt:
+ * fast/files/resources/read-common.js:
+ (logResult):
+ (loadFailed):
+ * fast/files/resources/read-file-test-cases.js:
+ (testReadAgainAfterFailedReadStep1):
+ * fast/files/workers/worker-read-file-async-expected.txt:
+
2012-05-29 Kent Tamura <[email protected]>
[Chromium] Test expectation update.
Modified: trunk/LayoutTests/fast/files/read-file-async-expected.txt (118896 => 118897)
--- trunk/LayoutTests/fast/files/read-file-async-expected.txt 2012-05-30 06:33:40 UTC (rev 118896)
+++ trunk/LayoutTests/fast/files/read-file-async-expected.txt 2012-05-30 06:34:18 UTC (rev 118897)
@@ -4,24 +4,28 @@
Received error event
readyState: 2
error code: 1
+result: null
Received loadend event
Test reading a non-existent file as binary string
readyState: 0
Received error event
readyState: 2
error code: 1
+result: null
Received loadend event
Test reading a non-existent file as text
readyState: 0
Received error event
readyState: 2
error code: 1
+result: null
Received loadend event
Test reading a non-existent file as data URL
readyState: 0
Received error event
readyState: 2
error code: 1
+result: null
Received loadend event
Test reading an empty file as array buffer
readyState: 0
@@ -204,6 +208,7 @@
Received error event
readyState: 2
error code: 1
+result: null
Received loadend event
readyState after recalling read method: 1
result after recalling read method:
@@ -215,5 +220,15 @@
result size: 31
result: data:text/plain;base64,SGVsbG8=
Received loadend event
+Test result before reading method
+readyState: 0
+result before reading method: null
+Received loadstart event
+readyState: 1
+Received load event
+readyState: 2
+result size: 0
+result:
+Received loadend event
DONE
Modified: trunk/LayoutTests/fast/files/resources/read-common.js (118896 => 118897)
--- trunk/LayoutTests/fast/files/resources/read-common.js 2012-05-30 06:33:40 UTC (rev 118896)
+++ trunk/LayoutTests/fast/files/resources/read-common.js 2012-05-30 06:34:18 UTC (rev 118897)
@@ -171,6 +171,10 @@
// 'result' can be either an ArrayBuffer object or a string.
function logResult(result)
{
+ if (result === null) {
+ log("result: null");
+ return;
+ }
if (typeof result == 'object') {
log("result size: " + result.byteLength);
result = new Uint8Array(result, 0, result.byteLength);
@@ -206,6 +210,7 @@
logEvent(event);
log("readyState: " + event.target.readyState);
log("error code: " + event.target.error.code);
+ logResult(event.target.result);
}
function loadEnded(testFiles, event)
Modified: trunk/LayoutTests/fast/files/resources/read-file-test-cases.js (118896 => 118897)
--- trunk/LayoutTests/fast/files/resources/read-file-test-cases.js 2012-05-30 06:33:40 UTC (rev 118896)
+++ trunk/LayoutTests/fast/files/resources/read-file-test-cases.js 2012-05-30 06:34:18 UTC (rev 118897)
@@ -25,7 +25,8 @@
"testReadAgainAfterSuccessfulReadStep1",
"testReadAgainAfterSuccessfulReadStep2",
"testReadAgainAfterFailedReadStep1",
- "testReadAgainAfterFailedReadStep2"
+ "testReadAgainAfterFailedReadStep2",
+ "testResultBeforeRead"
];
var testIndex = 0;
var initialized = false;
@@ -229,4 +230,10 @@
log("error after recalling read method: " + readerToTestReread.error);
}
-
+function testResultBeforeRead(testFiles)
+{
+ log("Test result before reading method");
+ var reader = createReaderAsync(testFiles);
+ log("result before reading method: " + reader.result);
+ reader.readAsBinaryString(testFiles['empty-file']);
+}
Modified: trunk/LayoutTests/fast/files/workers/worker-read-file-async-expected.txt (118896 => 118897)
--- trunk/LayoutTests/fast/files/workers/worker-read-file-async-expected.txt 2012-05-30 06:33:40 UTC (rev 118896)
+++ trunk/LayoutTests/fast/files/workers/worker-read-file-async-expected.txt 2012-05-30 06:34:18 UTC (rev 118897)
@@ -5,24 +5,28 @@
Received error event
readyState: 2
error code: 1
+result: null
Received loadend event
Test reading a non-existent file as binary string
readyState: 0
Received error event
readyState: 2
error code: 1
+result: null
Received loadend event
Test reading a non-existent file as text
readyState: 0
Received error event
readyState: 2
error code: 1
+result: null
Received loadend event
Test reading a non-existent file as data URL
readyState: 0
Received error event
readyState: 2
error code: 1
+result: null
Received loadend event
Test reading an empty file as array buffer
readyState: 0
@@ -205,6 +209,7 @@
Received error event
readyState: 2
error code: 1
+result: null
Received loadend event
readyState after recalling read method: 1
result after recalling read method:
@@ -216,5 +221,15 @@
result size: 31
result: data:text/plain;base64,SGVsbG8=
Received loadend event
+Test result before reading method
+readyState: 0
+result before reading method: null
+Received loadstart event
+readyState: 1
+Received load event
+readyState: 2
+result size: 0
+result:
+Received loadend event
DONE
Modified: trunk/Source/WebCore/ChangeLog (118896 => 118897)
--- trunk/Source/WebCore/ChangeLog 2012-05-30 06:33:40 UTC (rev 118896)
+++ trunk/Source/WebCore/ChangeLog 2012-05-30 06:34:18 UTC (rev 118897)
@@ -1,3 +1,27 @@
+2012-05-29 Li Yin <[email protected]>
+
+ [FileAPI] The result attribute of FileReader shuold use null to replace empty string
+ https://bugs.webkit.org/show_bug.cgi?id=87578
+
+ Reviewed by Jian Li.
+
+ Spec: http://www.w3.org/TR/FileAPI/#dfn-result
+ If the readyState is EMPTY (no read method has been called) or an error
+ in reading the File or Blob has occurred (using any read method), then the
+ result attribute MUST return null.
+
+ Currently, Firefox11, Opera and IE 10 follows the spec, but Webkit based
+ browser doesn't.
+ WebKit should change the returned value empty string into null to keep
+ conformance with the spec.
+
+ Tests: fast/files/read-file-async.html
+ fast/files/workers/worker-read-file-async.html
+
+ * fileapi/FileReader.cpp:
+ (WebCore::FileReader::arrayBufferResult):
+ (WebCore::FileReader::stringResult):
+
2012-05-29 Mark Pilgrim <[email protected]>
[Chromium] Move fileExists to Platform.h
Modified: trunk/Source/WebCore/fileapi/FileReader.cpp (118896 => 118897)
--- trunk/Source/WebCore/fileapi/FileReader.cpp 2012-05-30 06:33:40 UTC (rev 118896)
+++ trunk/Source/WebCore/fileapi/FileReader.cpp 2012-05-30 06:34:18 UTC (rev 118897)
@@ -250,12 +250,16 @@
PassRefPtr<ArrayBuffer> FileReader::arrayBufferResult() const
{
- return m_loader ? m_loader->arrayBufferResult() : 0;
+ if (!m_loader || m_error)
+ return 0;
+ return m_loader->arrayBufferResult();
}
String FileReader::stringResult()
{
- return m_loader ? m_loader->stringResult() : "";
+ if (!m_loader || m_error)
+ return String();
+ return m_loader->stringResult();
}
} // namespace WebCore