Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(80)

Side by Side Diff: Source/modules/fetch/FetchBlobDataConsumerHandle.cpp

Issue 1265413002: Introduce FetchFormDataConsumerHandle. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #include "config.h" 5 #include "config.h"
6 #include "modules/fetch/FetchBlobDataConsumerHandle.h" 6 #include "modules/fetch/FetchBlobDataConsumerHandle.h"
7 7
8 #include "core/dom/ActiveDOMObject.h" 8 #include "core/dom/ActiveDOMObject.h"
9 #include "core/dom/CrossThreadTask.h" 9 #include "core/dom/CrossThreadTask.h"
10 #include "core/dom/ExecutionContext.h" 10 #include "core/dom/ExecutionContext.h"
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 , m_reader(reader) 344 , m_reader(reader)
345 , m_notifier(client) { } 345 , m_notifier(client) { }
346 ~ReaderImpl() override { } 346 ~ReaderImpl() override { }
347 347
348 Result read(void* data, size_t size, Flags flags, size_t* readSize) over ride 348 Result read(void* data, size_t size, Flags flags, size_t* readSize) over ride
349 { 349 {
350 if (m_readerContext->drained()) 350 if (m_readerContext->drained())
351 return Done; 351 return Done;
352 m_readerContext->ensureStartLoader(); 352 m_readerContext->ensureStartLoader();
353 Result r = m_reader->read(data, size, flags, readSize); 353 Result r = m_reader->read(data, size, flags, readSize);
354 if (r != ShouldWait && !(r == Ok && *readSize == 0)) { 354 if (!(size == 0 && (r == Ok || r == ShouldWait))) {
355 // We read non-empty data, so we cannot use the blob data 355 // We read non-empty data, so we cannot use the blob data
356 // handle which represents the whole data. 356 // handle which represents the whole data.
357 m_readerContext->clearBlobDataHandleForDrain(); 357 m_readerContext->clearBlobDataHandleForDrain();
358 } 358 }
359 return r; 359 return r;
360 } 360 }
361 361
362 Result beginRead(const void** buffer, Flags flags, size_t* available) ov erride 362 Result beginRead(const void** buffer, Flags flags, size_t* available) ov erride
363 { 363 {
364 if (m_readerContext->drained()) 364 if (m_readerContext->drained())
365 return Done; 365 return Done;
366 m_readerContext->ensureStartLoader(); 366 m_readerContext->ensureStartLoader();
367 Result r = m_reader->beginRead(buffer, flags, available); 367 m_readerContext->clearBlobDataHandleForDrain();
368 if (r != ShouldWait && !(r == Ok && *available == 0)) { 368 return m_reader->beginRead(buffer, flags, available);
369 // We read non-empty data, so we cannot use the blob data
370 // handle which represents the whole data.
371 m_readerContext->clearBlobDataHandleForDrain();
372 }
373 return r;
374 } 369 }
375 370
376 Result endRead(size_t readSize) override 371 Result endRead(size_t readSize) override
377 { 372 {
378 return m_reader->endRead(readSize); 373 return m_reader->endRead(readSize);
379 } 374 }
380 375
381 PassRefPtr<BlobDataHandle> drainAsBlobDataHandle(BlobSizePolicy blobSize Policy) override 376 PassRefPtr<BlobDataHandle> drainAsBlobDataHandle(BlobSizePolicy blobSize Policy) override
382 { 377 {
383 if (!m_readerContext->m_blobDataHandleForDrain) 378 if (!m_readerContext->m_blobDataHandleForDrain)
384 return nullptr; 379 return nullptr;
385 if (blobSizePolicy == DisallowBlobWithInvalidSize && m_readerContext ->m_blobDataHandleForDrain->size() == kuint64max) 380 if (blobSizePolicy == DisallowBlobWithInvalidSize && m_readerContext ->m_blobDataHandleForDrain->size() == kuint64max)
386 return nullptr; 381 return nullptr;
387 RefPtr<BlobDataHandle> blobDataHandle = m_readerContext->m_blobDataH andleForDrain; 382 RefPtr<BlobDataHandle> blobDataHandle = m_readerContext->m_blobDataH andleForDrain;
388 m_readerContext->setDrained(); 383 m_readerContext->setDrained();
389 m_readerContext->clearBlobDataHandleForDrain(); 384 m_readerContext->clearBlobDataHandleForDrain();
390 return blobDataHandle.release(); 385 return blobDataHandle.release();
391 } 386 }
392 387
388 PassRefPtr<FormData> drainAsFormData() override
389 {
390 RefPtr<BlobDataHandle> handle = drainAsBlobDataHandle(AllowBlobWithI nvalidSize);
391 if (!handle)
392 return nullptr;
393 RefPtr<FormData> formData = FormData::create();
394 formData->appendBlob(handle->uuid(), handle);
395 return formData.release();
396 }
397
393 private: 398 private:
394 RefPtr<ReaderContext> m_readerContext; 399 RefPtr<ReaderContext> m_readerContext;
395 OwnPtr<WebDataConsumerHandle::Reader> m_reader; 400 OwnPtr<WebDataConsumerHandle::Reader> m_reader;
396 NotifyOnReaderCreationHelper m_notifier; 401 NotifyOnReaderCreationHelper m_notifier;
397 }; 402 };
398 403
399 ReaderContext(ExecutionContext* executionContext, PassRefPtr<BlobDataHandle> blobDataHandle, FetchBlobDataConsumerHandle::LoaderFactory* loaderFactory) 404 ReaderContext(ExecutionContext* executionContext, PassRefPtr<BlobDataHandle> blobDataHandle, FetchBlobDataConsumerHandle::LoaderFactory* loaderFactory)
400 : m_blobDataHandleForDrain(blobDataHandle) 405 : m_blobDataHandleForDrain(blobDataHandle)
401 , m_loaderStarted(false) 406 , m_loaderStarted(false)
402 , m_drained(false) 407 , m_drained(false)
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 465
461 return adoptPtr(new FetchBlobDataConsumerHandle(executionContext, blobDataHa ndle, new DefaultLoaderFactory)); 466 return adoptPtr(new FetchBlobDataConsumerHandle(executionContext, blobDataHa ndle, new DefaultLoaderFactory));
462 } 467 }
463 468
464 FetchDataConsumerHandle::Reader* FetchBlobDataConsumerHandle::obtainReaderIntern al(Client* client) 469 FetchDataConsumerHandle::Reader* FetchBlobDataConsumerHandle::obtainReaderIntern al(Client* client)
465 { 470 {
466 return m_readerContext->obtainReader(client).leakPtr(); 471 return m_readerContext->obtainReader(client).leakPtr();
467 } 472 }
468 473
469 } // namespace blink 474 } // namespace blink
OLDNEW
« no previous file with comments | « Source/modules/fetch/FetchBlobDataConsumerHandle.h ('k') | Source/modules/fetch/FetchBlobDataConsumerHandleTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698