function _doSearchInOneFile(file) {
        var result = new $.Deferred();

        DocumentManager.getDocumentText(file)
            .done(function (text, timestamp) {
                // Note that we don't fire a model change here, since this is always called by some outer batch
                // operation that will fire it once it's done.
                var matches = _getSearchMatches(text, searchModel.queryExpr);
                searchModel.setResults(file.fullPath, {matches: matches, timestamp: timestamp});
                result.resolve(!!matches.length);
            })
            .fail(function () {
                // Always resolve. If there is an error, this file
                // is skipped and we move on to the next file.
                result.resolve(false);
            });

        return result.promise();
    }
@private
Finds search results in the given file and adds them to 'searchResults.' Resolves with
true if any matches found, false if none found. Errors reading the file are treated the
same as if no results found.

Does not perform any filtering - assumes caller has already vetted this file as a search
candidate.

@param {!File} file
@return {$.Promise}