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

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

Issue 1416673008: Converge <link rel=preload> loading logic with preloadScanner (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review comments Created 5 years, 1 month 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 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 24 matching lines...) Expand all
35 #include "core/dom/Document.h" 35 #include "core/dom/Document.h"
36 #include "core/fetch/FetchInitiatorTypeNames.h" 36 #include "core/fetch/FetchInitiatorTypeNames.h"
37 #include "core/fetch/FetchRequest.h" 37 #include "core/fetch/FetchRequest.h"
38 #include "core/fetch/LinkFetchResource.h" 38 #include "core/fetch/LinkFetchResource.h"
39 #include "core/fetch/ResourceFetcher.h" 39 #include "core/fetch/ResourceFetcher.h"
40 #include "core/frame/Settings.h" 40 #include "core/frame/Settings.h"
41 #include "core/frame/UseCounter.h" 41 #include "core/frame/UseCounter.h"
42 #include "core/html/CrossOriginAttribute.h" 42 #include "core/html/CrossOriginAttribute.h"
43 #include "core/html/LinkRelAttribute.h" 43 #include "core/html/LinkRelAttribute.h"
44 #include "core/inspector/ConsoleMessage.h" 44 #include "core/inspector/ConsoleMessage.h"
45 #include "core/loader/DocumentLoader.h"
45 #include "core/loader/LinkHeader.h" 46 #include "core/loader/LinkHeader.h"
46 #include "core/loader/NetworkHintsInterface.h" 47 #include "core/loader/NetworkHintsInterface.h"
47 #include "core/loader/PrerenderHandle.h" 48 #include "core/loader/PrerenderHandle.h"
48 #include "platform/Prerender.h" 49 #include "platform/Prerender.h"
49 #include "platform/RuntimeEnabledFeatures.h" 50 #include "platform/RuntimeEnabledFeatures.h"
50 #include "platform/network/NetworkHints.h" 51 #include "platform/network/NetworkHints.h"
51 #include "public/platform/WebPrerender.h" 52 #include "public/platform/WebPrerender.h"
52 53
53 namespace blink { 54 namespace blink {
54 55
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSource , DebugMessageLevel, String("Preconnect triggered for ") + href.string())); 158 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSource , DebugMessageLevel, String("Preconnect triggered for ") + href.string()));
158 if (crossOrigin != CrossOriginAttributeNotSet) { 159 if (crossOrigin != CrossOriginAttributeNotSet) {
159 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSo urce, DebugMessageLevel, 160 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSo urce, DebugMessageLevel,
160 String("Preconnect CORS setting is ") + String((crossOrigin == CrossOriginAttributeAnonymous) ? "anonymous" : "use-credentials"))); 161 String("Preconnect CORS setting is ") + String((crossOrigin == CrossOriginAttributeAnonymous) ? "anonymous" : "use-credentials")));
161 } 162 }
162 } 163 }
163 networkHintsInterface.preconnectHost(href, crossOrigin); 164 networkHintsInterface.preconnectHost(href, crossOrigin);
164 } 165 }
165 } 166 }
166 167
167 static bool getPriorityTypeFromAsAttribute(const String& as, Resource::Type& typ e) 168 static bool getTypeFromAsAttribute(const String& as, Resource::Type& type)
168 { 169 {
169 if (as.isEmpty()) 170 if (as.isEmpty())
170 return false; 171 return false;
171 172
172 if (equalIgnoringCase(as, "image")) 173 if (equalIgnoringCase(as, "image"))
173 type = Resource::Image; 174 type = Resource::Image;
174 else if (equalIgnoringCase(as, "script")) 175 else if (equalIgnoringCase(as, "script"))
175 type = Resource::Script; 176 type = Resource::Script;
176 else if (equalIgnoringCase(as, "stylesheet")) 177 else if (equalIgnoringCase(as, "stylesheet"))
177 type = Resource::CSSStyleSheet; 178 type = Resource::CSSStyleSheet;
178 else 179 else
179 return false; 180 return false;
180 181
181 return true; 182 return true;
182 } 183 }
183 184
184 void LinkLoader::preloadIfNeeded(const LinkRelAttribute& relAttribute, const KUR L& href, Document& document, const String& as) 185 static void preloadIfNeeded(const LinkRelAttribute& relAttribute, const KURL& hr ef, Document& document, const String& as)
185 { 186 {
187 if (!document.loader())
188 return;
189
186 if (relAttribute.isLinkPreload()) { 190 if (relAttribute.isLinkPreload()) {
187 UseCounter::count(document, UseCounter::LinkRelPreload); 191 UseCounter::count(document, UseCounter::LinkRelPreload);
188 ASSERT(RuntimeEnabledFeatures::linkPreloadEnabled()); 192 ASSERT(RuntimeEnabledFeatures::linkPreloadEnabled());
189 if (!href.isValid() || href.isEmpty()) { 193 if (!href.isValid() || href.isEmpty()) {
190 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSource , WarningMessageLevel, String("<link rel=preload> has an invalid `href` value")) ); 194 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSource , WarningMessageLevel, String("<link rel=preload> has an invalid `href` value")) );
191 return; 195 return;
192 } 196 }
193 // TODO(yoav): Figure out a way that 'as' would be used to set request h eaders. 197 // TODO(yoav): Figure out a way that 'as' would be used to set request h eaders.
194 Resource::Type priorityType; 198 Resource::Type type;
195 if (!getPriorityTypeFromAsAttribute(as, priorityType)) { 199 if (!getTypeFromAsAttribute(as, type)) {
196 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSource , WarningMessageLevel, String("<link rel=preload> must have a valid `as` value") )); 200 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSource , WarningMessageLevel, String("<link rel=preload> must have a valid `as` value") ));
197 return; 201 return;
198 } 202 }
199 FetchRequest linkRequest(ResourceRequest(document.completeURL(href)), Fe tchInitiatorTypeNames::link); 203 FetchRequest linkRequest(ResourceRequest(document.completeURL(href)), Fe tchInitiatorTypeNames::link);
200 linkRequest.setPriority(document.fetcher()->loadPriority(priorityType, l inkRequest)); 204 linkRequest.setPriority(document.fetcher()->loadPriority(type, linkReque st));
201 Settings* settings = document.settings(); 205 Settings* settings = document.settings();
202 if (settings && settings->logPreload()) 206 if (settings && settings->logPreload())
203 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSource , DebugMessageLevel, String("Preload triggered for " + href.host() + href.path() ))); 207 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSource , DebugMessageLevel, String("Preload triggered for " + href.host() + href.path() )));
204 setResource(LinkFetchResource::fetch(Resource::LinkPreload, linkRequest, document.fetcher())); 208 document.loader()->startPreload(type, linkRequest);
205 } 209 }
206 } 210 }
207 211
208 bool LinkLoader::loadLinkFromHeader(const String& headerValue, Document* documen t, const NetworkHintsInterface& networkHintsInterface) 212 bool LinkLoader::loadLinkFromHeader(const String& headerValue, Document* documen t, const NetworkHintsInterface& networkHintsInterface)
209 { 213 {
210 if (!document) 214 if (!document)
211 return false; 215 return false;
212 LinkHeaderSet headerSet(headerValue); 216 LinkHeaderSet headerSet(headerValue);
213 for (auto& header : headerSet) { 217 for (auto& header : headerSet) {
214 if (!header.valid() || header.url().isEmpty() || header.rel().isEmpty()) 218 if (!header.valid() || header.url().isEmpty() || header.rel().isEmpty())
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 m_prerender.clear(); 285 m_prerender.clear();
282 } 286 }
283 } 287 }
284 288
285 DEFINE_TRACE(LinkLoader) 289 DEFINE_TRACE(LinkLoader)
286 { 290 {
287 visitor->trace(m_prerender); 291 visitor->trace(m_prerender);
288 } 292 }
289 293
290 } 294 }
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/loader/LinkLoader.h ('k') | third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698