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

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

Issue 1135203002: Add <link rel=preconnect> crossorigin attribute (take 2) (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Todo Created 5 years, 7 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
« no previous file with comments | « Source/core/loader/LinkHeaderTest.cpp ('k') | Source/platform/network/NetworkHints.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 19 matching lines...) Expand all
30 */ 30 */
31 31
32 #include "config.h" 32 #include "config.h"
33 #include "core/loader/LinkLoader.h" 33 #include "core/loader/LinkLoader.h"
34 34
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/ResourceFetcher.h" 38 #include "core/fetch/ResourceFetcher.h"
39 #include "core/frame/Settings.h" 39 #include "core/frame/Settings.h"
40 #include "core/html/CrossOriginAttribute.h"
40 #include "core/html/LinkRelAttribute.h" 41 #include "core/html/LinkRelAttribute.h"
41 #include "core/inspector/ConsoleMessage.h" 42 #include "core/inspector/ConsoleMessage.h"
42 #include "core/loader/LinkHeader.h" 43 #include "core/loader/LinkHeader.h"
43 #include "core/loader/PrerenderHandle.h" 44 #include "core/loader/PrerenderHandle.h"
44 #include "platform/Prerender.h" 45 #include "platform/Prerender.h"
45 #include "platform/RuntimeEnabledFeatures.h" 46 #include "platform/RuntimeEnabledFeatures.h"
46 #include "platform/network/NetworkHints.h" 47 #include "platform/network/NetworkHints.h"
47 #include "public/platform/WebPrerender.h" 48 #include "public/platform/WebPrerender.h"
48 49
49 namespace blink { 50 namespace blink {
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 // FIXME: The href attribute of the link element can be in "//hostname" form, and we shouldn't attempt 122 // FIXME: The href attribute of the link element can be in "//hostname" form, and we shouldn't attempt
122 // to complete that as URL <https://bugs.webkit.org/show_bug.cgi?id=4885 7>. 123 // to complete that as URL <https://bugs.webkit.org/show_bug.cgi?id=4885 7>.
123 if (settings && settings->dnsPrefetchingEnabled() && href.isValid() && ! href.isEmpty()) { 124 if (settings && settings->dnsPrefetchingEnabled() && href.isValid() && ! href.isEmpty()) {
124 if (settings->logDnsPrefetchAndPreconnect()) 125 if (settings->logDnsPrefetchAndPreconnect())
125 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSo urce, DebugMessageLevel, String("DNS prefetch triggered for " + href.host()))); 126 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSo urce, DebugMessageLevel, String("DNS prefetch triggered for " + href.host())));
126 prefetchDNS(href.host()); 127 prefetchDNS(href.host());
127 } 128 }
128 } 129 }
129 } 130 }
130 131
131 static void preconnectIfNeeded(const LinkRelAttribute& relAttribute, const KURL& href, Document& document) 132 static void preconnectIfNeeded(const LinkRelAttribute& relAttribute, const KURL& href, Document& document, const CrossOriginAttributeValue crossOrigin)
132 { 133 {
133 if (relAttribute.isPreconnect() && href.isValid()) { 134 if (relAttribute.isPreconnect() && href.isValid()) {
134 ASSERT(RuntimeEnabledFeatures::linkPreconnectEnabled()); 135 ASSERT(RuntimeEnabledFeatures::linkPreconnectEnabled());
135 Settings* settings = document.settings(); 136 Settings* settings = document.settings();
136 if (settings && settings->logDnsPrefetchAndPreconnect()) 137 if (settings && settings->logDnsPrefetchAndPreconnect()) {
137 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSource , DebugMessageLevel, String("Preconnect triggered for " + href.host()))); 138 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSource , DebugMessageLevel, String("Preconnect triggered for " + href.host())));
138 preconnect(href); 139 if (crossOrigin != CrossOriginAttributeNotSet) {
140 document.addConsoleMessage(ConsoleMessage::create(OtherMessageSo urce, DebugMessageLevel,
141 String("Preconnect CORS setting is ") + String((crossOrigin == CrossOriginAttributeAnonymous) ? "anonymous" : "use-credentials")));
142 }
143 }
144 preconnect(href, crossOrigin);
139 } 145 }
140 } 146 }
141 147
142 // TODO(yoav): Replace Resource:Type here with some way that conveys priority bu t not context. 148 // TODO(yoav): Replace Resource:Type here with some way that conveys priority bu t not context.
143 static bool getTypeFromAsAttribute(const String& as, Resource::Type& type) 149 static bool getTypeFromAsAttribute(const String& as, Resource::Type& type)
144 { 150 {
145 if (as.isEmpty()) 151 if (as.isEmpty())
146 return false; 152 return false;
147 // TODO(yoav): Return false also when the `as` value is not a valid one. 153 // TODO(yoav): Return false also when the `as` value is not a valid one.
148 // TODO(yoav): Add actual types here and make sure priorities work according ly. 154 // TODO(yoav): Add actual types here and make sure priorities work according ly.
(...skipping 29 matching lines...) Expand all
178 LinkHeaderSet headerSet(headerValue); 184 LinkHeaderSet headerSet(headerValue);
179 for (auto& header : headerSet) { 185 for (auto& header : headerSet) {
180 if (!header.valid() || header.url().isEmpty() || header.rel().isEmpty()) 186 if (!header.valid() || header.url().isEmpty() || header.rel().isEmpty())
181 return false; 187 return false;
182 LinkRelAttribute relAttribute(header.rel()); 188 LinkRelAttribute relAttribute(header.rel());
183 KURL url = document->completeURL(header.url()); 189 KURL url = document->completeURL(header.url());
184 if (RuntimeEnabledFeatures::linkHeaderEnabled()) 190 if (RuntimeEnabledFeatures::linkHeaderEnabled())
185 dnsPrefetchIfNeeded(relAttribute, url, *document); 191 dnsPrefetchIfNeeded(relAttribute, url, *document);
186 192
187 if (RuntimeEnabledFeatures::linkPreconnectEnabled()) 193 if (RuntimeEnabledFeatures::linkPreconnectEnabled())
188 preconnectIfNeeded(relAttribute, url, *document); 194 preconnectIfNeeded(relAttribute, url, *document, header.crossOrigin( ));
189 195
190 // FIXME: Add more supported headers as needed. 196 // FIXME: Add more supported headers as needed.
191 } 197 }
192 return true; 198 return true;
193 } 199 }
194 200
195 bool LinkLoader::loadLink(const LinkRelAttribute& relAttribute, const AtomicStri ng& crossOriginMode, const String& type, const String& as, const KURL& href, Doc ument& document) 201 bool LinkLoader::loadLink(const LinkRelAttribute& relAttribute, const AtomicStri ng& crossOriginMode, const String& type, const String& as, const KURL& href, Doc ument& document)
196 { 202 {
203 // TODO(yoav): Convert all uses of the CrossOriginAttribute to CrossOriginAt tributeValue. crbug.com/486689
197 // FIXME(crbug.com/463266): We're ignoring type here. Maybe we shouldn't. 204 // FIXME(crbug.com/463266): We're ignoring type here. Maybe we shouldn't.
198 dnsPrefetchIfNeeded(relAttribute, href, document); 205 dnsPrefetchIfNeeded(relAttribute, href, document);
199 206
200 preconnectIfNeeded(relAttribute, href, document); 207 preconnectIfNeeded(relAttribute, href, document, crossOriginAttributeValue(c rossOriginMode));
201 208
202 preloadIfNeeded(relAttribute, href, document, as); 209 preloadIfNeeded(relAttribute, href, document, as);
203 210
204 // FIXME(crbug.com/323096): Should take care of import. 211 // FIXME(crbug.com/323096): Should take care of import.
205 if ((relAttribute.isLinkPrefetch() || relAttribute.isLinkSubresource() || re lAttribute.isTransitionExitingStylesheet()) && href.isValid() && document.frame( )) { 212 if ((relAttribute.isLinkPrefetch() || relAttribute.isLinkSubresource() || re lAttribute.isTransitionExitingStylesheet()) && href.isValid() && document.frame( )) {
206 if (!m_client->shouldLoadLink()) 213 if (!m_client->shouldLoadLink())
207 return false; 214 return false;
208 Resource::Type type = relAttribute.isLinkSubresource() ? Resource::Link Subresource : Resource::LinkPrefetch; 215 Resource::Type type = relAttribute.isLinkSubresource() ? Resource::Link Subresource : Resource::LinkPrefetch;
209 FetchRequest linkRequest(ResourceRequest(document.completeURL(href)), Fe tchInitiatorTypeNames::link); 216 FetchRequest linkRequest(ResourceRequest(document.completeURL(href)), Fe tchInitiatorTypeNames::link);
210 if (!crossOriginMode.isNull()) 217 if (!crossOriginMode.isNull())
(...skipping 25 matching lines...) Expand all
236 m_prerender.clear(); 243 m_prerender.clear();
237 } 244 }
238 } 245 }
239 246
240 DEFINE_TRACE(LinkLoader) 247 DEFINE_TRACE(LinkLoader)
241 { 248 {
242 visitor->trace(m_prerender); 249 visitor->trace(m_prerender);
243 } 250 }
244 251
245 } 252 }
OLDNEW
« no previous file with comments | « Source/core/loader/LinkHeaderTest.cpp ('k') | Source/platform/network/NetworkHints.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698