아래의 구조에서 timestamp1에서 "url02"을 방문하면, 의도한 것 처럼 root에서 2번째 위치에 "dir01"이 정상적으로 위치한다. 이 상황은 timestamp2이다. 그러나 "url04"을 클릭하면 아래 timestamp3 처럼 되기를 바라는데, 그렇지 않다. 이유는 무엇이고 어떻게 수정해야하는가?

== timestamp1 ==
root
├── url01
├── dir01
│   ├── dir02
│   │   └── url03
│   └── url02
├── dir03
│   └── dir04
│       └── url04
└── url05

== timestamp2 ==
root
├── url01
├── dir01
│   ├── url02
│   └── dir02
│       └── url03
├── dir03
│   └── dir04
│       └── url04
└── url05

== timestamp2 ==
root
├── url01
├── dir03
│   └── dir04
│       └── url04
├── dir01
│   ├── url02
│   └── dir02
│       └── url03
└── url05

// 함수: 특정 즐겨찾기를 루트 또는 폴더 내에서 최상단으로 이동
function moveBookmarkToTop(bookmarkNode) {
    const rootId = '1'; // 루트의 ID는 일반적으로 '1'입니다.

    if (bookmarkNode.parentId === rootId) {
        // **최상단(루트) 내 즐겨찾기 이동**
        chrome.bookmarks.getChildren(rootId, function(children) {
            const currentIndex = children.findIndex(child => child.id === bookmarkNode.id);
            if (currentIndex > 0) { // 첫 번째를 제외한 경우
                // 첫 번째는 그대로 두고, 해당 즐겨찾기를 인덱스 1로 이동
                chrome.bookmarks.move(bookmarkNode.id, { parentId: rootId, index: 1 }, function(movedBookmark) {
                    console.log(`루트 내 즐겨찾기 "${movedBookmark.title}"을(를) 인덱스 1로 이동했습니다.`);
                });
            }
        });
    } else {
        // **폴더 내 즐겨찾기 이동**
        const folderId = bookmarkNode.parentId;

        // 1. 해당 폴더를 루트 내에서 최상단으로 이동 (첫 번째는 유지)
        chrome.bookmarks.getChildren(rootId, function(rootChildren) {
            const folderIndex = rootChildren.findIndex(child => child.id === folderId);
            if (folderIndex > 0) { // 첫 번째를 제외한 경우
                chrome.bookmarks.move(folderId, { parentId: rootId, index: 1 }, function(movedFolder) {
                    console.log(`폴더 "${movedFolder.title}"을(를) 루트 내 인덱스 1로 이동했습니다.`);
                });
            }
        });

        // 2. 폴더 내에서 해당 즐겨찾기를 최상단으로 이동
        chrome.bookmarks.getChildren(folderId, function(folderChildren) {
            const bookmarkIndex = folderChildren.findIndex(child => child.id === bookmarkNode.id);
            if (bookmarkIndex > 0) { // 폴더 내 첫 번째를 제외한 경우
                chrome.bookmarks.move(bookmarkNode.id, { parentId: folderId, index: 0 }, function(movedBookmark) {
                    console.log(`폴더 "${folderId}" 내 즐겨찾기 "${movedBookmark.title}"을(를) 폴더의 최상단으로 이동했습니다.`);
                });
            }
        });
    }
}

// 함수: 즐겨찾기 트리를 순회하며 특정 URL을 가진 즐겨찾기를 찾음
function findAndMoveBookmark(bookmarkNodes, targetUrl) {
    for (let node of bookmarkNodes) {
        if (node.url === targetUrl) {
            moveBookmarkToTop(node);
            // URL은 유일하다고 가정하고 찾으면 종료
            return;
        }
        if (node.children && node.children.length > 0) {
            findAndMoveBookmark(node.children, targetUrl);
        }
    }
}

// 이벤트 리스너: 히스토리에서 방문한 URL
chrome.history.onVisited.addListener(function(result) {
    const visitedUrl = result.url;
    chrome.bookmarks.getTree(function(bookmarkTreeNodes) {
        findAndMoveBookmark(bookmarkTreeNodes, visitedUrl);
    });
});

// 이벤트 리스너: 웹 요청 전에 발생하는 이벤트
chrome.webRequest.onBeforeRequest.addListener(function(details) {
    console.info("방문 URL :" + details.url);
    chrome.bookmarks.getTree(function(bookmarkTreeNodes) {
        findAndMoveBookmark(bookmarkTreeNodes, details.url);
    });
},
{ urls: ["<all_urls>"] }
);