Skip to content

Commit 6be21ea

Browse files
committed
feat: custom headers
1 parent 22f0bfa commit 6be21ea

File tree

5 files changed

+51
-25
lines changed

5 files changed

+51
-25
lines changed

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -208,9 +208,10 @@ Removes all listeners for the browser events.
208208

209209
Defines the options for opening a URL in the web view.
210210

211-
| Prop | Type | Description |
212-
| ------------- | --------------------------------------------------------- | -------------------------------------------------------------------- |
213-
| **`options`** | <code><a href="#webviewoptions">WebViewOptions</a></code> | A structure containing some configurations to apply to the Web View. |
211+
| Prop | Type | Description |
212+
| ------------------- | --------------------------------------------------------- | -------------------------------------------------------------------- |
213+
| **`options`** | <code><a href="#webviewoptions">WebViewOptions</a></code> | A structure containing some configurations to apply to the Web View. |
214+
| **`customHeaders`** | <code>{ [key: string]: string; }</code> | A map of custom headers to be sent with the request. |
214215

215216

216217
#### WebViewOptions

android/src/main/java/com/capacitorjs/osinappbrowser/InAppBrowserPlugin.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,25 @@ class InAppBrowserPlugin : Plugin() {
7373
handleBrowserCall(call, OSInAppBrowserTarget.WEB_VIEW) { url ->
7474
val options = call.getObject("options")
7575
?: return@handleBrowserCall sendErrorResult(call, OSInAppBrowserError.InputArgumentsIssue(OSInAppBrowserTarget.WEB_VIEW))
76+
77+
val customHeaders: Map<String, String>? = call.getObject("customHeaders")?.let { jsObject ->
78+
val result = mutableMapOf<String, String>()
79+
jsObject.keys().forEach { key ->
80+
when (val value = jsObject.opt(key)) {
81+
is String -> result[key] = value
82+
is Number -> result[key] = value.toString()
83+
}
84+
}
85+
result
86+
}
87+
7688
close {
7789
val webViewOptions = buildWebViewOptions(options)
7890
val webViewRouter = OSIABWebViewRouterAdapter(
7991
context = context,
8092
lifecycleScope = activity.lifecycleScope,
8193
options = webViewOptions,
94+
customHeaders = customHeaders,
8295
flowHelper = OSIABFlowHelper(),
8396
onBrowserPageLoaded = {
8497
notifyListeners(OSIABEventType.BROWSER_PAGE_LOADED.value, null)

example-app/src/pages/Home.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ const Home: React.FC = () => {
8989
animationEffect: iOSAnimation.CROSS_DISSOLVE,
9090
allowsBackForwardNavigationGestures: true
9191
}
92+
},
93+
customHeaders: {
94+
"X-Custom-Header": "CustomValue",
95+
"X-Another-Header": "AnotherValue"
9296
}
9397
});
9498
}

ios/Sources/InAppBrowserPlugin/InAppBrowserPlugin.swift

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,14 @@ public class InAppBrowserPlugin: CAPPlugin, CAPBridgedPlugin {
5353
guard let options: OSInAppBrowserWebViewModel = self.createModel(for: call.getObject("options")) else {
5454
return self.error(call, type: .inputArgumentsIssue(target: .webView))
5555
}
56+
let customHeaders = call.getObject("customHeaders")?.compactMapValues {
57+
($0 as? String) ?? ($0 as? NSNumber)?.stringValue
58+
}
5659
DispatchQueue.main.async {
5760
engine.openWebView(
58-
url,
59-
options.toWebViewOptions(),
61+
url: url,
62+
options: options.toWebViewOptions(),
63+
customHeaders: customHeaders,
6064
onDelegateClose: { [weak self] in
6165
self?.bridge?.viewController?.dismiss(animated: true)
6266
},
@@ -65,7 +69,7 @@ public class InAppBrowserPlugin: CAPPlugin, CAPBridgedPlugin {
6569
},
6670
onDelegateAlertController: { [weak self] alert in
6771
self?.bridge?.viewController?.presentedViewController?.show(alert, sender: nil)
68-
}, { [weak self] event, viewControllerToOpen, data in
72+
}, completionHandler: { [weak self] event, viewControllerToOpen, data in
6973
self?.handleResult(event, for: call, checking: viewControllerToOpen, data: data, error: .failedToOpen(url: url.absoluteString, onTarget: .webView))
7074
}
7175
)
@@ -75,22 +79,22 @@ public class InAppBrowserPlugin: CAPPlugin, CAPBridgedPlugin {
7579

7680
@objc func close(_ call: CAPPluginCall) {
7781
guard loadEngineIfNeeded(call) != nil else { return }
78-
if let openedViewController {
79-
DispatchQueue.main.async {
80-
openedViewController.dismiss(animated: true) { [weak self] in
81-
self?.success(call)
82-
}
82+
guard let openedViewController else {
83+
error(call, type: .noBrowserToClose)
84+
return
85+
}
86+
DispatchQueue.main.async {
87+
openedViewController.dismiss(animated: true) { [weak self] in
88+
self?.success(call)
8389
}
84-
} else {
85-
self.error(call, type: .noBrowserToClose)
8690
}
8791
}
8892
}
8993

9094
private extension InAppBrowserPlugin {
9195
func loadEngineIfNeeded(_ call: CAPPluginCall) -> OSInAppBrowserEngine? {
92-
if self.engine == nil { self.load() }
93-
guard let engine = self.engine else {
96+
if self.engine == nil { load() }
97+
guard let engine else {
9498
self.error(call, type: .bridgeNotInitialised)
9599
return nil
96100
}
@@ -124,11 +128,11 @@ private extension InAppBrowserPlugin {
124128
func handleResult(_ event: OSIABEventType?, for call: CAPPluginCall, checking viewController: UIViewController?, data: [String: Any]?, error: OSInAppBrowserError) {
125129
if let event {
126130
if event == .pageClosed {
127-
self.openedViewController = nil
131+
openedViewController = nil
128132
}
129-
self.notifyListeners(event.rawValue, data: data)
133+
notifyListeners(event.rawValue, data: data)
130134
} else if let viewController {
131-
self.present(viewController) { [weak self] in
135+
present(viewController) { [weak self] in
132136
self?.openedViewController = viewController
133137
self?.success(call)
134138
}
@@ -173,9 +177,10 @@ private extension InAppBrowserPlugin {
173177
}
174178

175179
private extension OSInAppBrowserEngine {
180+
176181
func openExternalBrowser(_ url: URL, _ completionHandler: @escaping (Bool) -> Void) {
177182
let router = OSIABApplicationRouterAdapter()
178-
self.openExternalBrowser(url, routerDelegate: router, completionHandler)
183+
openExternalBrowser(url, routerDelegate: router, completionHandler)
179184
}
180185

181186
func openSystemBrowser(_ url: URL, _ options: OSIABSystemBrowserOptions, _ completionHandler: @escaping (OSIABEventType?, UIViewController?) -> Void) {
@@ -184,16 +189,17 @@ private extension OSInAppBrowserEngine {
184189
onBrowserPageLoad: { completionHandler(.pageLoadCompleted, nil) },
185190
onBrowserClosed: { completionHandler(.pageClosed, nil) }
186191
)
187-
self.openSystemBrowser(url, routerDelegate: router) { completionHandler(nil, $0) }
192+
openSystemBrowser(url, routerDelegate: router) { completionHandler(nil, $0) }
188193
}
189194

190195
func openWebView(
191-
_ url: URL,
192-
_ options: OSIABWebViewOptions,
196+
url: URL,
197+
options: OSIABWebViewOptions,
198+
customHeaders: [String: String]? = nil,
193199
onDelegateClose: @escaping () -> Void,
194200
onDelegateURL: @escaping (URL) -> Void,
195201
onDelegateAlertController: @escaping (UIAlertController) -> Void,
196-
_ completionHandler: @escaping (OSIABEventType?, UIViewController?, [String: Any]?) -> Void
202+
completionHandler: @escaping (OSIABEventType?, UIViewController?, [String: Any]?) -> Void
197203
) {
198204
let callbackHandler = OSIABWebViewCallbackHandler(
199205
onDelegateURL: onDelegateURL,
@@ -208,8 +214,8 @@ private extension OSInAppBrowserEngine {
208214
completionHandler(.pageNavigationCompleted, nil, ["url": url ?? ""])
209215
}
210216
)
211-
let router = OSIABWebViewRouterAdapter(options, cacheManager: OSIABBrowserCacheManager(dataStore: .default()), callbackHandler: callbackHandler)
212-
self.openWebView(url, routerDelegate: router) { completionHandler(nil, $0, nil) }
217+
let router = OSIABWebViewRouterAdapter(options: options, customHeaders: customHeaders, cacheManager: OSIABBrowserCacheManager(dataStore: .default()), callbackHandler: callbackHandler)
218+
openWebView(url, routerDelegate: router) { completionHandler(nil, $0, nil) }
213219
}
214220
}
215221

src/definitions.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,8 @@ export interface OpenInSystemBrowserParameterModel extends OpenInDefaultParamete
165165
export interface OpenInWebViewParameterModel extends OpenInDefaultParameterModel {
166166
/** A structure containing some configurations to apply to the Web View. */
167167
options: WebViewOptions;
168+
/** A map of custom headers to be sent with the request. */
169+
customHeaders?: { [key: string]: string };
168170
}
169171

170172
/**

0 commit comments

Comments
 (0)