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

Side by Side Diff: sdk/lib/io/http_headers.dart

Issue 26973004: Preserve '\' in filenames for uploads, as Windows/IE contains them. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 2 months 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 | Annotate | Revision Log
« no previous file with comments | « sdk/lib/io/http.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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.io; 5 part of dart.io;
6 6
7 class _HttpHeaders implements HttpHeaders { 7 class _HttpHeaders implements HttpHeaders {
8 _HttpHeaders(String this.protocolVersion) 8 _HttpHeaders(String this.protocolVersion)
9 : _headers = new Map<String, List<String>>(); 9 : _headers = new Map<String, List<String>>();
10 10
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 String _value; 475 String _value;
476 _UnmodifiableMap<String, String> _parameters; 476 _UnmodifiableMap<String, String> _parameters;
477 477
478 _HeaderValue([String this._value = "", Map<String, String> parameters]) { 478 _HeaderValue([String this._value = "", Map<String, String> parameters]) {
479 if (parameters != null) { 479 if (parameters != null) {
480 _parameters = 480 _parameters =
481 new _UnmodifiableMap(new Map<String, String>.from(parameters)); 481 new _UnmodifiableMap(new Map<String, String>.from(parameters));
482 } 482 }
483 } 483 }
484 484
485 static _HeaderValue parse(String value, {parameterSeparator: ";"}) { 485 static _HeaderValue parse(String value,
486 {parameterSeparator: ";",
487 preserveBackslash: false}) {
486 // Parse the string. 488 // Parse the string.
487 var result = new _HeaderValue(); 489 var result = new _HeaderValue();
488 result._parse(value, parameterSeparator); 490 result._parse(value, parameterSeparator, preserveBackslash);
489 return result; 491 return result;
490 } 492 }
491 493
492 String get value => _value; 494 String get value => _value;
493 495
494 void _ensureParameters() { 496 void _ensureParameters() {
495 if (_parameters == null) { 497 if (_parameters == null) {
496 _parameters = new _UnmodifiableMap(new Map<String, String>()); 498 _parameters = new _UnmodifiableMap(new Map<String, String>());
497 } 499 }
498 } 500 }
(...skipping 10 matching lines...) Expand all
509 _parameters.forEach((String name, String value) { 511 _parameters.forEach((String name, String value) {
510 sb.write("; "); 512 sb.write("; ");
511 sb.write(name); 513 sb.write(name);
512 sb.write("="); 514 sb.write("=");
513 sb.write(value); 515 sb.write(value);
514 }); 516 });
515 } 517 }
516 return sb.toString(); 518 return sb.toString();
517 } 519 }
518 520
519 void _parse(String s, String parameterSeparator) { 521 void _parse(String s, String parameterSeparator, bool preserveBackslash) {
520 int index = 0; 522 int index = 0;
521 523
522 bool done() => index == s.length; 524 bool done() => index == s.length;
523 525
524 void skipWS() { 526 void skipWS() {
525 while (!done()) { 527 while (!done()) {
526 if (s[index] != " " && s[index] != "\t") return; 528 if (s[index] != " " && s[index] != "\t") return;
527 index++; 529 index++;
528 } 530 }
529 } 531 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 } 564 }
563 return s.substring(start, index).toLowerCase(); 565 return s.substring(start, index).toLowerCase();
564 } 566 }
565 567
566 String parseParameterValue() { 568 String parseParameterValue() {
567 if (s[index] == "\"") { 569 if (s[index] == "\"") {
568 // Parse quoted value. 570 // Parse quoted value.
569 StringBuffer sb = new StringBuffer(); 571 StringBuffer sb = new StringBuffer();
570 index++; 572 index++;
571 while (!done()) { 573 while (!done()) {
574 print(s[index]);
572 if (s[index] == "\\") { 575 if (s[index] == "\\") {
573 if (index + 1 == s.length) { 576 if (index + 1 == s.length) {
574 throw new HttpException("Failed to parse header value"); 577 throw new HttpException("Failed to parse header value");
575 } 578 }
579 if (preserveBackslash && s[index + 1] != "\"") {
580 sb.write(s[index]);
581 }
576 index++; 582 index++;
577 } else if (s[index] == "\"") { 583 } else if (s[index] == "\"") {
578 index++; 584 index++;
579 break; 585 break;
580 } 586 }
581 sb.write(s[index]); 587 sb.write(s[index]);
582 index++; 588 index++;
583 } 589 }
584 return sb.toString(); 590 return sb.toString();
585 } else { 591 } else {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
634 if (charset != null) { 640 if (charset != null) {
635 _ensureParameters(); 641 _ensureParameters();
636 this._parameters._map["charset"] = charset.toLowerCase(); 642 this._parameters._map["charset"] = charset.toLowerCase();
637 } 643 }
638 } 644 }
639 645
640 _ContentType._(); 646 _ContentType._();
641 647
642 static _ContentType parse(String value) { 648 static _ContentType parse(String value) {
643 var result = new _ContentType._(); 649 var result = new _ContentType._();
644 result._parse(value, ";"); 650 result._parse(value, ";", false);
645 int index = result._value.indexOf("/"); 651 int index = result._value.indexOf("/");
646 if (index == -1 || index == (result._value.length - 1)) { 652 if (index == -1 || index == (result._value.length - 1)) {
647 result._primaryType = result._value.trim().toLowerCase(); 653 result._primaryType = result._value.trim().toLowerCase();
648 result._subType = ""; 654 result._subType = "";
649 } else { 655 } else {
650 result._primaryType = 656 result._primaryType =
651 result._value.substring(0, index).trim().toLowerCase(); 657 result._value.substring(0, index).trim().toLowerCase();
652 result._subType = result._value.substring(index + 1).trim().toLowerCase(); 658 result._subType = result._value.substring(index + 1).trim().toLowerCase();
653 } 659 }
654 return result; 660 return result;
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
817 void clear() { 823 void clear() {
818 throw new UnsupportedError("Cannot modify an unmodifiable map"); 824 throw new UnsupportedError("Cannot modify an unmodifiable map");
819 } 825 }
820 void forEach(void f(K key, V value)) => _map.forEach(f); 826 void forEach(void f(K key, V value)) => _map.forEach(f);
821 Iterable<K> get keys => _map.keys; 827 Iterable<K> get keys => _map.keys;
822 Iterable<V> get values => _map.values; 828 Iterable<V> get values => _map.values;
823 int get length => _map.length; 829 int get length => _map.length;
824 bool get isEmpty => _map.isEmpty; 830 bool get isEmpty => _map.isEmpty;
825 bool get isNotEmpty => _map.isNotEmpty; 831 bool get isNotEmpty => _map.isNotEmpty;
826 } 832 }
OLDNEW
« no previous file with comments | « sdk/lib/io/http.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698