Index: src/FileSystemJsObject.cpp |
=================================================================== |
--- a/src/FileSystemJsObject.cpp |
+++ b/src/FileSystemJsObject.cpp |
@@ -33,24 +33,24 @@ |
namespace |
{ |
class ReadTask |
+ : public TaskFunctionInterface |
{ |
/** |
* Shared pointer keeps engine in existence for task thread. |
*/ |
- JsEnginePtr jsEngine; |
+ JsEngineInternal* engine; |
std::string path; |
V8PersistentNG<v8::Function> callbackFunction; |
public: |
ReadTask(JsEngineInternal* engine, const std::string& path, |
V8PersistentNG<v8::Function> callbackFunction) |
- : jsEngine(engine->shared_from_this()), path(path), |
+ : engine(engine), path(path), |
callbackFunction(callbackFunction) |
{} |
- void operator()() |
+ void operator()() override |
{ |
- JsEngineInternal* engine = ToInternal(jsEngine); |
std::string content; |
std::string error; |
// Read operation is long-lived. Do not lock engine during it. |
@@ -79,11 +79,12 @@ |
}; |
class WriteTask |
+ : public TaskFunctionInterface |
{ |
/** |
* Shared pointer keeps engine in existence for task thread. |
*/ |
- JsEnginePtr jsEngine; |
+ JsEngineInternal* engine; |
std::string path; |
std::string content; |
V8PersistentNG<v8::Function> callbackFunction; |
@@ -91,13 +92,12 @@ |
WriteTask(JsEngineInternal* engine, |
const std::string& path, const std::string& content, |
V8PersistentNG<v8::Function> callbackFunction) |
- : jsEngine(engine->shared_from_this()), path(path), content(content), |
+ : engine(engine), path(path), content(content), |
callbackFunction(callbackFunction) |
{} |
- void operator()() |
+ void operator()() override |
{ |
- JsEngineInternal* engine = ToInternal(jsEngine); |
std::string error; |
// Write operation is long-lived. Do not lock engine during it. |
try |
@@ -123,11 +123,12 @@ |
}; |
class MoveTask |
+ : public TaskFunctionInterface |
{ |
/** |
* Shared pointer keeps engine in existence for task thread. |
*/ |
- JsEnginePtr jsEngine; |
+ JsEngineInternal* engine; |
std::string fromPath; |
std::string toPath; |
V8PersistentNG<v8::Function> callbackFunction; |
@@ -135,13 +136,12 @@ |
public: |
MoveTask(JsEngineInternal* engine, const std::string& fromPath, const std::string& toPath, |
V8PersistentNG<v8::Function> callbackFunction) |
- : jsEngine(engine->shared_from_this()), fromPath(fromPath), toPath(toPath), |
+ : engine(engine), fromPath(fromPath), toPath(toPath), |
callbackFunction(callbackFunction) |
{} |
- void operator()() |
+ void operator()() override |
{ |
- JsEngineInternal* engine(ToInternal(jsEngine)); |
std::string error; |
try |
{ |
@@ -163,24 +163,24 @@ |
}; |
class RemoveTask |
+ : public TaskFunctionInterface |
{ |
/** |
* Shared pointer keeps engine in existence for task thread. |
*/ |
- JsEnginePtr jsEngine; |
+ JsEngineInternal *engine; |
std::string path; |
V8PersistentNG<v8::Function> callbackFunction; |
public: |
RemoveTask(JsEngineInternal *engine, const std::string& path, |
V8PersistentNG<v8::Function> callbackFunction) |
- : jsEngine(engine->shared_from_this()), path(path), |
+ : engine(engine), path(path), |
callbackFunction(callbackFunction) |
{} |
- void operator()() |
+ void operator()() override |
{ |
- JsEngineInternal* engine(ToInternal(jsEngine)); |
std::string error; |
try |
{ |
@@ -202,24 +202,24 @@ |
}; |
class StatTask |
+ : public TaskFunctionInterface |
{ |
/** |
* Shared pointer keeps engine in existence for task thread. |
*/ |
- JsEnginePtr jsEngine; |
+ JsEngineInternal *engine; |
std::string path; |
V8PersistentNG<v8::Function> callbackFunction; |
public: |
StatTask(JsEngineInternal* engine, const std::string& path, |
V8PersistentNG<v8::Function> callbackFunction) |
- : jsEngine(engine->shared_from_this()), path(path), |
+ : engine(engine), path(path), |
callbackFunction(callbackFunction) |
{} |
- void operator()() |
+ void operator()() override |
{ |
- JsEngineInternal* engine(ToInternal(jsEngine)); |
std::string error; |
FileSystem::StatResult statResult; |
try |
@@ -251,7 +251,6 @@ |
v8::Handle<v8::Value> ReadCallback(const v8::Arguments& arguments) |
{ |
auto engine(JsEngineInternal::ExtractEngine(arguments)); |
- std::shared_ptr<ReadTask> readTask; |
try |
{ |
if (arguments.Length() != 2) |
@@ -269,26 +268,23 @@ |
{ |
throw std::runtime_error("Second argument to _fileSystem.read must be a function"); |
} |
- readTask = std::make_shared<ReadTask>(engine, firstArgument, |
+ ReadTask readTask(engine, firstArgument, |
V8PersistentNG<v8::Function>(engine->GetIsolate(), v8::Local<v8::Function>::Cast(arguments[1]))); |
+ // Run the task |
+ engine->ScheduleTask(std::move(readTask), ImmediateSingleUseThread); |
+ return v8::Undefined(); |
} |
catch (const std::exception& e) |
{ |
return v8::ThrowException(engine->ToV8String(e.what())); |
} |
- // Run the task |
- engine->Schedule(AdblockPlus::MakeHeapFunction(readTask), AdblockPlus::ImmediateSingleUseThread); |
- return v8::Undefined(); |
} |
v8::Handle<v8::Value> WriteCallback(const v8::Arguments& arguments) |
{ |
auto engine(JsEngineInternal::ExtractEngine(arguments)); |
- std::shared_ptr<WriteTask> writeTask; |
try |
{ |
- v8::Isolate* isolate = arguments.GetIsolate(); |
- |
if (arguments.Length() != 3) |
{ |
throw std::exception("_fileSystem.write requires 3 parameters"); |
@@ -310,22 +306,21 @@ |
{ |
throw std::runtime_error("Third argument to _fileSystem.write must be a function"); |
} |
- writeTask = std::make_shared<WriteTask>(engine, firstArgument, secondArgument, |
+ // Run the task |
+ WriteTask writeTask(engine, firstArgument, secondArgument, |
V8PersistentNG<v8::Function>(engine->GetIsolate(), v8::Local<v8::Function>::Cast(arguments[2]))); |
+ engine->ScheduleTask(std::move(writeTask), ImmediateSingleUseThread); |
+ return v8::Undefined(); |
} |
catch (const std::exception& e) |
{ |
return v8::ThrowException(engine->ToV8String(e.what())); |
} |
- engine->Schedule(AdblockPlus::MakeHeapFunction(writeTask), AdblockPlus::ImmediateSingleUseThread); |
- return v8::Undefined(); |
} |
v8::Handle<v8::Value> MoveCallback(const v8::Arguments& arguments) |
{ |
auto engine(JsEngineInternal::ExtractEngine(arguments)); |
- std::shared_ptr<MoveTask> moveTask; |
- std::string firstArgument, secondArgument; |
try |
{ |
if (arguments.Length() != 3) |
@@ -333,6 +328,7 @@ |
throw std::runtime_error("_fileSystem.move requires 3 parameters"); |
} |
bool argumentIsString; |
+ std::string firstArgument, secondArgument; |
std::tie(argumentIsString, firstArgument) = ConvertString(arguments[0]); |
if (!argumentIsString) |
{ |
@@ -347,23 +343,21 @@ |
{ |
throw std::runtime_error("Third argument to _fileSystem.move must be a function"); |
} |
+ // Run the task |
+ MoveTask moveTask(engine, firstArgument, secondArgument, |
+ V8PersistentNG<v8::Function>(engine->GetIsolate(), v8::Local<v8::Function>::Cast(arguments[2]))); |
+ engine->ScheduleTask(std::move(moveTask), ImmediateSingleUseThread); |
+ return v8::Undefined(); |
} |
catch (const std::exception& e) |
{ |
return v8::ThrowException(engine->ToV8String(e.what())); |
} |
- // Run the task |
- moveTask = std::make_shared<MoveTask>(engine, firstArgument, secondArgument, |
- V8PersistentNG<v8::Function>(engine->GetIsolate(), v8::Local<v8::Function>::Cast(arguments[2]))); |
- engine->Schedule(AdblockPlus::MakeHeapFunction(moveTask), AdblockPlus::ImmediateSingleUseThread); |
- return v8::Undefined(); |
} |
v8::Handle<v8::Value> RemoveCallback(const v8::Arguments& arguments) |
{ |
auto engine(JsEngineInternal::ExtractEngine(arguments)); |
- std::shared_ptr<RemoveTask> removeTask; |
- std::string firstArgument; |
try |
{ |
if (arguments.Length() != 2) |
@@ -371,6 +365,7 @@ |
throw std::runtime_error("_fileSystem.remove requires 2 parameters"); |
} |
bool argumentIsString; |
+ std::string firstArgument; |
std::tie(argumentIsString, firstArgument) = ConvertString(arguments[0]); |
if (!argumentIsString) |
{ |
@@ -380,23 +375,21 @@ |
{ |
throw std::runtime_error("Second argument to _fileSystem.remove must be a function"); |
} |
+ // Run the task |
+ RemoveTask removeTask(engine, firstArgument, |
+ V8PersistentNG<v8::Function>(engine->GetIsolate(), v8::Local<v8::Function>::Cast(arguments[1]))); |
+ engine->ScheduleTask(std::move(removeTask), ImmediateSingleUseThread); |
+ return v8::Undefined(); |
} |
catch (const std::exception& e) |
{ |
return v8::ThrowException(engine->ToV8String(e.what())); |
} |
- // Run the task |
- removeTask = std::make_shared<RemoveTask>(engine, firstArgument, |
- V8PersistentNG<v8::Function>(engine->GetIsolate(), v8::Local<v8::Function>::Cast(arguments[1]))); |
- engine->Schedule(AdblockPlus::MakeHeapFunction(removeTask), AdblockPlus::ImmediateSingleUseThread); |
- return v8::Undefined(); |
} |
v8::Handle<v8::Value> StatCallback(const v8::Arguments& arguments) |
{ |
auto engine(JsEngineInternal::ExtractEngine(arguments)); |
- std::shared_ptr<StatTask> statTask; |
- std::string firstArgument; |
try |
{ |
if (arguments.Length() != 2) |
@@ -404,6 +397,7 @@ |
throw std::runtime_error("_fileSystem.stat requires 2 parameters"); |
} |
bool argumentIsString; |
+ std::string firstArgument; |
std::tie(argumentIsString, firstArgument) = ConvertString(arguments[0]); |
if (!argumentIsString) |
{ |
@@ -413,16 +407,16 @@ |
{ |
throw std::runtime_error("Second argument to _fileSystem.stat must be a function"); |
} |
+ // Run the task |
+ StatTask statTask(engine, firstArgument, |
+ V8PersistentNG<v8::Function>(engine->GetIsolate(), v8::Local<v8::Function>::Cast(arguments[1]))); |
+ engine->ScheduleTask(std::move(statTask), ImmediateSingleUseThread); |
+ return v8::Undefined(); |
} |
catch (const std::exception& e) |
{ |
return v8::ThrowException(engine->ToV8String(e.what())); |
} |
- // Run the task |
- statTask = std::make_shared<StatTask>(engine, firstArgument, |
- V8PersistentNG<v8::Function>(engine->GetIsolate(), v8::Local<v8::Function>::Cast(arguments[1]))); |
- engine->Schedule(AdblockPlus::MakeHeapFunction(statTask), AdblockPlus::ImmediateSingleUseThread); |
- return v8::Undefined(); |
} |
v8::Handle<v8::Value> ResolveCallback(const v8::Arguments& arguments) |