OLD | NEW |
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 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 | 88 |
89 ensureLoader(); | 89 ensureLoader(); |
90 } | 90 } |
91 | 91 |
92 void HTMLImportChild::didFinish() | 92 void HTMLImportChild::didFinish() |
93 { | 93 { |
94 if (m_client) | 94 if (m_client) |
95 m_client->didFinish(); | 95 m_client->didFinish(); |
96 } | 96 } |
97 | 97 |
98 static bool hasAsyncImportAncestor(HTMLImport* import) | |
99 { | |
100 for (HTMLImport* i = import; i; i = i->parent()) { | |
101 if (!i->isSync()) | |
102 return true; | |
103 } | |
104 | |
105 return false; | |
106 } | |
107 | |
108 void HTMLImportChild::didFinishLoading() | 98 void HTMLImportChild::didFinishLoading() |
109 { | 99 { |
110 clearResource(); | 100 clearResource(); |
111 stateWillChange(); | 101 stateWillChange(); |
112 if (m_customElementMicrotaskStep) | 102 if (m_customElementMicrotaskStep) |
113 CustomElementMicrotaskDispatcher::instance().importDidFinish(m_customEle
mentMicrotaskStep.get()); | 103 CustomElementMicrotaskDispatcher::instance().importDidFinish(m_customEle
mentMicrotaskStep.get()); |
114 // FIXME(crbug.com/365956): | |
115 // This is needed because async import currently never consumes the queue an
d | |
116 // it prevents the children of such an async import from finishing. | |
117 // Their steps are never processed. | |
118 // Although this is clearly not the right fix, | |
119 // https://codereview.chromium.org/249563003/ should get rid of this part. | |
120 if (hasAsyncImportAncestor(this)) | |
121 didFinishUpgradingCustomElements(); | |
122 } | 104 } |
123 | 105 |
124 void HTMLImportChild::didFinishUpgradingCustomElements() | 106 void HTMLImportChild::didFinishUpgradingCustomElements() |
125 { | 107 { |
126 stateWillChange(); | 108 stateWillChange(); |
127 m_customElementMicrotaskStep.clear(); | 109 m_customElementMicrotaskStep.clear(); |
128 } | 110 } |
129 | 111 |
130 bool HTMLImportChild::isLoaded() const | 112 bool HTMLImportChild::isLoaded() const |
131 { | 113 { |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
171 void HTMLImportChild::ensureLoader() | 153 void HTMLImportChild::ensureLoader() |
172 { | 154 { |
173 if (m_loader) | 155 if (m_loader) |
174 return; | 156 return; |
175 | 157 |
176 if (HTMLImportChild* found = toHTMLImportsController(root())->findLinkFor(m_
url, this)) | 158 if (HTMLImportChild* found = toHTMLImportsController(root())->findLinkFor(m_
url, this)) |
177 shareLoader(found); | 159 shareLoader(found); |
178 else | 160 else |
179 createLoader(); | 161 createLoader(); |
180 | 162 |
181 if (isSync() && !isDone()) { | 163 if (!isDone() && !formsCycle()) { |
182 ASSERT(!m_customElementMicrotaskStep); | 164 ASSERT(!m_customElementMicrotaskStep); |
183 m_customElementMicrotaskStep = CustomElement::didCreateImport(this)->wea
kPtr(); | 165 m_customElementMicrotaskStep = CustomElement::didCreateImport(this)->wea
kPtr(); |
184 } | 166 } |
185 } | 167 } |
186 | 168 |
187 void HTMLImportChild::createLoader() | 169 void HTMLImportChild::createLoader() |
188 { | 170 { |
189 ASSERT(!m_loader); | 171 ASSERT(!m_loader); |
190 m_loader = toHTMLImportsController(root())->createLoader(); | 172 m_loader = toHTMLImportsController(root())->createLoader(); |
191 m_loader->addImport(this); | 173 m_loader->addImport(this); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 HTMLImport::showThis(); | 220 HTMLImport::showThis(); |
239 fprintf(stderr, " loader=%p step=%p sync=%s url=%s", | 221 fprintf(stderr, " loader=%p step=%p sync=%s url=%s", |
240 m_loader, | 222 m_loader, |
241 m_customElementMicrotaskStep.get(), | 223 m_customElementMicrotaskStep.get(), |
242 isSync() ? "Y" : "N", | 224 isSync() ? "Y" : "N", |
243 url().string().utf8().data()); | 225 url().string().utf8().data()); |
244 } | 226 } |
245 #endif | 227 #endif |
246 | 228 |
247 } // namespace WebCore | 229 } // namespace WebCore |
OLD | NEW |