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) 406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * Copyright (C) 2003, 2008, 2010 Apple Inc. All rights reserved. 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef HTMLLinkElement_h 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define HTMLLinkElement_h 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSStyleSheet.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CachedResourceClient.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CachedResourceHandle.h" 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLElement.h" 30f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#include "Timer.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass CachedCSSStyleSheet; 35f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochclass CachedResource; 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass KURL; 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass HTMLLinkElement : public HTMLElement, public CachedResourceClient { 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 40f91ac8eab3399adb5325701bebe0590a77e49df7Leon Clarke struct RelAttribute { 41f91ac8eab3399adb5325701bebe0590a77e49df7Leon Clarke bool m_isStyleSheet; 42f91ac8eab3399adb5325701bebe0590a77e49df7Leon Clarke bool m_isIcon; 43f91ac8eab3399adb5325701bebe0590a77e49df7Leon Clarke bool m_isAlternate; 44f91ac8eab3399adb5325701bebe0590a77e49df7Leon Clarke bool m_isDNSPrefetch; 45f91ac8eab3399adb5325701bebe0590a77e49df7Leon Clarke#ifdef ANDROID_APPLE_TOUCH_ICON 46f91ac8eab3399adb5325701bebe0590a77e49df7Leon Clarke bool m_isTouchIcon; 47f91ac8eab3399adb5325701bebe0590a77e49df7Leon Clarke bool m_isPrecomposedTouchIcon; 48f91ac8eab3399adb5325701bebe0590a77e49df7Leon Clarke#endif 495d6f8ef31d11ee66598999b1b749ba9ff767e4d5Leon Clarke#if ENABLE(LINK_PREFETCH) 50f91ac8eab3399adb5325701bebe0590a77e49df7Leon Clarke bool m_isLinkPrefetch; 512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch bool m_isLinkSubresource; 52f91ac8eab3399adb5325701bebe0590a77e49df7Leon Clarke#endif 53f91ac8eab3399adb5325701bebe0590a77e49df7Leon Clarke 545d6f8ef31d11ee66598999b1b749ba9ff767e4d5Leon Clarke RelAttribute() 555d6f8ef31d11ee66598999b1b749ba9ff767e4d5Leon Clarke : m_isStyleSheet(false) 565d6f8ef31d11ee66598999b1b749ba9ff767e4d5Leon Clarke , m_isIcon(false) 575d6f8ef31d11ee66598999b1b749ba9ff767e4d5Leon Clarke , m_isAlternate(false) 585d6f8ef31d11ee66598999b1b749ba9ff767e4d5Leon Clarke , m_isDNSPrefetch(false) 595d6f8ef31d11ee66598999b1b749ba9ff767e4d5Leon Clarke#if ENABLE(LINK_PREFETCH) 60f91ac8eab3399adb5325701bebe0590a77e49df7Leon Clarke , m_isLinkPrefetch(false) 612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch , m_isLinkSubresource(false) 62f91ac8eab3399adb5325701bebe0590a77e49df7Leon Clarke#endif 63e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke { 64e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke } 65f91ac8eab3399adb5325701bebe0590a77e49df7Leon Clarke }; 66f91ac8eab3399adb5325701bebe0590a77e49df7Leon Clarke 675af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke static PassRefPtr<HTMLLinkElement> create(const QualifiedName&, Document*, bool createdByParser); 685af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke virtual ~HTMLLinkElement(); 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project KURL href() const; 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String rel() const; 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual String target() const; 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String type() const; 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project StyleSheet* sheet() const; 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 795af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke bool isLoading() const; 805af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 815af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke bool isDisabled() const { return m_disabledState == Disabled; } 825af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke bool isEnabledViaScript() const { return m_disabledState == EnabledViaScript; } 835af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke bool isIcon() const { return m_relAttribute.m_isIcon; } 845af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 855af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkeprivate: 86e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block virtual void parseMappedAttribute(Attribute*); 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 88f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if ENABLE(LINK_PREFETCH) 89f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void onloadTimerFired(Timer<HTMLLinkElement>*); 90f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif 912bde8e466a4451c7319e3a072d118917957d6554Steve Block bool checkBeforeLoadEvent(); 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void process(); 9306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen static void processCallback(Node*); 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void insertedIntoDocument(); 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void removedFromDocument(); 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // from CachedResourceClient 99d0825bca7fe65beaee391d30da42e937db621564Steve Block virtual void setCSSStyleSheet(const String& href, const KURL& baseURL, const String& charset, const CachedCSSStyleSheet* sheet); 100f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if ENABLE(LINK_PREFETCH) 101f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual void notifyFinished(CachedResource*); 102f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool sheetLoaded(); 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1056c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen bool isAlternate() const { return m_disabledState == Unset && m_relAttribute.m_isAlternate; } 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setDisabledState(bool _disabled); 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isURLAttribute(Attribute*) const; 11006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 1115af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkepublic: 1126c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen static void tokenizeRelAttribute(const AtomicString& value, RelAttribute&); 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1145af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkeprivate: 115635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual void addSubresourceAttributeURLs(ListHashSet<KURL>&) const; 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void finishParsingChildren(); 118f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 119f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch enum PendingSheetType { None, NonBlocking, Blocking }; 120f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void addPendingSheet(PendingSheetType); 121f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void removePendingSheet(); 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1235af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkeprivate: 1245af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke HTMLLinkElement(const QualifiedName&, Document*, bool createdByParser); 12592f04dcc93ce5d84e28b0ac2b113dad5cc99a0d9Kristian Monsen 1266c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen enum DisabledState { 1276c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen Unset, 1286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen EnabledViaScript, 1296c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen Disabled 1306c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen }; 131f91ac8eab3399adb5325701bebe0590a77e49df7Leon Clarke 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CachedResourceHandle<CachedCSSStyleSheet> m_cachedSheet; 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<CSSStyleSheet> m_sheet; 134f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if ENABLE(LINK_PREFETCH) 1352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch CachedResourceHandle<CachedResource> m_cachedLinkResource; 136f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch Timer<HTMLLinkElement> m_onloadTimer; 137f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif 138635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project KURL m_url; 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String m_type; 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String m_media; 1416c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen DisabledState m_disabledState; 1426c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen RelAttribute m_relAttribute; 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_loading; 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_createdByParser; 1452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block bool m_isInShadowTree; 146f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 147f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch PendingSheetType m_pendingSheetType; 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} //namespace 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 153