Commit 3ad7a3a3 authored by Alex Catarineu's avatar Alex Catarineu Committed by Matthew Finkel
Browse files

Bug 32414: Make Services.search.addEngine obey FPI

parent ac96b77c
Loading
Loading
Loading
Loading
+39 −31
Original line number Diff line number Diff line
@@ -1248,7 +1248,15 @@ BrowserPageActions.addSearchEngine = {
  },

  _installEngine(uri, image) {
    Services.search.addEngine(uri, image, false).then(
    Services.search
      .addEngine(
        uri,
        image,
        false,
        null,
        gBrowser.selectedBrowser.contentPrincipal
      )
      .then(
        engine => {
          showBrowserPageActionFeedback(this.action);
        },
+12 −3
Original line number Diff line number Diff line
@@ -7253,7 +7253,10 @@ var SearchEngines = {
          return;
        }

        this.addOpenSearchEngine(engines[data.button]);
        this.addOpenSearchEngine(
          engines[data.button],
          browser.contentPrincipal
        );
        engines.splice(data.button, 1);

        if (engines.length < 1) {
@@ -7269,9 +7272,15 @@ var SearchEngines = {
      });
  },

  addOpenSearchEngine: async function addOpenSearchEngine(engine) {
  addOpenSearchEngine: async function addOpenSearchEngine(engine, principal) {
    try {
      await Services.search.addEngine(engine.url, engine.iconURL, false);
      await Services.search.addEngine(
        engine.url,
        engine.iconURL,
        false,
        null,
        principal
      );
      // Display a toast confirming addition of new search engine.
      Snackbars.show(
        Strings.browser.formatStringFromName(
+7 −1
Original line number Diff line number Diff line
@@ -69,7 +69,13 @@ MainProcessSingleton.prototype = {
    }

    Services.search
      .addEngine(engineURL.spec, iconURL ? iconURL.spec : null, true)
      .addEngine(
        engineURL.spec,
        iconURL ? iconURL.spec : null,
        true,
        null,
        browser.contentPrincipal
      )
      .catch(ex =>
        Cu.reportError(
          "Unable to add search engine to the search service: " + ex
+4 −2
Original line number Diff line number Diff line
@@ -806,6 +806,8 @@ SearchEngine.prototype = {
  _iconUpdateURL: null,
  /* The extension ID if added by an extension. */
  _extensionID: null,
  /* The principal from which the engine was added. */
  _contentPrincipal: null,
  // Built in search engine extensions.
  _isBuiltin: false,

@@ -851,7 +853,7 @@ SearchEngine.prototype = {
      '_initFromURIAndLoad: Downloading engine from: "' + loadURI.spec + '".'
    );

    var chan = SearchUtils.makeChannel(loadURI);
    var chan = SearchUtils.makeChannel(loadURI, this._contentPrincipal);

    if (this._engineToUpdate && chan instanceof Ci.nsIHttpChannel) {
      var lastModified = this._engineToUpdate.getAttr("updatelastmodified");
@@ -1231,7 +1233,7 @@ SearchEngine.prototype = {
            this.name +
            '"'
        );
        var chan = SearchUtils.makeChannel(uri);
        var chan = SearchUtils.makeChannel(uri, this._contentPrincipal);

        let iconLoadCallback = function(byteArray, engine) {
          // This callback may run after we've already set a preferred icon,
+4 −1
Original line number Diff line number Diff line
@@ -2311,7 +2311,7 @@ SearchService.prototype = {
    return this.addEngineWithDetails(params.name, params, isReload);
  },

  async addEngine(engineURL, iconURL, confirm, extensionID) {
  async addEngine(engineURL, iconURL, confirm, extensionID, contentPrincipal) {
    SearchUtils.log('addEngine: Adding "' + engineURL + '".');
    await this.init(true);
    let errCode;
@@ -2325,6 +2325,9 @@ SearchService.prototype = {
      if (extensionID) {
        engine._extensionID = extensionID;
      }
      if (contentPrincipal) {
        engine._contentPrincipal = contentPrincipal;
      }
      errCode = await new Promise(resolve => {
        engine._installCallback = function(errorCode) {
          resolve(errorCode);
Loading