Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of dart._vmservice; | 5 part of dart._vmservice; |
| 6 | 6 |
| 7 String _encodeDevFSDisabledError(Message message) { | 7 String _encodeDevFSDisabledError(Message message) { |
| 8 return encodeRpcError( | 8 return encodeRpcError( |
| 9 message, kFeatureDisabled, | 9 message, kFeatureDisabled, |
| 10 details: "DevFS is not supported by this Dart implementation"); | 10 details: "DevFS is not supported by this Dart implementation"); |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 35 if (path.isEmpty) { | 35 if (path.isEmpty) { |
| 36 return null; | 36 return null; |
| 37 } | 37 } |
| 38 Uri pathUri; | 38 Uri pathUri; |
| 39 try { | 39 try { |
| 40 pathUri = new Uri.file(path); | 40 pathUri = new Uri.file(path); |
| 41 } on FormatException catch(e) { | 41 } on FormatException catch(e) { |
| 42 return null; | 42 return null; |
| 43 } | 43 } |
| 44 | 44 |
| 45 return resolve(pathUri); | |
| 46 } | |
| 47 | |
| 48 Uri resolve(Uri pathUri) { | |
| 45 try { | 49 try { |
| 46 // Make sure that this pathUri can be converted to a file path. | 50 // Make sure that this pathUri can be converted to a file path. |
| 47 pathUri.toFilePath(); | 51 pathUri.toFilePath(); |
| 48 } on UnsupportedError catch (e) { | 52 } on UnsupportedError catch (e) { |
| 49 return null; | 53 return null; |
| 50 } | 54 } |
| 51 | 55 |
| 52 Uri resolvedUri = uri.resolveUri(pathUri); | 56 Uri resolvedUri = uri.resolveUri(pathUri); |
| 53 if (!resolvedUri.toString().startsWith(uri.toString())) { | 57 if (!resolvedUri.toString().startsWith(uri.toString())) { |
| 54 // Resolved uri must be within the filesystem's base uri. | 58 // Resolved uri must be within the filesystem's base uri. |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 116 return _listDevFSFiles(message); | 120 return _listDevFSFiles(message); |
| 117 default: | 121 default: |
| 118 return encodeRpcError( | 122 return encodeRpcError( |
| 119 message, kInternalError, | 123 message, kInternalError, |
| 120 details: 'Unexpected rpc ${message.method}'); | 124 details: 'Unexpected rpc ${message.method}'); |
| 121 } | 125 } |
| 122 } | 126 } |
| 123 | 127 |
| 124 Future<String> handlePutStream(Object fsName, | 128 Future<String> handlePutStream(Object fsName, |
| 125 Object path, | 129 Object path, |
| 130 Uri fsUri, | |
| 126 Stream<List<int>> bytes) async { | 131 Stream<List<int>> bytes) async { |
| 127 // A dummy Message for error message construction. | 132 // A dummy Message for error message construction. |
| 128 Message message = new Message.forMethod('_writeDevFSFile'); | 133 Message message = new Message.forMethod('_writeDevFSFile'); |
| 129 var writeStreamFile = VMServiceEmbedderHooks.writeStreamFile; | 134 var writeStreamFile = VMServiceEmbedderHooks.writeStreamFile; |
| 130 if (writeStreamFile == null) { | 135 if (writeStreamFile == null) { |
| 131 return _encodeDevFSDisabledError(message); | 136 return _encodeDevFSDisabledError(message); |
| 132 } | 137 } |
| 133 if (fsName == null) { | 138 if (fsName == null) { |
| 134 return encodeMissingParamError(message, 'fsName'); | 139 return encodeMissingParamError(message, 'fsName'); |
| 135 } | 140 } |
| 136 if (fsName is! String) { | 141 if (fsName is! String) { |
| 137 return encodeInvalidParamError(message, 'fsName'); | 142 return encodeInvalidParamError(message, 'fsName'); |
| 138 } | 143 } |
| 139 var fs = _fsMap[fsName]; | 144 var fs = _fsMap[fsName]; |
| 140 if (fs == null) { | 145 if (fs == null) { |
| 141 return _encodeFileSystemDoesNotExistError(message, fsName); | 146 return _encodeFileSystemDoesNotExistError(message, fsName); |
| 142 } | 147 } |
| 143 if (path == null) { | 148 Uri uri = fsUri; |
| 144 return encodeMissingParamError(message, 'path'); | |
| 145 } | |
| 146 if (path is! String) { | |
| 147 return encodeInvalidParamError(message, 'path'); | |
| 148 } | |
| 149 Uri uri = fs.resolvePath(path); | |
| 150 if (uri == null) { | 149 if (uri == null) { |
| 151 return encodeInvalidParamError(message, 'path'); | 150 if (path == null) { |
| 151 return encodeMissingParamError(message, 'path'); | |
| 152 } | |
| 153 if (path is! String) { | |
| 154 return encodeInvalidParamError(message, 'path'); | |
| 155 } | |
| 156 uri = fs.resolvePath(path); | |
| 157 if (uri == null) { | |
| 158 return encodeInvalidParamError(message, 'path'); | |
| 159 } | |
| 160 } else { | |
| 161 uri = fs.resolve(uri); | |
| 162 if (uri == null) { | |
| 163 return encodeInvalidParamError(message, 'uri'); | |
| 164 } | |
| 152 } | 165 } |
| 153 await writeStreamFile(uri, bytes); | 166 await writeStreamFile(uri, bytes); |
| 154 return encodeSuccess(message); | 167 return encodeSuccess(message); |
| 155 } | 168 } |
| 156 | 169 |
| 157 Future<String> _listDevFS(Message message) async { | 170 Future<String> _listDevFS(Message message) async { |
| 158 var result = {}; | 171 var result = {}; |
| 159 result['type'] = 'FileSystemList'; | 172 result['type'] = 'FileSystemList'; |
| 160 result['fsNames'] = _fsMap.keys.toList(); | 173 result['fsNames'] = _fsMap.keys.toList(); |
| 161 return encodeResult(message, result); | 174 return encodeResult(message, result); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 212 if (fsName == null) { | 225 if (fsName == null) { |
| 213 return encodeMissingParamError(message, 'fsName'); | 226 return encodeMissingParamError(message, 'fsName'); |
| 214 } | 227 } |
| 215 if (fsName is! String) { | 228 if (fsName is! String) { |
| 216 return encodeInvalidParamError(message, 'fsName'); | 229 return encodeInvalidParamError(message, 'fsName'); |
| 217 } | 230 } |
| 218 var fs = _fsMap[fsName]; | 231 var fs = _fsMap[fsName]; |
| 219 if (fs == null) { | 232 if (fs == null) { |
| 220 return _encodeFileSystemDoesNotExistError(message, fsName); | 233 return _encodeFileSystemDoesNotExistError(message, fsName); |
| 221 } | 234 } |
| 222 var path = message.params['path']; | 235 Uri uri; |
| 223 if (path == null) { | 236 if (message.params['uri'] != null) { |
| 224 return encodeMissingParamError(message, 'path'); | 237 try { |
| 238 var uriParam = message.params['uri']; | |
| 239 if (uriParam is! String) { | |
| 240 return encodeInvalidParamError(message, 'uri'); | |
| 241 } | |
| 242 Uri parsedUri = Uri.parse(uriParam); | |
| 243 uri = fs.resolve(parsedUri); | |
| 244 if (uri == null) { | |
| 245 return encodeInvalidParamError(message, 'uri'); | |
| 246 } | |
| 247 } catch (e) { | |
| 248 return encodeInvalidParamError(message, 'uri'); | |
| 249 } | |
| 250 } else { | |
| 251 var path = message.params['path']; | |
| 252 if (path == null) { | |
| 253 return encodeMissingParamError(message, 'path'); | |
| 254 } | |
| 255 if (path is! String) { | |
| 256 return encodeInvalidParamError(message, 'path'); | |
| 257 } | |
| 258 uri = fs.resolvePath(path); | |
| 259 if (uri == null) { | |
| 260 return encodeInvalidParamError(message, 'path'); | |
| 261 } | |
| 225 } | 262 } |
| 226 if (path is! String) { | |
| 227 return encodeInvalidParamError(message, 'path'); | |
| 228 } | |
| 229 Uri uri = fs.resolvePath(path); | |
| 230 if (uri == null) { | |
| 231 return encodeInvalidParamError(message, 'path'); | |
| 232 } | |
| 233 | |
| 234 try { | 263 try { |
| 235 List<int> bytes = await readFile(uri); | 264 List<int> bytes = await readFile(uri); |
| 236 var result = { | 265 var result = { |
| 237 'type': 'FSFile', | 266 'type': 'FSFile', |
| 238 'fileContents': BASE64.encode(bytes) | 267 'fileContents': BASE64.encode(bytes) |
| 239 }; | 268 }; |
| 240 return encodeResult(message, result); | 269 return encodeResult(message, result); |
| 241 } catch (e) { | 270 } catch (e) { |
| 242 return encodeRpcError( | 271 return encodeRpcError( |
| 243 message, kFileDoesNotExist, | 272 message, kFileDoesNotExist, |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 254 if (fsName == null) { | 283 if (fsName == null) { |
| 255 return encodeMissingParamError(message, 'fsName'); | 284 return encodeMissingParamError(message, 'fsName'); |
| 256 } | 285 } |
| 257 if (fsName is! String) { | 286 if (fsName is! String) { |
| 258 return encodeInvalidParamError(message, 'fsName'); | 287 return encodeInvalidParamError(message, 'fsName'); |
| 259 } | 288 } |
| 260 var fs = _fsMap[fsName]; | 289 var fs = _fsMap[fsName]; |
| 261 if (fs == null) { | 290 if (fs == null) { |
| 262 return _encodeFileSystemDoesNotExistError(message, fsName); | 291 return _encodeFileSystemDoesNotExistError(message, fsName); |
| 263 } | 292 } |
| 264 var path = message.params['path']; | 293 Uri uri; |
| 265 if (path == null) { | 294 if (message.params['uri'] != null) { |
| 266 return encodeMissingParamError(message, 'path'); | 295 try { |
| 267 } | 296 var uriParam = message.params['uri']; |
| 268 if (path is! String) { | 297 if (uriParam is! String) { |
| 269 return encodeInvalidParamError(message, 'path'); | 298 return encodeInvalidParamError(message, 'uri'); |
| 270 } | 299 } |
| 271 Uri uri = fs.resolvePath(path); | 300 Uri parsedUri = Uri.parse(uriParam); |
| 272 if (uri == null) { | 301 uri = fs.resolve(parsedUri); |
| 273 return encodeInvalidParamError(message, 'path'); | 302 if (uri == null) { |
| 303 return encodeInvalidParamError(message, 'uri'); | |
| 304 } | |
| 305 } catch (e) { | |
| 306 return encodeInvalidParamError(message, 'uri'); | |
| 307 } | |
| 308 } else { | |
| 309 var path = message.params['path']; | |
| 310 if (path == null) { | |
| 311 return encodeMissingParamError(message, 'path'); | |
| 312 } | |
| 313 if (path is! String) { | |
| 314 return encodeInvalidParamError(message, 'path'); | |
| 315 } | |
| 316 uri = fs.resolvePath(path); | |
| 317 if (uri == null) { | |
| 318 return encodeInvalidParamError(message, 'path'); | |
| 319 } | |
|
turnidge
2017/03/08 21:13:51
Does this code duplicate the code above? Can ther
Cutch
2017/03/08 23:41:07
A helper function is awkward here (see other DevFS
| |
| 274 } | 320 } |
| 275 var fileContents = message.params['fileContents']; | 321 var fileContents = message.params['fileContents']; |
| 276 if (fileContents == null) { | 322 if (fileContents == null) { |
| 277 return encodeMissingParamError(message, 'fileContents'); | 323 return encodeMissingParamError(message, 'fileContents'); |
| 278 } | 324 } |
| 279 if (fileContents is! String) { | 325 if (fileContents is! String) { |
| 280 return encodeInvalidParamError(message, 'fileContents'); | 326 return encodeInvalidParamError(message, 'fileContents'); |
| 281 } | 327 } |
| 282 List<int> decodedFileContents = BASE64.decode(fileContents); | 328 List<int> decodedFileContents = BASE64.decode(fileContents); |
| 283 | 329 |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 355 } | 401 } |
| 356 var fileList = await listFiles(fs.uri); | 402 var fileList = await listFiles(fs.uri); |
| 357 // Remove any url-encoding in the filenames. | 403 // Remove any url-encoding in the filenames. |
| 358 for (int i = 0; i < fileList.length; i++) { | 404 for (int i = 0; i < fileList.length; i++) { |
| 359 fileList[i]['name'] = Uri.decodeFull(fileList[i]['name']); | 405 fileList[i]['name'] = Uri.decodeFull(fileList[i]['name']); |
| 360 } | 406 } |
| 361 var result = { 'type': 'FSFileList', 'files': fileList }; | 407 var result = { 'type': 'FSFileList', 'files': fileList }; |
| 362 return encodeResult(message, result); | 408 return encodeResult(message, result); |
| 363 } | 409 } |
| 364 } | 410 } |
| OLD | NEW |