mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-30 13:45:27 +00:00
0469a02b25
--HG-- extra : rebase_source : 98337b6a8c07d05e8c961a452dd05a7d75c3c60b
86 lines
2.6 KiB
JavaScript
86 lines
2.6 KiB
JavaScript
/* 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/. */
|
|
|
|
const LAST_URL_PREF = "general.open_location.last_url";
|
|
const nsISupportsString = Components.interfaces.nsISupportsString;
|
|
const Ci = Components.interfaces;
|
|
|
|
Components.utils.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
|
|
|
|
this.EXPORTED_SYMBOLS = [ "OpenLocationLastURL" ];
|
|
|
|
let prefSvc = Components.classes["@mozilla.org/preferences-service;1"]
|
|
.getService(Components.interfaces.nsIPrefBranch);
|
|
let gOpenLocationLastURLData = "";
|
|
|
|
let observer = {
|
|
QueryInterface: function (aIID) {
|
|
if (aIID.equals(Components.interfaces.nsIObserver) ||
|
|
aIID.equals(Components.interfaces.nsISupports) ||
|
|
aIID.equals(Components.interfaces.nsISupportsWeakReference))
|
|
return this;
|
|
throw Components.results.NS_NOINTERFACE;
|
|
},
|
|
observe: function (aSubject, aTopic, aData) {
|
|
switch (aTopic) {
|
|
case "last-pb-context-exited":
|
|
gOpenLocationLastURLData = "";
|
|
break;
|
|
case "browser:purge-session-history":
|
|
prefSvc.clearUserPref(LAST_URL_PREF);
|
|
gOpenLocationLastURLData = "";
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
|
|
let os = Components.classes["@mozilla.org/observer-service;1"]
|
|
.getService(Components.interfaces.nsIObserverService);
|
|
os.addObserver(observer, "last-pb-context-exited", true);
|
|
os.addObserver(observer, "browser:purge-session-history", true);
|
|
|
|
|
|
this.OpenLocationLastURL = function OpenLocationLastURL(aWindow) {
|
|
this.window = aWindow;
|
|
}
|
|
|
|
OpenLocationLastURL.prototype = {
|
|
isPrivate: function OpenLocationLastURL_isPrivate() {
|
|
// Assume not in private browsing mode, unless the browser window is
|
|
// in private mode.
|
|
if (!this.window)
|
|
return false;
|
|
|
|
return PrivateBrowsingUtils.isWindowPrivate(this.window);
|
|
},
|
|
get value() {
|
|
if (this.isPrivate())
|
|
return gOpenLocationLastURLData;
|
|
else {
|
|
try {
|
|
return prefSvc.getComplexValue(LAST_URL_PREF, nsISupportsString).data;
|
|
}
|
|
catch (e) {
|
|
return "";
|
|
}
|
|
}
|
|
},
|
|
set value(val) {
|
|
if (typeof val != "string")
|
|
val = "";
|
|
if (this.isPrivate())
|
|
gOpenLocationLastURLData = val;
|
|
else {
|
|
let str = Components.classes["@mozilla.org/supports-string;1"]
|
|
.createInstance(Components.interfaces.nsISupportsString);
|
|
str.data = val;
|
|
prefSvc.setComplexValue(LAST_URL_PREF, nsISupportsString, str);
|
|
}
|
|
},
|
|
reset: function() {
|
|
prefSvc.clearUserPref(LAST_URL_PREF);
|
|
gOpenLocationLastURLData = "";
|
|
}
|
|
};
|