Version 1.5.2

Merge bleeding edge revision 37670 by applying:
https://codereview.chromium.org/337073003/

svn merge -c 37477 https://dart.googlecode.com/svn/branches/bleeding_edge 1.5
svn merge -c 37780 https://dart.googlecode.com/svn/branches/bleeding_edge 1.5
svn merge -c 37785 https://dart.googlecode.com/svn/branches/bleeding_edge 1.5
svn merge -c 37822 https://dart.googlecode.com/svn/branches/bleeding_edge 1.5

R=kasperl@google.com

Review URL: https://codereview.chromium.org//366873005

git-svn-id: http://dart.googlecode.com/svn/branches/1.5@37942 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/pkg/polymer/CHANGELOG.md b/pkg/polymer/CHANGELOG.md
index f09744f..d9f2943 100644
--- a/pkg/polymer/CHANGELOG.md
+++ b/pkg/polymer/CHANGELOG.md
@@ -4,13 +4,14 @@
 package. We will also note important changes to the polyfill packages (observe,
 web_components, and template_binding) if they impact polymer.
 
-#### Pub version 0.11.0-dev
-  * **breaking change**: Event bindings with `@` are no longer supported.
-  * **breaking change**: enteredView/leftView were renamed to attached/detached
-  * **breaking change**: polymer.html is not required in entrypoints, but it is
-    required from files that use `<polymer-element>`.
+#### Pub version 0.11.0
   * **breaking change**: platform.js and dart_support.js must be specified in
     your entry points at the beginning of `<head>`.
+  * **breaking change**: polymer.html is not required in entrypoints, but it is
+    required from files that use `<polymer-element>`.
+  * **breaking change**: enteredView/leftView were renamed to attached/detached.
+    The old lifecycle methods will not be invoked.
+  * **breaking change**: Event bindings with `@` are no longer supported.
 
 #### Pub version 0.10.1
   * Reduce the analyzer work by mocking a small subset of the core libraries.
diff --git a/pkg/polymer/pubspec.yaml b/pkg/polymer/pubspec.yaml
index 4deef24..0763a05 100644
--- a/pkg/polymer/pubspec.yaml
+++ b/pkg/polymer/pubspec.yaml
@@ -1,5 +1,5 @@
 name: polymer
-version: 0.11.0-dev.3
+version: 0.11.0
 author: Polymer.dart Authors <web-ui-dev@dartlang.org>
 description: >
   Polymer.dart is a new type of library for the web, built on top of Web
@@ -19,8 +19,8 @@
   polymer_expressions: '>=0.11.0 <0.12.0'
   smoke: '>=0.1.0 <0.2.0'
   source_maps: '>=0.9.0 <0.10.0'
-  template_binding: '>=0.11.0-dev <0.12.0'
-  web_components: '>=0.3.5-dev <0.4.0'
+  template_binding: '>=0.11.0 <0.12.0'
+  web_components: '>=0.3.5 <0.4.0'
   yaml: '>=0.9.0 <2.0.0'
 dev_dependencies:
   unittest: '>=0.10.0 <0.11.0'
diff --git a/pkg/template_binding/CHANGELOG.md b/pkg/template_binding/CHANGELOG.md
index 5e8d985..7df9ea5 100644
--- a/pkg/template_binding/CHANGELOG.md
+++ b/pkg/template_binding/CHANGELOG.md
@@ -3,7 +3,7 @@
 This file contains highlights of what changes on each version of the
 template_binding package.
 
