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

Unified Diff: content/renderer/history_entry.h

Issue 1138543002: Better remove HistoryNodes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove frame sequence numbers from serialization Created 5 years, 7 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 | « content/renderer/history_controller.cc ('k') | content/renderer/history_entry.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/history_entry.h
diff --git a/content/renderer/history_entry.h b/content/renderer/history_entry.h
index 62da86a4692b8c244aba3696cf4dfbf3b4e5f01d..627419b6678152738138c6ba3af87f45bee2163f 100644
--- a/content/renderer/history_entry.h
+++ b/content/renderer/history_entry.h
@@ -38,6 +38,7 @@
#include "base/containers/hash_tables.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/scoped_vector.h"
+#include "base/memory/weak_ptr.h"
#include "content/common/content_export.h"
#include "third_party/WebKit/public/platform/WebURLRequest.h"
#include "third_party/WebKit/public/web/WebHistoryItem.h"
@@ -56,14 +57,13 @@ class CONTENT_EXPORT HistoryEntry {
public:
class HistoryNode {
public:
- HistoryNode(HistoryEntry* entry,
- const blink::WebHistoryItem& item,
- int64_t frame_id);
+ HistoryNode(const base::WeakPtr<HistoryEntry>& entry,
+ const blink::WebHistoryItem& item);
~HistoryNode();
- HistoryNode* AddChild(const blink::WebHistoryItem& item, int64_t frame_id);
+ HistoryNode* AddChild(const blink::WebHistoryItem& item);
HistoryNode* AddChild();
- HistoryNode* CloneAndReplace(HistoryEntry* new_entry,
+ HistoryNode* CloneAndReplace(const base::WeakPtr<HistoryEntry>& new_entry,
const blink::WebHistoryItem& new_item,
bool clone_children_of_target,
RenderFrameImpl* target_frame,
@@ -74,12 +74,20 @@ class CONTENT_EXPORT HistoryEntry {
void RemoveChildren();
private:
- HistoryEntry* entry_;
+ // When a HistoryEntry is destroyed, it takes all its HistoryNodes with it.
+ // Use a WeakPtr to ensure that HistoryNodes don't try to illegally access
+ // a dying HistoryEntry, or do unnecessary work when the whole entry is
+ // being destroyed.
+ base::WeakPtr<HistoryEntry> entry_;
scoped_ptr<ScopedVector<HistoryNode> > children_;
blink::WebHistoryItem item_;
+ // We need to track multiple names because the name of a frame can change
+ // over its lifetime. This allows us to clean up all of the names this node
+ // has ever known by when it is destroyed.
+ std::vector<std::string> unique_names_;
};
- HistoryEntry(const blink::WebHistoryItem& root, int64_t frame_id);
+ HistoryEntry(const blink::WebHistoryItem& root);
HistoryEntry();
~HistoryEntry();
@@ -94,14 +102,12 @@ class CONTENT_EXPORT HistoryEntry {
HistoryNode* root_history_node() const { return root_.get(); }
private:
-
scoped_ptr<HistoryNode> root_;
- typedef base::hash_map<uint64_t, HistoryNode*> FramesToItems;
- FramesToItems frames_to_items_;
-
typedef base::hash_map<std::string, HistoryNode*> UniqueNamesToItems;
UniqueNamesToItems unique_names_to_items_;
+
+ base::WeakPtrFactory<HistoryEntry> weak_ptr_factory_;
};
} // namespace content
« no previous file with comments | « content/renderer/history_controller.cc ('k') | content/renderer/history_entry.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698