_BROWSER_TEST_FILES = \
   head.js \
   browser_pdfjs_main.js \
+  browser_pdfjs_zoom.js \
   file_pdfjs_test.pdf \
   $(NULL)
 
 
     ok(outerContainer.classList.contains('sidebarOpen'), 'sidebar opens on click');
 
     // Thumbnails are created asynchronously - wait for them
-    waitForElement(document, 'canvas#thumbnail2', function(error) {
+    waitForElement(document, 'canvas#thumbnail2', function(error, thumbnail) {
       if (error)
         finish();
 
       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();
       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);
 
--- /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;
+
+    //
+    // Zoom in/out
+    //
+    var zoomOut = document.querySelector('button.zoomOut'),
+        zoomIn = document.querySelector('button.zoomIn');
+
+    var newWidth, oldWidth;
+
+    // We need to query the DOM every time since zoom in/out operations destroy the canvas element
+    waitForElement(document, 'canvas#page1', function(error, page1) {
+      if (error)
+        finish();
+      
+      oldWidth = page1.width;
+      zoomIn.click();
+
+      waitForElement(document, 'canvas#page1', function(error, page1) {
+        if (error)
+          finish();
+
+        newWidth = page1.width;
+        ok(oldWidth < newWidth, 'zooming in increases page width (old: '+oldWidth+', new: '+newWidth+')');
+
+        // Zoom out
+        oldWidth = newWidth;
+        zoomOut.click();
+        
+        waitForElement(document, 'canvas#page1', function(error, page1) {
+          if (error)
+            finish();
+
+          newWidth = page1.width;
+          ok(oldWidth > newWidth, 'zooming out decreases page width (old: '+oldWidth+', new: '+newWidth+')');
+
+          finish();
+        });
+      });
+    });
+
+  }, true, true);
+
+  registerCleanupFunction(function() {
+    gBrowser.removeTab(tab);
+  });
+}
 
-// Waits for element 'el' to exist in the DOM of 'doc' before executing 'callback'
+// Waits for element 'sel' 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) {
+function waitForElement(doc, sel, callback) {
   var time = 0,
       interval = 10,
       timeout = 5000;
 
   var checkEl = setInterval(function() {
-    if (doc.querySelector(el)) {
+    var el = doc.querySelector(sel);
+    if (el) {
       clearInterval(checkEl);
-      if (callback) callback();
+      if (callback) callback(null, el);
     }
 
     time += interval;
     if (time > timeout) {
-      ok(false, 'waitForElement timed out on element: '+el);
+      ok(false, 'waitForElement timed out on element: '+sel);
       clearInterval(checkEl);
       if (callback) callback(true);
     }