| // Copyright 2019 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. |
| |
| (async function() { |
| TestRunner.addResult(`Tests Application Panel's handling of storages in iframes.\n`); |
| await TestRunner.loadModule('application_test_runner'); |
| // Note: every test that uses a storage API must manually clean-up state from previous tests. |
| await ApplicationTestRunner.resetState(); |
| |
| await TestRunner.loadModule('console_test_runner'); |
| await TestRunner.showPanel('resources'); |
| |
| function createIndexedDBInMainFrame(callback) { |
| var mainFrameId = TestRunner.resourceTreeModel.mainFrame.id; |
| var model = TestRunner.mainTarget.model(Resources.IndexedDBModel); |
| ApplicationTestRunner.createDatabase(mainFrameId, 'Database-main-frame', () => { |
| var event = model.addEventListener(Resources.IndexedDBModel.Events.DatabaseAdded, () => { |
| Common.EventTarget.removeEventListeners([event]); |
| callback(); |
| }); |
| model.refreshDatabaseNames(); |
| }); |
| } |
| |
| function dumpTree(node, level) { |
| for (var child of node.children()) { |
| TestRunner.addResult(' '.repeat(level) + child.listItemElement.textContent); |
| dumpTree(child, level + 1); |
| } |
| } |
| |
| // create IndexedDB in iframe |
| // We are enforcing OOPIFs here, so that we are sure that the bots on all platforms create an OOPIF. |
| // This would not be guaranteed otherwise and could potentially result in a different display name |
| // for the iframe in the frame tree. |
| await TestRunner.addIframe('http://devtools.oopif.test:8000/devtools/application-panel/resources/indexeddb-in-iframe.html', {'id': 'indexeddb_page'}); |
| |
| await TestRunner.addSnifferPromise(UI.panels.resources._sidebar.indexedDBListTreeElement, '_indexedDBLoadedForTest'); |
| |
| // create IndexedDB in main frame |
| await new Promise(createIndexedDBInMainFrame); |
| await TestRunner.addSnifferPromise(UI.panels.resources._sidebar.indexedDBListTreeElement, '_indexedDBLoadedForTest'); |
| |
| const view = UI.panels.resources; |
| |
| TestRunner.addResult('Initial tree...\n'); |
| |
| dumpTree(view._sidebar._sidebarTree.rootElement(), 0); |
| |
| TestRunner.addResult('\nRemove iframe from page...\n'); |
| await TestRunner.evaluateInPageAsync(` |
| (function(){ |
| let iframe = document.getElementById('indexeddb_page'); |
| iframe.parentNode.removeChild(iframe); |
| })(); |
| `); |
| |
| dumpTree(view._sidebar._sidebarTree.rootElement(), 0); |
| |
| TestRunner.addResult('\nAdd iframe to page again...\n'); |
| await TestRunner.addIframe('http://devtools.oopif.test:8000/devtools/application-panel/resources/indexeddb-in-iframe.html', {'id': 'indexeddb_page'}); |
| await TestRunner.addSnifferPromise(UI.panels.resources._sidebar.indexedDBListTreeElement, '_indexedDBLoadedForTest'); |
| |
| dumpTree(view._sidebar._sidebarTree.rootElement(), 0); |
| |
| TestRunner.completeTest(); |
| })(); |