| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 /* | 5 /* |
| 6 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. | 6 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. |
| 7 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 7 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
| 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. | 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. |
| 9 * (http://www.torchmobile.com/) | 9 * (http://www.torchmobile.com/) |
| 10 * | 10 * |
| (...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 423 } | 423 } |
| 424 | 424 |
| 425 bool NavigationControllerImpl::IsInitialBlankNavigation() const { | 425 bool NavigationControllerImpl::IsInitialBlankNavigation() const { |
| 426 // TODO(creis): Once we create a NavigationEntry for the initial blank page, | 426 // TODO(creis): Once we create a NavigationEntry for the initial blank page, |
| 427 // we'll need to check for entry count 1 and restore_type RESTORE_NONE (to | 427 // we'll need to check for entry count 1 and restore_type RESTORE_NONE (to |
| 428 // exclude the cloned tab case). | 428 // exclude the cloned tab case). |
| 429 return IsInitialNavigation() && GetEntryCount() == 0; | 429 return IsInitialNavigation() && GetEntryCount() == 0; |
| 430 } | 430 } |
| 431 | 431 |
| 432 NavigationEntryImpl* NavigationControllerImpl::GetEntryWithPageID( | 432 NavigationEntryImpl* NavigationControllerImpl::GetEntryWithPageID( |
| 433 SiteInstance* instance, int32 page_id) const { | 433 SiteInstance* instance, |
| 434 int32_t page_id) const { |
| 434 int index = GetEntryIndexWithPageID(instance, page_id); | 435 int index = GetEntryIndexWithPageID(instance, page_id); |
| 435 return (index != -1) ? entries_[index].get() : nullptr; | 436 return (index != -1) ? entries_[index].get() : nullptr; |
| 436 } | 437 } |
| 437 | 438 |
| 438 NavigationEntryImpl* | 439 NavigationEntryImpl* |
| 439 NavigationControllerImpl::GetEntryWithUniqueID(int nav_entry_id) const { | 440 NavigationControllerImpl::GetEntryWithUniqueID(int nav_entry_id) const { |
| 440 int index = GetEntryIndexWithUniqueID(nav_entry_id); | 441 int index = GetEntryIndexWithUniqueID(nav_entry_id); |
| 441 return (index != -1) ? entries_[index].get() : nullptr; | 442 return (index != -1) ? entries_[index].get() : nullptr; |
| 442 } | 443 } |
| 443 | 444 |
| (...skipping 1040 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1484 // Adjust indices such that the last entry and pending are at the end now. | 1485 // Adjust indices such that the last entry and pending are at the end now. |
| 1485 last_committed_entry_index_ = GetEntryCount() - 1; | 1486 last_committed_entry_index_ = GetEntryCount() - 1; |
| 1486 | 1487 |
| 1487 delegate_->SetHistoryOffsetAndLength(last_committed_entry_index_, | 1488 delegate_->SetHistoryOffsetAndLength(last_committed_entry_index_, |
| 1488 GetEntryCount()); | 1489 GetEntryCount()); |
| 1489 | 1490 |
| 1490 // Copy the max page id map from the old tab to the new tab. This ensures that | 1491 // Copy the max page id map from the old tab to the new tab. This ensures that |
| 1491 // new and existing navigations in the tab's current SiteInstances are | 1492 // new and existing navigations in the tab's current SiteInstances are |
| 1492 // identified properly. | 1493 // identified properly. |
| 1493 NavigationEntryImpl* last_committed = GetLastCommittedEntry(); | 1494 NavigationEntryImpl* last_committed = GetLastCommittedEntry(); |
| 1494 int32 site_max_page_id = | 1495 int32_t site_max_page_id = |
| 1495 delegate_->GetMaxPageIDForSiteInstance(last_committed->site_instance()); | 1496 delegate_->GetMaxPageIDForSiteInstance(last_committed->site_instance()); |
| 1496 delegate_->CopyMaxPageIDsFrom(source->delegate()->GetWebContents()); | 1497 delegate_->CopyMaxPageIDsFrom(source->delegate()->GetWebContents()); |
| 1497 delegate_->UpdateMaxPageIDForSiteInstance(last_committed->site_instance(), | 1498 delegate_->UpdateMaxPageIDForSiteInstance(last_committed->site_instance(), |
| 1498 site_max_page_id); | 1499 site_max_page_id); |
| 1499 max_restored_page_id_ = source->max_restored_page_id_; | 1500 max_restored_page_id_ = source->max_restored_page_id_; |
| 1500 } | 1501 } |
| 1501 | 1502 |
| 1502 bool NavigationControllerImpl::CanPruneAllButLastCommitted() { | 1503 bool NavigationControllerImpl::CanPruneAllButLastCommitted() { |
| 1503 // If there is no last committed entry, we cannot prune. Even if there is a | 1504 // If there is no last committed entry, we cannot prune. Even if there is a |
| 1504 // pending entry, it may not commit, leaving this WebContents blank, despite | 1505 // pending entry, it may not commit, leaving this WebContents blank, despite |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1556 // Attempts to do so may give a tab access to another tab's session storage | 1557 // Attempts to do so may give a tab access to another tab's session storage |
| 1557 // so die hard on an error. | 1558 // so die hard on an error. |
| 1558 bool successful_insert = session_storage_namespace_map_.insert( | 1559 bool successful_insert = session_storage_namespace_map_.insert( |
| 1559 make_pair(partition_id, | 1560 make_pair(partition_id, |
| 1560 static_cast<SessionStorageNamespaceImpl*>( | 1561 static_cast<SessionStorageNamespaceImpl*>( |
| 1561 session_storage_namespace))) | 1562 session_storage_namespace))) |
| 1562 .second; | 1563 .second; |
| 1563 CHECK(successful_insert) << "Cannot replace existing SessionStorageNamespace"; | 1564 CHECK(successful_insert) << "Cannot replace existing SessionStorageNamespace"; |
| 1564 } | 1565 } |
| 1565 | 1566 |
| 1566 void NavigationControllerImpl::SetMaxRestoredPageID(int32 max_id) { | 1567 void NavigationControllerImpl::SetMaxRestoredPageID(int32_t max_id) { |
| 1567 max_restored_page_id_ = max_id; | 1568 max_restored_page_id_ = max_id; |
| 1568 } | 1569 } |
| 1569 | 1570 |
| 1570 int32 NavigationControllerImpl::GetMaxRestoredPageID() const { | 1571 int32_t NavigationControllerImpl::GetMaxRestoredPageID() const { |
| 1571 return max_restored_page_id_; | 1572 return max_restored_page_id_; |
| 1572 } | 1573 } |
| 1573 | 1574 |
| 1574 bool NavigationControllerImpl::IsUnmodifiedBlankTab() const { | 1575 bool NavigationControllerImpl::IsUnmodifiedBlankTab() const { |
| 1575 return IsInitialNavigation() && | 1576 return IsInitialNavigation() && |
| 1576 !GetLastCommittedEntry() && | 1577 !GetLastCommittedEntry() && |
| 1577 !delegate_->HasAccessedInitialDocument(); | 1578 !delegate_->HasAccessedInitialDocument(); |
| 1578 } | 1579 } |
| 1579 | 1580 |
| 1580 SessionStorageNamespace* | 1581 SessionStorageNamespace* |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1673 // so don't copy anything. | 1674 // so don't copy anything. |
| 1674 if (pending_entry_ && pending_entry_index_ == -1) | 1675 if (pending_entry_ && pending_entry_index_ == -1) |
| 1675 entry->set_unique_id(pending_entry_->GetUniqueID()); | 1676 entry->set_unique_id(pending_entry_->GetUniqueID()); |
| 1676 | 1677 |
| 1677 DiscardNonCommittedEntriesInternal(); | 1678 DiscardNonCommittedEntriesInternal(); |
| 1678 | 1679 |
| 1679 int current_size = static_cast<int>(entries_.size()); | 1680 int current_size = static_cast<int>(entries_.size()); |
| 1680 | 1681 |
| 1681 // When replacing, don't prune the forward history. | 1682 // When replacing, don't prune the forward history. |
| 1682 if (replace && current_size > 0) { | 1683 if (replace && current_size > 0) { |
| 1683 int32 page_id = entry->GetPageID(); | 1684 int32_t page_id = entry->GetPageID(); |
| 1684 | 1685 |
| 1685 entries_[last_committed_entry_index_] = entry.Pass(); | 1686 entries_[last_committed_entry_index_] = entry.Pass(); |
| 1686 | 1687 |
| 1687 // This is a new page ID, so we need everybody to know about it. | 1688 // This is a new page ID, so we need everybody to know about it. |
| 1688 delegate_->UpdateMaxPageID(page_id); | 1689 delegate_->UpdateMaxPageID(page_id); |
| 1689 return; | 1690 return; |
| 1690 } | 1691 } |
| 1691 | 1692 |
| 1692 // We shouldn't see replace == true when there's no committed entries. | 1693 // We shouldn't see replace == true when there's no committed entries. |
| 1693 DCHECK(!replace); | 1694 DCHECK(!replace); |
| 1694 | 1695 |
| 1695 if (current_size > 0) { | 1696 if (current_size > 0) { |
| 1696 // Prune any entries which are in front of the current entry. | 1697 // Prune any entries which are in front of the current entry. |
| 1697 // last_committed_entry_index_ must be updated here since calls to | 1698 // last_committed_entry_index_ must be updated here since calls to |
| 1698 // NotifyPrunedEntries() below may re-enter and we must make sure | 1699 // NotifyPrunedEntries() below may re-enter and we must make sure |
| 1699 // last_committed_entry_index_ is not left in an invalid state. | 1700 // last_committed_entry_index_ is not left in an invalid state. |
| 1700 int num_pruned = 0; | 1701 int num_pruned = 0; |
| 1701 while (last_committed_entry_index_ < (current_size - 1)) { | 1702 while (last_committed_entry_index_ < (current_size - 1)) { |
| 1702 num_pruned++; | 1703 num_pruned++; |
| 1703 entries_.pop_back(); | 1704 entries_.pop_back(); |
| 1704 current_size--; | 1705 current_size--; |
| 1705 } | 1706 } |
| 1706 if (num_pruned > 0) // Only notify if we did prune something. | 1707 if (num_pruned > 0) // Only notify if we did prune something. |
| 1707 NotifyPrunedEntries(this, false, num_pruned); | 1708 NotifyPrunedEntries(this, false, num_pruned); |
| 1708 } | 1709 } |
| 1709 | 1710 |
| 1710 PruneOldestEntryIfFull(); | 1711 PruneOldestEntryIfFull(); |
| 1711 | 1712 |
| 1712 int32 page_id = entry->GetPageID(); | 1713 int32_t page_id = entry->GetPageID(); |
| 1713 entries_.push_back(entry.Pass()); | 1714 entries_.push_back(entry.Pass()); |
| 1714 last_committed_entry_index_ = static_cast<int>(entries_.size()) - 1; | 1715 last_committed_entry_index_ = static_cast<int>(entries_.size()) - 1; |
| 1715 | 1716 |
| 1716 // This is a new page ID, so we need everybody to know about it. | 1717 // This is a new page ID, so we need everybody to know about it. |
| 1717 delegate_->UpdateMaxPageID(page_id); | 1718 delegate_->UpdateMaxPageID(page_id); |
| 1718 } | 1719 } |
| 1719 | 1720 |
| 1720 void NavigationControllerImpl::PruneOldestEntryIfFull() { | 1721 void NavigationControllerImpl::PruneOldestEntryIfFull() { |
| 1721 if (entries_.size() >= max_entry_count()) { | 1722 if (entries_.size() >= max_entry_count()) { |
| 1722 DCHECK_EQ(max_entry_count(), entries_.size()); | 1723 DCHECK_EQ(max_entry_count(), entries_.size()); |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1943 NOTIFICATION_NAV_ENTRY_CHANGED, | 1944 NOTIFICATION_NAV_ENTRY_CHANGED, |
| 1944 Source<NavigationController>(this), | 1945 Source<NavigationController>(this), |
| 1945 Details<EntryChangedDetails>(&det)); | 1946 Details<EntryChangedDetails>(&det)); |
| 1946 } | 1947 } |
| 1947 | 1948 |
| 1948 void NavigationControllerImpl::FinishRestore(int selected_index, | 1949 void NavigationControllerImpl::FinishRestore(int selected_index, |
| 1949 RestoreType type) { | 1950 RestoreType type) { |
| 1950 DCHECK(selected_index >= 0 && selected_index < GetEntryCount()); | 1951 DCHECK(selected_index >= 0 && selected_index < GetEntryCount()); |
| 1951 ConfigureEntriesForRestore(&entries_, type); | 1952 ConfigureEntriesForRestore(&entries_, type); |
| 1952 | 1953 |
| 1953 SetMaxRestoredPageID(static_cast<int32>(GetEntryCount())); | 1954 SetMaxRestoredPageID(static_cast<int32_t>(GetEntryCount())); |
| 1954 | 1955 |
| 1955 last_committed_entry_index_ = selected_index; | 1956 last_committed_entry_index_ = selected_index; |
| 1956 } | 1957 } |
| 1957 | 1958 |
| 1958 void NavigationControllerImpl::DiscardNonCommittedEntriesInternal() { | 1959 void NavigationControllerImpl::DiscardNonCommittedEntriesInternal() { |
| 1959 DiscardPendingEntry(false); | 1960 DiscardPendingEntry(false); |
| 1960 DiscardTransientEntry(); | 1961 DiscardTransientEntry(); |
| 1961 } | 1962 } |
| 1962 | 1963 |
| 1963 void NavigationControllerImpl::DiscardPendingEntry(bool was_failure) { | 1964 void NavigationControllerImpl::DiscardPendingEntry(bool was_failure) { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1983 | 1984 |
| 1984 void NavigationControllerImpl::DiscardTransientEntry() { | 1985 void NavigationControllerImpl::DiscardTransientEntry() { |
| 1985 if (transient_entry_index_ == -1) | 1986 if (transient_entry_index_ == -1) |
| 1986 return; | 1987 return; |
| 1987 entries_.erase(entries_.begin() + transient_entry_index_); | 1988 entries_.erase(entries_.begin() + transient_entry_index_); |
| 1988 if (last_committed_entry_index_ > transient_entry_index_) | 1989 if (last_committed_entry_index_ > transient_entry_index_) |
| 1989 last_committed_entry_index_--; | 1990 last_committed_entry_index_--; |
| 1990 transient_entry_index_ = -1; | 1991 transient_entry_index_ = -1; |
| 1991 } | 1992 } |
| 1992 | 1993 |
| 1993 int NavigationControllerImpl::GetEntryIndexWithPageID( | 1994 int NavigationControllerImpl::GetEntryIndexWithPageID(SiteInstance* instance, |
| 1994 SiteInstance* instance, int32 page_id) const { | 1995 int32_t page_id) const { |
| 1995 for (int i = static_cast<int>(entries_.size()) - 1; i >= 0; --i) { | 1996 for (int i = static_cast<int>(entries_.size()) - 1; i >= 0; --i) { |
| 1996 if ((entries_[i]->site_instance() == instance) && | 1997 if ((entries_[i]->site_instance() == instance) && |
| 1997 (entries_[i]->GetPageID() == page_id)) | 1998 (entries_[i]->GetPageID() == page_id)) |
| 1998 return i; | 1999 return i; |
| 1999 } | 2000 } |
| 2000 return -1; | 2001 return -1; |
| 2001 } | 2002 } |
| 2002 | 2003 |
| 2003 int NavigationControllerImpl::GetEntryIndexWithUniqueID( | 2004 int NavigationControllerImpl::GetEntryIndexWithUniqueID( |
| 2004 int nav_entry_id) const { | 2005 int nav_entry_id) const { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2044 } | 2045 } |
| 2045 } | 2046 } |
| 2046 } | 2047 } |
| 2047 | 2048 |
| 2048 void NavigationControllerImpl::SetGetTimestampCallbackForTest( | 2049 void NavigationControllerImpl::SetGetTimestampCallbackForTest( |
| 2049 const base::Callback<base::Time()>& get_timestamp_callback) { | 2050 const base::Callback<base::Time()>& get_timestamp_callback) { |
| 2050 get_timestamp_callback_ = get_timestamp_callback; | 2051 get_timestamp_callback_ = get_timestamp_callback; |
| 2051 } | 2052 } |
| 2052 | 2053 |
| 2053 } // namespace content | 2054 } // namespace content |
| OLD | NEW |