chrome-devtools-frontend 1.0.1035409 → 1.0.1035963

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1265,8 +1265,10 @@ grd_files_debug_sources = [
1265
1265
  "front_end/panels/sources/WatchExpressionsSidebarPane.js",
1266
1266
  "front_end/panels/sources/breakpointEditDialog.css.js",
1267
1267
  "front_end/panels/sources/callStackSidebarPane.css.js",
1268
+ "front_end/panels/sources/components/BreakpointsView.js",
1268
1269
  "front_end/panels/sources/components/HeadersView.css.js",
1269
1270
  "front_end/panels/sources/components/HeadersView.js",
1271
+ "front_end/panels/sources/components/breakpointsView.css.js",
1270
1272
  "front_end/panels/sources/debuggerPausedMessage.css.js",
1271
1273
  "front_end/panels/sources/dialog.css.js",
1272
1274
  "front_end/panels/sources/javaScriptBreakpointsSidebarPane.css.js",
package/docs/workflows.md CHANGED
@@ -44,8 +44,7 @@ gn gen out/fast-build --args='devtools_skip_typecheck=true'
44
44
  To update to latest tip of tree version:
45
45
 
46
46
  ```bash
47
- git fetch origin
48
- git checkout origin/main
47
+ git fetch origin; git checkout origin/main # or, alternatively: git rebase-update
49
48
  gclient sync
50
49
  ```
51
50
 
@@ -68,7 +67,7 @@ Open DevTools via F12 or Ctrl+Shift+J on Windows/Linux or Cmd+Option+I on Mac.
68
67
 
69
68
  If you get errors along the line of `Uncaught TypeError: Cannot read property 'setInspectedTabId'` you probably specified an incorrect path - the path has to be absolute. On Mac and Linux, the file url will start with __three__ slashes: `file:///Users/...`.
70
69
 
71
- Tip: You can inspect DevTools with DevTools by undocking DevTools and then opening a second instance of DevTools (F12 on Windows/Linux, Cmd+Option+I on Mac).
70
+ **Tip**: You can inspect DevTools with DevTools by undocking DevTools and then opening a second instance of DevTools (see keyboard shortcut above).
72
71
 
73
72
  ##### Running from remote URL
74
73
 
@@ -82,7 +81,7 @@ Then point to that web server when starting Chromium, for example:
82
81
  <path-to-devtools-frontend>/third_party/chrome/chrome-<platform>/chrome --custom-devtools-frontend=http://localhost:8000/
83
82
  ```
84
83
 
85
- Open DevTools via F12 on Windows/Linux or Cmd+Option+I on Mac.
84
+ Open DevTools via F12 or Ctrl+Shift+J on Windows/Linux or Cmd+Option+I on Mac.
86
85
 
87
86
  ##### Running in hosted mode
88
87
 
@@ -117,7 +116,7 @@ gclient sync
117
116
  Then, disable `gclient sync` for DevTools frontend inside of Chromium by editing `.gclient` config. From `chromium/src/`, run
118
117
 
119
118
  ```bash
120
- vim $(gclient root)/.gclient
119
+ vim "$(gclient root)/.gclient"
121
120
  ```
122
121
 
123
122
  In the `custom_deps` section, insert this line:
@@ -3272,6 +3272,9 @@
3272
3272
  "panels/application/components/Prerender2.ts | CrossOriginRedirect": {
3273
3273
  "message": "Attempted to prerender a URL which redirected to a cross-origin URL. Currently prerendering cross-origin pages is disallowed."
3274
3274
  },
3275
+ "panels/application/components/Prerender2.ts | DataSaverEnabled": {
3276
+ "message": "Data saver enabled"
3277
+ },
3275
3278
  "panels/application/components/Prerender2.ts | Destroyed": {
3276
3279
  "message": "A prerendered page was abandoned for unknown reasons."
3277
3280
  },
@@ -3284,9 +3287,6 @@
3284
3287
  "panels/application/components/Prerender2.ts | EmbedderTriggeredAndCrossOriginRedirected": {
3285
3288
  "message": "Prerendering triggered by Chrome internal (e.g., Omnibox prerendering) is is canceled because the navigation is redirected to another cross-origin page."
3286
3289
  },
3287
- "panels/application/components/Prerender2.ts | EmbedderTriggeredAndDestroyed": {
3288
- "message": "Prerendering triggered by Chrome internal (e.g., Omnibox prerendering) is is destroyed in the destructor."
3289
- },
3290
3290
  "panels/application/components/Prerender2.ts | EmbedderTriggeredAndSameOriginRedirected": {
3291
3291
  "message": "Prerendering triggered by Chrome internal (e.g., Omnibox prerendering) is canceled because the navigation is redirected to another same-origin page."
3292
3292
  },
@@ -9725,6 +9725,9 @@
9725
9725
  "panels/settings/SettingsScreen.ts | restoreDefaultsAndReload": {
9726
9726
  "message": "Restore defaults and reload"
9727
9727
  },
9728
+ "panels/settings/SettingsScreen.ts | sendFeedback": {
9729
+ "message": "Send feedback"
9730
+ },
9728
9731
  "panels/settings/SettingsScreen.ts | settings": {
9729
9732
  "message": "Settings"
9730
9733
  },
@@ -9830,6 +9833,18 @@
9830
9833
  "panels/sources/CallStackSidebarPane.ts | showMore": {
9831
9834
  "message": "Show more"
9832
9835
  },
9836
+ "panels/sources/components/BreakpointsView.ts | breakpointHit": {
9837
+ "message": "{PH1} breakpoint hit"
9838
+ },
9839
+ "panels/sources/components/BreakpointsView.ts | checked": {
9840
+ "message": "checked"
9841
+ },
9842
+ "panels/sources/components/BreakpointsView.ts | indeterminate": {
9843
+ "message": "mixed"
9844
+ },
9845
+ "panels/sources/components/BreakpointsView.ts | unchecked": {
9846
+ "message": "unchecked"
9847
+ },
9833
9848
  "panels/sources/components/HeadersView.ts | addHeader": {
9834
9849
  "message": "Add a header"
9835
9850
  },
@@ -10460,9 +10475,6 @@
10460
10475
  "panels/sources/sources-meta.ts | watch": {
10461
10476
  "message": "Watch"
10462
10477
  },
10463
- "panels/sources/SourcesNavigator.ts | authoredDescription": {
10464
- "message": "Group files by Authored/Deployed"
10465
- },
10466
10478
  "panels/sources/SourcesNavigator.ts | clearConfiguration": {
10467
10479
  "message": "Clear configuration"
10468
10480
  },
@@ -10541,6 +10553,9 @@
10541
10553
  "panels/sources/SourcesPanel.ts | hideDebugger": {
10542
10554
  "message": "Hide debugger"
10543
10555
  },
10556
+ "panels/sources/SourcesPanel.ts | hideIgnoreListed": {
10557
+ "message": "Hide ignore-listed sources"
10558
+ },
10544
10559
  "panels/sources/SourcesPanel.ts | hideNavigator": {
10545
10560
  "message": "Hide navigator"
10546
10561
  },
@@ -3272,6 +3272,9 @@
3272
3272
  "panels/application/components/Prerender2.ts | CrossOriginRedirect": {
3273
3273
  "message": "Ât́t̂ém̂ṕt̂éd̂ t́ô ṕr̂ér̂én̂d́êŕ â ÚR̂Ĺ ŵh́îćĥ ŕêd́îŕêćt̂éd̂ t́ô á ĉŕôśŝ-ór̂íĝín̂ ÚR̂Ĺ. Ĉúr̂ŕêńt̂ĺŷ ṕr̂ér̂én̂d́êŕîńĝ ćr̂óŝś-ôŕîǵîń p̂áĝéŝ íŝ d́îśâĺl̂óŵéd̂."
3274
3274
  },
3275
+ "panels/application/components/Prerender2.ts | DataSaverEnabled": {
3276
+ "message": "D̂át̂á ŝáv̂ér̂ én̂áb̂ĺêd́"
3277
+ },
3275
3278
  "panels/application/components/Prerender2.ts | Destroyed": {
3276
3279
  "message": "Â ṕr̂ér̂én̂d́êŕêd́ p̂áĝé ŵáŝ áb̂án̂d́ôńêd́ f̂ór̂ ún̂ḱn̂óŵń r̂éâśôńŝ."
3277
3280
  },
@@ -3284,9 +3287,6 @@
3284
3287
  "panels/application/components/Prerender2.ts | EmbedderTriggeredAndCrossOriginRedirected": {
3285
3288
  "message": "P̂ŕêŕêńd̂ér̂ín̂ǵ t̂ŕîǵĝér̂éd̂ b́ŷ Ćĥŕôḿê ín̂t́êŕn̂ál̂ (é.ĝ., Óm̂ńîb́ôx́ p̂ŕêŕêńd̂ér̂ín̂ǵ) îś îś ĉán̂ćêĺêd́ b̂éĉáûśê t́ĥé n̂áv̂íĝát̂íôń îś r̂éd̂ír̂éĉt́êd́ t̂ó âńôt́ĥér̂ ćr̂óŝś-ôŕîǵîń p̂áĝé."
3286
3289
  },
3287
- "panels/application/components/Prerender2.ts | EmbedderTriggeredAndDestroyed": {
3288
- "message": "P̂ŕêŕêńd̂ér̂ín̂ǵ t̂ŕîǵĝér̂éd̂ b́ŷ Ćĥŕôḿê ín̂t́êŕn̂ál̂ (é.ĝ., Óm̂ńîb́ôx́ p̂ŕêŕêńd̂ér̂ín̂ǵ) îś îś d̂éŝt́r̂óŷéd̂ ín̂ t́ĥé d̂éŝt́r̂úĉt́ôŕ."
3289
- },
3290
3290
  "panels/application/components/Prerender2.ts | EmbedderTriggeredAndSameOriginRedirected": {
3291
3291
  "message": "P̂ŕêŕêńd̂ér̂ín̂ǵ t̂ŕîǵĝér̂éd̂ b́ŷ Ćĥŕôḿê ín̂t́êŕn̂ál̂ (é.ĝ., Óm̂ńîb́ôx́ p̂ŕêŕêńd̂ér̂ín̂ǵ) îś ĉán̂ćêĺêd́ b̂éĉáûśê t́ĥé n̂áv̂íĝát̂íôń îś r̂éd̂ír̂éĉt́êd́ t̂ó âńôt́ĥér̂ śâḿê-ór̂íĝín̂ ṕâǵê."
3292
3292
  },
@@ -9725,6 +9725,9 @@
9725
9725
  "panels/settings/SettingsScreen.ts | restoreDefaultsAndReload": {
9726
9726
  "message": "R̂éŝt́ôŕê d́êf́âúl̂t́ŝ án̂d́ r̂él̂óâd́"
9727
9727
  },
9728
+ "panels/settings/SettingsScreen.ts | sendFeedback": {
9729
+ "message": "Ŝén̂d́ f̂éêd́b̂áĉḱ"
9730
+ },
9728
9731
  "panels/settings/SettingsScreen.ts | settings": {
9729
9732
  "message": "Ŝét̂t́îńĝś"
9730
9733
  },
@@ -9830,6 +9833,18 @@
9830
9833
  "panels/sources/CallStackSidebarPane.ts | showMore": {
9831
9834
  "message": "Ŝh́ôẃ m̂ór̂é"
9832
9835
  },
9836
+ "panels/sources/components/BreakpointsView.ts | breakpointHit": {
9837
+ "message": "{PH1} b̂ŕêák̂ṕôín̂t́ ĥít̂"
9838
+ },
9839
+ "panels/sources/components/BreakpointsView.ts | checked": {
9840
+ "message": "ĉh́êćk̂éd̂"
9841
+ },
9842
+ "panels/sources/components/BreakpointsView.ts | indeterminate": {
9843
+ "message": "m̂íx̂éd̂"
9844
+ },
9845
+ "panels/sources/components/BreakpointsView.ts | unchecked": {
9846
+ "message": "ûńĉh́êćk̂éd̂"
9847
+ },
9833
9848
  "panels/sources/components/HeadersView.ts | addHeader": {
9834
9849
  "message": "Âd́d̂ á ĥéâd́êŕ"
9835
9850
  },
@@ -10460,9 +10475,6 @@
10460
10475
  "panels/sources/sources-meta.ts | watch": {
10461
10476
  "message": "Ŵát̂ćĥ"
10462
10477
  },
10463
- "panels/sources/SourcesNavigator.ts | authoredDescription": {
10464
- "message": "Ĝŕôúp̂ f́îĺêś b̂ý Âút̂h́ôŕêd́/D̂ép̂ĺôýêd́"
10465
- },
10466
10478
  "panels/sources/SourcesNavigator.ts | clearConfiguration": {
10467
10479
  "message": "Ĉĺêár̂ ćôńf̂íĝúr̂át̂íôń"
10468
10480
  },
@@ -10541,6 +10553,9 @@
10541
10553
  "panels/sources/SourcesPanel.ts | hideDebugger": {
10542
10554
  "message": "Ĥíd̂é d̂éb̂úĝǵêŕ"
10543
10555
  },
10556
+ "panels/sources/SourcesPanel.ts | hideIgnoreListed": {
10557
+ "message": "Ĥíd̂é îǵn̂ór̂é-l̂íŝt́êd́ ŝóûŕĉéŝ"
10558
+ },
10544
10559
  "panels/sources/SourcesPanel.ts | hideNavigator": {
10545
10560
  "message": "Ĥíd̂é n̂áv̂íĝát̂ór̂"
10546
10561
  },
@@ -152,13 +152,16 @@ export class ExperimentsSupport {
152
152
  self.localStorage['experiments'] = JSON.stringify(value);
153
153
  }
154
154
 
155
- register(experimentName: string, experimentTitle: string, unstable?: boolean, docLink?: string): void {
155
+ register(
156
+ experimentName: string, experimentTitle: string, unstable?: boolean, docLink?: string,
157
+ feedbackLink?: string): void {
156
158
  Platform.DCHECK(
157
159
  () => !this.#experimentNames.has(experimentName), 'Duplicate registration of experiment ' + experimentName);
158
160
  this.#experimentNames.add(experimentName);
159
161
  this.#experiments.push(new Experiment(
160
162
  this, experimentName, experimentTitle, Boolean(unstable),
161
- docLink as Platform.DevToolsPath.UrlString ?? Platform.DevToolsPath.EmptyUrlString));
163
+ docLink as Platform.DevToolsPath.UrlString ?? Platform.DevToolsPath.EmptyUrlString,
164
+ feedbackLink as Platform.DevToolsPath.UrlString ?? Platform.DevToolsPath.EmptyUrlString));
162
165
  }
163
166
 
164
167
  isEnabled(experimentName: string): boolean {
@@ -257,14 +260,16 @@ export class Experiment {
257
260
  title: string;
258
261
  unstable: boolean;
259
262
  docLink?: Platform.DevToolsPath.UrlString;
263
+ readonly feedbackLink?: Platform.DevToolsPath.UrlString;
260
264
  readonly #experiments: ExperimentsSupport;
261
265
  constructor(
262
266
  experiments: ExperimentsSupport, name: string, title: string, unstable: boolean,
263
- docLink: Platform.DevToolsPath.UrlString) {
267
+ docLink: Platform.DevToolsPath.UrlString, feedbackLink: Platform.DevToolsPath.UrlString) {
264
268
  this.name = name;
265
269
  this.title = title;
266
270
  this.unstable = unstable;
267
271
  this.docLink = docLink;
272
+ this.feedbackLink = feedbackLink;
268
273
  this.#experiments = experiments;
269
274
  }
270
275
 
@@ -341,7 +341,8 @@ export class MainImpl {
341
341
  // Full Accessibility Tree
342
342
  Root.Runtime.experiments.register(
343
343
  'fullAccessibilityTree', 'Enable full accessibility tree view in the Elements panel', undefined,
344
- 'https://developer.chrome.com/blog/new-in-devtools-90/#accesibility-tree');
344
+ 'https://developer.chrome.com/blog/new-in-devtools-90/#accesibility-tree',
345
+ 'https://g.co/devtools/a11y-tree-feedback');
345
346
 
346
347
  // Font Editor
347
348
  Root.Runtime.experiments.register(
@@ -373,9 +374,8 @@ export class MainImpl {
373
374
 
374
375
  // CSS <length> authoring tool.
375
376
  Root.Runtime.experiments.register(
376
- 'cssTypeComponentLength',
377
- 'Enable CSS <length> authoring tool in the Styles pane (https://g.co/devtools/length-feedback)', undefined,
378
- 'https://developer.chrome.com/blog/new-in-devtools-96/#length');
377
+ 'cssTypeComponentLength', 'Enable CSS <length> authoring tool in the Styles pane', undefined,
378
+ 'https://developer.chrome.com/blog/new-in-devtools-96/#length', 'https://g.co/devtools/length-feedback');
379
379
 
380
380
  // Display precise changes in the Changes tab.
381
381
  Root.Runtime.experiments.register(
@@ -407,7 +407,8 @@ export class MainImpl {
407
407
 
408
408
  // Change grouping of sources panel to use Authored/Deployed trees
409
409
  Root.Runtime.experiments.register(
410
- Root.Runtime.ExperimentName.AUTHORED_DEPLOYED_GROUPING, 'Group sources into Authored and Deployed trees');
410
+ Root.Runtime.ExperimentName.AUTHORED_DEPLOYED_GROUPING, 'Group sources into Authored and Deployed trees',
411
+ undefined, 'https://goo.gle/authored-deployed', 'https://goo.gle/authored-deployed-feedback');
411
412
 
412
413
  // Hide third party code (as determined by ignore lists or source maps)
413
414
  Root.Runtime.experiments.register(
@@ -554,7 +554,7 @@ inspectorBackend.registerEnum("Page.AdFrameExplanation", {ParentIsAd: "ParentIsA
554
554
  inspectorBackend.registerEnum("Page.SecureContextType", {Secure: "Secure", SecureLocalhost: "SecureLocalhost", InsecureScheme: "InsecureScheme", InsecureAncestor: "InsecureAncestor"});
555
555
  inspectorBackend.registerEnum("Page.CrossOriginIsolatedContextType", {Isolated: "Isolated", NotIsolated: "NotIsolated", NotIsolatedFeatureDisabled: "NotIsolatedFeatureDisabled"});
556
556
  inspectorBackend.registerEnum("Page.GatedAPIFeatures", {SharedArrayBuffers: "SharedArrayBuffers", SharedArrayBuffersTransferAllowed: "SharedArrayBuffersTransferAllowed", PerformanceMeasureMemory: "PerformanceMeasureMemory", PerformanceProfile: "PerformanceProfile"});
557
- inspectorBackend.registerEnum("Page.PermissionsPolicyFeature", {Accelerometer: "accelerometer", AmbientLightSensor: "ambient-light-sensor", AttributionReporting: "attribution-reporting", Autoplay: "autoplay", Bluetooth: "bluetooth", BrowsingTopics: "browsing-topics", Camera: "camera", ChDpr: "ch-dpr", ChDeviceMemory: "ch-device-memory", ChDownlink: "ch-downlink", ChEct: "ch-ect", ChPrefersColorScheme: "ch-prefers-color-scheme", ChRtt: "ch-rtt", ChSaveData: "ch-save-data", ChUa: "ch-ua", ChUaArch: "ch-ua-arch", ChUaBitness: "ch-ua-bitness", ChUaPlatform: "ch-ua-platform", ChUaModel: "ch-ua-model", ChUaMobile: "ch-ua-mobile", ChUaFull: "ch-ua-full", ChUaFullVersion: "ch-ua-full-version", ChUaFullVersionList: "ch-ua-full-version-list", ChUaPlatformVersion: "ch-ua-platform-version", ChUaReduced: "ch-ua-reduced", ChUaWow64: "ch-ua-wow64", ChViewportHeight: "ch-viewport-height", ChViewportWidth: "ch-viewport-width", ChWidth: "ch-width", ClipboardRead: "clipboard-read", ClipboardWrite: "clipboard-write", CrossOriginIsolated: "cross-origin-isolated", DirectSockets: "direct-sockets", DisplayCapture: "display-capture", DocumentDomain: "document-domain", EncryptedMedia: "encrypted-media", ExecutionWhileOutOfViewport: "execution-while-out-of-viewport", ExecutionWhileNotRendered: "execution-while-not-rendered", FederatedCredentials: "federated-credentials", FocusWithoutUserActivation: "focus-without-user-activation", Fullscreen: "fullscreen", Frobulate: "frobulate", Gamepad: "gamepad", Geolocation: "geolocation", Gyroscope: "gyroscope", Hid: "hid", IdleDetection: "idle-detection", InterestCohort: "interest-cohort", JoinAdInterestGroup: "join-ad-interest-group", KeyboardMap: "keyboard-map", LocalFonts: "local-fonts", Magnetometer: "magnetometer", Microphone: "microphone", Midi: "midi", OtpCredentials: "otp-credentials", Payment: "payment", PictureInPicture: "picture-in-picture", PublickeyCredentialsGet: "publickey-credentials-get", RunAdAuction: "run-ad-auction", ScreenWakeLock: "screen-wake-lock", Serial: "serial", SharedAutofill: "shared-autofill", SharedStorage: "shared-storage", StorageAccessAPI: "storage-access-api", SyncXhr: "sync-xhr", TrustTokenRedemption: "trust-token-redemption", Usb: "usb", VerticalScroll: "vertical-scroll", WebShare: "web-share", WindowPlacement: "window-placement", XrSpatialTracking: "xr-spatial-tracking"});
557
+ inspectorBackend.registerEnum("Page.PermissionsPolicyFeature", {Accelerometer: "accelerometer", AmbientLightSensor: "ambient-light-sensor", AttributionReporting: "attribution-reporting", Autoplay: "autoplay", Bluetooth: "bluetooth", BrowsingTopics: "browsing-topics", Camera: "camera", ChDpr: "ch-dpr", ChDeviceMemory: "ch-device-memory", ChDownlink: "ch-downlink", ChEct: "ch-ect", ChPrefersColorScheme: "ch-prefers-color-scheme", ChRtt: "ch-rtt", ChSaveData: "ch-save-data", ChUa: "ch-ua", ChUaArch: "ch-ua-arch", ChUaBitness: "ch-ua-bitness", ChUaPlatform: "ch-ua-platform", ChUaModel: "ch-ua-model", ChUaMobile: "ch-ua-mobile", ChUaFull: "ch-ua-full", ChUaFullVersion: "ch-ua-full-version", ChUaFullVersionList: "ch-ua-full-version-list", ChUaPlatformVersion: "ch-ua-platform-version", ChUaReduced: "ch-ua-reduced", ChUaWow64: "ch-ua-wow64", ChViewportHeight: "ch-viewport-height", ChViewportWidth: "ch-viewport-width", ChWidth: "ch-width", ClipboardRead: "clipboard-read", ClipboardWrite: "clipboard-write", CrossOriginIsolated: "cross-origin-isolated", DirectSockets: "direct-sockets", DisplayCapture: "display-capture", DocumentDomain: "document-domain", EncryptedMedia: "encrypted-media", ExecutionWhileOutOfViewport: "execution-while-out-of-viewport", ExecutionWhileNotRendered: "execution-while-not-rendered", FederatedCredentials: "federated-credentials", FocusWithoutUserActivation: "focus-without-user-activation", Fullscreen: "fullscreen", Frobulate: "frobulate", Gamepad: "gamepad", Geolocation: "geolocation", Gyroscope: "gyroscope", Hid: "hid", IdleDetection: "idle-detection", InterestCohort: "interest-cohort", JoinAdInterestGroup: "join-ad-interest-group", KeyboardMap: "keyboard-map", LocalFonts: "local-fonts", Magnetometer: "magnetometer", Microphone: "microphone", Midi: "midi", OtpCredentials: "otp-credentials", Payment: "payment", PictureInPicture: "picture-in-picture", PublickeyCredentialsGet: "publickey-credentials-get", RunAdAuction: "run-ad-auction", ScreenWakeLock: "screen-wake-lock", Serial: "serial", SharedAutofill: "shared-autofill", SharedStorage: "shared-storage", StorageAccessAPI: "storage-access-api", SyncXhr: "sync-xhr", TrustTokenRedemption: "trust-token-redemption", Unload: "unload", Usb: "usb", VerticalScroll: "vertical-scroll", WebShare: "web-share", WindowPlacement: "window-placement", XrSpatialTracking: "xr-spatial-tracking"});
558
558
  inspectorBackend.registerEnum("Page.PermissionsPolicyBlockReason", {Header: "Header", IframeAttribute: "IframeAttribute", InFencedFrameTree: "InFencedFrameTree", InIsolatedApp: "InIsolatedApp"});
559
559
  inspectorBackend.registerEnum("Page.OriginTrialTokenStatus", {Success: "Success", NotSupported: "NotSupported", Insecure: "Insecure", Expired: "Expired", WrongOrigin: "WrongOrigin", InvalidSignature: "InvalidSignature", Malformed: "Malformed", WrongVersion: "WrongVersion", FeatureDisabled: "FeatureDisabled", TokenDisabled: "TokenDisabled", FeatureDisabledForUser: "FeatureDisabledForUser", UnknownTrial: "UnknownTrial"});
560
560
  inspectorBackend.registerEnum("Page.OriginTrialStatus", {Enabled: "Enabled", ValidTokenNotProvided: "ValidTokenNotProvided", OSNotSupported: "OSNotSupported", TrialNotAllowed: "TrialNotAllowed"});
@@ -567,7 +567,7 @@ inspectorBackend.registerEnum("Page.ReferrerPolicy", {NoReferrer: "noReferrer",
567
567
  inspectorBackend.registerEnum("Page.NavigationType", {Navigation: "Navigation", BackForwardCacheRestore: "BackForwardCacheRestore"});
568
568
  inspectorBackend.registerEnum("Page.BackForwardCacheNotRestoredReason", {NotPrimaryMainFrame: "NotPrimaryMainFrame", BackForwardCacheDisabled: "BackForwardCacheDisabled", RelatedActiveContentsExist: "RelatedActiveContentsExist", HTTPStatusNotOK: "HTTPStatusNotOK", SchemeNotHTTPOrHTTPS: "SchemeNotHTTPOrHTTPS", Loading: "Loading", WasGrantedMediaAccess: "WasGrantedMediaAccess", DisableForRenderFrameHostCalled: "DisableForRenderFrameHostCalled", DomainNotAllowed: "DomainNotAllowed", HTTPMethodNotGET: "HTTPMethodNotGET", SubframeIsNavigating: "SubframeIsNavigating", Timeout: "Timeout", CacheLimit: "CacheLimit", JavaScriptExecution: "JavaScriptExecution", RendererProcessKilled: "RendererProcessKilled", RendererProcessCrashed: "RendererProcessCrashed", SchedulerTrackedFeatureUsed: "SchedulerTrackedFeatureUsed", ConflictingBrowsingInstance: "ConflictingBrowsingInstance", CacheFlushed: "CacheFlushed", ServiceWorkerVersionActivation: "ServiceWorkerVersionActivation", SessionRestored: "SessionRestored", ServiceWorkerPostMessage: "ServiceWorkerPostMessage", EnteredBackForwardCacheBeforeServiceWorkerHostAdded: "EnteredBackForwardCacheBeforeServiceWorkerHostAdded", RenderFrameHostReused_SameSite: "RenderFrameHostReused_SameSite", RenderFrameHostReused_CrossSite: "RenderFrameHostReused_CrossSite", ServiceWorkerClaim: "ServiceWorkerClaim", IgnoreEventAndEvict: "IgnoreEventAndEvict", HaveInnerContents: "HaveInnerContents", TimeoutPuttingInCache: "TimeoutPuttingInCache", BackForwardCacheDisabledByLowMemory: "BackForwardCacheDisabledByLowMemory", BackForwardCacheDisabledByCommandLine: "BackForwardCacheDisabledByCommandLine", NetworkRequestDatAPIpeDrainedAsBytesConsumer: "NetworkRequestDatapipeDrainedAsBytesConsumer", NetworkRequestRedirected: "NetworkRequestRedirected", NetworkRequestTimeout: "NetworkRequestTimeout", NetworkExceedsBufferLimit: "NetworkExceedsBufferLimit", NavigationCancelledWhileRestoring: "NavigationCancelledWhileRestoring", NotMostRecentNavigationEntry: "NotMostRecentNavigationEntry", BackForwardCacheDisabledForPrerender: "BackForwardCacheDisabledForPrerender", UserAgentOverrideDiffers: "UserAgentOverrideDiffers", ForegroundCacheLimit: "ForegroundCacheLimit", BrowsingInstanceNotSwapped: "BrowsingInstanceNotSwapped", BackForwardCacheDisabledForDelegate: "BackForwardCacheDisabledForDelegate", UnloadHandlerExistsInMainFrame: "UnloadHandlerExistsInMainFrame", UnloadHandlerExistsInSubFrame: "UnloadHandlerExistsInSubFrame", ServiceWorkerUnregistration: "ServiceWorkerUnregistration", CacheControlNoStore: "CacheControlNoStore", CacheControlNoStoreCookieModified: "CacheControlNoStoreCookieModified", CacheControlNoStoreHTTPOnlyCookieModified: "CacheControlNoStoreHTTPOnlyCookieModified", NoResponseHead: "NoResponseHead", Unknown: "Unknown", ActivationNavigationsDisallowedForBug1234857: "ActivationNavigationsDisallowedForBug1234857", ErrorDocument: "ErrorDocument", FencedFramesEmbedder: "FencedFramesEmbedder", WebSocket: "WebSocket", WebTransport: "WebTransport", WebRTC: "WebRTC", MainResourceHasCacheControlNoStore: "MainResourceHasCacheControlNoStore", MainResourceHasCacheControlNoCache: "MainResourceHasCacheControlNoCache", SubresourceHasCacheControlNoStore: "SubresourceHasCacheControlNoStore", SubresourceHasCacheControlNoCache: "SubresourceHasCacheControlNoCache", ContainsPlugins: "ContainsPlugins", DocumentLoaded: "DocumentLoaded", DedicatedWorkerOrWorklet: "DedicatedWorkerOrWorklet", OutstandingNetworkRequestOthers: "OutstandingNetworkRequestOthers", OutstandingIndexedDBTransaction: "OutstandingIndexedDBTransaction", RequestedNotificationsPermission: "RequestedNotificationsPermission", RequestedMIDIPermission: "RequestedMIDIPermission", RequestedAudioCapturePermission: "RequestedAudioCapturePermission", RequestedVideoCapturePermission: "RequestedVideoCapturePermission", RequestedBackForwardCacheBlockedSensors: "RequestedBackForwardCacheBlockedSensors", RequestedBackgroundWorkPermission: "RequestedBackgroundWorkPermission", BroadcastChannel: "BroadcastChannel", IndexedDBConnection: "IndexedDBConnection", WebXR: "WebXR", SharedWorker: "SharedWorker", WebLocks: "WebLocks", WebHID: "WebHID", WebShare: "WebShare", RequestedStorageAccessGrant: "RequestedStorageAccessGrant", WebNfc: "WebNfc", OutstandingNetworkRequestFetch: "OutstandingNetworkRequestFetch", OutstandingNetworkRequestXHR: "OutstandingNetworkRequestXHR", AppBanner: "AppBanner", Printing: "Printing", WebDatabase: "WebDatabase", PictureInPicture: "PictureInPicture", Portal: "Portal", SpeechRecognizer: "SpeechRecognizer", IdleManager: "IdleManager", PaymentManager: "PaymentManager", SpeechSynthesis: "SpeechSynthesis", KeyboardLock: "KeyboardLock", WebOTPService: "WebOTPService", OutstandingNetworkRequestDirectSocket: "OutstandingNetworkRequestDirectSocket", InjectedJavascript: "InjectedJavascript", InjectedStyleSheet: "InjectedStyleSheet", Dummy: "Dummy", ContentSecurityHandler: "ContentSecurityHandler", ContentWebAuthenticationAPI: "ContentWebAuthenticationAPI", ContentFileChooser: "ContentFileChooser", ContentSerial: "ContentSerial", ContentFileSystemAccess: "ContentFileSystemAccess", ContentMediaDevicesDispatcherHost: "ContentMediaDevicesDispatcherHost", ContentWebBluetooth: "ContentWebBluetooth", ContentWebUSB: "ContentWebUSB", ContentMediaSessionService: "ContentMediaSessionService", ContentScreenReader: "ContentScreenReader", EmbedderPopupBlockerTabHelper: "EmbedderPopupBlockerTabHelper", EmbedderSafeBrowsingTriggeredPopupBlocker: "EmbedderSafeBrowsingTriggeredPopupBlocker", EmbedderSafeBrowsingThreatDetails: "EmbedderSafeBrowsingThreatDetails", EmbedderAppBannerManager: "EmbedderAppBannerManager", EmbedderDomDistillerViewerSource: "EmbedderDomDistillerViewerSource", EmbedderDomDistillerSelfDeletingRequestDelegate: "EmbedderDomDistillerSelfDeletingRequestDelegate", EmbedderOomInterventionTabHelper: "EmbedderOomInterventionTabHelper", EmbedderOfflinePage: "EmbedderOfflinePage", EmbedderChromePasswordManagerClientBindCredentialManager: "EmbedderChromePasswordManagerClientBindCredentialManager", EmbedderPermissionRequestManager: "EmbedderPermissionRequestManager", EmbedderModalDialog: "EmbedderModalDialog", EmbedderExtensions: "EmbedderExtensions", EmbedderExtensionMessaging: "EmbedderExtensionMessaging", EmbedderExtensionMessagingForOpenPort: "EmbedderExtensionMessagingForOpenPort", EmbedderExtensionSentMessageToCachedFrame: "EmbedderExtensionSentMessageToCachedFrame"});
569
569
  inspectorBackend.registerEnum("Page.BackForwardCacheNotRestoredReasonType", {SupportPending: "SupportPending", PageSupportNeeded: "PageSupportNeeded", Circumstantial: "Circumstantial"});
570
- inspectorBackend.registerEnum("Page.PrerenderFinalStatus", {Activated: "Activated", Destroyed: "Destroyed", LowEndDevice: "LowEndDevice", CrossOriginRedirect: "CrossOriginRedirect", CrossOriginNavigation: "CrossOriginNavigation", InvalidSchemeRedirect: "InvalidSchemeRedirect", InvalidSchemeNavigation: "InvalidSchemeNavigation", InProgressNavigation: "InProgressNavigation", NavigationRequestBlockedByCsp: "NavigationRequestBlockedByCsp", MainFrameNavigation: "MainFrameNavigation", MojoBinderPolicy: "MojoBinderPolicy", RendererProcessCrashed: "RendererProcessCrashed", RendererProcessKilled: "RendererProcessKilled", Download: "Download", TriggerDestroyed: "TriggerDestroyed", NavigationNotCommitted: "NavigationNotCommitted", NavigationBadHttpStatus: "NavigationBadHttpStatus", ClientCertRequested: "ClientCertRequested", NavigationRequestNetworkError: "NavigationRequestNetworkError", MaxNumOfRunningPrerendersExceeded: "MaxNumOfRunningPrerendersExceeded", CancelAllHostsForTesting: "CancelAllHostsForTesting", DidFailLoad: "DidFailLoad", Stop: "Stop", SslCertificateError: "SslCertificateError", LoginAuthRequested: "LoginAuthRequested", UaChangeRequiresReload: "UaChangeRequiresReload", BlockedByClient: "BlockedByClient", AudioOutputDeviceRequested: "AudioOutputDeviceRequested", MixedContent: "MixedContent", TriggerBackgrounded: "TriggerBackgrounded", EmbedderTriggeredAndSameOriginRedirected: "EmbedderTriggeredAndSameOriginRedirected", EmbedderTriggeredAndCrossOriginRedirected: "EmbedderTriggeredAndCrossOriginRedirected", EmbedderTriggeredAndDestroyed: "EmbedderTriggeredAndDestroyed", MemoryLimitExceeded: "MemoryLimitExceeded", FailToGetMemoryUsage: "FailToGetMemoryUsage"});
570
+ inspectorBackend.registerEnum("Page.PrerenderFinalStatus", {Activated: "Activated", Destroyed: "Destroyed", LowEndDevice: "LowEndDevice", CrossOriginRedirect: "CrossOriginRedirect", CrossOriginNavigation: "CrossOriginNavigation", InvalidSchemeRedirect: "InvalidSchemeRedirect", InvalidSchemeNavigation: "InvalidSchemeNavigation", InProgressNavigation: "InProgressNavigation", NavigationRequestBlockedByCsp: "NavigationRequestBlockedByCsp", MainFrameNavigation: "MainFrameNavigation", MojoBinderPolicy: "MojoBinderPolicy", RendererProcessCrashed: "RendererProcessCrashed", RendererProcessKilled: "RendererProcessKilled", Download: "Download", TriggerDestroyed: "TriggerDestroyed", NavigationNotCommitted: "NavigationNotCommitted", NavigationBadHttpStatus: "NavigationBadHttpStatus", ClientCertRequested: "ClientCertRequested", NavigationRequestNetworkError: "NavigationRequestNetworkError", MaxNumOfRunningPrerendersExceeded: "MaxNumOfRunningPrerendersExceeded", CancelAllHostsForTesting: "CancelAllHostsForTesting", DidFailLoad: "DidFailLoad", Stop: "Stop", SslCertificateError: "SslCertificateError", LoginAuthRequested: "LoginAuthRequested", UaChangeRequiresReload: "UaChangeRequiresReload", BlockedByClient: "BlockedByClient", AudioOutputDeviceRequested: "AudioOutputDeviceRequested", MixedContent: "MixedContent", TriggerBackgrounded: "TriggerBackgrounded", EmbedderTriggeredAndSameOriginRedirected: "EmbedderTriggeredAndSameOriginRedirected", EmbedderTriggeredAndCrossOriginRedirected: "EmbedderTriggeredAndCrossOriginRedirected", MemoryLimitExceeded: "MemoryLimitExceeded", FailToGetMemoryUsage: "FailToGetMemoryUsage", DataSaverEnabled: "DataSaverEnabled"});
571
571
  inspectorBackend.registerEvent("Page.domContentEventFired", ["timestamp"]);
572
572
  inspectorBackend.registerEnum("Page.FileChooserOpenedEventMode", {SelectSingle: "selectSingle", SelectMultiple: "selectMultiple"});
573
573
  inspectorBackend.registerEvent("Page.fileChooserOpened", ["frameId", "mode", "backendNodeId"]);
@@ -90,10 +90,6 @@ export const generatedProperties = [
90
90
  "inherited": true,
91
91
  "name": "-webkit-highlight"
92
92
  },
93
- {
94
- "inherited": true,
95
- "name": "-webkit-hyphenate-character"
96
- },
97
93
  {
98
94
  "inherited": true,
99
95
  "keywords": [
@@ -1912,6 +1908,10 @@ export const generatedProperties = [
1912
1908
  ],
1913
1909
  "name": "height"
1914
1910
  },
1911
+ {
1912
+ "inherited": true,
1913
+ "name": "hyphenate-character"
1914
+ },
1915
1915
  {
1916
1916
  "inherited": true,
1917
1917
  "keywords": [
@@ -5591,6 +5591,10 @@ export const generatedAliasesFor = new Map([
5591
5591
  "-webkit-font-feature-settings",
5592
5592
  "font-feature-settings"
5593
5593
  ],
5594
+ [
5595
+ "-webkit-hyphenate-character",
5596
+ "hyphenate-character"
5597
+ ],
5594
5598
  [
5595
5599
  "-webkit-justify-content",
5596
5600
  "justify-content"
@@ -2135,6 +2135,11 @@ export namespace CSS {
2135
2135
  * The entire property range in the enclosing style declaration (if available).
2136
2136
  */
2137
2137
  range?: SourceRange;
2138
+ /**
2139
+ * Parsed longhand components of this property if it is a shorthand.
2140
+ * This field will be empty if the given property is not a shorthand.
2141
+ */
2142
+ longhandProperties?: CSSProperty[];
2138
2143
  }
2139
2144
 
2140
2145
  export const enum CSSMediaSource {
@@ -10377,6 +10382,7 @@ export namespace Page {
10377
10382
  StorageAccessAPI = 'storage-access-api',
10378
10383
  SyncXhr = 'sync-xhr',
10379
10384
  TrustTokenRedemption = 'trust-token-redemption',
10385
+ Unload = 'unload',
10380
10386
  Usb = 'usb',
10381
10387
  VerticalScroll = 'vertical-scroll',
10382
10388
  WebShare = 'web-share',
@@ -11154,9 +11160,9 @@ export namespace Page {
11154
11160
  TriggerBackgrounded = 'TriggerBackgrounded',
11155
11161
  EmbedderTriggeredAndSameOriginRedirected = 'EmbedderTriggeredAndSameOriginRedirected',
11156
11162
  EmbedderTriggeredAndCrossOriginRedirected = 'EmbedderTriggeredAndCrossOriginRedirected',
11157
- EmbedderTriggeredAndDestroyed = 'EmbedderTriggeredAndDestroyed',
11158
11163
  MemoryLimitExceeded = 'MemoryLimitExceeded',
11159
11164
  FailToGetMemoryUsage = 'FailToGetMemoryUsage',
11165
+ DataSaverEnabled = 'DataSaverEnabled',
11160
11166
  }
11161
11167
 
11162
11168
  export interface AddScriptToEvaluateOnLoadRequest {
@@ -139,12 +139,6 @@ const UIStrings = {
139
139
  */
140
140
  EmbedderTriggeredAndCrossOriginRedirected:
141
141
  'Prerendering triggered by Chrome internal (e.g., Omnibox prerendering) is is canceled because the navigation is redirected to another cross-origin page.',
142
- /**
143
- *@description Description text for Prerender2 cancellation status EmbedderTriggeredAndDestroyed.
144
- */
145
- EmbedderTriggeredAndDestroyed:
146
- 'Prerendering triggered by Chrome internal (e.g., Omnibox prerendering) is is destroyed in the destructor.',
147
-
148
142
  /**
149
143
  *@description Description text for Prerender2 cancellation status MemoryLimitExceeded.
150
144
  */
@@ -154,6 +148,10 @@ const UIStrings = {
154
148
  *@description Description text for Prerender2 cancellation status FailToGetMemoryUsage.
155
149
  */
156
150
  FailToGetMemoryUsage: 'Fail to get memory usage',
151
+ /**
152
+ *@description Description text for Prerender2 cancellation status DataSaverEnabled.
153
+ */
154
+ DataSaverEnabled: 'Data saver enabled',
157
155
  };
158
156
 
159
157
  const str_ = i18n.i18n.registerUIStrings('panels/application/components/Prerender2.ts', UIStrings);
@@ -194,7 +192,7 @@ export const Prerender2ReasonDescription = {
194
192
  {name: i18nLazyString(UIStrings.EmbedderTriggeredAndSameOriginRedirected)},
195
193
  'EmbedderTriggeredAndCrossOriginRedirected':
196
194
  {name: i18nLazyString(UIStrings.EmbedderTriggeredAndCrossOriginRedirected)},
197
- 'EmbedderTriggeredAndDestroyed': {name: i18nLazyString(UIStrings.EmbedderTriggeredAndDestroyed)},
198
195
  'MemoryLimitExceeded': {name: i18nLazyString(UIStrings.MemoryLimitExceeded)},
199
196
  'FailToGetMemoryUsage': {name: i18nLazyString(UIStrings.FailToGetMemoryUsage)},
197
+ 'DataSaverEnabled': {name: i18nLazyString(UIStrings.DataSaverEnabled)},
200
198
  };
@@ -93,6 +93,10 @@ const UIStrings = {
93
93
  *@description Text that is usually a hyperlink to more documentation
94
94
  */
95
95
  learnMore: 'Learn more',
96
+ /**
97
+ *@description Text that is usually a hyperlink to a feedback form
98
+ */
99
+ sendFeedback: 'Send feedback',
96
100
  };
97
101
  const str_ = i18n.i18n.registerUIStrings('panels/settings/SettingsScreen.ts', UIStrings);
98
102
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
@@ -489,6 +493,14 @@ export class ExperimentsSettingsTab extends SettingsTab {
489
493
  p.appendChild(link);
490
494
  }
491
495
 
496
+ if (experiment.feedbackLink) {
497
+ const link = UI.XLink.XLink.create(experiment.feedbackLink);
498
+ link.textContent = i18nString(UIStrings.sendFeedback);
499
+ link.classList.add('feedback-link');
500
+
501
+ p.appendChild(link);
502
+ }
503
+
492
504
  return p;
493
505
  }
494
506
  }
@@ -199,6 +199,12 @@ label {
199
199
  color: var(--color-text-secondary);
200
200
  }
201
201
 
202
+ .settings-experiment .feedback-link {
203
+ color: var(--color-primary);
204
+ text-decoration-line: underline;
205
+ margin-left: 4px;
206
+ }
207
+
202
208
  @media (forced-colors: active) {
203
209
  .settings-window-title {
204
210
  color: canvastext;
@@ -1034,17 +1034,10 @@ export class NavigatorView extends UI.Widget.VBox implements SDK.TargetManager.O
1034
1034
  }
1035
1035
  }
1036
1036
 
1037
- /**
1038
- * Subclasses can override to listen to grouping changes.
1039
- */
1040
- onGroupingChanged(): void {
1041
- }
1042
-
1043
1037
  private groupingChanged(): void {
1044
1038
  this.reset(true);
1045
1039
  this.initGrouping();
1046
1040
  // Reset the workspace to repopulate filesystem folders.
1047
- this.onGroupingChanged();
1048
1041
  this.resetWorkspace(Workspace.Workspace.WorkspaceImpl.instance());
1049
1042
  this.workspaceInternal.uiSourceCodes().forEach(this.addUISourceCode.bind(this));
1050
1043
  }
@@ -317,16 +317,17 @@ export class OpenLinearMemoryInspector extends UI.Widget.VBox implements UI.Cont
317
317
  if (target instanceof ObjectUI.ObjectPropertiesSection.ObjectPropertyTreeElement) {
318
318
  if (target.property && target.property.value &&
319
319
  LinearMemoryInspector.LinearMemoryInspectorController.isMemoryObjectProperty(target.property.value)) {
320
+ const expression = target.path();
320
321
  contextMenu.debugSection().appendItem(
321
322
  i18nString(UIStrings.revealInMemoryInspectorPanel),
322
- this.openMemoryInspector.bind(this, target.property.name, target.property.value));
323
+ this.openMemoryInspector.bind(this, expression, target.property.value));
323
324
  }
324
325
  }
325
326
  }
326
327
 
327
- private async openMemoryInspector(name: string, obj: SDK.RemoteObject.RemoteObject): Promise<void> {
328
+ private async openMemoryInspector(expression: string, obj: SDK.RemoteObject.RemoteObject): Promise<void> {
328
329
  const controller = LinearMemoryInspector.LinearMemoryInspectorController.LinearMemoryInspectorController.instance();
329
330
  Host.userMetrics.linearMemoryInspectorRevealedFrom(Host.UserMetrics.LinearMemoryInspectorRevealedFrom.ContextMenu);
330
- void controller.openInspectorView(obj, undefined /* address */, name);
331
+ void controller.openInspectorView(obj, /* address */ undefined, expression);
331
332
  }
332
333
  }
@@ -32,11 +32,9 @@ import * as Common from '../../core/common/common.js';
32
32
  import * as Host from '../../core/host/host.js';
33
33
  import * as i18n from '../../core/i18n/i18n.js';
34
34
  import * as Platform from '../../core/platform/platform.js';
35
- import * as Root from '../../core/root/root.js';
36
35
  import * as SDK from '../../core/sdk/sdk.js';
37
36
  import * as Persistence from '../../models/persistence/persistence.js';
38
37
  import * as Workspace from '../../models/workspace/workspace.js';
39
- import * as Feedback from '../../ui/components/panel_feedback/panel_feedback.js';
40
38
  import * as UI from '../../ui/legacy/legacy.js';
41
39
  import * as Snippets from '../snippets/snippets.js';
42
40
 
@@ -102,61 +100,26 @@ const UIStrings = {
102
100
  *@description Text to save content as a specific file type
103
101
  */
104
102
  saveAs: 'Save as...',
105
- /**
106
- *@description Description of the new experimental Authored/Deployed view
107
- */
108
- authoredDescription: 'Group files by Authored/Deployed',
109
103
  };
110
104
  const str_ = i18n.i18n.registerUIStrings('panels/sources/SourcesNavigator.ts', UIStrings);
111
105
  const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
112
106
  let networkNavigatorViewInstance: NetworkNavigatorView;
113
107
 
114
108
  export class NetworkNavigatorView extends NavigatorView {
115
- private previewToggle: Feedback.PreviewToggle.PreviewToggle;
116
109
  private constructor() {
117
110
  super(true);
118
111
  SDK.TargetManager.TargetManager.instance().addEventListener(
119
112
  SDK.TargetManager.Events.InspectedURLChanged, this.inspectedURLChanged, this);
120
113
 
121
- this.previewToggle = new Feedback.PreviewToggle.PreviewToggle();
122
- this.onGroupingChanged();
123
-
124
- const div = UI.Fragment.html`<div class="border-container"></div>`;
125
- div.append(this.previewToggle);
126
- this.contentElement.prepend(div);
127
-
128
114
  // Record the sources tool load time after the file navigator has loaded.
129
115
  Host.userMetrics.panelLoaded('sources', 'DevTools.Launch.Sources');
130
116
  }
131
117
 
132
- onGroupingChanged(): void {
133
- // Setting the data will re-render it.
134
- this.previewToggle.data = {
135
- name: i18nString(UIStrings.authoredDescription),
136
- helperText: null,
137
- experiment: Root.Runtime.ExperimentName.AUTHORED_DEPLOYED_GROUPING,
138
- learnMoreURL: 'https://goo.gle/authored-deployed',
139
- feedbackURL: 'https://goo.gle/authored-deployed-feedback',
140
- onChangeCallback: this.onAuthoredDeployedChanged,
141
- };
142
- }
143
-
144
118
  wasShown(): void {
145
119
  this.registerCSSFiles([sourcesNavigatorStyles]);
146
120
  super.wasShown();
147
121
  }
148
122
 
149
- private onAuthoredDeployedChanged(checked: boolean): void {
150
- Host.userMetrics.experimentChanged(Root.Runtime.ExperimentName.AUTHORED_DEPLOYED_GROUPING, checked);
151
- // Need to signal to the NavigatorView that grouping has changed. Unfortunately,
152
- // it can't listen to an experiment, and this class doesn't directly interact
153
- // with it, so we will convince it a different grouping setting changed. When we switch
154
- // from using an experiment to a setting, it will listen to that setting and we
155
- // won't need to do this.
156
- const groupByFolderSetting = Common.Settings.Settings.instance().moduleSetting('navigatorGroupByFolder');
157
- groupByFolderSetting.set(groupByFolderSetting.get());
158
- }
159
-
160
123
  static instance(opts: {
161
124
  forceNew: boolean|null,
162
125
  } = {forceNew: null}): NetworkNavigatorView {
@@ -112,6 +112,10 @@ const UIStrings = {
112
112
  */
113
113
  groupByAuthored: 'Group by Authored/Deployed',
114
114
  /**
115
+ *@description Text in Sources Panel of the Sources panel
116
+ */
117
+ hideIgnoreListed: 'Hide ignore-listed sources',
118
+ /**
115
119
  *@description Text for pausing the debugger on exceptions
116
120
  */
117
121
  pauseOnExceptions: 'Pause on exceptions',
@@ -563,36 +567,44 @@ export class SourcesPanel extends UI.Panel.Panel implements UI.ContextMenu.Provi
563
567
  }
564
568
  }
565
569
 
566
- private toggleAuthoredDeployedExperiment(): void {
567
- const experiment = Root.Runtime.ExperimentName.AUTHORED_DEPLOYED_GROUPING;
568
- const checked = Root.Runtime.experiments.isEnabled(experiment);
569
- Root.Runtime.experiments.setEnabled(experiment, !checked);
570
- Host.userMetrics.experimentChanged(experiment, checked);
571
- // Need to signal to the NavigatorView that grouping has changed. Unfortunately,
572
- // it can't listen to an experiment, and this class doesn't directly interact
573
- // with it, so we will convince it a different grouping setting changed. When we switch
574
- // from using an experiment to a setting, it will listen to that setting and we
575
- // won't need to do this.
576
- const groupByFolderSetting = Common.Settings.Settings.instance().moduleSetting('navigatorGroupByFolder');
577
- groupByFolderSetting.set(groupByFolderSetting.get());
578
- }
570
+ private addExperimentMenuItem(
571
+ menuSection: UI.ContextMenu.Section, experiment: string, menuItem: Common.UIString.LocalizedString): void {
572
+ // menu handler
573
+ function toggleExperiment(): void {
574
+ const checked = Root.Runtime.experiments.isEnabled(experiment);
575
+ Root.Runtime.experiments.setEnabled(experiment, !checked);
576
+ Host.userMetrics.experimentChanged(experiment, checked);
577
+ // Need to signal to the NavigatorView that grouping has changed. Unfortunately,
578
+ // it can't listen to an experiment, and this class doesn't directly interact
579
+ // with it, so we will convince it a different grouping setting changed. When we switch
580
+ // from using an experiment to a setting, it will listen to that setting and we
581
+ // won't need to do this.
582
+ const groupByFolderSetting = Common.Settings.Settings.instance().moduleSetting('navigatorGroupByFolder');
583
+ groupByFolderSetting.set(groupByFolderSetting.get());
584
+ }
579
585
 
580
- private populateNavigatorMenu(contextMenu: UI.ContextMenu.ContextMenu): void {
581
- const groupByFolderSetting = Common.Settings.Settings.instance().moduleSetting('navigatorGroupByFolder');
582
- contextMenu.appendItemsAtLocation('navigatorMenu');
583
- contextMenu.viewSection().appendCheckboxItem(
584
- i18nString(UIStrings.groupByFolder), () => groupByFolderSetting.set(!groupByFolderSetting.get()),
585
- groupByFolderSetting.get());
586
586
  const previewIcon = new IconButton.Icon.Icon();
587
- const experiment = Root.Runtime.ExperimentName.AUTHORED_DEPLOYED_GROUPING;
588
587
  previewIcon.data = {
589
588
  iconName: 'ic_preview_feature',
590
589
  color: 'var(--icon-color)',
591
590
  width: '14px',
592
591
  };
592
+ menuSection.appendCheckboxItem(
593
+ menuItem, toggleExperiment, Root.Runtime.experiments.isEnabled(experiment), false, previewIcon);
594
+ }
595
+
596
+ private populateNavigatorMenu(contextMenu: UI.ContextMenu.ContextMenu): void {
597
+ const groupByFolderSetting = Common.Settings.Settings.instance().moduleSetting('navigatorGroupByFolder');
598
+ contextMenu.appendItemsAtLocation('navigatorMenu');
593
599
  contextMenu.viewSection().appendCheckboxItem(
594
- i18nString(UIStrings.groupByAuthored), this.toggleAuthoredDeployedExperiment,
595
- Root.Runtime.experiments.isEnabled(experiment), false, previewIcon);
600
+ i18nString(UIStrings.groupByFolder), () => groupByFolderSetting.set(!groupByFolderSetting.get()),
601
+ groupByFolderSetting.get());
602
+
603
+ this.addExperimentMenuItem(
604
+ contextMenu.viewSection(), Root.Runtime.ExperimentName.AUTHORED_DEPLOYED_GROUPING,
605
+ i18nString(UIStrings.groupByAuthored));
606
+ this.addExperimentMenuItem(
607
+ contextMenu.viewSection(), Root.Runtime.ExperimentName.JUST_MY_CODE, i18nString(UIStrings.hideIgnoreListed));
596
608
  }
597
609
 
598
610
  setIgnoreExecutionLineEvents(ignoreExecutionLineEvents: boolean): void {
@@ -0,0 +1,206 @@
1
+ // Copyright (c) 2022 The Chromium Authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style license that can be
3
+ // found in the LICENSE file.
4
+
5
+ import * as i18n from '../../../core/i18n/i18n.js';
6
+ import * as Platform from '../../../core/platform/platform.js';
7
+ import * as ComponentHelpers from '../../../ui/components/helpers/helpers.js';
8
+ import * as IconButton from '../../../ui/components/icon_button/icon_button.js';
9
+ import * as LitHtml from '../../../ui/lit-html/lit-html.js';
10
+
11
+ import breakpointsViewStyles from './breakpointsView.css.js';
12
+
13
+ const UIStrings = {
14
+ /**
15
+ *@description Text exposed to screen readers on checked items.
16
+ */
17
+ checked: 'checked',
18
+ /**
19
+ *@description Accessible text exposed to screen readers when the screen reader encounters an unchecked checkbox.
20
+ */
21
+ unchecked: 'unchecked',
22
+ /**
23
+ *@description Accessible text for a breakpoint collection with a combination of checked states.
24
+ */
25
+ indeterminate: 'mixed',
26
+ /**
27
+ *@description Accessibility label for hit breakpoints in the Sources panel.
28
+ *@example {checked} PH1
29
+ */
30
+ breakpointHit: '{PH1} breakpoint hit',
31
+
32
+ };
33
+ const str_ = i18n.i18n.registerUIStrings('panels/sources/components/BreakpointsView.ts', UIStrings);
34
+ const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
35
+
36
+ const MAX_SNIPPET_LENGTH = 200;
37
+
38
+ export interface BreakpointsViewData {
39
+ groups: BreakpointGroup[];
40
+ }
41
+
42
+ export interface BreakpointGroup {
43
+ name: string;
44
+ url: Platform.DevToolsPath.UrlString;
45
+ expanded: boolean;
46
+ breakpointItems: BreakpointItem[];
47
+ }
48
+
49
+ export interface BreakpointItem {
50
+ location: string;
51
+ codeSnippet: string;
52
+ isHit: boolean;
53
+ status: BreakpointStatus;
54
+ hoverText?: string;
55
+ }
56
+
57
+ export const enum BreakpointStatus {
58
+ ENABLED = 'ENABLED',
59
+ DISABLED = 'DISABLED',
60
+ INDETERMINATE = 'INDETERMINATE',
61
+ }
62
+
63
+ export class CheckboxToggledEvent extends Event {
64
+ static readonly eventName = 'checkboxtoggled';
65
+ data: {breakpointItem: BreakpointItem, checked: boolean};
66
+
67
+ constructor(breakpointItem: BreakpointItem, checked: boolean) {
68
+ super(CheckboxToggledEvent.eventName);
69
+ this.data = {breakpointItem: breakpointItem, checked};
70
+ }
71
+ }
72
+
73
+ export class ExpandedStateChangedEvent extends Event {
74
+ static readonly eventName = 'expandedstatechanged';
75
+ data: {url: Platform.DevToolsPath.UrlString, expanded: boolean};
76
+
77
+ constructor(url: Platform.DevToolsPath.UrlString, expanded: boolean) {
78
+ super(ExpandedStateChangedEvent.eventName);
79
+ this.data = {url, expanded};
80
+ }
81
+ }
82
+
83
+ export class BreakpointSelectedEvent extends Event {
84
+ static readonly eventName = 'breakpointselected';
85
+ data: {breakpointItem: BreakpointItem};
86
+
87
+ constructor(breakpointItem: BreakpointItem) {
88
+ super(BreakpointSelectedEvent.eventName);
89
+ this.data = {breakpointItem: breakpointItem};
90
+ }
91
+ }
92
+
93
+ export class BreakpointsView extends HTMLElement {
94
+ static readonly litTagName = LitHtml.literal`devtools-breakpoint-view`;
95
+ readonly #shadow = this.attachShadow({mode: 'open'});
96
+ readonly #boundRender = this.#render.bind(this);
97
+
98
+ #breakpointGroups: BreakpointGroup[] = [];
99
+
100
+ set data(data: BreakpointsViewData) {
101
+ this.#breakpointGroups = data.groups;
102
+ void ComponentHelpers.ScheduledRender.scheduleRender(this, this.#boundRender);
103
+ }
104
+
105
+ connectedCallback(): void {
106
+ this.#shadow.adoptedStyleSheets = [breakpointsViewStyles];
107
+ void ComponentHelpers.ScheduledRender.scheduleRender(this, this.#boundRender);
108
+ }
109
+
110
+ #render(): void {
111
+ const renderedGroups = this.#breakpointGroups.map((group, index) => {
112
+ const out = this.#renderBreakpointGroup(group);
113
+ if (index === this.#breakpointGroups.length - 1) {
114
+ return out;
115
+ }
116
+ return LitHtml.html`${out}<div class='divider'></div>`;
117
+ });
118
+ LitHtml.render(LitHtml.html`${renderedGroups}`, this.#shadow, {host: this});
119
+ }
120
+
121
+ #renderBreakpointGroup(group: BreakpointGroup): LitHtml.TemplateResult {
122
+ const groupClassMap = {
123
+ 'expanded': group.expanded,
124
+ };
125
+ // clang-format off
126
+ return LitHtml.html`
127
+ <div data-group='true' class=${LitHtml.Directives.classMap(groupClassMap)}>
128
+ <div class='group-header' @click=${(): void => this.#onGroupExpandToggled(group)}>
129
+ <span class='triangle'></span>
130
+ ${this.#renderFileIcon()}
131
+ <span class='group-header-title'>${group.name}</span>
132
+ </div>
133
+ ${group.expanded? LitHtml.html`
134
+ ${group.breakpointItems.map(entry => this.#renderBreakpointEntry(entry))}` : LitHtml.nothing}
135
+ </div>
136
+ `;
137
+ // clang-format on
138
+ }
139
+
140
+ #renderFileIcon(): LitHtml.TemplateResult {
141
+ return LitHtml.html`
142
+ <${IconButton.Icon.Icon.litTagName} .data=${
143
+ {iconName: 'ic_file_script', color: 'var(--color-ic-file-script)', width: '16px', height: '16px'} as
144
+ IconButton.Icon.IconWithName}></${IconButton.Icon.Icon.litTagName}>
145
+ `;
146
+ }
147
+
148
+ #renderBreakpointEntry(breakpointItem: BreakpointItem): LitHtml.TemplateResult {
149
+ const classMap = {
150
+ 'breakpoint-item': true,
151
+ 'hit': breakpointItem.isHit,
152
+ };
153
+ const breakpointItemDescription = this.#getBreakpointItemDescription(breakpointItem);
154
+ const codeSnippet = Platform.StringUtilities.trimEndWithMaxLength(breakpointItem.codeSnippet, MAX_SNIPPET_LENGTH);
155
+
156
+ // clang-format off
157
+ return LitHtml.html`
158
+ <div class=${LitHtml.Directives.classMap(classMap)} aria-label=${breakpointItemDescription} tabIndex=${breakpointItem.isHit ? 0 : 1}>
159
+ <label class='checkbox-label'>
160
+ <input type='checkbox' aria-label=${breakpointItem.location} ?indeterminate=${breakpointItem.status === BreakpointStatus.INDETERMINATE} ?checked=${breakpointItem.status === BreakpointStatus.ENABLED} @change=${(e: Event): void => this.#onCheckboxToggled(e, breakpointItem)}>
161
+ </label>
162
+ <span class='code-snippet' @click=${():void => {this.dispatchEvent(new BreakpointSelectedEvent(breakpointItem));}}>${codeSnippet}</span>
163
+ <span class='location'>${breakpointItem.location}</span>
164
+ </div>
165
+ `;
166
+ // clang-format on
167
+ }
168
+
169
+ #getBreakpointItemDescription(breakpointItem: BreakpointItem): Platform.UIString.LocalizedString {
170
+ let checkboxDescription;
171
+ switch (breakpointItem.status) {
172
+ case BreakpointStatus.ENABLED:
173
+ checkboxDescription = i18nString(UIStrings.checked);
174
+ break;
175
+ case BreakpointStatus.DISABLED:
176
+ checkboxDescription = i18nString(UIStrings.unchecked);
177
+ break;
178
+ case BreakpointStatus.INDETERMINATE:
179
+ checkboxDescription = i18nString(UIStrings.indeterminate);
180
+ break;
181
+ }
182
+ if (!breakpointItem.isHit) {
183
+ return checkboxDescription;
184
+ }
185
+ return i18nString(UIStrings.breakpointHit, {PH1: checkboxDescription});
186
+ }
187
+
188
+ #onGroupExpandToggled(group: BreakpointGroup): void {
189
+ group.expanded = !group.expanded;
190
+ this.dispatchEvent(new ExpandedStateChangedEvent(group.url, group.expanded));
191
+ void ComponentHelpers.ScheduledRender.scheduleRender(this, this.#boundRender);
192
+ }
193
+
194
+ #onCheckboxToggled(e: Event, item: BreakpointItem): void {
195
+ const element = e.target as HTMLInputElement;
196
+ this.dispatchEvent(new CheckboxToggledEvent(item, element.checked));
197
+ }
198
+ }
199
+
200
+ ComponentHelpers.CustomElements.defineComponent('devtools-breakpoint-view', BreakpointsView);
201
+
202
+ declare global {
203
+ interface HTMLElementTagNameMap {
204
+ 'devtools-breakpoint-view': BreakpointsView;
205
+ }
206
+ }
@@ -0,0 +1,95 @@
1
+ /*
2
+ * Copyright 2022 The Chromium Authors. All rights reserved.
3
+ * Use of this source code is governed by a BSD-style license that can be
4
+ * found in the LICENSE file.
5
+ */
6
+
7
+ :host {
8
+ flex: auto;
9
+ display: flex;
10
+ flex-direction: column;
11
+ }
12
+
13
+ .divider {
14
+ height: 1px;
15
+ width: inherit;
16
+ background-color: var(--color-details-hairline);
17
+ }
18
+
19
+ .code-snippet {
20
+ width: 100%;
21
+ padding-left: 6px;
22
+ font-family: var(--source-code-font-family);
23
+ font-size: var(--source-code-font-size);
24
+ color: var(--color-text-secondary);
25
+ text-overflow: ellipsis;
26
+ overflow: hidden;
27
+ white-space: nowrap;
28
+ flex-shrink: 100;
29
+ }
30
+
31
+ input {
32
+ height: 12px;
33
+ width: 12px;
34
+ flex-shrink: 0;
35
+ margin: 3px 0;
36
+ }
37
+
38
+ .triangle {
39
+ margin-left: 6px;
40
+ margin-right: 4px;
41
+ display: inline-block;
42
+ -webkit-mask-image: var(--image-file-treeoutlineTriangles);
43
+ -webkit-mask-size: 32px 24px;
44
+ -webkit-mask-position: 0 0;
45
+ background-color: var(--color-text-primary);
46
+ height: 12px;
47
+ width: 8px;
48
+ }
49
+
50
+ .group-header {
51
+ display: flex;
52
+ align-items: center;
53
+ height: 18px;
54
+ }
55
+
56
+ .expanded > .group-header > .triangle {
57
+ -webkit-mask-position: -16px 0;
58
+ }
59
+
60
+ .group-header-title {
61
+ margin-left: 4px;
62
+ font-weight: 500;
63
+ font-size: var(--source-code-font-size);
64
+ text-overflow: ellipsis;
65
+ overflow: hidden;
66
+ white-space: nowrap;
67
+ }
68
+
69
+ .breakpoint-item {
70
+ display: flex;
71
+ align-items: center;
72
+ line-height: 13px;
73
+ height: 18px;
74
+ }
75
+
76
+ .breakpoint-item:hover {
77
+ background-color: var(--color-background-elevation-1);
78
+ }
79
+
80
+ .breakpoint-item.hit {
81
+ --override-breakpoint-hit-background: rgb(255 255 194);
82
+
83
+ background-color: var(--override-breakpoint-hit-background);
84
+ }
85
+
86
+ .checkbox-label {
87
+ padding-left: 24px;
88
+ display: flex;
89
+ align-items: center;
90
+ }
91
+
92
+ .location {
93
+ line-height: 14px;
94
+ margin: 0 8px;
95
+ }
@@ -2,8 +2,10 @@
2
2
  // Use of this source code is governed by a BSD-style license that can be
3
3
  // found in the LICENSE file.
4
4
 
5
+ import * as BreakpointsView from './BreakpointsView.js';
5
6
  import * as HeadersView from './HeadersView.js';
6
7
 
7
8
  export {
9
+ BreakpointsView,
8
10
  HeadersView,
9
11
  };
@@ -396,7 +396,7 @@ export class ObjectPropertiesSection extends UI.TreeOutline.TreeOutlineInShadow
396
396
  value, wasThrown, showPreview, parentElement, linkifier, variableName);
397
397
  }
398
398
 
399
- static appendMemoryIcon(element: Element, obj: SDK.RemoteObject.RemoteObject, variableName?: string): void {
399
+ static appendMemoryIcon(element: Element, obj: SDK.RemoteObject.RemoteObject, expression?: string): void {
400
400
  // We show the memory icon only on ArrayBuffer, WebAssembly.Memory and DWARF memory instances.
401
401
  // TypedArrays DataViews are also supported, but showing the icon next to their
402
402
  // previews is quite a significant visual overhead, and users can easily get to
@@ -419,7 +419,7 @@ export class ObjectPropertiesSection extends UI.TreeOutline.TreeOutlineInShadow
419
419
  const controller =
420
420
  LinearMemoryInspector.LinearMemoryInspectorController.LinearMemoryInspectorController.instance();
421
421
  Host.userMetrics.linearMemoryInspectorRevealedFrom(Host.UserMetrics.LinearMemoryInspectorRevealedFrom.MemoryIcon);
422
- void controller.openInspectorView(obj, undefined /* address */, variableName);
422
+ void controller.openInspectorView(obj, /* address */ undefined, expression);
423
423
  };
424
424
 
425
425
  UI.Tooltip.Tooltip.install(memoryIcon, 'Reveal in Memory Inspector panel');
package/package.json CHANGED
@@ -56,5 +56,5 @@
56
56
  "unittest": "scripts/test/run_unittests.py --no-text-coverage",
57
57
  "watch": "vpython third_party/node/node.py --output scripts/watch_build.js"
58
58
  },
59
- "version": "1.0.1035409"
59
+ "version": "1.0.1035963"
60
60
  }