// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef FetchDataLoader_h
#define FetchDataLoader_h

#include "core/dom/DOMArrayBuffer.h"
#include "core/streams/Stream.h"
#include "modules/ModulesExport.h"
#include "modules/fetch/FetchDataConsumerHandle.h"
#include "platform/blob/BlobData.h"
#include "platform/heap/Handle.h"
#include "wtf/Forward.h"

namespace blink {

// FetchDataLoader subclasses
// 1. take a reader of FetchDataConsumerHandle |handle|,
// 2. read all data, and
// 3. call either didFetchDataLoaded...() on success or
//    difFetchDataLoadFailed() otherwise
//    on the thread where FetchDataLoader is created.
//
// - Client's methods can be called synchronously in start().
// - If FetchDataLoader::cancel() is called (or FetchDataLoader is garbage
//   collected), Client's methods are not called anymore.
// - FetchDataLoader takes the ownership of |handle|'s reader but not |handle|.
class MODULES_EXPORT FetchDataLoader : public GarbageCollectedFinalized<FetchDataLoader> {
public:
    class MODULES_EXPORT Client : public GarbageCollectedMixin {
    public:
        virtual ~Client() { }

        // The method corresponding to createLoaderAs... is called on success.
        virtual void didFetchDataLoadedBlobHandle(PassRefPtr<BlobDataHandle>)
        {
            ASSERT_NOT_REACHED();
        }
        virtual void didFetchDataLoadedArrayBuffer(DOMArrayBuffer*)
        {
            ASSERT_NOT_REACHED();
        }
        virtual void didFetchDataLoadedString(const String&)
        {
            ASSERT_NOT_REACHED();
        }
        // This is called after all data are read from |handle| and written
        // to |outStream|, and |outStream| is closed or aborted.
        virtual void didFetchDataLoadedStream()
        {
            ASSERT_NOT_REACHED();
        }

        virtual void didFetchDataLoadFailed() = 0;

        DEFINE_INLINE_VIRTUAL_TRACE() { }
    };

    static FetchDataLoader* createLoaderAsBlobHandle(const String& mimeType);
    static FetchDataLoader* createLoaderAsArrayBuffer();
    static FetchDataLoader* createLoaderAsString();
    static FetchDataLoader* createLoaderAsStream(Stream* outStream);

    virtual ~FetchDataLoader() { }

    // start() should be called only once on the created thread.
    // start() do not take the ownership of |handle|.
    // |handle| must not be locked when called.
    virtual void start(FetchDataConsumerHandle* /* handle */, Client*) = 0;

    virtual void cancel() = 0;

    DEFINE_INLINE_VIRTUAL_TRACE() { }
};

} // namespace blink

#endif // FetchDataLoader_h
