OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 ASSERT(blob); | 260 ASSERT(blob); |
261 DVLOG(1) << "reading as data URL: " << utf8BlobUUID(blob).data() << " " | 261 DVLOG(1) << "reading as data URL: " << utf8BlobUUID(blob).data() << " " |
262 << utf8FilePath(blob).data(); | 262 << utf8FilePath(blob).data(); |
263 | 263 |
264 readInternal(blob, FileReaderLoader::ReadAsDataURL, exceptionState); | 264 readInternal(blob, FileReaderLoader::ReadAsDataURL, exceptionState); |
265 } | 265 } |
266 | 266 |
267 void FileReader::readInternal(Blob* blob, | 267 void FileReader::readInternal(Blob* blob, |
268 FileReaderLoader::ReadType type, | 268 FileReaderLoader::ReadType type, |
269 ExceptionState& exceptionState) { | 269 ExceptionState& exceptionState) { |
270 // If multiple concurrent read methods are called on the same FileReader, Inva
lidStateError should be thrown when the state is kLoading. | 270 // If multiple concurrent read methods are called on the same FileReader, |
| 271 // InvalidStateError should be thrown when the state is kLoading. |
271 if (m_state == kLoading) { | 272 if (m_state == kLoading) { |
272 exceptionState.throwDOMException( | 273 exceptionState.throwDOMException( |
273 InvalidStateError, "The object is already busy reading Blobs."); | 274 InvalidStateError, "The object is already busy reading Blobs."); |
274 return; | 275 return; |
275 } | 276 } |
276 | 277 |
277 if (blob->isClosed()) { | 278 if (blob->isClosed()) { |
278 exceptionState.throwDOMException( | 279 exceptionState.throwDOMException( |
279 InvalidStateError, | 280 InvalidStateError, |
280 String(blob->isFile() ? "File" : "Blob") + " has been closed."); | 281 String(blob->isFile() ? "File" : "Blob") + " has been closed."); |
281 return; | 282 return; |
282 } | 283 } |
283 | 284 |
284 ExecutionContext* context = getExecutionContext(); | 285 ExecutionContext* context = getExecutionContext(); |
285 if (!context) { | 286 if (!context) { |
286 exceptionState.throwDOMException( | 287 exceptionState.throwDOMException( |
287 AbortError, "Reading from a detached FileReader is not supported."); | 288 AbortError, "Reading from a detached FileReader is not supported."); |
288 return; | 289 return; |
289 } | 290 } |
290 | 291 |
291 // A document loader will not load new resources once the Document has detache
d from its frame. | 292 // A document loader will not load new resources once the Document has |
| 293 // detached from its frame. |
292 if (context->isDocument() && !toDocument(context)->frame()) { | 294 if (context->isDocument() && !toDocument(context)->frame()) { |
293 exceptionState.throwDOMException( | 295 exceptionState.throwDOMException( |
294 AbortError, | 296 AbortError, |
295 "Reading from a Document-detached FileReader is not supported."); | 297 "Reading from a Document-detached FileReader is not supported."); |
296 return; | 298 return; |
297 } | 299 } |
298 | 300 |
299 // "Snapshot" the Blob data rather than the Blob itself as ongoing | 301 // "Snapshot" the Blob data rather than the Blob itself as ongoing |
300 // read operations should not be affected if close() is called on | 302 // read operations should not be affected if close() is called on |
301 // the Blob being read. | 303 // the Blob being read. |
(...skipping 24 matching lines...) Expand all Loading... |
326 | 328 |
327 void FileReader::abort() { | 329 void FileReader::abort() { |
328 DVLOG(1) << "aborting"; | 330 DVLOG(1) << "aborting"; |
329 | 331 |
330 if (m_loadingState != LoadingStateLoading && | 332 if (m_loadingState != LoadingStateLoading && |
331 m_loadingState != LoadingStatePending) { | 333 m_loadingState != LoadingStatePending) { |
332 return; | 334 return; |
333 } | 335 } |
334 m_loadingState = LoadingStateAborted; | 336 m_loadingState = LoadingStateAborted; |
335 | 337 |
336 // Schedule to have the abort done later since abort() might be called from th
e event handler and we do not want the resource loading code to be in the stack. | 338 // Schedule to have the abort done later since abort() might be called from |
| 339 // the event handler and we do not want the resource loading code to be in the |
| 340 // stack. |
337 getExecutionContext()->postTask( | 341 getExecutionContext()->postTask( |
338 BLINK_FROM_HERE, | 342 BLINK_FROM_HERE, |
339 createSameThreadTask(&delayedAbort, wrapPersistent(this))); | 343 createSameThreadTask(&delayedAbort, wrapPersistent(this))); |
340 } | 344 } |
341 | 345 |
342 void FileReader::doAbort() { | 346 void FileReader::doAbort() { |
343 DCHECK_NE(kDone, m_state); | 347 DCHECK_NE(kDone, m_state); |
344 AutoReset<bool> firingEvents(&m_stillFiringEvents, true); | 348 AutoReset<bool> firingEvents(&m_stillFiringEvents, true); |
345 | 349 |
346 terminate(); | 350 terminate(); |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
470 ProgressEvent::create(type, false, m_loader->bytesLoaded(), 0)); | 474 ProgressEvent::create(type, false, m_loader->bytesLoaded(), 0)); |
471 } | 475 } |
472 | 476 |
473 DEFINE_TRACE(FileReader) { | 477 DEFINE_TRACE(FileReader) { |
474 visitor->trace(m_error); | 478 visitor->trace(m_error); |
475 EventTargetWithInlineData::trace(visitor); | 479 EventTargetWithInlineData::trace(visitor); |
476 ActiveDOMObject::trace(visitor); | 480 ActiveDOMObject::trace(visitor); |
477 } | 481 } |
478 | 482 |
479 } // namespace blink | 483 } // namespace blink |
OLD | NEW |