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

Side by Side Diff: content/browser/frame_host/navigation_controller_impl.cc

Issue 2815753003: Add DCHECKs for invariants on NavigationController indices. (Closed)
Patch Set: Add more invariants. Created 3 years, 8 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 | « no previous file | content/public/browser/navigation_controller.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 516 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 const std::string& mime_type = delegate_->GetContentsMimeType(); 527 const std::string& mime_type = delegate_->GetContentsMimeType();
528 bool is_viewable_mime_type = 528 bool is_viewable_mime_type =
529 mime_util::IsSupportedNonImageMimeType(mime_type) && 529 mime_util::IsSupportedNonImageMimeType(mime_type) &&
530 !media::IsSupportedMediaMimeType(mime_type); 530 !media::IsSupportedMediaMimeType(mime_type);
531 NavigationEntry* visible_entry = GetVisibleEntry(); 531 NavigationEntry* visible_entry = GetVisibleEntry();
532 return visible_entry && !visible_entry->IsViewSourceMode() && 532 return visible_entry && !visible_entry->IsViewSourceMode() &&
533 is_viewable_mime_type && !delegate_->GetInterstitialPage(); 533 is_viewable_mime_type && !delegate_->GetInterstitialPage();
534 } 534 }
535 535
536 int NavigationControllerImpl::GetLastCommittedEntryIndex() const { 536 int NavigationControllerImpl::GetLastCommittedEntryIndex() const {
537 // The last committed entry index must always be less than the number of
538 // entries. It should be -1 iff there are no entries.
539 DCHECK_LT(last_committed_entry_index_, GetEntryCount());
540 DCHECK_EQ(last_committed_entry_index_ == -1, GetEntryCount() == 0);
537 return last_committed_entry_index_; 541 return last_committed_entry_index_;
538 } 542 }
539 543
540 int NavigationControllerImpl::GetEntryCount() const { 544 int NavigationControllerImpl::GetEntryCount() const {
541 DCHECK(entries_.size() <= max_entry_count()); 545 DCHECK_LE(entries_.size(), max_entry_count());
542 return static_cast<int>(entries_.size()); 546 return static_cast<int>(entries_.size());
543 } 547 }
544 548
545 NavigationEntryImpl* NavigationControllerImpl::GetEntryAtIndex( 549 NavigationEntryImpl* NavigationControllerImpl::GetEntryAtIndex(
546 int index) const { 550 int index) const {
547 if (index < 0 || index >= GetEntryCount()) 551 if (index < 0 || index >= GetEntryCount())
548 return nullptr; 552 return nullptr;
549 553
550 return entries_[index].get(); 554 return entries_[index].get();
551 } 555 }
(...skipping 1167 matching lines...) Expand 10 before | Expand all | Expand 10 after
1719 DiscardNonCommittedEntriesInternal(); 1723 DiscardNonCommittedEntriesInternal();
1720 1724
1721 // If there was a transient entry, invalidate everything so the new active 1725 // If there was a transient entry, invalidate everything so the new active
1722 // entry state is shown. 1726 // entry state is shown.
1723 if (transient) { 1727 if (transient) {
1724 delegate_->NotifyNavigationStateChanged(INVALIDATE_TYPE_ALL); 1728 delegate_->NotifyNavigationStateChanged(INVALIDATE_TYPE_ALL);
1725 } 1729 }
1726 } 1730 }
1727 1731
1728 NavigationEntryImpl* NavigationControllerImpl::GetPendingEntry() const { 1732 NavigationEntryImpl* NavigationControllerImpl::GetPendingEntry() const {
1733 // If there is no pending_entry_, there should be no pending_entry_index_.
1734 DCHECK(pending_entry_ || pending_entry_index_ == -1);
1735
1736 // If there is a pending_entry_index_, then pending_entry_ must be the entry
1737 // at that index.
1738 DCHECK(pending_entry_index_ == -1 ||
1739 pending_entry_ == GetEntryAtIndex(pending_entry_index_));
1740
1729 return pending_entry_; 1741 return pending_entry_;
1730 } 1742 }
1731 1743
1732 int NavigationControllerImpl::GetPendingEntryIndex() const { 1744 int NavigationControllerImpl::GetPendingEntryIndex() const {
1745 // The pending entry index must always be less than the number of entries.
1746 // If there are no entries, it must be exactly -1.
1747 DCHECK_LT(pending_entry_index_, GetEntryCount());
1748 DCHECK(GetEntryCount() != 0 || pending_entry_index_ == -1);
1733 return pending_entry_index_; 1749 return pending_entry_index_;
1734 } 1750 }
1735 1751
1736 void NavigationControllerImpl::InsertOrReplaceEntry( 1752 void NavigationControllerImpl::InsertOrReplaceEntry(
1737 std::unique_ptr<NavigationEntryImpl> entry, 1753 std::unique_ptr<NavigationEntryImpl> entry,
1738 bool replace) { 1754 bool replace) {
1739 DCHECK(!ui::PageTransitionCoreTypeIs(entry->GetTransitionType(), 1755 DCHECK(!ui::PageTransitionCoreTypeIs(entry->GetTransitionType(),
1740 ui::PAGE_TRANSITION_AUTO_SUBFRAME)); 1756 ui::PAGE_TRANSITION_AUTO_SUBFRAME));
1741 1757
1742 // If the pending_entry_index_ is -1, the navigation was to a new page, and we 1758 // If the pending_entry_index_ is -1, the navigation was to a new page, and we
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after
2155 } 2171 }
2156 } 2172 }
2157 } 2173 }
2158 2174
2159 void NavigationControllerImpl::SetGetTimestampCallbackForTest( 2175 void NavigationControllerImpl::SetGetTimestampCallbackForTest(
2160 const base::Callback<base::Time()>& get_timestamp_callback) { 2176 const base::Callback<base::Time()>& get_timestamp_callback) {
2161 get_timestamp_callback_ = get_timestamp_callback; 2177 get_timestamp_callback_ = get_timestamp_callback;
2162 } 2178 }
2163 2179
2164 } // namespace content 2180 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/public/browser/navigation_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698