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

Side by Side Diff: Source/core/loader/FrameLoader.cpp

Issue 32793003: Have Frame::navigationScheduler() return a reference (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebase on master Created 7 years, 2 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
« no previous file with comments | « Source/core/html/parser/XSSAuditorDelegate.cpp ('k') | Source/core/page/CreateWindow.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) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv ed. 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv ed.
3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
4 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 4 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
5 * Copyright (C) 2008 Alp Toker <alp@atoker.com> 5 * Copyright (C) 2008 Alp Toker <alp@atoker.com>
6 * Copyright (C) Research In Motion Limited 2009. All rights reserved. 6 * Copyright (C) Research In Motion Limited 2009. All rights reserved.
7 * Copyright (C) 2011 Kris Jordan <krisjordan@gmail.com> 7 * Copyright (C) 2011 Kris Jordan <krisjordan@gmail.com>
8 * Copyright (C) 2011 Google Inc. All rights reserved. 8 * Copyright (C) 2011 Google Inc. All rights reserved.
9 * 9 *
10 * Redistribution and use in source and binary forms, with or without 10 * Redistribution and use in source and binary forms, with or without
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 { 199 {
200 if (m_documentLoader) 200 if (m_documentLoader)
201 m_documentLoader->setDefersLoading(defers); 201 m_documentLoader->setDefersLoading(defers);
202 if (m_provisionalDocumentLoader) 202 if (m_provisionalDocumentLoader)
203 m_provisionalDocumentLoader->setDefersLoading(defers); 203 m_provisionalDocumentLoader->setDefersLoading(defers);
204 if (m_policyDocumentLoader) 204 if (m_policyDocumentLoader)
205 m_policyDocumentLoader->setDefersLoading(defers); 205 m_policyDocumentLoader->setDefersLoading(defers);
206 history()->setDefersLoading(defers); 206 history()->setDefersLoading(defers);
207 207
208 if (!defers) { 208 if (!defers) {
209 m_frame->navigationScheduler()->startTimer(); 209 m_frame->navigationScheduler().startTimer();
210 startCheckCompleteTimer(); 210 startCheckCompleteTimer();
211 } 211 }
212 } 212 }
213 213
214 void FrameLoader::stopLoading() 214 void FrameLoader::stopLoading()
215 { 215 {
216 m_isComplete = true; // to avoid calling completed() in finishedParsing() 216 m_isComplete = true; // to avoid calling completed() in finishedParsing()
217 217
218 if (m_frame->document() && m_frame->document()->parsing()) { 218 if (m_frame->document() && m_frame->document()->parsing()) {
219 finishedParsing(); 219 finishedParsing();
220 m_frame->document()->setParsing(false); 220 m_frame->document()->setParsing(false);
221 } 221 }
222 222
223 if (Document* doc = m_frame->document()) { 223 if (Document* doc = m_frame->document()) {
224 // FIXME: HTML5 doesn't tell us to set the state to complete when aborti ng, but we do anyway to match legacy behavior. 224 // FIXME: HTML5 doesn't tell us to set the state to complete when aborti ng, but we do anyway to match legacy behavior.
225 // http://www.w3.org/Bugs/Public/show_bug.cgi?id=10537 225 // http://www.w3.org/Bugs/Public/show_bug.cgi?id=10537
226 doc->setReadyState(Document::Complete); 226 doc->setReadyState(Document::Complete);
227 227
228 // FIXME: Should the DatabaseManager watch for something like ActiveDOMO bject::stop() rather than being special-cased here? 228 // FIXME: Should the DatabaseManager watch for something like ActiveDOMO bject::stop() rather than being special-cased here?
229 DatabaseManager::manager().stopDatabases(doc, 0); 229 DatabaseManager::manager().stopDatabases(doc, 0);
230 } 230 }
231 231
232 // FIXME: This will cancel redirection timer, which really needs to be resta rted when restoring the frame from b/f cache. 232 // FIXME: This will cancel redirection timer, which really needs to be resta rted when restoring the frame from b/f cache.
233 m_frame->navigationScheduler()->cancel(); 233 m_frame->navigationScheduler().cancel();
234 } 234 }
235 235
236 bool FrameLoader::closeURL() 236 bool FrameLoader::closeURL()
237 { 237 {
238 history()->saveDocumentAndScrollState(); 238 history()->saveDocumentAndScrollState();
239 239
240 // Should only send the pagehide event here if the current document exists. 240 // Should only send the pagehide event here if the current document exists.
241 if (m_frame->document()) 241 if (m_frame->document())
242 m_frame->document()->dispatchUnloadEvents(); 242 m_frame->document()->dispatchUnloadEvents();
243 stopLoading(); 243 stopLoading();
244 244
245 m_frame->editor().clearUndoRedoOperations(); 245 m_frame->editor().clearUndoRedoOperations();
246 return true; 246 return true;
247 } 247 }
248 248
249 void FrameLoader::didExplicitOpen() 249 void FrameLoader::didExplicitOpen()
250 { 250 {
251 m_isComplete = false; 251 m_isComplete = false;
252 252
253 // Calling document.open counts as committing the first real document load. 253 // Calling document.open counts as committing the first real document load.
254 if (!m_stateMachine.committedFirstRealDocumentLoad()) 254 if (!m_stateMachine.committedFirstRealDocumentLoad())
255 m_stateMachine.advanceTo(FrameLoaderStateMachine::CommittedFirstRealLoad ); 255 m_stateMachine.advanceTo(FrameLoaderStateMachine::CommittedFirstRealLoad );
256 256
257 // Prevent window.open(url) -- eg window.open("about:blank") -- from blowing away results 257 // Prevent window.open(url) -- eg window.open("about:blank") -- from blowing away results
258 // from a subsequent window.document.open / window.document.write call. 258 // from a subsequent window.document.open / window.document.write call.
259 // Canceling redirection here works for all cases because document.open 259 // Canceling redirection here works for all cases because document.open
260 // implicitly precedes document.write. 260 // implicitly precedes document.write.
261 m_frame->navigationScheduler()->cancel(); 261 m_frame->navigationScheduler().cancel();
262 } 262 }
263 263
264 void FrameLoader::clear(ClearOptions options) 264 void FrameLoader::clear(ClearOptions options)
265 { 265 {
266 if (m_stateMachine.creatingInitialEmptyDocument()) 266 if (m_stateMachine.creatingInitialEmptyDocument())
267 return; 267 return;
268 268
269 m_frame->editor().clear(); 269 m_frame->editor().clear();
270 m_frame->document()->cancelParsing(); 270 m_frame->document()->cancelParsing();
271 m_frame->document()->prepareForDestruction(); 271 m_frame->document()->prepareForDestruction();
(...skipping 17 matching lines...) Expand all
289 m_frame->setDOMWindow(0); 289 m_frame->setDOMWindow(0);
290 } 290 }
291 291
292 m_containsPlugins = false; 292 m_containsPlugins = false;
293 293
294 if (options & ClearScriptObjects) 294 if (options & ClearScriptObjects)
295 m_frame->script()->clearScriptObjects(); 295 m_frame->script()->clearScriptObjects();
296 296
297 m_frame->script()->enableEval(); 297 m_frame->script()->enableEval();
298 298
299 m_frame->navigationScheduler()->clear(); 299 m_frame->navigationScheduler().clear();
300 300
301 m_checkTimer.stop(); 301 m_checkTimer.stop();
302 m_shouldCallCheckCompleted = false; 302 m_shouldCallCheckCompleted = false;
303 303
304 if (m_stateMachine.isDisplayingInitialEmptyDocument()) 304 if (m_stateMachine.isDisplayingInitialEmptyDocument())
305 m_stateMachine.advanceTo(FrameLoaderStateMachine::CommittedFirstRealLoad ); 305 m_stateMachine.advanceTo(FrameLoaderStateMachine::CommittedFirstRealLoad );
306 } 306 }
307 307
308 void FrameLoader::receivedFirstData() 308 void FrameLoader::receivedFirstData()
309 { 309 {
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 // Any frame that hasn't completed yet? 433 // Any frame that hasn't completed yet?
434 if (!allChildrenAreComplete()) 434 if (!allChildrenAreComplete())
435 return; 435 return;
436 436
437 // OK, completed. 437 // OK, completed.
438 m_isComplete = true; 438 m_isComplete = true;
439 m_frame->document()->setReadyState(Document::Complete); 439 m_frame->document()->setReadyState(Document::Complete);
440 if (m_frame->document()->loadEventStillNeeded()) 440 if (m_frame->document()->loadEventStillNeeded())
441 m_frame->document()->implicitClose(); 441 m_frame->document()->implicitClose();
442 442
443 m_frame->navigationScheduler()->startTimer(); 443 m_frame->navigationScheduler().startTimer();
444 444
445 completed(); 445 completed();
446 if (m_frame->page()) 446 if (m_frame->page())
447 checkLoadComplete(); 447 checkLoadComplete();
448 448
449 if (m_frame->view()) 449 if (m_frame->view())
450 m_frame->view()->handleLoadCompleted(); 450 m_frame->view()->handleLoadCompleted();
451 } 451 }
452 452
453 void FrameLoader::checkTimerFired(Timer<FrameLoader>*) 453 void FrameLoader::checkTimerFired(Timer<FrameLoader>*)
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
598 checkCompleted(); 598 checkCompleted();
599 599
600 m_frame->document()->statePopped(stateObject ? stateObject : SerializedScrip tValue::nullValue()); 600 m_frame->document()->statePopped(stateObject ? stateObject : SerializedScrip tValue::nullValue());
601 } 601 }
602 602
603 void FrameLoader::completed() 603 void FrameLoader::completed()
604 { 604 {
605 RefPtr<Frame> protect(m_frame); 605 RefPtr<Frame> protect(m_frame);
606 606
607 for (Frame* descendant = m_frame->tree().traverseNext(m_frame); descendant; descendant = descendant->tree().traverseNext(m_frame)) 607 for (Frame* descendant = m_frame->tree().traverseNext(m_frame); descendant; descendant = descendant->tree().traverseNext(m_frame))
608 descendant->navigationScheduler()->startTimer(); 608 descendant->navigationScheduler().startTimer();
609 609
610 if (Frame* parent = m_frame->tree().parent()) 610 if (Frame* parent = m_frame->tree().parent())
611 parent->loader()->checkCompleted(); 611 parent->loader()->checkCompleted();
612 612
613 if (m_frame->view()) 613 if (m_frame->view())
614 m_frame->view()->maintainScrollPositionAtAnchor(0); 614 m_frame->view()->maintainScrollPositionAtAnchor(0);
615 } 615 }
616 616
617 void FrameLoader::started() 617 void FrameLoader::started()
618 { 618 {
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
903 m_documentLoader->detachFromFrame(); 903 m_documentLoader->detachFromFrame();
904 m_documentLoader = m_provisionalDocumentLoader.release(); 904 m_documentLoader = m_provisionalDocumentLoader.release();
905 m_state = FrameStateCommittedPage; 905 m_state = FrameStateCommittedPage;
906 906
907 if (isLoadingMainFrame()) 907 if (isLoadingMainFrame())
908 m_frame->page()->chrome().client().needTouchEvents(false); 908 m_frame->page()->chrome().client().needTouchEvents(false);
909 909
910 history()->updateForCommit(); 910 history()->updateForCommit();
911 m_client->transitionToCommittedForNewPage(); 911 m_client->transitionToCommittedForNewPage();
912 912
913 m_frame->navigationScheduler()->cancel(); 913 m_frame->navigationScheduler().cancel();
914 m_frame->editor().clearLastEditCommand(); 914 m_frame->editor().clearLastEditCommand();
915 915
916 // If we are still in the process of initializing an empty document then 916 // If we are still in the process of initializing an empty document then
917 // its frame is not in a consistent state for rendering, so avoid setJSStatu sBarText 917 // its frame is not in a consistent state for rendering, so avoid setJSStatu sBarText
918 // since it may cause clients to attempt to render the frame. 918 // since it may cause clients to attempt to render the frame.
919 if (!m_stateMachine.creatingInitialEmptyDocument()) { 919 if (!m_stateMachine.creatingInitialEmptyDocument()) {
920 DOMWindow* window = m_frame->domWindow(); 920 DOMWindow* window = m_frame->domWindow();
921 window->setStatus(String()); 921 window->setStatus(String());
922 window->setDefaultStatus(String()); 922 window->setDefaultStatus(String());
923 } 923 }
(...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after
1366 // A new navigation is in progress, so don't clear the history's provisional item. 1366 // A new navigation is in progress, so don't clear the history's provisional item.
1367 stopAllLoaders(); 1367 stopAllLoaders();
1368 1368
1369 // <rdar://problem/6250856> - In certain circumstances on pages with multipl e frames, stopAllLoaders() 1369 // <rdar://problem/6250856> - In certain circumstances on pages with multipl e frames, stopAllLoaders()
1370 // might detach the current FrameLoader, in which case we should bail on thi s newly defunct load. 1370 // might detach the current FrameLoader, in which case we should bail on thi s newly defunct load.
1371 if (!m_frame->page() || !m_policyDocumentLoader) 1371 if (!m_frame->page() || !m_policyDocumentLoader)
1372 return; 1372 return;
1373 1373
1374 if (isLoadingMainFrame()) 1374 if (isLoadingMainFrame())
1375 m_frame->page()->inspectorController().resume(); 1375 m_frame->page()->inspectorController().resume();
1376 m_frame->navigationScheduler()->cancel(); 1376 m_frame->navigationScheduler().cancel();
1377 1377
1378 m_provisionalDocumentLoader = m_policyDocumentLoader.release(); 1378 m_provisionalDocumentLoader = m_policyDocumentLoader.release();
1379 m_loadType = type; 1379 m_loadType = type;
1380 m_state = FrameStateProvisional; 1380 m_state = FrameStateProvisional;
1381 1381
1382 if (formState) 1382 if (formState)
1383 m_client->dispatchWillSubmitForm(formState); 1383 m_client->dispatchWillSubmitForm(formState);
1384 1384
1385 m_progressTracker->progressStarted(); 1385 m_progressTracker->progressStarted();
1386 if (m_provisionalDocumentLoader->isClientRedirect()) 1386 if (m_provisionalDocumentLoader->isClientRedirect())
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
1600 { 1600 {
1601 SandboxFlags flags = m_forcedSandboxFlags; 1601 SandboxFlags flags = m_forcedSandboxFlags;
1602 if (Frame* parentFrame = m_frame->tree().parent()) 1602 if (Frame* parentFrame = m_frame->tree().parent())
1603 flags |= parentFrame->document()->sandboxFlags(); 1603 flags |= parentFrame->document()->sandboxFlags();
1604 if (HTMLFrameOwnerElement* ownerElement = m_frame->ownerElement()) 1604 if (HTMLFrameOwnerElement* ownerElement = m_frame->ownerElement())
1605 flags |= ownerElement->sandboxFlags(); 1605 flags |= ownerElement->sandboxFlags();
1606 return flags; 1606 return flags;
1607 } 1607 }
1608 1608
1609 } // namespace WebCore 1609 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/html/parser/XSSAuditorDelegate.cpp ('k') | Source/core/page/CreateWindow.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698