This repository has been archived on 2022-10-14. You can view files and clone it, but cannot push or open issues/pull-requests.
melonybot/resources/metastream-extension-0.4.0_0/webview.js

81 lines
2.4 KiB
JavaScript

//
// Listens for webview events
//
;(function() {
const throttle = (func, limit) => {
let inThrottle
return function() {
const args = arguments
const context = this
if (!inThrottle) {
func.apply(context, args)
inThrottle = true
setTimeout(() => (inThrottle = false), limit)
}
}
}
chrome.runtime.onMessage.addListener(action => {
if (typeof action !== 'object' || typeof action.type !== 'string') return
switch (action.type) {
case 'navigate':
history.go(Number(action.payload) || 0)
break
case 'reload':
location.reload(Boolean(action.payload))
break
case 'stop':
stop()
break
}
})
chrome.runtime.sendMessage({
type: 'metastream-webview-event',
payload: { type: 'load-script' }
})
// Forward activity signal to top frame
// Used for determining inactivity in interactive mode and for verifying
// whether user triggered media state changes.
const onWebviewActivity = event => {
if (!event.isTrusted) return
chrome.runtime.sendMessage({
type: 'metastream-webview-event',
payload: { type: 'activity', payload: event.type }
})
}
const onFrequentWebviewActivity = throttle(onWebviewActivity, 500)
const onImportantWebviewActivity = throttle(onWebviewActivity, 80)
document.addEventListener('mousemove', onFrequentWebviewActivity, true)
document.addEventListener('mousedown', onImportantWebviewActivity, true)
document.addEventListener('mouseup', onImportantWebviewActivity, true)
document.addEventListener('mousewheel', onFrequentWebviewActivity, true)
document.addEventListener('keydown', onImportantWebviewActivity, true)
const mainWorldScript = function() {
document.getElementById('metastreamwebviewinit').remove()
// Fix for setting document.domain in sandboxed iframe
try {
Object.defineProperty(document, 'domain', {
value: document.domain,
writable: true
})
} catch (e) {}
// Fix for sandboxed iframe detection
Object.defineProperty(HTMLObjectElement.prototype, 'onerror', {
set: () => {}
})
}
const script = document.createElement('script')
script.id = 'metastreamwebviewinit'
script.textContent = `(${mainWorldScript}());`
if (document.documentElement) {
document.documentElement.appendChild(script)
}
})()