| 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/ScriptValue.h" | |
| 9 #include "core/dom/Document.h" | 8 #include "core/dom/Document.h" |
| 10 #include "core/dom/Element.h" | 9 #include "core/dom/Element.h" |
| 11 #include "core/dom/ElementDefinitionOptions.h" | 10 #include "core/dom/ElementDefinitionOptions.h" |
| 12 #include "core/dom/custom/CEReactionsScope.h" | 11 #include "core/dom/custom/CEReactionsScope.h" |
| 13 #include "core/dom/custom/CustomElementDefinition.h" | 12 #include "core/dom/custom/CustomElementDefinition.h" |
| 14 #include "core/dom/custom/CustomElementDefinitionBuilder.h" | 13 #include "core/dom/custom/CustomElementDefinitionBuilder.h" |
| 15 #include "core/dom/custom/CustomElementDescriptor.h" | 14 #include "core/dom/custom/CustomElementDescriptor.h" |
| 16 #include "core/dom/custom/CustomElementTestHelpers.h" | 15 #include "core/dom/custom/CustomElementTestHelpers.h" |
| 17 #include "core/dom/shadow/ShadowRoot.h" | 16 #include "core/dom/shadow/ShadowRoot.h" |
| 18 #include "core/dom/shadow/ShadowRootInit.h" | 17 #include "core/dom/shadow/ShadowRootInit.h" |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 document().documentElement()->appendChild(elementC); | 153 document().documentElement()->appendChild(elementC); |
| 155 | 154 |
| 156 HeapVector<Member<Element>> elements; | 155 HeapVector<Member<Element>> elements; |
| 157 collectCandidates(CustomElementDescriptor("a-a", "a-a"), &elements); | 156 collectCandidates(CustomElementDescriptor("a-a", "a-a"), &elements); |
| 158 | 157 |
| 159 EXPECT_EQ(elementA, elements[0].get()); | 158 EXPECT_EQ(elementA, elements[0].get()); |
| 160 EXPECT_EQ(elementB, elements[1].get()); | 159 EXPECT_EQ(elementB, elements[1].get()); |
| 161 EXPECT_EQ(elementC, elements[2].get()); | 160 EXPECT_EQ(elementC, elements[2].get()); |
| 162 } | 161 } |
| 163 | 162 |
| 164 class TestCustomElementDefinition : public CustomElementDefinition { | |
| 165 WTF_MAKE_NONCOPYABLE(TestCustomElementDefinition); | |
| 166 | |
| 167 public: | |
| 168 TestCustomElementDefinition(const CustomElementDescriptor& descriptor) | |
| 169 : CustomElementDefinition(descriptor) {} | |
| 170 | |
| 171 TestCustomElementDefinition(const CustomElementDescriptor& descriptor, | |
| 172 const HashSet<AtomicString>& observedAttributes) | |
| 173 : CustomElementDefinition(descriptor, observedAttributes) {} | |
| 174 | |
| 175 ~TestCustomElementDefinition() override = default; | |
| 176 | |
| 177 ScriptValue getConstructorForScript() override { return ScriptValue(); } | |
| 178 | |
| 179 bool runConstructor(Element* element) override { | |
| 180 if (constructionStack().isEmpty() || constructionStack().last() != element) | |
| 181 return false; | |
| 182 constructionStack().last().clear(); | |
| 183 return true; | |
| 184 } | |
| 185 | |
| 186 HTMLElement* createElementSync(Document&, const QualifiedName&) override { | |
| 187 return nullptr; | |
| 188 } | |
| 189 | |
| 190 HTMLElement* createElementSync(Document&, | |
| 191 const QualifiedName&, | |
| 192 ExceptionState&) override { | |
| 193 return nullptr; | |
| 194 } | |
| 195 }; | |
| 196 | |
| 197 // Classes which use trace macros cannot be local because of the | 163 // Classes which use trace macros cannot be local because of the |
| 198 // traceImpl template. | 164 // traceImpl template. |
| 199 class LogUpgradeDefinition : public TestCustomElementDefinition { | 165 class LogUpgradeDefinition : public TestCustomElementDefinition { |
| 200 WTF_MAKE_NONCOPYABLE(LogUpgradeDefinition); | 166 WTF_MAKE_NONCOPYABLE(LogUpgradeDefinition); |
| 201 | 167 |
| 202 public: | 168 public: |
| 203 LogUpgradeDefinition(const CustomElementDescriptor& descriptor) | 169 LogUpgradeDefinition(const CustomElementDescriptor& descriptor) |
| 204 : TestCustomElementDefinition( | 170 : TestCustomElementDefinition( |
| 205 descriptor, | 171 descriptor, |
| 206 { | 172 { |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 282 void runAttributeChangedCallback(Element* element, | 248 void runAttributeChangedCallback(Element* element, |
| 283 const QualifiedName& name, | 249 const QualifiedName& name, |
| 284 const AtomicString& oldValue, | 250 const AtomicString& oldValue, |
| 285 const AtomicString& newValue) override { | 251 const AtomicString& newValue) override { |
| 286 m_logs.append(AttributeChangedCallback); | 252 m_logs.append(AttributeChangedCallback); |
| 287 EXPECT_EQ(element, m_element); | 253 EXPECT_EQ(element, m_element); |
| 288 m_attributeChanged.append(AttributeChanged{name, oldValue, newValue}); | 254 m_attributeChanged.append(AttributeChanged{name, oldValue, newValue}); |
| 289 } | 255 } |
| 290 }; | 256 }; |
| 291 | 257 |
| 292 class LogUpgradeBuilder final : public CustomElementDefinitionBuilder { | 258 class LogUpgradeBuilder final : public TestCustomElementDefinitionBuilder { |
| 293 STACK_ALLOCATED(); | 259 STACK_ALLOCATED(); |
| 294 WTF_MAKE_NONCOPYABLE(LogUpgradeBuilder); | 260 WTF_MAKE_NONCOPYABLE(LogUpgradeBuilder); |
| 295 | 261 |
| 296 public: | 262 public: |
| 297 LogUpgradeBuilder() {} | 263 LogUpgradeBuilder() {} |
| 298 | 264 |
| 299 bool checkConstructorIntrinsics() override { return true; } | 265 CustomElementDefinition* build( |
| 300 bool checkConstructorNotRegistered() override { return true; } | 266 const CustomElementDescriptor& descriptor) override { |
| 301 bool checkPrototype() override { return true; } | |
| 302 bool rememberOriginalProperties() override { return true; } | |
| 303 CustomElementDefinition* build(const CustomElementDescriptor& descriptor) { | |
| 304 return new LogUpgradeDefinition(descriptor); | 267 return new LogUpgradeDefinition(descriptor); |
| 305 } | 268 } |
| 306 }; | 269 }; |
| 307 | 270 |
| 308 TEST_F(CustomElementRegistryTest, define_upgradesInDocumentElements) { | 271 TEST_F(CustomElementRegistryTest, define_upgradesInDocumentElements) { |
| 309 ScriptForbiddenScope doNotRelyOnScript; | 272 ScriptForbiddenScope doNotRelyOnScript; |
| 310 | 273 |
| 311 Element* element = CreateElement("a-a").inDocument(&document()); | 274 Element* element = CreateElement("a-a").inDocument(&document()); |
| 312 element->setAttribute( | 275 element->setAttribute( |
| 313 QualifiedName(nullAtom, "attr1", HTMLNames::xhtmlNamespaceURI), "v1"); | 276 QualifiedName(nullAtom, "attr1", HTMLNames::xhtmlNamespaceURI), "v1"); |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 448 << "adoptedCallback should have been passed the new owner document"; | 411 << "adoptedCallback should have been passed the new owner document"; |
| 449 | 412 |
| 450 EXPECT_EQ(2u, definition->m_logs.size()) | 413 EXPECT_EQ(2u, definition->m_logs.size()) |
| 451 << "adoptNode() should not invoke other callbacks"; | 414 << "adoptNode() should not invoke other callbacks"; |
| 452 } | 415 } |
| 453 | 416 |
| 454 // TODO(dominicc): Add tests which adjust the "is" attribute when type | 417 // TODO(dominicc): Add tests which adjust the "is" attribute when type |
| 455 // extensions are implemented. | 418 // extensions are implemented. |
| 456 | 419 |
| 457 } // namespace blink | 420 } // namespace blink |
| OLD | NEW |