diff --git a/web/pdf_page_view.js b/web/pdf_page_view.js
index 0ea77452a..3ffe250ec 100644
--- a/web/pdf_page_view.js
+++ b/web/pdf_page_view.js
@@ -133,13 +133,33 @@ var PDFPageView = (function PDFPageViewClosure() {
     },
 
     destroy: function PDFPageView_destroy() {
-      this.zoomLayer = null;
       this.reset();
       if (this.pdfPage) {
         this.pdfPage.cleanup();
       }
     },
 
+    /**
+     * @private
+     */
+    _resetZoomLayer: function(removeFromDOM) {
+      if (!this.zoomLayer) {
+        return;
+      }
+      var zoomLayerCanvas = this.zoomLayer.firstChild;
+      this.paintedViewportMap.delete(zoomLayerCanvas);
+      // Zeroing the width and height causes Firefox to release graphics
+      // resources immediately, which can greatly reduce memory consumption.
+      zoomLayerCanvas.width = 0;
+      zoomLayerCanvas.height = 0;
+
+      if (removeFromDOM) {
+        // Note: ChildNode.remove doesn't throw if the parentNode is undefined.
+        this.zoomLayer.remove();
+      }
+      this.zoomLayer = null;
+    },
+
     reset: function PDFPageView_reset(keepZoomLayer, keepAnnotations) {
       this.cancelRendering();
 
@@ -168,13 +188,16 @@ var PDFPageView = (function PDFPageViewClosure() {
         this.annotationLayer = null;
       }
 
-      if (this.canvas && !currentZoomLayerNode) {
-        this.paintedViewportMap.delete(this.canvas);
-        // Zeroing the width and height causes Firefox to release graphics
-        // resources immediately, which can greatly reduce memory consumption.
-        this.canvas.width = 0;
-        this.canvas.height = 0;
-        delete this.canvas;
+      if (!currentZoomLayerNode) {
+        if (this.canvas) {
+          this.paintedViewportMap.delete(this.canvas);
+          // Zeroing the width and height causes Firefox to release graphics
+          // resources immediately, which can greatly reduce memory consumption.
+          this.canvas.width = 0;
+          this.canvas.height = 0;
+          delete this.canvas;
+        }
+        this._resetZoomLayer();
       }
       if (this.svg) {
         this.paintedViewportMap.delete(this.svg);
@@ -429,23 +452,7 @@ var PDFPageView = (function PDFPageViewClosure() {
           div.removeChild(self.loadingIconDiv);
           delete self.loadingIconDiv;
         }
-
-        if (self.zoomLayer) {
-          var zoomLayerCanvas = self.zoomLayer.firstChild;
-          self.paintedViewportMap.delete(zoomLayerCanvas);
-          // Zeroing the width and height causes Firefox to release graphics
-          // resources immediately, which can greatly reduce memory consumption.
-          zoomLayerCanvas.width = 0;
-          zoomLayerCanvas.height = 0;
-
-          if (div.contains(self.zoomLayer)) {
-            // Prevent "Node was not found" errors if the `zoomLayer` was
-            // already removed. This may occur intermittently if the scale
-            // changes many times in very quick succession.
-            div.removeChild(self.zoomLayer);
-          }
-          self.zoomLayer = null;
-        }
+        self._resetZoomLayer(/* removeFromDOM = */ true);
 
         self.error = error;
         self.stats = pdfPage.stats;