Canonic has a concept of Views. A view is esentially a visualiser that takes the file or stream resource loaded by the browser and is responsible for rendering it.
By default Canonic will pick the most specific View possible available for a file / content-type but you can change view by clicking the Prism icon on the right side of the address bar.
The views Canonic currently supports are:
- QML View
- JSON View
- Raw source View
- HTMLView (just tells you HTML is not supported)
The plan is to make it possible for people to write their own views in the near future.
Normally with Qt QML you would use either a
Window or a
Item as the root item for your QML UI depending on the type of Qt application you chose.
Canonic supports both root items types though it is recommended to use an
Item for performance reasons.
Canonic separates the rendering and browser logic to a degree (though more needs to be done!)
Canonic maintains two
QQuickRenderControl instances that each manage their own
QQmlEngine instances and contexts. Both instances render to hidden virtual windows that are then composited together using
GLSL. Using this structure Canonic is able to split the main browser UI from the QML content loaded from the web to a degree.
This is why you network loaded QML resources cannot access any of the browser UI QML items via looping through
parent elements. Behnind the curtain they are two separate offscreen windows!
That said there is still a lot of work required to make Canonic fully secure when running natively. Canonic is currently missing most of the sandboxing features offered by modern web browsers (CORS, separate processes, file system protection, permissions, etc) as well as additional logic to handle QMLs access to C++ land. This is part of the reason why Canonic is currently only available via WebAssembly as WASM provides a safe sandbox in which QML browser technology can be explored.
All http(s) requests are proxied over through a CORS proxy to get around CORS issues.
In the future websites that add CORS support for www.canonic.com will not be proxied to increase performance and reduce load on our proxy server.
Hopefully qt WASM will get around to supporting the proxy logic in the
QNetworkManager class eventually so that better proxy systems can be used.