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

Unified Diff: lib/dart.js

Issue 1087303004: Add support for user-defined HTML files. (Closed) Base URL: git@github.com:dart-lang/test@master
Patch Set: Code review changes Created 5 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « README.md ('k') | lib/pub_serve.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/dart.js
diff --git a/lib/dart.js b/lib/dart.js
new file mode 100644
index 0000000000000000000000000000000000000000..dd7c839356efeac8a6302881208fd6df366a362c
--- /dev/null
+++ b/lib/dart.js
@@ -0,0 +1,69 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This script runs in HTML files and loads the corresponding test scripts for
+// either Dartium or a JS browser. It's used by "pub serve" and user-authored
+// HTML files; when running without "pub serve", the default HTML file manually
+// chooses between serving a Dart or JS script tag.
+window.onload = function() {
+
+// Sends an error message to the server indicating that the script failed to
+// load.
+//
+// This mimics a MultiChannel-formatted message.
+var sendLoadException = function(message) {
+ window.parent.postMessage({
+ "href": window.location.href,
+ "data": [0, {"type": "loadException", "message": message}]
+ }, window.location.origin);
+}
+
+// The basename of the current page.
+var name = window.location.href.replace(/.*\//, '').replace(/#.*/, '');
+
+// Find <link rel="x-dart-test">.
+var links = document.getElementsByTagName("link");
+var testLinks = [];
+var length = links.length;
+for (var i = 0; i < length; ++i) {
+ if (links[i].rel == "x-dart-test") testLinks.push(links[i]);
+}
+
+if (links.length != 1) {
+ sendLoadException(
+ 'Expected exactly 1 <link rel="x-dart-test"> in ' + name + ', found ' +
+ links.length + '.');
+ return;
+}
+
+var link = links[0];
+
+if (link.href == '') {
+ sendLoadException(
+ 'Expected <link rel="x-dart-test"> in ' + name + ' to have an "href" ' +
+ 'attribute.');
+ return;
+}
+
+var script = document.createElement('script');
+
+// Load the compiled JS for a normal browser, and the Dart code for Dartium.
+if (navigator.userAgent.indexOf('(Dart)') === -1) {
+ script.src = link.href + '.browser_test.dart.js';
+} else {
+ script.src = link.href + '.browser_test.dart';
+ script.type = 'application/dart';
+}
+
+script.onerror = function(event) {
+ var message = "Failed to load script at " + script.src +
+ (event.message ? ": " + event.message : ".");
+ sendLoadException(message);
+}
+
+var parent = link.parentNode;
+document.currentScript = script;
+parent.replaceChild(script, link);
+
+};
« no previous file with comments | « README.md ('k') | lib/pub_serve.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698