기여 목록 / 8474691
[password_manager] Use sql::Statement time accessors
SecurityrefactorMerged
비밀번호 메모·보안 경고 테이블과 affiliations DB가 시간 값을 저장하고 읽을 때 손으로 하던 int64 변환을 sql::Statement::ColumnTime()·BindTime()으로 바꿨습니다. sql::Statement 시간 접근자 이행 시리즈(crbug.com/40176243, OSSCA #416)의 세 번째 CL입니다. 3파일 +4/−8, 저장 형식은 바뀌지 않습니다. 2026-09-29에 머지됐습니다(0d3ab367aa34a). ioanap@(+1과 CQ dry run)와 friedrichh@의 +1을 받았고, 제출 요청 뒤 friedrichh@가 CQ를 돌려 한 번에 통과했습니다.
문제 설명
- issue url: https://crbug.com/40176243
sql/statement.h는 시간 컬럼을ColumnTime()·BindTime()으로 다루라고 하면서, 호출처가 손으로 하던 변환을 옮기라는 TODO를 남겨 두었습니다. 앞선 CL 1(history, 8382856)과 CL 2(net NEL store, 8410045)에 이어 남은 곳을 OWNER 그룹별로 옮기고 있습니다.- 이번 범위는 password_manager와 affiliations입니다. 쓰기 쪽은 대부분 이미
BindTime()을 쓰는데 읽기가 옛 방식이라 한 테이블 안에서 비대칭이었습니다. affiliations는 같은 컬럼을 한 함수는ColumnTime()으로, 다른 함수는Time::FromInternalValue()로 읽고 있었습니다.
해결 내용
password_notes_table.cc:date_created읽기를ColumnTime()으로insecure_credentials_table.cc:create_time읽기를ColumnTime()으로,InsertOrReplace()의 쓰기를BindTime()으로affiliation_database.cc:GetAllAffiliationsAndBranding()의last_update_time읽기를ColumnTime()으로
- base::Time create_time = base::Time::FromDeltaSinceWindowsEpoch(
- (base::Microseconds(s->ColumnInt64(4))));
+ base::Time create_time = s->ColumnTime(4);
...
- s.BindInt64(2,
- metadata.create_time.ToDeltaSinceWindowsEpoch().InMicroseconds());
+ s.BindTime(2, metadata.create_time);발굴 과정
시리즈 계획은 #416 등록 때 세워 두었고, 착수 전에 최신 트리(09-24 main)에서 남은 곳을 다시 검색해 여전히 옛 방식인지, 같은 파일에 겹치는 열린 CL이 없는지 확인했습니다. 계획에는 3곳으로 적었지만 다시 세어 보니 insecure_credentials_table.cc의 읽기 1곳이 더 있어 4곳이었습니다. 리뷰어는 두 디렉터리 모두의 OWNER인 ioanap@ 한 명으로 잡았습니다.
테스트 방법
동작 불변 리팩토링이라 새 테스트는 없고 기존 테스트 통과가 검증입니다.
- 등가성:
sql/statement.cc의 구현을 직접 확인했습니다.BindTime()은ToDeltaSinceWindowsEpoch().InMicroseconds()를 저장하고ColumnTime()은FromDeltaSinceWindowsEpoch(Microseconds(...))로 되돌립니다.Time::FromInternalValue()도 Windows epoch 기준 마이크로초라 같은 값입니다. components_unittests증분 빌드 5스텝 13초(전날 밤 트리를 최신화하며 전체 빌드를 해 둔 덕분)PasswordNotesTable*:InsecureCredentialsTable*:*LoginDatabase*:AffiliationDatabase*:*AffiliationBackend*212/212 통과- presubmit 0 경고
배운 점
- 시리즈 CL은 착수 직전에 남은 곳을 다시 센다. 계획할 때의 grep 패턴이 여러 줄에 걸친 읽기를 놓칠 수 있습니다.
- 밤사이 트리를 최신 main으로 동기화하고 자주 쓰는 테스트 바이너리를 미리 빌드해 두면, 다음 날 작은 CL은 몇 초짜리 증분 빌드로 끝납니다.