function _readUserKeyMap() {
        var file   = FileSystem.getFileForPath(_getUserKeyMapFilePath()),
            result = new $.Deferred();

        file.exists(function (err, doesExist) {
            if (doesExist) {
                FileUtils.readAsText(file)
                    .done(function (text) {
                        var keyMap = {};
                        try {
                            if (text) {
                                var json = JSON.parse(text);
                                // If no overrides, return an empty key map.
                                result.resolve((json && json.overrides) || keyMap);
                            } else {
                                // The file is empty, so return an empty key map.
                                result.resolve(keyMap);
                            }
                        } catch (err) {
                            // Cannot parse the text read from the key map file.
                            result.reject(err);
                        }
                    })
                    .fail(function (err) {
                        // Key map file cannot be loaded.
                        result.reject(err);
                    });
            } else {
                // Just resolve if no user key map file
                result.resolve();
            }
        });
        return result.promise();
    }
@private

Reads in the user key map file and parses its content into JSON.
Returns the user key bindings if JSON has "overrides".
Otherwise, returns an empty object or an error if the file
cannot be parsed or loaded.

@return {$.Promise} a jQuery promise that will be resolved with the JSON
object if the user key map file has "overrides" property or an empty JSON.
If the key map file cannot be read or cannot be parsed by the JSON parser,
then the promise is rejected with an error.