2
|
1 var session = {
|
|
2
|
|
3 init: function(event)
|
|
4 {
|
|
5 var menu = document.getElementById("nightly-session-restore");
|
|
6 var ds = Components.classes["@mozilla.org/file/directory_service;1"]
|
|
7 .getService(Components.interfaces.nsIProperties);
|
|
8 var file = ds.get("ProfD", Ci.nsIFile);
|
|
9 file.append("sessionstore.bak");
|
|
10 if (!file.exists)
|
|
11 menu.setAttribute("disabled", "true");
|
|
12 },
|
|
13
|
|
14 _readFile: function(file)
|
|
15 {
|
|
16 try
|
|
17 {
|
|
18 var stream = Components.classes["@mozilla.org/network/file-input-stream;1"]
|
|
19 .createInstance(Components.interfaces.nsIFileInputStream);
|
|
20 stream.init(file, 0x01, 0, 0);
|
|
21 var cvstream = Components.classes["@mozilla.org/intl/converter-input-stream;1"]
|
|
22 .createInstance(Components.interfaces.nsIConverterInputStream);
|
|
23 cvstream.init(stream, "UTF-8", 1024, Components.interfaces.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER);
|
|
24
|
|
25 var content = "";
|
|
26 var data = {};
|
|
27 while (cvstream.readString(4096, data))
|
|
28 content += data.value;
|
|
29 cvstream.close();
|
|
30
|
|
31 return content.replace(/\r\n?/g, "\n");
|
|
32 }
|
|
33 catch (ex) { }
|
|
34
|
|
35 return null;
|
|
36 },
|
|
37
|
|
38 restore: function()
|
|
39 {
|
|
40 var ds = Components.classes["@mozilla.org/file/directory_service;1"]
|
|
41 .getService(Components.interfaces.nsIProperties);
|
|
42 var file = ds.get("ProfD", Ci.nsIFile);
|
|
43 file.append("sessionstore.bak");
|
|
44 if (file.exists)
|
|
45 {
|
|
46 var data = this._readFile(file);
|
|
47 if (data)
|
|
48 {
|
|
49 try
|
|
50 {
|
|
51 var s = Components.utils.Sandbox("about:blank");
|
|
52 var state = Components.utils.evalInSandbox(data, s);
|
|
53 var args = {
|
|
54 state: state,
|
|
55 result: false
|
|
56 };
|
|
57 window.openDialog("chrome://nightly/content/session/session.xul", "_blank", "chrome,all,modal", args);
|
|
58 if (args.result)
|
|
59 {
|
|
60 var ss = Components.classes["@mozilla.org/browser/sessionstore;1"]
|
|
61 .getService(Components.interfaces.nsISessionStore);
|
|
62 var win = OpenBrowserWindow();
|
|
63 win.addEventListener("load", function() { ss.setWindowState(win, args.state.toSource(), true); }, false);
|
|
64 }
|
|
65 return;
|
|
66 }
|
|
67 catch (ex)
|
|
68 {
|
|
69 }
|
|
70 }
|
|
71 alert("Unable to read from file, this is unrecoverable.");
|
|
72 }
|
|
73 else
|
|
74 alert("There is no session information to restore.");
|
|
75 }
|
|
76 }
|
|
77
|
|
78 window.addEventListener("load", session.init, false);
|