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

Unified Diff: ios/web/navigation/navigation_manager_impl.h

Issue 1028603004: Upstream ios/web/navigation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ios-testing
Patch Set: Rebase and resync Created 5 years, 9 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
Index: ios/web/navigation/navigation_manager_impl.h
diff --git a/ios/web/navigation/navigation_manager_impl.h b/ios/web/navigation/navigation_manager_impl.h
new file mode 100644
index 0000000000000000000000000000000000000000..92f65d45ed5a6d950c120b7df095f3ea2fa93d9a
--- /dev/null
+++ b/ios/web/navigation/navigation_manager_impl.h
@@ -0,0 +1,147 @@
+// Copyright 2013 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.
+
+#ifndef IOS_WEB_NAVIGATION_NAVIGATION_MANAGER_IMPL_H_
+#define IOS_WEB_NAVIGATION_NAVIGATION_MANAGER_IMPL_H_
+
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/mac/scoped_nsobject.h"
+#include "base/memory/scoped_vector.h"
+#include "ios/web/public/navigation_manager.h"
+#include "ui/base/page_transition_types.h"
+#include "url/gurl.h"
+
+@class CRWSessionController;
+@class CRWSessionEntry;
+
+namespace web {
+class BrowserState;
+class NavigationItem;
+struct Referrer;
+class NavigationManagerDelegate;
+class NavigationManagerFacadeDelegate;
+
+// Implementation of NavigationManager.
+// Generally mirrors upstream's NavigationController.
+class NavigationManagerImpl : public web::NavigationManager {
+ public:
+ NavigationManagerImpl(NavigationManagerDelegate* delegate,
+ BrowserState* browser_state);
+ ~NavigationManagerImpl() override;
+
+ // Sets the CRWSessionController that backs this object.
+ // Keeps a strong reference to |session_controller|.
+ // This method should only be called when deserializing |session_controller|
+ // and joining it with its NavigationManager. Other cases should call
+ // InitializeSession() or ReplaceSessionHistory().
+ // TODO(stuartmorgan): Also move deserialization of CRWSessionControllers
+ // under the control of this class, and move the bulk of CRWSessionController
+ // logic into it.
+ void SetSessionController(CRWSessionController* session_controller);
+
+ // Initializes a new session history, supplying a unique |window_name| for the
+ // window (or nil). |opener_id| is the id of opener, or nil if there is none.
+ // |opened_by_dom| is YES if the page was opened by DOM.
+ // |opener_index| is the navigation index of the opener, or -1 if there is
+ // none.
+ void InitializeSession(NSString* window_name,
+ NSString* opener_id,
+ BOOL opened_by_dom,
+ int opener_navigation_index);
+
+ // Replace the session history with a new one, where |items| is the
+ // complete set of navigation items in the new history, and |current_index|
+ // is the index of the currently active item.
+ void ReplaceSessionHistory(ScopedVector<web::NavigationItem> items,
+ int current_index);
+
+ // Sets the delegate used to drive the navigation controller facade.
+ void SetFacadeDelegate(NavigationManagerFacadeDelegate* facade_delegate);
+ NavigationManagerFacadeDelegate* GetFacadeDelegate() const;
+
+ // Helper functions for communicating with the facade layer.
+ // TODO(stuartmorgan): Make these private once the logic triggering them moves
+ // into this layer.
+ void OnNavigationItemChanged();
+ void OnNavigationItemCommitted();
+
+ // Returns the pending entry corresponding to the navigation that is
+ // currently in progress, or nullptr if there is none.
+ NavigationItem* GetPendingItem() const;
+
+ // Returns the transient item if any. This is an item which is removed and
+ // discarded if any navigation occurs. Note that the returned item is owned
+ // by the navigation manager and may be deleted at any time.
+ NavigationItem* GetTransientItem() const;
+
+ // Returns the last committed NavigationItem, which may be NULL if there
+ // are no committed entries.
+ NavigationItem* GetLastCommittedItem() const;
+
+ // Returns the committed NavigationItem at |index|.
+ NavigationItem* GetItemAtIndex(size_t index) const;
+
+ // Temporary accessors and content/ class pass-throughs.
+ // TODO(stuartmorgan): Re-evaluate this list once the refactorings have
+ // settled down.
+ CRWSessionController* GetSessionController();
+ int GetCurrentEntryIndex() const;
+ int GetLastCommittedEntryIndex() const;
+ int GetEntryCount() const;
+ bool RemoveEntryAtIndex(int index);
+ void DiscardNonCommittedEntries();
+ int GetPendingEntryIndex() const;
+ void LoadURL(const GURL& url,
+ const web::Referrer& referrer,
+ ui::PageTransition type);
+ bool CanGoBack() const;
+ bool CanGoForward() const;
+ void GoBack();
+ void GoForward();
+
+ // Convenience accessors to get the underlying NavigationItems from the
+ // SessionEntries returned from |session_controller_|'s -lastUserEntry and
+ // -previousEntry methods.
+ // TODO(marq):Evaluate the long-term utility of these methods.
+ NavigationItem* GetLastUserItem() const;
+ NavigationItem* GetPreviousItem() const;
+
+ // Temporary method. Returns a vector of NavigationItems corresponding to
+ // the SessionEntries of the uderlying CRWSessionController.
+ // TOOD(marq): Remove this method and unfork its caller,
+ // TabRestoreServiceHelper::PopulateTab
+ std::vector<NavigationItem*> GetItems();
+
+ // NavigationManager:
+ BrowserState* GetBrowserState() const override;
+ WebState* GetWebState() const override;
+ web::NavigationItem* GetVisibleItem() const override;
+
+ // Copy state from |navigation_manager|, including a copy of that object's
+ // CRWSessionController.
+ // TODO(marq): This doesn't deep-copy the SessionEntries in the
+ // CRWSessionController.
+ void CopyState(NavigationManagerImpl* navigation_manager);
+ private:
+ // The primary delegate for this manager.
+ NavigationManagerDelegate* delegate_;
+
+ // The BrowserState that is associated with this instance.
+ BrowserState* browser_state_;
+
+ // CRWSessionController that backs this instance.
+ // TODO(stuartmorgan): Fold CRWSessionController into this class.
+ base::scoped_nsobject<CRWSessionController> session_controller_;
+
+ // Weak pointer to the facade delegate.
+ NavigationManagerFacadeDelegate* facade_delegate_;
+
+ DISALLOW_COPY_AND_ASSIGN(NavigationManagerImpl);
+};
+
+} // namespace web
+
+#endif // IOS_WEB_NAVIGATION_NAVIGATION_MANAGER_IMPL_H_
« no previous file with comments | « ios/web/navigation/navigation_manager_facade_delegate.h ('k') | ios/web/navigation/navigation_manager_impl.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698