webapprt/DownloadView.jsm
author Nicholas Nethercote <nnethercote@mozilla.com>
Thu, 22 Oct 2015 22:48:40 -0700
changeset 269446 588e410c0ddb76ce261c9c0bd344b1ad634fcb32
parent 200447 9c96b4e6c9ee211b98cb0b7a5b25a5c8dd0c1b5d
permissions -rw-r--r--
Bug 1187784 (part 8) - Replace nsBaseHashtable::EnumerateRead() calls in layout/ with iterators. r=heycam. This fixes a type bug in CSSVariableDeclarations::MapRuleInfoInto(). The existing code passes aRuleData->mVariables.get(), which has type |CSSVariableDeclarations*|, into the |void*| parameter to EnumerateRead(). It then extracts that in EnumerateVariableForMapRuleInfoInto() via a cast to a different type, |nsDataHashtable<nsStringHashKey, nsString>*|. It's missing an intermediate access of CSSVariableDeclarations::mVariables. It's likely that this hasn't (seemingly) caused problems prior to now because mVariables is the only field in CSSVariableDeclarations, so mVariables->mVariables is at the same address as mVariables.

/* 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/. */

"use strict";

this.EXPORTED_SYMBOLS = ["DownloadView"];

const Cu = Components.utils;

Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/Downloads.jsm");

this.DownloadView = {
  init: function() {
    Downloads.getList(Downloads.ALL)
             .then(list => list.addView(this))
             .catch(Cu.reportError);
  },

  onDownloadAdded: function(aDownload) {
    let dmWindow = Services.wm.getMostRecentWindow("Download:Manager");
    if (dmWindow) {
      dmWindow.focus();
    } else {
      Services.ww.openWindow(null,
                             "chrome://webapprt/content/downloads/downloads.xul",
                             "Download:Manager",
                             "chrome,dialog=no,resizable",
                             null);
    }
  },
};

DownloadView.init();