// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(async function(testRunner) {
const {page, session, dp} = await testRunner.startWithFrameControl(
`Tests that intersection observer works with device emulation.`);
const RendererTestHelper =
await testRunner.loadScript('../helpers/renderer-test-helper.js');
const {httpInterceptor, frameNavigationHelper, virtualTimeController} =
await (new RendererTestHelper(testRunner, dp, page)).init();
const params = {
deviceScaleFactor: 1,
width: 384,
height: 800,
mobile: true,
screenWidth: 384,
screenHeight: 800,
viewport: {x: 0, y: 0, width: 1, height: 1, scale: 1}
};
await dp.Emulation.setDeviceMetricsOverride(params);
dp.Runtime.enable();
httpInterceptor.addResponse(`http://example.com/`, `
<html><head>
<style>
.tall { background-color: green; height: 3000px; }
.short { background-color: red; height: 100px; }
</style></head>
<body>
<div id='target' class='short'></div>
<div class='tall'></div>
</body>
<script>
window.addEventListener('DOMContentLoaded', () => {
const observer = new IntersectionObserver((entries, observer) => {
for (const entry of entries) {
console.log(entry.target.id + ' intersecting ' +
entry.isIntersecting);
}
});
observer.observe(document.querySelector('#target'));
});
</script>
`);
await virtualTimeController.initialize(1000);
await frameNavigationHelper.navigate('http://example.com/');
await virtualTimeController.grantTime(1000);
session.evaluateAsync(`
window.scrollBy(0, 200);
`);
await virtualTimeController.grantTime(500);
session.evaluateAsync(`
window.scrollTo(0, 0);
`);
await virtualTimeController.grantTime(500);
testRunner.completeTest();
})