1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
// Copyright 2014 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 BodyStreamBuffer_h
#define BodyStreamBuffer_h
#include "core/dom/DOMException.h"
#include "platform/blob/BlobData.h"
#include "platform/heap/Heap.h"
#include "wtf/Deque.h"
#include "wtf/RefPtr.h"
#include "wtf/text/WTFString.h"
namespace blink {
class DOMArrayBuffer;
class BodyStreamBuffer final : public GarbageCollectedFinalized<BodyStreamBuffer> {
public:
class Observer : public GarbageCollectedFinalized<Observer> {
public:
virtual ~Observer() { }
virtual void onWrite() = 0;
virtual void onClose() = 0;
virtual void onError() = 0;
virtual void trace(Visitor*) { }
};
class BlobHandleCreatorClient : public GarbageCollectedFinalized<BlobHandleCreatorClient> {
public:
virtual ~BlobHandleCreatorClient() { }
virtual void didCreateBlobHandle(PassRefPtr<BlobDataHandle>) = 0;
virtual void didFail(PassRefPtrWillBeRawPtr<DOMException>) = 0;
virtual void trace(Visitor*) { }
};
BodyStreamBuffer();
~BodyStreamBuffer() { }
PassRefPtr<DOMArrayBuffer> read();
bool isClosed() const { return m_isClosed; }
bool hasError() const { return m_exception; }
PassRefPtrWillBeRawPtr<DOMException> exception() const { return m_exception; }
// Can't call after close() or error() was called.
void write(PassRefPtr<DOMArrayBuffer>);
// Can't call after close() or error() was called.
void close();
// Can't call after close() or error() was called.
void error(PassRefPtrWillBeRawPtr<DOMException>);
// This function registers an observer so it fails and returns false when an
// observer was already registered
bool readAllAndCreateBlobHandle(const String& contentType, BlobHandleCreatorClient*);
// When an observer was registered this function fails and returns false.
bool registerObserver(Observer*);
void unregisterObserver();
bool isObserverRegistered() const { return m_observer.get(); }
void trace(Visitor*);
private:
Deque<RefPtr<DOMArrayBuffer> > m_queue;
bool m_isClosed;
RefPtrWillBeMember<DOMException> m_exception;
Member<Observer> m_observer;
};
} // namespace blink
#endif // BodyStreamBuffer_h
|