<!DOCTYPE html>
<title>Plugin starting with TEXT/HTML</title>
<object data="about:blank" type="text/html"></object>
<script>
var object = document.querySelector("object");
window.addEventListener("load", init);
function init() {
let href = window.location.href;
const token = "?test_data=";
let query_index = href.indexOf(token);
let test_data = null;
if (query_index !== -1) {
test_data = href.substr(query_index + token.length).split(",");
}
if (test_data) {
let test_command =
`${test_data[0]}('${test_data.splice(1).join("','")}');`;
window.eval(test_command);
}
}
// Returns true if |w| is cross-origin with |window|.
function is_cross_origin(w) {
let result = false;
try {
w.location.origin;
} catch(e) {
result = true;
}
return result;
}
// Navigates <object> to |cross_origin_url|. Then sets the object type to
// "text/csv" and triggers a MimeHandlerView creation. The test succeeds if
// the MHV extension is loaded.
function test_cross_origin_frame(cross_origin_url, csv_url) {
object.data = cross_origin_url;
object.onload = () => {
if (!is_cross_origin(window[0]))
return;
object.type = "text/csv";
object.data = csv_url;
};
}
// Navigates the <object> to |cross_origin_url| and after a very short timeout
// sets the object type and source to "text/csv". The test succeeds if the
// MHV extension is loaded.
function test_navigation_race_embedder(cross_origin_url, csv_url) {
object.data = cross_origin_url;
window.setTimeout(() => {
object.type = "text/csv";
object.data = csv_url;
}, 0);
}
// Navigates the object to some cross-origin content which then navigates it
// self to another location passed through the query. After the load event,
// the <object> is set to render a MimeHandlerView. This would lead to a
// navigation race: the browser will try to navigate the content frame to
// 'about:blank' while the cross-process renderer triggers its own navigation.
// The test succeeds when the MHV extension is loaded.
function test_navigation_race_cross_origin(cross_origin_url,
other_cross_origin_url,
csv_url) {
object.data = `${cross_origin_url}?next=${other_cross_origin_url}`;
object.onload = () => {
if (!is_cross_origin(window[0]))
return;
if (object.data === csv_url)
return;
object.type = "text/csv";
object.data = csv_url;
};
}
</script>