diff --git a/js/stores/windowStore.js b/js/stores/windowStore.js index d7df0c08988..2d0b1e037fb 100644 --- a/js/stores/windowStore.js +++ b/js/stores/windowStore.js @@ -190,16 +190,17 @@ const newFrame = (frameOpts, openInForeground, insertionIndex) => { // Find the closest index to the current frame's index which has // a different ancestor frame key. - if (!insertionIndex) { + if (insertionIndex === undefined) { insertionIndex = FrameStateUtil.findIndexForFrameKey(frames, frameOpts.parentFrameKey) - } - if (insertionIndex === -1) { - insertionIndex = frames.size - } - while (insertionIndex < frames.size) { - ++insertionIndex - if (!FrameStateUtil.isAncestorFrameKey(frames, frames.get(insertionIndex), frameOpts.parentFrameKey)) { - break + if (insertionIndex === -1) { + insertionIndex = frames.size + } else { + while (insertionIndex < frames.size) { + ++insertionIndex + if (!FrameStateUtil.isAncestorFrameKey(frames, frames.get(insertionIndex), frameOpts.parentFrameKey)) { + break + } + } } } if (FrameStateUtil.isFrameKeyPinned(frames, frameOpts.parentFrameKey)) { @@ -415,7 +416,8 @@ const doAction = (action) => { newFrame(action.frameOpts, action.openInForeground) break case WindowConstants.WINDOW_CLONE_FRAME: - newFrame(FrameStateUtil.cloneFrame(action.frameOpts, action.guestInstanceId), action.openInForeground) + let insertionIndex = FrameStateUtil.findIndexForFrameKey(windowState.get('frames'), action.frameOpts.key) + 1 + newFrame(FrameStateUtil.cloneFrame(action.frameOpts, action.guestInstanceId), action.openInForeground, insertionIndex) break case WindowConstants.WINDOW_CLOSE_FRAME: // Use the frameProps we passed in, or default to the active frame diff --git a/test/components/frameTest.js b/test/components/frameTest.js index 992ec772164..b8e38f7c8b3 100644 --- a/test/components/frameTest.js +++ b/test/components/frameTest.js @@ -150,6 +150,44 @@ describe('clone tab', function () { }) }) + describe('index', function () { + Brave.beforeAll(this) + + before(function * () { + this.clickWithTargetPage = Brave.server.url('click_with_target.html') + this.page1 = Brave.server.url('page1.html') + + yield setup(this.app.client) + yield this.app.client + .waitUntilWindowLoaded() + .windowByUrl(Brave.browserWindowUrl) + .waitForUrl(Brave.newTabUrl) + .url(this.clickWithTargetPage) + .waitForVisible('#name') + .click('#name') + yield this.app.client + .windowByUrl(Brave.browserWindowUrl) + .waitForExist('.tab[data-frame-key="2"]') + yield this.app.client + .ipcSend('shortcut-set-active-frame-by-index', 0) + .windowByUrl(Brave.browserWindowUrl) + .ipcSend(messages.SHORTCUT_ACTIVE_FRAME_CLONE) + .windowByUrl(Brave.browserWindowUrl) + .waitForExist('.tab[data-frame-key="3"]') + }) + + it('inserts after the tab to clone', function * () { + var clickWithTargetPage = this.clickWithTargetPage + yield this.app.client + .windowByUrl(Brave.browserWindowUrl) + .ipcSend('shortcut-set-active-frame-by-index', 1) + .windowByUrl(Brave.browserWindowUrl) + .waitUntil(function () { + return this.getAttribute(activeWebview, 'src').then((src) => src === clickWithTargetPage) + }) + }) + }) + describe('history', function () { Brave.beforeAll(this) @@ -283,4 +321,3 @@ function * setup (client) { .waitForVisible('#window') .waitForVisible(urlInput) } -