Picking up this thread only 3 years later, we’ve made a lot of progress in this regard, and we would like to coordinate with the maintainers of the Linux APIs a little more. Here are the main categories we’ve made progress on:
>>> JavaScript extensions We have since released public API WKWebExtension and migrated a large amount of code to WebKit to support it. Would a similarly shaped API meet your needs for JavaScript extensions? >>> Context Menu Similar to what you suggested, we have added enough data to WebHitTestResultData that there is no longer a need to use injected bundle callbacks for context menus. Is there information that you would need for your context menus that is not in WebHitTestResultData? >>> Form autofilling We’re prototyping some solutions using _WKContentWorldConfiguration.allowAutofill and .allowElementUserInfo. Are those solutions generic enough that they could be used for your autofill implementations as well? >>> Page snapshot WKWebView.takeSnapshotWithConfiguration is the way we’ve done this for a while. Do you still have a need for something like WKBundlePageCreateSnapshotInViewCoordinates that can’t be met by something like WKWebView.takeSnapshotWithConfiguration? > On Aug 16, 2022, at 7:11 PM, Alex Christensen <achristen...@apple.com> wrote: > > By the way, we have many of the same hurdles that you do and we don’t have > good solutions to all the problems yet. > >> On Aug 16, 2022, at 6:46 PM, Alex Christensen via webkit-dev >> <webkit-dev@lists.webkit.org> wrote: >> >> Thanks for the analysis, Carlos! We are only at the beginning of this >> journey, but I’m glad we’ve begun it together. There will be many bumps >> along the way, but I’m confident it’ll be worth it. >> >>> On Aug 16, 2022, at 6:35 AM, Carlos Garcia Campos via webkit-dev >>> <webkit-dev@lists.webkit.org> wrote: >>> >>> Here is the list of features in GTK and WPE ports exposed using >>> injected bundle. >>> >>> JavaScript extensions >>> --------------------- >>> >>> Used by apps to expose current JavaScript APIs using the JSC API. This >>> includes: >>> >>> - WebKitScriptWorld: The window-object-cleared signal is the initial >>> point for injecting JavaScript. It allows allows to create isolated >>> worlds. >>> - WebKitFrame: To get the JS context. It also allows to get the JS >>> value for a node handle. >>> - WebKitDOMNode: To associate a DOM node to its JSCValue. >>> >>> We still need a way to run code in the JavaScript process. >>> >>> >>> Requests handling >>> ----------------- >>> >>> This is send-request signal to expose willSendRequest. It allows to >>> modify every request before it's sent or even cancel it. This was used >>> by epiphany to implement the adblocker before the content filter api >>> existed. Other apps still use it to modify the uri of requests before >>> being sent. >>> >>> This is not easy to migrate because going to the UI process for every >>> load would be too much. >>> >>> >>> Context Menu >>> ------------ >>> >>> This is the same API we have in the UI process to provide more >>> information and be able to build the menu based on the DOM node. For >>> example epiphany uses it to determine if the context menu was opened >>> over a node that is editable or a password input field. It's also used >>> to get the currently selected text. All that info is set as user data >>> that is passed to the context menu signal in the UI process. >>> >>> I think nowadays most of this information is already in >>> WebHitTestResultData and we can add whatever is missing, so this should >>> be easy to migrate. >>> >>> >>> Form autofilling >>> ---------------- >>> >>> We expose a signal to notify when form controls are associated to a >>> frame. This is used by epiphany to auto fill password fields. >>> >>> This could probably be moved to the UI process or implemented entirely >>> using JavaScript. >>> >>> >>> Password manager >>> ---------------- >>> >>> Related with previous one we have a signal to notify when a form is >>> going to be submitted. Used by epiphany to remember the passwords. >>> >>> This could probably be moved to the UI process or implemented entirely >>> using JavaScript. >>> >>> >>> Console messages >>> ---------------- >>> >>> API to notify the user when a console message is sent. >>> >>> This could be easily moved to the UI process, but I think nobody is >>> currently using this API so it can be just removed instead. >>> >>> >>> Editor >>> ------ >>> >>> Expose the selection changed signal. >>> >>> This could be implemented with JavaScript. I'm not sure this is >>> currently used by any application. >>> >>> >>> Resources load >>> -------------- >>> >>> This is internal implementation used to implement the UI process API >>> for resources. >>> >>> There's APIResourceLoadClient now, so we could probably switch to use >>> that or add whatever is missing. >>> >>> >>> Page snapshot >>> ------------- >>> >>> This is also internal implementation for the UI process API for page >>> snapshots. >>> >>> We could expose this without using injected bundle at all. >>> >>> >>> User messages >>> ------------- >>> >>> API to send custom messages between UI and web process. >>> >>> We might need this depending on how we migrate other features. >>> >>> >>> >>> >>> El dom, 14-08-2022 a las 09:25 +0200, Carlos Garcia Campos via webkit- >>> dev escribió: >>>> El vie, 12-08-2022 a las 13:40 -0700, Alex Christensen via webkit-dev >>>> escribió: >>>>> Hello WebKit developers! We are ramping up to do some serious work >>>>> on >>>>> Site Isolation which includes putting cross-origin iframes in a >>>>> different process than the parent frame. Similar efforts have been >>>>> done in other browser engines and some related work has already >>>>> been >>>>> done in WebKit, but not enough. >>>>> >>>>> This will do strange things to the InjectedBundle APIs, which have >>>>> fundamental assumptions that the whole DOM is in one process and >>>>> that >>>>> communication only happens with one process at a time. We have >>>>> never >>>>> exposed InjectedBundle APIs as public API, but some other >>>>> distributors of WebKit have. As we make progress on this project, >>>>> we >>>>> anticipate that anything in >>>>> Source/WebKit/WebProcess/InjectedBundle/API is subject to >>>>> deprecation >>>>> and removal. This will also allow us to tighten the sandbox on the >>>>> web process, resolve security and performance issues, and have >>>>> cleaner code. >>>>> >>>>> Would the maintainers of the GTK and WPE APIs be willing to assist >>>>> in >>>>> migrating from those APIs and designing replacements in the UI >>>>> process? >>>>> >>>> >>>> Sure. I think the most important feature we expose from injected >>>> bundle >>>> is JavaScript extensibility using the JSC API. >>>> >>>> Next week I can write a summary of the features we currently expose >>>> from injected bundle and possible alternatives. >>>> >>>>> Alex Christensen >>>>> _______________________________________________ >>>>> webkit-dev mailing list >>>>> webkit-dev@lists.webkit.org >>>>> https://lists.webkit.org/mailman/listinfo/webkit-dev >>>>> >>>> >>>> _______________________________________________ >>>> webkit-dev mailing list >>>> webkit-dev@lists.webkit.org <mailto:webkit-dev@lists.webkit.org> >>>> https://lists.webkit.org/mailman/listinfo/webkit-dev >>> >>> -- >>> Carlos Garcia Campos >>> http://pgp.rediris.es:11371/pks/lookup?op=get&search=0xF3D322D0EC4582C3 >>> >>> _______________________________________________ >>> webkit-dev mailing list >>> webkit-dev@lists.webkit.org <mailto:webkit-dev@lists.webkit.org> >>> https://lists.webkit.org/mailman/listinfo/webkit-dev >> >> _______________________________________________ >> webkit-dev mailing list >> webkit-dev@lists.webkit.org >> https://lists.webkit.org/mailman/listinfo/webkit-dev >
_______________________________________________ webkit-dev mailing list webkit-dev@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-dev