@@ -29,6 +29,46 @@ sentryTest('should capture a LCP vital with element details.', async ({ browserN
2929 // the button as LCP.
3030 expect ( eventData . contexts ?. trace ?. data ?. [ 'lcp.element' ] . startsWith ( 'body >' ) ) . toBe ( true ) ;
3131 expect ( eventData . contexts ?. trace ?. data ?. [ 'lcp.size' ] ) . toBeGreaterThan ( 0 ) ;
32- expect ( eventData . contexts ?. trace ?. data ?. [ 'lcp.renderTime' ] ) . toBeGreaterThan ( 0 ) ;
3332 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 ( ) ;
3437} ) ;
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