Title: [118897] trunk
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
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to