Platform/JS Compartments Mochitest: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
 
(178 intermediate revisions by 8 users not shown)
Line 1: Line 1:
This page is a tracking page for getting the JS compartments work to pass xpcshell tests and Mochitests and other automated test suites.
This page is a tracking page for getting the JS compartments work to pass xpcshell tests and Mochitests and other automated test suites.
= How to get the patch queue =
Install hg queues.
Then add to .hg/patches/.hg/hgrc
[paths]
default = http://hg.mozilla.org/users/mrbkap_mozilla.com/brain-transplants
Then go into .hg/patches and hg pull, hg up and then go back to ../../ and do hg qpush -a. Build. Every time we update the queue you have to do qpop -a in the repository, then pull and update the patch queue, and then go back and do qpush -a to get the patches applied again.
= Known issues still being worked on =
= QA =
Started build for QA to test.
Fixed:
* Adblock doesn't seem to filter (tries to call a function on undefined).
* Adblock crashes.


= xpcshell =
= xpcshell =
Line 5: Line 28:
== default compartment leaks ==
== default compartment leaks ==


bug 599761 (_newJSDContext), landed, missed a part (now bug 600580)
=== todo ===


bug 599762 (js::ctypes::CClosure::ClosureStub), patch in bug, tryservering
=== done ===


bug 600022 (XPCShellEnvironment::Init()), patch in bug, tryservering
bug 599761 (_newJSDContext)


bug 600032 (JetpackChild::Init()), landed
bug 599762 (js::ctypes::CClosure::ClosureStub)


bug 600173 (atoms should always be in the default compartment), ready to land
bug 600022 (XPCShellEnvironment::Init())


