diff --git a/browser/base/content/test/general/browser.ini b/browser/base/content/test/general/browser.ini
index b87c17c81bb..4b19883871c 100644
--- a/browser/base/content/test/general/browser.ini
+++ b/browser/base/content/test/general/browser.ini
@@ -353,7 +353,6 @@ skip-if = buildapp == 'mulet' || e10s # Bug 1101973 - breaks the next test in e1
skip-if = buildapp == 'mulet'
[browser_private_no_prompt.js]
skip-if = buildapp == 'mulet'
-[browser_purgehistory_clears_sh.js]
[browser_PageMetaData_pushstate.js]
[browser_relatedTabs.js]
[browser_remoteTroubleshoot.js]
diff --git a/browser/base/content/test/general/browser_purgehistory_clears_sh.js b/browser/base/content/test/general/browser_purgehistory_clears_sh.js
deleted file mode 100644
index 80b3ec491b5..00000000000
--- a/browser/base/content/test/general/browser_purgehistory_clears_sh.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-const url = "http://example.org/browser/browser/base/content/test/general/dummy_page.html";
-
-add_task(function* purgeHistoryTest() {
- let tab = yield BrowserTestUtils.withNewTab({
- gBrowser,
- url,
- }, function* purgeHistoryTestInner(browser) {
- let backButton = browser.ownerDocument.getElementById("Browser:Back");
- let forwardButton = browser.ownerDocument.getElementById("Browser:Forward");
-
- ok(!browser.webNavigation.canGoBack,
- "Initial value for webNavigation.canGoBack");
- ok(!browser.webNavigation.canGoForward,
- "Initial value for webNavigation.canGoBack");
- ok(backButton.hasAttribute("disabled"), "Back button is disabled");
- ok(forwardButton.hasAttribute("disabled"), "Forward button is disabled");
-
- let pushState = ContentTask.spawn(browser, null, function*() {
- let startHistory = content.history.length;
- content.history.pushState({}, "");
- content.history.pushState({}, "");
- content.history.back();
- let newHistory = content.history.length;
- return [startHistory, newHistory];
- });
-
- let [startHistory, newHistory] = yield pushState;
-
- is(startHistory, 1, "Initial SHistory size");
- is(newHistory, 3, "New SHistory size");
-
- ok(browser.webNavigation.canGoBack, true,
- "New value for webNavigation.canGoBack");
- ok(browser.webNavigation.canGoForward, true,
- "New value for webNavigation.canGoForward");
- ok(!backButton.hasAttribute("disabled"), "Back button was enabled");
- ok(!forwardButton.hasAttribute("disabled"), "Forward button was enabled");
-
-
- let tmp = {};
- Cc["@mozilla.org/moz/jssubscript-loader;1"]
- .getService(Ci.mozIJSSubScriptLoader)
- .loadSubScript("chrome://browser/content/sanitize.js", tmp);
-
- let {Sanitizer} = tmp;
- let sanitizer = new Sanitizer();
-
- yield sanitizer.sanitize(["history"]);
-
- let historyAfterPurge = yield ContentTask.spawn(browser, null, function*() {
- return content.history.length;
- });
-
- is(historyAfterPurge, 1, "SHistory correctly cleared");
-
- ok(!browser.webNavigation.canGoBack,
- "webNavigation.canGoBack correctly cleared");
- ok(!browser.webNavigation.canGoForward,
- "webNavigation.canGoForward correctly cleared");
- ok(backButton.hasAttribute("disabled"), "Back button was disabled");
- ok(forwardButton.hasAttribute("disabled"), "Forward button was disabled");
- });
-});
diff --git a/toolkit/content/browser-content.js b/toolkit/content/browser-content.js
index 306ef3ad1f2..90420a25df9 100644
--- a/toolkit/content/browser-content.js
+++ b/toolkit/content/browser-content.js
@@ -724,27 +724,3 @@ let AudioPlaybackListener = {
},
};
AudioPlaybackListener.init();
-
-addMessageListener("Browser:PurgeSessionHistory", function BrowserPurgeHistory() {
- let sessionHistory = docShell.QueryInterface(Ci.nsIWebNavigation).sessionHistory;
- if (!sessionHistory) {
- return;
- }
-
- // place the entry at current index at the end of the history list, so it won't get removed
- if (sessionHistory.index < sessionHistory.count - 1) {
- let indexEntry = sessionHistory.getEntryAtIndex(sessionHistory.index, false);
- sessionHistory.QueryInterface(Components.interfaces.nsISHistoryInternal);
- indexEntry.QueryInterface(Components.interfaces.nsISHEntry);
- sessionHistory.addEntry(indexEntry, true);
- }
-
- let purge = sessionHistory.count;
- if (global.content.location.href != "about:blank") {
- --purge; // Don't remove the page the user's staring at from shistory
- }
-
- if (purge > 0) {
- sessionHistory.PurgeHistory(purge);
- }
-});
diff --git a/toolkit/content/widgets/browser.xml b/toolkit/content/widgets/browser.xml
index ef2edf834ee..61d94747734 100644
--- a/toolkit/content/widgets/browser.xml
+++ b/toolkit/content/widgets/browser.xml
@@ -821,7 +821,7 @@
// |webNavigation.sessionHistory| will have been set by the frame
// loader when creating the docShell as long as this xul:browser
// doesn't have the 'disablehistory' attribute set.
- if (!this.hasAttribute("disablehistory")) {
+ if (this.docShell && this.webNavigation.sessionHistory) {
var os = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
os.addObserver(this, "browser:purge-session-history", false);
@@ -879,7 +879,7 @@
return;
this.mDestroyed = true;
- if (!this.hasAttribute("disablehistory")) {
+ if (this.docShell && this.webNavigation.sessionHistory) {
var os = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
try {
@@ -969,18 +969,23 @@