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(
>
>
>

Reply via email to