| Index: sdk/lib/core/uri.dart
|
| diff --git a/sdk/lib/core/uri.dart b/sdk/lib/core/uri.dart
|
| index fa7d01bee76617b64085856b948cf738d2539b55..744bbe2ec0c174af04d3782355891d730fc42067 100644
|
| --- a/sdk/lib/core/uri.dart
|
| +++ b/sdk/lib/core/uri.dart
|
| @@ -379,7 +379,7 @@ abstract class Uri {
|
| /**
|
| * Returns the port part of the authority component.
|
| *
|
| - * Returns the defualt port if there is no port number in the authority
|
| + * Returns the default port if there is no port number in the authority
|
| * component. That's 80 for http, 443 for https, and 0 for everything else.
|
| */
|
| int get port;
|
| @@ -505,7 +505,8 @@ abstract class Uri {
|
| * Returns the origin of the URI in the form scheme://host:port for the
|
| * schemes http and https.
|
| *
|
| - * It is an error if the scheme is not "http" or "https".
|
| + * It is an error if the scheme is not "http" or "https", or if the host name
|
| + * is missing or empty.
|
| *
|
| * See: http://www.w3.org/TR/2011/WD-html5-20110405/origin-0.html#origin
|
| */
|
| @@ -1470,7 +1471,8 @@ class _Uri implements Uri {
|
| path = _makePath(path, 0, _stringOrNullLength(path), pathSegments,
|
| scheme, hasAuthority);
|
| if (scheme.isEmpty && host == null && !path.startsWith('/')) {
|
| - path = _normalizeRelativePath(path, scheme.isNotEmpty || host != null);
|
| + bool allowScheme = scheme.isNotEmpty || host != null;
|
| + path = _normalizeRelativePath(path, allowScheme);
|
| } else {
|
| path = _removeDotSegments(path);
|
| }
|
| @@ -2520,13 +2522,17 @@ class _Uri implements Uri {
|
| bool get hasAbsolutePath => _path.startsWith('/');
|
|
|
| String get origin {
|
| - if (scheme == "" || _host == null || _host == "") {
|
| + if (scheme == "") {
|
| throw new StateError("Cannot use origin without a scheme: $this");
|
| }
|
| if (scheme != "http" && scheme != "https") {
|
| throw new StateError(
|
| "Origin is only applicable schemes http and https: $this");
|
| }
|
| + if (_host == null || _host == "") {
|
| + throw new StateError(
|
| + "A $scheme: URI should have a non-empty host name: $this");
|
| + }
|
| if (_port == null) return "$scheme://$_host";
|
| return "$scheme://$_host:$_port";
|
| }
|
| @@ -4110,13 +4116,17 @@ class _SimpleUri implements Uri {
|
| String get origin {
|
| // Check original behavior - W3C spec is wonky!
|
| bool isHttp = _isHttp;
|
| - if (_schemeEnd < 0 || _hostStart == _portStart) {
|
| + if (_schemeEnd < 0) {
|
| throw new StateError("Cannot use origin without a scheme: $this");
|
| }
|
| if (!isHttp && !_isHttps) {
|
| throw new StateError(
|
| "Origin is only applicable schemes http and https: $this");
|
| }
|
| + if (_hostStart == _portStart) {
|
| + throw new StateError(
|
| + "A $scheme: URI should have a non-empty host name: $this");
|
| + }
|
| if (_hostStart == _schemeEnd + 3) {
|
| return _uri.substring(0, _pathStart);
|
| }
|
|
|