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

Side by Side Diff: Source/core/html/parser/HTMLPreloadScannerTest.cpp

Issue 1152043005: Add <link rel=preconnect> support to the HTMLPreloadScanner (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: 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 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 "config.h" 5 #include "config.h"
6 #include "core/html/parser/HTMLPreloadScanner.h" 6 #include "core/html/parser/HTMLPreloadScanner.h"
7 7
8 #include "core/MediaTypeNames.h" 8 #include "core/MediaTypeNames.h"
9 #include "core/css/MediaValuesCached.h" 9 #include "core/css/MediaValuesCached.h"
10 #include "core/fetch/ClientHintsPreferences.h" 10 #include "core/fetch/ClientHintsPreferences.h"
11 #include "core/frame/Settings.h" 11 #include "core/frame/Settings.h"
12 #include "core/html/parser/HTMLParserOptions.h" 12 #include "core/html/parser/HTMLParserOptions.h"
13 #include "core/html/parser/HTMLResourcePreloader.h" 13 #include "core/html/parser/HTMLResourcePreloader.h"
14 #include "core/loader/Preconnecter.h"
14 #include "core/testing/DummyPageHolder.h" 15 #include "core/testing/DummyPageHolder.h"
15 #include <gtest/gtest.h> 16 #include <gtest/gtest.h>
16 17
17 namespace blink { 18 namespace blink {
18 19
19 typedef struct { 20 typedef struct {
20 const char* baseURL; 21 const char* baseURL;
21 const char* inputHTML; 22 const char* inputHTML;
22 const char* preloadedURL; 23 const char* preloadedURL;
23 const char* outputBaseURL; 24 const char* outputBaseURL;
24 Resource::Type type; 25 Resource::Type type;
25 int resourceWidth; 26 int resourceWidth;
26 ClientHintsPreferences preferences; 27 ClientHintsPreferences preferences;
27 } TestCase; 28 } TestCase;
28 29
30 typedef struct {
31 const char* baseURL;
32 const char* inputHTML;
33 const char* preconnectedHost;
34 CrossOriginAttributeValue crossOrigin;
35 } PreconnectTestCase;
36
37 class MockPreconnecter : public PreconnecterHost {
Mike West 2015/06/02 11:18:34 Nit: I'd prefer either `MockPreconnecterHost : pub
38 public:
39 static PassOwnPtr<PreconnecterHost> createLeavingReference(MockPreconnecter* & preconnector)
40 {
41 preconnector = new MockPreconnecter();
42 return adoptPtr(preconnector);
43 }
44
45 virtual void preconnect(KURL& host, CrossOriginAttributeValue crossOrigin) o verride
46 {
47 m_host = host;
48 m_crossOrigin = crossOrigin;
49 }
50
51 void init()
52 {
53 m_host = KURL();
54 m_crossOrigin = CrossOriginAttributeNotSet;
55 }
56
57 void verify(String host, CrossOriginAttributeValue crossOrigin)
58 {
59 EXPECT_STREQ(m_host.string().ascii().data(), host.ascii().data());
60 EXPECT_EQ(m_crossOrigin, crossOrigin);
61 }
62
63 private:
64
Mike West 2015/06/02 11:18:33 Nit: No newline.
65 KURL m_host;
66 CrossOriginAttributeValue m_crossOrigin;
67 };
29 class MockHTMLResourcePreloader : public ResourcePreloader { 68 class MockHTMLResourcePreloader : public ResourcePreloader {
Mike West 2015/06/02 11:18:34 Nit: Newline.
30 public: 69 public:
31 void preloadRequestVerification(Resource::Type type, const String& url, cons t String& baseURL, int width) 70 void preloadRequestVerification(Resource::Type type, const String& url, cons t String& baseURL, int width)
32 { 71 {
33 EXPECT_EQ(m_preloadRequest->resourceType(), type); 72 EXPECT_EQ(m_preloadRequest->resourceType(), type);
34 EXPECT_STREQ(m_preloadRequest->resourceURL().ascii().data(), url.ascii( ).data()); 73 EXPECT_STREQ(m_preloadRequest->resourceURL().ascii().data(), url.ascii( ).data());
35 EXPECT_STREQ(m_preloadRequest->baseURL().ascii().data(), baseURL.ascii() .data()); 74 EXPECT_STREQ(m_preloadRequest->baseURL().ascii().data(), baseURL.ascii() .data());
36 EXPECT_EQ(m_preloadRequest->resourceWidth(), width); 75 EXPECT_EQ(m_preloadRequest->resourceWidth(), width);
37 } 76 }
38 77
39 protected: 78 protected:
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 data.displayMode = WebDisplayModeBrowser; 111 data.displayMode = WebDisplayModeBrowser;
73 return MediaValuesCached::create(data); 112 return MediaValuesCached::create(data);
74 } 113 }
75 114
76 void runSetUp(bool viewportEnabled) 115 void runSetUp(bool viewportEnabled)
77 { 116 {
78 HTMLParserOptions options(&m_dummyPageHolder->document()); 117 HTMLParserOptions options(&m_dummyPageHolder->document());
79 KURL documentURL(ParsedURLString, "http://whatever.test/"); 118 KURL documentURL(ParsedURLString, "http://whatever.test/");
80 m_dummyPageHolder->document().settings()->setViewportEnabled(viewportEna bled); 119 m_dummyPageHolder->document().settings()->setViewportEnabled(viewportEna bled);
81 m_dummyPageHolder->document().settings()->setViewportMetaEnabled(viewpor tEnabled); 120 m_dummyPageHolder->document().settings()->setViewportMetaEnabled(viewpor tEnabled);
82 m_scanner = HTMLPreloadScanner::create(options, documentURL, CachedDocum entParameters::create(&m_dummyPageHolder->document(), createMediaValues())); 121 m_scanner = HTMLPreloadScanner::create(options, documentURL, CachedDocum entParameters::create(&m_dummyPageHolder->document(), createMediaValues()), Mock Preconnecter::createLeavingReference(m_preconnecter));
83 } 122 }
84 123
85 virtual void SetUp() 124 virtual void SetUp()
86 { 125 {
87 runSetUp(true); 126 runSetUp(true);
88 } 127 }
89 128
90 void test(TestCase testCase) 129 void test(TestCase testCase)
91 { 130 {
92 MockHTMLResourcePreloader preloader; 131 MockHTMLResourcePreloader preloader;
93 KURL baseURL(ParsedURLString, testCase.baseURL); 132 KURL baseURL(ParsedURLString, testCase.baseURL);
94 m_scanner->appendToEnd(String(testCase.inputHTML)); 133 m_scanner->appendToEnd(String(testCase.inputHTML));
95 m_scanner->scan(&preloader, baseURL); 134 m_scanner->scan(&preloader, baseURL);
96 135
97 preloader.preloadRequestVerification(testCase.type, testCase.preloadedUR L, testCase.outputBaseURL, testCase.resourceWidth); 136 preloader.preloadRequestVerification(testCase.type, testCase.preloadedUR L, testCase.outputBaseURL, testCase.resourceWidth);
98 } 137 }
99 138
139 void test(PreconnectTestCase testCase)
140 {
141 m_preconnecter->init();
142 MockHTMLResourcePreloader preloader;
143 KURL baseURL(ParsedURLString, testCase.baseURL);
144 m_scanner->appendToEnd(String(testCase.inputHTML));
145 m_scanner->scan(&preloader, baseURL);
146 m_preconnecter->verify(testCase.preconnectedHost, testCase.crossOrigin);
147 }
148
100 private: 149 private:
101 OwnPtr<DummyPageHolder> m_dummyPageHolder; 150 OwnPtr<DummyPageHolder> m_dummyPageHolder;
102 OwnPtr<HTMLPreloadScanner> m_scanner; 151 OwnPtr<HTMLPreloadScanner> m_scanner;
152 MockPreconnecter* m_preconnecter;
103 }; 153 };
104 154
105 TEST_F(HTMLPreloadScannerTest, testImages) 155 TEST_F(HTMLPreloadScannerTest, testImages)
106 { 156 {
107 TestCase testCases[] = { 157 TestCase testCases[] = {
108 {"http://example.test", "<img src='bla.gif'>", "bla.gif", "http://exampl e.test/", Resource::Image, 0}, 158 {"http://example.test", "<img src='bla.gif'>", "bla.gif", "http://exampl e.test/", Resource::Image, 0},
109 {"http://example.test", "<img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test/", Resource::Image, 0}, 159 {"http://example.test", "<img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test/", Resource::Image, 0},
110 {"http://example.test", "<img sizes='50vw' src='bla.gif'>", "bla.gif", " http://example.test/", Resource::Image, 0}, 160 {"http://example.test", "<img sizes='50vw' src='bla.gif'>", "bla.gif", " http://example.test/", Resource::Image, 0},
111 {"http://example.test", "<img sizes='50vw' src='bla.gif' srcset='bla2.gi f 1x'>", "bla2.gif", "http://example.test/", Resource::Image, 0}, 161 {"http://example.test", "<img sizes='50vw' src='bla.gif' srcset='bla2.gi f 1x'>", "bla2.gif", "http://example.test/", Resource::Image, 0},
112 {"http://example.test", "<img sizes='50vw' src='bla.gif' srcset='bla2.gi f 0.5x'>", "bla.gif", "http://example.test/", Resource::Image, 0}, 162 {"http://example.test", "<img sizes='50vw' src='bla.gif' srcset='bla2.gi f 0.5x'>", "bla.gif", "http://example.test/", Resource::Image, 0},
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 {"http://example.test", "<meta http-equiv='accept-ch' content='bla,dpr \ t'><img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example. test/", Resource::Image, 0, dpr}, 247 {"http://example.test", "<meta http-equiv='accept-ch' content='bla,dpr \ t'><img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example. test/", Resource::Image, 0, dpr},
198 {"http://example.test", "<meta http-equiv='accept-ch' content=' rw '>< img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test /", Resource::Image, 0, rw}, 248 {"http://example.test", "<meta http-equiv='accept-ch' content=' rw '>< img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test /", Resource::Image, 0, rw},
199 {"http://example.test", "<meta http-equiv='accept-ch' content=' rw , w utever'><img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://exa mple.test/", Resource::Image, 0, rw}, 249 {"http://example.test", "<meta http-equiv='accept-ch' content=' rw , w utever'><img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://exa mple.test/", Resource::Image, 0, rw},
200 {"http://example.test", "<meta http-equiv='accept-ch' content=' rw , w utever, dpr \t'><img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "ht tp://example.test/", Resource::Image, 0, dprAndRw}, 250 {"http://example.test", "<meta http-equiv='accept-ch' content=' rw , w utever, dpr \t'><img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "ht tp://example.test/", Resource::Image, 0, dprAndRw},
201 }; 251 };
202 252
203 for (auto testCase : testCases) 253 for (auto testCase : testCases)
204 test(testCase); 254 test(testCase);
205 } 255 }
206 256
257 TEST_F(HTMLPreloadScannerTest, testPreconnect)
258 {
259 PreconnectTestCase testCases[] = {
260 {"http://example.test", "<link rel=preconnect href=http://example2.test> ", "http://example2.test/", CrossOriginAttributeNotSet},
261 {"http://example.test", "<link rel=preconnect href=http://example2.test crossorigin=anonymous>", "http://example2.test/", CrossOriginAttributeNotSet},
262 {"http://example.test", "<link rel=preconnect href=http://example2.test crossorigin='use-credentials'>", "http://example2.test/", CrossOriginAttributeNo tSet},
263 {"http://example.test", "<link rel=preconnected href=http://example2.tes t crossorigin='use-credentials'>", "", CrossOriginAttributeNotSet},
Mike West 2015/06/02 11:18:34 Is it intentional that the `crossorigin` attribute
264 };
265
266 for (auto testCase : testCases)
Mike West 2015/06/02 11:18:34 Nit: `const auto&`
267 test(testCase);
268 }
269
207 } 270 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698