| 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 a4816ad06203d02d9e3da21a00efa598bef03ea6..137818292e05459b6a3b480bbe0570a0a001a628 100644
|
| --- a/third_party/WebKit/Source/core/page/FrameTree.cpp
|
| +++ b/third_party/WebKit/Source/core/page/FrameTree.cpp
|
| @@ -58,12 +58,21 @@ void FrameTree::setName(const AtomicString& name, const AtomicString& fallbackNa
|
| m_uniqueName = name;
|
| return;
|
| }
|
| - m_uniqueName = AtomicString(); // Remove our old frame name so it's not considered in uniqueChildName.
|
| - m_uniqueName = parent()->tree().uniqueChildName(name.isEmpty() ? fallbackName : name);
|
| +
|
| + // Remove our old frame name so it's not considered in calculateUniqueNameForChildFrame.
|
| + m_uniqueName = AtomicString();
|
| +
|
| + m_uniqueName = parent()->tree().calculateUniqueNameForChildFrame(true, name, fallbackName);
|
| }
|
|
|
| -void FrameTree::setNameForReplacementFrame(const AtomicString& name, const AtomicString& uniqueName)
|
| +void FrameTree::setPrecalculatedName(const AtomicString& name, const AtomicString& uniqueName)
|
| {
|
| + if (!parent()) {
|
| + ASSERT(uniqueName == name);
|
| + } else {
|
| + ASSERT(!uniqueName.isEmpty());
|
| + }
|
| +
|
| m_name = name;
|
| m_uniqueName = uniqueName;
|
| }
|
| @@ -123,8 +132,19 @@ bool FrameTree::uniqueNameExists(const AtomicString& name) const
|
| return false;
|
| }
|
|
|
| -AtomicString FrameTree::uniqueChildName(const AtomicString& requestedName) const
|
| +AtomicString FrameTree::calculateUniqueNameForNewChildFrame(
|
| + const AtomicString& name,
|
| + const AtomicString& fallbackName) const
|
| +{
|
| + return calculateUniqueNameForChildFrame(false, name, fallbackName);
|
| +}
|
| +
|
| +AtomicString FrameTree::calculateUniqueNameForChildFrame(
|
| + bool existingChildFrame,
|
| + const AtomicString& name,
|
| + const AtomicString& fallbackName) const
|
| {
|
| + const AtomicString& requestedName = name.isEmpty() ? fallbackName : name;
|
| if (!requestedName.isEmpty() && !uniqueNameExists(requestedName) && requestedName != "_blank")
|
| return requestedName;
|
|
|
| @@ -147,23 +167,23 @@ AtomicString FrameTree::uniqueChildName(const AtomicString& requestedName) const
|
| break;
|
| chain.append(frame);
|
| }
|
| - StringBuilder name;
|
| - name.append(framePathPrefix);
|
| + StringBuilder uniqueName;
|
| + uniqueName.append(framePathPrefix);
|
| if (frame) {
|
| - name.append(frame->tree().uniqueName().string().substring(framePathPrefixLength,
|
| + uniqueName.append(frame->tree().uniqueName().string().substring(framePathPrefixLength,
|
| frame->tree().uniqueName().length() - framePathPrefixLength - framePathSuffixLength));
|
| }
|
| for (int i = chain.size() - 1; i >= 0; --i) {
|
| frame = chain[i];
|
| - name.append('/');
|
| - name.append(frame->tree().uniqueName());
|
| + uniqueName.append('/');
|
| + uniqueName.append(frame->tree().uniqueName());
|
| }
|
|
|
| - name.appendLiteral("/<!--frame");
|
| - name.appendNumber(childCount() - 1);
|
| - name.appendLiteral("-->-->");
|
| + uniqueName.appendLiteral("/<!--frame");
|
| + uniqueName.appendNumber(childCount() - (existingChildFrame ? 1 : 0));
|
| + uniqueName.appendLiteral("-->-->");
|
|
|
| - return name.toAtomicString();
|
| + return uniqueName.toAtomicString();
|
| }
|
|
|
| Frame* FrameTree::scopedChild(unsigned index) const
|
|
|