Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Julien Chaffraix <jchaffraix@webkit.org> All right reserv ed. | 2 * Copyright (C) 2010 Julien Chaffraix <jchaffraix@webkit.org> All right reserv ed. |
| 3 * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) | 3 * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. 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 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 25 */ | 25 */ |
| 26 | 26 |
| 27 #include "config.h" | 27 #include "config.h" |
| 28 #include "core/xmlhttprequest/XMLHttpRequestProgressEventThrottle.h" | 28 #include "core/xmlhttprequest/XMLHttpRequestProgressEventThrottle.h" |
| 29 | 29 |
| 30 #include "core/EventTypeNames.h" | 30 #include "core/EventTypeNames.h" |
| 31 #include "core/events/EventTarget.h" | 31 #include "core/xmlhttprequest/XMLHttpRequest.h" |
| 32 #include "core/xmlhttprequest/XMLHttpRequestProgressEvent.h" | 32 #include "core/xmlhttprequest/XMLHttpRequestProgressEvent.h" |
| 33 #include "wtf/Assertions.h" | 33 #include "wtf/Assertions.h" |
| 34 #include "wtf/text/AtomicString.h" | 34 #include "wtf/text/AtomicString.h" |
| 35 | 35 |
| 36 namespace blink { | 36 namespace blink { |
| 37 | 37 |
| 38 class XMLHttpRequestProgressEventThrottle::DeferredEvent { | 38 class XMLHttpRequestProgressEventThrottle::DeferredEvent { |
| 39 public: | 39 public: |
| 40 DeferredEvent() { clear(); } | 40 DeferredEvent() { clear(); } |
| 41 void set(bool lengthComputable, unsigned long long loaded, unsigned long lon g total) | 41 void set(bool lengthComputable, unsigned long long loaded, unsigned long lon g total) |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 59 | 59 |
| 60 private: | 60 private: |
| 61 unsigned long long m_loaded; | 61 unsigned long long m_loaded; |
| 62 unsigned long long m_total; | 62 unsigned long long m_total; |
| 63 bool m_isDeferred; | 63 bool m_isDeferred; |
| 64 bool m_lengthComputable; | 64 bool m_lengthComputable; |
| 65 }; | 65 }; |
| 66 | 66 |
| 67 const double XMLHttpRequestProgressEventThrottle::minimumProgressEventDispatchin gIntervalInSeconds = .05; // 50 ms per specification. | 67 const double XMLHttpRequestProgressEventThrottle::minimumProgressEventDispatchin gIntervalInSeconds = .05; // 50 ms per specification. |
| 68 | 68 |
| 69 XMLHttpRequestProgressEventThrottle::XMLHttpRequestProgressEventThrottle(EventTa rget* target) | 69 XMLHttpRequestProgressEventThrottle::XMLHttpRequestProgressEventThrottle(XMLHttp Request* target) |
| 70 : m_target(target) | 70 : m_target(target) |
| 71 , m_deferred(adoptPtr(new DeferredEvent)) | 71 , m_deferred(adoptPtr(new DeferredEvent)) |
| 72 { | 72 { |
| 73 ASSERT(target); | 73 ASSERT(target); |
| 74 } | 74 } |
| 75 | 75 |
| 76 XMLHttpRequestProgressEventThrottle::~XMLHttpRequestProgressEventThrottle() | 76 XMLHttpRequestProgressEventThrottle::~XMLHttpRequestProgressEventThrottle() |
| 77 { | 77 { |
| 78 } | 78 } |
| 79 | 79 |
| 80 void XMLHttpRequestProgressEventThrottle::dispatchProgressEvent(const AtomicStri ng& type, bool lengthComputable, unsigned long long loaded, unsigned long long t otal) | 80 void XMLHttpRequestProgressEventThrottle::dispatchProgressEvent(const AtomicStri ng& type, bool lengthComputable, unsigned long long loaded, unsigned long long t otal) |
| 81 { | 81 { |
| 82 // Given that ResourceDispatcher doesn't deliver an event when suspended, | 82 // Given that ResourceDispatcher doesn't deliver an event when suspended, |
| 83 // we don't have to worry about event dispatching while suspended. | 83 // we don't have to worry about event dispatching while suspended. |
| 84 if (type != EventTypeNames::progress) { | 84 if (type != EventTypeNames::progress) { |
| 85 m_target->dispatchEvent(XMLHttpRequestProgressEvent::create(type, length Computable, loaded, total)); | 85 m_target->dispatchEvent(XMLHttpRequestProgressEvent::create(type, length Computable, loaded, total)); |
| 86 return; | 86 return; |
| 87 } | 87 } |
| 88 | 88 |
| 89 if (isActive()) { | 89 if (isActive()) { |
| 90 m_deferred->set(lengthComputable, loaded, total); | 90 m_deferred->set(lengthComputable, loaded, total); |
| 91 } else { | 91 } else { |
| 92 m_target->dispatchEvent(XMLHttpRequestProgressEvent::create(type, length Computable, loaded, total)); | 92 m_target->dispatchEvent(XMLHttpRequestProgressEvent::create(type, length Computable, loaded, total)); |
| 93 startOneShot(minimumProgressEventDispatchingIntervalInSeconds, FROM_HERE ); | 93 startOneShot(minimumProgressEventDispatchingIntervalInSeconds, FROM_HERE ); |
| 94 } | 94 } |
| 95 } | 95 } |
| 96 | 96 |
| 97 void XMLHttpRequestProgressEventThrottle::dispatchReadyStateChangeEvent(PassRefP trWillBeRawPtr<Event> event, DeferredEventAction action) | 97 void XMLHttpRequestProgressEventThrottle::dispatchReadyStateChangeEvent(PassRefP trWillBeRawPtr<Event> event, DeferredEventAction action) |
| 98 { | 98 { |
| 99 XMLHttpRequest::State state = m_target->readyState(); | |
| 99 // Given that ResourceDispatcher doesn't deliver an event when suspended, | 100 // Given that ResourceDispatcher doesn't deliver an event when suspended, |
| 100 // we don't have to worry about event dispatching while suspended. | 101 // we don't have to worry about event dispatching while suspended. |
| 101 if (action == Flush) { | 102 if (action == Flush) { |
| 102 dispatchDeferredEvent(); | 103 dispatchDeferredEvent(); |
| 104 // |m_target| is protected by the caller. | |
| 103 stop(); | 105 stop(); |
| 104 } else if (action == Clear) { | 106 } else if (action == Clear) { |
| 105 m_deferred->clear(); | 107 m_deferred->clear(); |
| 106 stop(); | 108 stop(); |
| 107 } | 109 } |
| 108 | 110 |
| 109 m_target->dispatchEvent(event); | 111 if (state == m_target->readyState()) { |
| 112 // We don't dispatch the event when an event handler associated with | |
|
sof
2015/06/29 11:00:27
This repeats in prose what the check above does; i
yhirano
2015/06/29 11:43:47
Done.
| |
| 113 // the previously dispatched event changes the readyState. | |
| 114 m_target->dispatchEvent(event); | |
| 115 } | |
| 110 } | 116 } |
| 111 | 117 |
| 112 void XMLHttpRequestProgressEventThrottle::dispatchDeferredEvent() | 118 void XMLHttpRequestProgressEventThrottle::dispatchDeferredEvent() |
| 113 { | 119 { |
| 114 if (m_deferred->isDeferred()) { | 120 if (m_deferred->isDeferred()) { |
| 115 m_target->dispatchEvent(XMLHttpRequestProgressEvent::create(EventTypeNam es::progress, m_deferred->lengthComputable(), m_deferred->loaded(), m_deferred-> total())); | 121 m_target->dispatchEvent(XMLHttpRequestProgressEvent::create(EventTypeNam es::progress, m_deferred->lengthComputable(), m_deferred->loaded(), m_deferred-> total())); |
| 116 m_deferred->clear(); | 122 m_deferred->clear(); |
| 117 } | 123 } |
| 118 } | 124 } |
| 119 | 125 |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 146 // event-handler could insert new active DOM objects to the list. | 152 // event-handler could insert new active DOM objects to the list. |
| 147 startOneShot(0, FROM_HERE); | 153 startOneShot(0, FROM_HERE); |
| 148 } | 154 } |
| 149 | 155 |
| 150 DEFINE_TRACE(XMLHttpRequestProgressEventThrottle) | 156 DEFINE_TRACE(XMLHttpRequestProgressEventThrottle) |
| 151 { | 157 { |
| 152 visitor->trace(m_target); | 158 visitor->trace(m_target); |
| 153 } | 159 } |
| 154 | 160 |
| 155 } // namespace blink | 161 } // namespace blink |
| OLD | NEW |