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

Unified Diff: third_party/WebKit/Source/core/page/FrameTree.h

Issue 1968213002: Try harder to make sure that blink::FrameTree::m_uniqueName is truly unique. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: New test, polished the new format a bit, added comments. Created 4 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
Index: third_party/WebKit/Source/core/page/FrameTree.h
diff --git a/third_party/WebKit/Source/core/page/FrameTree.h b/third_party/WebKit/Source/core/page/FrameTree.h
index 2314a451403eb493881dd1b741c4d27b4f07d5fc..90155f1d65a5395d0ce79c1ad742702a3d4a562b 100644
--- a/third_party/WebKit/Source/core/page/FrameTree.h
+++ b/third_party/WebKit/Source/core/page/FrameTree.h
@@ -37,10 +37,17 @@ public:
~FrameTree();
const AtomicString& name() const { return m_name; }
+ void setName(const AtomicString&);
+
+ // Unique name of a frame (unique per page). Mainly used to identify the
+ // frame for session history purposes, but also used in expected results
+ // of layout tests.
+ //
+ // The value should be treated (at least outside of FrameTree.cpp) as an
dcheng 2016/05/31 19:57:47 I would just condense this down to "The value shou
Łukasz Anforowicz 2016/05/31 23:50:20 Done. Let me know if you think I should also remo
dcheng 2016/06/01 20:58:11 I think it makes sense to remove that part of the
Łukasz Anforowicz 2016/06/01 22:31:28 Done.
+ // unstructured, opaque string. The implementation details, including
+ // the format description can be found in FrameTree.cpp, in a comment
+ // inside calculateUniqueNameForChildFrame method.
const AtomicString& uniqueName() const { return m_uniqueName; }
- // If |name| is not empty, |fallbackName| is ignored. Otherwise,
- // |fallbackName| is used as a source of uniqueName.
- void setName(const AtomicString& name, const AtomicString& fallbackName = nullAtom);
// Directly assigns both the name and uniqueName. Can be used when
// |uniqueName| is already known (i.e. when it has been precalculated by
@@ -77,11 +84,39 @@ public:
private:
Frame* deepLastChild() const;
+
+ // Returns true if one of frames in the tree already has unique name equal
+ // to |uniqueNameCandidate|.
+ bool uniqueNameExists(const AtomicString& uniqueNameCandidate) const;
+
+ // Generates a hopefully-but-not-necessarily unique name based on frame's
+ // relative position in the tree and on unique names of ancestors.
+ AtomicString generateOldStyleMaybeUniqueName(bool existingChildFrame) const;
dcheng 2016/05/31 19:57:47 Nit: generateUniqueNameCandidate?
Łukasz Anforowicz 2016/05/31 23:50:20 Done.
+
+ // Generates a hopefully-but-not-necessarily unique suffix based on |child|
+ // absolute position in the tree. If |child| is nullptr, calculations are
+ // made for a position that a new child of |this| would have.
+ String generateLikelyUniqueSuffix(Frame* child) const;
dcheng 2016/05/31 19:57:47 Nit: generateFramePosition?
Łukasz Anforowicz 2016/05/31 23:50:20 Done.
+
+ // Returns a unique name created by appending a suffix to |notYetUniqueName|.
+ // The appended suffix is based on |likelyUniqueSuffix|, but can also
+ // be extended to fulfill the uniqueness requirement.
+ AtomicString ensureUniquenessOfUniqueName(
dcheng 2016/05/31 19:57:47 Nit: generateUniqueNameFromCandidate
Łukasz Anforowicz 2016/05/31 23:50:20 How about // Concatenates |prefix|, |likelyUni
+ const AtomicString& notYetUniqueName,
dcheng 2016/05/31 19:57:47 Nit: candidate
Łukasz Anforowicz 2016/05/31 23:50:20 How about |prefix| (we use |uniqueNameCandidate| a
+ const String& likelyUniqueSuffix) const;
+
+ // Calculates a unique name for |child| frame (which might be nullptr if the
+ // child has not yet been created - i.e. when we need unique name for a new
+ // frame). Tries to use the |assignedName| or |fallbackName| if possible,
+ // otherwise falls back to generating a deterministic,
+ // stable-across-page-reloads string based on |child| position in the tree.
AtomicString calculateUniqueNameForChildFrame(
- bool existingChildFrame,
- const AtomicString& name,
+ Frame* child,
+ const AtomicString& assignedName,
const AtomicString& fallbackName = nullAtom) const;
- bool uniqueNameExists(const AtomicString& name) const;
+
+ // Sets |m_uniqueName| and asserts its uniqueness.
+ void setUniqueName(const AtomicString&);
Member<Frame> m_thisFrame;

Powered by Google App Engine
This is Rietveld 408576698