From 9dffaab5681c0cfaced9ded8dd2757a08cacfb09 Mon Sep 17 00:00:00 2001 From: Gijs Kruitbosch Date: Wed, 12 Feb 2014 14:54:35 +0000 Subject: [PATCH 01/28] Bug 971705 - fix Australis' panel's mainViewObserver to disconnect on popuphidden, r=mconley --HG-- extra : rebase_source : 9e8a88a26ecb3b134504d2d112d290a7bcb0b44b --- .../customizableui/content/panelUI.xml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/browser/components/customizableui/content/panelUI.xml b/browser/components/customizableui/content/panelUI.xml index c5df257944e..5510e9ed569 100644 --- a/browser/components/customizableui/content/panelUI.xml +++ b/browser/components/customizableui/content/panelUI.xml @@ -174,13 +174,6 @@ this.setAttribute("viewtype", "main"); } - this._mainViewObserver.observe(this._mainView, { - attributes: true, - characterData: true, - childList: true, - subtree: true - }); - this._shiftMainView(); ]]> @@ -296,6 +289,14 @@ // every time the popup closes, which is why we have to set it each time. this._panel.autoPosition = false; this._syncContainerWithMainView(); + + this._mainViewObserver.observe(this._mainView, { + attributes: true, + characterData: true, + childList: true, + subtree: true + }); + break; case "popupshown": this._setMaxHeight(); @@ -304,6 +305,7 @@ this.removeAttribute("panelopen"); this._mainView.style.removeProperty("height"); this.showMainView(); + this._mainViewObserver.disconnect(); break; } ]]> From 795a4b5eaf260b0acd10801ced995d21798df19e Mon Sep 17 00:00:00 2001 From: Gijs Kruitbosch Date: Tue, 11 Feb 2014 19:31:43 +0000 Subject: [PATCH 02/28] Bug 969376 - correctly size Australis' menu button, make it hug right border on Windows and Linux, r=jaws --HG-- rename : browser/base/content/test/general/browser_backButtonFitts.js => browser/base/content/test/general/browser_menuButtonFitts.js extra : rebase_source : 598279d26ffe3d95f62e458e39ef41b5ec1a505a --- browser/base/content/test/general/browser.ini | 2 ++ .../test/general/browser_menuButtonFitts.js | 32 +++++++++++++++++++ browser/themes/linux/browser.css | 4 +++ browser/themes/osx/browser.css | 7 ++++ .../customizableui/panelUIOverlay.inc.css | 4 --- browser/themes/windows/browser.css | 5 +++ 6 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 browser/base/content/test/general/browser_menuButtonFitts.js diff --git a/browser/base/content/test/general/browser.ini b/browser/base/content/test/general/browser.ini index f090da2a036..b70588b9360 100644 --- a/browser/base/content/test/general/browser.ini +++ b/browser/base/content/test/general/browser.ini @@ -268,6 +268,8 @@ skip-if = true # browser_drag.js is disabled, as it needs to be updated for the [browser_locationBarCommand.js] skip-if = os == "linux" # Intermittent failures, bug 917535 [browser_locationBarExternalLoad.js] +[browser_menuButtonFitts.js] +skip-if = os != "win" # The Fitts Law menu button is only supported on Windows (bug 969376) [browser_middleMouse_inherit.js] [browser_minimize.js] [browser_mixedcontent_securityflags.js] diff --git a/browser/base/content/test/general/browser_menuButtonFitts.js b/browser/base/content/test/general/browser_menuButtonFitts.js new file mode 100644 index 00000000000..bb14922ff08 --- /dev/null +++ b/browser/base/content/test/general/browser_menuButtonFitts.js @@ -0,0 +1,32 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +function test () { + waitForExplicitFinish(); + window.maximize(); + + // Find where the nav-bar is vertically. + var navBar = document.getElementById("nav-bar"); + var boundingRect = navBar.getBoundingClientRect(); + var yPixel = boundingRect.top + Math.floor(boundingRect.height / 2); + var xPixel = boundingRect.width - 1; // Use the last pixel of the screen since it is maximized. + + function onPopupHidden() { + PanelUI.panel.removeEventListener("popuphidden", onPopupHidden); + window.restore(); + finish(); + } + function onPopupShown() { + PanelUI.panel.removeEventListener("popupshown", onPopupShown); + ok(true, "Clicking at the far edge of the window opened the menu popup."); + PanelUI.panel.addEventListener("popuphidden", onPopupHidden); + PanelUI.hide(); + } + registerCleanupFunction(function() { + PanelUI.panel.removeEventListener("popupshown", onPopupShown); + PanelUI.panel.removeEventListener("popuphidden", onPopupHidden); + }); + PanelUI.panel.addEventListener("popupshown", onPopupShown); + EventUtils.synthesizeMouseAtPoint(xPixel, yPixel, {}, window); +} diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css index 81df687068f..bd29f547bc1 100644 --- a/browser/themes/linux/browser.css +++ b/browser/themes/linux/browser.css @@ -591,6 +591,10 @@ toolbarbutton[sdk-button="true"][cui-areatype="toolbar"] > .toolbarbutton-icon { width: 32px; } +#nav-bar #PanelUI-menu-button { + -moz-padding-start: 7px; + -moz-padding-end: 5px; +} :-moz-any(#TabsToolbar, #nav-bar) .toolbarbutton-1 > .toolbarbutton-menubutton-button:not([disabled]):hover > .toolbarbutton-icon, :-moz-any(#TabsToolbar, #nav-bar) .toolbarbutton-1:not([buttonover]):not([open]):hover > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon, diff --git a/browser/themes/osx/browser.css b/browser/themes/osx/browser.css index cb9e16ef276..4525f7233da 100644 --- a/browser/themes/osx/browser.css +++ b/browser/themes/osx/browser.css @@ -507,6 +507,13 @@ toolbar .toolbarbutton-1:not([type="menu-button"]), -moz-margin-start: 10px; } +#nav-bar #PanelUI-menu-button { + margin-top: 0; + margin-bottom: 0; + -moz-margin-start: 9px; + -moz-margin-end: 7px; +} + @media not all and (min-resolution: 2dppx) { %include ../shared/toolbarbuttons.inc.css %include ../shared/menupanel.inc.css diff --git a/browser/themes/shared/customizableui/panelUIOverlay.inc.css b/browser/themes/shared/customizableui/panelUIOverlay.inc.css index ce1d8e3ab8c..40ba0b67a20 100644 --- a/browser/themes/shared/customizableui/panelUIOverlay.inc.css +++ b/browser/themes/shared/customizableui/panelUIOverlay.inc.css @@ -26,10 +26,6 @@ background-repeat: no-repeat; } -#PanelUI-menu-button { - margin: 0 7px 0 9px; -} - .panel-subviews { padding: 4px; background-color: hsla(0,0%,100%,.97); diff --git a/browser/themes/windows/browser.css b/browser/themes/windows/browser.css index 2d977cf6abd..27826b24ce2 100644 --- a/browser/themes/windows/browser.css +++ b/browser/themes/windows/browser.css @@ -496,6 +496,11 @@ menuitem.bookmark-item { -moz-box-pack: center; } +#nav-bar #PanelUI-menu-button { + -moz-padding-start: 7px; + -moz-padding-end: 5px; +} + #nav-bar .toolbarbutton-1[type=menu]:not(#back-button):not(#forward-button):not(#feed-button):not(#social-provider-button):not(#PanelUI-menu-button) { padding-left: 5px; padding-right: 5px; From 815070eac6ce1ec2fad5aae296a1a190f2211375 Mon Sep 17 00:00:00 2001 From: Rodrigo Silveira Date: Wed, 12 Feb 2014 11:36:49 -0800 Subject: [PATCH 03/28] Bug 971124 - workaround for backgound-attachment: fixed jitter r=sfoster --HG-- extra : rebase_source : 3c091dfc74ce08b2baff1adeeec720dafd32315e --- browser/metro/theme/platform.css | 6 ------ browser/metro/theme/start.css | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/browser/metro/theme/platform.css b/browser/metro/theme/platform.css index d7c2dbcb0fa..5b8eeef95c7 100644 --- a/browser/metro/theme/platform.css +++ b/browser/metro/theme/platform.css @@ -640,12 +640,6 @@ tabmodalprompt:not([promptType="promptUserAndPass"]) .infoContainer { .meta { background-color: @panel_light_color@; - /* bug 969354 - background-image: url("chrome://browser/skin/images/firefox-watermark.png"); - background-repeat: no-repeat; - background-position: center center; - background-attachment: fixed; - */ } /* needs to observe the viewstate */ diff --git a/browser/metro/theme/start.css b/browser/metro/theme/start.css index 8dd37637376..185324cbe7e 100644 --- a/browser/metro/theme/start.css +++ b/browser/metro/theme/start.css @@ -38,3 +38,19 @@ #start-container[viewstate="snapped"] .meta-section:not([expanded]) > richgrid { visibility: collapse; } + +/* Watermark */ +#startui-body::after { + content: ''; + width: 256px; + height: 256px; + position: fixed; + left: 50%; + top: 50%; + margin-top: -128px; + margin-left: -128px; + z-index: -1; + background-image: url("chrome://browser/skin/images/firefox-watermark.png"); + background-repeat: no-repeat; + background-position: center center; +} From 22954075cb59ff38fd5be18b92c73e0150748fc9 Mon Sep 17 00:00:00 2001 From: Rodrigo Silveira Date: Wed, 12 Feb 2014 11:37:21 -0800 Subject: [PATCH 04/28] Bug 969356 - When mouse clicking on a top site tile, the watermark shifts r=jimm --HG-- extra : rebase_source : dac4ce7d977f2c933a1a91d0c9c047f47559fdd5 --- browser/metro/theme/browser.css | 4 ---- browser/metro/theme/start.css | 1 + 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/browser/metro/theme/browser.css b/browser/metro/theme/browser.css index 49b9fc43d29..8569fe2f58d 100644 --- a/browser/metro/theme/browser.css +++ b/browser/metro/theme/browser.css @@ -245,10 +245,6 @@ documenttab[selected] .documenttab-selection:-moz-locale-dir(rtl) { /* Start UI ----------------------------------------------------------------- */ -#content-viewport[startpage] .active-tab-notificationbox { - padding-bottom: @toolbar_height@; -} - #urlbar-autocomplete[viewstate="snapped"], #urlbar-autocomplete[viewstate="portrait"]{ -moz-box-orient: vertical; diff --git a/browser/metro/theme/start.css b/browser/metro/theme/start.css index 185324cbe7e..b5ace24ce1b 100644 --- a/browser/metro/theme/start.css +++ b/browser/metro/theme/start.css @@ -22,6 +22,7 @@ #startui-body { height: 100%; margin: 0; + padding-bottom: @toolbar_height@; } #start-container { From 61503c762c4a3e3787510d8f9ba822c2a46e3602 Mon Sep 17 00:00:00 2001 From: Richard Newman Date: Wed, 12 Feb 2014 11:50:35 -0800 Subject: [PATCH 05/28] Bug 970604 - Tab loads hit the DB twice when once will do. r=bnicholson --- mobile/android/base/Tab.java | 7 ++-- mobile/android/base/db/BrowserContract.java | 11 ++++++ mobile/android/base/db/BrowserDB.java | 17 +++++++- mobile/android/base/db/BrowserProvider.java | 43 +++++++++++++++++++++ mobile/android/base/db/LocalBrowserDB.java | 32 ++++++++++++++- 5 files changed, 104 insertions(+), 6 deletions(-) diff --git a/mobile/android/base/Tab.java b/mobile/android/base/Tab.java index 0fb1ab2fa83..f189550fad9 100644 --- a/mobile/android/base/Tab.java +++ b/mobile/android/base/Tab.java @@ -6,6 +6,7 @@ package org.mozilla.gecko; import org.mozilla.gecko.SiteIdentity.SecurityMode; +import org.mozilla.gecko.db.BrowserContract.Bookmarks; import org.mozilla.gecko.db.BrowserDB; import org.mozilla.gecko.gfx.Layer; import org.mozilla.gecko.util.ThreadUtils; @@ -418,9 +419,9 @@ public class Tab { return; } - mBookmark = BrowserDB.isBookmark(getContentResolver(), url); - mReadingListItem = BrowserDB.isReadingListItem(getContentResolver(), url); - + final int flags = BrowserDB.getItemFlags(getContentResolver(), url); + mBookmark = (flags & Bookmarks.FLAG_BOOKMARK) > 0; + mReadingListItem = (flags & Bookmarks.FLAG_READING) > 0; Tabs.getInstance().notifyListeners(Tab.this, Tabs.TabEvents.MENU_UPDATED); } }); diff --git a/mobile/android/base/db/BrowserContract.java b/mobile/android/base/db/BrowserContract.java index 4718a15955b..1a743cfae06 100644 --- a/mobile/android/base/db/BrowserContract.java +++ b/mobile/android/base/db/BrowserContract.java @@ -143,6 +143,17 @@ public class BrowserContract { public static final int TYPE_LIVEMARK = 3; public static final int TYPE_QUERY = 4; + /* + * These values are returned by getItemFlags. They're not really + * exclusive to bookmarks, but there's no better place to put them. + */ + public static final int FLAG_SUCCESS = 1 << 1; // The query succeeded. + public static final int FLAG_BOOKMARK = 1 << 2; + public static final int FLAG_PINNED = 1 << 3; + public static final int FLAG_READING = 1 << 4; + + public static final Uri FLAGS_URI = Uri.withAppendedPath(AUTHORITY_URI, "flags"); + public static final Uri CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, "bookmarks"); public static final Uri PARENTS_CONTENT_URI = Uri.withAppendedPath(CONTENT_URI, "parents"); // Hacky API for bulk-updating positions. Bug 728783. diff --git a/mobile/android/base/db/BrowserDB.java b/mobile/android/base/db/BrowserDB.java index 0dee422bca5..3fe7aa6fa8a 100644 --- a/mobile/android/base/db/BrowserDB.java +++ b/mobile/android/base/db/BrowserDB.java @@ -41,8 +41,8 @@ public class BrowserDB { @RobocopTarget public Cursor filter(ContentResolver cr, CharSequence constraint, int limit); - // This should onlyl return frecent sites, BrowserDB.getTopSites will do the - // work to combine that list with the pinned sites list + // This should only return frecent sites. BrowserDB.getTopSites will do the + // work to combine that list with the pinned sites list. public Cursor getTopSites(ContentResolver cr, int limit); public void updateVisitedHistory(ContentResolver cr, String uri); @@ -78,6 +78,12 @@ public class BrowserDB { public boolean isReadingListItem(ContentResolver cr, String uri); + /** + * Return a combination of fields about the provided URI + * in a single hit on the DB. + */ + public int getItemFlags(ContentResolver cr, String uri); + public String getUrlForKeyword(ContentResolver cr, String keyword); @RobocopTarget @@ -232,6 +238,13 @@ public class BrowserDB { return (sAreContentProvidersEnabled && sDb.isReadingListItem(cr, uri)); } + public static int getItemFlags(ContentResolver cr, String uri) { + if (!sAreContentProvidersEnabled) { + return 0; + } + return sDb.getItemFlags(cr, uri); + } + public static void addBookmark(ContentResolver cr, String title, String uri) { sDb.addBookmark(cr, title, uri); } diff --git a/mobile/android/base/db/BrowserProvider.java b/mobile/android/base/db/BrowserProvider.java index 1f8330faef0..471e6cd8911 100644 --- a/mobile/android/base/db/BrowserProvider.java +++ b/mobile/android/base/db/BrowserProvider.java @@ -109,6 +109,8 @@ public class BrowserProvider extends ContentProvider { static final String VIEW_HISTORY_WITH_FAVICONS = "history_with_favicons"; static final String VIEW_COMBINED_WITH_FAVICONS = "combined_with_favicons"; + static final String VIEW_FLAGS = "flags"; + // Bookmark matches static final int BOOKMARKS = 100; static final int BOOKMARKS_ID = 101; @@ -141,6 +143,8 @@ public class BrowserProvider extends ContentProvider { static final int THUMBNAILS = 800; static final int THUMBNAIL_ID = 801; + static final int FLAGS = 900; + static final String DEFAULT_BOOKMARKS_SORT_ORDER = Bookmarks.TYPE + " ASC, " + Bookmarks.POSITION + " ASC, " + Bookmarks._ID + " ASC"; @@ -305,6 +309,8 @@ public class BrowserProvider extends ContentProvider { // Search Suggest URI_MATCHER.addURI(BrowserContract.AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", SEARCH_SUGGEST); + URI_MATCHER.addURI(BrowserContract.AUTHORITY, "flags", FLAGS); + map = new HashMap(); map.put(SearchManager.SUGGEST_COLUMN_TEXT_1, Combined.TITLE + " AS " + SearchManager.SUGGEST_COLUMN_TEXT_1); @@ -2154,6 +2160,9 @@ public class BrowserProvider extends ContentProvider { case SEARCH_SUGGEST: trace("URI is SEARCH_SUGGEST: " + uri); return SearchManager.SUGGEST_MIME_TYPE; + case FLAGS: + trace("URI is FLAGS."); + return Bookmarks.CONTENT_ITEM_TYPE; } debug("URI has unrecognized type: " + uri); @@ -2492,6 +2501,40 @@ public class BrowserProvider extends ContentProvider { SQLiteDatabase db = getReadableDatabase(uri); final int match = URI_MATCHER.match(uri); + // The first selectionArgs value is the URI for which to query. + if (match == FLAGS) { + // We don't need the QB below for this. + // + // There are three possible kinds of bookmarks: + // * Regular bookmarks + // * Bookmarks whose parent is FIXED_READING_LIST_ID (reading list items) + // * Bookmarks whose parent is FIXED_PINNED_LIST_ID (pinned items). + // + // Although SQLite doesn't have an aggregate operator for bitwise-OR, we're + // using disjoint flags, so we can simply use SUM and DISTINCT to get the + // flags we need. + // We turn parents into flags according to the three kinds, above. + // + // When this query is extended to support queries across multiple tables, simply + // extend it to look like + // + // SELECT COALESCE((SELECT ...), 0) | COALESCE(...) | ... + final String query = "SELECT COALESCE(SUM(flag), 0) AS flags " + + "FROM ( SELECT DISTINCT CASE" + + " WHEN " + Bookmarks.PARENT + " = " + Bookmarks.FIXED_READING_LIST_ID + + " THEN " + Bookmarks.FLAG_READING + + + " WHEN " + Bookmarks.PARENT + " = " + Bookmarks.FIXED_PINNED_LIST_ID + + " THEN " + Bookmarks.FLAG_PINNED + + + " ELSE " + Bookmarks.FLAG_BOOKMARK + + " END flag " + + "FROM " + TABLE_BOOKMARKS + " WHERE " + Bookmarks.URL + " = ? " + + ")"; + + return db.rawQuery(query, selectionArgs); + } + SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); String limit = uri.getQueryParameter(BrowserContract.PARAM_LIMIT); String groupBy = null; diff --git a/mobile/android/base/db/LocalBrowserDB.java b/mobile/android/base/db/LocalBrowserDB.java index a310b12ce8f..aba15785a57 100644 --- a/mobile/android/base/db/LocalBrowserDB.java +++ b/mobile/android/base/db/LocalBrowserDB.java @@ -59,6 +59,7 @@ public class LocalBrowserDB implements BrowserDB.BrowserDBIface { private final Uri mBookmarksUriWithProfile; private final Uri mParentsUriWithProfile; + private final Uri mFlagsUriWithProfile; private final Uri mHistoryUriWithProfile; private final Uri mHistoryExpireUriWithProfile; private final Uri mCombinedUriWithProfile; @@ -82,6 +83,7 @@ public class LocalBrowserDB implements BrowserDB.BrowserDBIface { mBookmarksUriWithProfile = appendProfile(Bookmarks.CONTENT_URI); mParentsUriWithProfile = appendProfile(Bookmarks.PARENTS_CONTENT_URI); + mFlagsUriWithProfile = appendProfile(Bookmarks.FLAGS_URI); mHistoryUriWithProfile = appendProfile(History.CONTENT_URI); mHistoryExpireUriWithProfile = appendProfile(History.CONTENT_OLD_URI); mCombinedUriWithProfile = appendProfile(Combined.CONTENT_URI); @@ -471,7 +473,7 @@ public class LocalBrowserDB implements BrowserDB.BrowserDBIface { @Override public boolean isBookmark(ContentResolver cr, String uri) { - // This method is about normal bookmarks, not the Reading List + // This method is about normal bookmarks, not the Reading List. Cursor c = null; try { c = cr.query(bookmarksUriWithLimit(1), @@ -517,6 +519,34 @@ public class LocalBrowserDB implements BrowserDB.BrowserDBIface { return false; } + /** + * For a given URI, we want to return a number of things: + * + * * Is this URI the URI of a bookmark? + * * ... a reading list item? + * + * This will expand as necessary to eliminate multiple consecutive queries. + */ + @Override + public int getItemFlags(ContentResolver cr, String uri) { + final Cursor c = cr.query(mFlagsUriWithProfile, + null, + null, + new String[] { uri }, + null); + if (c == null) { + return 0; + } + + try { + // This should never fail: it returns a single `flags` row. + c.moveToFirst(); + return Bookmarks.FLAG_SUCCESS | c.getInt(0); + } finally { + c.close(); + } + } + @Override public String getUrlForKeyword(ContentResolver cr, String keyword) { Cursor c = null; From 33c4062a21cf85a3dddebfc105bf383f69e44001 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Tue, 28 Jan 2014 17:33:38 -0800 Subject: [PATCH 06/28] Bug 875562 - Part 7: Implement limits for stored crash data; r=Yoric This patch institutes limits for how much crash data can be stored in terms of maximum number of crash events per day. If more events than the limit are encountered, we record that a high water mark has been encountered and we silently discard the payload of future events. We chose to not increment the version of the store payload because no clients are actively saving this data yet, so it doesn't make sense to incur a version bump. --HG-- extra : rebase_source : 3d5d92668b38e8b9c3c45e1a61a3a172b576e0a5 extra : amend_source : 71fffa0724450c5fe13563d2539813e9a831b3de --- toolkit/components/crashes/CrashManager.jsm | 148 ++++++++++++++++-- .../components/crashes/docs/crash-events.rst | 11 +- .../tests/xpcshell/test_crash_manager.js | 21 +++ .../tests/xpcshell/test_crash_store.js | 48 ++++++ 4 files changed, 208 insertions(+), 20 deletions(-) diff --git a/toolkit/components/crashes/CrashManager.jsm b/toolkit/components/crashes/CrashManager.jsm index c014f7c6dc1..4669818dd80 100644 --- a/toolkit/components/crashes/CrashManager.jsm +++ b/toolkit/components/crashes/CrashManager.jsm @@ -30,6 +30,13 @@ const AGGREGATE_STARTUP_DELAY_MS = 57000; const MILLISECONDS_IN_DAY = 24 * 60 * 60 * 1000; +// Converts Date to days since UNIX epoch. +// This was copied from /services/metrics.storage.jsm. The implementation +// does not account for leap seconds. +function dateToDays(date) { + return Math.floor(date.getTime() / MILLISECONDS_IN_DAY); +} + /** * A gateway to crash-related data. @@ -520,6 +527,17 @@ let gCrashManager; * When metadata is updated, the caller must explicitly persist the changes * to disk. This prevents excessive I/O during updates. * + * The store has a mechanism for ensuring it doesn't grow too large. A ceiling + * is placed on the number of daily events that can occur for events that can + * occur with relatively high frequency, notably plugin crashes and hangs + * (plugins can enter cycles where they repeatedly crash). If we've reached + * the high water mark and new data arrives, it's silently dropped. + * However, the count of actual events is always preserved. This allows + * us to report on the severity of problems beyond the storage threshold. + * + * Main process crashes are excluded from limits because they are both + * important and should be rare. + * * @param storeDir (string) * Directory the store should be located in. * @param telemetrySizeKey (string) @@ -534,25 +552,41 @@ function CrashStore(storeDir, telemetrySizeKey) { // Holds the read data from disk. this._data = null; + + // Maps days since UNIX epoch to a Map of event types to counts. + // This data structure is populated when the JSON file is loaded + // and is also updated when new events are added. + this._countsByDay = new Map(); } CrashStore.prototype = Object.freeze({ + // A crash that occurred in the main process. TYPE_MAIN_CRASH: "main-crash", + + // A crash in a plugin process. TYPE_PLUGIN_CRASH: "plugin-crash", + + // A hang in a plugin process. TYPE_PLUGIN_HANG: "plugin-hang", + // Maximum number of events to store per day. This establishes a + // ceiling on the per-type/per-day records that will be stored. + HIGH_WATER_DAILY_THRESHOLD: 100, + /** * Load data from disk. * - * @return Promise + * @return Promise */ load: function () { return Task.spawn(function* () { + // Loading replaces data. So reset data structures. this._data = { v: 1, crashes: new Map(), corruptDate: null, }; + this._countsByDay = new Map(); try { let decoder = new TextDecoder(); @@ -563,10 +597,42 @@ CrashStore.prototype = Object.freeze({ this._data.corruptDate = new Date(data.corruptDate); } + // actualCounts is used to validate that the derived counts by + // days stored in the payload matches up to actual data. + let actualCounts = new Map(); + for (let id in data.crashes) { let crash = data.crashes[id]; let denormalized = this._denormalize(crash); + this._data.crashes.set(id, denormalized); + + let key = dateToDays(denormalized.crashDate) + "-" + denormalized.type; + actualCounts.set(key, (actualCounts.get(key) || 0) + 1); + } + + // The validation in this loop is arguably not necessary. We perform + // it as a defense against unknown bugs. + for (let dayKey in data.countsByDay) { + let day = parseInt(dayKey, 10); + for (let type in data.countsByDay[day]) { + this._ensureCountsForDay(day); + + let count = data.countsByDay[day][type]; + let key = day + "-" + type; + + // If the payload says we have data for a given day but we + // don't, the payload is wrong. Ignore it. + if (!actualCounts.has(key)) { + continue; + } + + // If we encountered more data in the payload than what the + // data structure says, use the proper value. + count = Math.max(count, actualCounts.get(key)); + + this._countsByDay.get(day).set(type, count); + } } } catch (ex if ex instanceof OS.File.Error && ex.becauseNoSuchFile) { // Missing files (first use) are allowed. @@ -594,8 +660,22 @@ CrashStore.prototype = Object.freeze({ } let normalized = { + // The version should be incremented whenever the format + // changes. v: 1, + // Maps crash IDs to objects defining the crash. crashes: {}, + // Maps days since UNIX epoch to objects mapping event types to + // counts. This is a mirror of this._countsByDay. e.g. + // { + // 15000: { + // "main-crash": 2, + // "plugin-crash": 1 + // } + // } + countsByDay: {}, + + // When the store was last corrupted. corruptDate: null, }; @@ -608,6 +688,13 @@ CrashStore.prototype = Object.freeze({ normalized.crashes[id] = c; } + for (let [day, m] of this._countsByDay) { + normalized.countsByDay[day] = {}; + for (let [type, count] of m) { + normalized.countsByDay[day][type] = count; + } + } + let encoder = new TextEncoder(); let data = encoder.encode(JSON.stringify(normalized)); let size = yield OS.File.writeAtomic(this._storePath, data, { @@ -729,16 +816,51 @@ CrashStore.prototype = Object.freeze({ return null; }, - _ensureCrashRecord: function (id) { + _ensureCountsForDay: function (day) { + if (!this._countsByDay.has(day)) { + this._countsByDay.set(day, new Map()); + } + }, + + /** + * Ensure the crash record is present in storage. + * + * Returns the crash record if we're allowed to store it or null + * if we've hit the high water mark. + * + * @param id + * (string) The crash ID. + * @param type + * (string) One of the this.TYPE_* constants describing the crash type. + * @param date + * (Date) When this crash occurred. + * + * @return null | object crash record + */ + _ensureCrashRecord: function (id, type, date) { + let day = dateToDays(date); + this._ensureCountsForDay(day); + + let count = (this._countsByDay.get(day).get(type) || 0) + 1; + this._countsByDay.get(day).set(type, count); + + if (count > this.HIGH_WATER_DAILY_THRESHOLD && type != this.TYPE_MAIN_CRASH) { + return null; + } + if (!this._data.crashes.has(id)) { this._data.crashes.set(id, { id: id, - type: null, - crashDate: null, + type: type, + crashDate: date, }); } - return this._data.crashes.get(id); + let crash = this._data.crashes.get(id); + crash.type = type; + crash.date = date; + + return crash; }, /** @@ -748,9 +870,7 @@ CrashStore.prototype = Object.freeze({ * @param date (Date) When the crash occurred. */ addMainProcessCrash: function (id, date) { - let r = this._ensureCrashRecord(id); - r.type = this.TYPE_MAIN_CRASH; - r.crashDate = date; + this._ensureCrashRecord(id, this.TYPE_MAIN_CRASH, date); }, /** @@ -760,9 +880,7 @@ CrashStore.prototype = Object.freeze({ * @param date (Date) When the crash occurred. */ addPluginCrash: function (id, date) { - let r = this._ensureCrashRecord(id); - r.type = this.TYPE_PLUGIN_CRASH; - r.crashDate = date; + this._ensureCrashRecord(id, this.TYPE_PLUGIN_CRASH, date); }, /** @@ -772,9 +890,7 @@ CrashStore.prototype = Object.freeze({ * @param date (Date) When the hang was reported. */ addPluginHang: function (id, date) { - let r = this._ensureCrashRecord(id); - r.type = this.TYPE_PLUGIN_HANG; - r.crashDate = date; + this._ensureCrashRecord(id, this.TYPE_PLUGIN_HANG, date); }, get mainProcessCrashes() { @@ -847,6 +963,10 @@ CrashRecord.prototype = Object.freeze({ return this._o.crashDate; }, + get oldestDate() { + return this._o.crashDate; + }, + get type() { return this._o.type; }, diff --git a/toolkit/components/crashes/docs/crash-events.rst b/toolkit/components/crashes/docs/crash-events.rst index 5248399dd85..bc19b0cf5c0 100644 --- a/toolkit/components/crashes/docs/crash-events.rst +++ b/toolkit/components/crashes/docs/crash-events.rst @@ -155,9 +155,8 @@ crash data grows. As new data is accumulated, we need to read and write an entire file to make small updates. LZ4 compression helps reduce I/O. But, there is a potential for unbounded file growth. We establish a limit for the max age of records. Anything older than that limit is -pruned. Future patches will also limit the maximum number of records. This -will establish a hard limit on the size of the file, at least in terms of -crashes. - -Care must be taken when new crash data is recorded, as this will increase -the size of the file and make I/O a larger concern. +pruned. We also establish a daily limit on the number of crashes we will +store. All crashes beyond the first N in a day have no payload and are +only recorded by the presence of a count. This count ensures we can +distinguish between ``N`` and ``100 * N``, which are very different +values! diff --git a/toolkit/components/crashes/tests/xpcshell/test_crash_manager.js b/toolkit/components/crashes/tests/xpcshell/test_crash_manager.js index 3cda6678d12..2c0ca5d4d6b 100644 --- a/toolkit/components/crashes/tests/xpcshell/test_crash_manager.js +++ b/toolkit/components/crashes/tests/xpcshell/test_crash_manager.js @@ -258,3 +258,24 @@ add_task(function* test_plugin_hang_event_file() { count = yield m.aggregateEventsFiles(); Assert.equal(count, 0); }); + +// Excessive amounts of files should be processed properly. +add_task(function* test_high_water_mark() { + let m = yield getManager(); + + let store = yield m._getStore(); + + for (let i = 0; i < store.HIGH_WATER_DAILY_THRESHOLD + 1; i++) { + yield m.createEventsFile("m" + i, "crash.main.1", DUMMY_DATE, "m" + i); + yield m.createEventsFile("pc" + i, "crash.plugin.1", DUMMY_DATE, "pc" + i); + yield m.createEventsFile("ph" + i, "hang.plugin.1", DUMMY_DATE, "ph" + i); + } + + let count = yield m.aggregateEventsFiles(); + Assert.equal(count, 3 * bsp.CrashStore.prototype.HIGH_WATER_DAILY_THRESHOLD + 3); + + // Need to fetch again in case the first one was garbage collected. + store = yield m._getStore(); + // +1 is for preserved main process crash. + Assert.equal(store.crashesCount, 3 * store.HIGH_WATER_DAILY_THRESHOLD + 1); +}); diff --git a/toolkit/components/crashes/tests/xpcshell/test_crash_store.js b/toolkit/components/crashes/tests/xpcshell/test_crash_store.js index b62b0ad7aaa..f8d8672807c 100644 --- a/toolkit/components/crashes/tests/xpcshell/test_crash_store.js +++ b/toolkit/components/crashes/tests/xpcshell/test_crash_store.js @@ -181,3 +181,51 @@ add_task(function* test_add_mixed_types() { Assert.equal(s.pluginCrashes.length, 1); Assert.equal(s.pluginHangs.length, 1); }); + +// Crashes added beyond the high water mark behave properly. +add_task(function* test_high_water() { + let s = yield getStore(); + + let d1 = new Date(2014, 0, 1, 0, 0, 0); + let d2 = new Date(2014, 0, 2, 0, 0, 0); + + for (let i = 0; i < s.HIGH_WATER_DAILY_THRESHOLD + 1; i++) { + s.addMainProcessCrash("m1" + i, d1); + s.addMainProcessCrash("m2" + i, d2); + s.addPluginCrash("pc1" + i, d1); + s.addPluginCrash("pc2" + i, d2); + s.addPluginHang("ph1" + i, d1); + s.addPluginHang("ph2" + i, d2); + } + + // We preserve main process crashes. Plugin crashes and hangs beyond should + // be discarded. + Assert.equal(s.crashesCount, 6 * s.HIGH_WATER_DAILY_THRESHOLD + 2); + Assert.equal(s.mainProcessCrashes.length, 2 * s.HIGH_WATER_DAILY_THRESHOLD + 2); + Assert.equal(s.pluginCrashes.length, 2 * s.HIGH_WATER_DAILY_THRESHOLD); + Assert.equal(s.pluginHangs.length, 2 * s.HIGH_WATER_DAILY_THRESHOLD); + + // But raw counts should be preserved. + let day1 = bsp.dateToDays(d1); + let day2 = bsp.dateToDays(d2); + Assert.ok(s._countsByDay.has(day1)); + Assert.ok(s._countsByDay.has(day2)); + Assert.equal(s._countsByDay.get(day1).get(s.TYPE_MAIN_CRASH), + s.HIGH_WATER_DAILY_THRESHOLD + 1); + Assert.equal(s._countsByDay.get(day1).get(s.TYPE_PLUGIN_CRASH), + s.HIGH_WATER_DAILY_THRESHOLD + 1); + Assert.equal(s._countsByDay.get(day1).get(s.TYPE_PLUGIN_HANG), + s.HIGH_WATER_DAILY_THRESHOLD + 1); + + yield s.save(); + yield s.load(); + + Assert.ok(s._countsByDay.has(day1)); + Assert.ok(s._countsByDay.has(day2)); + Assert.equal(s._countsByDay.get(day1).get(s.TYPE_MAIN_CRASH), + s.HIGH_WATER_DAILY_THRESHOLD + 1); + Assert.equal(s._countsByDay.get(day1).get(s.TYPE_PLUGIN_CRASH), + s.HIGH_WATER_DAILY_THRESHOLD + 1); + Assert.equal(s._countsByDay.get(day1).get(s.TYPE_PLUGIN_HANG), + s.HIGH_WATER_DAILY_THRESHOLD + 1); +}); From 37699525ffea05ac94983e17b817e036f219951e Mon Sep 17 00:00:00 2001 From: Jared Wein Date: Wed, 12 Feb 2014 15:33:18 -0500 Subject: [PATCH 07/28] Bug 940844 - Australis: sync busy icon (sync pending) in menu is missing on Linux. r=Gijs --HG-- rename : browser/themes/linux/sync-24-throbber.png => browser/themes/linux/syncProgress-toolbar.png --- browser/themes/linux/browser.css | 10 +++++++--- browser/themes/linux/jar.mn | 4 ++-- browser/themes/linux/sync-16-throbber.png | Bin 10365 -> 0 bytes browser/themes/linux/sync-24-throbber.png | Bin 15774 -> 0 bytes browser/themes/linux/syncProgress-menuPanel.png | Bin 0 -> 1090 bytes browser/themes/linux/syncProgress-toolbar.png | Bin 0 -> 623 bytes 6 files changed, 9 insertions(+), 5 deletions(-) delete mode 100644 browser/themes/linux/sync-16-throbber.png delete mode 100644 browser/themes/linux/sync-24-throbber.png create mode 100644 browser/themes/linux/syncProgress-menuPanel.png create mode 100644 browser/themes/linux/syncProgress-toolbar.png diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css index bd29f547bc1..ccc98ff06c5 100644 --- a/browser/themes/linux/browser.css +++ b/browser/themes/linux/browser.css @@ -701,9 +701,13 @@ toolbarbutton[sdk-button="true"][cui-areatype="toolbar"] > .toolbarbutton-icon { #sync-button { -moz-image-region: rect(0px 144px 24px 120px); } -#sync-button[status="active"] { - list-style-image: url("chrome://browser/skin/sync-24-throbber.png"); - -moz-image-region: rect(0px 24px 24px 0px); +#sync-button[cui-areatype="toolbar"][status="active"] { + list-style-image: url("chrome://browser/skin/syncProgress-toolbar.png"); + -moz-image-region: rect(0px 18px 18px 0px); +} +#sync-button[cui-areatype="menu-panel"][status="active"] { + list-style-image: url("chrome://browser/skin/syncProgress-menuPanel.png"); + -moz-image-region: rect(0px 32px 32px 0px); } #feed-button { diff --git a/browser/themes/linux/jar.mn b/browser/themes/linux/jar.mn index ba563ba0615..94dbb1de8e6 100644 --- a/browser/themes/linux/jar.mn +++ b/browser/themes/linux/jar.mn @@ -269,15 +269,15 @@ browser.jar: skin/classic/browser/devtools/app-manager/noise.png (../shared/devtools/app-manager/images/noise.png) skin/classic/browser/devtools/app-manager/default-app-icon.png (../shared/devtools/app-manager/images/default-app-icon.png) #ifdef MOZ_SERVICES_SYNC - skin/classic/browser/sync-16-throbber.png skin/classic/browser/sync-16.png - skin/classic/browser/sync-24-throbber.png skin/classic/browser/sync-32.png skin/classic/browser/sync-bg.png skin/classic/browser/sync-128.png skin/classic/browser/sync-desktopIcon.png skin/classic/browser/sync-mobileIcon.png skin/classic/browser/sync-notification-24.png + skin/classic/browser/syncProgress-menuPanel.png + skin/classic/browser/syncProgress-toolbar.png skin/classic/browser/syncSetup.css skin/classic/browser/syncCommon.css skin/classic/browser/syncQuota.css diff --git a/browser/themes/linux/sync-16-throbber.png b/browser/themes/linux/sync-16-throbber.png deleted file mode 100644 index d6f801aab3441847486fd74a9355f8f911b9417a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10365 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 H8wLMAkz26N diff --git a/browser/themes/linux/sync-24-throbber.png b/browser/themes/linux/sync-24-throbber.png deleted file mode 100644 index 5587174de0ff2dac2731367105477de704d61c35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15774 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 diff --git a/browser/themes/linux/syncProgress-menuPanel.png b/browser/themes/linux/syncProgress-menuPanel.png new file mode 100644 index 0000000000000000000000000000000000000000..00e3fd61be3a414755a91af51c9f7c6e38d979d4 GIT binary patch literal 1090 zcmV-I1ikx-P)s-KVgUH$r_`PlkW3!eGd&8j= zwrrelEe*Hcg5a@#AgB`Z0vjNCnUd6zf*Ua=s3W>a=M4y8f#+~0I&f`o?nrV>4SeGr z2sMtGIE9s8St~q4zT~HGk&w?7S&vYu#&MON`@HZ1_Xc zht+WJJ$$!FRC^$5wE}|zGU?ukasN){8gFM}wm25d8Ka2{CBU9=N%_6LZkZ4@P~va9 z2`g0siDG}t54rl0*jNQH8n5JLUbl=K#1DYc-2)%4lL%#Mc%7;t-sz%tz3i@Lw2MSf zruJ{K*r$%bG6r*D>VGfvZd%0R5hZypE0bciSMeCUl|nA%Y};3bHgLkn$qugSq@<5a8O8?5Z%SIGYYLW7B!yEEtzYf= z&>Eij|B2>QBzEFyaG(5b`%})t+w!gChPo1)ECS~-2P~Eek}Orlhj^PRqwfuv&9Yi? zZgP;P)Uqe1H(+T8N5vy>;ChMqw~^`lU{_3^{7FJbq;{qIqr8r9J2(6`EZ`0)==X9eBJ z`ur9HIF8Sjdkok21?bkV;Q_8`9w@vWA0O&JCTwOp-{LzwIrJvFSfd$S&0oNR`cHUJ z6^6N^&yX}Cz+71hi#~+;N*3l-bKt1G4Nm<`ABR`-#UPCT0IAWgSv`(Pz5oCK07*qo IM6N<$f|P)<0o$N!XZ=WiS9IpM=IMG9w{DWcqo4vh|dAphdf^U$r5Fd>nk5Nr&r!C3=d@P zG29pXkAfd6o`k8BePYt0@YJ*kr$K>lLRlFeC~sl7C;A^9OFTB{2B}egYE}soV|u8$ z5UW7~k94On+yyGaf~{Y;#k;-qm1Vdq{t;PR^@(LAiXrYVeB~K#i+l&-|8RUq_8h}q zg+m~=>kA(p-hB^Xu1Q^IxGMA?jIT?dBWTcdpg}P8*Cg&C86>-p z;j+MgDE{H}*hd^$pTlD>eHa@krwUZ_6R!T6EW&I2H}zW>F7p3}<7+BQQCx6EZimw& zUv-;@9?T3^6m}r1<+`bd2yBOkKJp9~guXCb07}B}73Jmj551+p3N8x1X1FAMjN!8E zUKBMK`2W~G^wLDJl>54VGs8K)|48_|?E^0>i+gT?XyOQbS#>`4K)k55nBff1e<1!N zd&9gCEOuVv1XK(apO-r1@i34JXN0g{(QnbbX`c#WGhNngV>r$G9|NBezU}(JkC&*@ z!2LlWtLRmua)xs Date: Wed, 12 Feb 2014 15:41:32 -0500 Subject: [PATCH 08/28] Backed out changeset f8b656efb478 (bug 940844) --HG-- rename : browser/themes/linux/syncProgress-toolbar.png => browser/themes/linux/sync-24-throbber.png --- browser/themes/linux/browser.css | 10 +++------- browser/themes/linux/jar.mn | 4 ++-- browser/themes/linux/sync-16-throbber.png | Bin 0 -> 10365 bytes browser/themes/linux/sync-24-throbber.png | Bin 0 -> 15774 bytes browser/themes/linux/syncProgress-menuPanel.png | Bin 1090 -> 0 bytes browser/themes/linux/syncProgress-toolbar.png | Bin 623 -> 0 bytes 6 files changed, 5 insertions(+), 9 deletions(-) create mode 100644 browser/themes/linux/sync-16-throbber.png create mode 100644 browser/themes/linux/sync-24-throbber.png delete mode 100644 browser/themes/linux/syncProgress-menuPanel.png delete mode 100644 browser/themes/linux/syncProgress-toolbar.png diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css index ccc98ff06c5..bd29f547bc1 100644 --- a/browser/themes/linux/browser.css +++ b/browser/themes/linux/browser.css @@ -701,13 +701,9 @@ toolbarbutton[sdk-button="true"][cui-areatype="toolbar"] > .toolbarbutton-icon { #sync-button { -moz-image-region: rect(0px 144px 24px 120px); } -#sync-button[cui-areatype="toolbar"][status="active"] { - list-style-image: url("chrome://browser/skin/syncProgress-toolbar.png"); - -moz-image-region: rect(0px 18px 18px 0px); -} -#sync-button[cui-areatype="menu-panel"][status="active"] { - list-style-image: url("chrome://browser/skin/syncProgress-menuPanel.png"); - -moz-image-region: rect(0px 32px 32px 0px); +#sync-button[status="active"] { + list-style-image: url("chrome://browser/skin/sync-24-throbber.png"); + -moz-image-region: rect(0px 24px 24px 0px); } #feed-button { diff --git a/browser/themes/linux/jar.mn b/browser/themes/linux/jar.mn index 94dbb1de8e6..ba563ba0615 100644 --- a/browser/themes/linux/jar.mn +++ b/browser/themes/linux/jar.mn @@ -269,15 +269,15 @@ browser.jar: skin/classic/browser/devtools/app-manager/noise.png (../shared/devtools/app-manager/images/noise.png) skin/classic/browser/devtools/app-manager/default-app-icon.png (../shared/devtools/app-manager/images/default-app-icon.png) #ifdef MOZ_SERVICES_SYNC + skin/classic/browser/sync-16-throbber.png skin/classic/browser/sync-16.png + skin/classic/browser/sync-24-throbber.png skin/classic/browser/sync-32.png skin/classic/browser/sync-bg.png skin/classic/browser/sync-128.png skin/classic/browser/sync-desktopIcon.png skin/classic/browser/sync-mobileIcon.png skin/classic/browser/sync-notification-24.png - skin/classic/browser/syncProgress-menuPanel.png - skin/classic/browser/syncProgress-toolbar.png skin/classic/browser/syncSetup.css skin/classic/browser/syncCommon.css skin/classic/browser/syncQuota.css diff --git a/browser/themes/linux/sync-16-throbber.png b/browser/themes/linux/sync-16-throbber.png new file mode 100644 index 0000000000000000000000000000000000000000..d6f801aab3441847486fd74a9355f8f911b9417a GIT binary patch literal 10365 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 H8wLMAkz26N literal 0 HcmV?d00001 diff --git a/browser/themes/linux/sync-24-throbber.png b/browser/themes/linux/sync-24-throbber.png new file mode 100644 index 0000000000000000000000000000000000000000..5587174de0ff2dac2731367105477de704d61c35 GIT binary patch literal 15774 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 literal 0 HcmV?d00001 diff --git a/browser/themes/linux/syncProgress-menuPanel.png b/browser/themes/linux/syncProgress-menuPanel.png deleted file mode 100644 index 00e3fd61be3a414755a91af51c9f7c6e38d979d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1090 zcmV-I1ikx-P)s-KVgUH$r_`PlkW3!eGd&8j= zwrrelEe*Hcg5a@#AgB`Z0vjNCnUd6zf*Ua=s3W>a=M4y8f#+~0I&f`o?nrV>4SeGr z2sMtGIE9s8St~q4zT~HGk&w?7S&vYu#&MON`@HZ1_Xc zht+WJJ$$!FRC^$5wE}|zGU?ukasN){8gFM}wm25d8Ka2{CBU9=N%_6LZkZ4@P~va9 z2`g0siDG}t54rl0*jNQH8n5JLUbl=K#1DYc-2)%4lL%#Mc%7;t-sz%tz3i@Lw2MSf zruJ{K*r$%bG6r*D>VGfvZd%0R5hZypE0bciSMeCUl|nA%Y};3bHgLkn$qugSq@<5a8O8?5Z%SIGYYLW7B!yEEtzYf= z&>Eij|B2>QBzEFyaG(5b`%})t+w!gChPo1)ECS~-2P~Eek}Orlhj^PRqwfuv&9Yi? zZgP;P)Uqe1H(+T8N5vy>;ChMqw~^`lU{_3^{7FJbq;{qIqr8r9J2(6`EZ`0)==X9eBJ z`ur9HIF8Sjdkok21?bkV;Q_8`9w@vWA0O&JCTwOp-{LzwIrJvFSfd$S&0oNR`cHUJ z6^6N^&yX}Cz+71hi#~+;N*3l-bKt1G4Nm<`ABR`-#UPCT0IAWgSv`(Pz5oCK07*qo IM6N<$f|P)<0o$N!XZ=WiS9IpM=IMG9w{DWcqo4vh|dAphdf^U$r5Fd>nk5Nr&r!C3=d@P zG29pXkAfd6o`k8BePYt0@YJ*kr$K>lLRlFeC~sl7C;A^9OFTB{2B}egYE}soV|u8$ z5UW7~k94On+yyGaf~{Y;#k;-qm1Vdq{t;PR^@(LAiXrYVeB~K#i+l&-|8RUq_8h}q zg+m~=>kA(p-hB^Xu1Q^IxGMA?jIT?dBWTcdpg}P8*Cg&C86>-p z;j+MgDE{H}*hd^$pTlD>eHa@krwUZ_6R!T6EW&I2H}zW>F7p3}<7+BQQCx6EZimw& zUv-;@9?T3^6m}r1<+`bd2yBOkKJp9~guXCb07}B}73Jmj551+p3N8x1X1FAMjN!8E zUKBMK`2W~G^wLDJl>54VGs8K)|48_|?E^0>i+gT?XyOQbS#>`4K)k55nBff1e<1!N zd&9gCEOuVv1XK(apO-r1@i34JXN0g{(QnbbX`c#WGhNngV>r$G9|NBezU}(JkC&*@ z!2LlWtLRmua)xs Date: Wed, 12 Feb 2014 15:33:18 -0500 Subject: [PATCH 09/28] Bug 969125 - Australis: [Linux] Sync toolbar button disappears during synchronization. r=Gijs DONTBUILD (fixed commit message) --HG-- rename : browser/themes/linux/sync-24-throbber.png => browser/themes/linux/syncProgress-toolbar.png --- browser/themes/linux/browser.css | 10 +++++++--- browser/themes/linux/jar.mn | 4 ++-- browser/themes/linux/sync-16-throbber.png | Bin 10365 -> 0 bytes browser/themes/linux/sync-24-throbber.png | Bin 15774 -> 0 bytes browser/themes/linux/syncProgress-menuPanel.png | Bin 0 -> 1090 bytes browser/themes/linux/syncProgress-toolbar.png | Bin 0 -> 623 bytes 6 files changed, 9 insertions(+), 5 deletions(-) delete mode 100644 browser/themes/linux/sync-16-throbber.png delete mode 100644 browser/themes/linux/sync-24-throbber.png create mode 100644 browser/themes/linux/syncProgress-menuPanel.png create mode 100644 browser/themes/linux/syncProgress-toolbar.png diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css index bd29f547bc1..ccc98ff06c5 100644 --- a/browser/themes/linux/browser.css +++ b/browser/themes/linux/browser.css @@ -701,9 +701,13 @@ toolbarbutton[sdk-button="true"][cui-areatype="toolbar"] > .toolbarbutton-icon { #sync-button { -moz-image-region: rect(0px 144px 24px 120px); } -#sync-button[status="active"] { - list-style-image: url("chrome://browser/skin/sync-24-throbber.png"); - -moz-image-region: rect(0px 24px 24px 0px); +#sync-button[cui-areatype="toolbar"][status="active"] { + list-style-image: url("chrome://browser/skin/syncProgress-toolbar.png"); + -moz-image-region: rect(0px 18px 18px 0px); +} +#sync-button[cui-areatype="menu-panel"][status="active"] { + list-style-image: url("chrome://browser/skin/syncProgress-menuPanel.png"); + -moz-image-region: rect(0px 32px 32px 0px); } #feed-button { diff --git a/browser/themes/linux/jar.mn b/browser/themes/linux/jar.mn index ba563ba0615..94dbb1de8e6 100644 --- a/browser/themes/linux/jar.mn +++ b/browser/themes/linux/jar.mn @@ -269,15 +269,15 @@ browser.jar: skin/classic/browser/devtools/app-manager/noise.png (../shared/devtools/app-manager/images/noise.png) skin/classic/browser/devtools/app-manager/default-app-icon.png (../shared/devtools/app-manager/images/default-app-icon.png) #ifdef MOZ_SERVICES_SYNC - skin/classic/browser/sync-16-throbber.png skin/classic/browser/sync-16.png - skin/classic/browser/sync-24-throbber.png skin/classic/browser/sync-32.png skin/classic/browser/sync-bg.png skin/classic/browser/sync-128.png skin/classic/browser/sync-desktopIcon.png skin/classic/browser/sync-mobileIcon.png skin/classic/browser/sync-notification-24.png + skin/classic/browser/syncProgress-menuPanel.png + skin/classic/browser/syncProgress-toolbar.png skin/classic/browser/syncSetup.css skin/classic/browser/syncCommon.css skin/classic/browser/syncQuota.css diff --git a/browser/themes/linux/sync-16-throbber.png b/browser/themes/linux/sync-16-throbber.png deleted file mode 100644 index d6f801aab3441847486fd74a9355f8f911b9417a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10365 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 H8wLMAkz26N diff --git a/browser/themes/linux/sync-24-throbber.png b/browser/themes/linux/sync-24-throbber.png deleted file mode 100644 index 5587174de0ff2dac2731367105477de704d61c35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15774 zcmZwO1yEdzwl3<%-5Ymz4ekyhKyY_=cXxMpCs=R^?(XgyJh%jx+v}Wt@7u3xQPoUn zpsI_S{mn7QKSrd2yc7~V9y|a5K>8{zt^_(_{qul@27MlEvf%?AU=58`WI;y+&;#(1 zdjkeK;FGBq^ubR09~2LPZ{zlw{fc&x{$dMl`y0)@OEyQ=CsNEl#gCcY`r8Pc8`t9z5+}>c!%4D2--o9ZN6JSP;h@4Iymos( zUb;=ga9b~^>`Z39ZaL39@*VRXyHBUyKRym%V@=orXhJ{hIS-G&1??0U6@ARfi}p6f zadBSe;bJIfC1)cjRos6iAA?krbLEJMkA08YAWD^SMgPkvK}os)2`@V_KdXR&kFA~% zy=xZ_qhrSfambC_fA3XZSsC>AY$X_SCpePj3usA%*{n7;z!udlOAdPqS z=g1hC-Pq6|at{;m=tUavLMwu~8`d8_JFAevXHR6a*3Mya_-Co(<}EeK_f;tm^5GS3 zktTJld!vr_J0BrRtX6gJo!&J$9^Bqs5kOoK(yP>&EQ*#ikf6k(d7b|C@jR0ll7J*Q zm|m?qO07}_QRVu1l{8cdZb3{`xKM#bfjG!12Ppm~?=5l-7EhZzftis0xy+ua%$}83-+o2w{2jdy=u1!P_cd5TdZ{(HumYM>7`rku8rrL&&~`2tsdW!OPi0Ub0zYZ7w_-v^6H28_xeseFytGGQsFJ3stPj3ufRL*yPA-J0M@lM(wGwbU1 zel3Az2!gSX@_~$1WmJE=PMHj9qTG=y5_>J;yyNX|-9swtJ?bbNl%6E_i zF+x0J)4FK^n6q$rUTUont{5uN2_qZ%b8F}Oa+2d&KxOdMXjltj7^l7j>LHa~HWKN^4+5rY)zxsY9Utx5UVxuWKAf=RQ$MPy)reJ;$p(A*?_YoQzrk;gtuq(Wsc(-A90t2C^;Td?wb_I>YOW#WX;M*=VXHv9KlgkZ<) z*g*ONnTYuB>>j>G9}LNsjgrM`JsF7=vU$leLti!8ZFr^;2@&6TMx7@1#23%*XXoD- zHL91vBG2() z4WkSclh3|hgYh@S1(Ce02Ed~rjDW*C9NmA#hkEvCf5v?ZJ9F!>HM}ridbHd5AWT9} zBBA7gGBV!p4S-oIDZb&c{4RRe7oq!2mUml)*@Hiiqgg6$)38^WfNG4@zB7(X(fRoWa*Bgz1md9o5pumY;tc|9W+mQZvL7e^T}WTmfi568F+FKnnj~tN(HPU#!kK zs$>B%Y-na8q5}F2@P8;ql2vsD3O#mTJto9c_d|d|iLejFI~ApkYovYEh)NC%qMsPr z%qm5)b4i`E&7M6ag&W4x+}62ySKCW5{o@D37%gon6f9E&*%OqZ3G=dD zcvcqP=*$dEn5p6JhwszPJf%Eph;M6G&(ETMeB?>GO8Al~BqYrfiLw4r9uj&w$RH5~ z;32armdDrEe=u2k=mo)oh+u(iq6ro~1kPNoiywIW{c^K=s}PKfgWZG| z9X&cJDXC9@86F2(cCPjG*Uhb@QdoW$o zEoL>l+8o#S7yHza9`2e@aLQd9$Go<=HJ-<->6Y3L1oaErQ|D@sZ-6J2j}9$D6})vclcq&7rATH08hV?YFM9nbu->?Nbp zMiq~Ut6z8|TQ+NqRSaX8ch)#KVI~w(mPJV}G+b-+UQyGjLM#Iw6~Aw`IeUCxBDjkV zN+ULr#+q={>G{bjw!}}R%8F~zoR5g~Z7uuotn%St&JZ;ssP-@5D$SWKBwJ$ucJ;FU+LQ2 zQQ*jgm@qt$y?6SMRkqi`}Mnf@<{0qx!6b|B%-*5 z-dJdik{>@df=NB6TAP~C>CxS`_Yq_f_+#1?G<|k(z4Pr1PGvuPXQNB)9Q^N zGwz6Aq3~w_f}Oj2pYJ0;+6gvdslM2lqgIH=Erpy~sy(|X5Zm>dpR41et6e)ccZJkg z6xzfHmzugPfRNcrH;z|FgTD0Pw6~IyiqOt7MO;xwO<&tv41(y0<@B~+mGCJjb0_b^ z%>Vt>6!jgp`>iSMC8uOFW>*@B%oaMyr7Xhz=yV(KC?el5l`av5t_8&(U z1!K{rnXE6=c0N|?bTRJ855Z4Qt*wJ{ruMN#6z|IA(tz`V1T<(9G{P{NY&uw*A08jS^RovHy=`h<_*9(ZO>K zM6%9*NQV6H>iBX)*FZ!M9R79`jD12;S;To#b{w667PVaR%cms+ad2|+KDja;A$~8d ziz#;F4Tqc}rsvM3xAy_t2>? zU;wP^@oL{0wV|PLZ)vH@`QGdOue+Z9Ibk6}umK*Ec~qN~*7tX%wacXhs=IvRk_n3gkGa?p^HqLN0XJN%Or z4~)Z#!^O>IR|2V+JVaBc!>_Bh>=(8RFCk8>q$I+UXtko4rKTqtv^YG3siDZ;S#&yo zV*-=6k6@altO|Q{NyQj+^)I`v^Ru(>)8pe|^o;3-XUo6#U9>JrYiepl4|wpfBXA~9 z1VI0bmx|=FX@`?S3m;K%k2gVCeUrTRJ`#dv0#eH^B{fZs;_8c)+^Kx7FJ2B%wsI}e zkL?}DMlAwl^FM|PB8YxMPSVp9w5vMEqNFs$Fzb+P3_c*>(RiIQAaGcsp%2vP=v`6d#CLfSlLA~WKEwm3r_nl+AAXf#$&!607%$T|8BZ7yHn9QRuYZq|yl9O0s)JOq1P5^snA1$7E~O2?oa)iHf9v0)qEzqro-e`_!P9k zvOzfM+>ra*R#L5MK0+5lOjW=SF-us{GGt%~u5jqa~kuHE#e zsN4g&vamgitX`)Ht$3l`#p6Yc{sFq|D$DV-FC22XF(Ea&e?!y9{V7IQ5m2%%L-X6? z!&=|Po$$+n?9fl@qf!AJNj8rz!O^MQ@q@Lct=L59n@-ptj#MYD8*mr4w&rI$LLSNG z0ZH>t9XrR~?Q>4t!tl~x^8i%Ik)^mm(HJq8xI59H4-pub?Xw`TW0H_T7I}VLBjZUA z`GAEo`Bs|I`co>_>jt%78yt;$!7p(S51gY}IZ!-nJPBD@&_}DSFv@XMI)gNao%3BJ$+QNg*%k6TAlbxb308-nc-xk{Vol< z&Dd`BtV-m)%a6`F*xy&HdwfvYK;}9(?zPZL!pQO(R3RUZ$GLFCtXk0-q{4gDC*Dw? zX}SoRdfCngM+Cgs;xADpx6A#P#!&yRaZWozF-T*J|7Z;TKN{NrT~YHkx*k1C@3qEL zTOQVlnoG-RXk*vGkp!zcqfoWAL{aPC3>6B}q)AfLD*}br$$)WZn6kojk+70LMWYfD z)L;pP*#Q3aqnecwfrq?~v&mYiYB)ve%=2w~_nv37qih}tb#-h4CvHwaFYgm^i^Ck* z(CCg?<8$E^Eo{cQf%RFKV@1W;QCce4%pHnvTU!NOC(+DzkJoUJ#zi2F^>nrQo@#qd zkUMV;AU4>VM|L(0|It0FG45MnLLB~cHMkBi_NC+cBBpD zlT1nMo7bqwqAM$u%K~Y}P~pQxl1h4Xp%ZS_g;)UaalvrU&vh&Bs7d+^VmxrwQNM``uiO0aG2|4sSL z$%S`os5+ZdjsT2-T+Gt@bTX6nAC4u96nP<rrdY!a zew`k3p2V-BeKC^c-tMT4!U`E*u3W#MlZArm>!`dvATW37h!VdhfUTV<-efdjudfr# zdLE9OmMx?jHOGbD5gr>{tfQd+)!JI)bH4;09~}-A2L{9=8-AGUWL5fYjn55{t8;+fv;alcv%MwUts z!NsfNSD80pfrL_qudq)gs8uqjNu^6shn*k^R4W!UBUCviKU7t%4r%hd`|-C&uSZX+ zm(3Lo%Bk0{07i2;zsCWLT?>hjH8LwHDWdl-r_VsT=tY7B6Rp^prnD+oNLda=sQ^Z; z$92MszY3q0_FM|a3RgusW}pz=G?GINM9+bOAX6f(m|4u2DFGnnPmwUn&!hMCUwAD` zwPoI(qZBy`1E{!A<@KKYBVRP}VjZofnV;;XiqJUaN+JwsU^Ca$vf6{nh-Z$0_W&da zj-NWZjb0SS{MsyS2Jqlch#D0tYy`DC*oC6`6we7^6=A`8#QZl0%DZ>Z*7}}*o5k_G z*}T$hIJtgmv_%E(yCNg2x_%vVQ4_=juUevuh)`4-mQ#}O9%&;MuKmIy_kdEAR!laT z$K_9ucCgu$ltjkAtU!D; zF1k@No(LO%Z4icj4xns7b1HI`;ruA7SPI2GS_vrII&?B*XO7|lMQmbXMhl-$D?>e8 z6p@4uo{*hAl9n>D1w&Lz+$k8yJ&^By)z7S6n`g7#e8-jwK8~ew4+*&^(P68f(4LdU zhWtALDb|t(9XftyqJ&}(!1KE4fbBiMu@W8#b^Q#r>Bi3~3+UK7B260DkTcpn%+;$c zD=__jSDnpeAHXpI&$I7L!pKO7E*ojnAg(3e>Jz~zM;%+QRu&FM@G0Oe6!lvvYhixz zo)5yW!0@&WfsU6o`0GxNU~{plz4Pu%vvq-3vxzpFVL1@J$`q$BxHZ8;Z|uRv`<1%s ziSX5(Dj#cYBB=Ch=~Rpeckp#f}zuG1}klq)iT~!EwOPm z;q!jAlacWA*)7+e<@#Dv?Q@(a3ThYENmW+$;hgE#ajx_{5gwsiegBp{2ahd7sk3l@ zI2J(8^2_a%$S>pnk{RaTWp-p(l>y1D`5&2K|3_w7WpkiVm#w|F6_}?MynJBV7^rYwE#~!^} z{{tReumxWGdIB~IDxy(l8bF)Q$LK&a2M5ck%SVjRr%Kflwkg}%iZ>k{)dyxqT65u^ z?0kPH9|G#;*tSJVcU%O$6P9C_+hLS!5~BIxWbunI|Xo2?c`x#Bq& zKaYdad7fT$Nt(RTtyWf%QnfD%q&Ou4yQ*}sQc|NKfzV>4um}s_)ceAyLAwtg1~xVX zDKbP+GBU34rMK%a;V8@oy+~%x>)^hkhDJu{#b47CImF2dqK@~rw>k<$VFnoj82tX6 z6L1!t)fW>!T=_Fo$yQt9HCFK!CBJgXR1ds^Jy0EX>v|uvkH|reDirLxt z@V9mnl@N=*@O!-bahumrTiP-*Flw)@JW3s=GS}4I@7`+TS91|<_I$b&53x}|LYn+A z;&AK`sJpFDRr!T3Uvq#>3zSJoCte^4(kks6<)xXyM)>xP@c=O&#=pn6!wD~A_1iJt zG}3;i@x^G6dXAm$8bIQWqfyHo3N(#|n*LYh} zzn9DXW+$AJeBbnwLeVN7>W?L+Lj}PWROK*s1TsU20`-lC`w_!oCJjb=6+$7m1QTjG zMl?PZd~qnbL;x0!W`-NlOq;-^x2S@_mUz_lvu{FYY#X6Rd-=SX~SFh^ifK zJrlh*nImI|e2oo_EKq_mnnp=?#tF#b#rZ0ZZN={}unQKrh4pZYPArhMc3xWnw3hnW z$&JvzR8_(mLx&95Gb^{fUUSv*jNK2upxl-VXJOui=Zup=aqvs9ho>3z zxKdaG|L4;BLRmX4rb1nt#p>A&|B8X&S#c#56%GlwwpO7^9j(+C zu-ryZks-=IDkl{c)PY#XQo^vp$_r4`P&|BF;?R1ld_1Q*s*jErTOS{S(sJ@p%9U{F zvv6{qr-nlWiU=KBdOx%$InLH!UfK&*&ZerWD%u7D%-LnrdfLjdnQNbpUYe6#^B2AB zw_cE#=|~mr4W^+ODmV5aj!W=|6$QX@9QqO3S1er;6$HMg>#^b-;6*&g=mY!K8A zM4?2YVjlwCq3vTa$}{!*)DF??@9+Ocf9TP#*vE8Q&i&FQhfK?X6^$E4v{_r1SIsva zFt=lx$4!~HwO zIr^ud-ZGTwe<+6k-!5{BD~|tV*OfO9_p_idJt7)pnn>IfZHO7wp`;aEzVi=B>nTB- zc7o}6Sxa4|N0ltJ&pRZ$$(lGV@+RpC`*qHG3kYw z(uJIym5s?`_;Q8zZ1W|Hd1#Zzm~7YDmu_k!Ei<*XQRMPji@l(z9zD81lu_*rNlJ-{ zi9rCdu_34+H%@3=++BIP^sc~sbRV}{Z2K1nb)=I5`WH8IVrl3Q;NeMel6sFH#b|&p zd=vn<+J}191V@6&vGE|JY)%Qm4v!o8w{Gj5?XJ^L*_dor%OagZ3ueaJ-M@;8*Wp{p zg2a?*RAO0xT^C-%MYG_-J;S=V_1&>1c8yuq)oY~xoCan*uF zEg~W!!{q2B`z|;a=Q?u~Dn15;T9xbN+86Wh&KiZ>Or&6t@%X1OiQVx0g2YYi#FW<6 z^wmGdJA7Z$b&sd>jc<2vGZ~L2P%d}!?O8L!#Cswp7k^SSrQ_e`WlH&0?H{cwj6Ck1sYr+E*5o?tPLojNX~ zz!K#!c>0g;`eki^@>`voISj~R4=xV`bSfKWtoDVk4!ey@jb`RX``|RX34z5T=sH2t zqWUDS3E^MG!gqtpj*fyzT3eXBZ%Q?OOGaPbURW#uPhFeqqU=i2dl zB^!5eJN(l;IpY={95`>)#KO%j-Jp|rRcl}8`*^{H8!wQUg=rfR=qS<~i7q^IM#{y- zoE1N-UOF|c5l&vM*J+W+OYV#;Uu<}kR60STL=1%@uqkQa|BN*5|YdCtBb?4yoN_|?~u8C=XW+X5QfFc2S-MX1Eqfu5~>{# zz(>X@ycG*W!#UpUN>CFvHbr=Frjv~7YZ^63do=rawZh;|+S>OhJUaU39$T%%8{j(^ z91$HUqpdwD1_ACkkL)lGa27Re7@BGeSPPkp8OI20W<)RlVj58d+SyI7t8+)XZ%aJ=Qzgu31V69 zKP)5u!?Lf9vMNx>_o~^~*S>h;WR-V#Fy5C}RC<^qu8$&MGzAi;DA*QV{D4>-jg4$= zQ#b@SqAn16ZQ0Er2b`5gk(4xPSMn)hS5^TS$lCsO#r5pveO+*-?aY8eTwrX>cBkXf zz1y$nmEEm_5Lvt06`%m|IiRMdYB~JDl|2=|Sw?Emz!_a?XXNEIl~npI@c3EEZhL1D za=`9!=IJhsCh7t&_UQh{pFf5EP*jaAEkqe9iS>50L9Y;C*U#^dJDEvI1@-l4GT**| zf%UEJprkYFI>CSkZasO;95HJ18wa+PSAw^dwt2#vDe`!`!HE~qL5h(^NEV~$Kq)x7 zA|VHb?eCtx`Diq{U9=t_O;-=xrMq3OCcd+<*h$W+=%IEq>uZvZ;K#D;I*G7I_x|x! zH->B7vO96-?b}{~iSwi8PtAm@QmdWj#6iRs+U)in$1%YC5_8F<+e9PB9EGR?7k-L+ za_@x`9$1GCjTa{_oMf`gPCz4r(EpVu#kK;mwYiOlZz)GD zFHbNs^=o*&m9(&MmpsfbyKP7T=z?)kjiJzJ?5nMzHif#UCyy3)*eYQK4V{+B7&x?n zfP7W{vnf!>mmwA|kO8Jy#0vHeRK!og>w@yVZugnQw9HJXV?I8Ev*kzGBn$41tt|n1 zE@oyhBp>dRgrWe;HxCDHf`vF@KEIR!*iulCx_k3l_Xe9*3*pZK%QyuJ_^QU~tKe(& zKf68#xu`X~XM@zT|4xEpce3muBXv=DwIAkRZoGUISh^C9)cS6;woF83$-078!)PMB zAk3D(`r0wq{%lfU(XsaLaH|%CmR+i1tY-9WH8+P*E5!KAKwIhInHUk7*wR7 z-Y*-M99L8sS?nah`Ae=gfsfSTwv2wUh!$NWddR|Nk#csQos@jQO?dp*(>|0Oemui? z?!;8yj;Nvr6?529+ROr{+;IQLRQ9l0%uJg3;lbW+|7trd1{US%jTg}B{;Rh=GY%p; z1d1U~Xy^X&9!i%5#>Tv48*y^ktUfV8jJUFPYjPEr!-jPcNh$+zAyZMgbEkzO zFs1nT{J?P|YsHx6Q7M99&vw=msAQDP$8vavB8tnDCiMKE*x1*2dC@0d$ zM`Nobi81Q;NN?KAlJNKQi9=lEMHvg-U zblmH{A3p?ZNABLXeP4qv4Vlj{r(_8Wf$&tqeThhlC+R;bQ!S2qC=S(w{e8F z?#f9q8pRlbE(ZQ9y#dZ%?+-88LV0HaB=VWZP_spgt}bx(6EdbQc%|t9a3w`n5IC(< z%SF3eojA#FcOWm)z6+i9lghr{Ry_z@*;hU03#>%ChhfL;$Dp+GI^j2vpc^LvcJiL^ zpmmw>soak~utQ)`$aByg=H`b&n1GWRtcJJy-+%V@rRnif%~T{` z^79)6_w9PHIx~lHXXSTEJPE0ZZsR->ojk==zj?{}0{c(zSbI@q3R`VL>Jyd)0NH$I zm37CF^k4iU{X4%o5YnL_ewF^iFY^C3D1hdu`5PM>-jV#Fd{NTP0YS4_PX&|(lvY2R zsJe}ciddJmUeY5)Svl}-LUGC^6^!><`F_rc%NbiYWof*Ra4Gf#wNWZT*RbKBCZsW^;CSCTh_5;{8An zA5K{vF4*NB&E>`9wAti-*l%-o|NZ!A^>8`mhk=7aUM@0rm#$XB zv@kL_+#f(AN+R5QYn?3hkG>AvxwGbtfm?eak8EEIw_g6PX;nX5c5iju6$O}@&@81g zX{A&yTi{sG5d088U9`f9j$`>>e9IOf%63VB@B;}mFh$(3bg6)<@#Vp5x}_O!w+l9w z-L#`4n_yN~Q>}FmEKuiIQH%h*5(+HO%{35@P{Bkb=J)hg$NNk@(*Xk&Rama8ArKZm zI-QY=j8qASCOSH*C#PpO8U1B78qs2CWY}<&s7{MkrLc~xKT2{1kx7Q|T^O@YeS+NSzCD=d*)Ra#2doM!B>x7E7 z$dcw7FZI9oBk}%Kf}i`IX+%0;(MwJs!|V%}Y%UR?#BegRmP{;0VHV6MOWIQ%Wl|Fg ze?v`bhSV>WH#;0Z*pAl)gul$8|xiI)*lohh~M5UUu>FMYtGh`+m>?M{D2pDv5l(7wC zC1OJ|NM-J!I*b8_#b&)B$}HAcPd)?M*nTgX=tGjxx7juAq z>9F9R=VLd43MLm%F)a$b2+*VBqr>UbnT@!j z4hbgm8Emci-3B>NZW@*;*E(HRH6xPQzF-n#VU@-MrOmWJ_xUhALV&HVu3h3>S~y3z z>z}We?n5w&v#IT9qPczEScor2_`$?a&AG5Ww>4%jr|874+Tl+{6yRrfyGf2 zx>H7iV%$ZG5Gyx4fBF*;Tx22Pq^|!dBFUR#88s3e1&x6x)Kx&jv%eKtRmbA&a8g!6 zL0x87v57U{xGCf(Mk+fnb~R<-J*RH^eEH-TCbb`U5JDA`WwrRESS(O;eutz!_nh(h zvIZU8cTvW01o2OkxJ7?EGhebh_rDBA`FDdIQ?qSA2AllHVAOvM_Ot<-0{y>uPhHMm ze2p)yZUVyFihM<#lMzuWD#R-Y5D(;pM0<{h)cQsN99Oj>!PAN(yRe(c1SqD^gb#i| zAlX7h>?uKxyJ>E1U9Jh3nVI|AWBoCTc%igE-mo|GyXx9`?c$1AvI-qAyE6ltmS=&1&bJ z=>cD0`}ON;YHUik3(yx_hzc3hx94q1OIv3?LsVW~4uFI#8vyg|>e>cHn+Wz-HM%|9 z#3++8b2JH=$b?xDiYikXtQcfUz$~vbdx&iIO!|a>) z?cs|JgnS4hQ+9NVA4;V!hL)<$f~-8a{Cdn0M&f<|Uor<^Z9SmVV`k4KXvqwsV*n1y zc%=UplODcV%XTKNTALafV&S`ZlG{}EPj)9Q#-}$ykF-#&fk0ALG!~5K9-K(f5FbpM zp$Mut4m>1iFe6x|G>meh5}l>hd85T!kD$Qjm6ZGJ zetj48{d4~nOF*Th%)CGlCq@=YixCF=w!{BZ5OjH*z;9ufZS#JVAIP+yK{W-+u5KE3 zvm4Z>xMj$y1!A*&K?-5bE-VDddb-j@gE1Ma;xTEC{Lts*v=!0+8u1M)s_nh zS$X06WzU7`kWv}JVQX#Q2v@Y~f!nCyjOT&}CghaI>qG&?lFfmGXj%VfV#fFYu(hQg zkv8q|%znA57jKSqW3Dkt&sC!j164KH1xcDh19o!%68UrD&}r5XM;YFTwkufGhJat zZV1^J*QzmtB71pxae0s|)nuS?Xnz=+)V4?m+ls-8;xj>?q-aKq0fMAR>i1}{RmS}- zy-LJi=WXA33o@IqC%KtP8?8n+U8K`zi!x8aZA}5td&@`6Pjer>6uloDMZWA#U1?~n zrY2v(OeRGR=R7#Lmz?p+ziu$1+S~K!r{)5hj#z~nlMW*Hx2!ngOYZmve%&?;R=P-t z^bvA;$qCE7oBa{-Z|T3S+uJIVUd}N@DiIPo&qae2HmZNhV9AcM*K-KedG1tnJ zEm-Z)FfPR43k61fF?-;1CShfT%X>2v!xJ~CuSiNx+UtM5s>j!@GG-)9T_)gjJAh+` z51>nYCaTly+kXV-HPQ2apW4(2ENW1Tj;0oY%|HF6K>|EFyh|wodMtjz`t|sK+DxSD z-;ecHPffKLkX%0$2E&M|Xd0&}+O3%9poO0hAdr))%6nLx!h~C+f`Ueril#;OwmbP; z{=HI?@Nm@X+J~0S`{zz&lyhr8hpTN}no;I}e#g*+ z{!Cz&++Kr_E!4}rcYVvbY%F+EPNK>}981c|f*icY>Ap?3=;NM){=PPzc{?7PHZO0? zV9)@>u8a5v{V9;Q|8K+%?cY_-O=0i>sr-MZj?w>7+0sTu6)1SO-KlxXyHy{03SVlF zWgtP1X&w1vh-N_)gHA7xZ==jlZx@$) zp_efqLE>EY#U<6@;h_tzgJXyR78D*ulzVGCt03I$3vZu}Dy52c6SlR|`PegyL%v7CHeUF%b{Ar>AECSRWfJnC~yUwN1N6!_9S#7WdjM zp=$^W*QKQikeWA*JUkH!&=jO1@1rzeQLklJ+E7Lyv{6bY3 z-vM7C;Kv!F1@3e<*k)6)(7-|}7G!INK}kyLm|++K>eg&n4C{L{#vqU25Gbf9`<5>@ zlozdBnZX_v3>1@)v28YSid8Cw(J2!q4i~whV63X4Q)DO)ao>fD=jKiLnF9t+A*)>B zx#htmvVTF2@?3(0eT5({=T1P!|7D?UqQdTxs16y9Z`x~U5ai+F0mR&Z#P#L3RU=)@e)17ZT%4bNHcC)dwr=)_$wqqc2?6^EUiTYi5SwOop=JNSGLk3~| zx*j;KM}kpF5mGLF-m$SIx7t<6YSrggpY?yv(~oH|x%q7`Y}2KrB-u8!wMRUdQDj2V z`H7ghQ76Yo*l_r_%)$m;&!?m981+rtsG035by7*6m|A$ z`Q2&zj8uB4f4pn{28foH1e}kyG4baBG$slL`y~`17s;XB7RDd9J4LuJuG7E!>e@op zs6N-i6?t5QZ~Usqa?1I(OU2PoX4$lUh&VpN5FuD10>CDt`c906(wOxgoYJNHp*2wW z5~V4(Kw8gGMd_MpPsT<~!m$noKfLF%d3UQqI#-ccI zIp3i4Y0|2e(MgdSvE2gh!BncJpnla#A+KaTSiSw@6$7cHXES5nVN>J&aAMsySt6jFukr^BWXC zHW{UWbwi`NF##n{Wnls8b&-_^Xw;3#s3V`%h6Zw8Ma{-JNuye6;QE@S@DM(lx7o$T zjY+p8{yPHPvSPhjCh>-E`I$8olhM^C&0*mI}^Rrd; z&CG0YhvT#S@d@5=|Gz~L5+Ik%{P_jv)%O@36~)9vl~2M8M*fF>FJt8eW_Fgu(N0|W z=*wNW`JRjJS&O&UwZ99!04#B+$QO@{vi=?Y;$^_;dhN6?n6jGnE45TMv(Qs;&PBH< zHS-Za;|Pot6BYaOxM~#{*4ch^!WGBrc48tL8mssC1Jv8!UlP#q>^>iw^clk=;~R0f zD096QbY#@*LphGlRQX>ThHd;@M@&=hf4UaqY8?f2NM`Mv|h#^#so| zxKJyZl0Xrn*tnSAK%6=Yq`2{tWMx6N%&;LU#_^KO2uM;5ErT^vP-oa~#~ol^{e!o0 zXS4A*=asML?%i*vEvdeqmAiO>5HjHXT4;Tvv=sgGla-bAvsM20-LpnnVatPoj?df2 zTM&4{xCu$3G|{lAHLo9m?83s1vAaTrO5RYL^`TbvvwmR35}}|E8!K(aPe5N+5P+RJ zeL{pT6@0|;pK-U)(9m7S4#R$f0DHTw22gX3{OQjeXus~~NAIR+SxdVYRKsdk@*P4NZ!p{+*2p{V zV>gy$K?&=!P!S-O0E$0VM1y+4xzCYX*R}*aiAN6Lp~@j3G}kAw5Wda)m+)7N{nVybUmKR?IGDj=yd;9YmUxZb+haHpcC2A#uc0o`RVP3v8TojP*@ z{QNn&iHU`9%ND(tE)9#J;h}+Z7CLLLg=hTXe4SWmm{4lrgqiT8;viEIjNHmd_px2QqXR4hFH5h*;trKLaOXCMoL zJ#e&Y<_%h;I;4$1SjoTqkVfXdu+MK_A4ug^I}{45IejmzMJdUNNpvd0R78bUs8V;p ziXM_SQkD|)(z}QYduf;X^LmsO5n4>ugTV^_2cr$(S`gH@W-DgG+<^7G zeCi|$4{z$ut+tOtomp$SS#Id=Dbe<6#;w-mq6rOuZ2Caq^dyF%A&_!1(X%fxNS`W8 zaQ724&*PSs0W#a|J#1y*)Mn9wiH*12aOG0q@P*GeU`CExxrK@z!OT`oGU^g1eFRBa zSsCIW>aOdB=)M|H8Z+4wI-a68J9|efhIa1w;HYNEFfT5vrw#Tu209+^jEjy0WBV;a zG-w)o^0TR4rXmOgh0M2KO&_Z_6}9$$&HSu9hxMp(IA8cc8+rVoyY0~SE>TM(nek=7 z&y3@ShUe0Wv}EoI&$DGQhdStCYQ&%A+@0m3?4%ACe~t~Da`J)-=U`YYv!LUJxkwC# zLL0|B96o-AN;h;E_0d5|XkSiGYpHSh&${><>|$#qwL{LQ{}A)>0T1~dO{Tp0II9I@ z1JdJFrRBJ^7cT|7-~Bkkp!PHEMIiby%1qZCO|9{K_?KQPTgb-gZF46+h=!Dr2MSAR zuSZZAv)8U?hRGNH3zhOnMY0?hk)H^Y-j!J{m!6kM7z&TBEKY-}^|Ck>Wf{=8+gZoX zT}8#jL%JEp4Iz diff --git a/browser/themes/linux/syncProgress-menuPanel.png b/browser/themes/linux/syncProgress-menuPanel.png new file mode 100644 index 0000000000000000000000000000000000000000..00e3fd61be3a414755a91af51c9f7c6e38d979d4 GIT binary patch literal 1090 zcmV-I1ikx-P)s-KVgUH$r_`PlkW3!eGd&8j= zwrrelEe*Hcg5a@#AgB`Z0vjNCnUd6zf*Ua=s3W>a=M4y8f#+~0I&f`o?nrV>4SeGr z2sMtGIE9s8St~q4zT~HGk&w?7S&vYu#&MON`@HZ1_Xc zht+WJJ$$!FRC^$5wE}|zGU?ukasN){8gFM}wm25d8Ka2{CBU9=N%_6LZkZ4@P~va9 z2`g0siDG}t54rl0*jNQH8n5JLUbl=K#1DYc-2)%4lL%#Mc%7;t-sz%tz3i@Lw2MSf zruJ{K*r$%bG6r*D>VGfvZd%0R5hZypE0bciSMeCUl|nA%Y};3bHgLkn$qugSq@<5a8O8?5Z%SIGYYLW7B!yEEtzYf= z&>Eij|B2>QBzEFyaG(5b`%})t+w!gChPo1)ECS~-2P~Eek}Orlhj^PRqwfuv&9Yi? zZgP;P)Uqe1H(+T8N5vy>;ChMqw~^`lU{_3^{7FJbq;{qIqr8r9J2(6`EZ`0)==X9eBJ z`ur9HIF8Sjdkok21?bkV;Q_8`9w@vWA0O&JCTwOp-{LzwIrJvFSfd$S&0oNR`cHUJ z6^6N^&yX}Cz+71hi#~+;N*3l-bKt1G4Nm<`ABR`-#UPCT0IAWgSv`(Pz5oCK07*qo IM6N<$f|P)<0o$N!XZ=WiS9IpM=IMG9w{DWcqo4vh|dAphdf^U$r5Fd>nk5Nr&r!C3=d@P zG29pXkAfd6o`k8BePYt0@YJ*kr$K>lLRlFeC~sl7C;A^9OFTB{2B}egYE}soV|u8$ z5UW7~k94On+yyGaf~{Y;#k;-qm1Vdq{t;PR^@(LAiXrYVeB~K#i+l&-|8RUq_8h}q zg+m~=>kA(p-hB^Xu1Q^IxGMA?jIT?dBWTcdpg}P8*Cg&C86>-p z;j+MgDE{H}*hd^$pTlD>eHa@krwUZ_6R!T6EW&I2H}zW>F7p3}<7+BQQCx6EZimw& zUv-;@9?T3^6m}r1<+`bd2yBOkKJp9~guXCb07}B}73Jmj551+p3N8x1X1FAMjN!8E zUKBMK`2W~G^wLDJl>54VGs8K)|48_|?E^0>i+gT?XyOQbS#>`4K)k55nBff1e<1!N zd&9gCEOuVv1XK(apO-r1@i34JXN0g{(QnbbX`c#WGhNngV>r$G9|NBezU}(JkC&*@ z!2LlWtLRmua)xs Date: Wed, 12 Feb 2014 13:31:51 -0800 Subject: [PATCH 10/28] Bug 959833 - Re-land pngcrushed images that were mistakenly undone by e624202c4fdf in Bug 969227. a=borked --- .../drawable-hdpi/fxaccount_checkbox.png | Bin 2200 -> 601 bytes .../fxaccount_ddarrow_active.png | Bin 1591 -> 283 bytes .../fxaccount_ddarrow_inactive.png | Bin 1531 -> 283 bytes .../drawable-hdpi/fxaccount_icon.png | Bin 4067 -> 1385 bytes .../drawable-hdpi/fxaccount_mail.png | Bin 9730 -> 2644 bytes .../drawable-hdpi/fxaccount_sync_icon.png | Bin 3204 -> 1074 bytes .../drawable-mdpi/fxaccount_checkbox.png | Bin 3581 -> 569 bytes .../fxaccount_ddarrow_active.png | Bin 1383 -> 213 bytes .../fxaccount_ddarrow_inactive.png | Bin 1357 -> 213 bytes .../drawable-mdpi/fxaccount_icon.png | Bin 2446 -> 901 bytes .../drawable-mdpi/fxaccount_mail.png | Bin 4934 -> 1370 bytes .../drawable-mdpi/fxaccount_sync_error.png | Bin 603 -> 421 bytes .../resources/drawable-mdpi/sync_desktop.png | Bin 1109 -> 206 bytes .../resources/drawable-mdpi/sync_mobile.png | Bin 1118 -> 213 bytes 14 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mobile/android/base/resources/drawable-hdpi/fxaccount_checkbox.png b/mobile/android/base/resources/drawable-hdpi/fxaccount_checkbox.png index f6ef37ba9405fa3b66ec402ad46ed45fa7315ce7..11e89d34aba2222cc1deaca5b6137bdfa730727b 100755 GIT binary patch delta 587 zcmbOsc#~y(4*EV@yZ|~lg z%bhmG5@88y+wJo6T z!yRv+Jqjg3e!&b}f7g`#>;Cue@AfY_Kc@uE`S<#`fk$k^5*xMqmy!jgv}W5b0J<~7 z)5S5Q;?~<6r;C~#1X>@aIqd9HdLX;?{(nv9B%dbcrK@KKPyL)5`6Zqsc{PV10$i-G z4>|f(OfM^X)vIOulS1DX{k`N+8f*0Tnu|mKRe#Z->-V*;if!@=?)h#g8NO0ZVYPyt z>vpg3hpWG>44yh)U^PSDwW39<8rF10nr1!?%QaYCBfDgIitXpK(fUoHrDqM!=-giu zb!DEIU-A6wyUpKh;0!A@>F-SazDw(CNmtpo@@4fa-KHn;hKWvHyz*oBs-?@zH&jT~ z>^m3xF;eyE=NF$i0#x5gO;s-rt*&q1QF>gz>p|$HS1rZTJG}D3?oU#k_djGqN9f_d zSput{&08NBDw_8HjKFG_YhoL-ZZJQW-|$ALz`XC*&Q-BDmhSaizUtF~P$lu^2-BRF zb5@DhIO@e*(_N0NI^S#Jx<<&8C+X@3=NBIvo_d5HK3VnN$oim=sM+RPbr&Qca)y2D Xl!}+L?y5Nfqlm%N)z4*}Q$iB}5X2Q0 literal 2200 zcmc(h`6Ckw0LST-oP{|a4?}8V$doIah9RP9TdpzLqgU8oG%u5s4aJZgkt>BYpL!>?fnVwhwu0M`42wdJ4jC#1zAm52?+^>)2>eEes1p1BuGpB z>@sI_qJ)Gr?z9seeN9p@8FMD=jF4{EX-du)qGgJYUZ?;^!gXcRp~%2qag}&d8)fg z1_Fjosc$iH%InN!aZCF`jQzm%6Cq729w*}GQDPY5B)`?O6SIU7Ba^#jI@zj7lzEf#}X8x)ItrD zG=R1uaEMMte{s%-8LZjJ;e-=!E$G$Yz>(nUsfdvNk2_5|dfGfCLOM-}%u=k{3B6Az z`78LtTElC0I2@mVrVM%QX|+L5*rK~ShkWb?&gaAHD+jTy zT+RloWm{-PTN>RmhUSPq)PLqEoMw@omz_RLN1UwVK3^q~G&^J}8|$mYVA4=tTigOMhkA3w?w8d02DI zQ?@Lo;rh5tTV;1KQa)ifKF91RDwboD@<6(AsYKT|J*Mn)J7O5;5)vmyu z3V|2B3iqmOY@3nv52buKZ2A(j5EgzxM<@nnx{`;w?wYzNt1m|wSzfRIo+27?NGZJ@ zjdwrxWo}u#kxjyFqI6lBsRO653Y`VEwvXoNJlodsD zIb5cG+}AeezQu!V>73gN7_A}}svKM2k127O8eJx`6%V+2*A$TdCYMG&L}ua_8ycOl z5FR>*FXv5;3P&VO{_vQ8uum)LvcGO}%CB;3v~sb#%L}(1LOZb?FzW8pQxtnPTcKG}`K|5K?2;%#t&&0r>px5HT z+HOA(_HH|ZF?lU-7}=xjo}h>B#N6$;{9@|7yo#*%1W|b033}IZTKD@OXT#`&@o^3B z&xyYdGh-Wyp{TCYfD??A@J1K0469a`B78eI|Nijv5}77qGhp=h$`iR7vUOX8Q8dB& z1{eE1dRjPTM>muKfZY30<-hMf0}}Z%Awam4@tHMRqFj(MUKw}Xdrp;ar4u!3JhFhs zHWtRc7ERut`-B`^Wg8*B+2Z)pS8(vDmIX{zb=!p>pj+-M=0l$gz5p@)HNKqIUPOR$ zrBBR|6ecp%R9#3t?|7HEku~Ams;&lUDW4cs>Q&v02tyh8r*5x{k{>zbvEEThjGp`$ zm^$DONqC?vhFIwbat+K=)zj$eIh@(Y24o?7a6M;=@>Ls3^@|f)RBS28$TEXE)Q#$- z>#Sim!SH^tQTCn8?x&a@-@}eJ2jV~bzw6MyIlFXI+1b-}FxbXE&Jce3N$?_d1RYXA zFzlW&i<5)-c)o?;;a4aO=eebY%|fA_uiF?B(WmVFMCIu|(H+gR>D&)YNdP$VrGHx2 zx?j~oJfBI5j7HfjmQn9PYU|2Eo~rPRerZ&w5J;+mAy+0caypqQ1)hx)1o_Q-Y0m&2 z4kx^FH$}3DHw0YRzVRJNbua`zi{P6!HS&|@Ua7Pl0aG948(tbx#<*?iv~4Lyez+;0 z8|9EuM!u~)_JKaozCE@+vq%!?xch_V0YTld0Mlvt zO@qGS66gU{sNfT(mlk)Hm}nvi1Vg%Jp{v#3wz68=&x{r@=!|17@s*pP^JEAjqe z7+eVqDNT&8(g~HpUmknW-x*`kVSpaIy1lL1yFr=y0t^@L^>|(g@JF*3Ph~X{YCynb zI^$25tDi^M#-Wu5ZI*%-{d7MkAgtYJnp_epATx1MXQlC+B|7?>a~!94w&76C(b~or zr;t*q65-r1`gB8pVSG^Yp=E_3u{ql-Lnf^|ztSqDAcJD*)9Dg>?zcGJRS{UEau#P6 zSwRkjk<53>-g&=iU4UzY9h}oVjMgjYOJ`Rb~2v4UPhoFRi0sQ0P`Tzg` diff --git a/mobile/android/base/resources/drawable-hdpi/fxaccount_ddarrow_active.png b/mobile/android/base/resources/drawable-hdpi/fxaccount_ddarrow_active.png index a8782e2d66561e93a04a582a8c7fde57de949717..4abb71ee3cdb8c9c33617bffa9bffad6e5fb46d7 100644 GIT binary patch delta 267 zcmdnaGn;9GWIZzj14F#OQ(SNFyM^^0LZ=_F4V#}J9jTPL38Yfuni z?rvb}O8Eaj`KcgNVt_XZ?a|>`W}s|5f6ReJN50ksw%TT zGyfz#XHs!jxnua~gZbyZmgnb`zcl_H`z_)dlhdUS8_WM6=l1vDGWVFYy9#IR?R( delta 1585 zcmV-12G04L0=Ep18Gi-<003ys24VmJ1SDxgLr_UWLm*IcZ)Rz1WdHy;5rtLXZ`)K9 zK8bHqq!vFQSVxD7#jjOUTe%w=t;PmPlcnuS7NzOfDkS7OH;Jhm2ixhks!w}?HwOFx zK-mKiNIW4824Z{J_Q14BQ-><5Nl1I>#1A1R?FCigyLMtHQ-8!<_4>;>-#OzPB2U0>6&-yU_zY3Z)N8g&6u$@i_-VHW-18jp(>4SGs{)sOoDz7^$0t2b zAwLO@&?@T{t$zr-20XmjW-qs4UjrD(li^iv8@eK9k+ZFmVRFymFOPAzG5-%Pn|1W; zU4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1d;)kMQS_;jeRSUEM_*s9 z6y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q<e zQ49StnLA#O$SG~RmBN%C%MQABp&82-O2*OYCV#DFdS?;Z*af?u7ut}Y-O}uI1{itR zKfF3G=6?np+g;RBVz#5eN9aUEBTg1AV%4ciJETyaGL*!eYB2Us1 zY~6V|kK@OLjItNKEuvASJIAkZzsa#!KU3KO{2yYo>@XW=6Qr;=*qiJKOTjw94h0Hw zZ8{Yy(|suQ^Sn=WR2Di;Q1bjheJF@g&e`u8`hU%j{)U>cODpsvPtY+mTkR7d2NP&@ zH_|?*YimF34m`>RyZFxSzH4iA{BiS*-HUCudyxsZBha|V0wy{p~~=f z!U=dI9X(tD(aCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*EVH4eoU1-&7pEV~_ zPRe`a7v+@vy!^5}8?Y3)UmlaErx1PNCUic=krUUi< zlM^sHI^bs*bequ4U491N4x&k`cGfn^6<67>s;?;te9E{oUDZd2 z70omi&*dmKceuU6i=!mIgCdUTLEihmMRwf`ZSGq{hyTJm>sDx6s1tqd5cR(r+JA=d zPJHGwqKgOhy1nA(qe$cikyARb-}@cuOXA&hx6ycj_f^j)L^~fh8vm|08arPi{}$0@ z^FLVtad>PSD-!?!0nSN8K~y*q?UYL|15p&m?>*DfqzgnuG?h?|YCE8bk4Y^&D5A)iddS>nfw3${&zBW z<{X86a=BW2OT3Lu>(;XB;M099CBr}_3JogD?Q0xhlq#)doFWt3`^Of5!!&uEbGNh3 zV~ZbRp*7|H~8LE#1Rj&NRzUH>FQy zDJoWme*2Rs@mM(Ibk)~#4u8$xeLAALdV07$pXui~s6l6GMW5(fXQ2%c@ho(6HNg@I zHQSPrNa`h-9M=%MsNr7dU@B`^_-JC@-`Ql~ j!{hU$IG}B+vLNwq#*n6~gz&;m00000NkvXXu0mjf(&P$b diff --git a/mobile/android/base/resources/drawable-hdpi/fxaccount_ddarrow_inactive.png b/mobile/android/base/resources/drawable-hdpi/fxaccount_ddarrow_inactive.png index 8314fc45b04f9969a20990fd0194e2ca9c0d8c6c..204562d39f09be565fbe3df4a04b157dd94222c9 100644 GIT binary patch delta 267 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 literal 9730 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 diff --git a/mobile/android/base/resources/drawable-hdpi/fxaccount_sync_icon.png b/mobile/android/base/resources/drawable-hdpi/fxaccount_sync_icon.png index fe2e174886c9f4864029dcde4d5634554e4050e8..1b6e67572fb215857031bc88474009299016ce99 100644 GIT binary patch literal 1074 zcmeAS@N?(olHy`uVBq!ia0vp^dLYcf3?viMZ?gg^mUKs7M+SzC{oH>NL43yIAa^H* zb?0PW0@-{4J|V6^K`{n~hrz55Lf9ULvEC11dl15U-H+ixFi8Ew5TH2gEgul$ejqbY z5XgPt#|mVCxoi)D*?>|AJ`mx^iXTA?n69f_gvL6Nj6|mj(VF227KZx~SFi;okeV||%>jR(*frj|A zbulnJ2m{&za>?ajhI>HA1JwkvoeyBR2UHfsb}y7=qdLRgV3zxVEI=3D^JfMM-tlL- z6~uDip9SbnpnHI_cY%%x1L*~!Fg7(`z3D)2N0tQn1v4=HyZ86TJK=APe_kujh~M+m z@Iv6@?VmZ$syp&+4mtXZ4e;rk@aR zO$!s4+F8ryQhw6+ft8)R^~$2crz@_7Eiz_jU|@>%ba4#vINmxnJ^7Y_KpU%}+zpX4 zY62X}0%1%nP7MxWv(vVeZ2$QGzw*|Uo9dBatNA6Ydp%`O|L)o7 z_lnnezOVUhRh7tVdM`O%vv^)N`|f#Q{e}J449;IJU3LHJuiG4dOb$Ng_Wx&8KIhF$ zhxpevviX8L7d=X-kyvEkRz6Q*liBA*X9V5tIoV|e_dahwna}grPv$?>KtEV>P ziMsCT7T(@dAa^Iqamn0OtDjpuop-6-X2k=0?@2Q@R<-3VKi1i;Xy!6AWuEn}2VC0c z-d%8eG5z;`xBE7!eM=)ADxEWl+Bcmy_Ik%a8Rk(3{k@Z6hg*%^|!k4J@GWQt? z8Z|#~Yck%x&-LhvwZ*TsAFwrL*XbX$XK(4dP$^KNVo@@yE5M2)OGqZoOKc(Mo>g6o zxbhF4cvaY2e*Qu2>G~|D53kDPTz;`Wn9NkWL9+h#9_85$;u#A~(xRSj{4jZAiuD10 z8R7i>A^hp~8+f1n-t#K&VY{`$<(%YODql}{y$oJdd;C1Vd&ueh_#6zF}Frmfb?#OQ#stePCcSeR+Li$M>7}n>Mb`^QhKhI{W?H zlxqo1=QHncl^9={A$qALSGlNey?*Zo->t&#m8$;fy#ltg-L`$WF#Fr@57W=@{v>~9 z_5Gw!BW}$&+gG|r`9<`e=y#M_*WU|S`eIG@vwblVU&Hlvng6CAou|C)Ry=oA{;$>j Ss%wC$nZeW5&t;ucLK6T;;M@uT literal 3204 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 Ee}DYJivR!s diff --git a/mobile/android/base/resources/drawable-mdpi/fxaccount_ddarrow_active.png b/mobile/android/base/resources/drawable-mdpi/fxaccount_ddarrow_active.png index d1fd254cd5f29da2be41454691777ad78b64ab56..bb978372f0eaa8809130f20a41387f0530703d2a 100644 GIT binary patch delta 197 zcmaFPb(L{~L_G^L0|SE?ufjDT#ggvm>&U>cv7h@-A}f&3SRCZ;#IWw1%u66gCBP@d z6-ZmT`kT6VTe$`3+j!~P*Z@T=UHq+_{ViMqtlfbqaKoY9ATzm3g8YIRe!IL=6J*() zHT7oW->ODYUhcWw(%4w~^<69@&&%EA@AZ;r@T!y> pJzy6w75FN!SD<)7TGJVJh8Pvm*CFQ8+(1JZJYD@<);T3K0RTopJaPa4 delta 1376 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 U-wfB7g#Z8m07*qoM6N<$g2*tkoB#j- literal 4934 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 Z%}q>f-p}>+{R{LSgQu&X%Q~loCIBSwxE=ri delta 589 zcmV-T0eSaefwW^{L9a%BKPWN%_+AW3auXJt}l zVPtu6$z?nM00I3;L_t(|+RT`-P69y?hWE(PKw>npHrOc@Zy;{~R5ohl34qc@!NMAz zK#j35F#(?dh%ayz+IiSQK}^6HL7Z6z0=TE%?!q$3WH%w1e1G@vFtf83^J(qF{Uj_2 z@EG~Lb-*3)I(TLC=FagG-})y+1eOf=G5EUAZ$O|DfL&<;0+>9(_yw6a7d#DMH7Ouc zrR;GmDpmxjoG&1NL5QjbRlE$3F9%?q`5yuXU>N1%<(~=x3_`pt7-mK(P$~VJLggjG zaHXh>{8R{j@PCwX!G?LXJHIEM`$QHj!THYfYR)L!P;uqdNKdn!?e zy{>RC3l(51W?F!Ty&hk`XjRE0EkONOca%f4Dp<|d0e|%ISZDpG1{<_m%CT&^`^Hs) zG?{DD)l&Y8pnru9jwXNm?(Ma7lZDp7fodv1Ryf3hJ5e3#a1I-(pddN2?E~}Xy?j5~ zx0Q0}K})ySbteL0HYRn5W+vAlP)Sr63#Qb;(a7tPUp3JEQ*c5Ruhx+w;$>NJ8b&xM zE@>_kjz&O6Csz@SsoA~&F!@z@{cvcWmwWvXjM!O8Fum_X0=Ohydt)9Y!ez5BXub;W bw*UhGwamDv?qDCi00000NkvXXu0mjf3UCG& diff --git a/mobile/android/base/resources/drawable-mdpi/sync_desktop.png b/mobile/android/base/resources/drawable-mdpi/sync_desktop.png index e470ebc6d671e612b89cf858a3ff2ae6b655da2b..83f98d3c0b114737f70f7f59340dff790fbbe38d 100644 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfvmUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIDN0X`wFKzb$)z+C#Y1}M!@666=m@X*2Ju8q&N=3fsBfMT|uE{-7@=aUm0 z*wth;7R)%v9J-)&p)zBnZ85tu`zp@GOpGUL)D|#E9pDLe4PjJglVMmh+lX<6@CObB aMg}=o?-{bJa}$6DF?hQAxvX)NU%yoPLZ()n8pH!m9v3tZQ3=BtMj&HpBPfeBWAelz>ZGWK zLuPIe530SA?pTZ#V3?xi5;jG3b`@PsA43=nqY=}V>Ccaz(!exi`iP)%s+&ZkW>3jO z1Es#4UK-P52HkZ4bQUEdU?Hr5qIKN%rJ_uibtSS6j#(O%A$Uxtej27>mUM4W17ZMA)CSu~rP*etT6xLB8&pE;bz-1d7_QGmd4NWcvFGmb)Tr`xTpr zVQf)zS;%m~m8w8h{Xf*QR?t4qqCffmQ`pZFG^5gRDK`2*BdPu{Lmvfxs zRTuk59qjm{jti0lBItk-hAW%LML2=6m?#t~UPf3>ka#F@92vU-=ukD?v;*$$vbd^B z8QaI2t)q-0(Hfary^uSKN{|xD$iy0-6D=rUz|M|1)WxRg==-vEz>cf`!joy(*w;E1FUsFe$ z>Mz6}pIy7?9Rv9*o9<07Uw?7>-K8-8@*~r7YF3+meyt(h#(kVVyk<@sdQ*3~DLygX z*!F3B=Kk7qtD2j0q0W|PEf1Q#_{Q~Jt<+Lt$DviJ=Tl(5?ez)Pqp|r4TL;YOCTX{{0qh4*^c6I2^wNS%G}U;vjb? zhIQv;UIIB10X`wFKzb%NP`PD}22hT@B*-tA!RCea$FQVFoVJBPArDU%#}JM4$q5IT zBCei3xIlwJ>j29W0|N$5))frZmLehtShxaS1~O`KB(NCmV(?yQ!J@=+MsWj!=CcC_ l7_|;OWwky~v?}5dK`gk*%%+KM=-TdPySid(-7dI@XtT+*8`?Zfrf#~3 z*5W}y6ja2U-~;sHK|v3Kih5Aci+E8FK2Q)rr0T&#p-#5l>Y*AYnFs&({oj1~{}Vmk zTbrY+q71_{=eA|?bOzzuG>?A$YV{|bR+6qF>2>-^Me{I|GMo|yIZGSBd8`>D2cF_~ zhH2Po7K)^(?vQoI;a5a4p6Hvkfrk!NJ-M!BO(@3(rMHQ;9g3IQ% zs)u{4-37fms3#1zV+&{xWJ+LRqJh8~vVA#7vNc|ruES%V1+@?|m}I9!71bV~I35Nf zC&YA!5RfDewTY61Hi9@raURkk#Za3pN^*P?n0{EA%`^Jtd?q`ci|&$anGjdz`AVh2 zRRqrQ26&W6BtnjOJVqm8{)kPqAZGjP>I@m|>z?Tn)3HIwsFj>yl4PmUsVi9S46W@? z+e8iH1I^_T2g57X16B3^p_Vlh?UOwIqjy$fzcAurK97B8*wg8c>t7e9a%IKC8gaaW z;|$eZ>?u3M@ym`2lwJvJKmrGA=0O39oW->vaoS6PhoT%uGK6%r0MPIMXy_l!ihgA*D8pDFvY}ltSsQl+YHBBT-P4lvKxN9DUfrHmPHc zKiKp?v0>d Date: Wed, 12 Feb 2014 13:38:05 -0800 Subject: [PATCH 11/28] Bug 969356 - Backed out because this change hides the scrollbar and clips bottom tiles in portrait/snapped. --HG-- extra : rebase_source : a8cdf8b61b76c8f816dfb3b8771aff836462f097 --- browser/metro/theme/browser.css | 4 ++++ browser/metro/theme/start.css | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/browser/metro/theme/browser.css b/browser/metro/theme/browser.css index 8569fe2f58d..49b9fc43d29 100644 --- a/browser/metro/theme/browser.css +++ b/browser/metro/theme/browser.css @@ -245,6 +245,10 @@ documenttab[selected] .documenttab-selection:-moz-locale-dir(rtl) { /* Start UI ----------------------------------------------------------------- */ +#content-viewport[startpage] .active-tab-notificationbox { + padding-bottom: @toolbar_height@; +} + #urlbar-autocomplete[viewstate="snapped"], #urlbar-autocomplete[viewstate="portrait"]{ -moz-box-orient: vertical; diff --git a/browser/metro/theme/start.css b/browser/metro/theme/start.css index b5ace24ce1b..185324cbe7e 100644 --- a/browser/metro/theme/start.css +++ b/browser/metro/theme/start.css @@ -22,7 +22,6 @@ #startui-body { height: 100%; margin: 0; - padding-bottom: @toolbar_height@; } #start-container { From 5db21c6f4019748cf2717de55825115e25b5e893 Mon Sep 17 00:00:00 2001 From: Gijs Kruitbosch Date: Wed, 12 Feb 2014 21:53:29 +0000 Subject: [PATCH 12/28] Backed out changeset 113b3bb5ba8c (bug 969376) for m-bc orange on a CLOSED TREE --- browser/base/content/test/general/browser.ini | 2 -- .../test/general/browser_menuButtonFitts.js | 32 ------------------- browser/themes/linux/browser.css | 4 --- browser/themes/osx/browser.css | 7 ---- .../customizableui/panelUIOverlay.inc.css | 4 +++ browser/themes/windows/browser.css | 5 --- 6 files changed, 4 insertions(+), 50 deletions(-) delete mode 100644 browser/base/content/test/general/browser_menuButtonFitts.js diff --git a/browser/base/content/test/general/browser.ini b/browser/base/content/test/general/browser.ini index b70588b9360..f090da2a036 100644 --- a/browser/base/content/test/general/browser.ini +++ b/browser/base/content/test/general/browser.ini @@ -268,8 +268,6 @@ skip-if = true # browser_drag.js is disabled, as it needs to be updated for the [browser_locationBarCommand.js] skip-if = os == "linux" # Intermittent failures, bug 917535 [browser_locationBarExternalLoad.js] -[browser_menuButtonFitts.js] -skip-if = os != "win" # The Fitts Law menu button is only supported on Windows (bug 969376) [browser_middleMouse_inherit.js] [browser_minimize.js] [browser_mixedcontent_securityflags.js] diff --git a/browser/base/content/test/general/browser_menuButtonFitts.js b/browser/base/content/test/general/browser_menuButtonFitts.js deleted file mode 100644 index bb14922ff08..00000000000 --- a/browser/base/content/test/general/browser_menuButtonFitts.js +++ /dev/null @@ -1,32 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -function test () { - waitForExplicitFinish(); - window.maximize(); - - // Find where the nav-bar is vertically. - var navBar = document.getElementById("nav-bar"); - var boundingRect = navBar.getBoundingClientRect(); - var yPixel = boundingRect.top + Math.floor(boundingRect.height / 2); - var xPixel = boundingRect.width - 1; // Use the last pixel of the screen since it is maximized. - - function onPopupHidden() { - PanelUI.panel.removeEventListener("popuphidden", onPopupHidden); - window.restore(); - finish(); - } - function onPopupShown() { - PanelUI.panel.removeEventListener("popupshown", onPopupShown); - ok(true, "Clicking at the far edge of the window opened the menu popup."); - PanelUI.panel.addEventListener("popuphidden", onPopupHidden); - PanelUI.hide(); - } - registerCleanupFunction(function() { - PanelUI.panel.removeEventListener("popupshown", onPopupShown); - PanelUI.panel.removeEventListener("popuphidden", onPopupHidden); - }); - PanelUI.panel.addEventListener("popupshown", onPopupShown); - EventUtils.synthesizeMouseAtPoint(xPixel, yPixel, {}, window); -} diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css index ccc98ff06c5..a6684f2880f 100644 --- a/browser/themes/linux/browser.css +++ b/browser/themes/linux/browser.css @@ -591,10 +591,6 @@ toolbarbutton[sdk-button="true"][cui-areatype="toolbar"] > .toolbarbutton-icon { width: 32px; } -#nav-bar #PanelUI-menu-button { - -moz-padding-start: 7px; - -moz-padding-end: 5px; -} :-moz-any(#TabsToolbar, #nav-bar) .toolbarbutton-1 > .toolbarbutton-menubutton-button:not([disabled]):hover > .toolbarbutton-icon, :-moz-any(#TabsToolbar, #nav-bar) .toolbarbutton-1:not([buttonover]):not([open]):hover > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon, diff --git a/browser/themes/osx/browser.css b/browser/themes/osx/browser.css index 4525f7233da..cb9e16ef276 100644 --- a/browser/themes/osx/browser.css +++ b/browser/themes/osx/browser.css @@ -507,13 +507,6 @@ toolbar .toolbarbutton-1:not([type="menu-button"]), -moz-margin-start: 10px; } -#nav-bar #PanelUI-menu-button { - margin-top: 0; - margin-bottom: 0; - -moz-margin-start: 9px; - -moz-margin-end: 7px; -} - @media not all and (min-resolution: 2dppx) { %include ../shared/toolbarbuttons.inc.css %include ../shared/menupanel.inc.css diff --git a/browser/themes/shared/customizableui/panelUIOverlay.inc.css b/browser/themes/shared/customizableui/panelUIOverlay.inc.css index 40ba0b67a20..ce1d8e3ab8c 100644 --- a/browser/themes/shared/customizableui/panelUIOverlay.inc.css +++ b/browser/themes/shared/customizableui/panelUIOverlay.inc.css @@ -26,6 +26,10 @@ background-repeat: no-repeat; } +#PanelUI-menu-button { + margin: 0 7px 0 9px; +} + .panel-subviews { padding: 4px; background-color: hsla(0,0%,100%,.97); diff --git a/browser/themes/windows/browser.css b/browser/themes/windows/browser.css index 27826b24ce2..2d977cf6abd 100644 --- a/browser/themes/windows/browser.css +++ b/browser/themes/windows/browser.css @@ -496,11 +496,6 @@ menuitem.bookmark-item { -moz-box-pack: center; } -#nav-bar #PanelUI-menu-button { - -moz-padding-start: 7px; - -moz-padding-end: 5px; -} - #nav-bar .toolbarbutton-1[type=menu]:not(#back-button):not(#forward-button):not(#feed-button):not(#social-provider-button):not(#PanelUI-menu-button) { padding-left: 5px; padding-right: 5px; From faa6a7aff1dd55f5bac16c28360d51d9e8c997b0 Mon Sep 17 00:00:00 2001 From: Margaret Leibovic Date: Wed, 12 Feb 2014 14:42:33 -0800 Subject: [PATCH 13/28] Bug 961773 - (Part 1) Update reading list panel id used to open reading list from reader mode. r=lucasr --- mobile/android/chrome/content/aboutReader.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mobile/android/chrome/content/aboutReader.js b/mobile/android/chrome/content/aboutReader.js index aaa9aa471a2..549461b8027 100644 --- a/mobile/android/chrome/content/aboutReader.js +++ b/mobile/android/chrome/content/aboutReader.js @@ -7,6 +7,9 @@ let Ci = Components.interfaces, Cc = Components.classes, Cu = Components.utils; Cu.import("resource://gre/modules/Services.jsm") Cu.import("resource://gre/modules/XPCOMUtils.jsm"); +// Panel ID defined in HomeConfig.java. +const READING_LIST_PANEL_ID = "20f4549a-64ad-4c32-93e4-1dcef792733b"; + XPCOMUtils.defineLazyGetter(window, "gChromeWin", function () window.QueryInterface(Ci.nsIInterfaceRequestor) .getInterface(Ci.nsIWebNavigation) @@ -366,7 +369,7 @@ AboutReader.prototype = { if (!this._article || this._readingListCount < 1) return; - gChromeWin.BrowserApp.loadURI("about:home?page=reading_list"); + gChromeWin.BrowserApp.loadURI("about:home?page=" + READING_LIST_PANEL_ID); }, _onShare: function Reader_onShare() { From 13cb611078998f8d3f6d43c3e5ed9937236c08ca Mon Sep 17 00:00:00 2001 From: Margaret Leibovic Date: Wed, 12 Feb 2014 14:42:35 -0800 Subject: [PATCH 14/28] Bug 961773 - (Part 2) Check to make sure a panel is in the adapter before setting it as the current item in HomePager. r=lucasr --- mobile/android/base/home/HomePager.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/mobile/android/base/home/HomePager.java b/mobile/android/base/home/HomePager.java index 248673fb135..b885692034c 100644 --- a/mobile/android/base/home/HomePager.java +++ b/mobile/android/base/home/HomePager.java @@ -318,10 +318,11 @@ public class HomePager extends ViewPager { setAdapter(adapter); // Use the default panel as defined in the HomePager's configuration - // if the initial panel wasn't explicitly set by the show() caller. - if (mInitialPanelId != null) { - // XXX: Handle the case where the desired panel isn't currently in the adapter (bug 949178) - setCurrentItem(adapter.getItemPosition(mInitialPanelId), false); + // if the initial panel wasn't explicitly set by the show() caller, + // or if the initial panel is not found in the adapter. + final int itemPosition = (mInitialPanelId == null) ? -1 : adapter.getItemPosition(mInitialPanelId); + if (itemPosition > -1) { + setCurrentItem(itemPosition, false); mInitialPanelId = null; } else { for (int i = 0; i < count; i++) { From aef1d3b82ff1b4fa86e890a4a37fb908ac82c079 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 12 Feb 2014 17:16:44 -0800 Subject: [PATCH 15/28] Bug 970336 - test_restrequest.js times out on Android 2.3 emulator; r=rnewman --HG-- extra : rebase_source : 686beb0c5ccfab3ebde27f554a3fa60439df5e53 extra : amend_source : 787e95b977f4557073f8c30b9e4e97269e6d1572 --- services/common/tests/unit/test_restrequest.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/services/common/tests/unit/test_restrequest.js b/services/common/tests/unit/test_restrequest.js index 0ad6a6a93f0..84ca624d085 100644 --- a/services/common/tests/unit/test_restrequest.js +++ b/services/common/tests/unit/test_restrequest.js @@ -717,8 +717,14 @@ add_test(function test_timeout() { do_check_eq(error.result, Cr.NS_ERROR_NET_TIMEOUT); do_check_eq(this.status, this.ABORTED); - _("Closing connection."); - server_connection.close(); + // server_connection is undefined on the Android emulator for reasons + // unknown. Yet, we still get here. If this test is refactored, we should + // investigate the reason why the above callback is behaving differently. + if (server_connection) { + _("Closing connection."); + server_connection.close(); + } + _("Shutting down server."); server.stop(run_next_test); }); From f773440fdb1bd1dd2d936232ac8895954aa72ce2 Mon Sep 17 00:00:00 2001 From: Brian Nicholson Date: Wed, 12 Feb 2014 21:47:11 -0800 Subject: [PATCH 16/28] Bug 970719 - Animate progress bar to end of the screen. r=lucasr --- mobile/android/base/Tabs.java | 2 + .../android/base/toolbar/BrowserToolbar.java | 2 +- .../base/toolbar/ToolbarProgressView.java | 43 +++++++++++++------ 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/mobile/android/base/Tabs.java b/mobile/android/base/Tabs.java index 16ff5882ff8..2acaa78dc27 100644 --- a/mobile/android/base/Tabs.java +++ b/mobile/android/base/Tabs.java @@ -56,6 +56,7 @@ public class Tabs implements GeckoEventListener { private static final int LOAD_PROGRESS_START = 20; private static final int LOAD_PROGRESS_LOCATION_CHANGE = 60; private static final int LOAD_PROGRESS_LOADED = 80; + private static final int LOAD_PROGRESS_STOP = 100; public static final int LOADURL_NONE = 0; public static final int LOADURL_NEW_TAB = 1 << 0; @@ -459,6 +460,7 @@ public class Tabs implements GeckoEventListener { notifyListeners(tab, Tabs.TabEvents.START); } else if ((state & GeckoAppShell.WPL_STATE_STOP) != 0) { tab.handleDocumentStop(message.getBoolean("success")); + tab.setLoadProgress(LOAD_PROGRESS_STOP); notifyListeners(tab, Tabs.TabEvents.STOP); } } diff --git a/mobile/android/base/toolbar/BrowserToolbar.java b/mobile/android/base/toolbar/BrowserToolbar.java index a0b7986d134..ea66aba53e6 100644 --- a/mobile/android/base/toolbar/BrowserToolbar.java +++ b/mobile/android/base/toolbar/BrowserToolbar.java @@ -475,13 +475,13 @@ public class BrowserToolbar extends GeckoRelativeLayout case LOCATION_CHANGE: case LOAD_ERROR: case LOADED: + case STOP: flags.add(UpdateFlags.PROGRESS); if (mProgressBar.getVisibility() == View.VISIBLE) { mProgressBar.animateProgress(tab.getLoadProgress()); } break; - case STOP: case SELECTED: flags.add(UpdateFlags.PROGRESS); updateProgressVisibility(); diff --git a/mobile/android/base/toolbar/ToolbarProgressView.java b/mobile/android/base/toolbar/ToolbarProgressView.java index b11e56a1f3c..00b4cfc0165 100644 --- a/mobile/android/base/toolbar/ToolbarProgressView.java +++ b/mobile/android/base/toolbar/ToolbarProgressView.java @@ -35,8 +35,9 @@ import android.view.View; * perceived performance. */ public class ToolbarProgressView extends ImageView { - public static final int MAX_PROGRESS = 10000; - private static final int MSG_UPDATE = 42; + private static final int MAX_PROGRESS = 10000; + private static final int MSG_UPDATE = 0; + private static final int MSG_HIDE = 1; private static final int STEPS = 10; private static final int DELAY = 40; @@ -68,15 +69,23 @@ public class ToolbarProgressView extends ImageView { mHandler = new Handler() { @Override public void handleMessage(Message msg) { - if (msg.what == MSG_UPDATE) { - final int progress = Math.min(mTargetProgress, mCurrentProgress + mIncrement); - mCurrentProgress = progress; + switch (msg.what) { + case MSG_UPDATE: + mCurrentProgress = Math.min(mTargetProgress, mCurrentProgress + mIncrement); - updateBounds(); + updateBounds(); - if (progress < mTargetProgress) { - sendMessageDelayed(mHandler.obtainMessage(MSG_UPDATE), DELAY); - } + if (mCurrentProgress < mTargetProgress) { + final int delay = (mTargetProgress < MAX_PROGRESS) ? DELAY : DELAY / 4; + sendMessageDelayed(mHandler.obtainMessage(msg.what), delay); + } else if (mCurrentProgress == MAX_PROGRESS) { + sendMessageDelayed(mHandler.obtainMessage(MSG_HIDE), DELAY); + } + break; + + case MSG_HIDE: + setVisibility(View.GONE); + break; } } @@ -107,7 +116,7 @@ public class ToolbarProgressView extends ImageView { mCurrentProgress = mTargetProgress = getAbsoluteProgress(progressPercentage); updateBounds(); - mHandler.removeMessages(MSG_UPDATE); + clearMessages(); } /** @@ -118,18 +127,26 @@ public class ToolbarProgressView extends ImageView { */ void animateProgress(int progressPercentage) { final int absoluteProgress = getAbsoluteProgress(progressPercentage); - if (absoluteProgress == mTargetProgress) { + if (absoluteProgress <= mTargetProgress) { + // After we manually click stop, we can still receive page load + // events (e.g., DOMContentLoaded). Updating for other updates + // after a STOP event can freeze the progress bar, so guard against + // that here. return; } - mCurrentProgress = mTargetProgress; mTargetProgress = absoluteProgress; mIncrement = (mTargetProgress - mCurrentProgress) / STEPS; - mHandler.removeMessages(MSG_UPDATE); + clearMessages(); mHandler.sendEmptyMessage(MSG_UPDATE); } + private void clearMessages() { + mHandler.removeMessages(MSG_UPDATE); + mHandler.removeMessages(MSG_HIDE); + } + private int getAbsoluteProgress(int progressPercentage) { if (progressPercentage < 0) { return 0; From db81771f25edc73b23d054ebae86f694ef7a025a Mon Sep 17 00:00:00 2001 From: Mark Hammond Date: Thu, 13 Feb 2014 17:07:53 +1100 Subject: [PATCH 17/28] Bug 972129 - introduce a custom backoff schedule if failure is due to identity manager not being ready. r=rnewman --- services/sync/modules/constants.js | 5 +++++ services/sync/modules/policies.js | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/services/sync/modules/constants.js b/services/sync/modules/constants.js index 0e19ad28b9c..08bb8e06b20 100644 --- a/services/sync/modules/constants.js +++ b/services/sync/modules/constants.js @@ -54,6 +54,11 @@ HMAC_EVENT_INTERVAL: 600000, // How long to wait between sync attempts if the Master Password is locked. MASTER_PASSWORD_LOCKED_RETRY_INTERVAL: 15 * 60 * 1000, // 15 minutes +// How long to initially wait between sync attempts if the identity manager is +// not ready. As we expect this to become ready relatively quickly, we retry +// in (IDENTITY_NOT_READY_RETRY_INTERVAL * num_failures) seconds. +IDENTITY_NOT_READY_RETRY_INTERVAL: 5 * 1000, // 5 seconds + // Separate from the ID fetch batch size to allow tuning for mobile. MOBILE_BATCH_SIZE: 50, diff --git a/services/sync/modules/policies.js b/services/sync/modules/policies.js index f3a8093f692..191b97ea812 100644 --- a/services/sync/modules/policies.js +++ b/services/sync/modules/policies.js @@ -30,6 +30,8 @@ SyncScheduler.prototype = { LOGIN_FAILED_INVALID_PASSPHRASE, LOGIN_FAILED_LOGIN_REJECTED], + _loginNotReadyCounter: 0, + /** * The nsITimer object that schedules the next sync. See scheduleNextSync(). */ @@ -113,6 +115,10 @@ SyncScheduler.prototype = { // we'll handle that later Status.resetBackoff(); + // Reset the loginNotReady counter, just in-case the user signs in + // as another user and re-hits the not-ready state. + this._loginNotReadyCounter = 0; + this.globalScore = 0; break; case "weave:service:sync:finish": @@ -155,6 +161,13 @@ SyncScheduler.prototype = { this._log.debug("Couldn't log in: master password is locked."); this._log.trace("Scheduling a sync at MASTER_PASSWORD_LOCKED_RETRY_INTERVAL"); this.scheduleAtInterval(MASTER_PASSWORD_LOCKED_RETRY_INTERVAL); + } else if (Status.login == LOGIN_FAILED_NOT_READY) { + this._loginNotReadyCounter++; + this._log.debug("Couldn't log in: identity not ready."); + this._log.trace("Scheduling a sync at IDENTITY_NOT_READY_RETRY_INTERVAL * " + + this._loginNotReadyCounter); + this.scheduleAtInterval(IDENTITY_NOT_READY_RETRY_INTERVAL * + this._loginNotReadyCounter); } else if (this._fatalLoginStatus.indexOf(Status.login) == -1) { // Not a fatal login error, just an intermittent network or server // issue. Keep on syncin'. From b6fb53ef0fc5ff6e660851f86c7da4de566563ad Mon Sep 17 00:00:00 2001 From: Panos Astithas Date: Thu, 13 Feb 2014 09:18:36 +0200 Subject: [PATCH 18/28] The debugger shouldn't try to connect to the tracer actor if it is not present or if tracing is disabled (bug 970536). r=fitzgen --- .../devtools/debugger/debugger-controller.js | 6 ++- browser/devtools/debugger/test/browser.ini | 1 + .../debugger/test/browser_dbg_tracing-06.js | 39 +++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 browser/devtools/debugger/test/browser_dbg_tracing-06.js diff --git a/browser/devtools/debugger/debugger-controller.js b/browser/devtools/debugger/debugger-controller.js index a31ba04cc34..316d69d7a1e 100644 --- a/browser/devtools/debugger/debugger-controller.js +++ b/browser/devtools/debugger/debugger-controller.js @@ -240,7 +240,11 @@ let DebuggerController = { } else { this._startDebuggingTab(startedDebugging.resolve); const startedTracing = promise.defer(); - this._startTracingTab(traceActor, startedTracing.resolve); + if (Prefs.tracerEnabled && traceActor) { + this._startTracingTab(traceActor, startedTracing.resolve); + } else { + startedTracing.resolve(); + } return promise.all([startedDebugging.promise, startedTracing.promise]); } diff --git a/browser/devtools/debugger/test/browser.ini b/browser/devtools/debugger/test/browser.ini index 37f62cec9cd..a53f9dc5873 100644 --- a/browser/devtools/debugger/test/browser.ini +++ b/browser/devtools/debugger/test/browser.ini @@ -214,6 +214,7 @@ support-files = [browser_dbg_tracing-03.js] [browser_dbg_tracing-04.js] [browser_dbg_tracing-05.js] +[browser_dbg_tracing-06.js] [browser_dbg_variables-view-01.js] [browser_dbg_variables-view-02.js] [browser_dbg_variables-view-03.js] diff --git a/browser/devtools/debugger/test/browser_dbg_tracing-06.js b/browser/devtools/debugger/test/browser_dbg_tracing-06.js new file mode 100644 index 00000000000..db46b581c4b --- /dev/null +++ b/browser/devtools/debugger/test/browser_dbg_tracing-06.js @@ -0,0 +1,39 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +/** + * Test that the tracer doesn't connect to the backend when tracing is disabled. + */ + +const TAB_URL = EXAMPLE_URL + "doc_tracing-01.html"; +const TRACER_PREF = "devtools.debugger.tracer"; + +let gTab, gDebuggee, gPanel, gDebugger; +let gOriginalPref = Services.prefs.getBoolPref(TRACER_PREF); +Services.prefs.setBoolPref(TRACER_PREF, false); + +function test() { + initDebugger(TAB_URL).then(([aTab, aDebuggee, aPanel]) => { + gTab = aTab; + gDebuggee = aDebuggee; + gPanel = aPanel; + gDebugger = gPanel.panelWin; + + waitForSourceShown(gPanel, "code_tracing-01.js") + .then(() => { + ok(!gDebugger.DebuggerController.traceClient, "Should not have a trace client"); + closeDebuggerAndFinish(gPanel); + }) + .then(null, aError => { + ok(false, "Got an error: " + aError.message + "\n" + aError.stack); + }); + }); +} + +registerCleanupFunction(function() { + gTab = null; + gDebuggee = null; + gPanel = null; + gDebugger = null; + Services.prefs.setBoolPref(TRACER_PREF, gOriginalPref); +}); From cc49ef68714caaf1aca85ee80fa7030e149fb138 Mon Sep 17 00:00:00 2001 From: Lucas Rocha Date: Thu, 13 Feb 2014 11:19:57 +0000 Subject: [PATCH 19/28] Bug 968188 - Introduce 'action' option in Home.panels.add() API (r=margaret) --- mobile/android/modules/Home.jsm | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/mobile/android/modules/Home.jsm b/mobile/android/modules/Home.jsm index 916204d2ef9..cff422b4b76 100644 --- a/mobile/android/modules/Home.jsm +++ b/mobile/android/modules/Home.jsm @@ -163,6 +163,12 @@ let HomePanels = Object.freeze({ GRID: "grid" }), + // Valid actions for a panel. + Action: Object.freeze({ + INSTALL: "install", + REFRESH: "refresh" + }), + // Holds the currrent set of registered panels. _panels: {}, @@ -202,8 +208,11 @@ let HomePanels = Object.freeze({ throw "Home.panels: Can't create a home panel without an id and title!"; } - // Bail if the panel already exists - if (panel.id in this._panels) { + let action = options.action; + + // Bail if the panel already exists, except when we're refreshing + // an existing panel instance. + if (panel.id in this._panels && action != this.Action.REFRESH) { throw "Home.panels: Panel already exists: id = " + panel.id; } @@ -223,9 +232,24 @@ let HomePanels = Object.freeze({ this._panels[panel.id] = panel; - if (options.autoInstall) { + if (action) { + let messageType; + + switch(action) { + case this.Action.INSTALL: + messageType = "HomePanels:Install"; + break; + + case this.Action.REFRESH: + messageType = "HomePanels:Refresh"; + break; + + default: + throw "Home.panels: Invalid action for panel: panel.id = " + panel.id + ", action = " + action; + } + sendMessageToJava({ - type: "HomePanels:Install", + type: messageType, panel: this._panelToJSON(panel) }); } From ed912ba1ab6bb23a15b24b7bacae3d1641203345 Mon Sep 17 00:00:00 2001 From: Tim Taubert Date: Tue, 11 Feb 2014 15:38:48 +0100 Subject: [PATCH 20/28] Bug 969656 - "Sign in again" menu panel UI should link directly to the sign-in page, rather than preferences r=gavin --- browser/base/content/browser-fxaccounts.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/browser/base/content/browser-fxaccounts.js b/browser/base/content/browser-fxaccounts.js index b3a170cb72b..676ebc4336c 100644 --- a/browser/base/content/browser-fxaccounts.js +++ b/browser/base/content/browser-fxaccounts.js @@ -195,8 +195,12 @@ let gFxAccounts = { }, onMenuPanelCommand: function (event) { - if (event.originalTarget.hasAttribute("signedin")) { + let button = event.originalTarget; + + if (button.hasAttribute("signedin")) { this.openPreferences(); + } else if (button.hasAttribute("failed")) { + this.openSignInAgainPage(); } else { this.openAccountsPage(); } From c05e8efc3f4184ea7b2e790ee1f901fba04156ff Mon Sep 17 00:00:00 2001 From: Lucas Rocha Date: Thu, 13 Feb 2014 11:46:24 +0000 Subject: [PATCH 21/28] Bug 968170 - Use base class for ConcurrentLinkedQueue (r=margaret) --- mobile/android/base/home/HomeConfigInvalidator.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mobile/android/base/home/HomeConfigInvalidator.java b/mobile/android/base/home/HomeConfigInvalidator.java index 8b0d82fb09b..be26badc512 100644 --- a/mobile/android/base/home/HomeConfigInvalidator.java +++ b/mobile/android/base/home/HomeConfigInvalidator.java @@ -25,6 +25,7 @@ import org.json.JSONObject; import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.Queue; import java.util.Set; import java.util.concurrent.ConcurrentLinkedQueue; @@ -44,7 +45,7 @@ public class HomeConfigInvalidator implements GeckoEventListener { private Context mContext; private HomeConfig mHomeConfig; - private final ConcurrentLinkedQueue mPendingChanges = new ConcurrentLinkedQueue(); + private final Queue mPendingChanges = new ConcurrentLinkedQueue(); private final Runnable mInvalidationRunnable = new InvalidationRunnable(); public static HomeConfigInvalidator getInstance() { From 111df1d8233ecf17a94b3729bd7cce5058e77363 Mon Sep 17 00:00:00 2001 From: Lucas Rocha Date: Thu, 13 Feb 2014 11:46:25 +0000 Subject: [PATCH 22/28] Bug 968170 - Change HomeConfigInvalidator to operate on pending changes (r=margaret) --- .../base/home/HomeConfigInvalidator.java | 56 +++++++++++++------ 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/mobile/android/base/home/HomeConfigInvalidator.java b/mobile/android/base/home/HomeConfigInvalidator.java index be26badc512..fe31ec9d887 100644 --- a/mobile/android/base/home/HomeConfigInvalidator.java +++ b/mobile/android/base/home/HomeConfigInvalidator.java @@ -42,10 +42,25 @@ public class HomeConfigInvalidator implements GeckoEventListener { private static final String JSON_KEY_PANEL = "panel"; + private enum ChangeType { + REMOVE, + INSTALL + } + + private static class ConfigChange { + private final ChangeType type; + private final PanelConfig target; + + public ConfigChange(ChangeType type, PanelConfig target) { + this.type = type; + this.target = target; + } + } + private Context mContext; private HomeConfig mHomeConfig; - private final Queue mPendingChanges = new ConcurrentLinkedQueue(); + private final Queue mPendingChanges = new ConcurrentLinkedQueue(); private final Runnable mInvalidationRunnable = new InvalidationRunnable(); public static HomeConfigInvalidator getInstance() { @@ -82,7 +97,7 @@ public class HomeConfigInvalidator implements GeckoEventListener { * Runs in the gecko thread. */ private void handlePanelInstall(PanelConfig panelConfig) { - mPendingChanges.offer(panelConfig); + mPendingChanges.offer(new ConfigChange(ChangeType.INSTALL, panelConfig)); Log.d(LOGTAG, "handlePanelInstall: " + mPendingChanges.size()); scheduleInvalidation(); @@ -92,8 +107,7 @@ public class HomeConfigInvalidator implements GeckoEventListener { * Runs in the gecko thread. */ private void handlePanelRemove(PanelConfig panelConfig) { - panelConfig.setIsDeleted(true); - mPendingChanges.offer(panelConfig); + mPendingChanges.offer(new ConfigChange(ChangeType.REMOVE, panelConfig)); Log.d(LOGTAG, "handlePanelRemove: " + mPendingChanges.size()); scheduleInvalidation(); @@ -116,22 +130,28 @@ public class HomeConfigInvalidator implements GeckoEventListener { */ private List executePendingChanges(List panelConfigs) { while (!mPendingChanges.isEmpty()) { - final PanelConfig panelConfig = mPendingChanges.poll(); + final ConfigChange pendingChange = mPendingChanges.poll(); + final PanelConfig panelConfig = pendingChange.target; + final String id = panelConfig.getId(); - if (panelConfig.isDeleted()) { - if (panelConfigs.remove(panelConfig)) { - Log.d(LOGTAG, "executePendingChanges: removed panel " + id); - } - } else { - final int index = panelConfigs.indexOf(panelConfig); - if (index >= 0) { - panelConfigs.set(index, panelConfig); - Log.d(LOGTAG, "executePendingChanges: replaced position " + index + " with " + id); - } else { - panelConfigs.add(panelConfig); - Log.d(LOGTAG, "executePendingChanges: added panel " + id); - } + switch (pendingChange.type) { + case REMOVE: + if (panelConfigs.remove(panelConfig)) { + Log.d(LOGTAG, "executePendingChanges: removed panel " + id); + } + break; + + case INSTALL: + final int index = panelConfigs.indexOf(panelConfig); + if (index >= 0) { + panelConfigs.set(index, panelConfig); + Log.d(LOGTAG, "executePendingChanges: replaced position " + index + " with " + id); + } else { + panelConfigs.add(panelConfig); + Log.d(LOGTAG, "executePendingChanges: added panel " + id); + } + break; } } From 8588506603bd241b74c1c4edf0b9a2af72e613a5 Mon Sep 17 00:00:00 2001 From: Lucas Rocha Date: Thu, 13 Feb 2014 11:46:25 +0000 Subject: [PATCH 23/28] Bug 968170 - Remove unused DELETED state from PanelConfig (r=margaret) --- mobile/android/base/home/HomeConfig.java | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/mobile/android/base/home/HomeConfig.java b/mobile/android/base/home/HomeConfig.java index 9655a53842c..27b74899614 100644 --- a/mobile/android/base/home/HomeConfig.java +++ b/mobile/android/base/home/HomeConfig.java @@ -106,8 +106,7 @@ public final class HomeConfig { public enum Flags { DEFAULT_PANEL, - DISABLED_PANEL, - DELETED_PANEL + DISABLED_PANEL } public PanelConfig(JSONObject json) throws JSONException, IllegalArgumentException { @@ -286,18 +285,6 @@ public final class HomeConfig { } } - public boolean isDeleted() { - return mFlags.contains(Flags.DELETED_PANEL); - } - - public void setIsDeleted(boolean isDeleted) { - if (isDeleted) { - mFlags.add(Flags.DELETED_PANEL); - } else { - mFlags.remove(Flags.DELETED_PANEL); - } - } - public JSONObject toJSON() throws JSONException { final JSONObject json = new JSONObject(); @@ -596,12 +583,6 @@ public final class HomeConfig { } public void save(List panelConfigs) { - for (PanelConfig panelConfig : panelConfigs) { - if (panelConfig.isDeleted()) { - throw new IllegalArgumentException("Should never save a deleted PanelConfig: " + panelConfig.getId()); - } - } - mBackend.save(panelConfigs); } From 7d77666147907fd81ae5e06a7be3695f7c13a25f Mon Sep 17 00:00:00 2001 From: Lucas Rocha Date: Thu, 13 Feb 2014 11:46:25 +0000 Subject: [PATCH 24/28] Bug 968170 - Factor out method to replace a PanelConfig in a list (r=margaret) --- .../base/home/HomeConfigInvalidator.java | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/mobile/android/base/home/HomeConfigInvalidator.java b/mobile/android/base/home/HomeConfigInvalidator.java index fe31ec9d887..4af1d73ee35 100644 --- a/mobile/android/base/home/HomeConfigInvalidator.java +++ b/mobile/android/base/home/HomeConfigInvalidator.java @@ -125,6 +125,22 @@ public class HomeConfigInvalidator implements GeckoEventListener { Log.d(LOGTAG, "scheduleInvalidation: scheduled new invalidation"); } + /** + * Replace an element if a matching PanelConfig is + * present in the given list. + */ + private boolean replacePanelConfig(List panelConfigs, PanelConfig panelConfig) { + final int index = panelConfigs.indexOf(panelConfig); + if (index >= 0) { + panelConfigs.set(index, panelConfig); + Log.d(LOGTAG, "executePendingChanges: replaced position " + index + " with " + panelConfig.getId()); + + return true; + } + + return false; + } + /** * Runs in the background thread. */ @@ -143,11 +159,7 @@ public class HomeConfigInvalidator implements GeckoEventListener { break; case INSTALL: - final int index = panelConfigs.indexOf(panelConfig); - if (index >= 0) { - panelConfigs.set(index, panelConfig); - Log.d(LOGTAG, "executePendingChanges: replaced position " + index + " with " + id); - } else { + if (!replacePanelConfig(panelConfigs, panelConfig)) { panelConfigs.add(panelConfig); Log.d(LOGTAG, "executePendingChanges: added panel " + id); } From a16cb91d73d57c9d22995bef66cbbfb2a206a0db Mon Sep 17 00:00:00 2001 From: Lucas Rocha Date: Thu, 13 Feb 2014 11:46:25 +0000 Subject: [PATCH 25/28] Bug 968170 - Only refresh all HomeConfig entries when requested (r=margaret) --- .../base/home/HomeConfigInvalidator.java | 49 ++++++++++++++++--- 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/mobile/android/base/home/HomeConfigInvalidator.java b/mobile/android/base/home/HomeConfigInvalidator.java index 4af1d73ee35..c8512b3acf3 100644 --- a/mobile/android/base/home/HomeConfigInvalidator.java +++ b/mobile/android/base/home/HomeConfigInvalidator.java @@ -39,12 +39,14 @@ public class HomeConfigInvalidator implements GeckoEventListener { private static final String EVENT_HOMEPANELS_INSTALL = "HomePanels:Install"; private static final String EVENT_HOMEPANELS_REMOVE = "HomePanels:Remove"; + private static final String EVENT_HOMEPANELS_REFRESH = "HomePanels:Refresh"; private static final String JSON_KEY_PANEL = "panel"; private enum ChangeType { REMOVE, - INSTALL + INSTALL, + REFRESH } private static class ConfigChange { @@ -73,6 +75,11 @@ public class HomeConfigInvalidator implements GeckoEventListener { GeckoAppShell.getEventDispatcher().registerEventListener(EVENT_HOMEPANELS_INSTALL, this); GeckoAppShell.getEventDispatcher().registerEventListener(EVENT_HOMEPANELS_REMOVE, this); + GeckoAppShell.getEventDispatcher().registerEventListener(EVENT_HOMEPANELS_REFRESH, this); + } + + public void refreshAll() { + handlePanelRefresh(null); } @Override @@ -87,6 +94,9 @@ public class HomeConfigInvalidator implements GeckoEventListener { } else if (event.equals(EVENT_HOMEPANELS_REMOVE)) { Log.d(LOGTAG, EVENT_HOMEPANELS_REMOVE); handlePanelRemove(panelConfig); + } else if (event.equals(EVENT_HOMEPANELS_REFRESH)) { + Log.d(LOGTAG, EVENT_HOMEPANELS_REFRESH); + handlePanelRefresh(panelConfig); } } catch (Exception e) { Log.e(LOGTAG, "Failed to handle event " + event, e); @@ -113,6 +123,19 @@ public class HomeConfigInvalidator implements GeckoEventListener { scheduleInvalidation(); } + /** + * Schedules a panel refresh in HomeConfig. Runs in the gecko thread. + * + * @param panelConfig the target PanelConfig instance or NULL to refresh + * all HomeConfig entries. + */ + private void handlePanelRefresh(PanelConfig panelConfig) { + mPendingChanges.offer(new ConfigChange(ChangeType.REFRESH, panelConfig)); + Log.d(LOGTAG, "handlePanelRefresh: " + mPendingChanges.size()); + + scheduleInvalidation(); + } + /** * Runs in the gecko or main thread. */ @@ -145,29 +168,43 @@ public class HomeConfigInvalidator implements GeckoEventListener { * Runs in the background thread. */ private List executePendingChanges(List panelConfigs) { + boolean shouldRefreshAll = false; + while (!mPendingChanges.isEmpty()) { final ConfigChange pendingChange = mPendingChanges.poll(); final PanelConfig panelConfig = pendingChange.target; - final String id = panelConfig.getId(); - switch (pendingChange.type) { case REMOVE: if (panelConfigs.remove(panelConfig)) { - Log.d(LOGTAG, "executePendingChanges: removed panel " + id); + Log.d(LOGTAG, "executePendingChanges: removed panel " + panelConfig.getId()); } break; case INSTALL: if (!replacePanelConfig(panelConfigs, panelConfig)) { panelConfigs.add(panelConfig); - Log.d(LOGTAG, "executePendingChanges: added panel " + id); + Log.d(LOGTAG, "executePendingChanges: added panel " + panelConfig.getId()); + } + break; + + case REFRESH: + if (panelConfig != null) { + if (!replacePanelConfig(panelConfigs, panelConfig)) { + Log.w(LOGTAG, "Tried to refresh non-existing panel " + panelConfig.getId()); + } + } else { + shouldRefreshAll = true; } break; } } - return executeRefresh(panelConfigs); + if (shouldRefreshAll) { + return executeRefresh(panelConfigs); + } else { + return panelConfigs; + } } /** From c7d4334ec4f6fd36f4b85280cc6b32768cba727e Mon Sep 17 00:00:00 2001 From: Lucas Rocha Date: Thu, 13 Feb 2014 11:48:56 +0000 Subject: [PATCH 26/28] Bug 935542 - PinSiteDialog fragment should be owned by TopSitesPanel (r=mfinkle) --- mobile/android/base/home/TopSitesPanel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mobile/android/base/home/TopSitesPanel.java b/mobile/android/base/home/TopSitesPanel.java index a4399aca36e..a15794d41bb 100644 --- a/mobile/android/base/home/TopSitesPanel.java +++ b/mobile/android/base/home/TopSitesPanel.java @@ -449,7 +449,7 @@ public class TopSitesPanel extends HomeFragment { public void onEditPinnedSite(int position, String searchTerm) { mPosition = position; - final FragmentManager manager = getActivity().getSupportFragmentManager(); + final FragmentManager manager = getChildFragmentManager(); PinSiteDialog dialog = (PinSiteDialog) manager.findFragmentByTag(TAG_PIN_SITE); if (dialog == null) { dialog = PinSiteDialog.newInstance(); From a5e5d77b99e1d5b756f777bf8b5eda446eb092fa Mon Sep 17 00:00:00 2001 From: Lucas Rocha Date: Thu, 13 Feb 2014 11:48:56 +0000 Subject: [PATCH 27/28] Bug 935542 - Unset site selection listener when PinSiteDialog gets destroyed (r=mfinkle) --- mobile/android/base/home/PinSiteDialog.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mobile/android/base/home/PinSiteDialog.java b/mobile/android/base/home/PinSiteDialog.java index 19bfca990ec..afd7dad7c88 100644 --- a/mobile/android/base/home/PinSiteDialog.java +++ b/mobile/android/base/home/PinSiteDialog.java @@ -175,6 +175,15 @@ class PinSiteDialog extends DialogFragment { filter(""); } + @Override + public void onDestroyView() { + super.onDestroyView(); + + // Discard any additional site selection as the dialog + // is getting destroyed (see bug 935542). + setOnSiteSelectedListener(null); + } + public void setSearchTerm(String searchTerm) { mSearchTerm = searchTerm; } From bcd64a726540c9ccc63fa0505ff0b1799f6c4712 Mon Sep 17 00:00:00 2001 From: Lucas Rocha Date: Thu, 13 Feb 2014 11:53:39 +0000 Subject: [PATCH 28/28] Bug 971745 - Ignore Back presses while initial bookmark list is loading (r=mfinkle) --- mobile/android/base/home/BookmarksListAdapter.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mobile/android/base/home/BookmarksListAdapter.java b/mobile/android/base/home/BookmarksListAdapter.java index 7f9e3d0623a..a2aeb68e085 100644 --- a/mobile/android/base/home/BookmarksListAdapter.java +++ b/mobile/android/base/home/BookmarksListAdapter.java @@ -130,8 +130,10 @@ class BookmarksListAdapter extends MultiTypeCursorAdapter { * @return Whether the adapter successfully moved to a parent folder. */ public boolean moveToParentFolder() { - // If we're already at the root, we can't move to a parent folder - if (mParentStack.size() == 1) { + // If we're already at the root, we can't move to a parent folder. + // An empty parent stack here means we're still waiting for the + // initial list of bookmarks and can't go to a parent folder. + if (mParentStack.size() <= 1) { return false; }