-#### Pub version 0.11.0-dev
+#### Pub version 0.11.0
   * Ported up to commit [TemplateBinding#1cee02][5b9a3b] and
     [NodeBind#c47bc1][c47bc1].
 
diff --git a/pkg/template_binding/pubspec.yaml b/pkg/template_binding/pubspec.yaml
index c84d4f5..acb2c24 100644
--- a/pkg/template_binding/pubspec.yaml
+++ b/pkg/template_binding/pubspec.yaml
@@ -1,5 +1,5 @@
 name: template_binding
-version: 0.11.0-dev
+version: 0.11.0
 author: Polymer.dart Team <web-ui-dev@dartlang.org>
 description: >
   Extends the capabilities of the HTML Template Element by enabling it to
diff --git a/pkg/web_components/CHANGELOG.md b/pkg/web_components/CHANGELOG.md
new file mode 100644
index 0000000..87f77b6
--- /dev/null
+++ b/pkg/web_components/CHANGELOG.md
@@ -0,0 +1,10 @@
+# changelog
+
+This file contains highlights of what changes on each version of this package.
+
+#### Pub version 0.3.5
+  * Added `registerDartType` to register a Dart API for a custom-element written
+    in Javascript.
+
+#### Pub version 0.3.4
+  * Updated to platform 0.2.4 (see lib/build.log for details)
diff --git a/pkg/web_components/pubspec.yaml b/pkg/web_components/pubspec.yaml
index b8f0bc5..1cc75cd 100644
--- a/pkg/web_components/pubspec.yaml
+++ b/pkg/web_components/pubspec.yaml
@@ -1,5 +1,5 @@
 name: web_components
-version: 0.3.5-dev.2
+version: 0.3.5
 author: Polymer.dart Authors <web-ui-dev@dartlang.org>
 homepage: https://www.dartlang.org/polymer-dart/
 description: >
diff --git a/sdk/lib/core/uri.dart b/sdk/lib/core/uri.dart
index 091e1fe..e00f4e8 100644
--- a/sdk/lib/core/uri.dart
+++ b/sdk/lib/core/uri.dart
@@ -1713,7 +1713,7 @@
       0x0000,   // 0x00 - 0x0f  0000000000000000
       0x0000,   // 0x10 - 0x1f  0000000000000000
                 //               ! #$ &'()*+,-./
-      0xf7da,   // 0x20 - 0x2f  0101101111101111
+      0xffda,   // 0x20 - 0x2f  0101101111111111
                 //              0123456789:; = ?
       0xafff,   // 0x30 - 0x3f  1111111111110101
                 //              @ABCDEFGHIJKLMNO
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 3a1e464..2e8e500 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -23344,7 +23344,8 @@
   Selection getSelection() native;
 
   static bool get supported =>
-      JS('bool', '!!(Element.prototype.webkitCreateShadowRoot)');
+      JS('bool', '!!(Element.prototype.createShadowRoot||'
+                 'Element.prototype.webkitCreateShadowRoot)');
 
   static bool _shadowRootDeprecationReported = false;
   static void _shadowRootDeprecationReport() {
diff --git a/tests/corelib/uri_test.dart b/tests/corelib/uri_test.dart
index 19d4019..285dfa5 100644
--- a/tests/corelib/uri_test.dart
+++ b/tests/corelib/uri_test.dart
@@ -233,7 +233,7 @@
 
   Expect.stringEquals("\u{10000}", s);
 
-  testEncodeDecode("A + B", "A%20%2B%20B");
+  testEncodeDecode("A + B", "A%20+%20B");
   testEncodeDecode("\uFFFE", "%EF%BF%BE");
   testEncodeDecode("\uFFFF", "%EF%BF%BF");
   testEncodeDecode("\uFFFE", "%EF%BF%BE");
@@ -241,7 +241,29 @@
   testEncodeDecode("\x7f", "%7F");
   testEncodeDecode("\x80", "%C2%80");
   testEncodeDecode("\u0800", "%E0%A0%80");
-  testEncodeDecode(":/@',;?&=+\$", ":/@',;?&=%2B\$");
+  // All characters not escaped by encodeFull.
+  var unescapedFull =
+      r"abcdefghijklmnopqrstuvwxyz"
+      r"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+      r"0123456789!#$&'()*+,-./:;=?@_~";
+  // ASCII characters escaped by encodeFull:
+  var escapedFull =
+      "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
+      "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
+      r' "%<>[\]^`{|}'
+      "\x7f";
+  var escapedTo =
+      "%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F"
+      "%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F"
+      "%20%22%25%3C%3E%5B%5C%5D%5E%60%7B%7C%7D%7F";
+  testEncodeDecode(unescapedFull, unescapedFull);
+  testEncodeDecode(escapedFull, escapedTo);
+  var nonAscii =
+      "\x80-\xff-\u{100}-\u{7ff}-\u{800}-\u{ffff}-\u{10000}-\u{10ffff}";
+  var nonAsciiEncoding =
+      "%C2%80-%C3%BF-%C4%80-%DF%BF-%E0%A0%80-%EF%BF%BF-"
+      "%F0%90%80%80-%F4%8F%BF%BF";
+  testEncodeDecode(nonAscii, nonAsciiEncoding);
   testEncodeDecode(s, "%F0%90%80%80");
   testEncodeDecodeComponent("A + B", "A%20%2B%20B");
   testEncodeDecodeComponent("\uFFFE", "%EF%BF%BE");
@@ -256,6 +278,7 @@
   testEncodeDecodeQueryComponent("A + B", "A+%2B+B", "A+%2B+B", "A+%2B+B");
   testEncodeDecodeQueryComponent(
       "æ ø å", "%C3%A6+%C3%B8+%C3%A5", "%E6+%F8+%E5", null);
+  testEncodeDecodeComponent(nonAscii, nonAsciiEncoding);
 
   // Invalid URI - : and @ is swapped, port ("host") should be numeric.
   Expect.throws(
diff --git a/tools/VERSION b/tools/VERSION
index e0c196d..96a2ed6 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -26,6 +26,6 @@
 CHANNEL stable
 MAJOR 1
 MINOR 5
-PATCH 0
+PATCH 2
 PRERELEASE 0
 PRERELEASE_PATCH 0
diff --git a/tools/dom/templates/html/impl/impl_ShadowRoot.darttemplate b/tools/dom/templates/html/impl/impl_ShadowRoot.darttemplate
index 559ba25..883faea 100644
--- a/tools/dom/templates/html/impl/impl_ShadowRoot.darttemplate
+++ b/tools/dom/templates/html/impl/impl_ShadowRoot.darttemplate
@@ -10,7 +10,8 @@
 $!MEMBERS
 $if DART2JS
   static bool get supported =>
-      JS('bool', '!!(Element.prototype.webkitCreateShadowRoot)');
+      JS('bool', '!!(Element.prototype.createShadowRoot||'
+                 'Element.prototype.webkitCreateShadowRoot)');
 $else
   static final bool supported = true;
 $endif