Hi all, I just pushed another helper class that I thought others might find useful.
CopyableErrorResult is a specialized form of ErrorResult. Its intended to allow slightly more rich error values to be passed through things like ipdl structure and MozPromise. This is useful when implementing web exposed features that need to execute code in the parent process and surface useful TypeError messages back to the page. A simple nsresult loses the developer friendly messages. If you are building something like this, then you might want to consider CopyableErrorResult. If in doubt, though, please use ErrorResult itself. It has stricter checking and should be preferred. Particularly if there is any chance the error might contain a js exception. The CopyableErrorResult has a few properties: 1. Asserts if you try to store a js exception. It may only contain simple errors or errors with messages. In release builds it converts the js exception to an NS_ERROR_FAILURE. 2. Has a copy constructor, assignment operator, etc. 3. May be safely transferred across threads. 4. Automatically suppresses errors instead of asserting if its not consumed. These are significant because they mean you can create an ipdl structure or union type that contains a CopyableErrorResult. This is not possible with an ordinary ErrorResult because there is no copy constructor, etc. It is safer to use CopyableErrorResult in a MozPromise reaction because its thread safe and does not assert if its destroyed before consumed. These are important because MozPromise reactions can cross thread boundaries and a disconnected promise may not consume its reaction value, etc. Using CopyableErrorResult allows you to provide error messages along with TypeError, etc. Passing just an nsresult provides a worse developer experience for webdevs. One quirk you may run into is that CopyableErrorResult may not be used as a value argument to a method. This is because it contains a js MOZ_NON_PARAM value in a union type even through it does runtime checking to avoid ever actually using that type. To work around this you do this: DoFoo(const CopyableErrorResult& aRv) { ConsumeResult(CopyableErrorResult(aRv)); } This is often needed in MozPromise reaction handlers. Please let me know if you run into any problems. Thanks. Ben _______________________________________________ dev-platform mailing list dev-platform@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-platform