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

Unified Diff: Source/core/html/HTMLObjectElement.cpp

Issue 75273004: Add 'exposed' objects and embeds to a document's named properties. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Remove extraneous empty line in expected output Created 7 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/html/HTMLObjectElement.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/html/HTMLObjectElement.cpp
diff --git a/Source/core/html/HTMLObjectElement.cpp b/Source/core/html/HTMLObjectElement.cpp
index b9ef1de17ddcff1aee9fad3cb3cfac763d77124f..e1c42042a6404aa9b67b94710405cac0315b84d2 100644
--- a/Source/core/html/HTMLObjectElement.cpp
+++ b/Source/core/html/HTMLObjectElement.cpp
@@ -51,7 +51,6 @@ using namespace HTMLNames;
inline HTMLObjectElement::HTMLObjectElement(Document& document, HTMLFormElement* form, bool createdByParser)
: HTMLPlugInElement(objectTag, document, createdByParser, ShouldNotPreferPlugInsForImages)
- , m_docNamedItem(true)
, m_useFallbackContent(false)
{
setForm(form ? form : findFormAncestor());
@@ -337,7 +336,6 @@ void HTMLObjectElement::removedFrom(ContainerNode* insertionPoint)
void HTMLObjectElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
{
- updateDocNamedItem();
if (inDocument() && !useFallbackContent()) {
setNeedsWidgetUpdate(true);
setNeedsStyleRecalc();
@@ -393,64 +391,18 @@ void HTMLObjectElement::renderFallbackContent()
reattachFallbackContent();
}
-// FIXME: This should be removed, all callers are almost certainly wrong.
-static bool isRecognizedTagName(const QualifiedName& tagName)
+bool HTMLObjectElement::isExposed() const
{
- DEFINE_STATIC_LOCAL(HashSet<StringImpl*>, tagList, ());
- if (tagList.isEmpty()) {
- const QualifiedName* const* tags = HTMLNames::getHTMLTags();
- for (size_t i = 0; i < HTMLNames::HTMLTagsCount; i++) {
- if (*tags[i] == bgsoundTag
- || *tags[i] == commandTag
- || *tags[i] == detailsTag
- || *tags[i] == figcaptionTag
- || *tags[i] == figureTag
- || *tags[i] == summaryTag
- || *tags[i] == trackTag) {
- // Even though we have atoms for these tags, we don't want to
- // treat them as "recognized tags" for the purpose of parsing
- // because that changes how we parse documents.
- continue;
- }
- tagList.add(tags[i]->localName().impl());
- }
- }
- return tagList.contains(tagName.localName().impl());
-}
-
-void HTMLObjectElement::updateDocNamedItem()
-{
- // The rule is "<object> elements with no children other than
- // <param> elements, unknown elements and whitespace can be
- // found by name in a document, and other <object> elements cannot."
- bool wasNamedItem = m_docNamedItem;
- bool isNamedItem = true;
- Node* child = firstChild();
- while (child && isNamedItem) {
- if (child->isElementNode()) {
- Element* element = toElement(child);
- // FIXME: Use of isRecognizedTagName is almost certainly wrong here.
- if (isRecognizedTagName(element->tagQName()) && !element->hasTagName(paramTag))
- isNamedItem = false;
- } else if (child->isTextNode()) {
- if (!toText(child)->containsOnlyWhitespace())
- isNamedItem = false;
- } else {
- isNamedItem = false;
- }
- child = child->nextSibling();
+ // http://www.whatwg.org/specs/web-apps/current-work/#exposed
+ for (Node* ancestor = parentNode(); ancestor; ancestor = ancestor->parentNode()) {
+ if (ancestor->hasTagName(objectTag) && toHTMLObjectElement(ancestor)->isExposed())
+ return false;
}
- if (isNamedItem != wasNamedItem && document().isHTMLDocument()) {
- HTMLDocument& document = toHTMLDocument(this->document());
- if (isNamedItem) {
- document.addNamedItem(getNameAttribute());
- document.addExtraNamedItem(getIdAttribute());
- } else {
- document.removeNamedItem(getNameAttribute());
- document.removeExtraNamedItem(getIdAttribute());
- }
+ for (Node* node = firstChild(); node; node = NodeTraversal::next(*node, this)) {
+ if (node->hasTagName(objectTag) || node->hasTagName(embedTag))
+ return false;
}
- m_docNamedItem = isNamedItem;
+ return true;
}
bool HTMLObjectElement::containsJavaApplet() const
« no previous file with comments | « Source/core/html/HTMLObjectElement.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698