Commit 590a8d43 authored by Nate Chapin's avatar Nate Chapin Committed by Commit Bot

Set SVGExternalDocumentCache::Entry::document_ eagerly in NotifyFinished()

Currently, we lazily initialize document the first time it is requested
*and* all of the data is loaded (https://crbug.com/1107442 fixed a case
where we would incorrectly initialize the document by creating it before
all of the data had been received).

It's much clearer to just initialize the document when all of the data
is received, and have GetDocument() be a simple getter.

Change-Id: I830dca5cc953ca8467fd936f5c783db21cfce051
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2316415
Commit-Queue: Nate Chapin <japhet@chromium.org>
Reviewed-by: default avatarFredrik Söderquist <fs@opera.com>
Reviewed-by: default avatarKouhei Ueno <kouhei@chromium.org>
Cr-Commit-Position: refs/heads/master@{#804325}
parent f36abfa4
......@@ -58,23 +58,22 @@ void SVGExternalDocumentCache::Entry::AddClient(Client* client) {
void SVGExternalDocumentCache::Entry::NotifyFinished(Resource* resource) {
DCHECK_EQ(GetResource(), resource);
for (auto client : clients_) {
if (client)
client->NotifyFinished(GetDocument());
}
}
DCHECK(!document_);
Document* SVGExternalDocumentCache::Entry::GetDocument() {
const TextResource* resource = To<TextResource>(GetResource());
if (!document_ && resource->IsLoaded() && resource->HasData() &&
MimeTypeAllowed(resource->GetResponse())) {
const TextResource* text_resource = To<TextResource>(resource);
if (text_resource->HasData() &&
MimeTypeAllowed(text_resource->GetResponse())) {
document_ = XMLDocument::CreateSVG(
DocumentInit::Create()
.WithURL(resource->GetResponse().CurrentRequestUrl())
.WithURL(text_resource->GetResponse().CurrentRequestUrl())
.WithExecutionContext(context_.Get()));
document_->SetContent(resource->DecodedText());
document_->SetContent(text_resource->DecodedText());
}
for (auto client : clients_) {
if (client)
client->NotifyFinished(GetDocument());
}
return document_.Get();
clients_.clear();
}
void SVGExternalDocumentCache::Entry::Trace(Visitor* visitor) const {
......
......@@ -54,7 +54,7 @@ class CORE_EXPORT SVGExternalDocumentCache
explicit Entry(ExecutionContext* context) : context_(context) {}
~Entry() override = default;
void Trace(Visitor*) const override;
Document* GetDocument();
Document* GetDocument() { return document_.Get(); }
const KURL& Url() const { return GetResource()->Url(); }
private:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment