mirror of https://github.com/roytam1/UXP
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.6 KiB
85 lines
2.6 KiB
/* 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" ]; |
|
|
|
var prefSvc = Components.classes["@mozilla.org/preferences-service;1"] |
|
.getService(Components.interfaces.nsIPrefBranch); |
|
var gOpenLocationLastURLData = ""; |
|
|
|
var 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; |
|
} |
|
} |
|
}; |
|
|
|
var 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 = ""; |
|
} |
|
};
|
|
|