Revision: 5483
Author:   [email protected]
Date:     Thu Jul 11 15:50:37 2013
Log:      Several features and fixes mostly in Domado.
https://codereview.appspot.com/11180043

Bugs:
* Don't warn if event.view is missing or undefined (ssue 1713).
* Explain navigator.cajaVersion in more detail (issue 1735).

Features:
* <input>.autofocus has a no-op setter (issue 1797).
* Add <optgroup>.disabled and <optgroup>.label (issue 1802).
* Add <form>.encoding as alias for <form>.enctype (issue 1794).
* Add window.frames and window.frames.length (issue 1264).

Other:
* Add a generic host page available from brserve (issue 1684).
* Rename 'Domita' to 'Domado' where applicable (issue 1400).
* Remove 'domitaTrace' mechanism in Domado.
* getUrlParam() understands + escapes.
* In repairES5, added a bug link for PUSH_IGNORES_FROZEN in Chrome
  (issue 1756).

[email protected]

http://code.google.com/p/google-caja/source/detail?r=5483

Added:
 /trunk/tests/com/google/caja/plugin/generic-host-page.html
Modified:
 /trunk/src/com/google/caja/demos/photon/container/photon.js
 /trunk/src/com/google/caja/demos/trycaja/js/trycaja.js
 /trunk/src/com/google/caja/es53.js
 /trunk/src/com/google/caja/plugin/CssRewriter.java
 /trunk/src/com/google/caja/plugin/LinkStyleWhitelist.java
 /trunk/src/com/google/caja/plugin/domado.js
 /trunk/src/com/google/caja/plugin/es53-frame-group.js
 /trunk/src/com/google/caja/plugin/templates/SafeCssMaker.java
 /trunk/src/com/google/caja/ses/repairES5.js
 /trunk/tests/com/google/caja/plugin/browser-test-case.js
 /trunk/tests/com/google/caja/plugin/css-stylesheet-tests.js
 /trunk/tests/com/google/caja/plugin/es53-test-domado-dom-guest.html
 /trunk/tests/com/google/caja/plugin/es53-test-domado-forms-guest.html
 /trunk/tests/com/google/caja/plugin/es53-test-domado-special-guest.html
 /trunk/tests/com/google/caja/plugin/evil-twin.html
 /trunk/tests/com/google/caja/plugin/test-index.html
 /trunk/tests/com/google/caja/plugin/third-party-tests.json

