From 78f67aa873b02fc95245d8f96faafe94a6735f58 Mon Sep 17 00:00:00 2001 From: Omar Rizwan Date: Mon, 8 Feb 2021 04:21:58 -0800 Subject: [PATCH] safari: clean up code a bit --- .../SafariWebExtensionHandler.swift | 54 ++++++++---------- .../UserInterfaceState.xcuserstate | Bin 58385 -> 58415 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 36 +----------- .../TabFS/TabFSService/TabFSService.swift | 13 +---- 4 files changed, 26 insertions(+), 77 deletions(-) diff --git a/extension/safari/TabFS/TabFS Extension/SafariWebExtensionHandler.swift b/extension/safari/TabFS/TabFS Extension/SafariWebExtensionHandler.swift index e5a7b51..d3b6843 100644 --- a/extension/safari/TabFS/TabFS Extension/SafariWebExtensionHandler.swift +++ b/extension/safari/TabFS/TabFS Extension/SafariWebExtensionHandler.swift @@ -12,43 +12,35 @@ class SafariWebExtensionHandler: NSObject, NSExtensionRequestHandling { func beginRequest(with context: NSExtensionContext) { - os_log(.default, "TabFSmsg Received message from browser.runtime.sendNativefffMessage: %@", context as! CVarArg) - let item = context.inputItems[0] as! NSExtensionItem - - os_log(.default, "TabFSmsg item.userInfo %{public}@", item.userInfo as! CVarArg) guard let message = item.userInfo?["message"] as? [AnyHashable: Any] else { return } + + guard message["op"] as! String == "safari_did_connect" else { return } - if message["op"] as! String == "safari_did_connect" { - os_log(.default, "TabFSmsg sdc") + // The XPC service is a subprocess that lives outside the macOS App Sandbox. + // It can do forbidden things like spawn tabfs filesystem and set up WebSocket server. + + let connection = NSXPCConnection(serviceName: "com.rsnous.TabFSService") + connection.remoteObjectInterface = NSXPCInterface(with: TabFSServiceProtocol.self) + connection.resume() + + let service = connection.remoteObjectProxyWithErrorHandler { error in + os_log(.default, "Received error: %{public}@", error as! CVarArg) + } as? TabFSServiceProtocol + + // need this one XPC call to actually initialize the service + service?.upperCaseString("hello XPC") { response in + os_log(.default, "Response from XPC service: %{public}@", response) - // The XPC service is a subprocess that lives outside the macOS App Sandbox. - // It can do forbidden things like spawn tabfs filesystem and set up WebSocket server. - - let connection = NSXPCConnection(serviceName: "com.rsnous.TabFSService") - - connection.remoteObjectInterface = NSXPCInterface(with: TabFSServiceProtocol.self) - - connection.resume() - - let service = connection.remoteObjectProxyWithErrorHandler { error in - os_log(.default, "Received error: %{public}@", error as! CVarArg) - } as? TabFSServiceProtocol - - // need this one XPC call to actually initialize the service - service?.upperCaseString("hello XPC") { response in - os_log(.default, "Response from XPC service: %{public}@", response) - - // FIXME: report port back? - let response = NSExtensionItem() - response.userInfo = [ "message": [ "aResponse to": "moop" ] ] - context.completeRequest(returningItems: [response]) { (what) in - print(what) - } + // FIXME: report port back? + let response = NSExtensionItem() + response.userInfo = [ "message": [ "aResponse to": "moop" ] ] + context.completeRequest(returningItems: [response]) { (what) in + print(what) } - - return } + + return } } diff --git a/extension/safari/TabFS/TabFS.xcodeproj/project.xcworkspace/xcuserdata/osnr.xcuserdatad/UserInterfaceState.xcuserstate b/extension/safari/TabFS/TabFS.xcodeproj/project.xcworkspace/xcuserdata/osnr.xcuserdatad/UserInterfaceState.xcuserstate index 961a29f40cb55283607fd0f756059397bc70510b..7b0289186b4318c53ec2703d00a530939a58bfdd 100644 GIT binary patch delta 25529 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 @@ -36,37 +36,5 @@ landmarkType = "7"> - - - - - - - - diff --git a/extension/safari/TabFS/TabFSService/TabFSService.swift b/extension/safari/TabFS/TabFSService/TabFSService.swift index ee58fa0..c722eac 100644 --- a/extension/safari/TabFS/TabFSService/TabFSService.swift +++ b/extension/safari/TabFS/TabFSService/TabFSService.swift @@ -27,9 +27,7 @@ class TabFSService: NSObject, TabFSServiceProtocol { fsInput = inputPipe.fileHandleForWriting fsOutput = outputPipe.fileHandleForReading - os_log(.default, "TabFSmsg tfs service: willrun") try! fs.run() - os_log(.default, "TabFSmsg tfs service: ran") } var ws: NWListener! @@ -61,7 +59,7 @@ class TabFSService: NSObject, TabFSServiceProtocol { let context = NWConnection.ContentContext(identifier: "context", metadata: [metaData]) conn.send(content: req, contentContext: context, completion: .contentProcessed({ err in if err != nil { - os_log(.default, "%{public}@ error: %{public}@", String(data: req, encoding: .utf8) as! CVarArg, err!.debugDescription as CVarArg) + os_log(.default, "req %{public}@ error: %{public}@", String(data: req, encoding: .utf8) as! CVarArg, err!.debugDescription as CVarArg) // FIXME: ERROR } })) @@ -75,7 +73,6 @@ class TabFSService: NSObject, TabFSServiceProtocol { return } - os_log(.default, "resp %{public}@", String(data: resp, encoding: .utf8) as! CVarArg) self.fsInput.write(withUnsafeBytes(of: UInt32(resp.count)) { Data($0) }) self.fsInput.write(resp) read() @@ -89,7 +86,6 @@ class TabFSService: NSObject, TabFSServiceProtocol { while true { // read from them let length = self.fsOutput.readData(ofLength: 4).withUnsafeBytes { $0.load(as: UInt32.self) } - os_log(.default, "TabFSmsg tfs service: read %{public}d", length) let req = self.fsOutput.readData(ofLength: Int(length)) // send to other side of WEBSOCKET @@ -107,17 +103,10 @@ class TabFSService: NSObject, TabFSServiceProtocol { let response = string.uppercased() reply(response) } -// -// func response(_ resp: Data) { -// fsInput.write(withUnsafeBytes(of: UInt32(resp.count)) { Data($0) }) -// fsInput.write(resp) -// } } class TabFSServiceDelegate: NSObject, NSXPCListenerDelegate { func listener(_ listener: NSXPCListener, shouldAcceptNewConnection newConnection: NSXPCConnection) -> Bool { - os_log(.default, "TabFSmsg tfs service: starting delegate") - let exportedObject = TabFSService() newConnection.exportedInterface = NSXPCInterface(with: TabFSServiceProtocol.self) newConnection.exportedObject = exportedObject