UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

1 lines 51.9 kB
import*as Common from"../../core/common/common.js";import*as Host from"../../core/host/host.js";import*as i18n from"../../core/i18n/i18n.js";import*as Platform from"../../core/platform/platform.js";import*as Root from"../../core/root/root.js";import*as SDK from"../../core/sdk/sdk.js";import*as LegacyWrapper from"../../ui/components/legacy_wrapper/legacy_wrapper.js";import*as SourceFrame from"../../ui/legacy/components/source_frame/source_frame.js";import*as UI from"../../ui/legacy/legacy.js";import{ApplicationPanelTreeElement,ExpandableApplicationPanelTreeElement}from"./ApplicationPanelTreeElement.js";import{AppManifestView}from"./AppManifestView.js";import{BackForwardCacheTreeElement}from"./BackForwardCacheTreeElement.js";import{BackgroundServiceModel}from"./BackgroundServiceModel.js";import{BackgroundServiceView}from"./BackgroundServiceView.js";import{BounceTrackingMitigationsTreeElement}from"./BounceTrackingMitigationsTreeElement.js";import*as ApplicationComponents from"./components/components.js";import{PreloadingTreeElement}from"./PreloadingTreeElement.js";import resourcesSidebarStyles from"./resourcesSidebar.css.js";import{ServiceWorkerCacheTreeElement}from"./ServiceWorkerCacheTreeElement.js";import{DatabaseModel,Events as DatabaseModelEvents}from"./DatabaseModel.js";import{DatabaseQueryView,Events as DatabaseQueryViewEvents}from"./DatabaseQueryView.js";import{DatabaseTableView}from"./DatabaseTableView.js";import{DOMStorageModel,Events as DOMStorageModelEvents}from"./DOMStorageModel.js";import{Events as IndexedDBModelEvents,IndexedDBModel}from"./IndexedDBModel.js";import{IDBDatabaseView,IDBDataView}from"./IndexedDBViews.js";import{InterestGroupStorageModel,Events as InterestGroupModelEvents}from"./InterestGroupStorageModel.js";import{InterestGroupTreeElement}from"./InterestGroupTreeElement.js";import{OpenedWindowDetailsView,WorkerDetailsView}from"./OpenedWindowDetailsView.js";import{ServiceWorkersView}from"./ServiceWorkersView.js";import{StorageBucketsTreeParentElement}from"./StorageBucketsTreeElement.js";import{SharedStorageListTreeElement}from"./SharedStorageListTreeElement.js";import{SharedStorageModel,Events as SharedStorageModelEvents}from"./SharedStorageModel.js";import{SharedStorageTreeElement}from"./SharedStorageTreeElement.js";import{StorageView}from"./StorageView.js";import{TrustTokensTreeElement}from"./TrustTokensTreeElement.js";import{ReportingApiTreeElement}from"./ReportingApiTreeElement.js";const UIStrings={application:"Application",storage:"Storage",localStorage:"Local storage",sessionStorage:"Session storage",webSql:"Web SQL",cookies:"Cookies",backgroundServices:"Background services",preloading:"Preloading",frames:"Frames",manifest:"Manifest",noManifestDetected:"No manifest detected",appManifest:"App Manifest",indexeddb:"IndexedDB",refreshIndexeddb:"Refresh IndexedDB",versionSEmpty:"Version: {PH1} (empty)",versionS:"Version: {PH1}",clear:"Clear",keyPathS:"Key path: {PH1}",localFiles:"Local Files",cookiesUsedByFramesFromS:"Cookies used by frames from {PH1}",openedWindows:"Opened Windows",webWorkers:"Web Workers",documentNotAvailable:"Document not available",theContentOfThisDocumentHasBeen:"The content of this document has been generated dynamically via 'document.write()'.",windowWithoutTitle:"Window without title",worker:"worker",onInvokeManifestAlert:"Manifest: Invoke to scroll to the top of manifest",beforeInvokeAlert:"{PH1}: Invoke to scroll to this section in manifest",onInvokeAlert:"Scrolled to {PH1}",applicationSidebarPanel:"Application panel sidebar"},str_=i18n.i18n.registerUIStrings("panels/application/ApplicationPanelSidebar.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);function assertNotMainTarget(e){if("main"===e)throw new Error("Unexpected main target id")}export var SharedStorageTreeElementDispatcher;!function(e){let t;!function(e){e.SharedStorageTreeElementAdded="SharedStorageTreeElementAdded"}(t=e.Events||(e.Events={}))}(SharedStorageTreeElementDispatcher||(SharedStorageTreeElementDispatcher={}));export class ApplicationPanelSidebar extends UI.Widget.VBox{panel;sidebarTree;applicationTreeElement;serviceWorkersTreeElement;localStorageListTreeElement;sessionStorageListTreeElement;indexedDBListTreeElement;interestGroupTreeElement;databasesListTreeElement;cookieListTreeElement;trustTokensTreeElement;cacheStorageListTreeElement;sharedStorageListTreeElement;storageBucketsTreeElement;backForwardCacheListTreeElement;backgroundFetchTreeElement;backgroundSyncTreeElement;bounceTrackingMitigationsTreeElement;notificationsTreeElement;paymentHandlerTreeElement;periodicBackgroundSyncTreeElement;pushMessagingTreeElement;reportingApiTreeElement;preloadingRuleSetTreeElement;preloadingAttemptTreeElement;preloadingResultTreeElement;resourcesSection;databaseTableViews;databaseQueryViews;databaseTreeElements;domStorageTreeElements;sharedStorageTreeElements;domains;target;databaseModel;previousHoveredElement;sharedStorageTreeElementDispatcher;constructor(e){super(),this.panel=e,this.sidebarTree=new UI.TreeOutline.TreeOutlineInShadow,this.sidebarTree.element.classList.add("resources-sidebar"),this.sidebarTree.element.classList.add("filter-all"),this.sidebarTree.addEventListener(UI.TreeOutline.Events.ElementAttached,this.treeElementAdded,this),this.contentElement.appendChild(this.sidebarTree.element);const t=i18nString(UIStrings.application);this.applicationTreeElement=this.addSidebarSection(t);const s=this.applicationTreeElement.treeOutline?.contentElement;s&&(s.ariaLabel=i18nString(UIStrings.applicationSidebarPanel));const r=new AppManifestTreeElement(e);this.applicationTreeElement.appendChild(r),r.generateChildren(),this.serviceWorkersTreeElement=new ServiceWorkersTreeElement(e),this.applicationTreeElement.appendChild(this.serviceWorkersTreeElement);const n=new ClearStorageTreeElement(e);this.applicationTreeElement.appendChild(n);const i=i18nString(UIStrings.storage),a=this.addSidebarSection(i);this.localStorageListTreeElement=new ExpandableApplicationPanelTreeElement(e,i18nString(UIStrings.localStorage),"LocalStorage"),this.localStorageListTreeElement.setLink("https://developer.chrome.com/docs/devtools/storage/localstorage/?utm_source=devtools");const o=UI.Icon.Icon.create("table","resource-tree-item");this.localStorageListTreeElement.setLeadingIcons([o]),a.appendChild(this.localStorageListTreeElement),this.sessionStorageListTreeElement=new ExpandableApplicationPanelTreeElement(e,i18nString(UIStrings.sessionStorage),"SessionStorage"),this.sessionStorageListTreeElement.setLink("https://developer.chrome.com/docs/devtools/storage/sessionstorage/?utm_source=devtools");const d=UI.Icon.Icon.create("table","resource-tree-item");this.sessionStorageListTreeElement.setLeadingIcons([d]),a.appendChild(this.sessionStorageListTreeElement),this.indexedDBListTreeElement=new IndexedDBTreeElement(e),this.indexedDBListTreeElement.setLink("https://developer.chrome.com/docs/devtools/storage/indexeddb/?utm_source=devtools"),a.appendChild(this.indexedDBListTreeElement),this.databasesListTreeElement=new ExpandableApplicationPanelTreeElement(e,i18nString(UIStrings.webSql),"Databases"),this.databasesListTreeElement.setLink("https://developer.chrome.com/docs/devtools/storage/websql/?utm_source=devtools");const l=UI.Icon.Icon.create("database","resource-tree-item");this.databasesListTreeElement.setLeadingIcons([l]),a.appendChild(this.databasesListTreeElement),this.cookieListTreeElement=new ExpandableApplicationPanelTreeElement(e,i18nString(UIStrings.cookies),"Cookies"),this.cookieListTreeElement.setLink("https://developer.chrome.com/docs/devtools/storage/cookies/?utm_source=devtools");const c=UI.Icon.Icon.create("cookie","resource-tree-item");this.cookieListTreeElement.setLeadingIcons([c]),a.appendChild(this.cookieListTreeElement),this.trustTokensTreeElement=new TrustTokensTreeElement(e),a.appendChild(this.trustTokensTreeElement),this.interestGroupTreeElement=new InterestGroupTreeElement(e),a.appendChild(this.interestGroupTreeElement),this.sharedStorageListTreeElement=new SharedStorageListTreeElement(e),a.appendChild(this.sharedStorageListTreeElement),this.cacheStorageListTreeElement=new ServiceWorkerCacheTreeElement(e),a.appendChild(this.cacheStorageListTreeElement),Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.STORAGE_BUCKETS_TREE)&&(this.storageBucketsTreeElement=new StorageBucketsTreeParentElement(e),a.appendChild(this.storageBucketsTreeElement));const h=i18nString(UIStrings.backgroundServices),m=this.addSidebarSection(h);if(this.backForwardCacheListTreeElement=new BackForwardCacheTreeElement(e),m.appendChild(this.backForwardCacheListTreeElement),this.backgroundFetchTreeElement=new BackgroundServiceTreeElement(e,"backgroundFetch"),m.appendChild(this.backgroundFetchTreeElement),this.backgroundSyncTreeElement=new BackgroundServiceTreeElement(e,"backgroundSync"),m.appendChild(this.backgroundSyncTreeElement),this.bounceTrackingMitigationsTreeElement=new BounceTrackingMitigationsTreeElement(e),m.appendChild(this.bounceTrackingMitigationsTreeElement),this.notificationsTreeElement=new BackgroundServiceTreeElement(e,"notifications"),m.appendChild(this.notificationsTreeElement),this.paymentHandlerTreeElement=new BackgroundServiceTreeElement(e,"paymentHandler"),m.appendChild(this.paymentHandlerTreeElement),this.periodicBackgroundSyncTreeElement=new BackgroundServiceTreeElement(e,"periodicBackgroundSync"),m.appendChild(this.periodicBackgroundSyncTreeElement),this.pushMessagingTreeElement=new BackgroundServiceTreeElement(e,"pushMessaging"),m.appendChild(this.pushMessagingTreeElement),this.reportingApiTreeElement=new ReportingApiTreeElement(e),m.appendChild(this.reportingApiTreeElement),Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.PRELOADING_STATUS_PANEL)){const t=i18nString(UIStrings.preloading),s=this.addSidebarSection(t);this.preloadingRuleSetTreeElement=PreloadingTreeElement.newForPreloadingRuleSetView(e),this.preloadingAttemptTreeElement=PreloadingTreeElement.newForPreloadingAttemptView(e),this.preloadingResultTreeElement=PreloadingTreeElement.newForPreloadingResultView(e),s.appendChild(this.preloadingRuleSetTreeElement),s.appendChild(this.preloadingAttemptTreeElement),s.appendChild(this.preloadingResultTreeElement)}const g=i18nString(UIStrings.frames),p=this.addSidebarSection(g);this.resourcesSection=new ResourcesSection(e,p),this.databaseTableViews=new Map,this.databaseQueryViews=new Map,this.databaseTreeElements=new Map,this.domStorageTreeElements=new Map,this.sharedStorageTreeElements=new Map,this.domains={},this.sidebarTree.contentElement.addEventListener("mousemove",this.onmousemove.bind(this),!1),this.sidebarTree.contentElement.addEventListener("mouseleave",this.onmouseleave.bind(this),!1),SDK.TargetManager.TargetManager.instance().observeTargets(this,{scoped:!0}),SDK.TargetManager.TargetManager.instance().addModelListener(SDK.ResourceTreeModel.ResourceTreeModel,SDK.ResourceTreeModel.Events.FrameNavigated,this.frameNavigated,this,{scoped:!0});this.panel.lastSelectedItemPath().length||r.select(),SDK.TargetManager.TargetManager.instance().observeModels(DOMStorageModel,{modelAdded:e=>this.domStorageModelAdded(e),modelRemoved:e=>this.domStorageModelRemoved(e)},{scoped:!0}),SDK.TargetManager.TargetManager.instance().observeModels(IndexedDBModel,{modelAdded:e=>this.indexedDBModelAdded(e),modelRemoved:e=>this.indexedDBModelRemoved(e)},{scoped:!0}),SDK.TargetManager.TargetManager.instance().observeModels(InterestGroupStorageModel,{modelAdded:e=>this.interestGroupModelAdded(e),modelRemoved:e=>this.interestGroupModelRemoved(e)},{scoped:!0}),SDK.TargetManager.TargetManager.instance().observeModels(SharedStorageModel,{modelAdded:e=>this.sharedStorageModelAdded(e).catch((e=>{console.error(e)})),modelRemoved:e=>this.sharedStorageModelRemoved(e)},{scoped:!0}),SDK.TargetManager.TargetManager.instance().observeModels(SDK.StorageBucketsModel.StorageBucketsModel,{modelAdded:e=>this.storageBucketsModelAdded(e),modelRemoved:e=>this.storageBucketsModelRemoved(e)},{scoped:!0}),this.sharedStorageTreeElementDispatcher=new Common.ObjectWrapper.ObjectWrapper,this.contentElement.style.contain="layout style"}addSidebarSection(e){const t=new UI.TreeOutline.TreeElement(e,!0);return t.listItemElement.classList.add("storage-group-list-item"),t.setCollapsible(!1),t.selectable=!1,this.sidebarTree.appendChild(t),UI.ARIAUtils.markAsHeading(t.listItemElement,3),UI.ARIAUtils.setLabel(t.childrenListElement,e),t}targetAdded(e){if(e!==e.outermostTarget())return;this.target=e,this.databaseModel=e.model(DatabaseModel),this.databaseModel&&(this.databaseModel.addEventListener(DatabaseModelEvents.DatabaseAdded,this.databaseAdded,this),this.databaseModel.addEventListener(DatabaseModelEvents.DatabasesRemoved,this.resetWebSQL,this));const t=e.model(InterestGroupStorageModel);t&&t.addEventListener(InterestGroupModelEvents.InterestGroupAccess,this.interestGroupAccess,this);const s=e.model(SDK.ResourceTreeModel.ResourceTreeModel);s&&(s.cachedResourcesLoaded()&&this.initialize(),s.addEventListener(SDK.ResourceTreeModel.Events.CachedResourcesLoaded,this.initialize,this),s.addEventListener(SDK.ResourceTreeModel.Events.WillLoadCachedResources,this.resetWithFrames,this))}targetRemoved(e){if(e!==this.target)return;delete this.target;const t=e.model(SDK.ResourceTreeModel.ResourceTreeModel);t&&(t.removeEventListener(SDK.ResourceTreeModel.Events.CachedResourcesLoaded,this.initialize,this),t.removeEventListener(SDK.ResourceTreeModel.Events.WillLoadCachedResources,this.resetWithFrames,this)),this.databaseModel&&(this.databaseModel.removeEventListener(DatabaseModelEvents.DatabaseAdded,this.databaseAdded,this),this.databaseModel.removeEventListener(DatabaseModelEvents.DatabasesRemoved,this.resetWebSQL,this),this.databaseModel=null);const s=e.model(InterestGroupStorageModel);s&&s.removeEventListener(InterestGroupModelEvents.InterestGroupAccess,this.interestGroupAccess,this),this.resetWithFrames()}focus(){this.sidebarTree.focus()}initialize(){for(const e of SDK.ResourceTreeModel.ResourceTreeModel.frames())this.addCookieDocument(e);this.databaseModel&&this.databaseModel.enable();const e=this.target&&this.target.model(InterestGroupStorageModel);e&&e.enable(),this.cacheStorageListTreeElement.initialize();const t=this.target&&this.target.model(BackgroundServiceModel)||null;if(this.backgroundFetchTreeElement&&this.backgroundFetchTreeElement.initialize(t),this.backgroundSyncTreeElement&&this.backgroundSyncTreeElement.initialize(t),this.notificationsTreeElement.initialize(t),this.paymentHandlerTreeElement.initialize(t),this.periodicBackgroundSyncTreeElement.initialize(t),this.pushMessagingTreeElement.initialize(t),this.storageBucketsTreeElement?.initialize(),Root.Runtime.experiments.isEnabled(Root.Runtime.ExperimentName.PRELOADING_STATUS_PANEL)){const e=this.target?.model(SDK.PreloadingModel.PreloadingModel);e&&(this.preloadingRuleSetTreeElement?.initialize(e),this.preloadingAttemptTreeElement?.initialize(e),this.preloadingResultTreeElement?.initialize(e))}}domStorageModelAdded(e){e.enable(),e.storages().forEach(this.addDOMStorage.bind(this)),e.addEventListener(DOMStorageModelEvents.DOMStorageAdded,this.domStorageAdded,this),e.addEventListener(DOMStorageModelEvents.DOMStorageRemoved,this.domStorageRemoved,this)}domStorageModelRemoved(e){e.storages().forEach(this.removeDOMStorage.bind(this)),e.removeEventListener(DOMStorageModelEvents.DOMStorageAdded,this.domStorageAdded,this),e.removeEventListener(DOMStorageModelEvents.DOMStorageRemoved,this.domStorageRemoved,this)}indexedDBModelAdded(e){e.enable(),this.indexedDBListTreeElement.addIndexedDBForModel(e)}indexedDBModelRemoved(e){this.indexedDBListTreeElement.removeIndexedDBForModel(e)}interestGroupModelAdded(e){e.enable(),e.addEventListener(InterestGroupModelEvents.InterestGroupAccess,this.interestGroupAccess,this)}interestGroupModelRemoved(e){e.disable(),e.removeEventListener(InterestGroupModelEvents.InterestGroupAccess,this.interestGroupAccess,this)}async sharedStorageModelAdded(e){await e.enable();for(const t of e.storages())await this.addSharedStorage(t);e.addEventListener(SharedStorageModelEvents.SharedStorageAdded,this.sharedStorageAdded,this),e.addEventListener(SharedStorageModelEvents.SharedStorageRemoved,this.sharedStorageRemoved,this),e.addEventListener(SharedStorageModelEvents.SharedStorageAccess,this.sharedStorageAccess,this)}sharedStorageModelRemoved(e){e.disable();for(const t of e.storages())this.removeSharedStorage(t);e.removeEventListener(SharedStorageModelEvents.SharedStorageAdded,this.sharedStorageAdded,this),e.removeEventListener(SharedStorageModelEvents.SharedStorageRemoved,this.sharedStorageRemoved,this),e.removeEventListener(SharedStorageModelEvents.SharedStorageAccess,this.sharedStorageAccess,this)}storageBucketsModelAdded(e){e.enable()}storageBucketsModelRemoved(e){this.storageBucketsTreeElement?.removeBucketsForModel(e)}resetWithFrames(){this.resourcesSection.reset(),this.reset()}resetWebSQL(){for(const e of this.databaseQueryViews.values())e.removeEventListener(DatabaseQueryViewEvents.SchemaUpdated,(e=>{this.updateDatabaseTables(e)}),this);this.databaseTableViews.clear(),this.databaseQueryViews.clear(),this.databaseTreeElements.clear(),this.databasesListTreeElement.removeChildren(),this.databasesListTreeElement.setExpandable(!1)}treeElementAdded(e){const t=this.panel.lastSelectedItemPath();if(!t.length)return;const s=e.data,r=[s];for(let e=s.parent;e&&"itemURL"in e&&e.itemURL;e=e.parent)r.push(e);let n=t.length-1,i=r.length-1;for(;n>=0&&i>=0&&t[n]===r[i].itemURL;)r[i].expanded||(n>0&&r[i].expand(),r[i].selected||r[i].select()),n--,i--}reset(){this.domains={},this.resetWebSQL(),this.cookieListTreeElement.removeChildren(),this.interestGroupTreeElement.clearEvents()}frameNavigated(e){const t=e.data;t.isOutermostFrame()&&this.reset(),this.addCookieDocument(t)}databaseAdded({data:e}){const t=new DatabaseTreeElement(this,e);this.databaseTreeElements.set(e,t),this.databasesListTreeElement.appendChild(t)}interestGroupAccess(e){this.interestGroupTreeElement.addEvent(e.data)}addCookieDocument(e){const t=e.unreachableUrl()||e.url,s=Common.ParsedURL.ParsedURL.fromString(t);if(!s||"http"!==s.scheme&&"https"!==s.scheme&&"file"!==s.scheme)return;const r=s.securityOrigin();if(!this.domains[r]){this.domains[r]=!0;const t=new CookieTreeElement(this.panel,e,r);this.cookieListTreeElement.appendChild(t)}}domStorageAdded(e){const t=e.data;this.addDOMStorage(t)}addDOMStorage(e){console.assert(!this.domStorageTreeElements.get(e)),console.assert(Boolean(e.storageKey));const t=new DOMStorageTreeElement(this.panel,e);this.domStorageTreeElements.set(e,t),e.isLocalStorage?this.localStorageListTreeElement.appendChild(t):this.sessionStorageListTreeElement.appendChild(t)}domStorageRemoved(e){const t=e.data;this.removeDOMStorage(t)}removeDOMStorage(e){const t=this.domStorageTreeElements.get(e);if(!t)return;const s=t.selected,r=t.parent;r&&(r.removeChild(t),s&&r.select()),this.domStorageTreeElements.delete(e)}async sharedStorageAdded(e){await this.addSharedStorage(e.data)}async addSharedStorage(e){const t=await SharedStorageTreeElement.createElement(this.panel,e);this.sharedStorageTreeElements.has(e.securityOrigin)||(this.sharedStorageTreeElements.set(e.securityOrigin,t),this.sharedStorageListTreeElement.appendChild(t),this.sharedStorageTreeElementDispatcher.dispatchEventToListeners(SharedStorageTreeElementDispatcher.Events.SharedStorageTreeElementAdded,{origin:e.securityOrigin}))}sharedStorageRemoved(e){this.removeSharedStorage(e.data)}removeSharedStorage(e){const t=this.sharedStorageTreeElements.get(e.securityOrigin);if(!t)return;const s=t.selected,r=t.parent;r&&(r.removeChild(t),r.setExpandable(r.childCount()>0),s&&r.select()),this.sharedStorageTreeElements.delete(e.securityOrigin)}sharedStorageAccess(e){this.sharedStorageListTreeElement.addEvent(e.data)}selectDatabase(e){if(e){this.showDatabase(e);const t=this.databaseTreeElements.get(e);t&&t.select()}}async showResource(e,t,s){await this.resourcesSection.revealResource(e,t,s)}showFrame(e){this.resourcesSection.revealAndSelectFrame(e)}showDatabase(e,t){if(!e)return;let s;if(t){let r=this.databaseTableViews.get(e);r||(r={},this.databaseTableViews.set(e,r)),s=r[t],s||(s=new DatabaseTableView(e,t),r[t]=s)}else s=this.databaseQueryViews.get(e),s||(s=new DatabaseQueryView(e),this.databaseQueryViews.set(e,s),s.addEventListener(DatabaseQueryViewEvents.SchemaUpdated,(e=>{this.updateDatabaseTables(e)}),this));this.innerShowView(s)}showFileSystem(e){this.innerShowView(e)}innerShowView(e){this.panel.showView(e)}showPreloadingRuleSetView(e){this.preloadingRuleSetTreeElement&&(this.preloadingRuleSetTreeElement.select(),this.preloadingRuleSetTreeElement.revealRuleSet(e))}showPreloadingAttemptViewWithFilter(e){this.preloadingAttemptTreeElement&&(this.preloadingAttemptTreeElement.select(),this.preloadingAttemptTreeElement.setFilter(e))}async updateDatabaseTables(e){const t=e.data;if(!t)return;const s=this.databaseTreeElements.get(t);if(!s)return;s.invalidateChildren();const r=this.databaseTableViews.get(t);if(!r)return;const n=new Set,i=this.panel,a=await t.tableNames();for(const e of a)n.add(e);for(const e in r)n.has(e)||(i.visibleView===r[e]&&i.showView(null),delete r[e]);await s.updateChildren()}onmousemove(e){const t=e.target;if(!t)return;const s=UI.UIUtils.enclosingNodeOrSelfWithNodeName(t,"li");if(!s)return;const r=UI.TreeOutline.TreeElement.getTreeElementBylistItemNode(s);this.previousHoveredElement!==r&&(this.previousHoveredElement&&(this.previousHoveredElement.hovered=!1,delete this.previousHoveredElement),r instanceof FrameTreeElement&&(this.previousHoveredElement=r,r.hovered=!0))}onmouseleave(e){this.previousHoveredElement&&(this.previousHoveredElement.hovered=!1,delete this.previousHoveredElement)}wasShown(){super.wasShown(),this.sidebarTree.registerCSSFiles([resourcesSidebarStyles])}}export class BackgroundServiceTreeElement extends ApplicationPanelTreeElement{serviceName;view;model;selectedInternal;constructor(e,t){super(e,BackgroundServiceView.getUIString(t),!1),this.serviceName=t,this.selectedInternal=!1,this.view=null,this.model=null;const s=UI.Icon.Icon.create(this.getIconType(),"resource-tree-item");this.setLeadingIcons([s])}getIconType(){switch(this.serviceName){case"backgroundFetch":return"arrow-up-down";case"backgroundSync":return"sync";case"pushMessaging":return"cloud";case"notifications":return"bell";case"paymentHandler":return"credit-card";case"periodicBackgroundSync":return"watch";default:return console.error(`Service ${this.serviceName} does not have a dedicated icon`),"table"}}initialize(e){this.model=e,this.selectedInternal&&!this.view&&this.onselect(!1)}get itemURL(){return`background-service://${this.serviceName}`}get selectable(){return!!this.model&&super.selectable}onselect(e){return super.onselect(e),this.selectedInternal=!0,!!this.model&&(this.view||(this.view=new BackgroundServiceView(this.serviceName,this.model)),this.showView(this.view),UI.Context.Context.instance().setFlavor(BackgroundServiceView,this.view),Host.userMetrics.panelShown("background_service_"+this.serviceName),!1)}}export class DatabaseTreeElement extends ApplicationPanelTreeElement{sidebar;database;constructor(e,t){super(e.panel,t.name,!0),this.sidebar=e,this.database=t;const s=UI.Icon.Icon.create("database","resource-tree-item");this.setLeadingIcons([s])}get itemURL(){return"database://"+encodeURI(this.database.name)}onselect(e){return super.onselect(e),this.sidebar.showDatabase(this.database),Host.userMetrics.panelShown(Host.UserMetrics.PanelCodes[Host.UserMetrics.PanelCodes.web_sql]),!1}onexpand(){this.updateChildren()}async updateChildren(){this.removeChildren();const e=await this.database.tableNames();for(const t of e)this.appendChild(new DatabaseTableTreeElement(this.sidebar,this.database,t))}}export class DatabaseTableTreeElement extends ApplicationPanelTreeElement{sidebar;database;tableName;constructor(e,t,s){super(e.panel,s,!1),this.sidebar=e,this.database=t,this.tableName=s;const r=UI.Icon.Icon.create("table","resource-tree-item");this.setLeadingIcons([r])}get itemURL(){return"database://"+encodeURI(this.database.name)+"/"+encodeURI(this.tableName)}onselect(e){return super.onselect(e),this.sidebar.showDatabase(this.database,this.tableName),Host.userMetrics.panelShown(Host.UserMetrics.PanelCodes[Host.UserMetrics.PanelCodes.web_sql]),!1}}export class ServiceWorkersTreeElement extends ApplicationPanelTreeElement{view;constructor(e){super(e,i18n.i18n.lockedString("Service workers"),!1);const t=UI.Icon.Icon.create("gears","resource-tree-item");this.setLeadingIcons([t])}get itemURL(){return"service-workers://"}onselect(e){return super.onselect(e),this.view||(this.view=new ServiceWorkersView),this.showView(this.view),Host.userMetrics.panelShown(Host.UserMetrics.PanelCodes[Host.UserMetrics.PanelCodes.service_workers]),!1}}export class AppManifestTreeElement extends ApplicationPanelTreeElement{view;constructor(e){super(e,i18nString(UIStrings.manifest),!0);const t=UI.Icon.Icon.create("document","resource-tree-item");this.setLeadingIcons([t]),self.onInvokeElement(this.listItemElement,this.onInvoke.bind(this));const s=new UI.EmptyWidget.EmptyWidget(i18nString(UIStrings.noManifestDetected)),r=new UI.ReportView.ReportView(i18nString(UIStrings.appManifest));this.view=new AppManifestView(s,r,new Common.Throttler.Throttler(1e3)),UI.ARIAUtils.setLabel(this.listItemElement,i18nString(UIStrings.onInvokeManifestAlert));this.view.contentElement.addEventListener("manifestDetection",(e=>{this.setExpandable(e.detail)}))}get itemURL(){return"manifest://"}onselect(e){return super.onselect(e),this.showView(this.view),Host.userMetrics.panelShown(Host.UserMetrics.PanelCodes[Host.UserMetrics.PanelCodes.app_manifest]),!1}generateChildren(){const e=this.view.getStaticSections();for(const t of e){const e=t.getTitleElement(),s=t.title(),r=t.getFieldElement(),n=new ManifestChildTreeElement(this.resourcesPanel,e,s,r);this.appendChild(n)}}onInvoke(){this.view.getManifestElement().scrollIntoView(),UI.ARIAUtils.alert(i18nString(UIStrings.onInvokeAlert,{PH1:this.listItemElement.title}))}showManifestView(){this.showView(this.view)}}export class ManifestChildTreeElement extends ApplicationPanelTreeElement{#e;#t;constructor(e,t,s,r){super(e,s,!1);const n=UI.Icon.Icon.create("document","resource-tree-item");this.setLeadingIcons([n]),this.#e=t,this.#t=r,self.onInvokeElement(this.listItemElement,this.onInvoke.bind(this)),this.listItemElement.addEventListener("keydown",this.onInvokeElementKeydown.bind(this)),UI.ARIAUtils.setLabel(this.listItemElement,i18nString(UIStrings.beforeInvokeAlert,{PH1:this.listItemElement.title}))}get itemURL(){return"manifest://"+this.title}onInvoke(){this.parent?.showManifestView(),this.#e.scrollIntoView(),UI.ARIAUtils.alert(i18nString(UIStrings.onInvokeAlert,{PH1:this.listItemElement.title})),Host.userMetrics.manifestSectionSelected(this.listItemElement.title)}onInvokeElementKeydown(e){if("Tab"!==e.key||e.shiftKey)return;const t=this.#t.querySelector(".mask-checkbox");let s=this.#t.querySelector('[tabindex="0"]');t&&t.shadowRoot?s=t.shadowRoot.querySelector("input")||null:s||(s=this.#t.querySelector("devtools-protocol-handlers-view")?.shadowRoot?.querySelector('[tabindex="0"]')||null),s&&(s?.focus(),e.consume(!0))}}export class ClearStorageTreeElement extends ApplicationPanelTreeElement{view;constructor(e){super(e,i18nString(UIStrings.storage),!1);const t=UI.Icon.Icon.create("database","resource-tree-item");this.setLeadingIcons([t])}get itemURL(){return"clear-storage://"}onselect(e){return super.onselect(e),this.view||(this.view=new StorageView),this.showView(this.view),Host.userMetrics.panelShown(Host.UserMetrics.PanelCodes[Host.UserMetrics.PanelCodes.storage]),!1}}export class IndexedDBTreeElement extends ExpandableApplicationPanelTreeElement{idbDatabaseTreeElements;storageBucket;constructor(e,t){super(e,i18nString(UIStrings.indexeddb),"IndexedDB");const s=UI.Icon.Icon.create("database","resource-tree-item");this.setLeadingIcons([s]),this.idbDatabaseTreeElements=[],this.storageBucket=t,this.initialize()}initialize(){SDK.TargetManager.TargetManager.instance().addModelListener(IndexedDBModel,IndexedDBModelEvents.DatabaseAdded,this.indexedDBAdded,this,{scoped:!0}),SDK.TargetManager.TargetManager.instance().addModelListener(IndexedDBModel,IndexedDBModelEvents.DatabaseRemoved,this.indexedDBRemoved,this,{scoped:!0}),SDK.TargetManager.TargetManager.instance().addModelListener(IndexedDBModel,IndexedDBModelEvents.DatabaseLoaded,this.indexedDBLoaded,this,{scoped:!0}),SDK.TargetManager.TargetManager.instance().addModelListener(IndexedDBModel,IndexedDBModelEvents.IndexedDBContentUpdated,this.indexedDBContentUpdated,this,{scoped:!0}),this.idbDatabaseTreeElements=[];for(const e of SDK.TargetManager.TargetManager.instance().models(IndexedDBModel,{scoped:!0})){const t=e.databases();for(let s=0;s<t.length;++s)this.addIndexedDB(e,t[s])}}addIndexedDBForModel(e){for(const t of e.databases())this.addIndexedDB(e,t)}removeIndexedDBForModel(e){const t=this.idbDatabaseTreeElements.filter((t=>t.model===e));for(const e of t)this.removeIDBDatabaseTreeElement(e)}onattach(){super.onattach(),this.listItemElement.addEventListener("contextmenu",this.handleContextMenuEvent.bind(this),!0)}handleContextMenuEvent(e){const t=new UI.ContextMenu.ContextMenu(e);t.defaultSection().appendItem(i18nString(UIStrings.refreshIndexeddb),this.refreshIndexedDB.bind(this)),t.show()}refreshIndexedDB(){for(const e of SDK.TargetManager.TargetManager.instance().models(IndexedDBModel,{scoped:!0}))e.refreshDatabaseNames()}databaseInTree(e){return!this.storageBucket||e.inBucket(this.storageBucket)}indexedDBAdded({data:{databaseId:e,model:t}}){this.addIndexedDB(t,e)}addIndexedDB(e,t){if(!this.databaseInTree(t))return;const s=new IDBDatabaseTreeElement(this.resourcesPanel,e,t);this.idbDatabaseTreeElements.push(s),this.appendChild(s),e.refreshDatabase(t)}indexedDBRemoved({data:{databaseId:e,model:t}}){const s=this.idbDatabaseTreeElement(t,e);s&&this.removeIDBDatabaseTreeElement(s)}removeIDBDatabaseTreeElement(e){e.clear(),this.removeChild(e),Platform.ArrayUtilities.removeElement(this.idbDatabaseTreeElements,e),this.setExpandable(this.childCount()>0)}indexedDBLoaded({data:{database:e,model:t,entriesUpdated:s}}){const r=this.idbDatabaseTreeElement(t,e.databaseId);r&&(r.update(e,s),this.indexedDBLoadedForTest())}indexedDBLoadedForTest(){}indexedDBContentUpdated({data:{databaseId:e,objectStoreName:t,model:s}}){const r=this.idbDatabaseTreeElement(s,e);r&&r.indexedDBContentUpdated(t)}idbDatabaseTreeElement(e,t){return this.idbDatabaseTreeElements.find((s=>s.databaseId.equals(t)&&s.model===e))||null}}export class IDBDatabaseTreeElement extends ApplicationPanelTreeElement{model;databaseId;idbObjectStoreTreeElements;database;view;constructor(e,t,s){super(e,s.name,!1),this.model=t,this.databaseId=s,this.idbObjectStoreTreeElements=new Map;const r=UI.Icon.Icon.create("database","resource-tree-item");this.setLeadingIcons([r]),this.model.addEventListener(IndexedDBModelEvents.DatabaseNamesRefreshed,this.refreshIndexedDB,this)}get itemURL(){return"indexedDB://"+this.databaseId.storageBucket.storageKey+"/"+(this.databaseId.storageBucket.name??"")+"/"+this.databaseId.name}onattach(){super.onattach(),this.listItemElement.addEventListener("contextmenu",this.handleContextMenuEvent.bind(this),!0)}handleContextMenuEvent(e){const t=new UI.ContextMenu.ContextMenu(e);t.defaultSection().appendItem(i18nString(UIStrings.refreshIndexeddb),this.refreshIndexedDB.bind(this)),t.show()}refreshIndexedDB(){this.model.refreshDatabase(this.databaseId)}indexedDBContentUpdated(e){const t=this.idbObjectStoreTreeElements.get(e);t&&t.markNeedsRefresh()}update(e,t){this.database=e;const s=new Set;for(const e of[...this.database.objectStores.keys()].sort()){const r=this.database.objectStores.get(e);if(!r)continue;s.add(r.name);let n=this.idbObjectStoreTreeElements.get(r.name);n||(n=new IDBObjectStoreTreeElement(this.resourcesPanel,this.model,this.databaseId,r),this.idbObjectStoreTreeElements.set(r.name,n),this.appendChild(n)),n.update(r,t)}for(const e of this.idbObjectStoreTreeElements.keys())s.has(e)||this.objectStoreRemoved(e);this.view&&this.view.getComponent().update(e),this.updateTooltip()}updateTooltip(){const e=this.database?this.database.version:"-";0===Object.keys(this.idbObjectStoreTreeElements).length?this.tooltip=i18nString(UIStrings.versionSEmpty,{PH1:e}):this.tooltip=i18nString(UIStrings.versionS,{PH1:e})}get selectable(){return!!this.database&&super.selectable}onselect(e){return super.onselect(e),!!this.database&&(this.view||(this.view=LegacyWrapper.LegacyWrapper.legacyWrapper(UI.Widget.VBox,new IDBDatabaseView(this.model,this.database))),this.showView(this.view),Host.userMetrics.panelShown(Host.UserMetrics.PanelCodes[Host.UserMetrics.PanelCodes.indexed_db]),!1)}objectStoreRemoved(e){const t=this.idbObjectStoreTreeElements.get(e);t&&(t.clear(),this.removeChild(t)),this.idbObjectStoreTreeElements.delete(e),this.updateTooltip()}clear(){for(const e of this.idbObjectStoreTreeElements.keys())this.objectStoreRemoved(e)}}export class IDBObjectStoreTreeElement extends ApplicationPanelTreeElement{model;databaseId;idbIndexTreeElements;objectStore;view;constructor(e,t,s,r){super(e,r.name,!1),this.model=t,this.databaseId=s,this.idbIndexTreeElements=new Map,this.objectStore=r,this.view=null;const n=UI.Icon.Icon.create("table","resource-tree-item");this.setLeadingIcons([n])}get itemURL(){return"indexedDB://"+this.databaseId.storageBucket.storageKey+"/"+(this.databaseId.storageBucket.name??"")+"/"+this.databaseId.name+"/"+this.objectStore.name}onattach(){super.onattach(),this.listItemElement.addEventListener("contextmenu",this.handleContextMenuEvent.bind(this),!0)}markNeedsRefresh(){this.view&&this.view.markNeedsRefresh();for(const e of this.idbIndexTreeElements.values())e.markNeedsRefresh()}handleContextMenuEvent(e){const t=new UI.ContextMenu.ContextMenu(e);t.defaultSection().appendItem(i18nString(UIStrings.clear),this.clearObjectStore.bind(this)),t.show()}refreshObjectStore(){this.view&&this.view.refreshData();for(const e of this.idbIndexTreeElements.values())e.refreshIndex()}async clearObjectStore(){await this.model.clearObjectStore(this.databaseId,this.objectStore.name),this.update(this.objectStore,!0)}update(e,t){this.objectStore=e;const s=new Set;for(const e of this.objectStore.indexes.values()){s.add(e.name);let r=this.idbIndexTreeElements.get(e.name);r||(r=new IDBIndexTreeElement(this.resourcesPanel,this.model,this.databaseId,this.objectStore,e,this.refreshObjectStore.bind(this)),this.idbIndexTreeElements.set(e.name,r),this.appendChild(r)),r.update(this.objectStore,e,t)}for(const e of this.idbIndexTreeElements.keys())s.has(e)||this.indexRemoved(e);for(const[e,t]of this.idbIndexTreeElements.entries())s.has(e)||(this.removeChild(t),this.idbIndexTreeElements.delete(e));this.childCount()&&this.expand(),this.view&&t&&this.view.update(this.objectStore,null),this.updateTooltip()}updateTooltip(){const e=this.objectStore.keyPathString;let t=null!==e?i18nString(UIStrings.keyPathS,{PH1:e}):"";this.objectStore.autoIncrement&&(t+="\n"+i18n.i18n.lockedString("autoIncrement")),this.tooltip=t}onselect(e){return super.onselect(e),this.view||(this.view=new IDBDataView(this.model,this.databaseId,this.objectStore,null,this.refreshObjectStore.bind(this))),this.showView(this.view),Host.userMetrics.panelShown(Host.UserMetrics.PanelCodes[Host.UserMetrics.PanelCodes.indexed_db]),!1}indexRemoved(e){const t=this.idbIndexTreeElements.get(e);t&&(t.clear(),this.removeChild(t)),this.idbIndexTreeElements.delete(e)}clear(){for(const e of this.idbIndexTreeElements.keys())this.indexRemoved(e);this.view&&this.view.clear()}}export class IDBIndexTreeElement extends ApplicationPanelTreeElement{model;databaseId;objectStore;index;refreshObjectStore;view;constructor(e,t,s,r,n,i){super(e,n.name,!1),this.model=t,this.databaseId=s,this.objectStore=r,this.index=n,this.refreshObjectStore=i}get itemURL(){return"indexedDB://"+this.databaseId.storageBucket.storageKey+"/"+(this.databaseId.storageBucket.name??"")+"/"+this.databaseId.name+"/"+this.objectStore.name+"/"+this.index.name}markNeedsRefresh(){this.view&&this.view.markNeedsRefresh()}refreshIndex(){this.view&&this.view.refreshData()}update(e,t,s){this.objectStore=e,this.index=t,this.view&&s&&this.view.update(this.objectStore,this.index),this.updateTooltip()}updateTooltip(){const e=[],t=this.index.keyPathString;e.push(i18nString(UIStrings.keyPathS,{PH1:t})),this.index.unique&&e.push(i18n.i18n.lockedString("unique")),this.index.multiEntry&&e.push(i18n.i18n.lockedString("multiEntry")),this.tooltip=e.join("\n")}onselect(e){return super.onselect(e),this.view||(this.view=new IDBDataView(this.model,this.databaseId,this.objectStore,this.index,this.refreshObjectStore)),this.showView(this.view),Host.userMetrics.panelShown(Host.UserMetrics.PanelCodes[Host.UserMetrics.PanelCodes.indexed_db]),!1}clear(){this.view&&this.view.clear()}}export class DOMStorageTreeElement extends ApplicationPanelTreeElement{domStorage;constructor(e,t){super(e,t.storageKey?SDK.StorageKeyManager.parseStorageKey(t.storageKey).origin:i18nString(UIStrings.localFiles),!1),this.domStorage=t;const s=UI.Icon.Icon.create("table","resource-tree-item");this.setLeadingIcons([s])}get itemURL(){return"storage://"+this.domStorage.storageKey+"/"+(this.domStorage.isLocalStorage?"local":"session")}onselect(e){return super.onselect(e),Host.userMetrics.panelShown(Host.UserMetrics.PanelCodes[Host.UserMetrics.PanelCodes.dom_storage]),this.resourcesPanel.showDOMStorage(this.domStorage),!1}onattach(){super.onattach(),this.listItemElement.addEventListener("contextmenu",this.handleContextMenuEvent.bind(this),!0)}handleContextMenuEvent(e){const t=new UI.ContextMenu.ContextMenu(e);t.defaultSection().appendItem(i18nString(UIStrings.clear),(()=>this.domStorage.clear())),t.show()}}export class CookieTreeElement extends ApplicationPanelTreeElement{target;cookieDomainInternal;constructor(e,t,s){super(e,s||i18nString(UIStrings.localFiles),!1),this.target=t.resourceTreeModel().target(),this.cookieDomainInternal=s,this.tooltip=i18nString(UIStrings.cookiesUsedByFramesFromS,{PH1:s});const r=UI.Icon.Icon.create("cookie","resource-tree-item");this.setLeadingIcons([r])}get itemURL(){return"cookies://"+this.cookieDomainInternal}cookieDomain(){return this.cookieDomainInternal}onattach(){super.onattach(),this.listItemElement.addEventListener("contextmenu",this.handleContextMenuEvent.bind(this),!0)}handleContextMenuEvent(e){const t=new UI.ContextMenu.ContextMenu(e);t.defaultSection().appendItem(i18nString(UIStrings.clear),(()=>this.resourcesPanel.clearCookies(this.target,this.cookieDomainInternal))),t.show()}onselect(e){return super.onselect(e),this.resourcesPanel.showCookies(this.target,this.cookieDomainInternal),Host.userMetrics.panelShown(Host.UserMetrics.PanelCodes[Host.UserMetrics.PanelCodes.cookies]),!1}}export class StorageCategoryView extends UI.Widget.VBox{emptyWidget;linkElement;constructor(){super(),this.element.classList.add("storage-view"),this.emptyWidget=new UI.EmptyWidget.EmptyWidget(""),this.linkElement=null,this.emptyWidget.show(this.element)}setText(e){this.emptyWidget.text=e}setLink(e){e&&!this.linkElement&&(this.linkElement=this.emptyWidget.appendLink(e)),!e&&this.linkElement&&this.linkElement.classList.add("hidden"),e&&this.linkElement&&(this.linkElement.setAttribute("href",e),this.linkElement.classList.remove("hidden"))}}export class ResourcesSection{panel;treeElement;treeElementForFrameId;treeElementForTargetId;constructor(e,t){this.panel=e,this.treeElement=t,UI.ARIAUtils.setLabel(this.treeElement.listItemNode,"Resources Section"),this.treeElementForFrameId=new Map,this.treeElementForTargetId=new Map;const s=SDK.FrameManager.FrameManager.instance();s.addEventListener(SDK.FrameManager.Events.FrameAddedToTarget,(e=>this.frameAdded(e.data.frame)),this),s.addEventListener(SDK.FrameManager.Events.FrameRemoved,(e=>this.frameDetached(e.data.frameId)),this),s.addEventListener(SDK.FrameManager.Events.FrameNavigated,(e=>this.frameNavigated(e.data.frame)),this),s.addEventListener(SDK.FrameManager.Events.ResourceAdded,(e=>this.resourceAdded(e.data.resource)),this),SDK.TargetManager.TargetManager.instance().addModelListener(SDK.ChildTargetManager.ChildTargetManager,SDK.ChildTargetManager.Events.TargetCreated,this.windowOpened,this,{scoped:!0}),SDK.TargetManager.TargetManager.instance().addModelListener(SDK.ChildTargetManager.ChildTargetManager,SDK.ChildTargetManager.Events.TargetInfoChanged,this.windowChanged,this,{scoped:!0}),SDK.TargetManager.TargetManager.instance().addModelListener(SDK.ChildTargetManager.ChildTargetManager,SDK.ChildTargetManager.Events.TargetDestroyed,this.windowDestroyed,this,{scoped:!0}),SDK.TargetManager.TargetManager.instance().observeTargets(this,{scoped:!0})}initialize(){const e=SDK.FrameManager.FrameManager.instance();for(const t of e.getAllFrames()){this.treeElementForFrameId.get(t.id)||this.addFrameAndParents(t);const e=t.resourceTreeModel().target().model(SDK.ChildTargetManager.ChildTargetManager);if(e)for(const t of e.targetInfos())this.windowOpened({data:t})}}targetAdded(e){e.type()!==SDK.Target.Type.Worker&&e.type()!==SDK.Target.Type.ServiceWorker||this.workerAdded(e),e.type()===SDK.Target.Type.Frame&&e===e.outermostTarget()&&this.initialize()}async workerAdded(e){const t=e.parentTarget();if(!t)return;const s=t.id(),r=this.treeElementForTargetId.get(s),n=e.id();assertNotMainTarget(n);const{targetInfo:i}=await t.targetAgent().invoke_getTargetInfo({targetId:n});r&&i&&r.workerCreated(i)}targetRemoved(e){}addFrameAndParents(e){const t=e.parentFrame();t&&!this.treeElementForFrameId.get(t.id)&&this.addFrameAndParents(t),this.frameAdded(e)}expandFrame(e){if(!e)return!1;let t=this.treeElementForFrameId.get(e.id);return!(!t&&!this.expandFrame(e.parentFrame()))&&(t=this.treeElementForFrameId.get(e.id),!!t&&(t.expand(),!0))}async revealResource(e,t,s){if(!this.expandFrame(e.frame()))return;const r=FrameResourceTreeElement.forResource(e);r&&await r.revealResource(t,s)}revealAndSelectFrame(e){const t=this.treeElementForFrameId.get(e.id);t?.reveal(),t?.select()}frameAdded(e){if(!SDK.TargetManager.TargetManager.instance().isInScope(e.resourceTreeModel()))return;const t=e.parentFrame(),s=t?this.treeElementForFrameId.get(t.id):this.treeElement;if(!s)return;const r=this.treeElementForFrameId.get(e.id);r&&(this.treeElementForFrameId.delete(e.id),r.parent&&r.parent.removeChild(r));const n=new FrameTreeElement(this,e);this.treeElementForFrameId.set(e.id,n);const i=e.resourceTreeModel().target().id();this.treeElementForTargetId.get(i)||this.treeElementForTargetId.set(i,n),s.appendChild(n);for(const t of e.resources())this.resourceAdded(t)}frameDetached(e){const t=this.treeElementForFrameId.get(e);t&&(this.treeElementForFrameId.delete(e),t.parent&&t.parent.removeChild(t))}frameNavigated(e){if(!SDK.TargetManager.TargetManager.instance().isInScope(e.resourceTreeModel()))return;const t=this.treeElementForFrameId.get(e.id);t&&t.frameNavigated(e)}resourceAdded(e){const t=e.frame();if(!t)return;if(!SDK.TargetManager.TargetManager.instance().isInScope(t.resourceTreeModel()))return;const s=this.treeElementForFrameId.get(t.id);s&&s.appendResource(e)}windowOpened(e){const t=e.data;if(t.openerId&&"page"===t.type){const e=this.treeElementForFrameId.get(t.openerId);e&&(this.treeElementForTargetId.set(t.targetId,e),e.windowOpened(t))}}windowDestroyed(e){const t=e.data,s=this.treeElementForTargetId.get(t);s&&(s.windowDestroyed(t),this.treeElementForTargetId.delete(t))}windowChanged(e){const t=e.data;if(t.openerId&&"page"===t.type){const e=this.treeElementForFrameId.get(t.openerId);e&&e.windowChanged(t)}}reset(){this.treeElement.removeChildren(),this.treeElementForFrameId.clear(),this.treeElementForTargetId.clear()}}export class FrameTreeElement extends ApplicationPanelTreeElement{section;frame;frameId;categoryElements;treeElementForResource;treeElementForWindow;treeElementForWorker;view;constructor(e,t){super(e.panel,"",!1),this.section=e,this.frame=t,this.frameId=t.id,this.categoryElements=new Map,this.treeElementForResource=new Map,this.treeElementForWindow=new Map,this.treeElementForWorker=new Map,this.frameNavigated(t),this.view=null}getIconTypeForFrame(e){return e.isOutermostFrame()?e.unreachableUrl()?"frame-crossed":"frame":e.unreachableUrl()?"iframe-crossed":"iframe"}async frameNavigated(e){const t=UI.Icon.Icon.create(this.getIconTypeForFrame(e));if(e.unreachableUrl()&&t.classList.add("red-icon"),this.setLeadingIcons([t]),this.invalidateChildren(),this.frameId=e.id,this.title!==e.displayName()&&(this.title=e.displayName(),UI.ARIAUtils.setLabel(this.listItemElement,this.title),this.parent)){const e=this.parent;e.removeChild(this),e.appendChild(this)}if(this.categoryElements.clear(),this.treeElementForResource.clear(),this.treeElementForWorker.clear(),this.selected?(this.view=LegacyWrapper.LegacyWrapper.legacyWrapper(UI.Widget.Widget,new ApplicationComponents.FrameDetailsView.FrameDetailsReportView(this.frame)),this.showView(this.view)):this.view=null,e.isOutermostFrame()){const t=SDK.TargetManager.TargetManager.instance().targets();for(const s of t)if(s.type()===SDK.Target.Type.ServiceWorker&&SDK.TargetManager.TargetManager.instance().isInScope(s)){const t=s.id();assertNotMainTarget(t);const r=e.resourceTreeModel().target().targetAgent(),n=(await r.invoke_getTargetInfo({targetId:t})).targetInfo;this.workerCreated(n)}}}get itemURL(){return this.frame.isOutermostFrame()?"frame://":"frame://"+encodeURI(this.frame.url)}onselect(e){return super.onselect(e),this.view||(this.view=LegacyWrapper.LegacyWrapper.legacyWrapper(UI.Widget.Widget,new ApplicationComponents.FrameDetailsView.FrameDetailsReportView(this.frame))),Host.userMetrics.panelShown(Host.UserMetrics.PanelCodes[Host.UserMetrics.PanelCodes.frame_details]),this.showView(this.view),this.listItemElement.classList.remove("hovered"),SDK.OverlayModel.OverlayModel.hideDOMNodeHighlight(),!1}set hovered(e){e?(this.listItemElement.classList.add("hovered"),this.frame.highlight()):(this.listItemElement.classList.remove("hovered"),SDK.OverlayModel.OverlayModel.hideDOMNodeHighlight())}appendResource(e){const t=e.statusCode();if(t>=301&&t<=303)return;const s=e.resourceType(),r=s.name();let n=s===Common.ResourceType.resourceTypes.Document?this:this.categoryElements.get(r);n||(n=new ExpandableApplicationPanelTreeElement(this.section.panel,e.resourceType().category().title(),r,"Frames"===r),this.categoryElements.set(s.name(),n),this.appendChild(n,FrameTreeElement.presentationOrderCompare));const i=new FrameResourceTreeElement(this.section.panel,e);n.appendChild(i,FrameTreeElement.presentationOrderCompare),this.treeElementForResource.set(e.url,i)}windowOpened(e){const t="OpenedWindows";let s=this.categoryElements.get(t);if(s||(s=new ExpandableApplicationPanelTreeElement(this.section.panel,i18nString(UIStrings.openedWindows),t),this.categoryElements.set(t,s),this.appendChild(s,FrameTreeElement.presentationOrderCompare)),!this.treeElementForWindow.get(e.targetId)){const t=new FrameWindowTreeElement(this.section.panel,e);s.appendChild(t),this.treeElementForWindow.set(e.targetId,t)}}workerCreated(e){const t="service_worker"===e.type?"Service Workers":"Web Workers",s="service_worker"===e.type?i18n.i18n.lockedString("Service workers"):i18nString(UIStrings.webWorkers);let r=this.categoryElements.get(t);if(r||(r=new ExpandableApplicationPanelTreeElement(this.section.panel,s,t),this.categoryElements.set(t,r),this.appendChild(r,FrameTreeElement.presentationOrderCompare)),!this.treeElementForWorker.get(e.targetId)){const t=new WorkerTreeElement(this.section.panel,e);r.appendChild(t),this.treeElementForWorker.set(e.targetId,t)}}windowChanged(e){const t=this.treeElementForWindow.get(e.targetId);t&&(t.title!==e.title&&(t.title=e.title),t.update(e))}windowDestroyed(e){const t=this.treeElementForWindow.get(e);t&&t.windowClosed()}appendChild(e,t=FrameTreeElement.presentationOrderCompare){super.appendChild(e,t)}static presentationOrderCompare(e,t){function s(e){return e instanceof ExpandableApplicationPanelTreeElement?2:e instanceof FrameTreeElement?1:3}return s(e)-s(t)||e.titleAsText().localeCompare(t.titleAsText())}}const resourceToFrameResourceTreeElement=new WeakMap;export class FrameResourceTreeElement extends ApplicationPanelTreeElement{panel;resource;previewPromise;constructor(e,t){super(e,t.isGenerated?i18nString(UIStrings.documentNotAvailable):t.displayName,!1),this.panel=e,this.resource=t,this.previewPromise=null,this.tooltip=t.url,resourceToFrameResourceTreeElement.set(this.resource,this);const s=UI.Icon.Icon.create("document","navigator-file-tree-item");s.classList.add("navigator-"+t.resourceType().name()+"-tree-item"),this.setLeadingIcons([s])}static forResource(e){return resourceToFrameResourceTreeElement.get(e)}get itemURL(){return this.resource.url}preparePreview(){if(this.previewPromise)return this.previewPromise;const e=SourceFrame.PreviewFactory.PreviewFactory.createPreview(this.resource,this.resource.mimeType);return this.previewPromise=e.then((e=>e||new UI.EmptyWidget.EmptyWidget(this.resource.url))),this.previewPromise}onselect(e){return super.onselect(e),this.resource.isGenerated?this.panel.showCategoryView(i18nString(UIStrings.theContentOfThisDocumentHasBeen),null):this.panel.scheduleShowView(this.preparePreview()),Host.userMetrics.panelShown(Host.UserMetrics.PanelCodes[Host.UserMetrics.PanelCodes.frame_resource]),!1}ondblclick(e){return Host.InspectorFrontendHost.InspectorFrontendHostInstance.openInNewTab(this.resource.url),!1}onattach(){super.onattach(),this.listItemElement.draggable=!0,this.listItemElement.addEventListener("dragstart",this.ondragstart.bind(this),!1),this.listItemElement.addEventListener("contextmenu",this.handleContextMenuEvent.bind(this),!0)}ondragstart(e){return!!e.dataTransfer&&(e.dataTransfer.setData("text/plain",this.resource.content||""),e.dataTransfer.effectAllowed="