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);
+}
+
}