This causes unexpected richtext2 test failures. Most of them are just failing in a different way than they did before -- unselect and forwardDelete are now throwing instead of returning false, but they were already failing (or should have been). This also causes a queryCommandEnabled regression in richtext2, because it now throws instead of returning false, and richtext2 expects it to return false.
The breakdown for throwing vs. returning false/"" is
* execCommand: IE/Opera throw, Gecko/WebKit return false
* enabled: IE throws, Gecko/WebKit/Opera return false
* indeterm/state/value: IE/Gecko throw, WebKit/Opera return false/"" (Opera doesn't support indeterm)
* supported: everyone returns false (duh)
So for queryCommandEnabled(), the majority return false rather than throwing, and browserscope's richtext2 tests for that, so I'm inclined to change the spec to require that. Ehsan, Ryosuke, what do you think about that spec change? (Not asking you for feedback about the patch, Ryosuke. :) )

I think that it makes sense for browsers to throw for a command which nobody supports. The compat risk comes from throwing for a command which is supported by other engines, but then again, that's what most web APIs do.
I wouldn't worry at all for what BrowserScope tests for, we can easily change that (and most of what they test for is based on what the author of the test thought should happen anyway!).
I'd be fine with taking a patch to how Gecko handles this to match the current spec, and let it bake on the Beta channel, on the condition of backout if it proves to break a major website, however, I'd be surprised if it actually breaks a web site (because web authors are *supposed* to call queryCommandSupported if they want to do something fishy!).
Ryosuke, are you also willing to take this change in WebKit? I think it's a good idea for us to do this around the same time, and let each other know if a regression is found in either engine.

Passes try run: https://tbpl.mozilla.org/?tree=Try&rev=0a582f0d148c
This updates test_bug408231.html, which failed in v2. I missed it when running tests locally because it was in content/html/content/test/ for some reason, and I didn't run the tests from there locally. I've moved it to content/html/document/test/.

Comment on attachment 615151[details][diff][review]
Patch v3, passes tests
Review of attachment 615151[details][diff][review]:
-----------------------------------------------------------------
(FWIW, I don't really review changes to currentStatus.js, I just assume that they're auto-generated. As long as we understand why the output of richtext{,2} tests change, changes in their results are not that important.)

currentStatus.js for richtext2 is impossible to understand, in my experience, particularly diffs. I just post the output to the bug for reference so that we know which tests it's supposed to be fixing. The diffs to currentStatus.js are self-explanatory -- see bug 745723.

Ehsan, do we just want to match WebKit here? That would mean changing queryCommand(Indeterm|State|Value) to not throw; we already match for the other functions. If that's the way we want to go -- it makes the most sense to me at this point -- I'll update the spec and official tests.

This reduces test_runtest.html.json from 4.7M to 2.2M, mostly because of commands that are specced to return false/false/"" anyway -- like forwardDelete or insertText. Now we return false/false/"" because we don't support them, so the tests pass. I also updated the spec's tests to test an unsupported command ("quasit") explicitly, and then re-imported them, in case you're wondering why those files are modified.
I omitted most of the test_runtest.html.json changes, because the diff was too large again (>4M). The try run is at <https://tbpl.mozilla.org/?tree=Try&rev=b4e113a2932b>, and interested parties can get the actual patch from there.