Move VirtualTimePauser from LocalFrameClientImpl to FrameLoader
LocalFrameClientImpl is a glue class, it should not do any work
in DispatchXXX methods - this makes refactoring them difficult.
FrameLoader knows best about navigations and can control virtual
time pauser itself.
Bug: 855189
Change-Id: I8947146b593f5dd356f7edcd439961f8a731a2f1
Reviewed-on: https://chromium-review.googlesource.com/c/1267735
Commit-Queue: Dmitry Gozman <dgozman@chromium.org>
Reviewed-by: Alex Clarke <alexclarke@chromium.org>
Cr-Commit-Position: refs/heads/master@{#598019}
diff --git a/third_party/blink/renderer/core/exported/local_frame_client_impl.cc b/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
index d7e2cf8d..5aa6477 100644
--- a/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
+++ b/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
@@ -433,7 +433,6 @@
web_frame_->Client()->DidFinishSameDocumentNavigation(
WebHistoryItem(item), commit_type, content_initiated);
}
- virtual_time_pauser_.UnpauseVirtualTime();
}
void LocalFrameClientImpl::DispatchWillCommitProvisionalLoad() {
@@ -449,7 +448,6 @@
web_frame_->Client()->DidStartProvisionalLoad(
WebDocumentLoaderImpl::FromDocumentLoader(loader), wrapped_request);
}
- virtual_time_pauser_.PauseVirtualTime();
}
void LocalFrameClientImpl::DispatchDidReceiveTitle(const String& title) {
@@ -486,15 +484,12 @@
}
if (WebDevToolsAgentImpl* dev_tools = DevToolsAgent())
dev_tools->DidCommitLoadForLocalFrame(web_frame_->GetFrame());
-
- virtual_time_pauser_.UnpauseVirtualTime();
}
void LocalFrameClientImpl::DispatchDidFailProvisionalLoad(
const ResourceError& error,
WebHistoryCommitType commit_type) {
web_frame_->DidFail(error, true, commit_type);
- virtual_time_pauser_.UnpauseVirtualTime();
}
void LocalFrameClientImpl::DispatchDidFailLoad(
@@ -1099,11 +1094,6 @@
granularity);
}
-void LocalFrameClientImpl::SetVirtualTimePauser(
- WebScopedVirtualTimePauser virtual_time_pauser) {
- virtual_time_pauser_ = std::move(virtual_time_pauser);
-}
-
String LocalFrameClientImpl::evaluateInInspectorOverlayForTesting(
const String& script) {
if (WebDevToolsAgentImpl* devtools = DevToolsAgent())
diff --git a/third_party/blink/renderer/core/exported/local_frame_client_impl.h b/third_party/blink/renderer/core/exported/local_frame_client_impl.h
index 8ec8399b..857eb21 100644
--- a/third_party/blink/renderer/core/exported/local_frame_client_impl.h
+++ b/third_party/blink/renderer/core/exported/local_frame_client_impl.h
@@ -37,7 +37,6 @@
#include "base/memory/scoped_refptr.h"
#include "third_party/blink/public/platform/web_insecure_request_policy.h"
-#include "third_party/blink/public/platform/web_scoped_virtual_time_pauser.h"
#include "third_party/blink/renderer/core/frame/local_frame_client.h"
#include "third_party/blink/renderer/core/frame/web_local_frame_impl.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
@@ -269,8 +268,6 @@
void BubbleLogicalScrollInParentFrame(ScrollDirection direction,
ScrollGranularity granularity) override;
- void SetVirtualTimePauser(WebScopedVirtualTimePauser) override;
-
String evaluateInInspectorOverlayForTesting(const String& script) override;
bool HandleCurrentKeyboardEvent() override;
@@ -306,8 +303,6 @@
Member<WebLocalFrameImpl> web_frame_;
String user_agent_;
-
- mutable WebScopedVirtualTimePauser virtual_time_pauser_;
};
DEFINE_TYPE_CASTS(LocalFrameClientImpl,
diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
index a535c55..64b9642 100644
--- a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
+++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
@@ -1791,12 +1791,6 @@
void WebLocalFrameImpl::SetCoreFrame(LocalFrame* frame) {
frame_ = frame;
-
- local_frame_client_->SetVirtualTimePauser(
- frame_ ? frame_->GetFrameScheduler()->CreateWebScopedVirtualTimePauser(
- "WebLocalFrameImpl",
- WebScopedVirtualTimePauser::VirtualTaskDuration::kInstant)
- : WebScopedVirtualTimePauser());
}
void WebLocalFrameImpl::InitializeCoreFrame(Page& page,
diff --git a/third_party/blink/renderer/core/loader/frame_loader.cc b/third_party/blink/renderer/core/loader/frame_loader.cc
index 5f7728b..5a1b9b0 100644
--- a/third_party/blink/renderer/core/loader/frame_loader.cc
+++ b/third_party/blink/renderer/core/loader/frame_loader.cc
@@ -229,7 +229,11 @@
forced_sandbox_flags_(kSandboxNone),
dispatching_did_clear_window_object_in_main_world_(false),
protect_provisional_loader_(false),
- detached_(false) {
+ detached_(false),
+ virtual_time_pauser_(
+ frame_->GetFrameScheduler()->CreateWebScopedVirtualTimePauser(
+ "FrameLoader",
+ WebScopedVirtualTimePauser::VirtualTaskDuration::kInstant)) {
DCHECK(frame_);
TRACE_EVENT_OBJECT_CREATED_WITH_ID("loading", "FrameLoader", this);
@@ -555,6 +559,9 @@
if (!loader)
return;
+ if (loader == provisional_document_loader_)
+ virtual_time_pauser_.UnpauseVirtualTime();
+
FrameNavigationDisabler navigation_disabler(*frame_);
loader->DetachFromFrame(flush_microtask_queue);
loader = nullptr;
@@ -996,6 +1003,7 @@
Client()->DispatchDidStartProvisionalLoad(provisional_document_loader_,
resource_request);
probe::didStartProvisionalLoad(frame_);
+ virtual_time_pauser_.PauseVirtualTime();
DCHECK(provisional_document_loader_);
TakeObjectSnapshot();
}
@@ -1090,6 +1098,7 @@
Client()->DispatchDidStartProvisionalLoad(provisional_document_loader_,
resource_request);
probe::didStartProvisionalLoad(frame_);
+ virtual_time_pauser_.PauseVirtualTime();
provisional_document_loader_->StartLoading();
TakeObjectSnapshot();
@@ -1273,6 +1282,7 @@
.SetHasSameOriginAsPreviousDocument(
security_origin->CanRequest(frame_->GetDocument()->Url()));
}
+ virtual_time_pauser_.UnpauseVirtualTime();
if (!PrepareForCommit())
return;
@@ -1407,6 +1417,7 @@
TRACE_EVENT_OBJECT_DELETED_WITH_ID("loading", "FrameLoader", this);
detached_ = true;
+ virtual_time_pauser_.UnpauseVirtualTime();
}
void FrameLoader::DetachProvisionalDocumentLoader(DocumentLoader* loader) {
diff --git a/third_party/blink/renderer/core/loader/frame_loader.h b/third_party/blink/renderer/core/loader/frame_loader.h
index 1a2d814..3e0b3e3 100644
--- a/third_party/blink/renderer/core/loader/frame_loader.h
+++ b/third_party/blink/renderer/core/loader/frame_loader.h
@@ -34,6 +34,7 @@
#define THIRD_PARTY_BLINK_RENDERER_CORE_LOADER_FRAME_LOADER_H_
#include "base/macros.h"
+#include "third_party/blink/public/platform/web_scoped_virtual_time_pauser.h"
#include "third_party/blink/public/web/web_document_loader.h"
#include "third_party/blink/public/web/web_frame_load_type.h"
#include "third_party/blink/public/web/web_navigation_type.h"
@@ -317,6 +318,8 @@
bool protect_provisional_loader_;
bool detached_;
+ WebScopedVirtualTimePauser virtual_time_pauser_;
+
DISALLOW_COPY_AND_ASSIGN(FrameLoader);
};