Commit 47e94b5d authored by Oana Pop Rus's avatar Oana Pop Rus
Browse files

Merge inbound to mozilla-central. a=merge

parents ddd1679c ad469ee0
Loading
Loading
Loading
Loading
+0 −51
Original line number Diff line number Diff line
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

var EXPORTED_SYMBOLS = ["LightWeightThemeInstallChild"];

const {ActorChild} = ChromeUtils.import("resource://gre/modules/ActorChild.jsm");

class LightWeightThemeInstallChild extends ActorChild {
  handleEvent(event) {
    let {mm} = this;
    switch (event.type) {
      case "InstallBrowserTheme": {
        mm.sendAsyncMessage("LightWeightThemeWebInstaller:Install", {
          baseURI: event.target.baseURI,
          principal: event.target.nodePrincipal,
          themeData: event.target.getAttribute("data-browsertheme"),
        });
        break;
      }
      case "PreviewBrowserTheme": {
        mm.sendAsyncMessage("LightWeightThemeWebInstaller:Preview", {
          baseURI: event.target.baseURI,
          principal: event.target.nodePrincipal,
          themeData: event.target.getAttribute("data-browsertheme"),
        });
        this._previewWindow = event.target.ownerGlobal;
        this._previewWindow.addEventListener("pagehide", this, true);
        break;
      }
      case "pagehide": {
        mm.sendAsyncMessage("LightWeightThemeWebInstaller:ResetPreview");
        this._resetPreviewWindow();
        break;
      }
      case "ResetBrowserThemePreview": {
        if (this._previewWindow) {
          mm.sendAsyncMessage("LightWeightThemeWebInstaller:ResetPreview",
                           {principal: event.target.nodePrincipal});
          this._resetPreviewWindow();
        }
        break;
      }
    }
  }

  _resetPreviewWindow() {
    this._previewWindow.removeEventListener("pagehide", this, true);
    this._previewWindow = null;
  }
}
+0 −4
Original line number Diff line number Diff line
@@ -10,9 +10,6 @@ with Files("**"):
with Files("LightweightThemeChild.jsm"):
    BUG_COMPONENT = ("WebExtensions", "Themes")

with Files("LightWeightThemeInstallChild.jsm"):
    BUG_COMPONENT = ("Firefox", "Theme")

with Files("PageInfoChild.jsm"):
    BUG_COMPONENT = ("Firefox", "Page Info Window")

@@ -35,7 +32,6 @@ FINAL_TARGET_FILES.actors += [
    'DOMFullscreenChild.jsm',
    'FormValidationChild.jsm',
    'LightweightThemeChild.jsm',
    'LightWeightThemeInstallChild.jsm',
    'LinkHandlerChild.jsm',
    'NetErrorChild.jsm',
    'OfflineAppsChild.jsm',
+0 −1
Original line number Diff line number Diff line
@@ -184,7 +184,6 @@ pref("extensions.webextensions.themes.icons.buttons", "back,forward,reload,stop,

pref("lightweightThemes.update.enabled", true);
pref("lightweightThemes.getMoreURL", "https://addons.mozilla.org/%LOCALE%/firefox/themes");
pref("lightweightThemes.recommendedThemes", "[{\"id\":\"recommended-1\",\"homepageURL\":\"https://addons.mozilla.org/firefox/addon/a-web-browser-renaissance/\",\"headerURL\":\"resource:///chrome/browser/content/browser/defaultthemes/1.header.jpg\",\"textcolor\":\"#000000\",\"accentcolor\":\"#834d29\",\"iconURL\":\"resource:///chrome/browser/content/browser/defaultthemes/1.icon.jpg\",\"previewURL\":\"resource:///chrome/browser/content/browser/defaultthemes/1.preview.jpg\",\"author\":\"Sean.Martell\",\"version\":\"0\"},{\"id\":\"recommended-2\",\"homepageURL\":\"https://addons.mozilla.org/firefox/addon/space-fantasy/\",\"headerURL\":\"resource:///chrome/browser/content/browser/defaultthemes/2.header.jpg\",\"textcolor\":\"#ffffff\",\"accentcolor\":\"#d9d9d9\",\"iconURL\":\"resource:///chrome/browser/content/browser/defaultthemes/2.icon.jpg\",\"previewURL\":\"resource:///chrome/browser/content/browser/defaultthemes/2.preview.jpg\",\"author\":\"fx5800p\",\"version\":\"1.0\"},{\"id\":\"recommended-4\",\"homepageURL\":\"https://addons.mozilla.org/firefox/addon/pastel-gradient/\",\"headerURL\":\"resource:///chrome/browser/content/browser/defaultthemes/4.header.png\",\"textcolor\":\"#000000\",\"accentcolor\":\"#000000\",\"iconURL\":\"resource:///chrome/browser/content/browser/defaultthemes/4.icon.png\",\"previewURL\":\"resource:///chrome/browser/content/browser/defaultthemes/4.preview.png\",\"author\":\"darrinhenein\",\"version\":\"1.0\"}]");

#if defined(MOZ_WIDEVINE_EME)
pref("browser.eme.ui.enabled", true);
+0 −153
Original line number Diff line number Diff line
@@ -671,156 +671,3 @@ var gExtensionsNotifications = {
    }
  },
};

