Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace winapi with windows crate and use webview2-com instead of webview2 #414

Merged
merged 17 commits into from
Sep 23, 2021
Merged

Replace winapi with windows crate and use webview2-com instead of webview2 #414

merged 17 commits into from
Sep 23, 2021

Conversation

wravery
Copy link
Contributor

@wravery wravery commented Sep 13, 2021

What kind of change does this PR introduce? (check at least one)

  • Bugfix
  • Feature
  • Code style update
  • Refactor
  • Documentation
  • Build-related changes
  • Other, please describe:

This change goes along with tauri-apps/tao#206 to switch over to the windows crate. Since they both use webview2-com-sys for the generated bindings, they can share types for common types like HWND.

A big advantage of using the windows crate is that it's trivial to update the bindings when new versions of the WebView2 SDK drop. I noticed a new version had been released a few days ago, and I was able to pick that up and regenerate webview2-com and webview2-com-sys on crates.io within an hour and test it with my forks of TAO and WRY.

Does this PR introduce a breaking change? (check one)

  • Yes. Issue #___
  • No

The PR fulfills these requirements:

  • When resolving a specific issue, it's referenced in the PR's title (e.g. fix: #xxx[,#xxx], where "xxx" is the issue number)
  • A change file is added if any packages will require a version bump due to this PR per the instructions in the readme.

If adding a new feature, the PR's description includes:

  • A convincing reason for adding this feature (to avoid wasting your time, it's best to open a suggestion issue first and wait for approval before working on it)

Other information:

This is related to #133, which was later removed because it only worked for Windows 10 and it required redistributing DLLs along with the app. Both of those have been addressed since then, plus the windows crate now supports the #[implement] macro. I think it's worth another try.

The TAO portion of this change is in tauri-apps/tao#206. Since there are some shared types between the two, both PRs would need to go in together. There's currently a [patch.crates-io] table in my version of WRY which redirects to my fork of TAO, if the TAO version goes in first and is published to crates.io with a version bump, then WRY can take this PR at any point after that and just bump the TAO version in [dependencies] while cleaning up the [patch.crates-io] table.

@wusyong wusyong changed the base branch from dev to next September 13, 2021 11:13
@wravery
Copy link
Contributor Author

wravery commented Sep 14, 2021

Holding off on marking this ready for review because I'd like to remove the [patch.crates-io] table once tauri-apps/tao#206 has been merged with a version coming from the next branch.

@wravery
Copy link
Contributor Author

wravery commented Sep 14, 2021

No new clippy warnings for this one on macOS, so it should be clean now.

@wusyong
Copy link
Member

wusyong commented Sep 18, 2021

Just made it work on Tauri! Thanks for this amazing PR!
One thing I notice is that Tauri will need to use add_GotFocus and add_LostFocus method from controller but one of their parameter has type of Windows::Win32::System::WinRT::EventRegistrationToken. Is this going to work on Windows7?

Cargo.toml Outdated Show resolved Hide resolved
@wravery
Copy link
Contributor Author

wravery commented Sep 18, 2021

Just made it work on Tauri! Thanks for this amazing PR!
One thing I notice is that Tauri will need to use add_GotFocus and add_LostFocus method from controller but one of their parameter has type of Windows::Win32::System::WinRT::EventRegistrationToken. Is this going to work on Windows7?

Yup, I ran into the same thing when I started trying to put it together with the rest of the Tauri runtime. I also got one of my apps working with that version of Tauri. 😄

Despite the namespace, EventRegistrationToken is really just a wrapper struct around a 64-bit (unsigned?) integer with no methods. In other words, it's basically a tuple struct in Rust. I think it's there in the win32metadata just because it's probably used more with WinRT interop/ABI interfaces.

I haven't tested the full stack against Win7 yet, but the WRY examples I did test, like multi_window, reuse a single instance of EventRegistrationToken to register the event/completion handlers. Since there's no need to remove the handlers before dropping the webview, it just puts them in a local variable initialized like so:

let mut token = EventRegistrationToken::default();

Each new event handler overwrites the value of the token from the previous one, and the last one gets dropped at the end of the initialization function in WRY. So I'm pretty sure that won't be a problem for this additional call site in Tauri itself.

@wravery wravery marked this pull request as ready for review September 22, 2021 16:42
@wravery wravery requested a review from a team as a code owner September 22, 2021 16:42
@wravery wravery requested a review from a team September 22, 2021 16:42
Copy link
Member

@wusyong wusyong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are some error handling I think it could improve, but it's already LGTM.
All examples seems working fine!

@wusyong wusyong merged commit e056fb2 into tauri-apps:next Sep 23, 2021
@wravery wravery deleted the webview2-com branch November 11, 2021 17:15
wusyong pushed a commit that referenced this pull request Feb 5, 2022
* refactor: remove unnecessary private mod shared (#400)

* refactor: remove unnecessary private mod shared

* chore: make fmt happy

* refactor: use eventloop proxy in `custom_titlebar` example (#401)

* Switch to tauri-webview2 (#411)

* Switch to tauri-webview2

This is a temporary fix of null pointer crash on `get_content` of web resource request. We will switch it back once upstream is updated.

* Add change file

* fix: remove clipboard property for consistency across platforms (#412)

* Remove clipboard property for consistancy across platforms

* Remove clipboard property for consistency

* feat: add inner_size for webview struct (#394)

* Add inner_size method

* Add inner_size for webview

* Fix feature flag placement

* Add feature flag on inner_size

* Cargo fmt

* feat(linux): allow resizing undecorated window using touch, closes #399 (#402)

* feat(linux): allow resizing undecorated window using touch
closes #399

* fix windows

* update custom_titlebar example

* revert windows changes

* Implement WebContextImpl on mac (#372)

* Implement WebContextImpl on mac

* Update type visibility

* Update cfg declaration

* Move WebContextImpl to wkwebview

* Fix protocol signature

* Add missing feature flag

* Cargo fmt

* Add change file

* Replace winapi with windows crate and use webview2-com instead of webview2 (#414)

* Add Windows and webview2-com  crates

* Replace winapi and webview2-sys with webview2-com

* Get all the examples working with webview2-com

* Point to the published version of webview2-com

* Add a summary in .changes

* Remove extra projects not in config.json

* Run cargo fmt --all

* Fix clippy warnings

* Update to 32-bit compatible webview2-com

* Sync with refactor in next branch of tao

* Use path prefix to prevent variable shadowing

* Fix Linux nightly/stable clippy warnings

* Update to latest review feedback in TAO

* Replace tao dependency with git+branch

* Switch to next branch of upstream tao repo

* doc: add warning doc on webcontext and ptr detections (#419)

* Add warning doc on webcontext and ptr detections

* cargo fmt

* Move Unix's webcontext implementation to webkitgtk (#421)

* chore: add `on_issue_closed.yml` (#424)

* Update webkit2gtk to 0.15 (#429)

* Update webkit2gtk

* Update webkit2gtk to 0.15

* Add changes file

* fix: add feature flags to toggle private APIs (#431)

* Add transparent feature flag

* Add flag for video fullscreen on macOS

* Add change file

* Make clippy happy

* Add clipboard field in WebViewAttributes (#432)

* fix(webview/linux): Use a workaround to fix CORS ... (#435)

... when making XHR requests inside a custom URI scheme context.

Reference: https://github.com/WebKit/WebKit/blob/9b6eae32a61d94be9963ef60d73a6d378099a97d/Source/WebKit/UIProcess/API/glib/WebKitProtocolHandler.cpp#L82-L91

* Delete on_issue_closed.yml (#436)

* Enable secure context back (#438)

* Disable all option on custom url scheme for now

* Enable secure context back

* fix link to tao repo (#439)

* fix(deps): update rust crate http to 0.2.5 (#416)

Co-authored-by: Renovate Bot <[email protected]>

* fix link to tao

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Renovate Bot <[email protected]>
Co-authored-by: Ngo Iok Ui (Wu Yu Wei) <[email protected]>

* chore: remove unused files (#440)

* Update webview2-com and windows crates (#446)

* Replace webivew2-com-sys with prebuilt windows

* Bump to latest versions

* Set file drop handler after window creation

* Point tao back to the upstream next branch

* Rerun cargo fmt and fix Windows clippy warnings

* Add changelog file

* Use aliases for webview2_com instead of windows

* Use time instead of chrono (#447)

* Use time instead of chrono

* Make clippy happy

* fix(macos): unsupported key feedback sound (#448)

* fix(macos): unsupported key feedback sound, closes #

* Fix scope of YES

Co-authored-by: Yu-Wei Wu <[email protected]>

* Revert "fix(macos): unsupported key feedback sound (#448)"

This reverts commit b8fdfd6.

* Use tao commit with windows 0.25

* Switch back to tao's next branch

* feat: enable cookie persistence on Linux (#453)

* feat: enable cookie persistence on Linux

* fmt

* Bump webkit2gtk version (#457)

* Update windows crate to 0.29.0 and webview2-com to 0.9.0 (#455)

* Update to windows 0.29.0

* Add change description

* Update tao dependency (#461)

* fix: ignore transparency on Windows 7 (#460)

* fix: ignore transparency on Windows 7

* Update Cargo.toml

Co-authored-by: Ngo Iok Ui (Wu Yu Wei) <[email protected]>

* Remove clippy check (#462)

* chore: update PR template

* Fix: #276 - Add ability to set custom User Agent (#464)

* feat: Custom user agent attribute

Included example

* Fix setting type on Windows

Co-authored-by: Adit Sachde <[email protected]>
Co-authored-by: Wu Yu Wei <[email protected]>

* Add support of `HTTPBodyStream` (#465)

* Update to 2021 edition (#466)

* Update windows crate to 0.30.0

* change tao dep

* remove "tray" from default features and allow using "ayatana" instead (#469)

The "tray" feature enables dependency on libappindicator3.

On Debian 11 (and some other systems), libappindicator3 was
removed and replaced with libayatana-appindicator3:
  https://www.debian.org/releases/bullseye/amd64/release-notes/ch-information.en.html#noteworthy-obsolete-packages

This new library can be used by enabling the "ayatana" feature.

Depending on the system, only one of those library will usually
be available, and thus, only one of the "tray" and "ayatana"
feature would compile fine.

Having "tray" in default features did prevent building on systems
with no libappindicator3 available.

* Update tray examples (#470)

* chore: update pull request commit exmple

* feat: enable objc's exception feature [TRI-039]

* refactor: IPC handler [TRI-019]

* Feat/isolation (#5)

Co-authored-by: Renovate Bot <[email protected]>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Ngo Iok Ui (Wu Yu Wei) <[email protected]>
Co-authored-by: Yu-Wei Wu <[email protected]>
Co-authored-by: Adit Sachde <[email protected]>
Co-authored-by: Wu Yu Wei <[email protected]>
Co-authored-by: Amr Bashir <[email protected]>
Co-authored-by: Bogdan Bivolaru <[email protected]>
Co-authored-by: Bill Avery <[email protected]>
Co-authored-by: Lucas Fernandes Nogueira <[email protected]>
Co-authored-by: Lucas Fernandes Nogueira <[email protected]>
Co-authored-by: amrbashir <[email protected]>
Co-authored-by: Chip Reed <[email protected]>
Co-authored-by: Jhonatan A <[email protected]>

* chore: fix Linux clippy warnings

* chore(audit): add report

* fix: windows build

* Update gtk to 0.15 (#472)

* chore: new `multi_window` example, closes #459 (#476)

* chore: new `multi_window` example, closes #459

* revert license change

Co-authored-by: Jason <[email protected]>
Co-authored-by: Amr Bashir <[email protected]>
Co-authored-by: Bill Avery <[email protected]>
Co-authored-by: liushuyu <[email protected]>
Co-authored-by: Bogdan Bivolaru <[email protected]>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Renovate Bot <[email protected]>
Co-authored-by: Lucas Fernandes Nogueira <[email protected]>
Co-authored-by: Lucas Fernandes Nogueira <[email protected]>
Co-authored-by: amrbashir <[email protected]>
Co-authored-by: Jhonatan A <[email protected]>
Co-authored-by: Adit Sachde <[email protected]>
Co-authored-by: Michael Alyn Miller <[email protected]>
Co-authored-by: Bill Avery <[email protected]>
Co-authored-by: Aurélien Jacobs <[email protected]>
Co-authored-by: Chip Reed <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants