annotate pseudo-weak-refs/pseudo-weak-refs.js @ 27:305345a0e472 default tip

Modifications to work w/ latest jetpack.
author Atul Varma <varmaa@toolness.com>
date Mon, 18 May 2009 22:51:37 -0700
parents 900a2fabd11c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
1 /* ***** BEGIN LICENSE BLOCK *****
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
2 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
3 *
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
4 * The contents of this file are subject to the Mozilla Public License Version
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
5 * 1.1 (the "License"); you may not use this file except in compliance with
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
6 * the License. You may obtain a copy of the License at
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
7 * http://www.mozilla.org/MPL/
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
8 *
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
9 * Software distributed under the License is distributed on an "AS IS" basis,
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
10 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
11 * for the specific language governing rights and limitations under the
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
12 * License.
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
13 *
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
14 * The Original Code is Pseudo Weak References for Web Content.
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
15 *
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
16 * The Initial Developer of the Original Code is Mozilla.
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
17 * Portions created by the Initial Developer are Copyright (C) 2007
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
18 * the Initial Developer. All Rights Reserved.
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
19 *
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
20 * Contributor(s):
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
21 * Atul Varma <atul@mozilla.com>
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
22 *
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
23 * Alternatively, the contents of this file may be used under the terms of
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
24 * either the GNU General Public License Version 2 or later (the "GPL"), or
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
25 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
26 * in which case the provisions of the GPL or the LGPL are applicable instead
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
27 * of those above. If you wish to allow use of your version of this file only
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
28 * under the terms of either the GPL or the LGPL, and not to allow others to
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
29 * use your version of this file under the terms of the MPL, indicate your
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
30 * decision by deleting the provisions above and replace them with the notice
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
31 * and other provisions required by the GPL or the LGPL. If you do not delete
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
32 * the provisions above, a recipient may use your version of this file under
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
33 * the terms of any one of the MPL, the GPL or the LGPL.
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
34 *
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
35 * ***** END LICENSE BLOCK ***** */
900a2fabd11c Added license block.
Atul Varma <varmaa@toolness.com>
parents: 18
diff changeset
36
18
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
37 // This Ubiquity page-load function injects the following functions for memory
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
38 // debugging into webpages:
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
39 //
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
40 // * window.PseudoWeakRef(object) makes a pseudo-weak reference for the
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
41 // object. It has one method, exists(), which returns whether or not
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
42 // the referent still exists (i.e., has not been garbage collected).
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
43 //
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
44 // * window.forceGC() forces garbage collection.
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
45
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
46 function pageLoad_injectPseudoWeakRefs(document) {
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
47 var sandbox = Components.utils.Sandbox(document.defaultView);
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
48 var weakrefs = [];
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
49
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
50 function makePseudoWeakRef(object) {
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
51 var weakref = new Components.utils.getWeakReference(object);
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
52 object = null;
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
53 weakrefs.push(weakref);
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
54 return weakrefs.length - 1;
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
55 }
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
56
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
57 function isReferentAlive(id) {
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
58 if (typeof(id) == "number" && weakrefs[id]) {
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
59 if (weakrefs[id].get() != null)
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
60 return true;
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
61 else
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
62 delete weakrefs[id];
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
63 }
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
64 return false;
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
65 }
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
66
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
67 function forceGC() {
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
68 Components.utils.forceGC();
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
69 }
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
70
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
71 sandbox.importFunction(makePseudoWeakRef);
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
72 sandbox.importFunction(isReferentAlive);
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
73 sandbox.importFunction(forceGC);
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
74
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
75 function PseudoWeakRef(object) {
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
76 var id = makePseudoWeakRef(object);
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
77 object = null;
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
78 this.exists = function() {
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
79 return isReferentAlive(id);
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
80 };
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
81 }
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
82
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
83 Components.utils.evalInSandbox(PseudoWeakRef.toString(), sandbox);
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
84
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
85 sandbox.window = document.defaultView.wrappedJSObject;
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
86 Components.utils.evalInSandbox(
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
87 ("window.PseudoWeakRef = PseudoWeakRef;" +
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
88 "window.forceGC = forceGC;"),
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
89 sandbox
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
90 );
08bddf757ed8 Added pseudo-weak-refs feed.
Atul Varma <varmaa@toolness.com>
parents:
diff changeset
91 }