OSDN Git Service

Merge Webkit at r70949: Initial merge by git.
[android-x86/external-webkit.git] / WebCore / fileapi / FileReader.h
index f914dad..04513f3 100644 (file)
 #include "ActiveDOMObject.h"
 #include "EventTarget.h"
 #include "FileError.h"
-#include "KURL.h"
-#include "TextEncoding.h"
-#include "ThreadableLoaderClient.h"
-#include <wtf/PassRefPtr.h>
+#include "FileReaderLoader.h"
+#include "FileReaderLoaderClient.h"
+#include <wtf/Forward.h>
 #include <wtf/RefCounted.h>
-#include <wtf/RefPtr.h>
-#include <wtf/Vector.h>
-#include <wtf/text/StringBuilder.h>
 #include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
+class ArrayBuffer;
 class Blob;
 class ScriptExecutionContext;
-class TextResourceDecoder;
-class ThreadableLoader;
 
-class FileReader : public RefCounted<FileReader>, public ActiveDOMObject, public EventTarget, public ThreadableLoaderClient {
+class FileReader : public RefCounted<FileReader>, public ActiveDOMObject, public EventTarget, public FileReaderLoaderClient {
 public:
     static PassRefPtr<FileReader> create(ScriptExecutionContext* context)
     {
@@ -68,20 +63,20 @@ public:
         DONE = 2
     };
 
+    void readAsArrayBuffer(Blob*);
     void readAsBinaryString(Blob*);
     void readAsText(Blob*, const String& encoding = "");
     void readAsDataURL(Blob*);
     void abort();
 
     void start();
+    void doAbort();
 
     ReadyState readyState() const;
     PassRefPtr<FileError> error() { return m_error; }
-    String result();
-
-    // Helper methods, also used by FileReaderSync.
-    static ExceptionCode httpStatusCodeToExceptionCode(int httpStatusCode);
-    static void convertToDataURL(const Vector<char>& rawData, const String& fileType, StringBuilder&);
+    FileReaderLoader::ReadType readType() const { return m_readType; }
+    PassRefPtr<ArrayBuffer> arrayBufferResult() const;
+    String stringResult();
 
     // ActiveDOMObject
     virtual bool canSuspend() const;
@@ -92,11 +87,11 @@ public:
     virtual FileReader* toFileReader() { return this; }
     virtual ScriptExecutionContext* scriptExecutionContext() const { return ActiveDOMObject::scriptExecutionContext(); }
 
-    // ThreadableLoaderClient
-    virtual void didReceiveResponse(const ResourceResponse&);
-    virtual void didReceiveData(const char*, int);
-    virtual void didFinishLoading(unsigned long identifier);
-    virtual void didFail(const ResourceError&);
+    // FileReaderLoaderClient
+    virtual void didStartLoading();
+    virtual void didReceiveData();
+    virtual void didFinishLoading();
+    virtual void didFail(int errorCode);
 
     using RefCounted<FileReader>::ref;
     using RefCounted<FileReader>::deref;
@@ -109,16 +104,12 @@ public:
     DEFINE_ATTRIBUTE_EVENT_LISTENER(loadend);
 
 private:
-    enum ReadType {
-        ReadFileAsBinaryString,
-        ReadFileAsText,
-        ReadFileAsDataURL
-    };
     enum InternalState {
         None,
         Starting,
         Opening,
         Reading,
+        Aborting,
         Completed
     };
 
@@ -131,38 +122,19 @@ private:
     virtual EventTargetData* ensureEventTargetData() { return &m_eventTargetData; }
 
     void terminate();
-    void cleanup();
-    void readInternal(Blob*, ReadType);
-    void failed(int httpStatusCode);
+    void readInternal(Blob*, FileReaderLoader::ReadType);
     void fireErrorEvent(int httpStatusCode);
     void fireEvent(const AtomicString& type);
-    void convertToText();
-    void convertToDataURL();
 
     InternalState m_state;
     EventTargetData m_eventTargetData;
 
     RefPtr<Blob> m_blob;
-    KURL m_urlForReading;
-    ReadType m_readType;
-    TextEncoding m_encoding;
-
-    StringBuilder m_builder;
-
-    // The raw data. We have to keep track of all the raw data for it to be converted to text or data URL data.
-    Vector<char> m_rawData;
-    bool m_isRawDataConverted;
-
-    // The decoder used to decode the text data.
-    RefPtr<TextResourceDecoder> m_decoder;
-
-    // Needed to create data URL.
-    String m_fileType;
+    FileReaderLoader::ReadType m_readType;
+    String m_encoding;
 
-    RefPtr<ThreadableLoader> m_loader;
+    OwnPtr<FileReaderLoader> m_loader;
     RefPtr<FileError> m_error;
-    long long m_bytesLoaded;
-    long long m_totalBytes;
     double m_lastProgressNotificationTimeMS;
 };