This repository contains the network service implementation for Mojo.

This repository uses gclient to manage dependencies so to work with it follow
these instructions instead of cloning the repo directly:

1. Install
   [depot_tools](https://www.chromium.org/developers/how-tos/install-depot-tools)
   and add it to your `PATH`.

2. Make a directory for monet and add a `.gclient` file:
   ```
   $ mkdir monet
   $ cd monet
   $ cat <<EOF > .gclient
   solutions = [
   {
     u'managed': False,
     u'name': u'src',
     u'url': u'https://github.com/domokit/monet.git',
     u'custom_deps': {},
     u'deps_file': u'DEPS',
     u'safesync_url': u''}
   ]
   target_os = [u'android']
   EOF
   ```

3. Use gclient to pull down the monet repository and dependencies. This will
   create a directory under monet called `src` containing the main repository.
   ```
   $ gclient sync
   ```

4. Install the android SDK.
   ```
   $ cd src
   $ ./build/install-android-sdks.sh
   ```

5. Build and test using the `claude.py` helper script.
   ```
   $ ./claude.py gn
   $ ./claude.py build
   $ ./claude.py test
   ```

6. Upload patches for review.
   ```
   $ git checkout -b my_branch
   (make changes)
   $ git commit -m "What this patch does"
   $ git cl upload
   ```

7. Land patches (after you get an LGTM).
   ```
   $ git cl land
   ```

8. Make a Release build and test it using the `claude.py` helper script (clobber
   for paranoia's sake).
   ```
   $ rm -rf out/android_Release/ out/Release/
   $ ./claude.py gn --release
   $ ./claude.py build --release
   $ ./claude.py test --release
   ```

9. Upload binary artifacts to Google Cloud storage.
   ```
   $ ./claude.py upload --release
   ```

The code in [//net](net/) is the code from
[https://chromium.googlesource.com/chromium/src/net/](https://chromium.googlesource.com/chromium/src/net/)
at commit 79dc59ac7602413181079ecb463873e29a1d7d0a with `net_patch.diff`
applied. Similarly for the code in [//crypto](crypto/).
