diff --git a/packages/performance/CHANGELOG.md b/packages/performance/CHANGELOG.md index 066cb348a5..fc22b05c97 100644 --- a/packages/performance/CHANGELOG.md +++ b/packages/performance/CHANGELOG.md @@ -7,6 +7,10 @@ and adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +### Fixed + +- `Performance` object constructor will now check if `PerformanceTiming` is supported. [[#1119](https://github.com/Shopify/quilt/pull/1119)] + ## [1.2.1] - 2019-10-11 ### Fixed diff --git a/packages/performance/src/performance.ts b/packages/performance/src/performance.ts index c996627c37..fea3b43096 100644 --- a/packages/performance/src/performance.ts +++ b/packages/performance/src/performance.ts @@ -31,6 +31,7 @@ export class Performance { readonly supportsObserver = hasGlobal('PerformanceObserver'); readonly supportsMarks = hasGlobal('PerformanceMark'); readonly supportsNavigationEntries = hasGlobal('PerformanceNavigationTiming'); + readonly supportsTimingEntries = hasGlobal('PerformanceTiming'); readonly supportsLongtaskEntries = hasGlobal('PerformanceLongTaskTiming'); readonly supportsResourceEntries = hasGlobal('PerformanceResourceTiming'); readonly supportsPaintEntries = hasGlobal('PerformancePaintTiming'); @@ -59,7 +60,10 @@ export class Performance { withNavigation(this.start.bind(this)); - if (!this.supportsDetailedTime || !this.supportsNavigationEntries) { + if ( + this.supportsTimingEntries && + (!this.supportsDetailedTime || !this.supportsNavigationEntries) + ) { withTiming( ({responseStart, domContentLoadedEventStart, loadEventStart}) => { // window.performance.timing uses full timestamps, while diff --git a/packages/react-performance/src/test/LifecycleEventListener.test.tsx b/packages/react-performance/src/test/LifecycleEventListener.test.tsx index 735acad9fe..a5a7f4d808 100644 --- a/packages/react-performance/src/test/LifecycleEventListener.test.tsx +++ b/packages/react-performance/src/test/LifecycleEventListener.test.tsx @@ -3,13 +3,6 @@ import {mount} from '@shopify/react-testing'; import {mockPerformance} from './utilities'; import {LifecycleEventListener, PerformanceContext} from '..'; -jest.mock('@shopify/performance', () => { - return { - ...require.requireActual('@shopify/performance'), - Performance: jest.fn(), - }; -}); - describe('', () => { it('sets up a event listener on the Performance context object', () => { const performance = mockPerformance(); diff --git a/packages/react-performance/src/test/NavigationListener.test.tsx b/packages/react-performance/src/test/NavigationListener.test.tsx index 3c5b87a004..4185b4520a 100644 --- a/packages/react-performance/src/test/NavigationListener.test.tsx +++ b/packages/react-performance/src/test/NavigationListener.test.tsx @@ -3,13 +3,6 @@ import {mount} from '@shopify/react-testing'; import {mockPerformance} from './utilities'; import {NavigationListener, PerformanceContext} from '..'; -jest.mock('@shopify/performance', () => { - return { - ...require.requireActual('@shopify/performance'), - Performance: jest.fn(), - }; -}); - describe('', () => { it('sets up a navigation listener on the Performance context object', () => { const performance = mockPerformance(); diff --git a/packages/react-performance/src/test/PerformanceMark.test.tsx b/packages/react-performance/src/test/PerformanceMark.test.tsx index 89c1af72ed..6adf4fe070 100644 --- a/packages/react-performance/src/test/PerformanceMark.test.tsx +++ b/packages/react-performance/src/test/PerformanceMark.test.tsx @@ -3,13 +3,6 @@ import {mount} from '@shopify/react-testing'; import {mockPerformance} from './utilities'; import {PerformanceMark, PerformanceContext} from '..'; -jest.mock('@shopify/performance', () => { - return { - ...require.requireActual('@shopify/performance'), - Performance: jest.fn(), - }; -}); - describe('', () => { it('calls performance.mark', () => { const performance = mockPerformance({mark: jest.fn()}); diff --git a/packages/react-performance/src/test/PerformanceReport.test.tsx b/packages/react-performance/src/test/PerformanceReport.test.tsx index 1aafa43d1d..80090a5d6a 100644 --- a/packages/react-performance/src/test/PerformanceReport.test.tsx +++ b/packages/react-performance/src/test/PerformanceReport.test.tsx @@ -7,13 +7,6 @@ import {Method, Header} from '@shopify/network'; import {mockPerformance, randomConnection} from './utilities'; import {PerformanceReport, PerformanceContext} from '..'; -jest.mock('@shopify/performance', () => { - return { - ...require.requireActual('@shopify/performance'), - Performance: jest.fn(), - }; -}); - describe('', () => { beforeEach(() => { timer.mock(); diff --git a/packages/react-performance/src/test/performance-effect.server.test.tsx b/packages/react-performance/src/test/performance-effect.server.test.tsx index 70114cc34e..4b31d998fe 100644 --- a/packages/react-performance/src/test/performance-effect.server.test.tsx +++ b/packages/react-performance/src/test/performance-effect.server.test.tsx @@ -6,13 +6,6 @@ import React from 'react'; import ReactDOMServer from 'react-dom/server'; import {usePerformanceEffect, PerformanceEffectCallback} from '..'; -jest.mock('@shopify/performance', () => { - return { - ...require.requireActual('@shopify/performance'), - Performance: jest.fn(), - }; -}); - describe('usePerformanceEffect', () => { function TestComponent({callback}: {callback: PerformanceEffectCallback}) { usePerformanceEffect(callback); diff --git a/packages/react-performance/src/test/performance-effect.test.tsx b/packages/react-performance/src/test/performance-effect.test.tsx index 8932301923..6af9e13ed4 100644 --- a/packages/react-performance/src/test/performance-effect.test.tsx +++ b/packages/react-performance/src/test/performance-effect.test.tsx @@ -7,13 +7,6 @@ import { PerformanceContext, } from '..'; -jest.mock('@shopify/performance', () => { - return { - ...require.requireActual('@shopify/performance'), - Performance: jest.fn(), - }; -}); - describe('usePerformanceEffect', () => { function TestComponent({callback}: {callback: PerformanceEffectCallback}) { usePerformanceEffect(callback);