Add the notification delegate API surface for the browser.notifications web extension API
Component: WebKit Web Extensions | 0a43f59
WKWebExtensionController는 Safari의 Web Extensions 지원을 담당하는 클래스입니다. 확장 프로그램의 JavaScript가 Chrome, Firefox 확장과 호환되는 browser.* 네임스페이스 API를 호출할 수 있게 해줍니다. 다만 WebKit 자체에는 native notification UI가 없습니다. 그래서 이런 기능은 app delegate 패턴으로 구현됩니다. 확장이 보낸 요청은 UIProcess로 넘어가고, 이를 실제로 처리하는 쪽은 platform-native API를 사용하는 embedding app입니다. 권한 상태를 다시 보고하는 책임도 app에 있습니다. 이번 commit은 browser.notifications를 위한 UIProcess 측 Objective-C API 표면을 추가합니다. 먼저 _WKWebExtensionNotification이라는 모델 클래스가 새로 도입되었습니다. 여기에 더해 WKWebExtensionControllerDelegate에 optional 메서드 네 개가 추가되었는데, notification의 present, update, clear와 permission level 조회를 각각 담당합니다. 선언만 들어간 상태이며, 구현은 아직 포함되지 않았습니다.
Significance
Safari Web Extensions가 host app을 거쳐 native notification을 발생시킬 수 있도록, app 쪽과 주고받을 계약이 먼저 자리를 잡은 셈입니다. Chrome/Firefox의 browser.notifications 호환을 앞두고 미리 마련된 구조입니다. 권한 상태는 mayPresentNotificationsForExtensionContext를 통해 전달됩니다. 결과적으로 authorization 판단의 주체는 WebKit이 아니라 embedding app이 됩니다.