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

Unified Diff: third_party/WebKit/Source/core/loader/LinkLoader.cpp

Issue 2844913002: Drop GetFrame()->GetDocument() usage in FrameFetchContext (Closed)
Patch Set: Add comment in SendMessageToConsoleForPossiblyNullDocument Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/core/loader/LinkLoader.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/loader/LinkLoader.cpp
diff --git a/third_party/WebKit/Source/core/loader/LinkLoader.cpp b/third_party/WebKit/Source/core/loader/LinkLoader.cpp
index 867e8fae1f1392bfb7259471d58ed4c4887da3e7..6147ac524a572790bf718d56fa4b6d420a2fee3c 100644
--- a/third_party/WebKit/Source/core/loader/LinkLoader.cpp
+++ b/third_party/WebKit/Source/core/loader/LinkLoader.cpp
@@ -34,6 +34,8 @@
#include "core/css/MediaList.h"
#include "core/css/MediaQueryEvaluator.h"
#include "core/dom/Document.h"
+#include "core/frame/FrameConsole.h"
+#include "core/frame/LocalFrame.h"
#include "core/frame/Settings.h"
#include "core/frame/UseCounter.h"
#include "core/html/CrossOriginAttribute.h"
@@ -128,26 +130,44 @@ enum LinkCaller {
kLinkCalledFromMarkup,
};
+static void SendMessageToConsoleForPossiblyNullDocument(
+ ConsoleMessage* console_message,
+ Document* document,
+ LocalFrame* frame) {
+ DCHECK(document || frame);
+ DCHECK(!document || document->GetFrame() == frame);
+ // Route the console message through Document if possible, so that script line
+ // numbers can be included. Otherwise, route directly to the FrameConsole, to
+ // ensure we never drop a message.
+ if (document)
+ document->AddConsoleMessage(console_message);
+ else
+ frame->Console().AddMessage(console_message);
+}
+
static void DnsPrefetchIfNeeded(
const LinkRelAttribute& rel_attribute,
const KURL& href,
- Document& document,
+ Document* document,
+ LocalFrame* frame,
const NetworkHintsInterface& network_hints_interface,
LinkCaller caller) {
if (rel_attribute.IsDNSPrefetch()) {
- UseCounter::Count(document, UseCounter::kLinkRelDnsPrefetch);
+ UseCounter::Count(frame, UseCounter::kLinkRelDnsPrefetch);
if (caller == kLinkCalledFromHeader)
- UseCounter::Count(document, UseCounter::kLinkHeaderDnsPrefetch);
- Settings* settings = document.GetSettings();
+ UseCounter::Count(frame, UseCounter::kLinkHeaderDnsPrefetch);
+ Settings* settings = frame ? frame->GetSettings() : nullptr;
// FIXME: The href attribute of the link element can be in "//hostname"
// form, and we shouldn't attempt to complete that as URL
// <https://bugs.webkit.org/show_bug.cgi?id=48857>.
if (settings && settings->GetDNSPrefetchingEnabled() && href.IsValid() &&
!href.IsEmpty()) {
if (settings->GetLogDnsPrefetchAndPreconnect()) {
- document.AddConsoleMessage(ConsoleMessage::Create(
- kOtherMessageSource, kVerboseMessageLevel,
- String("DNS prefetch triggered for " + href.Host())));
+ SendMessageToConsoleForPossiblyNullDocument(
+ ConsoleMessage::Create(
+ kOtherMessageSource, kVerboseMessageLevel,
+ String("DNS prefetch triggered for " + href.Host())),
+ document, frame);
}
network_hints_interface.DnsPrefetchHost(href.Host());
}
@@ -157,27 +177,32 @@ static void DnsPrefetchIfNeeded(
static void PreconnectIfNeeded(
const LinkRelAttribute& rel_attribute,
const KURL& href,
- Document& document,
+ Document* document,
+ LocalFrame* frame,
const CrossOriginAttributeValue cross_origin,
const NetworkHintsInterface& network_hints_interface,
LinkCaller caller) {
if (rel_attribute.IsPreconnect() && href.IsValid() &&
href.ProtocolIsInHTTPFamily()) {
- UseCounter::Count(document, UseCounter::kLinkRelPreconnect);
+ UseCounter::Count(frame, UseCounter::kLinkRelPreconnect);
if (caller == kLinkCalledFromHeader)
- UseCounter::Count(document, UseCounter::kLinkHeaderPreconnect);
- Settings* settings = document.GetSettings();
+ UseCounter::Count(frame, UseCounter::kLinkHeaderPreconnect);
+ Settings* settings = frame ? frame->GetSettings() : nullptr;
if (settings && settings->GetLogDnsPrefetchAndPreconnect()) {
- document.AddConsoleMessage(ConsoleMessage::Create(
- kOtherMessageSource, kVerboseMessageLevel,
- String("Preconnect triggered for ") + href.GetString()));
+ SendMessageToConsoleForPossiblyNullDocument(
+ ConsoleMessage::Create(
+ kOtherMessageSource, kVerboseMessageLevel,
+ String("Preconnect triggered for ") + href.GetString()),
+ document, frame);
if (cross_origin != kCrossOriginAttributeNotSet) {
- document.AddConsoleMessage(ConsoleMessage::Create(
- kOtherMessageSource, kVerboseMessageLevel,
- String("Preconnect CORS setting is ") +
- String((cross_origin == kCrossOriginAttributeAnonymous)
- ? "anonymous"
- : "use-credentials")));
+ SendMessageToConsoleForPossiblyNullDocument(
+ ConsoleMessage::Create(
+ kOtherMessageSource, kVerboseMessageLevel,
+ String("Preconnect CORS setting is ") +
+ String((cross_origin == kCrossOriginAttributeAnonymous)
+ ? "anonymous"
+ : "use-credentials")),
+ document, frame);
}
}
network_hints_interface.PreconnectHost(href, cross_origin);
@@ -380,12 +405,13 @@ static Resource* PrefetchIfNeeded(Document& document,
void LinkLoader::LoadLinksFromHeader(
const String& header_value,
const KURL& base_url,
+ LocalFrame& frame,
Document* document,
const NetworkHintsInterface& network_hints_interface,
CanLoadResources can_load_resources,
MediaPreloadPolicy media_policy,
ViewportDescriptionWrapper* viewport_description_wrapper) {
- if (!document || header_value.IsEmpty())
+ if (header_value.IsEmpty())
return;
LinkHeaderSet header_set(header_value);
for (auto& header : header_set) {
@@ -403,14 +429,15 @@ void LinkLoader::LoadLinksFromHeader(
if (url == base_url)
continue;
if (can_load_resources != kOnlyLoadResources) {
- DnsPrefetchIfNeeded(rel_attribute, url, *document,
+ DnsPrefetchIfNeeded(rel_attribute, url, document, &frame,
network_hints_interface, kLinkCalledFromHeader);
- PreconnectIfNeeded(rel_attribute, url, *document,
+ PreconnectIfNeeded(rel_attribute, url, document, &frame,
GetCrossOriginAttributeValue(header.CrossOrigin()),
network_hints_interface, kLinkCalledFromHeader);
}
if (can_load_resources != kDoNotLoadResources) {
+ DCHECK(document);
bool error_occurred = false;
ViewportDescription* viewport_description =
(viewport_description_wrapper && viewport_description_wrapper->set)
@@ -427,7 +454,7 @@ void LinkLoader::LoadLinksFromHeader(
kReferrerPolicyDefault);
}
if (rel_attribute.IsServiceWorker()) {
- UseCounter::Count(*document, UseCounter::kLinkHeaderServiceWorker);
+ UseCounter::Count(&frame, UseCounter::kLinkHeaderServiceWorker);
}
// TODO(yoav): Add more supported headers as needed.
}
@@ -446,11 +473,12 @@ bool LinkLoader::LoadLink(
if (!client_->ShouldLoadLink())
return false;
- DnsPrefetchIfNeeded(rel_attribute, href, document, network_hints_interface,
- kLinkCalledFromMarkup);
+ DnsPrefetchIfNeeded(rel_attribute, href, &document, document.GetFrame(),
+ network_hints_interface, kLinkCalledFromMarkup);
- PreconnectIfNeeded(rel_attribute, href, document, cross_origin,
- network_hints_interface, kLinkCalledFromMarkup);
+ PreconnectIfNeeded(rel_attribute, href, &document, document.GetFrame(),
+ cross_origin, network_hints_interface,
+ kLinkCalledFromMarkup);
bool error_occurred = false;
CreateLinkPreloadResourceClient(PreloadIfNeeded(
« no previous file with comments | « third_party/WebKit/Source/core/loader/LinkLoader.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698