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

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

Issue 17419007: [HTML Imports] Implement sub-imports processing. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Updated to ToT. Created 7 years, 6 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/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/HTMLImportsController.cpp
diff --git a/Source/core/html/HTMLImportsController.cpp b/Source/core/html/HTMLImportsController.cpp
index f147f4780b2068cf759edf9a48cf24ce9a763b38..f074f714dc8e57047c8e9da23845ecaf839e8fef 100644
--- a/Source/core/html/HTMLImportsController.cpp
+++ b/Source/core/html/HTMLImportsController.cpp
@@ -71,21 +71,30 @@ void LinkImport::process()
return;
// FIXME(morrita): Should take care of sub-imports whose document doesn't have frame.
- if (!m_owner->document()->frame())
+ if (!m_owner->document()->frame() && !m_owner->document()->imports())
return;
LinkRequestBuilder builder(m_owner);
if (!builder.isValid())
return;
- HTMLImportsController* controller = m_owner->document()->ensureImports();
+ HTMLImportsController* controller = m_owner->document()->imports();
+ if (!controller) {
+ ASSERT(m_owner->document()->frame()); // The document should be the master.
+ m_owner->document()->setImports(HTMLImportsController::create(m_owner->document()));
+ controller = m_owner->document()->imports();
+ }
+
if (RefPtr<HTMLImportLoader> found = controller->findLinkFor(builder.url())) {
m_loader = found;
return;
}
CachedResourceRequest request = builder.build(true);
- CachedResourceHandle<CachedScript> resource = m_owner->document()->cachedResourceLoader()->requestScript(request);
+ CachedResourceHandle<CachedScript> resource = controller->cachedResourceLoader()->requestScript(request);
+ if (!resource)
+ return;
+
m_loader = HTMLImportLoader::create(controller, builder.url(), resource);
}
@@ -150,6 +159,7 @@ HTMLImportLoader::State HTMLImportLoader::finish()
// FIXME(morrita): This should be done in incremental way.
m_importedDocument = HTMLDocument::create(0, m_resource->response().url());
+ m_importedDocument->setImports(m_controller);
m_importedDocument->setContent(m_resource->script());
return StateReady;
@@ -169,9 +179,9 @@ void HTMLImportLoader::importDestroyed()
}
-PassOwnPtr<HTMLImportsController> HTMLImportsController::create(Document* master)
+PassRefPtr<HTMLImportsController> HTMLImportsController::create(Document* master)
{
- return adoptPtr(new HTMLImportsController(master));
+ return adoptRef(new HTMLImportsController(master));
}
HTMLImportsController::HTMLImportsController(Document* master)
@@ -205,7 +215,7 @@ void HTMLImportsController::didLoad()
PassRefPtr<HTMLImportLoader> HTMLImportsController::findLinkFor(const KURL& url) const
{
for (size_t i = 0; i < m_imports.size(); ++i) {
- if (m_imports[i]->url() == url)
+ if (equalIgnoringFragmentIdentifier(m_imports[i]->url(), url))
return m_imports[i];
}
@@ -217,6 +227,11 @@ SecurityOrigin* HTMLImportsController::securityOrigin() const
return m_master->securityOrigin();
}
+CachedResourceLoader* HTMLImportsController::cachedResourceLoader() const
+{
+ return m_master->cachedResourceLoader();
+}
+
bool HTMLImportsController::haveLoaded() const
{
for (size_t i = 0; i < m_imports.size(); ++i) {
« no previous file with comments | « Source/core/html/HTMLImportsController.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698