# Samsung Internet

> Samsung Internet is a Chromium browser for Android; WhiskerJS treats it like Chrome on Android and checks one Samsung-related global.

Source: https://whiskerjs.com/browsers/samsung-internet/ (last updated 2026-10-26)

> **In plain words:**
>
> Samsung Internet is the browser that comes with many Samsung phones and tablets. It is built on Chromium, so WhiskerJS reads it like Chrome on Android: the Chromium-only signals work, nothing is left out on purpose, and the audio output latency is read because it is Android. WhiskerJS also checks for one global variable associated with Samsung’s browser.

## At a glance

- Browser class: `chromium` (the user agent has a `Chrome/<number>` token).
- Excluded components: none.
- Read on Android: `audio_latency`.
- Samsung-related check: `vendor_flavors` includes `samsungAr` when that global exists.
- Lab sample: none.

## What works

- **Chromium-only components**: [`device_memory`](https://whiskerjs.com/signals/device-memory/), [`heap_limit`](https://whiskerjs.com/signals/heap-limit/), [`ua_client_hints`](https://whiskerjs.com/signals/ua-client-hints/) and [`ua_versions`](https://whiskerjs.com/signals/ua-versions/) read the same APIs as in Chrome; on a phone `ua_client_hints` usually carries `mobile=1` and the model and form factors the browser reports.
- **[`audio_latency`](https://whiskerjs.com/signals/audio-latency/)**: read because the user agent says Android; the `AudioContext` is closed at once and nothing is played.
- **[`vendor_flavors`](https://whiskerjs.com/signals/vendor-flavors/)**: lists which of ten browser-specific globals exist. One of them is `samsungAr`. Whether a given Samsung Internet version defines it is up to the browser, so treat its presence as a hint, not a rule. The component is in the `browser` group of the visitorId.
- **[`touch_support`](https://whiskerjs.com/signals/touch-support/)** and **[`screen_resolution`](https://whiskerjs.com/signals/screen-resolution/)** (larger side first, so rotation does not change it).
- Graphics, offline audio, fonts, font preferences, Math, codecs, locale and display preferences.

## What is unavailable or blocked

- [`keyboard_layout`](https://whiskerjs.com/signals/keyboard-layout/) uses an API meant for physical keyboards; expect `unavailable` on Android. It is outside the ids.
- [`plugins`](https://whiskerjs.com/signals/plugins/): mobile builds often list none, and then report the plain value `none`.
- [`apple_pay`](https://whiskerjs.com/signals/apple-pay/) and [`private_click`](https://whiskerjs.com/signals/private-click/): the plain value `none`.
- [`webgpu`](https://whiskerjs.com/signals/webgpu/): depends on the browser version, Android version and GPU.
- `ua_client_hints` and `ua_versions` report `he=blocked` when a Permissions Policy refuses the detailed hints.

## What WhiskerJS excludes and why

Nothing. The `chromium` row of the exclusion table is empty. If the browser, a setting or an extension adds noise to canvas or WebGL readback, the [double render](https://whiskerjs.com/glossary/#double-render) marks `canvas` or `webgl_image` as `noisy` (`render_mismatch`) for that run. The [known-answer probes](https://whiskerjs.com/signals/noise-profile/) also catch noise that is the same on both reads (`noisy` / `seeded_noise`, for `canvas`, `webgl_image` and `audio`).

## Samsung Internet and Chrome on the same phone

Both are class `chromium`. Expect the `browser` group of the structuredId to differ (brands in `ua_client_hints`, globals in `vendor_flavors`, possibly codecs), while `gpu`, `device` and `fonts` often match because they follow the phone itself. See [Comparing two results](https://whiskerjs.com/docs/identifiers/#comparing-two-results).

## Integrity flags to expect

- [`headless_markers`](https://whiskerjs.com/docs/integrity/#headless_markers) does not apply its “desktop Chrome without `window.chrome`” test to user agents with `Mobile` or `Android`; a 0x0 outer window still raises it.
- [`automation_webdriver`](https://whiskerjs.com/docs/integrity/#automation_webdriver) under WebDriver control, for example in device test farms.
- [`software_renderer`](https://whiskerjs.com/docs/integrity/#software_renderer) in emulators that render WebGL in software.
- The lie checks if a script overrides browser functions.

## Early lab observations

There is no lab data for Samsung Internet yet. The early, small sample at signalsVersion 1 covered Mac Chrome, Mac Safari, iPhone Chrome and iPhone Safari only.

## Testing it yourself

Open the [live demo](https://whiskerjs.com/demo/) in Samsung Internet and in Chrome on the same phone and compare the structuredId groups. The [lab mode](https://whiskerjs.com/demo/#lab) copies one line per run. Nothing is sent anywhere.

## Support table for Samsung Internet

Expected status of every component in this browser at signalsVersion 9, from [the support matrix](https://whiskerjs.com/browsers/support-matrix/) (updated 2026-10-26). Basis "code" means expected from the library code and documentation, not yet measured; "lab" means seen in the early lab sample.

| Component | Status | Basis | Note |
| --- | --- | --- | --- |
| [`apple_pay`](https://whiskerjs.com/signals/apple-pay/) | none | code | No ApplePaySession: reports the plain value none. |
| [`audio`](https://whiskerjs.com/signals/audio/) | ok | code | noisy / seeded_noise if the audio known-answer probe sees noise. |
| [`audio_latency`](https://whiskerjs.com/signals/audio-latency/) | ok | code | Read when the user agent says Android. |
| [`browser_class`](https://whiskerjs.com/signals/browser-class/) | ok | code | Class chromium. |
| [`canvas`](https://whiskerjs.com/signals/canvas/) | ok | code | noisy / render_mismatch or seeded_noise if an extension or setting adds noise to readback. |
| [`canvas_readback`](https://whiskerjs.com/signals/canvas-readback/) | ok | code |   |
| [`color_depth`](https://whiskerjs.com/signals/color-depth/) | ok | code |   |
| [`color_gamut`](https://whiskerjs.com/signals/color-gamut/) | ok | code |   |
| [`content_blockers`](https://whiskerjs.com/signals/content-blockers/) | ok | code | none, or the bait names a content blocker hid. |
| [`cpu_architecture`](https://whiskerjs.com/signals/cpu-architecture/) | ok | code |   |
| [`device_memory`](https://whiskerjs.com/signals/device-memory/) | ok | code | From Chromium 146 the value carries the tag ;c146 (new buckets). |
| [`dynamic_range`](https://whiskerjs.com/signals/dynamic-range/) | ok | code |   |
| [`font_preferences`](https://whiskerjs.com/signals/font-preferences/) | ok | code |   |
| [`fonts`](https://whiskerjs.com/signals/fonts/) | ok | code |   |
| [`fonts_canvas`](https://whiskerjs.com/signals/fonts-canvas/) | ok | code |   |
| [`forced_colors`](https://whiskerjs.com/signals/forced-colors/) | ok | code |   |
| [`hardware_concurrency`](https://whiskerjs.com/signals/hardware-concurrency/) | ok | code | Read 16 times; noisy / read_varies if the reads disagree. Some browsers cap or round the value. |
| [`heap_limit`](https://whiskerjs.com/signals/heap-limit/) | ok | code |   |
| [`intl_locale`](https://whiskerjs.com/signals/intl-locale/) | ok | code |   |
| [`keyboard_layout`](https://whiskerjs.com/signals/keyboard-layout/) | varies | code | Chromium API meant for physical keyboards; on Android expect unavailable. |
| [`languages`](https://whiskerjs.com/signals/languages/) | ok | code |   |
| [`math`](https://whiskerjs.com/signals/math/) | ok | code |   |
| [`media_codecs`](https://whiskerjs.com/signals/media-codecs/) | ok | code |   |
| [`noise_profile`](https://whiskerjs.com/signals/noise-profile/) | ok | code | canvas=exact,webgl=exact,audio=exact on a stock browser; webgl=na without WebGL. |
| [`pdf_viewer`](https://whiskerjs.com/signals/pdf-viewer/) | ok | code |   |
| [`permissions`](https://whiskerjs.com/signals/permissions/) | ok | code |   |
| [`pixel_ratio`](https://whiskerjs.com/signals/pixel-ratio/) | ok | code |   |
| [`platform`](https://whiskerjs.com/signals/platform/) | ok | code |   |
| [`plugins`](https://whiskerjs.com/signals/plugins/) | varies | code | Mobile builds often list no plugins and then report the plain value none. |
| [`prefers_contrast`](https://whiskerjs.com/signals/prefers-contrast/) | ok | code |   |
| [`private_click`](https://whiskerjs.com/signals/private-click/) | none | code | No attributionSourceId on anchors: reports the plain value none. |
| [`reduced_motion`](https://whiskerjs.com/signals/reduced-motion/) | ok | code |   |
| [`screen_frame`](https://whiskerjs.com/signals/screen-frame/) | ok | code |   |
| [`screen_resolution`](https://whiskerjs.com/signals/screen-resolution/) | ok | code |   |
| [`speech_voices`](https://whiskerjs.com/signals/speech-voices/) | ok | code | Digest of the voice list, or none; some browsers fill the list late. |
| [`storage`](https://whiskerjs.com/signals/storage/) | ok | code |   |
| [`time_zone`](https://whiskerjs.com/signals/time-zone/) | ok | code |   |
| [`touch_support`](https://whiskerjs.com/signals/touch-support/) | ok | code |   |
| [`ua_client_hints`](https://whiskerjs.com/signals/ua-client-hints/) | ok | code | he=blocked when a Permissions Policy refuses the detailed hints. |
| [`ua_versions`](https://whiskerjs.com/signals/ua-versions/) | ok | code |   |
| [`vendor`](https://whiskerjs.com/signals/vendor/) | ok | code |   |
| [`vendor_flavors`](https://whiskerjs.com/signals/vendor-flavors/) | ok | code |   |
| [`webgl_image`](https://whiskerjs.com/signals/webgl-image/) | ok | code | noisy / render_mismatch or seeded_noise if an extension or setting adds noise to readback. |
| [`webgl_params`](https://whiskerjs.com/signals/webgl-params/) | ok | code | Where WebGL 1 is available; unavailable / no_context without it. |
| [`webgl_renderer`](https://whiskerjs.com/signals/webgl-renderer/) | ok | code |   |
| [`webgl_vendor`](https://whiskerjs.com/signals/webgl-vendor/) | ok | code |   |
| [`webgpu`](https://whiskerjs.com/signals/webgpu/) | varies | code | Depends on browser version, operating system and GPU; needs a secure context. unavailable / no_api without navigator.gpu, no_context without an adapter. |

## Questions and answers

### Does WhiskerJS have Samsung-specific code?

Only one thing: vendor_flavors checks whether a global named samsungAr exists, as one of ten browser-specific globals. Everything else is the same code as for any Chromium browser.

### Is anything excluded in Samsung Internet?

No. It is classed chromium, whose exclusion row is empty.

### Is there lab data for Samsung Internet?

No. The early lab sample covered Mac Chrome, Mac Safari, iPhone Chrome and iPhone Safari only.

## Related pages

- [Chrome on Android](https://whiskerjs.com/browsers/chrome-android/): The closest relative.
- [vendor_flavors](https://whiskerjs.com/signals/vendor-flavors/): The ten browser-specific globals.
- [audio_latency](https://whiskerjs.com/signals/audio-latency/): Read on Android user agents.
- [touch_support](https://whiskerjs.com/signals/touch-support/): Touch points and touch events.
- [Browser support matrix](https://whiskerjs.com/browsers/support-matrix/): All browsers side by side.
