summaryrefslogtreecommitdiffstats
path: root/browser/extensions/pdfjs/test/browser_pdfjs_zoom.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/extensions/pdfjs/test/browser_pdfjs_zoom.js')
-rw-r--r--browser/extensions/pdfjs/test/browser_pdfjs_zoom.js154
1 files changed, 154 insertions, 0 deletions
diff --git a/browser/extensions/pdfjs/test/browser_pdfjs_zoom.js b/browser/extensions/pdfjs/test/browser_pdfjs_zoom.js
new file mode 100644
index 000000000..f2b73fd99
--- /dev/null
+++ b/browser/extensions/pdfjs/test/browser_pdfjs_zoom.js
@@ -0,0 +1,154 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+requestLongerTimeout(2);
+
+Components.utils.import("resource://gre/modules/Promise.jsm", this);
+
+const RELATIVE_DIR = "browser/extensions/pdfjs/test/";
+const TESTROOT = "http://example.com/browser/" + RELATIVE_DIR;
+
+const TESTS = [
+ {
+ action: {
+ selector: "button#zoomIn",
+ event: "click"
+ },
+ expectedZoom: 1, // 1 - zoom in
+ message: "Zoomed in using the '+' (zoom in) button"
+ },
+
+ {
+ action: {
+ selector: "button#zoomOut",
+ event: "click"
+ },
+ expectedZoom: -1, // -1 - zoom out
+ message: "Zoomed out using the '-' (zoom out) button"
+ },
+
+ {
+ action: {
+ keyboard: true,
+ keyCode: 61,
+ event: "+"
+ },
+ expectedZoom: 1, // 1 - zoom in
+ message: "Zoomed in using the CTRL++ keys"
+ },
+
+ {
+ action: {
+ keyboard: true,
+ keyCode: 109,
+ event: "-"
+ },
+ expectedZoom: -1, // -1 - zoom out
+ message: "Zoomed out using the CTRL+- keys"
+ },
+
+ {
+ action: {
+ selector: "select#scaleSelect",
+ index: 5,
+ event: "change"
+ },
+ expectedZoom: -1, // -1 - zoom out
+ message: "Zoomed using the zoom picker"
+ }
+];
+
+add_task(function* test() {
+ let handlerService = Cc["@mozilla.org/uriloader/handler-service;1"]
+ .getService(Ci.nsIHandlerService);
+ let mimeService = Cc["@mozilla.org/mime;1"].getService(Ci.nsIMIMEService);
+ let handlerInfo = mimeService.getFromTypeAndExtension('application/pdf', 'pdf');
+
+ // Make sure pdf.js is the default handler.
+ is(handlerInfo.alwaysAskBeforeHandling, false,
+ 'pdf handler defaults to always-ask is false');
+ is(handlerInfo.preferredAction, Ci.nsIHandlerInfo.handleInternally,
+ 'pdf handler defaults to internal');
+
+ info('Pref action: ' + handlerInfo.preferredAction);
+
+ yield BrowserTestUtils.withNewTab({ gBrowser, url: "about:blank" },
+ function* (newTabBrowser) {
+ yield waitForPdfJS(newTabBrowser, TESTROOT + "file_pdfjs_test.pdf" + "#zoom=100");
+
+ yield ContentTask.spawn(newTabBrowser, TESTS, function* (TESTS) {
+ let document = content.document;
+
+ function waitForRender() {
+ return new Promise((resolve) => {
+ document.addEventListener("pagerendered", function onPageRendered(e) {
+ if(e.detail.pageNumber !== 1) {
+ return;
+ }
+
+ document.removeEventListener("pagerendered", onPageRendered, true);
+ resolve();
+ }, true);
+ });
+ }
+
+ // check that PDF is opened with internal viewer
+ Assert.ok(content.document.querySelector("div#viewer"), "document content has viewer UI");
+ Assert.ok("PDFJS" in content.wrappedJSObject, "window content has PDFJS object");
+
+ let initialWidth, previousWidth;
+ initialWidth = previousWidth =
+ parseInt(content.document.querySelector("div#pageContainer1").style.width);
+
+ for (let test of TESTS) {
+ // We zoom using an UI element
+ var ev;
+ if (test.action.selector) {
+ // Get the element and trigger the action for changing the zoom
+ var el = document.querySelector(test.action.selector);
+ Assert.ok(el, "Element '" + test.action.selector + "' has been found");
+
+ if (test.action.index){
+ el.selectedIndex = test.action.index;
+ }
+
+ // Dispatch the event for changing the zoom
+ ev = new Event(test.action.event);
+ }
+ // We zoom using keyboard
+ else {
+ // Simulate key press
+ ev = new content.KeyboardEvent("keydown",
+ { key: test.action.event,
+ keyCode: test.action.keyCode,
+ ctrlKey: true });
+ el = content;
+ }
+
+ el.dispatchEvent(ev);
+ yield waitForRender();
+
+ var pageZoomScale = content.document.querySelector('select#scaleSelect');
+
+ // The zoom value displayed in the zoom select
+ var zoomValue = pageZoomScale.options[pageZoomScale.selectedIndex].innerHTML;
+
+ let pageContainer = content.document.querySelector('div#pageContainer1');
+ let actualWidth = parseInt(pageContainer.style.width);
+
+ // the actual zoom of the PDF document
+ let computedZoomValue = parseInt(((actualWidth/initialWidth).toFixed(2))*100) + "%";
+ Assert.equal(computedZoomValue, zoomValue, "Content has correct zoom");
+
+ // Check that document zooms in the expected way (in/out)
+ let zoom = (actualWidth - previousWidth) * test.expectedZoom;
+ Assert.ok(zoom > 0, test.message);
+
+ previousWidth = actualWidth;
+ }
+
+ var viewer = content.wrappedJSObject.PDFViewerApplication;
+ yield viewer.close();
+ });
+ });
+});