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

Unified Diff: Source/core/timing/PerformanceBase.cpp

Issue 1185553002: ResourceTiming should not depend on Document (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Remove SecurityOrigin parameter Created 5 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/timing/PerformanceBase.h ('k') | Source/core/timing/PerformanceResourceTiming.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/timing/PerformanceBase.cpp
diff --git a/Source/core/timing/PerformanceBase.cpp b/Source/core/timing/PerformanceBase.cpp
index 64aa79f34122e08432732127cfa94f4184382808..344a36de26fd8fe4a314712f96d2e4655e45afa2 100644
--- a/Source/core/timing/PerformanceBase.cpp
+++ b/Source/core/timing/PerformanceBase.cpp
@@ -170,12 +170,12 @@ void PerformanceBase::setFrameTimingBufferSize(unsigned size)
dispatchEvent(Event::create(EventTypeNames::frametimingbufferfull));
}
-static bool passesTimingAllowCheck(const ResourceResponse& response, Document* requestingDocument, const AtomicString& originalTimingAllowOrigin)
+static bool passesTimingAllowCheck(const ResourceResponse& response, const SecurityOrigin& initiatorSecurityOrigin, const AtomicString& originalTimingAllowOrigin)
{
AtomicallyInitializedStaticReference(AtomicString, timingAllowOrigin, new AtomicString("timing-allow-origin"));
RefPtr<SecurityOrigin> resourceOrigin = SecurityOrigin::create(response.url());
- if (resourceOrigin->isSameSchemeHostPort(requestingDocument->securityOrigin()))
+ if (resourceOrigin->isSameSchemeHostPort(&initiatorSecurityOrigin))
return true;
const AtomicString& timingAllowOriginString = originalTimingAllowOrigin.isEmpty() ? response.httpHeaderField(timingAllowOrigin) : originalTimingAllowOrigin;
@@ -185,7 +185,7 @@ static bool passesTimingAllowCheck(const ResourceResponse& response, Document* r
if (timingAllowOriginString == starAtom)
return true;
- const String& securityOrigin = requestingDocument->securityOrigin()->toString();
+ const String& securityOrigin = initiatorSecurityOrigin.toString();
Vector<String> timingAllowOrigins;
timingAllowOriginString.string().split(' ', timingAllowOrigins);
for (const String& allowOrigin : timingAllowOrigins) {
@@ -196,36 +196,41 @@ static bool passesTimingAllowCheck(const ResourceResponse& response, Document* r
return false;
}
-static bool allowsTimingRedirect(const Vector<ResourceResponse>& redirectChain, const ResourceResponse& finalResponse, Document* initiatorDocument)
+static bool allowsTimingRedirect(const Vector<ResourceResponse>& redirectChain, const ResourceResponse& finalResponse, const SecurityOrigin& initiatorSecurityOrigin)
{
- if (!passesTimingAllowCheck(finalResponse, initiatorDocument, emptyAtom))
+ if (!passesTimingAllowCheck(finalResponse, initiatorSecurityOrigin, emptyAtom))
return false;
for (const ResourceResponse& response : redirectChain) {
- if (!passesTimingAllowCheck(response, initiatorDocument, emptyAtom))
+ if (!passesTimingAllowCheck(response, initiatorSecurityOrigin, emptyAtom))
return false;
}
return true;
}
-void PerformanceBase::addResourceTiming(const ResourceTimingInfo& info, Document* initiatorDocument)
+void PerformanceBase::addResourceTiming(const ResourceTimingInfo& info)
{
if (isResourceTimingBufferFull())
return;
+ SecurityOrigin* securityOrigin = nullptr;
+ if (ExecutionContext* context = executionContext())
+ securityOrigin = context->securityOrigin();
+ if (!securityOrigin)
+ return;
const ResourceResponse& finalResponse = info.finalResponse();
- bool allowTimingDetails = passesTimingAllowCheck(finalResponse, initiatorDocument, info.originalTimingAllowOrigin());
+ bool allowTimingDetails = passesTimingAllowCheck(finalResponse, *securityOrigin, info.originalTimingAllowOrigin());
double startTime = info.initialTime();
if (info.redirectChain().isEmpty()) {
- PerformanceEntry* entry = PerformanceResourceTiming::create(info, initiatorDocument, startTime, allowTimingDetails);
+ PerformanceEntry* entry = PerformanceResourceTiming::create(info, timeOrigin(), startTime, allowTimingDetails);
addResourceTimingBuffer(entry);
return;
}
const Vector<ResourceResponse>& redirectChain = info.redirectChain();
- bool allowRedirectDetails = allowsTimingRedirect(redirectChain, finalResponse, initiatorDocument);
+ bool allowRedirectDetails = allowsTimingRedirect(redirectChain, finalResponse, *securityOrigin);
if (!allowRedirectDetails) {
ResourceLoadTiming* finalTiming = finalResponse.resourceLoadTiming();
@@ -238,7 +243,7 @@ void PerformanceBase::addResourceTiming(const ResourceTimingInfo& info, Document
ASSERT(lastRedirectTiming);
double lastRedirectEndTime = lastRedirectTiming->receiveHeadersEnd();
- PerformanceEntry* entry = PerformanceResourceTiming::create(info, initiatorDocument, startTime, lastRedirectEndTime, allowTimingDetails, allowRedirectDetails);
+ PerformanceEntry* entry = PerformanceResourceTiming::create(info, timeOrigin(), startTime, lastRedirectEndTime, allowTimingDetails, allowRedirectDetails);
addResourceTimingBuffer(entry);
}
« no previous file with comments | « Source/core/timing/PerformanceBase.h ('k') | Source/core/timing/PerformanceResourceTiming.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698