@@ -29,6 +29,46 @@ sentryTest('should capture a LCP vital with element details.', async ({ browserN
29
29
// the button as LCP.
30
30
expect ( eventData . contexts ?. trace ?. data ?. [ 'lcp.element' ] . startsWith ( 'body >' ) ) . toBe ( true ) ;
31
31
expect ( eventData . contexts ?. trace ?. data ?. [ 'lcp.size' ] ) . toBeGreaterThan ( 0 ) ;
32
- expect ( eventData . contexts ?. trace ?. data ?. [ 'lcp.renderTime' ] ) . toBeGreaterThan ( 0 ) ;
33
32
expect ( eventData . contexts ?. trace ?. data ?. [ 'lcp.loadTime' ] ) . toBeGreaterThan ( 0 ) ;
33
+
34
+ // renderTime is not set because we do not return the `Timing-Allow-Origin` header
35
+ // and the image is loaded from a 3rd party origin
36
+ expect ( eventData . contexts ?. trace ?. data ?. [ 'lcp.renderTime' ] ) . toBeUndefined ( ) ;
34
37
} ) ;
38
+
39
+ sentryTest (
40
+ 'captures LCP renderTime when returning Timing-Allow-Origin header.' ,
41
+ async ( { browserName, getLocalTestPath, page } ) => {
42
+ if ( shouldSkipTracingTest ( ) || browserName !== 'chromium' ) {
43
+ sentryTest . skip ( ) ;
44
+ }
45
+
46
+ page . route ( '**' , route => route . continue ( ) ) ;
47
+ page . route ( '**/my/image.png' , async ( route : Route ) => {
48
+ return route . fulfill ( {
49
+ path : `${ __dirname } /assets/sentry-logo-600x179.png` ,
50
+ headers : { 'Timing-Allow-Origin' : '*' } ,
51
+ } ) ;
52
+ } ) ;
53
+
54
+ const url = await getLocalTestPath ( { testDir : __dirname } ) ;
55
+ const [ eventData ] = await Promise . all ( [
56
+ getFirstSentryEnvelopeRequest < Event > ( page ) ,
57
+ page . goto ( url ) ,
58
+ page . locator ( 'button' ) . click ( ) ,
59
+ ] ) ;
60
+
61
+ expect ( eventData . measurements ) . toBeDefined ( ) ;
62
+ expect ( eventData . measurements ?. lcp ?. value ) . toBeDefined ( ) ;
63
+
64
+ // XXX: This should be body > img, but it can be flakey as sometimes it will report
65
+ // the button as LCP.
66
+ expect ( eventData . contexts ?. trace ?. data ?. [ 'lcp.element' ] . startsWith ( 'body >' ) ) . toBe ( true ) ;
67
+ expect ( eventData . contexts ?. trace ?. data ?. [ 'lcp.size' ] ) . toBeGreaterThan ( 0 ) ;
68
+ expect ( eventData . contexts ?. trace ?. data ?. [ 'lcp.loadTime' ] ) . toBeGreaterThan ( 0 ) ;
69
+
70
+ // renderTime is not set because we do not return the `Timing-Allow-Origin` header
71
+ // and the image is loaded from a 3rd party origin
72
+ expect ( eventData . contexts ?. trace ?. data ?. [ 'lcp.renderTime' ] ) . toBeGreaterThan ( 0 ) ;
73
+ } ,
74
+ ) ;
0 commit comments