<!DOCTYPE html>
<html>
<head>
<title>
Test if canceling events after setTargetAtTime crashes
</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../resources/audit-util.js"></script>
<script src="../resources/audit.js"></script>
</head>
<body>
<script id="layout-test-code">
// Arbitrary parameters for the offline context.
const sampleRate = 48000;
const renderDuration = 1;
const channels = 2;
const renderFrames = renderDuration * sampleRate;
const audit = Audit.createTaskRunner();
audit.define('crash', (task, should) => {
const context =
new OfflineAudioContext(channels, renderFrames, sampleRate);
const source = context.createConstantSource();
const analyser = context.createAnalyser();
source.connect(analyser);
// Scheduling the following at an earlier time than above causes the
// page to crash in 73.0.3638.0. See crbug.com/913217.
source.offset.setValueAtTime(1, context.currentTime);
source.offset.setTargetAtTime(0, context.currentTime + 2, 0.00001);
source.offset.cancelAndHoldAtTime(context.currentTime + 1.99999);
source.start(context.currentTime);
context.startRendering().then(() => {
// Should finish without a crash.
task.done();
});
});
audit.run();
</script>
</body>
</html>