Pier Angelo Vendrame pushed to branch mullvad-browser-140.3.0esr-15.0-1 at The Tor Project / Applications / Mullvad Browser
Commits:
- 
63fc47b1
by Pier Angelo Vendrame at 2025-09-23T22:07:08+02:00
4 changed files:
- browser/components/search/SearchUIUtils.sys.mjs
- toolkit/components/search/OpenSearchLoader.sys.mjs
- toolkit/components/search/SearchService.sys.mjs
- toolkit/components/search/nsISearchService.idl
Changes:
| ... | ... | @@ -181,7 +181,11 @@ export var SearchUIUtils = { | 
| 181 | 181 |     */
 | 
| 182 | 182 |    async addOpenSearchEngine(locationURL, image, browsingContext) {
 | 
| 183 | 183 |      try {
 | 
| 184 | -      await Services.search.addOpenSearchEngine(locationURL, image);
 | |
| 184 | +      await Services.search.addOpenSearchEngine(
 | |
| 185 | +        locationURL,
 | |
| 186 | +        image,
 | |
| 187 | +        browsingContext?.originAttributes
 | |
| 188 | +      );
 | |
| 185 | 189 |      } catch (ex) {
 | 
| 186 | 190 |        let titleMsgName;
 | 
| 187 | 191 |        let descMsgName;
 | 
| ... | ... | @@ -97,10 +97,17 @@ const MOZSEARCH_LOCALNAME = "SearchPlugin"; | 
| 97 | 97 |   *   The uri from which to load the OpenSearch engine data.
 | 
| 98 | 98 |   * @param {string} [lastModified]
 | 
| 99 | 99 |   *   The UTC date when the engine was last updated, if any.
 | 
| 100 | + * @param {object} [originAttributes]
 | |
| 101 | + *   The first party domain of the site loading that manifest. The domain of the
 | |
| 102 | + *   manifest will be used if not provided.
 | |
| 100 | 103 |   * @returns {Promise<OpenSearchProperties>}
 | 
| 101 | 104 |   *   The properties of the loaded OpenSearch engine.
 | 
| 102 | 105 |   */
 | 
| 103 | -export async function loadAndParseOpenSearchEngine(sourceURI, lastModified) {
 | |
| 106 | +export async function loadAndParseOpenSearchEngine(
 | |
| 107 | +  sourceURI,
 | |
| 108 | +  lastModified,
 | |
| 109 | +  originAttributes
 | |
| 110 | +) {
 | |
| 104 | 111 |    if (!sourceURI) {
 | 
| 105 | 112 |      throw Components.Exception(
 | 
| 106 | 113 |        "Must have URI when calling _install!",
 | 
| ... | ... | @@ -116,7 +123,7 @@ export async function loadAndParseOpenSearchEngine(sourceURI, lastModified) { | 
| 116 | 123 | |
| 117 | 124 |    lazy.logConsole.debug("Downloading OpenSearch engine from:", sourceURI.spec);
 | 
| 118 | 125 | |
| 119 | -  let xmlData = await loadEngineXML(sourceURI, lastModified);
 | |
| 126 | +  let xmlData = await loadEngineXML(sourceURI, lastModified, originAttributes);
 | |
| 120 | 127 |    let xmlDocument = await parseXML(xmlData);
 | 
| 121 | 128 | |
| 122 | 129 |    lazy.logConsole.debug("Loading search plugin");
 | 
| ... | ... | @@ -147,11 +154,13 @@ export async function loadAndParseOpenSearchEngine(sourceURI, lastModified) { | 
| 147 | 154 |   *   The uri from which to load the OpenSearch engine data.
 | 
| 148 | 155 |   * @param {string} [lastModified]
 | 
| 149 | 156 |   *   The UTC date when the engine was last updated, if any.
 | 
| 157 | + * @param {object} [originAttributes]
 | |
| 158 | + *   The origin attributes to use to load the manifest.
 | |
| 150 | 159 |   * @returns {Promise}
 | 
| 151 | 160 |   *   A promise that is resolved with the data if the engine is successfully loaded
 | 
| 152 | 161 |   *   and rejected otherwise.
 | 
| 153 | 162 |   */
 | 
| 154 | -function loadEngineXML(sourceURI, lastModified) {
 | |
| 163 | +function loadEngineXML(sourceURI, lastModified, originAttributes = null) {
 | |
| 155 | 164 |    var chan = lazy.SearchUtils.makeChannel(
 | 
| 156 | 165 |      sourceURI,
 | 
| 157 | 166 |      // OpenSearchEngine is loading a definition file for a search engine,
 | 
| ... | ... | @@ -164,6 +173,17 @@ function loadEngineXML(sourceURI, lastModified) { | 
| 164 | 173 |      ? Ci.nsILoadInfo.ALREADY_HTTPS
 | 
| 165 | 174 |      : Ci.nsILoadInfo.NO_UPGRADE;
 | 
| 166 | 175 | |
| 176 | +  if (!originAttributes) {
 | |
| 177 | +    originAttributes = {};
 | |
| 178 | +    try {
 | |
| 179 | +      originAttributes.firstPartyDomain =
 | |
| 180 | +        Services.eTLD.getSchemelessSite(sourceURI);
 | |
| 181 | +    } catch (ex) {
 | |
| 182 | +      console.error("Failed to get first party domain for the manifest", ex);
 | |
| 183 | +    }
 | |
| 184 | +  }
 | |
| 185 | +  chan.loadInfo.originAttributes = originAttributes;
 | |
| 186 | + | |
| 167 | 187 |    if (lastModified && chan instanceof Ci.nsIHttpChannel) {
 | 
| 168 | 188 |      chan.setRequestHeader("If-Modified-Since", lastModified, false);
 | 
| 169 | 189 |    }
 | 
| ... | ... | @@ -762,13 +762,15 @@ export class SearchService { | 
| 762 | 762 |      });
 | 
| 763 | 763 |    }
 | 
| 764 | 764 | |
| 765 | -  async addOpenSearchEngine(engineURL, iconURL) {
 | |
| 765 | +  async addOpenSearchEngine(engineURL, iconURL, originAttributes) {
 | |
| 766 | 766 |      lazy.logConsole.debug("addOpenSearchEngine: Adding", engineURL);
 | 
| 767 | 767 |      await this.init();
 | 
| 768 | 768 |      let engine;
 | 
| 769 | 769 |      try {
 | 
| 770 | 770 |        let engineData = await lazy.loadAndParseOpenSearchEngine(
 | 
| 771 | -        Services.io.newURI(engineURL)
 | |
| 771 | +        Services.io.newURI(engineURL),
 | |
| 772 | +        null,
 | |
| 773 | +        originAttributes
 | |
| 772 | 774 |        );
 | 
| 773 | 775 |        engine = new lazy.OpenSearchEngine({ engineData, faviconURL: iconURL });
 | 
| 774 | 776 |      } catch (ex) {
 | 
| ... | ... | @@ -340,10 +340,14 @@ interface nsISearchService : nsISupports | 
| 340 | 340 |     *        icon. This value may be overridden by an icon specified in the
 | 
| 341 | 341 |     *        engine description file.
 | 
| 342 | 342 |     *
 | 
| 343 | +   * @param originAttributes [optional]
 | |
| 344 | +            The origin attributes to use to load this manifest.
 | |
| 345 | +   *
 | |
| 343 | 346 |     * @throws NS_ERROR_FAILURE if the description file cannot be successfully
 | 
| 344 | 347 |     *         loaded.
 | 
| 345 | 348 |     */
 | 
| 346 | -  Promise addOpenSearchEngine(in AString engineURL, in AString iconURL);
 | |
| 349 | +  Promise addOpenSearchEngine(in AString engineURL, in AString iconURL,
 | |
| 350 | +                              [optional] in jsval originAttributes);
 | |
| 347 | 351 | |
| 348 | 352 |    /**
 | 
| 349 | 353 |     * Adds a new search engine defined by the user.
 |