Depending on what you need to do with the cached files, you could simply use the FileIO API to save the binary to your extension's sandbox environment. Just storing the filepath to the original file probably won't work as the API can only read within it's sandbox [unless your choosing the files yourself through an input].
If necessary, you can add the "unlimitedStorage" Permission (more at the developer documentation )to your manifest.json in order to override the storage limitations.
"permissions": [
"unlimitedStorage"
],
This will only apply to the File I/O (temporary/persistent) and Web SQL (temporary only). Due to it's synchronous implementation, localStorage has a maximum of ~ 2700000 characters (as it is stored as UTF-16), which won't be increased by setting this permission.
With the File API and Chrome 13+, you can request a certain amount of quota (see here and here for full example). This has been introduced to work for Web apps and works without setting the unlimitedStorage permission. (However, if the permission is set, the user is currently not asked to allow the storage request)
webkitStorageInfo.requestQuota(
webkitStorageInfo.PERSISTENT
newQuotaInBytes,
quotaCallback,
errorCallback);
In my experiments, this seems to be the only way to persistently store large amounts of data.