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

Side by Side Diff: WebCore/history/HistoryItem.cpp

Issue 3573012: Merge 68742... (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/517/
Patch Set: Created 10 years, 2 months 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 unified diff | Download patch
« no previous file with comments | « WebCore/history/HistoryItem.h ('k') | WebCore/loader/FrameLoader.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2005, 2006, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2005, 2006, 2008 Apple 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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 472 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 bool HistoryItem::hasChildren() const 483 bool HistoryItem::hasChildren() const
484 { 484 {
485 return !m_children.isEmpty(); 485 return !m_children.isEmpty();
486 } 486 }
487 487
488 void HistoryItem::clearChildren() 488 void HistoryItem::clearChildren()
489 { 489 {
490 m_children.clear(); 490 m_children.clear();
491 } 491 }
492 492
493 // We do same-document navigation if going to a different item and if either of the following is true:
494 // - The other item corresponds to the same document (for history entries create d via pushState or fragment changes).
495 // - The other item corresponds to the same set of documents, including frames ( for history entries created via regular navigation)
496 bool HistoryItem::shouldDoSameDocumentNavigationTo(HistoryItem* otherItem) const
497 {
498 if (this == otherItem)
499 return false;
500
501 if (stateObject() || otherItem->stateObject())
502 return documentSequenceNumber() == otherItem->documentSequenceNumber();
503
504 if ((url().hasFragmentIdentifier() || otherItem->url().hasFragmentIdentifier ()) && equalIgnoringFragmentIdentifier(url(), otherItem->url()))
505 return documentSequenceNumber() == otherItem->documentSequenceNumber();
506
507 return hasSameDocumentTree(otherItem);
508 }
509
493 // Does a recursive check that this item and its descendants have the same 510 // Does a recursive check that this item and its descendants have the same
494 // document sequence numbers as the other item. 511 // document sequence numbers as the other item.
495 bool HistoryItem::hasSameDocuments(HistoryItem* otherItem) 512 bool HistoryItem::hasSameDocumentTree(HistoryItem* otherItem) const
496 { 513 {
497 if (documentSequenceNumber() != otherItem->documentSequenceNumber()) 514 if (documentSequenceNumber() != otherItem->documentSequenceNumber())
498 return false; 515 return false;
499 516
500 if (children().size() != otherItem->children().size()) 517 if (children().size() != otherItem->children().size())
501 return false; 518 return false;
502 519
503 for (size_t i = 0; i < children().size(); i++) { 520 for (size_t i = 0; i < children().size(); i++) {
504 HistoryItem* child = children()[i].get(); 521 HistoryItem* child = children()[i].get();
505 HistoryItem* otherChild = otherItem->childItemWithDocumentSequenceNumber (child->documentSequenceNumber()); 522 HistoryItem* otherChild = otherItem->childItemWithDocumentSequenceNumber (child->documentSequenceNumber());
506 if (!otherChild || !child->hasSameDocuments(otherChild)) 523 if (!otherChild || !child->hasSameDocumentTree(otherChild))
507 return false; 524 return false;
508 } 525 }
509 526
510 return true; 527 return true;
511 } 528 }
512 529
513 // Does a non-recursive check that this item and its immediate children have the 530 // Does a non-recursive check that this item and its immediate children have the
514 // same frames as the other item. 531 // same frames as the other item.
515 bool HistoryItem::hasSameFrames(HistoryItem* otherItem) 532 bool HistoryItem::hasSameFrames(HistoryItem* otherItem) const
516 { 533 {
517 if (target() != otherItem->target()) 534 if (target() != otherItem->target())
518 return false; 535 return false;
519 536
520 if (children().size() != otherItem->children().size()) 537 if (children().size() != otherItem->children().size())
521 return false; 538 return false;
522 539
523 for (size_t i = 0; i < children().size(); i++) { 540 for (size_t i = 0; i < children().size(); i++) {
524 if (!otherItem->childItemWithTarget(children()[i]->target())) 541 if (!otherItem->childItemWithTarget(children()[i]->target()))
525 return false; 542 return false;
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 } // namespace WebCore 647 } // namespace WebCore
631 648
632 #ifndef NDEBUG 649 #ifndef NDEBUG
633 650
634 int showTree(const WebCore::HistoryItem* item) 651 int showTree(const WebCore::HistoryItem* item)
635 { 652 {
636 return item->showTree(); 653 return item->showTree();
637 } 654 }
638 655
639 #endif 656 #endif
OLDNEW
« no previous file with comments | « WebCore/history/HistoryItem.h ('k') | WebCore/loader/FrameLoader.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698