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

Side by Side Diff: Source/core/xmlhttprequest/XMLHttpRequest.cpp

Issue 901013002: Revert of Introduce ExclusiveStreamReader. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « Source/core/streams/ReadableStreamTest.cpp ('k') | Source/modules/fetch/Body.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2006, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2004, 2006, 2008 Apple Inc. All rights reserved.
3 * Copyright (C) 2005-2007 Alexey Proskuryakov <ap@webkit.org> 3 * Copyright (C) 2005-2007 Alexey Proskuryakov <ap@webkit.org>
4 * Copyright (C) 2007, 2008 Julien Chaffraix <jchaffraix@webkit.org> 4 * Copyright (C) 2007, 2008 Julien Chaffraix <jchaffraix@webkit.org>
5 * Copyright (C) 2008, 2011 Google Inc. All rights reserved. 5 * Copyright (C) 2008, 2011 Google Inc. All rights reserved.
6 * Copyright (C) 2012 Intel Corporation 6 * Copyright (C) 2012 Intel Corporation
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public 9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 return ScriptPromise::cast(scriptState, v8::Undefined(scriptState->isola te())); 153 return ScriptPromise::cast(scriptState, v8::Undefined(scriptState->isola te()));
154 } 154 }
155 155
156 // WebDataConsumerHandle::Client 156 // WebDataConsumerHandle::Client
157 void didGetReadable() override 157 void didGetReadable() override
158 { 158 {
159 ASSERT(m_body); 159 ASSERT(m_body);
160 enqueueToStreamFromHandle(); 160 enqueueToStreamFromHandle();
161 } 161 }
162 162
163 void startStream(ReadableStreamImpl<ReadableStreamChunkTypeTraits<DOMArrayBu ffer>>* stream) 163 void startStream(ReadableStreamImpl<ReadableStreamChunkTypeTraits<DOMArrayBu ffer> >* stream)
164 { 164 {
165 m_stream = stream; 165 m_stream = stream;
166 stream->didSourceStart(); 166 stream->didSourceStart();
167 } 167 }
168 168
169 void didReceiveData(const char* data, size_t size) 169 void didReceiveData(const char* data, size_t size)
170 { 170 {
171 m_stream->enqueue(DOMArrayBuffer::create(data, size)); 171 m_stream->enqueue(DOMArrayBuffer::create(data, size));
172 } 172 }
173 173
(...skipping 1412 matching lines...) Expand 10 before | Expand all | Expand 10 after
1586 m_finalResponseCharset = extractCharsetFromMediaType(m_mimeTypeOverride) ; 1586 m_finalResponseCharset = extractCharsetFromMediaType(m_mimeTypeOverride) ;
1587 } 1587 }
1588 1588
1589 if (m_finalResponseCharset.isEmpty()) 1589 if (m_finalResponseCharset.isEmpty())
1590 m_finalResponseCharset = response.textEncodingName(); 1590 m_finalResponseCharset = response.textEncodingName();
1591 1591
1592 if (handle) { 1592 if (handle) {
1593 ASSERT(!m_responseStream); 1593 ASSERT(!m_responseStream);
1594 ASSERT(!m_responseStreamSource); 1594 ASSERT(!m_responseStreamSource);
1595 m_responseStreamSource = new ReadableStreamSource(this, handle); 1595 m_responseStreamSource = new ReadableStreamSource(this, handle);
1596 m_responseStream = new ReadableStreamImpl<ReadableStreamChunkTypeTraits< DOMArrayBuffer>>(executionContext(), m_responseStreamSource); 1596 m_responseStream = new ReadableStreamImpl<ReadableStreamChunkTypeTraits< DOMArrayBuffer> >(executionContext(), m_responseStreamSource);
1597 m_responseStreamSource->startStream(m_responseStream); 1597 m_responseStreamSource->startStream(m_responseStream);
1598 1598
1599 // This protection seems needed to keep |this| alive after changeState 1599 // This protection seems needed to keep |this| alive after changeState
1600 // calling which may call event listeners. 1600 // calling which may call event listeners.
1601 RefPtrWillBeRawPtr<XMLHttpRequest> protect(this); 1601 RefPtrWillBeRawPtr<XMLHttpRequest> protect(this);
1602 changeState(HEADERS_RECEIVED); 1602 changeState(HEADERS_RECEIVED);
1603 if (m_error) { 1603 if (m_error) {
1604 // We need to check for |m_error| because |changeState| may trigger 1604 // We need to check for |m_error| because |changeState| may trigger
1605 // readystatechange, and user javascript can cause |abort()|. 1605 // readystatechange, and user javascript can cause |abort()|.
1606 return; 1606 return;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
1686 m_binaryResponseBuilder = SharedBuffer::create(); 1686 m_binaryResponseBuilder = SharedBuffer::create();
1687 m_binaryResponseBuilder->append(data, len); 1687 m_binaryResponseBuilder->append(data, len);
1688 } else if (m_responseTypeCode == ResponseTypeLegacyStream) { 1688 } else if (m_responseTypeCode == ResponseTypeLegacyStream) {
1689 if (!m_responseLegacyStream) 1689 if (!m_responseLegacyStream)
1690 m_responseLegacyStream = Stream::create(executionContext(), response Type()); 1690 m_responseLegacyStream = Stream::create(executionContext(), response Type());
1691 m_responseLegacyStream->addData(data, len); 1691 m_responseLegacyStream->addData(data, len);
1692 } else if (m_responseTypeCode == ResponseTypeStream) { 1692 } else if (m_responseTypeCode == ResponseTypeStream) {
1693 if (!m_responseStream) { 1693 if (!m_responseStream) {
1694 ASSERT(!m_responseStreamSource); 1694 ASSERT(!m_responseStreamSource);
1695 m_responseStreamSource = new ReadableStreamSource(this, nullptr); 1695 m_responseStreamSource = new ReadableStreamSource(this, nullptr);
1696 m_responseStream = new ReadableStreamImpl<ReadableStreamChunkTypeTra its<DOMArrayBuffer>>(executionContext(), m_responseStreamSource); 1696 m_responseStream = new ReadableStreamImpl<ReadableStreamChunkTypeTra its<DOMArrayBuffer> >(executionContext(), m_responseStreamSource);
1697 m_responseStreamSource->startStream(m_responseStream); 1697 m_responseStreamSource->startStream(m_responseStream);
1698 } 1698 }
1699 m_responseStreamSource->didReceiveData(data, len); 1699 m_responseStreamSource->didReceiveData(data, len);
1700 } 1700 }
1701 1701
1702 if (m_blobLoader) { 1702 if (m_blobLoader) {
1703 // In this case, the data is provided by m_blobLoader. As progress 1703 // In this case, the data is provided by m_blobLoader. As progress
1704 // events are already fired, we should return here. 1704 // events are already fired, we should return here.
1705 return; 1705 return;
1706 } 1706 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1766 bool XMLHttpRequest::hasPendingActivity() const 1766 bool XMLHttpRequest::hasPendingActivity() const
1767 { 1767 {
1768 // Neither this object nor the JavaScript wrapper should be deleted while 1768 // Neither this object nor the JavaScript wrapper should be deleted while
1769 // a request is in progress because we need to keep the listeners alive, 1769 // a request is in progress because we need to keep the listeners alive,
1770 // and they are referenced by the JavaScript wrapper. 1770 // and they are referenced by the JavaScript wrapper.
1771 // |m_loader| is non-null while request is active and ThreadableLoaderClient 1771 // |m_loader| is non-null while request is active and ThreadableLoaderClient
1772 // callbacks may be called, and |m_responseDocumentParser| is non-null while 1772 // callbacks may be called, and |m_responseDocumentParser| is non-null while
1773 // DocumentParserClient callbacks may be called. 1773 // DocumentParserClient callbacks may be called.
1774 if (m_loader || m_responseDocumentParser) 1774 if (m_loader || m_responseDocumentParser)
1775 return true; 1775 return true;
1776 if (m_responseStream && m_responseStream->hasPendingActivity()) 1776 if (m_responseStream && (m_responseStream->state() == ReadableStream::Readab le || m_responseStream->state() == ReadableStream::Waiting))
1777 return true; 1777 return true;
1778 return false; 1778 return false;
1779 } 1779 }
1780 1780
1781 void XMLHttpRequest::contextDestroyed() 1781 void XMLHttpRequest::contextDestroyed()
1782 { 1782 {
1783 ASSERT(!m_loader); 1783 ASSERT(!m_loader);
1784 ActiveDOMObject::contextDestroyed(); 1784 ActiveDOMObject::contextDestroyed();
1785 } 1785 }
1786 1786
(...skipping 17 matching lines...) Expand all
1804 visitor->trace(m_responseDocumentParser); 1804 visitor->trace(m_responseDocumentParser);
1805 visitor->trace(m_progressEventThrottle); 1805 visitor->trace(m_progressEventThrottle);
1806 visitor->trace(m_upload); 1806 visitor->trace(m_upload);
1807 visitor->trace(m_blobLoader); 1807 visitor->trace(m_blobLoader);
1808 XMLHttpRequestEventTarget::trace(visitor); 1808 XMLHttpRequestEventTarget::trace(visitor);
1809 DocumentParserClient::trace(visitor); 1809 DocumentParserClient::trace(visitor);
1810 ActiveDOMObject::trace(visitor); 1810 ActiveDOMObject::trace(visitor);
1811 } 1811 }
1812 1812
1813 } // namespace blink 1813 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/streams/ReadableStreamTest.cpp ('k') | Source/modules/fetch/Body.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698