Dactyloidae/mobile/ios/Client/Frontend/Metadata Parsing/MetadataParserHelper.swift
2026-06-26 21:04:09 -07:00

55 lines
1.8 KiB
Swift

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
import Foundation
import Shared
import Storage
import XCGLogger
import WebKit
private let log = Logger.browserLogger
class MetadataParserHelper: TabContentScript {
private weak var tab: Tab?
private let profile: Profile
class func name() -> String {
return "MetadataParserHelper"
}
required init(tab: Tab, profile: Profile) {
self.tab = tab
self.profile = profile
tab.injectUserScriptWith(fileName: "page-metadata-parser")
tab.injectUserScriptWith(fileName: "MetadataHelper")
}
func scriptMessageHandlerName() -> String? {
return "metadataMessageHandler"
}
func userContentController(_ userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) {
// Get the metadata out of the page-metadata-parser, and into a type safe struct as soon
// as possible.
guard let dict = message.body as? [String: Any],
let tab = self.tab,
let pageURL = tab.url?.displayURL,
let pageMetadata = PageMetadata.fromDictionary(dict) else {
log.debug("Page contains no metadata!")
return
}
let userInfo: [String: Any] = [
"isPrivate": self.tab?.isPrivate ?? true,
"pageMetadata": pageMetadata,
"tabURL": pageURL
]
tab.pageMetadata = pageMetadata
TabEvent.post(.didLoadPageMetadata(pageMetadata), for: tab)
NotificationCenter.default.post(name: NotificationOnPageMetadataFetched, object: nil, userInfo: userInfo)
}
}