#include "config.h"
#include "modules/filesystem/FileWriter.h"
-#include "bindings/v8/ExceptionState.h"
+#include "bindings/core/v8/ExceptionState.h"
#include "core/dom/ExceptionCode.h"
#include "core/events/ProgressEvent.h"
#include "core/fileapi/Blob.h"
+#include "core/inspector/InspectorInstrumentation.h"
#include "public/platform/WebFileWriter.h"
#include "public/platform/WebURL.h"
#include "wtf/CurrentTime.h"
-namespace WebCore {
+namespace blink {
static const int kMaxRecursionDepth = 3;
static const double progressNotificationIntervalMS = 50;
FileWriter* FileWriter::create(ExecutionContext* context)
{
- FileWriter* fileWriter = adoptRefCountedGarbageCollected(new FileWriter(context));
+ FileWriter* fileWriter = adoptRefCountedGarbageCollectedWillBeNoop(new FileWriter(context));
fileWriter->suspendIfNeeded();
return fileWriter;
}
, m_numAborts(0)
, m_recursionDepth(0)
, m_lastProgressNotificationTimeMS(0)
+ , m_asyncOperationId(0)
{
ScriptWrappable::init(this);
}
m_readyState = DONE;
}
+bool FileWriter::hasPendingActivity() const
+{
+ return m_operationInProgress != OperationNone || m_queuedOperation != OperationNone || m_readyState == WRITING;
+}
+
void FileWriter::write(Blob* data, ExceptionState& exceptionState)
{
ASSERT(writer());
if (complete) {
if (numAborts == m_numAborts)
signalCompletion(FileError::OK);
- unsetPendingActivity(this);
}
}
setPosition(length());
m_operationInProgress = OperationNone;
signalCompletion(FileError::OK);
- unsetPendingActivity(this);
}
-void FileWriter::didFail(blink::WebFileError code)
+void FileWriter::didFail(WebFileError code)
{
ASSERT(m_operationInProgress != OperationNone);
ASSERT(static_cast<FileError::ErrorCode>(code) != FileError::OK);
m_blobBeingWritten.clear();
m_operationInProgress = OperationNone;
signalCompletion(static_cast<FileError::ErrorCode>(code));
- unsetPendingActivity(this);
}
void FileWriter::completeAbort()
Operation operation = m_queuedOperation;
m_queuedOperation = OperationNone;
doOperation(operation);
- unsetPendingActivity(this);
}
void FileWriter::doOperation(Operation operation)
{
+ m_asyncOperationId = InspectorInstrumentation::traceAsyncOperationStarting(executionContext(), "FileWriter", m_asyncOperationId);
switch (operation) {
case OperationWrite:
ASSERT(m_operationInProgress == OperationNone);
ASSERT(m_truncateLength == -1);
ASSERT(m_blobBeingWritten.get());
ASSERT(m_readyState == WRITING);
- setPendingActivity(this);
writer()->write(position(), m_blobBeingWritten->uuid());
break;
case OperationTruncate:
ASSERT(m_operationInProgress == OperationNone);
ASSERT(m_truncateLength >= 0);
ASSERT(m_readyState == WRITING);
- setPendingActivity(this);
writer()->truncate(m_truncateLength);
break;
case OperationNone:
} else
fireEvent(EventTypeNames::write);
fireEvent(EventTypeNames::writeend);
+
+ InspectorInstrumentation::traceAsyncOperationCompleted(executionContext(), m_asyncOperationId);
+ m_asyncOperationId = 0;
}
void FileWriter::fireEvent(const AtomicString& type)
{
+ InspectorInstrumentationCookie cookie = InspectorInstrumentation::traceAsyncCallbackStarting(executionContext(), m_asyncOperationId);
++m_recursionDepth;
dispatchEvent(ProgressEvent::create(type, true, m_bytesWritten, m_bytesToWrite));
--m_recursionDepth;
ASSERT(m_recursionDepth >= 0);
+ InspectorInstrumentation::traceAsyncCallbackCompleted(cookie);
}
void FileWriter::setError(FileError::ErrorCode errorCode, ExceptionState& exceptionState)
EventTargetWithInlineData::trace(visitor);
}
-} // namespace WebCore
+} // namespace blink