Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(251)

Side by Side Diff: Source/modules/filesystem/SyncCallbackHelper.h

Issue 23704004: Make WebFileSystemCallbacks not self-destruct, deprecate AsyncFileSystem (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « Source/modules/filesystem/FileSystemCallbacks.cpp ('k') | Source/modules/filesystem/WorkerGlobalScopeFileSystem.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698