| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/dom/custom/CustomElementRegistry.h" | 5 #include "core/dom/custom/CustomElementRegistry.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/ExceptionState.h" | 7 #include "bindings/core/v8/ExceptionState.h" |
| 8 #include "bindings/core/v8/ScriptCustomElementDefinitionBuilder.h" | 8 #include "bindings/core/v8/ScriptCustomElementDefinitionBuilder.h" |
| 9 #include "bindings/core/v8/ScriptPromise.h" | 9 #include "bindings/core/v8/ScriptPromise.h" |
| 10 #include "bindings/core/v8/ScriptPromiseResolver.h" | 10 #include "bindings/core/v8/ScriptPromiseResolver.h" |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 // CustomElementRegistry's element definition is running | 180 // CustomElementRegistry's element definition is running |
| 181 // flag." | 181 // flag." |
| 182 // (ElementDefinitionIsRunning destructor does this.) | 182 // (ElementDefinitionIsRunning destructor does this.) |
| 183 } | 183 } |
| 184 | 184 |
| 185 CustomElementDescriptor descriptor(name, localName); | 185 CustomElementDescriptor descriptor(name, localName); |
| 186 CustomElementDefinition* definition = builder.build(descriptor); | 186 CustomElementDefinition* definition = builder.build(descriptor); |
| 187 CHECK(!exceptionState.hadException()); | 187 CHECK(!exceptionState.hadException()); |
| 188 CHECK(definition->descriptor() == descriptor); | 188 CHECK(definition->descriptor() == descriptor); |
| 189 DefinitionMap::AddResult result = | 189 DefinitionMap::AddResult result = |
| 190 m_definitions.add(descriptor.name(), definition); | 190 m_definitions.insert(descriptor.name(), definition); |
| 191 CHECK(result.isNewEntry); | 191 CHECK(result.isNewEntry); |
| 192 | 192 |
| 193 HeapVector<Member<Element>> candidates; | 193 HeapVector<Member<Element>> candidates; |
| 194 collectCandidates(descriptor, &candidates); | 194 collectCandidates(descriptor, &candidates); |
| 195 for (Element* candidate : candidates) | 195 for (Element* candidate : candidates) |
| 196 definition->enqueueUpgradeReaction(candidate); | 196 definition->enqueueUpgradeReaction(candidate); |
| 197 | 197 |
| 198 // 16: when-defined promise processing | 198 // 16: when-defined promise processing |
| 199 const auto& entry = m_whenDefinedPromiseMap.find(name); | 199 const auto& entry = m_whenDefinedPromiseMap.find(name); |
| 200 if (entry != m_whenDefinedPromiseMap.end()) { | 200 if (entry != m_whenDefinedPromiseMap.end()) { |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 | 257 |
| 258 void CustomElementRegistry::addCandidate(Element* candidate) { | 258 void CustomElementRegistry::addCandidate(Element* candidate) { |
| 259 const AtomicString& name = candidate->localName(); | 259 const AtomicString& name = candidate->localName(); |
| 260 if (nameIsDefined(name) || v0NameIsDefined(name)) | 260 if (nameIsDefined(name) || v0NameIsDefined(name)) |
| 261 return; | 261 return; |
| 262 UpgradeCandidateMap::iterator it = m_upgradeCandidates->find(name); | 262 UpgradeCandidateMap::iterator it = m_upgradeCandidates->find(name); |
| 263 UpgradeCandidateSet* set; | 263 UpgradeCandidateSet* set; |
| 264 if (it != m_upgradeCandidates->end()) { | 264 if (it != m_upgradeCandidates->end()) { |
| 265 set = it->value; | 265 set = it->value; |
| 266 } else { | 266 } else { |
| 267 set = m_upgradeCandidates->add(name, new UpgradeCandidateSet()) | 267 set = m_upgradeCandidates->insert(name, new UpgradeCandidateSet()) |
| 268 .storedValue->value; | 268 .storedValue->value; |
| 269 } | 269 } |
| 270 set->insert(candidate); | 270 set->insert(candidate); |
| 271 } | 271 } |
| 272 | 272 |
| 273 // https://html.spec.whatwg.org/multipage/scripting.html#dom-customelementsregis
try-whendefined | 273 // https://html.spec.whatwg.org/multipage/scripting.html#dom-customelementsregis
try-whendefined |
| 274 ScriptPromise CustomElementRegistry::whenDefined( | 274 ScriptPromise CustomElementRegistry::whenDefined( |
| 275 ScriptState* scriptState, | 275 ScriptState* scriptState, |
| 276 const AtomicString& name, | 276 const AtomicString& name, |
| 277 ExceptionState& exceptionState) { | 277 ExceptionState& exceptionState) { |
| 278 if (throwIfInvalidName(name, exceptionState)) | 278 if (throwIfInvalidName(name, exceptionState)) |
| 279 return ScriptPromise(); | 279 return ScriptPromise(); |
| 280 CustomElementDefinition* definition = definitionForName(name); | 280 CustomElementDefinition* definition = definitionForName(name); |
| 281 if (definition) | 281 if (definition) |
| 282 return ScriptPromise::castUndefined(scriptState); | 282 return ScriptPromise::castUndefined(scriptState); |
| 283 ScriptPromiseResolver* resolver = m_whenDefinedPromiseMap.get(name); | 283 ScriptPromiseResolver* resolver = m_whenDefinedPromiseMap.get(name); |
| 284 if (resolver) | 284 if (resolver) |
| 285 return resolver->promise(); | 285 return resolver->promise(); |
| 286 ScriptPromiseResolver* newResolver = | 286 ScriptPromiseResolver* newResolver = |
| 287 ScriptPromiseResolver::create(scriptState); | 287 ScriptPromiseResolver::create(scriptState); |
| 288 m_whenDefinedPromiseMap.add(name, newResolver); | 288 m_whenDefinedPromiseMap.insert(name, newResolver); |
| 289 return newResolver->promise(); | 289 return newResolver->promise(); |
| 290 } | 290 } |
| 291 | 291 |
| 292 void CustomElementRegistry::collectCandidates( | 292 void CustomElementRegistry::collectCandidates( |
| 293 const CustomElementDescriptor& desc, | 293 const CustomElementDescriptor& desc, |
| 294 HeapVector<Member<Element>>* elements) { | 294 HeapVector<Member<Element>>* elements) { |
| 295 UpgradeCandidateMap::iterator it = m_upgradeCandidates->find(desc.name()); | 295 UpgradeCandidateMap::iterator it = m_upgradeCandidates->find(desc.name()); |
| 296 if (it == m_upgradeCandidates->end()) | 296 if (it == m_upgradeCandidates->end()) |
| 297 return; | 297 return; |
| 298 CustomElementUpgradeSorter sorter; | 298 CustomElementUpgradeSorter sorter; |
| 299 for (Element* element : *it.get()->value) { | 299 for (Element* element : *it.get()->value) { |
| 300 if (!element || !desc.matches(*element)) | 300 if (!element || !desc.matches(*element)) |
| 301 continue; | 301 continue; |
| 302 sorter.add(element); | 302 sorter.add(element); |
| 303 } | 303 } |
| 304 | 304 |
| 305 m_upgradeCandidates->remove(it); | 305 m_upgradeCandidates->remove(it); |
| 306 | 306 |
| 307 Document* document = m_owner->document(); | 307 Document* document = m_owner->document(); |
| 308 if (!document) | 308 if (!document) |
| 309 return; | 309 return; |
| 310 | 310 |
| 311 sorter.sorted(elements, document); | 311 sorter.sorted(elements, document); |
| 312 } | 312 } |
| 313 | 313 |
| 314 } // namespace blink | 314 } // namespace blink |
| OLD | NEW |