Bug 61793

Summary: Update the behavior of multiple reads for FileReader
Product: WebKit Reporter: Jian Li <jianli>
Component: WebCore JavaScriptAssignee: Jian Li <jianli>
Status: RESOLVED FIXED    
Severity: Normal CC: dimich, ericu, kinuko, levin
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: All   
OS: All   
Attachments:
Description Flags
Proposed Patch levin: review+, jianli: commit-queue-

Description Jian Li 2011-05-31 11:18:19 PDT
We need to update the behavior of multiple reads for FileReader per the latest File API spec: http://dev.w3.org/2006/webapi/FileAPI/#MultipleReads

  The FileReader interface makes available four asynchronous read methods -- readAsArrayBuffer, readAsBinaryString, readAsText, and readAsDataURL, which read files into memory. If multiple concurrent read methods are called on the same FileReader object, user agents MUST throw an OperationNotAllowedException with the NOT_ALLOWED_ERR status code on any of the read methods that occur when readyState = LOADING.
Comment 1 Jian Li 2011-05-31 18:12:49 PDT
Created attachment 95523 [details]
Proposed Patch
Comment 2 David Levin 2011-06-01 22:33:01 PDT
Comment on attachment 95523 [details]
Proposed Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=95523&action=review

Looks good. Just a few things to consider before checking in.

The one that concerns me the most is the wording for the error message operationNotAllowedExceptionDescriptions.

> Source/WebCore/WebCore.xcodeproj/project.pbxproj:-23070
> -			developmentRegion = English;

Please fix this (and consider upgrading xcode).

> Source/WebCore/bindings/js/JSDOMBinding.cpp:36
>  #if ENABLE(BLOB) || ENABLE(FILE_SYSTEM)

fwiw, these ifdef sections should come after all other includes (but I know you are just adding to an existing section).

> Source/WebCore/dom/ExceptionCode.cpp:218
> +    "It was not allowed to call multiple concurrent read methods on the same object when the ready state is LOADING."

How about:
   "A read method was called while another read was in progress."
or
   "A read method was called while the object was in the LOADING state due to a previous read call."

> Source/WebCore/fileapi/FileReader.cpp:140
> +    m_loader = adoptPtr(new FileReaderLoader(m_readType, this));

The constructor for FileReaderLoader should be private and have a static create method but of course this is just a move of code.

> Source/WebCore/fileapi/FileReader.h:37
> +#include "ExceptionCode.h"

Out of order. (Should be after EventTarget)
Comment 3 Jian Li 2011-06-02 15:27:16 PDT
Committed as https://trac.webkit.org/changeset/87961.