18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 Nikolas Zimmermann <zimmermann@kde.org> 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef ScriptElement_h 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define ScriptElement_h 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CachedResourceClient.h" 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CachedResourceHandle.h" 2681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <wtf/text/TextPosition.h> 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass CachedScript; 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Element; 326b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerclass ScriptElement; 33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectclass ScriptSourceCode; 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 356b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerclass ScriptElement : private CachedResourceClient { 36ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WTF_MAKE_FAST_ALLOCATED; 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 386b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner ScriptElement(Element*, bool createdByParser, bool isEvaluated); 396b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner virtual ~ScriptElement(); 4081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 416b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner Element* element() const { return m_element; } 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch enum LegacyTypeSupport { DisallowLegacyTypeInTypeAttribute, AllowLegacyTypeInTypeAttribute }; 4481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool prepareScript(const TextPosition1& scriptStartPosition = TextPosition1::minimumPosition(), LegacyTypeSupport = DisallowLegacyTypeInTypeAttribute); 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch String scriptCharset() const { return m_characterEncoding; } 476b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner String scriptContent() const; 486b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner void executeScript(const ScriptSourceCode&); 496b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner void execute(CachedScript*); 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 516b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // XML parser calls these 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void dispatchLoadEvent() = 0; 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void dispatchErrorEvent() = 0; 5481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool isScriptTypeSupported(LegacyTypeSupport) const; 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 56f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch bool haveFiredLoadEvent() const { return m_haveFiredLoad; } 5781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool willBeParserExecuted() const { return m_willBeParserExecuted; } 5881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool readyToBeParserExecuted() const { return m_readyToBeParserExecuted; } 5981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool willExecuteWhenDocumentFinishedParsing() const { return m_willExecuteWhenDocumentFinishedParsing; } 6081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch CachedResourceHandle<CachedScript> cachedScript() { return m_cachedScript; } 61f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprotected: 63f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void setHaveFiredLoadEvent(bool haveFiredLoad) { m_haveFiredLoad = haveFiredLoad; } 6481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool isParserInserted() const { return m_parserInserted; } 6581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool alreadyStarted() const { return m_alreadyStarted; } 662bde8e466a4451c7319e3a072d118917957d6554Steve Block bool forceAsync() const { return m_forceAsync; } 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 686b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner // Helper functions used by our parent classes. 6981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void insertedIntoDocument(); 706b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner void removedFromDocument(); 716b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner void childrenChanged(); 726b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner void handleSourceAttribute(const String& sourceUrl); 732bde8e466a4451c7319e3a072d118917957d6554Steve Block void handleAsyncAttribute(); 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 756b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerprivate: 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool ignoresLoadRequest() const; 7781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool isScriptForEventSupported() const; 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool requestScript(const String& sourceUrl); 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void stopLoadRequest(); 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void notifyFinished(CachedResource*); 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual String sourceAttributeValue() const = 0; 856b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner virtual String charsetAttributeValue() const = 0; 866b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner virtual String typeAttributeValue() const = 0; 876b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner virtual String languageAttributeValue() const = 0; 886b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner virtual String forAttributeValue() const = 0; 896b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner virtual String eventAttributeValue() const = 0; 906b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner virtual bool asyncAttributeValue() const = 0; 916b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner virtual bool deferAttributeValue() const = 0; 9281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual bool hasSourceAttribute() const = 0; 936b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Element* m_element; 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CachedResourceHandle<CachedScript> m_cachedScript; 9681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool m_parserInserted : 1; 9781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool m_isExternalScript : 1; 9881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool m_alreadyStarted : 1; 9981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool m_haveFiredLoad : 1; 10081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool m_willBeParserExecuted : 1; // Same as "The parser will handle executing the script." 10181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool m_readyToBeParserExecuted : 1; 10281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch bool m_willExecuteWhenDocumentFinishedParsing : 1; 1032bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_forceAsync : 1; 1042bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_willExecuteInOrder : 1; 10581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch String m_characterEncoding; 10681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch String m_fallbackCharacterEncoding; 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 109635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectScriptElement* toScriptElement(Element*); 110635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 114