blob: 640e1672f765d787ac853c1a256a25cfeb0814df [file]
<!DOCTYPE html>
<html>
<!--
Copyright 2026 The Chromium Authors
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
This script gives a minimal example of mojo usage by sending messages to a
receiver that lives in the browser process. To execute it, build the
`content_shell` target in some out directory (e.g. out/default), then run:
out/default/content_shell --enable-blink-features=MojoJS \
"file://$(pwd)/content/test/data/rust_mojo_test.html?out=../../../out/default"
-->
<head>
<title>Rust Mojo Test</title>
</head>
<body>
<h1>Chromium Rust Mojo Service Test</h1>
<div>
<label for="indexInput">Message Index:</label>
<input type="number" id="indexInput" value="0" min="0" max="99" style="width: 50px;">
<button id="rustButton">What does the Rust say?</button>
</div>
<div style="margin-top: 10px;">
<strong>Finch Status:</strong> <span id="finchStatus">Loading...</span>
</div>
<p id="responseField" style="font-family: monospace; margin-top: 20px; color: #333;"></p>
<script>
const out = new URLSearchParams(window.location.search).get('out') || '../../../out/default';
const prefix = (window.location.protocol === 'file:') ? `${out}/gen/` : '/gen/';
[
'mojo/public/js/mojo_bindings_lite.js',
'content/shell/common/rust_test.test-mojom-lite.js'
].forEach(src => {
document.write(`<script src="${prefix}${src}"></scr` + 'ipt>');
});
</script>
<script>
function getRemote() {
if (typeof content === 'undefined' || !content.rustTest || !content.rustTest.mojom || !content.rustTest.mojom.RustTestService) {
throw new Error("'content.rustTest.mojom.RustTestService' is not defined. Ensure MojoJS is enabled.");
}
return content.rustTest.mojom.RustTestService.getRemote();
}
async function getRustMessage(index) {
const remote = getRemote();
const { message } = await remote.getStringFromRust(index);
return message;
}
async function checkFinchFlag() {
const finchStatus = document.getElementById('finchStatus');
try {
const remote = getRemote();
const { enabled } = await remote.isFeatureFlagSetViaRustEnabled();
finchStatus.innerText = `FeatureFlagSetViaRust is ${enabled}!`;
finchStatus.style.color = enabled ? 'green' : 'red';
} catch (e) {
finchStatus.innerText = "Error: " + e.message;
}
}
document.getElementById('rustButton').addEventListener('click', async () => {
const responseField = document.getElementById('responseField');
const index = parseInt(document.getElementById('indexInput').value, 10);
responseField.innerText = `Asking Rust for message ${index}...`;
try {
const message = await getRustMessage(index);
responseField.innerText = `"${message}"`;
} catch (e) {
responseField.innerText = "Error: " + e.message;
}
});
// Check flag status on load
window.addEventListener('load', checkFinchFlag);
</script>
</body>
</html>