| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 3 * Copyright (C) 2013 Samsung Electronics. All rights reserved. | 3 * Copyright (C) 2013 Samsung Electronics. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
| 7 * met: | 7 * met: |
| 8 * | 8 * |
| 9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 EntrySyncVector result; | 70 EntrySyncVector result; |
| 71 size_t entryCount = entries.size(); | 71 size_t entryCount = entries.size(); |
| 72 result.reserveInitialCapacity(entryCount); | 72 result.reserveInitialCapacity(entryCount); |
| 73 for (size_t i = 0; i < entryCount; ++i) | 73 for (size_t i = 0; i < entryCount; ++i) |
| 74 result.uncheckedAppend(EntrySync::create(entries[i].get())); | 74 result.uncheckedAppend(EntrySync::create(entries[i].get())); |
| 75 return result; | 75 return result; |
| 76 } | 76 } |
| 77 }; | 77 }; |
| 78 | 78 |
| 79 // A helper template for FileSystemSync implementation. | 79 // A helper template for FileSystemSync implementation. |
| 80 template <typename SuccessCallback, typename ObserverType, typename CallbackArg,
typename ResultType> | 80 template <typename SuccessCallback, typename CallbackArg, typename ResultType> |
| 81 class SyncCallbackHelper { | 81 class SyncCallbackHelper { |
| 82 WTF_MAKE_NONCOPYABLE(SyncCallbackHelper); | 82 WTF_MAKE_NONCOPYABLE(SyncCallbackHelper); |
| 83 public: | 83 public: |
| 84 typedef SyncCallbackHelper<SuccessCallback, ObserverType, CallbackArg, Resul
tType> HelperType; | 84 typedef SyncCallbackHelper<SuccessCallback, CallbackArg, ResultType> HelperT
ype; |
| 85 typedef HelperResultType<ResultType, CallbackArg> ResultTypeTrait; | 85 typedef HelperResultType<ResultType, CallbackArg> ResultTypeTrait; |
| 86 typedef typename ResultTypeTrait::StorageType ResultStorageType; | 86 typedef typename ResultTypeTrait::StorageType ResultStorageType; |
| 87 typedef typename ResultTypeTrait::ReturnType ResultReturnType; | 87 typedef typename ResultTypeTrait::ReturnType ResultReturnType; |
| 88 | 88 |
| 89 SyncCallbackHelper(ObserverType* observer = 0) | 89 SyncCallbackHelper() |
| 90 : m_observer(observer) | 90 : m_successCallback(SuccessCallbackImpl::create(this)) |
| 91 , m_successCallback(SuccessCallbackImpl::create(this)) | |
| 92 , m_errorCallback(ErrorCallbackImpl::create(this)) | 91 , m_errorCallback(ErrorCallbackImpl::create(this)) |
| 93 , m_errorCode(FileError::OK) | 92 , m_errorCode(FileError::OK) |
| 94 , m_completed(false) | 93 , m_completed(false) |
| 95 { | 94 { |
| 96 } | 95 } |
| 97 | 96 |
| 98 ResultReturnType getResult(ExceptionState& es) | 97 ResultReturnType getResult(ExceptionState& es) |
| 99 { | 98 { |
| 100 if (m_observer) { | |
| 101 while (!m_completed) { | |
| 102 if (!m_observer->waitForOperationToComplete()) { | |
| 103 m_errorCode = FileError::ABORT_ERR; | |
| 104 break; | |
| 105 } | |
| 106 } | |
| 107 } | |
| 108 if (m_errorCode) | 99 if (m_errorCode) |
| 109 FileError::throwDOMException(es, m_errorCode); | 100 FileError::throwDOMException(es, m_errorCode); |
| 110 | 101 |
| 111 return m_result; | 102 return m_result; |
| 112 } | 103 } |
| 113 | 104 |
| 114 PassRefPtr<SuccessCallback> successCallback() { return m_successCallback; } | 105 PassRefPtr<SuccessCallback> successCallback() { return m_successCallback; } |
| 115 PassRefPtr<ErrorCallback> errorCallback() { return m_errorCallback; } | 106 PassRefPtr<ErrorCallback> errorCallback() { return m_errorCallback; } |
| 116 | 107 |
| 117 private: | 108 private: |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 m_errorCode = code; | 163 m_errorCode = code; |
| 173 m_completed = true; | 164 m_completed = true; |
| 174 } | 165 } |
| 175 | 166 |
| 176 void setResult(CallbackArg result) | 167 void setResult(CallbackArg result) |
| 177 { | 168 { |
| 178 m_result = ResultTypeTrait::createFromCallbackArg(result); | 169 m_result = ResultTypeTrait::createFromCallbackArg(result); |
| 179 m_completed = true; | 170 m_completed = true; |
| 180 } | 171 } |
| 181 | 172 |
| 182 ObserverType* m_observer; | |
| 183 RefPtr<SuccessCallbackImpl> m_successCallback; | 173 RefPtr<SuccessCallbackImpl> m_successCallback; |
| 184 RefPtr<ErrorCallbackImpl> m_errorCallback; | 174 RefPtr<ErrorCallbackImpl> m_errorCallback; |
| 185 ResultStorageType m_result; | 175 ResultStorageType m_result; |
| 186 FileError::ErrorCode m_errorCode; | 176 FileError::ErrorCode m_errorCode; |
| 187 bool m_completed; | 177 bool m_completed; |
| 188 }; | 178 }; |
| 189 | 179 |
| 190 struct EmptyType : public RefCounted<EmptyType> { | 180 struct EmptyType : public RefCounted<EmptyType> { |
| 191 static PassRefPtr<EmptyType> create(EmptyType*) | 181 static PassRefPtr<EmptyType> create(EmptyType*) |
| 192 { | 182 { |
| 193 return 0; | 183 return 0; |
| 194 } | 184 } |
| 195 }; | 185 }; |
| 196 | 186 |
| 197 struct EmptyObserverType { | 187 typedef SyncCallbackHelper<EntryCallback, Entry*, EntrySync> EntrySyncCallbackHe
lper; |
| 198 bool waitForOperationToComplete() | 188 typedef SyncCallbackHelper<EntriesCallback, const EntryVector&, EntrySyncVector>
EntriesSyncCallbackHelper; |
| 199 { | 189 typedef SyncCallbackHelper<MetadataCallback, Metadata*, Metadata> MetadataSyncCa
llbackHelper; |
| 200 return false; | 190 typedef SyncCallbackHelper<VoidCallback, EmptyType*, EmptyType> VoidSyncCallback
Helper; |
| 201 } | 191 typedef SyncCallbackHelper<FileSystemCallback, DOMFileSystem*, DOMFileSystemSync
> FileSystemSyncCallbackHelper; |
| 202 }; | |
| 203 | |
| 204 typedef SyncCallbackHelper<EntryCallback, AsyncFileSystem, Entry*, EntrySync> En
trySyncCallbackHelper; | |
| 205 typedef SyncCallbackHelper<EntriesCallback, AsyncFileSystem, const EntryVector&,
EntrySyncVector> EntriesSyncCallbackHelper; | |
| 206 typedef SyncCallbackHelper<MetadataCallback, AsyncFileSystem, Metadata*, Metadat
a> MetadataSyncCallbackHelper; | |
| 207 typedef SyncCallbackHelper<VoidCallback, AsyncFileSystem, EmptyType*, EmptyType>
VoidSyncCallbackHelper; | |
| 208 typedef SyncCallbackHelper<FileSystemCallback, EmptyObserverType, DOMFileSystem*
, DOMFileSystemSync> FileSystemSyncCallbackHelper; | |
| 209 | 192 |
| 210 } // namespace WebCore | 193 } // namespace WebCore |
| 211 | 194 |
| 212 #endif // SyncCallbackHelper_h | 195 #endif // SyncCallbackHelper_h |
| OLD | NEW |