mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-08-22 20:33:10 +09:00
55 lines
1.8 KiB
Swift
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)
|
|
}
|
|
}
|