IonImageryProvider not working with puppeteer + headless chrome

Hi,
If I am running puppeteer with headed chrome, everything is fine.
However for headless I am not able to render with IonImageryProvider
I tried alternate providers like MapboxImageryProvider and it works perfectly well

I am trying to render a scene to a video
Using Cesium 50

Thanks in advance for help !
Best, Sid.

Console gives following error stream

an error occurred in “IonImageryProvider”: Failed to obtain image tile X: 3 Y: 5 Level: 3.

Cesium.js:37792 An error occurred in “IonImageryProvider”: Failed to obtain image tile X: 3 Y: 7 Level: 3.

blob:http://localhost:8080/ac24bc30-78d4-46d0-a134-249056283634:1 GET blob:http://localhost:8080/ac24bc30-78d4-46d0-a134-249056283634 net::ERR_UNKNOWN_URL_SCHEME

Image (async)

Resource._Implementations.createImage @ Cesium.js:6316

request.requestFunction @ Cesium.js:5461

RequestScheduler.request @ Cesium.js:4209

fetchImage @ Cesium.js:5466

(anonymous) @ Cesium.js:5425

(anonymous) @ Cesium.js:1163

(anonymous) @ Cesium.js:1264

processQueue @ Cesium.js:1614

_resolve @ Cesium.js:1300

promiseResolve @ Cesium.js:1326

(anonymous) @ Cesium.js:1163

(anonymous) @ Cesium.js:1265

processQueue @ Cesium.js:1614

_resolve @ Cesium.js:1300

promiseResolve @ Cesium.js:1326

(anonymous) @ Cesium.js:1163

(anonymous) @ Cesium.js:1265

processQueue @ Cesium.js:1614

_resolve @ Cesium.js:1300

promiseResolve @ Cesium.js:1326

(anonymous) @ Cesium.js:4059

(anonymous) @ Cesium.js:1163

(anonymous) @ Cesium.js:1264

processQueue @ Cesium.js:1614

_resolve @ Cesium.js:1300

promiseResolve @ Cesium.js:1326

xhr.onload @ Cesium.js:6450

load (async)

Resource._Implementations.loadWithXhr @ Cesium.js:6419

request.requestFunction @ Cesium.js:5794

startRequest @ Cesium.js:4085

RequestScheduler.update @ Cesium.js:4161

Scene.render @ Cesium.js:240484

CesiumWidget.render @ Cesium.js:251309

render @ Cesium.js:250690

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

Cesium.js:37792 An error occurred in “IonImageryProvider”: Failed to obtain image tile X: 2 Y: 7 Level: 3.

blob:http://localhost:8080/05535948-ba03-4401-9b68-01d85c035bcb:1 GET blob:http://localhost:8080/05535948-ba03-4401-9b68-01d85c035bcb net::ERR_UNKNOWN_URL_SCHEME

Image (async)

Resource._Implementations.createImage @ Cesium.js:6316

request.requestFunction @ Cesium.js:5461

RequestScheduler.request @ Cesium.js:4209

fetchImage @ Cesium.js:5466

(anonymous) @ Cesium.js:5425

(anonymous) @ Cesium.js:1163

(anonymous) @ Cesium.js:1264

processQueue @ Cesium.js:1614

_resolve @ Cesium.js:1300

promiseResolve @ Cesium.js:1326

(anonymous) @ Cesium.js:1163

(anonymous) @ Cesium.js:1265

processQueue @ Cesium.js:1614

_resolve @ Cesium.js:1300

promiseResolve @ Cesium.js:1326

(anonymous) @ Cesium.js:1163

(anonymous) @ Cesium.js:1265

processQueue @ Cesium.js:1614

_resolve @ Cesium.js:1300

promiseResolve @ Cesium.js:1326

(anonymous) @ Cesium.js:4059

(anonymous) @ Cesium.js:1163

(anonymous) @ Cesium.js:1264

processQueue @ Cesium.js:1614

_resolve @ Cesium.js:1300

promiseResolve @ Cesium.js:1326

xhr.onload @ Cesium.js:6450

load (async)

Resource._Implementations.loadWithXhr @ Cesium.js:6419

request.requestFunction @ Cesium.js:5794

startRequest @ Cesium.js:4085

RequestScheduler.update @ Cesium.js:4161

Scene.render @ Cesium.js:240484

CesiumWidget.render @ Cesium.js:251309

render @ Cesium.js:250690

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

requestAnimationFrame (async)

requestAnimationFrame @ Cesium.js:83147

render @ Cesium.js:250691

blob:http://localhost:8080/7da491b4-db70-4d04-88eb-d2ddf2d95a6f:1 GET blob:http://localhost:8080/7da491b4-db70-4d04-88eb-d2ddf2d95a6f net::ERR_UNKNOWN_URL_SCHEME

``

Hi,
Please find the puppeteer code to reproduce this

const puppeteer = require(‘puppeteer’);

var page;

var browser;

var blob;

async function run() {

browser = await puppeteer.launch({

headless: false,

ignoreDefaultArgs: true,

args:[’–no-sandbox’,

‘–disable-setuid-sandbox’,

‘–remote-debugging-port=9222’,

‘–headless’,

'--hide-scrollbars',

'--mute-audio',

“–proxy-server=‘direct://’”,

“–proxy-bypass-list=*”,

“–disable-gpu”,

“–deterministic-fetch”

]

});

page = await browser.newPage();

await page.goto(‘https://cesiumjs.org/Cesium/Build/Apps/Sandcastle/’);

}

run();

``

Thanks for help,

Best,

Siddharth.

Thanks for reporting this Siddharth! I think this might an issue with the Blob URL. I can see that IonResource and Resource have an option of whether or not to use the Blob protocol when requesting an image. I’m not sure that IonImageryProvider exposes this option, but if you edit the Resource.js source code to force preferBlob to be always false and see if that fixes the issue, that’ll help move this forward a lot faster, and then we can open a GitHub issue detailing the issue and a possible fix.

Let me know if you’re able to try that and how it goes!

Hello Omar,
Setting preferBlob to false has fixed this issue,

I have mainly searched for preferBlob in Cesium,js and hard coded the same to false

Please start the process of opening issue on GitHub.

Thank you very much for the help !

Siddharth.

There’s a long-standing bug in Chromium regarding how links without protocols are handled. This error does not have a single solution till date because it arises due to a multitude of reasons. The ERR_UNKNOWN_URL_SCHEME error is commonly because of your browser issue . There’s no application on your device which can handle that particular action. It is a Chromium bug . In Chrome version 40 and up, this bug has resurfaced, but only if you are manually entering the URL of the redirect page in the address bar. The bug in chromium is responsible, yet everytime a patch is added to solve, the error finds a new way to resurface. The issue is on the chromium issue tracker here.

Common solutions:

  • Prefixing your links with http:// (or https://) should resolve the issue in some cases
  • If Err_Unknown_Url_Scheme error occurs in mailto: or tel: links inside an iframe then you can try to add target="_blank" in your URL Scheme.