OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2003, 2006, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2003, 2006, 2008 Apple Inc. All rights reserved. |
3 * Copyright (C) 2005, 2006 Alexey Proskuryakov <ap@nypop.com> | 3 * Copyright (C) 2005, 2006 Alexey Proskuryakov <ap@nypop.com> |
4 * Copyright (C) 2011 Google Inc. All rights reserved. | 4 * Copyright (C) 2011 Google Inc. All rights reserved. |
5 * Copyright (C) 2012 Intel Corporation | 5 * Copyright (C) 2012 Intel Corporation |
6 * | 6 * |
7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
8 * modify it under the terms of the GNU Lesser General Public | 8 * modify it under the terms of the GNU Lesser General Public |
9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
(...skipping 12 matching lines...) Expand all Loading... |
23 #define XMLHttpRequest_h | 23 #define XMLHttpRequest_h |
24 | 24 |
25 #include "bindings/v8/ScriptString.h" | 25 #include "bindings/v8/ScriptString.h" |
26 #include "bindings/v8/ScriptWrappable.h" | 26 #include "bindings/v8/ScriptWrappable.h" |
27 #include "core/dom/ActiveDOMObject.h" | 27 #include "core/dom/ActiveDOMObject.h" |
28 #include "core/events/EventListener.h" | 28 #include "core/events/EventListener.h" |
29 #include "core/events/ThreadLocalEventNames.h" | 29 #include "core/events/ThreadLocalEventNames.h" |
30 #include "core/loader/ThreadableLoaderClient.h" | 30 #include "core/loader/ThreadableLoaderClient.h" |
31 #include "core/xml/XMLHttpRequestEventTarget.h" | 31 #include "core/xml/XMLHttpRequestEventTarget.h" |
32 #include "core/xml/XMLHttpRequestProgressEventThrottle.h" | 32 #include "core/xml/XMLHttpRequestProgressEventThrottle.h" |
33 #include "platform/AsyncMethodRunner.h" | |
34 #include "platform/network/FormData.h" | 33 #include "platform/network/FormData.h" |
35 #include "platform/network/ResourceResponse.h" | 34 #include "platform/network/ResourceResponse.h" |
36 #include "platform/weborigin/SecurityOrigin.h" | 35 #include "platform/weborigin/SecurityOrigin.h" |
37 #include "wtf/OwnPtr.h" | 36 #include "wtf/OwnPtr.h" |
38 #include "wtf/text/AtomicStringHash.h" | 37 #include "wtf/text/AtomicStringHash.h" |
39 #include "wtf/text/StringBuilder.h" | 38 #include "wtf/text/StringBuilder.h" |
40 | 39 |
41 namespace WebCore { | 40 namespace WebCore { |
42 | 41 |
43 class Blob; | 42 class Blob; |
44 class DOMFormData; | 43 class DOMFormData; |
45 class Document; | 44 class Document; |
46 class ExceptionState; | 45 class ExceptionState; |
47 class ResourceRequest; | 46 class ResourceRequest; |
48 class SecurityOrigin; | 47 class SecurityOrigin; |
49 class SharedBuffer; | 48 class SharedBuffer; |
50 class Stream; | 49 class Stream; |
51 class TextResourceDecoder; | 50 class TextResourceDecoder; |
52 class ThreadableLoader; | 51 class ThreadableLoader; |
53 | 52 |
54 typedef int ExceptionCode; | 53 typedef int ExceptionCode; |
55 | 54 |
56 class XMLHttpRequest FINAL : public ScriptWrappable, public RefCounted<XMLHttpRe
quest>, public XMLHttpRequestEventTarget, private ThreadableLoaderClient, public
ActiveDOMObject { | 55 class XMLHttpRequest FINAL : public ScriptWrappable, public RefCounted<XMLHttpRe
quest>, public XMLHttpRequestEventTarget, private ThreadableLoaderClient, public
ActiveDOMObject { |
57 WTF_MAKE_FAST_ALLOCATED; | 56 WTF_MAKE_FAST_ALLOCATED; |
58 REFCOUNTED_EVENT_TARGET(XMLHttpRequest); | 57 REFCOUNTED_EVENT_TARGET(XMLHttpRequest); |
59 public: | 58 public: |
| 59 // XMLHttpRequest instances must be used with a wrapper since this class's |
| 60 // lifetime management is designed assuming the V8 holds a ref on it while |
| 61 // hasPendingActivity() returns true. |
60 static PassRefPtr<XMLHttpRequest> create(ExecutionContext*, PassRefPtr<Secur
ityOrigin> = 0); | 62 static PassRefPtr<XMLHttpRequest> create(ExecutionContext*, PassRefPtr<Secur
ityOrigin> = 0); |
61 virtual ~XMLHttpRequest(); | 63 virtual ~XMLHttpRequest(); |
62 | 64 |
63 // These exact numeric values are important because JS expects them. | 65 // These exact numeric values are important because JS expects them. |
64 enum State { | 66 enum State { |
65 UNSENT = 0, | 67 UNSENT = 0, |
66 OPENED = 1, | 68 OPENED = 1, |
67 HEADERS_RECEIVED = 2, | 69 HEADERS_RECEIVED = 2, |
68 LOADING = 3, | 70 LOADING = 3, |
69 DONE = 4 | 71 DONE = 4 |
70 }; | 72 }; |
71 | 73 |
72 enum ResponseTypeCode { | 74 enum ResponseTypeCode { |
73 ResponseTypeDefault, | 75 ResponseTypeDefault, |
74 ResponseTypeText, | 76 ResponseTypeText, |
75 ResponseTypeJSON, | 77 ResponseTypeJSON, |
76 ResponseTypeDocument, | 78 ResponseTypeDocument, |
77 ResponseTypeBlob, | 79 ResponseTypeBlob, |
78 ResponseTypeArrayBuffer, | 80 ResponseTypeArrayBuffer, |
79 ResponseTypeStream | 81 ResponseTypeStream |
80 }; | 82 }; |
81 | 83 |
82 enum DropProtection { | 84 // ActiveDOMObject implementaions |
83 DropProtectionSync, | |
84 DropProtectionAsync, | |
85 }; | |
86 | |
87 virtual void contextDestroyed() OVERRIDE; | 85 virtual void contextDestroyed() OVERRIDE; |
| 86 // Keep the JavaScript wrapper alive while a request is in progress so that |
| 87 // this object (which is a listener for m_loader) is also kept alive. |
| 88 virtual bool hasPendingActivity() const OVERRIDE; |
88 virtual void suspend() OVERRIDE; | 89 virtual void suspend() OVERRIDE; |
89 virtual void resume() OVERRIDE; | 90 virtual void resume() OVERRIDE; |
90 virtual void stop() OVERRIDE; | 91 virtual void stop() OVERRIDE; |
91 | 92 |
92 virtual const AtomicString& interfaceName() const OVERRIDE; | 93 virtual const AtomicString& interfaceName() const OVERRIDE; |
93 virtual ExecutionContext* executionContext() const OVERRIDE; | 94 virtual ExecutionContext* executionContext() const OVERRIDE; |
94 | 95 |
95 const KURL& url() const { return m_url; } | 96 const KURL& url() const { return m_url; } |
96 String statusText() const; | 97 String statusText() const; |
97 int status() const; | 98 int status() const; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 | 170 |
170 const AtomicString& getRequestHeader(const AtomicString& name) const; | 171 const AtomicString& getRequestHeader(const AtomicString& name) const; |
171 void setRequestHeaderInternal(const AtomicString& name, const AtomicString&
value); | 172 void setRequestHeaderInternal(const AtomicString& name, const AtomicString&
value); |
172 | 173 |
173 void trackProgress(int dataLength); | 174 void trackProgress(int dataLength); |
174 // Changes m_state and dispatches a readyStateChange event if new m_state | 175 // Changes m_state and dispatches a readyStateChange event if new m_state |
175 // value is different from last one. | 176 // value is different from last one. |
176 void changeState(State newState); | 177 void changeState(State newState); |
177 void dispatchReadyStateChangeEvent(); | 178 void dispatchReadyStateChangeEvent(); |
178 | 179 |
179 void dropProtectionSoon(); | |
180 void dropProtection(); | |
181 // Clears variables used only while the resource is being loaded. | 180 // Clears variables used only while the resource is being loaded. |
182 void clearVariablesForLoading(); | 181 void clearVariablesForLoading(); |
183 // Returns false iff reentry happened and a new load is started. | 182 // Returns false iff reentry happened and a new load is started. This |
184 bool internalAbort(DropProtection = DropProtectionSync); | 183 // instance may be destroyed after this method call. If you need do some |
| 184 // work later, put a temporary reference on this instance before calling |
| 185 // this method |
| 186 bool internalAbort(); |
185 // Clears variables holding response header and body data. | 187 // Clears variables holding response header and body data. |
186 void clearResponse(); | 188 void clearResponse(); |
187 void clearRequest(); | 189 void clearRequest(); |
188 | 190 |
189 void createRequest(ExceptionState&); | 191 void createRequest(ExceptionState&); |
190 | 192 |
191 // Dispatches an event of the specified type to m_progressEventThrottle. | 193 // Dispatches an event of the specified type to m_progressEventThrottle. |
192 void dispatchEventAndLoadEnd(const AtomicString&, long long, long long); | 194 void dispatchEventAndLoadEnd(const AtomicString&, long long, long long); |
193 | 195 |
194 // Dispatches a response progress event to m_progressEventThrottle. | 196 // Dispatches a response progress event to m_progressEventThrottle. |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 String m_lastSendURL; | 256 String m_lastSendURL; |
255 // An exception to throw in synchronous mode. It's set when failure | 257 // An exception to throw in synchronous mode. It's set when failure |
256 // notification is received from m_loader and thrown at the end of send() if | 258 // notification is received from m_loader and thrown at the end of send() if |
257 // any. | 259 // any. |
258 ExceptionCode m_exceptionCode; | 260 ExceptionCode m_exceptionCode; |
259 | 261 |
260 XMLHttpRequestProgressEventThrottle m_progressEventThrottle; | 262 XMLHttpRequestProgressEventThrottle m_progressEventThrottle; |
261 | 263 |
262 // An enum corresponding to the allowed string values for the responseType a
ttribute. | 264 // An enum corresponding to the allowed string values for the responseType a
ttribute. |
263 ResponseTypeCode m_responseTypeCode; | 265 ResponseTypeCode m_responseTypeCode; |
264 AsyncMethodRunner<XMLHttpRequest> m_dropProtectionRunner; | |
265 RefPtr<SecurityOrigin> m_securityOrigin; | 266 RefPtr<SecurityOrigin> m_securityOrigin; |
266 }; | 267 }; |
267 | 268 |
268 } // namespace WebCore | 269 } // namespace WebCore |
269 | 270 |
270 #endif // XMLHttpRequest_h | 271 #endif // XMLHttpRequest_h |
OLD | NEW |