Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(197)

Unified Diff: trunk/Source/core/page/PageSerializer.cpp

Issue 73673003: Revert 162155 "This review merges the two existing page serializ..." (Closed) Base URL: svn://svn.chromium.org/blink/
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « trunk/Source/core/page/PageSerializer.h ('k') | trunk/Source/web/WebPageSerializer.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: trunk/Source/core/page/PageSerializer.cpp
===================================================================
--- trunk/Source/core/page/PageSerializer.cpp (revision 162155)
+++ trunk/Source/core/page/PageSerializer.cpp (working copy)
@@ -53,7 +53,6 @@
#include "core/html/HTMLInputElement.h"
#include "core/html/HTMLLinkElement.h"
#include "core/html/HTMLStyleElement.h"
-#include "core/html/ImageDocument.h"
#include "core/html/parser/HTMLMetaCharsetParser.h"
#include "core/frame/Frame.h"
#include "core/page/Page.h"
@@ -106,11 +105,12 @@
virtual ~SerializerMarkupAccumulator();
protected:
- virtual void appendText(StringBuilder&, Text*) OVERRIDE;
- virtual void appendElement(StringBuilder&, Element*, Namespaces*) OVERRIDE;
- virtual void appendCustomAttributes(StringBuilder&, Element*, Namespaces*) OVERRIDE;
- virtual void appendEndTag(Node*) OVERRIDE;
+ virtual void appendText(StringBuilder& out, Text*);
+ virtual void appendElement(StringBuilder& out, Element*, Namespaces*);
+ virtual void appendCustomAttributes(StringBuilder& out, Element*, Namespaces*);
+ virtual void appendEndTag(Node*);
+private:
PageSerializer* m_serializer;
Document* m_document;
};
@@ -126,32 +126,28 @@
{
}
-void SerializerMarkupAccumulator::appendText(StringBuilder& result, Text* text)
+void SerializerMarkupAccumulator::appendText(StringBuilder& out, Text* text)
{
Element* parent = text->parentElement();
if (parent && !shouldIgnoreElement(parent))
- MarkupAccumulator::appendText(result, text);
+ MarkupAccumulator::appendText(out, text);
}
-void SerializerMarkupAccumulator::appendElement(StringBuilder& result, Element* element, Namespaces* namespaces)
+void SerializerMarkupAccumulator::appendElement(StringBuilder& out, Element* element, Namespaces* namespaces)
{
if (!shouldIgnoreElement(element))
- MarkupAccumulator::appendElement(result, element, namespaces);
+ MarkupAccumulator::appendElement(out, element, namespaces);
- // FIXME: Refactor MarkupAccumulator so it is easier to append an element like this, without special cases for XHTML
if (element->hasTagName(HTMLNames::headTag)) {
- result.appendLiteral("<meta charset=\"");
- result.append(m_document->charset());
- if (m_document->isXHTMLDocument())
- result.appendLiteral("\" />");
- else
- result.appendLiteral("\">");
+ out.append("<meta charset=\"");
+ out.append(m_document->charset());
+ out.append("\">");
}
// FIXME: For object (plugins) tags and video tag we could replace them by an image of their current contents.
}
-void SerializerMarkupAccumulator::appendCustomAttributes(StringBuilder& result, Element* element, Namespaces* namespaces)
+void SerializerMarkupAccumulator::appendCustomAttributes(StringBuilder& out, Element* element, Namespaces* namespaces)
{
if (!element->isFrameOwnerElement())
return;
@@ -167,7 +163,7 @@
// We need to give a fake location to blank frames so they can be referenced by the serialized frame.
url = m_serializer->urlForBlankFrame(frame);
- appendAttribute(result, element, Attribute(frameOwnerURLAttributeName(*frameOwner), url.string()), namespaces);
+ appendAttribute(out, element, Attribute(frameOwnerURLAttributeName(*frameOwner), url.string()), namespaces);
}
void SerializerMarkupAccumulator::appendEndTag(Node* node)
@@ -176,89 +172,8 @@
MarkupAccumulator::appendEndTag(node);
}
-class LinkChangeSerializerMarkupAccumulator : public SerializerMarkupAccumulator {
-public:
- LinkChangeSerializerMarkupAccumulator(PageSerializer*, Document*, Vector<Node*>*, LinkLocalPathMap*, String);
-
-protected:
- virtual void appendElement(StringBuilder&, Element*, Namespaces*) OVERRIDE;
- virtual void appendAttribute(StringBuilder&, Element*, const Attribute&, Namespaces*) OVERRIDE;
-
-private:
- // m_replaceLinks include all pair of local resource path and corresponding original link.
- LinkLocalPathMap* m_replaceLinks;
- String m_directoryName;
-};
-
-LinkChangeSerializerMarkupAccumulator::LinkChangeSerializerMarkupAccumulator(PageSerializer* serializer, Document* document, Vector<Node*>* nodes, LinkLocalPathMap* links, String directoryName)
- : SerializerMarkupAccumulator(serializer, document, nodes)
- , m_replaceLinks(links)
- , m_directoryName(directoryName)
-{
-}
-
-void LinkChangeSerializerMarkupAccumulator::appendElement(StringBuilder& result, Element* element, Namespaces* namespaces)
-{
- // FIXME: We could move the uncommenting to appendOpenTag and appendCloseTag, or just remove it
- if (element->hasTagName(HTMLNames::baseTag)) {
- // Comment the BASE tag when serializing dom.
- result.append("<!--");
- } else if (element->hasTagName(HTMLNames::htmlTag)) {
- // Add MOTW (Mark of the Web) declaration before html tag.
- // See http://msdn2.microsoft.com/en-us/library/ms537628(VS.85).aspx.
- result.append(String::format("\n<!-- saved from url=(%04d)%s -->\n",
- static_cast<int>(m_document->url().string().utf8().length()),
- m_document->url().string().utf8().data()));
- }
-
- SerializerMarkupAccumulator::appendElement(result, element, namespaces);
-
- if (element->hasTagName(HTMLNames::baseTag)) {
- // Comment the BASE tag when serializing dom.
- result.appendLiteral("-->");
-
- // FIXME: Refactor MarkupAccumulator so it is easier to append an element like this, without special cases for XHTML
- // Append a new base tag declaration.
- result.appendLiteral("<base href=\".\"");
- if (!m_document->baseTarget().isEmpty()) {
- result.appendLiteral(" target=\"");
- result.append(m_document->baseTarget());
- result.append('"');
- }
- if (m_document->isXHTMLDocument())
- result.appendLiteral(" />");
- else
- result.appendLiteral(">");
- }
-}
-void LinkChangeSerializerMarkupAccumulator::appendAttribute(StringBuilder& result, Element* element, const Attribute& attribute, Namespaces* namespaces)
-{
- if (m_replaceLinks && element->isURLAttribute(attribute) && !element->isJavaScriptURLAttribute(attribute)) {
-
- String completeURL = m_document->completeURL(attribute.value());
-
- if (m_replaceLinks->contains(completeURL)) {
- // FIXME: Refactor MarkupAccumulator so it is easier to append an attribute like this.
- result.append(' ');
- result.append(attribute.name().toString());
- result.appendLiteral("=\"");
- if (!m_directoryName.isEmpty()) {
- result.appendLiteral("./");
- result.append(m_directoryName);
- result.append('/');
- }
- result.append(m_replaceLinks->get(completeURL));
- result.appendLiteral("\"");
- return;
- }
- }
- MarkupAccumulator::appendAttribute(result, element, attribute, namespaces);
-}
-
-PageSerializer::PageSerializer(Vector<SerializedResource>* resources, LinkLocalPathMap* urls, String directory)
+PageSerializer::PageSerializer(Vector<SerializedResource>* resources)
: m_resources(resources)
- , m_URLs(urls)
- , m_directory(directory)
, m_blankFrameCounter(0)
{
}
@@ -284,21 +199,15 @@
return;
}
- // If frame is an image document, add the image and don't continue
- if (document->isImageDocument()) {
- ImageDocument* imageDocument = toImageDocument(document);
- addImageToResources(imageDocument->cachedImage(), imageDocument->imageElement()->renderer(), url);
- return;
- }
-
Vector<Node*> nodes;
- OwnPtr<SerializerMarkupAccumulator> accumulator;
- if (m_URLs)
- accumulator = adoptPtr(new LinkChangeSerializerMarkupAccumulator(this, document, &nodes, m_URLs, m_directory));
- else
- accumulator = adoptPtr(new SerializerMarkupAccumulator(this, document, &nodes));
- String text = accumulator->serializeNodes(document, IncludeNode);
+ SerializerMarkupAccumulator accumulator(this, document, &nodes);
WTF::TextEncoding textEncoding(document->charset());
+ CString data;
+ if (!textEncoding.isValid()) {
+ // FIXME: iframes used as images trigger this. We should deal with them correctly.
+ return;
+ }
+ String text = accumulator.serializeNodes(document, IncludeNode);
CString frameHTML = textEncoding.normalizeAndEncode(text, WTF::EntitiesForUnencodables);
m_resources->append(SerializedResource(url, document->suggestedMIMEType(), SharedBuffer::create(frameHTML.data(), frameHTML.length())));
m_resourceURLs.add(url);
@@ -310,10 +219,8 @@
Element* element = toElement(node);
// We have to process in-line style as it might contain some resources (typically background images).
- if (element->isStyledElement()) {
+ if (element->isStyledElement())
retrieveResourcesForProperties(element->inlineStyle(), document);
- retrieveResourcesForProperties(element->presentationAttributeStyle(), document);
- }
if (element->hasTagName(HTMLNames::imgTag)) {
HTMLImageElement* imageElement = toHTMLImageElement(element);
@@ -404,7 +311,7 @@
if (!shouldAddURL(url))
return;
- if (!image || !image->hasImage() || image->image() == Image::nullImage())
+ if (!image || image->image() == Image::nullImage())
return;
RefPtr<SharedBuffer> data = imageRenderer ? image->imageForRenderer(imageRenderer)->data() : 0;
« no previous file with comments | « trunk/Source/core/page/PageSerializer.h ('k') | trunk/Source/web/WebPageSerializer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698