Bug 573616 - [GTK] BrowserFunction only work in first browser instance (Part 2)

Implement BrowserFunction calls with synchronous XMLHttpRequests
to a custom protocol handler.

SWT registers a custom protocol handler (swt://) and BrowserFunction
calls from JavaScript to Java are performed by issuing HTTP requests
using this protocol. The function to call and its arguments are JSON
encoded in the request URI. Function return value is JSON encoded
in the response body.

JSON codec created for the Edge integration on Windows is reused.

For early and reliable JavaScript injection after page navigation
and reload, BrowserFunction scripts are registered with the user
content manager API. This prevents race conditions compared to using
execute() from the LocationListener.changing or ProgressListener.completed.

An automated test (test_BrowserFunction_multiprocess) is included
to verify correct BrowserFunction operation across multiple Browser
instances and page reloads.

Change-Id: I33f97ee5710b561b4c3a71e1567ae21814ac43ee
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.swt/+/191032
Tested-by: Alexander Kurtakov <akurtako@redhat.com>
Reviewed-by: Alexander Kurtakov <akurtako@redhat.com>
11 files changed
tree: 812d54eb2ae5c231097e8633c3d9cbfbe04f1153
  1. bundles/
  2. container/
  3. examples/
  4. features/
  5. local-build/
  6. tests/
  7. .gitattributes
  8. .gitignore
  9. CONTRIBUTING
  10. Jenkinsfile
  11. LICENSE
  12. NOTICE
  13. pom.xml
  14. README.md
README.md

Contributing to SWT

Thanks for your interest in this project.

Developer resources:

See the following description for how to contribute a feature or a bug fix to SWT.

Information regarding source code management, builds, coding standards, and more and be found under the following link.

Contributor License Agreement:

Before your contribution can be accepted by the project, you need to create and electronically sign the Eclipse Foundation Contributor License Agreement (CLA).

Contact:

Contact the project developers via the project's “dev” list.

Search for bugs:

This project uses Bugzilla to track ongoing development and issues.

Create a new bug:

Be sure to search for existing bugs before you create another one. Remember that contributions are always welcome!