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

Unified Diff: third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp

Issue 2105713002: Render process changes for ResourceTiming sizes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@resource_timing_sizes_browser_process
Patch Set: Fix lint error: ASSERT -> DCHECK Created 4 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
Index: third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp
diff --git a/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp b/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp
index b17a699bbb0edf5c6103119e474e3621949084fb..8a6a94152487b5972c91806cac71d246c768216c 100644
--- a/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp
+++ b/third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp
@@ -38,7 +38,10 @@
#include "core/fetch/ResourceLoader.h"
#include "platform/exported/WrappedResourceResponse.h"
#include "platform/heap/Handle.h"
+#include "platform/heap/HeapAllocator.h"
+#include "platform/heap/Member.h"
#include "platform/network/ResourceRequest.h"
+#include "platform/network/ResourceTimingInfo.h"
#include "platform/testing/URLTestHelpers.h"
#include "platform/weborigin/KURL.h"
#include "public/platform/Platform.h"
@@ -46,13 +49,18 @@
#include "public/platform/WebURLLoaderMockFactory.h"
#include "public/platform/WebURLResponse.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "wtf/Allocator.h"
#include "wtf/PtrUtil.h"
+#include "wtf/Vector.h"
#include <memory>
namespace blink {
namespace {
+const char testImageFilename[] = "white-1x1.png";
+const int testImageSize = 103; // size of web/tests/data/white-1x1.png
+
class MockTaskRunner : public blink::WebTaskRunner {
void postTask(const WebTraceLocation&, Task*) override { }
void postDelayedTask(const WebTraceLocation&, Task*, double) override { }
@@ -82,16 +90,21 @@ public:
void setLoadComplete(bool complete) { m_complete = complete; }
bool isLoadComplete() const override { return m_complete; }
+ void addResourceTiming(const ResourceTimingInfo& resourceTimingInfo) override { m_transferSize = resourceTimingInfo.transferSize(); }
+ long long getTransferSize() const { return m_transferSize; }
+
private:
ResourceFetcherTestMockFetchContext()
: m_policy(CachePolicyVerify)
, m_runner(wrapUnique(new MockTaskRunner))
, m_complete(false)
+ , m_transferSize(-1)
{ }
CachePolicy m_policy;
std::unique_ptr<MockTaskRunner> m_runner;
bool m_complete;
+ long long m_transferSize;
};
class ResourceFetcherTest : public ::testing::Test {
@@ -205,7 +218,7 @@ TEST_F(ResourceFetcherTest, VaryImage)
response.setHTTPStatusCode(200);
response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600");
response.setHTTPHeaderField(HTTPNames::Vary, "*");
- URLTestHelpers::registerMockedURLLoadWithCustomResponse(url, "white-1x1.png", WebString::fromUTF8(""), WrappedResourceResponse(response));
+ URLTestHelpers::registerMockedURLLoadWithCustomResponse(url, testImageFilename, WebString::fromUTF8(""), WrappedResourceResponse(response));
FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo());
Resource* resource = fetcher->requestResource(fetchRequestOriginal, TestResourceFactory(Resource::Image));
@@ -379,7 +392,7 @@ TEST_F(ResourceFetcherTest, ResponseOnCancel)
ResourceResponse response;
response.setURL(url);
response.setHTTPStatusCode(200);
- URLTestHelpers::registerMockedURLLoadWithCustomResponse(url, "white-1x1.png", WebString::fromUTF8(""), WrappedResourceResponse(response));
+ URLTestHelpers::registerMockedURLLoadWithCustomResponse(url, testImageFilename, WebString::fromUTF8(""), WrappedResourceResponse(response));
ResourceFetcher* fetcher = ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create());
FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo());
@@ -391,4 +404,115 @@ TEST_F(ResourceFetcherTest, ResponseOnCancel)
Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
}
+class ScopedMockRedirectRequester {
+ STACK_ALLOCATED();
+ WTF_MAKE_NONCOPYABLE(ScopedMockRedirectRequester);
+
+public:
+ ScopedMockRedirectRequester()
+ : m_context(nullptr)
+ {
+ }
+
+ ~ScopedMockRedirectRequester()
+ {
+ cleanUp();
+ }
+
+ void registerRedirect(const WebString& fromURL, const WebString& toURL)
+ {
+ KURL redirectURL(ParsedURLString, fromURL);
+ WebURLResponse redirectResponse;
+ redirectResponse.initialize();
+ redirectResponse.setURL(redirectURL);
+ redirectResponse.setHTTPStatusCode(301);
+ redirectResponse.setHTTPHeaderField(HTTPNames::Location, toURL);
+ Platform::current()->getURLLoaderMockFactory()->registerURL(redirectURL, redirectResponse, "");
+ m_registeredURLs.append(redirectURL);
+ }
+
+ void registerFinalResource(const WebString& url)
+ {
+ KURL finalURL(ParsedURLString, url);
+ WebURLResponse finalResponse;
+ finalResponse.initialize();
+ finalResponse.setURL(finalURL);
+ finalResponse.setHTTPStatusCode(200);
+ URLTestHelpers::registerMockedURLLoadWithCustomResponse(finalURL, testImageFilename, "", finalResponse);
+ m_registeredURLs.append(finalURL);
+ }
+
+ void request(const WebString& url)
+ {
+ DCHECK(!m_context);
+ m_context = ResourceFetcherTestMockFetchContext::create();
+ ResourceFetcher* fetcher = ResourceFetcher::create(m_context);
+ FetchRequest fetchRequest = FetchRequest(ResourceRequest(url), FetchInitiatorInfo());
+ Resource* resource = fetcher->requestResource(fetchRequest, TestResourceFactory());
+ m_cachedResources.append(resource);
+ Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
+ }
+
+ void cleanUp()
+ {
+ for (const KURL& url : m_registeredURLs) {
+ Platform::current()->getURLLoaderMockFactory()->unregisterURL(url);
+ }
+ m_registeredURLs.clear();
+ for (const auto& resource : m_cachedResources) {
+ memoryCache()->remove(resource);
+ }
+ m_cachedResources.clear();
+ }
+
+ ResourceFetcherTestMockFetchContext* context() const { return m_context; }
+
+private:
+ Vector<KURL> m_registeredURLs;
+ HeapVector<Member<Resource>> m_cachedResources;
+ Member<ResourceFetcherTestMockFetchContext> m_context;
+};
+
+TEST_F(ResourceFetcherTest, SameOriginRedirect)
+{
+ const char redirectURL[] = "http://127.0.0.1:8000/redirect.html";
+ const char finalURL[] = "http://127.0.0.1:8000/final.html";
+ ScopedMockRedirectRequester requester;
+ requester.registerRedirect(redirectURL, finalURL);
+ requester.registerFinalResource(finalURL);
+ requester.request(redirectURL);
+
+ // The magic number "300" is specified as the redirect overhead in
Kunihiko Sakamoto 2016/07/01 10:12:35 Can you define this magic number as a constant?
Adam Rice 2016/07/04 02:44:18 Done.
+ // WebURLLoaderMock::ServeRedirect
+ EXPECT_EQ(300 + testImageSize, requester.context()->getTransferSize());
+}
+
+TEST_F(ResourceFetcherTest, CrossOriginRedirect)
+{
+ const char redirectURL[] = "http://otherorigin.test/redirect.html";
+ const char finalURL[] = "http://127.0.0.1:8000/final.html";
+ ScopedMockRedirectRequester requester;
+ requester.registerRedirect(redirectURL, finalURL);
+ requester.registerFinalResource(finalURL);
+ requester.request(redirectURL);
+
+ EXPECT_EQ(testImageSize, requester.context()->getTransferSize());
+}
+
+TEST_F(ResourceFetcherTest, ComplexCrossOriginRedirect)
+{
+ const char redirectURL1[] = "http://127.0.0.1:8000/redirect1.html";
+ const char redirectURL2[] = "http://otherorigin.test/redirect2.html";
+ const char redirectURL3[] = "http://127.0.0.1:8000/redirect3.html";
+ const char finalURL[] = "http://127.0.0.1:8000/final.html";
+ ScopedMockRedirectRequester requester;
+ requester.registerRedirect(redirectURL1, redirectURL2);
+ requester.registerRedirect(redirectURL2, redirectURL3);
+ requester.registerRedirect(redirectURL3, finalURL);
+ requester.registerFinalResource(finalURL);
+ requester.request(redirectURL1);
+
+ EXPECT_EQ(testImageSize, requester.context()->getTransferSize());
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698