HTMLMetaElement.cpp revision 4604c0d13ca11ad633e6b3f7adb64c6ee886705d
16148c02591bd83da7b957589c4bbf6f9720d503fChris Lattner/**
2fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell *           (C) 1999 Antti Koivisto (koivisto@kde.org)
4b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell *           (C) 2001 Dirk Mueller (mueller@kde.org)
54ee451de366474b9c228b4e5fa573795a715216dChris Lattner * Copyright (C) 2003 Apple Computer, Inc.
64ee451de366474b9c228b4e5fa573795a715216dChris Lattner *
7fd93908ae8b9684fe71c239e3c6cfe13ff6a2663Misha Brukman * This library is free software; you can redistribute it and/or
8b576c94c15af9a440f69d9d03c2afead7971118cJohn Criswell * modify it under the terms of the GNU Library General Public
96148c02591bd83da7b957589c4bbf6f9720d503fChris Lattner * License as published by the Free Software Foundation; either
1040bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner * version 2 of the License, or (at your option) any later version.
1140bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner *
1240bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner * This library is distributed in the hope that it will be useful,
1340bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner * but WITHOUT ANY WARRANTY; without even the implied warranty of
1447a53ac726ceb1ac11bc1326be3fbe095f726b0dReid Spencer * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1540bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner * Library General Public License for more details.
1640bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner *
1740bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner * You should have received a copy of the GNU Library General Public License
1840bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner * along with this library; see the file COPYING.LIB.  If not, write to
1940bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20ea73f3c2e14d84bb4cb07bd6a1a3d7915f3aff83Dan Gohman * Boston, MA 02110-1301, USA.
21ea73f3c2e14d84bb4cb07bd6a1a3d7915f3aff83Dan Gohman */
22ea73f3c2e14d84bb4cb07bd6a1a3d7915f3aff83Dan Gohman
23ea73f3c2e14d84bb4cb07bd6a1a3d7915f3aff83Dan Gohman#include "config.h"
2440bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner#include "HTMLMetaElement.h"
2540bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner
2640bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner#include "Document.h"
2740bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner#include "HTMLNames.h"
2840bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner#include "MappedAttribute.h"
2940bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner
3040bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner#ifdef ANDROID_META_SUPPORT
3140bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner#include "Settings.h"
3240bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner#endif
3340bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner
3440bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattnernamespace WebCore {
3540bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner
3640bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattnerusing namespace HTMLNames;
37c2c4cbf7b3a0229cf1804ca9d7c18113f75bab46Dan Gohman
386148c02591bd83da7b957589c4bbf6f9720d503fChris LattnerHTMLMetaElement::HTMLMetaElement(const QualifiedName& tagName, Document* doc)
396148c02591bd83da7b957589c4bbf6f9720d503fChris Lattner    : HTMLElement(tagName, doc)
406148c02591bd83da7b957589c4bbf6f9720d503fChris Lattner{
410e5f499638c8d277b9dc4a4385712177c53b5681Chris Lattner    ASSERT(hasTagName(metaTag));
42022103b3f33febb7e54b8fdf2c9bc461eea78cbaChris Lattner}
4340bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner
4459fdaeeae8f183e18bb6ad5c382ca23e28e6aaf6Chris LattnerHTMLMetaElement::~HTMLMetaElement()
4518b3c97bc773b24a66eb779e85da1820b0f16b31Chris Lattner{
467b9f6b1b21bc0b06f3c72beae51e9db631319503Devang Patel}
47d672ecb0178c6247a5eaa5b0fb0c3b23cd25bd7cOwen Anderson
4840bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattnervoid HTMLMetaElement::parseMappedAttribute(MappedAttribute* attr)
4981db61a2e6d3c95a2738c3559a108e05e9d7a05aDan Gohman{
5081db61a2e6d3c95a2738c3559a108e05e9d7a05aDan Gohman    if (attr->name() == http_equivAttr) {
5136f891bdf6cf38fcc655a0930ca18664e18518d4Nate Begeman        m_equiv = attr->value();
5247df12d80db90e125e9f2ff764286ee11665476dJohn Criswell        process();
535ee99979065d75605d150d7e567e4351024aae8fDevang Patel    } else if (attr->name() == contentAttr) {
54455889aa79e3463a4b0f2161e3d9d72a683268b6Chris Lattner        m_content = attr->value();
5556caa098085977c14cfab39d92c7dfa15dde0d90Andrew Trick        process();
56ee4f13a9046c380725cdeab62d57722db375c473Chris Lattner    } else if (attr->name() == nameAttr) {
57bdff548e4dd577a72094d57b282de4e765643b96Chris Lattner        // Do nothing.
5847df12d80db90e125e9f2ff764286ee11665476dJohn Criswell    } else
5981db61a2e6d3c95a2738c3559a108e05e9d7a05aDan Gohman        HTMLElement::parseMappedAttribute(attr);
6037da40875873d70b83dc08b2803052bec9b68886Andrew Trick}
61a54b7cbd452b3adb2f51346140d996b29c2cdb30Reid Spencer
62551ccae044b0ff658fe629dd67edd5ffe75d10e8Reid Spencervoid HTMLMetaElement::insertedIntoDocument()
6381db61a2e6d3c95a2738c3559a108e05e9d7a05aDan Gohman{
6447df12d80db90e125e9f2ff764286ee11665476dJohn Criswell    HTMLElement::insertedIntoDocument();
65d0fde30ce850b78371fd1386338350591f9ff494Brian Gaeke    process();
662fabd464ae9fd33f068066e3fc3d0caa7ea2279dAndrew Trick}
672fabd464ae9fd33f068066e3fc3d0caa7ea2279dAndrew Trick
682fabd464ae9fd33f068066e3fc3d0caa7ea2279dAndrew Trickvoid HTMLMetaElement::process()
692fabd464ae9fd33f068066e3fc3d0caa7ea2279dAndrew Trick{
702fabd464ae9fd33f068066e3fc3d0caa7ea2279dAndrew Trick#ifdef ANDROID_META_SUPPORT
712fabd464ae9fd33f068066e3fc3d0caa7ea2279dAndrew Trick    if (!inDocument() || m_content.isNull())
722fabd464ae9fd33f068066e3fc3d0caa7ea2279dAndrew Trick        return;
732fabd464ae9fd33f068066e3fc3d0caa7ea2279dAndrew Trick    if (equalIgnoringCase(name(), "viewport") || equalIgnoringCase(name(), "format-detection"))
742fabd464ae9fd33f068066e3fc3d0caa7ea2279dAndrew Trick        document()->processMetadataSettings(m_content);
753324e718bc9ac2ede08a14c325848b576849542bChris Lattner    else if (equalIgnoringCase(name(), "HandheldFriendly") && equalIgnoringCase(m_content, "true")
7656caa098085977c14cfab39d92c7dfa15dde0d90Andrew Trick            && document()->settings()->viewportWidth() == -1)
7756caa098085977c14cfab39d92c7dfa15dde0d90Andrew Trick        // fit mobile sites directly in the screen
7856caa098085977c14cfab39d92c7dfa15dde0d90Andrew Trick        document()->settings()->setMetadataSettings("width", "device-width");
7937da40875873d70b83dc08b2803052bec9b68886Andrew Trick#endif
800e5f499638c8d277b9dc4a4385712177c53b5681Chris Lattner    // Get the document to process the tag, but only if we're actually part of DOM tree (changing a meta tag while
813e8b6631e67e01e4960a7ba4668a50c596607473Chris Lattner    // it's not in the tree shouldn't have any effect on the document)
8281db61a2e6d3c95a2738c3559a108e05e9d7a05aDan Gohman    if (inDocument() && !m_equiv.isNull() && !m_content.isNull())
8340bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner        document()->processHttpEquiv(m_equiv, m_content);
8440bf8b48cdb9961898dba1bc67320be1e49e3da1Chris Lattner}
85de53dc03f5c1549f3176e979bbeeac965dfa5cbcDan Gohman
8637da40875873d70b83dc08b2803052bec9b68886Andrew TrickString HTMLMetaElement::content() const
872fabd464ae9fd33f068066e3fc3d0caa7ea2279dAndrew Trick{
88b12a754cce0c1d5542af605203a47820edba454dAndrew Trick    return getAttribute(contentAttr);
8915cad759fe2048ac5eb137c6bb0ab7287538677eChris Lattner}
903324e718bc9ac2ede08a14c325848b576849542bChris Lattner
91794fd75c67a2cdc128d67342c6d88a504d186896Devang Patelvoid HTMLMetaElement::setContent(const String& value)
925668cf77a77493ec9f2a9b33f08125e885c8e4cfDan Gohman{
932fabd464ae9fd33f068066e3fc3d0caa7ea2279dAndrew Trick    setAttribute(contentAttr, value);
9415832f61775040995bb8aa6056176425bc2c9088Andrew Trick}
95081c34b725980f995be9080eaec24cd3dfaaf065Owen Anderson
96081c34b725980f995be9080eaec24cd3dfaaf065Owen AndersonString HTMLMetaElement::httpEquiv() const
97794fd75c67a2cdc128d67342c6d88a504d186896Devang Patel{
985668cf77a77493ec9f2a9b33f08125e885c8e4cfDan Gohman    return getAttribute(http_equivAttr);
9960f8a63e2502d57e879bf52a4a48505b74fa9716Dan Gohman}
1005668cf77a77493ec9f2a9b33f08125e885c8e4cfDan Gohman
1015668cf77a77493ec9f2a9b33f08125e885c8e4cfDan Gohmanvoid HTMLMetaElement::setHttpEquiv(const String& value)
1025668cf77a77493ec9f2a9b33f08125e885c8e4cfDan Gohman{
1035668cf77a77493ec9f2a9b33f08125e885c8e4cfDan Gohman    setAttribute(http_equivAttr, value);
1045668cf77a77493ec9f2a9b33f08125e885c8e4cfDan Gohman}
1055668cf77a77493ec9f2a9b33f08125e885c8e4cfDan Gohman
10656caa098085977c14cfab39d92c7dfa15dde0d90Andrew TrickString HTMLMetaElement::name() const
10756caa098085977c14cfab39d92c7dfa15dde0d90Andrew Trick{
1085668cf77a77493ec9f2a9b33f08125e885c8e4cfDan Gohman    return getAttribute(nameAttr);
1095668cf77a77493ec9f2a9b33f08125e885c8e4cfDan Gohman}
1105668cf77a77493ec9f2a9b33f08125e885c8e4cfDan Gohman
1112fabd464ae9fd33f068066e3fc3d0caa7ea2279dAndrew Trickvoid HTMLMetaElement::setName(const String& value)
1122fabd464ae9fd33f068066e3fc3d0caa7ea2279dAndrew Trick{
1135668cf77a77493ec9f2a9b33f08125e885c8e4cfDan Gohman    setAttribute(nameAttr, value);
1145668cf77a77493ec9f2a9b33f08125e885c8e4cfDan Gohman}
1153324e718bc9ac2ede08a14c325848b576849542bChris Lattner
11640bf8b48cdb9961898dba1bc67320be1e49e3da1Chris LattnerString HTMLMetaElement::scheme() const
117b12a754cce0c1d5542af605203a47820edba454dAndrew Trick{
1185ee99979065d75605d150d7e567e4351024aae8fDevang Patel    return getAttribute(schemeAttr);
119f85092c25525f75eef6982ffa40c9b48b87da987Andrew Trick}
1202fabd464ae9fd33f068066e3fc3d0caa7ea2279dAndrew Trick
1212fabd464ae9fd33f068066e3fc3d0caa7ea2279dAndrew Trickvoid HTMLMetaElement::setScheme(const String &value)
1222fabd464ae9fd33f068066e3fc3d0caa7ea2279dAndrew Trick{
123aeee4616dd12d58fd8d040ab00277747f0312321Andrew Trick    setAttribute(schemeAttr, value);
124aeee4616dd12d58fd8d040ab00277747f0312321Andrew Trick}
125aeee4616dd12d58fd8d040ab00277747f0312321Andrew Trick
1264417e537b65c14b378aeca75b2773582dd102f63Andrew Trick}
1272fabd464ae9fd33f068066e3fc3d0caa7ea2279dAndrew Trick