|  | // 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(); | 
|  | }; |