summaryrefslogtreecommitdiffstats
path: root/WebCore/fileapi/FileWriter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/fileapi/FileWriter.cpp')
-rw-r--r--WebCore/fileapi/FileWriter.cpp21
1 files changed, 17 insertions, 4 deletions
diff --git a/WebCore/fileapi/FileWriter.cpp b/WebCore/fileapi/FileWriter.cpp
index 8367bf9..bc76984 100644
--- a/WebCore/fileapi/FileWriter.cpp
+++ b/WebCore/fileapi/FileWriter.cpp
@@ -46,6 +46,7 @@ FileWriter::FileWriter(ScriptExecutionContext* context)
: ActiveDOMObject(context, this)
, m_readyState(INIT)
, m_position(0)
+ , m_startedWriting(false)
, m_bytesWritten(0)
, m_bytesToWrite(0)
, m_truncateLength(-1)
@@ -81,6 +82,7 @@ void FileWriter::stop()
{
if (m_writer && m_readyState == WRITING)
m_writer->abort();
+ m_blobBeingWritten.clear();
m_readyState = DONE;
}
@@ -92,8 +94,15 @@ void FileWriter::write(Blob* data, ExceptionCode& ec)
m_error = FileError::create(ec);
return;
}
+ if (!data) {
+ ec = TYPE_MISMATCH_ERR;
+ m_error = FileError::create(ec);
+ return;
+ }
+ m_blobBeingWritten = data;
m_readyState = WRITING;
+ m_startedWriting = false;
m_bytesWritten = 0;
m_bytesToWrite = data->size();
m_writer->write(m_position, data);
@@ -149,18 +158,21 @@ void FileWriter::abort(ExceptionCode& ec)
void FileWriter::didWrite(long long bytes, bool complete)
{
- ASSERT(bytes > 0);
ASSERT(bytes + m_bytesWritten > 0);
ASSERT(bytes + m_bytesWritten <= m_bytesToWrite);
- if (!m_bytesWritten)
+ if (!m_startedWriting) {
fireEvent(eventNames().writestartEvent);
+ m_startedWriting = true;
+ }
m_bytesWritten += bytes;
- ASSERT((m_bytesWritten == m_bytesToWrite) == complete);
+ ASSERT((m_bytesWritten == m_bytesToWrite) || !complete);
m_position += bytes;
if (m_position > m_length)
m_length = m_position;
- fireEvent(eventNames().writeEvent);
+ fireEvent(eventNames().progressEvent);
if (complete) {
+ m_blobBeingWritten.clear();
+ fireEvent(eventNames().writeEvent);
m_readyState = DONE;
fireEvent(eventNames().writeendEvent);
}
@@ -186,6 +198,7 @@ void FileWriter::didFail(ExceptionCode ec)
if (ABORT_ERR == ec)
fireEvent(eventNames().abortEvent);
fireEvent(eventNames().errorEvent);
+ m_blobBeingWritten.clear();
m_readyState = DONE;
fireEvent(eventNames().writeendEvent);
}