Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(686)

Side by Side Diff: runtime/bin/vmservice/loader.dart

Issue 1489603002: Standalone: Use new support in dart:core for decoding data uris. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | runtime/tests/vm/vm.status » ('j') | runtime/tests/vm/vm.status » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 var sourceFile = new File(path); 55 var sourceFile = new File(path);
56 sourceFile.readAsBytes().then((data) { 56 sourceFile.readAsBytes().then((data) {
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 var dataUriRegex = new RegExp(
66 r"data:([\w-]+/[\w-]+)?(;charset=([\w-]+))?(;base64)?,(.*)");
67
68 void _loadDataUri(SendPort sp, int id, Uri uri) { 65 void _loadDataUri(SendPort sp, int id, Uri uri) {
69 try { 66 try {
70 var match = dataUriRegex.firstMatch(uri.toString()); 67 if (uri.data.mimeType != "application/dart") {
71 if (match == null) throw "Malformed data uri";
72
73 var mimeType = match.group(1);
74 var encoding = match.group(3);
75 var maybeBase64 = match.group(4);
76 var encodedData = match.group(5);
77
78 if (mimeType != "application/dart") {
79 throw "MIME-type must be application/dart"; 68 throw "MIME-type must be application/dart";
80 } 69 }
81 if (encoding != "utf-8") { 70 if (uri.data.charset != "utf-8") {
82 // Default is ASCII. The C++ portion of the embedder assumes UTF-8. 71 // The C++ portion of the embedder assumes UTF-8.
83 throw "Only utf-8 encoding is supported"; 72 throw "Only utf-8 encoding is supported";
84 } 73 }
85 if (maybeBase64 != null) { 74 _sendResourceResponse(sp, id, uri.data.contentAsBytes());
86 throw "Only percent encoding is supported";
87 }
88
89 var data = UTF8.encode(Uri.decodeComponent(encodedData));
90 _sendResourceResponse(sp, id, data);
91 } catch (e) { 75 } catch (e) {
92 _sendResourceResponse(sp, id, "Invalid data uri ($uri):\n $e"); 76 _sendResourceResponse(sp, id, "Invalid data uri ($uri):\n $e");
93 } 77 }
94 } 78 }
95 79
96 _handleResourceRequest(SendPort sp, bool traceLoading, int id, Uri resource) { 80 _handleResourceRequest(SendPort sp, bool traceLoading, int id, Uri resource) {
97 if (resource.scheme == 'file') { 81 if (resource.scheme == 'file') {
98 _loadFile(sp, id, resource); 82 _loadFile(sp, id, resource);
99 } else if ((resource.scheme == 'http') || (resource.scheme == 'https')) { 83 } else if ((resource.scheme == 'http') || (resource.scheme == 'https')) {
100 _loadHttp(sp, id, resource); 84 _loadHttp(sp, id, resource);
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 assert(id != null); 426 assert(id != null);
443 String resource = request[3]; 427 String resource = request[3];
444 assert(resource != null); 428 assert(resource != null);
445 var uri = Uri.parse(resource); 429 var uri = Uri.parse(resource);
446 if (id >= 0) { 430 if (id >= 0) {
447 _handleResourceRequest(sp, traceLoading, id, uri); 431 _handleResourceRequest(sp, traceLoading, id, uri);
448 } else { 432 } else {
449 _handlePackagesRequest(sp, traceLoading, id, uri); 433 _handlePackagesRequest(sp, traceLoading, id, uri);
450 } 434 }
451 } 435 }
OLDNEW
« no previous file with comments | « no previous file | runtime/tests/vm/vm.status » ('j') | runtime/tests/vm/vm.status » ('J')

Powered by Google App Engine
This is Rietveld 408576698