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

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

Issue 1987413002: Add link preload as=document support Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: crash fix Created 4 years, 3 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 /* 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 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 } else if (as == "script") { 179 } else if (as == "script") {
180 type = Resource::Script; 180 type = Resource::Script;
181 } else if (as == "style") { 181 } else if (as == "style") {
182 type = Resource::CSSStyleSheet; 182 type = Resource::CSSStyleSheet;
183 } else if (as == "media") { 183 } else if (as == "media") {
184 type = Resource::Media; 184 type = Resource::Media;
185 } else if (as == "font") { 185 } else if (as == "font") {
186 type = Resource::Font; 186 type = Resource::Font;
187 } else if (as == "track") { 187 } else if (as == "track") {
188 type = Resource::TextTrack; 188 type = Resource::TextTrack;
189 } else if (as == "document") {
190 type = Resource::MainResource;
189 } else { 191 } else {
190 type = Resource::Raw; 192 type = Resource::Raw;
191 if (!as.isEmpty()) 193 if (!as.isEmpty())
192 return false; 194 return false;
193 } 195 }
194 return true; 196 return true;
195 } 197 }
196 198
197 void LinkLoader::createLinkPreloadResourceClient(Resource* resource) 199 void LinkLoader::createLinkPreloadResourceClient(Resource* resource)
198 { 200 {
199 if (!resource) 201 if (!resource)
200 return; 202 return;
201 switch (resource->getType()) { 203 switch (resource->getType()) {
202 case Resource::Image: 204 case Resource::Image:
203 m_linkPreloadResourceClient = LinkPreloadImageResourceClient::create(thi s, toImageResource(resource)); 205 m_linkPreloadResourceClient = LinkPreloadImageResourceClient::create(thi s, toImageResource(resource));
204 break; 206 break;
205 case Resource::Script: 207 case Resource::Script:
206 m_linkPreloadResourceClient = LinkPreloadScriptResourceClient::create(th is, toScriptResource(resource)); 208 m_linkPreloadResourceClient = LinkPreloadScriptResourceClient::create(th is, toScriptResource(resource));
207 break; 209 break;
208 case Resource::CSSStyleSheet: 210 case Resource::CSSStyleSheet:
209 m_linkPreloadResourceClient = LinkPreloadStyleResourceClient::create(thi s, toCSSStyleSheetResource(resource)); 211 m_linkPreloadResourceClient = LinkPreloadStyleResourceClient::create(thi s, toCSSStyleSheetResource(resource));
210 break; 212 break;
211 case Resource::Font: 213 case Resource::Font:
212 m_linkPreloadResourceClient = LinkPreloadFontResourceClient::create(this , toFontResource(resource)); 214 m_linkPreloadResourceClient = LinkPreloadFontResourceClient::create(this , toFontResource(resource));
213 break; 215 break;
216 case Resource::MainResource:
217 m_linkPreloadResourceClient = LinkPreloadRawResourceClient::create(this, toRawResource(resource));
218 break;
214 case Resource::Media: 219 case Resource::Media:
215 case Resource::TextTrack: 220 case Resource::TextTrack:
216 case Resource::Raw: 221 case Resource::Raw:
217 m_linkPreloadResourceClient = LinkPreloadRawResourceClient::create(this, toRawResource(resource)); 222 m_linkPreloadResourceClient = LinkPreloadRawResourceClient::create(this, toRawResource(resource));
218 break; 223 break;
219 default: 224 default:
220 ASSERT_NOT_REACHED(); 225 ASSERT_NOT_REACHED();
221 } 226 }
222 } 227 }
223 228
224 static bool isSupportedType(Resource::Type resourceType, const String& mimeType) 229 static bool isSupportedType(Resource::Type resourceType, const String& mimeType)
225 { 230 {
226 if (mimeType.isEmpty()) 231 if (mimeType.isEmpty())
227 return true; 232 return true;
228 switch (resourceType) { 233 switch (resourceType) {
229 case Resource::Image: 234 case Resource::Image:
230 return MIMETypeRegistry::isSupportedImagePrefixedMIMEType(mimeType); 235 return MIMETypeRegistry::isSupportedImagePrefixedMIMEType(mimeType);
231 case Resource::Script: 236 case Resource::Script:
232 return MIMETypeRegistry::isSupportedJavaScriptMIMEType(mimeType); 237 return MIMETypeRegistry::isSupportedJavaScriptMIMEType(mimeType);
233 case Resource::CSSStyleSheet: 238 case Resource::CSSStyleSheet:
234 return MIMETypeRegistry::isSupportedStyleSheetMIMEType(mimeType); 239 return MIMETypeRegistry::isSupportedStyleSheetMIMEType(mimeType);
235 case Resource::Font: 240 case Resource::Font:
236 return MIMETypeRegistry::isSupportedFontMIMEType(mimeType); 241 return MIMETypeRegistry::isSupportedFontMIMEType(mimeType);
237 case Resource::Media: 242 case Resource::Media:
238 return MIMETypeRegistry::isSupportedMediaSourceMIMEType(mimeType, String ()); 243 return MIMETypeRegistry::isSupportedMediaSourceMIMEType(mimeType, String ());
239 case Resource::TextTrack: 244 case Resource::TextTrack:
240 return MIMETypeRegistry::isSupportedTextTrackMIMEType(mimeType); 245 return MIMETypeRegistry::isSupportedTextTrackMIMEType(mimeType);
241 case Resource::Raw: 246 case Resource::Raw:
247 case Resource::MainResource:
242 return true; 248 return true;
243 default: 249 default:
244 ASSERT_NOT_REACHED(); 250 ASSERT_NOT_REACHED();
245 } 251 }
246 return false; 252 return false;
247 } 253 }
248 254
249 static Resource* preloadIfNeeded(const LinkRelAttribute& relAttribute, const KUR L& href, Document& document, const String& as, const String& mimeType, 255 static Resource* preloadIfNeeded(const LinkRelAttribute& relAttribute, const KUR L& href, Document& document, const String& as, const String& mimeType,
250 const String& media, CrossOriginAttributeValue crossOrigin, LinkCaller calle r, bool& errorOccurred, ViewportDescription* viewportDescription) 256 const String& media, CrossOriginAttributeValue crossOrigin, LinkCaller calle r, bool& errorOccurred, ViewportDescription* viewportDescription)
251 { 257 {
(...skipping 24 matching lines...) Expand all
276 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSource, Wa rningMessageLevel, String("<link rel=preload> must have a valid `as` value"))); 282 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSource, Wa rningMessageLevel, String("<link rel=preload> must have a valid `as` value")));
277 errorOccurred = true; 283 errorOccurred = true;
278 return nullptr; 284 return nullptr;
279 } 285 }
280 286
281 if (!isSupportedType(resourceType, mimeType)) { 287 if (!isSupportedType(resourceType, mimeType)) {
282 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSource, Wa rningMessageLevel, String("<link rel=preload> has an unsupported `type` value")) ); 288 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSource, Wa rningMessageLevel, String("<link rel=preload> has an unsupported `type` value")) );
283 return nullptr; 289 return nullptr;
284 } 290 }
285 ResourceRequest resourceRequest(document.completeURL(href)); 291 ResourceRequest resourceRequest(document.completeURL(href));
292 if (resourceType == Resource::MainResource)
293 resourceRequest.setFrameType(WebURLRequest::FrameTypePreload);
286 ResourceFetcher::determineRequestContext(resourceRequest, resourceType, fals e); 294 ResourceFetcher::determineRequestContext(resourceRequest, resourceType, fals e);
287 FetchRequest linkRequest(resourceRequest, FetchInitiatorTypeNames::link, doc ument.encodingName()); 295 FetchRequest linkRequest(resourceRequest, FetchInitiatorTypeNames::link, doc ument.encodingName());
288 296
289 if (crossOrigin != CrossOriginAttributeNotSet) 297 if (crossOrigin != CrossOriginAttributeNotSet)
290 linkRequest.setCrossOriginAccessControl(document.getSecurityOrigin(), cr ossOrigin); 298 linkRequest.setCrossOriginAccessControl(document.getSecurityOrigin(), cr ossOrigin);
291 Settings* settings = document.settings(); 299 Settings* settings = document.settings();
292 if (settings && settings->logPreload()) 300 if (settings && settings->logPreload())
293 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSource, De bugMessageLevel, String("Preload triggered for " + href.host() + href.path()))); 301 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSource, De bugMessageLevel, String("Preload triggered for " + href.host() + href.path())));
294 linkRequest.setForPreload(true, monotonicallyIncreasingTime()); 302 linkRequest.setForPreload(true, monotonicallyIncreasingTime());
295 linkRequest.setLinkPreload(true); 303 linkRequest.setLinkPreload(true);
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 DEFINE_TRACE(LinkLoader) 400 DEFINE_TRACE(LinkLoader)
393 { 401 {
394 visitor->trace(m_client); 402 visitor->trace(m_client);
395 visitor->trace(m_prerender); 403 visitor->trace(m_prerender);
396 visitor->trace(m_linkPreloadResourceClient); 404 visitor->trace(m_linkPreloadResourceClient);
397 ResourceOwner<Resource, ResourceClient>::trace(visitor); 405 ResourceOwner<Resource, ResourceClient>::trace(visitor);
398 PrerenderClient::trace(visitor); 406 PrerenderClient::trace(visitor);
399 } 407 }
400 408
401 } // namespace blink 409 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/loader/FrameFetchContext.cpp ('k') | third_party/WebKit/Source/core/loader/LinkLoaderTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698