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

Unified Diff: components/web_view/navigation_controller.cc

Issue 1677293002: Bye bye Mandoline (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: moar Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/web_view/navigation_controller.h ('k') | components/web_view/navigation_controller_delegate.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « components/web_view/navigation_controller.h ('k') | components/web_view/navigation_controller_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698