From b8b922196c8a9efd45b3ae69a88afc1499d371f0 Mon Sep 17 00:00:00 2001
From: Yury Delendik <ydelendik@mozilla.com>
Date: Fri, 30 Oct 2015 11:20:29 -0500
Subject: [PATCH] Moves match counter from find UI to the controller.

---
 web/pdf_find_bar.js        | 29 +++++++++++------------------
 web/pdf_find_controller.js | 20 ++++++++++++++++----
 2 files changed, 27 insertions(+), 22 deletions(-)

diff --git a/web/pdf_find_bar.js b/web/pdf_find_bar.js
index 0ab0382ea..b187fd8cd 100644
--- a/web/pdf_find_bar.js
+++ b/web/pdf_find_bar.js
@@ -95,7 +95,8 @@ var PDFFindBar = (function PDFFindBarClosure() {
       return window.dispatchEvent(event);
     },
 
-    updateUIState: function PDFFindBar_updateUIState(state, previous) {
+    updateUIState:
+        function PDFFindBar_updateUIState(state, previous, matchCount) {
       var notFound = false;
       var findMsg = '';
       var status = '';
@@ -132,36 +133,28 @@ var PDFFindBar = (function PDFFindBarClosure() {
 
       this.findField.setAttribute('data-status', status);
       this.findMsg.textContent = findMsg;
-    },
-
-    updateResultsCount: function(matches) {
-      if (!matches) {
-        return this.hideResultsCount();
-      }
 
-      // Loop through and add up all the matches between pages
-      var matchCounter = 0;
+      this.updateResultsCount(matchCount);
+    },
 
-      for (var i = 0, len = matches.length; i < len; i++) {
-        matchCounter += matches[i].length;
+    updateResultsCount: function(matchCount) {
+      if (!this.findResultsCount) {
+        return; // no UI control is provided
       }
 
       // If there are no matches, hide the counter
-      if (!matchCounter) {
-        return this.hideResultsCount();
+      if (!matchCount) {
+        this.findResultsCount.classList.add('hidden');
+        return;
       }
 
       // Create the match counter
-      this.findResultsCount.textContent = matchCounter;
+      this.findResultsCount.textContent = matchCount.toLocaleString();
 
       // Show the counter
       this.findResultsCount.classList.remove('hidden');
     },
 
-    hideResultsCount: function() {
-      this.findResultsCount.classList.add('hidden');
-    },
-
     open: function PDFFindBar_open() {
       if (!this.opened) {
         this.opened = true;
diff --git a/web/pdf_find_controller.js b/web/pdf_find_controller.js
index afac06bd4..9d30067bb 100644
--- a/web/pdf_find_controller.js
+++ b/web/pdf_find_controller.js
@@ -39,6 +39,7 @@ var PDFFindController = (function PDFFindControllerClosure() {
     this.active = false; // If active, find results will be highlighted.
     this.pageContents = []; // Stores the text for each page.
     this.pageMatches = [];
+    this.matchCount = 0;
     this.selected = { // Currently selected match.
       pageIdx: -1,
       matchIdx: -1
@@ -117,8 +118,6 @@ var PDFFindController = (function PDFFindControllerClosure() {
 
       if (queryLen === 0) {
         // Do nothing: the matches should be wiped out already.
-        // Also, reset the result counter back to zero
-        this.findBar.updateResultsCount();
         return;
       }
 
@@ -144,7 +143,10 @@ var PDFFindController = (function PDFFindControllerClosure() {
       }
 
       // Update the matches count
-      this.findBar.updateResultsCount(this.pageMatches);
+      if (matches.length > 0) {
+        this.matchCount += matches.length;
+        this.updateUIResultsCount();
+      }
     },
 
     extractText: function PDFFindController_extractText() {
@@ -236,6 +238,7 @@ var PDFFindController = (function PDFFindControllerClosure() {
         this.hadMatch = false;
         this.resumePageIdx = null;
         this.pageMatches = [];
+        this.matchCount = 0;
         var self = this;
 
         for (var i = 0; i < numPages; i++) {
@@ -392,6 +395,15 @@ var PDFFindController = (function PDFFindControllerClosure() {
       }
     },
 
+    updateUIResultsCount:
+        function PDFFindController_updateUIResultsCount() {
+      if (this.findBar === null) {
+        throw new Error('PDFFindController is not initialized with a ' +
+          'PDFFindBar instance.');
+      }
+      this.findBar.updateResultsCount(this.matchCount);
+    },
+
     updateUIState: function PDFFindController_updateUIState(state, previous) {
       if (this.integratedFind) {
         FirefoxCom.request('updateFindControlState',
@@ -402,7 +414,7 @@ var PDFFindController = (function PDFFindControllerClosure() {
         throw new Error('PDFFindController is not initialized with a ' +
                         'PDFFindBar instance.');
       }
-      this.findBar.updateUIState(state, previous);
+      this.findBar.updateUIState(state, previous, this.matchCount);
     }
   };
   return PDFFindController;