Commit 345dab42 authored by Daniel Cheng's avatar Daniel Cheng Committed by Commit Bot

Add Frame helper for adding resouce timing info.

This lets the code dispatch to LocalFrame or RemoteFrame as
appropriate.

Bug: 608780
Change-Id: I95f4c5298461f907959124169fd01cee06659df9
Reviewed-on: https://chromium-review.googlesource.com/748031
Commit-Queue: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarTakeshi Yoshino <tyoshino@chromium.org>
Cr-Commit-Position: refs/heads/master@{#515055}
parent ecc3ae39
......@@ -55,6 +55,7 @@ class LayoutEmbeddedContentItem;
class LocalFrame;
class KURL;
class Page;
class ResourceTimingInfo;
class SecurityContext;
class Settings;
class WindowProxy;
......@@ -87,6 +88,8 @@ class CORE_EXPORT Frame : public GarbageCollectedFinalized<Frame> {
virtual void Navigate(const FrameLoadRequest&) = 0;
virtual void Reload(FrameLoadType, ClientRedirectPolicy) = 0;
virtual void AddResourceTiming(const ResourceTimingInfo&) = 0;
virtual void Detach(FrameDetachType);
void DisconnectOwnerElement();
virtual bool ShouldClose() = 0;
......
......@@ -79,6 +79,7 @@
#include "core/plugins/PluginView.h"
#include "core/probe/CoreProbes.h"
#include "core/svg/SVGDocumentExtensions.h"
#include "core/timing/DOMWindowPerformance.h"
#include "core/timing/Performance.h"
#include "platform/Histogram.h"
#include "platform/WebFrameScheduler.h"
......@@ -265,6 +266,11 @@ void LocalFrame::Reload(FrameLoadType load_type,
}
}
void LocalFrame::AddResourceTiming(const ResourceTimingInfo& info) {
DCHECK(IsAttached());
DOMWindowPerformance::performance(*DomWindow())->AddResourceTiming(info);
}
void LocalFrame::Detach(FrameDetachType type) {
// Note that detach() can be re-entered, so it's not possible to
// DCHECK(isAttached()) here.
......
......@@ -112,6 +112,7 @@ class CORE_EXPORT LocalFrame final : public Frame,
UserGestureStatus) override;
void Navigate(const FrameLoadRequest&) override;
void Reload(FrameLoadType, ClientRedirectPolicy) override;
void AddResourceTiming(const ResourceTimingInfo&) override;
void Detach(FrameDetachType) override;
bool ShouldClose() override;
SecurityContext* GetSecurityContext() const override;
......
......@@ -18,6 +18,7 @@
#include "core/paint/PaintLayer.h"
#include "platform/graphics/GraphicsLayer.h"
#include "platform/loader/fetch/ResourceRequest.h"
#include "platform/loader/fetch/ResourceTimingInfo.h"
#include "platform/plugins/PluginScriptForbiddenScope.h"
#include "platform/weborigin/SecurityPolicy.h"
#include "public/platform/WebLayer.h"
......@@ -79,6 +80,11 @@ void RemoteFrame::Reload(FrameLoadType frame_load_type,
Client()->Reload(frame_load_type, client_redirect_policy);
}
void RemoteFrame::AddResourceTiming(const ResourceTimingInfo& info) {
DCHECK(info.IsMainResource());
// TODO(dcheng): Perform origin check, filter out fields, and forward via IPC.
}
void RemoteFrame::Detach(FrameDetachType type) {
lifecycle_.AdvanceTo(FrameLifecycle::kDetaching);
......
......@@ -32,6 +32,7 @@ class CORE_EXPORT RemoteFrame final : public Frame {
UserGestureStatus) override;
void Navigate(const FrameLoadRequest& passed_request) override;
void Reload(FrameLoadType, ClientRedirectPolicy) override;
void AddResourceTiming(const ResourceTimingInfo&) override;
void Detach(FrameDetachType) override;
RemoteSecurityContext* GetSecurityContext() const override;
void PrintNavigationErrorMessage(const Frame&, const char* reason) override {}
......
......@@ -64,7 +64,6 @@
#include "core/paint/FirstMeaningfulPaintDetector.h"
#include "core/probe/CoreProbes.h"
#include "core/svg/graphics/SVGImageChromeClient.h"
#include "core/timing/DOMWindowPerformance.h"
#include "core/timing/Performance.h"
#include "core/timing/PerformanceBase.h"
#include "platform/WebFrameScheduler.h"
......@@ -682,13 +681,20 @@ void FrameFetchContext::DidLoadResource(Resource* resource) {
}
void FrameFetchContext::AddResourceTiming(const ResourceTimingInfo& info) {
Document* initiator_document = document_ && info.IsMainResource()
? document_->ParentDocument()
: document_.Get();
if (!initiator_document || !initiator_document->domWindow())
// Normally, |document_| is cleared on Document shutdown. However, Documents
// for HTML imports will also not have a LocalFrame set: in that case, also
// early return, as there is nothing to report the resource timing to.
if (!document_ || !document_->GetFrame())
return;
DOMWindowPerformance::performance(*initiator_document->domWindow())
->AddResourceTiming(info);
Frame* initiator_frame = info.IsMainResource()
? document_->GetFrame()->Tree().Parent()
: document_->GetFrame();
if (!initiator_frame)
return;
initiator_frame->AddResourceTiming(info);
}
bool FrameFetchContext::AllowImage(bool images_enabled, const KURL& url) const {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment