| Index: src/FileSystemJsObject.cpp |
| =================================================================== |
| --- a/src/FileSystemJsObject.cpp |
| +++ b/src/FileSystemJsObject.cpp |
| @@ -23,38 +23,41 @@ |
| #include <AdblockPlus/JsValue.h> |
| #include "FileSystemJsObject.h" |
| #include "JsContext.h" |
| -#include "Thread.h" |
| +#include "Scheduler.h" |
| #include "Utils.h" |
| using namespace AdblockPlus; |
| namespace |
| { |
| - class IoThread : public Thread |
| + class IoTask |
| { |
| + protected: |
| + virtual void operator()() = 0; |
| + JsEnginePtr jsEngine; |
| + FileSystemPtr fileSystem; |
| + JsValuePtr callback; |
| + |
| public: |
| - IoThread(JsEnginePtr jsEngine, JsValuePtr callback) |
| - : Thread(true), jsEngine(jsEngine), fileSystem(jsEngine->GetFileSystem()), |
| + IoTask(JsEnginePtr jsEngine, JsValuePtr callback) |
| + : jsEngine(jsEngine), fileSystem(jsEngine->GetFileSystem()), |
| callback(callback) |
| { |
| } |
| - protected: |
| - JsEnginePtr jsEngine; |
| - FileSystemPtr fileSystem; |
| - JsValuePtr callback; |
| + virtual ~IoTask() {} |
| }; |
| - class ReadThread : public IoThread |
| + class ReadTask : public IoTask |
| { |
| public: |
| - ReadThread(JsEnginePtr jsEngine, JsValuePtr callback, |
| + ReadTask(JsEnginePtr jsEngine, JsValuePtr callback, |
| const std::string& path) |
| - : IoThread(jsEngine, callback), path(path) |
| + : IoTask(jsEngine, callback), path(path) |
| { |
| } |
| - void Run() |
| + void operator()() |
| { |
| std::string content; |
| std::string error; |
| @@ -85,16 +88,16 @@ |
| std::string path; |
| }; |
| - class WriteThread : public IoThread |
| + class WriteTask : public IoTask |
| { |
| public: |
| - WriteThread(JsEnginePtr jsEngine, JsValuePtr callback, |
| + WriteTask(JsEnginePtr jsEngine, JsValuePtr callback, |
| const std::string& path, const std::string& content) |
| - : IoThread(jsEngine, callback), path(path), content(content) |
| + : IoTask(jsEngine, callback), path(path), content(content) |
| { |
| } |
| - void Run() |
| + void operator()() |
| { |
| std::string error; |
| try |
| @@ -124,16 +127,16 @@ |
| std::string content; |
| }; |
| - class MoveThread : public IoThread |
| + class MoveTask : public IoTask |
| { |
| public: |
| - MoveThread(JsEnginePtr jsEngine, JsValuePtr callback, |
| + MoveTask(JsEnginePtr jsEngine, JsValuePtr callback, |
| const std::string& fromPath, const std::string& toPath) |
| - : IoThread(jsEngine, callback), fromPath(fromPath), toPath(toPath) |
| + : IoTask(jsEngine, callback), fromPath(fromPath), toPath(toPath) |
| { |
| } |
| - void Run() |
| + void operator()() |
| { |
| std::string error; |
| try |
| @@ -161,16 +164,16 @@ |
| std::string toPath; |
| }; |
| - class RemoveThread : public IoThread |
| + class RemoveTask : public IoTask |
| { |
| public: |
| - RemoveThread(JsEnginePtr jsEngine, JsValuePtr callback, |
| + RemoveTask(JsEnginePtr jsEngine, JsValuePtr callback, |
| const std::string& path) |
| - : IoThread(jsEngine, callback), path(path) |
| + : IoTask(jsEngine, callback), path(path) |
| { |
| } |
| - void Run() |
| + void operator()() |
| { |
| std::string error; |
| try |
| @@ -198,16 +201,16 @@ |
| }; |
| - class StatThread : public IoThread |
| + class StatTask : public IoTask |
| { |
| public: |
| - StatThread(JsEnginePtr jsEngine, JsValuePtr callback, |
| + StatTask(JsEnginePtr jsEngine, JsValuePtr callback, |
| const std::string& path) |
| - : IoThread(jsEngine, callback), path(path) |
| + : IoTask(jsEngine, callback), path(path) |
| { |
| } |
| - void Run() |
| + void operator()() |
| { |
| std::string error; |
| FileSystem::StatResult statResult; |
| @@ -253,9 +256,9 @@ |
| if (!converted[1]->IsFunction()) |
| return v8::ThrowException(Utils::ToV8String(isolate, |
| "Second argument to _fileSystem.read must be a function")); |
| - ReadThread* const readThread = new ReadThread(jsEngine, converted[1], |
| + const auto readTask = std::make_shared<ReadTask>(jsEngine, converted[1], |
| converted[0]->AsString()); |
| - readThread->Start(); |
| + AdblockPlus::Scheduler::StartImmediatelyInSingleUseThread(AdblockPlus::MakeHeapFunction(readTask)); |
| return v8::Undefined(); |
| } |
| @@ -271,9 +274,9 @@ |
| if (!converted[2]->IsFunction()) |
| return v8::ThrowException(Utils::ToV8String(isolate, |
| "Third argument to _fileSystem.write must be a function")); |
| - WriteThread* const writeThread = new WriteThread(jsEngine, converted[2], |
| + const auto writeTask = std::make_shared<WriteTask>(jsEngine, converted[2], |
| converted[0]->AsString(), converted[1]->AsString()); |
| - writeThread->Start(); |
| + AdblockPlus::Scheduler::StartImmediatelyInSingleUseThread(AdblockPlus::MakeHeapFunction(writeTask)); |
| return v8::Undefined(); |
| } |
| @@ -289,9 +292,9 @@ |
| if (!converted[2]->IsFunction()) |
| return v8::ThrowException(Utils::ToV8String(isolate, |
| "Third argument to _fileSystem.move must be a function")); |
| - MoveThread* const moveThread = new MoveThread(jsEngine, converted[2], |
| + const auto moveTask = std::make_shared<MoveTask>(jsEngine, converted[2], |
| converted[0]->AsString(), converted[1]->AsString()); |
| - moveThread->Start(); |
| + AdblockPlus::Scheduler::StartImmediatelyInSingleUseThread(AdblockPlus::MakeHeapFunction(moveTask)); |
| return v8::Undefined(); |
| } |
| @@ -307,9 +310,9 @@ |
| if (!converted[1]->IsFunction()) |
| return v8::ThrowException(Utils::ToV8String(isolate, |
| "Second argument to _fileSystem.remove must be a function")); |
| - RemoveThread* const removeThread = new RemoveThread(jsEngine, converted[1], |
| + const auto removeTask = std::make_shared<RemoveTask>(jsEngine, converted[1], |
| converted[0]->AsString()); |
| - removeThread->Start(); |
| + AdblockPlus::Scheduler::StartImmediatelyInSingleUseThread(AdblockPlus::MakeHeapFunction(removeTask)); |
| return v8::Undefined(); |
| } |
| @@ -325,9 +328,9 @@ |
| if (!converted[1]->IsFunction()) |
| return v8::ThrowException(Utils::ToV8String(isolate, |
| "Second argument to _fileSystem.stat must be a function")); |
| - StatThread* const statThread = new StatThread(jsEngine, converted[1], |
| + const auto statTask = std::make_shared<StatTask>(jsEngine, converted[1], |
| converted[0]->AsString()); |
| - statThread->Start(); |
| + AdblockPlus::Scheduler::StartImmediatelyInSingleUseThread(AdblockPlus::MakeHeapFunction(statTask)); |
| return v8::Undefined(); |
| } |