chrome-devtools-frontend 1.0.947377 → 1.0.948295
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.
- package/config/gni/all_devtools_files.gni +1 -6
- package/config/gni/devtools_grd_files.gni +5 -6
- package/config/gni/devtools_image_files.gni +1 -0
- package/front_end/.eslintrc.js +1 -0
- package/front_end/Images/src/circled_backslash_icon.svg +3 -0
- package/front_end/core/host/UserMetrics.ts +1 -1
- package/front_end/core/i18n/locales/en-US.json +17 -14
- package/front_end/core/i18n/locales/en-XL.json +17 -14
- package/front_end/core/platform/platform.ts +0 -2
- package/front_end/core/platform/string-utilities.ts +14 -1
- package/front_end/core/platform/utilities.ts +0 -29
- package/front_end/core/root/Runtime.ts +4 -207
- package/front_end/core/sdk/Cookie.ts +0 -21
- package/front_end/core/sdk/sdk-legacy.ts +0 -3
- package/front_end/entrypoints/devtools_app/{devtools_app-meta-files.ts → devtools_app.ts} +9 -2
- package/front_end/entrypoints/heap_snapshot_worker/HeapSnapshot.ts +2 -1
- package/front_end/entrypoints/js_app/{JsMain.ts → js_app.ts} +5 -1
- package/front_end/entrypoints/main/MainImpl.ts +0 -1
- package/front_end/entrypoints/ndb_app/{ndb_app.js → ndb_app.ts} +0 -2
- package/front_end/entrypoints/node_app/node_app.ts +1 -3
- package/front_end/entrypoints/shell/{shell.js → shell.ts} +0 -2
- package/front_end/entrypoints/worker_app/worker_app.ts +1 -3
- package/front_end/legacy/legacy-defs.d.ts +0 -4
- package/front_end/legacy_test_runner/test_runner/TestRunner.js +35 -59
- package/front_end/models/issues_manager/CorsIssue.ts +15 -15
- package/front_end/models/issues_manager/descriptions/{corsInsecurePrivateNetworkPreflight.md → corsPreflightAllowPrivateNetworkError.md} +1 -1
- package/front_end/panels/accessibility/AccessibilitySidebarView.ts +3 -1
- package/front_end/panels/application/BackForwardCacheStrings.ts +1 -5
- package/front_end/panels/application/BackForwardCacheView.ts +150 -58
- package/front_end/panels/application/ResourcesPanel.ts +0 -42
- package/front_end/panels/application/application-legacy.ts +0 -3
- package/front_end/panels/application/application-meta.ts +0 -13
- package/front_end/panels/application/backForwardCacheView.css +44 -6
- package/front_end/panels/application/components/FrameDetailsView.ts +3 -3
- package/front_end/panels/application/components/OriginTrialTreeView.ts +3 -3
- package/front_end/panels/application/components/StackTrace.ts +1 -1
- package/front_end/panels/coverage/CoverageView.ts +1 -1
- package/front_end/panels/css_overview/components/cssOverviewStartView.css +1 -0
- package/front_end/panels/css_overview/cssOverviewCompletedView.css +1 -1
- package/front_end/panels/developer_resources/DeveloperResourcesView.ts +2 -1
- package/front_end/panels/elements/ElementsPanel.ts +9 -1
- package/front_end/panels/elements/ElementsTreeElement.ts +1 -1
- package/front_end/panels/elements/components/ElementsBreadcrumbs.ts +1 -1
- package/front_end/panels/issues/CorsIssueDetailsView.ts +20 -8
- package/front_end/panels/network/NetworkWaterfallColumn.ts +2 -0
- package/front_end/panels/profiler/CPUProfileFlameChart.ts +3 -1
- package/front_end/panels/profiler/ProfileDataGrid.ts +2 -1
- package/front_end/panels/settings/components/SyncSection.ts +2 -2
- package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +46 -46
- package/front_end/panels/timeline/TimelineTreeView.ts +2 -1
- package/front_end/ui/components/diff_view/DiffView.ts +4 -4
- package/front_end/ui/components/helpers/component-server-setup.ts +1 -12
- package/front_end/ui/components/helpers/helpers.ts +0 -2
- package/front_end/ui/components/icon_button/IconButton.ts +1 -1
- package/front_end/ui/components/issue_counter/IssueCounter.ts +2 -2
- package/front_end/ui/components/linear_memory_inspector/LinearMemoryViewer.ts +3 -3
- package/front_end/ui/components/markdown_view/MarkdownView.ts +4 -4
- package/front_end/ui/components/panel_feedback/PreviewToggle.ts +98 -0
- package/front_end/ui/components/panel_feedback/panel_feedback.ts +1 -0
- package/front_end/ui/components/panel_feedback/previewToggle.css +24 -0
- package/front_end/ui/components/report_view/ReportView.ts +22 -0
- package/front_end/ui/components/report_view/reportSection.css +20 -0
- package/front_end/ui/components/request_link_icon/RequestLinkIcon.ts +1 -1
- package/front_end/ui/components/settings/SettingCheckbox.ts +2 -2
- package/front_end/ui/components/text_editor/config.ts +4 -3
- package/front_end/ui/components/text_editor/javascript.ts +8 -4
- package/front_end/ui/components/text_prompt/TextPrompt.ts +2 -2
- package/front_end/ui/legacy/GlassPane.ts +1 -1
- package/front_end/ui/legacy/SearchableView.ts +2 -1
- package/front_end/ui/legacy/Treeoutline.ts +1 -1
- package/front_end/ui/legacy/Widget.ts +1 -1
- package/front_end/ui/legacy/XWidget.ts +0 -5
- package/front_end/ui/legacy/components/inline_editor/CSSVarSwatch.ts +2 -2
- package/front_end/ui/legacy/components/inline_editor/ColorSwatch.ts +1 -1
- package/front_end/ui/legacy/utils/append-style.ts +2 -13
- package/front_end/ui/legacy/utils/create-shadow-root-with-core-styles.ts +7 -5
- package/package.json +2 -4
- package/scripts/build/build_inspector_overlay.py +15 -1
- package/scripts/build/rjsmin.py +84 -115
- package/scripts/eslint_rules/lib/lit_html_no_attribute_quotes.js +101 -0
- package/scripts/eslint_rules/lib/no_only_eslint_tests.js +53 -0
- package/scripts/eslint_rules/tests/.eslintrc.js +14 -0
- package/scripts/eslint_rules/tests/lit_html_no_attribute_quotes_test.js +45 -0
- package/scripts/eslint_rules/tests/no_only_eslint_tests_test.js +94 -0
- package/front_end/entrypoints/devtools_app/devtools_app.js +0 -11
- package/front_end/entrypoints/devtools_app/devtools_app.json +0 -4
- package/front_end/entrypoints/js_app/js_app.js +0 -12
- package/front_end/entrypoints/js_app/js_app.json +0 -3
- package/front_end/entrypoints/ndb_app/ndb_app.json +0 -4
- package/front_end/entrypoints/startup/RuntimeInstantiator.ts +0 -95
- package/front_end/entrypoints/startup/startup.ts +0 -9
- package/front_end/ui/components/helpers/get-stylesheet.ts +0 -45
- package/scripts/build/build_release_applications.py +0 -216
- package/scripts/build/modular_build.py +0 -184
- package/scripts/check_gn.js +0 -119
- package/scripts/json_validator/module.schema.json +0 -19
- package/scripts/json_validator/validate_module_json.js +0 -44
|
@@ -174,11 +174,16 @@ export class CorsIssueDetailsView extends AffectedResourcesView {
|
|
|
174
174
|
this.appendColumnTitle(header, i18nString(UIStrings.allowCredentialsValueFromHeader));
|
|
175
175
|
break;
|
|
176
176
|
case IssuesManager.CorsIssue.IssueCode.InsecurePrivateNetwork:
|
|
177
|
-
case IssuesManager.CorsIssue.IssueCode.InsecurePrivateNetworkPreflight:
|
|
178
177
|
this.appendColumnTitle(header, i18nString(UIStrings.resourceAddressSpace));
|
|
179
178
|
this.appendColumnTitle(header, i18nString(UIStrings.initiatorAddressSpace));
|
|
180
179
|
this.appendColumnTitle(header, i18nString(UIStrings.initiatorContext));
|
|
181
180
|
break;
|
|
181
|
+
case IssuesManager.CorsIssue.IssueCode.PreflightAllowPrivateNetworkError:
|
|
182
|
+
this.appendColumnTitle(header, i18nString(UIStrings.preflightRequest));
|
|
183
|
+
this.appendColumnTitle(header, i18nString(UIStrings.invalidValue));
|
|
184
|
+
this.appendColumnTitle(header, i18nString(UIStrings.initiatorAddressSpace));
|
|
185
|
+
this.appendColumnTitle(header, i18nString(UIStrings.initiatorContext));
|
|
186
|
+
break;
|
|
182
187
|
case IssuesManager.CorsIssue.IssueCode.MethodDisallowedByPreflightResponse:
|
|
183
188
|
this.appendColumnTitle(header, i18nString(UIStrings.preflightRequest));
|
|
184
189
|
this.appendColumnTitle(header, i18nString(UIStrings.disallowedRequestMethod));
|
|
@@ -207,9 +212,7 @@ export class CorsIssueDetailsView extends AffectedResourcesView {
|
|
|
207
212
|
IssuesManager.CorsIssue.IssueCode.PreflightInvalidAllowExternal|
|
|
208
213
|
IssuesManager.CorsIssue.IssueCode.InvalidResponse|
|
|
209
214
|
IssuesManager.CorsIssue.IssueCode.InvalidPrivateNetworkAccess|
|
|
210
|
-
IssuesManager.CorsIssue.IssueCode.UnexpectedPrivateNetworkAccess
|
|
211
|
-
IssuesManager.CorsIssue.IssueCode.PreflightMissingAllowPrivateNetwork|
|
|
212
|
-
IssuesManager.CorsIssue.IssueCode.PreflightInvalidAllowPrivateNetwork>(issueCode);
|
|
215
|
+
IssuesManager.CorsIssue.IssueCode.UnexpectedPrivateNetworkAccess>(issueCode);
|
|
213
216
|
}
|
|
214
217
|
|
|
215
218
|
this.affectedResources.appendChild(header);
|
|
@@ -251,6 +254,9 @@ export class CorsIssueDetailsView extends AffectedResourcesView {
|
|
|
251
254
|
case Protocol.Network.CorsError.InvalidAllowCredentials:
|
|
252
255
|
case Protocol.Network.CorsError.PreflightInvalidAllowCredentials:
|
|
253
256
|
return 'Access-Control-Allow-Credentials';
|
|
257
|
+
case Protocol.Network.CorsError.PreflightMissingAllowPrivateNetwork:
|
|
258
|
+
case Protocol.Network.CorsError.PreflightInvalidAllowPrivateNetwork:
|
|
259
|
+
return 'Access-Control-Allow-Private-Network';
|
|
254
260
|
case Protocol.Network.CorsError.RedirectContainsCredentials:
|
|
255
261
|
case Protocol.Network.CorsError.PreflightDisallowedRedirect:
|
|
256
262
|
return 'Location';
|
|
@@ -362,13 +368,21 @@ export class CorsIssueDetailsView extends AffectedResourcesView {
|
|
|
362
368
|
this.appendIssueDetailCell(element, details.corsErrorStatus.failedParameter, 'code-example');
|
|
363
369
|
break;
|
|
364
370
|
case IssuesManager.CorsIssue.IssueCode.InsecurePrivateNetwork:
|
|
365
|
-
case IssuesManager.CorsIssue.IssueCode.InsecurePrivateNetworkPreflight:
|
|
366
371
|
element.appendChild(this.createRequestCell(details.request, opts));
|
|
367
372
|
this.appendStatus(element, details.isWarning);
|
|
368
373
|
this.appendIssueDetailCell(element, details.resourceIPAddressSpace ?? '');
|
|
369
374
|
this.appendIssueDetailCell(element, details.clientSecurityState?.initiatorIPAddressSpace ?? '');
|
|
370
375
|
this.appendSecureContextCell(element, details.clientSecurityState?.initiatorIsSecureContext);
|
|
371
376
|
break;
|
|
377
|
+
case IssuesManager.CorsIssue.IssueCode.PreflightAllowPrivateNetworkError: {
|
|
378
|
+
element.appendChild(this.createRequestCell(details.request, opts));
|
|
379
|
+
this.appendStatus(element, details.isWarning);
|
|
380
|
+
element.appendChild(this.createRequestCell(details.request, {...opts, linkToPreflight: true, highlightHeader}));
|
|
381
|
+
this.appendIssueDetailCell(element, details.corsErrorStatus.failedParameter, 'code-example');
|
|
382
|
+
this.appendIssueDetailCell(element, details.clientSecurityState?.initiatorIPAddressSpace ?? '');
|
|
383
|
+
this.appendSecureContextCell(element, details.clientSecurityState?.initiatorIsSecureContext);
|
|
384
|
+
break;
|
|
385
|
+
}
|
|
372
386
|
case IssuesManager.CorsIssue.IssueCode.MethodDisallowedByPreflightResponse:
|
|
373
387
|
element.appendChild(this.createRequestCell(details.request, opts));
|
|
374
388
|
this.appendStatus(element, details.isWarning);
|
|
@@ -435,9 +449,7 @@ export class CorsIssueDetailsView extends AffectedResourcesView {
|
|
|
435
449
|
IssuesManager.CorsIssue.IssueCode.PreflightInvalidAllowExternal|
|
|
436
450
|
IssuesManager.CorsIssue.IssueCode.InvalidResponse|
|
|
437
451
|
IssuesManager.CorsIssue.IssueCode.InvalidPrivateNetworkAccess|
|
|
438
|
-
IssuesManager.CorsIssue.IssueCode.UnexpectedPrivateNetworkAccess
|
|
439
|
-
IssuesManager.CorsIssue.IssueCode.PreflightMissingAllowPrivateNetwork|
|
|
440
|
-
IssuesManager.CorsIssue.IssueCode.PreflightInvalidAllowPrivateNetwork>(issueCode);
|
|
452
|
+
IssuesManager.CorsIssue.IssueCode.UnexpectedPrivateNetworkAccess>(issueCode);
|
|
441
453
|
break;
|
|
442
454
|
}
|
|
443
455
|
|
|
@@ -16,6 +16,7 @@ import {RequestTimeRangeNameToColor} from './NetworkOverview.js';
|
|
|
16
16
|
import type {Label, NetworkTimeCalculator} from './NetworkTimeCalculator.js';
|
|
17
17
|
import type {RequestTimeRange} from './RequestTimingView.js';
|
|
18
18
|
import {RequestTimeRangeNames, RequestTimingView} from './RequestTimingView.js';
|
|
19
|
+
import networkingTimingTableStyles from './networkTimingTable.css.js';
|
|
19
20
|
|
|
20
21
|
const BAR_SPACING = 1;
|
|
21
22
|
|
|
@@ -271,6 +272,7 @@ export class NetworkWaterfallColumn extends UI.Widget.VBox {
|
|
|
271
272
|
show: (popover: UI.GlassPane.GlassPane): Promise<true> => {
|
|
272
273
|
const content =
|
|
273
274
|
RequestTimingView.createTimingTable((request as SDK.NetworkRequest.NetworkRequest), this.calculator);
|
|
275
|
+
popover.registerCSSFiles([networkingTimingTableStyles]);
|
|
274
276
|
popover.contentElement.appendChild(content);
|
|
275
277
|
return Promise.resolve(true);
|
|
276
278
|
},
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
|
|
31
31
|
import * as Common from '../../core/common/common.js';
|
|
32
32
|
import * as Host from '../../core/host/host.js';
|
|
33
|
+
import * as Platform from '../../core/platform/platform.js';
|
|
33
34
|
import * as PerfUI from '../../ui/legacy/components/perf_ui/perf_ui.js';
|
|
34
35
|
import type * as SDK from '../../core/sdk/sdk.js';
|
|
35
36
|
import * as UI from '../../ui/legacy/legacy.js';
|
|
@@ -217,7 +218,8 @@ export class CPUProfileFlameChart extends
|
|
|
217
218
|
}
|
|
218
219
|
|
|
219
220
|
performSearch(searchConfig: UI.SearchableView.SearchConfig, _shouldJump: boolean, jumpBackwards?: boolean): void {
|
|
220
|
-
const matcher =
|
|
221
|
+
const matcher =
|
|
222
|
+
Platform.StringUtilities.createPlainTextSearchRegex(searchConfig.query, searchConfig.caseSensitive ? '' : 'i');
|
|
221
223
|
|
|
222
224
|
const selectedEntryIndex: number = this.searchResultIndex !== -1 ? this.searchResults[this.searchResultIndex] : -1;
|
|
223
225
|
this.searchResults = [];
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
30
|
import * as i18n from '../../core/i18n/i18n.js';
|
|
31
|
+
import * as Platform from '../../core/platform/platform.js';
|
|
31
32
|
import * as DataGrid from '../../ui/legacy/components/data_grid/data_grid.js';
|
|
32
33
|
|
|
33
34
|
import type * as SDK from '../../core/sdk/sdk.js';
|
|
@@ -528,7 +529,7 @@ export class ProfileDataGridTree implements UI.SearchableView.Searchable {
|
|
|
528
529
|
equalTo = true;
|
|
529
530
|
}
|
|
530
531
|
|
|
531
|
-
const matcher = createPlainTextSearchRegex(query, 'i');
|
|
532
|
+
const matcher = Platform.StringUtilities.createPlainTextSearchRegex(query, 'i');
|
|
532
533
|
|
|
533
534
|
function matchesQuery(profileDataGridNode: ProfileDataGridNode): boolean {
|
|
534
535
|
profileDataGridNode.searchMatchedSelfColumn = false;
|
|
@@ -92,7 +92,7 @@ function renderAccountInfoOrWarning(syncInfo: Host.InspectorFrontendHostAPI.Sync
|
|
|
92
92
|
// clang-format off
|
|
93
93
|
return LitHtml.html`
|
|
94
94
|
<span class="warning">
|
|
95
|
-
${i18nString(UIStrings.syncDisabled)} <a href
|
|
95
|
+
${i18nString(UIStrings.syncDisabled)} <a href=${link} class="link" target="_blank"
|
|
96
96
|
@click=${(e: Event): void => openSettingsTab(link, e)}
|
|
97
97
|
@keydown=${(e: Event): void => openSettingsTab(link, e)}>${i18nString(UIStrings.settings)}</x-link>
|
|
98
98
|
</span>`;
|
|
@@ -104,7 +104,7 @@ function renderAccountInfoOrWarning(syncInfo: Host.InspectorFrontendHostAPI.Sync
|
|
|
104
104
|
// clang-format off
|
|
105
105
|
return LitHtml.html`
|
|
106
106
|
<span class="warning">
|
|
107
|
-
${i18nString(UIStrings.preferencesSyncDisabled)} <a href
|
|
107
|
+
${i18nString(UIStrings.preferencesSyncDisabled)} <a href=${link} class="link" target="_blank"
|
|
108
108
|
@click=${(e: Event): void => openSettingsTab(link, e)}
|
|
109
109
|
@keydown=${(e: Event): void => openSettingsTab(link, e)}>${i18nString(UIStrings.settings)}</x-link>
|
|
110
110
|
</span>`;
|
|
@@ -356,9 +356,9 @@ export class UserAgentClientHintsForm extends HTMLElement {
|
|
|
356
356
|
<input
|
|
357
357
|
class="input-field"
|
|
358
358
|
type="text"
|
|
359
|
-
@input
|
|
360
|
-
.value
|
|
361
|
-
placeholder
|
|
359
|
+
@input=${handleInputChange}
|
|
360
|
+
.value=${value}
|
|
361
|
+
placeholder=${placeholder}
|
|
362
362
|
/>
|
|
363
363
|
</label>
|
|
364
364
|
`;
|
|
@@ -376,22 +376,22 @@ export class UserAgentClientHintsForm extends HTMLElement {
|
|
|
376
376
|
};
|
|
377
377
|
return LitHtml.html`
|
|
378
378
|
<span class="full-row label">${i18nString(UIStrings.platformLabel)}</span>
|
|
379
|
-
<div class="full-row brand-row" aria-label
|
|
379
|
+
<div class="full-row brand-row" aria-label=${i18nString(UIStrings.platformProperties)} role="group">
|
|
380
380
|
<input
|
|
381
381
|
class="input-field half-row"
|
|
382
382
|
type="text"
|
|
383
|
-
@input
|
|
384
|
-
.value
|
|
385
|
-
placeholder
|
|
386
|
-
aria-label
|
|
383
|
+
@input=${handlePlatformNameChange}
|
|
384
|
+
.value=${platform}
|
|
385
|
+
placeholder=${i18nString(UIStrings.platformPlaceholder)}
|
|
386
|
+
aria-label=${i18nString(UIStrings.platformLabel)}
|
|
387
387
|
/>
|
|
388
388
|
<input
|
|
389
389
|
class="input-field half-row"
|
|
390
390
|
type="text"
|
|
391
|
-
@input
|
|
392
|
-
.value
|
|
393
|
-
placeholder
|
|
394
|
-
aria-label
|
|
391
|
+
@input=${handlePlatformVersionChange}
|
|
392
|
+
.value=${platformVersion}
|
|
393
|
+
placeholder=${i18nString(UIStrings.platformVersion)}
|
|
394
|
+
aria-label=${i18nString(UIStrings.platformVersion)}
|
|
395
395
|
/>
|
|
396
396
|
</div>
|
|
397
397
|
`;
|
|
@@ -409,20 +409,20 @@ export class UserAgentClientHintsForm extends HTMLElement {
|
|
|
409
409
|
};
|
|
410
410
|
const mobileCheckboxInput = this.showMobileCheckbox ? LitHtml.html`
|
|
411
411
|
<label class="mobile-checkbox-container">
|
|
412
|
-
<input type="checkbox" @input
|
|
412
|
+
<input type="checkbox" @input=${handleMobileChange} .checked=${mobile} />
|
|
413
413
|
${i18nString(UIStrings.mobileCheckboxLabel)}
|
|
414
414
|
</label>
|
|
415
415
|
` :
|
|
416
416
|
LitHtml.html``;
|
|
417
417
|
return LitHtml.html`
|
|
418
418
|
<span class="full-row label">${i18nString(UIStrings.deviceModel)}</span>
|
|
419
|
-
<div class="full-row brand-row" aria-label
|
|
419
|
+
<div class="full-row brand-row" aria-label=${i18nString(UIStrings.deviceProperties)} role="group">
|
|
420
420
|
<input
|
|
421
421
|
class="input-field ${this.showMobileCheckbox ? 'device-model-input' : 'full-row'}"
|
|
422
422
|
type="text"
|
|
423
|
-
@input
|
|
424
|
-
.value
|
|
425
|
-
placeholder
|
|
423
|
+
@input=${handleDeviceModelChange}
|
|
424
|
+
.value=${model}
|
|
425
|
+
placeholder=${i18nString(UIStrings.deviceModel)}
|
|
426
426
|
/>
|
|
427
427
|
${mobileCheckboxInput}
|
|
428
428
|
</div>
|
|
@@ -459,41 +459,41 @@ export class UserAgentClientHintsForm extends HTMLElement {
|
|
|
459
459
|
this.handleBrandInputChange(value, index, 'brandVersion');
|
|
460
460
|
};
|
|
461
461
|
return LitHtml.html`
|
|
462
|
-
<div class="full-row brand-row" aria-label
|
|
462
|
+
<div class="full-row brand-row" aria-label=${i18nString(UIStrings.brandProperties)} role="group">
|
|
463
463
|
<input
|
|
464
464
|
class="input-field brand-name-input"
|
|
465
465
|
type="text"
|
|
466
|
-
@input
|
|
467
|
-
.value
|
|
466
|
+
@input=${handleBrandBrowserChange}
|
|
467
|
+
.value=${brand}
|
|
468
468
|
id="brand-${index + 1}-input"
|
|
469
|
-
placeholder
|
|
470
|
-
aria-label
|
|
469
|
+
placeholder=${i18nString(UIStrings.brandName)}
|
|
470
|
+
aria-label=${i18nString(UIStrings.brandNameAriaLabel, {
|
|
471
471
|
PH1: index + 1,
|
|
472
|
-
})}
|
|
472
|
+
})}
|
|
473
473
|
/>
|
|
474
474
|
<input
|
|
475
475
|
class="input-field"
|
|
476
476
|
type="text"
|
|
477
|
-
@input
|
|
478
|
-
.value
|
|
479
|
-
placeholder
|
|
480
|
-
aria-label
|
|
477
|
+
@input=${handleBrandVersionChange}
|
|
478
|
+
.value=${version}
|
|
479
|
+
placeholder=${i18nString(UIStrings.version)}
|
|
480
|
+
aria-label=${i18nString(UIStrings.brandVersionAriaLabel, {
|
|
481
481
|
PH1: index + 1,
|
|
482
|
-
})}
|
|
482
|
+
})}
|
|
483
483
|
/>
|
|
484
484
|
<${IconButton.Icon.Icon.litTagName}
|
|
485
485
|
.data=${
|
|
486
486
|
{color: 'var(--client-hints-form-icon-color)', iconName: 'trash_bin_icon', width: '10px', height: '14px'} as
|
|
487
487
|
IconButton.Icon.IconData}
|
|
488
|
-
title
|
|
488
|
+
title=${i18nString(UIStrings.deleteTooltip)}
|
|
489
489
|
class="delete-icon"
|
|
490
490
|
tabindex="0"
|
|
491
491
|
role="button"
|
|
492
|
-
@click
|
|
493
|
-
@keypress
|
|
494
|
-
aria-label
|
|
492
|
+
@click=${handleDeleteClick}
|
|
493
|
+
@keypress=${handleKeyPress}
|
|
494
|
+
aria-label=${i18nString(UIStrings.brandDeleteAriaLabel, {
|
|
495
495
|
PH1: index + 1,
|
|
496
|
-
})}
|
|
496
|
+
})}
|
|
497
497
|
>
|
|
498
498
|
</${IconButton.Icon.Icon.litTagName}>
|
|
499
499
|
</div>
|
|
@@ -507,9 +507,9 @@ export class UserAgentClientHintsForm extends HTMLElement {
|
|
|
507
507
|
role="button"
|
|
508
508
|
tabindex="0"
|
|
509
509
|
id="add-brand-button"
|
|
510
|
-
aria-label
|
|
511
|
-
@click
|
|
512
|
-
@keypress
|
|
510
|
+
aria-label=${i18nString(UIStrings.addBrand)}
|
|
511
|
+
@click=${this.handleAddBrandClick}
|
|
512
|
+
@keypress=${this.handleAddBrandKeyPress}
|
|
513
513
|
>
|
|
514
514
|
<${IconButton.Icon.Icon.litTagName}
|
|
515
515
|
aria-hidden="true"
|
|
@@ -547,16 +547,16 @@ export class UserAgentClientHintsForm extends HTMLElement {
|
|
|
547
547
|
<div
|
|
548
548
|
class="tree-title"
|
|
549
549
|
role="button"
|
|
550
|
-
@click
|
|
550
|
+
@click=${this.handleTreeClick}
|
|
551
551
|
tabindex="0"
|
|
552
|
-
@keydown
|
|
553
|
-
aria-expanded
|
|
552
|
+
@keydown=${this.handleTreeExpand}
|
|
553
|
+
aria-expanded=${this.isFormOpened}
|
|
554
554
|
aria-controls="form-container"
|
|
555
|
-
@disabled
|
|
556
|
-
aria-disabled
|
|
555
|
+
@disabled=${this.isFormDisabled}
|
|
556
|
+
aria-disabled=${this.isFormDisabled}
|
|
557
557
|
>
|
|
558
558
|
<${IconButton.Icon.Icon.litTagName}
|
|
559
|
-
class
|
|
559
|
+
class=${this.isFormOpened ? '' : 'rotate-icon'}
|
|
560
560
|
.data=${
|
|
561
561
|
{color: 'var(--client-hints-form-icon-color)', iconName: 'chromeSelect', width: '20px'} as
|
|
562
562
|
IconButton.Icon.IconData}
|
|
@@ -568,8 +568,8 @@ export class UserAgentClientHintsForm extends HTMLElement {
|
|
|
568
568
|
href="https://web.dev/user-agent-client-hints/"
|
|
569
569
|
target="_blank"
|
|
570
570
|
class="info-link"
|
|
571
|
-
@keypress
|
|
572
|
-
aria-label
|
|
571
|
+
@keypress=${this.handleLinkPress}
|
|
572
|
+
aria-label=${i18nString(UIStrings.userAgentClientHintsInfo)}
|
|
573
573
|
>
|
|
574
574
|
<${IconButton.Icon.Icon.litTagName}
|
|
575
575
|
.data=${
|
|
@@ -582,7 +582,7 @@ export class UserAgentClientHintsForm extends HTMLElement {
|
|
|
582
582
|
<form
|
|
583
583
|
id="form-container"
|
|
584
584
|
class="form-container ${this.isFormOpened ? '' : 'hide-container'}"
|
|
585
|
-
@submit
|
|
585
|
+
@submit=${this.handleSubmit}
|
|
586
586
|
>
|
|
587
587
|
${brandSection}
|
|
588
588
|
${fullBrowserInput}
|
|
@@ -591,7 +591,7 @@ export class UserAgentClientHintsForm extends HTMLElement {
|
|
|
591
591
|
${deviceModelSection}
|
|
592
592
|
${submitButton}
|
|
593
593
|
</form>
|
|
594
|
-
<div aria-live="polite" aria-label
|
|
594
|
+
<div aria-live="polite" aria-label=${this.brandsModifiedAriaMessage}></div>
|
|
595
595
|
</section>
|
|
596
596
|
`;
|
|
597
597
|
// clang-format off
|
|
@@ -284,7 +284,8 @@ export class TimelineTreeView extends UI.Widget.VBox implements UI.SearchableVie
|
|
|
284
284
|
new UI.Toolbar.ToolbarInput(i18nString(UIStrings.filter), this.getToolbarInputAccessiblePlaceHolder());
|
|
285
285
|
textFilterUI.addEventListener(UI.Toolbar.ToolbarInput.Event.TextChanged, () => {
|
|
286
286
|
const searchQuery = textFilterUI.value();
|
|
287
|
-
this.textFilterInternal.setRegExp(
|
|
287
|
+
this.textFilterInternal.setRegExp(
|
|
288
|
+
searchQuery ? Platform.StringUtilities.createPlainTextSearchRegex(searchQuery, 'i') : null);
|
|
288
289
|
this.refreshTree();
|
|
289
290
|
}, this);
|
|
290
291
|
this.textFilterUI = textFilterUI;
|
|
@@ -191,7 +191,7 @@ class DiffRenderer {
|
|
|
191
191
|
|
|
192
192
|
private render(rows: readonly Row[]): LitHtml.TemplateResult {
|
|
193
193
|
return LitHtml.html`
|
|
194
|
-
<div class="diff-listing" aria-label
|
|
194
|
+
<div class="diff-listing" aria-label=${i18nString(UIStrings.changesDiffViewer)}>
|
|
195
195
|
${rows.map(row => this.renderRow(row))}
|
|
196
196
|
</div>`;
|
|
197
197
|
}
|
|
@@ -213,7 +213,7 @@ class DiffRenderer {
|
|
|
213
213
|
return LitHtml.html`
|
|
214
214
|
<div class="diff-line-number" aria-hidden="true">${baseNumber}</div>
|
|
215
215
|
<div class="diff-line-number" aria-hidden="true">${curNumber}</div>
|
|
216
|
-
<div class
|
|
216
|
+
<div class=${markerClass} aria-hidden="true">${marker}</div>
|
|
217
217
|
<div class="diff-line-content diff-line-${row.type}" data-line-number=${curNumber}>${screenReaderText}${
|
|
218
218
|
this.renderRowContent(row)}</div>`;
|
|
219
219
|
}
|
|
@@ -230,10 +230,10 @@ class DiffRenderer {
|
|
|
230
230
|
for (const token of row.tokens) {
|
|
231
231
|
const tokenContent: (LitHtml.TemplateResult|string)[] = [];
|
|
232
232
|
doc.highlightRange(pos, pos + token.text.length, (text, style) => {
|
|
233
|
-
tokenContent.push(style ? LitHtml.html`<span class
|
|
233
|
+
tokenContent.push(style ? LitHtml.html`<span class=${style}>${text}</span>` : text);
|
|
234
234
|
});
|
|
235
235
|
content.push(
|
|
236
|
-
token.className ? LitHtml.html`<span class
|
|
236
|
+
token.className ? LitHtml.html`<span class=${token.className}>${tokenContent}</span>` :
|
|
237
237
|
LitHtml.html`${tokenContent}`);
|
|
238
238
|
pos += token.text.length;
|
|
239
239
|
}
|
|
@@ -3,28 +3,17 @@
|
|
|
3
3
|
// found in the LICENSE file.
|
|
4
4
|
|
|
5
5
|
import type * as Common from '../../../core/common/common.js';
|
|
6
|
-
import * as Root from '../../../core/root/root.js';
|
|
7
6
|
import * as ThemeSupport from '../../legacy/theme_support/theme_support.js';
|
|
8
7
|
|
|
9
|
-
import {CSS_RESOURCES_TO_LOAD_INTO_RUNTIME} from './get-stylesheet.js';
|
|
10
|
-
|
|
11
8
|
/**
|
|
12
9
|
* Houses any setup required to run the component docs server. Currently this is
|
|
13
10
|
* only populating the runtime CSS cache but may be extended in the future.
|
|
14
11
|
*/
|
|
15
|
-
export async function setup(
|
|
12
|
+
export async function setup(): Promise<void> {
|
|
16
13
|
const setting = {
|
|
17
14
|
get() {
|
|
18
15
|
return 'default';
|
|
19
16
|
},
|
|
20
17
|
} as Common.Settings.Setting<string>;
|
|
21
18
|
ThemeSupport.ThemeSupport.instance({forceNew: true, setting});
|
|
22
|
-
|
|
23
|
-
const allPromises = CSS_RESOURCES_TO_LOAD_INTO_RUNTIME.map(resourcePath => {
|
|
24
|
-
return fetch(resourcesPrefix + '/front_end/' + resourcePath).then(response => response.text()).then(cssText => {
|
|
25
|
-
Root.Runtime.cachedResources.set(resourcePath, cssText);
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
await Promise.all(allPromises);
|
|
30
19
|
}
|
|
@@ -6,7 +6,6 @@ import * as ComponentServerSetup from './component-server-setup.js';
|
|
|
6
6
|
import * as CustomElements from './custom-elements.js';
|
|
7
7
|
import * as Directives from './directives.js';
|
|
8
8
|
import * as GetRootNode from './get-root-node.js';
|
|
9
|
-
import * as LegacyGetStylesheet from './get-stylesheet.js';
|
|
10
9
|
import * as ScheduledRender from './scheduled-render.js';
|
|
11
10
|
import * as SetCSSProperty from './set-css-property.js';
|
|
12
11
|
|
|
@@ -15,7 +14,6 @@ export {
|
|
|
15
14
|
CustomElements,
|
|
16
15
|
Directives,
|
|
17
16
|
GetRootNode,
|
|
18
|
-
LegacyGetStylesheet,
|
|
19
17
|
ScheduledRender,
|
|
20
18
|
SetCSSProperty,
|
|
21
19
|
};
|
|
@@ -80,7 +80,7 @@ export class IconButton extends HTMLElement {
|
|
|
80
80
|
// Disabled until https://crbug.com/1079231 is fixed.
|
|
81
81
|
// clang-format off
|
|
82
82
|
LitHtml.render(LitHtml.html`
|
|
83
|
-
<button class
|
|
83
|
+
<button class=${buttonClasses} @click=${this.onClickHandler} aria-label=${LitHtml.Directives.ifDefined(this.#accessibleName)}>
|
|
84
84
|
${(!this.#compact && this.#leadingText) ? LitHtml.html`<span class="icon-button-title">${this.#leadingText}</span>` : LitHtml.nothing}
|
|
85
85
|
${filteredGroups.map(counter =>
|
|
86
86
|
LitHtml.html`
|
|
@@ -192,8 +192,8 @@ export class IssueCounter extends HTMLElement {
|
|
|
192
192
|
};
|
|
193
193
|
LitHtml.render(
|
|
194
194
|
LitHtml.html`
|
|
195
|
-
<icon-button .data=${data as IconButton.IconButton.IconButtonData} .accessibleName
|
|
196
|
-
this.#accessibleName}
|
|
195
|
+
<icon-button .data=${data as IconButton.IconButton.IconButtonData} .accessibleName=${
|
|
196
|
+
this.#accessibleName}></icon-button>
|
|
197
197
|
`,
|
|
198
198
|
this.#shadow, {host: this});
|
|
199
199
|
this.#tooltipCallback?.();
|
|
@@ -212,7 +212,7 @@ export class LinearMemoryViewer extends HTMLElement {
|
|
|
212
212
|
};
|
|
213
213
|
return html`
|
|
214
214
|
<div class="row">
|
|
215
|
-
<span class
|
|
215
|
+
<span class=${LitHtml.Directives.classMap(classMap)}>${toHexString({number: startIndex + this.#memoryOffset, pad: 8, prefix: false})}</span>
|
|
216
216
|
<span class="divider"></span>
|
|
217
217
|
${this.renderByteValues(startIndex, endIndex)}
|
|
218
218
|
<span class="divider"></span>
|
|
@@ -237,7 +237,7 @@ export class LinearMemoryViewer extends HTMLElement {
|
|
|
237
237
|
const byteValue = isSelectableCell ? html`${toHexString({number: this.#memory[i], pad: 2, prefix: false})}` : '';
|
|
238
238
|
const actualIndex = i + this.#memoryOffset;
|
|
239
239
|
const onSelectedByte = isSelectableCell ? this.onSelectedByte.bind(this, actualIndex) : '';
|
|
240
|
-
cells.push(html`<span class
|
|
240
|
+
cells.push(html`<span class=${LitHtml.Directives.classMap(classMap)} @click=${onSelectedByte}>${byteValue}</span>`);
|
|
241
241
|
}
|
|
242
242
|
return html`${cells}`;
|
|
243
243
|
}
|
|
@@ -253,7 +253,7 @@ export class LinearMemoryViewer extends HTMLElement {
|
|
|
253
253
|
const isSelectableCell = i < this.#memory.length;
|
|
254
254
|
const value = isSelectableCell ? html`${this.toAscii(this.#memory[i])}` : '';
|
|
255
255
|
const onSelectedByte = isSelectableCell ? this.onSelectedByte.bind(this, i + this.#memoryOffset) : '';
|
|
256
|
-
cells.push(html`<span class
|
|
256
|
+
cells.push(html`<span class=${LitHtml.Directives.classMap(classMap)} @click=${onSelectedByte}>${value}</span>`);
|
|
257
257
|
}
|
|
258
258
|
return html`${cells}`;
|
|
259
259
|
}
|
|
@@ -105,13 +105,13 @@ const tokenRenderers = new Map<string, (token: any) => LitHtml.TemplateResult>([
|
|
|
105
105
|
['space', (): LitHtml.TemplateResult => html``],
|
|
106
106
|
[
|
|
107
107
|
'link',
|
|
108
|
-
(token): LitHtml.TemplateResult => html`<${MarkdownLink.litTagName} .data
|
|
109
|
-
{key: token.href, title: token.text} as MarkdownLinkData}
|
|
108
|
+
(token): LitHtml.TemplateResult => html`<${MarkdownLink.litTagName} .data=${
|
|
109
|
+
{key: token.href, title: token.text} as MarkdownLinkData}></${MarkdownLink.litTagName}>`,
|
|
110
110
|
],
|
|
111
111
|
[
|
|
112
112
|
'image',
|
|
113
|
-
(token): LitHtml.TemplateResult => html`<${MarkdownImage.litTagName} .data
|
|
114
|
-
{key: token.href, title: token.text} as MarkdownImageData}
|
|
113
|
+
(token): LitHtml.TemplateResult => html`<${MarkdownImage.litTagName} .data=${
|
|
114
|
+
{key: token.href, title: token.text} as MarkdownImageData}></${MarkdownImage.litTagName}>`,
|
|
115
115
|
],
|
|
116
116
|
]);
|
|
117
117
|
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// Copyright (c) 2021 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 Root from '../../../core/root/root.js';
|
|
7
|
+
import * as LitHtml from '../../../ui/lit-html/lit-html.js';
|
|
8
|
+
import * as ComponentHelpers from '../helpers/helpers.js';
|
|
9
|
+
import * as IconButton from '../icon_button/icon_button.js';
|
|
10
|
+
|
|
11
|
+
import previewToggleStyles from './previewToggle.css.js';
|
|
12
|
+
|
|
13
|
+
const {render, html, nothing} = LitHtml;
|
|
14
|
+
|
|
15
|
+
export interface PreviewToggleData {
|
|
16
|
+
name: string;
|
|
17
|
+
helperText: string|null;
|
|
18
|
+
feedbackURL: string|null;
|
|
19
|
+
experiment: Root.Runtime.ExperimentName;
|
|
20
|
+
onChangeCallback?: (checked: boolean) => void;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const UIStrings = {
|
|
24
|
+
/**
|
|
25
|
+
*@description Link text the user can click to provide feedback to the team.
|
|
26
|
+
*/
|
|
27
|
+
previewTextFeedbackLink: 'Send us your feedback.',
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
const str_ = i18n.i18n.registerUIStrings('ui/components/panel_feedback/PreviewToggle.ts', UIStrings);
|
|
31
|
+
const i18nString = i18n.i18n.getLocalizedString.bind(undefined, str_);
|
|
32
|
+
|
|
33
|
+
export class PreviewToggle extends HTMLElement {
|
|
34
|
+
static readonly litTagName = LitHtml.literal`devtools-preview-toggle`;
|
|
35
|
+
readonly #shadow = this.attachShadow({mode: 'open'});
|
|
36
|
+
|
|
37
|
+
#name = '';
|
|
38
|
+
#helperText: string|null = null;
|
|
39
|
+
#feedbackURL: string|null = null;
|
|
40
|
+
#experiment: string = '';
|
|
41
|
+
#onChangeCallback?: (checked: boolean) => void;
|
|
42
|
+
|
|
43
|
+
connectedCallback(): void {
|
|
44
|
+
this.#shadow.adoptedStyleSheets = [previewToggleStyles];
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
set data(data: PreviewToggleData) {
|
|
48
|
+
this.#name = data.name;
|
|
49
|
+
this.#helperText = data.helperText;
|
|
50
|
+
this.#feedbackURL = data.feedbackURL;
|
|
51
|
+
this.#experiment = data.experiment;
|
|
52
|
+
this.#onChangeCallback = data.onChangeCallback;
|
|
53
|
+
this.render();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
private render(): void {
|
|
57
|
+
const checked = Root.Runtime.experiments.isEnabled(this.#experiment);
|
|
58
|
+
// Disabled until https://crbug.com/1079231 is fixed.
|
|
59
|
+
// clang-format off
|
|
60
|
+
render(
|
|
61
|
+
html`
|
|
62
|
+
<div class="experiment-preview">
|
|
63
|
+
<input type="checkbox" ?checked=${checked} @change=${this.checkboxChanged} aria-label=${this.#name}/>
|
|
64
|
+
<${IconButton.Icon.Icon.litTagName} .data=${{
|
|
65
|
+
iconName: 'ic_preview_feature',
|
|
66
|
+
width: '16px',
|
|
67
|
+
height: '16px',
|
|
68
|
+
color: 'var(--color-text-secondary)',
|
|
69
|
+
} as IconButton.Icon.IconData}>
|
|
70
|
+
</${IconButton.Icon.Icon.litTagName}>${this.#name}
|
|
71
|
+
</div>
|
|
72
|
+
<div class="helper">
|
|
73
|
+
${this.#helperText && this.#feedbackURL
|
|
74
|
+
? html`<p>${this.#helperText} <x-link href=${this.#feedbackURL}>${i18nString(UIStrings.previewTextFeedbackLink)}</x-link></p>`
|
|
75
|
+
: nothing}
|
|
76
|
+
</div>`,
|
|
77
|
+
this.#shadow,
|
|
78
|
+
{
|
|
79
|
+
host: this,
|
|
80
|
+
});
|
|
81
|
+
// clang-format on
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
private checkboxChanged(event: Event): void {
|
|
85
|
+
const checked = (event.target as HTMLInputElement).checked;
|
|
86
|
+
Root.Runtime.experiments.setEnabled(this.#experiment, checked);
|
|
87
|
+
this.#onChangeCallback?.(checked);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
ComponentHelpers.CustomElements.defineComponent('devtools-preview-toggle', PreviewToggle);
|
|
92
|
+
|
|
93
|
+
declare global {
|
|
94
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
95
|
+
interface HTMLElementTagNameMap {
|
|
96
|
+
'devtools-preview-toggle': PreviewToggle;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2021 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
|
+
display: block;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.experiment-preview {
|
|
12
|
+
display: flex;
|
|
13
|
+
align-items: center;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.helper {
|
|
17
|
+
text-align: center;
|
|
18
|
+
font-style: italic;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
x-link { /* stylelint-disable-line selector-type-no-unknown */
|
|
22
|
+
color: var(--color-primary);
|
|
23
|
+
text-decoration-line: underline;
|
|
24
|
+
}
|