| Index: components/web_view/navigation_controller.cc
|
| diff --git a/components/web_view/navigation_controller.cc b/components/web_view/navigation_controller.cc
|
| deleted file mode 100644
|
| index d64c0d8aac87d8ff15a24474037380a34b615232..0000000000000000000000000000000000000000
|
| --- a/components/web_view/navigation_controller.cc
|
| +++ /dev/null
|
| @@ -1,214 +0,0 @@
|
| -// Copyright 2015 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 "components/web_view/navigation_controller.h"
|
| -
|
| -#include <utility>
|
| -
|
| -#include "components/web_view/frame.h"
|
| -#include "components/web_view/navigation_controller_delegate.h"
|
| -#include "components/web_view/navigation_entry.h"
|
| -#include "components/web_view/reload_type.h"
|
| -
|
| -namespace web_view {
|
| -
|
| -NavigationController::NavigationController(
|
| - NavigationControllerDelegate* delegate)
|
| - : pending_entry_(nullptr),
|
| - last_committed_entry_index_(-1),
|
| - pending_entry_index_(-1),
|
| - delegate_(delegate) {}
|
| -
|
| -NavigationController::~NavigationController() {
|
| - DiscardPendingEntry(false);
|
| -}
|
| -
|
| -int NavigationController::GetCurrentEntryIndex() const {
|
| - if (pending_entry_index_ != -1)
|
| - return pending_entry_index_;
|
| - return last_committed_entry_index_;
|
| -}
|
| -
|
| -int NavigationController::GetIndexForOffset(int offset) const {
|
| - return GetCurrentEntryIndex() + offset;
|
| -}
|
| -
|
| -int NavigationController::GetEntryCount() const {
|
| - // TODO(erg): Have a max number of entries, and DCHECK that we are smaller
|
| - // than it here.
|
| - return static_cast<int>(entries_.size());
|
| -}
|
| -
|
| -NavigationEntry* NavigationController::GetEntryAtIndex(int index) const {
|
| - if (index < 0 || index >= GetEntryCount())
|
| - return nullptr;
|
| -
|
| - return entries_[index];
|
| -}
|
| -
|
| -NavigationEntry* NavigationController::GetEntryAtOffset(int offset) const {
|
| - return GetEntryAtIndex(GetIndexForOffset(offset));
|
| -}
|
| -
|
| -bool NavigationController::CanGoBack() const {
|
| - return CanGoToOffset(-1);
|
| -}
|
| -
|
| -bool NavigationController::CanGoForward() const {
|
| - return CanGoToOffset(1);
|
| -}
|
| -
|
| -bool NavigationController::CanGoToOffset(int offset) const {
|
| - int index = GetIndexForOffset(offset);
|
| - return index >= 0 && index < GetEntryCount();
|
| -}
|
| -
|
| -void NavigationController::GoBack() {
|
| - if (!CanGoBack()) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| -
|
| - // Base the navigation on where we are now...
|
| - int current_index = GetCurrentEntryIndex();
|
| -
|
| - DiscardPendingEntry(false);
|
| -
|
| - pending_entry_index_ = current_index - 1;
|
| - // TODO(erg): Transition type handled here.
|
| - NavigateToPendingEntry(ReloadType::NO_RELOAD, true);
|
| -}
|
| -
|
| -void NavigationController::GoForward() {
|
| - if (!CanGoForward()) {
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| -
|
| - // TODO(erg): The upstream version handles transience here.
|
| -
|
| - // Base the navigation on where we are now...
|
| - int current_index = GetCurrentEntryIndex();
|
| -
|
| - DiscardPendingEntry(false);
|
| -
|
| - pending_entry_index_ = current_index + 1;
|
| - // TODO(erg): Transition type handled here.
|
| - NavigateToPendingEntry(ReloadType::NO_RELOAD, true);
|
| -}
|
| -
|
| -void NavigationController::LoadURL(mojo::URLRequestPtr request) {
|
| - // TODO(erg): This mimics part of NavigationControllerImpl::LoadURL(), minus
|
| - // all the error checking.
|
| - SetPendingEntry(make_scoped_ptr(new NavigationEntry(std::move(request))));
|
| - NavigateToPendingEntry(ReloadType::NO_RELOAD, false);
|
| -}
|
| -
|
| -void NavigationController::NavigateToPendingEntry(
|
| - ReloadType reload_type,
|
| - bool update_navigation_start_time) {
|
| - // TODO(erg): Deal with session history navigations while trying to navigate
|
| - // to a slow-to-commit page.
|
| -
|
| - // TODO(erg): Deal with interstitials.
|
| -
|
| - // For session history navigations only the pending_entry_index_ is set.
|
| - if (!pending_entry_) {
|
| - CHECK_NE(pending_entry_index_, -1);
|
| - pending_entry_ = entries_[pending_entry_index_];
|
| - }
|
| -
|
| - // TODO(erg): Eventually, we need to deal with restoring the state of the
|
| - // full tree. For now, we'll just shell back to the WebView.
|
| - delegate_->OnNavigate(
|
| - pending_entry_->BuildURLRequest(update_navigation_start_time));
|
| -}
|
| -
|
| -void NavigationController::DiscardPendingEntry(bool was_failure) {
|
| - // TODO(erg): We might copy the CHECK regarding NavigateToEntry here.
|
| -
|
| - // TODO(erg): We need to maintain the failed_pending_entry_ during
|
| - // |was_failure| here.
|
| -
|
| - if (pending_entry_index_ == -1)
|
| - delete pending_entry_;
|
| - pending_entry_ = nullptr;
|
| - pending_entry_index_ = -1;
|
| -}
|
| -
|
| -void NavigationController::SetPendingEntry(scoped_ptr<NavigationEntry> entry) {
|
| - // TODO(erg): Should be DiscardNonCommittedEntries() if we start porting
|
| - // transient states over.
|
| - DiscardPendingEntry(false);
|
| - pending_entry_ = entry.release();
|
| - DCHECK_EQ(-1, pending_entry_index_);
|
| - // TODO(erg): The content code sends NOTIFICATION_NAV_ENTRY_PENDING here.
|
| -}
|
| -
|
| -void NavigationController::FrameDidCommitProvisionalLoad(Frame* frame) {
|
| - // Our renderer is committing a frame. If this was a real implementation,
|
| - // we'd do something!
|
| - if (frame->parent())
|
| - return;
|
| -
|
| - // TODO(erg): Need some equivalent of InsertOrReplaceEntry(), as we need to
|
| - // prune the history list.
|
| -
|
| - // TODO(erg): We should copy all the logic from the various
|
| - // RendererDidNavigate* methods here.
|
| -
|
| - // TODO(erg): Medium term, we shouldn't be reusing the NavigationEntry, as it
|
| - // appears that blink can change some of the data during the navigation. Do
|
| - // it for now for bootstrapping purposes.
|
| - if (pending_entry_index_ == -1 && pending_entry_) {
|
| - ClearForwardEntries();
|
| - entries_.push_back(pending_entry_);
|
| - last_committed_entry_index_ = static_cast<int>(entries_.size() - 1);
|
| - pending_entry_ = nullptr;
|
| - } else if (pending_entry_index_ != -1 && pending_entry_) {
|
| - last_committed_entry_index_ = pending_entry_index_;
|
| - pending_entry_ = nullptr;
|
| -
|
| - // This was a historical navigation. In this limited prototype, we don't
|
| - // actually do anything with it.
|
| - } else {
|
| - LOG(ERROR)
|
| - << "Hit an unknown case in NavigationController::RendererDidNavigate";
|
| - }
|
| -
|
| - DiscardPendingEntry(false);
|
| -
|
| - delegate_->OnDidNavigate();
|
| -}
|
| -
|
| -void NavigationController::FrameDidNavigateLocally(Frame* frame,
|
| - const GURL& url) {
|
| - // If this is a local navigation of a non-top frame, don't try to commit
|
| - // it.
|
| - if (frame->parent())
|
| - return;
|
| -
|
| - ClearForwardEntries();
|
| -
|
| - // TODO(erg): This is overly cheap handling of local navigations in
|
| - // frames. We don't have all the information needed to construct a real
|
| - // URLRequest.
|
| -
|
| - entries_.push_back(new NavigationEntry(url));
|
| - last_committed_entry_index_ = static_cast<int>(entries_.size() - 1);
|
| -
|
| - delegate_->OnDidNavigate();
|
| -}
|
| -
|
| -void NavigationController::ClearForwardEntries() {
|
| - 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--;
|
| - }
|
| - }
|
| -}
|
| -
|
| -} // namespace web_view
|
|
|