diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4b9d5ec1f8be..ae90621dc220 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -583,6 +583,7 @@ jobs: bundle: - loader_base - loader_eager + - loader_debug - loader_tracing - loader_replay - loader_tracing_replay diff --git a/packages/browser-integration-tests/fixtures/loader.js b/packages/browser-integration-tests/fixtures/loader.js index 36d7d2401856..e8e84a3a7a9a 100644 --- a/packages/browser-integration-tests/fixtures/loader.js +++ b/packages/browser-integration-tests/fixtures/loader.js @@ -1,4 +1,4 @@ -!function(n,e,r,t,a,i,o,c,_,f){for(var p=f,forceLoad=!1,s=0;s-1){p&&"no"===document.scripts[s].getAttribute("data-lazy")&&(p=!1);break}var u=!1,l=[],d=function(n){("e"in n||"p"in n||n.f&&n.f.indexOf("capture")>-1||n.f&&n.f.indexOf("showReportDialog")>-1)&&p&&R(l),d.data.push(n)};function R(o){if(!u){u=!0;var f=e.scripts[0],p=e.createElement(r);p.src=c,p.crossOrigin="anonymous",p.addEventListener("load",(function(){try{n[t]&&n[t].__SENTRY_LOADER__&&(n[t]=E),n[a]&&n[a].__SENTRY_LOADER__&&(n[a]=v),n.SENTRY_SDK_SOURCE="loader";var e=n[i],r=e.init;e.init=function(n){var t=_;for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(t[a]=n[a]);!function(n,e){var r=n.integrations||[];if(!Array.isArray(r))return;var t=r.map((function(n){return n.name}));n.tracesSampleRate&&-1===t.indexOf("BrowserTracing")&&r.push(new e.BrowserTracing);(n.replaysSessionSampleRate||n.replaysOnErrorSampleRate)&&-1===t.indexOf("Replay")&&r.push(new e.Replay);n.integrations=r}(t,e),r(t)},function(e,r){try{for(var i=0;i-1){u&&"no"===document.scripts[p].getAttribute("data-lazy")&&(u=!1);break}var d=!1,l=[],_=function(n){("e"in n||"p"in n||n.f&&n.f.indexOf("capture")>-1||n.f&&n.f.indexOf("showReportDialog")>-1)&&u&&E(l),_.data.push(n)};function v(){_({e:[].slice.call(arguments)})}function h(n){_({p:"reason"in n?n.reason:"detail"in n&&"reason"in n.detail?n.detail.reason:n})}function E(a){if(!d){d=!0;var f=e.scripts[0],u=e.createElement(r);u.src=c,u.crossOrigin="anonymous",u.addEventListener("load",(function(){try{n.removeEventListener("error",v),n.removeEventListener("unhandledrejection",h),n.SENTRY_SDK_SOURCE="loader";var e=n[o],r=e.init;e.init=function(n){var t=s;for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i]);!function(n,e){var r=n.integrations||[];if(!Array.isArray(r))return;var t=r.map((function(n){return n.name}));n.tracesSampleRate&&-1===t.indexOf("BrowserTracing")&&r.push(new e.BrowserTracing);(n.replaysSessionSampleRate||n.replaysOnErrorSampleRate)&&-1===t.indexOf("Replay")&&r.push(new e.Replay);n.integrations=r}(t,e),r(t)},function(e,r){try{for(var o=0;o { const req = waitForErrorRequest(page); diff --git a/packages/browser-integration-tests/loader-suites/loader/noOnLoad/customOnErrorHandler/subject.js b/packages/browser-integration-tests/loader-suites/loader/noOnLoad/customOnErrorHandler/subject.js new file mode 100644 index 000000000000..405fb09bbac5 --- /dev/null +++ b/packages/browser-integration-tests/loader-suites/loader/noOnLoad/customOnErrorHandler/subject.js @@ -0,0 +1,8 @@ +const oldOnError = window.onerror; + +window.onerror = function () { + console.log('custom error'); + oldOnError && oldOnError.apply(this, arguments); +}; + +window.doSomethingWrong(); diff --git a/packages/browser-integration-tests/loader-suites/loader/noOnLoad/customOnErrorHandler/test.ts b/packages/browser-integration-tests/loader-suites/loader/noOnLoad/customOnErrorHandler/test.ts new file mode 100644 index 000000000000..96c49a49ab4c --- /dev/null +++ b/packages/browser-integration-tests/loader-suites/loader/noOnLoad/customOnErrorHandler/test.ts @@ -0,0 +1,15 @@ +import { expect } from '@playwright/test'; + +import { sentryTest } from '../../../../utils/fixtures'; +import { envelopeRequestParser, waitForErrorRequest } from '../../../../utils/helpers'; + +sentryTest('error handler works with a recursive custom error handler', async ({ getLocalTestUrl, page }) => { + const req = waitForErrorRequest(page); + + const url = await getLocalTestUrl({ testDir: __dirname }); + await page.goto(url); + + const eventData = envelopeRequestParser(await req); + expect(eventData.exception?.values?.length).toBe(1); + expect(eventData.exception?.values?.[0]?.value).toBe('window.doSomethingWrong is not a function'); +}); diff --git a/packages/browser-integration-tests/loader-suites/loader/onLoad/captureException/test.ts b/packages/browser-integration-tests/loader-suites/loader/onLoad/captureException/test.ts index e7441a654724..896ba2d53c0a 100644 --- a/packages/browser-integration-tests/loader-suites/loader/onLoad/captureException/test.ts +++ b/packages/browser-integration-tests/loader-suites/loader/onLoad/captureException/test.ts @@ -1,7 +1,7 @@ import { expect } from '@playwright/test'; import { sentryTest } from '../../../../utils/fixtures'; -import { envelopeRequestParser,waitForErrorRequest } from '../../../../utils/helpers'; +import { envelopeRequestParser, waitForErrorRequest } from '../../../../utils/helpers'; sentryTest('captureException works', async ({ getLocalTestUrl, page }) => { const req = waitForErrorRequest(page); diff --git a/packages/browser-integration-tests/package.json b/packages/browser-integration-tests/package.json index c8b9c92d19e8..61645e7960e5 100644 --- a/packages/browser-integration-tests/package.json +++ b/packages/browser-integration-tests/package.json @@ -39,6 +39,7 @@ "test:loader:tracing": "PW_BUNDLE=loader_tracing yarn test:loader", "test:loader:replay": "PW_BUNDLE=loader_replay yarn test:loader", "test:loader:full": "PW_BUNDLE=loader_tracing_replay yarn test:loader", + "test:loader:debug": "PW_BUNDLE=loader_debug yarn test:loader", "test:ci": "playwright test ./suites --browser='all' --reporter='line'", "test:update-snapshots": "yarn test --update-snapshots --browser='all' && yarn test --update-snapshots", "test:detect-flaky": "ts-node scripts/detectFlakyTests.ts", diff --git a/packages/browser-integration-tests/utils/generatePage.ts b/packages/browser-integration-tests/utils/generatePage.ts index a3bd1d7c8991..4a6afb3eab2e 100644 --- a/packages/browser-integration-tests/utils/generatePage.ts +++ b/packages/browser-integration-tests/utils/generatePage.ts @@ -11,17 +11,22 @@ const LOADER_TEMPLATE = readFileSync(path.join(__dirname, '../fixtures/loader.js const LOADER_CONFIGS: Record; lazy: boolean }> = { loader_base: { - bundle: 'browser/build/bundles/bundle.es5.js', + bundle: 'browser/build/bundles/bundle.es5.min.js', options: {}, lazy: true, }, loader_eager: { - bundle: 'browser/build/bundles/bundle.es5.js', + bundle: 'browser/build/bundles/bundle.es5.min.js', options: {}, lazy: false, }, + loader_debug: { + bundle: 'browser/build/bundles/bundle.es5.debug.min.js', + options: { debug: true }, + lazy: true, + }, loader_tracing: { - bundle: 'browser/build/bundles/bundle.tracing.es5.js', + bundle: 'browser/build/bundles/bundle.tracing.es5.min.js', options: { tracesSampleRate: 1 }, lazy: false, },