Browse Source

Merge pull request #9468 from tonyganch/9296-history-state

Remove page url check during `history.pushState`
Kevin Sawicki 7 years ago
parent
commit
53b6ee0e3f
2 changed files with 28 additions and 12 deletions
  1. 2 7
      lib/browser/api/navigation-controller.js
  2. 26 5
      spec/chromium-spec.js

+ 2 - 7
lib/browser/api/navigation-controller.js

@@ -27,7 +27,6 @@ var NavigationController = (function () {
       this.history.push(this.webContents._getURL())
     }
     this.webContents.on('navigation-entry-commited', (event, url, inPage, replaceEntry) => {
-      var currentEntry
       if (this.inPageIndex > -1 && !inPage) {
         // Navigated to a new page, clear in-page mark.
         this.inPageIndex = -1
@@ -46,12 +45,8 @@ var NavigationController = (function () {
       } else {
         // Normal navigation. Clear history.
         this.history = this.history.slice(0, this.currentIndex + 1)
-        currentEntry = this.history[this.currentIndex]
-
-        if (currentEntry !== url) {
-          this.currentIndex++
-          this.history.push(url)
-        }
+        this.currentIndex++
+        this.history.push(url)
       }
     })
   }

+ 26 - 5
spec/chromium-spec.js

@@ -1100,11 +1100,32 @@ describe('chromium feature', function () {
     })
   })
 
-  describe('window.history.go(offset)', function () {
-    it('throws an exception when the argumnet cannot be converted to a string', function () {
-      assert.throws(function () {
-        window.history.go({toString: null})
-      }, /Cannot convert object to primitive value/)
+  describe('window.history', function () {
+    describe('window.history.go(offset)', function () {
+      it('throws an exception when the argumnet cannot be converted to a string', function () {
+        assert.throws(function () {
+          window.history.go({toString: null})
+        }, /Cannot convert object to primitive value/)
+      })
+    })
+
+    describe('window.history.pushState', function () {
+      it('should push state after calling history.pushState() from the same url', (done) => {
+        w = new BrowserWindow({
+          show: false
+        })
+        w.webContents.once('did-finish-load', () => {
+          // History should have current page by now.
+          assert.equal(w.webContents.length(), 1)
+
+          w.webContents.executeJavaScript('window.history.pushState({}, "")', () => {
+            // Initial page + pushed state
+            assert.equal(w.webContents.length(), 2)
+            done()
+          })
+        })
+        w.loadURL('about:blank')
+      })
     })
   })
 })