1d0825bca7fe65beaee391d30da42e937db621564Steve Block/* 2d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2009 Google Inc. All rights reserved. 3d0825bca7fe65beaee391d30da42e937db621564Steve Block * 4d0825bca7fe65beaee391d30da42e937db621564Steve Block * Redistribution and use in source and binary forms, with or without 5d0825bca7fe65beaee391d30da42e937db621564Steve Block * modification, are permitted provided that the following conditions are 6d0825bca7fe65beaee391d30da42e937db621564Steve Block * met: 7d0825bca7fe65beaee391d30da42e937db621564Steve Block * 8d0825bca7fe65beaee391d30da42e937db621564Steve Block * * Redistributions of source code must retain the above copyright 9d0825bca7fe65beaee391d30da42e937db621564Steve Block * notice, this list of conditions and the following disclaimer. 10d0825bca7fe65beaee391d30da42e937db621564Steve Block * * Redistributions in binary form must reproduce the above 11d0825bca7fe65beaee391d30da42e937db621564Steve Block * copyright notice, this list of conditions and the following disclaimer 12d0825bca7fe65beaee391d30da42e937db621564Steve Block * in the documentation and/or other materials provided with the 13d0825bca7fe65beaee391d30da42e937db621564Steve Block * distribution. 14d0825bca7fe65beaee391d30da42e937db621564Steve Block * * Neither the name of Google Inc. nor the names of its 15d0825bca7fe65beaee391d30da42e937db621564Steve Block * contributors may be used to endorse or promote products derived from 16d0825bca7fe65beaee391d30da42e937db621564Steve Block * this software without specific prior written permission. 17d0825bca7fe65beaee391d30da42e937db621564Steve Block * 18d0825bca7fe65beaee391d30da42e937db621564Steve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19d0825bca7fe65beaee391d30da42e937db621564Steve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20d0825bca7fe65beaee391d30da42e937db621564Steve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21d0825bca7fe65beaee391d30da42e937db621564Steve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22d0825bca7fe65beaee391d30da42e937db621564Steve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23d0825bca7fe65beaee391d30da42e937db621564Steve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24d0825bca7fe65beaee391d30da42e937db621564Steve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25d0825bca7fe65beaee391d30da42e937db621564Steve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26d0825bca7fe65beaee391d30da42e937db621564Steve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27d0825bca7fe65beaee391d30da42e937db621564Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28d0825bca7fe65beaee391d30da42e937db621564Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29d0825bca7fe65beaee391d30da42e937db621564Steve Block */ 30d0825bca7fe65beaee391d30da42e937db621564Steve Block 31d0825bca7fe65beaee391d30da42e937db621564Steve Block#ifndef WebPageSerializer_h 32d0825bca7fe65beaee391d30da42e937db621564Steve Block#define WebPageSerializer_h 33d0825bca7fe65beaee391d30da42e937db621564Steve Block 34d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "WebCommon.h" 35d0825bca7fe65beaee391d30da42e937db621564Steve Block 36d0825bca7fe65beaee391d30da42e937db621564Steve Blocknamespace WebKit { 372bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass WebCString; 38d0825bca7fe65beaee391d30da42e937db621564Steve Blockclass WebFrame; 39d0825bca7fe65beaee391d30da42e937db621564Steve Blockclass WebPageSerializerClient; 40d0825bca7fe65beaee391d30da42e937db621564Steve Blockclass WebString; 41d0825bca7fe65beaee391d30da42e937db621564Steve Blockclass WebURL; 422bde8e466a4451c7319e3a072d118917957d6554Steve Blockclass WebView; 43d0825bca7fe65beaee391d30da42e937db621564Steve Blocktemplate <typename T> class WebVector; 44d0825bca7fe65beaee391d30da42e937db621564Steve Block 45d0825bca7fe65beaee391d30da42e937db621564Steve Block// Get html data by serializing all frames of current page with lists 46d0825bca7fe65beaee391d30da42e937db621564Steve Block// which contain all resource links that have local copy. 47d0825bca7fe65beaee391d30da42e937db621564Steve Blockclass WebPageSerializer { 48d0825bca7fe65beaee391d30da42e937db621564Steve Blockpublic: 49d0825bca7fe65beaee391d30da42e937db621564Steve Block // This function will find out all frames and serialize them to HTML data. 50d0825bca7fe65beaee391d30da42e937db621564Steve Block // We have a data buffer to temporary saving generated html data. We will 51d0825bca7fe65beaee391d30da42e937db621564Steve Block // sequentially call WebPageSeriazlierClient once the data buffer is full. 52d0825bca7fe65beaee391d30da42e937db621564Steve Block // 53d0825bca7fe65beaee391d30da42e937db621564Steve Block // Return false means no available frame has been serialized, otherwise 54d0825bca7fe65beaee391d30da42e937db621564Steve Block // return true. 55d0825bca7fe65beaee391d30da42e937db621564Steve Block // 56d0825bca7fe65beaee391d30da42e937db621564Steve Block // The parameter frame specifies which frame need to be serialized. 57d0825bca7fe65beaee391d30da42e937db621564Steve Block // The parameter recursive specifies whether we need to 58d0825bca7fe65beaee391d30da42e937db621564Steve Block // serialize all sub frames of the specified frame or not. 59d0825bca7fe65beaee391d30da42e937db621564Steve Block // The parameter client specifies the pointer of interface 60d0825bca7fe65beaee391d30da42e937db621564Steve Block // WebPageSerializerClient providing a sink interface to receive the 61d0825bca7fe65beaee391d30da42e937db621564Steve Block // individual chunks of data to be saved. 62d0825bca7fe65beaee391d30da42e937db621564Steve Block // The parameter links contain original URLs of all saved links. 63d0825bca7fe65beaee391d30da42e937db621564Steve Block // The parameter localPaths contain corresponding local file paths of all 64d0825bca7fe65beaee391d30da42e937db621564Steve Block // saved links, which matched with vector:links one by one. 65d0825bca7fe65beaee391d30da42e937db621564Steve Block // The parameter localDirectoryName is relative path of directory which 66d0825bca7fe65beaee391d30da42e937db621564Steve Block // contain all saved auxiliary files included all sub frames and resources. 67d0825bca7fe65beaee391d30da42e937db621564Steve Block WEBKIT_API static bool serialize(WebFrame* frame, 68d0825bca7fe65beaee391d30da42e937db621564Steve Block bool recursive, 69d0825bca7fe65beaee391d30da42e937db621564Steve Block WebPageSerializerClient* client, 70d0825bca7fe65beaee391d30da42e937db621564Steve Block const WebVector<WebURL>& links, 71d0825bca7fe65beaee391d30da42e937db621564Steve Block const WebVector<WebString>& localPaths, 72d0825bca7fe65beaee391d30da42e937db621564Steve Block const WebString& localDirectoryName); 73d0825bca7fe65beaee391d30da42e937db621564Steve Block 742bde8e466a4451c7319e3a072d118917957d6554Steve Block // Retrieve all the resource for the passed view, including the main frame 752bde8e466a4451c7319e3a072d118917957d6554Steve Block // and sub-frames. Returns true if all resources were retrieved 762bde8e466a4451c7319e3a072d118917957d6554Steve Block // successfully. 772bde8e466a4451c7319e3a072d118917957d6554Steve Block WEBKIT_API static bool retrieveAllResources(WebView*, 782bde8e466a4451c7319e3a072d118917957d6554Steve Block const WebVector<WebCString>& supportedSchemes, 792bde8e466a4451c7319e3a072d118917957d6554Steve Block WebVector<WebURL>* resources, 802bde8e466a4451c7319e3a072d118917957d6554Steve Block WebVector<WebURL>* frames); 812bde8e466a4451c7319e3a072d118917957d6554Steve Block 82d0825bca7fe65beaee391d30da42e937db621564Steve Block // FIXME: The following are here for unit testing purposes. Consider 83d0825bca7fe65beaee391d30da42e937db621564Steve Block // changing the unit tests instead. 84d0825bca7fe65beaee391d30da42e937db621564Steve Block 85d0825bca7fe65beaee391d30da42e937db621564Steve Block // Generate the META for charset declaration. 86d0825bca7fe65beaee391d30da42e937db621564Steve Block WEBKIT_API static WebString generateMetaCharsetDeclaration(const WebString& charset); 87d0825bca7fe65beaee391d30da42e937db621564Steve Block // Generate the MOTW declaration. 88d0825bca7fe65beaee391d30da42e937db621564Steve Block WEBKIT_API static WebString generateMarkOfTheWebDeclaration(const WebURL& url); 89d0825bca7fe65beaee391d30da42e937db621564Steve Block // Generate the default base tag declaration. 90d0825bca7fe65beaee391d30da42e937db621564Steve Block WEBKIT_API static WebString generateBaseTagDeclaration(const WebString& baseTarget); 91d0825bca7fe65beaee391d30da42e937db621564Steve Block}; 92d0825bca7fe65beaee391d30da42e937db621564Steve Block 932bde8e466a4451c7319e3a072d118917957d6554Steve Block} // namespace WebKit 94d0825bca7fe65beaee391d30da42e937db621564Steve Block 95d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 96