Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 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 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 418 case Node::DOCUMENT_TYPE_NODE: | 418 case Node::DOCUMENT_TYPE_NODE: |
| 419 param->haveSeenDocType = true; | 419 param->haveSeenDocType = true; |
| 420 default: | 420 default: |
| 421 // For other type node, call default action. | 421 // For other type node, call default action. |
| 422 saveHTMLContentToBuffer(createMarkup(node), param); | 422 saveHTMLContentToBuffer(createMarkup(node), param); |
| 423 break; | 423 break; |
| 424 } | 424 } |
| 425 } | 425 } |
| 426 | 426 |
| 427 WebPageSerializerImpl::WebPageSerializerImpl(WebFrame* frame, | 427 WebPageSerializerImpl::WebPageSerializerImpl(WebFrame* frame, |
| 428 bool recursiveSerialization, | |
| 429 WebPageSerializerClient* client, | 428 WebPageSerializerClient* client, |
| 430 const WebVector<WebURL>& links, | 429 const WebVector<WebURL>& links, |
| 431 const WebVector<WebString>& localPa ths, | 430 const WebVector<WebString>& localPa ths, |
| 432 const WebString& localDirectoryName ) | 431 const WebString& localDirectoryName ) |
| 433 : m_client(client) | 432 : m_client(client) |
| 434 , m_recursiveSerialization(recursiveSerialization) | |
| 435 , m_framesCollected(false) | |
| 436 , m_localDirectoryName(localDirectoryName) | 433 , m_localDirectoryName(localDirectoryName) |
| 437 , m_htmlEntities(false) | 434 , m_htmlEntities(false) |
| 438 , m_xmlEntities(true) | 435 , m_xmlEntities(true) |
| 439 { | 436 { |
| 440 // Must specify available webframe. | 437 // Must specify available webframe. |
| 441 ASSERT(frame); | 438 ASSERT(frame); |
| 442 m_specifiedWebLocalFrameImpl = toWebLocalFrameImpl(frame); | 439 m_specifiedWebLocalFrameImpl = toWebLocalFrameImpl(frame); |
| 443 // Make sure we have non 0 client. | 440 // Make sure we have non 0 client. |
| 444 ASSERT(client); | 441 ASSERT(client); |
| 445 // Build local resources map. | 442 // Build local resources map. |
| 446 ASSERT(links.size() == localPaths.size()); | 443 ASSERT(links.size() == localPaths.size()); |
| 447 for (size_t i = 0; i < links.size(); i++) { | 444 for (size_t i = 0; i < links.size(); i++) { |
| 448 KURL url = links[i]; | 445 KURL url = links[i]; |
| 449 ASSERT(!m_localLinks.contains(url.string())); | 446 ASSERT(!m_localLinks.contains(url.string())); |
| 450 m_localLinks.set(url.string(), localPaths[i]); | 447 m_localLinks.set(url.string(), localPaths[i]); |
| 451 } | 448 } |
| 452 | 449 |
| 453 ASSERT(m_dataBuffer.isEmpty()); | 450 ASSERT(m_dataBuffer.isEmpty()); |
| 454 } | 451 } |
| 455 | 452 |
| 456 void WebPageSerializerImpl::collectTargetFrames() | |
| 457 { | |
| 458 ASSERT(!m_framesCollected); | |
| 459 m_framesCollected = true; | |
| 460 | |
| 461 // First, process main frame. | |
| 462 m_frames.append(m_specifiedWebLocalFrameImpl); | |
| 463 // Return now if user only needs to serialize specified frame, not including | |
| 464 // all sub-frames. | |
| 465 if (!m_recursiveSerialization) | |
| 466 return; | |
| 467 // Collect all frames inside the specified frame. | |
| 468 for (WebLocalFrameImpl* frame : m_frames) { | |
| 469 // Get current using document. | |
| 470 Document* currentDoc = frame->frame()->document(); | |
| 471 // Go through sub-frames. | |
| 472 RefPtrWillBeRawPtr<HTMLAllCollection> all = currentDoc->all(); | |
| 473 | |
| 474 for (unsigned i = 0; Element* element = all->item(i); ++i) { | |
| 475 if (!element->isHTMLElement()) | |
| 476 continue; | |
| 477 WebLocalFrameImpl* webFrame = | |
| 478 WebLocalFrameImpl::fromFrameOwnerElement(element); | |
| 479 if (webFrame) | |
| 480 m_frames.append(webFrame); | |
| 481 } | |
| 482 } | |
| 483 } | |
| 484 | |
| 485 bool WebPageSerializerImpl::serialize() | 453 bool WebPageSerializerImpl::serialize() |
| 486 { | 454 { |
| 487 if (!m_framesCollected) | |
| 488 collectTargetFrames(); | |
| 489 | |
| 490 bool didSerialization = false; | 455 bool didSerialization = false; |
| 491 KURL mainURL = m_specifiedWebLocalFrameImpl->frame()->document()->url(); | 456 KURL mainURL = m_specifiedWebLocalFrameImpl->frame()->document()->url(); |
| 492 | 457 |
| 493 for (unsigned i = 0; i < m_frames.size(); ++i) { | 458 WebLocalFrameImpl* webFrame = m_specifiedWebLocalFrameImpl; |
| 494 WebLocalFrameImpl* webFrame = m_frames[i]; | 459 Document* document = webFrame->frame()->document(); |
| 495 Document* document = webFrame->frame()->document(); | 460 const KURL& url = document->url(); |
| 496 const KURL& url = document->url(); | |
| 497 | 461 |
| 498 if (!url.isValid() || !m_localLinks.contains(url.string())) | 462 if (url.isValid() || m_localLinks.contains(url.string())) { |
|
dcheng
2015/09/25 19:53:52
Should this be &&?
Łukasz Anforowicz
2015/09/25 20:35:57
Right. My bad.
| |
| 499 continue; | |
| 500 | |
| 501 didSerialization = true; | 463 didSerialization = true; |
| 502 | 464 |
| 503 const WTF::TextEncoding& textEncoding = document->encoding().isValid() ? document->encoding() : UTF8Encoding(); | 465 const WTF::TextEncoding& textEncoding = document->encoding().isValid() ? document->encoding() : UTF8Encoding(); |
| 504 String directoryName = url == mainURL ? m_localDirectoryName : ""; | 466 String directoryName = url == mainURL ? m_localDirectoryName : ""; |
| 505 | 467 |
| 506 SerializeDomParam param(url, textEncoding, document, directoryName); | 468 SerializeDomParam param(url, textEncoding, document, directoryName); |
| 507 | 469 |
| 508 Element* documentElement = document->documentElement(); | 470 Element* documentElement = document->documentElement(); |
| 509 if (documentElement) | 471 if (documentElement) |
| 510 buildContentForNode(documentElement, ¶m); | 472 buildContentForNode(documentElement, ¶m); |
| 511 | 473 |
| 512 encodeAndFlushBuffer(WebPageSerializerClient::CurrentFrameIsFinished, &p aram, ForceFlush); | 474 encodeAndFlushBuffer(WebPageSerializerClient::CurrentFrameIsFinished, &p aram, ForceFlush); |
| 513 } | 475 } |
| 514 | 476 |
| 515 ASSERT(m_dataBuffer.isEmpty()); | 477 ASSERT(m_dataBuffer.isEmpty()); |
| 516 m_client->didSerializeDataForFrame(KURL(), WebCString("", 0), WebPageSeriali zerClient::AllFramesAreFinished); | 478 m_client->didSerializeDataForFrame(KURL(), WebCString("", 0), WebPageSeriali zerClient::AllFramesAreFinished); |
| 517 return didSerialization; | 479 return didSerialization; |
| 518 } | 480 } |
| 519 | 481 |
| 520 } // namespace blink | 482 } // namespace blink |
| OLD | NEW |