1/* 2 * Copyright (C) 2010. Adam Barth. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. Neither the name of Adam Barth. ("Adam Barth") nor the names of 14 * its contributors may be used to endorse or promote products derived 15 * from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29#ifndef DocumentWriter_h 30#define DocumentWriter_h 31 32#include "URL.h" 33#include <wtf/text/WTFString.h> 34 35namespace WebCore { 36 37class Document; 38class DocumentParser; 39class Frame; 40class SecurityOrigin; 41class TextResourceDecoder; 42 43class DocumentWriter { 44 WTF_MAKE_NONCOPYABLE(DocumentWriter); 45public: 46 explicit DocumentWriter(Frame*); 47 48 // This is only called by ScriptController::executeIfJavaScriptURL 49 // and always contains the result of evaluating a javascript: url. 50 void replaceDocument(const String&, Document* ownerDocument); 51 52 void begin(); 53 void begin(const URL&, bool dispatchWindowObjectAvailable = true, Document* ownerDocument = 0); 54 void addData(const char* bytes, size_t length); 55 void end(); 56 57 void setFrame(Frame* frame) { m_frame = frame; } 58 59 void setEncoding(const String& encoding, bool userChosen); 60 61 const String& mimeType() const { return m_mimeType; } 62 void setMIMEType(const String& type) { m_mimeType = type; } 63 64 // Exposed for DocumentParser::appendBytes. 65 TextResourceDecoder* createDecoderIfNeeded(); 66 void reportDataReceived(); 67 68 void setDocumentWasLoadedAsPartOfNavigation(); 69 70private: 71 PassRefPtr<Document> createDocument(const URL&); 72 void clear(); 73 74 Frame* m_frame; 75 76 bool m_hasReceivedSomeData; 77 String m_mimeType; 78 79 bool m_encodingWasChosenByUser; 80 String m_encoding; 81 RefPtr<TextResourceDecoder> m_decoder; 82 RefPtr<DocumentParser> m_parser; 83 84 enum WriterState { 85 NotStartedWritingState, 86 StartedWritingState, 87 FinishedWritingState, 88 }; 89 WriterState m_state; 90}; 91 92} // namespace WebCore 93 94#endif // DocumentWriter_h 95