| Index: content/browser/frame_host/navigation_entry_impl.h
|
| diff --git a/content/browser/frame_host/navigation_entry_impl.h b/content/browser/frame_host/navigation_entry_impl.h
|
| index 0528da0db31bda4f4087a3beb3d0f6e105734986..2bacbbaa208a915a65f45fb8dba9934acb2ceaf8 100644
|
| --- a/content/browser/frame_host/navigation_entry_impl.h
|
| +++ b/content/browser/frame_host/navigation_entry_impl.h
|
| @@ -7,8 +7,10 @@
|
|
|
| #include "base/basictypes.h"
|
| #include "base/memory/ref_counted.h"
|
| +#include "base/memory/scoped_vector.h"
|
| #include "base/time/time.h"
|
| #include "content/browser/frame_host/frame_navigation_entry.h"
|
| +#include "content/browser/frame_host/frame_tree_node.h"
|
| #include "content/browser/site_instance_impl.h"
|
| #include "content/common/frame_message_enums.h"
|
| #include "content/public/browser/favicon_status.h"
|
| @@ -31,7 +33,8 @@ class CONTENT_EXPORT NavigationEntryImpl
|
| // history item. The tree currently only tracks the main frame.
|
| // TODO(creis): Populate the tree with subframe entries in --site-per-process.
|
| struct TreeNode {
|
| - TreeNode(FrameNavigationEntry* frame_entry);
|
| + TreeNode(NavigationEntryImpl* entry,
|
| + FrameNavigationEntry* frame_entry);
|
| ~TreeNode();
|
|
|
| // Returns a deep copy of the tree with copies of each node's
|
| @@ -41,9 +44,18 @@ class CONTENT_EXPORT NavigationEntryImpl
|
| // NavigationEntries of the same tab.
|
| TreeNode* Clone() const;
|
|
|
| + void SetFrameEntry(FrameNavigationEntry* new_frame_entry);
|
| +
|
| + // Pointer to the NavigationEntry that owns us.
|
| + // TODO(creis): Remove this.
|
| + NavigationEntryImpl* entry;
|
| +
|
| // Ref counted pointer that keeps the FrameNavigationEntry alive as long as
|
| // it is needed by this node's NavigationEntry.
|
| scoped_refptr<FrameNavigationEntry> frame_entry;
|
| +
|
| + // List of child TreeNodes, which will be deleted when this node is.
|
| + ScopedVector<TreeNode> children;
|
| };
|
|
|
| static NavigationEntryImpl* FromNavigationEntry(NavigationEntry* entry);
|
| @@ -115,6 +127,10 @@ class CONTENT_EXPORT NavigationEntryImpl
|
| const std::vector<GURL>& GetRedirectChain() const override;
|
| bool IsRestored() const override;
|
|
|
| + TreeNode* root_node() const {
|
| + return frame_tree_.get();
|
| + }
|
| +
|
| // Creates a copy of this NavigationEntryImpl that can be modified
|
| // independently from the original. Does not copy any value that would be
|
| // cleared in ResetForCommit.
|
| @@ -124,6 +140,14 @@ class CONTENT_EXPORT NavigationEntryImpl
|
| // tab) and one that draws them from a different pool (for use in a new tab).
|
| NavigationEntryImpl* Clone() const;
|
|
|
| + // Clears the frame tree before adding new TreeNodes to it.
|
| + void ResetFrameTree();
|
| +
|
| + TreeNode* GetTreeNodeForFrame(FrameTreeNode* frame_tree_node);
|
| +
|
| + // Returns the FrameNavigationEntry corresponding to |frame_tree_node|.
|
| + FrameNavigationEntry* GetFrameEntryForFrame(FrameTreeNode* frame_tree_node);
|
| +
|
| // Once a navigation entry is committed, we should no longer track several
|
| // pieces of non-persisted state, as documented on the members below.
|
| void ResetForCommit();
|
| @@ -138,6 +162,7 @@ class CONTENT_EXPORT NavigationEntryImpl
|
| // Note that the SiteInstance should usually not be changed after it is set,
|
| // but this may happen if the NavigationEntry was cloned and needs to use a
|
| // different SiteInstance.
|
| + // TODO(creis): This should live on the FNE, not here.
|
| void set_site_instance(SiteInstanceImpl* site_instance);
|
| SiteInstanceImpl* site_instance() const {
|
| return frame_tree_->frame_entry->site_instance();
|
| @@ -250,23 +275,17 @@ class CONTENT_EXPORT NavigationEntryImpl
|
| should_clear_history_list_ = should_clear_history_list;
|
| }
|
|
|
| - // Indicates which FrameTreeNode to navigate. Currently only used if the
|
| - // --site-per-process flag is passed.
|
| - int64 frame_tree_node_id() const {
|
| - return frame_tree_node_id_;
|
| - }
|
| - void set_frame_tree_node_id(int64 frame_tree_node_id) {
|
| - frame_tree_node_id_ = frame_tree_node_id;
|
| - }
|
| -
|
| // Returns the history URL for a data URL to use in Blink.
|
| GURL GetHistoryURLForDataURL() const;
|
|
|
| CommonNavigationParams ConstructCommonNavigationParams(
|
| + const FrameNavigationEntry& frame_entry,
|
| FrameMsg_Navigate_Type::Value navigation_type) const;
|
| CommitNavigationParams ConstructCommitNavigationParams(
|
| base::TimeTicks navigation_start) const;
|
| + // TODO(creis): NavigationEntry should not depend on NavigationController.
|
| HistoryNavigationParams ConstructHistoryNavigationParams(
|
| + const FrameNavigationEntry& frame_entry,
|
| NavigationControllerImpl* controller) const;
|
| StartNavigationParams ConstructStartNavigationParams() const;
|
|
|
| @@ -290,6 +309,12 @@ class CONTENT_EXPORT NavigationEntryImpl
|
| // For all new fields, update |Clone| and possibly |ResetForCommit|.
|
| // WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
|
|
|
| + typedef base::hash_map<int64, TreeNode*> FramesToItems;
|
| + FramesToItems frames_to_items_;
|
| +
|
| + typedef base::hash_map<std::string, TreeNode*> UniqueNamesToItems;
|
| + UniqueNamesToItems unique_names_to_items_;
|
| +
|
| // Tree of FrameNavigationEntries, one for each frame on the page.
|
| // TODO(creis): Once FrameNavigationEntries can be shared across multiple
|
| // NavigationEntries, we will need to update Session/Tab restore. For now,
|
| @@ -305,7 +330,6 @@ class CONTENT_EXPORT NavigationEntryImpl
|
| bool update_virtual_url_with_url_;
|
| base::string16 title_;
|
| FaviconStatus favicon_;
|
| - PageState page_state_;
|
| int32 page_id_;
|
| SSLStatus ssl_;
|
| ui::PageTransition transition_type_;
|
| @@ -396,13 +420,6 @@ class CONTENT_EXPORT NavigationEntryImpl
|
| // persisted, because it is currently only used in tests.
|
| std::string frame_to_navigate_;
|
|
|
| - // If not -1, this indicates which FrameTreeNode to navigate. This field is
|
| - // not persisted because it is experimental and only used when the
|
| - // --site-per-process flag is passed. It is cleared in |ResetForCommit|
|
| - // because we only use it while the navigation is pending.
|
| - // TODO(creis): Move this to FrameNavigationEntry.
|
| - int64 frame_tree_node_id_;
|
| -
|
| #if defined(OS_ANDROID)
|
| // The time at which Chrome received the Android Intent that triggered this
|
| // URL load operation. Reset at commit and not persisted.
|
|
|