blob: c952e2063c712ba75f954d6566ac8494aa73f5f2 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview
* -- WebviewScrollShadowsHelper --
*
* Sends scroll information from within the webview. This information is used
* to appropriately add classes to the webview in order to display shadows on
* top of it. The shadows show to the user if there is content hidden that
* could be seen if the user would scroll up/down.
*/
/* #export */ const WebviewScrollShadowsHelper = (function() {
function WebviewScrollShadowsHelper() {}
WebviewScrollShadowsHelper.prototype = {
init(channel) {
this.channel_ = channel;
window.addEventListener('scroll', this.sendScrollInfo_.bind(this));
window.addEventListener('resize', this.sendScrollInfo_.bind(this));
this.boundAttachResizeObserver_ = this.attachResizeObserver_.bind(this);
window.addEventListener('load', this.boundAttachResizeObserver_);
this.resizeObserver = new ResizeObserver(() => {
this.sendScrollInfo_();
});
},
// Observe when document.body changes in size.
attachResizeObserver_(event) {
this.resizeObserver.observe(document.body);
window.removeEventListener(event.type, this.boundAttachResizeObserver_);
},
sendScrollInfo_(event) {
this.channel_.send({
name: 'scrollInfo',
scrollTop: window.scrollY,
scrollHeight: document.body.scrollHeight
});
},
};
return WebviewScrollShadowsHelper;
})();
const WebviewScrollShadowsHelperConstructor = function() {
return new WebviewScrollShadowsHelper();
};