Platform/JS Compartments Mochitest
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.
Todo:
- Adblock doesn't seem to filter (tries to call a function on undefined).
Fixed:
- 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
Run with python runtests.py --total-chunks=20 --this-chunk=n --autorun --debugger=gdb
where n
is the chunk you want to examine.
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?
- XPCSafeJSObjectWrapper::WrapObject() fails
-> remove XPCSafeJSObjectWrapper - 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
http://mochi.test:8888/tests/js/src/xpconnect/tests/mochitest/test_bug517163.html http://mochi.test:8888/tests/toolkit/components/passwordmgr/test/test_prompt.html http://mochi.test:8888/tests/toolkit/components/passwordmgr/test/test_notifications.html http://mochi.test:8888/tests/toolkit/components/passwordmgr/test/test_privbrowsing.html http://mochi.test:8888/tests/toolkit/components/passwordmgr/test/test_prompt.html
Asserts to death:
http://mochi.test:8888/tests/toolkit/components/microformats/tests/test_Microformats_add.html
Chunk 1
pass, 22848 tests
Chunk 2
pass, 11244 tests:
Chunk 3
pass, 14532 tests
Chunk 4
passed, 19311 tests
- test_play_twice.html is notoriously rando-orange, see bug 558812 and bug 573232
Chunk 5
pass, 4977 tests
Chunk 6
pass, 4825 tests
Chunk 7
pass, 194 tests
Chunk 8
pass, 346 tests
Chunk 9
pass, 159 tests
Chunk 10
pass, 396 tests
Chunk 11
pass, 234 tests
Chunk 12
pass, 396 tests
Chunk 13
pass, 458 tests
Chunk 14
pass, 482 tests
Chunk 15
pass, 491 tests
Chunk 16
pass, 7163 tests
Chunk 17
pass, 573 tests (sloooooooooow to run)
Chunk 18
pass, 5073 tests
Chunk 19
pass, 89415 tests
- bent: I fixed test_pluginstream_newstream.html so that it will work, but the underlying cause is a change in our access denied exception messages, which needs to get fixed. Followup bug?
Chunk 20
pass, 17909 tests
Mochichrome
13 failing tests out of 14051, in these files:
chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_evalInSandbox.xul -> add a function that the sandbox can call which forwards to getClassName
No idea what that comment about getClassName means. What is happening here is that the test is using exactly the same technique GreaseMonkey uses to set up the sandbox, and that doesn't work anymore.
The specific issue is with code that does sandbox.__proto__ = new XPCNativeWrapper(window);
where the caller is chrome, but sandbox and window are same-domain. When we rewrap the XPCNativeWrapper, it becomes a simple cross-compartment wrapper without X-ray behavior.
The whole rewrapping mechanism works as designed right up to WrapperFactory::Rewrap where it's actually time to create the new wrapper. We have a flags parameter that indicates we want X-ray behavior. But we create a wrapper without it.
We could just make that work, but mrbkap thinks we should instead provide a better sandboxing API and require GreaseMonkey (and any similar extensions) to switch to that.
-jorendorff, 10/5/2010
chrome://mochikit/content/chrome/js/src/xpconnect/tests/chrome/test_wrappers-2.xul -> enumeration?
Looking at this one next.
-jorendorff, 10/5/2010
Browserchrome
Failures:
chrome://mochikit/content/browser/toolkit/components/console/hudservice/tests/browser/browser_webconsole_netlogging.js chrome://mochikit/content/browser/browser/components/sessionstore/test/browser/browser_461743.js chrome://mochikit/content/browser/browser/components/privatebrowsing/test/browser/browser_privatebrowser_newwindow_stopcmd.js chrome://mochikit/content/browser/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_forgetthissite.js chrome://mochikit/content/browser/browser/components/preferences/tests/browser/browser_privacypane_1.js chrome://mochikit/content/browser/browser/components/places/tests/browser/browser_sidebarpanels_click.js chrome://mochikit/content/browser/browser/components/places/tests/browser/browser_library_middleclick.js
make check
Passes