OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 vmservice_io; | 5 part of vmservice_io; |
6 | 6 |
7 _log(msg) { | 7 _log(msg) { |
8 print("% $msg"); | 8 print("% $msg"); |
9 } | 9 } |
10 | 10 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 _sendResourceResponse(sp, id, data); | 57 _sendResourceResponse(sp, id, data); |
58 }, | 58 }, |
59 onError: (e) { | 59 onError: (e) { |
60 var err = "Error loading $uri:\n $e"; | 60 var err = "Error loading $uri:\n $e"; |
61 _sendResourceResponse(sp, id, err); | 61 _sendResourceResponse(sp, id, err); |
62 }); | 62 }); |
63 } | 63 } |
64 | 64 |
65 void _loadDataUri(SendPort sp, int id, Uri uri) { | 65 void _loadDataUri(SendPort sp, int id, Uri uri) { |
66 try { | 66 try { |
67 if (uri.data.mimeType != "application/dart") { | 67 var mime = uri.data.mimeType; |
68 throw "MIME-type must be application/dart"; | 68 if ((mime != "application/dart") && |
| 69 (mime != "text/plain")) { |
| 70 throw "MIME-type must be application/dart or text/plain: $mime given."; |
69 } | 71 } |
70 if (uri.data.charset != "utf-8") { | 72 var charset = uri.data.charset; |
| 73 if ((charset != "utf-8") && |
| 74 (charset != "US-ASCII")) { |
71 // The C++ portion of the embedder assumes UTF-8. | 75 // The C++ portion of the embedder assumes UTF-8. |
72 throw "Only utf-8 encoding is supported"; | 76 throw "Only utf-8 or US-ASCII encodings are supported: $charset given."; |
73 } | 77 } |
74 _sendResourceResponse(sp, id, uri.data.contentAsBytes()); | 78 _sendResourceResponse(sp, id, uri.data.contentAsBytes()); |
75 } catch (e) { | 79 } catch (e) { |
76 _sendResourceResponse(sp, id, "Invalid data uri ($uri):\n $e"); | 80 _sendResourceResponse(sp, id, "Invalid data uri ($uri):\n $e"); |
77 } | 81 } |
78 } | 82 } |
79 | 83 |
80 _handleResourceRequest(SendPort sp, bool traceLoading, int id, Uri resource) { | 84 _handleResourceRequest(SendPort sp, bool traceLoading, int id, Uri resource) { |
81 if (resource.scheme == 'file') { | 85 if (resource.scheme == 'file') { |
82 _loadFile(sp, id, resource); | 86 _loadFile(sp, id, resource); |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 var data = await new File.fromUri(packagesFile).readAsBytes(); | 259 var data = await new File.fromUri(packagesFile).readAsBytes(); |
256 if (traceLoading) { | 260 if (traceLoading) { |
257 _log("Loaded packages file from $packagesFile:\n" | 261 _log("Loaded packages file from $packagesFile:\n" |
258 "${new String.fromCharCodes(data)}"); | 262 "${new String.fromCharCodes(data)}"); |
259 } | 263 } |
260 _parsePackagesFile(sp, traceLoading, packagesFile, data); | 264 _parsePackagesFile(sp, traceLoading, packagesFile, data); |
261 } catch (e, s) { | 265 } catch (e, s) { |
262 if (traceLoading) { | 266 if (traceLoading) { |
263 _log("Error loading packages: $e\n$s"); | 267 _log("Error loading packages: $e\n$s"); |
264 } | 268 } |
265 sp.send("Uncaught error ($e) loading packags file."); | 269 sp.send("Uncaught error ($e) loading packages file."); |
266 } | 270 } |
267 } | 271 } |
268 | 272 |
269 _findPackagesFile(SendPort sp, bool traceLoading, Uri base) async { | 273 _findPackagesFile(SendPort sp, bool traceLoading, Uri base) async { |
270 try { | 274 try { |
271 // Walk up the directory hierarchy to check for the existence of | 275 // Walk up the directory hierarchy to check for the existence of |
272 // .packages files in parent directories and for the existense of a | 276 // .packages files in parent directories and for the existense of a |
273 // packages/ directory on the first iteration. | 277 // packages/ directory on the first iteration. |
274 var dir = new File.fromUri(base).parent; | 278 var dir = new File.fromUri(base).parent; |
275 var prev = null; | 279 var prev = null; |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
357 _parsePackagesFile(sp, traceLoading, resource, data); | 361 _parsePackagesFile(sp, traceLoading, resource, data); |
358 } catch (e, s) { | 362 } catch (e, s) { |
359 if (traceLoading) { | 363 if (traceLoading) { |
360 _log("Error loading packages file from '$resource': $e\n$s"); | 364 _log("Error loading packages file from '$resource': $e\n$s"); |
361 } | 365 } |
362 sp.send("Uncaught error ($e) loading packages file from '$resource'."); | 366 sp.send("Uncaught error ($e) loading packages file from '$resource'."); |
363 } | 367 } |
364 return false; | 368 return false; |
365 } | 369 } |
366 | 370 |
| 371 _loadPackagesData(sp, traceLoading, resource){ |
| 372 try { |
| 373 var data = resource.data; |
| 374 var mime = data.mimeType; |
| 375 if (mime != "text/plain") { |
| 376 throw "MIME-type must be text/plain: $mime given."; |
| 377 } |
| 378 var charset = data.charset; |
| 379 if ((charset != "utf-8") && |
| 380 (charset != "US-ASCII")) { |
| 381 // The C++ portion of the embedder assumes UTF-8. |
| 382 throw "Only utf-8 or US-ASCII encodings are supported: $charset given."; |
| 383 } |
| 384 _parsePackagesFile(sp, traceLoading, resource, data.contentAsBytes()); |
| 385 } catch (e) { |
| 386 sp.send("Uncaught error ($e) loading packages data."); |
| 387 } |
| 388 } |
| 389 |
| 390 |
367 _handlePackagesRequest(SendPort sp, | 391 _handlePackagesRequest(SendPort sp, |
368 bool traceLoading, | 392 bool traceLoading, |
369 int id, | 393 int id, |
370 Uri resource) async { | 394 Uri resource) async { |
371 try { | 395 try { |
372 if (id == -1) { | 396 if (id == -1) { |
373 if (resource.scheme == 'file') { | 397 if (resource.scheme == 'file') { |
374 _findPackagesFile(sp, traceLoading, resource); | 398 _findPackagesFile(sp, traceLoading, resource); |
375 } else if ((resource.scheme == 'http') || (resource.scheme == 'https')) { | 399 } else if ((resource.scheme == 'http') || (resource.scheme == 'https')) { |
376 // Try to load the .packages file next to the resource. | 400 // Try to load the .packages file next to the resource. |
(...skipping 18 matching lines...) Expand all Loading... |
395 if (exists) { | 419 if (exists) { |
396 _loadPackagesFile(sp, traceLoading, resource); | 420 _loadPackagesFile(sp, traceLoading, resource); |
397 } else { | 421 } else { |
398 sp.send("Packages file '$resource' not found."); | 422 sp.send("Packages file '$resource' not found."); |
399 } | 423 } |
400 } else if ((resource.scheme == 'http') || (resource.scheme == 'https')) { | 424 } else if ((resource.scheme == 'http') || (resource.scheme == 'https')) { |
401 var exists = await _loadHttpPackagesFile(sp, traceLoading, resource); | 425 var exists = await _loadHttpPackagesFile(sp, traceLoading, resource); |
402 if (!exists) { | 426 if (!exists) { |
403 sp.send("Packages file '$resource' not found."); | 427 sp.send("Packages file '$resource' not found."); |
404 } | 428 } |
| 429 } else if (resource.scheme == 'data') { |
| 430 _loadPackagesData(sp, traceLoading, resource); |
405 } else { | 431 } else { |
406 sp.send("Unknown scheme (${resource.scheme}) for package file at " | 432 sp.send("Unknown scheme (${resource.scheme}) for package file at " |
407 "'$resource'."); | 433 "'$resource'."); |
408 } | 434 } |
409 } else { | 435 } else { |
410 sp.send("Unknown packages request id: $id for '$resource'."); | 436 sp.send("Unknown packages request id: $id for '$resource'."); |
411 } | 437 } |
412 } catch (e, s) { | 438 } catch (e, s) { |
413 if (traceLoading) { | 439 if (traceLoading) { |
414 _log("Error handling packages request: $e\n$s"); | 440 _log("Error handling packages request: $e\n$s"); |
(...skipping 13 matching lines...) Expand all Loading... |
428 assert(id != null); | 454 assert(id != null); |
429 String resource = request[3]; | 455 String resource = request[3]; |
430 assert(resource != null); | 456 assert(resource != null); |
431 var uri = Uri.parse(resource); | 457 var uri = Uri.parse(resource); |
432 if (id >= 0) { | 458 if (id >= 0) { |
433 _handleResourceRequest(sp, traceLoading, id, uri); | 459 _handleResourceRequest(sp, traceLoading, id, uri); |
434 } else { | 460 } else { |
435 _handlePackagesRequest(sp, traceLoading, id, uri); | 461 _handlePackagesRequest(sp, traceLoading, id, uri); |
436 } | 462 } |
437 } | 463 } |
OLD | NEW |