| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Google, Inc. All Rights Reserved. | 2 * Copyright (C) 2010 Google, Inc. All Rights Reserved. |
| 3 * Copyright (C) 2011 Apple Inc. All rights reserved. | 3 * Copyright (C) 2011 Apple Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. 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 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 return tagName == tableTag | 75 return tagName == tableTag |
| 76 || tagName == tbodyTag | 76 || tagName == tbodyTag |
| 77 || tagName == tfootTag | 77 || tagName == tfootTag |
| 78 || tagName == theadTag | 78 || tagName == theadTag |
| 79 || tagName == trTag; | 79 || tagName == trTag; |
| 80 } | 80 } |
| 81 | 81 |
| 82 } // namespace | 82 } // namespace |
| 83 | 83 |
| 84 template<typename ChildType> | 84 template<typename ChildType> |
| 85 PassRefPtr<ChildType> HTMLConstructionSite::attach(ContainerNode* parent, PassRe
fPtr<ChildType> prpChild) | 85 PassRefPtr<ChildType> HTMLConstructionSite::attach(ContainerNode* rawParent, Pas
sRefPtr<ChildType> prpChild) |
| 86 { | 86 { |
| 87 RefPtr<ChildType> child = prpChild; | 87 RefPtr<ChildType> child = prpChild; |
| 88 RefPtr<ContainerNode> parent = rawParent; |
| 88 | 89 |
| 89 // FIXME: It's confusing that HTMLConstructionSite::attach does the magic | 90 // FIXME: It's confusing that HTMLConstructionSite::attach does the magic |
| 90 // redirection to the foster parent but HTMLConstructionSite::attachAtSite | 91 // redirection to the foster parent but HTMLConstructionSite::attachAtSite |
| 91 // doesn't. It feels like we're missing a concept somehow. | 92 // doesn't. It feels like we're missing a concept somehow. |
| 92 if (shouldFosterParent()) { | 93 if (shouldFosterParent()) { |
| 93 fosterParent(child.get()); | 94 fosterParent(child.get()); |
| 94 ASSERT(child->attached() || !child->parentNode() || !child->parentNode()
->attached()); | 95 ASSERT(child->attached() || !child->parentNode() || !child->parentNode()
->attached()); |
| 95 return child.release(); | 96 return child.release(); |
| 96 } | 97 } |
| 97 | 98 |
| 98 parent->parserAddChild(child); | 99 parent->parserAddChild(child); |
| 99 | 100 |
| 100 // An event handler (DOM Mutation, beforeload, et al.) could have removed | 101 // An event handler (DOM Mutation, beforeload, et al.) could have removed |
| 101 // the child, in which case we shouldn't try attaching it. | 102 // the child, in which case we shouldn't try attaching it. |
| 102 if (!child->parentNode()) | 103 if (!child->parentNode()) |
| 103 return child.release(); | 104 return child.release(); |
| 104 | 105 |
| 105 // It's slightly unfortunate that we need to hold a reference to child | |
| 106 // here to call attach(). We should investigate whether we can rely on | |
| 107 // |parent| to hold a ref at this point. In the common case (at least | |
| 108 // for elements), however, we'll get to use this ref in the stack of | |
| 109 // open elements. | |
| 110 if (parent->attached() && !child->attached()) | 106 if (parent->attached() && !child->attached()) |
| 111 child->attach(); | 107 child->attach(); |
| 112 return child.release(); | 108 return child.release(); |
| 113 } | 109 } |
| 114 | 110 |
| 115 void HTMLConstructionSite::attachAtSite(const AttachmentSite& site, PassRefPtr<N
ode> prpChild) | 111 void HTMLConstructionSite::attachAtSite(const AttachmentSite& site, PassRefPtr<N
ode> prpChild) |
| 116 { | 112 { |
| 117 // FIXME: It's unfortunate that we need to hold a reference to child | 113 // FIXME: It's unfortunate that we need to hold a reference to child |
| 118 // here to call attach(). We should investigate whether we can rely on | 114 // here to call attach(). We should investigate whether we can rely on |
| 119 // |site.parent| to hold a ref at this point. | 115 // |site.parent| to hold a ref at this point. |
| (...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 495 } | 491 } |
| 496 | 492 |
| 497 void HTMLConstructionSite::fosterParent(Node* node) | 493 void HTMLConstructionSite::fosterParent(Node* node) |
| 498 { | 494 { |
| 499 AttachmentSite site; | 495 AttachmentSite site; |
| 500 findFosterSite(site); | 496 findFosterSite(site); |
| 501 attachAtSite(site, node); | 497 attachAtSite(site, node); |
| 502 } | 498 } |
| 503 | 499 |
| 504 } | 500 } |
| OLD | NEW |