- Electron version:
  1.3.3
- Operating system:
  OSX El Capitan

``` javascript
      function cbError(e) {
         console.error('failure', e);
      }

      navigator.webkitPersistentStorage.requestQuota( 10 * 1024* 1024, function(granted) {
        webkitRequestFileSystem(PERSISTENT, granted, cb, cbError);
      },
      cbError)
```

webkitRequestFileSystem is failing with:

```
FileError {code: 2, name: "SecurityError", message: "It was determined that certain files are unsafe fo… too many calls are being made on file resources."}code: 2message: "It was determined that certain files are unsafe for access within a Web application, or that too many calls are being made on file resources."name: "SecurityError"__proto__: FileError
```

This page is being served from a custom:// scheme if that matters.

atom/browser/atom_browser_client.cc
const std::vector<std::string>& schemes) {
  g_custom_service_worker_schemes = base::JoinString(schemes, ",");
}
AtomBrowserClient::AtomBrowserClient() : delegate_(nullptr) {
}
AtomBrowserClient::~AtomBrowserClient() {
}
content::WebContents* AtomBrowserClient::GetWebContentsFromProcessID(
    int process_id) {
  
  if (ContainsKey(pending_processes_, process_id))
    process_id = pending_processes_[process_id];
  
  
  return WebContentsPreferences::GetWebContentsFromProcessID(process_id);
}
void AtomBrowserClient::RenderProcessWillLaunch(
    content::RenderProcessHost* host) {
  int process_id = host->GetID();
  host->AddFilter(new printing::PrintingMessageFilter(process_id));
  host->AddFilter(new TtsMessageFilter(process_id, host->GetBrowserContext()));
  host->AddFilter(
      new WidevineCdmMessageFilter(process_id, host->GetBrowserContext()));
}
content::SpeechRecognitionManagerDelegate*
    AtomBrowserClient::CreateSpeechRecognitionManagerDelegate() {
  return new AtomSpeechRecognitionManagerDelegate;
}
content::AccessTokenStore* AtomBrowserClient::CreateAccessTokenStore() {