TEST_F(HTMLPreloadScannerTest, testMetaAcceptCH) { ClientHintsPreferences dpr; ClientHintsPreferences resourceWidth; ClientHintsPreferences all; ClientHintsPreferences viewportWidth; dpr.setShouldSendDPR(true); all.setShouldSendDPR(true); resourceWidth.setShouldSendResourceWidth(true); all.setShouldSendResourceWidth(true); viewportWidth.setShouldSendViewportWidth(true); all.setShouldSendViewportWidth(true); TestCase testCases[] = { {"http://example.test", "<meta http-equiv='accept-ch' content='bla'><img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test/", Resource::Image, 0}, {"http://example.test", "<meta http-equiv='accept-ch' content='dprw'><img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test/", Resource::Image, 0}, {"http://example.test", "<meta http-equiv='accept-ch'><img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test/", Resource::Image, 0}, {"http://example.test", "<meta http-equiv='accept-ch' content='dpr \t'><img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test/", Resource::Image, 0, dpr}, {"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}, {"http://example.test", "<meta http-equiv='accept-ch' content=' width '><img sizes='100vw' srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test/", Resource::Image, 500, resourceWidth}, {"http://example.test", "<meta http-equiv='accept-ch' content=' width , wutever'><img sizes='300px' srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test/", Resource::Image, 300, resourceWidth}, {"http://example.test", "<meta http-equiv='accept-ch' content=' viewport-width '><img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test/", Resource::Image, 0, viewportWidth}, {"http://example.test", "<meta http-equiv='accept-ch' content=' viewport-width , wutever'><img srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test/", Resource::Image, 0, viewportWidth}, {"http://example.test", "<meta http-equiv='accept-ch' content=' viewport-width ,width, wutever, dpr \t'><img sizes='90vw' srcset='bla.gif 320w, blabla.gif 640w'>", "blabla.gif", "http://example.test/", Resource::Image, 450, all}, }; for (const auto& testCase : testCases) { runSetUp(ViewportDisabled); test(testCase); } }
TEST_F(FrameFetchContextHintsTest, MonitorDPRHints) { expectHeader("http://www.example.com/1.gif", "DPR", false, ""); ClientHintsPreferences preferences; preferences.setShouldSendDPR(true); document->setClientHintsPreferences(preferences); expectHeader("http://www.example.com/1.gif", "DPR", true, "1"); dummyPageHolder->page().setDeviceScaleFactor(2.5); expectHeader("http://www.example.com/1.gif", "DPR", true, "2.5"); expectHeader("http://www.example.com/1.gif", "RW", false, ""); }
void handleAcceptClientHintsHeader(const String& headerValue, ClientHintsPreferences& preferences) { if (RuntimeEnabledFeatures::clientHintsEnabled()) { CommaDelimitedHeaderSet acceptCH; parseCommaDelimitedHeader(headerValue, acceptCH); if (acceptCH.contains("dpr")) preferences.setShouldSendDPR(true); if (acceptCH.contains("rw")) preferences.setShouldSendRW(true); } }
TEST_F(FrameFetchContextHintsTest, MonitorBothHints) { expectHeader("http://www.example.com/1.gif", "DPR", false, ""); expectHeader("http://www.example.com/1.gif", "RW", false, ""); ClientHintsPreferences preferences; preferences.setShouldSendDPR(true); preferences.setShouldSendRW(true); document->setClientHintsPreferences(preferences); expectHeader("http://www.example.com/1.gif", "DPR", true, "1"); expectHeader("http://www.example.com/1.gif", "RW", true, "500"); }
TEST_F(FrameFetchContextHintsTest, MonitorAllHints) { expectHeader("http://www.example.com/1.gif", "DPR", false, ""); expectHeader("http://www.example.com/1.gif", "Viewport-Width", false, ""); expectHeader("http://www.example.com/1.gif", "Width", false, ""); ClientHintsPreferences preferences; preferences.setShouldSendDPR(true); preferences.setShouldSendResourceWidth(true); preferences.setShouldSendViewportWidth(true); document->clientHintsPreferences().updateFrom(preferences); expectHeader("http://www.example.com/1.gif", "DPR", true, "1"); expectHeader("http://www.example.com/1.gif", "Width", true, "400", 400); expectHeader("http://www.example.com/1.gif", "Viewport-Width", true, "500"); }