HTMLMetaElement.cpp revision eebae91469b8f225fe78e97ce6dae26efcf6da43
18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (C) 1999 Antti Koivisto (koivisto@kde.org) 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (C) 2001 Dirk Mueller (mueller@kde.org) 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2003 Apple Computer, Inc. 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 225f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLMetaElement.h" 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Document.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLNames.h" 285f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "MappedAttribute.h" 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 304604c0d13ca11ad633e6b3f7adb64c6ee886705dGrace Kloba#ifdef ANDROID_META_SUPPORT 314604c0d13ca11ad633e6b3f7adb64c6ee886705dGrace Kloba#include "Settings.h" 3229efdb685ae2c3da761273415d2f7df07852e463Grace Kloba#include "WebViewCore.h" 334604c0d13ca11ad633e6b3f7adb64c6ee886705dGrace Kloba#endif 344604c0d13ca11ad633e6b3f7adb64c6ee886705dGrace Kloba 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace HTMLNames; 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 39635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectHTMLMetaElement::HTMLMetaElement(const QualifiedName& tagName, Document* doc) 40635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project : HTMLElement(tagName, doc) 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 42635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project ASSERT(hasTagName(metaTag)); 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHTMLMetaElement::~HTMLMetaElement() 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid HTMLMetaElement::parseMappedAttribute(MappedAttribute* attr) 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (attr->name() == http_equivAttr) { 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_equiv = attr->value(); 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project process(); 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (attr->name() == contentAttr) { 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_content = attr->value(); 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project process(); 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (attr->name() == nameAttr) { 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Do nothing. 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HTMLElement::parseMappedAttribute(attr); 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid HTMLMetaElement::insertedIntoDocument() 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HTMLElement::insertedIntoDocument(); 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project process(); 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid HTMLMetaElement::process() 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!inDocument() || m_content.isNull()) 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 73eebae91469b8f225fe78e97ce6dae26efcf6da43Steve Block#ifdef ANDROID_META_SUPPORT 74eebae91469b8f225fe78e97ce6dae26efcf6da43Steve Block // TODO: Evaluate whether to take upstreamed meta support 7529efdb685ae2c3da761273415d2f7df07852e463Grace Kloba bool updateViewport = false; 7629efdb685ae2c3da761273415d2f7df07852e463Grace Kloba if (equalIgnoringCase(name(), "viewport")) { 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project document()->processMetadataSettings(m_content); 7829efdb685ae2c3da761273415d2f7df07852e463Grace Kloba updateViewport = true; 7929efdb685ae2c3da761273415d2f7df07852e463Grace Kloba } else if (equalIgnoringCase(name(), "format-detection")) 8029efdb685ae2c3da761273415d2f7df07852e463Grace Kloba document()->processMetadataSettings(m_content); 81ca2fbfb0adeb06991329d7d28854a5166672fe7aGrace Kloba else if ((equalIgnoringCase(name(), "HandheldFriendly") 82ca2fbfb0adeb06991329d7d28854a5166672fe7aGrace Kloba && equalIgnoringCase(m_content, "true") || 83ca2fbfb0adeb06991329d7d28854a5166672fe7aGrace Kloba equalIgnoringCase(name(), "MobileOptimized")) 8429efdb685ae2c3da761273415d2f7df07852e463Grace Kloba && document()->settings()->viewportWidth() == -1) { 854604c0d13ca11ad633e6b3f7adb64c6ee886705dGrace Kloba // fit mobile sites directly in the screen 864604c0d13ca11ad633e6b3f7adb64c6ee886705dGrace Kloba document()->settings()->setMetadataSettings("width", "device-width"); 8729efdb685ae2c3da761273415d2f7df07852e463Grace Kloba updateViewport = true; 8829efdb685ae2c3da761273415d2f7df07852e463Grace Kloba } 8929efdb685ae2c3da761273415d2f7df07852e463Grace Kloba // update the meta data if it is the top document 9029efdb685ae2c3da761273415d2f7df07852e463Grace Kloba if (updateViewport && !document()->ownerElement()) { 9129efdb685ae2c3da761273415d2f7df07852e463Grace Kloba FrameView* view = document()->view(); 9229efdb685ae2c3da761273415d2f7df07852e463Grace Kloba if (view) 9329efdb685ae2c3da761273415d2f7df07852e463Grace Kloba android::WebViewCore::getWebViewCore(view)->updateViewport(); 9429efdb685ae2c3da761273415d2f7df07852e463Grace Kloba } 95eebae91469b8f225fe78e97ce6dae26efcf6da43Steve Block#else 96dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (equalIgnoringCase(name(), "viewport")) 97dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block document()->processViewport(m_content); 98eebae91469b8f225fe78e97ce6dae26efcf6da43Steve Block#endif 99dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Get the document to process the tag, but only if we're actually part of DOM tree (changing a meta tag while 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // it's not in the tree shouldn't have any effect on the document) 102dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!m_equiv.isNull()) 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project document()->processHttpEquiv(m_equiv, m_content); 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString HTMLMetaElement::content() const 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return getAttribute(contentAttr); 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid HTMLMetaElement::setContent(const String& value) 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setAttribute(contentAttr, value); 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString HTMLMetaElement::httpEquiv() const 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return getAttribute(http_equivAttr); 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid HTMLMetaElement::setHttpEquiv(const String& value) 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setAttribute(http_equivAttr, value); 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString HTMLMetaElement::name() const 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return getAttribute(nameAttr); 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid HTMLMetaElement::setName(const String& value) 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setAttribute(nameAttr, value); 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString HTMLMetaElement::scheme() const 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return getAttribute(schemeAttr); 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid HTMLMetaElement::setScheme(const String &value) 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setAttribute(schemeAttr, value); 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 147