The description of this CL is misleading. I added a test, and then realized that tameRelated was buggy. Changed the description in rietveld.
2009/9/18 <[email protected]>: > Reviewers: jasvir, > > Description: > http://code.google.com/p/google-caja/issues/detail?id=1126 > > offsetParent is exposed. > > Please review this at http://codereview.appspot.com/120049 > > Affected files: > M src/com/google/caja/plugin/domita.js > M tests/com/google/caja/plugin/domita_test_untrusted.html > > > Index: tests/com/google/caja/plugin/domita_test_untrusted.html > =================================================================== > --- tests/com/google/caja/plugin/domita_test_untrusted.html (revision > 3731) > +++ tests/com/google/caja/plugin/domita_test_untrusted.html (working > copy) > @@ -237,6 +237,10 @@ > > <p class="testcontainer" id="test-inner-HTML-style-sanitizer"></p> > > +<p class="testcontainer" id="test-offset-parent" style="position:relative"> > +<span id="test-offset-parent-inner">inner</span> > +</p> > + > <div class="testcontainer" id="test-whitespace-nodes-1"> > <div style="width: 150px; border: 1px solid blue; margin: 0; padding: 2px" > id="whitespace-outer"> > @@ -1775,6 +1779,19 @@ > pass('test-inner-HTML-style-sanitizer'); > }); > > +jsunitRegister('testOffsetParent', > + function testOffsetParent() { > + var outer = document.getElementById('test-offset-parent'); > + var inner = document.getElementById('test-offset-parent-inner'); > + assertEquals("wrong inner.offsetParent: " + inner.offsetParent, > + outer, inner.offsetParent); > + assertEquals("wrong outer.offsetParent: " + outer.offsetParent, > + document.body, outer.offsetParent); > + assertEquals("wront body.offsetParent: " + document.body.offsetParent, > + undefined, document.body.offsetParent); > + pass('test-offset-parent'); > +}); > + > function assertWithin(msg, golden, actual, tolerance) { > if (!(Math.abs(golden - actual) <= tolerance)) { > assertEquals(msg, golden, actual); > @@ -2989,15 +3006,15 @@ > Q.when(m, f1, f2); > } else { > pass(prefix + '-unbundled-module-loader'); > - } > + } > } > > -jsunitRegister('testXhrUnbundledModuleLoader', > +jsunitRegister('testXhrUnbundledModuleLoader', > function testXhrUnbundledModuleLoader() { > testUnbundledModuleLoader(xhrModuleLoad, "xhr"); > }); > > -jsunitRegister('testScriptUnbundledModuleLoader', > +jsunitRegister('testScriptUnbundledModuleLoader', > function testScriptUnbundledModuleLoader() { > testUnbundledModuleLoader(scriptModuleLoad, "script"); > }); > Index: src/com/google/caja/plugin/domita.js > =================================================================== > --- src/com/google/caja/plugin/domita.js (revision 3731) > +++ src/com/google/caja/plugin/domita.js (working copy) > @@ -1054,6 +1054,14 @@ > > function tameRelatedNode(node, editable, tameNodeCtor) { > if (node === null || node === void 0) { return null; } > + if (node === tameDocument.body___) { > + if (tameDocument.editable___ && !editable) { > + // FIXME: return a non-editable version of body. > + throw new Error(NOT_EDITABLE); > + } > + return tameDocument.getBody(); > + } > + > // Catch errors because node might be from a different domain. > try { > var docElem = node.ownerDocument.documentElement; > @@ -1484,15 +1492,8 @@ > return defaultTameNode(this.node___.previousSibling, > this.editable___); > }; > TameBackedNode.prototype.getParentNode = function () { > - var parent = this.node___.parentNode; > - if (parent === tameDocument.body___) { > - if (tameDocument.editable___ && !this.editable___) { > - // FIXME: return a non-editable version of body. > - throw new Error(NOT_EDITABLE); > - } > - return tameDocument.getBody(); > - } > - return tameRelatedNode(parent, this.editable___, defaultTameNode); > + return tameRelatedNode( > + this.node___.parentNode, this.editable___, defaultTameNode); > }; > TameBackedNode.prototype.getElementsByTagName = function (tagName) { > return tameGetElementsByTagName( > > >
