Add an argument indicating the type of insertion to Node::insertedInto
[WebKit-https.git] / Source / WebCore / html / HTMLTitleElement.cpp
1 /*
2  * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3  *           (C) 1999 Antti Koivisto (koivisto@kde.org)
4  *           (C) 2001 Dirk Mueller (mueller@kde.org)
5  * Copyright (C) 2003-2017 Apple Inc. All rights reserved.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public License
18  * along with this library; see the file COPYING.LIB.  If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA 02110-1301, USA.
21  */
22
23 #include "config.h"
24 #include "HTMLTitleElement.h"
25
26 #include "Document.h"
27 #include "HTMLNames.h"
28 #include "NodeRenderStyle.h"
29 #include "RenderElement.h"
30 #include "RenderStyle.h"
31 #include "StyleInheritedData.h"
32 #include "StyleResolver.h"
33 #include "Text.h"
34 #include "TextNodeTraversal.h"
35 #include <wtf/Ref.h>
36 #include <wtf/text/StringBuilder.h>
37
38 namespace WebCore {
39
40 using namespace HTMLNames;
41
42 inline HTMLTitleElement::HTMLTitleElement(const QualifiedName& tagName, Document& document)
43     : HTMLElement(tagName, document)
44 {
45     ASSERT(hasTagName(titleTag));
46 }
47
48 Ref<HTMLTitleElement> HTMLTitleElement::create(const QualifiedName& tagName, Document& document)
49 {
50     return adoptRef(*new HTMLTitleElement(tagName, document));
51 }
52
53 Node::InsertedIntoResult HTMLTitleElement::insertedInto(InsertionType insertionType, ContainerNode& parentOfInsertedTree)
54 {
55     HTMLElement::insertedInto(insertionType, parentOfInsertedTree);
56     document().titleElementAdded(*this);
57     return InsertedIntoResult::Done;
58 }
59
60 void HTMLTitleElement::removedFrom(ContainerNode& insertionPoint)
61 {
62     HTMLElement::removedFrom(insertionPoint);
63     document().titleElementRemoved(*this);
64 }
65
66 void HTMLTitleElement::childrenChanged(const ChildChange& change)
67 {
68     HTMLElement::childrenChanged(change);
69     m_title = computedTextWithDirection();
70     document().titleElementTextChanged(*this);
71 }
72
73 String HTMLTitleElement::text() const
74 {
75     return TextNodeTraversal::childTextContent(*this);
76 }
77
78 StringWithDirection HTMLTitleElement::computedTextWithDirection()
79 {
80     TextDirection direction = LTR;
81     if (auto* computedStyle = this->computedStyle())
82         direction = computedStyle->direction();
83     else
84         direction = styleResolver().styleForElement(*this, parentElement() ? parentElement()->renderStyle() : nullptr).renderStyle->direction();
85     return { text(), direction };
86 }
87
88 void HTMLTitleElement::setText(const String& value)
89 {
90     setTextContent(value);
91 }
92
93 }