crowdstar / svn-agent-host
A native messaging host to handle SVN commands received from specific Chrome extension.
Requires
- php: >=7.0
- arvenil/ninja-mutex: ~0.6
- bugsnag/bugsnag: ~3.13
- deminy/shellwrap: dev-master
- monolog/monolog: ~1.11
- vlucas/phpdotenv: ~2.2
Requires (Dev)
- overtrue/phplint: ~1.1.0
- phpunit/phpunit: ~6.0
- squizlabs/php_codesniffer: >=2.0
README
A native messaging host to handle SVN commands received from specific Chrome extension.
The host program is built for Mac and Linux. For Windows users, you may have the host program installed in Ubuntu or some other Linux distribution through the Windows Subsystem for Linux.
This repository was for an internal project at Glu Mobile. We make part of the whole project open source to share our experience on
- writing native messaging host in PHP.
- wrapping Subversion operations in PHP without using the Subversion extension.
Run Tests
We use Docker to setup our test environments. You may run unit tests, coding style checks, and other tests on different versions of PHP and Subversion installations (prepared with Docker) using following commands:
PHP_VERSION=7.0 SVN_VERSION=1.8.19 ./bin/ci-on-linux.sh
PHP_VERSION=7.1 SVN_VERSION=1.9.9 ./bin/ci-on-linux.sh
PHP_VERSION=7.2 SVN_VERSION=1.10.3 ./bin/ci-on-linux.sh
PHP_VERSION=7.3 SVN_VERSION=1.11.0 ./bin/ci-on-linux.sh
PHP_VERSION=7.4 SVN_VERSION=1.13.0 ./bin/ci-on-linux.sh
# or, more specifically:
PHP_VERSION=7.1.19 SVN_VERSION=1.10.0 ./bin/ci-on-linux.sh
To run unit tests with current PHP and Subversion installation on your box, just execute following commands directly:
./bin/ci-on-osx.sh
Demo Code
Following demo code shows how to communicate with the native message host from a Chrome extension.
// content.js: a Content Script file. window.addEventListener( "message", function (event) { chrome.runtime.sendMessage( event.data, function (response) { console.log('response from the background script', response); } ); }, false ); window.postMessage({action: "create", data: {"path": "path/1"}}, "*"); // background.js: a Background Script file. chrome.runtime.onMessage.addListener( function (request, sender, sendResponse) { chrome.runtime.sendNativeMessage( 'com.glu.crowdstar.svnagent', // name of the native messaging host. request, function (response) { console.log("response from the native messaging host: ", response); // sendResponse(response); } ); return true; } );