| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 var fileSystemNatives = requireNative('file_system_natives'); | 5 var fileSystemNatives = requireNative('file_system_natives'); |
| 6 var GetIsolatedFileSystem = fileSystemNatives.GetIsolatedFileSystem; | 6 var GetIsolatedFileSystem = fileSystemNatives.GetIsolatedFileSystem; |
| 7 var lastError = require('lastError'); | |
| 8 var GetModuleSystem = requireNative('v8_context').GetModuleSystem; | 7 var GetModuleSystem = requireNative('v8_context').GetModuleSystem; |
| 9 // TODO(sammc): Don't require extension. See http://crbug.com/235689. | 8 // TODO(sammc): Don't require extension. See http://crbug.com/235689. |
| 10 var GetExtensionViews = requireNative('runtime').GetExtensionViews; | 9 var GetExtensionViews = requireNative('runtime').GetExtensionViews; |
| 11 var safeCallbackApply = require('uncaught_exception_handler').safeCallbackApply; | 10 var safeCallbackApply = require('uncaught_exception_handler').safeCallbackApply; |
| 12 | 11 |
| 12 var jsLastError = bindingUtil ? undefined : require('lastError'); |
| 13 function runCallbackWithLastError(name, message, stack, callback) { |
| 14 if (bindingUtil) |
| 15 bindingUtil.runCallbackWithLastError(message, callback); |
| 16 else |
| 17 jsLastError.run(name, message, stack, callback); |
| 18 } |
| 19 |
| 20 |
| 13 var WINDOW = {}; | 21 var WINDOW = {}; |
| 14 try { | 22 try { |
| 15 WINDOW = window; | 23 WINDOW = window; |
| 16 } catch (e) { | 24 } catch (e) { |
| 17 // Running in SW context. | 25 // Running in SW context. |
| 18 // TODO(lazyboy): Synchronous access to background page is not possible from | 26 // TODO(lazyboy): Synchronous access to background page is not possible from |
| 19 // service worker context. Decide what we should do in this case for the class | 27 // service worker context. Decide what we should do in this case for the class |
| 20 // of APIs that require access to background page or window object | 28 // of APIs that require access to background page or window object |
| 21 } | 29 } |
| 22 | 30 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 44 callback(); | 52 callback(); |
| 45 return; | 53 return; |
| 46 } | 54 } |
| 47 | 55 |
| 48 var entries = []; | 56 var entries = []; |
| 49 var hasError = false; | 57 var hasError = false; |
| 50 | 58 |
| 51 var getEntryError = function(fileError) { | 59 var getEntryError = function(fileError) { |
| 52 if (!hasError) { | 60 if (!hasError) { |
| 53 hasError = true; | 61 hasError = true; |
| 54 lastError.run( | 62 runCallbackWithLastError( |
| 55 apiName + '.' + functionName, | 63 apiName + '.' + functionName, |
| 56 'Error getting fileEntry, code: ' + fileError.code, | 64 'Error getting fileEntry, code: ' + fileError.code, |
| 57 request.stack, | 65 request.stack, |
| 58 callback); | 66 callback); |
| 59 } | 67 } |
| 60 } | 68 } |
| 61 | 69 |
| 62 // Loop through the response entries and asynchronously get the | 70 // Loop through the response entries and asynchronously get the |
| 63 // FileEntry for each. We use hasError to ensure that only the first | 71 // FileEntry for each. We use hasError to ensure that only the first |
| 64 // error is reported. Note that an error can occur either during the | 72 // error is reported. Note that an error can occur either during the |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 // WebDOMFileSystem::createV8Entry(). | 104 // WebDOMFileSystem::createV8Entry(). |
| 97 if (entry.isDirectory) { | 105 if (entry.isDirectory) { |
| 98 fs.root.getDirectory(baseName, {}, getEntryCallback, | 106 fs.root.getDirectory(baseName, {}, getEntryCallback, |
| 99 getEntryError); | 107 getEntryError); |
| 100 } else { | 108 } else { |
| 101 fs.root.getFile(baseName, {}, getEntryCallback, getEntryError); | 109 fs.root.getFile(baseName, {}, getEntryCallback, getEntryError); |
| 102 } | 110 } |
| 103 } catch (e) { | 111 } catch (e) { |
| 104 if (!hasError) { | 112 if (!hasError) { |
| 105 hasError = true; | 113 hasError = true; |
| 106 lastError.run(apiName + '.' + functionName, | 114 runCallbackWithLastError(apiName + '.' + functionName, |
| 107 'Error getting fileEntry: ' + e.stack, | 115 'Error getting fileEntry: ' + e.stack, |
| 108 request.stack, | 116 request.stack, callback); |
| 109 callback); | |
| 110 } | 117 } |
| 111 } | 118 } |
| 112 }); | 119 }); |
| 113 } | 120 } |
| 114 }); | 121 }); |
| 115 }; | 122 }; |
| 116 var entryIdManager = require('entryIdManager'); | 123 var entryIdManager = require('entryIdManager'); |
| 117 } else { | 124 } else { |
| 118 // Force the fileSystem API to be loaded in the background page. Using | 125 // Force the fileSystem API to be loaded in the background page. Using |
| 119 // backgroundPageModuleSystem.require('fileSystem') is insufficient as | 126 // backgroundPageModuleSystem.require('fileSystem') is insufficient as |
| (...skipping 23 matching lines...) Expand all Loading... |
| 143 if (!response) { | 150 if (!response) { |
| 144 callback(); | 151 callback(); |
| 145 return; | 152 return; |
| 146 } | 153 } |
| 147 var fileSystemId = response.fileSystemId; | 154 var fileSystemId = response.fileSystemId; |
| 148 var baseName = response.baseName; | 155 var baseName = response.baseName; |
| 149 var fs = GetIsolatedFileSystem(fileSystemId); | 156 var fs = GetIsolatedFileSystem(fileSystemId); |
| 150 | 157 |
| 151 try { | 158 try { |
| 152 fs.root.getDirectory(baseName, {}, callback, function(fileError) { | 159 fs.root.getDirectory(baseName, {}, callback, function(fileError) { |
| 153 lastError.run('runtime.' + functionName, | 160 runCallbackWithLastError( |
| 154 'Error getting Entry, code: ' + fileError.code, | 161 'runtime.' + functionName, |
| 155 request.stack, | 162 'Error getting Entry, code: ' + fileError.code, |
| 156 callback); | 163 request.stack, callback); |
| 157 }); | 164 }); |
| 158 } catch (e) { | 165 } catch (e) { |
| 159 lastError.run('runtime.' + functionName, | 166 runCallbackWithLastError('runtime.' + functionName, |
| 160 'Error: ' + e.stack, | 167 'Error: ' + e.stack, |
| 161 request.stack, | 168 request.stack, callback); |
| 162 callback); | |
| 163 } | 169 } |
| 164 } | 170 } |
| 165 } | 171 } |
| 166 } else { | 172 } else { |
| 167 var backgroundPageModuleSystem = GetModuleSystem(backgroundPage); | 173 var backgroundPageModuleSystem = GetModuleSystem(backgroundPage); |
| 168 // Force the runtime API to be loaded in the background page. Using | 174 // Force the runtime API to be loaded in the background page. Using |
| 169 // backgroundPageModuleSystem.require('runtime') is insufficient as | 175 // backgroundPageModuleSystem.require('runtime') is insufficient as |
| 170 // requireNative is only allowed while lazily loading an API. | 176 // requireNative is only allowed while lazily loading an API. |
| 171 backgroundPage.chrome.runtime; | 177 backgroundPage.chrome.runtime; |
| 172 return backgroundPageModuleSystem.require('fileEntryBindingUtil') | 178 return backgroundPageModuleSystem.require('fileEntryBindingUtil') |
| 173 .getBindDirectoryEntryCallback(); | 179 .getBindDirectoryEntryCallback(); |
| 174 } | 180 } |
| 175 } | 181 } |
| 176 | 182 |
| 177 exports.$set('getFileBindingsForApi', getFileBindingsForApi); | 183 exports.$set('getFileBindingsForApi', getFileBindingsForApi); |
| 178 exports.$set('getBindDirectoryEntryCallback', getBindDirectoryEntryCallback); | 184 exports.$set('getBindDirectoryEntryCallback', getBindDirectoryEntryCallback); |
| OLD | NEW |