| Index: third_party/WebKit/Source/core/page/FrameTree.cpp
|
| diff --git a/third_party/WebKit/Source/core/page/FrameTree.cpp b/third_party/WebKit/Source/core/page/FrameTree.cpp
|
| index e5b70f736e45c19dd7c395c724e3aa29e60fc621..5539d1d900a10f7ed910443dba9c091217872fee 100644
|
| --- a/third_party/WebKit/Source/core/page/FrameTree.cpp
|
| +++ b/third_party/WebKit/Source/core/page/FrameTree.cpp
|
| @@ -78,29 +78,30 @@ void FrameTree::setName(const AtomicString& name)
|
| if (toLocalFrame(m_thisFrame)->loader().stateMachine()->committedFirstRealDocumentLoad())
|
| return;
|
|
|
| - // Remove our old frame name so it's not considered in calculateUniqueNameForChildFrame
|
| - // and appendUniqueSuffix calls below.
|
| + // Leave main frame's unique name set to a null string.
|
| + if (!parent())
|
| + return;
|
| +
|
| + // Remove our old frame name so it's not considered in
|
| + // calculateUniqueNameForChildFrame call below.
|
| m_uniqueName = AtomicString();
|
|
|
| // Calculate a new unique name based on inputs.
|
| - if (parent()) {
|
| - setUniqueName(
|
| - parent()->tree().calculateUniqueNameForChildFrame(m_thisFrame, name, nullAtom));
|
| - } else if (name.isEmpty() || !uniqueNameExists(name)) {
|
| - // Only main frame can have an empty unique name, so for main frames
|
| - // emptiness guarantees uniquness.
|
| - setUniqueName(name);
|
| - } else {
|
| - setUniqueName(appendUniqueSuffix(name, "<!--framePosition"));
|
| - }
|
| + setUniqueName(
|
| + parent()->tree().calculateUniqueNameForChildFrame(m_thisFrame, name, nullAtom));
|
| }
|
|
|
| void FrameTree::setPrecalculatedName(const AtomicString& name, const AtomicString& uniqueName)
|
| {
|
| m_name = name;
|
|
|
| - // Non-main frames should have a non-empty unique name.
|
| - DCHECK(!parent() || !uniqueName.isEmpty());
|
| + if (parent()) {
|
| + // Non-main frames should have a non-empty unique name.
|
| + DCHECK(!uniqueName.isEmpty());
|
| + } else {
|
| + // Unique name of main frames should always stay empty.
|
| + DCHECK(uniqueName.isEmpty());
|
| + }
|
|
|
| // TODO(lukasza): We would like to assert uniqueness below (i.e. by calling
|
| // setUniqueName), but
|
| @@ -313,10 +314,9 @@ AtomicString FrameTree::calculateUniqueNameForChildFrame(
|
| // backcompatibility-aware approach has resulted so far in the following
|
| // rather baroque format... :
|
| //
|
| - // uniqueName ::= <assignedName> | <generatedName>
|
| + // uniqueName ::= <nullForMainFrame> | <assignedName> | <generatedName>
|
| // (generatedName is used if assignedName is
|
| - // 1) non-unique / conflicts with other frame's unique name or
|
| - // 2) assignedName is empty for a non-main frame)
|
| + // non-unique / conflicts with other frame's unique name.
|
| //
|
| // assignedName ::= value of iframe's name attribute
|
| // or value assigned to window.name (*before* the first
|
| @@ -327,9 +327,7 @@ AtomicString FrameTree::calculateUniqueNameForChildFrame(
|
| // not unique after all)
|
| //
|
| // oldGeneratedName ::= "<!--framePath //" ancestorChain "/<!--frame" childCount "-->-->"
|
| - // (main frame is special - oldGeneratedName for main frame
|
| - // is always the frame's assignedName; oldGeneratedName is
|
| - // generated by generateUniqueNameCandidate method).
|
| + // (oldGeneratedName is generated by generateUniqueNameCandidate method).
|
| //
|
| // childCount ::= current number of siblings
|
| //
|
| @@ -344,20 +342,17 @@ AtomicString FrameTree::calculateUniqueNameForChildFrame(
|
| // newUniqueSuffix ::= "<!--framePosition" framePosition "/" retryNumber "-->"
|
| //
|
| // framePosition ::= "-" numberOfSiblingsBeforeChild [ framePosition-forParent? ]
|
| - // | <empty string for main frame>
|
| //
|
| // retryNumber ::= smallest non-negative integer resulting in unique name
|
| }
|
|
|
| void FrameTree::setUniqueName(const AtomicString& uniqueName)
|
| {
|
| - // Main frame is the only frame that can have an empty unique name.
|
| - if (parent()) {
|
| - DCHECK(!uniqueName.isEmpty() && !uniqueNameExists(uniqueName));
|
| - } else {
|
| - DCHECK(uniqueName.isEmpty() || !uniqueNameExists(uniqueName));
|
| - }
|
| + // Only subframes can have a non-null unique name - setUniqueName should
|
| + // only be called for subframes and never for a main frame.
|
| + DCHECK(parent());
|
|
|
| + DCHECK(!uniqueName.isEmpty() && !uniqueNameExists(uniqueName));
|
| m_uniqueName = uniqueName;
|
| }
|
|
|
|
|