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

Side by Side Diff: third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp

Issue 2043753002: Declarative resource hints go through mojo IPC to //content Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use unique_ptr to avoid memory leaks in unit tests 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/loader/LinkLoader.h" 5 #include "core/loader/LinkLoader.h"
6 6
7 #include "core/fetch/MemoryCache.h" 7 #include "core/fetch/MemoryCache.h"
8 #include "core/fetch/ResourceFetcher.h" 8 #include "core/fetch/ResourceFetcher.h"
9 #include "core/frame/Settings.h" 9 #include "core/frame/Settings.h"
10 #include "core/html/LinkRelAttribute.h" 10 #include "core/html/LinkRelAttribute.h"
11 #include "core/loader/DocumentLoader.h" 11 #include "core/loader/DocumentLoader.h"
12 #include "core/loader/LinkLoaderClient.h" 12 #include "core/loader/LinkLoaderClient.h"
13 #include "core/loader/NetworkHintsInterface.h"
14 #include "core/testing/DummyPageHolder.h" 13 #include "core/testing/DummyPageHolder.h"
15 #include "platform/network/ResourceLoadPriority.h" 14 #include "platform/network/ResourceLoadPriority.h"
15 #include "platform/testing/PlatformMojoMock.h"
16 #include "platform/testing/URLTestHelpers.h" 16 #include "platform/testing/URLTestHelpers.h"
17 #include "public/platform/Platform.h" 17 #include "public/platform/Platform.h"
18 #include "public/platform/WebURLLoaderMockFactory.h" 18 #include "public/platform/WebURLLoaderMockFactory.h"
19 #include "testing/gmock/include/gmock/gmock.h"
19 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
20 #include <base/macros.h> 21 #include <base/macros.h>
21 22
22 namespace blink { 23 namespace blink {
23 24
25 using ::testing::_;
26
24 class MockLinkLoaderClient final : public GarbageCollectedFinalized<MockLinkLoad erClient>, public LinkLoaderClient { 27 class MockLinkLoaderClient final : public GarbageCollectedFinalized<MockLinkLoad erClient>, public LinkLoaderClient {
25 USING_GARBAGE_COLLECTED_MIXIN(MockLinkLoaderClient); 28 USING_GARBAGE_COLLECTED_MIXIN(MockLinkLoaderClient);
26 public: 29 public:
27 static MockLinkLoaderClient* create(bool shouldLoad) 30 static MockLinkLoaderClient* create(bool shouldLoad)
28 { 31 {
29 return new MockLinkLoaderClient(shouldLoad); 32 return new MockLinkLoaderClient(shouldLoad);
30 } 33 }
31 34
32 DEFINE_INLINE_VIRTUAL_TRACE() { LinkLoaderClient::trace(visitor); } 35 DEFINE_INLINE_VIRTUAL_TRACE() { LinkLoaderClient::trace(visitor); }
33 36
(...skipping 11 matching lines...) Expand all
45 48
46 private: 49 private:
47 explicit MockLinkLoaderClient(bool shouldLoad) 50 explicit MockLinkLoaderClient(bool shouldLoad)
48 : m_shouldLoad(shouldLoad) 51 : m_shouldLoad(shouldLoad)
49 { 52 {
50 } 53 }
51 54
52 bool m_shouldLoad; 55 bool m_shouldLoad;
53 }; 56 };
54 57
55 class NetworkHintsMock : public NetworkHintsInterface {
56 public:
57 NetworkHintsMock()
58 : m_didDnsPrefetch(false)
59 , m_didPreconnect(false)
60 {
61 }
62
63 void dnsPrefetchHost(const String& host) const override
64 {
65 m_didDnsPrefetch = true;
66 }
67
68 void preconnectHost(const KURL& host, const CrossOriginAttributeValue crossO rigin) const override
69 {
70 m_didPreconnect = true;
71 m_isHTTPS = host.protocolIs("https");
72 m_isCrossOrigin = (crossOrigin == CrossOriginAttributeAnonymous);
73 }
74
75 bool didDnsPrefetch() { return m_didDnsPrefetch; }
76 bool didPreconnect() { return m_didPreconnect; }
77 bool isHTTPS() { return m_isHTTPS; }
78 bool isCrossOrigin() { return m_isCrossOrigin; }
79
80 private:
81 mutable bool m_didDnsPrefetch;
82 mutable bool m_didPreconnect;
83 mutable bool m_isHTTPS;
84 mutable bool m_isCrossOrigin;
85
86 };
87
88 TEST(LinkLoaderTest, Preload) 58 TEST(LinkLoaderTest, Preload)
89 { 59 {
90 struct TestCase { 60 struct TestCase {
91 const char* href; 61 const char* href;
92 const char* as; 62 const char* as;
93 const char* type; 63 const char* type;
94 const char* media; 64 const char* media;
95 const ResourceLoadPriority priority; 65 const ResourceLoadPriority priority;
96 const WebURLRequest::RequestContext context; 66 const WebURLRequest::RequestContext context;
97 const bool linkLoaderShouldLoadValue; 67 const bool linkLoaderShouldLoadValue;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 Persistent<MockLinkLoaderClient> loaderClient = MockLinkLoaderClient::cr eate(testCase.linkLoaderShouldLoadValue); 110 Persistent<MockLinkLoaderClient> loaderClient = MockLinkLoaderClient::cr eate(testCase.linkLoaderShouldLoadValue);
141 LinkLoader* loader = LinkLoader::create(loaderClient.get()); 111 LinkLoader* loader = LinkLoader::create(loaderClient.get());
142 KURL hrefURL = KURL(KURL(), testCase.href); 112 KURL hrefURL = KURL(KURL(), testCase.href);
143 URLTestHelpers::registerMockedErrorURLLoad(hrefURL); 113 URLTestHelpers::registerMockedErrorURLLoad(hrefURL);
144 loader->loadLink(LinkRelAttribute("preload"), 114 loader->loadLink(LinkRelAttribute("preload"),
145 CrossOriginAttributeNotSet, 115 CrossOriginAttributeNotSet,
146 testCase.type, 116 testCase.type,
147 testCase.as, 117 testCase.as,
148 testCase.media, 118 testCase.media,
149 hrefURL, 119 hrefURL,
150 dummyPageHolder->document(), 120 dummyPageHolder->document());
151 NetworkHintsMock());
152 ASSERT(dummyPageHolder->document().fetcher()); 121 ASSERT(dummyPageHolder->document().fetcher());
153 HeapListHashSet<Member<Resource>>* preloads = dummyPageHolder->document( ).fetcher()->preloads(); 122 HeapListHashSet<Member<Resource>>* preloads = dummyPageHolder->document( ).fetcher()->preloads();
154 if (testCase.expectingLoad) { 123 if (testCase.expectingLoad) {
155 if (!preloads) 124 if (!preloads)
156 fprintf(stderr, "Unexpected result %s %s %s\n", testCase.href, t estCase.as, testCase.type); 125 fprintf(stderr, "Unexpected result %s %s %s\n", testCase.href, t estCase.as, testCase.type);
157 ASSERT_NE(nullptr, preloads); 126 ASSERT_NE(nullptr, preloads);
158 } else { 127 } else {
159 ASSERT_EQ(nullptr, preloads); 128 ASSERT_EQ(nullptr, preloads);
160 } 129 }
161 if (preloads) { 130 if (preloads) {
(...skipping 27 matching lines...) Expand all
189 158
190 // TODO(yoav): Test (and fix) shouldLoad = false 159 // TODO(yoav): Test (and fix) shouldLoad = false
191 160
192 // Test the cases with a single header 161 // Test the cases with a single header
193 for (const auto& testCase : cases) { 162 for (const auto& testCase : cases) {
194 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz e(500, 500)); 163 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz e(500, 500));
195 dummyPageHolder->document().settings()->setDNSPrefetchingEnabled(true); 164 dummyPageHolder->document().settings()->setDNSPrefetchingEnabled(true);
196 Persistent<MockLinkLoaderClient> loaderClient = MockLinkLoaderClient::cr eate(testCase.shouldLoad); 165 Persistent<MockLinkLoaderClient> loaderClient = MockLinkLoaderClient::cr eate(testCase.shouldLoad);
197 LinkLoader* loader = LinkLoader::create(loaderClient.get()); 166 LinkLoader* loader = LinkLoader::create(loaderClient.get());
198 KURL hrefURL = KURL(KURL(ParsedURLStringTag(), String("http://example.co m")), testCase.href); 167 KURL hrefURL = KURL(KURL(ParsedURLStringTag(), String("http://example.co m")), testCase.href);
199 NetworkHintsMock networkHints; 168
169 PlatformMojoMock mockPlatform;
170 EXPECT_CALL(mockPlatform, preconnect(_, _, _))
171 .Times(0);
172 EXPECT_CALL(mockPlatform, preresolve(hrefURL))
173 .Times(1);
174
200 loader->loadLink(LinkRelAttribute("dns-prefetch"), 175 loader->loadLink(LinkRelAttribute("dns-prefetch"),
201 CrossOriginAttributeNotSet, 176 CrossOriginAttributeNotSet,
202 String(), 177 String(),
203 String(), 178 String(),
204 String(), 179 String(),
205 hrefURL, 180 hrefURL,
206 dummyPageHolder->document(), 181 dummyPageHolder->document());
207 networkHints);
208 ASSERT_FALSE(networkHints.didPreconnect());
209 ASSERT_EQ(testCase.shouldLoad, networkHints.didDnsPrefetch());
Yoav Weiss 2016/06/13 08:26:08 Again, where did the asserts go?
210 } 182 }
211 } 183 }
212 184
213 TEST(LinkLoaderTest, Preconnect) 185 TEST(LinkLoaderTest, Preconnect)
214 { 186 {
215 struct { 187 struct {
216 const char* href; 188 const char* href;
217 CrossOriginAttributeValue crossOrigin; 189 CrossOriginAttributeValue crossOrigin;
218 const bool shouldLoad; 190 const bool shouldLoad;
219 const bool isHTTPS;
220 const bool isCrossOrigin;
221 } cases[] = { 191 } cases[] = {
222 {"http://example.com/", CrossOriginAttributeNotSet, true, false, false}, 192 {"http://example.com/", CrossOriginAttributeNotSet, true},
223 {"https://example.com/", CrossOriginAttributeNotSet, true, true, false}, 193 {"https://example.com/", CrossOriginAttributeNotSet, true},
224 {"http://example.com/", CrossOriginAttributeAnonymous, true, false, true }, 194 {"http://example.com/", CrossOriginAttributeAnonymous, true},
225 {"//example.com/", CrossOriginAttributeNotSet, true, false, false}, 195 {"//example.com/", CrossOriginAttributeNotSet, true},
226 }; 196 };
227 197
228 // Test the cases with a single header 198 // Test the cases with a single header
229 for (const auto& testCase : cases) { 199 for (const auto& testCase : cases) {
230 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz e(500, 500)); 200 OwnPtr<DummyPageHolder> dummyPageHolder = DummyPageHolder::create(IntSiz e(500, 500));
231 Persistent<MockLinkLoaderClient> loaderClient = MockLinkLoaderClient::cr eate(testCase.shouldLoad); 201 Persistent<MockLinkLoaderClient> loaderClient = MockLinkLoaderClient::cr eate(testCase.shouldLoad);
232 LinkLoader* loader = LinkLoader::create(loaderClient.get()); 202 LinkLoader* loader = LinkLoader::create(loaderClient.get());
233 KURL hrefURL = KURL(KURL(ParsedURLStringTag(), String("http://example.co m")), testCase.href); 203 KURL hrefURL = KURL(KURL(ParsedURLStringTag(), String("http://example.co m")), testCase.href);
234 NetworkHintsMock networkHints; 204
205 PlatformMojoMock mockPlatform;
206 EXPECT_CALL(mockPlatform, preconnect(hrefURL, ::testing::Eq(testCase.cro ssOrigin != CrossOriginAttributeAnonymous), 1))
207 .Times(1);
208 EXPECT_CALL(mockPlatform, preresolve(_))
209 .Times(0);
210
235 loader->loadLink(LinkRelAttribute("preconnect"), 211 loader->loadLink(LinkRelAttribute("preconnect"),
236 testCase.crossOrigin, 212 testCase.crossOrigin,
237 String(), 213 String(),
238 String(), 214 String(),
239 String(), 215 String(),
240 hrefURL, 216 hrefURL,
241 dummyPageHolder->document(), 217 dummyPageHolder->document());
242 networkHints);
243 ASSERT_EQ(testCase.shouldLoad, networkHints.didPreconnect());
244 ASSERT_EQ(testCase.isHTTPS, networkHints.isHTTPS());
245 ASSERT_EQ(testCase.isCrossOrigin, networkHints.isCrossOrigin());
246 } 218 }
247 } 219 }
248 220
249 } // namespace blink 221 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698