Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: src/FileSystemJsObject.cpp

Issue 29500602: Issue 5450 - introduce the Platform class (Closed) Base URL: https://github.com/adblockplus/libadblockplus.git
Patch Set: rebase Created July 31, 2017, 12:53 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * This file is part of Adblock Plus <https://adblockplus.org/>, 2 * This file is part of Adblock Plus <https://adblockplus.org/>,
3 * Copyright (C) 2006-2017 eyeo GmbH 3 * Copyright (C) 2006-2017 eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details. 12 * GNU General Public License for more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License 14 * You should have received a copy of the GNU General Public License
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>.
16 */ 16 */
17 17
18 #include <AdblockPlus/IFileSystem.h> 18 #include <AdblockPlus/IFileSystem.h>
19 #include <stdexcept> 19 #include <stdexcept>
20 #include <sstream> 20 #include <sstream>
21 #include <vector> 21 #include <vector>
22 22
23 #include <AdblockPlus/JsValue.h> 23 #include <AdblockPlus/JsValue.h>
24 #include "FileSystemJsObject.h" 24 #include "FileSystemJsObject.h"
25 #include "JsContext.h" 25 #include "JsContext.h"
26 #include "Utils.h" 26 #include "Utils.h"
27 #include <AdblockPlus/Platform.h>
27 28
28 using namespace AdblockPlus; 29 using namespace AdblockPlus;
29 using AdblockPlus::Utils::ThrowExceptionInJS; 30 using AdblockPlus::Utils::ThrowExceptionInJS;
30 31
31 namespace 32 namespace
32 { 33 {
33 void ReadCallback(const v8::FunctionCallbackInfo<v8::Value>& arguments) 34 void ReadCallback(const v8::FunctionCallbackInfo<v8::Value>& arguments)
34 { 35 {
35 AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::FromArguments(arg uments); 36 AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::FromArguments(arg uments);
36 AdblockPlus::JsValueList converted = jsEngine->ConvertArguments(arguments); 37 AdblockPlus::JsValueList converted = jsEngine->ConvertArguments(arguments);
37 38
38 v8::Isolate* isolate = arguments.GetIsolate(); 39 v8::Isolate* isolate = arguments.GetIsolate();
39 if (converted.size() != 2) 40 if (converted.size() != 2)
40 return ThrowExceptionInJS(isolate, "_fileSystem.read requires 2 parameters "); 41 return ThrowExceptionInJS(isolate, "_fileSystem.read requires 2 parameters ");
41 if (!converted[1].IsFunction()) 42 if (!converted[1].IsFunction())
42 return ThrowExceptionInJS(isolate, "Second argument to _fileSystem.read mu st be a function"); 43 return ThrowExceptionInJS(isolate, "Second argument to _fileSystem.read mu st be a function");
43 44
44 JsValueList values; 45 JsValueList values;
45 values.push_back(converted[1]); 46 values.push_back(converted[1]);
46 auto weakCallback = jsEngine->StoreJsValues(values); 47 auto weakCallback = jsEngine->StoreJsValues(values);
47 std::weak_ptr<JsEngine> weakJsEngine = jsEngine; 48 std::weak_ptr<JsEngine> weakJsEngine = jsEngine;
48 jsEngine->GetAsyncFileSystem()->Read(converted[0].AsString(), 49 jsEngine->GetPlatform().GetFileSystem().Read(converted[0].AsString(),
49 [weakJsEngine, weakCallback] 50 [weakJsEngine, weakCallback]
50 (IFileSystem::IOBuffer&& content, const std::string& error) 51 (IFileSystem::IOBuffer&& content, const std::string& error)
51 { 52 {
52 auto jsEngine = weakJsEngine.lock(); 53 auto jsEngine = weakJsEngine.lock();
53 if (!jsEngine) 54 if (!jsEngine)
54 return; 55 return;
55 56
56 const JsContext context(*jsEngine); 57 const JsContext context(*jsEngine);
57 auto result = jsEngine->NewObject(); 58 auto result = jsEngine->NewObject();
58 result.SetStringBufferProperty("content", std::move(content)); 59 result.SetStringBufferProperty("content", std::move(content));
(...skipping 12 matching lines...) Expand all
71 if (converted.size() != 3) 72 if (converted.size() != 3)
72 return ThrowExceptionInJS(isolate, "_fileSystem.write requires 3 parameter s"); 73 return ThrowExceptionInJS(isolate, "_fileSystem.write requires 3 parameter s");
73 if (!converted[2].IsFunction()) 74 if (!converted[2].IsFunction())
74 return ThrowExceptionInJS(isolate, "Third argument to _fileSystem.write mu st be a function"); 75 return ThrowExceptionInJS(isolate, "Third argument to _fileSystem.write mu st be a function");
75 76
76 JsValueList values; 77 JsValueList values;
77 values.push_back(converted[2]); 78 values.push_back(converted[2]);
78 auto weakCallback = jsEngine->StoreJsValues(values); 79 auto weakCallback = jsEngine->StoreJsValues(values);
79 std::weak_ptr<JsEngine> weakJsEngine = jsEngine; 80 std::weak_ptr<JsEngine> weakJsEngine = jsEngine;
80 auto content = converted[1].AsStringBuffer(); 81 auto content = converted[1].AsStringBuffer();
81 jsEngine->GetAsyncFileSystem()->Write(converted[0].AsString(), 82 jsEngine->GetPlatform().GetFileSystem().Write(converted[0].AsString(),
82 content, 83 content,
83 [weakJsEngine, weakCallback](const std::string& error) 84 [weakJsEngine, weakCallback](const std::string& error)
84 { 85 {
85 auto jsEngine = weakJsEngine.lock(); 86 auto jsEngine = weakJsEngine.lock();
86 if (!jsEngine) 87 if (!jsEngine)
87 return; 88 return;
88 89
89 const JsContext context(*jsEngine); 90 const JsContext context(*jsEngine);
90 JsValueList params; 91 JsValueList params;
91 if (!error.empty()) 92 if (!error.empty())
(...skipping 10 matching lines...) Expand all
102 v8::Isolate* isolate = arguments.GetIsolate(); 103 v8::Isolate* isolate = arguments.GetIsolate();
103 if (converted.size() != 3) 104 if (converted.size() != 3)
104 return ThrowExceptionInJS(isolate, "_fileSystem.move requires 3 parameters "); 105 return ThrowExceptionInJS(isolate, "_fileSystem.move requires 3 parameters ");
105 if (!converted[2].IsFunction()) 106 if (!converted[2].IsFunction())
106 return ThrowExceptionInJS(isolate, "Third argument to _fileSystem.move mus t be a function"); 107 return ThrowExceptionInJS(isolate, "Third argument to _fileSystem.move mus t be a function");
107 108
108 JsValueList values; 109 JsValueList values;
109 values.push_back(converted[2]); 110 values.push_back(converted[2]);
110 auto weakCallback = jsEngine->StoreJsValues(values); 111 auto weakCallback = jsEngine->StoreJsValues(values);
111 std::weak_ptr<JsEngine> weakJsEngine = jsEngine; 112 std::weak_ptr<JsEngine> weakJsEngine = jsEngine;
112 jsEngine->GetAsyncFileSystem()->Move(converted[0].AsString(), 113 jsEngine->GetPlatform().GetFileSystem().Move(converted[0].AsString(),
113 converted[1].AsString(), 114 converted[1].AsString(),
114 [weakJsEngine, weakCallback](const std::string& error) 115 [weakJsEngine, weakCallback](const std::string& error)
115 { 116 {
116 auto jsEngine = weakJsEngine.lock(); 117 auto jsEngine = weakJsEngine.lock();
117 if (!jsEngine) 118 if (!jsEngine)
118 return; 119 return;
119 120
120 const JsContext context(*jsEngine); 121 const JsContext context(*jsEngine);
121 JsValueList params; 122 JsValueList params;
122 if (!error.empty()) 123 if (!error.empty())
(...skipping 10 matching lines...) Expand all
133 v8::Isolate* isolate = arguments.GetIsolate(); 134 v8::Isolate* isolate = arguments.GetIsolate();
134 if (converted.size() != 2) 135 if (converted.size() != 2)
135 return ThrowExceptionInJS(isolate, "_fileSystem.remove requires 2 paramete rs"); 136 return ThrowExceptionInJS(isolate, "_fileSystem.remove requires 2 paramete rs");
136 if (!converted[1].IsFunction()) 137 if (!converted[1].IsFunction())
137 return ThrowExceptionInJS(isolate, "Second argument to _fileSystem.remove must be a function"); 138 return ThrowExceptionInJS(isolate, "Second argument to _fileSystem.remove must be a function");
138 139
139 JsValueList values; 140 JsValueList values;
140 values.push_back(converted[1]); 141 values.push_back(converted[1]);
141 auto weakCallback = jsEngine->StoreJsValues(values); 142 auto weakCallback = jsEngine->StoreJsValues(values);
142 std::weak_ptr<JsEngine> weakJsEngine = jsEngine; 143 std::weak_ptr<JsEngine> weakJsEngine = jsEngine;
143 jsEngine->GetAsyncFileSystem()->Remove(converted[0].AsString(), 144 jsEngine->GetPlatform().GetFileSystem().Remove(converted[0].AsString(),
144 [weakJsEngine, weakCallback](const std::string& error) 145 [weakJsEngine, weakCallback](const std::string& error)
145 { 146 {
146 auto jsEngine = weakJsEngine.lock(); 147 auto jsEngine = weakJsEngine.lock();
147 if (!jsEngine) 148 if (!jsEngine)
148 return; 149 return;
149 150
150 const JsContext context(*jsEngine); 151 const JsContext context(*jsEngine);
151 JsValueList params; 152 JsValueList params;
152 if (!error.empty()) 153 if (!error.empty())
153 params.push_back(jsEngine->NewValue(error)); 154 params.push_back(jsEngine->NewValue(error));
154 jsEngine->TakeJsValues(weakCallback)[0].Call(params); 155 jsEngine->TakeJsValues(weakCallback)[0].Call(params);
155 }); 156 });
156 } 157 }
157 158
158 void StatCallback(const v8::FunctionCallbackInfo<v8::Value>& arguments) 159 void StatCallback(const v8::FunctionCallbackInfo<v8::Value>& arguments)
159 { 160 {
160 AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::FromArguments(arg uments); 161 AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::FromArguments(arg uments);
161 AdblockPlus::JsValueList converted = jsEngine->ConvertArguments(arguments); 162 AdblockPlus::JsValueList converted = jsEngine->ConvertArguments(arguments);
162 163
163 v8::Isolate* isolate = arguments.GetIsolate(); 164 v8::Isolate* isolate = arguments.GetIsolate();
164 if (converted.size() != 2) 165 if (converted.size() != 2)
165 return ThrowExceptionInJS(isolate, "_fileSystem.stat requires 2 parameters "); 166 return ThrowExceptionInJS(isolate, "_fileSystem.stat requires 2 parameters ");
166 if (!converted[1].IsFunction()) 167 if (!converted[1].IsFunction())
167 return ThrowExceptionInJS(isolate, "Second argument to _fileSystem.stat mu st be a function"); 168 return ThrowExceptionInJS(isolate, "Second argument to _fileSystem.stat mu st be a function");
168 169
169 JsValueList values; 170 JsValueList values;
170 values.push_back(converted[1]); 171 values.push_back(converted[1]);
171 auto weakCallback = jsEngine->StoreJsValues(values); 172 auto weakCallback = jsEngine->StoreJsValues(values);
172 std::weak_ptr<JsEngine> weakJsEngine = jsEngine; 173 std::weak_ptr<JsEngine> weakJsEngine = jsEngine;
173 jsEngine->GetAsyncFileSystem()->Stat(converted[0].AsString(), 174 jsEngine->GetPlatform().GetFileSystem().Stat(converted[0].AsString(),
174 [weakJsEngine, weakCallback] 175 [weakJsEngine, weakCallback]
175 (const IFileSystem::StatResult& statResult, const std::string& error) 176 (const IFileSystem::StatResult& statResult, const std::string& error)
176 { 177 {
177 auto jsEngine = weakJsEngine.lock(); 178 auto jsEngine = weakJsEngine.lock();
178 if (!jsEngine) 179 if (!jsEngine)
179 return; 180 return;
180 181
181 const JsContext context(*jsEngine); 182 const JsContext context(*jsEngine);
182 auto result = jsEngine->NewObject(); 183 auto result = jsEngine->NewObject();
183 184
(...skipping 12 matching lines...) Expand all
196 197
197 void ResolveCallback(const v8::FunctionCallbackInfo<v8::Value>& arguments) 198 void ResolveCallback(const v8::FunctionCallbackInfo<v8::Value>& arguments)
198 { 199 {
199 AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::FromArguments(arg uments); 200 AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::FromArguments(arg uments);
200 AdblockPlus::JsValueList converted = jsEngine->ConvertArguments(arguments); 201 AdblockPlus::JsValueList converted = jsEngine->ConvertArguments(arguments);
201 202
202 v8::Isolate* isolate = arguments.GetIsolate(); 203 v8::Isolate* isolate = arguments.GetIsolate();
203 if (converted.size() != 1) 204 if (converted.size() != 1)
204 return ThrowExceptionInJS(isolate, "_fileSystem.resolve requires 1 paramet er"); 205 return ThrowExceptionInJS(isolate, "_fileSystem.resolve requires 1 paramet er");
205 206
206 std::string resolved = jsEngine->GetAsyncFileSystem()->Resolve(converted[0]. AsString()); 207 std::string resolved = jsEngine->GetPlatform().GetFileSystem().Resolve(conve rted[0].AsString());
207 arguments.GetReturnValue().Set(Utils::ToV8String(isolate, resolved)); 208 arguments.GetReturnValue().Set(Utils::ToV8String(isolate, resolved));
208 } 209 }
209 } 210 }
210 211
211 212
212 JsValue& FileSystemJsObject::Setup(JsEngine& jsEngine, JsValue& obj) 213 JsValue& FileSystemJsObject::Setup(JsEngine& jsEngine, JsValue& obj)
213 { 214 {
214 obj.SetProperty("read", jsEngine.NewCallback(::ReadCallback)); 215 obj.SetProperty("read", jsEngine.NewCallback(::ReadCallback));
215 obj.SetProperty("write", jsEngine.NewCallback(::WriteCallback)); 216 obj.SetProperty("write", jsEngine.NewCallback(::WriteCallback));
216 obj.SetProperty("move", jsEngine.NewCallback(::MoveCallback)); 217 obj.SetProperty("move", jsEngine.NewCallback(::MoveCallback));
217 obj.SetProperty("remove", jsEngine.NewCallback(::RemoveCallback)); 218 obj.SetProperty("remove", jsEngine.NewCallback(::RemoveCallback));
218 obj.SetProperty("stat", jsEngine.NewCallback(::StatCallback)); 219 obj.SetProperty("stat", jsEngine.NewCallback(::StatCallback));
219 obj.SetProperty("resolve", jsEngine.NewCallback(::ResolveCallback)); 220 obj.SetProperty("resolve", jsEngine.NewCallback(::ResolveCallback));
220 return obj; 221 return obj;
221 } 222 }
OLDNEW
« include/AdblockPlus/Platform.h ('K') | « src/ConsoleJsObject.cpp ('k') | src/JsEngine.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld