| # Mozc IPC |
| |
| ## Abstract |
| |
| This document describes why IPC is necessary to run Mozc, and how each |
| implementation should be. |
| |
| ## Background |
| |
| Mozc is an input method product and it consits with multiple processes |
| to achieve text input. We have "converter" process to maintain |
| conversions and "renderer" process to render the candidates of input. |
| |
| ## Implementation requirements |
| |
| Mozc IPC call happens for EVERY key events. Thus we need to care the |
| privacy/security. Currently we adopt following policy: |
| |
| * the IPC name has to be private to the user: processes which run with another user's auth must not access to the IPC. |
| * the IPC name has to be safe to squatters. For example, using random IPC name will reduce the danger of squatters. |
| |
| In addition, Mozc IPC call is "one-shot". It doesn't require any |
| "connections". When a key event arrives to Mozc, it creates an |
| IPCClient instance, calls Call() method to send the command to the |
| server, gets its response, and then destroy IPCClient object. |
| |
| So you don't need to care the maintenance of connections, but you need |
| to care the performance a bit. If one of a step during this is very |
| slow, it will damage the performance of Mozc. |
| |
| Note that IPC calls happen only when a user presses a key or clicks |
| mouses. So if performance of an implementation is not the best, it |
| might not be a problem. Please think about the balance of |
| implementation and security. |