From bc66c8119e1f0dd7373ff003e7288032486b0c2b Mon Sep 17 00:00:00 2001 From: "Adam Dane [:hobophobe]" Date: Wed, 7 May 2014 18:45:24 -0500 Subject: [PATCH 1/2] Add getFindBar for Fx extension --- .../firefox/content/PdfStreamConverter.jsm | 30 ++++++++++++------- test/mozcentral/browser_pdfjs_main.js | 5 ++++ 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/extensions/firefox/content/PdfStreamConverter.jsm b/extensions/firefox/content/PdfStreamConverter.jsm index cbbb121d2..52359ea2f 100644 --- a/extensions/firefox/content/PdfStreamConverter.jsm +++ b/extensions/firefox/content/PdfStreamConverter.jsm @@ -53,12 +53,22 @@ XPCOMUtils.defineLazyServiceGetter(Svc, 'mime', '@mozilla.org/mime;1', 'nsIMIMEService'); +function getContainingBrowser(domWindow) { + return domWindow.QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIWebNavigation) + .QueryInterface(Ci.nsIDocShell) + .chromeEventHandler; +} + function getChromeWindow(domWindow) { - var containingBrowser = domWindow.QueryInterface(Ci.nsIInterfaceRequestor) - .getInterface(Ci.nsIWebNavigation) - .QueryInterface(Ci.nsIDocShell) - .chromeEventHandler; - return containingBrowser.ownerDocument.defaultView; + return getContainingBrowser(domWindow).ownerDocument.defaultView; +} + +function getFindBar(domWindow) { + var browser = getContainingBrowser(domWindow); + var tabbrowser = browser.getTabBrowser(); + var tab = tabbrowser._getTabForBrowser(browser); + return tabbrowser.getFindBar(tab); } function setBoolPref(pref, value) { @@ -320,8 +330,8 @@ ChromeActions.prototype = { // Integrated find is only supported when we're not in a frame and when the // new find events code exists. return this.domWindow.frameElement === null && - getChromeWindow(this.domWindow).gFindBar && - 'updateControlState' in getChromeWindow(this.domWindow).gFindBar; + getFindBar(this.domWindow) && + 'updateControlState' in getFindBar(this.domWindow); }, supportsDocumentFonts: function() { var prefBrowser = getIntPref('browser.display.use_document_fonts', 1); @@ -438,8 +448,7 @@ ChromeActions.prototype = { (findPreviousType !== 'undefined' && findPreviousType !== 'boolean')) { return; } - getChromeWindow(this.domWindow).gFindBar - .updateControlState(result, findPrevious); + getFindBar(this.domWindow).updateControlState(result, findPrevious); }, setPreferences: function(prefs, sendResponse) { var defaultBranch = Services.prefs.getDefaultBranch(PREF_PREFIX + '.'); @@ -917,7 +926,8 @@ PdfStreamConverter.prototype = { }, false, true); if (actions.supportsIntegratedFind()) { var chromeWindow = getChromeWindow(domWindow); - var findEventManager = new FindEventManager(chromeWindow.gFindBar, + var findBar = getFindBar(domWindow); + var findEventManager = new FindEventManager(findBar, domWindow, chromeWindow); findEventManager.bind(); diff --git a/test/mozcentral/browser_pdfjs_main.js b/test/mozcentral/browser_pdfjs_main.js index ba0c251cb..7a8e2068e 100644 --- a/test/mozcentral/browser_pdfjs_main.js +++ b/test/mozcentral/browser_pdfjs_main.js @@ -46,6 +46,11 @@ function runTests(document, window, callback) { ok(document.querySelector('div#viewer'), "document content has viewer UI"); ok('PDFJS' in window.wrappedJSObject, "window content has PDFJS object"); + // + // Browser Find + // + ok(gBrowser.isFindBarInitialized(tab), "Browser FindBar initialized!"); + // // Sidebar: open // From 9f9454d2aeb194c9a9c41b3bf8e26ad4ebd33db5 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Thu, 8 May 2014 09:05:28 -0500 Subject: [PATCH 2/2] Refactors new extension find bar code to support old FF versions --- .../firefox/content/PdfStreamConverter.jsm | 24 ++++++++++++------- test/mozcentral/browser_pdfjs_main.js | 4 ++-- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/extensions/firefox/content/PdfStreamConverter.jsm b/extensions/firefox/content/PdfStreamConverter.jsm index 52359ea2f..691d22efd 100644 --- a/extensions/firefox/content/PdfStreamConverter.jsm +++ b/extensions/firefox/content/PdfStreamConverter.jsm @@ -66,9 +66,15 @@ function getChromeWindow(domWindow) { function getFindBar(domWindow) { var browser = getContainingBrowser(domWindow); - var tabbrowser = browser.getTabBrowser(); - var tab = tabbrowser._getTabForBrowser(browser); - return tabbrowser.getFindBar(tab); + try { + var tabbrowser = browser.getTabBrowser(); + var tab = tabbrowser._getTabForBrowser(browser); + return tabbrowser.getFindBar(tab); + } catch (e) { + // FF22 has no _getTabForBrowser, and FF24 has no getFindBar + var chromeWindow = browser.ownerDocument.defaultView; + return chromeWindow.gFindBar; + } } function setBoolPref(pref, value) { @@ -327,11 +333,13 @@ ChromeActions.prototype = { return getBoolPref(PREF_PREFIX + '.pdfBugEnabled', false); }, supportsIntegratedFind: function() { - // Integrated find is only supported when we're not in a frame and when the - // new find events code exists. - return this.domWindow.frameElement === null && - getFindBar(this.domWindow) && - 'updateControlState' in getFindBar(this.domWindow); + // Integrated find is only supported when we're not in a frame + if (this.domWindow.frameElement !== null) { + return false; + } + // ... and when the new find events code exists. + var findBar = getFindBar(this.domWindow); + return findBar && ('updateControlState' in findBar); }, supportsDocumentFonts: function() { var prefBrowser = getIntPref('browser.display.use_document_fonts', 1); diff --git a/test/mozcentral/browser_pdfjs_main.js b/test/mozcentral/browser_pdfjs_main.js index 7a8e2068e..9dd1e7a68 100644 --- a/test/mozcentral/browser_pdfjs_main.js +++ b/test/mozcentral/browser_pdfjs_main.js @@ -32,13 +32,13 @@ function test() { // Runs tests after all 'load' event handlers have fired off window.addEventListener("documentload", function() { - runTests(document, window, finish); + runTests(document, window, tab, finish); }, false, true); }, true); } -function runTests(document, window, callback) { +function runTests(document, window, tab, callback) { // // Overall sanity tests