Bug 1321119 - Allow to Sync more tabs and reduce tabs history to 5. r?markh draft
authorEdouard Oger <eoger@fastmail.com>
Wed, 01 Mar 2017 13:47:20 -0500
changeset 493228 c70e7ce275cd3993b5f31780c291110ae2d0d629
parent 493227 77d5a39a4677ed8e32a7ed46561c962d807fa7b1
child 547794 8168dfbd5c8c73b305c065612353e11fbfb3a45a
push id47686
push userbmo:eoger@fastmail.com
push dateFri, 03 Mar 2017 16:21:56 +0000
reviewersmarkh
bugs1321119
milestone54.0a1
Bug 1321119 - Allow to Sync more tabs and reduce tabs history to 5. r?markh MozReview-Commit-ID: 7kRg4XQeT4C
services/sync/modules/engines/tabs.js
services/sync/tests/unit/test_tab_store.js
--- 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;