blob: 0558a2fa892fcc09993d8d923c55dfd2f018e5fe [file] [log] [blame]
// 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);
}
// Listen for dartLoadException events and forward to the server.
window.addEventListener('dartLoadException', function(e) {
sendLoadException(e.detail);
});
// 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 (testLinks.length != 1) {
sendLoadException(
'Expected exactly 1 <link rel="x-dart-test"> in ' + name + ', found ' +
testLinks.length + '.');
return;
}
var link = testLinks[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);
};