WebCore:

2008-06-15  Darin Adler  <darin@apple.com>

        Reviewed and tweaked by Sam Weinig.

        Fix for <rdar://problem/5908591>
        https://bugs.webkit.org/show_bug.cgi?id=18743

        Makes DOMImplementation per-document.

        Test: http/tests/security/cross-frame-access-DOMImplementation.html

        * bindings/objc/DOMImplementationFront.cpp:
        (WebCore::DOMImplementationFront::getInterface):
        * bindings/objc/DOMImplementationFront.h:
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::hasFeature):
        (WebCore::DOMImplementation::createDocumentType):
        (WebCore::DOMImplementation::getInterface):
        (WebCore::DOMImplementation::createDocument):
        (WebCore::DOMImplementation::createHTMLDocument):
        * dom/DOMImplementation.h:
        (WebCore::DOMImplementation::create):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::implementation):
        * dom/Document.h:
        (WebCore::Document::create):
        (WebCore::Document::createXHTML):
        * dom/DocumentType.cpp:
        * dom/DocumentType.h:
        (WebCore::DocumentType::create):
        (WebCore::DocumentType::entities):
        (WebCore::DocumentType::notations):
        (WebCore::DocumentType::name):
        (WebCore::DocumentType::publicId):
        (WebCore::DocumentType::systemId):
        (WebCore::DocumentType::internalSubset):
        * dom/Node.cpp:
        (WebCore::Node::isSupported):
        * dom/XMLTokenizer.cpp:
        (WebCore::XMLTokenizer::internalSubset):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument):
        * html/HTMLDocument.h:
        (WebCore::HTMLDocument::create):
        (WebCore::HTMLDocument::isHTMLDocument):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::parseDoctypeToken):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::HTMLViewSourceDocument):
        (WebCore::HTMLViewSourceDocument::createTokenizer):
        * html/HTMLViewSourceDocument.h:
        (WebCore::HTMLViewSourceDocument::create):
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::ensureSVGFontData):
        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocument::FTPDirectoryDocument):
        * loader/FTPDirectoryDocument.h:
        (WebCore::FTPDirectoryDocument::create):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::begin):
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::ImageDocument):
        * loader/ImageDocument.h:
        (WebCore::ImageDocument::create):
        (WebCore::ImageDocument::isImageDocument):
        * loader/PluginDocument.cpp:
        (WebCore::PluginDocument::PluginDocument):
        * loader/PluginDocument.h:
        (WebCore::PluginDocument::create):
        (WebCore::PluginDocument::isPluginDocument):
        * loader/TextDocument.cpp:
        (WebCore::TextTokenizer::checkBuffer):
        (WebCore::TextDocument::TextDocument):
        (WebCore::createTextTokenizer):
        * loader/TextDocument.h:
        (WebCore::TextDocument::create):
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::SVGDocument):
        * svg/SVGDocument.h:
        (WebCore::SVGDocument::create):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::isSupported):
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::isValid):
        * xml/DOMParser.cpp:
        (WebCore::DOMParser::parseFromString):

LayoutTests:

2008-06-15  Darin Adler  <darin@apple.com>

        Reviewed and tweaked by Sam Weinig.

        Test for <rdar://problem/5908591>
        https://bugs.webkit.org/show_bug.cgi?id=18743

        * http/tests/security/cross-frame-access-DOMImplementation-expected.txt: Added.
        * http/tests/security/cross-frame-access-DOMImplementation.html: Added.
        * http/tests/security/resources/cross-frame-iframe-for-DOMImplementation-test.html: Added.



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@34574 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/loader/TextDocument.cpp b/WebCore/loader/TextDocument.cpp
index b5124b4..6b06ede 100644
--- a/WebCore/loader/TextDocument.cpp
+++ b/WebCore/loader/TextDocument.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
+ * Copyright (C) 2006, 2007, 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
@@ -38,6 +38,38 @@
 
 using namespace HTMLNames;
 
+class TextTokenizer : public Tokenizer {
+public:
+    TextTokenizer(Document*);
+    TextTokenizer(HTMLViewSourceDocument*);
+
+    virtual bool write(const SegmentedString&, bool appendData);
+    virtual void finish();
+    virtual bool isWaitingForScripts() const;
+    
+    inline void checkBuffer(int len = 10)
+    {
+        if ((m_dest - m_buffer) > m_size - len) {
+            // Enlarge buffer
+            int newSize = std::max(m_size * 2, m_size + len);
+            int oldOffset = m_dest - m_buffer;
+            m_buffer = static_cast<UChar*>(fastRealloc(m_buffer, newSize * sizeof(UChar)));
+            m_dest = m_buffer + oldOffset;
+            m_size = newSize;
+        }
+    }
+        
+private:
+    Document* m_doc;
+    Element* m_preElement;
+
+    bool m_skipLF;
+    
+    int m_size;
+    UChar* m_buffer;
+    UChar* m_dest;
+};
+
 TextTokenizer::TextTokenizer(Document* doc)
     : m_doc(doc)
     , m_preElement(0)
@@ -137,8 +169,8 @@
     return false;
 }
 
-TextDocument::TextDocument(DOMImplementation* implementation, Frame* frame)
-    : HTMLDocument(implementation, frame)
+TextDocument::TextDocument(Frame* frame)
+    : HTMLDocument(frame)
 {
 }
 
@@ -147,4 +179,9 @@
     return new TextTokenizer(this);
 }
 
+Tokenizer* createTextTokenizer(HTMLViewSourceDocument* document)
+{
+    return new TextTokenizer(document);
+}
+
 }