var LightWeightThemeWebInstaller = {
  init() {
    let mm = window.messageManager;
    mm.addMessageListener("LightWeightThemeWebInstaller:Install", this);
    mm.addMessageListener("LightWeightThemeWebInstaller:Preview", this);
    mm.addMessageListener("LightWeightThemeWebInstaller:ResetPreview", this);

    XPCOMUtils.defineLazyPreferenceGetter(this, "_apiTesting", "extensions.webapi.testing", false);
  },

  receiveMessage(message) {
    // ignore requests from background tabs
    if (message.target != gBrowser.selectedBrowser) {
      return;
    }

    let data = message.data;

    switch (message.name) {
      case "LightWeightThemeWebInstaller:Install": {
        this._installRequest(data.themeData, data.principal, data.baseURI);
        break;
      }
      case "LightWeightThemeWebInstaller:Preview": {
        this._preview(data.themeData, data.principal, data.baseURI);
        break;
      }
      case "LightWeightThemeWebInstaller:ResetPreview": {
        this._resetPreview(data && data.principal);
        break;
      }
    }
  },

  handleEvent(event) {
    switch (event.type) {
      case "TabSelect": {
        this._resetPreview();
        break;
      }
    }
  },

  get _manager() {
    let temp = {};
    ChromeUtils.import("resource://gre/modules/LightweightThemeManager.jsm", temp);
    delete this._manager;
    return this._manager = temp.LightweightThemeManager;
  },

  _installRequest(dataString, principal, baseURI) {
    // Don't allow installing off null principals.
    if (!principal.URI) {
      return;
    }

    let data = this._manager.parseTheme(dataString, baseURI);

    if (!data) {
      return;
    }

    // A notification bar with the option to undo is normally shown after a
    // theme is installed.  But the discovery pane served from the url(s)
    // below has its own toggle switch for quick undos, so don't show the
    // notification in that case.
    let notify = this._shouldShowUndoPrompt(principal);
    if (this._isAllowed(principal)) {
      this._install(data, notify);
      return;
    }

    let strings = {
      header: gNavigatorBundle.getFormattedString("webextPerms.header", ["<>"]),
      addonName: data.name,
      text: gNavigatorBundle.getFormattedString("lwthemeInstallRequest.message2",
                                                [principal.URI.host]),
      acceptText: gNavigatorBundle.getString("lwthemeInstallRequest.allowButton2"),
      acceptKey: gNavigatorBundle.getString("lwthemeInstallRequest.allowButton.accesskey2"),
      cancelText: gNavigatorBundle.getString("webextPerms.cancel.label"),
      cancelKey: gNavigatorBundle.getString("webextPerms.cancel.accessKey"),
      msgs: [],
    };
    ExtensionsUI.showPermissionsPrompt(gBrowser.selectedBrowser, strings, null,
      "installWeb").then(answer => {
      if (answer) {
        LightWeightThemeWebInstaller._install(data, notify);
      }
    });
  },

  _install(newLWTheme, notify) {
    let listener = {
      onEnabled(aAddon) {
        if (notify) {
          ExtensionsUI.showInstallNotification(gBrowser.selectedBrowser, newLWTheme);
        }
      },
    };

    AddonManager.addAddonListener(listener);
    this._manager.currentTheme = newLWTheme;
    AddonManager.removeAddonListener(listener);
  },

  _preview(dataString, principal, baseURI) {
    if (!this._isAllowed(principal))
      return;

    let data = this._manager.parseTheme(dataString, baseURI);
    if (!data)
      return;

    this._resetPreview();
    gBrowser.tabContainer.addEventListener("TabSelect", this);
    this._manager.previewTheme(data);
  },

  _resetPreview(principal) {
    if (!this._isAllowed(principal))
      return;
    gBrowser.tabContainer.removeEventListener("TabSelect", this);
    this._manager.resetPreview();
  },

  _isAllowed(principal) {
    if (!principal || !principal.URI || !principal.URI.schemeIs("https")) {
      return false;
    }

    let pm = Services.perms;
    return pm.testPermission(principal.URI, "install") == pm.ALLOW_ACTION;
  },

  _shouldShowUndoPrompt(principal) {
    if (!principal || !principal.URI) {
      return true;
    }

    let prePath = principal.URI.prePath;
    if (prePath == "https://discovery.addons.mozilla.org") {
      return false;
    }

    if (this._apiTesting && (prePath == "https://discovery.addons.allizom.org" ||
                             prePath == "https://discovery.addons-dev.allizom.org")) {
      return false;
    }
    return true;
  },

};
+4 −0
Original line number Diff line number Diff line
@@ -2,6 +2,10 @@
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

ChromeUtils.defineModuleGetter(
    this, "LightweightThemeManager",
    "resource://gre/modules/LightweightThemeManager.jsm");

/**
 * Enables compacttheme.css when needed.
 */
Loading