diff options
author | Steve Block <steveblock@google.com> | 2011-06-08 08:26:01 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-06-08 08:26:01 -0700 |
commit | 3742ac093d35d923c81693096ab6671e9b147700 (patch) | |
tree | c2add9100f789dad45ef1ec5328bddde02c47a4c /Source/WebCore/fileapi/DOMFileSystemSync.cpp | |
parent | 901401d90459bc22580842455d4588b9a697514d (diff) | |
parent | e5926f4a0d6adc9ad4a75824129f117181953560 (diff) | |
download | external_webkit-3742ac093d35d923c81693096ab6671e9b147700.zip external_webkit-3742ac093d35d923c81693096ab6671e9b147700.tar.gz external_webkit-3742ac093d35d923c81693096ab6671e9b147700.tar.bz2 |
Merge changes I55c6d71a,Ifb3277d4,Ia1b847a2,I7ba9cf3f,Ida2b2a8a,I1280ec90,I72f818d5,I2e3b588b,I9a4e6289,Ia724c78b,Icd8612c8,Ie31b15d7,Ie125edae,I77941a88,I89dae78b,I3516e5ca,I1a4c17b5,I2c4ecc1a,I9c8e6537,Ifac13115,Ie1f80e09,Ia541ed77,I60ce9d78
* changes:
Merge WebKit at r82507: Update ThirdPartyProject.prop
Merge WebKit at r82507: Cherry-pick change r88166 to add INSPECTOR guards to ScriptProfiler
Merge WebKit at r82507: Work around a V8 bug
Merge WebKit at r82507: JNIType renamed to JavaType
Merge WebKit at r82507: IconDatabaseClient interface expanded
Merge WebKit at r82507: Don't use new loss-free code path in HTMLCanvasElement::toDataURL()
Merge WebKit at r82507: IcondDatabaseBase::iconForPageURL() renamed
Merge WebKit at r82507: IconDatabaseBase::Open() signature changed
Merge WebKit at r82507: Node::isContentEditable() renamed
Merge WebKit at r82507: Use icon database through IconDatabaseBase
Merge WebKit at r82507: toInputElement() is now a member of Node
Merge WebKit at r82507: FrameLoaderClient::objectContentType() signature changed
Merge WebKit at r82507: StringImpl::computeHash() removed
Merge WebKit at r82507: Stub out FontPlatformData::setOrientation()
Merge WebKit at r82507: Path::strokeBoundingRect() is now const
Merge WebKit at r82507: Add missing UnusedParam.h include in ApplicationCacheGroup.cpp
Merge WebKit at r82507: Continue to use Android's version of FontPlatformData.h
Merge WebKit at r82507: Update signature of FontCustomPlatformData::fontPlatformData()
Merge WebKit at r82507: Fix conflicts due to JNI refactoring
Merge WebKit at r82507: Fix conflicts due to new StorageTracker
Merge WebKit at r82507: Fix conflicts
Merge WebKit at r82507: Fix makefiles
Merge WebKit at r82507: Initial merge by git
Diffstat (limited to 'Source/WebCore/fileapi/DOMFileSystemSync.cpp')
-rw-r--r-- | Source/WebCore/fileapi/DOMFileSystemSync.cpp | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/Source/WebCore/fileapi/DOMFileSystemSync.cpp b/Source/WebCore/fileapi/DOMFileSystemSync.cpp index 5ae7545..0d26bb6 100644 --- a/Source/WebCore/fileapi/DOMFileSystemSync.cpp +++ b/Source/WebCore/fileapi/DOMFileSystemSync.cpp @@ -33,6 +33,8 @@ #if ENABLE(FILE_SYSTEM) +#include "AsyncFileSystem.h" +#include "AsyncFileWriter.h" #include "DOMFilePath.h" #include "DirectoryEntrySync.h" #include "ErrorCallback.h" @@ -40,6 +42,7 @@ #include "FileEntrySync.h" #include "FileError.h" #include "FileException.h" +#include "FileMetadata.h" #include "FileSystemCallbacks.h" #include "FileWriterBaseCallback.h" #include "FileWriterSync.h" @@ -67,10 +70,105 @@ PassRefPtr<DirectoryEntrySync> DOMFileSystemSync::root() return DirectoryEntrySync::create(this, DOMFilePath::root); } +namespace { + +class GetPathHelper : public AsyncFileSystemCallbacks { +public: + class GetPathResult : public RefCounted<GetPathResult> { + public: + static PassRefPtr<GetPathResult> create() + { + return adoptRef(new GetPathResult()); + } + + bool m_failed; + int m_code; + String m_path; + + private: + GetPathResult() + : m_failed(false) + , m_code(0) + { + } + + ~GetPathResult() + { + } + friend class WTF::RefCounted<GetPathResult>; + }; + + static PassOwnPtr<GetPathHelper> create(PassRefPtr<GetPathResult> result) + { + return adoptPtr(new GetPathHelper(result)); + } + + virtual void didSucceed() + { + ASSERT_NOT_REACHED(); + } + + virtual void didOpenFileSystem(const String&, PassOwnPtr<AsyncFileSystem>) + { + ASSERT_NOT_REACHED(); + } + + virtual void didReadDirectoryEntry(const String&, bool) + { + ASSERT_NOT_REACHED(); + } + + virtual void didReadDirectoryEntries(bool) + { + ASSERT_NOT_REACHED(); + } + + virtual void didCreateFileWriter(PassOwnPtr<AsyncFileWriter>, long long) + { + ASSERT_NOT_REACHED(); + } + + virtual void didFail(int code) + { + m_result->m_failed = true; + m_result->m_code = code; + } + + virtual ~GetPathHelper() + { + } + + void didReadMetadata(const FileMetadata& metadata) + { + m_result->m_path = metadata.platformPath; + } +private: + GetPathHelper(PassRefPtr<GetPathResult> result) + : m_result(result) + { + } + + RefPtr<GetPathResult> m_result; +}; + +} // namespace + PassRefPtr<File> DOMFileSystemSync::createFile(const FileEntrySync* fileEntry, ExceptionCode& ec) { ec = 0; String platformPath = m_asyncFileSystem->virtualToPlatformPath(fileEntry->fullPath()); + RefPtr<GetPathHelper::GetPathResult> result(GetPathHelper::GetPathResult::create()); + m_asyncFileSystem->readMetadata(platformPath, GetPathHelper::create(result)); + if (!m_asyncFileSystem->waitForOperationToComplete()) { + ec = FileException::ABORT_ERR; + return 0; + } + if (result->m_failed) { + ec = result->m_code; + return 0; + } + if (!result->m_path.isEmpty()) + platformPath = result->m_path; return File::create(platformPath); } |