From 40a355a42d4a9444dc753c04c6608dade2f06a23 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 03:13:27 +0200 Subject: Adding upstream version 125.0.1. Signed-off-by: Daniel Baumann --- browser/actors/ContentSearchParent.sys.mjs | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'browser/actors/ContentSearchParent.sys.mjs') diff --git a/browser/actors/ContentSearchParent.sys.mjs b/browser/actors/ContentSearchParent.sys.mjs index 7c1a39536c..73b881881b 100644 --- a/browser/actors/ContentSearchParent.sys.mjs +++ b/browser/actors/ContentSearchParent.sys.mjs @@ -553,22 +553,34 @@ export let ContentSearch = { }, /** - * Converts the engine's icon into an appropriate URL for display at + * Converts the engine's icon into a URL or an ArrayBuffer for passing to the + * content process. + * + * @param {nsISearchEngine} engine + * The engine to get the icon for. + * @returns {string|ArrayBuffer} + * The icon's URL or an ArrayBuffer containing the icon data. */ async _getEngineIconURL(engine) { - let url = engine.getIconURL(); + let url = await engine.getIconURL(); if (!url) { return SEARCH_ENGINE_PLACEHOLDER_ICON; } - // The uri received here can be of two types + // The uri received here can be one of several types: // 1 - moz-extension://[uuid]/path/to/icon.ico // 2 - data:image/x-icon;base64,VERY-LONG-STRING + // 3 - blob: // - // If the URI is not a data: URI, there's no point in converting - // it to an arraybuffer (which is used to optimize passing the data - // accross processes): we can just pass the original URI, which is cheaper. - if (!url.startsWith("data:")) { + // For moz-extension URIs we can pass the URI to the content process and + // use it directly as they can be accessed from there and it is cheaper. + // + // For blob URIs the content process is a different scope and we can't share + // the blob with that scope. Hence we have to create a copy of the data. + // + // For data: URIs we convert to an ArrayBuffer as that is more optimal for + // passing the data across to the content process. + if (!url.startsWith("data:") && !url.startsWith("blob:")) { return url; } -- cgit v1.2.3