diff options
Diffstat (limited to 'webkit/tools/test_shell/test_navigation_controller.cc')
-rw-r--r-- | webkit/tools/test_shell/test_navigation_controller.cc | 230 |
1 files changed, 0 insertions, 230 deletions
diff --git a/webkit/tools/test_shell/test_navigation_controller.cc b/webkit/tools/test_shell/test_navigation_controller.cc deleted file mode 100644 index 9d80f58..0000000 --- a/webkit/tools/test_shell/test_navigation_controller.cc +++ /dev/null @@ -1,230 +0,0 @@ -// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "webkit/tools/test_shell/test_navigation_controller.h" - -#include "base/logging.h" -#include "webkit/tools/test_shell/test_shell.h" - -// ---------------------------------------------------------------------------- -// TestNavigationEntry - -TestNavigationEntry::TestNavigationEntry() - : page_id_(-1) { -} - -TestNavigationEntry::TestNavigationEntry(int page_id, - const GURL& url, - const base::string16& target_frame) - : page_id_(page_id), - url_(url), - target_frame_(target_frame) { -} - -TestNavigationEntry::~TestNavigationEntry() { -} - -void TestNavigationEntry::SetContentState(const std::string& state) { - state_ = state; -} - -// ---------------------------------------------------------------------------- -// TestNavigationController - -TestNavigationController::TestNavigationController(TestShell* shell) - : pending_entry_(NULL), - last_committed_entry_index_(-1), - pending_entry_index_(-1), - shell_(shell), - max_page_id_(-1) { -} - -TestNavigationController::~TestNavigationController() { - DiscardPendingEntry(); -} - -void TestNavigationController::Reset() { - entries_.clear(); - DiscardPendingEntry(); - - last_committed_entry_index_ = -1; -} - -void TestNavigationController::Reload() { - // Base the navigation on where we are now... - int current_index = GetCurrentEntryIndex(); - - // If we are no where, then we can't reload. TODO(darin): We should add a - // CanReload method. - if (current_index == -1) - return; - - DiscardPendingEntry(); - - pending_entry_index_ = current_index; - NavigateToPendingEntry(true); -} - -void TestNavigationController::GoToOffset(int offset) { - int index = last_committed_entry_index_ + offset; - if (index < 0 || index >= GetEntryCount()) - return; - - GoToIndex(index); -} - -void TestNavigationController::GoToIndex(int index) { - DCHECK(index >= 0); - DCHECK(index < static_cast<int>(entries_.size())); - - DiscardPendingEntry(); - - pending_entry_index_ = index; - NavigateToPendingEntry(false); -} - -void TestNavigationController::LoadEntry(TestNavigationEntry* entry) { - // When navigating to a new page, we don't know for sure if we will actually - // end up leaving the current page. The new page load could for example - // result in a download or a 'no content' response (e.g., a mailto: URL). - DiscardPendingEntry(); - pending_entry_ = entry; - NavigateToPendingEntry(false); -} - - -TestNavigationEntry* TestNavigationController::GetLastCommittedEntry() const { - if (last_committed_entry_index_ == -1) - return NULL; - return entries_[last_committed_entry_index_].get(); -} - -TestNavigationEntry* TestNavigationController::GetActiveEntry() const { - TestNavigationEntry* entry = pending_entry_; - if (!entry) - entry = GetLastCommittedEntry(); - return entry; -} - -int TestNavigationController::GetCurrentEntryIndex() const { - if (pending_entry_index_ != -1) - return pending_entry_index_; - return last_committed_entry_index_; -} - - -TestNavigationEntry* TestNavigationController::GetEntryAtIndex( - int index) const { - if (index < 0 || index >= GetEntryCount()) - return NULL; - - return entries_[index].get(); -} - -TestNavigationEntry* TestNavigationController::GetEntryWithPageID( - int32 page_id) const { - int index = GetEntryIndexWithPageID(page_id); - return (index != -1) ? entries_[index].get() : NULL; -} - -void TestNavigationController::DidNavigateToEntry(TestNavigationEntry* entry) { - // If the entry is that of a page with PageID larger than any this Tab has - // seen before, then consider it a new navigation. - if (entry->GetPageID() > GetMaxPageID()) { - InsertEntry(entry); - return; - } - - // Otherwise, we just need to update an existing entry with matching PageID. - // If the existing entry corresponds to the entry which is pending, then we - // must update the current entry index accordingly. When navigating to the - // same URL, a new PageID is not created. - - int existing_entry_index = GetEntryIndexWithPageID(entry->GetPageID()); - TestNavigationEntry* existing_entry = (existing_entry_index != -1) ? - entries_[existing_entry_index].get() : NULL; - if (!existing_entry) { - // No existing entry, then simply ignore this navigation! - DLOG(WARNING) << "ignoring navigation for page: " << entry->GetPageID(); - } else if (existing_entry == pending_entry_) { - // The given entry might provide a new URL... e.g., navigating back to a - // page in session history could have resulted in a new client redirect. - existing_entry->SetURL(entry->GetURL()); - existing_entry->SetContentState(entry->GetContentState()); - last_committed_entry_index_ = pending_entry_index_; - pending_entry_index_ = -1; - pending_entry_ = NULL; - } else if (pending_entry_ && pending_entry_->GetPageID() == -1 && - pending_entry_->GetURL() == existing_entry->GetURL()) { - // Not a new navigation - DiscardPendingEntry(); - } else { - // The given entry might provide a new URL... e.g., navigating to a page - // might result in a client redirect, which should override the URL of the - // existing entry. - existing_entry->SetURL(entry->GetURL()); - existing_entry->SetContentState(entry->GetContentState()); - - // The navigation could have been issued by the renderer, so be sure that - // we update our current index. - last_committed_entry_index_ = existing_entry_index; - } - - delete entry; - UpdateMaxPageID(); -} - -void TestNavigationController::DiscardPendingEntry() { - if (pending_entry_index_ == -1) - delete pending_entry_; - pending_entry_ = NULL; - pending_entry_index_ = -1; -} - -void TestNavigationController::InsertEntry(TestNavigationEntry* entry) { - DiscardPendingEntry(); - - // Prune any entry which are in front of the current entry - int current_size = static_cast<int>(entries_.size()); - if (current_size > 0) { - while (last_committed_entry_index_ < (current_size - 1)) { - entries_.pop_back(); - current_size--; - } - } - - entries_.push_back(linked_ptr<TestNavigationEntry>(entry)); - last_committed_entry_index_ = static_cast<int>(entries_.size()) - 1; - UpdateMaxPageID(); -} - -int TestNavigationController::GetEntryIndexWithPageID(int32 page_id) const { - for (int i = static_cast<int>(entries_.size())-1; i >= 0; --i) { - if (entries_[i]->GetPageID() == page_id) - return i; - } - return -1; -} - -void TestNavigationController::NavigateToPendingEntry(bool reload) { - // For session history navigations only the pending_entry_index_ is set. - if (!pending_entry_) { - DCHECK(pending_entry_index_ != -1); - pending_entry_ = entries_[pending_entry_index_].get(); - } - - if (shell_->Navigate(*pending_entry_, reload)) { - // Note: this is redundant if navigation completed synchronously because - // DidNavigateToEntry call this as well. - UpdateMaxPageID(); - } else { - DiscardPendingEntry(); - } -} - -void TestNavigationController::UpdateMaxPageID() { - TestNavigationEntry* entry = GetActiveEntry(); - if (entry) - max_page_id_ = std::max(max_page_id_, entry->GetPageID()); -} |