echo('### Building mozilla-central extension');
var MOZCENTRAL_DIR = BUILD_DIR + 'mozcentral/',
- MOZCENTRAL_EXTENSION_DIR = MOZCENTRAL_DIR + 'browser/app/profile/extensions/uriloader@pdf.js/',
+ MOZCENTRAL_EXTENSION_DIR = MOZCENTRAL_DIR + 'browser/extensions/pdfjs/',
MOZCENTRAL_CONTENT_DIR = MOZCENTRAL_EXTENSION_DIR + 'content/',
MOZCENTRAL_L10N_DIR = MOZCENTRAL_DIR + 'browser/locales/en-US/pdfviewer/',
+ MOZCENTRAL_TEST_DIR = MOZCENTRAL_EXTENSION_DIR + 'test/',
FIREFOX_CONTENT_DIR = EXTENSION_SRC_DIR + '/firefox/content/',
FIREFOX_EXTENSION_FILES_TO_COPY =
['*.js',
// Copy extension files
cd('extensions/firefox');
cp('-R', FIREFOX_EXTENSION_FILES_TO_COPY, ROOT_DIR + MOZCENTRAL_EXTENSION_DIR);
+ mv('-f', ROOT_DIR + MOZCENTRAL_EXTENSION_DIR + '/chrome-mozcentral.manifest',
+ ROOT_DIR + MOZCENTRAL_EXTENSION_DIR + '/chrome.manifest')
cd(ROOT_DIR);
// Copy a standalone version of pdf.js inside the content directory
extensionFiles += file+'\n';
});
extensionFiles.to('extension-files');
+ cd(ROOT_DIR);
+
+ // Copy test files
+ mkdir('-p', MOZCENTRAL_TEST_DIR);
+ cp('-Rf', 'test/mozcentral/*', MOZCENTRAL_TEST_DIR);
};
//
--- /dev/null
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+
+DEPTH = ../../../..
+topsrcdir = @top_srcdir@
+srcdir = @srcdir@
+VPATH = @srcdir@
+relativesrcdir = browser/extensions/pdfjs/test
+
+include $(DEPTH)/config/autoconf.mk
+include $(topsrcdir)/config/rules.mk
+
+_BROWSER_TEST_FILES = \
+ head.js \
+ browser_pdfjs_main.js \
+ file_pdfjs_test.pdf \
+ $(NULL)
+
+libs:: $(_BROWSER_TEST_FILES)
+ $(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/browser/$(relativesrcdir)
--- /dev/null
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+const RELATIVE_DIR = "browser/extensions/pdfjs/test/";
+const TESTROOT = "http://example.com/browser/" + RELATIVE_DIR;
+
+function test() {
+ waitForExplicitFinish();
+
+ var tab = gBrowser.addTab(TESTROOT + "file_pdfjs_test.pdf");
+ var newTabBrowser = gBrowser.getBrowserForTab(tab);
+ newTabBrowser.addEventListener("pagechange", function onPageChange() {
+ newTabBrowser.removeEventListener("pagechange", onPageChange, true);
+
+ var document = newTabBrowser.contentDocument,
+ window = newTabBrowser.contentWindow;
+
+ //
+ // Overall sanity tests
+ //
+ ok(document.querySelector('div#viewer'), "document content has viewer UI");
+ ok('PDFJS' in window.wrappedJSObject, "window content has PDFJS object");
+
+ //
+ // Sidebar: open
+ //
+ var sidebar = document.querySelector('button#sidebarToggle'),
+ outerContainer = document.querySelector('div#outerContainer');
+
+ sidebar.click();
+ ok(outerContainer.classList.contains('sidebarOpen'), 'sidebar opens on click');
+
+ // Thumbnails are created asynchronously - wait for them
+ waitForElement(document, 'canvas#thumbnail2', function(error) {
+ if (error)
+ finish();
+
+ //
+ // Page change from thumbnail click
+ //
+ var pageNumber = document.querySelector('input#pageNumber');
+ is(parseInt(pageNumber.value), 1, 'initial page is 1');
+
+ var thumbnail = document.querySelector('canvas#thumbnail2');
+ ok(thumbnail, 'thumbnail2 is available');
+ if (thumbnail) {
+ thumbnail.click();
+ is(parseInt(pageNumber.value), 2, 'clicking on thumbnail changes page');
+ }
+
+ //
+ // Sidebar: close
+ //
+ sidebar.click();
+ ok(!outerContainer.classList.contains('sidebarOpen'), 'sidebar closes on click');
+
+ //
+ // Page change from prev/next buttons
+ //
+ var prevPage = document.querySelector('button#previous'),
+ nextPage = document.querySelector('button#next');
+
+ nextPage.click();
+ is(parseInt(pageNumber.value), 2, 'page increases after clicking on next');
+
+ prevPage.click();
+ is(parseInt(pageNumber.value), 1, 'page decreases after clicking on previous');
+
+ //
+ // Bookmark button
+ //
+ var viewBookmark = document.querySelector('a#viewBookmark');
+ viewBookmark.click();
+ ok(viewBookmark.href.length > 0, 'viewBookmark button has href');
+
+ //
+ // Zoom in/out
+ //
+ var zoomOut = document.querySelector('button.zoomOut'),
+ zoomIn = document.querySelector('button.zoomIn');
+
+ // Zoom in
+ var oldWidth = document.querySelector('canvas#page1').width;
+ zoomIn.click();
+ var newWidth = document.querySelector('canvas#page1').width;
+ ok(oldWidth < newWidth, 'zooming in increases page width (old: '+oldWidth+', new: '+newWidth+')');
+
+ // Zoom out
+ var oldWidth = document.querySelector('canvas#page1').width;
+ zoomOut.click();
+ var newWidth = document.querySelector('canvas#page1').width;
+ ok(oldWidth > newWidth, 'zooming out decreases page width (old: '+oldWidth+', new: '+newWidth+')');
+
+ finish();
+ });
+ }, true, true);
+
+ registerCleanupFunction(function() {
+ gBrowser.removeTab(tab);
+ });
+}
--- /dev/null
+// Waits for element 'el' to exist in the DOM of 'doc' before executing 'callback'
+// Useful when elements are created asynchronously, e.g. after a Web Worker task
+function waitForElement(doc, el, callback) {
+ var time = 0,
+ interval = 10,
+ timeout = 5000;
+
+ var checkEl = setInterval(function() {
+ if (doc.querySelector(el)) {
+ clearInterval(checkEl);
+ if (callback) callback();
+ }
+
+ time += interval;
+ if (time > timeout) {
+ ok(false, 'waitForElement timed out on element: '+el);
+ clearInterval(checkEl);
+ if (callback) callback(true);
+ }
+ }, interval);
+}