123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- <html>
- <script type="text/javascript" charset="utf-8">
- function timeout(ms) {
- return new Promise((resolve) => {
- setTimeout(resolve, ms)
- })
- }
- async function invokeGc () {
- // it seems calling window.gc once does not guarantee garbage will be
- // collected, so we repeat 10 times with interval of 100 ms
- for (let i = 0; i < 10; i++) {
- window.gc()
- await timeout(100)
- }
- }
- const [,test] = window.location.href.split('?')
- if (window.opener && test !== 'reload-remote') {
- window.callback = () => {
- opener.require('electron').ipcRenderer.send('answer', document.body.innerHTML)
- }
- } else {
- const {ipcRenderer, remote} = require('electron')
- const tests = {
- 'reload-remote-child': () => {
- open(`${location.protocol}//${location.pathname}?reload-remote`)
- },
- 'reload-remote': async () => {
- const p = ipcRenderer.sendSync('get-remote-module-path')
- const Hello = remote.require(p)
- if (!ipcRenderer.sendSync('reloaded')) {
- ipcRenderer.send('reload')
- return
- }
- await invokeGc()
- ipcRenderer.send('answer', new Hello().say())
- },
- 'allocate-memory': async () => {
- await invokeGc()
- const {privateBytes: bytesBeforeOpen} = process.getProcessMemoryInfo()
- let w = open('./allocate-memory.html')
- await invokeGc()
- const {privateBytes: bytesAfterOpen} = process.getProcessMemoryInfo()
- w.close()
- w = null
- await invokeGc()
- const {privateBytes: bytesAfterClose} = process.getProcessMemoryInfo()
- ipcRenderer.send('answer', {
- bytesBeforeOpen, bytesAfterOpen, bytesAfterClose
- })
- },
- 'window-events': () => {
- document.title = 'changed'
- },
- 'webcontents-stop': () => {
- stop()
- },
- 'webcontents-events': () => {
- addEventListener('load', () => {
- location.hash = 'in-page-navigate'
- setTimeout(() => {
- location.reload()
- }, 50)
- })
- },
- 'exit-event': () => {
- process.on('exit', () => {
- ipcRenderer.send('answer', location.href)
- })
- location.assign('http://www.google.com')
- },
- 'window-open': () => {
- addEventListener('load', () => {
- popup = open(window.location.href, 'popup!', 'top=60,left=50,width=500,height=600')
- popup.addEventListener('DOMContentLoaded', () => {
- popup.document.write('<h1>scripting from opener</h1>')
- popup.callback()
- }, false)
- })
- },
- 'window-open-external': () => {
- addEventListener('load', () => {
- ipcRenderer.once('child-loaded', (e) => {
- try {
- let childDoc = popup.document
- } catch (e) {
- ipcRenderer.send('answer', e.message)
- }
- })
- popup = open('http://www.google.com/#q=electron', '', 'top=65,left=55,width=505,height=605')
- })
- },
- 'verify-ipc-sender': () => {
- popup = open()
- ipcRenderer.once('verified', () => {
- ipcRenderer.send('parent-answer')
- })
- popup.ipcRenderer.once('verified', () => {
- popup.ipcRenderer.send('child-answer')
- })
- setTimeout(() => {
- ipcRenderer.send('parent-ready')
- popup.ipcRenderer.send('child-ready')
- }, 50)
- }
- }
- addEventListener('unload', () => {
- if (window.popup)
- popup.close()
- }, false)
- if (tests.hasOwnProperty(test))
- tests[test]()
- }
- </script>
- </html>
|