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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/html/HTMLImportsController.h ('k') | no next file » | 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) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 } 64 }
65 65
66 void LinkImport::process() 66 void LinkImport::process()
67 { 67 {
68 if (m_loader) 68 if (m_loader)
69 return; 69 return;
70 if (!m_owner) 70 if (!m_owner)
71 return; 71 return;
72 72
73 // FIXME(morrita): Should take care of sub-imports whose document doesn't ha ve frame. 73 // FIXME(morrita): Should take care of sub-imports whose document doesn't ha ve frame.
74 if (!m_owner->document()->frame()) 74 if (!m_owner->document()->frame() && !m_owner->document()->imports())
75 return; 75 return;
76 76
77 LinkRequestBuilder builder(m_owner); 77 LinkRequestBuilder builder(m_owner);
78 if (!builder.isValid()) 78 if (!builder.isValid())
79 return; 79 return;
80 80
81 HTMLImportsController* controller = m_owner->document()->ensureImports(); 81 HTMLImportsController* controller = m_owner->document()->imports();
82 if (!controller) {
83 ASSERT(m_owner->document()->frame()); // The document should be the mast er.
84 m_owner->document()->setImports(HTMLImportsController::create(m_owner->d ocument()));
85 controller = m_owner->document()->imports();
86 }
87
82 if (RefPtr<HTMLImportLoader> found = controller->findLinkFor(builder.url())) { 88 if (RefPtr<HTMLImportLoader> found = controller->findLinkFor(builder.url())) {
83 m_loader = found; 89 m_loader = found;
84 return; 90 return;
85 } 91 }
86 92
87 CachedResourceRequest request = builder.build(true); 93 CachedResourceRequest request = builder.build(true);
88 CachedResourceHandle<CachedScript> resource = m_owner->document()->cachedRes ourceLoader()->requestScript(request); 94 CachedResourceHandle<CachedScript> resource = controller->cachedResourceLoad er()->requestScript(request);
95 if (!resource)
96 return;
97
89 m_loader = HTMLImportLoader::create(controller, builder.url(), resource); 98 m_loader = HTMLImportLoader::create(controller, builder.url(), resource);
90 } 99 }
91 100
92 void LinkImport::ownerRemoved() 101 void LinkImport::ownerRemoved()
93 { 102 {
94 m_owner = 0; 103 m_owner = 0;
95 m_loader.clear(); 104 m_loader.clear();
96 } 105 }
97 106
98 107
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 152
144 String error; 153 String error;
145 if (!m_controller->securityOrigin()->canRequest(m_resource->response().url() ) 154 if (!m_controller->securityOrigin()->canRequest(m_resource->response().url() )
146 && !m_resource->passesAccessControlCheck(m_controller->securityOrigin(), error)) { 155 && !m_resource->passesAccessControlCheck(m_controller->securityOrigin(), error)) {
147 m_controller->showSecurityErrorMessage("Import from origin '" + Security Origin::create(m_resource->response().url())->toString() + "' has been blocked f rom loading by Cross-Origin Resource Sharing policy: " + error); 156 m_controller->showSecurityErrorMessage("Import from origin '" + Security Origin::create(m_resource->response().url())->toString() + "' has been blocked f rom loading by Cross-Origin Resource Sharing policy: " + error);
148 return StateError; 157 return StateError;
149 } 158 }
150 159
151 // FIXME(morrita): This should be done in incremental way. 160 // FIXME(morrita): This should be done in incremental way.
152 m_importedDocument = HTMLDocument::create(0, m_resource->response().url()); 161 m_importedDocument = HTMLDocument::create(0, m_resource->response().url());
162 m_importedDocument->setImports(m_controller);
153 m_importedDocument->setContent(m_resource->script()); 163 m_importedDocument->setContent(m_resource->script());
154 164
155 return StateReady; 165 return StateReady;
156 } 166 }
157 167
158 Document* HTMLImportLoader::importedDocument() const 168 Document* HTMLImportLoader::importedDocument() const
159 { 169 {
160 if (m_state != StateReady) 170 if (m_state != StateReady)
161 return 0; 171 return 0;
162 return m_importedDocument.get(); 172 return m_importedDocument.get();
163 } 173 }
164 174
165 void HTMLImportLoader::importDestroyed() 175 void HTMLImportLoader::importDestroyed()
166 { 176 {
167 m_controller = 0; 177 m_controller = 0;
168 m_importedDocument.clear(); 178 m_importedDocument.clear();
169 } 179 }
170 180
171 181
172 PassOwnPtr<HTMLImportsController> HTMLImportsController::create(Document* master ) 182 PassRefPtr<HTMLImportsController> HTMLImportsController::create(Document* master )
173 { 183 {
174 return adoptPtr(new HTMLImportsController(master)); 184 return adoptRef(new HTMLImportsController(master));
175 } 185 }
176 186
177 HTMLImportsController::HTMLImportsController(Document* master) 187 HTMLImportsController::HTMLImportsController(Document* master)
178 : m_master(master) 188 : m_master(master)
179 { 189 {
180 } 190 }
181 191
182 HTMLImportsController::~HTMLImportsController() 192 HTMLImportsController::~HTMLImportsController()
183 { 193 {
184 for (size_t i = 0; i < m_imports.size(); ++i) 194 for (size_t i = 0; i < m_imports.size(); ++i)
(...skipping 13 matching lines...) Expand all
198 208
199 void HTMLImportsController::didLoad() 209 void HTMLImportsController::didLoad()
200 { 210 {
201 if (haveLoaded()) 211 if (haveLoaded())
202 m_master->didLoadAllImports(); 212 m_master->didLoadAllImports();
203 } 213 }
204 214
205 PassRefPtr<HTMLImportLoader> HTMLImportsController::findLinkFor(const KURL& url) const 215 PassRefPtr<HTMLImportLoader> HTMLImportsController::findLinkFor(const KURL& url) const
206 { 216 {
207 for (size_t i = 0; i < m_imports.size(); ++i) { 217 for (size_t i = 0; i < m_imports.size(); ++i) {
208 if (m_imports[i]->url() == url) 218 if (equalIgnoringFragmentIdentifier(m_imports[i]->url(), url))
209 return m_imports[i]; 219 return m_imports[i];
210 } 220 }
211 221
212 return 0; 222 return 0;
213 } 223 }
214 224
215 SecurityOrigin* HTMLImportsController::securityOrigin() const 225 SecurityOrigin* HTMLImportsController::securityOrigin() const
216 { 226 {
217 return m_master->securityOrigin(); 227 return m_master->securityOrigin();
218 } 228 }
219 229
230 CachedResourceLoader* HTMLImportsController::cachedResourceLoader() const
231 {
232 return m_master->cachedResourceLoader();
233 }
234
220 bool HTMLImportsController::haveLoaded() const 235 bool HTMLImportsController::haveLoaded() const
221 { 236 {
222 for (size_t i = 0; i < m_imports.size(); ++i) { 237 for (size_t i = 0; i < m_imports.size(); ++i) {
223 if (!m_imports[i]->isDone()) 238 if (!m_imports[i]->isDone())
224 return false; 239 return false;
225 } 240 }
226 241
227 return true; 242 return true;
228 } 243 }
229 244
230 } // namespace WebCore 245 } // namespace WebCore
OLDNEW
« 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