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

Unified Diff: Source/core/html/imports/HTMLImportsController.cpp

Issue 303643005: Straighten up HTML Imports load vs. share loader logic. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/html/imports/HTMLImportsController.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/html/imports/HTMLImportsController.cpp
diff --git a/Source/core/html/imports/HTMLImportsController.cpp b/Source/core/html/imports/HTMLImportsController.cpp
index ba02cacfce5b10c625733344c4c8e696311be27a..551619430e10b831a753606aa879514135bffffe 100644
--- a/Source/core/html/imports/HTMLImportsController.cpp
+++ b/Source/core/html/imports/HTMLImportsController.cpp
@@ -89,13 +89,14 @@ static bool makesCycle(HTMLImport* parent, const KURL& url)
return false;
}
-HTMLImportChild* HTMLImportsController::createChild(const KURL& url, HTMLImport* parent, HTMLImportChildClient* client)
+HTMLImportChild* HTMLImportsController::createChild(const KURL& url, HTMLImportLoader* loader, HTMLImport* parent, HTMLImportChildClient* client)
{
HTMLImport::SyncMode mode = client->isSync() && !makesCycle(parent, url) ? HTMLImport::Sync : HTMLImport::Async;
- OwnPtr<HTMLImportChild> loader = adoptPtr(new HTMLImportChild(url, mode));
- loader->setClient(client);
- parent->appendImport(loader.get());
- m_imports.append(loader.release());
+ OwnPtr<HTMLImportChild> child = adoptPtr(new HTMLImportChild(url, loader, mode));
+ child->setClient(client);
+ parent->appendImport(child.get());
+ loader->addImport(child.get());
+ m_imports.append(child.release());
return m_imports.last().get();
}
@@ -104,9 +105,11 @@ HTMLImportChild* HTMLImportsController::load(HTMLImport* parent, HTMLImportChild
ASSERT(!request.url().isEmpty() && request.url().isValid());
ASSERT(parent == this || toHTMLImportChild(parent)->loader()->isFirstImport(toHTMLImportChild(parent)));
- if (findLinkFor(request.url())) {
- HTMLImportChild* child = createChild(request.url(), parent, client);
- child->wasAlreadyLoaded();
+ if (HTMLImportChild* childToShareWith = findLinkFor(request.url())) {
+ HTMLImportLoader* loader = childToShareWith->loader();
+ ASSERT(loader);
+ HTMLImportChild* child = createChild(request.url(), loader, parent, client);
+ child->didShareLoader();
return child;
}
@@ -118,10 +121,12 @@ HTMLImportChild* HTMLImportsController::load(HTMLImport* parent, HTMLImportChild
if (!resource)
return 0;
- HTMLImportChild* child = createChild(request.url(), parent, client);
+ HTMLImportLoader* loader = createLoader();
+ HTMLImportChild* child = createChild(request.url(), loader, parent, client);
// We set resource after the import tree is built since
// Resource::addClient() immediately calls back to feed the bytes when the resource is cached.
- child->startLoading(resource);
+ loader->startLoading(resource);
+ child->didStartLoading();
return child;
}
@@ -131,11 +136,11 @@ void HTMLImportsController::showSecurityErrorMessage(const String& message)
m_master->addConsoleMessage(JSMessageSource, ErrorMessageLevel, message);
}
-HTMLImportChild* HTMLImportsController::findLinkFor(const KURL& url, HTMLImport* excluding) const
+HTMLImportChild* HTMLImportsController::findLinkFor(const KURL& url) const
{
for (size_t i = 0; i < m_imports.size(); ++i) {
HTMLImportChild* candidate = m_imports[i].get();
- if (candidate != excluding && equalIgnoringFragmentIdentifier(candidate->url(), url) && candidate->loader())
+ if (equalIgnoringFragmentIdentifier(candidate->url(), url) && candidate->loader())
return candidate;
}
« no previous file with comments | « Source/core/html/imports/HTMLImportsController.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698