Index: pkg/polymer/lib/src/build/polyfill_injector.dart |
diff --git a/pkg/polymer/lib/src/build/polyfill_injector.dart b/pkg/polymer/lib/src/build/polyfill_injector.dart |
index 3bf7e7a671c28584c5099d5f711768e1df24eede..c6c0f884ab92e4eb4ae78dee8ab09446c02eb90d 100644 |
--- a/pkg/polymer/lib/src/build/polyfill_injector.dart |
+++ b/pkg/polymer/lib/src/build/polyfill_injector.dart |
@@ -20,6 +20,9 @@ import 'common.dart'; |
* are included. For example, this transformer will ensure that there is a |
* script tag that loads the shadow_dom polyfill and interop.js (used for the |
* css shimming). |
+ * |
+ * This step also replaces "packages/browser/dart.js" and the Dart script tag |
+ * with a script tag that loads the dart2js compiled code directly. |
*/ |
class PolyfillInjector extends Transformer with PolymerTransformer { |
final TransformOptions options; |
@@ -35,7 +38,8 @@ class PolyfillInjector extends Transformer with PolymerTransformer { |
bool shadowDomFound = false; |
bool jsInteropFound = false; |
bool customElementFound = false; |
- bool dartScriptTags = false; |
+ Element dartJs; |
+ final dartScripts = <Element>[]; |
for (var tag in document.queryAll('script')) { |
var src = tag.attributes['src']; |
@@ -47,20 +51,43 @@ class PolyfillInjector extends Transformer with PolymerTransformer { |
shadowDomFound = true; |
} else if (_customElementJS.hasMatch(last)) { |
customElementFound = true; |
+ } else if (last == 'dart.js') { |
+ dartJs = tag; |
} |
} |
if (tag.attributes['type'] == 'application/dart') { |
- dartScriptTags = true; |
+ dartScripts.add(tag); |
} |
} |
- if (!dartScriptTags) { |
+ if (dartScripts.isEmpty) { |
// This HTML has no Dart code, there is nothing to do here. |
transform.addOutput(transform.primaryInput); |
return; |
} |
+ // TODO(jmesserly): ideally we would generate an HTML that loads |
+ // dart2dart too. But for now dart2dart is not a supported deployment |
+ // target, so just inline the JS script. This has the nice side effect of |
+ // fixing our tests: even if content_shell supports Dart VM, we'll still |
+ // test the compiled JS code. |
+ if (options.directlyIncludeJS) { |
+ // If using CSP add the "precompiled" extension |
+ final csp = options.contentSecurityPolicy ? '.precompiled' : ''; |
+ |
+ // Replace all other Dart script tags with JavaScript versions. |
+ for (var script in dartScripts) { |
+ final src = script.attributes['src']; |
+ if (src.endsWith('.dart')) { |
+ script.attributes.remove('type'); |
+ script.attributes['src'] = '$src$csp.js'; |
+ } |
+ } |
+ // Remove "packages/browser/dart.js" |
+ if (dartJs != null) dartJs.remove(); |
+ } |
+ |
_addScript(urlSegment) { |
document.body.nodes.insert(0, parseFragment( |
'<script src="packages/$urlSegment"></script>\n')); |