| 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())
|
|
|