=======================================
--- /dev/null
+++ /trunk/tests/com/google/caja/plugin/generic-host-page.html Thu Jul 11 15:50:37 2013
@@ -0,0 +1,124 @@
+<!doctype html>
+<!--
+ - Copyright (C) 2013 Google Inc.
+ -
+ - Licensed under the Apache License, Version 2.0 (the "License");
+ - you may not use this file except in compliance with the License.
+ - You may obtain a copy of the License at
+ -
+ -      http://www.apache.org/licenses/LICENSE-2.0
+ -
+ - Unless required by applicable law or agreed to in writing, software
+ - distributed under the License is distributed on an "AS IS" BASIS,
+ - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ - See the License for the specific language governing permissions and
+ - limitations under the License.
+-->
+<!doctype html>
+<html><head>
+  <meta charset="utf-8">
+  <title>Caja generic host page (no test hooks)</title>
+  <!-- TODO(kpreid): Allow minified/unminified choice -->
+  <script src="/caja/caja.js"></script>
+  <script>
+    // note - duplicated from browser-test-case.js
+    function urlParamPattern(name) {
+      name = name.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");
+      return new RegExp("([\\?&]"+name+"=)([^&#]*)");
+    }
+    function getUrlParam(name, opt_default) {
+      var match = urlParamPattern(name).exec(window.location.href);
+      if (match) {
+        return decodeURIComponent(match[2].replace(/\+/g, ' '));
+      } else {
+        return opt_default ? opt_default : '';
+      }
+    }
+  </script>
+  <style>
+    html {
+      background: #CCC;
+      color: black;
+    }
+    #guest {
+      background: white;
+      color: black;
+      border: 0.1em solid black;
+    }
+
+    #form [name="content"] {
+      margin-left: 0;
+      margin-right: 0;
+      box-sizing: border-box;
+      width: 100%;
+      height: 20em;
+    }
+    #load {
+      float: right;
+      padding: 1em;
+    }
+    #guest {
+      clear: right;
+    }
+  </style>
+</head><body>
+  <div id="toolbar">
+ <span class='nonwidget'><a href='test-index.html'>other tests</a></span>
+  </div>
+  <form id="form" action="" method="GET">
+    <label>SES maximum severity<select name="maxAcceptableSeverity">
+      <option>SAFE</option>
+      <option selected>SAFE_SPEC_VIOLATION</option>
+      <option>NO_KNOWN_EXPLOIT_SPEC_VIOLATION</option>
+      <option>UNSAFE_SPEC_VIOLATION</option>
+      <option>NOT_OCAP_SAFE</option>
+      <option>NOT_ISOLATED</option>
+      <option>NEW_SYMPTOM</option>
+      <option>NOT_SUPPORTED</option>
+    </select></label>
+    &middot;
+ <label><input type="checkbox" name="debug" value="true"> Config <code>debug</code></label>
+    <br>
+    <textarea type="text" name="content"></textarea>
+    <button id="load" type="submit">Load</button>
+    <script>
+      var options = {};
+      Array.prototype.forEach.call(document.querySelectorAll(
+          '#form [name]'), function(el) {
+        if (el.tagName === 'INPUT' && el.type === 'checkbox') {
+          el.checked = JSON.parse(getUrlParam(el.name, '' + el.checked));
+          options[el.name] = el.checked;
+        } else {
+          el.value = getUrlParam(el.name, el.value);
+          options[el.name] = el.value;
+        }
+      });
+    </script>
+  </form>
+  <p>Status: <span id="status">&mdash;</span></p>
+  <div id="guest"></div>
+  <script>
+    function status(s) {
+      console.info(s);
+      document.getElementById('status').textContent = s;
+    }
+
+    status('caja.initialize()');
+    caja.initialize({
+      cajaServer: '/caja',
+      debug: options.debug,
+      maxAcceptableSeverity: options.maxAcceptableSeverity
+    });
+    status('caja.load()');
+    caja.load(
+        document.getElementById('guest'),
+        caja.policy.net.ALL,
+        function(frame) {
+          status('frame.content().run()');
+          frame.content('http://caja-host-url.invalid/', options.content)
+              .run(function() {
+                status('Complete');
+              });
+        });
+  </script>
+</body></html>
=======================================
--- /trunk/src/com/google/caja/demos/photon/container/photon.js Fri May 6 13:38:34 2011 +++ /trunk/src/com/google/caja/demos/photon/container/photon.js Thu Jul 11 15:50:37 2013
@@ -18,7 +18,7 @@
  * transfer of objects between mutually suspicious components.
  *
  * @param instantiateInTameElement a tamed function that takes
- *     a Domita tamed element, an HTML module URL and an optional
+ *     a Domado tamed element, an HTML module URL and an optional
  *     map of outer variables and instantiates the module within
  *     the provided element.
  * @param log a tamed function that logs messages to the console.
=======================================
--- /trunk/src/com/google/caja/demos/trycaja/js/trycaja.js Tue Jun 5 15:50:03 2012 +++ /trunk/src/com/google/caja/demos/trycaja/js/trycaja.js Thu Jul 11 15:50:37 2013
@@ -5,7 +5,7 @@
   // Page variables
   var pages = mypages;

