| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 Frame* frame = frameOwner.contentFrame(); | 183 Frame* frame = frameOwner.contentFrame(); |
| 184 // FIXME: RemoteFrames not currently supported here. | 184 // FIXME: RemoteFrames not currently supported here. |
| 185 if (!frame || !frame->isLocalFrame()) | 185 if (!frame || !frame->isLocalFrame()) |
| 186 return; | 186 return; |
| 187 | 187 |
| 188 KURL url = toLocalFrame(frame)->document()->url(); | 188 KURL url = toLocalFrame(frame)->document()->url(); |
| 189 if (url.isValid() && !url.protocolIsAbout()) | 189 if (url.isValid() && !url.protocolIsAbout()) |
| 190 return; | 190 return; |
| 191 | 191 |
| 192 // We need to give a fake location to blank frames so they can be referenced
by the serialized frame. | 192 // We need to give a fake location to blank frames so they can be referenced
by the serialized frame. |
| 193 url = m_serializer->urlForBlankFrame(toLocalFrame(frame)); | 193 url = m_serializer->urlForBlankFrame(*toLocalFrame(frame)); |
| 194 appendAttribute(result, element, Attribute(frameOwnerURLAttributeName(frameO
wner), AtomicString(url.string())), namespaces); | 194 appendAttribute(result, element, Attribute(frameOwnerURLAttributeName(frameO
wner), AtomicString(url.string())), namespaces); |
| 195 } | 195 } |
| 196 | 196 |
| 197 void SerializerMarkupAccumulator::appendStartTag(Node& node, Namespaces* namespa
ces) | 197 void SerializerMarkupAccumulator::appendStartTag(Node& node, Namespaces* namespa
ces) |
| 198 { | 198 { |
| 199 MarkupAccumulator::appendStartTag(node, namespaces); | 199 MarkupAccumulator::appendStartTag(node, namespaces); |
| 200 m_nodes.append(&node); | 200 m_nodes.append(&node); |
| 201 } | 201 } |
| 202 | 202 |
| 203 void SerializerMarkupAccumulator::appendEndTag(const Element& element) | 203 void SerializerMarkupAccumulator::appendEndTag(const Element& element) |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 297 } | 297 } |
| 298 | 298 |
| 299 | 299 |
| 300 PageSerializer::PageSerializer(Vector<SerializedResource>* resources, PassOwnPtr
<Delegate> delegate) | 300 PageSerializer::PageSerializer(Vector<SerializedResource>* resources, PassOwnPtr
<Delegate> delegate) |
| 301 : m_resources(resources) | 301 : m_resources(resources) |
| 302 , m_blankFrameCounter(0) | 302 , m_blankFrameCounter(0) |
| 303 , m_delegate(delegate) | 303 , m_delegate(delegate) |
| 304 { | 304 { |
| 305 } | 305 } |
| 306 | 306 |
| 307 void PageSerializer::serialize(Page* page) | 307 void PageSerializer::serializeFrame(const LocalFrame& frame) |
| 308 { | 308 { |
| 309 serializeFrame(page->deprecatedLocalMainFrame()); | 309 ASSERT(frame.document()); |
| 310 } | 310 Document& document = *frame.document(); |
| 311 | |
| 312 void PageSerializer::serializeFrame(LocalFrame* frame) | |
| 313 { | |
| 314 ASSERT(frame->document()); | |
| 315 Document& document = *frame->document(); | |
| 316 KURL url = document.url(); | 311 KURL url = document.url(); |
| 317 // FIXME: This probably wants isAboutBlankURL? to exclude other about: urls
(like about:srcdoc)? | 312 // FIXME: This probably wants isAboutBlankURL? to exclude other about: urls
(like about:srcdoc)? |
| 318 if (!url.isValid() || url.protocolIsAbout()) { | 313 if (!url.isValid() || url.protocolIsAbout()) { |
| 319 // For blank frames we generate a fake URL so they can be referenced by
their containing frame. | 314 // For blank frames we generate a fake URL so they can be referenced by
their containing frame. |
| 320 url = urlForBlankFrame(frame); | 315 url = urlForBlankFrame(frame); |
| 321 } | 316 } |
| 322 | 317 |
| 323 if (m_resourceURLs.contains(url)) { | 318 if (m_resourceURLs.contains(url)) { |
| 324 // FIXME: We could have 2 frame with the same URL but which were dynamic
ally changed and have now | 319 // FIXME: We could have 2 frame with the same URL but which were dynamic
ally changed and have now |
| 325 // different content. So we should serialize both and somehow rename the
frame src in the containing | 320 // different content. So we should serialize both and somehow rename the
frame src in the containing |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 KURL url = document.completeURL(linkElement.getAttribute(HTMLNam
es::hrefAttr)); | 373 KURL url = document.completeURL(linkElement.getAttribute(HTMLNam
es::hrefAttr)); |
| 379 serializeCSSStyleSheet(*sheet, url); | 374 serializeCSSStyleSheet(*sheet, url); |
| 380 ASSERT(m_resourceURLs.contains(url)); | 375 ASSERT(m_resourceURLs.contains(url)); |
| 381 } | 376 } |
| 382 } else if (isHTMLStyleElement(element)) { | 377 } else if (isHTMLStyleElement(element)) { |
| 383 HTMLStyleElement& styleElement = toHTMLStyleElement(element); | 378 HTMLStyleElement& styleElement = toHTMLStyleElement(element); |
| 384 if (CSSStyleSheet* sheet = styleElement.sheet()) | 379 if (CSSStyleSheet* sheet = styleElement.sheet()) |
| 385 serializeCSSStyleSheet(*sheet, KURL()); | 380 serializeCSSStyleSheet(*sheet, KURL()); |
| 386 } | 381 } |
| 387 } | 382 } |
| 388 | |
| 389 for (Frame* childFrame = frame->tree().firstChild(); childFrame; childFrame
= childFrame->tree().nextSibling()) { | |
| 390 // TODO(lukasza): This causes incomplete MHTML for OOPIFs. | |
| 391 // (crbug.com/538766) | |
| 392 if (childFrame->isLocalFrame()) | |
| 393 serializeFrame(toLocalFrame(childFrame)); | |
| 394 } | |
| 395 } | 383 } |
| 396 | 384 |
| 397 void PageSerializer::serializeCSSStyleSheet(CSSStyleSheet& styleSheet, const KUR
L& url) | 385 void PageSerializer::serializeCSSStyleSheet(CSSStyleSheet& styleSheet, const KUR
L& url) |
| 398 { | 386 { |
| 399 StringBuilder cssText; | 387 StringBuilder cssText; |
| 400 cssText.appendLiteral("@charset \""); | 388 cssText.appendLiteral("@charset \""); |
| 401 cssText.append(styleSheet.contents()->charset().lower()); | 389 cssText.append(styleSheet.contents()->charset().lower()); |
| 402 cssText.appendLiteral("\";\n\n"); | 390 cssText.appendLiteral("\";\n\n"); |
| 403 | 391 |
| 404 for (unsigned i = 0; i < styleSheet.length(); ++i) { | 392 for (unsigned i = 0; i < styleSheet.length(); ++i) { |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 554 void PageSerializer::registerRewriteURL(const String& from, const String& to) | 542 void PageSerializer::registerRewriteURL(const String& from, const String& to) |
| 555 { | 543 { |
| 556 m_rewriteURLs.set(from, to); | 544 m_rewriteURLs.set(from, to); |
| 557 } | 545 } |
| 558 | 546 |
| 559 void PageSerializer::setRewriteURLFolder(const String& rewriteFolder) | 547 void PageSerializer::setRewriteURLFolder(const String& rewriteFolder) |
| 560 { | 548 { |
| 561 m_rewriteFolder = rewriteFolder; | 549 m_rewriteFolder = rewriteFolder; |
| 562 } | 550 } |
| 563 | 551 |
| 564 KURL PageSerializer::urlForBlankFrame(LocalFrame* frame) | 552 KURL PageSerializer::urlForBlankFrame(const LocalFrame& frame) |
| 565 { | 553 { |
| 566 BlankFrameURLMap::iterator iter = m_blankFrameURLs.find(frame); | 554 BlankFrameURLMap::iterator iter = m_blankFrameURLs.find(&frame); |
| 567 if (iter != m_blankFrameURLs.end()) | 555 if (iter != m_blankFrameURLs.end()) |
| 568 return iter->value; | 556 return iter->value; |
| 569 String url = "wyciwyg://frame/" + String::number(m_blankFrameCounter++); | 557 String url = "wyciwyg://frame/" + String::number(m_blankFrameCounter++); |
| 570 KURL fakeURL(ParsedURLString, url); | 558 KURL fakeURL(ParsedURLString, url); |
| 571 m_blankFrameURLs.add(frame, fakeURL); | 559 m_blankFrameURLs.add(&frame, fakeURL); |
| 572 | 560 |
| 573 return fakeURL; | 561 return fakeURL; |
| 574 } | 562 } |
| 575 | 563 |
| 576 PageSerializer::Delegate* PageSerializer::delegate() | 564 PageSerializer::Delegate* PageSerializer::delegate() |
| 577 { | 565 { |
| 578 return m_delegate.get(); | 566 return m_delegate.get(); |
| 579 } | 567 } |
| 580 | 568 |
| 581 // Returns MOTW (Mark of the Web) declaration before html tag which is in | 569 // Returns MOTW (Mark of the Web) declaration before html tag which is in |
| (...skipping 12 matching lines...) Expand all Loading... |
| 594 continue; | 582 continue; |
| 595 } | 583 } |
| 596 emitsMinus = ch == '-'; | 584 emitsMinus = ch == '-'; |
| 597 builder.append(ch); | 585 builder.append(ch); |
| 598 } | 586 } |
| 599 CString escapedUrl = builder.toString().ascii(); | 587 CString escapedUrl = builder.toString().ascii(); |
| 600 return String::format("saved from url=(%04d)%s", static_cast<int>(escapedUrl
.length()), escapedUrl.data()); | 588 return String::format("saved from url=(%04d)%s", static_cast<int>(escapedUrl
.length()), escapedUrl.data()); |
| 601 } | 589 } |
| 602 | 590 |
| 603 } // namespace blink | 591 } // namespace blink |
| OLD | NEW |