OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. |
3 * Copyright (C) 2011 Google Inc. All rights reserved. | 3 * Copyright (C) 2011 Google Inc. All rights reserved. |
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 * | 8 * |
9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 clearMainResourceLoader(); | 201 clearMainResourceLoader(); |
202 frameLoader()->receivedMainResourceError(error); | 202 frameLoader()->receivedMainResourceError(error); |
203 } | 203 } |
204 | 204 |
205 // Cancels the data source's pending loads. Conceptually, a data source only lo
ads | 205 // Cancels the data source's pending loads. Conceptually, a data source only lo
ads |
206 // one document at a time, but one document may have many related resources. | 206 // one document at a time, but one document may have many related resources. |
207 // stopLoading will stop all loads initiated by the data source, | 207 // stopLoading will stop all loads initiated by the data source, |
208 // but not loads initiated by child frames' data sources -- that's the WebFrame'
s job. | 208 // but not loads initiated by child frames' data sources -- that's the WebFrame'
s job. |
209 void DocumentLoader::stopLoading() | 209 void DocumentLoader::stopLoading() |
210 { | 210 { |
| 211 RefPtr<Frame> protectFrame(m_frame); |
| 212 RefPtr<DocumentLoader> protectLoader(this); |
| 213 |
211 // In some rare cases, calling FrameLoader::stopLoading could cause isLoadin
g() to return false. | 214 // In some rare cases, calling FrameLoader::stopLoading could cause isLoadin
g() to return false. |
212 // (This can happen when there's a single XMLHttpRequest currently loading a
nd stopLoading causes it | 215 // (This can happen when there's a single XMLHttpRequest currently loading a
nd stopLoading causes it |
213 // to stop loading. Because of this, we need to save it so we don't return e
arly. | 216 // to stop loading. Because of this, we need to save it so we don't return e
arly. |
214 bool loading = isLoading(); | 217 bool loading = isLoading(); |
215 | 218 |
216 if (m_committed) { | 219 if (m_committed) { |
217 // Attempt to stop the frame if the document loader is loading, or if it
is done loading but | 220 // Attempt to stop the frame if the document loader is loading, or if it
is done loading but |
218 // still parsing. Failure to do so can cause a world leak. | 221 // still parsing. Failure to do so can cause a world leak. |
219 Document* doc = m_frame->document(); | 222 Document* doc = m_frame->document(); |
220 | 223 |
(...skipping 16 matching lines...) Expand all Loading... |
237 // https://bugs.webkit.org/show_bug.cgi?id=62764 and <rdar://problem/932
8684> | 240 // https://bugs.webkit.org/show_bug.cgi?id=62764 and <rdar://problem/932
8684> |
238 ASSERT(!isLoading()); | 241 ASSERT(!isLoading()); |
239 return; | 242 return; |
240 } | 243 } |
241 | 244 |
242 // We might run in to infinite recursion if we're stopping loading as the re
sult of | 245 // We might run in to infinite recursion if we're stopping loading as the re
sult of |
243 // detaching from the frame, so break out of that recursion here. | 246 // detaching from the frame, so break out of that recursion here. |
244 // See <rdar://problem/9673866> for more details. | 247 // See <rdar://problem/9673866> for more details. |
245 if (m_isStopping) | 248 if (m_isStopping) |
246 return; | 249 return; |
247 | |
248 RefPtr<Frame> protectFrame(m_frame); | |
249 RefPtr<DocumentLoader> protectLoader(this); | |
250 | 250 |
251 m_isStopping = true; | 251 m_isStopping = true; |
252 | 252 |
253 FrameLoader* frameLoader = DocumentLoader::frameLoader(); | 253 FrameLoader* frameLoader = DocumentLoader::frameLoader(); |
254 | 254 |
255 if (m_mainResourceLoader) | 255 if (m_mainResourceLoader) |
256 // Stop the main resource loader and let it send the cancelled message. | 256 // Stop the main resource loader and let it send the cancelled message. |
257 m_mainResourceLoader->cancel(); | 257 m_mainResourceLoader->cancel(); |
258 else if (!m_subresourceLoaders.isEmpty()) | 258 else if (!m_subresourceLoaders.isEmpty()) |
259 // The main resource loader already finished loading. Set the cancelled
error on the | 259 // The main resource loader already finished loading. Set the cancelled
error on the |
(...skipping 702 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
962 iconDatabase().iconDataForIconURL(urlString, m_iconDataCallback); | 962 iconDatabase().iconDataForIconURL(urlString, m_iconDataCallback); |
963 } | 963 } |
964 | 964 |
965 void DocumentLoader::handledOnloadEvents() | 965 void DocumentLoader::handledOnloadEvents() |
966 { | 966 { |
967 m_wasOnloadHandled = true; | 967 m_wasOnloadHandled = true; |
968 applicationCacheHost()->stopDeferringEvents(); | 968 applicationCacheHost()->stopDeferringEvents(); |
969 } | 969 } |
970 | 970 |
971 } // namespace WebCore | 971 } // namespace WebCore |
OLD | NEW |