Skip to content

Cannot read property 'controller' of undefined #6657

@nilptr

Description

@nilptr

[REQUIRED] Describe your environment

  • Operating System version: Mac OS X 10.15.7
  • Browser version: Chrome 98.0.4758
  • Firebase SDK version: 9.6.1
  • Firebase Product: performance

Actually, this error occurs on more than one specific operating system and browser version. Here are browser and OS versions we can see in Sentry.

Browsers:

  • Chrome 98.0.4758
  • Chrome 99.0.4844
  • Chrome 96.0.4664
  • Chrome 105.0.0
  • Firefox 95.0
  • Chrome 103.0.0
  • Chrome 106.0.0
  • Chrome 96.0.4606

OS:

  • Mac OS X 10.15.7
  • Windows 10
  • Mac OS X 10.14.6
  • Mac OS X 11.6
  • Mac OS X 12.2.1
  • Mac OS X 12.6
  • Mac OS X 10.15
  • Mac OS X 10.14.3
  • Mac OS X 10.14.4
  • Mac OS X 10.15.6

[REQUIRED] Describe the problem

We got Cannot read property 'controller' of undefined errors in Sentry recently.
image

The stack trace shows it comes from here.

export function getServiceWorkerStatus(): ServiceWorkerStatus {
const navigator = Api.getInstance().navigator;
if ('serviceWorker' in navigator) {
if (navigator.serviceWorker.controller) {
return ServiceWorkerStatus.CONTROLLED;
} else {
return ServiceWorkerStatus.UNCONTROLLED;
}
} else {
return ServiceWorkerStatus.UNSUPPORTED;
}
}

Although it looks already defensive enough, it doesn't catch the case that 'serviceWorker' in navigator but navigator.serviceWorker === undefined.

Steps to reproduce:

N/A

Relevant Code:

export function getServiceWorkerStatus(): ServiceWorkerStatus {
const navigator = Api.getInstance().navigator;
if ('serviceWorker' in navigator) {
if (navigator.serviceWorker.controller) {
return ServiceWorkerStatus.CONTROLLED;
} else {
return ServiceWorkerStatus.UNCONTROLLED;
}
} else {
return ServiceWorkerStatus.UNSUPPORTED;
}
}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions