Index: Source/core/platform/chromium/support/WebFileSystemCallbacks.cpp |
diff --git a/Source/web/WebFileSystemCallbacksImpl.cpp b/Source/core/platform/chromium/support/WebFileSystemCallbacks.cpp |
similarity index 52% |
rename from Source/web/WebFileSystemCallbacksImpl.cpp |
rename to Source/core/platform/chromium/support/WebFileSystemCallbacks.cpp |
index 619ba58c9ca8dbf7de27fa053bf931c5b8754426..a0c7525956ebcba91ffd9b37653a97e009f6283c 100644 |
--- a/Source/web/WebFileSystemCallbacksImpl.cpp |
+++ b/Source/core/platform/chromium/support/WebFileSystemCallbacks.cpp |
@@ -1,5 +1,5 @@ |
/* |
- * Copyright (C) 2010 Google Inc. All rights reserved. |
+ * Copyright (C) 2013 Google Inc. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions are |
@@ -27,10 +27,10 @@ |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
+ |
#include "config.h" |
-#include "WebFileSystemCallbacksImpl.h" |
+#include "public/platform/WebFileSystemCallbacks.h" |
-#include "AsyncFileSystemChromium.h" |
#include "core/platform/AsyncFileSystemCallbacks.h" |
#include "core/platform/FileMetadata.h" |
#include "public/platform/WebFileInfo.h" |
@@ -38,92 +38,114 @@ |
#include "public/platform/WebFileSystemEntry.h" |
#include "public/platform/WebFileWriter.h" |
#include "public/platform/WebString.h" |
-#include "wtf/Vector.h" |
+#include "wtf/PassOwnPtr.h" |
+#include "wtf/PassRefPtr.h" |
+#include "wtf/RefCounted.h" |
using namespace WebCore; |
namespace WebKit { |
-WebFileSystemCallbacksImpl::WebFileSystemCallbacksImpl(PassOwnPtr<AsyncFileSystemCallbacks> callbacks) |
- : m_callbacks(callbacks) |
+class WebFileSystemCallbacksPrivate : public RefCounted<WebFileSystemCallbacksPrivate> { |
+public: |
+ static PassRefPtr<WebFileSystemCallbacksPrivate> create(const PassOwnPtr<AsyncFileSystemCallbacks>& callbacks) |
+ { |
+ return adoptRef(new WebFileSystemCallbacksPrivate(callbacks)); |
+ } |
+ |
+ AsyncFileSystemCallbacks* callbacks() { return m_callbacks.get(); } |
+ |
+private: |
+ WebFileSystemCallbacksPrivate(const PassOwnPtr<AsyncFileSystemCallbacks>& callbacks) : m_callbacks(callbacks) { } |
+ OwnPtr<AsyncFileSystemCallbacks> m_callbacks; |
+}; |
+ |
+WebFileSystemCallbacks::WebFileSystemCallbacks(const PassOwnPtr<AsyncFileSystemCallbacks>& callbacks) |
+{ |
+ m_private = WebFileSystemCallbacksPrivate::create(callbacks); |
+} |
+ |
+void WebFileSystemCallbacks::reset() |
{ |
- ASSERT(m_callbacks); |
+ m_private.reset(); |
} |
-WebFileSystemCallbacksImpl::~WebFileSystemCallbacksImpl() |
+void WebFileSystemCallbacks::assign(const WebFileSystemCallbacks& other) |
{ |
+ m_private = other.m_private; |
} |
-void WebFileSystemCallbacksImpl::didSucceed() |
+void WebFileSystemCallbacks::didSucceed() |
{ |
- m_callbacks->didSucceed(); |
- delete this; |
+ ASSERT(!m_private.isNull()); |
+ m_private->callbacks()->didSucceed(); |
+ m_private.reset(); |
} |
-void WebFileSystemCallbacksImpl::didReadMetadata(const WebFileInfo& webFileInfo) |
+void WebFileSystemCallbacks::didReadMetadata(const WebFileInfo& webFileInfo) |
{ |
+ ASSERT(!m_private.isNull()); |
FileMetadata fileMetadata; |
fileMetadata.modificationTime = webFileInfo.modificationTime; |
fileMetadata.length = webFileInfo.length; |
fileMetadata.type = static_cast<FileMetadata::Type>(webFileInfo.type); |
fileMetadata.platformPath = webFileInfo.platformPath; |
- m_callbacks->didReadMetadata(fileMetadata); |
- delete this; |
+ m_private->callbacks()->didReadMetadata(fileMetadata); |
+ m_private.reset(); |
} |
-void WebFileSystemCallbacksImpl::didCreateSnapshotFile(const WebFileInfo& webFileInfo) |
+void WebFileSystemCallbacks::didCreateSnapshotFile(const WebFileInfo& webFileInfo) |
{ |
+ ASSERT(!m_private.isNull()); |
// It's important to create a BlobDataHandle that refers to the platform file path prior |
// to return from this method so the underlying file will not be deleted. |
OwnPtr<BlobData> blobData = BlobData::create(); |
blobData->appendFile(webFileInfo.platformPath); |
RefPtr<BlobDataHandle> snapshotBlob = BlobDataHandle::create(blobData.release(), webFileInfo.length); |
- didCreateSnapshotFile(webFileInfo, snapshotBlob); |
-} |
-void WebFileSystemCallbacksImpl::didCreateSnapshotFile(const WebFileInfo& webFileInfo, PassRefPtr<WebCore::BlobDataHandle> snapshot) |
-{ |
FileMetadata fileMetadata; |
fileMetadata.modificationTime = webFileInfo.modificationTime; |
fileMetadata.length = webFileInfo.length; |
fileMetadata.type = static_cast<FileMetadata::Type>(webFileInfo.type); |
fileMetadata.platformPath = webFileInfo.platformPath; |
- m_callbacks->didCreateSnapshotFile(fileMetadata, snapshot); |
- delete this; |
+ m_private->callbacks()->didCreateSnapshotFile(fileMetadata, snapshotBlob); |
+ m_private.reset(); |
} |
-void WebFileSystemCallbacksImpl::didReadDirectory(const WebVector<WebFileSystemEntry>& entries, bool hasMore) |
+void WebFileSystemCallbacks::didReadDirectory(const WebVector<WebFileSystemEntry>& entries, bool hasMore) |
{ |
+ ASSERT(!m_private.isNull()); |
for (size_t i = 0; i < entries.size(); ++i) |
- m_callbacks->didReadDirectoryEntry(entries[i].name, entries[i].isDirectory); |
- m_callbacks->didReadDirectoryEntries(hasMore); |
- delete this; |
+ m_private->callbacks()->didReadDirectoryEntry(entries[i].name, entries[i].isDirectory); |
+ m_private->callbacks()->didReadDirectoryEntries(hasMore); |
+ m_private.reset(); |
} |
-void WebFileSystemCallbacksImpl::didOpenFileSystem(const WebString& name, const WebURL& rootURL) |
+void WebFileSystemCallbacks::didOpenFileSystem(const WebString& name, const WebURL& rootURL) |
{ |
- // This object is intended to delete itself on exit. |
- OwnPtr<WebFileSystemCallbacksImpl> callbacks = adoptPtr(this); |
- m_callbacks->didOpenFileSystem(name, rootURL, AsyncFileSystemChromium::create()); |
+ ASSERT(!m_private.isNull()); |
+ m_private->callbacks()->didOpenFileSystem(name, rootURL); |
+ m_private.reset(); |
} |
-void WebFileSystemCallbacksImpl::didCreateFileWriter(WebFileWriter* webFileWriter, long long length) |
+void WebFileSystemCallbacks::didCreateFileWriter(WebFileWriter* webFileWriter, long long length) |
{ |
- // This object is intended to delete itself on exit. |
- OwnPtr<WebFileSystemCallbacksImpl> callbacks = adoptPtr(this); |
- |
- m_callbacks->didCreateFileWriter(adoptPtr(webFileWriter), length); |
+ ASSERT(!m_private.isNull()); |
+ m_private->callbacks()->didCreateFileWriter(adoptPtr(webFileWriter), length); |
+ m_private.reset(); |
} |
-void WebFileSystemCallbacksImpl::didFail(WebFileError error) |
+void WebFileSystemCallbacks::didFail(WebFileError error) |
{ |
- m_callbacks->didFail(error); |
- delete this; |
+ ASSERT(!m_private.isNull()); |
+ m_private->callbacks()->didFail(error); |
+ m_private.reset(); |
} |
-bool WebFileSystemCallbacksImpl::shouldBlockUntilCompletion() const |
+bool WebFileSystemCallbacks::shouldBlockUntilCompletion() const |
{ |
- return m_callbacks->shouldBlockUntilCompletion(); |
+ ASSERT(!m_private.isNull()); |
+ return m_private->callbacks()->shouldBlockUntilCompletion(); |
} |
} // namespace WebKit |