Skip to content

Commit 11789dd

Browse files
committed
fix handling of unicode characters in URL
1 parent d09eeae commit 11789dd

File tree

6 files changed

+20
-12
lines changed

6 files changed

+20
-12
lines changed

Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ keywords = ["webbrowser", "browser"]
1111
license = "MIT OR Apache-2.0"
1212
edition = "2018"
1313

14+
[dependencies]
15+
url = "2"
16+
1417
[target.'cfg(target_arch = "wasm32")'.dependencies.web-sys]
1518
version = "0.3.36"
1619
features = [

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ if webbrowser::open("http://github.com").is_ok() {
3333

3434
| Platform | Supported | Browsers | Test status |
3535
|----------|-----------|----------|-------------|
36-
| macos || default + [others](https://docs.rs/webbrowser/latest/webbrowser/enum.Browser.html) |(unencoded non-ascii URLs currently fail on Github, but work locally, so YMMV) |
36+
| macos || default + [others](https://docs.rs/webbrowser/latest/webbrowser/enum.Browser.html) ||
3737
| windows || default only ||
3838
| linux/*bsd || default only (respects $BROWSER env var, so can be used with other browsers) ||
3939
| android || default only ||

src/lib.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
//!
77
//! | Platform | Supported | Browsers | Test status |
88
//! |----------|-----------|----------|-------------|
9-
//! | macos | ✅ | default + [others](https://docs.rs/webbrowser/latest/webbrowser/enum.Browser.html) | ✅ (unencoded non-ascii URLs currently fail on Github, but work locally, so YMMV) |
9+
//! | macos | ✅ | default + [others](https://docs.rs/webbrowser/latest/webbrowser/enum.Browser.html) | ✅ |
1010
//! | windows | ✅ | default only | ✅ |
1111
//! | linux/*bsd | ✅ | default only (respects $BROWSER env var, so can be used with other browsers) | ✅ |
1212
//! | android | ✅ | default only | ✅ |
@@ -177,7 +177,11 @@ pub fn open(url: &str) -> Result<()> {
177177
/// }
178178
/// ```
179179
pub fn open_browser(browser: Browser, url: &str) -> Result<()> {
180-
os::open_browser_internal(browser, url)
180+
let url_s: String = match url::Url::parse(url) {
181+
Ok(u) => u.as_str().into(),
182+
Err(_) => url.into(),
183+
};
184+
os::open_browser_internal(browser, &url_s)
181185
}
182186

183187
#[test]

src/macos.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@ use common::from_status;
66

77
/// Deal with opening of browsers on Mac OS X, using `open` command
88
#[inline]
9-
pub fn open_browser_internal(browser: Browser, url: &str) -> Result<()> {
9+
pub fn open_browser_internal(browser: Browser, url_raw: &str) -> Result<()> {
10+
let url_s: String = match url::Url::parse(url_raw) {
11+
Ok(u) => u.as_str().into(),
12+
Err(_) => url_raw.into(),
13+
};
14+
let url = &url_s;
1015
let mut cmd = Command::new("open");
1116
match browser {
1217
Browser::Default => from_status(cmd.arg(url).status()),

tests/common.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,5 +70,5 @@ pub async fn check_request_received(browser: Browser, uri: String) {
7070
#[allow(dead_code)]
7171
pub async fn check_browser(browser: Browser, platform: &str) {
7272
check_request_received(browser, format!("/{}", platform)).await;
73-
check_request_received(browser, format!("/{}/nonascii", platform)).await;
73+
check_request_received(browser, format!("/{}/😀😀😀", platform)).await;
7474
}

tests/test_macos.rs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,17 @@ mod common;
55
mod tests {
66
const TEST_PLATFORM: &str = "macos";
77

8-
use super::common::{check_browser, check_request_received};
8+
use super::common::check_browser;
99
use webbrowser::Browser;
1010

1111
#[actix_rt::test]
1212
async fn test_open_default() {
13-
// we've replaced check_browser with check_request_received as UTF-8 test fails currently
14-
// check_browser(Browser::Default, TEST_PLATFORM).await;
15-
check_request_received(Browser::Default, format!("/{}", TEST_PLATFORM)).await;
13+
check_browser(Browser::Default, TEST_PLATFORM).await;
1614
}
1715

1816
#[actix_rt::test]
1917
async fn test_open_safari() {
20-
// we've replaced check_browser with check_request_received as UTF-8 test fails currently
21-
// check_browser(Browser::Safari, TEST_PLATFORM).await;
22-
check_request_received(Browser::Safari, format!("/{}", TEST_PLATFORM)).await;
18+
check_browser(Browser::Safari, TEST_PLATFORM).await;
2319
}
2420

2521
#[actix_rt::test]

0 commit comments

Comments
 (0)