Bug 564900 - Add folder specifically for downloads to Library sidebar
☠☠ backed out by 3978c4ee890b ☠ ☠
authorMehdi Mulani <mmulani@mozilla.com>
Wed, 28 Jul 2010 09:50:04 -0700
changeset 48295 210e4d354aec
parent 48294 dd0ca5cf12ea
child 48296 f9214514d547
child 48305 3978c4ee890b
push id14670
push usersdwilsh@shawnwilsher.com
push dateWed, 28 Jul 2010 16:51:06 +0000
treeherdermozilla-central@210e4d354aec [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs564900
milestone2.0b3pre
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 564900 - Add folder specifically for downloads to Library sidebar r=mak a=sdwilsh
browser/components/places/src/PlacesUIUtils.jsm
browser/components/places/tests/browser/Makefile.in
browser/components/places/tests/browser/browser_library_downloads.js
browser/components/places/tests/chrome/test_0_bug510634.xul
browser/themes/gnomestripe/browser/jar.mn
browser/themes/gnomestripe/browser/places/downloads.png
browser/themes/gnomestripe/browser/places/places.css
browser/themes/pinstripe/browser/jar.mn
browser/themes/pinstripe/browser/places/downloads.png
browser/themes/pinstripe/browser/places/places.css
browser/themes/winstripe/browser/jar.mn
browser/themes/winstripe/browser/places/downloads.png
browser/themes/winstripe/browser/places/places.css
--- a/browser/components/places/src/PlacesUIUtils.jsm
+++ b/browser/components/places/src/PlacesUIUtils.jsm
@@ -51,17 +51,17 @@ Cu.import("resource://gre/modules/XPCOMU
 Cu.import("resource://gre/modules/Services.jsm");
 
 XPCOMUtils.defineLazyGetter(this, "PlacesUtils", function() {
   Cu.import("resource://gre/modules/PlacesUtils.jsm");
   return PlacesUtils;
 });
 
 var PlacesUIUtils = {
-  ORGANIZER_LEFTPANE_VERSION: 6,
+  ORGANIZER_LEFTPANE_VERSION: 7,
   ORGANIZER_FOLDER_ANNO: "PlacesOrganizer/OrganizerFolder",
   ORGANIZER_QUERY_ANNO: "PlacesOrganizer/OrganizerQuery",
 
   LOAD_IN_SIDEBAR_ANNO: "bookmarkProperties/loadInSidebar",
   DESCRIPTION_ANNO: "bookmarkProperties/description",
 
   TYPE_TAB_DROP: "application/x-moz-tabbrowser-tab",
 
@@ -975,33 +975,34 @@ var PlacesUIUtils = {
     // Shortcuts to services.
     let bs = PlacesUtils.bookmarks;
     let as = PlacesUtils.annotations;
 
     // This is the list of the left pane queries.
     let queries = {
       "PlacesRoot": { title: "" },
       "History": { title: this.getString("OrganizerQueryHistory") },
+      "Downloads": { title: this.getString("OrganizerQueryDownloads") },
       "Tags": { title: this.getString("OrganizerQueryTags") },
       "AllBookmarks": { title: this.getString("OrganizerQueryAllBookmarks") },
       "BookmarksToolbar":
         { title: null,
           concreteTitle: PlacesUtils.getString("BookmarksToolbarFolderTitle"),
           concreteId: PlacesUtils.toolbarFolderId },
       "BookmarksMenu":
         { title: null,
           concreteTitle: PlacesUtils.getString("BookmarksMenuFolderTitle"),
           concreteId: PlacesUtils.bookmarksMenuFolderId },
       "UnfiledBookmarks":
         { title: null,
           concreteTitle: PlacesUtils.getString("UnsortedBookmarksFolderTitle"),
           concreteId: PlacesUtils.unfiledBookmarksFolderId },
     };
     // All queries but PlacesRoot.
-    const EXPECTED_QUERY_COUNT = 6;
+    const EXPECTED_QUERY_COUNT = 7;
 
     // Removes an item and associated annotations, ignoring eventual errors.
     function safeRemoveItem(aItemId) {
       try {
         if (as.itemHasAnnotation(aItemId, PlacesUIUtils.ORGANIZER_QUERY_ANNO) &&
             !(as.getItemAnnotation(aItemId, PlacesUIUtils.ORGANIZER_QUERY_ANNO) in queries)) {
           // Some extension annotated their roots with our query annotation,
           // so we should not delete them.
@@ -1164,17 +1165,22 @@ var PlacesUIUtils = {
 
         // History Query.
         this.create_query("History", leftPaneRoot,
                           "place:type=" +
                           Ci.nsINavHistoryQueryOptions.RESULTS_AS_DATE_QUERY +
                           "&sort=" +
                           Ci.nsINavHistoryQueryOptions.SORT_BY_DATE_DESCENDING);
 
-        // XXX: Downloads.
+        // Downloads.
+        this.create_query("Downloads", leftPaneRoot,
+                          "place:transition=" +
+                          Ci.nsINavHistoryService.TRANSITION_DOWNLOAD +
+                          "&sort=" +
+                          Ci.nsINavHistoryQueryOptions.SORT_BY_DATE_DESCENDING);
 
         // Tags Query.
         this.create_query("Tags", leftPaneRoot,
                           "place:type=" +
                           Ci.nsINavHistoryQueryOptions.RESULTS_AS_TAG_QUERY +
                           "&sort=" +
                           Ci.nsINavHistoryQueryOptions.SORT_BY_TITLE_ASCENDING);
 
--- a/browser/components/places/tests/browser/Makefile.in
+++ b/browser/components/places/tests/browser/Makefile.in
@@ -60,12 +60,13 @@ include $(topsrcdir)/config/rules.mk
 	browser_forgetthissite_single.js \
 	browser_library_left_pane_commands.js \
 	browser_drag_bookmarks_on_toolbar.js \
 	browser_library_middleclick.js \
 	browser_library_views_liveupdate.js \
 	browser_views_liveupdate.js \
 	browser_sidebarpanels_click.js \
 	browser_library_infoBox.js \
+	browser_library_downloads.js \
 	$(NULL)
 
 libs:: $(_BROWSER_TEST_FILES)
 	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/browser/$(relativesrcdir)
new file mode 100644
--- /dev/null
+++ b/browser/components/places/tests/browser/browser_library_downloads.js
@@ -0,0 +1,110 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Places test code.
+ *
+ * The Initial Developer of the Original Code is Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Mehdi Mulani <mmulani@mozilla.com> (original author)
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/*
+ * Tests bug 564900: Add folder specifically for downloads to Library left pane.
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=564900
+ * This test visits various pages then opens the Library and ensures
+ * that both the Downloads folder shows up and that the correct visits
+ * are shown in it.
+ */
+
+let now = Date.now();
+
+function test() {
+  waitForExplicitFinish();
+
+  function windowObserver(aSubject, aTopic, aData) {
+    if (aTopic != "domwindowopened")
+      return;
+    Services.ww.unregisterNotification(windowObserver);
+    let win = aSubject.QueryInterface(Ci.nsIDOMWindow);
+    win.addEventListener("load", function onLoad(event) {
+      win.removeEventListener("load", onLoad, false);
+      executeSoon(function () {
+        // Add visits to compare contents with.
+        fastAddVisit("http://mozilla.com",
+                     PlacesUtils.history.TRANSITION_TYPED);
+        fastAddVisit("http://google.com",
+                     PlacesUtils.history.TRANSITION_DOWNLOAD);
+        fastAddVisit("http://en.wikipedia.org",
+                     PlacesUtils.history.TRANSITION_TYPED);
+        fastAddVisit("http://ubuntu.org",
+                     PlacesUtils.history.TRANSITION_DOWNLOAD);
+
+        // Make sure Downloads is present.
+        isnot(win.PlacesOrganizer._places.selectedNode, null,
+              "Downloads is present and selected");
+
+        // Make sure content in right pane exists.
+        let tree = win.document.getElementById("placeContent");
+        isnot(tree, null, "placeContent tree exists");
+
+        // Check results.
+        var contentRoot = tree.result.root;
+        var len = contentRoot.childCount;
+        var testUris = ["http://ubuntu.org/", "http://google.com/"];
+        for (var i = 0; i < len; i++) {
+          is(contentRoot.getChild(i).uri, testUris[i],
+             "Comparing downloads shown at index " + i);
+        }
+
+        win.close();
+        waitForClearHistory(finish);
+      });
+    }, false);
+  }
+
+  Services.ww.registerNotification(windowObserver);
+  PlacesCommandHook.showPlacesOrganizer("Downloads");
+}
+
+function fastAddVisit(uri, transition) {
+  PlacesUtils.history.addVisit(PlacesUtils._uri(uri), now++ * 1000,
+                               null, transition, false, 0);
+}
+
+function waitForClearHistory(aCallback) {
+  let observer = {
+    observe: function(aSubject, aTopic, aData) {
+      Services.obs.removeObserver(this, PlacesUtils.TOPIC_EXPIRATION_FINISHED);
+      aCallback();
+    }
+  };
+  Services.obs.addObserver(observer, PlacesUtils.TOPIC_EXPIRATION_FINISHED, false);
+
+  PlacesUtils.bhistory.removeAllPages();
+}
--- a/browser/components/places/tests/chrome/test_0_bug510634.xul
+++ b/browser/components/places/tests/chrome/test_0_bug510634.xul
@@ -102,32 +102,38 @@
 
       // restore the getter
       PlacesUIUtils.__defineGetter__("leftPaneFolderId", cachedLeftPaneFolderIdGetter);
 
       // Setup the places tree contents.
       let tree = document.getElementById("tree");
       tree.place = "place:queryType=1&folder=" + leftPaneFolderId;
 
-      // Open All Bookmarks
-      PlacesUtils.asContainer(tree.view.nodeForTreeIndex(2)).containerOpen = true;
-      
       // The query-property is set on the title column for each row.
       let titleColumn = tree.treeBoxObject.columns.getColumnAt(0);
 
-      ["History", "Tags", "AllBookmarks", "BookmarksToolbar",
+      // Open All Bookmarks
+      tree.selectItems([PlacesUIUtils.leftPaneQueries["AllBookmarks"]]);
+      PlacesUtils.asContainer(tree.selectedNode).containerOpen = true;
+      is(PlacesUIUtils.allBookmarksFolderId, tree.selectedNode.itemId,
+         "Opened All Bookmarks");
+
+      ["History", "Downloads", "Tags", "AllBookmarks", "BookmarksToolbar",
        "BookmarksMenu", "UnfiledBookmarks"].forEach(
-         function(aQueryName, aRow) {
-           let rowProperties = createSupportsArray();
-           tree.view.getCellProperties(aRow, titleColumn, rowProperties);
-           rowProperties = convertPropertiesToJSArray(rowProperties);
-           ok(rowProperties.indexOf("OrganizerQuery_" + aQueryName) != -1,
-             "OrganizerQuery_" + aQueryName + " is set");
-         }
-       );
+        function(aQueryName, aRow) {
+          let found = false;
+          for (let i = 0; i < tree.view.rowCount && !found; i++) {
+            let rowProperties = createSupportsArray();
+            tree.view.getCellProperties(i, titleColumn, rowProperties);
+            rowProperties = convertPropertiesToJSArray(rowProperties);
+            found = rowProperties.indexOf("OrganizerQuery_" + aQueryName) != -1;
+          }
+          ok(found, "OrganizerQuery_" + aQueryName + " is set");
+        }
+      );
 
       // Close the root node
       tree.result.root.containerOpen = false;
 
       // Restore the getter for the next test.
       PlacesUIUtils.__defineGetter__("leftPaneFolderId", cachedLeftPaneFolderIdGetter);
 
       SimpleTest.finish();
--- a/browser/themes/gnomestripe/browser/jar.mn
+++ b/browser/themes/gnomestripe/browser/jar.mn
@@ -51,16 +51,17 @@ browser.jar:
   skin/classic/browser/places/organizer.css           (places/organizer.css)
 * skin/classic/browser/places/organizer.xml           (places/organizer.xml)
   skin/classic/browser/places/query.png               (places/query.png)
   skin/classic/browser/places/searching_16.png        (places/searching_16.png)
   skin/classic/browser/places/starPage.png            (places/starPage.png)
   skin/classic/browser/places/tag.png                 (places/tag.png)
   skin/classic/browser/places/toolbarDropMarker.png   (places/toolbarDropMarker.png)
   skin/classic/browser/places/unsortedBookmarks.png   (places/unsortedBookmarks.png)
+  skin/classic/browser/places/downloads.png           (places/downloads.png)
   skin/classic/browser/preferences/alwaysAsk.png      (preferences/alwaysAsk.png)
   skin/classic/browser/preferences/mail.png           (preferences/mail.png)
   skin/classic/browser/preferences/Options.png        (preferences/Options.png)
 * skin/classic/browser/preferences/preferences.css    (preferences/preferences.css)
   skin/classic/browser/preferences/applications.css   (preferences/applications.css)
   skin/classic/browser/tabbrowser/alltabs.png          (tabbrowser/alltabs.png)
   skin/classic/browser/tabbrowser/progress.png         (tabbrowser/progress.png)
   skin/classic/browser/tabbrowser/progress-pulsing.png (tabbrowser/progress-pulsing.png)
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d641714aabe56751e54e0a24d1d6cb2188bee968
GIT binary patch
literal 599
zc$@)O0;v6oP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz`AI}URCwBA{Qv(y10{eFn*kAXq<0C*
zvAQy`K=}XuFfe?0{QKbY<fjf8ia`dT<BXm1|IdD0`~SiBGhlr7)7t-;yX60e&z9mx
zSIdIUSs<JLG5%pV@^Lnpug>Mfz{JXk)e9`R{Pz3*cZNUzf5O?g08Rt`{{IEn2x60L
z0Lb>A|GvQ4BpJZU!2~tnE8GB9c06GKjJ6wm5-jShoQw>toJ<Uy0?Z75{{3S31v3E1
z28l^%vwz6mr@-+0+kb{nFaF$Fk@8d(=7IticE)vHx@nwz>>^-+r#~+-{DOwThrdr5
zJf%t*7^HygAI}-KU!D(=$b}~)Mn*;kU>rM1D+_KhQ*-0I^JhQY`7prF#Lb|>;=pk7
z*6#1m?!Na~nfh!WSTD=~kYORyByDBYg|?ZiyK>+8eSqQTe~2L*OneN=EVc}%Zted1
z=*By*HCfLOL((9^0FVhF%<S7GZmn!6vdLW2mG{w~lMKN0#vsRH#&GKTp0D>Vy!GEy
z`tlGcW}ycBhZ(>GN`TNnWpOMKw$ODIUt_Fc%g+cj_sq@1U#{(c8MdeW4anv{Q2Y<5
z_aCwgU<R-QF^_RHzlEj;&t#x}rW-rI=ABvm;TTXHlrVlE8Soz^44{Uv0x=iJ5GV}-
l-=La7^ly-6SQr2V7yvlA508N*8PNa$002ovPDHLkV1kWpAIAUy
--- a/browser/themes/gnomestripe/browser/places/places.css
+++ b/browser/themes/gnomestripe/browser/places/places.css
@@ -65,16 +65,21 @@ treechildren::-moz-tree-image(container,
   -moz-image-region: auto;
 }
 
 /* query-nodes should be styled even if they're not expandable */
 treechildren::-moz-tree-image(title, query) {
   list-style-image: url("chrome://browser/skin/places/query.png");
 }
 
+treechildren::-moz-tree-image(query, OrganizerQuery_Downloads) {
+  list-style-image: url("chrome://browser/skin/places/downloads.png");
+  -moz-image-region: auto;
+}
+
 treechildren::-moz-tree-image(title, query, tagContainer),
 treechildren::-moz-tree-image(query, OrganizerQuery_Tags) {
   list-style-image: url("chrome://mozapps/skin/places/tagContainerIcon.png");
 }
 
 /* calendar icon for folders grouping items by date */
 treechildren::-moz-tree-image(title, query, dayContainer) {
   list-style-image: url("chrome://browser/skin/places/calendar.png");
--- a/browser/themes/pinstripe/browser/jar.mn
+++ b/browser/themes/pinstripe/browser/jar.mn
@@ -83,16 +83,17 @@ browser.jar:
   skin/classic/browser/places/pageStarred.png               (places/pageStarred.png)
   skin/classic/browser/places/searching_16.png              (places/searching_16.png)
   skin/classic/browser/places/starred48.png                 (places/starred48.png)
   skin/classic/browser/places/unstarred48.png               (places/unstarred48.png)
   skin/classic/browser/places/unfiledBookmarks.png          (places/unfiledBookmarks.png)
   skin/classic/browser/places/twisty-open.gif               (places/twisty-open.gif)
   skin/classic/browser/places/twisty-closed.gif             (places/twisty-closed.gif)
   skin/classic/browser/places/tag.png                       (places/tag.png)
+  skin/classic/browser/places/downloads.png                 (places/downloads.png)
   skin/classic/browser/places/expander-closed-active.png    (places/expander-closed-active.png)
   skin/classic/browser/places/expander-closed.png           (places/expander-closed.png)
   skin/classic/browser/places/expander-open-active.png      (places/expander-open-active.png)
   skin/classic/browser/places/expander-open.png             (places/expander-open.png)
   skin/classic/browser/preferences/alwaysAsk.png            (preferences/alwaysAsk.png)
   skin/classic/browser/preferences/application.png          (preferences/application.png)
   skin/classic/browser/preferences/Options.png              (preferences/Options.png)
   skin/classic/browser/preferences/saveFile.png             (preferences/saveFile.png)
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0756cb6806dd77f905f97344937c7bebe8fbbfba
GIT binary patch
literal 678
zc$@*I0$KfuP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!NJ&INRCwB?Q%z_SQ4pTDyUE711>2-5
zLbZY(1gk_MrFsy(2_jPbgHn&;!6<m`K|B<1B1Ev~N)aoT-t<%rQfgOivDlNM#Rgk7
zsbHJU?!G_Yyza&{)RP0V`{sKy-^`nNk4P!uf5gI1zIYi(9XNb%awfLd%#hf+Eg1m)
z%s=$!j&((Tm^arkyiTA&1zb}A%E<nGnR6%3!}jD3ZGU%{Vf5wbfuX^P_W1|JpZ75#
zsjEQ8*OkC+0Zs8O@YVaM?Y8(f;0Xa>{^JNTsv;C7I8=oTOmc1OwZbT4a#I3mfVmJ5
zsDOYoZ3l#FY@?7m0)3#rER3scf+`ZKZCoQ3_`K#ML;tXe66&W(Ev$gm2yjg;zDa&X
zKveeKed#Zx6FToE+X1!$7&|TSm=9H@C~*itv=~6Td1=ob<x^1=EWl!JgzVB4cow~B
zri@2@CokHm<}{eZf(7>zc%14~gs;NYgI9oeaaj7j3{MJAeNhxQYL(;{`{DNB_^I@v
z)L75qY{HLKLCB3wGl&6pkbtS#cV6jzx%bw<*=M<qhhRiQC=IPXUvhq&E=*5Xq-TQ9
zm^wnBHBb#itl&5m^g&<Q&<hf(*>u4^-qzhZmOYYb@vW-fj8PkA-p;vYXQkJD>`&mN
z!@M%OTSllBo#)>?@TSVvuQRDsI)Q_jeKWUKda-iJ8xLO9rr2<SNkpL3R@!W4jUM}G
zB9FNL+PlsjF{##T*mJxpN=3s9sFC0sOd?76M{&bo{L?5HH~t7P0D^rIGn}>e`v3p{
M07*qoM6N<$f^%9tk^lez
--- a/browser/themes/pinstripe/browser/places/places.css
+++ b/browser/themes/pinstripe/browser/places/places.css
@@ -143,16 +143,20 @@ treechildren::-moz-tree-image(container,
   list-style-image: url("chrome://browser/skin/places/unfiledBookmarks.png");
 }
 
 /* query-nodes should be styled even if they're not expandable */
 treechildren::-moz-tree-image(query) {
   list-style-image: url("chrome://browser/skin/places/query.png");
 }
 
+treechildren::-moz-tree-image(query, OrganizerQuery_Downloads) {
+  list-style-image: url("chrome://browser/skin/places/downloads.png");
+}
+
 treechildren::-moz-tree-image(title, query, tagContainer),
 treechildren::-moz-tree-image(query, OrganizerQuery_Tags) {
   list-style-image: url("chrome://mozapps/skin/places/tagContainerIcon.png");
 }
 
 /* calendar icon for folders grouping items by date */
 treechildren::-moz-tree-image(title, query, dayContainer) {
   list-style-image: url("chrome://browser/skin/places/history.png");
--- a/browser/themes/winstripe/browser/jar.mn
+++ b/browser/themes/winstripe/browser/jar.mn
@@ -65,16 +65,17 @@ browser.jar:
         skin/classic/browser/places/libraryToolbar.png               (places/libraryToolbar.png)
         skin/classic/browser/places/starred48.png                    (places/starred48.png)
         skin/classic/browser/places/unstarred48.png                  (places/unstarred48.png)
         skin/classic/browser/places/tag.png                          (places/tag.png)
         skin/classic/browser/places/history.png                      (places/history.png)
         skin/classic/browser/places/allBookmarks.png                 (places/allBookmarks.png)
         skin/classic/browser/places/unsortedBookmarks.png            (places/unsortedBookmarks.png)
         skin/classic/browser/places/searching_16.png                 (places/searching_16.png)
+        skin/classic/browser/places/downloads.png                    (places/downloads.png)
         skin/classic/browser/preferences/alwaysAsk.png               (preferences/alwaysAsk.png)
         skin/classic/browser/preferences/application.png             (preferences/application.png)
         skin/classic/browser/preferences/mail.png                    (preferences/mail.png)
         skin/classic/browser/preferences/Options.png                 (preferences/Options.png)
         skin/classic/browser/preferences/saveFile.png                (preferences/saveFile.png)
         skin/classic/browser/preferences/preferences.css             (preferences/preferences.css)
         skin/classic/browser/preferences/applications.css            (preferences/applications.css)
         skin/classic/browser/tabbrowser/alltabs.png                             (tabbrowser/alltabs.png)
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d37bc40b642d3826e7a74f2e391706299ea455c8
GIT binary patch
literal 674
zc$@*E0$u%yP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!L`g(JRCwB?Q_pJ?Q4s##Zgyj%ZB62j
zQetb`gGDLYA|e$*dQ=fb?OD8eDR`2CH~#}q9t5%8dl63}SdwN<N|RQlR79ysj3zOg
zq|J{__Pu?+Y+?veO2C2HS?0a(+nH}>3FjRDV~&3%uiSYQ^G%;S1G#m~C{nT2^_R~c
zPIccU-4zi3jlsJM^My+@Q#jZs2*i2bU|0^tkdH==E<JgW*}H;1C%DUn0wYN1)J`2x
zh@FG#=%EEg0V4zq5=_#p&H}M>?Uwc=kOj~ZAW1|4wF#tV&Y+a{AR<AHF<1gn;}Ys3
zQp3Vmy@b+Fo%KM#QGtqNnIe#;*flvO1|)11If`GB?C;MBo4vJ=kVj7V%>9Fi%Pv$r
zKAayvj1T$d{Ykfs;O7j~Y#fKmMWC2N;r;4%eC@g4u3(4YzHTWmMvjl~JMDH0v1Mc`
zCRnXG1-&d|cFcqNu>oXrd91t*RZ%hS*^)ILsm<VKUiNAwuFee~@ha<CicDEZ$SmOu
zdGVg!slfvS8_{UB`YC)B(Z$zo0^1VN?TW)2$WiI`w0}tbWdLTKf>Q>k80V>eif}km
z%Ef}05qi4Z9$JSM1j*R<DqLFDblf~UHmnwe`VO&)C;KgE+Pkv8_U1Ywiz~L$T?A6g
z9Y}rrVbpjyZ7SC$M~9qVl|c(>yM^$pIczM2+M{Yk(ouob8mqIhy%?RjAWvL;Z2wDJ
zfq8rjHNYj|qB&4|K|2UKNfhBOo1_^VR%wA7(fk8$9Q+nw0BgSjtIXmUdH?_b07*qo
IM6N<$f=vW2H2?qr
--- a/browser/themes/winstripe/browser/places/places.css
+++ b/browser/themes/winstripe/browser/places/places.css
@@ -80,16 +80,21 @@ treechildren::-moz-tree-image(title, que
 }
 
 treechildren::-moz-tree-image(title, query, tagContainer),
 treechildren::-moz-tree-image(query, OrganizerQuery_Tags) {
   list-style-image: url("chrome://mozapps/skin/places/tagContainerIcon.png");
   -moz-image-region: auto;
 }
 
+treechildren::-moz-tree-image(query, OrganizerQuery_Downloads) {
+  list-style-image: url("chrome://browser/skin/places/downloads.png");
+  -moz-image-region: auto;
+}
+
 /* calendar icon for folders grouping items by date */
 treechildren::-moz-tree-image(title, query, dayContainer) {
   list-style-image: url("chrome://browser/skin/places/calendar.png");
   -moz-image-region: auto;
 }
 
 treechildren::-moz-tree-image(title, query, hostContainer) {
   list-style-image: url("chrome://global/skin/icons/folder-item.png");