Bug 1731003 Comment 0 Edit History

Note: The actual edited comment in the bug view page will always show the original commenter’s name and original timestamp.

On Windows, the cache is all or nothing. When it's disabled, we get COM proxies from the content process and everything uses those. When the cache is enabled, we don't get COM proxies from the content process and we can only use the cache.

1. Currently, methods (Name, Description, etc.) in RemoteAccessible fall back to the COM proxy if mCachedFields is null.
2. But even when the cache is enabled, mCachedFields can be null if there were no cache-worthy fields for this Accessible.
3. In that case, we'll try to fall back to the COM proxy, which will end up returning the MsaaAccessible from our process.
4. We'll then call the COM method on that MsaaAccessible; get_accName, get_accDescription, etc.
5. Because the cache is enabled, that method will call RemoteAccessible::Name, RemoteAccessible::Description, etc., taking us back to point 1.
6. Infinite recursion ensues, culminating in a spectacular crash.
On Windows, the cache is all or nothing. When it's disabled, we get COM proxies from the content process and everything uses those. When the cache is enabled, we don't get COM proxies from the content process and we can only use the cache.

1. Currently, methods (Name, Description, etc.) in RemoteAccessible fall back to the COM proxy if mCachedFields is null.
2. But even when the cache is enabled, mCachedFields can be null if there were no cache-worthy fields for this Accessible.
3. In that case, we'll try to fall back to the COM proxy, which will end up returning the MsaaAccessible from our process.
4. We'll then call the COM method on that MsaaAccessible; get_accName, get_accDescription, etc.
5. Because the cache is enabled, that method will call RemoteAccessible::Name, RemoteAccessible::Description, etc., taking us back to point 1.
6. Infinite recursion ensues, culminating in a spectacular crash.

Instead, these RemoteAccessible methods should check whether the cache is enabled. If it is, they should use the RemoteAccessibleBase method (regardless of mCachedFields). If not, they should always use the COM proxy.

Back to Bug 1731003 Comment 0