cfsolve 0.1.1 → 0.1.2
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/README.md +10 -9
- data/UPSTREAM.md +6 -6
- data/lib/cfsolve/profiles/safari-26-ios/answers.json +2562 -1887
- data/lib/cfsolve/profiles/safari-26-ios/challenge-page-answers.json +1873 -1198
- data/lib/cfsolve/profiles/safari-26-ios.json +0 -8
- data/lib/cfsolve/version.rb +2 -2
- data/vendor/cfsolve/README.md +0 -35
- data/vendor/cfsolve/examples/build_profile.rs +17 -15
- data/vendor/cfsolve/examples/capture_session.rs +37 -0
- data/vendor/cfsolve/examples/check_answers.rs +66 -0
- data/vendor/cfsolve/examples/compare_session.rs +190 -0
- data/vendor/cfsolve/examples/stage2_snapshot.rs +4 -1
- data/vendor/cfsolve/profiles/safari-26-ios/answers.json +2562 -1887
- data/vendor/cfsolve/profiles/safari-26-ios/challenge-page-answers.json +1873 -1198
- data/vendor/cfsolve/profiles/safari-26-ios.json +0 -8
- data/vendor/cfsolve/scripts/capture_cssom.mjs +42 -0
- data/vendor/cfsolve/scripts/serve_cssom.py +111 -0
- data/vendor/cfsolve/src/capture/profile.rs +7 -18
- data/vendor/cfsolve/src/capture/recorded.rs +42 -7
- data/vendor/cfsolve/src/challenge/installed/audit.rs +131 -0
- data/vendor/cfsolve/src/challenge/installed.rs +122 -271
- data/vendor/cfsolve/src/challenge/payload.rs +107 -5
- data/vendor/cfsolve/src/challenge/state.rs +98 -16
- data/vendor/cfsolve/src/deobfuscate/encoded_strings.rs +3 -2
- data/vendor/cfsolve/src/deobfuscate/helper_objects.rs +17 -32
- data/vendor/cfsolve/src/deobfuscate/register_arrays.rs +18 -5
- data/vendor/cfsolve/src/embedding_page/extra_params.rs +0 -14
- data/vendor/cfsolve/src/embedding_page/page.rs +28 -2
- data/vendor/cfsolve/src/http/client.rs +11 -0
- data/vendor/cfsolve/src/js/ast.rs +12 -3
- data/vendor/cfsolve/src/js/objects.rs +9 -2
- data/vendor/cfsolve/src/listing/fold.rs +0 -83
- data/vendor/cfsolve/src/listing/query.rs +25 -244
- data/vendor/cfsolve/src/listing.rs +0 -1
- data/vendor/cfsolve/src/session/initial.rs +14 -5
- data/vendor/cfsolve/src/session/probes.rs +160 -125
- data/vendor/cfsolve/src/session/timing.rs +58 -53
- data/vendor/cfsolve/src/session/widget.rs +5 -6
- data/vendor/cfsolve/src/stage2/analysis/analyze.rs +50 -33
- data/vendor/cfsolve/src/stage2/analysis/discovery.rs +61 -66
- data/vendor/cfsolve/src/stage2/analysis/envelope.rs +31 -21
- data/vendor/cfsolve/src/stage2/analysis/recognize.rs +3 -5
- data/vendor/cfsolve/src/stage2/analysis.rs +0 -1
- data/vendor/cfsolve/src/stage2/audit_globals.rs +310 -0
- data/vendor/cfsolve/src/stage2/benchmark.rs +5 -8
- data/vendor/cfsolve/src/stage2/call_stack.rs +72 -16
- data/vendor/cfsolve/src/stage2/interaction/native.rs +2 -1
- data/vendor/cfsolve/src/stage2/interaction/plan.rs +0 -3
- data/vendor/cfsolve/src/stage2/payload/recover.rs +54 -23
- data/vendor/cfsolve/src/stage2/probes/ice.rs +11 -10
- data/vendor/cfsolve/src/stage2/probes/media.rs +47 -33
- data/vendor/cfsolve/src/stage2/probes/performance.rs +1 -0
- data/vendor/cfsolve/src/stage2/probes/rects.rs +12 -17
- data/vendor/cfsolve/src/stage2/probes/stack.rs +50 -103
- data/vendor/cfsolve/src/stage2/probes/websocket_echo.rs +17 -86
- data/vendor/cfsolve/src/stage2/probes.rs +0 -1
- data/vendor/cfsolve/src/stage2/records.rs +4 -13
- data/vendor/cfsolve/src/stage2/reference.json +1 -1
- data/vendor/cfsolve/src/stage2/reference.rs +98 -100
- data/vendor/cfsolve/src/stage2/registry.rs +41 -34
- data/vendor/cfsolve/src/stage2/replay.rs +182 -254
- data/vendor/cfsolve/src/stage2/stylesheets.rs +176 -0
- data/vendor/cfsolve/src/stage2/trace.rs +18 -0
- data/vendor/cfsolve/src/stage2/vocabulary.rs +111 -401
- data/vendor/cfsolve/src/stage2.rs +2 -1
- data/vendor/cfsolve/src/vm/disassemble.rs +39 -10
- data/vendor/cfsolve/src/vm/interpret/access.rs +5 -21
- data/vendor/cfsolve/src/vm/interpret/builtin.rs +6 -53
- data/vendor/cfsolve/src/vm/interpret/call.rs +86 -9
- data/vendor/cfsolve/src/vm/interpret/compile.rs +626 -0
- data/vendor/cfsolve/src/vm/interpret/copies.rs +232 -120
- data/vendor/cfsolve/src/vm/interpret/evaluate/tests.rs +96 -8
- data/vendor/cfsolve/src/vm/interpret/evaluate.rs +219 -92
- data/vendor/cfsolve/src/vm/interpret/explore.rs +155 -39
- data/vendor/cfsolve/src/vm/interpret/frozen.rs +171 -0
- data/vendor/cfsolve/src/vm/interpret/intrinsic.rs +350 -0
- data/vendor/cfsolve/src/vm/interpret/plan.rs +71 -44
- data/vendor/cfsolve/src/vm/interpret/run.rs +202 -13
- data/vendor/cfsolve/src/vm/interpret.rs +7 -2
- data/vendor/cfsolve/src/vm/machine.rs +6 -2
- data/vendor/cfsolve/src/vm/packed_names.rs +307 -0
- data/vendor/cfsolve/src/vm/session.rs +36 -14
- data/vendor/cfsolve/src/vm/value.rs +13 -0
- data/vendor/cfsolve/src/vm.rs +1 -0
- data/vendor/cfsolve/vendor/btls-sys/src/lib.rs +3 -0
- metadata +13 -6
- data/vendor/cfsolve/src/listing/normalize.rs +0 -264
- data/vendor/cfsolve/src/stage2/analysis/outputs.rs +0 -327
- data/vendor/cfsolve/src/stage2/probes/stylesheets.rs +0 -249
- data/vendor/cfsolve/src/stage2/reference-expanded.json +0 -42
- data/vendor/cfsolve/src/stage2/session_names.rs +0 -470
|
@@ -30,153 +30,149 @@ pub(crate) static REFERENCE: LazyLock<Reference> = LazyLock::new(|| {
|
|
|
30
30
|
reference
|
|
31
31
|
});
|
|
32
32
|
|
|
33
|
-
/// Collection strings including uses of names held in header registers. The original
|
|
34
|
-
/// reference remains the stored-answer identity; this supplements its alignment evidence.
|
|
35
|
-
pub(crate) static EXPANDED_REFERENCE: LazyLock<Reference> = LazyLock::new(|| {
|
|
36
|
-
serde_json::from_str(include_str!("reference-expanded.json"))
|
|
37
|
-
.expect("the expanded reference is valid JSON")
|
|
38
|
-
});
|
|
39
|
-
|
|
40
33
|
/// The challenge option (`_cf_chl_opt`) naming the platform segment of a probe's request path.
|
|
41
|
-
pub(crate) const PLATFORM_OPTION: &str = "
|
|
34
|
+
pub(crate) const PLATFORM_OPTION: &str = "_61e7550cb6b4bdd13e5e6cdf";
|
|
42
35
|
/// The option holding the session's ray, which the worker fetch requests.
|
|
43
|
-
pub(crate) const RAY_OPTION: &str = "
|
|
36
|
+
pub(crate) const RAY_OPTION: &str = "_6917f47d281ba54bc5956244";
|
|
44
37
|
/// The option holding the nonce the worker fetch requests.
|
|
45
|
-
pub(crate) const NONCE_OPTION: &str = "
|
|
38
|
+
pub(crate) const NONCE_OPTION: &str = "_ca0ac6bf4c619f1f6d77467e";
|
|
46
39
|
|
|
47
40
|
/// Shared result field used by clock and private-token probes.
|
|
48
|
-
pub(crate) const SHARED_RESULT: &str = "
|
|
41
|
+
pub(crate) const SHARED_RESULT: &str = "_6e834e0d80e79f99f3e3c621";
|
|
49
42
|
|
|
50
43
|
/// What the clock probe reports when its worker fails.
|
|
51
|
-
pub(crate) const CLOCK_FALLBACK: &str = "
|
|
52
|
-
|
|
53
|
-
pub(crate) const DATES_TODAY: &str = "LKWB0";
|
|
54
|
-
pub(crate) const DATES_OFFSET: &str = "kCaP5";
|
|
55
|
-
pub(crate) const DATES_ZONE: &str = "vFsge3";
|
|
44
|
+
pub(crate) const CLOCK_FALLBACK: &str = "_71ba78019b7f9643f2d8676c";
|
|
56
45
|
|
|
57
|
-
pub(crate) const
|
|
46
|
+
pub(crate) const DATES_TODAY: &str = "_a614b792240c7239c3b90a0f";
|
|
47
|
+
pub(crate) const DATES_OFFSET: &str = "_19d2e214590e0ed54474b83f";
|
|
48
|
+
pub(crate) const DATES_ZONE: &str = "_6642b9bf508a9a8a56fc75a6";
|
|
58
49
|
|
|
59
|
-
pub(crate) const
|
|
60
|
-
["gOEm7", "rLrku6", "XEUHT5", "hRxVQ2", "vxrRf4"];
|
|
61
|
-
pub(crate) const COMPUTED_STYLE_MAP: &str = "dKjG5";
|
|
62
|
-
pub(crate) const FONT_FACE_OUTPUTS: [&str; 4] = ["IzIpb8", "kxzY1", "EgIt8", "LvRtb9"];
|
|
63
|
-
pub(crate) const FONT_CANVAS_OUTPUTS: [&str; 3] = ["sibaD1", "uoBG2", "jrVX6"];
|
|
64
|
-
pub(crate) const FONT_DOM_OUTPUTS: [&str; 2] = ["SUBTl0", "vqzXM2"];
|
|
65
|
-
pub(crate) const STYLESHEET_DIGEST: &str = "VukLq9";
|
|
66
|
-
pub(crate) const STYLESHEET_MARKER: &str = "QqUE6";
|
|
50
|
+
pub(crate) const DOM_MUTATION_RESULT: &str = "_38d7dd4de03b4319c02bcd23";
|
|
67
51
|
|
|
68
52
|
// Environment and environment-audit names with session-specific replay patches.
|
|
69
53
|
|
|
70
54
|
/// The environment probe's `document.referrer`.
|
|
71
|
-
pub(crate) const ENVIRONMENT_REFERRER: &str = "
|
|
55
|
+
pub(crate) const ENVIRONMENT_REFERRER: &str = "_918d40e1589474fa234a7dfb";
|
|
72
56
|
/// The audit's groups of readers, by the value they read.
|
|
73
|
-
pub(crate) const ENVIRONMENT_AUDIT_GROUPS: &str = "
|
|
57
|
+
pub(crate) const ENVIRONMENT_AUDIT_GROUPS: &str = "_ab03e54c0eaeabaaa88a79af";
|
|
74
58
|
/// The audit's measured values.
|
|
75
|
-
pub(crate) const ENVIRONMENT_AUDIT_VALUES: &str = "
|
|
59
|
+
pub(crate) const ENVIRONMENT_AUDIT_VALUES: &str = "_0fd3fb16d62a09a96c3011c0";
|
|
76
60
|
/// Navigation decoded size minus a Server-Timing duration.
|
|
77
|
-
pub(crate) const ENVIRONMENT_AUDIT_REDUCTION: &str = "
|
|
61
|
+
pub(crate) const ENVIRONMENT_AUDIT_REDUCTION: &str = "_a7dc0e2158b3f79371af65eb";
|
|
78
62
|
/// Navigation decoded size.
|
|
79
|
-
pub(crate) const ENVIRONMENT_AUDIT_DECODED: &str = "
|
|
63
|
+
pub(crate) const ENVIRONMENT_AUDIT_DECODED: &str = "_a7f1b9185bc330b1a3102acc";
|
|
80
64
|
/// Navigation encoded size.
|
|
81
|
-
pub(crate) const ENVIRONMENT_AUDIT_ENCODED: &str = "
|
|
65
|
+
pub(crate) const ENVIRONMENT_AUDIT_ENCODED: &str = "_0b5e100d843fbc660d3ae2e8";
|
|
82
66
|
/// Whether the probe's frame supports touch events.
|
|
83
|
-
pub(crate) const ENVIRONMENT_AUDIT_TOUCH: &str = "
|
|
67
|
+
pub(crate) const ENVIRONMENT_AUDIT_TOUCH: &str = "_40f087c21d8a2e447e2016d2";
|
|
84
68
|
/// The probe frame's `isSecureContext` value.
|
|
85
|
-
pub(crate) const ENVIRONMENT_AUDIT_SECURE: &str = "
|
|
69
|
+
pub(crate) const ENVIRONMENT_AUDIT_SECURE: &str = "_a09c662213172dfdf7fe11cd";
|
|
86
70
|
/// The value of `Notification.permission`.
|
|
87
|
-
pub(crate) const ENVIRONMENT_AUDIT_PERMISSION: &str = "
|
|
71
|
+
pub(crate) const ENVIRONMENT_AUDIT_PERMISSION: &str = "_f1e2967f23abbbf676f8a3a9";
|
|
88
72
|
|
|
89
|
-
|
|
73
|
+
/// The isolation probe's results for blocked evaluation and cross-origin history writes.
|
|
74
|
+
pub(crate) const ISOLATION_FAILURE_FIELDS: [&str; 2] =
|
|
75
|
+
["_4dab37431407f6aa72aa262d", "_7ca4f44cb8e7aaf5802217d5"];
|
|
76
|
+
pub(crate) const STYLESHEETS_TEXT: &str = "_2da798f52f05c8e2a3575e52";
|
|
77
|
+
pub(crate) const STYLESHEETS_HASH: &str = "_3d4d40ff2e985151f19ad154";
|
|
90
78
|
|
|
91
|
-
pub(crate) const
|
|
92
|
-
|
|
93
|
-
pub(crate) const
|
|
94
|
-
pub(crate) const
|
|
95
|
-
pub(crate) const
|
|
96
|
-
pub(crate) const
|
|
97
|
-
pub(crate) const
|
|
79
|
+
pub(crate) const ERROR_MESSAGE_LENGTH_RESULT: &str = "_0d4993e111c0f8ff7cb86b23";
|
|
80
|
+
|
|
81
|
+
pub(crate) const IMAGE_WIDTH: &str = "_c937904afdbf6a962a495698";
|
|
82
|
+
pub(crate) const IMAGE_HEIGHT: &str = "_73085dbd94bdf2f4a55ea8d4";
|
|
83
|
+
pub(crate) const IMAGE_EFFECTIVE_TYPE: &str = "_bd02f25dbe60a1cd3392f2a1";
|
|
84
|
+
pub(crate) const IMAGE_ONLINE: &str = "_1284c12e9b3dc9629a99b60e";
|
|
85
|
+
pub(crate) const IMAGE_COMPLETE: &str = "_899febc1aed6643cb3bdd449";
|
|
86
|
+
pub(crate) const IMAGE_NATURAL_WIDTH: &str = "_869abd1318296f606f53f835";
|
|
87
|
+
pub(crate) const IMAGE_TIMESTAMP: &str = "_52ffb507df01acf3dec37475";
|
|
98
88
|
/// What the probe reports as both dimensions when the image fails to load.
|
|
99
|
-
pub(crate) const IMAGE_LOAD_ERROR: &str = "
|
|
89
|
+
pub(crate) const IMAGE_LOAD_ERROR: &str = "_0d9880b397052efc378cd26b";
|
|
100
90
|
/// Dimension values reported before the image load finishes.
|
|
101
|
-
pub(crate) const IMAGE_PENDING: &str = "
|
|
91
|
+
pub(crate) const IMAGE_PENDING: &str = "_976c7c9cab404c1b8b94b9f4";
|
|
102
92
|
/// The key the probe's worker replies with when its deadline passes.
|
|
103
|
-
pub(crate) const IMAGE_WORKER_TIMEOUT: &str = "
|
|
93
|
+
pub(crate) const IMAGE_WORKER_TIMEOUT: &str = "_5e5d151d1f58f76e7c42c1d6";
|
|
104
94
|
/// A name the probe shares with the other probes that await a promise.
|
|
105
|
-
pub(crate) const IMAGE_AWAITING: &str = "
|
|
95
|
+
pub(crate) const IMAGE_AWAITING: &str = "_043b45997a2670daf27b7021";
|
|
106
96
|
|
|
107
|
-
pub(crate) const MEDIA_STATE: &str = "
|
|
108
|
-
pub(crate) const MEDIA_CODECS: &str = "
|
|
109
|
-
pub(crate) const MEDIA_CANDIDATES: &str = "
|
|
110
|
-
pub(crate) const MEDIA_SDP: &str = "
|
|
111
|
-
pub(crate) const MEDIA_SUPPORT: &str = "
|
|
112
|
-
pub(crate) const MEDIA_ICE_STATE: &str = "
|
|
113
|
-
pub(crate) const MEDIA_UNAVAILABLE: &str = "
|
|
114
|
-
pub(crate) const MEDIA_CANDIDATE: &str = "
|
|
115
|
-
pub(crate) const MEDIA_CANDIDATE_TIME: &str = "
|
|
116
|
-
pub(crate) const MEDIA_DATA_CHANNEL: &str = "
|
|
117
|
-
pub(crate) const MEDIA_REUSED: &str = "
|
|
118
|
-
pub(crate) const MEDIA_PRIOR_COUNT: &str = "
|
|
119
|
-
pub(crate) const MEDIA_FIRST_CANDIDATE: &str = "
|
|
120
|
-
pub(crate) const MEDIA_ELAPSED: &str = "
|
|
121
|
-
pub(crate) const MEDIA_CHANNEL_ERROR: &str = "
|
|
122
|
-
pub(crate) const MEDIA_SEED_OFFER_ERROR: &str = "
|
|
123
|
-
pub(crate) const MEDIA_SEED_GATHER_ERROR: &str = "
|
|
97
|
+
pub(crate) const MEDIA_STATE: &str = "_da7bc3a155dca43d5b49f1fa";
|
|
98
|
+
pub(crate) const MEDIA_CODECS: &str = "_4213e832a7feb534313b4f39";
|
|
99
|
+
pub(crate) const MEDIA_CANDIDATES: &str = "_e63a20d14646da909acd55f9";
|
|
100
|
+
pub(crate) const MEDIA_SDP: &str = "_8de55a1f52d181e06ccbbe8b";
|
|
101
|
+
pub(crate) const MEDIA_SUPPORT: &str = "_d702e8115f0b764649363d3d";
|
|
102
|
+
pub(crate) const MEDIA_ICE_STATE: &str = "_c3a7b9dd369b66837d9e7f98";
|
|
103
|
+
pub(crate) const MEDIA_UNAVAILABLE: &str = "_9797a3d5bb0f64080d0d214c";
|
|
104
|
+
pub(crate) const MEDIA_CANDIDATE: &str = "_ae22777f7d3d713e841feca5";
|
|
105
|
+
pub(crate) const MEDIA_CANDIDATE_TIME: &str = "_ca5e7a972d36bf952fbf09c5";
|
|
106
|
+
pub(crate) const MEDIA_DATA_CHANNEL: &str = "_4b86eecf1feba1c6b48c4292";
|
|
107
|
+
pub(crate) const MEDIA_REUSED: &str = "_fb480f4b21b6c9b3d1d979a4";
|
|
108
|
+
pub(crate) const MEDIA_PRIOR_COUNT: &str = "_a443a02c5d78d387b779d0b3";
|
|
109
|
+
pub(crate) const MEDIA_FIRST_CANDIDATE: &str = "_a3e7026918f5e4d34d5865ac";
|
|
110
|
+
pub(crate) const MEDIA_ELAPSED: &str = "_b2327e7a4a9eb807909c1741";
|
|
111
|
+
pub(crate) const MEDIA_CHANNEL_ERROR: &str = "_64a8b5f81817b0e33dd1751b";
|
|
112
|
+
pub(crate) const MEDIA_SEED_OFFER_ERROR: &str = "_f6d7e9eeabea462322f299fa";
|
|
113
|
+
pub(crate) const MEDIA_SEED_GATHER_ERROR: &str = "_183cd094666f8d499a59c133";
|
|
124
114
|
|
|
125
115
|
/// Recognition recovers the network information probe's output names from the probe itself.
|
|
126
116
|
#[cfg(test)]
|
|
127
|
-
pub(crate) const NETWORK_INFORMATION_OUTPUTS: [&str; 6] =
|
|
128
|
-
|
|
117
|
+
pub(crate) const NETWORK_INFORMATION_OUTPUTS: [&str; 6] = [
|
|
118
|
+
"_6e966490231e673457e97a79",
|
|
119
|
+
"_e56b5c0ff1f6c80af985ffa7",
|
|
120
|
+
"_e2911f4822a370d64b43df18",
|
|
121
|
+
"_9b899864a6fdfdc9e455943b",
|
|
122
|
+
"_1a2b017fe7e3665eae6f45e2",
|
|
123
|
+
"_6755e905972745530aa44b2b",
|
|
124
|
+
];
|
|
129
125
|
|
|
130
|
-
pub(crate) const PARENT_INFO_REFERRER: &str = "
|
|
131
|
-
pub(crate) const PARENT_INFO_MISSING: &str = "
|
|
132
|
-
pub(crate) const PARENT_INFO_REASONS: &str = "
|
|
133
|
-
pub(crate) const PARENT_INFO_VISIBILITY: &str = "
|
|
126
|
+
pub(crate) const PARENT_INFO_REFERRER: &str = "_31a6173d1692e77e5a1005d5";
|
|
127
|
+
pub(crate) const PARENT_INFO_MISSING: &str = "_10450802c4fb954516e0c07b";
|
|
128
|
+
pub(crate) const PARENT_INFO_REASONS: &str = "_cd7d13df270697c8781d261c";
|
|
129
|
+
pub(crate) const PARENT_INFO_VISIBILITY: &str = "_4172551fe148377bcda1f7b5";
|
|
134
130
|
/// The output the embedding page's `pad` property is copied to.
|
|
135
|
-
pub(crate) const PARENT_INFO_PAD: &str = "
|
|
131
|
+
pub(crate) const PARENT_INFO_PAD: &str = "_e5caf599351485e860642415";
|
|
136
132
|
/// Pairs of output fields and parent-info properties copied directly.
|
|
137
133
|
pub(crate) const PARENT_INFO_DIRECT: [(&str, &str); 16] = [
|
|
138
|
-
("
|
|
139
|
-
("
|
|
140
|
-
("
|
|
141
|
-
("
|
|
142
|
-
("
|
|
143
|
-
("
|
|
144
|
-
("
|
|
145
|
-
("
|
|
146
|
-
("
|
|
147
|
-
("
|
|
148
|
-
("
|
|
149
|
-
("
|
|
150
|
-
("
|
|
151
|
-
("
|
|
152
|
-
("
|
|
134
|
+
("_6e1dc8b6953acf52c04a8602", "vDuh"),
|
|
135
|
+
("_4f08666db7270b9f907f663c", "vDie"),
|
|
136
|
+
("_c8cb367a7b94d575149530e3", "xp"),
|
|
137
|
+
("_5ef82acb130f4537ed9aac35", "wp"),
|
|
138
|
+
("_62193c48d482daf2700a995c", "pfp"),
|
|
139
|
+
("_1c113a764991c259adfcf85b", "sL"),
|
|
140
|
+
("_3da484dbed1006c654fac96e", "ssL"),
|
|
141
|
+
("_c74be140015d9b0e3d256c48", "mL"),
|
|
142
|
+
("_d6f250eb3d24cd44d78bab61", "t"),
|
|
143
|
+
("_1d5d7b99f35d507b3a08a437", "tL"),
|
|
144
|
+
("_af146df9ca80117c88f514dd", "lH"),
|
|
145
|
+
("_cf3a9d328d85b9c7f2ae9457", "sR"),
|
|
146
|
+
("_4c7024270fd2a920c7ce5503", "ii"),
|
|
147
|
+
("_e4689550ed6807ca8acfeff4", "ffp"),
|
|
148
|
+
("_fd302ee89388067a1cfa51d9", "pac"),
|
|
153
149
|
(PARENT_INFO_PAD, "pad"),
|
|
154
150
|
];
|
|
155
151
|
/// Pairs of output fields and parent-info properties copied with an empty-string fallback for
|
|
156
152
|
/// falsy values.
|
|
157
153
|
pub(crate) const PARENT_INFO_FALLBACK: [(&str, &str); 4] = [
|
|
158
|
-
("
|
|
159
|
-
("
|
|
160
|
-
("
|
|
161
|
-
("
|
|
154
|
+
("_3bce4851046c22ddb9da2a5b", "vDmt"),
|
|
155
|
+
("_70346a8995cdbf5b1cd02bc7", "vDhp"),
|
|
156
|
+
("_d9c1b344a652122a42aa8fdf", "vDmd"),
|
|
157
|
+
("_1b4e766af5a14e457b0a4459", "vDa"),
|
|
162
158
|
];
|
|
163
159
|
|
|
164
|
-
pub(crate) const PRIVATE_TOKEN_ELAPSED: &str = "
|
|
165
|
-
pub(crate) const PRIVATE_TOKEN_ERROR: &str = "
|
|
166
|
-
pub(crate) const PRIVATE_TOKEN_TOKEN: &str = "
|
|
167
|
-
pub(crate) const PRIVATE_TOKEN_TIMESTAMP: &str = "
|
|
160
|
+
pub(crate) const PRIVATE_TOKEN_ELAPSED: &str = "_3a403a5bfbe5ad79fcb6d7fa";
|
|
161
|
+
pub(crate) const PRIVATE_TOKEN_ERROR: &str = "_11fe3c7cf759c9e85c056175";
|
|
162
|
+
pub(crate) const PRIVATE_TOKEN_TOKEN: &str = "_8c0a7d305ce60d56c7e050e0";
|
|
163
|
+
pub(crate) const PRIVATE_TOKEN_TIMESTAMP: &str = "_c323fa9d32f21c57738f2d52";
|
|
168
164
|
/// The error the probe reports when its worker reaches its deadline.
|
|
169
|
-
pub(crate) const PRIVATE_TOKEN_TIMEOUT_ERROR: &str = "
|
|
165
|
+
pub(crate) const PRIVATE_TOKEN_TIMEOUT_ERROR: &str = "_86c0f719c753efd2add5a423";
|
|
170
166
|
/// The flag every reply of the probe's worker sets.
|
|
171
|
-
pub(crate) const PRIVATE_TOKEN_WORKER_REPLIED: &str = "
|
|
167
|
+
pub(crate) const PRIVATE_TOKEN_WORKER_REPLIED: &str = "_502dfebb48ad4577f94b398b";
|
|
172
168
|
/// The reply field holding the worker fetch error.
|
|
173
|
-
pub(crate) const PRIVATE_TOKEN_WORKER_ERROR: &str = "
|
|
169
|
+
pub(crate) const PRIVATE_TOKEN_WORKER_ERROR: &str = "_1bd19da8fe35caf76f114593";
|
|
174
170
|
|
|
175
|
-
pub(crate) const WORKER_FETCH_STATUS: &str = "
|
|
176
|
-
pub(crate) const WORKER_FETCH_TOKEN: &str = "
|
|
171
|
+
pub(crate) const WORKER_FETCH_STATUS: &str = "_450ac63dd9d56cfdc07a45a6";
|
|
172
|
+
pub(crate) const WORKER_FETCH_TOKEN: &str = "_6c33957a5fcf43fae4182402";
|
|
177
173
|
|
|
178
|
-
pub(crate) const WORKER_NAVIGATOR_INDICATOR: &str = "
|
|
179
|
-
pub(crate) const WORKER_NAVIGATOR_RESULT: &str = "
|
|
174
|
+
pub(crate) const WORKER_NAVIGATOR_INDICATOR: &str = "_85ce50de34c865aae5312e53";
|
|
175
|
+
pub(crate) const WORKER_NAVIGATOR_RESULT: &str = "_f436ec62fa333f0b9cd2d3a4";
|
|
180
176
|
|
|
181
177
|
#[cfg(test)]
|
|
182
178
|
mod tests {
|
|
@@ -193,6 +189,8 @@ mod tests {
|
|
|
193
189
|
(Kind::DateParsingOffsets, DATES_ZONE),
|
|
194
190
|
(Kind::DomMutation, DOM_MUTATION_RESULT),
|
|
195
191
|
(Kind::Environment, ENVIRONMENT_REFERRER),
|
|
192
|
+
(Kind::Stylesheets, STYLESHEETS_TEXT),
|
|
193
|
+
(Kind::Stylesheets, STYLESHEETS_HASH),
|
|
196
194
|
(Kind::EnvironmentAudit, ENVIRONMENT_AUDIT_GROUPS),
|
|
197
195
|
(Kind::EnvironmentAudit, ENVIRONMENT_AUDIT_VALUES),
|
|
198
196
|
(Kind::EnvironmentAudit, ENVIRONMENT_AUDIT_REDUCTION),
|
|
@@ -157,65 +157,65 @@ macro_rules! families {
|
|
|
157
157
|
|
|
158
158
|
families! {
|
|
159
159
|
Media { fields: Box<media::Fields> } =>
|
|
160
|
-
media, "media", Reference, Computed, [
|
|
160
|
+
media, "media", Reference, Computed, [32];
|
|
161
161
|
PrivateToken { fields: private_token::Fields } =>
|
|
162
|
-
private_token, "private_token", Reference, Computed, [
|
|
162
|
+
private_token, "private_token", Reference, Computed, [5];
|
|
163
163
|
WorkerFetch { fields: worker_fetch::Fields } =>
|
|
164
|
-
worker_fetch, "worker_fetch", Reference, Computed, [
|
|
164
|
+
worker_fetch, "worker_fetch", Reference, Computed, [4];
|
|
165
165
|
Image { fields: image::Fields } =>
|
|
166
|
-
image, "image", Reference, Computed, [
|
|
166
|
+
image, "image", Reference, Computed, [33];
|
|
167
167
|
ParentInfo {} =>
|
|
168
|
-
parent_info, "parent_info", Reference, Computed, [
|
|
168
|
+
parent_info, "parent_info", Reference, Computed, [7];
|
|
169
169
|
DateParsingOffsets(dates::Fields) =>
|
|
170
|
-
dates, "date_parsing_offsets", Reference, Computed, [
|
|
170
|
+
dates, "date_parsing_offsets", Reference, Computed, [21];
|
|
171
171
|
// The payload publishes the error-message length beside the record.
|
|
172
172
|
ErrorMessageLength {} =>
|
|
173
173
|
error_message_length, "error_message_length", Reference, Replayed, [3];
|
|
174
174
|
NetworkInformation(network_information::Fields) =>
|
|
175
|
-
network_information, "network_information", Reference, Computed, [
|
|
175
|
+
network_information, "network_information", Reference, Computed, [25];
|
|
176
176
|
WorkerNavigator(worker_navigator::Fields) =>
|
|
177
177
|
worker_navigator, "worker_navigator", Reference, Computed, [1];
|
|
178
178
|
ClockResolution {} =>
|
|
179
|
-
clock, "clock_resolution", Reference, Computed, [
|
|
179
|
+
clock, "clock_resolution", Reference, Computed, [8];
|
|
180
180
|
Benchmark { fields: benchmark::Fields } =>
|
|
181
181
|
benchmark, "benchmark", Structural, Computed, [];
|
|
182
182
|
// Element ID queries from this probe appear in the selector log.
|
|
183
183
|
Rects { fields: rects::Fields } =>
|
|
184
|
-
rects, "rects", Structural, Replayed, [
|
|
184
|
+
rects, "rects", Structural, Replayed, [29];
|
|
185
185
|
DomMutation { fields: dom_mutation::Fields } =>
|
|
186
|
-
dom_mutation, "dom_mutation", Structural, Computed, [
|
|
186
|
+
dom_mutation, "dom_mutation", Structural, Computed, [18];
|
|
187
187
|
PerformanceEntries { fields: performance::Fields } =>
|
|
188
|
-
performance, "performance_entries", Structural, Computed, [
|
|
188
|
+
performance, "performance_entries", Structural, Computed, [30];
|
|
189
189
|
// Rebuilt from the session's own script. The reference build's stack probe is probe 28.
|
|
190
190
|
Stack { fields: stack::Fields } =>
|
|
191
191
|
stack, "stack", Structural, Computed, [28];
|
|
192
192
|
HostReachability { fields: host_reachability::Fields } =>
|
|
193
193
|
host_reachability, "host_reachability", Structural, Computed, [];
|
|
194
194
|
WebSocketEcho { fields: websocket_echo::Fields } =>
|
|
195
|
-
websocket_echo, "websocket_echo", Structural, Computed, [];
|
|
196
|
-
@empty [
|
|
195
|
+
websocket_echo, "websocket_echo", Structural, Computed, [6];
|
|
196
|
+
@empty [10, 24, 39];
|
|
197
197
|
@replayed {
|
|
198
198
|
EnvironmentAudit => "environment_audit", 2;
|
|
199
|
-
Environment => "environment",
|
|
200
|
-
HighEntropyUserAgent => "high_entropy_user_agent",
|
|
201
|
-
EmojiColor => "emoji_color",
|
|
202
|
-
Behavior => "behavior",
|
|
203
|
-
KeyboardLayout => "keyboard_layout",
|
|
204
|
-
Console => "console",
|
|
205
|
-
Math => "math",
|
|
206
|
-
DocumentStructure => "document_structure",
|
|
207
|
-
Graphics => "graphics",
|
|
208
|
-
SvgGeometry => "svg_geometry",
|
|
209
|
-
SummarizerAvailability => "summarizer_availability",
|
|
210
|
-
Audio => "audio",
|
|
211
|
-
NativeInspection => "native_inspection",
|
|
212
|
-
FontEnumeration => "font_enumeration",
|
|
213
|
-
DocumentSummary => "document_summary",
|
|
214
|
-
ComputedStyleHash => "computed_style_hash",
|
|
215
|
-
Intl => "intl",
|
|
216
|
-
Storage => "storage",
|
|
217
|
-
Stylesheets => "stylesheets",
|
|
218
|
-
Isolation => "isolation",
|
|
199
|
+
Environment => "environment", 35;
|
|
200
|
+
HighEntropyUserAgent => "high_entropy_user_agent", 12;
|
|
201
|
+
EmojiColor => "emoji_color", 19;
|
|
202
|
+
Behavior => "behavior", 9;
|
|
203
|
+
KeyboardLayout => "keyboard_layout", 13;
|
|
204
|
+
Console => "console", 36;
|
|
205
|
+
Math => "math", 26;
|
|
206
|
+
DocumentStructure => "document_structure", 20;
|
|
207
|
+
Graphics => "graphics", 37;
|
|
208
|
+
SvgGeometry => "svg_geometry", 15;
|
|
209
|
+
SummarizerAvailability => "summarizer_availability", 17;
|
|
210
|
+
Audio => "audio", 38;
|
|
211
|
+
NativeInspection => "native_inspection", 16;
|
|
212
|
+
FontEnumeration => "font_enumeration", 27;
|
|
213
|
+
DocumentSummary => "document_summary", 34;
|
|
214
|
+
ComputedStyleHash => "computed_style_hash", 23;
|
|
215
|
+
Intl => "intl", 14;
|
|
216
|
+
Storage => "storage", 11;
|
|
217
|
+
Stylesheets => "stylesheets", 31;
|
|
218
|
+
Isolation => "isolation", 22;
|
|
219
219
|
}
|
|
220
220
|
}
|
|
221
221
|
|
|
@@ -309,11 +309,18 @@ impl Observed {
|
|
|
309
309
|
}
|
|
310
310
|
|
|
311
311
|
impl Operation {
|
|
312
|
-
/// Tries reference recognizers, then structural ones, and returns the first match.
|
|
312
|
+
/// Tries reference recognizers, then structural ones, and returns the first match. A paired
|
|
313
|
+
/// probe only matches families including its partner, as hex-name builds reuse result names.
|
|
313
314
|
#[must_use]
|
|
314
315
|
pub(crate) fn recognize(probe: &ProbeView<'_>) -> Option<Self> {
|
|
316
|
+
let partner = probe.vocabulary.partner(probe.position);
|
|
317
|
+
let fits = |kind: &Kind| {
|
|
318
|
+
let references = kind.references();
|
|
319
|
+
references.is_empty() || partner.is_none_or(|partner| references.contains(&partner))
|
|
320
|
+
};
|
|
315
321
|
Kind::in_phase(Phase::Reference)
|
|
316
322
|
.chain(Kind::in_phase(Phase::Structural))
|
|
323
|
+
.filter(fits)
|
|
317
324
|
.find_map(|kind| kind.recognize(probe))
|
|
318
325
|
}
|
|
319
326
|
|