bug 600402 (don't copy strings for the same compartment), patch in bug
bug 600032 (JetpackChild::Init())


bug 600580 (_newJSDContext, part 2), patch in bug, tryservering
bug 600173 (atoms should always be in the default compartment)
 
bug 600580 (_newJSDContext, part 2)
 
bug 600402 (don't copy strings for the same compartment)


= Mochitest =
= Mochitest =


Run with <code>python runtests.py --total-chunks=20 --this-chunk=n --autorun --debugger=gdb</code> where <code>n</code> is the chunk you want to examine.
Pass.


== Remaining large-ish items ==
== Remaining large-ish items ==


* XPCNativeWrapper.unwrap() different compartments
Post b7:
* XPCSafeJSObjectWrapper::WrapObject() fails
* document.domain (we currently don't revoke access to the document's original domain, we probably should do that).
* Error hacks?
* Error hacks?
* XPCNW holder objects vs JS_ClearScope()
* Fix error messages for property access denied. Old message included two origins, new one doesn't, and it looks like we're not using any of the localization that the old message had. Error console should show both origins, exception message probably (?) shouldn't.
* Location object
* Confirm that the fix in docshell/test/chrome/test_bug454235.xul is appropriate.
* DocShell navigation tests
* We no longer support .wrappedJSObject on location and XMLHttpRequest. Confirm that it was ok to remove those from tests/js/src/xpconnect/tests/mochitest/test_bug553407.html.
* IndexedDB and DOM worker tests, need cross compartment structured clone (jorendorff/bent)
 


FIXED issues:
FIXED issues:
 
* I allow named frames to be created on xray wrappers so parent[name] works.
* Fix up XrayWrappers
* Make chrome wrappers expose nothing by default
* added scriptOnly check to chrome object and make all XOWs script only
* Location object
* nsJSContext::BindCompiledEventHandler(), target and funobj from
* nsJSContext::BindCompiledEventHandler(), target and funobj from
* Components.utils.import() from non-chrome code.
* Components.utils.import() from non-chrome code.
* DocShell navigation tests
* XPCNativeWrapper.unwrap() different compartments
* IndexedDB and DOM worker tests, need cross compartment structured clone (jorendorff/bent)
* XPCNW holder objects vs JS_ClearScope()


failing tests:
== Remaining test failures ==


<pre>
<pre>
/tests/js/src/xpconnect/tests/mochitest/test_bug505915.html
/tests/js/src/xpconnect/tests/mochitest/test_cows.html
/tests/js/src/xpconnect/tests/mochitest/test_frameWrapping.html
/tests/dom/tests/mochitest/ajax/offline/test_updatingManifest.html
/tests/docshell/test/navigation/test_opener.html
/tests/docshell/test/navigation/test_reserved.html
/tests/docshell/test/test_bug529119-1.html
/tests/docshell/test/test_bug529119-2.html
/tests/content/html/content/test/test_bug388558.html (mounir?)
</pre>
</pre>


assert-to-death tests:
Asserts to death:


<pre>
<pre>
/tests/toolkit/components/passwordmgr/test/test_basic_form_observer_autofillForms.html
/tests/toolkit/components/passwordmgr/test/test_basic_form_observer_foundLogins.html
</pre>
</pre>


== Chunk 1 ==
= Mochichrome =


pass, 22848 tests
<pre>
 
</pre>
== Chunk 2 ==
 
pass
 
== Chunk 3 ==
 
1 test failed out of 14582
 
  /tests/content/html/content/test/test_bug209275.xhtml iframeCw.document is null on line 232.
 
== Chunk 4 ==
 
pass, 19244 tests
== Chunk 5 ==
 
12 failures, doesn't complete, got through 865 tests, two tests fail in /tests/docshell/test/navigation/*, gets stuck on /tests/dom/indexedDB/ tests (bent looking into that)
 
pass: /tests/dom/tests/mochitest/ajax


fails: tests/dom/tests/mochitest/bugs/test_bug346659.html, /tests/dom/tests/mochitest/bugs/test_bug396843.html, http://mochi.test:8888/tests/dom/tests/mochitest/bugs/test_bug409349.html, http://mochi.test:8888/tests/dom/tests/mochitest/bugs/test_bug440572.html, http://mochi.test:8888/tests/dom/tests/mochitest/bugs/test_bug531176.html, http://mochi.test:8888/tests/dom/tests/mochitest/bugs/test_bug61098.html, http://mochi.test:8888/tests/dom/tests/mochitest/dom-level0/test_setting_document.domain_idn.html (idn failures?),
chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul


== Chunk 6 ==
Lots of different issues:


127 tests pass, then we hit test_xhrAbort.html, and fail miserably in nsContentUtils::ReparentClonedObjectToScope(). (bent?)
7257 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul | enumeration over XOWs walks the prototype chain - got "host,hostname,port", expected "assign,foopy,hash,host,hostname,href,pathname,port,protocol,reload,replace,search"
== Chunk 7 ==


pass, 177 tests
Enumeration bug. "for (e in location)" doesn't walk the prototype chain.


== Chunk 8 ==
7259 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul | wrapper iterators are properly iterators - got "object", expected "function,function,function,number,string,string,string,string,string,string,string,string"


pass, 346 tests
Enumeration bug. "Iterator(new XPCNativeWrapper(location))" is busted. I will look into this further.
== Chunk 9 ==


pass, per peterv.
7261 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul | enumeration over SJOWs walks the prototype chain and works over XOWs - got "", expected "assign,foopy,hash,host,hostname,href,pathname,port,protocol,reload,replace,search"


== Chunk 10 ==
Enumeration bug. Same kind of problem but here we're trying to iterate over iwin.wrappedObject.location.


pass, per peterv.
7268 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul | cyclic proto value allowed
== Chunk 11 ==


pass, per peterv.
We do iwin.__proto__ = iwin and expect it to fail, but this just creates a new ordinary data property called __proto__ on the holder.
== Chunk 12 ==


pass, per peterv.
7269 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul | iwin.eval does not throw an exception
== Chunk 13 ==


pass, per peterv.
iwin.eval("'PASS'") is supposed to succeed, but iwin.eval is undefined.


== Chunk 14 ==
7271 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul | Unable to wrap a primitive, even without 'new'


pass, per peterv.
An old feature we didn't retain.  XPCNativeWrapper("") is expected to return
"". Maybe we can just remove the test.


== Chunk 15 ==
7276 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul | XPCNativeWrappers allow expandos through
7284 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul | delete doesn't delete underlying properties - got undefined, expected 5
    let iwin = $('ifr').contentWindow;
    let (w = new XPCNativeWrapper($('ifr').contentWindow)) {
        w.foopybar = 5;
        ok(!("foopybar" in iwin), "XPCNativeWrappers allow expandos through");
        ...
        iwin.foopy = 5;
        ok(delete w.foopy, "delete returns true");
        is(iwin.foopy, 5, "delete doesn't delete underlying properties");


pass, per peterv.
We create an explicit XPCNativeWrapper ''w'' around ''iwin'', a wrapper of an outer window. Expandos of ''w'' must not affect ''iwin'' and vice versa.


== Chunk 16 ==
I think the basic story here is "there are no same-compartment X-ray wrappers".


pass
7288 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul | allowed to update iwin.__proto__ to null - got [], expected null


was: * 1907 INFO TEST-START | /tests/dom/tests/mochitest/localstorage/test_localStorageOriginsDiff.html<br>Compartment mismatch 0x105d5cc00 vs. 0x10640ec00<br>Assertion failure: compartment mismatched, at /src/mozilla/tracemonkey/js/src/jscntxtinlines.h:515 -- fixed
Possibly just noise. If I comment out the cyclic-__proto__ test, this one
passes.


== Chunk 17 ==
But I can't imagine why iwin.__proto__ appears to be [] here. I looked, and the
value we eventually return is a cross-compartment XrayWrapper of an
OuterWindowProxy. The value should be null.


pass, 573 tests (sloooooooooow to run)
-jorendorff, 10/5/2010


== Chunk 18 ==
= Browserchrome =


pass, 5073 tests
Pass.


== Chunk 19 ==
= make check =


pass
Pass.


== Chunk 20 ==
= make jstestbrowser (jsreftest) =


pass, 17850 tests, with the exception of the passwrd manager failures listed up top.
Pass.

Latest revision as of 02:10, 14 October 2010

This page is a tracking page for getting the JS compartments work to pass xpcshell tests and Mochitests and other automated test suites.

How to get the patch queue

Install hg queues.

Then add to .hg/patches/.hg/hgrc

[paths]

default = http://hg.mozilla.org/users/mrbkap_mozilla.com/brain-transplants

Then go into .hg/patches and hg pull, hg up and then go back to ../../ and do hg qpush -a. Build. Every time we update the queue you have to do qpop -a in the repository, then pull and update the patch queue, and then go back and do qpush -a to get the patches applied again.

Known issues still being worked on

QA

Started build for QA to test.

Fixed:

  • Adblock doesn't seem to filter (tries to call a function on undefined).
  • Adblock crashes.

xpcshell

default compartment leaks

todo

done

bug 599761 (_newJSDContext)

bug 599762 (js::ctypes::CClosure::ClosureStub)

bug 600022 (XPCShellEnvironment::Init())

bug 600032 (JetpackChild::Init())

bug 600173 (atoms should always be in the default compartment)

bug 600580 (_newJSDContext, part 2)

bug 600402 (don't copy strings for the same compartment)

Mochitest

Pass.

Remaining large-ish items

Post b7:

  • document.domain (we currently don't revoke access to the document's original domain, we probably should do that).
  • Error hacks?
  • Fix error messages for property access denied. Old message included two origins, new one doesn't, and it looks like we're not using any of the localization that the old message had. Error console should show both origins, exception message probably (?) shouldn't.
  • Confirm that the fix in docshell/test/chrome/test_bug454235.xul is appropriate.
  • We no longer support .wrappedJSObject on location and XMLHttpRequest. Confirm that it was ok to remove those from tests/js/src/xpconnect/tests/mochitest/test_bug553407.html.

FIXED issues:

  • I allow named frames to be created on xray wrappers so parent[name] works.
  • Fix up XrayWrappers
  • Make chrome wrappers expose nothing by default
  • added scriptOnly check to chrome object and make all XOWs script only
  • Location object
  • nsJSContext::BindCompiledEventHandler(), target and funobj from
  • Components.utils.import() from non-chrome code.
  • DocShell navigation tests
  • XPCNativeWrapper.unwrap() different compartments
  • IndexedDB and DOM worker tests, need cross compartment structured clone (jorendorff/bent)
  • XPCNW holder objects vs JS_ClearScope()

Remaining test failures


Asserts to death:


Mochichrome


chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul

Lots of different issues:

7257 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul | enumeration over XOWs walks the prototype chain - got "host,hostname,port", expected "assign,foopy,hash,host,hostname,href,pathname,port,protocol,reload,replace,search"

Enumeration bug. "for (e in location)" doesn't walk the prototype chain.

7259 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul | wrapper iterators are properly iterators - got "object", expected "function,function,function,number,string,string,string,string,string,string,string,string"

Enumeration bug. "Iterator(new XPCNativeWrapper(location))" is busted. I will look into this further.

7261 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul | enumeration over SJOWs walks the prototype chain and works over XOWs - got "", expected "assign,foopy,hash,host,hostname,href,pathname,port,protocol,reload,replace,search"

Enumeration bug. Same kind of problem but here we're trying to iterate over iwin.wrappedObject.location.

7268 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul | cyclic proto value allowed

We do iwin.__proto__ = iwin and expect it to fail, but this just creates a new ordinary data property called __proto__ on the holder.

7269 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul | iwin.eval does not throw an exception

iwin.eval("'PASS'") is supposed to succeed, but iwin.eval is undefined.

7271 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul | Unable to wrap a primitive, even without 'new'

An old feature we didn't retain. XPCNativeWrapper("") is expected to return "". Maybe we can just remove the test.

7276 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul | XPCNativeWrappers allow expandos through
7284 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul | delete doesn't delete underlying properties - got undefined, expected 5
   let iwin = $('ifr').contentWindow;
   let (w = new XPCNativeWrapper($('ifr').contentWindow)) {
       w.foopybar = 5;
       ok(!("foopybar" in iwin), "XPCNativeWrappers allow expandos through");
       ...
       iwin.foopy = 5;
       ok(delete w.foopy, "delete returns true");
       is(iwin.foopy, 5, "delete doesn't delete underlying properties");

We create an explicit XPCNativeWrapper w around iwin, a wrapper of an outer window. Expandos of w must not affect iwin and vice versa.

I think the basic story here is "there are no same-compartment X-ray wrappers".

7288 ERROR TEST-UNEXPECTED-FAIL | chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul | allowed to update iwin.__proto__ to null - got [], expected null

Possibly just noise. If I comment out the cyclic-__proto__ test, this one passes.

But I can't imagine why iwin.__proto__ appears to be [] here. I looked, and the value we eventually return is a cross-compartment XrayWrapper of an OuterWindowProxy. The value should be null.

-jorendorff, 10/5/2010

Browserchrome

Pass.

make check

Pass.

make jstestbrowser (jsreftest)

Pass.