chrome-devtools-frontend 1.0.1564932 → 1.0.1565595
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/AUTHORS +1 -0
- package/front_end/core/sdk/NetworkManager.ts +3 -0
- package/front_end/generated/InspectorBackendCommands.ts +9 -0
- package/front_end/generated/SupportedCSSProperties.js +46 -0
- package/front_end/generated/protocol-mapping.d.ts +18 -0
- package/front_end/generated/protocol-proxy-api.d.ts +15 -0
- package/front_end/generated/protocol.ts +152 -0
- package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt +2 -2
- package/front_end/models/ai_assistance/data_formatters/PerformanceTraceFormatter.ts +2 -2
- package/front_end/models/emulation/EmulatedDevices.ts +28 -0
- package/front_end/models/javascript_metadata/NativeFunctions.js +4 -0
- package/front_end/models/trace/extras/Initiators.ts +59 -0
- package/front_end/models/trace/extras/extras.ts +1 -0
- package/front_end/models/trace/handlers/NetworkRequestsHandler.ts +19 -2
- package/front_end/models/trace/insights/NetworkDependencyTree.ts +3 -1
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +10 -10
- package/front_end/panels/ai_assistance/ai_assistance.ts +1 -1
- package/front_end/panels/ai_assistance/components/{UserActionRow.ts → ChatMessage.ts} +10 -10
- package/front_end/panels/ai_assistance/components/ChatView.ts +5 -5
- package/front_end/panels/common/ExtensionServer.ts +6 -1
- package/front_end/panels/console/ConsolePinPane.ts +1 -2
- package/front_end/panels/console/ConsoleView.ts +6 -9
- package/front_end/panels/elements/CSSValueTraceView.ts +1 -1
- package/front_end/panels/elements/ElementsTreeElement.ts +1 -1
- package/front_end/panels/elements/LayersWidget.ts +1 -1
- package/front_end/panels/emulation/MediaQueryInspector.ts +1 -2
- package/front_end/panels/network/RequestResponseView.ts +1 -1
- package/front_end/panels/recorder/RecorderController.ts +16 -0
- package/front_end/panels/sources/AiCodeCompletionPlugin.ts +6 -9
- package/front_end/panels/timeline/Initiators.ts +7 -5
- package/front_end/panels/timeline/components/NetworkRequestDetails.ts +5 -3
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/codemirror.next/rebuild.sh +1 -1
- package/front_end/third_party/lit/rebuild.sh +1 -1
- package/front_end/ui/components/buttons/button.css +6 -0
- package/front_end/ui/components/text_editor/{AiCodeCompletionTeaserPlaceholder.ts → AccessiblePlaceholder.ts} +3 -22
- package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +16 -13
- package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +11 -10
- package/front_end/ui/components/text_editor/TextEditor.ts +3 -0
- package/front_end/ui/components/text_editor/text_editor.ts +1 -1
- package/front_end/ui/legacy/PopoverHelper.ts +10 -0
- package/front_end/ui/legacy/softContextMenu.css +2 -0
- package/front_end/ui/lit/lit.ts +1 -0
- package/front_end/ui/visual_logging/KnownContextValues.ts +6 -0
- package/package.json +1 -1
- /package/front_end/panels/ai_assistance/components/{userActionRow.css → chatMessage.css} +0 -0
package/AUTHORS
CHANGED
|
@@ -95,6 +95,7 @@ Stephen Tsoi-A-Sue <stsoiasue@gmail.com>
|
|
|
95
95
|
Sunnylost <sunnylost@gmail.com>
|
|
96
96
|
TaegeonKim <aksen5240@gmail.com>
|
|
97
97
|
Thomas Stokes <git@tombl.dev>
|
|
98
|
+
Thryze Knox <thryzx@gmail.com>
|
|
98
99
|
Tony Kostowny <tonykostowny@gmail.com>
|
|
99
100
|
Toshiaki Tanaka <zokutyou2@gmail.com>
|
|
100
101
|
Tushar Singh <tusharvickey1999@gmail.com>
|
|
@@ -1554,6 +1554,9 @@ export class NetworkDispatcher implements ProtocolProxyApi.NetworkDispatcher {
|
|
|
1554
1554
|
this.#manager.dispatchEventToListeners(Events.ReportingApiEndpointsChangedForOrigin, data);
|
|
1555
1555
|
}
|
|
1556
1556
|
|
|
1557
|
+
deviceBoundSessionsAdded(_params: Protocol.Network.DeviceBoundSessionsAddedEvent): void {
|
|
1558
|
+
}
|
|
1559
|
+
|
|
1557
1560
|
policyUpdated(): void {
|
|
1558
1561
|
}
|
|
1559
1562
|
|
|
@@ -788,6 +788,7 @@ inspectorBackend.registerEnum("Network.CrossOriginOpenerPolicyValue", {SameOrigi
|
|
|
788
788
|
inspectorBackend.registerEnum("Network.CrossOriginEmbedderPolicyValue", {None: "None", Credentialless: "Credentialless", RequireCorp: "RequireCorp"});
|
|
789
789
|
inspectorBackend.registerEnum("Network.ContentSecurityPolicySource", {HTTP: "HTTP", Meta: "Meta"});
|
|
790
790
|
inspectorBackend.registerEnum("Network.ReportStatus", {Queued: "Queued", Pending: "Pending", MarkedForRemoval: "MarkedForRemoval", Success: "Success"});
|
|
791
|
+
inspectorBackend.registerEnum("Network.DeviceBoundSessionUrlRuleRuleType", {Exclude: "Exclude", Include: "Include"});
|
|
791
792
|
inspectorBackend.registerEvent("Network.dataReceived", ["requestId", "timestamp", "dataLength", "encodedDataLength", "data"]);
|
|
792
793
|
inspectorBackend.registerEvent("Network.eventSourceMessageReceived", ["requestId", "timestamp", "eventName", "eventId", "data"]);
|
|
793
794
|
inspectorBackend.registerEvent("Network.loadingFailed", ["requestId", "timestamp", "type", "errorText", "canceled", "blockedReason", "corsErrorStatus"]);
|
|
@@ -831,6 +832,7 @@ inspectorBackend.registerEvent("Network.policyUpdated", []);
|
|
|
831
832
|
inspectorBackend.registerEvent("Network.reportingApiReportAdded", ["report"]);
|
|
832
833
|
inspectorBackend.registerEvent("Network.reportingApiReportUpdated", ["report"]);
|
|
833
834
|
inspectorBackend.registerEvent("Network.reportingApiEndpointsChangedForOrigin", ["origin", "endpoints"]);
|
|
835
|
+
inspectorBackend.registerEvent("Network.deviceBoundSessionsAdded", ["sessions"]);
|
|
834
836
|
inspectorBackend.registerCommand("Network.setAcceptedEncodings", [{"name": "encodings", "type": "array", "optional": false, "description": "List of accepted content encodings.", "typeRef": "Network.ContentEncoding"}], [], "Sets a list of content encodings that will be accepted. Empty list means no encoding is accepted.");
|
|
835
837
|
inspectorBackend.registerCommand("Network.clearAcceptedEncodingsOverride", [], [], "Clears accepted encodings set by setAcceptedEncodings");
|
|
836
838
|
inspectorBackend.registerCommand("Network.canClearBrowserCache", [], ["result"], "Tells whether clearing browser cache is supported.");
|
|
@@ -867,6 +869,8 @@ inspectorBackend.registerCommand("Network.setUserAgentOverride", [{"name": "user
|
|
|
867
869
|
inspectorBackend.registerCommand("Network.streamResourceContent", [{"name": "requestId", "type": "string", "optional": false, "description": "Identifier of the request to stream.", "typeRef": "Network.RequestId"}], ["bufferedData"], "Enables streaming of the response for the given requestId. If enabled, the dataReceived event contains the data that was received during streaming.");
|
|
868
870
|
inspectorBackend.registerCommand("Network.getSecurityIsolationStatus", [{"name": "frameId", "type": "string", "optional": true, "description": "If no frameId is provided, the status of the target is provided.", "typeRef": "Page.FrameId"}], ["status"], "Returns information about the COEP/COOP isolation status.");
|
|
869
871
|
inspectorBackend.registerCommand("Network.enableReportingApi", [{"name": "enable", "type": "boolean", "optional": false, "description": "Whether to enable or disable events for the Reporting API", "typeRef": null}], [], "Enables tracking for the Reporting API, events generated by the Reporting API will now be delivered to the client. Enabling triggers 'reportingApiReportAdded' for all existing reports.");
|
|
872
|
+
inspectorBackend.registerCommand("Network.enableDeviceBoundSessions", [{"name": "enable", "type": "boolean", "optional": false, "description": "Whether to enable or disable events.", "typeRef": null}], [], "Sets up tracking device bound sessions and fetching of initial set of sessions.");
|
|
873
|
+
inspectorBackend.registerCommand("Network.fetchSchemefulSite", [{"name": "origin", "type": "string", "optional": false, "description": "The URL origin.", "typeRef": null}], ["schemefulSite"], "Fetches the schemeful site for a specific origin.");
|
|
870
874
|
inspectorBackend.registerCommand("Network.loadNetworkResource", [{"name": "frameId", "type": "string", "optional": true, "description": "Frame id to get the resource for. Mandatory for frame targets, and should be omitted for worker targets.", "typeRef": "Page.FrameId"}, {"name": "url", "type": "string", "optional": false, "description": "URL of the resource to get content for.", "typeRef": null}, {"name": "options", "type": "object", "optional": false, "description": "Options for the request.", "typeRef": "Network.LoadNetworkResourceOptions"}], ["resource"], "Fetches the resource and returns the content.");
|
|
871
875
|
inspectorBackend.registerCommand("Network.setCookieControls", [{"name": "enableThirdPartyCookieRestriction", "type": "boolean", "optional": false, "description": "Whether 3pc restriction is enabled.", "typeRef": null}, {"name": "disableThirdPartyCookieMetadata", "type": "boolean", "optional": false, "description": "Whether 3pc grace period exception should be enabled; false by default.", "typeRef": null}, {"name": "disableThirdPartyCookieHeuristics", "type": "boolean", "optional": false, "description": "Whether 3pc heuristics exceptions should be enabled; false by default.", "typeRef": null}], [], "Sets Controls for third-party cookie access Page reload is required before the new cookie behavior will be observed");
|
|
872
876
|
inspectorBackend.registerType("Network.ResourceTiming", [{"name": "requestTime", "type": "number", "optional": false, "description": "Timing's requestTime is a baseline in seconds, while the other numbers are ticks in milliseconds relatively to this requestTime.", "typeRef": null}, {"name": "proxyStart", "type": "number", "optional": false, "description": "Started resolving proxy.", "typeRef": null}, {"name": "proxyEnd", "type": "number", "optional": false, "description": "Finished resolving proxy.", "typeRef": null}, {"name": "dnsStart", "type": "number", "optional": false, "description": "Started DNS address resolve.", "typeRef": null}, {"name": "dnsEnd", "type": "number", "optional": false, "description": "Finished DNS address resolve.", "typeRef": null}, {"name": "connectStart", "type": "number", "optional": false, "description": "Started connecting to the remote host.", "typeRef": null}, {"name": "connectEnd", "type": "number", "optional": false, "description": "Connected to the remote host.", "typeRef": null}, {"name": "sslStart", "type": "number", "optional": false, "description": "Started SSL handshake.", "typeRef": null}, {"name": "sslEnd", "type": "number", "optional": false, "description": "Finished SSL handshake.", "typeRef": null}, {"name": "workerStart", "type": "number", "optional": false, "description": "Started running ServiceWorker.", "typeRef": null}, {"name": "workerReady", "type": "number", "optional": false, "description": "Finished Starting ServiceWorker.", "typeRef": null}, {"name": "workerFetchStart", "type": "number", "optional": false, "description": "Started fetch event.", "typeRef": null}, {"name": "workerRespondWithSettled", "type": "number", "optional": false, "description": "Settled fetch event respondWith promise.", "typeRef": null}, {"name": "workerRouterEvaluationStart", "type": "number", "optional": true, "description": "Started ServiceWorker static routing source evaluation.", "typeRef": null}, {"name": "workerCacheLookupStart", "type": "number", "optional": true, "description": "Started cache lookup when the source was evaluated to `cache`.", "typeRef": null}, {"name": "sendStart", "type": "number", "optional": false, "description": "Started sending request.", "typeRef": null}, {"name": "sendEnd", "type": "number", "optional": false, "description": "Finished sending request.", "typeRef": null}, {"name": "pushStart", "type": "number", "optional": false, "description": "Time the server started pushing request.", "typeRef": null}, {"name": "pushEnd", "type": "number", "optional": false, "description": "Time the server finished pushing request.", "typeRef": null}, {"name": "receiveHeadersStart", "type": "number", "optional": false, "description": "Started receiving response headers.", "typeRef": null}, {"name": "receiveHeadersEnd", "type": "number", "optional": false, "description": "Finished receiving response headers.", "typeRef": null}]);
|
|
@@ -909,6 +913,11 @@ inspectorBackend.registerType("Network.ContentSecurityPolicyStatus", [{"name": "
|
|
|
909
913
|
inspectorBackend.registerType("Network.SecurityIsolationStatus", [{"name": "coop", "type": "object", "optional": true, "description": "", "typeRef": "Network.CrossOriginOpenerPolicyStatus"}, {"name": "coep", "type": "object", "optional": true, "description": "", "typeRef": "Network.CrossOriginEmbedderPolicyStatus"}, {"name": "csp", "type": "array", "optional": true, "description": "", "typeRef": "Network.ContentSecurityPolicyStatus"}]);
|
|
910
914
|
inspectorBackend.registerType("Network.ReportingApiReport", [{"name": "id", "type": "string", "optional": false, "description": "", "typeRef": "Network.ReportId"}, {"name": "initiatorUrl", "type": "string", "optional": false, "description": "The URL of the document that triggered the report.", "typeRef": null}, {"name": "destination", "type": "string", "optional": false, "description": "The name of the endpoint group that should be used to deliver the report.", "typeRef": null}, {"name": "type", "type": "string", "optional": false, "description": "The type of the report (specifies the set of data that is contained in the report body).", "typeRef": null}, {"name": "timestamp", "type": "number", "optional": false, "description": "When the report was generated.", "typeRef": "Network.TimeSinceEpoch"}, {"name": "depth", "type": "number", "optional": false, "description": "How many uploads deep the related request was.", "typeRef": null}, {"name": "completedAttempts", "type": "number", "optional": false, "description": "The number of delivery attempts made so far, not including an active attempt.", "typeRef": null}, {"name": "body", "type": "object", "optional": false, "description": "", "typeRef": null}, {"name": "status", "type": "string", "optional": false, "description": "", "typeRef": "Network.ReportStatus"}]);
|
|
911
915
|
inspectorBackend.registerType("Network.ReportingApiEndpoint", [{"name": "url", "type": "string", "optional": false, "description": "The URL of the endpoint to which reports may be delivered.", "typeRef": null}, {"name": "groupName", "type": "string", "optional": false, "description": "Name of the endpoint group.", "typeRef": null}]);
|
|
916
|
+
inspectorBackend.registerType("Network.DeviceBoundSessionKey", [{"name": "site", "type": "string", "optional": false, "description": "The site the session is set up for.", "typeRef": null}, {"name": "id", "type": "string", "optional": false, "description": "The id of the session.", "typeRef": null}]);
|
|
917
|
+
inspectorBackend.registerType("Network.DeviceBoundSessionCookieCraving", [{"name": "name", "type": "string", "optional": false, "description": "The name of the craving.", "typeRef": null}, {"name": "domain", "type": "string", "optional": false, "description": "The domain of the craving.", "typeRef": null}, {"name": "path", "type": "string", "optional": false, "description": "The path of the craving.", "typeRef": null}, {"name": "secure", "type": "boolean", "optional": false, "description": "The `Secure` attribute of the craving attributes.", "typeRef": null}, {"name": "httpOnly", "type": "boolean", "optional": false, "description": "The `HttpOnly` attribute of the craving attributes.", "typeRef": null}, {"name": "sameSite", "type": "string", "optional": true, "description": "The `SameSite` attribute of the craving attributes.", "typeRef": "Network.CookieSameSite"}]);
|
|
918
|
+
inspectorBackend.registerType("Network.DeviceBoundSessionUrlRule", [{"name": "ruleType", "type": "string", "optional": false, "description": "See comments on `net::device_bound_sessions::SessionInclusionRules::UrlRule::rule_type`.", "typeRef": null}, {"name": "hostPattern", "type": "string", "optional": false, "description": "See comments on `net::device_bound_sessions::SessionInclusionRules::UrlRule::host_pattern`.", "typeRef": null}, {"name": "pathPrefix", "type": "string", "optional": false, "description": "See comments on `net::device_bound_sessions::SessionInclusionRules::UrlRule::path_prefix`.", "typeRef": null}]);
|
|
919
|
+
inspectorBackend.registerType("Network.DeviceBoundSessionInclusionRules", [{"name": "origin", "type": "string", "optional": false, "description": "See comments on `net::device_bound_sessions::SessionInclusionRules::origin_`.", "typeRef": null}, {"name": "includeSite", "type": "boolean", "optional": false, "description": "Whether the whole site is included. See comments on `net::device_bound_sessions::SessionInclusionRules::include_site_` for more details; this boolean is true if that value is populated.", "typeRef": null}, {"name": "urlRules", "type": "array", "optional": false, "description": "See comments on `net::device_bound_sessions::SessionInclusionRules::url_rules_`.", "typeRef": "Network.DeviceBoundSessionUrlRule"}]);
|
|
920
|
+
inspectorBackend.registerType("Network.DeviceBoundSession", [{"name": "key", "type": "object", "optional": false, "description": "The site and session ID of the session.", "typeRef": "Network.DeviceBoundSessionKey"}, {"name": "refreshUrl", "type": "string", "optional": false, "description": "See comments on `net::device_bound_sessions::Session::refresh_url_`.", "typeRef": null}, {"name": "inclusionRules", "type": "object", "optional": false, "description": "See comments on `net::device_bound_sessions::Session::inclusion_rules_`.", "typeRef": "Network.DeviceBoundSessionInclusionRules"}, {"name": "cookieCravings", "type": "array", "optional": false, "description": "See comments on `net::device_bound_sessions::Session::cookie_cravings_`.", "typeRef": "Network.DeviceBoundSessionCookieCraving"}, {"name": "expiryDate", "type": "number", "optional": false, "description": "See comments on `net::device_bound_sessions::Session::expiry_date_`.", "typeRef": "Network.TimeSinceEpoch"}, {"name": "cachedChallenge", "type": "string", "optional": true, "description": "See comments on `net::device_bound_sessions::Session::cached_challenge__`.", "typeRef": null}, {"name": "allowedRefreshInitiators", "type": "array", "optional": false, "description": "See comments on `net::device_bound_sessions::Session::allowed_refresh_initiators_`.", "typeRef": "string"}]);
|
|
912
921
|
inspectorBackend.registerType("Network.LoadNetworkResourcePageResult", [{"name": "success", "type": "boolean", "optional": false, "description": "", "typeRef": null}, {"name": "netError", "type": "number", "optional": true, "description": "Optional values used for error reporting.", "typeRef": null}, {"name": "netErrorName", "type": "string", "optional": true, "description": "", "typeRef": null}, {"name": "httpStatusCode", "type": "number", "optional": true, "description": "", "typeRef": null}, {"name": "stream", "type": "string", "optional": true, "description": "If successful, one of the following two fields holds the result.", "typeRef": "IO.StreamHandle"}, {"name": "headers", "type": "object", "optional": true, "description": "Response headers.", "typeRef": "Network.Headers"}]);
|
|
913
922
|
inspectorBackend.registerType("Network.LoadNetworkResourceOptions", [{"name": "disableCache", "type": "boolean", "optional": false, "description": "", "typeRef": null}, {"name": "includeCredentials", "type": "boolean", "optional": false, "description": "", "typeRef": null}]);
|
|
914
923
|
|
|
@@ -1736,6 +1736,13 @@ export const generatedProperties = [
|
|
|
1736
1736
|
],
|
|
1737
1737
|
"name": "column-rule-color"
|
|
1738
1738
|
},
|
|
1739
|
+
{
|
|
1740
|
+
"longhands": [
|
|
1741
|
+
"column-rule-edge-inset-start",
|
|
1742
|
+
"column-rule-edge-inset-end"
|
|
1743
|
+
],
|
|
1744
|
+
"name": "column-rule-edge-inset"
|
|
1745
|
+
},
|
|
1739
1746
|
{
|
|
1740
1747
|
"inherited": false,
|
|
1741
1748
|
"name": "column-rule-edge-inset-end"
|
|
@@ -1753,6 +1760,13 @@ export const generatedProperties = [
|
|
|
1753
1760
|
],
|
|
1754
1761
|
"name": "column-rule-inset"
|
|
1755
1762
|
},
|
|
1763
|
+
{
|
|
1764
|
+
"longhands": [
|
|
1765
|
+
"column-rule-interior-inset-start",
|
|
1766
|
+
"column-rule-interior-inset-end"
|
|
1767
|
+
],
|
|
1768
|
+
"name": "column-rule-interior-inset"
|
|
1769
|
+
},
|
|
1756
1770
|
{
|
|
1757
1771
|
"inherited": false,
|
|
1758
1772
|
"name": "column-rule-interior-inset-end"
|
|
@@ -3765,6 +3779,13 @@ export const generatedProperties = [
|
|
|
3765
3779
|
],
|
|
3766
3780
|
"name": "row-rule-color"
|
|
3767
3781
|
},
|
|
3782
|
+
{
|
|
3783
|
+
"longhands": [
|
|
3784
|
+
"row-rule-edge-inset-start",
|
|
3785
|
+
"row-rule-edge-inset-end"
|
|
3786
|
+
],
|
|
3787
|
+
"name": "row-rule-edge-inset"
|
|
3788
|
+
},
|
|
3768
3789
|
{
|
|
3769
3790
|
"inherited": false,
|
|
3770
3791
|
"name": "row-rule-edge-inset-end"
|
|
@@ -3782,6 +3803,13 @@ export const generatedProperties = [
|
|
|
3782
3803
|
],
|
|
3783
3804
|
"name": "row-rule-inset"
|
|
3784
3805
|
},
|
|
3806
|
+
{
|
|
3807
|
+
"longhands": [
|
|
3808
|
+
"row-rule-interior-inset-start",
|
|
3809
|
+
"row-rule-interior-inset-end"
|
|
3810
|
+
],
|
|
3811
|
+
"name": "row-rule-interior-inset"
|
|
3812
|
+
},
|
|
3785
3813
|
{
|
|
3786
3814
|
"inherited": false,
|
|
3787
3815
|
"name": "row-rule-interior-inset-end"
|
|
@@ -3874,6 +3902,15 @@ export const generatedProperties = [
|
|
|
3874
3902
|
],
|
|
3875
3903
|
"name": "rule-color"
|
|
3876
3904
|
},
|
|
3905
|
+
{
|
|
3906
|
+
"longhands": [
|
|
3907
|
+
"row-rule-edge-inset-start",
|
|
3908
|
+
"row-rule-edge-inset-end",
|
|
3909
|
+
"column-rule-edge-inset-start",
|
|
3910
|
+
"column-rule-edge-inset-end"
|
|
3911
|
+
],
|
|
3912
|
+
"name": "rule-edge-inset"
|
|
3913
|
+
},
|
|
3877
3914
|
{
|
|
3878
3915
|
"longhands": [
|
|
3879
3916
|
"row-rule-edge-inset-start",
|
|
@@ -3887,6 +3924,15 @@ export const generatedProperties = [
|
|
|
3887
3924
|
],
|
|
3888
3925
|
"name": "rule-inset"
|
|
3889
3926
|
},
|
|
3927
|
+
{
|
|
3928
|
+
"longhands": [
|
|
3929
|
+
"row-rule-interior-inset-start",
|
|
3930
|
+
"row-rule-interior-inset-end",
|
|
3931
|
+
"column-rule-interior-inset-start",
|
|
3932
|
+
"column-rule-interior-inset-end"
|
|
3933
|
+
],
|
|
3934
|
+
"name": "rule-interior-inset"
|
|
3935
|
+
},
|
|
3890
3936
|
{
|
|
3891
3937
|
"longhands": [
|
|
3892
3938
|
"column-rule-style",
|
|
@@ -443,6 +443,10 @@ export namespace ProtocolMapping {
|
|
|
443
443
|
'Network.reportingApiReportAdded': [Protocol.Network.ReportingApiReportAddedEvent];
|
|
444
444
|
'Network.reportingApiReportUpdated': [Protocol.Network.ReportingApiReportUpdatedEvent];
|
|
445
445
|
'Network.reportingApiEndpointsChangedForOrigin': [Protocol.Network.ReportingApiEndpointsChangedForOriginEvent];
|
|
446
|
+
/**
|
|
447
|
+
* Triggered when the initial set of device bound sessions is added.
|
|
448
|
+
*/
|
|
449
|
+
'Network.deviceBoundSessionsAdded': [Protocol.Network.DeviceBoundSessionsAddedEvent];
|
|
446
450
|
/**
|
|
447
451
|
* Fired when the node should be inspected. This happens after call to `setInspectMode` or when
|
|
448
452
|
* user manually inspects an element.
|
|
@@ -3518,6 +3522,20 @@ export namespace ProtocolMapping {
|
|
|
3518
3522
|
paramsType: [Protocol.Network.EnableReportingApiRequest];
|
|
3519
3523
|
returnType: void;
|
|
3520
3524
|
};
|
|
3525
|
+
/**
|
|
3526
|
+
* Sets up tracking device bound sessions and fetching of initial set of sessions.
|
|
3527
|
+
*/
|
|
3528
|
+
'Network.enableDeviceBoundSessions': {
|
|
3529
|
+
paramsType: [Protocol.Network.EnableDeviceBoundSessionsRequest];
|
|
3530
|
+
returnType: void;
|
|
3531
|
+
};
|
|
3532
|
+
/**
|
|
3533
|
+
* Fetches the schemeful site for a specific origin.
|
|
3534
|
+
*/
|
|
3535
|
+
'Network.fetchSchemefulSite': {
|
|
3536
|
+
paramsType: [Protocol.Network.FetchSchemefulSiteRequest];
|
|
3537
|
+
returnType: Protocol.Network.FetchSchemefulSiteResponse;
|
|
3538
|
+
};
|
|
3521
3539
|
/**
|
|
3522
3540
|
* Fetches the resource and returns the content.
|
|
3523
3541
|
*/
|
|
@@ -2663,6 +2663,16 @@ declare namespace ProtocolProxyApi {
|
|
|
2663
2663
|
*/
|
|
2664
2664
|
invoke_enableReportingApi(params: Protocol.Network.EnableReportingApiRequest): Promise<Protocol.ProtocolResponseWithError>;
|
|
2665
2665
|
|
|
2666
|
+
/**
|
|
2667
|
+
* Sets up tracking device bound sessions and fetching of initial set of sessions.
|
|
2668
|
+
*/
|
|
2669
|
+
invoke_enableDeviceBoundSessions(params: Protocol.Network.EnableDeviceBoundSessionsRequest): Promise<Protocol.ProtocolResponseWithError>;
|
|
2670
|
+
|
|
2671
|
+
/**
|
|
2672
|
+
* Fetches the schemeful site for a specific origin.
|
|
2673
|
+
*/
|
|
2674
|
+
invoke_fetchSchemefulSite(params: Protocol.Network.FetchSchemefulSiteRequest): Promise<Protocol.Network.FetchSchemefulSiteResponse>;
|
|
2675
|
+
|
|
2666
2676
|
/**
|
|
2667
2677
|
* Fetches the resource and returns the content.
|
|
2668
2678
|
*/
|
|
@@ -2888,6 +2898,11 @@ declare namespace ProtocolProxyApi {
|
|
|
2888
2898
|
|
|
2889
2899
|
reportingApiEndpointsChangedForOrigin(params: Protocol.Network.ReportingApiEndpointsChangedForOriginEvent): void;
|
|
2890
2900
|
|
|
2901
|
+
/**
|
|
2902
|
+
* Triggered when the initial set of device bound sessions is added.
|
|
2903
|
+
*/
|
|
2904
|
+
deviceBoundSessionsAdded(params: Protocol.Network.DeviceBoundSessionsAddedEvent): void;
|
|
2905
|
+
|
|
2891
2906
|
}
|
|
2892
2907
|
|
|
2893
2908
|
export interface OverlayApi {
|
|
@@ -11362,6 +11362,127 @@ export namespace Network {
|
|
|
11362
11362
|
groupName: string;
|
|
11363
11363
|
}
|
|
11364
11364
|
|
|
11365
|
+
/**
|
|
11366
|
+
* Unique identifier for a device bound session.
|
|
11367
|
+
*/
|
|
11368
|
+
export interface DeviceBoundSessionKey {
|
|
11369
|
+
/**
|
|
11370
|
+
* The site the session is set up for.
|
|
11371
|
+
*/
|
|
11372
|
+
site: string;
|
|
11373
|
+
/**
|
|
11374
|
+
* The id of the session.
|
|
11375
|
+
*/
|
|
11376
|
+
id: string;
|
|
11377
|
+
}
|
|
11378
|
+
|
|
11379
|
+
/**
|
|
11380
|
+
* A device bound session's cookie craving.
|
|
11381
|
+
*/
|
|
11382
|
+
export interface DeviceBoundSessionCookieCraving {
|
|
11383
|
+
/**
|
|
11384
|
+
* The name of the craving.
|
|
11385
|
+
*/
|
|
11386
|
+
name: string;
|
|
11387
|
+
/**
|
|
11388
|
+
* The domain of the craving.
|
|
11389
|
+
*/
|
|
11390
|
+
domain: string;
|
|
11391
|
+
/**
|
|
11392
|
+
* The path of the craving.
|
|
11393
|
+
*/
|
|
11394
|
+
path: string;
|
|
11395
|
+
/**
|
|
11396
|
+
* The `Secure` attribute of the craving attributes.
|
|
11397
|
+
*/
|
|
11398
|
+
secure: boolean;
|
|
11399
|
+
/**
|
|
11400
|
+
* The `HttpOnly` attribute of the craving attributes.
|
|
11401
|
+
*/
|
|
11402
|
+
httpOnly: boolean;
|
|
11403
|
+
/**
|
|
11404
|
+
* The `SameSite` attribute of the craving attributes.
|
|
11405
|
+
*/
|
|
11406
|
+
sameSite?: CookieSameSite;
|
|
11407
|
+
}
|
|
11408
|
+
|
|
11409
|
+
export const enum DeviceBoundSessionUrlRuleRuleType {
|
|
11410
|
+
Exclude = 'Exclude',
|
|
11411
|
+
Include = 'Include',
|
|
11412
|
+
}
|
|
11413
|
+
|
|
11414
|
+
/**
|
|
11415
|
+
* A device bound session's inclusion URL rule.
|
|
11416
|
+
*/
|
|
11417
|
+
export interface DeviceBoundSessionUrlRule {
|
|
11418
|
+
/**
|
|
11419
|
+
* See comments on `net::device_bound_sessions::SessionInclusionRules::UrlRule::rule_type`.
|
|
11420
|
+
*/
|
|
11421
|
+
ruleType: DeviceBoundSessionUrlRuleRuleType;
|
|
11422
|
+
/**
|
|
11423
|
+
* See comments on `net::device_bound_sessions::SessionInclusionRules::UrlRule::host_pattern`.
|
|
11424
|
+
*/
|
|
11425
|
+
hostPattern: string;
|
|
11426
|
+
/**
|
|
11427
|
+
* See comments on `net::device_bound_sessions::SessionInclusionRules::UrlRule::path_prefix`.
|
|
11428
|
+
*/
|
|
11429
|
+
pathPrefix: string;
|
|
11430
|
+
}
|
|
11431
|
+
|
|
11432
|
+
/**
|
|
11433
|
+
* A device bound session's inclusion rules.
|
|
11434
|
+
*/
|
|
11435
|
+
export interface DeviceBoundSessionInclusionRules {
|
|
11436
|
+
/**
|
|
11437
|
+
* See comments on `net::device_bound_sessions::SessionInclusionRules::origin_`.
|
|
11438
|
+
*/
|
|
11439
|
+
origin: string;
|
|
11440
|
+
/**
|
|
11441
|
+
* Whether the whole site is included. See comments on
|
|
11442
|
+
* `net::device_bound_sessions::SessionInclusionRules::include_site_` for more
|
|
11443
|
+
* details; this boolean is true if that value is populated.
|
|
11444
|
+
*/
|
|
11445
|
+
includeSite: boolean;
|
|
11446
|
+
/**
|
|
11447
|
+
* See comments on `net::device_bound_sessions::SessionInclusionRules::url_rules_`.
|
|
11448
|
+
*/
|
|
11449
|
+
urlRules: DeviceBoundSessionUrlRule[];
|
|
11450
|
+
}
|
|
11451
|
+
|
|
11452
|
+
/**
|
|
11453
|
+
* A device bound session.
|
|
11454
|
+
*/
|
|
11455
|
+
export interface DeviceBoundSession {
|
|
11456
|
+
/**
|
|
11457
|
+
* The site and session ID of the session.
|
|
11458
|
+
*/
|
|
11459
|
+
key: DeviceBoundSessionKey;
|
|
11460
|
+
/**
|
|
11461
|
+
* See comments on `net::device_bound_sessions::Session::refresh_url_`.
|
|
11462
|
+
*/
|
|
11463
|
+
refreshUrl: string;
|
|
11464
|
+
/**
|
|
11465
|
+
* See comments on `net::device_bound_sessions::Session::inclusion_rules_`.
|
|
11466
|
+
*/
|
|
11467
|
+
inclusionRules: DeviceBoundSessionInclusionRules;
|
|
11468
|
+
/**
|
|
11469
|
+
* See comments on `net::device_bound_sessions::Session::cookie_cravings_`.
|
|
11470
|
+
*/
|
|
11471
|
+
cookieCravings: DeviceBoundSessionCookieCraving[];
|
|
11472
|
+
/**
|
|
11473
|
+
* See comments on `net::device_bound_sessions::Session::expiry_date_`.
|
|
11474
|
+
*/
|
|
11475
|
+
expiryDate: Network.TimeSinceEpoch;
|
|
11476
|
+
/**
|
|
11477
|
+
* See comments on `net::device_bound_sessions::Session::cached_challenge__`.
|
|
11478
|
+
*/
|
|
11479
|
+
cachedChallenge?: string;
|
|
11480
|
+
/**
|
|
11481
|
+
* See comments on `net::device_bound_sessions::Session::allowed_refresh_initiators_`.
|
|
11482
|
+
*/
|
|
11483
|
+
allowedRefreshInitiators: string[];
|
|
11484
|
+
}
|
|
11485
|
+
|
|
11365
11486
|
/**
|
|
11366
11487
|
* An object providing the result of a network resource load.
|
|
11367
11488
|
*/
|
|
@@ -11902,6 +12023,27 @@ export namespace Network {
|
|
|
11902
12023
|
enable: boolean;
|
|
11903
12024
|
}
|
|
11904
12025
|
|
|
12026
|
+
export interface EnableDeviceBoundSessionsRequest {
|
|
12027
|
+
/**
|
|
12028
|
+
* Whether to enable or disable events.
|
|
12029
|
+
*/
|
|
12030
|
+
enable: boolean;
|
|
12031
|
+
}
|
|
12032
|
+
|
|
12033
|
+
export interface FetchSchemefulSiteRequest {
|
|
12034
|
+
/**
|
|
12035
|
+
* The URL origin.
|
|
12036
|
+
*/
|
|
12037
|
+
origin: string;
|
|
12038
|
+
}
|
|
12039
|
+
|
|
12040
|
+
export interface FetchSchemefulSiteResponse extends ProtocolResponseWithError {
|
|
12041
|
+
/**
|
|
12042
|
+
* The corresponding schemeful site.
|
|
12043
|
+
*/
|
|
12044
|
+
schemefulSite: string;
|
|
12045
|
+
}
|
|
12046
|
+
|
|
11905
12047
|
export interface LoadNetworkResourceRequest {
|
|
11906
12048
|
/**
|
|
11907
12049
|
* Frame id to get the resource for. Mandatory for frame targets, and
|
|
@@ -12735,6 +12877,16 @@ export namespace Network {
|
|
|
12735
12877
|
origin: string;
|
|
12736
12878
|
endpoints: ReportingApiEndpoint[];
|
|
12737
12879
|
}
|
|
12880
|
+
|
|
12881
|
+
/**
|
|
12882
|
+
* Triggered when the initial set of device bound sessions is added.
|
|
12883
|
+
*/
|
|
12884
|
+
export interface DeviceBoundSessionsAddedEvent {
|
|
12885
|
+
/**
|
|
12886
|
+
* The device bound sessions.
|
|
12887
|
+
*/
|
|
12888
|
+
sessions: DeviceBoundSession[];
|
|
12889
|
+
}
|
|
12738
12890
|
}
|
|
12739
12891
|
|
|
12740
12892
|
/**
|
package/front_end/models/ai_assistance/data_formatters/PerformanceInsightFormatter.snapshot.txt
CHANGED
|
@@ -203,7 +203,7 @@ Durations:
|
|
|
203
203
|
- Download time: 1 ms
|
|
204
204
|
- Main thread processing time: 3 ms
|
|
205
205
|
- Total duration: 7 ms
|
|
206
|
-
Initiator: http://localhost:8787/lcp-discovery-delay/
|
|
206
|
+
Initiator: http://localhost:8787/lcp-discovery-delay/app.js
|
|
207
207
|
Redirects: no redirects
|
|
208
208
|
Status code: 200
|
|
209
209
|
MIME Type: image/jpeg
|
|
@@ -212,7 +212,7 @@ Initial priority: Low
|
|
|
212
212
|
Final priority: High
|
|
213
213
|
Render blocking: No
|
|
214
214
|
From a service worker: No
|
|
215
|
-
Initiators (root request to the request that directly loaded this one): http://localhost:8787/lcp-discovery-delay/index.html
|
|
215
|
+
Initiators (root request to the request that directly loaded this one): http://localhost:8787/lcp-discovery-delay/index.html, http://localhost:8787/lcp-discovery-delay/app.js
|
|
216
216
|
Response headers
|
|
217
217
|
- Cache-Control: public, max-age=0
|
|
218
218
|
- ETag: <redacted>
|
|
@@ -570,7 +570,7 @@ export class PerformanceTraceFormatter {
|
|
|
570
570
|
|
|
571
571
|
let cur: Trace.Types.Events.SyntheticNetworkRequest|undefined = request;
|
|
572
572
|
while (cur) {
|
|
573
|
-
const initiator =
|
|
573
|
+
const initiator = Trace.Extras.Initiators.getNetworkInitiator(parsedTrace.data, cur);
|
|
574
574
|
if (initiator) {
|
|
575
575
|
// Should never happen, but if it did that would be an infinite loop.
|
|
576
576
|
if (initiators.includes(initiator)) {
|
|
@@ -636,7 +636,7 @@ export class PerformanceTraceFormatter {
|
|
|
636
636
|
const downloadTime = syntheticData.finishTime - syntheticData.downloadStart;
|
|
637
637
|
|
|
638
638
|
const renderBlocking = Trace.Helpers.Network.isSyntheticNetworkRequestEventRenderBlocking(request);
|
|
639
|
-
const initiator =
|
|
639
|
+
const initiator = Trace.Extras.Initiators.getNetworkInitiator(parsedTrace.data, request);
|
|
640
640
|
|
|
641
641
|
const priorityLines = [];
|
|
642
642
|
if (initialPriority === priority) {
|
|
@@ -683,6 +683,8 @@ const emulatedDevices = [
|
|
|
683
683
|
'capabilities': ['touch', 'mobile'],
|
|
684
684
|
'user-agent':
|
|
685
685
|
'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
|
|
686
|
+
'user-agent-metadata':
|
|
687
|
+
{'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true},
|
|
686
688
|
'type': 'phone',
|
|
687
689
|
},
|
|
688
690
|
{
|
|
@@ -703,6 +705,8 @@ const emulatedDevices = [
|
|
|
703
705
|
'capabilities': ['touch', 'mobile'],
|
|
704
706
|
'user-agent':
|
|
705
707
|
'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
|
|
708
|
+
'user-agent-metadata':
|
|
709
|
+
{'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true},
|
|
706
710
|
'type': 'phone',
|
|
707
711
|
},
|
|
708
712
|
{
|
|
@@ -723,6 +727,8 @@ const emulatedDevices = [
|
|
|
723
727
|
'capabilities': ['touch', 'mobile'],
|
|
724
728
|
'user-agent':
|
|
725
729
|
'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
|
|
730
|
+
'user-agent-metadata':
|
|
731
|
+
{'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true},
|
|
726
732
|
'type': 'phone',
|
|
727
733
|
},
|
|
728
734
|
{
|
|
@@ -743,6 +749,8 @@ const emulatedDevices = [
|
|
|
743
749
|
'capabilities': ['touch', 'mobile'],
|
|
744
750
|
'user-agent':
|
|
745
751
|
'Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
|
|
752
|
+
'user-agent-metadata':
|
|
753
|
+
{'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPhone', 'mobile': true},
|
|
746
754
|
'type': 'phone',
|
|
747
755
|
},
|
|
748
756
|
{
|
|
@@ -851,6 +859,8 @@ const emulatedDevices = [
|
|
|
851
859
|
'capabilities': ['touch', 'mobile'],
|
|
852
860
|
'user-agent':
|
|
853
861
|
'Mozilla/5.0 (iPad; CPU OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1',
|
|
862
|
+
'user-agent-metadata':
|
|
863
|
+
{'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPad', 'mobile': true},
|
|
854
864
|
'type': 'tablet',
|
|
855
865
|
},
|
|
856
866
|
{
|
|
@@ -871,6 +881,8 @@ const emulatedDevices = [
|
|
|
871
881
|
'capabilities': ['touch', 'mobile'],
|
|
872
882
|
'user-agent':
|
|
873
883
|
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Safari/605.1.15',
|
|
884
|
+
'user-agent-metadata':
|
|
885
|
+
{'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPad', 'mobile': true},
|
|
874
886
|
'type': 'tablet',
|
|
875
887
|
},
|
|
876
888
|
{
|
|
@@ -891,6 +903,8 @@ const emulatedDevices = [
|
|
|
891
903
|
'capabilities': ['touch', 'mobile'],
|
|
892
904
|
'user-agent':
|
|
893
905
|
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Safari/605.1.15',
|
|
906
|
+
'user-agent-metadata':
|
|
907
|
+
{'platform': 'iOS', 'platformVersion': '18.5', 'architecture': '', 'model': 'iPad', 'mobile': true},
|
|
894
908
|
'type': 'tablet',
|
|
895
909
|
},
|
|
896
910
|
{
|
|
@@ -1143,6 +1157,8 @@ const emulatedDevices = [
|
|
|
1143
1157
|
'capabilities': ['touch', 'mobile'],
|
|
1144
1158
|
'user-agent':
|
|
1145
1159
|
'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53',
|
|
1160
|
+
'user-agent-metadata':
|
|
1161
|
+
{'platform': 'iOS', 'platformVersion': '7.1.2', 'architecture': '', 'model': 'iPhone', 'mobile': true},
|
|
1146
1162
|
'type': 'phone',
|
|
1147
1163
|
},
|
|
1148
1164
|
{
|
|
@@ -1171,6 +1187,8 @@ const emulatedDevices = [
|
|
|
1171
1187
|
'capabilities': ['touch', 'mobile'],
|
|
1172
1188
|
'user-agent':
|
|
1173
1189
|
'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1',
|
|
1190
|
+
'user-agent-metadata':
|
|
1191
|
+
{'platform': 'iOS', 'platformVersion': '10.3.1', 'architecture': '', 'model': 'iPhone', 'mobile': true},
|
|
1174
1192
|
'type': 'phone',
|
|
1175
1193
|
},
|
|
1176
1194
|
{
|
|
@@ -1199,6 +1217,8 @@ const emulatedDevices = [
|
|
|
1199
1217
|
'capabilities': ['touch', 'mobile'],
|
|
1200
1218
|
'user-agent':
|
|
1201
1219
|
'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1',
|
|
1220
|
+
'user-agent-metadata':
|
|
1221
|
+
{'platform': 'iOS', 'platformVersion': '13.2.3', 'architecture': '', 'model': 'iPhone', 'mobile': true},
|
|
1202
1222
|
'type': 'phone',
|
|
1203
1223
|
},
|
|
1204
1224
|
{
|
|
@@ -1227,6 +1247,8 @@ const emulatedDevices = [
|
|
|
1227
1247
|
'capabilities': ['touch', 'mobile'],
|
|
1228
1248
|
'user-agent':
|
|
1229
1249
|
'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1',
|
|
1250
|
+
'user-agent-metadata':
|
|
1251
|
+
{'platform': 'iOS', 'platformVersion': '13.2.3', 'architecture': '', 'model': 'iPhone', 'mobile': true},
|
|
1230
1252
|
'type': 'phone',
|
|
1231
1253
|
},
|
|
1232
1254
|
{
|
|
@@ -1241,6 +1263,8 @@ const emulatedDevices = [
|
|
|
1241
1263
|
'capabilities': ['touch', 'mobile'],
|
|
1242
1264
|
'user-agent':
|
|
1243
1265
|
'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1',
|
|
1266
|
+
'user-agent-metadata':
|
|
1267
|
+
{'platform': 'iOS', 'platformVersion': '13.2.3', 'architecture': '', 'model': 'iPhone', 'mobile': true},
|
|
1244
1268
|
'type': 'phone',
|
|
1245
1269
|
},
|
|
1246
1270
|
{
|
|
@@ -1716,6 +1740,8 @@ const emulatedDevices = [
|
|
|
1716
1740
|
'capabilities': ['touch', 'mobile'],
|
|
1717
1741
|
'user-agent':
|
|
1718
1742
|
'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
|
1743
|
+
'user-agent-metadata':
|
|
1744
|
+
{'platform': 'iOS', 'platformVersion': '11.0', 'architecture': '', 'model': 'iPad', 'mobile': true},
|
|
1719
1745
|
'type': 'tablet',
|
|
1720
1746
|
},
|
|
1721
1747
|
{
|
|
@@ -1730,6 +1756,8 @@ const emulatedDevices = [
|
|
|
1730
1756
|
'capabilities': ['touch', 'mobile'],
|
|
1731
1757
|
'user-agent':
|
|
1732
1758
|
'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1',
|
|
1759
|
+
'user-agent-metadata':
|
|
1760
|
+
{'platform': 'iOS', 'platformVersion': '11.0', 'architecture': '', 'model': 'iPad', 'mobile': true},
|
|
1733
1761
|
'type': 'tablet',
|
|
1734
1762
|
},
|
|
1735
1763
|
{
|
|
@@ -8918,6 +8918,10 @@ export const NativeFunctions = [
|
|
|
8918
8918
|
name: "getFramebufferPixelLocalStorageParameterWEBGL",
|
|
8919
8919
|
signatures: [["plane","pname"]]
|
|
8920
8920
|
},
|
|
8921
|
+
{
|
|
8922
|
+
name: "mapSync",
|
|
8923
|
+
signatures: [["mode","?offset","?size"]]
|
|
8924
|
+
},
|
|
8921
8925
|
{
|
|
8922
8926
|
name: "mapAsync",
|
|
8923
8927
|
signatures: [["mode","?offset","?size"]]
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Copyright 2026 The Chromium Authors
|
|
2
|
+
// Use of this source code is governed by a BSD-style license that can be
|
|
3
|
+
// found in the LICENSE file.
|
|
4
|
+
import type * as Handlers from '../handlers/handlers.js';
|
|
5
|
+
import type * as Types from '../types/types.js';
|
|
6
|
+
|
|
7
|
+
import {get as getStackTrace} from './StackTraceForEvent.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* There are bugs in the backend tracing that means that network requests are
|
|
11
|
+
* often incorrectly tied to an initiator. This function exists as a utility to
|
|
12
|
+
* look up an event's initiator regardless of the type of event, but also to
|
|
13
|
+
* provide a post-parsing fix for network initiators.
|
|
14
|
+
* The TL;DR is that images injected by a script will incorrectly have their
|
|
15
|
+
* initiator set to the root document. To fix this, we look at the stack trace
|
|
16
|
+
* when the request was sent, and use that.
|
|
17
|
+
*/
|
|
18
|
+
export function getNetworkInitiator(data: Handlers.Types.HandlerData, event: Types.Events.SyntheticNetworkRequest):
|
|
19
|
+
Types.Events.SyntheticNetworkRequest|undefined {
|
|
20
|
+
const networkHandlerInitiator = data.NetworkRequests.incompleteInitiator.get(event);
|
|
21
|
+
if (networkHandlerInitiator?.args.data.mimeType === 'text/css') {
|
|
22
|
+
// The bugs in tracing & initiators apply mostly to scripts; we have not
|
|
23
|
+
// seen a case where the trace events identify a CSS stylesheet as the
|
|
24
|
+
// initiator that is incorrect. Therefore, if a stylesheet is identified as
|
|
25
|
+
// the initiator, we trust that it is accurate and can exit early.
|
|
26
|
+
return networkHandlerInitiator;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// For network requests, it is more reliable to calculate the initiator via
|
|
30
|
+
// the stack trace if we have one.
|
|
31
|
+
|
|
32
|
+
// We have to use the raw source event (`ResourceSendRequest`) as that is
|
|
33
|
+
// the event with the `sampleStackId` property which is required to
|
|
34
|
+
// calculate this stacktrace correctly.
|
|
35
|
+
const stack = getStackTrace(event.rawSourceEvent, data);
|
|
36
|
+
|
|
37
|
+
// If the resource was injected by a script, it will have a parent call
|
|
38
|
+
// frame that points to the script. Otherwise, there is no parent and
|
|
39
|
+
// therefore we fallthrough to looking at the initiator directly on the
|
|
40
|
+
// network request.
|
|
41
|
+
const initiatorCallFrame = stack?.parent?.callFrames.at(0);
|
|
42
|
+
if (!initiatorCallFrame) {
|
|
43
|
+
return networkHandlerInitiator;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Find all the requests for the URL we are searching for. Most of the time
|
|
47
|
+
// there is only 1, but there can be multiple requests for the same URL. The
|
|
48
|
+
// filtering by the timestamp ensures that we can never pick an initiator
|
|
49
|
+
// that happened after the initiated event.
|
|
50
|
+
const matchingRequestIds = data.NetworkRequests.requestIdsByURL.get(initiatorCallFrame.url) ?? [];
|
|
51
|
+
const matchingRequests = matchingRequestIds.map(id => data.NetworkRequests.byId.get(id))
|
|
52
|
+
.filter(req => req !== undefined)
|
|
53
|
+
.filter(req => req.ts < event.ts);
|
|
54
|
+
|
|
55
|
+
// Now we have filtered and have a list of requests that are before the
|
|
56
|
+
// event, we take the last one - the one closest to the initiated event.
|
|
57
|
+
// In the case that there are >1 requests, this is an educated guess.
|
|
58
|
+
return matchingRequests.at(-1);
|
|
59
|
+
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// found in the LICENSE file.
|
|
4
4
|
|
|
5
5
|
export * as FilmStrip from './FilmStrip.js';
|
|
6
|
+
export * as Initiators from './Initiators.js';
|
|
6
7
|
export * as MainThreadActivity from './MainThreadActivity.js';
|
|
7
8
|
export * as ScriptDuplication from './ScriptDuplication.js';
|
|
8
9
|
export * as StackTraceForEvent from './StackTraceForEvent.js';
|