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

Unified Diff: Source/modules/filesystem/SyncCallbackHelper.h

Issue 22673003: Replace EntryArraySync type by an EntrySync[] (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Add copyright Created 7 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/modules/filesystem/EntryArraySync.idl ('k') | Source/modules/modules.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/modules/filesystem/SyncCallbackHelper.h
diff --git a/Source/modules/filesystem/SyncCallbackHelper.h b/Source/modules/filesystem/SyncCallbackHelper.h
index 7ef045d065dd128df8caf1e84e3e67eeec851ced..875e4e62386bb5d754158f5fc5bea020b2f57417 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"
@@ -54,12 +56,12 @@ class EntrySync;
class FileEntrySync;
kinuko 2013/08/08 11:39:19 I guess actually we can remove all these forward d
// A helper template for FileSystemSync implementation.
-template <typename SuccessCallback, typename ObserverType, typename CallbackArg, typename ResultType>
-class SyncCallbackHelper {
- WTF_MAKE_NONCOPYABLE(SyncCallbackHelper);
+template <typename SuccessCallback, typename ObserverType, typename CallbackArg>
+class SyncCallbackHelperBase {
+ WTF_MAKE_NONCOPYABLE(SyncCallbackHelperBase);
public:
- typedef SyncCallbackHelper<SuccessCallback, ObserverType, CallbackArg, ResultType> HelperType;
- SyncCallbackHelper(ObserverType* observer = 0)
+ typedef SyncCallbackHelperBase<SuccessCallback, ObserverType, CallbackArg> HelperType;
+ SyncCallbackHelperBase(ObserverType* observer)
: m_observer(observer)
, m_successCallback(SuccessCallbackImpl::create(this))
, m_errorCallback(ErrorCallbackImpl::create(this))
@@ -68,26 +70,10 @@ public:
{
}
- PassRefPtr<ResultType> getResult(ExceptionState& es)
- {
- if (m_observer) {
- while (!m_completed) {
- if (!m_observer->waitForOperationToComplete()) {
- m_errorCode = FileError::ABORT_ERR;
- break;
- }
- }
- }
- if (m_errorCode)
- FileError::throwDOMException(es, m_errorCode);
-
- return m_result.release();
- }
-
PassRefPtr<SuccessCallback> successCallback() { return m_successCallback; }
PassRefPtr<ErrorCallback> errorCallback() { return m_errorCallback; }
-private:
+protected:
class SuccessCallbackImpl : public SuccessCallback {
public:
static PassRefPtr<SuccessCallbackImpl> create(HelperType* helper)
@@ -103,7 +89,7 @@ private:
virtual bool handleEvent(CallbackArg arg)
{
- m_helper->setResult(ResultType::create(arg));
+ m_helper->setResult(arg);
return true;
}
@@ -146,20 +132,85 @@ private:
m_completed = true;
}
- void setResult(PassRefPtr<ResultType> result)
+ void waitForCompletion(ExceptionState& es)
{
- m_result = result;
- m_completed = true;
+ if (m_observer) {
+ while (!m_completed) {
+ if (!m_observer->waitForOperationToComplete()) {
+ m_errorCode = FileError::ABORT_ERR;
+ break;
+ }
+ }
+ }
+ if (m_errorCode)
+ FileError::throwDOMException(es, m_errorCode);
}
+ virtual void setResult(CallbackArg) = 0;
+
ObserverType* m_observer;
RefPtr<SuccessCallbackImpl> m_successCallback;
RefPtr<ErrorCallbackImpl> m_errorCallback;
- RefPtr<ResultType> m_result;
FileError::ErrorCode m_errorCode;
bool m_completed;
};
+template <typename SuccessCallback, typename ObserverType, typename CallbackArg, typename ResultType>
kinuko 2013/08/08 11:39:19 Could this change become simpler if we define trai
+class SyncCallbackHelper : public SyncCallbackHelperBase<SuccessCallback, ObserverType, CallbackArg> {
+ WTF_MAKE_NONCOPYABLE(SyncCallbackHelper);
+public:
+ SyncCallbackHelper(ObserverType* observer = 0)
+ : SyncCallbackHelperBase<SuccessCallback, ObserverType, CallbackArg>(observer)
+ {
+ }
+
+ PassRefPtr<ResultType> getResult(ExceptionState& es)
+ {
+ SyncCallbackHelperBase<SuccessCallback, ObserverType, CallbackArg>::waitForCompletion(es);
+
+ return m_result.release();
+ }
+
+private:
+ virtual void setResult(CallbackArg result)
+ {
+ m_result = ResultType::create(result);
+ SyncCallbackHelperBase<SuccessCallback, ObserverType, CallbackArg>::m_completed = true;
+ }
+
+ RefPtr<ResultType> m_result;
+};
+
+// Partial specialization for EntryVector / EntrySyncVector.
+template <typename SuccessCallback, typename ObserverType>
+class SyncCallbackHelper<SuccessCallback, ObserverType, const EntryVector&, EntrySyncVector> : public SyncCallbackHelperBase<SuccessCallback, ObserverType, const EntryVector&> {
+ WTF_MAKE_NONCOPYABLE(SyncCallbackHelper);
+public:
+ SyncCallbackHelper(ObserverType* observer = 0)
+ : SyncCallbackHelperBase<SuccessCallback, ObserverType, const EntryVector&>(observer)
+ {
+ }
+
+ EntrySyncVector getResult(ExceptionState& es)
+ {
+ SyncCallbackHelperBase<SuccessCallback, ObserverType, const EntryVector&>::waitForCompletion(es);
+
+ return m_result;
+ }
+
+private:
+ virtual void setResult(const EntryVector& result)
+ {
+ size_t entryCount = result.size();
+ m_result.resize(entryCount);
+ for (size_t i = 0; i < entryCount; ++i)
+ m_result[i] = EntrySync::create(result[i].get());
+ SyncCallbackHelperBase<SuccessCallback, ObserverType, const EntryVector&>::m_completed = true;
+ }
+
+ EntrySyncVector m_result;
+};
+
struct EmptyType : public RefCounted<EmptyType> {
static PassRefPtr<EmptyType> create(EmptyType*)
{
@@ -175,7 +226,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;
« no previous file with comments | « Source/modules/filesystem/EntryArraySync.idl ('k') | Source/modules/modules.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698