diff -r 000000000000 -r 4f2f89ce4247 WebCore/html/LegacyPreloadScanner.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WebCore/html/LegacyPreloadScanner.h Fri Sep 17 09:02:29 2010 +0300 @@ -0,0 +1,144 @@ +/* + * Copyright (C) 2008 Apple Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef LegacyPreloadScanner_h +#define LegacyPreloadScanner_h + +#include "AtomicString.h" +#include "SegmentedString.h" +#include +#include + +namespace WebCore { + + class CachedResource; + class CachedResourceClient; + class Document; + + class LegacyPreloadScanner : public Noncopyable { + public: + LegacyPreloadScanner(Document*); + ~LegacyPreloadScanner(); + void begin(); + void write(const SegmentedString&); + void end(); + bool inProgress() const { return m_inProgress; } + + bool scanningBody() const; + + static unsigned consumeEntity(SegmentedString&, bool& notEnoughCharacters); + + private: + void tokenize(const SegmentedString&); + void reset(); + + void emitTag(); + void emitCharacter(UChar); + + void tokenizeCSS(UChar); + void emitCSSRule(); + + void processAttribute(); + + + void clearLastCharacters(); + void rememberCharacter(UChar); + bool lastCharactersMatch(const char*, unsigned count) const; + + bool m_inProgress; + SegmentedString m_source; + + enum State { + Data, + EntityData, + TagOpen, + CloseTagOpen, + TagName, + BeforeAttributeName, + AttributeName, + AfterAttributeName, + BeforeAttributeValue, + AttributeValueDoubleQuoted, + AttributeValueSingleQuoted, + AttributeValueUnquoted, + EntityInAttributeValue, + BogusComment, + MarkupDeclarationOpen, + CommentStart, + CommentStartDash, + Comment, + CommentEndDash, + CommentEnd + }; + State m_state; + bool m_escape; + enum ContentModel { + PCDATA, + RCDATA, + CDATA, + PLAINTEXT + }; + ContentModel m_contentModel; + unsigned m_commentPos; + State m_stateBeforeEntityInAttributeValue; + + static const unsigned lastCharactersBufferSize = 8; + UChar m_lastCharacters[lastCharactersBufferSize]; + unsigned m_lastCharacterIndex; + + bool m_closeTag; + Vector m_tagName; + Vector m_attributeName; + Vector m_attributeValue; + AtomicString m_lastStartTag; + + String m_urlToLoad; + String m_charset; + bool m_linkIsStyleSheet; + + enum CSSState { + CSSInitial, + CSSMaybeComment, + CSSComment, + CSSMaybeCommentEnd, + CSSRuleStart, + CSSRule, + CSSAfterRule, + CSSRuleValue, + CSSAfterRuleValue + }; + CSSState m_cssState; + Vector m_cssRule; + Vector m_cssRuleValue; + + double m_timeUsed; + + bool m_bodySeen; + Document* m_document; + }; + +} + +#endif