| OLD | NEW | 
|---|
| 1 Adblock Plus for Chrome, Opera and Safari | 1 Adblock Plus for Chrome, Opera and Safari | 
| 2 ========================================= | 2 ========================================= | 
| 3 | 3 | 
| 4 This repository contains the platform-specific Adblock Plus source code for | 4 This repository contains the platform-specific Adblock Plus source code for | 
| 5 Chrome, Opera and Safari. It can be used to build Adblock Plus for these | 5 Chrome, Opera and Safari. It can be used to build Adblock Plus for these | 
| 6 platforms, generic Adblock Plus code will be extracted from other repositories | 6 platforms, generic Adblock Plus code will be extracted from other repositories | 
| 7 automatically (see _dependencies_ file). | 7 automatically (see _dependencies_ file). | 
| 8 | 8 | 
| 9 Building | 9 Building | 
| 10 --------- | 10 --------- | 
| 11 | 11 | 
| 12 ### Requirements | 12 ### Requirements | 
| 13 | 13 | 
| 14 - [Mercurial](https://www.mercurial-scm.org/) or [Git](https://git-scm.com/) (wh
    ichever you used to clone this repository) | 14 - [Mercurial](https://www.mercurial-scm.org/) or [Git](https://git-scm.com/) (wh
    ichever you used to clone this repository) | 
| 15 - [Python 2.7](https://www.python.org) | 15 - [Python 2.7](https://www.python.org) | 
| 16 - [The Jinja2 module](http://jinja.pocoo.org/docs) | 16 - [The Jinja2 module](http://jinja.pocoo.org/docs) | 
| 17 - [The PIL module](http://www.pythonware.com/products/pil/) | 17 - [The PIL module](http://www.pythonware.com/products/pil/) | 
| 18 - For signed builds: [PyCrypto module](https://www.dlitz.net/software/pycrypto/) | 18 - For signed builds: [PyCrypto module](https://www.dlitz.net/software/pycrypto/) | 
| 19 | 19 | 
| 20 ### Building the extension | 20 ### Building the extension | 
| 21 | 21 | 
| 22 Run one of the following commands in the project directory, depending on your | 22 Run one of the following commands in the project directory, depending on your | 
| 23 target platform: | 23 target platform: | 
| 24 | 24 | 
| 25     ./build.py -t chrome build -k adblockpluschrome.pem | 25     ./build.py -t chrome build -k adblockpluschrome.pem | 
| 26     ./build.py -t safari build -k adblockplussafari.pem | 26     ./build.py -t safari build -k adblockplussafari.pem | 
|  | 27     ./build.py -t edge build | 
| 27 | 28 | 
| 28 This will create a build with a name in the form | 29 This will create a build with a name in the form | 
| 29 _adblockpluschrome-1.2.3.nnnn.crx_ or _adblockplussafari-1.2.3.nnnn.safariextz_. | 30 _adblockpluschrome-1.2.3.nnnn.crx_ or _adblockplussafari-1.2.3.nnnn.safariextz_ | 
|  | 31 or adblockplusedge-1.2.3.nnnn.appx. | 
| 30 Note that you don't need an existing signing key for Chrome, a new key | 32 Note that you don't need an existing signing key for Chrome, a new key | 
| 31 will be created automatically if the file doesn't exist. Safari on the other | 33 will be created automatically if the file doesn't exist. Safari on the other | 
| 32 hand always requires a valid developer certificate, you need to get one in the | 34 hand always requires a valid developer certificate, you need to get one in the | 
| 33 Apple Developer Center first. _adblockplussafari.pem_ should contain the private | 35 Apple Developer Center first. _adblockplussafari.pem_ should contain the private | 
| 34 key for your developer certificate, the developer certificate itself as well as | 36 key for your developer certificate, the developer certificate itself as well as | 
| 35 all the certificates it was signed with (Apple's root certificate and | 37 all the certificates it was signed with (Apple's root certificate and | 
| 36 intermediate certificates) in PEM format - in that order. | 38 intermediate certificates) in PEM format - in that order. | 
| 37 | 39 | 
| 38 ### Development environment | 40 ### Development environment | 
| 39 | 41 | 
| 40 To simplify the process of testing your changes you can create an unpacked | 42 To simplify the process of testing your changes you can create an unpacked | 
| 41 development environment. For that run one of the following commands: | 43 development environment. For that run one of the following commands: | 
| 42 | 44 | 
| 43     ./build.py -t chrome devenv | 45     ./build.py -t chrome devenv | 
| 44     ./build.py -t safari devenv | 46     ./build.py -t safari devenv | 
| 45 | 47 | 
| 46 This will create a _devenv.platform_ directory in the repository. In Chrome you | 48 This will create a _devenv.platform_ directory in the repository. In Chrome you | 
| 47 should load _devenv.chrome_ as an unpacked extension directory. After making | 49 should load _devenv.chrome_ as an unpacked extension directory. After making | 
| 48 changes to the source code re-run the command to update the development | 50 changes to the source code re-run the command to update the development | 
| 49 environment, the extension should reload automatically after a few seconds. | 51 environment, the extension should reload automatically after a few seconds. | 
| 50 | 52 | 
| 51 In Safari you should load _devenv.safari/adblockplussafari.safariextension_ as | 53 In Safari you should load _devenv.safari/adblockplussafari.safariextension_ as | 
| 52 unpacked extension directory. After making changes to the source code re-run the | 54 unpacked extension directory. After making changes to the source code re-run the | 
| 53 command to update the development environment. You will still need to reload the | 55 command to update the development environment. You will still need to reload the | 
| 54 extension explicitly in the Extension Builder, Safari currently doesn't allow | 56 extension explicitly in the Extension Builder, Safari currently doesn't allow | 
| 55 automating this action. | 57 automating this action. | 
| 56 | 58 | 
|  | 59 In Edge you should load _devenv.chrome as unpacked extension directory. After | 
|  | 60 rebuilding the extension you should usually force reloading it in Edge. | 
|  | 61 | 
| 57 Running the unit tests | 62 Running the unit tests | 
| 58 ---------------------- | 63 ---------------------- | 
| 59 | 64 | 
| 60 To verify your changes you can use the unit test suite located in the _qunit_ | 65 To verify your changes you can use the unit test suite located in the _qunit_ | 
| 61 directory of the repository. In order to run the unit tests go to the | 66 directory of the repository. In order to run the unit tests go to the | 
| 62 extension's Options page, open the JavaScript Console and type in: | 67 extension's Options page, open the JavaScript Console and type in: | 
| 63 | 68 | 
| 64     location.href = "qunit/index.html"; | 69     location.href = "qunit/index.html"; | 
| 65 | 70 | 
| 66 The unit tests will run automatically once the page loads. | 71 The unit tests will run automatically once the page loads. | 
| OLD | NEW | 
|---|