-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapplication.js
More file actions
169 lines (169 loc) · 257 KB
/
application.js
File metadata and controls
169 lines (169 loc) · 257 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
import*as e from"../../core/common/common.js";import*as t from"../../core/host/host.js";import*as i from"../../core/i18n/i18n.js";import*as r from"../../core/platform/platform.js";import{assertNotNullOrUndefined as s}from"../../core/platform/platform.js";import*as o from"../../core/sdk/sdk.js";import*as a from"../../models/issues_manager/issues_manager.js";import*as n from"../../ui/components/icon_button/icon_button.js";import*as d from"../../ui/components/legacy_wrapper/legacy_wrapper.js";import*as l from"../../ui/legacy/components/source_frame/source_frame.js";import*as c from"../../ui/legacy/legacy.js";import*as h from"../../ui/components/buttons/buttons.js";import*as g from"../../ui/legacy/components/inline_editor/inline_editor.js";import*as p from"../../ui/legacy/components/utils/utils.js";import*as u from"../../ui/visual_logging/visual_logging.js";import*as m from"./components/components.js";import{StorageMetadataView as w}from"./components/components.js";import*as v from"../../models/bindings/bindings.js";import*as S from"../../ui/legacy/components/data_grid/data_grid.js";import"../../ui/components/report_view/report_view.js";import*as b from"../../ui/legacy/components/object_ui/object_ui.js";import*as f from"../../ui/lit/lit.js";import{render as y,html as k,Directives as I,nothing as C}from"../../ui/lit/lit.js";import*as T from"./preloading/components/components.js";import*as E from"../../models/text_utils/text_utils.js";import*as x from"../network/components/components.js";import*as R from"../network/network.js";import*as M from"../network/forward/forward.js";import*as L from"../mobile_throttling/mobile_throttling.js";import*as P from"../../models/geometry/geometry.js";import*as A from"../../ui/legacy/components/perf_ui/perf_ui.js";import*as D from"../../ui/legacy/components/cookie_table/cookie_table.js";import*as B from"../../third_party/json5/json5.js";class F extends c.TreeOutline.TreeElement{resourcesPanel;constructor(e,t,i,r){super(t,i,r),this.resourcesPanel=e,c.ARIAUtils.setLabel(this.listItemElement,t),this.listItemElement.tabIndex=-1}deselect(){super.deselect(),this.listItemElement.tabIndex=-1}get itemURL(){throw new Error("Unimplemented Method")}onselect(e){if(!e)return!1;const t=[];for(let e=this;e;e=e.parent){const i=e instanceof F&&e.itemURL;if(!i)break;t.push(i)}return this.resourcesPanel.setLastSelectedItemPath(t),!1}showView(e){this.resourcesPanel.showView(e)}}class O extends F{expandedSetting;categoryName;categoryLink;emptyCategoryHeadline;categoryDescription;constructor(t,i,r,s,o,a=!1){super(t,i,!1,o),this.expandedSetting=e.Settings.Settings.instance().createSetting("resources-"+o+"-expanded",a),this.categoryName=i,this.categoryLink=null,this.emptyCategoryHeadline=r,this.categoryDescription=s}get itemURL(){return"category://"+this.categoryName}setLink(e){this.categoryLink=e}onselect(e){return super.onselect(e),this.updateCategoryView(),!1}updateCategoryView(){const e=0===this.childCount()?this.emptyCategoryHeadline:this.categoryName;this.resourcesPanel.showCategoryView(this.categoryName,e,this.categoryDescription,this.categoryLink)}appendChild(e,t){super.appendChild(e,t),this.selected&&1===this.childCount()&&this.updateCategoryView()}removeChild(e){super.removeChild(e),this.selected&&0===this.childCount()&&this.updateCategoryView()}onattach(){super.onattach(),this.expandedSetting.get()&&this.expand()}onexpand(){this.expandedSetting.set(!0)}oncollapse(){this.expandedSetting.set(!1)}}var U=`.report-field-name{flex-basis:152px}.manifest-view-header{min-width:600px;flex-shrink:0;flex-grow:0}.manifest-container{overflow:auto}.inline-icon{width:16px;height:16px;margin-inline:var(--sys-size-3);&[name="check-circle"]{color:var(--icon-checkmark-green)}}.multiline-value{padding-top:var(--sys-size-5);white-space:normal}select{margin:4px}.inline-button{vertical-align:sub}\n/*# sourceURL=${import.meta.resolve("./appManifestView.css")} */`;const V={errorsAndWarnings:"Errors and warnings",installability:"Installability",identity:"Identity",presentation:"Presentation",protocolHandlers:"Protocol Handlers",icons:"Icons",windowControlsOverlay:"Window Controls Overlay",name:"Name",shortName:"Short name",url:"URL",computedAppId:"Computed App ID",appIdExplainer:"This is used by the browser to know whether the manifest should be updating an existing application, or whether it refers to a new web app that can be installed.",learnMore:"Learn more",appIdNote:"Note: `id` is not specified in the manifest, `start_url` is used instead. To specify an App ID that matches the current identity, set the `id` field to {PH1} {PH2}.",copyToClipboard:"Copy suggested ID to clipboard",copiedToClipboard:"Copied suggested ID {PH1} to clipboard",description:"Description",startUrl:"Start URL",themeColor:"Theme color",backgroundColor:"Background color",orientation:"Orientation",display:"Display",newNoteUrl:"New note URL",descriptionMayBeTruncated:"Description may be truncated.",shortcutsMayBeNotAvailable:"The maximum number of shortcuts is platform dependent. Some shortcuts may be not available.",showOnlyTheMinimumSafeAreaFor:"Show only the minimum safe area for maskable icons",appImageGenerator:"App Image Generator",needHelpReadOurS:"Need help? Read the {PH1}.",shortcutS:"Shortcut #{PH1}",shortcutSShouldIncludeAXPixel:"Shortcut #{PH1} should include a 96×96 pixel icon",screenshotS:"Screenshot #{PH1}",pageIsNotLoadedInTheMainFrame:"Page is not loaded in the main frame",pageIsNotServedFromASecureOrigin:"Page is not served from a secure origin",pageHasNoManifestLinkUrl:"Page has no manifest <link> `URL`",manifestCouldNotBeFetchedIsEmpty:"Manifest could not be fetched, is empty, or could not be parsed",manifestStartUrlIsNotValid:"Manifest '`start_url`' is not valid",manifestDoesNotContainANameOr:"Manifest does not contain a '`name`' or '`short_name`' field",manifestDisplayPropertyMustBeOne:"Manifest '`display`' property must be one of '`standalone`', '`fullscreen`', or '`minimal-ui`'",manifestDoesNotContainASuitable:"Manifest does not contain a suitable icon—PNG, SVG, or WebP format of at least {PH1}px is required, the '`sizes`' attribute must be set, and the '`purpose`' attribute, if set, must include '`any`'.",avoidPurposeAnyAndMaskable:"Declaring an icon with '`purpose`' of '`any maskable`' is discouraged. It is likely to look incorrect on some platforms due to too much or too little padding.",noSuppliedIconIsAtLeastSpxSquare:"No supplied icon is at least {PH1} pixels square in `PNG`, `SVG`, or `WebP` format, with the purpose attribute unset or set to '`any`'.",couldNotDownloadARequiredIcon:"Could not download a required icon from the manifest",downloadedIconWasEmptyOr:"Downloaded icon was empty or corrupted",theSpecifiedApplicationPlatform:"The specified application platform is not supported on Android",noPlayStoreIdProvided:"No Play store ID provided",thePlayStoreAppUrlAndPlayStoreId:"The Play Store app URL and Play Store ID do not match",theAppIsAlreadyInstalled:"The app is already installed",aUrlInTheManifestContainsA:"A URL in the manifest contains a username, password, or port",pageIsLoadedInAnIncognitoWindow:"Page is loaded in an InPrivate window",pageDoesNotWorkOffline:"Page does not work offline",couldNotCheckServiceWorker:"Could not check `service worker` without a '`start_url`' field in the manifest",manifestSpecifies:"Manifest specifies '`prefer_related_applications`: true'",preferrelatedapplicationsIsOnly:"'`prefer_related_applications`' is only supported on `Microsoft Edge` Beta and Stable channels on `Android`.",manifestContainsDisplayoverride:"Manifest contains '`display_override`' field, and the first supported display mode must be one of '`standalone`', '`fullscreen`', or '`minimal-ui`'",pageDoesNotWorkOfflineThePage:"Page does not work offline. Starting in Microsoft Edge 93, the installability criteria are changing, and this site will not be installable. See {PH1} for more information.",imageFromS:"Image from {PH1}",screenshot:"Screenshot",formFactor:"Form factor",label:"Label",platform:"Platform",icon:"Icon",sSrcIsNotSet:"{PH1} '`src`' is not set",sUrlSFailedToParse:"{PH1} URL ''{PH2}'' failed to parse",sSFailedToLoad:"{PH1} {PH2} failed to load",sSDoesNotSpecifyItsSizeInThe:"{PH1} {PH2} does not specify its size in the manifest",sSShouldSpecifyItsSizeAs:"{PH1} {PH2} should specify its size as `[width]x[height]`",sSShouldHaveSquareIcon:"Most operating systems require square icons. Please include at least one square icon in the array.",actualSizeSspxOfSSDoesNotMatch:"Actual size ({PH1}×{PH2})px of {PH3} {PH4} does not match specified size ({PH5}×{PH6}px)",actualWidthSpxOfSSDoesNotMatch:"Actual width ({PH1}px) of {PH2} {PH3} does not match specified width ({PH4}px)",actualHeightSpxOfSSDoesNotMatch:"Actual height ({PH1}px) of {PH2} {PH3} does not match specified height ({PH4}px)",sSSizeShouldBeAtLeast320:"{PH1} {PH2} size should be at least 320×320",sSSizeShouldBeAtMost3840:"{PH1} {PH2} size should be at most 3840×3840",sSWidthDoesNotComplyWithRatioRequirement:"{PH1} {PH2} width can't be more than 2.3 times as long as the height",sSHeightDoesNotComplyWithRatioRequirement:"{PH1} {PH2} height can't be more than 2.3 times as long as the width",screenshotPixelSize:"Screenshot {url} should specify a pixel size `[width]x[height]` instead of `any` as first size.",noScreenshotsForRicherPWAInstallOnDesktop:"Richer PWA Install UI won’t be available on desktop. Please add at least one screenshot with the `form_factor` set to `wide`.",noScreenshotsForRicherPWAInstallOnMobile:"Richer PWA Install UI won’t be available on mobile. Please add at least one screenshot for which `form_factor` is not set or set to a value other than `wide`.",tooManyScreenshotsForDesktop:"No more than 8 screenshots will be displayed on desktop. The rest will be ignored.",tooManyScreenshotsForMobile:"No more than 5 screenshots will be displayed on mobile. The rest will be ignored.",screenshotsMustHaveSameAspectRatio:"All screenshots with the same `form_factor` must have the same aspect ratio as the first screenshot with that `form_factor`. Some screenshots will be ignored.",wcoFound:"Microsoft Edge has successfully found the {PH1} value for the {PH2} field in the {PH3}.",wcoNotFound:"Define {PH1} in the manifest to use the Window Controls Overlay API and customize your app's title bar.",customizePwaTitleBar:"Customize the window controls overlay of your PWA's title bar",wcoNeedHelpReadMore:"Need help? Read {PH1}.",selectWindowControlsOverlayEmulationOs:"Emulate the Window Controls Overlay on"},W=i.i18n.registerUIStrings("panels/application/AppManifestView.ts",V),N=i.i18n.getLocalizedString.bind(void 0,W);class j extends(e.ObjectWrapper.eventMixin(c.Widget.VBox)){emptyView;reportView;errorsSection;installabilitySection;identitySection;presentationSection;iconsSection;windowControlsSection;protocolHandlersSection;shortcutSections;screenshotsSections;nameField;shortNameField;descriptionField;startURLField;themeColorSwatch;backgroundColorSwatch;orientationField;displayField;newNoteUrlField;throttler;registeredListeners;target;resourceTreeModel;serviceWorkerManager;overlayModel;protocolHandlersView;constructor(e,t,i){super({jslog:`${u.pane("manifest")}`,useShadowDom:!0}),this.registerRequiredCSS(U),this.contentElement.classList.add("manifest-container"),this.emptyView=e,this.emptyView.link="https://go.microsoft.com/fwlink/?linkid=2039236",this.emptyView.show(this.contentElement),this.emptyView.hideWidget(),this.reportView=t,this.reportView.registerRequiredCSS(U),this.reportView.element.classList.add("manifest-view-header"),this.reportView.show(this.contentElement),this.reportView.hideWidget(),this.errorsSection=this.reportView.appendSection(N(V.errorsAndWarnings),void 0,"errors-and-warnings"),this.installabilitySection=this.reportView.appendSection(N(V.installability),void 0,"installability"),this.identitySection=this.reportView.appendSection(N(V.identity),"undefined,identity"),this.presentationSection=this.reportView.appendSection(N(V.presentation),"undefined,presentation"),this.protocolHandlersSection=this.reportView.appendSection(N(V.protocolHandlers),"undefined,protocol-handlers"),this.protocolHandlersView=new m.ProtocolHandlersView.ProtocolHandlersView,this.protocolHandlersSection.appendFieldWithCustomView(this.protocolHandlersView),this.iconsSection=this.reportView.appendSection(N(V.icons),"report-section-icons","icons"),this.windowControlsSection=this.reportView.appendSection(V.windowControlsOverlay,void 0,"window-controls-overlay"),this.shortcutSections=[],this.screenshotsSections=[],this.nameField=this.identitySection.appendField(N(V.name)),this.shortNameField=this.identitySection.appendField(N(V.shortName)),this.descriptionField=this.identitySection.appendFlexedField(N(V.description)),this.startURLField=this.presentationSection.appendField(N(V.startUrl)),c.ARIAUtils.setLabel(this.startURLField,N(V.startUrl));const r=this.presentationSection.appendField(N(V.themeColor));this.themeColorSwatch=new g.ColorSwatch.ColorSwatch,r.appendChild(this.themeColorSwatch);const s=this.presentationSection.appendField(N(V.backgroundColor));this.backgroundColorSwatch=new g.ColorSwatch.ColorSwatch,s.appendChild(this.backgroundColorSwatch),this.orientationField=this.presentationSection.appendField(N(V.orientation)),this.displayField=this.presentationSection.appendField(N(V.display)),this.newNoteUrlField=this.presentationSection.appendField(N(V.newNoteUrl)),this.throttler=i,o.TargetManager.TargetManager.instance().observeTargets(this),this.registeredListeners=[]}getStaticSections(){return[this.identitySection,this.presentationSection,this.protocolHandlersSection,this.iconsSection,this.windowControlsSection]}getManifestElement(){return this.reportView.getHeaderElement()}targetAdded(e){e===o.TargetManager.TargetManager.instance().primaryPageTarget()&&(this.target=e,this.resourceTreeModel=e.model(o.ResourceTreeModel.ResourceTreeModel),this.serviceWorkerManager=e.model(o.ServiceWorkerManager.ServiceWorkerManager),this.overlayModel=e.model(o.OverlayModel.OverlayModel),this.resourceTreeModel&&this.serviceWorkerManager&&this.overlayModel&&(this.updateManifest(!0),this.registeredListeners=[this.resourceTreeModel.addEventListener(o.ResourceTreeModel.Events.DOMContentLoaded,()=>{this.updateManifest(!0)}),this.serviceWorkerManager.addEventListener("RegistrationUpdated",()=>{this.updateManifest(!1)})]))}targetRemoved(t){this.target===t&&this.resourceTreeModel&&this.serviceWorkerManager&&this.overlayModel&&(delete this.resourceTreeModel,delete this.serviceWorkerManager,delete this.overlayModel,e.EventTarget.removeEventListeners(this.registeredListeners))}async updateManifest(e){if(!this.resourceTreeModel)return;const[{url:t,data:i,errors:r},s,o]=await Promise.all([this.resourceTreeModel.fetchAppManifest(),this.resourceTreeModel.getInstallabilityErrors(),this.resourceTreeModel.getAppId()]);this.throttler.schedule(()=>this.renderManifest(t,i,r,s,o),e?"AsSoonAsPossible":"Default")}async renderManifest(r,s,o,a,d){const l=d?.appId||null,g=d?.recommendedId||null;if(!(s&&"{}"!==s||o.length))return this.emptyView.showWidget(),this.reportView.hideWidget(),void this.dispatchEventToListeners("ManifestDetected",!1);this.emptyView.hideWidget(),this.reportView.showWidget(),this.dispatchEventToListeners("ManifestDetected",!0);const m=p.Linkifier.Linkifier.linkifyURL(r);m.tabIndex=0,this.reportView.setURL(m),this.errorsSection.clearContent(),this.errorsSection.element.classList.toggle("hidden",!o.length);for(const e of o){const t=c.UIUtils.createIconLabel({title:e.message,iconName:e.critical?"cross-circle-filled":"warning-filled",color:e.critical?"var(--icon-error)":"var(--icon-warning)"});this.errorsSection.appendRow().appendChild(t)}if(!s)return;65279===s.charCodeAt(0)&&(s=s.slice(1));const w=JSON.parse(s);this.nameField.textContent=_("name"),this.shortNameField.textContent=_("short_name");const v=[],S=_("description");this.descriptionField.textContent=S,S.length>300&&v.push(N(V.descriptionMayBeTruncated));const b=_("start_url");if(l&&g){const e=this.identitySection.appendField(N(V.computedAppId));c.ARIAUtils.setLabel(e,"App Id"),e.textContent=l;const r=n.Icon.create("help","inline-icon");r.title=N(V.appIdExplainer),r.setAttribute("jslog",`${u.action("help").track({hover:!0})}`),e.appendChild(r);const s=c.XLink.XLink.create("https://w3c.github.io/manifest/#id-member",N(V.learnMore));if(s.setAttribute("jslog",`${u.link().track({click:!0}).context("learn-more")}`),e.appendChild(s),!_("id")){const r=e.createChild("div","multiline-value"),s=document.createElement("code");s.textContent=g;const o=new h.Button.Button;o.data={variant:"icon",iconName:"copy",size:"SMALL",jslogContext:"manifest.copy-id",title:N(V.copyToClipboard)},o.className="inline-button",o.addEventListener("click",()=>{c.ARIAUtils.LiveAnnouncer.alert(N(V.copiedToClipboard,{PH1:g})),t.InspectorFrontendHost.InspectorFrontendHostInstance.copyText(g)}),r.appendChild(i.i18n.getFormatLocalizedString(W,V.appIdNote,{PH1:s,PH2:o}))}}else this.identitySection.removeField(N(V.computedAppId));if(this.startURLField.removeChildren(),b){const t=e.ParsedURL.ParsedURL.completeURL(r,b);if(t){const e=p.Linkifier.Linkifier.linkifyURL(t,{text:b});e.tabIndex=0,e.setAttribute("jslog",`${u.link("start-url").track({click:!0})}`),this.startURLField.appendChild(e)}}this.themeColorSwatch.classList.toggle("hidden",!_("theme_color"));const f=e.Color.parse(_("theme_color")||"white")||e.Color.parse("white");f&&this.themeColorSwatch.renderColor(f),this.backgroundColorSwatch.classList.toggle("hidden",!_("background_color"));const y=e.Color.parse(_("background_color")||"white")||e.Color.parse("white");y&&this.backgroundColorSwatch.renderColor(y),this.orientationField.textContent=_("orientation");const k=_("display");this.displayField.textContent=k;const I=(w.note_taking||{}).new_note_url,C="string"==typeof I;if(this.newNoteUrlField.parentElement?.classList.toggle("hidden",!C),this.newNoteUrlField.removeChildren(),C){const t=e.ParsedURL.ParsedURL.completeURL(r,I),i=p.Linkifier.Linkifier.linkifyURL(t,{text:I});i.tabIndex=0,this.newNoteUrlField.appendChild(i)}const T=w.protocol_handlers||[];this.protocolHandlersView.data={protocolHandlers:T,manifestLink:r};const E=w.icons||[];this.iconsSection.clearContent();const x=w.shortcuts||[];for(const e of this.shortcutSections)e.detach(!0);const R=w.screenshots||[];for(const e of this.screenshotsSections)e.detach(!0);const M=[],L=c.UIUtils.CheckboxLabel.create(N(V.showOnlyTheMinimumSafeAreaFor));L.classList.add("mask-checkbox"),L.setAttribute("jslog",`${u.toggle("show-minimal-safe-area-for-maskable-icons").track({change:!0})}`),L.addEventListener("click",()=>{this.iconsSection.setIconMasked(L.checked)}),this.iconsSection.appendRow().appendChild(L);const P=c.XLink.XLink.create("https://www.pwabuilder.com/imageGenerator",N(V.appImageGenerator));P.setAttribute("jslog",`${u.link().track({click:!0}).context("learn-more")}`),this.iconsSection.appendRow().appendChild(i.i18n.getFormatLocalizedString(W,V.needHelpReadOurS,{PH1:P}));let A=!1;for(const e of E){const t=await this.appendImageResourceToSection(r,e,this.iconsSection,!1);M.push(...t.imageResourceErrors),A=t.squareSizedIconAvailable||A}A||M.push(N(V.sSShouldHaveSquareIcon)),x.length>4&&v.push(N(V.shortcutsMayBeNotAvailable));let D=1;for(const t of x){const i=this.reportView.appendSection(N(V.shortcutS,{PH1:D}));i.element.setAttribute("jslog",`${u.section("shortcuts")}`),this.shortcutSections.push(i),i.appendFlexedField(N(V.name),t.name),t.short_name&&i.appendFlexedField(N(V.shortName),t.short_name),t.description&&i.appendFlexedField(N(V.description),t.description);const s=i.appendFlexedField(N(V.url)),o=e.ParsedURL.ParsedURL.completeURL(r,t.url),a=p.Linkifier.Linkifier.linkifyURL(o,{text:t.url});a.setAttribute("jslog",`${u.link("shortcut").track({click:!0})}`),a.tabIndex=0,s.appendChild(a);const n=t.icons||[];let d=!1;for(const e of n){const{imageResourceErrors:t}=await this.appendImageResourceToSection(r,e,i,!1);if(M.push(...t),!d&&e.sizes){const t=e.sizes.match(/^(\d+)x(\d+)$/);t&&t[1]>=96&&t[2]>=96&&(d=!0)}}d||M.push(N(V.shortcutSShouldIncludeAXPixel,{PH1:D})),D++}let B=1;const F=new Map;let O=!1;for(const e of R){const t=this.reportView.appendSection(N(V.screenshotS,{PH1:B}));this.screenshotsSections.push(t),e.form_factor&&t.appendFlexedField(N(V.formFactor),e.form_factor),e.label&&t.appendFlexedField(N(V.label),e.label),e.platform&&t.appendFlexedField(N(V.platform),e.platform);const{imageResourceErrors:i,naturalWidth:s,naturalHeight:o}=await this.appendImageResourceToSection(r,e,t,!0);if(M.push(...i),e.form_factor&&s&&o){F.has(e.form_factor)||F.set(e.form_factor,{width:s,height:o});const t=F.get(e.form_factor);t&&(O=O||s*t.height!==o*t.width)}B++}O&&v.push(N(V.screenshotsMustHaveSameAspectRatio));const U=R.filter(e=>"wide"===e.form_factor),j=R.filter(e=>"wide"!==e.form_factor);U.length<1&&v.push(N(V.noScreenshotsForRicherPWAInstallOnDesktop)),j.length<1&&v.push(N(V.noScreenshotsForRicherPWAInstallOnMobile)),U.length>8&&v.push(N(V.tooManyScreenshotsForDesktop)),j.length>5&&v.push(N(V.tooManyScreenshotsForMobile)),this.installabilitySection.clearContent(),this.installabilitySection.element.classList.toggle("hidden",!a.length);const H=this.getInstallabilityErrorMessages(a);for(const e of H){const t=document.createTextNode(e);this.installabilitySection.appendRow().appendChild(t)}this.errorsSection.element.classList.toggle("hidden",!o.length&&!M.length&&!v.length);for(const e of v){const t=document.createTextNode(e);this.errorsSection.appendRow().appendChild(t)}for(const e of M){const t=document.createTextNode(e);this.errorsSection.appendRow().appendChild(t)}function _(e){const t=w[e];return"string"!=typeof t?"":t}this.windowControlsSection.clearContent();const K=(w.display_override||[]).includes("window-controls-overlay"),q=c.XLink.XLink.create("https://developer.mozilla.org/en-US/docs/Web/Manifest/display_override","display-override",void 0,void 0,"display-override"),z=document.createElement("code");z.appendChild(q);const G=this.windowControlsSection.appendRow();if(K){const e=n.Icon.create("check-circle","inline-icon");G.appendChild(e);const t=document.createElement("code");t.classList.add("wco"),t.textContent="window-controls-overlay",G.appendChild(i.i18n.getFormatLocalizedString(W,V.wcoFound,{PH1:t,PH2:z,PH3:m})),this.overlayModel&&await this.appendWindowControlsToSection(this.overlayModel,r,_("theme_color"))}else{const e=n.Icon.create("info","inline-icon");G.appendChild(e),G.appendChild(i.i18n.getFormatLocalizedString(W,V.wcoNotFound,{PH1:z}))}const $=c.XLink.XLink.create("https://learn.microsoft.com/en-us/microsoft-edge/progressive-web-apps-chromium/how-to/window-controls-overlay",N(V.customizePwaTitleBar),void 0,void 0,"customize-pwa-tittle-bar");this.windowControlsSection.appendRow().appendChild(i.i18n.getFormatLocalizedString(W,V.wcoNeedHelpReadMore,{PH1:$})),this.dispatchEventToListeners("ManifestRendered")}getInstallabilityErrorMessages(e){const t=[];for(const i of e){let e;switch(i.errorId){case"not-in-main-frame":e=N(V.pageIsNotLoadedInTheMainFrame);break;case"not-from-secure-origin":e=N(V.pageIsNotServedFromASecureOrigin);break;case"no-manifest":e=N(V.pageHasNoManifestLinkUrl);break;case"manifest-empty":e=N(V.manifestCouldNotBeFetchedIsEmpty);break;case"start-url-not-valid":e=N(V.manifestStartUrlIsNotValid);break;case"manifest-missing-name-or-short-name":e=N(V.manifestDoesNotContainANameOr);break;case"manifest-display-not-supported":e=N(V.manifestDisplayPropertyMustBeOne);break;case"manifest-missing-suitable-icon":if(1!==i.errorArguments.length||"minimum-icon-size-in-pixels"!==i.errorArguments[0].name){console.error("Installability error does not have the correct errorArguments");break}e=N(V.manifestDoesNotContainASuitable,{PH1:i.errorArguments[0].value});break;case"no-acceptable-icon":if(1!==i.errorArguments.length||"minimum-icon-size-in-pixels"!==i.errorArguments[0].name){console.error("Installability error does not have the correct errorArguments");break}e=N(V.noSuppliedIconIsAtLeastSpxSquare,{PH1:i.errorArguments[0].value});break;case"cannot-download-icon":e=N(V.couldNotDownloadARequiredIcon);break;case"no-icon-available":e=N(V.downloadedIconWasEmptyOr);break;case"platform-not-supported-on-android":e=N(V.theSpecifiedApplicationPlatform);break;case"no-id-specified":e=N(V.noPlayStoreIdProvided);break;case"ids-do-not-match":e=N(V.thePlayStoreAppUrlAndPlayStoreId);break;case"already-installed":e=N(V.theAppIsAlreadyInstalled);break;case"url-not-supported-for-webapk":e=N(V.aUrlInTheManifestContainsA);break;case"in-incognito":e=N(V.pageIsLoadedInAnIncognitoWindow);break;case"not-offline-capable":e=N(V.pageDoesNotWorkOffline);break;case"no-url-for-service-worker":e=N(V.couldNotCheckServiceWorker);break;case"prefer-related-applications":e=N(V.manifestSpecifies);break;case"prefer-related-applications-only-beta-stable":e=N(V.preferrelatedapplicationsIsOnly);break;case"manifest-display-override-not-supported":e=N(V.manifestContainsDisplayoverride);break;case"warn-not-offline-capable":e=N(V.pageDoesNotWorkOfflineThePage,{PH1:"https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Introduction#network_independence"});break;default:console.error(`Installability error id '${i.errorId}' is not recognized`)}e&&t.push(e)}return t}async loadImage(t){const i=this.resourceTreeModel?.mainFrame?.id;if(!this.target)throw new Error("no target");if(!i)throw new Error("no main frame found");const{content:r}=await o.PageResourceLoader.PageResourceLoader.instance().loadResource(t,{target:this.target,frameId:i,initiatorUrl:this.target.inspectedURL()},!0),s=document.createElement("div");s.classList.add("image-wrapper");const a=document.createElement("img"),n=new Promise((e,t)=>{a.onload=e,a.onerror=t});a.src="data:application/octet-stream;base64,"+await e.Base64.encode(r),a.alt=N(V.imageFromS,{PH1:t}),s.appendChild(a);try{return await n,{wrapper:s,image:a}}catch{}return null}parseSizes(e,t,i,r){const s=e?e.split(/\s+/):[],o=[];for(const e of s){if("any"===e){o.find(e=>"any"in e)||o.push({any:"any",formatted:"any"});continue}const s=e.match(/^(?<width>\d+)[xX](?<height>\d+)$/);if(s){const e=parseInt(s.groups?.width||"",10),t=parseInt(s.groups?.height||"",10),i=`${e}×${t}px`;o.push({width:e,height:t,formatted:i})}else r.push(N(V.sSShouldSpecifyItsSizeAs,{PH1:t,PH2:i}))}return o}checkSizeProblem(e,t,i,r){if("any"in e)return{hasSquareSize:t.naturalWidth===t.naturalHeight};const s=e.width===e.height;return t.naturalWidth!==e.width&&t.naturalHeight!==e.height?{error:N(V.actualSizeSspxOfSSDoesNotMatch,{PH1:t.naturalWidth,PH2:t.naturalHeight,PH3:i,PH4:r,PH5:e.width,PH6:e.height}),hasSquareSize:s}:t.naturalWidth!==e.width?{error:N(V.actualWidthSpxOfSSDoesNotMatch,{PH1:t.naturalWidth,PH2:i,PH3:r,PH4:e.width}),hasSquareSize:s}:t.naturalHeight!==e.height?{error:N(V.actualHeightSpxOfSSDoesNotMatch,{PH1:t.naturalHeight,PH2:i,PH3:r,PH4:e.height}),hasSquareSize:s}:{hasSquareSize:s}}async appendImageResourceToSection(t,i,r,s){const o=[],a=N(s?V.screenshot:V.icon);if(!i.src)return o.push(N(V.sSrcIsNotSet,{PH1:a})),{imageResourceErrors:o};const n=e.ParsedURL.ParsedURL.completeURL(t,i.src);if(!n)return o.push(N(V.sUrlSFailedToParse,{PH1:a,PH2:i.src})),{imageResourceErrors:o};const d=await this.loadImage(n);if(!d)return o.push(N(V.sSFailedToLoad,{PH1:a,PH2:n})),{imageResourceErrors:o};const{wrapper:l,image:c}=d,{naturalWidth:h,naturalHeight:g}=c,p=this.parseSizes(i.sizes,a,n,o),u=p.map(e=>e.formatted).join(" ")+"\n"+(i.type||""),m=r.appendFlexedField(u);let w=!1;if(i.sizes){s&&p.length>0&&"any"in p[0]&&o.push(N(V.screenshotPixelSize,{url:n}));for(const e of p){const{error:t,hasSquareSize:i}=this.checkSizeProblem(e,c,a,n);if(w=w||i,t)o.push(t);else if(s){const t="any"in e?c.naturalWidth:e.width,i="any"in e?c.naturalHeight:e.height;t<320||i<320?o.push(N(V.sSSizeShouldBeAtLeast320,{PH1:a,PH2:n})):t>3840||i>3840?o.push(N(V.sSSizeShouldBeAtMost3840,{PH1:a,PH2:n})):t>2.3*i?o.push(N(V.sSWidthDoesNotComplyWithRatioRequirement,{PH1:a,PH2:n})):i>2.3*t&&o.push(N(V.sSHeightDoesNotComplyWithRatioRequirement,{PH1:a,PH2:n}))}}}else o.push(N(V.sSDoesNotSpecifyItsSizeInThe,{PH1:a,PH2:n}));c.width=c.naturalWidth;const v="string"==typeof i.purpose?i.purpose.toLowerCase():"";return v.includes("any")&&v.includes("maskable")&&o.push(N(V.avoidPurposeAnyAndMaskable)),m.appendChild(l),{imageResourceErrors:o,squareSizedIconAvailable:w,naturalWidth:h,naturalHeight:g}}async appendWindowControlsToSection(e,t,i){if(!await e.hasStyleSheetText(t))return;await e.toggleWindowControlsToolbar(!1);const r=c.UIUtils.CheckboxLabel.create(N(V.selectWindowControlsOverlayEmulationOs),!1);r.addEventListener("click",async()=>{await(this.overlayModel?.toggleWindowControlsToolbar(r.checked))});const s=r.createChild("select");s.appendChild(c.UIUtils.createOption("Windows","Windows","windows")),s.appendChild(c.UIUtils.createOption("macOS","Mac","macos")),s.appendChild(c.UIUtils.createOption("Linux","Linux","linux")),s.selectedIndex=0,this.overlayModel&&(s.value=this.overlayModel?.getWindowControlsConfig().selectedPlatform),s.addEventListener("change",async()=>{const e=s.options[s.selectedIndex].value;this.overlayModel&&(this.overlayModel.setWindowControlsPlatform(e),await this.overlayModel.toggleWindowControlsToolbar(r.checked))}),this.windowControlsSection.appendRow().appendChild(r),e.setWindowControlsThemeColor(i)}}var H=Object.freeze({__proto__:null,AppManifestView:j});const _={backForwardCache:"Back/forward cache"},K=i.i18n.registerUIStrings("panels/application/BackForwardCacheTreeElement.ts",_),q=i.i18n.getLocalizedString.bind(void 0,K);class z extends F{view;constructor(e){super(e,q(_.backForwardCache),!1,"bfcache");const t=n.Icon.create("database");this.setLeadingIcons([t])}get itemURL(){return"bfcache://"}onselect(e){return super.onselect(e),this.view||(this.view=d.LegacyWrapper.legacyWrapper(c.Widget.Widget,new m.BackForwardCacheView.BackForwardCacheView)),this.showView(this.view),t.userMetrics.panelShown("back-forward-cache"),!1}}class G extends o.SDKModel.SDKModel{backgroundServiceAgent;events;constructor(e){super(e),this.backgroundServiceAgent=e.backgroundServiceAgent(),e.registerBackgroundServiceDispatcher(this),this.events=new Map}enable(e){this.events.set(e,[]),this.backgroundServiceAgent.invoke_startObserving({service:e})}setRecording(e,t){this.backgroundServiceAgent.invoke_setRecording({shouldRecord:e,service:t})}clearEvents(e){this.events.set(e,[]),this.backgroundServiceAgent.invoke_clearEvents({service:e})}getEvents(e){return this.events.get(e)||[]}recordingStateChanged({isRecording:e,service:t}){this.dispatchEventToListeners($.RecordingStateChanged,{isRecording:e,serviceName:t})}backgroundServiceEventReceived({backgroundServiceEvent:e}){this.events.get(e.service).push(e),this.dispatchEventToListeners($.BackgroundServiceEventReceived,e)}}var $;o.SDKModel.SDKModel.register(G,{capabilities:1,autostart:!1}),function(e){e.RecordingStateChanged="RecordingStateChanged",e.BackgroundServiceEventReceived="BackgroundServiceEventReceived"}($||($={}));var J=Object.freeze({__proto__:null,BackgroundServiceModel:G,get Events(){return $}}),X=`.empty-view-scroller{overflow:auto}\n/*# sourceURL=${import.meta.resolve("./emptyWidget.css")} */`,Q=`.background-service-toolbar{background-color:var(--sys-color-cdt-base-container);border-bottom:var(--sys-size-1) solid var(--sys-color-divider)}.data-grid{flex:auto;border:none}[slot="insertion-point-main"]{overflow:auto}.background-service-preview{position:absolute;background-color:var(--sys-color-cdt-base-container);justify-content:center;align-items:center;overflow:auto;font-size:13px;color:var(--sys-color-on-surface-subtle)}.background-service-preview > div{max-width:450px;margin:10px;text-align:center}.background-service-preview > div > p{flex:none;white-space:pre-line}.background-service-shortcut{color:var(--sys-color-on-surface-subtle)}.background-service-metadata{padding-left:5px;padding-top:10px}.background-service-metadata-entry{padding-left:10px;padding-bottom:5px}.background-service-metadata-name{color:var(--sys-color-on-surface-subtle);display:inline-block;margin-right:0.25em;font-weight:bold}.background-service-metadata-value{display:inline;margin-right:1em;white-space:pre-wrap;word-break:break-all;user-select:text}.background-service-empty-value{color:var(--sys-color-state-disabled);font-style:italic}.background-service-record-inline-button{margin-bottom:6px}\n/*# sourceURL=${import.meta.resolve("./backgroundServiceView.css")} */`;const Y={backgroundFetch:"Background fetch",backgroundSync:"Background sync",pushMessaging:"Push messaging",notifications:"Notifications",paymentHandler:"Payment handler",periodicBackgroundSync:"Periodic background sync",clear:"Clear",saveEvents:"Save events",showEventsFromOtherDomains:"Show events from other domains",showEventsForOtherStorageKeys:"Show events from other storage partitions",stopRecordingEvents:"Stop recording events",startRecordingEvents:"Start recording events",timestamp:"Timestamp",event:"Event",origin:"Origin",storageKey:"Storage Key",swScope:"Service Worker Scope",instanceId:"Instance ID",backgroundServices:"Background services",noEventSelected:"No event selected",selectAnEventToViewMetadata:"Select an event to view its metadata",recordingSActivity:"Recording {PH1} activity…",noRecording:"No recording yet",devtoolsWillRecordAllSActivity:"DevTools will record all {PH1} activity for up to 3 days, even when closed.",startRecordingToDebug:'Start to debug background services by using the "{PH1}" button or by pressing {PH2}.',empty:"empty",noMetadataForThisEvent:"No metadata for this event"},Z=i.i18n.registerUIStrings("panels/application/BackgroundServiceView.ts",Y),ee=i.i18n.getLocalizedString.bind(void 0,Z);class te extends c.Widget.VBox{serviceName;model;serviceWorkerManager;securityOriginManager;storageKeyManager;recordAction;recordButton;originCheckbox;storageKeyCheckbox;saveButton;toolbar;splitWidget;dataGrid;previewPanel;selectedEventNode;preview;static getUIString(e){switch(e){case"backgroundFetch":return ee(Y.backgroundFetch);case"backgroundSync":return ee(Y.backgroundSync);case"pushMessaging":return ee(Y.pushMessaging);case"notifications":return ee(Y.notifications);case"paymentHandler":return ee(Y.paymentHandler);case"periodicBackgroundSync":return ee(Y.periodicBackgroundSync);default:return""}}constructor(e,t){if(super({jslog:`${u.pane().context(r.StringUtilities.toKebabCase(e))}`,useShadowDom:!0}),this.registerRequiredCSS(X,Q),this.serviceName=e,this.model=t,this.model.addEventListener($.RecordingStateChanged,this.onRecordingStateChanged,this),this.model.addEventListener($.BackgroundServiceEventReceived,this.onEventReceived,this),this.model.enable(this.serviceName),this.serviceWorkerManager=this.model.target().model(o.ServiceWorkerManager.ServiceWorkerManager),this.securityOriginManager=this.model.target().model(o.SecurityOriginManager.SecurityOriginManager),!this.securityOriginManager)throw new Error("SecurityOriginManager instance is missing");if(this.securityOriginManager.addEventListener(o.SecurityOriginManager.Events.MainSecurityOriginChanged,()=>this.onOriginChanged()),this.storageKeyManager=this.model.target().model(o.StorageKeyManager.StorageKeyManager),!this.storageKeyManager)throw new Error("StorageKeyManager instance is missing");this.storageKeyManager.addEventListener("MainStorageKeyChanged",()=>this.onStorageKeyChanged()),this.recordAction=c.ActionRegistry.ActionRegistry.instance().getAction("background-service.toggle-recording"),this.toolbar=this.contentElement.createChild("devtools-toolbar","background-service-toolbar"),this.toolbar.setAttribute("jslog",`${u.toolbar()}`),this.setupToolbar(),this.splitWidget=new c.SplitWidget.SplitWidget(!1,!0),this.splitWidget.show(this.contentElement),this.dataGrid=this.createDataGrid(),this.previewPanel=new c.Widget.VBox,this.previewPanel.element.setAttribute("jslog",`${u.pane("preview").track({resize:!0})}`),this.selectedEventNode=null,this.preview=null,this.splitWidget.setMainWidget(this.dataGrid.asWidget()),this.splitWidget.setSidebarWidget(this.previewPanel),this.splitWidget.hideMain(),this.showPreview(null)}getDataGrid(){return this.dataGrid}async setupToolbar(){this.toolbar.wrappable=!0,this.recordButton=c.Toolbar.Toolbar.createActionButton(this.recordAction),this.recordButton.toggleOnClick(!1),this.toolbar.appendToolbarItem(this.recordButton);const e=new c.Toolbar.ToolbarButton(ee(Y.clear),"clear",void 0,"background-service.clear");e.addEventListener("Click",()=>this.clearEvents()),this.toolbar.appendToolbarItem(e),this.toolbar.appendSeparator(),this.saveButton=new c.Toolbar.ToolbarButton(ee(Y.saveEvents),"download",void 0,"background-service.save-events"),this.saveButton.addEventListener("Click",e=>{this.saveToFile()}),this.saveButton.setEnabled(!1),this.toolbar.appendToolbarItem(this.saveButton),this.toolbar.appendSeparator(),this.originCheckbox=new c.Toolbar.ToolbarCheckbox(ee(Y.showEventsFromOtherDomains),ee(Y.showEventsFromOtherDomains),()=>this.refreshView(),"show-events-from-other-domains"),this.toolbar.appendToolbarItem(this.originCheckbox),this.storageKeyCheckbox=new c.Toolbar.ToolbarCheckbox(ee(Y.showEventsForOtherStorageKeys),ee(Y.showEventsForOtherStorageKeys),()=>this.refreshView(),"show-events-from-other-partitions"),this.toolbar.appendToolbarItem(this.storageKeyCheckbox)}refreshView(){this.clearView();const e=this.model.getEvents(this.serviceName).filter(e=>this.acceptEvent(e));for(const t of e)this.addEvent(t)}clearView(){this.selectedEventNode=null,this.dataGrid.rootNode().removeChildren(),this.splitWidget.hideMain(),this.saveButton.setEnabled(!1),this.showPreview(null)}toggleRecording(){const e=!this.recordButton.isToggled();this.model.setRecording(e,this.serviceName);const t=te.getUIString(this.serviceName).toLowerCase();e&&(c.ARIAUtils.LiveAnnouncer.alert(ee(Y.recordingSActivity,{PH1:t})+" "+ee(Y.devtoolsWillRecordAllSActivity,{PH1:t})),this.preview?.focus())}clearEvents(){this.model.clearEvents(this.serviceName),this.clearView()}onRecordingStateChanged({data:e}){e.serviceName===this.serviceName&&e.isRecording!==this.recordButton.isToggled()&&(this.recordButton.setToggled(e.isRecording),this.updateRecordButtonTooltip(),this.showPreview(this.selectedEventNode))}updateRecordButtonTooltip(){const e=this.recordButton.isToggled()?ee(Y.stopRecordingEvents):ee(Y.startRecordingEvents);this.recordButton.setTitle(e,"background-service.toggle-recording")}onEventReceived({data:e}){this.acceptEvent(e)&&this.addEvent(e)}onOriginChanged(){this.originCheckbox.checked()||this.refreshView()}onStorageKeyChanged(){this.storageKeyCheckbox.checked()||this.refreshView()}addEvent(e){const t=this.createEventData(e),i=new ie(t,e.eventMetadata);this.dataGrid.rootNode().appendChild(i),"Both"!==this.splitWidget.showMode()&&this.splitWidget.showBoth(),1===this.dataGrid.rootNode().children.length&&(this.saveButton.setEnabled(!0),this.showPreview(this.selectedEventNode))}createDataGrid(){const e=[{id:"id",title:"#",weight:1},{id:"timestamp",title:ee(Y.timestamp),weight:7},{id:"event-name",title:ee(Y.event),weight:8},{id:"origin",title:ee(Y.origin),weight:8},{id:"storage-key",title:ee(Y.storageKey),weight:8},{id:"sw-scope",title:ee(Y.swScope),weight:4},{id:"instance-id",title:ee(Y.instanceId),weight:8}],t=new S.DataGrid.DataGridImpl({displayName:ee(Y.backgroundServices),columns:e,refreshCallback:void 0,deleteCallback:void 0});return t.setStriped(!0),t.addEventListener("SelectedNode",e=>this.showPreview(e.data)),t}createEventData(e){let t="";const i=this.serviceWorkerManager?this.serviceWorkerManager.registrations().get(e.serviceWorkerRegistrationId):void 0;return i&&(t=i.scopeURL.substr(i.securityOrigin.length)),{id:this.dataGrid.rootNode().children.length+1,timestamp:c.UIUtils.formatTimestamp(1e3*e.timestamp,!0),origin:e.origin,"storage-key":e.storageKey,"sw-scope":t,"event-name":e.eventName,"instance-id":e.instanceId}}acceptEvent(e){if(e.service!==this.serviceName)return!1;if(this.originCheckbox.checked()||this.storageKeyCheckbox.checked())return!0;const t=e.origin.substr(0,e.origin.length-1),i=e.storageKey;return this.securityOriginManager.securityOrigins().includes(t)||this.storageKeyManager.storageKeys().includes(i)}createLearnMoreLink(){let e="https://go.microsoft.com/fwlink/";switch(this.serviceName){case"backgroundFetch":e+="#background-fetch";break;case"backgroundSync":e+="#background-sync";break;case"pushMessaging":e+="#push-messages";break;case"notifications":e+="#notifications"}return e}showPreview(e){if(this.selectedEventNode&&this.selectedEventNode===e)return;if(this.selectedEventNode=e,this.preview&&this.preview.detach(),this.selectedEventNode)return this.preview=this.selectedEventNode.createPreview(),void this.preview.show(this.previewPanel.contentElement);let t;if(this.dataGrid.rootNode().children.length)t=new c.EmptyWidget.EmptyWidget(ee(Y.noEventSelected),ee(Y.selectAnEventToViewMetadata));else if(this.recordButton.isToggled()){const e=te.getUIString(this.serviceName).toLowerCase();t=new c.EmptyWidget.EmptyWidget(ee(Y.recordingSActivity,{PH1:e}),ee(Y.devtoolsWillRecordAllSActivity,{PH1:e}))}else{const e=c.ShortcutRegistry.ShortcutRegistry.instance().shortcutsForAction("background-service.toggle-recording")[0];t=new c.EmptyWidget.EmptyWidget(ee(Y.noRecording),ee(Y.startRecordingToDebug,{PH1:ee(Y.startRecordingEvents),PH2:e.title()})),t.link=this.createLearnMoreLink();const i=c.UIUtils.createTextButton(ee(Y.startRecordingEvents),()=>this.toggleRecording(),{jslogContext:"start-recording",variant:"tonal"});t.contentElement.appendChild(i)}t.setDefaultFocusedElement(t.contentElement),this.preview=t,this.preview.show(this.previewPanel.contentElement)}async saveToFile(){const e=`${this.serviceName}-${r.DateUtilities.toISO8601Compact(new Date)}.json`,t=new v.FileUtils.FileOutputStream;if(!await t.open(e))return;const i=this.model.getEvents(this.serviceName).filter(e=>this.acceptEvent(e));await t.write(JSON.stringify(i,void 0,2)),t.close()}}class ie extends S.DataGrid.DataGridNode{eventMetadata;constructor(e,t){super(e),this.eventMetadata=t.sort((e,t)=>r.StringUtilities.compare(e.key,t.key))}createPreview(){const e=new c.Widget.VBox;e.element.classList.add("background-service-metadata"),e.element.setAttribute("jslog",`${u.section("metadata")}`);for(const t of this.eventMetadata){const i=document.createElement("div");i.classList.add("background-service-metadata-entry"),i.createChild("div","background-service-metadata-name").textContent=t.key+": ",t.value?i.createChild("div","background-service-metadata-value source-code").textContent=t.value:i.createChild("div","background-service-metadata-value background-service-empty-value").textContent=ee(Y.empty),e.element.appendChild(i)}if(!e.element.children.length){const t=document.createElement("div");t.classList.add("background-service-metadata-entry"),t.createChild("div","background-service-metadata-name background-service-empty-value").textContent=ee(Y.noMetadataForThisEvent),e.element.appendChild(t)}return e}}var re=Object.freeze({__proto__:null,ActionDelegate:class{handleAction(e,t){const i=e.flavor(te);if("background-service.toggle-recording"===t){if(!i)throw new Error("BackgroundServiceView instance is missing");return i.toggleRecording(),!0}return!1}},BackgroundServiceView:te,EventDataNode:ie});const se={bounceTrackingMitigations:"Bounce tracking mitigations"},oe=i.i18n.registerUIStrings("panels/application/BounceTrackingMitigationsTreeElement.ts",se),ae=i.i18n.getLocalizedString.bind(void 0,oe);class ne extends F{view;constructor(e){super(e,ae(se.bounceTrackingMitigations),!1,"bounce-tracking-mitigations");const t=n.Icon.create("database");this.setLeadingIcons([t])}get itemURL(){return"bounce-tracking-mitigations://"}onselect(e){return super.onselect(e),this.view||(this.view=d.LegacyWrapper.legacyWrapper(c.Widget.Widget,new m.BounceTrackingMitigationsView.BounceTrackingMitigationsView)),this.showView(this.view),t.userMetrics.panelShown("bounce-tracking-mitigations"),!1}}var de=Object.freeze({__proto__:null,BounceTrackingMitigationsTreeElement:ne,i18nString:ae});class le extends e.ObjectWrapper.ObjectWrapper{model;storageKeyInternal;isLocalStorageInternal;constructor(e,t,i){super(),this.model=e,this.storageKeyInternal=t,this.isLocalStorageInternal=i}static storageId(e,t){return{storageKey:e,isLocalStorage:t}}get id(){return le.storageId(this.storageKeyInternal,this.isLocalStorageInternal)}get storageKey(){return this.storageKeyInternal}get isLocalStorage(){return this.isLocalStorageInternal}getItems(){return this.model.agent.invoke_getDOMStorageItems({storageId:this.id}).then(({entries:e})=>e)}setItem(e,t){this.model.agent.invoke_setDOMStorageItem({storageId:this.id,key:e,value:t})}removeItem(e){this.model.agent.invoke_removeDOMStorageItem({storageId:this.id,key:e})}clear(){this.model.agent.invoke_clear({storageId:this.id})}}class ce extends o.SDKModel.SDKModel{storageKeyManagerInternal;storagesInternal;agent;enabled;constructor(e){super(e),this.storageKeyManagerInternal=e.model(o.StorageKeyManager.StorageKeyManager),this.storagesInternal={},this.agent=e.domstorageAgent()}enable(){if(!this.enabled){if(this.target().registerDOMStorageDispatcher(new he(this)),this.storageKeyManagerInternal){this.storageKeyManagerInternal.addEventListener("StorageKeyAdded",this.storageKeyAdded,this),this.storageKeyManagerInternal.addEventListener("StorageKeyRemoved",this.storageKeyRemoved,this);for(const e of this.storageKeyManagerInternal.storageKeys())this.addStorageKey(e)}this.agent.invoke_enable(),this.enabled=!0}}clearForStorageKey(e){if(this.enabled){for(const t of[!0,!1]){const i=this.storageKey(e,t),r=this.storagesInternal[i];if(!r)return;r.clear()}this.removeStorageKey(e),this.addStorageKey(e)}}storageKeyAdded(e){this.addStorageKey(e.data)}addStorageKey(e){for(const t of[!0,!1]){const i=this.storageKey(e,t);console.assert(!this.storagesInternal[i]);const r=new le(this,e,t);this.storagesInternal[i]=r,this.dispatchEventToListeners("DOMStorageAdded",r)}}storageKeyRemoved(e){this.removeStorageKey(e.data)}removeStorageKey(e){for(const t of[!0,!1]){const i=this.storageKey(e,t),r=this.storagesInternal[i];r&&(delete this.storagesInternal[i],this.dispatchEventToListeners("DOMStorageRemoved",r))}}storageKey(e,t){return JSON.stringify(le.storageId(e,t))}domStorageItemsCleared(e){const t=this.storageForId(e);t&&t.dispatchEventToListeners("DOMStorageItemsCleared")}domStorageItemRemoved(e,t){const i=this.storageForId(e);if(!i)return;const r={key:t};i.dispatchEventToListeners("DOMStorageItemRemoved",r)}domStorageItemAdded(e,t,i){const r=this.storageForId(e);if(!r)return;const s={key:t,value:i};r.dispatchEventToListeners("DOMStorageItemAdded",s)}domStorageItemUpdated(e,t,i,r){const s=this.storageForId(e);if(!s)return;const o={key:t,oldValue:i,value:r};s.dispatchEventToListeners("DOMStorageItemUpdated",o)}storageForId(e){return console.assert(Boolean(e.storageKey)),this.storagesInternal[this.storageKey(e.storageKey||"",e.isLocalStorage)]}storages(){const e=[];for(const t in this.storagesInternal)e.push(this.storagesInternal[t]);return e}}o.SDKModel.SDKModel.register(ce,{capabilities:2,autostart:!1});class he{model;constructor(e){this.model=e}domStorageItemsCleared({storageId:e}){this.model.domStorageItemsCleared(e)}domStorageItemRemoved({storageId:e,key:t}){this.model.domStorageItemRemoved(e,t)}domStorageItemAdded({storageId:e,key:t,newValue:i}){this.model.domStorageItemAdded(e,t,i)}domStorageItemUpdated({storageId:e,key:t,oldValue:i,newValue:r}){this.model.domStorageItemUpdated(e,t,i,r)}}var ge=Object.freeze({__proto__:null,DOMStorage:le,DOMStorageDispatcher:he,DOMStorageModel:ce});class pe extends e.ObjectWrapper.ObjectWrapper{#e;#t;#i;#r;constructor(e,t,i,r){super(),this.#e=e,this.#t=t,this.#i=i,this.#r=r}get model(){return this.#e}get extensionId(){return this.#t}get name(){return this.#i}get key(){return`${this.extensionId}-${this.storageArea}`}get storageArea(){return this.#r}async getItems(e){const t={id:this.#t,storageArea:this.#r};e&&(t.keys=e);const i=await this.#e.agent.invoke_getStorageItems(t);if(i.getError())throw new Error(i.getError());return i.data}async setItem(e,t){const i=await this.#e.agent.invoke_setStorageItems({id:this.#t,storageArea:this.#r,values:{[e]:t}});if(i.getError())throw new Error(i.getError())}async removeItem(e){const t=await this.#e.agent.invoke_removeStorageItems({id:this.#t,storageArea:this.#r,keys:[e]});if(t.getError())throw new Error(t.getError())}async clear(){const e=await this.#e.agent.invoke_clearStorageItems({id:this.#t,storageArea:this.#r});if(e.getError())throw new Error(e.getError())}matchesTarget(t){if(!t)return!1;const i=t.targetInfo()?.url,r=i?e.ParsedURL.ParsedURL.fromString(i):null;return"chrome-extension"===r?.scheme&&r?.host===this.extensionId}}class ue extends o.SDKModel.SDKModel{#s;#o;agent;#a;constructor(e){super(e),this.#s=e.model(o.RuntimeModel.RuntimeModel),this.#o=new Map,this.agent=e.extensionsAgent()}enable(){this.#a||(this.#s&&(this.#s.addEventListener(o.RuntimeModel.Events.ExecutionContextCreated,this.#n,this),this.#s.addEventListener(o.RuntimeModel.Events.ExecutionContextDestroyed,this.#d,this),this.#s.executionContexts().forEach(this.#l,this)),this.#a=!0)}#c(e){const t=this.#o.get(e);if(t)return t;const i=new Map;return this.#o.set(e,i),i}#h(e,t){for(const i of["session","local","sync","managed"]){const r=this.#c(e),s=new pe(this,e,t,i);console.assert(!r.get(i)),s.getItems([]).then(()=>{this.#o.get(e)===r&&(r.get(i)||(r.set(i,s),this.dispatchEventToListeners("ExtensionStorageAdded",s)))}).catch(()=>{})}}#g(e){const t=this.#o.get(e);if(t){for(const[e,i]of t)t.delete(e),this.dispatchEventToListeners("ExtensionStorageRemoved",i);this.#o.delete(e)}}#l(e){const t=this.#p(e);t&&this.#h(t,e.name)}#n(e){this.#l(e.data)}#p(t){const i=e.ParsedURL.ParsedURL.fromString(t.origin);return i&&"chrome-extension"===i.scheme?i.host:void 0}#u(e){const t=this.#p(e);if(t){if(this.#s?.executionContexts().some(e=>this.#p(e)===t))return;this.#g(t)}}#d(e){this.#u(e.data)}storageForIdAndArea(e,t){return this.#o.get(e)?.get(t)}storages(){const e=[];for(const t of this.#o.values())e.push(...t.values());return e}}o.SDKModel.SDKModel.register(ue,{capabilities:4,autostart:!1});var me=Object.freeze({__proto__:null,ExtensionStorage:pe,ExtensionStorageModel:ue});const we="";class ve extends o.SDKModel.SDKModel{storageBucketModel;indexedDBAgent;storageAgent;databasesInternal;databaseNamesByStorageKeyAndBucket;updatedStorageBuckets;throttler;enabled;constructor(t){super(t),t.registerStorageDispatcher(this),this.storageBucketModel=t.model(o.StorageBucketsModel.StorageBucketsModel),this.indexedDBAgent=t.indexedDBAgent(),this.storageAgent=t.storageAgent(),this.databasesInternal=new Map,this.databaseNamesByStorageKeyAndBucket=new Map,this.updatedStorageBuckets=new Set,this.throttler=new e.Throttler.Throttler(1e3)}static keyFromIDBKey(e){if(null==e)return;let t;switch(typeof e){case"number":t={type:"number",number:e};break;case"string":t={type:"string",string:e};break;case"object":if(e instanceof Date)t={type:"date",date:e.getTime()};else{if(!Array.isArray(e))return;{const i=[];for(let t=0;t<e.length;++t){const r=ve.keyFromIDBKey(e[t]);r&&i.push(r)}t={type:"array",array:i}}}break;default:return}return t}static keyRangeFromIDBKeyRange(e){return{lower:ve.keyFromIDBKey(e.lower),upper:ve.keyFromIDBKey(e.upper),lowerOpen:Boolean(e.lowerOpen),upperOpen:Boolean(e.upperOpen)}}static idbKeyPathFromKeyPath(e){let t;switch(e.type){case"null":t=null;break;case"string":t=e.string;break;case"array":t=e.array}return t}static keyPathStringFromIDBKeyPath(e){return"string"==typeof e?'"'+e+'"':e instanceof Array?'["'+e.join('", "')+'"]':null}enable(){if(!this.enabled){if(this.indexedDBAgent.invoke_enable(),this.storageBucketModel){this.storageBucketModel.addEventListener("BucketAdded",this.storageBucketAdded,this),this.storageBucketModel.addEventListener("BucketRemoved",this.storageBucketRemoved,this);for(const{bucket:e}of this.storageBucketModel.getBuckets())this.addStorageBucket(e)}this.enabled=!0}}clearForStorageKey(e){if(!this.enabled||!this.databaseNamesByStorageKeyAndBucket.has(e))return;for(const[t]of this.databaseNamesByStorageKeyAndBucket.get(e)||[]){const i=this.storageBucketModel?.getBucketByName(e,t??void 0)?.bucket;i&&this.removeStorageBucket(i)}this.databaseNamesByStorageKeyAndBucket.delete(e);const t=this.storageBucketModel?.getBucketsForStorageKey(e)||[];for(const{bucket:e}of t)this.addStorageBucket(e)}async deleteDatabase(e){this.enabled&&(await this.indexedDBAgent.invoke_deleteDatabase({storageBucket:e.storageBucket,databaseName:e.name}),this.loadDatabaseNamesByStorageBucket(e.storageBucket))}async refreshDatabaseNames(){for(const[e]of this.databaseNamesByStorageKeyAndBucket){const t=this.databaseNamesByStorageKeyAndBucket.get(e)?.keys()||[];for(const i of t){const t=this.storageBucketModel?.getBucketByName(e,i??void 0)?.bucket;t&&await this.loadDatabaseNamesByStorageBucket(t)}}this.dispatchEventToListeners(Se.DatabaseNamesRefreshed)}refreshDatabase(e){this.loadDatabase(e,!0)}async clearObjectStore(e,t){await this.indexedDBAgent.invoke_clearObjectStore({storageBucket:e.storageBucket,databaseName:e.name,objectStoreName:t})}async deleteEntries(e,t,i){const r=ve.keyRangeFromIDBKeyRange(i);await this.indexedDBAgent.invoke_deleteObjectStoreEntries({storageBucket:e.storageBucket,databaseName:e.name,objectStoreName:t,keyRange:r})}storageBucketAdded({data:{bucketInfo:{bucket:e}}}){this.addStorageBucket(e)}storageBucketRemoved({data:{bucketInfo:{bucket:e}}}){this.removeStorageBucket(e)}addStorageBucket(e){const{storageKey:t}=e;this.databaseNamesByStorageKeyAndBucket.has(t)||(this.databaseNamesByStorageKeyAndBucket.set(t,new Map),this.storageAgent.invoke_trackIndexedDBForStorageKey({storageKey:t}));const i=this.databaseNamesByStorageKeyAndBucket.get(t)||new Map;console.assert(!i.has(e.name??we)),i.set(e.name??we,new Set),this.loadDatabaseNamesByStorageBucket(e)}removeStorageBucket(e){const{storageKey:t}=e;console.assert(this.databaseNamesByStorageKeyAndBucket.has(t));const i=this.databaseNamesByStorageKeyAndBucket.get(t)||new Map;console.assert(i.has(e.name??we));const r=i.get(e.name??we)||new Map;for(const e of r)this.databaseRemovedForStorageBucket(e);i.delete(e.name??we),0===i.size&&(this.databaseNamesByStorageKeyAndBucket.delete(t),this.storageAgent.invoke_untrackIndexedDBForStorageKey({storageKey:t}))}updateStorageKeyDatabaseNames(e,t){const i=this.databaseNamesByStorageKeyAndBucket.get(e.storageKey);if(void 0===i)return;const r=new Set(t.map(t=>new fe(e,t))),s=new Set(i.get(e.name??we));i.set(e.name??we,r);for(const e of s)e.inSet(r)||this.databaseRemovedForStorageBucket(e);for(const e of r)e.inSet(s)||this.databaseAddedForStorageBucket(e)}databases(){const e=[];for(const[,t]of this.databaseNamesByStorageKeyAndBucket)for(const[,i]of t)for(const t of i)e.push(t);return e}databaseAddedForStorageBucket(e){this.dispatchEventToListeners(Se.DatabaseAdded,{model:this,databaseId:e})}databaseRemovedForStorageBucket(e){this.dispatchEventToListeners(Se.DatabaseRemoved,{model:this,databaseId:e})}async loadDatabaseNamesByStorageBucket(e){const{storageKey:t}=e,{databaseNames:i}=await this.indexedDBAgent.invoke_requestDatabaseNames({storageBucket:e});if(!i)return[];if(!this.databaseNamesByStorageKeyAndBucket.has(t))return[];return(this.databaseNamesByStorageKeyAndBucket.get(t)||new Map).has(e.name??we)?(this.updateStorageKeyDatabaseNames(e,i),i):[]}async loadDatabase(e,t){const i=(await this.indexedDBAgent.invoke_requestDatabase({storageBucket:e.storageBucket,databaseName:e.name})).databaseWithObjectStores;if(!this.databaseNamesByStorageKeyAndBucket.get(e.storageBucket.storageKey)?.has(e.storageBucket.name??we))return;if(!i)return;const r=new ye(e,i.version);this.databasesInternal.set(e,r);for(const e of i.objectStores){const t=ve.idbKeyPathFromKeyPath(e.keyPath),i=new ke(e.name,t,e.autoIncrement);for(let t=0;t<e.indexes.length;++t){const r=e.indexes[t],s=ve.idbKeyPathFromKeyPath(r.keyPath),o=new Ie(r.name,s,r.unique,r.multiEntry);i.indexes.set(o.name,o)}r.objectStores.set(i.name,i)}this.dispatchEventToListeners(Se.DatabaseLoaded,{model:this,database:r,entriesUpdated:t})}loadObjectStoreData(e,t,i,r,s,o){this.requestData(e,e.name,t,void 0,i,r,s,o)}loadIndexData(e,t,i,r,s,o,a){this.requestData(e,e.name,t,i,r,s,o,a)}async requestData(e,t,i,r,s,a,n,d){const l=s?ve.keyRangeFromIDBKeyRange(s):void 0,c=this.target().model(o.RuntimeModel.RuntimeModel),h=await this.indexedDBAgent.invoke_requestData({storageBucket:e.storageBucket,databaseName:t,objectStoreName:i,indexName:r,skipCount:a,pageSize:n,keyRange:l});if(!c||!this.databaseNamesByStorageKeyAndBucket.get(e.storageBucket.storageKey)?.has(e.storageBucket.name??we))return;if(h.getError())return void console.error("IndexedDBAgent error: "+h.getError());const g=h.objectStoreDataEntries,p=[];for(const e of g){const t=c?.createRemoteObject(e.key),i=c?.createRemoteObject(e.primaryKey),r=c?.createRemoteObject(e.value);if(!t||!i||!r)return;p.push(new be(t,i,r))}d(p,h.hasMore)}async getMetadata(e,t){const i=e.name,r=t.name,s=await this.indexedDBAgent.invoke_getMetadata({storageBucket:e.storageBucket,databaseName:i,objectStoreName:r});return s.getError()?(console.error("IndexedDBAgent error: "+s.getError()),null):{entriesCount:s.entriesCount,keyGeneratorValue:s.keyGeneratorValue}}async refreshDatabaseListForStorageBucket(e){const t=await this.loadDatabaseNamesByStorageBucket(e);for(const i of t)this.loadDatabase(new fe(e,i),!1)}indexedDBListUpdated({storageKey:e,bucketId:t}){const i=this.storageBucketModel?.getBucketById(t)?.bucket;e&&i&&(this.updatedStorageBuckets.add(i),this.throttler.schedule(()=>{const e=Array.from(this.updatedStorageBuckets,e=>{this.refreshDatabaseListForStorageBucket(e)});return this.updatedStorageBuckets.clear(),Promise.all(e)}))}indexedDBContentUpdated({bucketId:e,databaseName:t,objectStoreName:i}){const r=this.storageBucketModel?.getBucketById(e)?.bucket;if(r){const e=new fe(r,t);this.dispatchEventToListeners(Se.IndexedDBContentUpdated,{databaseId:e,objectStoreName:i,model:this})}}attributionReportingTriggerRegistered(e){}cacheStorageListUpdated(e){}cacheStorageContentUpdated(e){}interestGroupAccessed(e){}interestGroupAuctionEventOccurred(e){}interestGroupAuctionNetworkRequestCreated(e){}sharedStorageAccessed(e){}sharedStorageWorkletOperationExecutionFinished(e){}storageBucketCreatedOrUpdated(e){}storageBucketDeleted(e){}attributionReportingSourceRegistered(e){}attributionReportingReportSent(e){}attributionReportingVerboseDebugReportSent(e){}}var Se;o.SDKModel.SDKModel.register(ve,{capabilities:8192,autostart:!1}),function(e){e.DatabaseAdded="DatabaseAdded",e.DatabaseRemoved="DatabaseRemoved",e.DatabaseLoaded="DatabaseLoaded",e.DatabaseNamesRefreshed="DatabaseNamesRefreshed",e.IndexedDBContentUpdated="IndexedDBContentUpdated"}(Se||(Se={}));class be{key;primaryKey;value;constructor(e,t,i){this.key=e,this.primaryKey=t,this.value=i}}class fe{storageBucket;name;constructor(e,t){this.storageBucket=e,this.name=t}inBucket(e){return this.storageBucket.name===e.name}equals(e){return this.name===e.name&&this.storageBucket.name===e.storageBucket.name&&this.storageBucket.storageKey===e.storageBucket.storageKey}inSet(e){for(const t of e)if(this.equals(t))return!0;return!1}}class ye{databaseId;version;objectStores;constructor(e,t){this.databaseId=e,this.version=t,this.objectStores=new Map}}class ke{name;keyPath;autoIncrement;indexes;constructor(e,t,i){this.name=e,this.keyPath=t,this.autoIncrement=i,this.indexes=new Map}get keyPathString(){return ve.keyPathStringFromIDBKeyPath(this.keyPath)}}class Ie{name;keyPath;unique;multiEntry;constructor(e,t,i,r){this.name=e,this.keyPath=t,this.unique=i,this.multiEntry=r}get keyPathString(){return ve.keyPathStringFromIDBKeyPath(this.keyPath)}}var Ce=Object.freeze({__proto__:null,Database:ye,DatabaseId:fe,Entry:be,get Events(){return Se},Index:Ie,IndexedDBModel:ve,ObjectStore:ke}),Te=`.indexed-db-data-view .data-view-toolbar{position:relative;background-color:var(--sys-color-cdt-base-container);border-bottom:1px solid var(--sys-color-divider)}.indexed-db-data-view .data-grid{flex:auto}.indexed-db-data-view .data-grid .data-container tr:nth-last-child(1){background-color:var(--sys-color-cdt-base-container)}.indexed-db-data-view .data-grid .data-container tr:nth-last-child(1) td{border:0}.indexed-db-data-view .data-grid .data-container tr:nth-last-child(2) td{border-bottom:1px solid var(--sys-color-divider)}.indexed-db-data-view .data-grid:focus .data-container tr.selected{background-color:var(--sys-color-tonal-container);color:inherit}.indexed-db-data-view .section,\n.indexed-db-data-view .section > .header,\n.indexed-db-data-view .section > .header .title{margin:0;min-height:inherit;line-height:inherit}.indexed-db-data-view .data-grid .data-container td .section .header .title{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.indexed-db-key-path{color:var(--sys-color-error);white-space:pre-wrap;unicode-bidi:-webkit-isolate}.indexed-db-container{overflow:auto}.indexed-db-header{min-width:400px;flex-shrink:0;flex-grow:0}.source-code.indexed-db-key-path{font-size:unset!important}.resources-toolbar{padding-right:10px}.object-store-summary-bar{flex:0 0 27px;line-height:27px;padding-left:5px;background-color:var(--sys-color-cdt-base-container);border-top:1px solid var(--sys-color-divider);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}\n/*# sourceURL=${import.meta.resolve("./indexedDBViews.css")} */`;const{html:Ee}=f,xe={version:"Version",objectStores:"Object stores",deleteDatabase:"Delete database",refreshDatabase:"Refresh database",confirmDeleteDatabase:'Delete "{PH1}" database?',databaseWillBeRemoved:"The selected database and contained data will be removed.",confirmClearObjectStore:'Clear "{PH1}" object store?',objectStoreWillBeCleared:"The data contained in the selected object store will be removed.",idb:"IDB",refresh:"Refresh",deleteSelected:"Delete selected",clearObjectStore:"Clear object store",dataMayBeStale:"Data may be stale",someEntriesMayHaveBeenModified:"Some entries may have been modified",keyString:"Key",primaryKey:"Primary key",valueString:"Value",indexedDb:"Indexed DB",keyPath:"Key path: ",showPreviousPage:"Show previous page",showNextPage:"Show next page",filterByKey:"Filter by key (show keys greater or equal to)",expandRecursively:"Expand Recursively",collapse:"Collapse",totalEntriesS:"Total entries: {PH1}",keyGeneratorValueS:"Key generator value: {PH1}"},Re=i.i18n.registerUIStrings("panels/application/IndexedDBViews.ts",xe),Me=i.i18n.getLocalizedString.bind(void 0,Re);class Le extends m.StorageMetadataView.StorageMetadataView{model;database;constructor(e,t){super(),this.model=e,this.setShowOnlyBucket(!1),t&&this.update(t)}getTitle(){return this.database?.databaseId.name}async renderReportContent(){return this.database?Ee`
${await super.renderReportContent()}
${this.key(Me(xe.version))}
${this.value(this.database.version.toString())}
${this.key(Me(xe.objectStores))}
${this.value(this.database.objectStores.size.toString())}
<devtools-report-divider></devtools-report-divider>
<devtools-report-section>
<devtools-button
aria-label=${Me(xe.deleteDatabase)}
.variant=${"outlined"}
@click=${this.deleteDatabase}
jslog=${u.action("delete-database").track({click:!0})}>
${Me(xe.deleteDatabase)}
</devtools-button>
<devtools-button
aria-label=${Me(xe.refreshDatabase)}
.variant=${"outlined"}
@click=${this.refreshDatabaseButtonClicked}
jslog=${u.action("refresh-database").track({click:!0})}>
${Me(xe.refreshDatabase)}
</devtools-button>
</devtools-report-section>
`:f.nothing}refreshDatabaseButtonClicked(){this.model.refreshDatabase(this.database.databaseId)}update(e){this.database=e;const t=this.model.target().model(o.StorageBucketsModel.StorageBucketsModel)?.getBucketByName(e.databaseId.storageBucket.storageKey,e.databaseId.storageBucket.name);t?this.setStorageBucket(t):this.setStorageKey(e.databaseId.storageBucket.storageKey),this.render().then(()=>this.updatedForTests())}updatedForTests(){}async deleteDatabase(){await c.UIUtils.ConfirmDialog.show(Me(xe.databaseWillBeRemoved),Me(xe.confirmDeleteDatabase,{PH1:this.database.databaseId.name}),this,{jslogContext:"delete-database-confirmation"})&&this.model.deleteDatabase(this.database.databaseId)}wasShown(){super.wasShown()}}customElements.define("devtools-idb-database-view",Le);class Pe extends c.View.SimpleView{model;databaseId;isIndex;refreshObjectStoreCallback;refreshButton;deleteSelectedButton;clearButton;needsRefresh;clearingObjectStore;pageSize;skipCount;entries;objectStore;index;keyInput;dataGrid;lastPageSize;lastSkipCount;pageBackButton;pageForwardButton;lastKey;summaryBarElement;constructor(e,t,i,r,s){super({title:Me(xe.idb),viewId:"idb",jslog:`${u.pane("indexed-db-data-view")}`}),this.registerRequiredCSS(Te),this.model=e,this.databaseId=t,this.isIndex=Boolean(r),this.refreshObjectStoreCallback=s,this.element.classList.add("indexed-db-data-view","storage-view"),this.refreshButton=new c.Toolbar.ToolbarButton(Me(xe.refresh),"refresh"),this.refreshButton.addEventListener("Click",this.refreshButtonClicked,this),this.refreshButton.element.setAttribute("jslog",`${u.action("refresh").track({click:!0})}`),this.deleteSelectedButton=new c.Toolbar.ToolbarButton(Me(xe.deleteSelected),"bin"),this.deleteSelectedButton.addEventListener("Click",e=>{this.deleteButtonClicked(null)}),this.deleteSelectedButton.element.setAttribute("jslog",`${u.action("delete-selected").track({click:!0})}`),this.clearButton=new c.Toolbar.ToolbarButton(Me(xe.clearObjectStore),"clear"),this.clearButton.addEventListener("Click",()=>{this.clearButtonClicked()},this),this.clearButton.element.setAttribute("jslog",`${u.action("clear-all").track({click:!0})}`);const o=c.UIUtils.createIconLabel({title:Me(xe.dataMayBeStale),iconName:"warning",color:"var(--icon-warning)",width:"20px",height:"20px"});this.needsRefresh=new c.Toolbar.ToolbarItem(o),this.needsRefresh.setVisible(!1),this.needsRefresh.setTitle(Me(xe.someEntriesMayHaveBeenModified)),this.clearingObjectStore=!1,this.createEditorToolbar(),this.pageSize=50,this.skipCount=0,this.update(i,r),this.entries=[]}createDataGrid(){const e=this.isIndex&&this.index?this.index.keyPath:this.objectStore.keyPath,t=[],i={title:void 0,titleDOMFragment:void 0,sortable:!1,sort:void 0,align:void 0,width:void 0,fixedWidth:void 0,editable:void 0,nonSelectable:void 0,longText:void 0,disclosure:void 0,weight:void 0,allowInSortByEvenWhenHidden:void 0,dataType:void 0,defaultWeight:void 0};t.push({...i,id:"number",title:"#",sortable:!1,width:"50px"}),t.push({...i,id:"key",titleDOMFragment:this.keyColumnHeaderFragment(Me(xe.keyString),e),sortable:!1}),this.isIndex&&t.push({...i,id:"primary-key",titleDOMFragment:this.keyColumnHeaderFragment(Me(xe.primaryKey),this.objectStore.keyPath),sortable:!1});const r=Me(xe.valueString);t.push({...i,id:"value",title:r,sortable:!1});const s=new S.DataGrid.DataGridImpl({displayName:Me(xe.indexedDb),columns:t,deleteCallback:this.deleteButtonClicked.bind(this),refreshCallback:this.updateData.bind(this,!0)});return s.setStriped(!0),s.addEventListener("SelectedNode",()=>{this.updateToolbarEnablement()},this),s}keyColumnHeaderFragment(e,t){const i=document.createDocumentFragment();if(c.UIUtils.createTextChild(i,e),null===t)return i;if(c.UIUtils.createTextChild(i," ("+Me(xe.keyPath)),Array.isArray(t)){c.UIUtils.createTextChild(i,"[");for(let e=0;e<t.length;++e)0!==e&&c.UIUtils.createTextChild(i,", "),i.appendChild(this.keyPathStringFragment(t[e]));c.UIUtils.createTextChild(i,"]")}else{const e=t;i.appendChild(this.keyPathStringFragment(e))}return c.UIUtils.createTextChild(i,")"),i}keyPathStringFragment(e){const t=document.createDocumentFragment();c.UIUtils.createTextChild(t,'"');return t.createChild("span","source-code indexed-db-key-path").textContent=e,c.UIUtils.createTextChild(t,'"'),t}createEditorToolbar(){const e=this.element.createChild("devtools-toolbar","data-view-toolbar");e.setAttribute("jslog",`${u.toolbar()}`),e.appendToolbarItem(this.refreshButton),e.appendToolbarItem(this.clearButton),e.appendToolbarItem(this.deleteSelectedButton),e.appendToolbarItem(new c.Toolbar.ToolbarSeparator),this.pageBackButton=new c.Toolbar.ToolbarButton(Me(xe.showPreviousPage),"triangle-left"),this.pageBackButton.addEventListener("Click",this.pageBackButtonClicked,this),e.appendToolbarItem(this.pageBackButton),this.pageForwardButton=new c.Toolbar.ToolbarButton(Me(xe.showNextPage),"triangle-right"),this.pageForwardButton.setEnabled(!1),this.pageForwardButton.addEventListener("Click",this.pageForwardButtonClicked,this),e.appendToolbarItem(this.pageForwardButton),this.keyInput=new c.Toolbar.ToolbarFilter(Me(xe.filterByKey),.5),this.keyInput.addEventListener("TextChanged",this.updateData.bind(this,!1)),e.appendToolbarItem(this.keyInput),e.appendToolbarItem(new c.Toolbar.ToolbarSeparator),e.appendToolbarItem(this.needsRefresh)}pageBackButtonClicked(){this.skipCount=Math.max(0,this.skipCount-this.pageSize),this.updateData(!1)}pageForwardButtonClicked(){this.skipCount=this.skipCount+this.pageSize,this.updateData(!1)}populateContextMenu(e,t){const i=t;i.valueObjectPresentation&&(e.revealSection().appendItem(Me(xe.expandRecursively),()=>{i.valueObjectPresentation&&i.valueObjectPresentation.objectTreeElement().expandRecursively()},{jslogContext:"expand-recursively"}),e.revealSection().appendItem(Me(xe.collapse),()=>{i.valueObjectPresentation&&i.valueObjectPresentation.objectTreeElement().collapse()},{jslogContext:"collapse"}))}refreshData(){this.updateData(!0)}update(e=null,t=null){e&&(this.objectStore=e,this.index=t,this.dataGrid&&this.dataGrid.asWidget().detach(),this.dataGrid=this.createDataGrid(),this.dataGrid.setRowContextMenuCallback(this.populateContextMenu.bind(this)),this.dataGrid.asWidget().show(this.element),this.skipCount=0,this.updateData(!0))}parseKey(e){let t;try{t=JSON.parse(e)}catch{t=e}return t}updateData(e){const t=this.parseKey(this.keyInput.value()),i=this.pageSize;let r=this.skipCount,s=this.dataGrid.selectedNode?this.dataGrid.selectedNode.data.number:0;if(s=Math.max(s,this.skipCount),this.clearButton.setEnabled(!this.isIndex),!e&&this.lastKey===t&&this.lastPageSize===i&&this.lastSkipCount===r)return;function o(e,t){this.clear(),this.entries=e;let i=null;for(let t=0;t<e.length;++t){const o={};o.number=t+r,o.key=e[t].key,o["primary-key"]=e[t].primaryKey,o.value=e[t].value;const a=new Ae(o);this.dataGrid.rootNode().appendChild(a),o.number<=s&&(i=a)}i&&i.select(),this.pageBackButton.setEnabled(Boolean(r)),this.pageForwardButton.setEnabled(t),this.needsRefresh.setVisible(!1),this.updateToolbarEnablement(),this.updatedDataForTests()}this.lastKey===t&&this.lastPageSize===i||(r=0,this.skipCount=0),this.lastKey=t,this.lastPageSize=i,this.lastSkipCount=r;const a=t?window.IDBKeyRange.lowerBound(t):null;this.isIndex&&this.index?this.model.loadIndexData(this.databaseId,this.objectStore.name,this.index.name,a,r,i,o.bind(this)):this.model.loadObjectStoreData(this.databaseId,this.objectStore.name,a,r,i,o.bind(this)),this.model.getMetadata(this.databaseId,this.objectStore).then(this.updateSummaryBar.bind(this))}updateSummaryBar(e){if(this.summaryBarElement||(this.summaryBarElement=this.element.createChild("div","object-store-summary-bar")),this.summaryBarElement.removeChildren(),!e)return;const t=this.summaryBarElement.createChild("span");t.textContent=Me(xe.totalEntriesS,{PH1:String(e.entriesCount)}),this.objectStore.autoIncrement&&(t.textContent+=" ❘ ",t.textContent+=Me(xe.keyGeneratorValueS,{PH1:String(e.keyGeneratorValue)}))}updatedDataForTests(){}refreshButtonClicked(){this.updateData(!0)}async clearButtonClicked(){await c.UIUtils.ConfirmDialog.show(Me(xe.objectStoreWillBeCleared),Me(xe.confirmClearObjectStore,{PH1:this.objectStore.name}),this.element,{jslogContext:"clear-object-store-confirmation"})&&(this.clearButton.setEnabled(!1),this.clearingObjectStore=!0,await this.model.clearObjectStore(this.databaseId,this.objectStore.name),this.clearingObjectStore=!1,this.clearButton.setEnabled(!0),this.updateData(!0))}markNeedsRefresh(){this.clearingObjectStore||this.needsRefresh.setVisible(!0)}async resolveArrayKey(e){const{properties:t}=await e.getOwnProperties(!1);if(!t)return[];const i=[],r=t.filter(e=>!isNaN(Number(e.name))).map(async e=>{const t=e.value;if(!t)return;let r;r="array"===t.subtype?await this.resolveArrayKey(t):t.value,i[Number(e.name)]=r});return await Promise.all(r),i}async deleteButtonClicked(e){if(!e&&!(e=this.dataGrid.selectedNode))return;const t=this.isIndex?e.data["primary-key"]:e.data.key,i="array"===t.subtype?await this.resolveArrayKey(t):t.value;await this.model.deleteEntries(this.databaseId,this.objectStore.name,window.IDBKeyRange.only(i)),this.refreshObjectStoreCallback()}clear(){this.dataGrid.rootNode().removeChildren(),this.entries=[]}updateToolbarEnablement(){const e=!this.dataGrid||0===this.dataGrid.rootNode().children.length;this.deleteSelectedButton.setEnabled(!e&&null!==this.dataGrid.selectedNode)}}class Ae extends S.DataGrid.DataGridNode{selectable;valueObjectPresentation;constructor(e){super(e,!1),this.selectable=!0,this.valueObjectPresentation=null}createCell(e){const t=super.createCell(e),i=this.data[e];switch(e){case"value":{t.removeChildren();const e=b.ObjectPropertiesSection.ObjectPropertiesSection.defaultObjectPropertiesSection(i,void 0,!0,!0);t.appendChild(e.element),this.valueObjectPresentation=e;break}case"key":case"primary-key":{t.removeChildren();const e=b.ObjectPropertiesSection.ObjectPropertiesSection.defaultObjectPresentation(i,void 0,!0,!0);t.appendChild(e);break}}return t}}var De=Object.freeze({__proto__:null,IDBDataGridNode:Ae,IDBDataView:Pe,IDBDatabaseView:Le});class Be extends o.SDKModel.SDKModel{storageAgent;enabled;constructor(e){super(e),e.registerStorageDispatcher(this),this.storageAgent=e.storageAgent(),this.enabled=!1}enable(){this.enabled||this.storageAgent.invoke_setInterestGroupTracking({enable:!0})}disable(){this.enabled&&this.storageAgent.invoke_setInterestGroupTracking({enable:!1})}interestGroupAccessed(e){this.dispatchEventToListeners("InterestGroupAccess",e)}attributionReportingTriggerRegistered(e){}indexedDBListUpdated(e){}indexedDBContentUpdated(e){}interestGroupAuctionEventOccurred(e){}interestGroupAuctionNetworkRequestCreated(e){}cacheStorageListUpdated(e){}cacheStorageContentUpdated(e){}sharedStorageAccessed(e){}sharedStorageWorkletOperationExecutionFinished(e){}storageBucketCreatedOrUpdated(e){}storageBucketDeleted(e){}attributionReportingSourceRegistered(e){}attributionReportingReportSent(e){}attributionReportingVerboseDebugReportSent(e){}}o.SDKModel.SDKModel.register(Be,{capabilities:8192,autostart:!1});var Fe=Object.freeze({__proto__:null,InterestGroupStorageModel:Be}),Oe=`devtools-interest-group-access-grid{overflow:auto}\n/*# sourceURL=${import.meta.resolve("./interestGroupStorageView.css")} */`;const Ue={noValueSelected:"No interest group selected",clickToDisplayBody:"Select any interest group event to display the group's current state",noDataAvailable:"No details available",noDataDescription:"The browser may have left the group."},Ve=i.i18n.registerUIStrings("panels/application/InterestGroupStorageView.ts",Ue),We=i.i18n.getLocalizedString.bind(void 0,Ve);class Ne extends c.SplitWidget.SplitWidget{interestGroupGrid=new m.InterestGroupAccessGrid.InterestGroupAccessGrid;events=[];detailsGetter;noDataView;noDisplayView;constructor(e){super(!1,!0),this.element.setAttribute("jslog",`${u.pane("interest-groups")}`),this.detailsGetter=e;const t=new c.Widget.VBox;this.noDisplayView=new c.EmptyWidget.EmptyWidget(We(Ue.noValueSelected),We(Ue.clickToDisplayBody)),this.noDataView=new c.EmptyWidget.EmptyWidget(We(Ue.noDataAvailable),We(Ue.noDataDescription)),t.setMinimumSize(0,120),this.setMainWidget(t),this.noDisplayView.setMinimumSize(0,80),this.setSidebarWidget(this.noDisplayView),this.noDataView.setMinimumSize(0,80),this.noDisplayView.contentElement.setAttribute("jslog",`${u.pane("details").track({resize:!0})}`),this.noDataView.contentElement.setAttribute("jslog",`${u.pane("details").track({resize:!0})}`),this.hideSidebar(),t.contentElement.appendChild(this.interestGroupGrid),this.interestGroupGrid.addEventListener("select",this.onFocus.bind(this))}wasShown(){super.wasShown();const e=this.mainWidget();e&&e.registerRequiredCSS(Oe)}addEvent(e){"Both"!==this.showMode()&&this.showBoth();this.events.find(t=>{return r=e,(i=t).accessTime===r.accessTime&&i.type===r.type&&i.ownerOrigin===r.ownerOrigin&&i.name===r.name;var i,r})||(this.events.push(e),this.interestGroupGrid.data=this.events)}clearEvents(){this.events=[],this.interestGroupGrid.data=this.events,this.setSidebarWidget(this.noDisplayView),this.sidebarUpdatedForTesting()}async onFocus(e){const t=e,{ownerOrigin:i,name:r,type:s}=t.detail;let o=null;if("additionalBid"!==s&&"additionalBidWin"!==s&&"topLevelAdditionalBid"!==s&&(o=await this.detailsGetter.getInterestGroupDetails(i,r)),o){const e=await l.JSONView.JSONView.createView(JSON.stringify(o));e?.setMinimumSize(0,40),e&&(e.contentElement.setAttribute("jslog",`${u.pane("details").track({resize:!0})}`),this.setSidebarWidget(e))}else this.setSidebarWidget(this.noDataView);this.sidebarUpdatedForTesting()}getEventsForTesting(){return this.events}getInterestGroupGridForTesting(){return this.interestGroupGrid}sidebarUpdatedForTesting(){}}var je=Object.freeze({__proto__:null,InterestGroupStorageView:Ne});const He={interestGroups:"Interest groups"},_e=i.i18n.registerUIStrings("panels/application/InterestGroupTreeElement.ts",He),Ke=i.i18n.getLocalizedString.bind(void 0,_e);class qe extends F{view;constructor(e){super(e,Ke(He.interestGroups),!1,"interest-groups");const t=n.Icon.create("database");this.setLeadingIcons([t]),this.view=new Ne(this)}get itemURL(){return"interest-groups://"}async getInterestGroupDetails(e,t){const i=o.TargetManager.TargetManager.instance().primaryPageTarget();if(!i)return null;return(await i.storageAgent().invoke_getInterestGroupDetails({ownerOrigin:e,name:t})).details}onselect(e){return super.onselect(e),this.showView(this.view),t.userMetrics.panelShown("interest-groups"),!1}addEvent(e){this.view.addEvent(e)}clearEvents(){this.view.clearEvents()}}var ze=Object.freeze({__proto__:null,InterestGroupTreeElement:qe,i18nString:Ke}),Ge=`.report-content-box{overflow:initial}.report-field-name{flex:0 0 200px}.report-field-value{user-select:text;display:flex}.report-field .inline-name{color:var(--sys-color-state-disabled);padding-left:2ex;user-select:none;white-space:pre-line}.report-field .inline-name::after{content:":\\A0"}.report-field .inline-comment{color:var(--sys-color-token-subtle);padding-left:1ex;white-space:pre-line}.report-field .inline-comment::before{content:"("}.report-field .inline-comment::after{content:")"}.report-field .inline-span{color:var(--sys-color-token-subtle);padding-left:1ex;white-space:pre-line}.report-field-value-link{display:inline-block}.icon-link.devtools-link{background-color:var(--sys-color-primary);vertical-align:sub}.frame-details-container{overflow:auto}.frame-details-report-container{min-width:550px}.text-ellipsis{overflow:hidden;text-overflow:ellipsis}\n/*# sourceURL=${import.meta.resolve("./openedWindowDetailsView.css")} */`;const $e={yes:"Yes",no:"No",clickToOpenInElementsPanel:"Click to open in Elements panel",document:"Document",url:"URL",security:"Security",openerFrame:"Opener Frame",accessToOpener:"Access to opener",showsWhetherTheOpenedWindowIs:"Shows whether the opened window is able to access its opener and vice versa",windowWithoutTitle:"Window without title",closed:"closed",worker:"worker",type:"Type",securityIsolation:"Security & Isolation",crossoriginEmbedderPolicy:"Cross-Origin Embedder Policy",webWorker:"Web Worker",unknown:"Unknown",reportingTo:"reporting to"},Je=i.i18n.registerUIStrings("panels/application/OpenedWindowDetailsView.ts",$e),Xe=i.i18n.getLocalizedString.bind(void 0,Je);async function Qe(t){let i=null;if(t instanceof o.ResourceTreeModel.ResourceTreeFrame?i=t:t&&(i=o.FrameManager.FrameManager.instance().getFrame(t)),!i)return null;const r=await i.getOwnerDOMNodeOrDocument();if(!r)return null;const s=function(e,t,i){const r=n.Icon.create(e,"icon-link devtools-link"),s=document.createElement("button");return c.Tooltip.Tooltip.install(s,t),s.classList.add("devtools-link","link-style","text-button"),s.appendChild(r),s.addEventListener("click",e=>{e.consume(!0),i()}),s}("code-circle",Xe($e.clickToOpenInElementsPanel),()=>e.Revealer.reveal(r)),a=document.createElement("span");return a.textContent=`<${r.nodeName().toLocaleLowerCase()}>`,s.insertBefore(a,s.firstChild),s.addEventListener("mouseenter",()=>{i&&i.highlight()}),s.addEventListener("mouseleave",()=>{o.OverlayModel.OverlayModel.hideDOMNodeHighlight()}),s}class Ye extends c.ThrottledWidget.ThrottledWidget{targetInfo;isWindowClosed;reportView;documentSection;#m;securitySection;openerElementField;hasDOMAccessValue;constructor(e,t){super(),this.registerRequiredCSS(Ge),this.targetInfo=e,this.isWindowClosed=t,this.contentElement.classList.add("frame-details-container"),this.reportView=new c.ReportView.ReportView(this.buildTitle()),this.reportView.show(this.contentElement),this.reportView.registerRequiredCSS(Ge),this.reportView.element.classList.add("frame-details-report-container"),this.documentSection=this.reportView.appendSection(Xe($e.document)),this.#m=this.documentSection.appendField(Xe($e.url)).createChild("div","text-ellipsis"),this.securitySection=this.reportView.appendSection(Xe($e.security)),this.openerElementField=this.securitySection.appendField(Xe($e.openerFrame)),this.securitySection.setFieldVisible(Xe($e.openerFrame),!1),this.hasDOMAccessValue=this.securitySection.appendField(Xe($e.accessToOpener)),c.Tooltip.Tooltip.install(this.hasDOMAccessValue,Xe($e.showsWhetherTheOpenedWindowIs)),this.update()}async doUpdate(){var e;this.reportView.setTitle(this.buildTitle()),this.#m.textContent=this.targetInfo.url,this.#m.title=this.targetInfo.url,this.hasDOMAccessValue.textContent=(e=this.targetInfo.canAccessOpener,Xe(e?$e.yes:$e.no)),this.maybeDisplayOpenerFrame()}async maybeDisplayOpenerFrame(){this.openerElementField.removeChildren();const e=await Qe(this.targetInfo.openerFrameId);if(e)return this.openerElementField.append(e),void this.securitySection.setFieldVisible(Xe($e.openerFrame),!0);this.securitySection.setFieldVisible(Xe($e.openerFrame),!1)}buildTitle(){let e=this.targetInfo.title||Xe($e.windowWithoutTitle);return this.isWindowClosed&&(e+=` (${Xe($e.closed)})`),e}setIsWindowClosed(e){this.isWindowClosed=e}setTargetInfo(e){this.targetInfo=e}}class Ze extends c.ThrottledWidget.ThrottledWidget{targetInfo;reportView;documentSection;isolationSection;coepPolicy;constructor(e){super(),this.registerRequiredCSS(Ge),this.targetInfo=e,this.contentElement.classList.add("frame-details-container"),this.reportView=new c.ReportView.ReportView(this.targetInfo.title||this.targetInfo.url||Xe($e.worker)),this.reportView.show(this.contentElement),this.reportView.registerRequiredCSS(Ge),this.reportView.element.classList.add("frame-details-report-container"),this.documentSection=this.reportView.appendSection(Xe($e.document));const t=this.documentSection.appendField(Xe($e.url)).createChild("div","text-ellipsis");t.textContent=this.targetInfo.url,t.title=this.targetInfo.url;this.documentSection.appendField(Xe($e.type)).textContent=this.workerTypeToString(this.targetInfo.type),this.isolationSection=this.reportView.appendSection(Xe($e.securityIsolation)),this.coepPolicy=this.isolationSection.appendField(Xe($e.crossoriginEmbedderPolicy)),this.update()}workerTypeToString(e){return"worker"===e?Xe($e.webWorker):"service_worker"===e?i.i18n.lockedString("Service Worker"):Xe($e.unknown)}async updateCoopCoepStatus(){const e=o.TargetManager.TargetManager.instance().targetById(this.targetInfo.targetId);if(!e)return;const t=e.model(o.NetworkManager.NetworkManager),i=t&&await t.getSecurityIsolationStatus(null);if(!i)return;this.fillCrossOriginPolicy(this.coepPolicy,e=>"None"!==e,i.coep)}fillCrossOriginPolicy(e,t,i){if(!i)return void(e.textContent="");const r=t(i.value);if(e.textContent=r?i.value:i.reportOnlyValue,!r&&t(i.reportOnlyValue)){const t=document.createElement("span");t.classList.add("inline-comment"),t.textContent="report-only",e.appendChild(t)}const s=r?i.reportingEndpoint:i.reportOnlyReportingEndpoint;if(s){e.createChild("span","inline-name").textContent=Xe($e.reportingTo);e.createChild("span").textContent=s}}async doUpdate(){await this.updateCoopCoepStatus()}}var et=Object.freeze({__proto__:null,OpenedWindowDetailsView:Ye,WorkerDetailsView:Ze});const tt={PrefetchFailedIneligibleRedirect:"The prefetch was redirected, but the redirect URL is not eligible for prefetch.",PrefetchFailedInvalidRedirect:"The prefetch was redirected, but there was a problem with the redirect.",PrefetchFailedMIMENotSupported:"The prefetch failed because the response's Content-Type header was not supported.",PrefetchFailedNetError:"The prefetch failed because of a network error.",PrefetchFailedNon2XX:"The prefetch failed because of a non-2xx HTTP response status code.",PrefetchIneligibleRetryAfter:"A previous prefetch to the origin got a HTTP 503 response with an Retry-After header that has not elapsed yet.",PrefetchIsPrivacyDecoy:"The URL was not eligible to be prefetched because there was a registered service worker or cross-site cookies for that origin, but the prefetch was put on the network anyways and not used, to disguise that the user had some kind of previous relationship with the origin.",PrefetchIsStale:"Too much time elapsed between the prefetch and usage, so the prefetch was discarded.",PrefetchNotEligibleBrowserContextOffTheRecord:"The prefetch was not performed because the browser is in InPrivate or Guest mode.",PrefetchNotEligibleDataSaverEnabled:"The prefetch was not performed because the operating system is in Data Saver mode.",PrefetchNotEligibleExistingProxy:"The URL is not eligible to be prefetched, because in the default network context it is configured to use a proxy server.",PrefetchNotEligibleHostIsNonUnique:"The URL was not eligible to be prefetched because its host was not unique (e.g., a non publicly routable IP address or a hostname which is not registry-controlled), but the prefetch was required to be proxied.",PrefetchNotEligibleNonDefaultStoragePartition:"The URL was not eligible to be prefetched because it uses a non-default storage partition.",PrefetchNotEligibleSameSiteCrossOriginPrefetchRequiredProxy:"The URL was not eligible to be prefetched because the default network context cannot be configured to use the prefetch proxy for a same-site cross-origin prefetch request.",PrefetchNotEligibleSchemeIsNotHttps:"The URL was not eligible to be prefetched because its scheme was not https:.",PrefetchNotEligibleUserHasCookies:"The URL was not eligible to be prefetched because it was cross-site, but the user had cookies for that origin.",PrefetchNotEligibleUserHasServiceWorker:"The URL was not eligible to be prefetched because there was a registered service worker for that origin, which is currently not supported.",PrefetchNotUsedCookiesChanged:"The prefetch was not used because it was a cross-site prefetch, and cookies were added for that URL while the prefetch was ongoing, so the prefetched response is now out-of-date.",PrefetchProxyNotAvailable:"A network error was encountered when trying to set up a connection to the prefetching proxy.",PrefetchNotUsedProbeFailed:"The prefetch was blocked by your Internet Service Provider or network administrator.",PrefetchEvictedForNewerPrefetch:"The prefetch was discarded because the initiating page has too many prefetches ongoing, and this was one of the oldest.",PrefetchEvictedAfterCandidateRemoved:"The prefetch was discarded because no speculation rule in the initating page triggers a prefetch for this URL anymore.",PrefetchNotEligibleBatterySaverEnabled:"The prefetch was not performed because the Battery Saver setting was enabled.",PrefetchNotEligiblePreloadingDisabled:"The prefetch was not performed because speculative loading was disabled.",PrefetchEvictedAfterBrowsingDataRemoved:"The prefetch was discarded because browsing data was removed.",prerenderFinalStatusLowEndDevice:"The prerender was not performed because this device does not have enough total system memory to support prerendering.",prerenderFinalStatusInvalidSchemeRedirect:"The prerendering navigation failed because it redirected to a URL whose scheme was not http: or https:.",prerenderFinalStatusInvalidSchemeNavigation:"The URL was not eligible to be prerendered because its scheme was not http: or https:.",prerenderFinalStatusNavigationRequestBlockedByCsp:"The prerendering navigation was blocked by a Content Security Policy.",prerenderFinalStatusMojoBinderPolicy:"The prerendered page used a forbidden JavaScript API that is currently not supported. (Internal Mojo interface: {PH1})",prerenderFinalStatusRendererProcessCrashed:"The prerendered page crashed.",prerenderFinalStatusRendererProcessKilled:"The prerendered page was killed.",prerenderFinalStatusDownload:"The prerendered page attempted to initiate a download, which is currently not supported.",prerenderFinalStatusNavigationBadHttpStatus:"The prerendering navigation failed because of a non-2xx HTTP response status code.",prerenderFinalStatusClientCertRequested:"The prerendering navigation required a HTTP client certificate.",prerenderFinalStatusNavigationRequestNetworkError:"The prerendering navigation encountered a network error.",prerenderFinalStatusSslCertificateError:"The prerendering navigation failed because of an invalid SSL certificate.",prerenderFinalStatusLoginAuthRequested:"The prerendering navigation required HTTP authentication, which is currently not supported.",prerenderFinalStatusUaChangeRequiresReload:"Changing User Agent occurred in prerendering navigation.",prerenderFinalStatusBlockedByClient:"Some resource load was blocked.",prerenderFinalStatusAudioOutputDeviceRequested:"The prerendered page requested audio output, which is currently not supported.",prerenderFinalStatusMixedContent:"The prerendered page contained mixed content.",prerenderFinalStatusTriggerBackgrounded:"The initiating page was backgrounded, so the prerendered page was discarded.",prerenderFinalStatusMemoryLimitExceeded:"The prerender was not performed because the browser exceeded the prerendering memory limit.",prerenderFinalStatusDataSaverEnabled:"The prerender was not performed because the user requested that the browser use less data.",prerenderFinalStatusHasEffectiveUrl:"The initiating page cannot perform prerendering, because it has an effective URL that is different from its normal URL. (For example, the New Tab Page, or hosted apps.)",prerenderFinalStatusTimeoutBackgrounded:"The initiating page was backgrounded for a long time, so the prerendered page was discarded.",prerenderFinalStatusCrossSiteRedirectInInitialNavigation:"The prerendering navigation failed because the prerendered URL redirected to a cross-site URL.",prerenderFinalStatusCrossSiteNavigationInInitialNavigation:"The prerendering navigation failed because it targeted a cross-site URL.",prerenderFinalStatusSameSiteCrossOriginRedirectNotOptInInInitialNavigation:"The prerendering navigation failed because the prerendered URL redirected to a cross-origin same-site URL, but the destination response did not include the appropriate Supports-Loading-Mode header.",prerenderFinalStatusSameSiteCrossOriginNavigationNotOptInInInitialNavigation:"The prerendering navigation failed because it was to a cross-origin same-site URL, but the destination response did not include the appropriate Supports-Loading-Mode header.",prerenderFinalStatusActivationNavigationParameterMismatch:"The prerender was not used because during activation time, different navigation parameters (e.g., HTTP headers) were calculated than during the original prerendering navigation request.",prerenderFinalStatusPrimaryMainFrameRendererProcessCrashed:"The initiating page crashed.",prerenderFinalStatusPrimaryMainFrameRendererProcessKilled:"The initiating page was killed.",prerenderFinalStatusActivationFramePolicyNotCompatible:"The prerender was not used because the sandboxing flags or permissions policy of the initiating page was not compatible with those of the prerendering page.",prerenderFinalStatusPreloadingDisabled:"The prerender was not performed because the user disabled preloading in their browser settings.",prerenderFinalStatusBatterySaverEnabled:"The prerender was not performed because the user requested that the browser use less battery.",prerenderFinalStatusActivatedDuringMainFrameNavigation:"Prerendered page activated during initiating page's main frame navigation.",prerenderFinalStatusCrossSiteRedirectInMainFrameNavigation:"The prerendered page navigated to a URL which redirected to a cross-site URL.",prerenderFinalStatusCrossSiteNavigationInMainFrameNavigation:"The prerendered page navigated to a cross-site URL.",prerenderFinalStatusSameSiteCrossOriginRedirectNotOptInInMainFrameNavigation:"The prerendered page navigated to a URL which redirected to a cross-origin same-site URL, but the destination response did not include the appropriate Supports-Loading-Mode header.",prerenderFinalStatusSameSiteCrossOriginNavigationNotOptInInMainFrameNavigation:"The prerendered page navigated to a cross-origin same-site URL, but the destination response did not include the appropriate Supports-Loading-Mode header.",prerenderFinalStatusMemoryPressureOnTrigger:"The prerender was not performed because the browser was under critical memory pressure.",prerenderFinalStatusMemoryPressureAfterTriggered:"The prerendered page was unloaded because the browser came under critical memory pressure.",prerenderFinalStatusPrerenderingDisabledByDevTools:"The prerender was not performed because DevTools has been used to disable prerendering.",prerenderFinalStatusSpeculationRuleRemoved:'The prerendered page was unloaded because the initiating page removed the corresponding prerender rule from <script type="speculationrules">.',prerenderFinalStatusActivatedWithAuxiliaryBrowsingContexts:"The prerender was not used because during activation time, there were other windows with an active opener reference to the initiating page, which is currently not supported.",prerenderFinalStatusMaxNumOfRunningEagerPrerendersExceeded:'The prerender whose eagerness is "eager" was not performed because the initiating page already has too many prerenders ongoing. Remove other speculation rules with "eager" to enable further prerendering.',prerenderFinalStatusMaxNumOfRunningEmbedderPrerendersExceeded:"The browser-triggered prerender was not performed because the initiating page already has too many prerenders ongoing.",prerenderFinalStatusMaxNumOfRunningNonEagerPrerendersExceeded:'The old non-eager prerender (with a "moderate" or "conservative" eagerness and triggered by hovering or clicking links) was automatically canceled due to starting a new non-eager prerender. It can be retriggered by interacting with the link again.',prerenderFinalStatusPrerenderingUrlHasEffectiveUrl:"The prerendering navigation failed because it has an effective URL that is different from its normal URL. (For example, the New Tab Page, or hosted apps.)",prerenderFinalStatusRedirectedPrerenderingUrlHasEffectiveUrl:"The prerendering navigation failed because it redirected to an effective URL that is different from its normal URL. (For example, the New Tab Page, or hosted apps.)",prerenderFinalStatusActivationUrlHasEffectiveUrl:"The prerender was not used because during activation time, navigation has an effective URL that is different from its normal URL. (For example, the New Tab Page, or hosted apps.)",prerenderFinalStatusJavaScriptInterfaceAdded:"The prerendered page was unloaded because a new JavaScript interface has been injected by WebView.addJavascriptInterface().",prerenderFinalStatusJavaScriptInterfaceRemoved:"The prerendered page was unloaded because a JavaScript interface has been removed by WebView.removeJavascriptInterface().",prerenderFinalStatusAllPrerenderingCanceled:"All prerendered pages were unloaded by the browser for some reason (For example, WebViewCompat.addWebMessageListener() was called during prerendering.)",prerenderFinalStatusWindowClosed:"The prerendered page was unloaded because it called window.close().",prerenderFinalStatusBrowsingDataRemoved:"The prerendered page was unloaded because browsing data was removed.",statusNotTriggered:"Not triggered",statusPending:"Pending",statusRunning:"Running",statusReady:"Ready",statusSuccess:"Success",statusFailure:"Failure"},it=i.i18n.registerUIStrings("panels/application/preloading/components/PreloadingString.ts",tt),rt=i.i18n.getLazilyComputedLocalizedString.bind(void 0,it);i.i18n.getLocalizedString.bind(void 0,it),rt(tt.PrefetchFailedIneligibleRedirect),rt(tt.PrefetchFailedInvalidRedirect),rt(tt.PrefetchFailedMIMENotSupported),rt(tt.PrefetchFailedNetError),rt(tt.PrefetchFailedNon2XX),rt(tt.PrefetchIneligibleRetryAfter),rt(tt.PrefetchIsPrivacyDecoy),rt(tt.PrefetchIsStale),rt(tt.PrefetchNotEligibleBrowserContextOffTheRecord),rt(tt.PrefetchNotEligibleDataSaverEnabled),rt(tt.PrefetchNotEligibleExistingProxy),rt(tt.PrefetchNotEligibleHostIsNonUnique),rt(tt.PrefetchNotEligibleNonDefaultStoragePartition),rt(tt.PrefetchNotEligibleSameSiteCrossOriginPrefetchRequiredProxy),rt(tt.PrefetchNotEligibleSchemeIsNotHttps),rt(tt.PrefetchNotEligibleUserHasCookies),rt(tt.PrefetchNotEligibleUserHasServiceWorker),rt(tt.PrefetchNotUsedCookiesChanged),rt(tt.PrefetchProxyNotAvailable),rt(tt.PrefetchNotUsedProbeFailed),rt(tt.PrefetchEvictedForNewerPrefetch),rt(tt.PrefetchEvictedAfterCandidateRemoved),rt(tt.PrefetchNotEligibleBatterySaverEnabled),rt(tt.PrefetchNotEligiblePreloadingDisabled),rt(tt.PrefetchEvictedAfterBrowsingDataRemoved);function st(e,t){return!e.errorMessage&&e.tag?'"'+e.tag+'"':function(e,t){const i=void 0===e.url?t:e.url;return v.ResourceUtils.displayNameForURL(i)}(e,t)}var ot=`.empty-state{display:none}.empty{.empty-state{display:flex}devtools-split-view, .pretty-print-button, devtools-toolbar{display:none}}.preloading-toolbar{background-color:var(--sys-color-cdt-base-container);border-bottom:1px solid var(--sys-color-divider);button.toolbar-has-dropdown{margin:var(--sys-size-2) 0}}\n/*# sourceURL=${import.meta.resolve("./preloading/preloadingView.css")} */`,at=`:host{padding:2px 1px 2px 2px}.title{padding-left:8px}.subtitle{padding-left:8px}\n/*# sourceURL=${import.meta.resolve("./preloading/preloadingViewDropDown.css")} */`;const{html:nt,render:dt}=f,lt={filterFilterByRuleSet:"Filter by rule set",filterAllPreloads:"All speculative loads",noRuleSets:"no rule sets",validityValid:"Valid",validityInvalid:"Invalid",validitySomeRulesInvalid:"Some rules invalid",statusNotTriggered:"Not triggered",statusPending:"Pending",statusRunning:"Running",statusReady:"Ready",statusSuccess:"Success",statusFailure:"Failure",prettyPrint:"Pretty print",noRulesDetected:"No rules detected",rulesDescription:"On this page you will see the speculation rules used to prefetch and prerender page navigations.",noPrefetchAttempts:"No speculation detected",prefetchDescription:"On this page you will see details on speculative loads.",learnMore:"Learn more"},ct=i.i18n.registerUIStrings("panels/application/preloading/PreloadingView.ts",lt),ht=i.i18n.getLocalizedString.bind(void 0,ct),gt="https://permanently-removed.invalid/docs/devtools/application/debugging-speculation-rules",pt=Symbol("AllRuleSetRootId");class ut{static status(e){switch(e){case"NotTriggered":return ht(lt.statusNotTriggered);case"Pending":return ht(lt.statusPending);case"Running":return ht(lt.statusRunning);case"Ready":return ht(lt.statusReady);case"Success":return ht(lt.statusSuccess);case"Failure":return ht(lt.statusFailure);case"NotSupported":return i.i18n.lockedString("Internal error")}}static preloadsStatusSummary(e){return["NotTriggered","Pending","Running","Ready","Success","Failure"].filter(t=>(e?.get(t)||0)>0).map(t=>(e?.get(t)||0)+" "+this.status(t)).join(", ").toLocaleLowerCase()}static validity({errorType:e}){switch(e){case void 0:return ht(lt.validityValid);case"SourceIsNotJsonObject":case"InvalidRulesetLevelTag":return ht(lt.validityInvalid);case"InvalidRulesSkipped":return ht(lt.validitySomeRulesInvalid)}}static location(e){if(void 0!==e.backendNodeId)return i.i18n.lockedString("<script>");if(void 0!==e.url)return e.url;throw new Error("unreachable")}static processLocalId(e){const t=e.indexOf(".");return-1===t?e:e.slice(t+1)}}function mt(){return o.TargetManager.TargetManager.instance().scopeTarget()?.inspectedURL()||""}class wt extends c.Widget.VBox{model;focusedRuleSetId=null;warningsContainer;warningsView=new ft;hsplit;ruleSetGrid=new T.RuleSetGrid.RuleSetGrid;ruleSetDetails=new T.RuleSetDetailsView.RuleSetDetailsView;shouldPrettyPrint=e.Settings.Settings.instance().moduleSetting("auto-pretty-print-minified").get();constructor(e){super({useShadowDom:!0}),this.registerRequiredCSS(X,ot),this.model=e,o.TargetManager.TargetManager.instance().addScopeChangeListener(this.onScopeChange.bind(this)),o.TargetManager.TargetManager.instance().addModelListener(o.PreloadingModel.PreloadingModel,"ModelUpdated",this.render,this,{scoped:!0}),o.TargetManager.TargetManager.instance().addModelListener(o.PreloadingModel.PreloadingModel,"WarningsUpdated",this.warningsView.onWarningsUpdated,this.warningsView,{scoped:!0}),this.warningsContainer=document.createElement("div"),this.warningsContainer.classList.add("flex-none"),this.contentElement.insertBefore(this.warningsContainer,this.contentElement.firstChild),this.warningsView.show(this.warningsContainer),this.ruleSetGrid.addEventListener("select",this.onRuleSetsGridCellFocused.bind(this));dt(nt`
<div class="empty-state">
<span class="empty-state-header">${ht(lt.noRulesDetected)}</span>
<div class="empty-state-description">
<span>${ht(lt.rulesDescription)}</span>
${c.XLink.XLink.create(gt,ht(lt.learnMore),"x-link",void 0,"learn-more")}
</div>
</div>
<devtools-split-view sidebar-position="second">
<div slot="main">
${this.ruleSetGrid}
</div>
<div slot="sidebar" jslog=${u.section("rule-set-details")}>
${this.ruleSetDetails}
</div>
</devtools-split-view>
<div class="pretty-print-button" style="border-top: 1px solid var(--sys-color-divider)">
<devtools-button
.iconName=${"brackets"}
.toggledIconName=${"brackets"}
.toggled=${this.shouldPrettyPrint}
.toggleType=${"primary-toggle"}
.title=${ht(lt.prettyPrint)}
.variant=${"icon_toggle"}
.size=${"REGULAR"}
@click=${()=>{this.shouldPrettyPrint=!this.shouldPrettyPrint,this.updateRuleSetDetails()}}
jslog=${u.action().track({click:!0}).context("preloading-status-panel-pretty-print")}></devtools-button>
</div>`,this.contentElement,{host:this}),this.hsplit=this.contentElement.querySelector("devtools-split-view")}wasShown(){super.wasShown(),this.warningsView.wasShown(),this.render()}onScopeChange(){const e=o.TargetManager.TargetManager.instance().scopeTarget()?.model(o.PreloadingModel.PreloadingModel);s(e),this.model=e,this.render()}revealRuleSet(e){this.focusedRuleSetId=e.ruleSetId,this.render()}updateRuleSetDetails(){const e=this.focusedRuleSetId,t=null===e?null:this.model.getRuleSetById(e);this.ruleSetDetails.shouldPrettyPrint=this.shouldPrettyPrint,this.ruleSetDetails.data=t,null===t?this.hsplit.setAttribute("sidebar-visibility","hidden"):this.hsplit.removeAttribute("sidebar-visibility")}render(){const e=this.model.getPreloadCountsByRuleSetId(),t=this.model.getAllRuleSets().map(({id:t,value:i})=>{const r=e.get(t)||new Map;return{ruleSet:i,preloadsStatusSummary:ut.preloadsStatusSummary(r)}});this.ruleSetGrid.update({rows:t,pageURL:mt()}),this.contentElement.classList.toggle("empty",0===t.length),this.updateRuleSetDetails()}onRuleSetsGridCellFocused(e){const t=e;this.focusedRuleSetId=t.detail,this.render()}getInfobarContainerForTest(){return this.warningsView.contentElement}getRuleSetGridForTest(){return this.ruleSetGrid}getRuleSetDetailsForTest(){return this.ruleSetDetails}}class vt extends c.Widget.VBox{model;focusedPreloadingAttemptId=null;warningsContainer;warningsView=new ft;preloadingGrid=new T.PreloadingGrid.PreloadingGrid;preloadingDetails=new T.PreloadingDetailsReportView.PreloadingDetailsReportView;ruleSetSelector;constructor(e){super({jslog:`${u.pane("preloading-speculations")}`,useShadowDom:!0}),this.registerRequiredCSS(X,ot),this.model=e,o.TargetManager.TargetManager.instance().addScopeChangeListener(this.onScopeChange.bind(this)),o.TargetManager.TargetManager.instance().addModelListener(o.PreloadingModel.PreloadingModel,"ModelUpdated",this.render,this,{scoped:!0}),o.TargetManager.TargetManager.instance().addModelListener(o.PreloadingModel.PreloadingModel,"WarningsUpdated",this.warningsView.onWarningsUpdated,this.warningsView,{scoped:!0}),this.warningsContainer=document.createElement("div"),this.warningsContainer.classList.add("flex-none"),this.contentElement.insertBefore(this.warningsContainer,this.contentElement.firstChild),this.warningsView.show(this.warningsContainer);const t=new c.Widget.VBox,i=t.contentElement.createChild("devtools-toolbar","preloading-toolbar");i.setAttribute("jslog",`${u.toolbar()}`),this.ruleSetSelector=new bt(()=>this.render()),i.appendToolbarItem(this.ruleSetSelector.item()),this.preloadingGrid.addEventListener("select",this.onPreloadingGridCellFocused.bind(this)),dt(nt`
<div class="empty-state">
<span class="empty-state-header">${ht(lt.noPrefetchAttempts)}</span>
<div class="empty-state-description">
<span>${ht(lt.prefetchDescription)}</span>
${c.XLink.XLink.create(gt,ht(lt.learnMore),"x-link",void 0,"learn-more")}
</div>
</div>
<devtools-split-view sidebar-position="second">
<div slot="main" class="overflow-auto" style="height: 100%">
${this.preloadingGrid}
</div>
<div slot="sidebar" class="overflow-auto" style="height: 100%">
${this.preloadingDetails}
</div>
</devtools-split-view>`,t.contentElement,{host:this}),t.show(this.contentElement)}wasShown(){super.wasShown(),this.warningsView.wasShown(),this.render()}onScopeChange(){const e=o.TargetManager.TargetManager.instance().scopeTarget()?.model(o.PreloadingModel.PreloadingModel);s(e),this.model=e,this.render()}setFilter(e){let t=e.ruleSetId;null!==t&&void 0===this.model.getRuleSetById(t)&&(t=null),this.ruleSetSelector.select(t)}updatePreloadingDetails(){const e=this.focusedPreloadingAttemptId,t=null===e?null:this.model.getPreloadingAttemptById(e);if(null===t)this.preloadingDetails.data=null;else{const e=this.model.getPipeline(t),i=t.ruleSetIds.map(e=>this.model.getRuleSetById(e)).filter(e=>null!==e);this.preloadingDetails.data={pipeline:e,ruleSets:i,pageURL:mt()}}}render(){const e=this.ruleSetSelector.getSelected(),t=this.model.getRepresentativePreloadingAttempts(e).map(({id:e,value:t})=>{const i=t,r=this.model.getPipeline(i),s=i.ruleSetIds.flatMap(e=>{const t=this.model.getRuleSetById(e);return null===t?[]:[t]});return{id:e,pipeline:r,ruleSets:s}});this.preloadingGrid.update({rows:t,pageURL:mt()}),this.contentElement.classList.toggle("empty",0===t.length),this.updatePreloadingDetails()}onPreloadingGridCellFocused(e){const t=e;this.focusedPreloadingAttemptId=t.detail,this.render()}getRuleSetSelectorToolbarItemForTest(){return this.ruleSetSelector.item()}getPreloadingGridForTest(){return this.preloadingGrid}getPreloadingDetailsForTest(){return this.preloadingDetails}selectRuleSetOnFilterForTest(e){this.ruleSetSelector.select(e)}}class St extends c.Widget.VBox{model;warningsContainer;warningsView=new ft;usedPreloading=new T.UsedPreloadingView.UsedPreloadingView;constructor(e){super({jslog:`${u.pane("speculative-loads")}`,useShadowDom:!0}),this.registerRequiredCSS(X,ot),this.model=e,o.TargetManager.TargetManager.instance().addScopeChangeListener(this.onScopeChange.bind(this)),o.TargetManager.TargetManager.instance().addModelListener(o.PreloadingModel.PreloadingModel,"ModelUpdated",this.render,this,{scoped:!0}),o.TargetManager.TargetManager.instance().addModelListener(o.PreloadingModel.PreloadingModel,"WarningsUpdated",this.warningsView.onWarningsUpdated,this.warningsView,{scoped:!0}),this.warningsContainer=document.createElement("div"),this.warningsContainer.classList.add("flex-none"),this.contentElement.insertBefore(this.warningsContainer,this.contentElement.firstChild),this.warningsView.show(this.warningsContainer);const t=new c.Widget.VBox;t.contentElement.appendChild(this.usedPreloading),t.show(this.contentElement)}wasShown(){super.wasShown(),this.warningsView.wasShown(),this.render()}onScopeChange(){const e=o.TargetManager.TargetManager.instance().scopeTarget()?.model(o.PreloadingModel.PreloadingModel);s(e),this.model=e,this.render()}render(){this.usedPreloading.data={pageURL:o.TargetManager.TargetManager.instance().scopeTarget()?.inspectedURL()||"",previousAttempts:this.model.getRepresentativePreloadingAttemptsOfPreviousPage().map(({value:e})=>e),currentAttempts:this.model.getRepresentativePreloadingAttempts(null).map(({value:e})=>e)}}getUsedPreloadingForTest(){return this.usedPreloading}}class bt{model;onSelectionChanged=()=>{};toolbarItem;listModel;dropDown;constructor(e){const t=o.TargetManager.TargetManager.instance().scopeTarget()?.model(o.PreloadingModel.PreloadingModel);s(t),this.model=t,o.TargetManager.TargetManager.instance().addScopeChangeListener(this.onScopeChange.bind(this)),o.TargetManager.TargetManager.instance().addModelListener(o.PreloadingModel.PreloadingModel,"ModelUpdated",this.onModelUpdated,this,{scoped:!0}),this.listModel=new c.ListModel.ListModel,this.dropDown=new c.SoftDropDown.SoftDropDown(this.listModel,this),this.dropDown.setRowHeight(36),this.dropDown.setPlaceholderText(ht(lt.filterAllPreloads)),this.toolbarItem=new c.Toolbar.ToolbarItem(this.dropDown.element),this.toolbarItem.setTitle(ht(lt.filterFilterByRuleSet)),this.toolbarItem.element.classList.add("toolbar-has-dropdown"),this.toolbarItem.element.setAttribute("jslog",`${u.action("filter-by-rule-set").track({click:!0})}`),this.onModelUpdated(),this.onSelectionChanged=e}onScopeChange(){const e=o.TargetManager.TargetManager.instance().scopeTarget()?.model(o.PreloadingModel.PreloadingModel);s(e),this.model=e,this.onModelUpdated()}onModelUpdated(){const e=this.model.getAllRuleSets().map(({id:e})=>e),t=[pt,...e],i=this.dropDown.getSelectedItem(),r=null!==i&&t.includes(i)?i:pt;this.listModel.replaceAll(t),this.dropDown.selectItem(r),this.updateWidth(t)}updateWidth(e){const t=e.map(e=>this.titleFor(e).length),i=Math.max(...t),r=Math.min(6*i+16,315);this.dropDown.setWidth(r)}translateItemIdToRuleSetId(e){return e===pt?null:e}getSelected(){const e=this.dropDown.getSelectedItem();return null===e?null:this.translateItemIdToRuleSetId(e)}select(e){this.dropDown.selectItem(e)}item(){return this.toolbarItem}titleFor(e){const t=this.translateItemIdToRuleSetId(e);if(null===t)return ht(lt.filterAllPreloads);const r=this.model.getRuleSetById(t);return null===r?i.i18n.lockedString("Internal error"):st(r,mt())}subtitleFor(e){const t=this.translateItemIdToRuleSetId(e),i=this.model.getPreloadCountsByRuleSetId().get(t)||new Map;return ut.preloadsStatusSummary(i)||`(${ht(lt.noRuleSets)})`}createElementForItem(e){const t=document.createElement("div"),i=c.UIUtils.createShadowRootWithCoreStyles(t,{cssFile:at}),s=i.createChild("div","title");c.UIUtils.createTextChild(s,r.StringUtilities.trimEndWithMaxLength(this.titleFor(e),100));const o=i.createChild("div","subtitle");return c.UIUtils.createTextChild(o,this.subtitleFor(e)),t}isItemSelectable(e){return!0}itemSelected(e){this.onSelectionChanged()}highlightedItemChanged(e,t,i,r){}}class ft extends c.Widget.VBox{infobar=new T.PreloadingDisabledInfobar.PreloadingDisabledInfobar;constructor(){super(),this.registerRequiredCSS(X)}wasShown(){super.wasShown(),this.contentElement.append(this.infobar)}onWarningsUpdated(e){this.infobar.data=e.data}}var yt=Object.freeze({__proto__:null,PreloadingAttemptView:vt,PreloadingRuleSetView:wt,PreloadingSummaryView:St,PreloadingWarningsView:ft});const kt={speculativeLoads:"Speculative loads",rules:"Rules",speculations:"Speculations"},It=i.i18n.registerUIStrings("panels/application/PreloadingTreeElement.ts",kt),Ct=i.i18n.getLocalizedString.bind(void 0,It);class Tt extends F{#e;#w;view;#v;#S;constructor(e,t,i,r){super(e,r,!1,"speculative-loads"),this.#w=t,this.#v=i;const s=n.Icon.create("speculative-loads");this.setLeadingIcons([s]),this.#S=!1}get itemURL(){return this.#v}initialize(e){this.#e=e,this.#S&&!this.view&&this.onselect(!1)}onselect(e){return super.onselect(e),this.#S=!0,!!this.#e&&(this.view||(this.view=new this.#w(this.#e)),this.showView(this.view),!1)}}class Et extends O{#e;#b;#S;#f=null;#y=null;constructor(e){super(e,Ct(kt.speculativeLoads),"","","preloading");const t=n.Icon.create("speculative-loads");this.setLeadingIcons([t]),this.#S=!1}constructChildren(e){this.#f=new xt(e),this.#y=new Rt(e),this.appendChild(this.#f),this.appendChild(this.#y)}initialize(e){if(null===this.#f||null===this.#y)throw new Error("unreachable");this.#e=e,this.#f.initialize(e),this.#y.initialize(e),this.#S&&!this.#b&&this.onselect(!1)}onselect(e){return super.onselect(e),this.#S=!0,!!this.#e&&(this.#b||(this.#b=new St(this.#e)),this.showView(this.#b),!1)}expandAndRevealRuleSet(e){if(null===this.#f)throw new Error("unreachable");this.expand(),this.#f.revealRuleSet(e)}expandAndRevealAttempts(e){if(null===this.#y)throw new Error("unreachable");this.expand(),this.#y.revealAttempts(e)}}class xt extends Tt{constructor(e){super(e,wt,"preloading://rule-set",Ct(kt.rules))}revealRuleSet(e){this.select(),void 0!==this.view&&this.view?.revealRuleSet(e)}}class Rt extends Tt{constructor(e){super(e,vt,"preloading://attempt",Ct(kt.speculations))}revealAttempts(e){this.select(),this.view?.setFilter(e)}}var Mt=Object.freeze({__proto__:null,PreloadingRuleSetTreeElement:xt,PreloadingSummaryTreeElement:Et});const{widgetConfig:Lt}=c.Widget,Pt={noReportOrEndpoint:"No report or endpoint",reportingApiDescription:"On this page you will be able to inspect `Reporting API` reports and endpoints.",noReportSelected:"No report selected",clickToDisplayBody:"Click on any report to display its body"},At=i.i18n.registerUIStrings("panels/application/ReportingApiView.ts",Pt),Dt=i.i18n.getLocalizedString.bind(void 0,At),Bt=(e,t,i)=>{e.hasReports||e.hasEndpoints?y(k`
<style>${c.inspectorCommonStyles}</style>
<devtools-split-view sidebar-position="second" sidebar-initial-size="150" jslog=${u.pane("reporting-api")}>
${e.hasReports?k`
<devtools-split-view slot="main" sidebar-position="second" sidebar-initial-size="150">
<div slot="main">
<devtools-widget .widgetConfig=${Lt(m.ReportsGrid.ReportsGrid,{reports:e.reports,onReportSelected:e.onReportSelected})}></devtools-widget>
</div>
<div slot="sidebar" class="vbox" jslog=${u.pane("preview").track({resize:!0})}>
${e.focusedReport?k`
<devtools-widget .widgetConfig=${Lt(l.JSONView.SearchableJsonView,{jsonObject:e.focusedReport.body})}></devtools-widget>
`:k`
<devtools-widget .widgetConfig=${Lt(c.EmptyWidget.EmptyWidget,{header:Dt(Pt.noReportSelected),text:Dt(Pt.clickToDisplayBody)})}></devtools-widget>
`}
</div>
</devtools-split-view>
`:k`
<div slot="main">
<devtools-widget .widgetConfig=${Lt(m.ReportsGrid.ReportsGrid,{reports:e.reports,onReportSelected:e.onReportSelected})}></devtools-widget>
</div>
`}
<div slot="sidebar">
<devtools-widget .widgetConfig=${Lt(m.EndpointsGrid.EndpointsGrid,{endpoints:e.endpoints})}></devtools-widget>
</div>
</devtools-split-view>
`,i):y(k`
<devtools-widget .widgetConfig=${Lt(c.EmptyWidget.EmptyWidget,{header:Dt(Pt.noReportOrEndpoint),text:Dt(Pt.reportingApiDescription),link:"https://permanently-removed.invalid/docs/capabilities/web-apis/reporting-api"})} jslog=${u.pane("reporting-api-empty")}></devtools-widget>
`,i)};class Ft extends c.Widget.VBox{#k;#b;#I;#C=[];#T;constructor(e=Bt){super(),this.#b=e,this.#k=new Map,o.TargetManager.TargetManager.instance().observeModels(o.NetworkManager.NetworkManager,this),this.requestUpdate()}modelAdded(e){e.target()===o.TargetManager.TargetManager.instance().primaryPageTarget()&&(this.#I=e,this.#I.addEventListener(o.NetworkManager.Events.ReportingApiEndpointsChangedForOrigin,this.#E,this),this.#I.addEventListener(o.NetworkManager.Events.ReportingApiReportAdded,this.#x,this),this.#I.addEventListener(o.NetworkManager.Events.ReportingApiReportUpdated,this.#R,this),this.#I.enableReportingApi(),this.requestUpdate())}modelRemoved(e){this.#I&&this.#I===e&&(this.#I.removeEventListener(o.NetworkManager.Events.ReportingApiEndpointsChangedForOrigin,this.#E,this),this.#I.removeEventListener(o.NetworkManager.Events.ReportingApiReportAdded,this.#x,this),this.#I.removeEventListener(o.NetworkManager.Events.ReportingApiReportUpdated,this.#R,this),this.#I=void 0)}performUpdate(){const e={hasReports:this.#C.length>0,hasEndpoints:this.#k.size>0,endpoints:this.#k,reports:this.#C,focusedReport:this.#T,onReportSelected:this.#M.bind(this)};this.#b(e,void 0,this.element)}#E({data:e}){this.#k.set(e.origin,e.endpoints),this.requestUpdate()}#x({data:e}){this.#C.push(e),this.requestUpdate()}#R({data:e}){const t=this.#C.findIndex(t=>t.id===e.id);this.#C[t]=e,this.requestUpdate()}#M(e){const t=this.#C.find(t=>t.id===e);t&&(this.#T=t,this.requestUpdate())}}var Ot=Object.freeze({__proto__:null,DEFAULT_VIEW:Bt,ReportingApiView:Ft,i18nString:Dt});const Ut={reportingApi:"Reporting API"},Vt=i.i18n.registerUIStrings("panels/application/ReportingApiTreeElement.ts",Ut),Wt=i.i18n.getLocalizedString.bind(void 0,Vt);class Nt extends F{view;constructor(e){super(e,Wt(Ut.reportingApi),!1,"reporting-api");const t=n.Icon.create("document");this.setLeadingIcons([t])}get itemURL(){return"reportingApi://"}onselect(e){return super.onselect(e),this.view||(this.view=new Ft),this.showView(this.view),t.userMetrics.panelShown("reporting-api"),!1}}var jt=`.tree-outline{li.storage-group-list-item,\n li.storage-group-list-item:not(:has(devtools-checkbox)){padding:0 var(--sys-size-8) 0 var(--sys-size-3);&::before{display:none}&:hover .selection,\n &:active .selection::before{background-color:transparent}& + ol{padding-left:0}}li.storage-group-list-item:not(:first-child){margin-top:var(--sys-size-6)}}.icons-container devtools-icon.red-icon{color:var(--icon-error)}devtools-icon.navigator-file-tree-item{color:var(--icon-file-default)}devtools-icon.navigator-folder-tree-item{color:var(--icon-folder-primary)}devtools-icon.navigator-script-tree-item{color:var(--icon-file-script)}devtools-icon.navigator-stylesheet-tree-item{color:var(--icon-file-styles)}devtools-icon.navigator-image-tree-item,\ndevtools-icon.navigator-font-tree-item{color:var(--icon-file-image)}.window-closed .tree-element-title{text-decoration:line-through}\n/*# sourceURL=${import.meta.resolve("./resourcesSidebar.css")} */`,Ht=`.service-worker-cache-data-view .data-view-toolbar{position:relative;background-color:var(--sys-color-cdt-base-container);border-bottom:1px solid var(--sys-color-divider);padding-right:10px}.service-worker-cache-data-view .data-grid{flex:auto}.service-worker-cache-data-view .data-grid .data-container tr:nth-last-child(1) td{border:0}.service-worker-cache-data-view .data-grid .data-container tr:nth-last-child(2) td{border-bottom:1px solid var(--sys-color-divider)}.service-worker-cache-data-view .data-grid .data-container tr.selected{background-color:var(--sys-color-neutral-container);color:inherit}.service-worker-cache-data-view .data-grid:focus .data-container tr.selected{background-color:var(--sys-color-tonal-container);color:var(--sys-color-on-tonal-container)}.service-worker-cache-data-view .section,\n.service-worker-cache-data-view .section > .header,\n.service-worker-cache-data-view .section > .header .title{margin:0;min-height:inherit;line-height:inherit}.service-worker-cache-data-view .data-grid .data-container td .section .header .title{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.cache-preview-panel-resizer{background-color:var(--sys-color-surface1);height:4px;border-bottom:1px solid var(--sys-color-divider)}.cache-storage-summary-bar{flex:0 0 27px;line-height:27px;padding-left:5px;background-color:var(--sys-color-cdt-base-container);border-top:1px solid var(--sys-color-divider);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}\n/*# sourceURL=${import.meta.resolve("./serviceWorkerCacheViews.css")} */`;const _t={cache:"Cache",refresh:"Refresh",deleteSelected:"Delete Selected",filterByPath:"Filter by path",noCacheEntrySelected:"No cache entry selected",selectACacheEntryAboveToPreview:"Select a cache entry above to preview",name:"Name",timeCached:"Time Cached",varyHeaderWarning:"⚠️ Set ignoreVary to true when matching this entry",serviceWorkerCache:"`Service Worker` Cache",matchingEntriesS:"Matching entries: {PH1}",totalEntriesS:"Total entries: {PH1}",headers:"Headers",preview:"Preview"},Kt=i.i18n.registerUIStrings("panels/application/ServiceWorkerCacheViews.ts",_t),qt=i.i18n.getLocalizedString.bind(void 0,Kt);class zt extends c.View.SimpleView{model;entriesForTest;splitWidget;previewPanel;preview;cache;dataGrid;refreshThrottler;refreshButton;deleteSelectedButton;entryPathFilter;returnCount;summaryBarElement;loadingPromise;metadataView=new m.StorageMetadataView.StorageMetadataView;constructor(t,i){super({title:qt(_t.cache),viewId:"cache",jslog:`${u.pane("cache-storage-data")}`}),this.registerRequiredCSS(Ht),this.model=t,this.entriesForTest=null,this.element.classList.add("service-worker-cache-data-view"),this.element.classList.add("storage-view");const r=this.element.createChild("devtools-toolbar","data-view-toolbar");r.setAttribute("jslog",`${u.toolbar()}`),this.element.appendChild(this.metadataView),this.splitWidget=new c.SplitWidget.SplitWidget(!1,!1),this.splitWidget.show(this.element),this.previewPanel=new c.Widget.VBox;const s=this.previewPanel.element.createChild("div","cache-preview-panel-resizer");this.splitWidget.setMainWidget(this.previewPanel),this.splitWidget.installResizer(s),this.preview=null,this.cache=i;const a=this.model.target().model(o.StorageBucketsModel.StorageBucketsModel)?.getBucketByName(i.storageBucket.storageKey,i.storageBucket.name);this.metadataView.setShowOnlyBucket(!1),a?this.metadataView.setStorageBucket(a):i.storageKey&&this.metadataView.setStorageKey(i.storageKey),this.dataGrid=null,this.refreshThrottler=new e.Throttler.Throttler(300),this.refreshButton=new c.Toolbar.ToolbarButton(qt(_t.refresh),"refresh",void 0,"cache-storage.refresh"),this.refreshButton.addEventListener("Click",this.refreshButtonClicked,this),r.appendToolbarItem(this.refreshButton),this.deleteSelectedButton=new c.Toolbar.ToolbarButton(qt(_t.deleteSelected),"cross",void 0,"cache-storage.delete-selected"),this.deleteSelectedButton.addEventListener("Click",e=>{this.deleteButtonClicked(null)}),r.appendToolbarItem(this.deleteSelectedButton);const n=new c.Toolbar.ToolbarFilter(qt(_t.filterByPath),1);r.appendToolbarItem(n);const d=new e.Throttler.Throttler(300);this.entryPathFilter="",n.addEventListener("TextChanged",()=>{d.schedule(()=>(this.entryPathFilter=n.value(),this.updateData(!0)))}),this.returnCount=null,this.summaryBarElement=null,this.loadingPromise=null,this.update(i)}resetDataGrid(){this.dataGrid&&this.dataGrid.asWidget().detach(),this.dataGrid=this.createDataGrid();const e=this.dataGrid.asWidget();this.splitWidget.setSidebarWidget(e),e.setMinimumSize(0,250)}wasShown(){super.wasShown(),this.model.addEventListener("CacheStorageContentUpdated",this.cacheContentUpdated,this),this.updateData(!0)}willHide(){super.willHide(),this.model.removeEventListener("CacheStorageContentUpdated",this.cacheContentUpdated,this)}showPreview(e){e&&this.preview===e||(this.preview&&this.preview.detach(),e||(e=new c.EmptyWidget.EmptyWidget(qt(_t.noCacheEntrySelected),qt(_t.selectACacheEntryAboveToPreview))),this.preview=e,this.preview.show(this.previewPanel.element))}createDataGrid(){const e=[{id:"number",title:"#",sortable:!1,width:"3px"},{id:"name",title:qt(_t.name),weight:4,sortable:!0},{id:"response-type",title:i.i18n.lockedString("Response-Type"),weight:1,align:"right",sortable:!0},{id:"content-type",title:i.i18n.lockedString("Content-Type"),weight:1,sortable:!0},{id:"content-length",title:i.i18n.lockedString("Content-Length"),weight:1,align:"right",sortable:!0},{id:"response-time",title:qt(_t.timeCached),width:"12em",weight:1,align:"right",sortable:!0},{id:"vary-header",title:i.i18n.lockedString("Vary Header"),weight:1,sortable:!0}],t=new S.DataGrid.DataGridImpl({displayName:qt(_t.serviceWorkerCache),columns:e,deleteCallback:this.deleteButtonClicked.bind(this),refreshCallback:this.updateData.bind(this,!0)});return t.addEventListener("SortingChanged",this.sortingChanged,this),t.addEventListener("SelectedNode",e=>{this.previewCachedResponse(e.data.data)},this),t.setStriped(!0),t}sortingChanged(){if(!this.dataGrid)return;const e=this.dataGrid,t=e.isSortOrderAscending(),i=e.sortColumnId();let r;"name"===i?r=(e,t)=>e.name.localeCompare(t.name):"content-type"===i?r=(e,t)=>e.data.mimeType.localeCompare(t.data.mimeType):"content-length"===i?r=(e,t)=>e.data.resourceSize-t.data.resourceSize:"response-time"===i?r=(e,t)=>e.data.endTime-t.data.endTime:"response-type"===i?r=(e,t)=>e.responseType.localeCompare(t.responseType):"vary-header"===i&&(r=(e,t)=>e.varyHeader.localeCompare(t.varyHeader));const s=e.rootNode().children.slice();e.rootNode().removeChildren(),s.sort((e,i)=>{const s=r(e,i);return t?s:-s}),s.forEach(t=>e.rootNode().appendChild(t))}async deleteButtonClicked(e){(e||(e=this.dataGrid?.selectedNode??null))&&(await this.model.deleteCacheEntry(this.cache,e.data.url()),e.remove())}update(e=null){e&&(this.cache=e,this.resetDataGrid(),this.updateData(!0))}updateSummaryBar(){this.summaryBarElement||(this.summaryBarElement=this.element.createChild("div","cache-storage-summary-bar")),this.summaryBarElement.removeChildren();const e=this.summaryBarElement.createChild("span");this.entryPathFilter?e.textContent=qt(_t.matchingEntriesS,{PH1:String(this.returnCount)}):e.textContent=qt(_t.totalEntriesS,{PH1:String(this.returnCount)})}updateDataCallback(e,t){if(!this.dataGrid)return;const i=this.dataGrid.selectedNode?.data.url();this.refreshButton.setEnabled(!0),this.entriesForTest=e,this.returnCount=t,this.updateSummaryBar();const r=new Map,s=this.dataGrid.rootNode();for(const e of s.children)r.set(e.data.url,e);s.removeChildren();let o=null;for(let t=0;t<e.length;++t){const a=e[t];let n=r.get(a.requestURL);n&&n.data.responseTime===a.responseTime?n.data.number=t:(n=new $t(t,this.createRequest(a),a.responseType),n.selectable=!0),s.appendChild(n),a.requestURL===i&&(o=n)}o?o.revealAndSelect():this.showPreview(null),this.updatedForTest()}async updateData(e){if(!e&&this.loadingPromise)return await this.loadingPromise;if(this.refreshButton.setEnabled(!1),this.loadingPromise)return await this.loadingPromise;this.loadingPromise=new Promise(e=>{this.model.loadAllCacheData(this.cache,this.entryPathFilter,(t,i)=>{e({entries:t,returnCount:i})})});const{entries:t,returnCount:i}=await this.loadingPromise;this.updateDataCallback(t,i),this.loadingPromise=null}refreshButtonClicked(){this.updateData(!0)}cacheContentUpdated(e){const{cacheName:t,storageBucket:i}=e.data;this.cache.inBucket(i)&&this.cache.cacheName===t&&this.refreshThrottler.schedule(()=>Promise.resolve(this.updateData(!0)),"AsSoonAsPossible")}async previewCachedResponse(e){let t=Gt.get(e);t||(t=new Jt(e),Gt.set(e,t)),this.dataGrid?.selectedNode&&e===this.dataGrid.selectedNode.data&&this.showPreview(t)}createRequest(t){const i=o.NetworkRequest.NetworkRequest.createWithoutBackendRequest("cache-storage-"+t.requestURL,t.requestURL,r.DevToolsPath.EmptyUrlString,null);i.requestMethod=t.requestMethod,i.setRequestHeaders(t.requestHeaders),i.statusCode=t.responseStatus,i.statusText=t.responseStatusText,i.protocol=new e.ParsedURL.ParsedURL(t.requestURL).scheme,i.responseHeaders=t.responseHeaders,i.setRequestHeadersText(""),i.endTime=t.responseTime;let s=t.responseHeaders.find(e=>"content-type"===e.name.toLowerCase()),a="text/plain";if(s){const e=r.MimeType.parseContentType(s.value);e.mimeType&&(a=e.mimeType)}i.mimeType=a,s=t.responseHeaders.find(e=>"content-length"===e.name.toLowerCase()),i.resourceSize=s&&Number(s.value)||0;let n=e.ResourceType.ResourceType.fromMimeType(a);return n||(n=e.ResourceType.ResourceType.fromURL(t.requestURL)||e.ResourceType.resourceTypes.Other),i.setResourceType(n),i.setContentDataProvider(this.requestContent.bind(this,i)),i}async requestContent(e){const t=await this.cache.requestCachedResponse(e.url(),e.requestHeaders());return t?new E.ContentData.ContentData(t.body,!0,e.mimeType,e.charset()??void 0):{error:"No cached response found"}}updatedForTest(){}}const Gt=new WeakMap;class $t extends S.DataGrid.DataGridNode{number;name;request;responseType;varyHeader;constructor(t,i,s){super(i),this.number=t;const o=new e.ParsedURL.ParsedURL(i.url());o.isValid?this.name=r.StringUtilities.trimURL(i.url(),o.domain()):this.name=i.url(),this.request=i,this.responseType=s,this.varyHeader=i.responseHeaders.find(e=>"vary"===e.name.toLowerCase())?.value||""}createCell(e){const t=this.createTD(e);let i,r=this.request.url();"number"===e?i=String(this.number):"name"===e?i=this.name:"response-type"===e?i="opaqueResponse"===this.responseType?"opaque":"opaqueRedirect"===this.responseType?"opaqueredirect":this.responseType:"content-type"===e?i=this.request.mimeType:"content-length"===e?i=(0|this.request.resourceSize).toLocaleString("en-US"):"response-time"===e?i=new Date(1e3*this.request.endTime).toLocaleString():"vary-header"===e&&(i=this.varyHeader,this.varyHeader&&(r=qt(_t.varyHeaderWarning)));const s=t.parentElement;let o;return s&&this.dataGrid&&(o=this.dataGrid.elementToDataGridNode.get(s)),S.DataGrid.DataGridImpl.setElementText(t,i||"",!0,o),c.Tooltip.Tooltip.install(t,r),t}}class Jt extends c.Widget.VBox{tabbedPane;resourceViewTabSetting;constructor(t){super(),this.tabbedPane=new c.TabbedPane.TabbedPane,this.tabbedPane.element.setAttribute("jslog",`${u.section("network-item-preview")}`),this.tabbedPane.addEventListener(c.TabbedPane.Events.TabSelected,this.tabSelected,this),this.resourceViewTabSetting=e.Settings.Settings.instance().createSetting("cache-storage-view-tab","preview"),this.tabbedPane.appendTab("headers",qt(_t.headers),d.LegacyWrapper.legacyWrapper(c.Widget.VBox,new x.RequestHeadersView.RequestHeadersView(t))),this.tabbedPane.appendTab("preview",qt(_t.preview),new R.RequestPreviewView.RequestPreviewView(t)),this.tabbedPane.show(this.element)}wasShown(){super.wasShown(),this.selectTab()}selectTab(e){e||(e=this.resourceViewTabSetting.get()),e&&!this.tabbedPane.selectTab(e)&&this.tabbedPane.selectTab("headers")}tabSelected(e){e.data.isUserGesture&&this.resourceViewTabSetting.set(e.data.tabId)}}var Xt=Object.freeze({__proto__:null,DataGridNode:$t,RequestView:Jt,ServiceWorkerCacheView:zt});const Qt={cacheStorage:"Cache storage",noCacheStorage:"No cache storage detected",cacheStorageDescription:"On this page you can view and delete cache data.",refreshCaches:"Refresh Caches",delete:"Delete"},Yt=i.i18n.registerUIStrings("panels/application/ServiceWorkerCacheTreeElement.ts",Qt),Zt=i.i18n.getLocalizedString.bind(void 0,Yt);class ei extends O{swCacheModels;swCacheTreeElements;storageBucket;constructor(e,t){super(e,Zt(Qt.cacheStorage),Zt(Qt.noCacheStorage),Zt(Qt.cacheStorageDescription),"cache-storage");const i=n.Icon.create("database");this.setLink("https://docs.microsoft.com/en-us/microsoft-edge/devtools-guide-chromium/storage/cache"),this.setLeadingIcons([i]),this.swCacheModels=new Set,this.swCacheTreeElements=new Set,this.storageBucket=t}initialize(){this.swCacheModels.clear(),this.swCacheTreeElements.clear(),o.TargetManager.TargetManager.instance().observeModels(o.ServiceWorkerCacheModel.ServiceWorkerCacheModel,{modelAdded:e=>this.serviceWorkerCacheModelAdded(e),modelRemoved:e=>this.serviceWorkerCacheModelRemoved(e)})}onattach(){super.onattach(),this.listItemElement.addEventListener("contextmenu",this.handleContextMenuEvent.bind(this),!0)}handleContextMenuEvent(e){const t=new c.ContextMenu.ContextMenu(e);t.defaultSection().appendItem(Zt(Qt.refreshCaches),this.refreshCaches.bind(this),{jslogContext:"refresh-caches"}),t.show()}refreshCaches(){for(const e of this.swCacheModels)e.refreshCacheNames()}serviceWorkerCacheModelAdded(e){e.enable(),this.swCacheModels.add(e);for(const t of e.caches())this.addCache(e,t);e.addEventListener("CacheAdded",this.cacheAdded,this),e.addEventListener("CacheRemoved",this.cacheRemoved,this)}serviceWorkerCacheModelRemoved(e){for(const t of e.caches())this.removeCache(e,t);e.removeEventListener("CacheAdded",this.cacheAdded,this),e.removeEventListener("CacheRemoved",this.cacheRemoved,this),this.swCacheModels.delete(e)}cacheAdded(e){const{model:t,cache:i}=e.data;this.addCache(t,i)}cacheInTree(e){return!this.storageBucket||e.inBucket(this.storageBucket)}addCache(e,t){if(this.cacheInTree(t)){const i=new ti(this.resourcesPanel,e,t,void 0===this.storageBucket);this.swCacheTreeElements.add(i),this.appendChild(i)}}cacheRemoved(e){const{model:t,cache:i}=e.data;this.cacheInTree(i)&&this.removeCache(t,i)}removeCache(e,t){const i=this.cacheTreeElement(e,t);i&&(this.removeChild(i),this.swCacheTreeElements.delete(i),this.setExpandable(this.childCount()>0))}cacheTreeElement(e,t){for(const i of this.swCacheTreeElements)if(i.hasModelAndCache(e,t))return i;return null}}class ti extends F{model;cache;view;constructor(e,t,i,r){let s;s=r?i.cacheName+" - "+i.storageKey:i.cacheName,super(e,s,!1,"cache-storage-instance"),this.model=t,this.cache=i,this.view=null;const o=n.Icon.create("table");this.setLeadingIcons([o])}get itemURL(){return"cache://"+this.cache.cacheId}onattach(){super.onattach(),this.listItemElement.addEventListener("contextmenu",this.handleContextMenuEvent.bind(this),!0)}handleContextMenuEvent(e){const t=new c.ContextMenu.ContextMenu(e);t.defaultSection().appendItem(Zt(Qt.delete),this.clearCache.bind(this),{jslogContext:"delete"}),t.show()}clearCache(){this.model.deleteCache(this.cache)}update(e){this.cache=e,this.view&&this.view.update(e)}onselect(e){return super.onselect(e),this.view||(this.view=new zt(this.model,this.cache)),this.showView(this.view),t.userMetrics.panelShown("service-worker-cache"),!1}hasModelAndCache(e,t){return this.cache.equals(t)&&this.model===e}}var ii=`.service-worker-version{display:flex;align-items:center;flex-wrap:wrap;devtools-button{margin-left:var(--sys-size-3)}}.service-worker-version-stack{position:relative}.service-worker-version-stack-bar{position:absolute;top:10px;bottom:20px;left:4px;content:"";border-left:1px solid var(--sys-color-divider);z-index:0}.service-worker-version:not(:last-child){margin-bottom:7px}.service-worker-version-string{flex-shrink:0}.service-worker-active-circle,\n.service-worker-redundant-circle,\n.service-worker-waiting-circle,\n.service-worker-installing-circle{position:relative;display:inline-block;width:10px;height:10px;z-index:10;margin-right:5px;border-radius:50%;border:1px solid var(--sys-color-token-subtle);align-self:center;flex-shrink:0}.service-worker-active-circle{background-color:var(--sys-color-green-bright)}.service-worker-waiting-circle{background-color:var(--sys-color-yellow-bright)}.service-worker-installing-circle{background-color:var(--sys-color-cdt-base-container)}.service-worker-redundant-circle{background-color:var(--sys-color-neutral-bright)}.service-worker-subtitle{padding-left:14px;line-height:14px;color:var(--sys-color-state-disabled)}.link{margin-left:7px}.service-worker-editor-with-button{align-items:baseline;display:flex}.service-worker-notification-editor{border:1px solid var(--sys-color-divider);display:flex;flex:auto;margin-right:4px;max-width:400px;min-width:80px}.report-field-value{white-space:normal}.report-field-value-filename,\n.service-worker-client-string{max-width:400px;overflow:hidden;text-overflow:ellipsis}.report-field-value-filename{display:contents}.report-field-value-subtitle{overflow:hidden;text-overflow:ellipsis}.service-worker-client{display:flex}.service-worker-client-focus-link{flex:none;margin-left:2px;align-self:center}.service-worker-notification-editor.source-code{padding:4px}.service-worker-list{background-color:var(--sys-color-cdt-base-container);overflow:auto}.service-workers-this-origin{flex-shrink:0;flex-grow:0}.devtools-link{line-height:14px;align-self:center;padding:1px}button.link{padding:1px}button.link:focus-visible{background-color:inherit}\n/*# sourceURL=${import.meta.resolve("./serviceWorkersView.css")} */`,ri=`.resource-service-worker-update-view{display:block;margin:6px;color:var(--sys-color-on-surface-subtle);overflow:auto}.service-worker-update-timing-table{border:1px solid var(--sys-color-divider);border-spacing:0;padding-left:10px;padding-right:10px;line-height:initial;table-layout:auto;overflow:hidden}.service-worker-update-timing-row{position:relative;height:20px;overflow:hidden;min-width:80px}.service-worker-update-timing-bar{position:absolute;min-width:1px;top:0;bottom:0}.service-worker-update-timing-bar-clickable::before{user-select:none;mask-image:var(--image-file-triangle-right);float:left;width:14px;height:14px;margin-right:2px;content:"";position:relative;background-color:var(--icon-default);transition:transform 200ms}.service-worker-update-timing-bar-clickable{position:relative;left:-12px}.service-worker-update-timing-bar-clickable:focus-visible{background-color:var(--sys-color-state-focus-highlight)}.service-worker-update-timing-bar-clickable[aria-checked="true"]::before{transform:rotate(90deg)}.service-worker-update-timing-bar-details-collapsed{display:none}.service-worker-update-timing-bar-details-expanded{display:table-row}.service-worker-update-timing-bar-details:focus-visible{background-color:var(--sys-color-state-focus-highlight)}.service-worker-update-timing-bar.activate{top:5px;height:10px;background-color:var(--sys-color-yellow-bright)}.service-worker-update-timing-bar.wait{top:5px;height:10px;background-color:var(--sys-color-purple-bright)}.service-worker-update-timing-bar.install{top:5px;height:10px;background-color:var(--sys-color-cyan-bright)}.service-worker-update-timing-table > tr > td{padding:4px 0;padding-right:10px}table.service-worker-update-timing-table > tr.service-worker-update-timing-table-header > td{border-top:5px solid transparent;color:var(--sys-color-token-subtle)}table.service-worker-update-timing-table > tr.service-worker-update-timing-bar-details > td:first-child{padding-left:12px}table.service-worker-update-timing-table > tr.service-worker-update-timeline > td:first-child{padding-left:12px}.service-worker-update-timing-bar-clickable::before{width:16px;height:16px;margin-right:0;top:0}\n/*# sourceURL=${import.meta.resolve("./serviceWorkerUpdateCycleView.css")} */`;const si={version:"Version",updateActivity:"Update Activity",timeline:"Timeline",startTimeS:"Start time: {PH1}",endTimeS:"End time: {PH1}"},oi=i.i18n.registerUIStrings("panels/application/ServiceWorkerUpdateCycleView.ts",si),ai=i.i18n.getLocalizedString.bind(void 0,oi);class ni{registration;rows;selectedRowIndex;tableElement;constructor(e){this.registration=e,this.rows=[],this.selectedRowIndex=-1,this.tableElement=document.createElement("table"),this.createTimingTable()}calculateServiceWorkerUpdateRanges(){function e(e,t){t.start<Number.MAX_VALUE&&t.start<=t.end&&e.push(t)}function t(t){let i=t.currentState,r=0,s=0,o=0,a=0;const n=i.status;if("new"===n)return[];for(;i;)"activated"===i.status?r=i.lastUpdatedTimestamp:"activating"===i.status?(0===r&&(r=i.lastUpdatedTimestamp),s=i.lastUpdatedTimestamp):"installed"===i.status?o=i.lastUpdatedTimestamp:"installing"===i.status&&(0===o&&(o=i.lastUpdatedTimestamp),a=i.lastUpdatedTimestamp),i=i.previousState;const d=[];return function(t,i,r,s,o,a,n){e(t,{id:i,phase:"Install",start:r,end:s}),"activating"!==n&&"activated"!==n&&"redundant"!==n||(e(t,{id:i,phase:"Wait",start:s,end:o}),e(t,{id:i,phase:"Activate",start:o,end:a}))}(d,t.id,a,o,s,r,n),d}const i=this.registration.versionsByMode(),r=["active","waiting","installing","redundant"];for(const e of r){const r=i.get(e);if(r){return t(r)}}return[]}createTimingTable(){this.tableElement.classList.add("service-worker-update-timing-table"),this.tableElement.setAttribute("jslog",`${u.tree("update-timing-table")}`);const e=this.calculateServiceWorkerUpdateRanges();this.updateTimingTable(e)}createTimingTableHead(){const e=this.tableElement.createChild("tr","service-worker-update-timing-table-header");c.UIUtils.createTextChild(e.createChild("td"),ai(si.version)),c.UIUtils.createTextChild(e.createChild("td"),ai(si.updateActivity)),c.UIUtils.createTextChild(e.createChild("td"),ai(si.timeline))}removeRows(){const e=this.tableElement.getElementsByTagName("tr");for(;e[0];)e[0].parentNode&&e[0].parentNode.removeChild(e[0]);this.rows=[]}updateTimingTable(e){this.selectedRowIndex=-1,this.removeRows(),this.createTimingTableHead();const t=e;if(0===t.length)return;const i=t.map(e=>e.start),r=t.map(e=>e.end),s=i.reduce((e,t)=>Math.min(e,t)),o=r.reduce((e,t)=>Math.max(e,t)),a=100/(o-s);for(const e of t){const t=e.phase,i=a*(e.start-s),r=a*(o-e.end),n=this.tableElement.createChild("tr","service-worker-update-timeline");n.setAttribute("jslog",`${u.treeItem("update-timeline").track({click:!0,keydown:"ArrowLeft|ArrowRight|ArrowUp|ArrowDown|Enter|Space"})}`),this.rows.push(n);const d=n.createChild("td");c.UIUtils.createTextChild(d,"#"+e.id),d.classList.add("service-worker-update-timing-bar-clickable"),d.setAttribute("tabindex","0"),d.setAttribute("role","switch"),d.addEventListener("focus",e=>{this.onFocus(e)}),d.setAttribute("jslog",`${u.expand("timing-info").track({click:!0})}`),c.ARIAUtils.setChecked(d,!1);const l=n.createChild("td");c.UIUtils.createTextChild(l,t);const h=n.createChild("td").createChild("div","service-worker-update-timing-row").createChild("span","service-worker-update-timing-bar "+t.toLowerCase());h.style.left=i+"%",h.style.right=r+"%",h.textContent="",this.constructUpdateDetails(n,e)}}constructUpdateDetails(e,t){const i=this.tableElement.createChild("tr","service-worker-update-timing-bar-details");i.classList.add("service-worker-update-timing-bar-details-collapsed");const r=i.createChild("td");r.colSpan=3;const s=new Date(t.start).toISOString();c.UIUtils.createTextChild(r.createChild("span"),ai(si.startTimeS,{PH1:s})),i.tabIndex=0;const o=this.tableElement.createChild("tr","service-worker-update-timing-bar-details");o.classList.add("service-worker-update-timing-bar-details-collapsed");const a=o.createChild("td");a.colSpan=3;const n=new Date(t.end).toISOString();c.UIUtils.createTextChild(a.createChild("span"),ai(si.endTimeS,{PH1:n})),o.tabIndex=0,e.addEventListener("keydown",e=>{this.onKeydown(e,i,o)}),e.addEventListener("click",e=>{this.onClick(e,i,o)})}toggle(e,t,i,r){i.classList.contains("service-worker-update-timing-bar-clickable")&&(e.classList.toggle("service-worker-update-timing-bar-details-collapsed"),e.classList.toggle("service-worker-update-timing-bar-details-expanded"),t.classList.toggle("service-worker-update-timing-bar-details-collapsed"),t.classList.toggle("service-worker-update-timing-bar-details-expanded"),c.ARIAUtils.setChecked(i,!r))}onFocus(e){const t=e.target;if(!t)return;const i=t.parentElement;i&&(this.selectedRowIndex=this.rows.indexOf(i))}onKeydown(e,t,i){if(!e.target)return;const r=e.target,s=e,o="true"===r.getAttribute("aria-checked");return"Enter"===s.key||" "===s.key||!o&&"ArrowRight"===s.key||o&&"ArrowLeft"===s.key?(this.toggle(t,i,r,o),void e.preventDefault()):("ArrowDown"===s.key&&(this.selectedRowIndex>=0?this.selectNextRow():this.selectFirstRow(),e.preventDefault()),void("ArrowUp"===s.key&&(this.selectedRowIndex>=0?this.selectPreviousRow():this.selectLastRow(),e.preventDefault())))}focusRow(e){e.cells[0].focus()}blurRow(e){e.cells[0].blur()}selectFirstRow(){0!==this.rows.length&&(this.selectedRowIndex=0,this.focusRow(this.rows[0]))}selectLastRow(){0!==this.rows.length&&(this.selectedRowIndex=this.rows.length-1,this.focusRow(this.rows[this.selectedRowIndex]))}selectNextRow(){if(0===this.rows.length)return;const e=this.selectedRowIndex;this.selectedRowIndex++,this.selectedRowIndex>=this.rows.length&&(this.selectedRowIndex=0),this.blurRow(this.rows[e]),this.focusRow(this.rows[this.selectedRowIndex])}selectPreviousRow(){if(0===this.rows.length)return;const e=this.selectedRowIndex;this.selectedRowIndex--,this.selectedRowIndex<0&&(this.selectedRowIndex=this.rows.length-1),this.blurRow(this.rows[e]),this.focusRow(this.rows[this.selectedRowIndex])}onClick(e,t,i){const r=e.target;if(!r)return;const s="true"===r.getAttribute("aria-checked");this.toggle(t,i,r,s),e.preventDefault()}refresh(){const e=this.calculateServiceWorkerUpdateRanges();this.updateTimingTable(e)}}var di=Object.freeze({__proto__:null,ServiceWorkerUpdateCycleView:ni});const li={serviceWorkersFromOtherOrigins:"Service workers from other origins",updateOnReload:"Update on reload",onPageReloadForceTheService:"On page reload, force the `service worker` to update, and activate it",bypassForNetwork:"Bypass for network",bypassTheServiceWorkerAndLoad:"Bypass the `service worker` and load resources from the network",serviceWorkerForS:"`Service worker` for {PH1}",testPushMessageFromDevtools:"Test push message from DevTools.",networkRequests:"Network requests",update:"Update",unregisterServiceWorker:"Unregister service worker",unregister:"Unregister",source:"Source",status:"Status",clients:"Clients",pushString:"Push",pushData:"Push data",syncString:"Sync",syncTag:"Sync tag",periodicSync:"Periodic sync",periodicSyncTag:"Periodic sync tag",sRegistrationErrors:"{PH1} registration errors",receivedS:"Received {PH1}",routers:"Routers",sDeleted:"{PH1} - deleted",sActivatedAndIsS:"#{PH1} activated and is {PH2}",stopString:"Stop",startString:"Start",sIsRedundant:"#{PH1} is redundant",sWaitingToActivate:"#{PH1} waiting to activate",sTryingToInstall:"#{PH1} trying to install",updateCycle:"Update Cycle",workerS:"Worker: {PH1}",focus:"focus",seeAllRegistrations:"See all registrations"},ci=i.i18n.registerUIStrings("panels/application/ServiceWorkersView.ts",li),hi=i.i18n.getLocalizedString.bind(void 0,ci);let gi=!1;class pi extends c.Widget.VBox{currentWorkersView;toolbar;sections;manager;securityOriginManager;sectionToRegistration;eventListeners;constructor(){super({jslog:`${u.pane("service-workers")}`,useShadowDom:!0}),this.registerRequiredCSS(ii),this.currentWorkersView=new c.ReportView.ReportView(i.i18n.lockedString("Service workers")),this.currentWorkersView.setBodyScrollable(!1),this.contentElement.classList.add("service-worker-list"),this.currentWorkersView.show(this.contentElement),this.currentWorkersView.element.classList.add("service-workers-this-origin"),this.currentWorkersView.element.setAttribute("jslog",`${u.section("this-origin")}`),this.toolbar=this.currentWorkersView.createToolbar(),this.sections=new Map,this.manager=null,this.securityOriginManager=null,this.sectionToRegistration=new WeakMap;const t=this.contentElement.createChild("div","service-workers-other-origin");t.setAttribute("jslog",`${u.section("other-origin")}`);const r=new c.ReportView.ReportView;r.setHeaderVisible(!1),r.show(t);const s=r.appendSection(hi(li.serviceWorkersFromOtherOrigins)).appendRow(),a=c.Fragment.html`<a class="devtools-link" role="link" tabindex="0" href="chrome://serviceworker-internals" target="_blank" style="display: inline; cursor: pointer;">${hi(li.seeAllRegistrations)}</a>`;a.setAttribute("jslog",`${u.link("view-all").track({click:!0})}`),self.onInvokeElement(a,e=>{const t=o.TargetManager.TargetManager.instance().rootTarget();t&&t.targetAgent().invoke_createTarget({url:"chrome://serviceworker-internals?devtools"}),e.consume(!0)}),s.appendChild(a),this.toolbar.appendToolbarItem(L.ThrottlingManager.throttlingManager().createOfflineToolbarCheckbox());const n=e.Settings.Settings.instance().createSetting("service-worker-update-on-reload",!1);n.setTitle(hi(li.updateOnReload));const d=new c.Toolbar.ToolbarSettingCheckbox(n,hi(li.onPageReloadForceTheService));this.toolbar.appendToolbarItem(d);const l=e.Settings.Settings.instance().createSetting("bypass-service-worker",!1);l.setTitle(hi(li.bypassForNetwork));const h=new c.Toolbar.ToolbarSettingCheckbox(l,hi(li.bypassTheServiceWorkerAndLoad));this.toolbar.appendToolbarItem(h),this.eventListeners=new Map,o.TargetManager.TargetManager.instance().observeModels(o.ServiceWorkerManager.ServiceWorkerManager,this),this.updateListVisibility()}modelAdded(e){if(e.target()===o.TargetManager.TargetManager.instance().primaryPageTarget()){this.manager=e,this.securityOriginManager=e.target().model(o.SecurityOriginManager.SecurityOriginManager);for(const e of this.manager.registrations().values())this.updateRegistration(e);this.eventListeners.set(e,[this.manager.addEventListener("RegistrationUpdated",this.registrationUpdated,this),this.manager.addEventListener("RegistrationDeleted",this.registrationDeleted,this),this.securityOriginManager.addEventListener(o.SecurityOriginManager.Events.SecurityOriginAdded,this.updateSectionVisibility,this),this.securityOriginManager.addEventListener(o.SecurityOriginManager.Events.SecurityOriginRemoved,this.updateSectionVisibility,this)])}}modelRemoved(t){this.manager&&this.manager===t&&(e.EventTarget.removeEventListeners(this.eventListeners.get(t)||[]),this.eventListeners.delete(t),this.manager=null,this.securityOriginManager=null)}getTimeStamp(e){const t=e.versionsByMode();let i=0;const r=t.get("active"),s=t.get("installing"),o=t.get("waiting"),a=t.get("redundant");return r?i=r.scriptResponseTime:o?i=o.scriptResponseTime:s?i=s.scriptResponseTime:a&&(i=a.scriptResponseTime),i||0}updateSectionVisibility(){let e=!1;const t=[];for(const i of this.sections.values()){const r=this.getReportViewForOrigin(i.registration.securityOrigin);e=e||r===this.currentWorkersView,i.section.parentWidget()!==r&&t.push(i)}for(const e of t){const t=e.registration;this.removeRegistrationFromList(t),this.updateRegistration(t,!0)}this.currentWorkersView.sortSections((e,t)=>{const i=this.sectionToRegistration.get(e),r=this.sectionToRegistration.get(t),s=i?this.getTimeStamp(i):0;return(r?this.getTimeStamp(r):0)-s});for(const e of this.sections.values())e.section.parentWidget()===this.currentWorkersView||this.isRegistrationVisible(e.registration)?e.section.showWidget():e.section.hideWidget();this.contentElement.classList.toggle("service-worker-has-current",Boolean(e)),this.updateListVisibility()}registrationUpdated(e){this.updateRegistration(e.data),this.gcRegistrations()}gcRegistrations(){if(!this.manager||!this.securityOriginManager)return;let e=!1;const t=new Set(this.securityOriginManager.securityOrigins());for(const i of this.manager.registrations().values())if((t.has(i.securityOrigin)||this.isRegistrationVisible(i))&&!i.canBeRemoved()){e=!0;break}if(e)for(const e of this.manager.registrations().values()){!(t.has(e.securityOrigin)||this.isRegistrationVisible(e))&&e.canBeRemoved()&&this.removeRegistrationFromList(e)}}getReportViewForOrigin(e){return this.securityOriginManager&&(this.securityOriginManager.securityOrigins().includes(e)||this.securityOriginManager.unreachableMainSecurityOrigin()===e)?this.currentWorkersView:null}updateRegistration(e,t){let i=this.sections.get(e);if(!i){const t=e.scopeURL,r=this.getReportViewForOrigin(e.securityOrigin);if(!r)return;const s=r.appendSection(t);s.setUiGroupTitle(hi(li.serviceWorkerForS,{PH1:t})),this.sectionToRegistration.set(s,e),i=new ui(this.manager,s,e),this.sections.set(e,i)}t||(this.updateSectionVisibility(),i.scheduleUpdate())}registrationDeleted(e){this.removeRegistrationFromList(e.data)}removeRegistrationFromList(e){const t=this.sections.get(e);t&&t.section.detach(),this.sections.delete(e),this.updateSectionVisibility()}isRegistrationVisible(e){return!e.scopeURL}updateListVisibility(){this.contentElement.classList.toggle("service-worker-list-empty",0===this.sections.size)}}class ui{manager;section;registration;fingerprint;pushNotificationDataSetting;syncTagNameSetting;periodicSyncTagNameSetting;updateCycleView;routerView;networkRequests;updateButton;deleteButton;sourceField;statusField;clientsField;clientInfoCache;throttler;updateCycleField;routerField;constructor(t,i,r){this.manager=t,this.section=i,this.registration=r,this.fingerprint=null,this.pushNotificationDataSetting=e.Settings.Settings.instance().createLocalSetting("push-data",hi(li.testPushMessageFromDevtools)),this.syncTagNameSetting=e.Settings.Settings.instance().createLocalSetting("sync-tag-name","test-tag-from-devtools"),this.periodicSyncTagNameSetting=e.Settings.Settings.instance().createLocalSetting("periodic-sync-tag-name","test-tag-from-devtools"),this.updateCycleView=new ni(r),this.routerView=new m.ServiceWorkerRouterView.ServiceWorkerRouterView,this.networkRequests=new h.Button.Button,this.networkRequests.data={variant:"text",title:hi(li.networkRequests),jslogContext:"show-network-requests"},this.networkRequests.textContent=hi(li.networkRequests),this.networkRequests.addEventListener("click",this.networkRequestsClicked.bind(this)),this.section.appendButtonToHeader(this.networkRequests),this.updateButton=c.UIUtils.createTextButton(hi(li.update),this.updateButtonClicked.bind(this),{variant:"text",title:hi(li.update),jslogContext:"update"}),this.section.appendButtonToHeader(this.updateButton),this.deleteButton=c.UIUtils.createTextButton(hi(li.unregister),this.unregisterButtonClicked.bind(this),{variant:"text",title:hi(li.unregisterServiceWorker),jslogContext:"unregister"}),this.section.appendButtonToHeader(this.deleteButton),this.sourceField=this.wrapWidget(this.section.appendField(hi(li.source))),this.statusField=this.wrapWidget(this.section.appendField(hi(li.status))),this.clientsField=this.wrapWidget(this.section.appendField(hi(li.clients))),this.createSyncNotificationField(hi(li.pushString),this.pushNotificationDataSetting.get(),hi(li.pushData),this.push.bind(this),"push-message"),this.createSyncNotificationField(hi(li.syncString),this.syncTagNameSetting.get(),hi(li.syncTag),this.sync.bind(this),"sync-tag"),this.createSyncNotificationField(hi(li.periodicSync),this.periodicSyncTagNameSetting.get(),hi(li.periodicSyncTag),e=>this.periodicSync(e),"periodic-sync-tag"),this.createUpdateCycleField(),this.maybeCreateRouterField(),this.clientInfoCache=new Map,this.throttler=new e.Throttler.Throttler(500)}createSyncNotificationField(e,t,i,r,s){const o=this.wrapWidget(this.section.appendField(e)).createChild("form","service-worker-editor-with-button"),a=c.UIUtils.createInput("source-code service-worker-notification-editor");a.setAttribute("jslog",`${u.textField().track({change:!0}).context(s)}`),o.appendChild(a);const n=c.UIUtils.createTextButton(e,void 0,{jslogContext:s});n.type="submit",o.appendChild(n),a.value=t,a.placeholder=i,c.ARIAUtils.setLabel(a,e),o.addEventListener("submit",e=>{r(a.value||""),e.consume(!0)})}scheduleUpdate(){gi?this.update():this.throttler.schedule(this.update.bind(this))}addVersion(e,t,i){const r=e.createChild("div","service-worker-version");r.createChild("div",t);const s=r.createChild("span","service-worker-version-string");return s.textContent=i,c.ARIAUtils.markAsAlert(s),r}updateClientsField(e){this.clientsField.removeChildren(),this.section.setFieldVisible(hi(li.clients),Boolean(e.controlledClients.length));for(const t of e.controlledClients){const e=this.clientsField.createChild("div","service-worker-client"),i=this.clientInfoCache.get(t);i&&this.updateClientInfo(e,i),this.manager.target().targetAgent().invoke_getTargetInfo({targetId:t}).then(this.onClientInfo.bind(this,e))}}updateSourceField(t){this.sourceField.removeChildren();const i=e.ParsedURL.ParsedURL.extractName(t.scriptURL),r=this.sourceField.createChild("div","report-field-value-filename"),s=p.Linkifier.Linkifier.linkifyURL(t.scriptURL,{text:i});if(s.tabIndex=0,s.setAttribute("jslog",`${u.link("source-location").track({click:!0})}`),r.appendChild(s),this.registration.errors.length){const t=c.UIUtils.createIconLabel({title:String(this.registration.errors.length),iconName:"cross-circle-filled",color:"var(--icon-error)"});t.classList.add("devtools-link","link"),t.tabIndex=0,c.ARIAUtils.setLabel(t,hi(li.sRegistrationErrors,{PH1:this.registration.errors.length})),self.onInvokeElement(t,()=>e.Console.Console.instance().show()),r.appendChild(t)}void 0!==t.scriptResponseTime&&(this.sourceField.createChild("div","report-field-value-subtitle").textContent=hi(li.receivedS,{PH1:new Date(1e3*t.scriptResponseTime).toLocaleString()}))}update(){const e=this.registration.fingerprint();if(e===this.fingerprint)return Promise.resolve();this.fingerprint=e,this.section.setHeaderButtonsState(this.registration.isDeleted);const t=this.registration.versionsByMode(),r=this.registration.scopeURL,s=this.registration.isDeleted?hi(li.sDeleted,{PH1:r}):r;this.section.setTitle(s);const a=t.get("active"),n=t.get("waiting"),d=t.get("installing"),l=t.get("redundant");this.statusField.removeChildren();const h=this.statusField.createChild("div","service-worker-version-stack");if(h.createChild("div","service-worker-version-stack-bar"),a){this.updateSourceField(a);const e=o.ServiceWorkerManager.ServiceWorkerVersion.RunningStatus[a.currentState.runningStatus](),t=this.addVersion(h,"service-worker-active-circle",hi(li.sActivatedAndIsS,{PH1:a.id,PH2:e}));if(a.isRunning()||a.isStarting()){const e=c.UIUtils.createTextButton(hi(li.stopString),this.stopButtonClicked.bind(this,a.id),{jslogContext:"stop"});t.appendChild(e)}else if(a.isStartable()){const e=c.UIUtils.createTextButton(hi(li.startString),this.startButtonClicked.bind(this),{jslogContext:"start"});t.appendChild(e)}this.updateClientsField(a),this.maybeCreateRouterField()}else l&&(this.updateSourceField(l),this.addVersion(h,"service-worker-redundant-circle",hi(li.sIsRedundant,{PH1:l.id})),this.updateClientsField(l));if(n){const e=this.addVersion(h,"service-worker-waiting-circle",hi(li.sWaitingToActivate,{PH1:n.id})),t=c.UIUtils.createTextButton(i.i18n.lockedString("skipWaiting"),this.skipButtonClicked.bind(this),{title:i.i18n.lockedString("skipWaiting"),jslogContext:"skip-waiting"});e.appendChild(t),void 0!==n.scriptResponseTime&&(e.createChild("div","service-worker-subtitle").textContent=hi(li.receivedS,{PH1:new Date(1e3*n.scriptResponseTime).toLocaleString()}))}if(d){const e=this.addVersion(h,"service-worker-installing-circle",hi(li.sTryingToInstall,{PH1:d.id}));void 0!==d.scriptResponseTime&&(e.createChild("div","service-worker-subtitle").textContent=hi(li.receivedS,{PH1:new Date(1e3*d.scriptResponseTime).toLocaleString()}))}return this.updateCycleView.refresh(),Promise.resolve()}unregisterButtonClicked(){this.manager.deleteRegistration(this.registration.id)}createUpdateCycleField(){this.updateCycleField=this.wrapWidget(this.section.appendField(hi(li.updateCycle))),this.updateCycleField.appendChild(this.updateCycleView.tableElement)}maybeCreateRouterField(){const e=this.registration.versionsByMode().get("active"),t=hi(li.routers);e?.routerRules&&e.routerRules.length>0?(this.routerField||(this.routerField=this.wrapWidget(this.section.appendField(t))),this.routerField.lastElementChild||this.routerField.appendChild(this.routerView),this.routerView.update(e.routerRules)):(this.section.removeField(t),this.routerField=void 0)}updateButtonClicked(){this.manager.updateRegistration(this.registration.id)}networkRequestsClicked(){e.Revealer.reveal(M.UIFilter.UIRequestFilter.filters([{filterType:M.UIFilter.FilterType.Is,filterValue:"service-worker-intercepted"}])),t.userMetrics.actionTaken(t.UserMetrics.Action.ServiceWorkerNetworkRequestClicked)}push(e){this.pushNotificationDataSetting.set(e),this.manager.deliverPushMessage(this.registration.id,e)}sync(e){this.syncTagNameSetting.set(e),this.manager.dispatchSyncEvent(this.registration.id,e,!0)}periodicSync(e){this.periodicSyncTagNameSetting.set(e),this.manager.dispatchPeriodicSyncEvent(this.registration.id,e)}onClientInfo(e,t){const i=t.targetInfo;i&&(this.clientInfoCache.set(i.targetId,i),this.updateClientInfo(e,i))}updateClientInfo(e,t){if("page"!==t.type&&"iframe"===t.type){const i=e.createChild("span","service-worker-client-string");return void c.UIUtils.createTextChild(i,hi(li.workerS,{PH1:t.url}))}e.removeChildren();const i=e.createChild("span","service-worker-client-string");c.UIUtils.createTextChild(i,t.url);const r=new h.Button.Button;r.data={iconName:"select-element",variant:"icon",size:"SMALL",title:hi(li.focus),jslogContext:"client-focus"},r.className="service-worker-client-focus-link",r.addEventListener("click",this.activateTarget.bind(this,t.targetId)),e.appendChild(r)}activateTarget(e){this.manager.target().targetAgent().invoke_activateTarget({targetId:e})}startButtonClicked(){this.manager.startWorker(this.registration.scopeURL)}skipButtonClicked(){this.manager.skipWaiting(this.registration.scopeURL)}stopButtonClicked(e){this.manager.stopWorker(e)}wrapWidget(e){const t=c.UIUtils.createShadowRootWithCoreStyles(e,{cssFile:[ii,ri]}),i=document.createElement("div");return t.appendChild(i),i}}var mi=Object.freeze({__proto__:null,Section:ui,ServiceWorkersView:pi,setThrottleDisabledForDebugging:e=>{gi=e}}),wi=`devtools-shared-storage-access-grid{overflow:auto}\n/*# sourceURL=${import.meta.resolve("./sharedStorageEventsView.css")} */`;const vi={noEventSelected:"No shared storage event selected",clickToDisplayBody:"Click on any shared storage event to display the event parameters"},Si=i.i18n.registerUIStrings("panels/application/SharedStorageEventsView.ts",vi),bi=i.i18n.getLocalizedString.bind(void 0,Si);class fi extends c.SplitWidget.SplitWidget{#L=new m.SharedStorageAccessGrid.SharedStorageAccessGrid;#P=[];#A;#D="";constructor(){super(!1,!0),this.element.setAttribute("jslog",`${u.pane("shared-storage-events")}`),this.#A=new c.EmptyWidget.EmptyWidget(bi(vi.noEventSelected),bi(vi.clickToDisplayBody)),this.#A.setMinimumSize(0,40),this.#L.setMinimumSize(0,80),this.#L.onSelect=this.#B.bind(this),this.setMainWidget(this.#L),this.setSidebarWidget(this.#A),this.hideSidebar(),this.#F()?.addEventListener(o.ResourceTreeModel.Events.PrimaryPageChanged,this.clearEvents,this)}#F(){const e=o.TargetManager.TargetManager.instance().primaryPageTarget();return e?.model(o.ResourceTreeModel.ResourceTreeModel)||null}#O(){return this.#F()?.mainFrame||null}get id(){return this.#O()?.id||this.#D}wasShown(){super.wasShown();const e=this.sidebarWidget();e&&e.registerRequiredCSS(wi)}addEvent(e){e.mainFrameId===this.id&&(this.#P.some(t=>{return i=t,r=e,JSON.stringify(i)===JSON.stringify(r);var i,r})||("Both"!==this.showMode()&&this.showBoth(),this.#P.push(e),this.#L.events=this.#P))}clearEvents(){this.#P=[],this.#L.events=this.#P,this.setSidebarWidget(this.#A),this.hideSidebar()}#B(e){const t=l.JSONView.JSONView.createViewSync(e);t.setMinimumSize(0,40),this.setSidebarWidget(t)}setDefaultIdForTesting(e){this.#D=e}getEventsForTesting(){return this.#P}getSharedStorageAccessGridForTesting(){return this.#L}}var yi=Object.freeze({__proto__:null,SharedStorageEventsView:fi});const ki={sharedStorage:"Shared storage"},Ii=i.i18n.registerUIStrings("panels/application/SharedStorageListTreeElement.ts",ki),Ci=i.i18n.getLocalizedString.bind(void 0,Ii);class Ti extends F{#U;view;constructor(t,i=!1){super(t,Ci(ki.sharedStorage),!1,"shared-storage"),this.#U=e.Settings.Settings.instance().createSetting("resources-shared-storage-expanded",i);const r=n.Icon.create("database");this.setLeadingIcons([r]),this.view=new fi}get itemURL(){return"shared-storage://"}onselect(e){return super.onselect(e),this.resourcesPanel.showView(this.view),!1}onattach(){super.onattach(),this.#U.get()&&this.expand()}onexpand(){this.#U.set(!0)}oncollapse(){this.#U.set(!1)}addEvent(e){this.view.addEvent(e)}}var Ei=Object.freeze({__proto__:null,SharedStorageListTreeElement:Ti});class xi extends e.ObjectWrapper.ObjectWrapper{#e;#V;constructor(e,t){super(),this.#e=e,this.#V=t}get securityOrigin(){return this.#V}async getMetadata(){return await this.#e.storageAgent.invoke_getSharedStorageMetadata({ownerOrigin:this.securityOrigin}).then(({metadata:e})=>e)}async getEntries(){return await this.#e.storageAgent.invoke_getSharedStorageEntries({ownerOrigin:this.securityOrigin}).then(({entries:e})=>e)}async setEntry(e,t,i){await this.#e.storageAgent.invoke_setSharedStorageEntry({ownerOrigin:this.securityOrigin,key:e,value:t,ignoreIfPresent:i})}async deleteEntry(e){await this.#e.storageAgent.invoke_deleteSharedStorageEntry({ownerOrigin:this.securityOrigin,key:e})}async clear(){await this.#e.storageAgent.invoke_clearSharedStorageEntries({ownerOrigin:this.securityOrigin})}async resetBudget(){await this.#e.storageAgent.invoke_resetSharedStorageBudget({ownerOrigin:this.securityOrigin})}}class Ri extends o.SDKModel.SDKModel{#W;#N;storageAgent;#a;constructor(e){super(e),e.registerStorageDispatcher(this),this.#W=e.model(o.SecurityOriginManager.SecurityOriginManager),this.#N=new Map,this.storageAgent=e.storageAgent(),this.#a=!1}async enable(){this.#a||(this.#W.addEventListener(o.SecurityOriginManager.Events.SecurityOriginAdded,this.#j,this),this.#W.addEventListener(o.SecurityOriginManager.Events.SecurityOriginRemoved,this.#H,this),await this.storageAgent.invoke_setSharedStorageTracking({enable:!0}),this.#_(),this.#a=!0)}disable(){this.#a&&(this.#W.removeEventListener(o.SecurityOriginManager.Events.SecurityOriginAdded,this.#j,this),this.#W.removeEventListener(o.SecurityOriginManager.Events.SecurityOriginRemoved,this.#H,this),this.storageAgent.invoke_setSharedStorageTracking({enable:!1}),this.#K(),this.#a=!1)}dispose(){this.disable()}#_(){for(const e of this.#W.securityOrigins())this.#q(e)}#K(){for(const e of this.#N.keys())this.#z(e)}#j(e){this.#q(e.data)}#q(t){const i=new e.ParsedURL.ParsedURL(t);if(!i.isValid||"data"===i.scheme||"about"===i.scheme||"javascript"===i.scheme)return;if(this.#N.has(t))return;const r=new xi(this,t);this.#N.set(t,r),this.dispatchEventToListeners("SharedStorageAdded",r)}#H(e){this.#z(e.data)}#z(e){const t=this.storageForOrigin(e);t&&(this.#N.delete(e),this.dispatchEventToListeners("SharedStorageRemoved",t))}storages(){return this.#N.values()}storageForOrigin(e){return this.#N.get(e)||null}numStoragesForTesting(){return this.#N.size}isChangeEvent(e){return["set","append","delete","clear"].includes(e.method)}sharedStorageAccessed(e){if(this.isChangeEvent(e)){const t=this.storageForOrigin(e.ownerOrigin);if(t){const i={accessTime:e.accessTime,method:e.method,mainFrameId:e.mainFrameId,ownerSite:e.ownerSite,params:e.params,scope:e.scope};t.dispatchEventToListeners("SharedStorageChanged",i)}else this.#q(e.ownerOrigin)}this.dispatchEventToListeners("SharedStorageAccess",e)}sharedStorageWorkletOperationExecutionFinished(e){}attributionReportingTriggerRegistered(e){}indexedDBListUpdated(e){}indexedDBContentUpdated(e){}cacheStorageListUpdated(e){}cacheStorageContentUpdated(e){}interestGroupAccessed(e){}interestGroupAuctionEventOccurred(e){}interestGroupAuctionNetworkRequestCreated(e){}storageBucketCreatedOrUpdated(e){}storageBucketDeleted(e){}attributionReportingSourceRegistered(e){}attributionReportingReportSent(e){}attributionReportingVerboseDebugReportSent(e){}}o.SDKModel.SDKModel.register(Ri,{capabilities:8192,autostart:!1});var Mi=Object.freeze({__proto__:null,SharedStorageForOrigin:xi,SharedStorageModel:Ri});const Li={refresh:"Refresh",clearAll:"Clear All",deleteSelected:"Delete Selected",refreshedStatus:"Table refreshed"},Pi=i.i18n.registerUIStrings("panels/application/StorageItemsToolbar.ts",Li),Ai=i.i18n.getLocalizedString.bind(void 0,Pi),{html:Di,render:Bi}=f,Fi=(e,t,i)=>{Bi(Di`
<devtools-toolbar class="top-resources-toolbar"
jslog=${u.toolbar()}>
<devtools-button title=${Ai(Li.refresh)}
jslog=${u.action("storage-items-view.refresh").track({click:!0})}
@click=${e.onRefresh}
.iconName=${"refresh"}
.variant=${"toolbar"}></devtools-button>
<devtools-toolbar-input type="filter"
?disabled=${!e.filterItemEnabled}
@change=${e.onFilterChanged}
style="flex-grow:0.4"></devtools-toolbar-input>
${(new c.Toolbar.ToolbarSeparator).element}
<devtools-button title=${e.deleteAllButtonTitle}
@click=${e.onDeleteAll}
id=storage-items-delete-all
?disabled=${!e.deleteAllButtonEnabled}
jslog=${u.action("storage-items-view.clear-all").track({click:!0})}
.iconName=${e.deleteAllButtonIconName}
.variant=${"toolbar"}></devtools-button>
<devtools-button title=${Ai(Li.deleteSelected)}
@click=${e.onDeleteSelected}
?disabled=${!e.deleteSelectedButtonDisabled}
jslog=${u.action("storage-items-view.delete-selected").track({click:!0})}
.iconName=${"cross"}
.variant=${"toolbar"}></devtools-button>
${e.mainToolbarItems.map(e=>e.element)}
</devtools-toolbar>
${e.metadataView}`,i)};class Oi extends(e.ObjectWrapper.eventMixin(c.Widget.VBox)){filterRegex;#G;#b;#$=!0;#J=!0;#X=!0;#Q="clear";#Y=Ai(Li.clearAll);#Z=[];constructor(e,t=Fi){super(e),this.#b=t,this.filterRegex=null}set metadataView(e){this.#G=e}get metadataView(){return this.#G||(this.#G=new m.StorageMetadataView.StorageMetadataView),this.#G}performUpdate(){const e={deleteAllButtonEnabled:this.#$,deleteSelectedButtonDisabled:this.#J,filterItemEnabled:this.#X,deleteAllButtonIconName:this.#Q,deleteAllButtonTitle:this.#Y,mainToolbarItems:this.#Z,metadataView:this.metadataView,onFilterChanged:this.filterChanged.bind(this),onRefresh:()=>{this.dispatchEventToListeners("Refresh"),c.ARIAUtils.LiveAnnouncer.alert(Ai(Li.refreshedStatus))},onDeleteAll:()=>this.dispatchEventToListeners("DeleteAll"),onDeleteSelected:()=>this.dispatchEventToListeners("DeleteSelected")};this.#b(e,{},this.contentElement)}setDeleteAllTitle(e){this.#Y=e,this.requestUpdate()}setDeleteAllGlyph(e){this.#Q=e,this.requestUpdate()}appendToolbarItem(e){this.#Z.push(e),this.requestUpdate()}setStorageKey(e){this.metadataView.setStorageKey(e)}filterChanged({detail:e}){this.filterRegex=e?new RegExp(r.StringUtilities.escapeForRegExp(e),"i"):null,this.dispatchEventToListeners("Refresh")}hasFilter(){return Boolean(this.filterRegex)}setCanDeleteAll(e){this.#$=e,this.requestUpdate()}setCanDeleteSelected(e){this.#J=e,this.requestUpdate()}setCanFilter(e){this.#X=e,this.requestUpdate()}}var Ui=Object.freeze({__proto__:null,DEFAULT_VIEW:Fi,StorageItemsToolbar:Oi});const{ARIAUtils:Vi}=c,{EmptyWidget:Wi}=c.EmptyWidget,{VBox:Ni,widgetConfig:ji}=c.Widget,{Size:Hi}=P,{repeat:_i}=I,Ki={noPreviewSelected:"No value selected",selectAValueToPreview:"Select a value to preview",numberEntries:"Number of entries shown in table: {PH1}",key:"Key",value:"Value"},qi=i.i18n.registerUIStrings("panels/application/KeyValueStorageItemsView.ts",Ki),zi=i.i18n.getLocalizedString.bind(void 0,qi);class Gi extends c.Widget.VBox{#ee;#te;#ie=[];#re=null;#b;#se=!0;#oe;#ae;metadataView;constructor(e,t,i,r,s){s??=new m.StorageMetadataView.StorageMetadataView,r||(r=(e,i,r)=>{y(k`
<devtools-widget
.widgetConfig=${ji(Oi,{metadataView:s})}
class=flex-none
${c.Widget.widgetRef(Oi,e=>{i.toolbar=e})}
></devtools-widget>
<devtools-split-view sidebar-position="second" name="${t}-split-view-state">
<devtools-widget
slot="main"
.widgetConfig=${ji(Ni,{minimumSize:new Hi(0,50)})}>
<devtools-data-grid
.name=${`${t}-datagrid-with-preview`}
striped
style="flex: auto"
@sort=${t=>e.onSort(t.detail.ascending)}
@refresh=${e.onReferesh}
@create=${t=>e.onCreate(t.detail.key,t.detail.value)}
@deselect=${()=>e.onSelect(null)}
>
<table>
<tr>
<th id="key" sortable ?editable=${e.editable}>
${zi(Ki.key)}
</th>
<th id="value" ?editable=${e.editable}>
${zi(Ki.value)}
</th>
</tr>
${_i(e.items,e=>e.key,t=>k`
<tr data-key=${t.key} data-value=${t.value}
@select=${()=>e.onSelect(t)}
@edit=${i=>e.onEdit(t.key,t.value,i.detail.columnId,i.detail.valueBeforeEditing,i.detail.newText)}
@delete=${()=>e.onDelete(t.key)}
selected=${e.selectedKey===t.key||C}>
<td>${t.key}</td>
<td>${t.value.substr(0,4096)}</td>
</tr>`)}
<tr placeholder></tr>
</table>
</devtools-data-grid>
</devtools-widget>
<devtools-widget
slot="sidebar"
.widgetConfig=${ji(Ni,{minimumSize:new Hi(0,50)})}
jslog=${u.pane("preview").track({resize:!0})}>
${e.preview?.element}
</devtools-widget>
</devtools-split-view>`,r)}),super(),this.metadataView=s,this.#oe=i,this.#b=r,this.performUpdate(),this.#ee=new Wi(zi(Ki.noPreviewSelected),zi(Ki.selectAValueToPreview)),this.#te=null,this.showPreview(null,null)}wasShown(){super.wasShown(),this.refreshItems()}performUpdate(){const e=this,t={set toolbar(t){e.#ae?.removeEventListener("DeleteSelected",e.deleteSelectedItem,e),e.#ae?.removeEventListener("DeleteAll",e.deleteAllItems,e),e.#ae?.removeEventListener("Refresh",e.refreshItems,e),e.#ae=t,e.#ae.addEventListener("DeleteSelected",e.deleteSelectedItem,e),e.#ae.addEventListener("DeleteAll",e.deleteAllItems,e),e.#ae.addEventListener("Refresh",e.refreshItems,e)}},i={items:this.#ie,selectedKey:this.#re,editable:this.#oe,preview:this.#ee,onSelect:e=>{this.#ae?.setCanDeleteSelected(Boolean(e)),e?this.#ne(e):this.#ne(null)},onSort:e=>{this.#se=e},onCreate:(e,t)=>{this.#de(e,t)},onEdit:(e,t,i,r,s)=>{this.#le(e,t,i,r,s)},onDelete:e=>{this.#ce(e)},onReferesh:()=>{this.refreshItems()}};this.#b(i,t,this.contentElement)}get toolbar(){return this.#ae}refreshItems(){}deleteAllItems(){}itemsCleared(){this.#ie=[],this.performUpdate(),this.#ae?.setCanDeleteSelected(!1)}itemRemoved(e){const t=this.#ie.findIndex(t=>t.key===e);-1!==t&&(this.#ie.splice(t,1),this.performUpdate(),this.#ae?.setCanDeleteSelected(this.#ie.length>1))}itemAdded(e,t){this.#ie.some(t=>t.key===e)||(this.#ie.push({key:e,value:t}),this.performUpdate())}itemUpdated(e,t){const i=this.#ie.find(t=>t.key===e);i&&i.value!==t&&(i.value=t,this.performUpdate(),this.#re===e&&(this.#te!==t&&this.#ne({key:e,value:t}),this.#ae?.setCanDeleteSelected(!0)))}showItems(e){const t=this.#se?1:-1;this.#ie=[...e].sort((e,i)=>t*(e.key>i.key?1:-1));const i=this.#ie.find(e=>e.key===this.#re);i?this.#ne(i):this.#re=null,this.performUpdate(),this.#ae?.setCanDeleteSelected(Boolean(this.#re)),Vi.LiveAnnouncer.alert(zi(Ki.numberEntries,{PH1:this.#ie.length}))}deleteSelectedItem(){this.#re&&this.#ce(this.#re)}#de(e,t){this.setItem(e,t),this.#he(e,t),this.#ne({key:e,value:t})}isEditAllowed(e,t,i){return!0}#le(e,t,i,r,s){this.isEditAllowed(i,r,s)&&("key"===i?("string"==typeof r&&this.removeItem(r),this.setItem(s,t),this.#he(s,t),this.#ne({key:s,value:t})):(this.setItem(e,s),this.#ne({key:e,value:s})))}#he(e,t){for(let i=this.#ie.length-1;i>=0;--i){const r=this.#ie[i];r.key===e&&t!==r.value&&this.#ie.splice(i,1)}}#ce(e){this.removeItem(e)}showPreview(e,t){this.#ee&&this.#te===t||(this.#ee&&this.#ee.detach(),e||(e=new Wi(zi(Ki.noPreviewSelected),zi(Ki.selectAValueToPreview))),this.#te=t,this.#ee=e,this.performUpdate())}async#ne(e){if(e?.value){this.#re=e.key;const t=await this.createPreview(e.key,e.value);this.#re===e.key&&this.showPreview(t,e.value)}else this.#re=null,this.showPreview(null,null)}set editable(e){this.#oe=e,this.performUpdate()}keys(){return this.#ie.map(e=>e.key)}}var $i=Object.freeze({__proto__:null,KeyValueStorageItemsView:Gi});const Ji={sharedStorage:"Shared storage",sharedStorageItemsCleared:"Shared Storage items cleared",sharedStorageFilteredItemsCleared:"Shared Storage filtered items cleared",sharedStorageItemDeleted:"The storage item was deleted.",sharedStorageItemEdited:"The storage item was edited.",sharedStorageItemEditCanceled:"The storage item edit was canceled."},Xi=i.i18n.registerUIStrings("panels/application/SharedStorageItemsView.ts",Ji),Qi=i.i18n.getLocalizedString.bind(void 0,Xi);class Yi extends Gi{#ge;sharedStorageItemsDispatcher;constructor(t,i){super(Qi(Ji.sharedStorage),"shared-storage-items-view",!0,i,new m.SharedStorageMetadataView.SharedStorageMetadataView(t,t.securityOrigin)),this.#ge=t,this.performUpdate(),this.#ge.addEventListener("SharedStorageChanged",this.#pe,this),this.sharedStorageItemsDispatcher=new e.ObjectWrapper.ObjectWrapper}static async createView(e,t){const i=new Yi(e,t);return await i.updateEntriesOnly(),i}async updateEntriesOnly(){const e=await this.#ge.getEntries();e&&this.#ue(e)}async#pe(){await this.refreshItems()}async refreshItems(){await(this.metadataView?.render()),await this.updateEntriesOnly(),this.sharedStorageItemsDispatcher.dispatchEventToListeners("ItemsRefreshed")}async deleteAllItems(){if(!this.toolbar?.hasFilter())return await this.#ge.clear(),await this.refreshItems(),this.sharedStorageItemsDispatcher.dispatchEventToListeners("ItemsCleared"),void c.ARIAUtils.LiveAnnouncer.alert(Qi(Ji.sharedStorageItemsCleared));await Promise.all(this.keys().map(e=>this.#ge.deleteEntry(e))),await this.refreshItems(),this.sharedStorageItemsDispatcher.dispatchEventToListeners("FilteredItemsCleared"),c.ARIAUtils.LiveAnnouncer.alert(Qi(Ji.sharedStorageFilteredItemsCleared))}isEditAllowed(e,t,i){return"key"!==e||""!==i||(this.refreshItems().then(()=>{c.ARIAUtils.LiveAnnouncer.alert(Qi(Ji.sharedStorageItemEditCanceled))}),!1)}async setItem(e,t){await this.#ge.setEntry(e,t,!1),await this.refreshItems(),this.sharedStorageItemsDispatcher.dispatchEventToListeners("ItemEdited"),c.ARIAUtils.LiveAnnouncer.alert(Qi(Ji.sharedStorageItemEdited))}#ue(e){if(this.toolbar){const t=e.filter(e=>this.toolbar?.filterRegex?.test(`${e.key} ${e.value}`)??!0);this.showItems(t)}}async removeItem(e){await this.#ge.deleteEntry(e),await this.refreshItems(),this.sharedStorageItemsDispatcher.dispatchEventToListeners("ItemDeleted",{key:e}),c.ARIAUtils.LiveAnnouncer.alert(Qi(Ji.sharedStorageItemDeleted))}async createPreview(e,t){const i=e&&{key:e,value:t||""};return l.JSONView.JSONView.createViewSync(i)}}var Zi=Object.freeze({__proto__:null,SharedStorageItemsView:Yi});class er extends F{view;constructor(e,t){super(e,t.securityOrigin,!1,"shared-storage-instance")}static async createElement(e,t){const i=new er(e,t);return i.view=await Yi.createView(t),i.view.element.setAttribute("jslog",`${u.pane("shared-storage-data")}`),i}get itemURL(){return"shared-storage://"}onselect(e){return super.onselect(e),this.resourcesPanel.showView(this.view),!1}}var tr=Object.freeze({__proto__:null,SharedStorageTreeElement:er});const ir={storageBuckets:"Storage buckets",noStorageBuckets:"No storage buckets detected",storageBucketsDescription:"On this page you can view and delete storage buckets, and their associated `Storage APIs`."},rr=i.i18n.registerUIStrings("panels/application/StorageBucketsTreeElement.ts",ir),sr=i.i18n.getLocalizedString.bind(void 0,rr);class or extends O{bucketTreeElements=new Set;constructor(e){super(e,sr(ir.storageBuckets),sr(ir.noStorageBuckets),sr(ir.storageBucketsDescription),"storage-buckets");const t=n.Icon.create("bucket");this.setLeadingIcons([t]),this.setLink("https://github.com/WICG/storage-buckets/blob/gh-pages/explainer.md")}initialize(){o.TargetManager.TargetManager.instance().addModelListener(o.StorageBucketsModel.StorageBucketsModel,"BucketAdded",this.bucketAdded,this),o.TargetManager.TargetManager.instance().addModelListener(o.StorageBucketsModel.StorageBucketsModel,"BucketRemoved",this.bucketRemoved,this),o.TargetManager.TargetManager.instance().addModelListener(o.StorageBucketsModel.StorageBucketsModel,"BucketChanged",this.bucketChanged,this);for(const e of o.TargetManager.TargetManager.instance().models(o.StorageBucketsModel.StorageBucketsModel)){const t=e.getBuckets();for(const i of t)this.addBucketTreeElement(e,i)}}removeBucketsForModel(e){for(const t of this.bucketTreeElements)t.model===e&&this.removeBucketTreeElement(t)}bucketAdded({data:{model:e,bucketInfo:t}}){this.addBucketTreeElement(e,t)}bucketRemoved({data:{model:e,bucketInfo:t}}){const i=this.getBucketTreeElement(e,t);i&&this.removeBucketTreeElement(i)}bucketChanged({data:{model:e,bucketInfo:t}}){const i=this.getBucketTreeElement(e,t);i&&(i.bucketInfo=t)}addBucketTreeElement(e,t){if(void 0===t.bucket.name)return;const i=new ar(this.resourcesPanel,e,t);this.bucketTreeElements.add(i),this.appendChild(i),i.initialize()}removeBucketTreeElement(e){this.removeChild(e),this.bucketTreeElements.delete(e),this.setExpandable(this.bucketTreeElements.size>0)}get itemURL(){return"storage-buckets-group://"}getBucketTreeElement(e,{bucket:{storageKey:t,name:i}}){for(const r of this.bucketTreeElements)if(r.model===e&&r.bucketInfo.bucket.storageKey===t&&r.bucketInfo.bucket.name===i)return r;return null}}class ar extends O{storageBucketInfo;bucketModel;view;constructor(e,t,i){const{bucket:r}=i,{origin:s}=o.StorageKeyManager.parseStorageKey(i.bucket.storageKey);super(e,`${r.name} - ${s}`,"","","storage-bucket"),this.bucketModel=t,this.storageBucketInfo=i;const a=n.Icon.create("database");this.setLeadingIcons([a])}initialize(){const{bucket:e}=this.bucketInfo,t=new Ar(this.resourcesPanel,e);this.appendChild(t);const i=new ei(this.resourcesPanel,e);this.appendChild(i),i.initialize()}get itemURL(){const{bucket:e}=this.bucketInfo;return`storage-buckets-group://${e.name}/${e.storageKey}`}get model(){return this.bucketModel}get bucketInfo(){return this.storageBucketInfo}set bucketInfo(e){this.storageBucketInfo=e,this.view&&this.view.getComponent().setStorageBucket(this.storageBucketInfo)}onselect(e){return super.onselect(e),this.view||(this.view=d.LegacyWrapper.legacyWrapper(c.Widget.Widget,new w.StorageMetadataView),this.view.getComponent().enableStorageBucketControls(this.model),this.view.getComponent().setStorageBucket(this.storageBucketInfo)),this.showView(this.view),!1}}var nr=Object.freeze({__proto__:null,StorageBucketsTreeElement:ar,StorageBucketsTreeParentElement:or,i18nString:sr}),dr=`.report-row{display:flex;align-items:center;white-space:normal;&:has(.quota-override-error:empty){margin:0}}.clear-storage-button .report-row{display:flex}.link{margin-left:10px;display:none}.report-row:hover .link{display:inline}.quota-override-editor-with-button{align-items:baseline;display:flex}.quota-override-notification-editor{border:solid 1px var(--sys-color-neutral-outline);border-radius:4px;display:flex;flex:auto;margin-right:4px;max-width:200px;min-width:50px;min-height:19px;padding-left:4px;&:focus{border-color:var(--sys-color-state-focus-ring)}&:hover:not(:focus){background-color:var(--sys-color-state-hover-on-subtle)}}.quota-override-error:not(:empty){padding-top:10px;color:var(--sys-color-error)}.usage-breakdown-row{min-width:fit-content}.clear-storage-container{overflow:auto}.clear-storage-header{min-width:400px}.report-content-box{overflow:initial}.include-third-party-cookies{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-left:10px}\n/*# sourceURL=${import.meta.resolve("./storageView.css")} */`;const lr={},cr={storageQuotaUsed:"{PH1} used out of {PH2} storage quota",storageQuotaUsedWithBytes:"{PH1} bytes used out of {PH2} bytes storage quota",storageWithCustomMarker:"{PH1} (custom)",storageTitle:"Storage",usage:"Usage",mb:"MB",learnMore:"Learn more",clearSiteData:"Clear site data",SiteDataCleared:"Site data cleared",application:"Application",unregisterServiceWorker:"Unregister service workers",localAndSessionStorage:"Local and session storage",indexDB:"IndexedDB",cookies:"Cookies",cacheStorage:"Cache storage",includingThirdPartyCookies:"including third-party cookies",sFailedToLoad:"{PH1} (failed to load)",internalError:"Internal error",pleaseEnterANumber:"Please enter a number",numberMustBeNonNegative:"Number must be non-negative",numberMustBeSmaller:"Number must be smaller than {PH1}",clearing:"Clearing…",storageQuotaIsLimitedIn:"Storage quota is limited in InPrivate mode",fileSystem:"File System",other:"Other",storageUsage:"Storage usage",serviceWorkers:"Service workers",simulateCustomStorage:"Simulate custom storage quota"},hr=i.i18n.registerUIStrings("panels/application/StorageView.ts",cr),gr=i.i18n.getLocalizedString.bind(void 0,hr);let pr=class extends c.ThrottledWidget.ThrottledWidget{pieColors;reportView;target;securityOrigin;storageKey;settings;includeThirdPartyCookiesSetting;quotaRow;quotaUsage;pieChart;previousOverrideFieldValue;quotaOverrideCheckbox;quotaOverrideControlRow;quotaOverrideEditor;quotaOverrideErrorMessage;clearButton;constructor(){super(!0,1e3),this.registerRequiredCSS(dr),this.contentElement.classList.add("clear-storage-container"),this.contentElement.setAttribute("jslog",`${u.pane("clear-storage")}`),this.pieColors=new Map([["cache_storage","rgb(229, 113, 113)"],["cookies","rgb(239, 196, 87)"],["indexeddb","rgb(155, 127, 230)"],["local_storage","rgb(116, 178, 102)"],["service_workers","rgb(255, 167, 36)"]]),this.reportView=new c.ReportView.ReportView(gr(cr.storageTitle)),this.reportView.registerRequiredCSS(dr),this.reportView.element.classList.add("clear-storage-header"),this.reportView.show(this.contentElement),this.target=null,this.securityOrigin=null,this.storageKey=null,this.settings=new Map;for(const t of ur)this.settings.set(t,e.Settings.Settings.instance().createSetting("clear-storage-"+r.StringUtilities.toKebabCase(t),!0));this.includeThirdPartyCookiesSetting=e.Settings.Settings.instance().createSetting("clear-storage-include-third-party-cookies",!1);const t=this.reportView.appendSection("","clear-storage-button").appendRow();this.clearButton=c.UIUtils.createTextButton(gr(cr.clearSiteData),this.clear.bind(this),{jslogContext:"storage.clear-site-data"}),this.clearButton.id="storage-view-clear-button",t.appendChild(this.clearButton);const i=c.SettingsUI.createSettingCheckbox(gr(cr.includingThirdPartyCookies),this.includeThirdPartyCookiesSetting);i.classList.add("include-third-party-cookies"),t.appendChild(i);const s=this.reportView.appendSection(gr(cr.usage));s.element.setAttribute("jslog",`${u.section("usage")}`),this.quotaRow=s.appendSelectableRow(),this.quotaRow.classList.add("quota-usage-row");const a=s.appendRow(),n=c.XLink.XLink.create("https://docs.microsoft.com/en-us/microsoft-edge/devtools-guide-chromium/progressive-web-apps/#quota-usage",gr(cr.learnMore));n.setAttribute("jslog",`${u.link().track({click:!0}).context("learn-more")}`),a.appendChild(n),this.quotaUsage=null,this.pieChart=new A.PieChart.PieChart,this.populatePieChart(0,[]);const d=s.appendRow();d.classList.add("usage-breakdown-row"),d.appendChild(this.pieChart),this.previousOverrideFieldValue="";const l=s.appendRow();l.classList.add("quota-override-row"),this.quotaOverrideCheckbox=c.UIUtils.CheckboxLabel.create(gr(cr.simulateCustomStorage),!1),this.quotaOverrideCheckbox.setAttribute("jslog",`${u.toggle("simulate-custom-quota").track({change:!0})}`),l.appendChild(this.quotaOverrideCheckbox),this.quotaOverrideCheckbox.addEventListener("click",this.onClickCheckbox.bind(this),!1),this.quotaOverrideControlRow=s.appendRow(),this.quotaOverrideEditor=this.quotaOverrideControlRow.createChild("input","quota-override-notification-editor"),this.quotaOverrideEditor.setAttribute("placeholder",gr(cr.pleaseEnterANumber)),this.quotaOverrideEditor.setAttribute("jslog",`${u.textField("quota-override").track({change:!0})}`),this.quotaOverrideControlRow.appendChild(c.UIUtils.createLabel(gr(cr.mb))),this.quotaOverrideControlRow.classList.add("hidden"),this.quotaOverrideEditor.addEventListener("keyup",e=>{"Enter"===e.key&&(this.applyQuotaOverrideFromInputField(),e.consume(!0))}),this.quotaOverrideEditor.addEventListener("focusout",e=>{this.applyQuotaOverrideFromInputField(),e.consume(!0)});const h=s.appendRow();this.quotaOverrideErrorMessage=h.createChild("div","quota-override-error");const g=this.reportView.appendSection(gr(cr.application));g.element.setAttribute("jslog",`${u.section("application")}`),this.appendItem(g,gr(cr.unregisterServiceWorker),"service_workers"),g.markFieldListAsGroup();const p=this.reportView.appendSection(gr(cr.storageTitle));p.element.setAttribute("jslog",`${u.section("storage")}`),this.appendItem(p,gr(cr.localAndSessionStorage),"local_storage"),this.appendItem(p,gr(cr.indexDB),"indexeddb"),this.appendItem(p,gr(cr.cookies),"cookies"),this.appendItem(p,gr(cr.cacheStorage),"cache_storage"),p.markFieldListAsGroup(),o.TargetManager.TargetManager.instance().observeTargets(this)}appendItem(e,t,i){const r=e.appendRow(),s=this.settings.get(i);s&&r.appendChild(c.SettingsUI.createSettingCheckbox(t,s))}targetAdded(e){if(e!==o.TargetManager.TargetManager.instance().primaryPageTarget())return;this.target=e;const t=e.model(o.SecurityOriginManager.SecurityOriginManager);this.updateOrigin(t.mainSecurityOrigin(),t.unreachableMainSecurityOrigin()),t.addEventListener(o.SecurityOriginManager.Events.MainSecurityOriginChanged,this.originChanged,this);const i=e.model(o.StorageKeyManager.StorageKeyManager);this.updateStorageKey(i.mainStorageKey()),i.addEventListener("MainStorageKeyChanged",this.storageKeyChanged,this)}targetRemoved(e){if(this.target!==e)return;e.model(o.SecurityOriginManager.SecurityOriginManager).removeEventListener(o.SecurityOriginManager.Events.MainSecurityOriginChanged,this.originChanged,this);e.model(o.StorageKeyManager.StorageKeyManager).removeEventListener("MainStorageKeyChanged",this.storageKeyChanged,this)}originChanged(e){const{mainSecurityOrigin:t,unreachableMainSecurityOrigin:i}=e.data;this.updateOrigin(t,i)}storageKeyChanged(e){const{mainStorageKey:t}=e.data;this.updateStorageKey(t)}updateOrigin(e,t){const i=this.securityOrigin;t?(this.securityOrigin=t,this.reportView.setSubtitle(gr(cr.sFailedToLoad,{PH1:t}))):(this.securityOrigin=e,this.reportView.setSubtitle(e)),i!==this.securityOrigin&&(this.quotaOverrideControlRow.classList.add("hidden"),this.quotaOverrideCheckbox.checked=!1,this.quotaOverrideErrorMessage.textContent=""),this.doUpdate()}updateStorageKey(e){const t=this.storageKey;this.storageKey=e,this.reportView.setSubtitle(e),t!==this.storageKey&&(this.quotaOverrideControlRow.classList.add("hidden"),this.quotaOverrideCheckbox.checked=!1,this.quotaOverrideErrorMessage.textContent=""),this.doUpdate()}async applyQuotaOverrideFromInputField(){if(!this.target||!this.securityOrigin)return void(this.quotaOverrideErrorMessage.textContent=gr(cr.internalError));this.quotaOverrideErrorMessage.textContent="";const e=this.quotaOverrideEditor.value;if(""===e)return await this.clearQuotaForOrigin(this.target,this.securityOrigin),void(this.previousOverrideFieldValue="");const t=parseFloat(e);if(!Number.isFinite(t))return void(this.quotaOverrideErrorMessage.textContent=gr(cr.pleaseEnterANumber));if(t<0)return void(this.quotaOverrideErrorMessage.textContent=gr(cr.numberMustBeNonNegative));const i=9e12;if(t>=i)return void(this.quotaOverrideErrorMessage.textContent=gr(cr.numberMustBeSmaller,{PH1:i.toLocaleString()}));const r=1e6,s=Math.round(t*r),o=""+s/r;this.quotaOverrideEditor.value=o,this.previousOverrideFieldValue=o,await this.target.storageAgent().invoke_overrideQuotaForOrigin({origin:this.securityOrigin,quotaSize:s})}async clearQuotaForOrigin(e,t){await e.storageAgent().invoke_overrideQuotaForOrigin({origin:t})}async onClickCheckbox(){this.quotaOverrideControlRow.classList.contains("hidden")?(this.quotaOverrideControlRow.classList.remove("hidden"),this.quotaOverrideCheckbox.checked=!0,this.quotaOverrideEditor.value=this.previousOverrideFieldValue,window.setTimeout(()=>this.quotaOverrideEditor.focus(),500)):this.target&&this.securityOrigin&&(this.quotaOverrideControlRow.classList.add("hidden"),this.quotaOverrideCheckbox.checked=!1,await this.clearQuotaForOrigin(this.target,this.securityOrigin),this.quotaOverrideErrorMessage.textContent="")}clear(){if(!this.securityOrigin)return;const e=[];for(const t of this.settings.keys()){const i=this.settings.get(t);i?.get()&&e.push(t)}if(this.target){const t=this.includeThirdPartyCookiesSetting.get();lr.StorageView.clear(this.target,this.storageKey,this.securityOrigin,e,t)}this.clearButton.disabled=!0;const t=this.clearButton.textContent;this.clearButton.textContent=gr(cr.clearing),window.setTimeout(()=>{this.clearButton.disabled=!1,this.clearButton.textContent=t,this.clearButton.focus()},500),c.ARIAUtils.LiveAnnouncer.alert(gr(cr.SiteDataCleared))}static clear(e,t,i,r,s){if(console.assert(Boolean(t)),!t)return;e.storageAgent().invoke_clearDataForStorageKey({storageKey:t,storageTypes:r.join(",")});const a=new Set(r),n=a.has("all");if(a.has("local_storage")||n){const i=e.model(ce);i&&i.clearForStorageKey(t)}if(a.has("indexeddb")||n)for(const e of o.TargetManager.TargetManager.instance().targets()){const i=e.model(ve);i&&i.clearForStorageKey(t)}if(i&&(a.has("cookies")||n)){e.storageAgent().invoke_clearDataForOrigin({origin:i,storageTypes:"cookies"});const t=e.model(o.CookieModel.CookieModel);t&&t.clear(void 0,s?void 0:i)}if(a.has("cache_storage")||n){const e=o.TargetManager.TargetManager.instance().primaryPageTarget(),i=e?.model(o.ServiceWorkerCacheModel.ServiceWorkerCacheModel);i&&i.clearForStorageKey(t)}}async doUpdate(){if(!this.securityOrigin||!this.target)return this.quotaRow.textContent="",void this.populatePieChart(0,[]);const e=this.securityOrigin,t=await this.target.storageAgent().invoke_getUsageAndQuota({origin:e});if(this.quotaRow.textContent="",t.getError())return void this.populatePieChart(0,[]);const r=t.overrideActive,s=i.ByteUtilities.bytesToString(t.quota),o=i.ByteUtilities.bytesToString(t.usage),a=gr(cr.storageWithCustomMarker,{PH1:s}),d=r?c.Fragment.Fragment.build`<b>${a}</b>`.element():s,l=i.i18n.getFormatLocalizedString(hr,cr.storageQuotaUsed,{PH1:o,PH2:d});if(this.quotaRow.appendChild(l),c.Tooltip.Tooltip.install(this.quotaRow,gr(cr.storageQuotaUsedWithBytes,{PH1:t.usage.toLocaleString(),PH2:t.quota.toLocaleString()})),!t.overrideActive&&t.quota<125829120){const e=new n.Icon.Icon;e.name="info",e.style.color="var(--icon-info)",e.classList.add("small"),c.Tooltip.Tooltip.install(this.quotaRow,gr(cr.storageQuotaIsLimitedIn)),this.quotaRow.appendChild(e)}if(null===this.quotaUsage||this.quotaUsage!==t.usage){this.quotaUsage=t.usage;const e=[];for(const i of t.usageBreakdown.sort((e,t)=>t.usage-e.usage)){const t=i.usage;if(!t)continue;const r=this.getStorageTypeName(i.storageType),s=this.pieColors.get(i.storageType)||"#ccc";e.push({value:t,color:s,title:r})}this.populatePieChart(t.usage,e)}this.update()}populatePieChart(e,t){this.pieChart.data={chartName:gr(cr.storageUsage),size:110,formatter:i.ByteUtilities.bytesToString,showLegend:!0,total:e,slices:t}}getStorageTypeName(e){switch(e){case"file_systems":return gr(cr.fileSystem);case"indexeddb":return gr(cr.indexDB);case"cache_storage":return gr(cr.cacheStorage);case"service_workers":return gr(cr.serviceWorkers);default:return gr(cr.other)}}};lr.StorageView=pr;const ur=["cache_storage","cookies","indexeddb","local_storage","service_workers"];class mr extends lr.StorageView{constructor(){super(),this.pieColors=new Map([["cache_storage","rgb(229, 113, 113)"],["cookies","rgb(179, 139, 0)"],["indexeddb","rgb(155, 127, 230)"],["local_storage","rgb(92, 165, 78)"],["service_workers","rgb(211, 129, 5)"],["websql","rgb(137, 158, 1)"]])}}var wr=Object.freeze({__proto__:null,ActionDelegate:class{handleAction(e,t){switch(t){case"resources.clear":return this.handleClear(!1);case"resources.clear-incl-third-party-cookies":return this.handleClear(!0)}return!1}handleClear(e){const t=o.TargetManager.TargetManager.instance().primaryPageTarget();if(!t)return!1;const i=t.model(o.ResourceTreeModel.ResourceTreeModel);if(!i)return!1;const r=i.getMainSecurityOrigin();return i.getMainStorageKey().then(i=>{lr.StorageView.clear(t,i,r,ur,e)},e=>{}),!0}},AllStorageTypes:ur,StorageView:mr,__scope:lr});const vr={trustTokens:"Private state tokens"},Sr=i.i18n.registerUIStrings("panels/application/TrustTokensTreeElement.ts",vr),br=i.i18n.getLocalizedString.bind(void 0,Sr);class fr extends F{view;constructor(e){super(e,br(vr.trustTokens),!1,"private-state-tokens");const t=n.Icon.create("database");this.setLeadingIcons([t])}get itemURL(){return"trustTokens://"}onselect(e){return super.onselect(e),this.view||(this.view=d.LegacyWrapper.legacyWrapper(c.Widget.Widget,new m.TrustTokensView.TrustTokensView,"trust-tokens")),this.showView(this.view),t.userMetrics.panelShown("trust-tokens"),!1}}var yr=Object.freeze({__proto__:null,TrustTokensTreeElement:fr,i18nString:br});const kr={application:"Application",storage:"Storage",noLocalStorage:"No local storage detected",localStorage:"Local storage",localStorageDescription:"On this page you can view, add, edit, and delete local storage key-value pairs.",sessionStorage:"Session storage",noSessionStorage:"No session storage detected",sessionStorageDescription:"On this page you can view, add, edit, and delete session storage key-value pairs.",extensionStorage:"Extension storage",noExtensionStorage:"No extension storage detected",extensionStorageDescription:"On this page you can view, add, edit, and delete extension storage key-value pairs.",extensionSessionStorage:"Session",extensionLocalStorage:"Local",extensionSyncStorage:"Sync",extensionManagedStorage:"Managed",cookies:"Cookies",noCookies:"No cookies set",cookiesDescription:"On this page you can view, add, edit, and delete cookies.",backgroundServices:"Background services",frames:"Frames",manifest:"Manifest",noManifestDetected:"No manifest detected",manifestDescription:"A manifest defines how your app appears on phone’s home screens and what the app looks like on launch.",appManifest:"Manifest",indexeddb:"IndexedDB",noIndexeddb:"No indexedDB detected",indexeddbDescription:"On this page you can view and delete indexedDB key-value pairs and databases.",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",openedWindowsDescription:"On this page you can view windows opened via window.open().",webWorkers:"Web Workers",documentNotAvailable:"No document detected",theContentOfThisDocumentHasBeen:"The content of this document has been generated dynamically via 'document.write()'.",windowWithoutTitle:"Window without title",worker:"worker",workerDescription:"On this page you can view dedicated workers that are created by the parent frame.",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",thirdPartyPhaseout:"Cookies from {PH1} may have been blocked due to third-party cookie phaseout.",resourceDescription:"On this page you can view the frame's resources."},Ir=i.i18n.registerUIStrings("panels/application/ApplicationPanelSidebar.ts",kr),Cr=i.i18n.getLocalizedString.bind(void 0,Ir);function Tr(e){if("main"===e)throw new Error("Unexpected main target id")}class Er extends c.Widget.VBox{panel;sidebarTree;applicationTreeElement;serviceWorkersTreeElement;localStorageListTreeElement;sessionStorageListTreeElement;extensionStorageListTreeElement;indexedDBListTreeElement;interestGroupTreeElement;cookieListTreeElement;trustTokensTreeElement;cacheStorageListTreeElement;sharedStorageListTreeElement;storageBucketsTreeElement;backForwardCacheListTreeElement;backgroundFetchTreeElement;backgroundSyncTreeElement;bounceTrackingMitigationsTreeElement;notificationsTreeElement;paymentHandlerTreeElement;periodicBackgroundSyncTreeElement;pushMessagingTreeElement;reportingApiTreeElement;preloadingSummaryTreeElement;resourcesSection;domStorageTreeElements;extensionIdToStorageTreeParentElement;extensionStorageModels;extensionStorageTreeElements;sharedStorageTreeElements;domains;target;previousHoveredElement;sharedStorageTreeElementDispatcher;constructor(t){super(),this.panel=t,this.sidebarTree=new c.TreeOutline.TreeOutlineInShadow("NavigationTree"),this.sidebarTree.registerRequiredCSS(jt),this.sidebarTree.element.classList.add("resources-sidebar"),this.sidebarTree.setHideOverflow(!0),this.sidebarTree.element.classList.add("filter-all"),this.sidebarTree.addEventListener(c.TreeOutline.Events.ElementAttached,this.treeElementAdded,this),this.contentElement.appendChild(this.sidebarTree.element);const i=Cr(kr.application);this.applicationTreeElement=this.addSidebarSection(i,"application");const r=this.applicationTreeElement.treeOutline?.contentElement;r&&(r.ariaLabel=Cr(kr.applicationSidebarPanel));const s=new Mr(t);this.applicationTreeElement.appendChild(s),s.generateChildren(),this.serviceWorkersTreeElement=new Rr(t),this.applicationTreeElement.appendChild(this.serviceWorkersTreeElement);const a=new Pr(t);this.applicationTreeElement.appendChild(a);const d=Cr(kr.storage),l=this.addSidebarSection(d,"storage");this.localStorageListTreeElement=new O(t,Cr(kr.localStorage),Cr(kr.noLocalStorage),Cr(kr.localStorageDescription),"local-storage"),this.localStorageListTreeElement.setLink("https://go.microsoft.com/fwlink/?linkid=2108233");const h=n.Icon.create("table");this.localStorageListTreeElement.setLeadingIcons([h]),l.appendChild(this.localStorageListTreeElement),this.sessionStorageListTreeElement=new O(t,Cr(kr.sessionStorage),Cr(kr.noSessionStorage),Cr(kr.sessionStorageDescription),"session-storage"),this.sessionStorageListTreeElement.setLink("https://go.microsoft.com/fwlink/?linkid=2108328");const g=n.Icon.create("table");this.sessionStorageListTreeElement.setLeadingIcons([g]),l.appendChild(this.sessionStorageListTreeElement),this.extensionStorageListTreeElement=new O(t,Cr(kr.extensionStorage),Cr(kr.noExtensionStorage),Cr(kr.extensionStorageDescription),"extension-storage"),this.extensionStorageListTreeElement.setLink("https://permanently-removed.invalid/docs/extensions/reference/api/storage/");const p=n.Icon.create("table");this.extensionStorageListTreeElement.setLeadingIcons([p]),l.appendChild(this.extensionStorageListTreeElement),this.indexedDBListTreeElement=new Ar(t),this.indexedDBListTreeElement.setLink("https://go.microsoft.com/fwlink/?linkid=2108232"),l.appendChild(this.indexedDBListTreeElement),this.cookieListTreeElement=new O(t,Cr(kr.cookies),Cr(kr.noCookies),Cr(kr.cookiesDescription),"cookies"),this.cookieListTreeElement.setLink("https://go.microsoft.com/fwlink/?linkid=2108231");const u=n.Icon.create("cookie");this.cookieListTreeElement.setLeadingIcons([u]),l.appendChild(this.cookieListTreeElement),this.trustTokensTreeElement=new fr(t),l.appendChild(this.trustTokensTreeElement),this.interestGroupTreeElement=new qe(t),l.appendChild(this.interestGroupTreeElement),this.sharedStorageListTreeElement=new Ti(t),l.appendChild(this.sharedStorageListTreeElement),this.cacheStorageListTreeElement=new ei(t),l.appendChild(this.cacheStorageListTreeElement),this.storageBucketsTreeElement=new or(t),l.appendChild(this.storageBucketsTreeElement);const m=Cr(kr.backgroundServices),w=this.addSidebarSection(m,"background-services");this.backForwardCacheListTreeElement=new z(t),w.appendChild(this.backForwardCacheListTreeElement),this.backgroundFetchTreeElement=new xr(t,"backgroundFetch"),w.appendChild(this.backgroundFetchTreeElement),this.backgroundSyncTreeElement=new xr(t,"backgroundSync"),w.appendChild(this.backgroundSyncTreeElement),this.bounceTrackingMitigationsTreeElement=new ne(t),w.appendChild(this.bounceTrackingMitigationsTreeElement),this.notificationsTreeElement=new xr(t,"notifications"),w.appendChild(this.notificationsTreeElement),this.paymentHandlerTreeElement=new xr(t,"paymentHandler"),w.appendChild(this.paymentHandlerTreeElement),this.periodicBackgroundSyncTreeElement=new xr(t,"periodicBackgroundSync"),w.appendChild(this.periodicBackgroundSyncTreeElement),this.preloadingSummaryTreeElement=new Et(t),w.appendChild(this.preloadingSummaryTreeElement),this.preloadingSummaryTreeElement.constructChildren(t),this.pushMessagingTreeElement=new xr(t,"pushMessaging"),w.appendChild(this.pushMessagingTreeElement),this.reportingApiTreeElement=new Nt(t),w.appendChild(this.reportingApiTreeElement);const v=Cr(kr.frames),S=this.addSidebarSection(v,"frames");this.resourcesSection=new jr(t,S),this.domStorageTreeElements=new Map,this.extensionIdToStorageTreeParentElement=new Map,this.extensionStorageTreeElements=new Map,this.extensionStorageModels=[],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),o.TargetManager.TargetManager.instance().observeTargets(this,{scoped:!0}),o.TargetManager.TargetManager.instance().addModelListener(o.ResourceTreeModel.ResourceTreeModel,o.ResourceTreeModel.Events.FrameNavigated,this.frameNavigated,this,{scoped:!0});this.panel.lastSelectedItemPath().length||s.select(),o.TargetManager.TargetManager.instance().observeModels(ce,{modelAdded:e=>this.domStorageModelAdded(e),modelRemoved:e=>this.domStorageModelRemoved(e)},{scoped:!0}),o.TargetManager.TargetManager.instance().observeModels(ue,{modelAdded:e=>this.extensionStorageModelAdded(e),modelRemoved:e=>this.extensionStorageModelRemoved(e)},{scoped:!0}),o.TargetManager.TargetManager.instance().observeModels(ve,{modelAdded:e=>this.indexedDBModelAdded(e),modelRemoved:e=>this.indexedDBModelRemoved(e)},{scoped:!0}),o.TargetManager.TargetManager.instance().observeModels(Be,{modelAdded:e=>this.interestGroupModelAdded(e),modelRemoved:e=>this.interestGroupModelRemoved(e)},{scoped:!0}),o.TargetManager.TargetManager.instance().observeModels(Ri,{modelAdded:e=>this.sharedStorageModelAdded(e).catch(e=>{console.error(e)}),modelRemoved:e=>this.sharedStorageModelRemoved(e)},{scoped:!0}),o.TargetManager.TargetManager.instance().observeModels(o.StorageBucketsModel.StorageBucketsModel,{modelAdded:e=>this.storageBucketsModelAdded(e),modelRemoved:e=>this.storageBucketsModelRemoved(e)},{scoped:!0}),this.sharedStorageTreeElementDispatcher=new e.ObjectWrapper.ObjectWrapper,this.contentElement.style.contain="layout style"}addSidebarSection(e,t){const i=new c.TreeOutline.TreeElement(e,!0,t);return i.listItemElement.classList.add("storage-group-list-item"),i.setCollapsible(!1),i.selectable=!1,this.sidebarTree.appendChild(i),c.ARIAUtils.markAsHeading(i.listItemElement,3),c.ARIAUtils.setLabel(i.childrenListElement,e),i}targetAdded(e){if(e!==e.outermostTarget())return;this.target=e;const t=e.model(Be);t&&t.addEventListener("InterestGroupAccess",this.interestGroupAccess,this);const i=e.model(o.ResourceTreeModel.ResourceTreeModel);i&&(i.cachedResourcesLoaded()&&this.initialize(),i.addEventListener(o.ResourceTreeModel.Events.CachedResourcesLoaded,this.initialize,this),i.addEventListener(o.ResourceTreeModel.Events.WillLoadCachedResources,this.resetWithFrames,this))}targetRemoved(e){if(e!==this.target)return;delete this.target;const t=e.model(o.ResourceTreeModel.ResourceTreeModel);t&&(t.removeEventListener(o.ResourceTreeModel.Events.CachedResourcesLoaded,this.initialize,this),t.removeEventListener(o.ResourceTreeModel.Events.WillLoadCachedResources,this.resetWithFrames,this));const i=e.model(Be);i&&i.removeEventListener("InterestGroupAccess",this.interestGroupAccess,this),this.resetWithFrames()}focus(){this.sidebarTree.focus()}initialize(){for(const e of o.ResourceTreeModel.ResourceTreeModel.frames())this.addCookieDocument(e);const e=this.target?.model(Be);e&&e.enable(),this.cacheStorageListTreeElement.initialize();const t=this.target?.model(G)||null;this.backgroundFetchTreeElement.initialize(t),this.backgroundSyncTreeElement.initialize(t),this.notificationsTreeElement.initialize(t),this.paymentHandlerTreeElement.initialize(t),this.periodicBackgroundSyncTreeElement.initialize(t),this.pushMessagingTreeElement.initialize(t),this.storageBucketsTreeElement?.initialize();const i=this.target?.model(o.PreloadingModel.PreloadingModel);i&&this.preloadingSummaryTreeElement?.initialize(i)}domStorageModelAdded(e){e.enable(),e.storages().forEach(this.addDOMStorage.bind(this)),e.addEventListener("DOMStorageAdded",this.domStorageAdded,this),e.addEventListener("DOMStorageRemoved",this.domStorageRemoved,this)}domStorageModelRemoved(e){e.storages().forEach(this.removeDOMStorage.bind(this)),e.removeEventListener("DOMStorageAdded",this.domStorageAdded,this),e.removeEventListener("DOMStorageRemoved",this.domStorageRemoved,this)}extensionStorageModelAdded(e){this.extensionStorageModels.push(e),e.enable(),e.storages().forEach(this.addExtensionStorage.bind(this)),e.addEventListener("ExtensionStorageAdded",this.extensionStorageAdded,this),e.addEventListener("ExtensionStorageRemoved",this.extensionStorageRemoved,this)}extensionStorageModelRemoved(e){console.assert(this.extensionStorageModels.includes(e)),this.extensionStorageModels.splice(this.extensionStorageModels.indexOf(e),1),e.storages().forEach(this.removeExtensionStorage.bind(this)),e.removeEventListener("ExtensionStorageAdded",this.extensionStorageAdded,this),e.removeEventListener("ExtensionStorageRemoved",this.extensionStorageRemoved,this)}indexedDBModelAdded(e){e.enable(),this.indexedDBListTreeElement.addIndexedDBForModel(e)}indexedDBModelRemoved(e){this.indexedDBListTreeElement.removeIndexedDBForModel(e)}interestGroupModelAdded(e){e.enable(),e.addEventListener("InterestGroupAccess",this.interestGroupAccess,this)}interestGroupModelRemoved(e){e.disable(),e.removeEventListener("InterestGroupAccess",this.interestGroupAccess,this)}async sharedStorageModelAdded(e){await e.enable();for(const t of e.storages())await this.addSharedStorage(t);e.addEventListener("SharedStorageAdded",this.sharedStorageAdded,this),e.addEventListener("SharedStorageRemoved",this.sharedStorageRemoved,this),e.addEventListener("SharedStorageAccess",this.sharedStorageAccess,this)}sharedStorageModelRemoved(e){e.disable();for(const t of e.storages())this.removeSharedStorage(t);e.removeEventListener("SharedStorageAdded",this.sharedStorageAdded,this),e.removeEventListener("SharedStorageRemoved",this.sharedStorageRemoved,this),e.removeEventListener("SharedStorageAccess",this.sharedStorageAccess,this)}storageBucketsModelAdded(e){e.enable()}storageBucketsModelRemoved(e){this.storageBucketsTreeElement?.removeBucketsForModel(e)}resetWithFrames(){this.resourcesSection.reset(),this.reset()}treeElementAdded(e){const t=this.panel.lastSelectedItemPath();if(!t.length)return;const i=e.data,r=[i];for(let e=i.parent;e&&"itemURL"in e&&e.itemURL;e=e.parent)r.push(e);let s=t.length-1,o=r.length-1;for(;s>=0&&o>=0&&t[s]===r[o].itemURL;)r[o].expanded||(s>0&&r[o].expand(),r[o].selected||r[o].select()),s--,o--}reset(){this.domains={},this.cookieListTreeElement.removeChildren(),this.interestGroupTreeElement.clearEvents()}frameNavigated(e){const t=e.data;t.isOutermostFrame()&&this.reset(),this.addCookieDocument(t)}interestGroupAccess(e){this.interestGroupTreeElement.addEvent(e.data)}addCookieDocument(t){const i=t.unreachableUrl()||t.url,r=e.ParsedURL.ParsedURL.fromString(i);if(!r||"http"!==r.scheme&&"https"!==r.scheme&&"file"!==r.scheme)return;const s=r.securityOrigin();if(!this.domains[s]){this.domains[s]=!0;const e=new Wr(this.panel,t,r);this.cookieListTreeElement.appendChild(e)}}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 Or(this.panel,e);function i(e,t){const i=e.titleAsText().toLocaleLowerCase(),r=t.titleAsText().toLocaleUpperCase();return i.localeCompare(r)}this.domStorageTreeElements.set(e,t),e.isLocalStorage?this.localStorageListTreeElement.appendChild(t,i):this.sessionStorageListTreeElement.appendChild(t,i)}domStorageRemoved(e){const t=e.data;this.removeDOMStorage(t)}removeDOMStorage(e){const t=this.domStorageTreeElements.get(e);if(!t)return;const i=t.selected,r=t.parent;r&&(r.removeChild(t),i&&r.select()),this.domStorageTreeElements.delete(e)}extensionStorageAdded(e){const t=e.data;this.addExtensionStorage(t)}useTreeViewForExtensionStorage(e){return!e.matchesTarget(this.target)}getExtensionStorageAreaParent(e){if(!this.useTreeViewForExtensionStorage(e))return this.extensionStorageListTreeElement;const t=this.extensionIdToStorageTreeParentElement.get(e.extensionId);if(t)return t;const i=new Vr(this.panel,e.extensionId,e.name);return this.extensionIdToStorageTreeParentElement.set(e.extensionId,i),this.extensionStorageListTreeElement?.appendChild(i),i}addExtensionStorage(e){if(this.extensionStorageModels.find(t=>t!==e.model&&t.storageForIdAndArea(e.extensionId,e.storageArea)))return;console.assert(Boolean(this.extensionStorageListTreeElement)),console.assert(!this.extensionStorageTreeElements.get(e.key));const t=new Ur(this.panel,e);this.extensionStorageTreeElements.set(e.key,t),this.getExtensionStorageAreaParent(e)?.appendChild(t,function(e,t){const i=e=>e.storageArea,r=["session","local","sync","managed"];return r.indexOf(i(e))-r.indexOf(i(t))})}extensionStorageRemoved(e){const t=e.data;this.removeExtensionStorage(t)}removeExtensionStorage(e){if(this.extensionStorageModels.find(t=>t.storageForIdAndArea(e.extensionId,e.storageArea)))return;const t=this.extensionStorageTreeElements.get(e.key);if(!t)return;const i=t.selected,r=t.parent;r&&(r.removeChild(t),this.useTreeViewForExtensionStorage(e)&&0===r.childCount()?(this.extensionStorageListTreeElement?.removeChild(r),this.extensionIdToStorageTreeParentElement.delete(e.extensionId)):i&&r.select()),this.extensionStorageTreeElements.delete(e.key)}async sharedStorageAdded(e){await this.addSharedStorage(e.data)}async addSharedStorage(e){const t=await er.createElement(this.panel,e);this.sharedStorageTreeElements.has(e.securityOrigin)||(this.sharedStorageTreeElements.set(e.securityOrigin,t),this.sharedStorageListTreeElement.appendChild(t),this.sharedStorageTreeElementDispatcher.dispatchEventToListeners("SharedStorageTreeElementAdded",{origin:e.securityOrigin}))}sharedStorageRemoved(e){this.removeSharedStorage(e.data)}removeSharedStorage(e){const t=this.sharedStorageTreeElements.get(e.securityOrigin);if(!t)return;const i=t.selected,r=t.parent;r&&(r.removeChild(t),r.setExpandable(r.childCount()>0),i&&r.select()),this.sharedStorageTreeElements.delete(e.securityOrigin)}sharedStorageAccess(e){this.sharedStorageListTreeElement.addEvent(e.data)}async showResource(e,t,i){await this.resourcesSection.revealResource(e,t,i)}showFrame(e){this.resourcesSection.revealAndSelectFrame(e)}showPreloadingRuleSetView(e){this.preloadingSummaryTreeElement&&this.preloadingSummaryTreeElement.expandAndRevealRuleSet(e)}showPreloadingAttemptViewWithFilter(e){this.preloadingSummaryTreeElement&&this.preloadingSummaryTreeElement.expandAndRevealAttempts(e)}onmousemove(e){const t=e.target;if(!t)return;const i=c.UIUtils.enclosingNodeOrSelfWithNodeName(t,"li");if(!i)return;const r=c.TreeOutline.TreeElement.getTreeElementBylistItemNode(i);this.previousHoveredElement!==r&&(this.previousHoveredElement&&(this.previousHoveredElement.hovered=!1,delete this.previousHoveredElement),r instanceof Hr&&(this.previousHoveredElement=r,r.hovered=!0))}onmouseleave(e){this.previousHoveredElement&&(this.previousHoveredElement.hovered=!1,delete this.previousHoveredElement)}}class xr extends F{serviceName;view;model;selectedInternal;constructor(e,t){super(e,te.getUIString(t),!1,r.StringUtilities.toKebabCase(t)),this.serviceName=t,this.selectedInternal=!1,this.view=null,this.model=null;const i=n.Icon.create(this.getIconType());this.setLeadingIcons([i])}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 te(this.serviceName,this.model)),this.showView(this.view),c.Context.Context.instance().setFlavor(te,this.view),t.userMetrics.panelShown("background_service_"+this.serviceName),!1)}}class Rr extends F{view;constructor(e){super(e,i.i18n.lockedString("Service workers"),!1,"service-workers");const t=n.Icon.create("gears");this.setLeadingIcons([t])}get itemURL(){return"service-workers://"}onselect(e){return super.onselect(e),this.view||(this.view=new pi),this.showView(this.view),t.userMetrics.panelShown("service-workers"),!1}}class Mr extends F{view;constructor(t){super(t,Cr(kr.manifest),!0,"manifest");const i=n.Icon.create("document");this.setLeadingIcons([i]),self.onInvokeElement(this.listItemElement,this.onInvoke.bind(this));const r=new c.EmptyWidget.EmptyWidget(Cr(kr.noManifestDetected),Cr(kr.manifestDescription)),s=new c.ReportView.ReportView(Cr(kr.appManifest));this.view=new j(r,s,new e.Throttler.Throttler(1e3)),c.ARIAUtils.setLabel(this.listItemElement,Cr(kr.onInvokeManifestAlert));const o=e=>{this.setExpandable(e)};this.view.addEventListener("ManifestDetected",e=>o(e.data))}get itemURL(){return"manifest://"}onselect(e){return super.onselect(e),this.showView(this.view),t.userMetrics.panelShown("app-manifest"),!1}generateChildren(){const e=this.view.getStaticSections();for(const t of e){const e=t.getTitleElement(),i=t.title(),r=t.getFieldElement(),s=new Lr(this.resourcesPanel,e,i,r,t.jslogContext||"");this.appendChild(s)}}onInvoke(){this.view.getManifestElement().scrollIntoView(),c.ARIAUtils.LiveAnnouncer.alert(Cr(kr.onInvokeAlert,{PH1:this.listItemElement.title}))}showManifestView(){this.showView(this.view)}}class Lr extends F{#me;#we;constructor(e,t,i,r,s){super(e,i,!1,s);const o=n.Icon.create("document");this.setLeadingIcons([o]),this.#me=t,this.#we=r,self.onInvokeElement(this.listItemElement,this.onInvoke.bind(this)),this.listItemElement.addEventListener("keydown",this.onInvokeElementKeydown.bind(this)),c.ARIAUtils.setLabel(this.listItemElement,Cr(kr.beforeInvokeAlert,{PH1:this.listItemElement.title}))}get itemURL(){return"manifest://"+this.title}onInvoke(){this.parent?.showManifestView(),this.#me.scrollIntoView(),c.ARIAUtils.LiveAnnouncer.alert(Cr(kr.onInvokeAlert,{PH1:this.listItemElement.title}))}onInvokeElementKeydown(e){if("Tab"!==e.key||e.shiftKey)return;const t=this.#we.querySelector(".mask-checkbox");let i=this.#we.querySelector('[tabindex="0"]');t?.shadowRoot?i=t.shadowRoot.querySelector("input")||null:i||(i=this.#we.querySelector("devtools-protocol-handlers-view")?.shadowRoot?.querySelector('[tabindex="0"]')||null),i&&(i?.focus(),e.consume(!0))}}class Pr extends F{view;constructor(e){super(e,Cr(kr.storage),!1,"storage");const t=n.Icon.create("database");this.setLeadingIcons([t])}get itemURL(){return"clear-storage://"}onselect(e){return super.onselect(e),this.view||(this.view=new mr),this.showView(this.view),t.userMetrics.panelShown(t.UserMetrics.PanelCodes[t.UserMetrics.PanelCodes.storage]),!1}}class Ar extends O{idbDatabaseTreeElements;storageBucket;constructor(e,t){super(e,Cr(kr.indexeddb),Cr(kr.noIndexeddb),Cr(kr.indexeddbDescription),"indexed-db");const i=n.Icon.create("database");this.setLeadingIcons([i]),this.idbDatabaseTreeElements=[],this.storageBucket=t,this.initialize()}initialize(){o.TargetManager.TargetManager.instance().addModelListener(ve,Se.DatabaseAdded,this.indexedDBAdded,this,{scoped:!0}),o.TargetManager.TargetManager.instance().addModelListener(ve,Se.DatabaseRemoved,this.indexedDBRemoved,this,{scoped:!0}),o.TargetManager.TargetManager.instance().addModelListener(ve,Se.DatabaseLoaded,this.indexedDBLoaded,this,{scoped:!0}),o.TargetManager.TargetManager.instance().addModelListener(ve,Se.IndexedDBContentUpdated,this.indexedDBContentUpdated,this,{scoped:!0}),this.idbDatabaseTreeElements=[];for(const e of o.TargetManager.TargetManager.instance().models(ve,{scoped:!0})){const t=e.databases();for(let i=0;i<t.length;++i)this.addIndexedDB(e,t[i])}}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 c.ContextMenu.ContextMenu(e);t.defaultSection().appendItem(Cr(kr.refreshIndexeddb),this.refreshIndexedDB.bind(this),{jslogContext:"refresh-indexeddb"}),t.show()}refreshIndexedDB(){for(const e of o.TargetManager.TargetManager.instance().models(ve,{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 i=new Dr(this.resourcesPanel,e,t);this.idbDatabaseTreeElements.push(i),this.appendChild(i),e.refreshDatabase(t)}indexedDBRemoved({data:{databaseId:e,model:t}}){const i=this.idbDatabaseTreeElement(t,e);i&&this.removeIDBDatabaseTreeElement(i)}removeIDBDatabaseTreeElement(e){e.clear(),this.removeChild(e),r.ArrayUtilities.removeElement(this.idbDatabaseTreeElements,e),this.setExpandable(this.childCount()>0)}indexedDBLoaded({data:{database:e,model:t,entriesUpdated:i}}){const r=this.idbDatabaseTreeElement(t,e.databaseId);r&&(r.update(e,i),this.indexedDBLoadedForTest())}indexedDBLoadedForTest(){}indexedDBContentUpdated({data:{databaseId:e,objectStoreName:t,model:i}}){const r=this.idbDatabaseTreeElement(i,e);r&&r.indexedDBContentUpdated(t)}idbDatabaseTreeElement(e,t){return this.idbDatabaseTreeElements.find(i=>i.databaseId.equals(t)&&i.model===e)||null}}class Dr extends F{model;databaseId;idbObjectStoreTreeElements;database;view;constructor(e,t,i){super(e,i.name,!1,"indexed-db-database"),this.model=t,this.databaseId=i,this.idbObjectStoreTreeElements=new Map;const r=n.Icon.create("database");this.setLeadingIcons([r]),this.model.addEventListener(Se.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 c.ContextMenu.ContextMenu(e);t.defaultSection().appendItem(Cr(kr.refreshIndexeddb),this.refreshIndexedDB.bind(this),{jslogContext:"refresh-indexeddb"}),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 i=new Set;for(const e of[...this.database.objectStores.keys()].sort()){const r=this.database.objectStores.get(e);if(!r)continue;i.add(r.name);let s=this.idbObjectStoreTreeElements.get(r.name);s||(s=new Br(this.resourcesPanel,this.model,this.databaseId,r),this.idbObjectStoreTreeElements.set(r.name,s),this.appendChild(s)),s.update(r,t)}for(const e of this.idbObjectStoreTreeElements.keys())i.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=Cr(kr.versionSEmpty,{PH1:e}):this.tooltip=Cr(kr.versionS,{PH1:e})}get selectable(){return!!this.database&&super.selectable}onselect(e){return super.onselect(e),!!this.database&&(this.view||(this.view=d.LegacyWrapper.legacyWrapper(c.Widget.VBox,new Le(this.model,this.database),"indexeddb-data")),this.showView(this.view),t.userMetrics.panelShown("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)}}class Br extends F{model;databaseId;idbIndexTreeElements;objectStore;view;constructor(e,t,i,r){super(e,r.name,!1,"indexed-db-object-store"),this.model=t,this.databaseId=i,this.idbIndexTreeElements=new Map,this.objectStore=r,this.view=null;const s=n.Icon.create("table");this.setLeadingIcons([s])}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 c.ContextMenu.ContextMenu(e);t.defaultSection().appendItem(Cr(kr.clear),this.clearObjectStore.bind(this),{jslogContext:"clear"}),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 i=new Set;for(const e of this.objectStore.indexes.values()){i.add(e.name);let r=this.idbIndexTreeElements.get(e.name);r||(r=new Fr(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())i.has(e)||this.indexRemoved(e);for(const[e,t]of this.idbIndexTreeElements.entries())i.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?Cr(kr.keyPathS,{PH1:e}):"";this.objectStore.autoIncrement&&(t+="\n"+i.i18n.lockedString("autoIncrement")),this.tooltip=t}onselect(e){return super.onselect(e),this.view||(this.view=new Pe(this.model,this.databaseId,this.objectStore,null,this.refreshObjectStore.bind(this))),this.showView(this.view),t.userMetrics.panelShown("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()}}class Fr extends F{model;databaseId;objectStore;index;refreshObjectStore;view;constructor(e,t,i,r,s,o){super(e,s.name,!1,"indexed-db"),this.model=t,this.databaseId=i,this.objectStore=r,this.index=s,this.refreshObjectStore=o}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,i){this.objectStore=e,this.index=t,this.view&&i&&this.view.update(this.objectStore,this.index),this.updateTooltip()}updateTooltip(){const e=[],t=this.index.keyPathString;e.push(Cr(kr.keyPathS,{PH1:t})),this.index.unique&&e.push(i.i18n.lockedString("unique")),this.index.multiEntry&&e.push(i.i18n.lockedString("multiEntry")),this.tooltip=e.join("\n")}onselect(e){return super.onselect(e),this.view||(this.view=new Pe(this.model,this.databaseId,this.objectStore,this.index,this.refreshObjectStore)),this.showView(this.view),t.userMetrics.panelShown("indexed-db"),!1}clear(){this.view&&this.view.clear()}}class Or extends F{domStorage;constructor(e,t){super(e,t.storageKey?o.StorageKeyManager.parseStorageKey(t.storageKey).origin:Cr(kr.localFiles),!1,t.isLocalStorage?"local-storage-for-domain":"session-storage-for-domain"),this.domStorage=t;const i=n.Icon.create("table");this.setLeadingIcons([i])}get itemURL(){return"storage://"+this.domStorage.storageKey+"/"+(this.domStorage.isLocalStorage?"local":"session")}onselect(e){return super.onselect(e),t.userMetrics.panelShown("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 c.ContextMenu.ContextMenu(e);t.defaultSection().appendItem(Cr(kr.clear),()=>this.domStorage.clear(),{jslogContext:"clear"}),t.show()}}class Ur extends F{extensionStorage;constructor(e,t){super(e,function(e){switch(e){case"session":return Cr(kr.extensionSessionStorage);case"local":return Cr(kr.extensionLocalStorage);case"sync":return Cr(kr.extensionSyncStorage);case"managed":return Cr(kr.extensionManagedStorage);default:throw new Error(`Unrecognized storage type: ${e}`)}}(t.storageArea),!1,"extension-storage-for-domain"),this.extensionStorage=t;const i=n.Icon.create("table");this.setLeadingIcons([i])}get storageArea(){return this.extensionStorage.storageArea}get itemURL(){return"extension-storage://"+this.extensionStorage.extensionId+"/"+this.extensionStorage.storageArea}onselect(e){return super.onselect(e),this.resourcesPanel.showExtensionStorage(this.extensionStorage),t.userMetrics.panelShown("extension-storage"),!1}onattach(){super.onattach(),this.listItemElement.addEventListener("contextmenu",this.handleContextMenuEvent.bind(this),!0)}handleContextMenuEvent(e){const t=new c.ContextMenu.ContextMenu(e);t.defaultSection().appendItem(Cr(kr.clear),()=>this.extensionStorage.clear(),{jslogContext:"clear"}),t.show()}}class Vr extends F{extensionId;constructor(e,t,i){super(e,i||t,!0,"extension-storage-for-domain"),this.extensionId=t;const r=n.Icon.create("table");this.setLeadingIcons([r])}get itemURL(){return"extension-storage://"+this.extensionId}}class Wr extends F{target;cookieDomainInternal;constructor(e,t,i){super(e,i.securityOrigin()||Cr(kr.localFiles),!1,"cookies-for-frame"),this.target=t.resourceTreeModel().target(),this.cookieDomainInternal=i.securityOrigin(),this.tooltip=Cr(kr.cookiesUsedByFramesFromS,{PH1:this.cookieDomainInternal});const r=n.Icon.create("cookie");a.RelatedIssue.hasThirdPartyPhaseoutCookieIssueForDomain(i.domain())&&(r.name="warning-filled",this.tooltip=Cr(kr.thirdPartyPhaseout,{PH1:this.cookieDomainInternal})),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 c.ContextMenu.ContextMenu(e);t.defaultSection().appendItem(Cr(kr.clear),()=>this.resourcesPanel.clearCookies(this.target,this.cookieDomainInternal),{jslogContext:"clear"}),t.show()}onselect(e){return super.onselect(e),this.resourcesPanel.showCookies(this.target,this.cookieDomainInternal),t.userMetrics.panelShown(t.UserMetrics.PanelCodes[t.UserMetrics.PanelCodes.cookies]),!1}}class Nr extends c.Widget.VBox{emptyWidget;constructor(){super(),this.element.classList.add("storage-view"),this.emptyWidget=new c.EmptyWidget.EmptyWidget("",""),this.emptyWidget.show(this.element)}setText(e){this.emptyWidget.text=e}setHeadline(e){this.emptyWidget.header=e}setLink(e){this.emptyWidget.link=e}}class jr{panel;treeElement;treeElementForFrameId;treeElementForTargetId;constructor(e,t){this.panel=e,this.treeElement=t,c.ARIAUtils.setLabel(this.treeElement.listItemNode,"Resources Section"),this.treeElementForFrameId=new Map,this.treeElementForTargetId=new Map;const i=o.FrameManager.FrameManager.instance();i.addEventListener("FrameAddedToTarget",e=>this.frameAdded(e.data.frame),this),i.addEventListener("FrameRemoved",e=>this.frameDetached(e.data.frameId),this),i.addEventListener("FrameNavigated",e=>this.frameNavigated(e.data.frame),this),i.addEventListener("ResourceAdded",e=>this.resourceAdded(e.data.resource),this),o.TargetManager.TargetManager.instance().addModelListener(o.ChildTargetManager.ChildTargetManager,"TargetCreated",this.windowOpened,this,{scoped:!0}),o.TargetManager.TargetManager.instance().addModelListener(o.ChildTargetManager.ChildTargetManager,"TargetInfoChanged",this.windowChanged,this,{scoped:!0}),o.TargetManager.TargetManager.instance().addModelListener(o.ChildTargetManager.ChildTargetManager,"TargetDestroyed",this.windowDestroyed,this,{scoped:!0}),o.TargetManager.TargetManager.instance().observeTargets(this,{scoped:!0})}initialize(){const e=o.FrameManager.FrameManager.instance();for(const t of e.getAllFrames()){this.treeElementForFrameId.get(t.id)||this.addFrameAndParents(t);const e=t.resourceTreeModel().target().model(o.ChildTargetManager.ChildTargetManager);if(e)for(const t of e.targetInfos())this.windowOpened({data:t})}}targetAdded(e){e.type()!==o.Target.Type.Worker&&e.type()!==o.Target.Type.ServiceWorker||this.workerAdded(e),e.type()===o.Target.Type.FRAME&&e===e.outermostTarget()&&this.initialize()}async workerAdded(e){const t=e.parentTarget();if(!t)return;const i=t.id(),r=this.treeElementForTargetId.get(i),s=e.id();Tr(s);const{targetInfo:o}=await t.targetAgent().invoke_getTargetInfo({targetId:s});r&&o&&r.workerCreated(o)}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,i){if(!this.expandFrame(e.frame()))return;const r=Kr.forResource(e);r&&await r.revealResource(t,i)}revealAndSelectFrame(e){const t=this.treeElementForFrameId.get(e.id);t?.reveal(),t?.select()}frameAdded(e){if(!o.TargetManager.TargetManager.instance().isInScope(e.resourceTreeModel()))return;const t=e.parentFrame(),i=t?this.treeElementForFrameId.get(t.id):this.treeElement;if(!i)return;const r=this.treeElementForFrameId.get(e.id);r&&(this.treeElementForFrameId.delete(e.id),r.parent&&r.parent.removeChild(r));const s=new Hr(this,e);this.treeElementForFrameId.set(e.id,s);const a=e.resourceTreeModel().target().id();this.treeElementForTargetId.get(a)||this.treeElementForTargetId.set(a,s),i.appendChild(s);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(!o.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(!o.TargetManager.TargetManager.instance().isInScope(t.resourceTreeModel()))return;const i=this.treeElementForFrameId.get(t.id);i&&i.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,i=this.treeElementForTargetId.get(t);i&&(i.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()}}class Hr extends F{section;frame;categoryElements;treeElementForResource;treeElementForWindow;treeElementForWorker;view;constructor(e,t){super(e.panel,"",!1,"frame"),this.section=e,this.frame=t,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=n.Icon.create(this.getIconTypeForFrame(e));if(e.unreachableUrl()&&t.classList.add("red-icon"),this.setLeadingIcons([t]),this.invalidateChildren(),this.title!==e.displayName()&&(this.title=e.displayName(),c.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=d.LegacyWrapper.legacyWrapper(c.Widget.Widget,new m.FrameDetailsView.FrameDetailsReportView(this.frame)),this.showView(this.view)):this.view=null,e.isOutermostFrame()){const t=o.TargetManager.TargetManager.instance().targets();for(const i of t)if(i.type()===o.Target.Type.ServiceWorker&&o.TargetManager.TargetManager.instance().isInScope(i)){const t=i.id();Tr(t);const r=e.resourceTreeModel().target().targetAgent(),s=(await r.invoke_getTargetInfo({targetId:t})).targetInfo;this.workerCreated(s)}}}get itemURL(){return this.frame.isOutermostFrame()?"frame://":"frame://"+encodeURI(this.frame.url)}onselect(e){return super.onselect(e),this.view||(this.view=d.LegacyWrapper.legacyWrapper(c.Widget.Widget,new m.FrameDetailsView.FrameDetailsReportView(this.frame))),t.userMetrics.panelShown("frame-details"),this.showView(this.view),this.listItemElement.classList.remove("hovered"),o.OverlayModel.OverlayModel.hideDOMNodeHighlight(),!1}set hovered(e){e?(this.listItemElement.classList.add("hovered"),this.frame.highlight()):(this.listItemElement.classList.remove("hovered"),o.OverlayModel.OverlayModel.hideDOMNodeHighlight())}appendResource(t){const i=t.statusCode();if(i>=301&&i<=303)return;const r=t.resourceType(),s=r.name();let o=r===e.ResourceType.resourceTypes.Document?this:this.categoryElements.get(s);o||(o=new O(this.section.panel,t.resourceType().category().title(),"",Cr(kr.resourceDescription),s,"Frames"===s),this.categoryElements.set(r.name(),o),this.appendChild(o,Hr.presentationOrderCompare));const a=new Kr(this.section.panel,t);o.appendChild(a,Hr.presentationOrderCompare),this.treeElementForResource.set(t.url,a)}windowOpened(e){const t="opened-windows";let i=this.categoryElements.get(t);if(i||(i=new O(this.section.panel,Cr(kr.openedWindows),"",Cr(kr.openedWindowsDescription),t),this.categoryElements.set(t,i),this.appendChild(i,Hr.presentationOrderCompare)),!this.treeElementForWindow.get(e.targetId)){const t=new qr(this.section.panel,e);i.appendChild(t),this.treeElementForWindow.set(e.targetId,t)}}workerCreated(e){const t="service_worker"===e.type?"service-workers":"web-workers",r="service_worker"===e.type?i.i18n.lockedString("Service workers"):Cr(kr.webWorkers);let s=this.categoryElements.get(t);if(s||(s=new O(this.section.panel,r,"",Cr(kr.workerDescription),t),this.categoryElements.set(t,s),this.appendChild(s,Hr.presentationOrderCompare)),!this.treeElementForWorker.get(e.targetId)){const t=new zr(this.section.panel,e);s.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=Hr.presentationOrderCompare){super.appendChild(e,t)}static presentationOrderCompare(e,t){function i(e){return e instanceof O?2:e instanceof Hr?1:3}return i(e)-i(t)||e.titleAsText().localeCompare(t.titleAsText())}}const _r=new WeakMap;class Kr extends F{panel;resource;previewPromise;constructor(e,t){super(e,t.isGenerated?Cr(kr.documentNotAvailable):t.displayName,!1,"frame-resource"),this.panel=e,this.resource=t,this.previewPromise=null,this.tooltip=t.url,_r.set(this.resource,this);const i=n.Icon.create("document","navigator-file-tree-item");i.classList.add("navigator-"+t.resourceType().name()+"-tree-item"),this.setLeadingIcons([i])}static forResource(e){return _r.get(e)}get itemURL(){return this.resource.url}preparePreview(){if(this.previewPromise)return this.previewPromise;const e=l.PreviewFactory.PreviewFactory.createPreview(this.resource,this.resource.mimeType);return this.previewPromise=e.then(e=>e||new c.EmptyWidget.EmptyWidget("",this.resource.url)),this.previewPromise}onselect(e){return super.onselect(e),this.resource.isGenerated?this.panel.showCategoryView("",Cr(kr.documentNotAvailable),Cr(kr.theContentOfThisDocumentHasBeen),null):this.panel.scheduleShowView(this.preparePreview()),t.userMetrics.panelShown("frame-resource"),!1}ondblclick(e){return t.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="copy",!0)}handleContextMenuEvent(e){const t=new c.ContextMenu.ContextMenu(e);t.appendApplicableItems(this.resource),t.show()}async revealResource(e,t){this.revealAndSelect(!0);const i=await this.panel.scheduleShowView(this.preparePreview());i instanceof l.ResourceSourceFrame.ResourceSourceFrame&&"number"==typeof e&&i.revealPosition({lineNumber:e,columnNumber:t},!0)}}class qr extends F{targetInfo;isWindowClosed;view;constructor(e,t){super(e,t.title||Cr(kr.windowWithoutTitle),!1,"window"),this.targetInfo=t,this.isWindowClosed=!1,this.view=null,this.updateIcon(t.canAccessOpener)}updateIcon(e){const t=e?"popup":"frame",i=n.Icon.create(t);this.setLeadingIcons([i])}update(e){e.canAccessOpener!==this.targetInfo.canAccessOpener&&this.updateIcon(e.canAccessOpener),this.targetInfo=e,this.view&&(this.view.setTargetInfo(e),this.view.update())}windowClosed(){this.listItemElement.classList.add("window-closed"),this.isWindowClosed=!0,this.view&&(this.view.setIsWindowClosed(!0),this.view.update())}onselect(e){return super.onselect(e),this.view?this.view.update():this.view=new Ye(this.targetInfo,this.isWindowClosed),this.showView(this.view),t.userMetrics.panelShown("frame-window"),!1}get itemURL(){return this.targetInfo.url}}class zr extends F{targetInfo;view;constructor(e,t){super(e,t.title||t.url||Cr(kr.worker),!1,"worker"),this.targetInfo=t,this.view=null;const i=n.Icon.create("gears","navigator-file-tree-item");this.setLeadingIcons([i])}onselect(e){return super.onselect(e),this.view?this.view.update():this.view=new Ze(this.targetInfo),this.showView(this.view),t.userMetrics.panelShown("frame-worker"),!1}get itemURL(){return this.targetInfo.url}}var Gr=Object.freeze({__proto__:null,AppManifestTreeElement:Mr,ApplicationPanelSidebar:Er,BackgroundServiceTreeElement:xr,ClearStorageTreeElement:Pr,CookieTreeElement:Wr,DOMStorageTreeElement:Or,ExtensionStorageTreeElement:Ur,ExtensionStorageTreeParentElement:Vr,FrameResourceTreeElement:Kr,FrameTreeElement:Hr,IDBDatabaseTreeElement:Dr,IDBIndexTreeElement:Fr,IDBObjectStoreTreeElement:Br,IndexedDBTreeElement:Ar,ManifestChildTreeElement:Lr,ResourcesSection:jr,ServiceWorkersTreeElement:Rr,StorageCategoryView:Nr}),$r=`.cookie-preview-widget{padding:2px 6px}.cookie-preview-widget-header{font-weight:bold;user-select:none;white-space:nowrap;margin-bottom:4px;flex:0 0 18px;display:flex;align-items:center}.cookie-preview-widget-header-label{line-height:18px;flex-shrink:0}.cookie-preview-widget-cookie-value{user-select:text;word-break:break-all;flex:1;overflow:auto}.cookie-preview-widget-toggle{margin-left:12px;font-weight:normal;flex-shrink:1}\n/*# sourceURL=${import.meta.resolve("./cookieItemsView.css")} */`;const Jr={showUrlDecoded:"Show URL-decoded",noCookieSelected:"No cookie selected",selectACookieToPreviewItsValue:"Select a cookie to preview its value",onlyShowCookiesWithAnIssue:"Only show cookies with an issue",onlyShowCookiesWhichHaveAn:"Only show cookies that have an associated issue",clearFilteredCookies:"Clear filtered cookies",clearAllCookies:"Clear all cookies",numberOfCookiesShownInTableS:"Number of cookies shown in table: {PH1}"},Xr=i.i18n.registerUIStrings("panels/application/CookieItemsView.ts",Jr),Qr=i.i18n.getLocalizedString.bind(void 0,Xr);class Yr extends c.Widget.VBox{cookie;showDecodedSetting;toggle;value;constructor(){super({jslog:`${u.section("cookie-preview")}`}),this.registerRequiredCSS($r),this.setMinimumSize(230,45),this.cookie=null,this.showDecodedSetting=e.Settings.Settings.instance().createSetting("cookie-view-show-decoded",!1);const t=document.createElement("div");t.classList.add("cookie-preview-widget-header");const i=document.createElement("span");i.classList.add("cookie-preview-widget-header-label"),i.textContent="Cookie Value",t.appendChild(i),this.contentElement.appendChild(t);const r=c.UIUtils.CheckboxLabel.create(Qr(Jr.showUrlDecoded),this.showDecodedSetting.get(),void 0,"show-url-decoded");r.title=Qr(Jr.showUrlDecoded),r.classList.add("cookie-preview-widget-toggle"),r.addEventListener("click",()=>this.showDecoded(!this.showDecodedSetting.get())),t.appendChild(r),this.toggle=r;const s=document.createElement("div");s.classList.add("cookie-preview-widget-cookie-value"),s.textContent="",s.addEventListener("dblclick",this.handleDblClickOnCookieValue.bind(this)),this.value=s,this.contentElement.classList.add("cookie-preview-widget"),this.contentElement.appendChild(s)}showDecoded(e){this.cookie&&(this.showDecodedSetting.set(e),this.toggle.checked=e,this.updatePreview())}updatePreview(){this.cookie?this.value.textContent=this.showDecodedSetting.get()?decodeURIComponent(this.cookie.value()):this.cookie.value():this.value.textContent=""}setCookie(e){this.cookie=e,this.updatePreview()}handleDblClickOnCookieValue(e){e.preventDefault();const t=document.createRange();t.selectNode(this.value);const i=window.getSelection();i&&(i.removeAllRanges(),i.addRange(t))}}class Zr extends c.Widget.VBox{model;cookieDomain;cookiesTable;splitWidget;previewPanel;previewWidget;emptyWidget;onlyIssuesFilterUI;allCookies;shownCookies;selectedCookie;#ae;constructor(e,t){super({jslog:`${u.pane("cookies-data")}`}),this.registerRequiredCSS($r),this.element.classList.add("storage-view"),this.model=e,this.cookieDomain=t,this.#ae=new Oi,this.#ae.element.classList.add("flex-none"),this.#ae.show(this.element),this.cookiesTable=new D.CookiesTable.CookiesTable(!1,this.saveCookie.bind(this),this.refreshItems.bind(this),this.handleCookieSelected.bind(this),this.deleteCookie.bind(this)),this.cookiesTable.setMinimumSize(0,50),this.splitWidget=new c.SplitWidget.SplitWidget(!1,!0,"cookie-items-split-view-state"),this.splitWidget.show(this.element),this.previewPanel=new c.Widget.VBox,this.previewPanel.element.setAttribute("jslog",`${u.pane("preview").track({resize:!0})}`);const i=this.previewPanel.element.createChild("div","preview-panel-resizer");this.splitWidget.setMainWidget(this.cookiesTable),this.splitWidget.setSidebarWidget(this.previewPanel),this.splitWidget.installResizer(i),this.previewWidget=new Yr,this.emptyWidget=new c.EmptyWidget.EmptyWidget(Qr(Jr.noCookieSelected),Qr(Jr.selectACookieToPreviewItsValue)),this.emptyWidget.show(this.previewPanel.contentElement),this.onlyIssuesFilterUI=new c.Toolbar.ToolbarCheckbox(Qr(Jr.onlyShowCookiesWithAnIssue),Qr(Jr.onlyShowCookiesWhichHaveAn),()=>{this.updateWithCookies(this.allCookies)},"only-show-cookies-with-issues"),this.#ae.appendToolbarItem(this.onlyIssuesFilterUI),this.allCookies=[],this.shownCookies=[],this.selectedCookie=null,this.setCookiesDomain(e,t),this.#ae.addEventListener("DeleteSelected",this.deleteSelectedItem,this),this.#ae.addEventListener("DeleteAll",this.deleteAllItems,this),this.#ae.addEventListener("Refresh",this.refreshItems,this)}setCookiesDomain(e,t){this.model.removeEventListener("CookieListUpdated",this.onCookieListUpdate,this),this.model=e,this.cookieDomain=t,this.refreshItems(),this.model.addEventListener("CookieListUpdated",this.onCookieListUpdate,this)}wasShown(){super.wasShown(),this.refreshItems()}showPreview(e){e!==this.selectedCookie&&(this.selectedCookie=e,e?(this.emptyWidget.detach(),this.previewWidget.setCookie(e),this.previewWidget.show(this.previewPanel.contentElement)):(this.previewWidget.detach(),this.emptyWidget.show(this.previewPanel.contentElement)))}handleCookieSelected(){const e=this.cookiesTable.selectedCookie();this.#ae.setCanDeleteSelected(Boolean(e)),this.showPreview(e)}async saveCookie(e,t){return t&&e.key()!==t.key()&&await this.model.deleteCookie(t),await this.model.saveCookie(e)}deleteCookie(e,t){this.model.deleteCookie(e).then(t)}updateWithCookies(t){this.allCookies=t;const i=e.ParsedURL.ParsedURL.fromString(this.cookieDomain),r=i?i.host:"";this.cookiesTable.setCookieDomain(r),this.shownCookies=this.filter(t,e=>`${e.name()} ${e.value()} ${e.domain()}`),this.#ae.hasFilter()?(this.#ae.setDeleteAllTitle(Qr(Jr.clearFilteredCookies)),this.#ae.setDeleteAllGlyph("filter-clear")):(this.#ae.setDeleteAllTitle(Qr(Jr.clearAllCookies)),this.#ae.setDeleteAllGlyph("clear-list")),this.cookiesTable.setCookies(this.shownCookies,this.model.getCookieToBlockedReasonsMap()),c.ARIAUtils.LiveAnnouncer.alert(Qr(Jr.numberOfCookiesShownInTableS,{PH1:this.shownCookies.length})),this.#ae.setCanFilter(!0),this.#ae.setCanDeleteAll(this.shownCookies.length>0),this.#ae.setCanDeleteSelected(Boolean(this.cookiesTable.selectedCookie())),this.cookiesTable.selectedCookie()||this.showPreview(null)}filter(e,t){return e.filter(e=>this.#ae.filterRegex?.test(t(e))??!0).filter(e=>!this.onlyIssuesFilterUI.checked()||e instanceof o.Cookie.Cookie&&a.RelatedIssue.hasIssues(e))}deleteAllItems(){this.showPreview(null),this.model.deleteCookies(this.shownCookies)}deleteSelectedItem(){const e=this.cookiesTable.selectedCookie();e&&(this.showPreview(null),this.model.deleteCookie(e))}onCookieListUpdate(){this.model.getCookiesForDomain(this.cookieDomain).then(this.updateWithCookies.bind(this))}refreshItems(){this.model.getCookiesForDomain(this.cookieDomain,!0).then(this.updateWithCookies.bind(this))}}var es=Object.freeze({__proto__:null,CookieItemsView:Zr});const ts={domStorageItems:"DOM Storage Items",domStorageItemsCleared:"DOM Storage Items cleared",domStorageItemDeleted:"The storage item was deleted."},is=i.i18n.registerUIStrings("panels/application/DOMStorageItemsView.ts",ts),rs=i.i18n.getLocalizedString.bind(void 0,is);class ss extends Gi{domStorage;eventListeners;constructor(e){super(rs(ts.domStorageItems),"dom-storage",!0),this.domStorage=e,e.storageKey&&this.toolbar?.setStorageKey(e.storageKey),this.element.classList.add("storage-view","table"),this.showPreview(null,null),this.eventListeners=[],this.setStorage(e)}createPreview(t,i){const r=`${this.domStorage.isLocalStorage?"localstorage":"sessionstorage"}://${t}`,s=E.StaticContentProvider.StaticContentProvider.fromString(r,e.ResourceType.resourceTypes.XHR,i);return l.PreviewFactory.PreviewFactory.createPreview(s,"text/plain")}setStorage(t){e.EventTarget.removeEventListeners(this.eventListeners),this.domStorage=t;const i=t.isLocalStorage?"local-storage-data":"session-storage-data";this.element.setAttribute("jslog",`${u.pane().context(i)}`),t.storageKey&&this.toolbar?.setStorageKey(t.storageKey),this.eventListeners=[this.domStorage.addEventListener("DOMStorageItemsCleared",this.domStorageItemsCleared,this),this.domStorage.addEventListener("DOMStorageItemRemoved",this.domStorageItemRemoved,this),this.domStorage.addEventListener("DOMStorageItemAdded",this.domStorageItemAdded,this),this.domStorage.addEventListener("DOMStorageItemUpdated",this.domStorageItemUpdated,this)],this.refreshItems()}domStorageItemsCleared(){this.isShowing()&&this.itemsCleared()}itemsCleared(){super.itemsCleared(),c.ARIAUtils.LiveAnnouncer.alert(rs(ts.domStorageItemsCleared))}domStorageItemRemoved(e){this.isShowing()&&this.itemRemoved(e.data.key)}itemRemoved(e){super.itemRemoved(e),c.ARIAUtils.LiveAnnouncer.alert(rs(ts.domStorageItemDeleted))}domStorageItemAdded(e){this.isShowing()&&this.itemAdded(e.data.key,e.data.value)}domStorageItemUpdated(e){this.isShowing()&&this.itemUpdated(e.data.key,e.data.value)}refreshItems(){this.#ve()}async#ve(){const e=await this.domStorage.getItems();if(!e||!this.toolbar)return;const{filterRegex:t}=this.toolbar,i=e.map(e=>({key:e[0],value:e[1]})).filter(e=>t?.test(`${e.key} ${e.value}`)??!0);this.showItems(i)}deleteAllItems(){this.domStorage.clear(),this.domStorageItemsCleared()}removeItem(e){this.domStorage?.removeItem(e)}setItem(e,t){this.domStorage?.setItem(e,t)}}var os=Object.freeze({__proto__:null,DOMStorageItemsView:ss});const as={extensionStorageItems:"Extension Storage Items",extensionStorageItemsCleared:"Extension Storage Items cleared"},ns=i.i18n.registerUIStrings("panels/application/ExtensionStorageItemsView.ts",as),ds=i.i18n.getLocalizedString.bind(void 0,ns);class ls extends Gi{#Se;extensionStorageItemsDispatcher;constructor(t,i){super(ds(as.extensionStorageItems),"extension-storage",!0,i),this.element.setAttribute("jslog",`${u.pane().context("extension-storage-data")}`),this.element.classList.add("storage-view","table"),this.extensionStorageItemsDispatcher=new e.ObjectWrapper.ObjectWrapper,this.setStorage(t)}get#be(){return"managed"!==this.#Se.storageArea}parseValue(e){try{return B.parse(e)}catch{return e}}removeItem(e){this.#Se.removeItem(e).then(()=>{this.refreshItems()})}setItem(e,t){this.#Se.setItem(e,this.parseValue(t)).then(()=>{this.refreshItems(),this.extensionStorageItemsDispatcher.dispatchEventToListeners("ItemEdited")})}createPreview(t,i){const r="extension-storage://"+this.#Se.extensionId+"/"+this.#Se.storageArea+"/preview/"+t,s=E.StaticContentProvider.StaticContentProvider.fromString(r,e.ResourceType.resourceTypes.XHR,i);return l.PreviewFactory.PreviewFactory.createPreview(s,"text/plain")}setStorage(e){this.#Se=e,this.editable=this.#be,this.refreshItems()}#fe(){this.isShowing()&&(this.itemsCleared(),c.ARIAUtils.LiveAnnouncer.alert(ds(as.extensionStorageItemsCleared)))}deleteSelectedItem(){this.#be&&this.deleteSelectedItem()}refreshItems(){this.#ve()}async#ve(){const e=await this.#Se.getItems();if(!e||!this.toolbar)return;const t=Object.entries(e).map(([e,t])=>({key:e,value:"string"==typeof t?t:JSON.stringify(t)})).filter(e=>this.toolbar?.filterRegex?.test(`${e.key} ${e.value}`)??!0);this.showItems(t),this.extensionStorageItemsDispatcher.dispatchEventToListeners("ItemsRefreshed")}deleteAllItems(){this.#be&&this.#Se.clear().then(()=>{this.#fe()},()=>{throw new Error("Unable to clear storage.")})}}var cs=Object.freeze({__proto__:null,ExtensionStorageItemsView:ls}),hs=`.resources-toolbar{border-top:1px solid var(--sys-color-divider);background-color:var(--sys-color-cdt-base-container)}.top-resources-toolbar{border-bottom:1px solid var(--sys-color-divider);background-color:var(--sys-color-cdt-base-container)}.resources.panel .status{float:right;height:16px;margin-top:1px;margin-left:4px;line-height:1em}.storage-view{display:flex;overflow:hidden}.storage-view .data-grid:not(.inline){border:none;flex:auto}.storage-view .storage-table-error{color:var(--sys-color-error);font-size:24px;font-weight:bold;padding:10px;display:flex;align-items:center;justify-content:center}.storage-view.query{padding:2px 0;overflow:hidden auto}.storage-view .filter-bar{border-top:none;border-bottom:1px solid var(--sys-color-divider)}.database-query-group-messages{overflow-y:auto}.database-query-prompt-container{position:relative;padding:1px 22px 1px 24px;min-height:16px}.database-query-prompt{white-space:pre-wrap}.prompt-icon{position:absolute;display:block;left:7px;top:9px;margin-top:-7px;user-select:none}.database-user-query .prompt-icon{margin-top:-10px}.database-query-prompt-container .prompt-icon{top:6px}.database-user-query{position:relative;border-bottom:1px solid var(--sys-color-divider);padding:1px 22px 1px 24px;min-height:16px;flex-shrink:0}.database-user-query:focus-visible{background-color:var(--sys-color-state-focus-highlight)}.database-query-text{color:var(--sys-color-primary-bright);user-select:text}.database-query-result{position:relative;padding:1px 22px;min-height:16px;margin-left:-22px;padding-right:0}.database-query-result.error{color:var(--sys-color-token-property-special);user-select:text}.database-query-result.error .prompt-icon{margin-top:-9px}.resources-sidebar{padding:0;overflow-x:auto;background-color:var(--sys-color-cdt-base-container)}.database-query-result:focus-visible{outline:1px solid var(--legacy-accent-color-hover)}\n/*# sourceURL=${import.meta.resolve("./resourcesPanel.css")} */`;let gs;class ps extends c.Panel.PanelWithSidebar{resourcesLastSelectedItemSetting;visibleView;pendingViewPromise;categoryView;storageViews;storageViewToolbar;domStorageView;extensionStorageView;cookieView;sidebar;constructor(){super("resources"),this.registerRequiredCSS(hs),this.resourcesLastSelectedItemSetting=e.Settings.Settings.instance().createSetting("resources-last-selected-element-path",[]),this.visibleView=null,this.pendingViewPromise=null,this.categoryView=null;const t=new c.Widget.VBox;t.setMinimumSize(100,0),this.storageViews=t.element.createChild("div","vbox flex-auto"),this.storageViewToolbar=t.element.createChild("devtools-toolbar","resources-toolbar"),this.splitWidget().setMainWidget(t),this.domStorageView=null,this.extensionStorageView=null,this.cookieView=null,this.sidebar=new Er(this),this.sidebar.show(this.panelSidebarElement())}static instance(e={forceNew:null}){const{forceNew:t}=e;return gs&&!t||(gs=new ps),gs}static shouldCloseOnReset(e){return[l.ResourceSourceFrame.ResourceSourceFrame,l.ImageView.ImageView,l.FontView.FontView,Oi].some(t=>e instanceof t)}static async showAndGetSidebar(){return await c.ViewManager.ViewManager.instance().showView("resources"),ps.instance().sidebar}focus(){this.sidebar.focus()}lastSelectedItemPath(){return this.resourcesLastSelectedItemSetting.get()}setLastSelectedItemPath(e){this.resourcesLastSelectedItemSetting.set(e)}resetView(){this.visibleView&&ps.shouldCloseOnReset(this.visibleView)&&this.showView(null)}showView(e){this.pendingViewPromise=null,this.visibleView!==e&&(this.visibleView&&this.visibleView.detach(),e&&e.show(this.storageViews),this.visibleView=e,this.storageViewToolbar.removeToolbarItems(),this.storageViewToolbar.classList.toggle("hidden",!0),e instanceof c.View.SimpleView&&e.toolbarItems().then(e=>{e.map(e=>this.storageViewToolbar.appendToolbarItem(e)),this.storageViewToolbar.classList.toggle("hidden",!e.length)}))}async scheduleShowView(e){this.pendingViewPromise=e;const t=await e;return this.pendingViewPromise!==e?null:(this.showView(t),t)}showCategoryView(e,t,i,s){this.categoryView||(this.categoryView=new Nr),this.categoryView.element.setAttribute("jslog",`${u.pane().context(r.StringUtilities.toKebabCase(e))}`),this.categoryView.setHeadline(t),this.categoryView.setText(i),this.categoryView.setLink(s),this.showView(this.categoryView)}showDOMStorage(e){e&&(this.domStorageView?this.domStorageView.setStorage(e):this.domStorageView=new ss(e),this.showView(this.domStorageView))}showExtensionStorage(e){e&&(this.extensionStorageView?this.extensionStorageView.setStorage(e):this.extensionStorageView=new ls(e),this.showView(this.extensionStorageView))}showCookies(e,t){const i=e.model(o.CookieModel.CookieModel);i&&(this.cookieView?this.cookieView.setCookiesDomain(i,t):this.cookieView=new Zr(i,t),this.showView(this.cookieView))}clearCookies(e,t){const i=e.model(o.CookieModel.CookieModel);i&&i.clear(t).then(()=>{this.cookieView&&this.cookieView.refreshItems()})}}var us=Object.freeze({__proto__:null,AttemptViewWithFilterRevealer:class{async reveal(e){(await ps.showAndGetSidebar()).showPreloadingAttemptViewWithFilter(e)}},FrameDetailsRevealer:class{async reveal(e){(await ps.showAndGetSidebar()).showFrame(e)}},ResourceRevealer:class{async reveal(e){const t=await ps.showAndGetSidebar();await t.showResource(e)}},ResourcesPanel:ps,RuleSetViewRevealer:class{async reveal(e){(await ps.showAndGetSidebar()).showPreloadingRuleSetView(e)}}});export{H as AppManifestView,Gr as ApplicationPanelSidebar,J as BackgroundServiceModel,re as BackgroundServiceView,de as BounceTrackingMitigationsTreeElement,es as CookieItemsView,os as DOMStorageItemsView,ge as DOMStorageModel,cs as ExtensionStorageItemsView,me as ExtensionStorageModel,Ce as IndexedDBModel,De as IndexedDBViews,Fe as InterestGroupStorageModel,je as InterestGroupStorageView,ze as InterestGroupTreeElement,$i as KeyValueStorageItemsView,et as OpenedWindowDetailsView,Mt as PreloadingTreeElement,yt as PreloadingView,Ot as ReportingApiView,us as ResourcesPanel,Xt as ServiceWorkerCacheViews,di as ServiceWorkerUpdateCycleView,mi as ServiceWorkersView,yi as SharedStorageEventsView,Zi as SharedStorageItemsView,Ei as SharedStorageListTreeElement,Mi as SharedStorageModel,tr as SharedStorageTreeElement,nr as StorageBucketsTreeElement,Ui as StorageItemsToolbar,wr as StorageView,yr as TrustTokensTreeElement};
//# sourceMappingURL=application.js.map