한동안 보지 않은 탭이라도 작성 중인 원고나 전송이 남아 있을 수 있다. 사용하지 않은 시간만으로 닫을 대상을 정하면 기억해야 할 일이 먼저 사라진다. 북극성에서는 안전한 읽기 탭을 좁게 고르고 판단할 수 없는 경우도 유지하는 쪽으로 조건을 세웠다.

시간 조건은 첫 문턱일 뿐이다

canSleepTab은 기본 5분 비활성, 사람 소유, 비로딩 상태와 고정·현재·참고 탭 보호 등을 확인한다. 이미 dormant이거나 releasing인 항목도 다시 대상으로 삼지 않는다. 하지만 이 함수가 통과했다고 바로 문서를 닫지 않는다. 호스트와 실제 프레임의 검사가 이어진다.

호스트는 시크릿·재생 중·캡처·개발 도구·이동 대기·사용자 상호작용·초안·인증 화면 등을 추가로 제외한다. 다운로드 경로 예약이 하나라도 있는 현재 구현의 조건은 해당 후보만의 전송 여부보다 넓다. 보호 범위를 실제 코드보다 좁게 설명하면 다른 탭에서 받는 파일 때문에 왜 휴면하지 않는지 이해하기 어렵다.

아직 타이핑하지 않은 편집기도 유지한다

pageCanSleep은 form·textarea·input·select·contenteditable·canvas·object·embed가 있으면 거절한다. 첫 글자를 쓰기 전이라도 편집기와 파일 선택이 있는 화면은 보수적으로 유지한다. 단순 검색 폼도 들어갈 수 있는 넓은 조건이므로 모든 읽기 페이지가 반드시 잠드는 정책은 아니다.

닫힌 shadow root 안에 편집기를 숨길 수 있는 custom element도 보수적으로 제외한다. 재생 중 video·audio와 mediaSession, held·pending Web Lock도 본다. 값을 읽어 모델에 보내는 기능이 아니라 페이지를 그대로 두어야 할 구조가 있는지 고정 검사하는 함수다. 탐지하지 못한 모든 앱 상태를 완전 보존한다고 주장하지 않는다.

프레임 하나라도 확인하지 못하면 유지한다

호스트는 mainFrame의 하위 프레임을 순회하며 안전 검사 결과가 정확히 true인지 본다. 각 검사는 제한 시간을 두고 예외나 시간 초과도 안전하지 않은 것으로 처리한다. 프레임을 읽을 수 없다고 그 안에 작성 내용이 없다고 추정하지 않는다. 불확실할 때 유지하는 것이 이 기능의 비용이다.

검사를 기다리는 동안 탭이 바뀔 수 있으므로 모두 읽은 뒤 eligible과 contents 정체성, documentEpoch를 다시 본다. 앞서 읽은 안전 결과를 새 문서에 적용하지 않기 위한 위치다. 이 비동기 재검사는 boolean 조건표만으로는 복제되지 않는다. 실제 닫기와 연결할 때 반드시 따로 다뤄야 할 경계다.

beforeunload가 거절하면 강제로 닫지 않는다

휴면 시에는 이동 이력에서 제한된 URL·제목과 배율·음소거를 남긴 뒤 renderer를 닫는다. close는 waitForBeforeUnload를 사용한다. 문서가 unload를 막으면 강제로 우회하지 않고 releasing을 되돌리고 일정 시간 다시 보호한다. 메모리를 줄인다는 목적이 페이지의 거부를 무시할 권한을 만들지 않는다.

한 페이지의 느린 unload 때문에 다른 업무 전체를 기다리게 하지 않는 구조도 있다. 실제 renderer가 해제됐는지는 destroyed와 후속 상태의 문제이며 후보 계산만으로 끝났다고 부를 수 없다. 나는 보호 여부, 닫기 시도, 실제 해제를 별도 단계로 읽었다. 그래야 버튼 설명과 실행기의 결과가 같은 의미가 된다.

합성 정책의 허용은 실제 안전 확인이 아니다

새 모듈에서는 보호 조건을 선언 상태로 넣어 어떤 이유 때문에 후보가 막히는지 볼 수 있다. 모든 프레임의 안전과 unload 허용이 선언돼도 renderer_released는 False다. DOM을 검사하거나 작업의 현재 권한을 인증하는 예제가 아니기 때문이다. 실제 호스트가 가진 재검사와 닫기 수명을 지우지 않았다.

이번 글은 현재 코드와 원래 시험의 선택 범위를 읽어 작성했고 사용자의 탭을 새로 재우지 않았다. 원래 단위시험은 시간 경계와 고정·AI 소유·로딩·전송 보호를 다룬다. 독립 합성 시험은 별도로 실행했다. 보호가 많아 절약이 덜 되더라도 작성 중인 자료가 남아야 한다는 판단을 재사용할 수 있게 공개한다.