Bug 1234331 - Remove from readercache when unbookmarking page r=margaret draft
authorAndrzej Hunt <ahunt@mozilla.com>
Tue, 22 Mar 2016 14:25:09 -0700
changeset 343515 cc8e298bf08dfb426b37709cd73d53c57a6655ea
parent 343514 3237c925db734111863a8f2cac87e62f19624fe7
child 343516 1523fe3f463976d9140d9b6c0e816d90be811cfc
child 343949 daa6bbdcffcc817682ab0e2bd3af340448f90704
push id13648
push userahunt@mozilla.com
push dateTue, 22 Mar 2016 21:53:51 +0000
reviewersmargaret
bugs1234331
milestone48.0a1
Bug 1234331 - Remove from readercache when unbookmarking page r=margaret MozReview-Commit-ID: EaJarGuccBE
mobile/android/base/java/org/mozilla/gecko/Tab.java
mobile/android/base/java/org/mozilla/gecko/reader/ReadingListHelper.java
mobile/android/chrome/content/Reader.js
mobile/android/chrome/content/browser.js
--- a/mobile/android/base/java/org/mozilla/gecko/Tab.java
+++ b/mobile/android/base/java/org/mozilla/gecko/Tab.java
@@ -587,16 +587,20 @@ public class Tab {
 
         ThreadUtils.postToBackgroundThread(new Runnable() {
             @Override
             public void run() {
                 mDB.removeBookmarksWithURL(getContentResolver(), pageUrl);
                 Tabs.getInstance().notifyListeners(Tab.this, Tabs.TabEvents.BOOKMARK_REMOVED);
             }
         });
+
+        if (AboutPages.isAboutReader(url)) {
+            ReadingListHelper.removeCachedReaderItem(pageUrl, mAppContext);
+        }
     }
 
     public void addToReadingList() {
         ThreadUtils.postToBackgroundThread(new Runnable() {
             @Override
             public void run() {
                 String url = getURL();
                 if (url == null) {
--- a/mobile/android/base/java/org/mozilla/gecko/reader/ReadingListHelper.java
+++ b/mobile/android/base/java/org/mozilla/gecko/reader/ReadingListHelper.java
@@ -297,16 +297,34 @@ public final class ReadingListHelper imp
         ReaderCacheHelper rch = GeckoProfile.get(context).getReaderCacheHelper();
 
         if (!rch.isURLCached(url)) {
             GeckoAppShell.sendEventToGecko(
                     GeckoEvent.createBroadcastEvent("Reader:AddToCache", url));
         }
     }
 
+    public static void removeCachedReaderItem(final String url, Context context) {
+        if (AboutPages.isAboutReader(url)) {
+            throw new IllegalArgumentException("Page url must be original (not about:reader) url");
+        }
+
+        ReaderCacheHelper rch = GeckoProfile.get(context).getReaderCacheHelper();
+
+        if (rch.isURLCached(url)) {
+            GeckoAppShell.sendEventToGecko(
+                    GeckoEvent.createBroadcastEvent("Reader:RemoveFromCache", url));
+        }
+
+        // When removing items from the cache we can probably spare ourselves the async callback
+        // that we use when adding cached items. We know the cached item will be gone, hence
+        // we no longer need to track it in the ReaderCacheHelper
+        rch.remove(url);
+    }
+
     @RobocopTarget
     /**
      * Test code will want to disable background fetches to avoid upsetting
      * the test harness. Call this by accessing the instance from BrowserApp.
      */
     public void disableBackgroundFetches() {
         fetchInBackground = false;
     }
--- a/mobile/android/chrome/content/Reader.js
+++ b/mobile/android/chrome/content/Reader.js
@@ -71,17 +71,17 @@ var Reader = {
   observe: function Reader_observe(aMessage, aTopic, aData) {
     switch (aTopic) {
       case "Reader:FetchContent": {
         let data = JSON.parse(aData);
         this._fetchContent(data.url, data.id);
         break;
       }
 
-      case "Reader:Removed": {
+      case "Reader:RemoveFromCache": {
         ReaderMode.removeArticleFromCache(aData).catch(e => Cu.reportError("Error removing article from cache: " + e));
         break;
       }
 
       case "Reader:AddToCache": {
         // If the article is coming from reader mode, we must have fetched it already.
         this._getArticle(aData).then((article) => {
           console.log("trying");
--- a/mobile/android/chrome/content/browser.js
+++ b/mobile/android/chrome/content/browser.js
@@ -147,17 +147,17 @@ var lazilyLoadedObserverScripts = [
   ["MemoryObserver", ["memory-pressure", "Memory:Dump"], "chrome://browser/content/MemoryObserver.js"],
   ["ConsoleAPI", ["console-api-log-event"], "chrome://browser/content/ConsoleAPI.js"],
   ["FindHelper", ["FindInPage:Opened", "FindInPage:Closed", "Tab:Selected"], "chrome://browser/content/FindHelper.js"],
   ["PermissionsHelper", ["Permissions:Check", "Permissions:Get", "Permissions:Clear"], "chrome://browser/content/PermissionsHelper.js"],
   ["FeedHandler", ["Feeds:Subscribe"], "chrome://browser/content/FeedHandler.js"],
   ["Feedback", ["Feedback:Show"], "chrome://browser/content/Feedback.js"],
   ["SelectionHandler", ["TextSelection:Get"], "chrome://browser/content/SelectionHandler.js"],
   ["EmbedRT", ["GeckoView:ImportScript"], "chrome://browser/content/EmbedRT.js"],
-  ["Reader", ["Reader:FetchContent", "Reader:AddToCache", "Reader:Removed"], "chrome://browser/content/Reader.js"],
+  ["Reader", ["Reader:FetchContent", "Reader:AddToCache", "Reader:RemoveFromCache"], "chrome://browser/content/Reader.js"],
   ["PrintHelper", ["Print:PDF"], "chrome://browser/content/PrintHelper.js"],
 ];
 if (AppConstants.NIGHTLY_BUILD) {
   lazilyLoadedObserverScripts.push(
     ["ActionBarHandler", ["TextSelection:Get", "TextSelection:Action", "TextSelection:End"],
       "chrome://browser/content/ActionBarHandler.js"]
   );
 }
@@ -184,16 +184,17 @@ lazilyLoadedObserverScripts.forEach(func
     Services.obs.addObserver(observer, notification, false);
   });
 });
 
 // Lazily-loaded browser scripts that use message listeners.
 [
   ["Reader", [
     ["Reader:AddToCache", false],
+    ["Reader:RemoveFromCache", false],
     ["Reader:ArticleGet", false],
     ["Reader:DropdownClosed", true], // 'true' allows us to survive mid-air cycle-collection.
     ["Reader:DropdownOpened", false],
     ["Reader:FaviconRequest", false],
     ["Reader:ToolbarHidden", false],
     ["Reader:SystemUIVisibility", false],
     ["Reader:UpdateReaderButton", false],
     ["Reader:SetIntPref", false],