Bug 1321119 - Allow to Sync more tabs and reduce tabs history to 5. r?markh
MozReview-Commit-ID: 7kRg4XQeT4C
--- a/services/sync/modules/engines/tabs.js
+++ b/services/sync/modules/engines/tabs.js
@@ -2,17 +2,17 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
this.EXPORTED_SYMBOLS = ["TabEngine", "TabSetRecord"];
var {classes: Cc, interfaces: Ci, utils: Cu} = Components;
const TABS_TTL = 1814400; // 21 days.
-const TAB_ENTRIES_LIMIT = 25; // How many URLs to include in tab history.
+const TAB_ENTRIES_LIMIT = 5; // How many URLs to include in tab history.
Cu.import("resource://gre/modules/Preferences.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://services-sync/engines.js");
Cu.import("resource://services-sync/engines/clients.js");
Cu.import("resource://services-sync/record.js");
Cu.import("resource://services-sync/util.js");
Cu.import("resource://services-sync/constants.js");
@@ -204,21 +204,24 @@ TabStore.prototype = {
let record = new TabSetRecord(collection, id);
record.clientName = this.engine.service.clientsEngine.localName;
// Sort tabs in descending-used order to grab the most recently used
let tabs = this.getAllTabs(true).sort(function(a, b) {
return b.lastUsed - a.lastUsed;
});
- // Figure out how many tabs we can pack into a payload. Starting with a 28KB
- // payload, we can estimate various overheads from encryption/JSON/WBO.
+ // Figure out how many tabs we can pack into a payload.
+ // See bug 535326 comment 8 for an explanation of the estimation
+ // If the server configuration is absent, we use the old max payload size of 28K
let size = JSON.stringify(tabs).length;
let origLength = tabs.length;
- const MAX_TAB_SIZE = 20000;
+ const MAX_TAB_SIZE = (this.engine.service.serverConfiguration ?
+ this.engine.service.serverConfiguration.max_record_payload_bytes :
+ 28672) / 4 * 3 - 1500;
if (size > MAX_TAB_SIZE) {
// Estimate a little more than the direct fraction to maximize packing
let cutoff = Math.ceil(tabs.length * MAX_TAB_SIZE / size);
tabs = tabs.slice(0, cutoff + 1);
// Keep dropping off the last entry until the data fits
while (JSON.stringify(tabs).length > MAX_TAB_SIZE)
tabs.pop();
--- a/services/sync/tests/unit/test_tab_store.js
+++ b/services/sync/tests/unit/test_tab_store.js
@@ -75,19 +75,19 @@ function test_getAllTabs() {
}
allURLs.splice(35, 0, "about:foo", "about:bar", "about:foobar");
store.getWindowEnumerator = mockGetWindowEnumerator.bind(this, "http://bar.com", 1, 1, () => 45, () => allURLs);
tabs = store.getAllTabs((url) => url.startsWith("about"));
_("Sliced: " + JSON.stringify(tabs));
equal(tabs.length, 1);
- equal(tabs[0].urlHistory.length, 25);
+ equal(tabs[0].urlHistory.length, 5);
equal(tabs[0].urlHistory[0], "http://foo40.bar");
- equal(tabs[0].urlHistory[24], "http://foo16.bar");
+ equal(tabs[0].urlHistory[4], "http://foo36.bar");
}
function test_createRecord() {
let store = getMockStore();
let record;
store.getTabState = mockGetTabState;
store.shouldSkipWindow = mockShouldSkipWindow;