Mercurial > my-ubiquity-commands
diff pseudo-weak-refs/index.html @ 18:08bddf757ed8
Added pseudo-weak-refs feed.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Sat, 25 Apr 2009 13:38:25 -0700 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pseudo-weak-refs/index.html Sat Apr 25 13:38:25 2009 -0700 @@ -0,0 +1,80 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> + <link rel="stylesheet" type="text/css" media="all" + href="index.css" /> + <link rel="commands" href="pseudo-weak-refs.js"/> + <title>Pseudo Weak References for Web Content</title> +</head> +<body> +<div id="container"> +<div id="content"> +<h1>Pseudo Weak References for Web Content</h1> +<p>This Ubiquity feed provides pseudo weak reference functionality to +web content, for the purpose of making it easier to debug memory +management issues. Specifically, it adds two new functions to +the global <tt>window</tt> object of all web pages:</p> +<ul> + <li><tt>PseudoWeakRef(object)</tt> is a constructor that makes a + pseudo-weak reference for the object. The returned object has one + method, <tt>exists()</tt>, which returns whether or not the + referent still exists.</li> + <li><tt>forceGC()</tt> forces garbage collection.</li> +</ul> +<p>Here's some example code:</p> +<script id="tests"> +function testExistsReturnsFalse() { + var object = new Object(); + var weak = new PseudoWeakRef(object); + + // Destroy our one strong reference to the object, leaving it available + // for garbage collection. + object = null; + + forceGC(); + if (weak.exists()) + throw new Error("weak referent should not exist"); +} +</script> +<p>The above source code is actually part of the test suite for this +feed. <span id="test-result">If this feed were installed, the suite would +run now.</span></p> +<p>The source code for this feed can be viewed +at <a href="pseudo-weak-refs.js">pseudo-weak-refs.js</a>.</p> +</div> +<div id="messages"> +<span id="tests-failed">The suite was run, but some tests failed.</span> +<span id="tests-passed">The suite was run, and all tests passed.</span> +</div> +</div> +<script> +function testExistsReturnsTrue() { + var object = new Object(); + var weak = new PseudoWeakRef(object); + forceGC(); + if (!weak.exists()) + throw new Error("weak referent should exist"); +} + +function onLoad() { + function $(id) { return document.getElementById(id); } + + $("tests").innerHTML = $("tests").innerHTML.slice(1); + if (window.PseudoWeakRef && window.forceGC) { + try { + testExistsReturnsFalse(); + testExistsReturnsTrue(); + } catch (e) { + $("test-result").innerHTML = $("tests-failed").innerHTML; + throw e; + } + $("test-result").innerHTML = $("tests-passed").innerHTML; + } +} + +window.addEventListener("load", onLoad, false); +</script> +</body> +</html>