-  function showDomita(report) {
+  function showDomado(report) {
     if (!cajaDisplayed) {
       cajaDisplayed = true;
       document.getElementById('cajaDisplayContainer').style.display =
@@ -375,7 +375,7 @@
     }
     default: {
       if (line.trim() == 'display') {
-        showDomita(report);
+        showDomado(report);
         return true;
       }

=======================================
--- /trunk/src/com/google/caja/es53.js  Mon May 20 13:12:41 2013
+++ /trunk/src/com/google/caja/es53.js  Thu Jul 11 15:50:37 2013
@@ -1214,7 +1214,7 @@
    * ES3, except that, when {@code opt_useKeyLifetime} is falsy or
    * absent, the keys here may be primitive types as well.
    *
-   * <p> To support Domita, the keys might be host objects.
+   * <p> To support taming membranes, the keys might be host objects.
    */
   function newTable(opt_useKeyLifetime, opt_expectedSize) {
     magicCount++;
=======================================
--- /trunk/src/com/google/caja/plugin/CssRewriter.java Wed Feb 13 14:19:54 2013 +++ /trunk/src/com/google/caja/plugin/CssRewriter.java Thu Jul 11 15:50:37 2013
@@ -677,7 +677,7 @@
                   ((CssTree.IdentLiteral) child).getValue());
               if (!ALLOWED_PSEUDO_CLASSES.contains(pseudoName)) {
// Allow the visited pseudo selector but not with any styles
-                // that can be fetched via getComputedStyle in DOMita's
+                // that can be fetched via getComputedStyle in Domado's
                 // COMPUTED_STYLE_WHITELIST.
                 if (!(LINK_PSEUDO_CLASSES.contains(pseudoName)
                       && strippedPropertiesBannedInLinkClasses(
=======================================
--- /trunk/src/com/google/caja/plugin/LinkStyleWhitelist.java Fri Mar 30 14:33:29 2012 +++ /trunk/src/com/google/caja/plugin/LinkStyleWhitelist.java Thu Jul 11 15:50:37 2013
@@ -34,7 +34,7 @@
     Set<Name> propNames = Sets.newHashSet(
Name.css("background-color"), Name.css("color"), Name.css("cursor")); // Rules limited to link and visited styles cannot allow properties that - // can be tested by DOMita's getComputedStyle since it would allow history + // can be tested by Domado's getComputedStyle since it would allow history
     // mining.
// Do not inline the below. The removeAll relies on the input being a set
     // of names, but since removeAll takes a Collection<?> it would fail
=======================================
--- /trunk/src/com/google/caja/plugin/domado.js Wed Jul 10 16:40:25 2013
+++ /trunk/src/com/google/caja/plugin/domado.js Thu Jul 11 15:50:37 2013
@@ -1415,10 +1415,10 @@
     function assert(cond) {
       if (!cond) {
         if (typeof console !== 'undefined') {
-          console.error('domita assertion failed');
+          console.error('Domado: assertion failed');
           console.trace();
         }
-        throw new Error("Domita assertion failed");
+        throw new Error('Domado: assertion failed');
       }
     }

@@ -2656,6 +2656,34 @@
       }
       var NP_noArgEditVoidMethod = NP_NoArgEditMethod(noop);
var NP_noArgEditMethodReturningNode = NP_NoArgEditMethod(defaultTameNode);
+      /**
+ * Reflect a boolean attribute, in the HTML5 sense. Respects schema for
+       * writes, forwards for reads.
+       *
+ * http://www.whatwg.org/specs/web-apps/current-work/multipage/common-dom-interfaces.html#reflecting-content-attributes-in-idl-attributes
+       */
+      var NP_reflectBoolean = Props.markPropMaker(function(env) {
+        var prop = env.prop;
+        return {
+          enumerable: true,
+          get: env.amplifying(function(privates) {
+            return privates.policy.attributesVisible &&
+                Boolean(privates.feral[prop]);
+          }),
+          set: innocuous(function(value) {
+ // "On setting, the content attribute must be removed if the IDL + // attribute is set to false, and must be set to the empty string if
+            // the IDL attribute is set to true."
+            if (value) {
+ // TODO(kpreid): markup whitelist rejects '' for boolean attrs but
+              // should accept it
+              this.setAttribute(prop, prop /* should be '' */);
+            } else {
+              this.removeAttribute(prop);
+            }
+          })
+        };
+      });

       /**
* Property spec for properties which reflect attributes whose values are
@@ -5235,6 +5263,8 @@
             return tameHTMLCollection(f, defaultTameNode);
           }),
           enctype: PT.filterAttr(defaultToEmptyStr, String),
+          encoding: Props.actAs('enctype',
+              PT.filterAttr(defaultToEmptyStr, String)),
           method: PT.filterAttr(defaultToEmptyStr, String),
           target: PT.filterAttr(defaultToEmptyStr, String),
           submit: Props.ampMethod(function(privates) {
@@ -5384,8 +5414,8 @@
       defineElement({
         domClass: 'CajaFormField',
         properties: function() { return {
-          autofocus: PT.ro,
-          disabled: PT.rw,
+          autofocus: NP_reflectBoolean,
+          disabled: NP_reflectBoolean,
           form: PT.related,
           maxLength: PT.rw,
           name: PT.rw,
@@ -5517,11 +5547,19 @@
         }; }
       });

+      defineElement({
+        domClass: 'HTMLOptGroupElement',
+        properties: function() { return {
+          disabled: NP_reflectBoolean,
+          label: NP_writePolicyOnly
+        }; }
+      });
+
       defineElement({
         domClass: 'HTMLOptionElement',
         properties: function() { return {
           defaultSelected: PT.filterProp(Boolean, Boolean),
-          disabled: PT.filterProp(Boolean, Boolean),
+          disabled: NP_reflectBoolean,
           form: PT.related,
           index: PT.filterProp(Number),
           label: PT.filterProp(String, String),
@@ -5615,7 +5653,7 @@
           var styleForFeatureTests = makeDOMAccessible(
               document.createElement('style'));
           return {
-            disabled: PT.filterProp(identity, Boolean),
+            disabled: NP_reflectBoolean,
             media: NP_writePolicyOnly,
             scoped: Props.cond('scoped' in styleForFeatureTests,
                 PT.filterProp(identity, Boolean)),
@@ -5799,8 +5837,8 @@
         function tameEventView(view) {
           if (view === window) {
             return tameWindow;
-          } else if (view === null) {
-            return null;
+          } else if (view === null || view === undefined) {
+            return view;
           } else {
             if (typeof console !== 'undefined') {
console.warn('Domado: Discarding unrecognized feral view value:',
@@ -5812,13 +5850,14 @@
         function untameEventView(view) {
           if (view === tameWindow) {
             return window;
-          } else if (view === null) {
-            return null;
+          } else if (view === null || view === undefined) {
+            return view;
           } else {
             if (typeof console !== 'undefined') {
console.warn('Domado: Discarding unrecognized guest view value:',
                   view);
             }
+            return null;
           }
         }

@@ -6691,16 +6730,6 @@
             bridal.getAttribute(containerNode, 'class')
             + ' ' + idClass + ' vdoc-container___');
       }
-
-      // bitmask of trace points
-      //    0x0001 plugin_dispatchEvent
-      domicile.domitaTrace = 0;
-      domicile.getDomitaTrace = cajaVM.constFunc(
-          function() { return domicile.domitaTrace; }
-      );
-      domicile.setDomitaTrace = cajaVM.constFunc(
-          function(x) { domicile.domitaTrace = x; }
-      );

       var TameWindowConf = new Confidence('TameWindow');

@@ -6728,9 +6757,14 @@
         taming.permitUntaming(this);

         // Attach reflexive properties
- ['top', 'self', 'opener', 'parent', 'window'].forEach(function(prop) {
+        [
+          'top', 'self', 'opener', 'parent', 'window', 'frames'
+        ].forEach(function(prop) {
           this[prop] = this;
         }, this);
+
+        // window.frames.length (must be a data prop for ES5/3)
+        this.length = 0;
       }
       inertCtor(TameWindow, Object, 'Window');
       Props.define(TameWindow.prototype, TameWindowConf, {
@@ -6818,7 +6852,9 @@
         platform: String(navigator.platform),
// userAgent should equal the string sent in the User-Agent HTTP header.
         userAgent: String(navigator.userAgent),
-        // Custom attribute indicating Caja is active.
+ // Custom attribute indicating Caja is active. The version number has + // ended up completely meaningless, but there is code in the wild that
+        // tests for this attribute, so we'll just leave it, for now.
         cajaVersion: '1.0'
         });

@@ -7158,13 +7194,6 @@

     function dispatch(isUserAction, pluginId, handler, args) {
var domicile = windowToDomicile.get(rulebreaker.getImports(pluginId));
-      if (domicile.domitaTrace & 0x1 && typeof console != 'undefined') {
-        var sig = ('' + handler).match(/^function\b[^\)]*\)/);
-        console.log(
-            'Dispatch pluginId=' + pluginId +
-            ', handler=' + (sig ? sig[0] : handler) +
-            ', args=' + args);
-      }
       switch (typeof handler) {
         case 'number':
           handler = domicile.handlers[+handler];
=======================================
--- /trunk/src/com/google/caja/plugin/es53-frame-group.js Tue Jun 18 13:18:13 2013 +++ /trunk/src/com/google/caja/plugin/es53-frame-group.js Thu Jul 11 15:50:37 2013
@@ -251,12 +251,12 @@
       })
     });

-    // The Domita implementation is obtained from the taming window,
-    // since we wish to protect Domita and its dependencies from the
+    // The Domado implementation is obtained from the taming window,
+    // since we wish to protect Domado and its dependencies from the
     // ability of guest code to modify the shared primordials.

     // TODO(kpreid): This is probably wrong: we're replacing the feral
-    // record imports with the tame constructed object 'window'.
+ // record imports with the tame constructed object 'window' (issue 1399).

     var targetAttributePresets = undefined;
     if (config.targetAttributePresets) {
=======================================
--- /trunk/src/com/google/caja/plugin/templates/SafeCssMaker.java Thu May 12 13:11:27 2011 +++ /trunk/src/com/google/caja/plugin/templates/SafeCssMaker.java Thu Jul 11 15:50:37 2013
@@ -37,7 +37,7 @@
 /**
* Attaches CSS to either the static HTML or the uncajoled JS as appropriate.
  * <p>
- * Depends on <code>emitCss___</code> as defined in DOMita.
+ * Depends on <code>emitCss___</code> as defined in Domado.
  *
  * @author [email protected]
  */
=======================================
--- /trunk/src/com/google/caja/ses/repairES5.js Mon Jun 17 13:22:24 2013
+++ /trunk/src/com/google/caja/ses/repairES5.js Thu Jul 11 15:50:37 2013
@@ -3781,7 +3781,7 @@
       repair: repair_PUSH_IGNORES_SEALED,
       preSeverity: severities.UNSAFE_SPEC_VIOLATION,
       canRepair: true,
-      urls: [],
+      urls: ['https://code.google.com/p/v8/issues/detail?id=2711'],
       sections: ['15.2.3.9'],
       tests: [] // TODO(erights): Add to test262
     },
=======================================
--- /trunk/tests/com/google/caja/plugin/browser-test-case.js Fri Jun 21 14:57:00 2013 +++ /trunk/tests/com/google/caja/plugin/browser-test-case.js Thu Jul 11 15:50:37 2013
@@ -137,8 +137,11 @@
 }
 function getUrlParam(name, opt_default) {
   var match = urlParamPattern(name).exec(window.location.href);
-  return match ? decodeURIComponent(match[2]) :
-      opt_default ? opt_default : '';
+  if (match) {
+    return decodeURIComponent(match[2].replace(/\+/g, ' '));
+  } else {
+    return opt_default ? opt_default : '';
+  }
 }

 /**
=======================================
--- /trunk/tests/com/google/caja/plugin/css-stylesheet-tests.js Mon Jul 1 09:53:11 2013 +++ /trunk/tests/com/google/caja/plugin/css-stylesheet-tests.js Thu Jul 11 15:50:37 2013
@@ -264,7 +264,7 @@
         "messages": []
       },

-    // Properties that are on DOMita's HISTORY_INSENSITIVE_STYLE_WHITELIST
+    // Properties that are on Domado's HISTORY_INSENSITIVE_STYLE_WHITELIST
     // should not be allowed in any rule that correlates with the :visited
     // pseudo selector.
     // TODO: How is this a whitelist then?
=======================================
--- /trunk/tests/com/google/caja/plugin/es53-test-domado-dom-guest.html Wed Jul 10 16:24:53 2013 +++ /trunk/tests/com/google/caja/plugin/es53-test-domado-dom-guest.html Thu Jul 11 15:50:37 2013
@@ -379,6 +379,21 @@
   });
 </script>

+<script>
+  jsunitRegister('testWindowReflexive', function() {
+    [
+      'top', 'self', 'opener', 'parent', 'window', 'frames'
+    ].forEach(function(prop) {
+      assertTrue(prop, window[prop] === window);
+    });
+
+ // window.frames (which === window) is expected to act as an array-like.
+    assertEquals(0, window.frames.length);
+
+    pass();
+  });
+</script>
+
 <div id="testAttrsDeclaredInMarkup" class="testcontainer"
     ><form title="test title"></form>
   <b>Test attributes in markup</b>
=======================================
--- /trunk/tests/com/google/caja/plugin/es53-test-domado-forms-guest.html Thu May 23 10:22:00 2013 +++ /trunk/tests/com/google/caja/plugin/es53-test-domado-forms-guest.html Thu Jul 11 15:50:37 2013
@@ -254,3 +254,42 @@
     pass('testFancyInputs');
   });
 </script>
+
+<form class="testcontainer" id="testAutofocus">testAutofocus
+  <input type="text" id="testAutofocus-field" autofocus>
+</form>
+<script>
+  jsunitRegister('testAutofocus', function() {
+    var el = document.getElementById('testAutofocus-field');
+    assertEquals(false, el.autofocus);
+    el.autofocus = true;
+    assertEquals(null, directAccess.getAttribute(el, 'autofocus'));
+    assertEquals(false, el.autofocus);
+    pass();
+  });
+</script>
+
+<form class="testcontainer" id="testOptgroup">
+  <optgroup id="testOptgroup-field" disabled label="testOptgroup">
+</form>
+<script>
+  jsunitRegister('testOptgroup', function() {
+    var el = document.getElementById('testOptgroup-field');
+
+    assertEquals('testOptgroup', el.label);
+    el.label = 'testOptgroup is nifty';
+    assertEquals('testOptgroup is nifty', el.getAttribute('label'));
+
+    // disabled
+ // extensive tests to exercise reflect-boolean-attribute code, not because
+    // we're worried about disabled in particular
+    assertEquals(true, el.disabled);
+    el.disabled = false;
+    assertEquals(null, directAccess.getAttribute(el, 'disabled'));
+    assertEquals(false, el.disabled);
+    el.disabled = true;
+ assertEquals('string', typeof directAccess.getAttribute(el, 'disabled'));
+    assertEquals(true, el.disabled);
+    pass();
+  });
+</script>
=======================================
--- /trunk/tests/com/google/caja/plugin/es53-test-domado-special-guest.html Fri Apr 19 10:46:56 2013 +++ /trunk/tests/com/google/caja/plugin/es53-test-domado-special-guest.html Thu Jul 11 15:50:37 2013
@@ -128,7 +128,7 @@

// The 'p1' element, since it is contained within an A element, should have // computed COLOR value inherited from the top-level container element of
-    // this DOMita instance (since COLOR is an allowed history-sensitive
+    // this Domado instance (since COLOR is an allowed history-sensitive
// property), and a computed PADDING-LEFT value exactly as explicitly set // (since the CSS rewriter does not allow PADDING-LEFT to be assigned in a
     // history sensitive manner).
@@ -377,7 +377,7 @@
 <script type="text/javascript">
   jsunitRegister('testBoundingClientRect',
                  function testBoundingClientRect() {
-    // Grab two elements defined in domita_test.html
+    // Grab two elements defined in the initial state html
     var absPos = document.getElementById('absolutely-positioned');
     var relPos = document.getElementById('relatively-positioned');

=======================================
--- /trunk/tests/com/google/caja/plugin/evil-twin.html Fri Jun 25 11:21:10 2010 +++ /trunk/tests/com/google/caja/plugin/evil-twin.html Thu Jul 11 15:50:37 2013
@@ -2,7 +2,7 @@
   For host-tools-test.js

This gadget attempts to mess with copies of itself that fail to have distinct
-  id namespaces through Domita. If it is properly isolated, then touchCount
+  id namespaces through Domado. If it is properly isolated, then touchCount
will become and remain 1; if not, it will be 0 or higher than 1 depending on
   which element it actually looks up.
 -->
=======================================
--- /trunk/tests/com/google/caja/plugin/test-index.html Mon Jun 17 12:21:19 2013 +++ /trunk/tests/com/google/caja/plugin/test-index.html Thu Jul 11 15:50:37 2013
@@ -66,6 +66,8 @@
       <li><a href="apidiff/analyzer.html">Browser API report/diff</a></li>
<li><a href="browser-test-case.html?test-case=repl.html&amp;es5=true">
           REPL inside the sandbox</a></li>
+      <li><a href="generic-host-page.html">
+          Generic host page</a></li>
     </ul>
     <script src="catalog-parser.js"></script>
     <script src="test-index.js"></script>
=======================================
--- /trunk/tests/com/google/caja/plugin/third-party-tests.json Wed Jul 10 16:24:53 2013 +++ /trunk/tests/com/google/caja/plugin/third-party-tests.json Thu Jul 11 15:50:37 2013
@@ -70,7 +70,7 @@
       },
       {
         "guest": "attributes",
-        "expected-pass": 415,
+        "expected-pass": 428,
         "comment": [
           "Current failure categories:",
"Seeing absolute instead of relative URLs (visible rewriting).",
@@ -140,7 +140,7 @@
       },
       {
         "guest": "serialize",
-        "expected-pass": 26,
+        "expected-pass": 28,
         "comment": [
           "Current failure categories:",
             "Missing form fields."

--

--- You received this message because you are subscribed to the Google Groups "Google Caja Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to