Bug 1046709 - If visits are missing from sync hist record, insert a fake one r=nalexander draft
authorGrigory Kruglov <gkruglov@mozilla.com>
Fri, 01 Apr 2016 12:42:51 -0700
changeset 347073 2ff0e4455f40e37b83bc3f149bf9e4766ad5ff1a
parent 347072 81127843e257e3e937ee26125453e3111beaf303
child 347074 b03f7e94cc6fbf83706168c73c5518ef8559a306
child 347075 a7c49649495a65acc01c07aebe039e529f01fc4d
push id14472
push usergkruglov@mozilla.com
push dateFri, 01 Apr 2016 20:34:58 +0000
reviewersnalexander
bugs1046709
milestone48.0a1
Bug 1046709 - If visits are missing from sync hist record, insert a fake one r=nalexander MozReview-Commit-ID: FGoRmjy7Nja
mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/android/AndroidBrowserHistoryDataAccessor.java
--- a/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/android/AndroidBrowserHistoryDataAccessor.java
+++ b/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/android/AndroidBrowserHistoryDataAccessor.java
@@ -128,15 +128,26 @@ public class AndroidBrowserHistoryDataAc
       Logger.debug(LOG_TAG, "Inserted " + inserted + " records, as expected.");
     } else {
       Logger.debug(LOG_TAG, "Inserted " +
                    inserted + " records but expected " +
                    size     + " records; continuing to update visits.");
     }
 
     for (Record record : records) {
-      VisitsHelper.bulkInsertRemoteVisits(
-              context.getContentResolver(), record.guid, ((HistoryRecord) record).visits, true);
+      HistoryRecord rec = (HistoryRecord) record;
+
+      // Default history "visits" count is 1 (ensured on insertion), so in case visits array is empty/missing,
+      // we need to insert a fake visit to keep our counter and list of visits in sync.
+      if (rec.visits == null || rec.visits.size() == 0) {
+        ContentValues fakeVisit = new ContentValues();
+        fakeVisit.put(BrowserContract.Visits.HISTORY_GUID, rec.guid);
+        fakeVisit.put(BrowserContract.Visits.DATE_VISITED, rec.lastModified);
+        context.getContentResolver().insert(BrowserContract.Visits.CONTENT_URI, fakeVisit);
+      } else {
+        VisitsHelper.bulkInsertRemoteVisits(
+                context.getContentResolver(), rec.guid, rec.visits, true);
+      }
     }
 
     return inserted;
   }
 }