[iOS] Add blob and data to list of schemes that can open as a popup (#28784)

This commit is contained in:
Kyle Hickinson
2025-04-24 09:48:21 -04:00
committed by GitHub
parent e4d68e10f5
commit 64c002ab01
2 changed files with 20 additions and 45 deletions
@@ -53,7 +53,7 @@ extension URL {
public func shouldRequestBeOpenedAsPopup() -> Bool {
// List of schemes that are allowed to be opened in new tabs.
let schemesAllowedToBeOpenedAsPopups = ["http", "https", "javascript", "about", "whatsapp"]
let schemesAllowedToBeOpenedAsPopups = ["http", "https", "blob", "data", "javascript", "about"]
// Treat `window.open("")` the same as `window.open("about:blank")`.
if absoluteString.isEmpty {
@@ -19,22 +19,8 @@ class SchemePermissionTests: XCTestCase {
case https
case about
case javascript
case whatsapp
var description: String {
switch self {
case .http:
return "Http URL Scheme in new tab"
case .https:
return "Https URL Scheme in new tab"
case .about:
return "About URL Scheme in new tab"
case .javascript:
return "Javascript URL Scheme in new tab"
case .whatsapp:
return "WhatsApp URL Scheme in new tab"
}
}
case blob
case data
var url: String {
switch self {
@@ -46,8 +32,10 @@ class SchemePermissionTests: XCTestCase {
return "about:Test"
case .javascript:
return "javascript:alert(Test)"
case .whatsapp:
return "whatsapp://send?text=Test"
case .blob:
return "blob:https://test.com/1234"
case .data:
return "data:,Test"
}
}
}
@@ -59,42 +47,29 @@ class SchemePermissionTests: XCTestCase {
let urlRequestHttps = urlRequestForScheme(.https)
let urlRequestJavascript = urlRequestForScheme(.javascript)
let urlRequestAbout = urlRequestForScheme(.about)
let urlRequestWhatsApp = urlRequestForScheme(.whatsapp)
let urlRequestBlob = urlRequestForScheme(.blob)
let urlRequestData = urlRequestForScheme(.data)
// Test Http URL Scheme
XCTAssertTrue(
urlRequestHttp.request.url!.shouldRequestBeOpenedAsPopup(),
urlRequestHttp.comment
)
XCTAssertTrue(urlRequestHttp.url!.shouldRequestBeOpenedAsPopup())
// Test Https URL Scheme
XCTAssertTrue(
urlRequestHttps.request.url!.shouldRequestBeOpenedAsPopup(),
urlRequestHttps.comment
)
XCTAssertTrue(urlRequestHttps.url!.shouldRequestBeOpenedAsPopup())
// Test Javascript URL Scheme
XCTAssertTrue(
urlRequestJavascript.request.url!.shouldRequestBeOpenedAsPopup(),
urlRequestJavascript.comment
)
XCTAssertTrue(urlRequestJavascript.url!.shouldRequestBeOpenedAsPopup())
// Test About URL Scheme
XCTAssertTrue(
urlRequestAbout.request.url!.shouldRequestBeOpenedAsPopup(),
urlRequestAbout.comment
)
XCTAssertTrue(urlRequestAbout.url!.shouldRequestBeOpenedAsPopup())
// Test Whatapp URL Scheme
XCTAssertTrue(
urlRequestWhatsApp.request.url!.shouldRequestBeOpenedAsPopup(),
urlRequestWhatsApp.comment
)
// Test blob URL Scheme
XCTAssertTrue(urlRequestBlob.url!.shouldRequestBeOpenedAsPopup())
// Test data URL Scheme
XCTAssertTrue(urlRequestData.url!.shouldRequestBeOpenedAsPopup())
}
private func urlRequestForScheme(_ type: SchemeTestType) -> (request: URLRequest, comment: String)
{
(request: URLRequest(url: URL(string: type.url)!), comment: type.description)
private func urlRequestForScheme(_ type: SchemeTestType) -> URLRequest {
return URLRequest(url: URL(string: type.url)!)
}
}