Index: Source/core/loader/WorkerThreadableLoader.cpp |
diff --git a/Source/core/loader/WorkerThreadableLoader.cpp b/Source/core/loader/WorkerThreadableLoader.cpp |
index 0a0adf40966c9665a8bfd7f3c087e2faec6f1f2c..eacf55c077d249ab1b862f7f1944af6533bf4b01 100644 |
--- a/Source/core/loader/WorkerThreadableLoader.cpp |
+++ b/Source/core/loader/WorkerThreadableLoader.cpp |
@@ -36,6 +36,7 @@ |
#include "core/dom/Document.h" |
#include "core/loader/DocumentThreadableLoader.h" |
#include "core/loader/WorkerLoaderClientBridgeSyncHelper.h" |
+#include "core/timing/WorkerGlobalScopePerformance.h" |
#include "core/workers/WorkerGlobalScope.h" |
#include "core/workers/WorkerLoaderProxy.h" |
#include "core/workers/WorkerThread.h" |
@@ -57,10 +58,12 @@ WorkerThreadableLoader::WorkerThreadableLoader(WorkerGlobalScope& workerGlobalSc |
, m_workerClientWrapper(clientWrapper) |
, m_bridge(*(new MainThreadBridge(m_workerClientWrapper, clientBridge, workerGlobalScope.thread()->workerLoaderProxy(), request, options, resourceLoaderOptions, workerGlobalScope.referrerPolicy(), workerGlobalScope.url().strippedForUseAsReferrer()))) |
{ |
+ m_workerClientWrapper->setResourceTimingClient(this); |
} |
WorkerThreadableLoader::~WorkerThreadableLoader() |
{ |
+ m_workerClientWrapper->clearResourceTimingClient(); |
m_bridge.destroy(); |
} |
@@ -76,7 +79,7 @@ void WorkerThreadableLoader::loadResourceSynchronously(WorkerGlobalScope& worker |
events.append(loaderDone.get()); |
RefPtr<ThreadableLoaderClientWrapper> clientWrapper(ThreadableLoaderClientWrapper::create(&client)); |
- OwnPtr<WorkerLoaderClientBridgeSyncHelper> clientBridge(WorkerLoaderClientBridgeSyncHelper::create(client, loaderDone.release())); |
+ OwnPtr<WorkerLoaderClientBridgeSyncHelper> clientBridge(WorkerLoaderClientBridgeSyncHelper::create(clientWrapper.get(), loaderDone.release())); |
// This must be valid while loader is around. |
WorkerLoaderClientBridgeSyncHelper* clientBridgePtr = clientBridge.get(); |
@@ -106,6 +109,11 @@ void WorkerThreadableLoader::cancel() |
m_bridge.cancel(); |
} |
+void WorkerThreadableLoader::didReceiveResourceTiming(const ResourceTimingInfo& info) |
+{ |
+ WorkerGlobalScopePerformance::performance(*m_workerGlobalScope)->addResourceTiming(info); |
+} |
+ |
WorkerThreadableLoader::MainThreadBridge::MainThreadBridge( |
PassRefPtr<ThreadableLoaderClientWrapper> workerClientWrapper, |
PassOwnPtr<ThreadableLoaderClient> clientBridge, |
@@ -254,4 +262,9 @@ void WorkerThreadableLoader::MainThreadBridge::didFailRedirectCheck() |
m_clientBridge->didFailRedirectCheck(); |
} |
+void WorkerThreadableLoader::MainThreadBridge::didReceiveResourceTiming(const ResourceTimingInfo& info) |
+{ |
+ m_clientBridge->didReceiveResourceTiming(info); |
+} |
+ |
} // namespace blink |