Chromium Code Reviews| Index: Source/modules/filesystem/SyncCallbackHelper.h |
| diff --git a/Source/modules/filesystem/SyncCallbackHelper.h b/Source/modules/filesystem/SyncCallbackHelper.h |
| index 7ef045d065dd128df8caf1e84e3e67eeec851ced..c1eedc7a9efa3f6903056bd667a4de61526f2204 100644 |
| --- a/Source/modules/filesystem/SyncCallbackHelper.h |
| +++ b/Source/modules/filesystem/SyncCallbackHelper.h |
| @@ -1,5 +1,6 @@ |
| /* |
| * Copyright (C) 2010 Google Inc. All rights reserved. |
| + * Copyright (C) 2013 Samsung Electronics. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are |
| @@ -35,9 +36,10 @@ |
| #include "core/fileapi/FileError.h" |
| #include "core/html/VoidCallback.h" |
| #include "modules/filesystem/DirectoryEntry.h" |
| +#include "modules/filesystem/DirectoryReaderSync.h" |
| #include "modules/filesystem/EntriesCallback.h" |
| -#include "modules/filesystem/EntryArraySync.h" |
| #include "modules/filesystem/EntryCallback.h" |
| +#include "modules/filesystem/EntrySync.h" |
| #include "modules/filesystem/ErrorCallback.h" |
| #include "modules/filesystem/FileEntry.h" |
| #include "modules/filesystem/FileSystemCallback.h" |
| @@ -47,11 +49,32 @@ |
| namespace WebCore { |
| -class AsyncFileSystem; |
| -class DirectoryEntrySync; |
| -class EntryArraySync; |
| -class EntrySync; |
| -class FileEntrySync; |
| +template <typename ResultType, typename CallbackArg> |
| +struct HelperResultType { |
|
kinuko
2013/08/09 02:15:54
nit: these helper classes can be in an anonymous n
do-not-use
2013/08/09 06:39:21
This would apparently be against coding style:
"So
|
| + typedef PassRefPtr<ResultType> ReturnType; |
| + typedef RefPtr<ResultType> StorageType; |
| + |
| + static ReturnType createFromCallbackArg(CallbackArg argument) |
| + { |
| + return ResultType::create(argument); |
| + } |
| +}; |
| + |
| +template <> |
| +struct HelperResultType<EntrySyncVector, const EntryVector&> { |
| + typedef EntrySyncVector ReturnType; |
| + typedef EntrySyncVector StorageType; |
| + |
| + static EntrySyncVector createFromCallbackArg(const EntryVector& entries) |
| + { |
| + EntrySyncVector result; |
| + size_t entryCount = entries.size(); |
| + result.reserveInitialCapacity(entryCount); |
| + for (size_t i = 0; i < entryCount; ++i) |
| + result.uncheckedAppend(EntrySync::create(entries[i].get())); |
| + return result; |
| + } |
| +}; |
| // A helper template for FileSystemSync implementation. |
| template <typename SuccessCallback, typename ObserverType, typename CallbackArg, typename ResultType> |
| @@ -59,6 +82,10 @@ class SyncCallbackHelper { |
| WTF_MAKE_NONCOPYABLE(SyncCallbackHelper); |
| public: |
| typedef SyncCallbackHelper<SuccessCallback, ObserverType, CallbackArg, ResultType> HelperType; |
| + typedef HelperResultType<ResultType, CallbackArg> ResultTypeTrait; |
| + typedef typename ResultTypeTrait::StorageType ResultStorageType; |
| + typedef typename ResultTypeTrait::ReturnType ResultReturnType; |
| + |
| SyncCallbackHelper(ObserverType* observer = 0) |
| : m_observer(observer) |
| , m_successCallback(SuccessCallbackImpl::create(this)) |
| @@ -68,7 +95,7 @@ public: |
| { |
| } |
| - PassRefPtr<ResultType> getResult(ExceptionState& es) |
| + ResultReturnType getResult(ExceptionState& es) |
| { |
| if (m_observer) { |
| while (!m_completed) { |
| @@ -81,7 +108,7 @@ public: |
| if (m_errorCode) |
| FileError::throwDOMException(es, m_errorCode); |
| - return m_result.release(); |
| + return m_result; |
| } |
| PassRefPtr<SuccessCallback> successCallback() { return m_successCallback; } |
| @@ -103,7 +130,7 @@ private: |
| virtual bool handleEvent(CallbackArg arg) |
| { |
| - m_helper->setResult(ResultType::create(arg)); |
| + m_helper->setResult(arg); |
| return true; |
| } |
| @@ -146,16 +173,16 @@ private: |
| m_completed = true; |
| } |
| - void setResult(PassRefPtr<ResultType> result) |
| + void setResult(CallbackArg result) |
| { |
| - m_result = result; |
| + m_result = ResultTypeTrait::createFromCallbackArg(result); |
| m_completed = true; |
| } |
| ObserverType* m_observer; |
| RefPtr<SuccessCallbackImpl> m_successCallback; |
| RefPtr<ErrorCallbackImpl> m_errorCallback; |
| - RefPtr<ResultType> m_result; |
| + ResultStorageType m_result; |
| FileError::ErrorCode m_errorCode; |
| bool m_completed; |
| }; |
| @@ -175,7 +202,7 @@ struct EmptyObserverType { |
| }; |
| typedef SyncCallbackHelper<EntryCallback, AsyncFileSystem, Entry*, EntrySync> EntrySyncCallbackHelper; |
| -typedef SyncCallbackHelper<EntriesCallback, AsyncFileSystem, const EntryVector&, EntryArraySync> EntriesSyncCallbackHelper; |
| +typedef SyncCallbackHelper<EntriesCallback, AsyncFileSystem, const EntryVector&, EntrySyncVector> EntriesSyncCallbackHelper; |
| typedef SyncCallbackHelper<MetadataCallback, AsyncFileSystem, Metadata*, Metadata> MetadataSyncCallbackHelper; |
| typedef SyncCallbackHelper<VoidCallback, AsyncFileSystem, EmptyType*, EmptyType> VoidSyncCallbackHelper; |
| typedef SyncCallbackHelper<FileSystemCallback, EmptyObserverType, DOMFileSystem*, DOMFileSystemSync> FileSystemSyncCallbackHelper; |