Index: third_party/WebKit/Source/core/loader/FrameLoader.cpp |
diff --git a/third_party/WebKit/Source/core/loader/FrameLoader.cpp b/third_party/WebKit/Source/core/loader/FrameLoader.cpp |
index d4e6a0a8071a0dcab727bff54a67d0322e293fcf..1b3632431e4b013f2f6ec9ae8f49fac18325b5a0 100644 |
--- a/third_party/WebKit/Source/core/loader/FrameLoader.cpp |
+++ b/third_party/WebKit/Source/core/loader/FrameLoader.cpp |
@@ -239,6 +239,9 @@ |
: frame_(frame), |
progress_tracker_(ProgressTracker::Create(frame)), |
in_stop_all_loaders_(false), |
+ check_timer_(TaskRunnerHelper::Get(TaskType::kNetworking, frame), |
+ this, |
+ &FrameLoader::CheckTimerFired), |
forced_sandbox_flags_(kSandboxNone), |
dispatching_did_clear_window_object_in_main_world_(false), |
protect_provisional_loader_(false), |
@@ -300,8 +303,10 @@ |
document->ResumeScheduledTasks(); |
} |
- if (!defers) |
+ if (!defers) { |
frame_->GetNavigationScheduler().StartTimer(); |
+ ScheduleCheckCompleted(); |
+ } |
} |
void FrameLoader::SaveScrollState() { |
@@ -369,9 +374,16 @@ |
return; |
frame_->GetEditor().Clear(); |
+ frame_->GetDocument()->RemoveFocusedElementOfSubtree(frame_->GetDocument()); |
frame_->GetEventHandler().Clear(); |
if (frame_->View()) |
frame_->View()->Clear(); |
+ |
+ frame_->GetScriptController().EnableEval(); |
+ |
+ frame_->GetNavigationScheduler().Cancel(); |
+ |
+ check_timer_.Stop(); |
if (state_machine_.IsDisplayingInitialEmptyDocument()) |
state_machine_.AdvanceTo(FrameLoaderStateMachine::kCommittedFirstRealLoad); |
@@ -476,6 +488,19 @@ |
Frame* parent = frame_->Tree().Parent(); |
if (parent && parent->IsLocalFrame()) |
ToLocalFrame(parent)->GetDocument()->CheckCompleted(); |
+} |
+ |
+void FrameLoader::CheckTimerFired(TimerBase*) { |
+ if (Page* page = frame_->GetPage()) { |
+ if (page->Suspended()) |
+ return; |
+ } |
+ frame_->GetDocument()->CheckCompleted(); |
+} |
+ |
+void FrameLoader::ScheduleCheckCompleted() { |
+ if (!check_timer_.IsActive()) |
+ check_timer_.StartOneShot(0, BLINK_FROM_HERE); |
} |
Frame* FrameLoader::Opener() { |
@@ -956,6 +981,7 @@ |
if (!protect_provisional_loader_) |
DetachDocumentLoader(provisional_document_loader_); |
+ check_timer_.Stop(); |
frame_->GetNavigationScheduler().Cancel(); |
// It's possible that the above actions won't have stopped loading if load |
@@ -1183,6 +1209,9 @@ |
DetachDocumentLoader(document_loader_); |
DetachDocumentLoader(provisional_document_loader_); |
+ Frame* parent = frame_->Tree().Parent(); |
+ if (parent && parent->IsLocalFrame()) |
+ ToLocalFrame(parent)->Loader().ScheduleCheckCompleted(); |
if (progress_tracker_) { |
progress_tracker_->Dispose(); |
progress_tracker_.Clear(); |
@@ -1461,6 +1490,7 @@ |
if (!had_placeholder_client_document_loader || |
navigation_policy == kNavigationPolicyHandledByClient) { |
frame_->GetNavigationScheduler().Cancel(); |
+ check_timer_.Stop(); |
} |
if (frame_load_request.Form()) |