browser_448741.js
Go to the documentation of this file.
1 /* ***** BEGIN LICENSE BLOCK *****
2  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3  *
4  * The contents of this file are subject to the Mozilla Public License Version
5  * 1.1 (the "License"); you may not use this file except in compliance with
6  * the License. You may obtain a copy of the License at
7  * http://www.mozilla.org/MPL/
8  *
9  * Software distributed under the License is distributed on an "AS IS" basis,
10  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11  * for the specific language governing rights and limitations under the
12  * License.
13  *
14  * The Original Code is sessionstore test code.
15  *
16  * The Initial Developer of the Original Code is
17  * Simon Bünzli <zeniko@gmail.com>.
18  * Portions created by the Initial Developer are Copyright (C) 2008
19  * the Initial Developer. All Rights Reserved.
20  *
21  * Contributor(s):
22  *
23  * Alternatively, the contents of this file may be used under the terms of
24  * either the GNU General Public License Version 2 or later (the "GPL"), or
25  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
26  * in which case the provisions of the GPL or the LGPL are applicable instead
27  * of those above. If you wish to allow use of your version of this file only
28  * under the terms of either the GPL or the LGPL, and not to allow others to
29  * use your version of this file under the terms of the MPL, indicate your
30  * decision by deleting the provisions above and replace them with the notice
31  * and other provisions required by the GPL or the LGPL. If you do not delete
32  * the provisions above, a recipient may use your version of this file under
33  * the terms of any one of the MPL, the GPL or the LGPL.
34  *
35  * ***** END LICENSE BLOCK ***** */
36 
37 function test() {
40  // test setup
41  let ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore);
42  let os = Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
43  let tabbrowser = getBrowser();
45 
46  let uniqueName = "bug 448741";
47  let uniqueValue = "as good as unique: " + Date.now();
48 
49  // set a unique value on a new, blank tab
50  var tab = tabbrowser.addTab();
51  ss.setTabValue(tab, uniqueName, uniqueValue);
52  let valueWasCleaned = false;
53 
54  // prevent our value from being written to disk
55  let cleaningObserver = {
56  observe: function(aSubject, aTopic, aData) {
57  ok(aTopic == "sessionstore-state-write", "observed correct topic?");
58  ok(aSubject instanceof Ci.nsISupportsString, "subject is a string?");
59  ok(aSubject.data.indexOf(uniqueValue) > -1, "data contains our value?");
60 
61  // find the data for the newly added tab and delete it
62  let state = eval(aSubject.data);
63  for each (let winData in state.windows) {
64  for each (let tabData in winData.tabs) {
65  if (tabData.extData && uniqueName in tabData.extData &&
66  tabData.extData[uniqueName] == uniqueValue) {
67  delete tabData.extData[uniqueName];
68  valueWasCleaned = true;
69  }
70  }
71  }
72 
73  ok(valueWasCleaned, "found and removed the specific tab value");
74  aSubject.data = uneval(state);
75  os.removeObserver(this, aTopic, false);
76  }
77  };
78 
79  // make sure that all later observers don't see that value any longer
80  let checkingObserver = {
81  observe: function(aSubject, aTopic, aData) {
82  ok(valueWasCleaned && aSubject instanceof Ci.nsISupportsString,
83  "ready to check the cleaned state?");
84  ok(aSubject.data.indexOf(uniqueValue) == -1, "data no longer contains our value?");
85 
86  // clean up
87  tabbrowser.removeTab(tab);
88  os.removeObserver(this, aTopic, false);
89  if (gPrefService.prefHasUserValue("browser.sessionstore.interval"))
90  gPrefService.clearUserPref("browser.sessionstore.interval");
91  finish();
92  }
93  };
94 
95  // last added observers are invoked first
96  os.addObserver(checkingObserver, "sessionstore-state-write", false);
97  os.addObserver(cleaningObserver, "sessionstore-state-write", false);
98 
99  // trigger an immediate save operation
100  gPrefService.setIntPref("browser.sessionstore.interval", 0);
101 }
const Cc
function getBrowser() gBrowser
var tab
var tabbrowser
waitForExplicitFinish()
var gPrefService
Definition: overlay.js:34
var os
const Ci
function test()
var winData
_updateTextAndScrollDataForFrame aData
var tabData
sbDeviceFirmwareAutoCheckForUpdate prototype observe