[Pkg-mozext-commits] [requestpolicy] 254/257: Imported Upstream version 1.0.0~beta11~4+dfsg

David Prévot taffit at moszumanska.debian.org
Thu Jan 28 03:20:19 UTC 2016


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository requestpolicy.

commit 2750adddfbac27c0aa5da4b3f08f1c0d94c56369
Merge: 20b50c6 c27c1f0
Author: David Prévot <taffit at debian.org>
Date:   Wed Jan 27 22:40:11 2016 -0400

    Imported Upstream version 1.0.0~beta11~4+dfsg

 META-INF/manifest.mf                               | 826 +++++++++++---------
 META-INF/mozilla.rsa                               | Bin 0 -> 4196 bytes
 META-INF/mozilla.sf                                |   4 +
 META-INF/zigbert.rsa                               | Bin 3293 -> 0 bytes
 META-INF/zigbert.sf                                | 696 -----------------
 bootstrap.js                                       |  39 +-
 content/controllers/keyboard-shortcuts.jsm         |  59 ++
 content/controllers/old-rules.jsm                  |  85 ++
 content/controllers/windows.overlay.jsm            |  79 ++
 content/controllers/windows.style-sheets.jsm       |  84 ++
 content/controllers/windows.toolbarbutton.jsm      | 180 +++++
 content/lib/classes/keyboard-shortcut.jsm          | 207 +++++
 content/lib/classes/map-of-sets.jsm                |  64 ++
 content/lib/classes/pref-branch.jsm                |  78 ++
 content/lib/classes/pref-observer.jsm              | 120 +++
 content/lib/default-preferences.js                 |   9 +-
 content/lib/environment.jsm                        | 859 +++++++++++----------
 content/lib/environment.process.js                 |  87 ++-
 .../lib/framescript-to-overlay-communication.jsm   |  47 +-
 content/lib/gui-location.jsm                       | 105 +--
 content/lib/http-response.jsm                      | 303 ++++----
 content/lib/logger.jsm                             | 109 ++-
 content/lib/manager-for-event-listeners.jsm        |  44 +-
 content/lib/manager-for-message-listeners.jsm      |  50 +-
 content/lib/observer-manager.jsm                   |  87 +--
 content/lib/old-rules.jsm                          | 238 ++++++
 content/lib/policy-manager.alias-functions.js      |  28 +-
 content/lib/policy-manager.jsm                     | 229 +++---
 content/lib/prefs.jsm                              | 150 ----
 content/lib/request-processor.compat.js            | 100 ++-
 content/lib/request-processor.jsm                  | 499 ++++++------
 content/lib/request-processor.redirects.js         | 248 +++---
 content/lib/request-result.jsm                     |  64 +-
 content/lib/request-set.jsm                        |  91 ++-
 content/lib/request.jsm                            |  96 ++-
 content/lib/ruleset-storage.jsm                    |  54 +-
 content/lib/ruleset.jsm                            | 537 +++++++------
 content/lib/script-loader.jsm                      |  56 +-
 content/lib/subscription.jsm                       | 349 +++++----
 content/lib/utils.jsm                              | 184 +++--
 content/lib/utils/constants.jsm                    |  13 +-
 content/lib/utils/dom.jsm                          |  69 +-
 content/lib/utils/domains.jsm                      | 156 ++--
 content/lib/utils/files.jsm                        |  75 +-
 content/lib/utils/info.jsm                         |  99 +++
 content/lib/utils/javascript.jsm                   |  44 ++
 content/lib/utils/observers.jsm                    |  33 +-
 content/lib/utils/strings.jsm                      |  28 +-
 content/lib/utils/windows.jsm                      |  66 +-
 content/lib/utils/xul.jsm                          | 400 +++++++---
 content/main/about-uri.jsm                         | 101 +--
 content/main/content-policy.jsm                    |  82 +-
 content/main/default-pref-handler.js               |  33 +-
 content/main/pref-manager.jsm                      |  94 +--
 content/main/requestpolicy-service.jsm             | 240 +++---
 content/main/window-manager-toolbarbutton.js       | 153 ----
 content/main/window-manager.jsm                    | 235 ++----
 content/main/window-manager.listener.js            | 151 ----
 content/models/prefs.jsm                           | 211 +++++
 content/models/windows.jsm                         | 194 +++++
 content/settings/advancedprefs.html                |   4 +-
 content/settings/advancedprefs.js                  | 274 +++----
 content/settings/basicprefs.html                   |   4 +-
 content/settings/basicprefs.js                     | 164 ++--
 content/settings/common.js                         | 318 +++-----
 content/settings/defaultpolicy.html                |   6 +-
 content/settings/defaultpolicy.js                  | 142 ++--
 content/settings/oldrules.html                     |   9 +-
 content/settings/oldrules.js                       | 212 +++--
 content/settings/setup.html                        |   6 +-
 content/settings/setup.js                          | 273 +++----
 content/settings/subscriptions.html                |   4 +-
 content/settings/subscriptions.js                  | 235 +++---
 content/settings/yourpolicy.html                   |   6 +-
 content/settings/yourpolicy.js                     | 436 ++++++-----
 content/ui/classicmenu.js                          | 112 +--
 content/ui/frame.blocked-content.js                |  58 +-
 content/ui/frame.dom-content-loaded.js             | 195 ++---
 content/ui/frame.js                                |  85 +-
 content/ui/menu.js                                 | 813 ++++++++++---------
 content/ui/overlay.js                              | 515 +++++-------
 content/ui/request-log.filtering.js                |  30 +-
 content/ui/request-log.interface.js                |  39 +-
 content/ui/request-log.js                          |  31 +-
 content/ui/request-log.tree-view.js                |  73 +-
 content/ui/xul-trees.js                            | 459 +++++++----
 install.rdf                                        |  23 +-
 locale/de/requestpolicy.properties                 |   2 +-
 locale/en-US/requestpolicy.properties              |   2 +-
 locale/eo/requestpolicy.properties                 |   2 +-
 locale/es-MX/requestpolicy.properties              |   2 +-
 locale/eu/requestpolicy.properties                 |   2 +-
 locale/fr/requestpolicy.properties                 |   2 +-
 locale/it/requestpolicy.properties                 |   2 +-
 locale/ja/requestpolicy.properties                 |   2 +-
 locale/ko-KR/requestpolicy.properties              |   2 +-
 locale/lv-LV/requestpolicy.properties              |   2 +-
 locale/nl/requestpolicy.properties                 |   2 +-
 locale/pt-BR/requestpolicy.properties              |   2 +-
 locale/ru-RU/requestpolicy.properties              |   2 +-
 locale/sk-SK/requestpolicy.properties              |   2 +-
 locale/sv-SE/requestpolicy.properties              |   2 +-
 locale/tr/requestpolicy.properties                 |   2 +-
 locale/uk-UA/requestpolicy.properties              |   2 +-
 locale/zh-CN/requestpolicy.properties              |   2 +-
 locale/zh-TW/requestpolicy.properties              |   2 +-
 skin/requestpolicy.css                             |  21 +
 skin/toolbarbutton.css                             |  22 -
 108 files changed, 7574 insertions(+), 6654 deletions(-)

diff --cc META-INF/manifest.mf
index 5729f4d,0000000..cfc45af
mode 100644,000000..100644
--- a/META-INF/manifest.mf
+++ b/META-INF/manifest.mf
@@@ -1,693 -1,0 +1,747 @@@
 +Manifest-Version: 1.0
- Created-By: Signtool (signtool 3.19.2 Basic ECC)
- Comments: PLEASE DO NOT EDIT THIS FILE. YOU WILL BREAK IT.
 +
- Name: content/main/pref-manager.jsm
++Name: install.rdf
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: TPA+mOkSOv8VBnkzpde+dw==
- SHA1-Digest: k3V8tuONodfXL0s4Q5+EQzHW0Rc=
++MD5-Digest: blbDkI8A+yjlOK00GxekiA==
++SHA1-Digest: kXp5Bfa4YizFtbka4EOi227EpBs=
 +
- Name: content/main/about-uri.jsm
++Name: chrome.manifest
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: gUOSr9j8xojKNEayRiliHQ==
- SHA1-Digest: KqtbZFiGa0qTVCmxvqXGluFcNRA=
++MD5-Digest: RPJPQ0xi45CRx2zI0SuZiw==
++SHA1-Digest: CQz+MaCf0siuPn+qjNMkqIV0GbM=
 +
- Name: content/main/requestpolicy-service.jsm
++Name: bootstrap.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: hJQVtut4/kJBj9I2KsQH1A==
- SHA1-Digest: tvPGnw+CHbo3ZLTa4xRuJx17Dv4=
++MD5-Digest: +pGaOR//pAd8kigctdzwVA==
++SHA1-Digest: 0n0PBoXGU8zaKLIDjlviOyFjH/I=
 +
- Name: content/main/window-manager.jsm
++Name: README
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: swGw3EU7NigVJ0h/PqePSg==
- SHA1-Digest: 6Pu1HoezvIb/FrGl+5sCP4GY9mw=
++MD5-Digest: 6IfZq3sTTDTENL+Se1ZoIA==
++SHA1-Digest: iDJpM8K+fZKkpeqnpi0kVupmPDk=
 +
- Name: content/main/window-manager.listener.js
++Name: content/multiple-installations.html
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: miZk3iC65O67HodkGln9Vg==
- SHA1-Digest: hkdB7YXsN0FHIrRt7SnuYxYb3qs=
++MD5-Digest: 8rC66t40eMnaMEtlhNIDfA==
++SHA1-Digest: ULeKBQjw/OY8AEPm53JMptO5hmA=
 +
- Name: content/main/window-manager-toolbarbutton.js
++Name: content/controllers/keyboard-shortcuts.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: /Th2+UURMEUH0qoeMoa8Jw==
- SHA1-Digest: L2V+Ime+a99em5XGp0VWGxSr1eE=
++MD5-Digest: +BhboOq41QVbV6CFjVv/6A==
++SHA1-Digest: w4i9f2FWpOBRoGa0rGL7GoBji/w=
 +
- Name: content/main/default-pref-handler.js
++Name: content/controllers/old-rules.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: ZNwLdxyV23rAF7VgOhJbeQ==
- SHA1-Digest: Duc4fa12LY+L9NOZbmmn/9xOOqE=
++MD5-Digest: H7Tfiy7aQ2iwAOP2aSrBFA==
++SHA1-Digest: XlKpEVmeE4QVTN/0jwmWOUIOzvg=
 +
- Name: content/main/content-policy.jsm
++Name: content/controllers/windows.overlay.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: dfUrH+2TZuMpVF6MHVK7YQ==
- SHA1-Digest: DPqP3hkFHBPpIZg1Faks4PFaKe4=
++MD5-Digest: 8g7rVke3hRqWNv4irD3s2g==
++SHA1-Digest: +t7mnpbbgia9e1ufMh8jFaU5uAc=
 +
- Name: content/multiple-installations.html
++Name: content/controllers/windows.style-sheets.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: 8rC66t40eMnaMEtlhNIDfA==
- SHA1-Digest: ULeKBQjw/OY8AEPm53JMptO5hmA=
++MD5-Digest: uVYDsNOPyx7H/c988hjjEw==
++SHA1-Digest: 9GTBRkqEUMhmgDdR5SBK/ly9jIY=
 +
- Name: content/ui/overlay.js
++Name: content/controllers/windows.toolbarbutton.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: SxFtg2n9TXoNTh1P525ADQ==
- SHA1-Digest: z7ApJhyn9X9VIeoXtEqqSzg5fNU=
++MD5-Digest: 6bl/TtQ3Vi+gO+/wbVD3lg==
++SHA1-Digest: DVtvC/jGl1fpAWcl8Ec1GD/eTHw=
 +
- Name: content/ui/frame.dom-content-loaded.js
++Name: content/lib/default-preferences.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: auYD1TFKZkLESRYL0T1RXA==
- SHA1-Digest: 3Jq0bJdyYr9gQBBlsOISwHfeKyA=
++MD5-Digest: C2UWgyRm5DBfzRCFMdWF+A==
++SHA1-Digest: XYffoTBbFyUJN12L1PSGZdlSYYQ=
 +
- Name: content/ui/frame.blocked-content.js
++Name: content/lib/environment.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: rLorVycHVA7537oWSOnqvg==
- SHA1-Digest: BUlOlnGsZyuJ4YoSzs++R0R/0ns=
++MD5-Digest: HJkzuHpZOlXQFNh3cyUy7w==
++SHA1-Digest: RP7m9OMcAOhTp/5xHB+ESH4+8oY=
 +
- Name: content/ui/request-log.xul
++Name: content/lib/environment.process.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: K2TnB0MRhDGCZuyLdkzgRQ==
- SHA1-Digest: Eaw6OXH+WjEmyYF/I+UgLf/jDAs=
++MD5-Digest: Xsjsjucla4L9ocHf1hqs2g==
++SHA1-Digest: BI+HtLA8MkIWh8Nv8k9foEdcnVk=
 +
- Name: content/ui/request-log.js
++Name: content/lib/framescript-to-overlay-communication.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: DhWE6u1QOZGgQDwG6IxTGA==
- SHA1-Digest: CbObxwq6mnmx/voDcn3JSCalqkQ=
++MD5-Digest: V658Xlvl1C2WIxBcKXqktA==
++SHA1-Digest: KXJYD+IruKeFTxw8qi0wOxFpTq0=
 +
- Name: content/ui/frame.js
++Name: content/lib/gui-location.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: nvlPkvXiKL9ZdqtWn8HIZw==
- SHA1-Digest: GQL6JACZGBwQ3vW+gIaa07NB268=
++MD5-Digest: lTsk65iVPNnFFPE1Ir0ekg==
++SHA1-Digest: jjeqCVNyAhoCFyJlau9JH8/lN5E=
 +
- Name: content/ui/request-log.interface.js
++Name: content/lib/http-response.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: whFn/wPa2EKEiPB/zFyd1A==
- SHA1-Digest: 7VGbxICh7zenTNLLOKZQuDaGr48=
++MD5-Digest: Ctn48SJ92SEGgMc/HEpI8g==
++SHA1-Digest: 9Q4diohsyf3/L5aj5pzi9IBsiG8=
 +
- Name: content/ui/request-log.tree-view.js
++Name: content/lib/logger.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: HxRWJlcUovxWdfh3NwW2Yg==
- SHA1-Digest: ozMpPkrUlCxH6VF5OGi8LIpXoEU=
++MD5-Digest: Gq66GxbHfj3xjDH0Jj4QJQ==
++SHA1-Digest: C1DsMWOhroZpMzYFY0lJkQFJ140=
 +
- Name: content/ui/request-log.filtering.js
++Name: content/lib/manager-for-event-listeners.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: 3L9JjccYpT/OzZHPmtnR7Q==
- SHA1-Digest: n5TDUAcvT69k2Px01Ji2GwvJ9Po=
++MD5-Digest: WVMRm8rlr5NMs07nguAK4g==
++SHA1-Digest: CDOypG7p1nFy0kFvLs7o8z1PV5w=
 +
- Name: content/ui/xul-trees.js
++Name: content/lib/manager-for-message-listeners.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: MuGl2ZSxz19Vlr8YdZGNSQ==
- SHA1-Digest: LvSK22G01eXlieKbBcdqawFzvP8=
++MD5-Digest: L8tVG9XomZRJes4YCikTvw==
++SHA1-Digest: OcoYqxsrqQimAp6TYvaA7EPeRE0=
 +
- Name: content/ui/menu.js
++Name: content/lib/observer-manager.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: KSpKj+0pEWF9AK451wzM7g==
- SHA1-Digest: 0GAUc6UsULgnveAQpSnJ2h5EdEw=
++MD5-Digest: KBNCpXXcWYGb8ZxpUZAZjQ==
++SHA1-Digest: tcX7V3CZglepcQBvOwANSqaUNjQ=
 +
- Name: content/ui/classicmenu.js
++Name: content/lib/old-rules.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: 3SY4PySU2/h/OxwHAjdfjA==
- SHA1-Digest: qBn5vtmyF7VFxEsX8szORlmKVAo=
++MD5-Digest: tj6/t18Rb5gVItHWGEXWrw==
++SHA1-Digest: FzkoqAHRI9Ds5/TAGpOPg9AB7BI=
 +
- Name: content/lib/ruleset-storage.jsm
++Name: content/lib/policy-manager.alias-functions.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: V6lfGcidLmjuyRF/lIrjAA==
- SHA1-Digest: UmuGQYFsm1E2SlCU7CH5wwO2Mp0=
++MD5-Digest: 9Rorcc9nTjPHThfLy5aIfA==
++SHA1-Digest: Y5nIBLLFl6XquZD8w0VT3vH5kmA=
 +
 +Name: content/lib/policy-manager.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: giGPVYUbuH6cQmFAUrgxrA==
- SHA1-Digest: F3BgVHG7yofwwlUP5W6BC3jEwz8=
++MD5-Digest: gtqFGqjcl1e2/AOiPE3pQQ==
++SHA1-Digest: nM9u+aXtbwWY20snKoEI5JkXsRg=
 +
- Name: content/lib/manager-for-message-listeners.jsm
++Name: content/lib/request-processor.compat.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: tZSuA98tX81JMLzE4UQ8rg==
- SHA1-Digest: tRhqSy9CReVrjJQMqNcmSE4QzqM=
++MD5-Digest: 3FtU2em0BsY242lzm0Bgkg==
++SHA1-Digest: y89O84ScGNxu7Ai0aPSWA+KSZI8=
 +
- Name: content/lib/ruleset.jsm
++Name: content/lib/request-processor.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: YvAuVRBn9vpbHB7TE+rbWQ==
- SHA1-Digest: oh01GZpljEREfB0R5/t8EUY6OIE=
++MD5-Digest: FyBgN6E/NADirfilspyKwA==
++SHA1-Digest: wDcdG1HkF8md7cEnZxhB4wPs3rI=
 +
- Name: content/lib/prefs.jsm
++Name: content/lib/request-processor.redirects.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: JFSPYVzxPpiy0PLIcZ/dsg==
- SHA1-Digest: beLWu952z62saT2gHf4u0oVdrjI=
++MD5-Digest: 6wFOXrXCQP98BgLxwwApJw==
++SHA1-Digest: ax1T6236cU1rmg4wJCV2yZ4VxR0=
 +
- Name: content/lib/gui-location.jsm
++Name: content/lib/request-result.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: /ErcTMCBKZ3Ek/4x11YPDQ==
- SHA1-Digest: 8igABYwEOKJBkJI6G2w0/qC6l2k=
++MD5-Digest: eEIzI2AKmWfSS/IhzPFrSA==
++SHA1-Digest: zZEymJWkpedUC4pWO2j5HvcF3fQ=
++
++Name: content/lib/request-set.jsm
++Digest-Algorithms: MD5 SHA1
++MD5-Digest: 7eRcK3e6UOwMPG6nGtPkOA==
++SHA1-Digest: pqPXo1HOUIxo3oFexqofnfWdAtc=
 +
 +Name: content/lib/request.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: 7DiF2ISBq4aXQ6EinSLHlQ==
- SHA1-Digest: csbKr5dD16FXiN9VmEic5xqdCSY=
++MD5-Digest: NpLHsvZ0PWJ7nHvQwsbZuw==
++SHA1-Digest: yT4YeiEXi+qkkCC6YIJ1iD8j3G0=
 +
- Name: content/lib/observer-manager.jsm
++Name: content/lib/ruleset-storage.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: hxAkEVx/EgudgqoG4y4xNg==
- SHA1-Digest: PJUt6qHtcLC/dw5YoPKbcwQs0h4=
++MD5-Digest: 1Aq3s8Iwjq2t0rhgKLbugw==
++SHA1-Digest: oJjnxOVUYVYRHaRcyMNB0lamDjk=
 +
- Name: content/lib/environment.jsm
++Name: content/lib/ruleset.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: Yo03wNlwOflrLN678vld8A==
- SHA1-Digest: Rh7rvEsMy8cMDlg9Wmw6IOWnHBg=
++MD5-Digest: 5qhRRZLyBpO2JzSIW3NweQ==
++SHA1-Digest: RmN8hYLhKCLuNUBhSM1oec578Hg=
 +
- Name: content/lib/request-processor.redirects.js
++Name: content/lib/script-loader.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: uiiFrlk3lURhS9j/OBBENg==
- SHA1-Digest: jYBJMoIZlZk0X+IwYyAJ3GptZNI=
++MD5-Digest: KqQAcHQcovoLo4L/fp9voA==
++SHA1-Digest: UxUukdsNgzfGcFOtWfXNbjLoK14=
 +
- Name: content/lib/request-result.jsm
++Name: content/lib/subscription.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: wsa4Pka+ZpXcBSOs991WiA==
- SHA1-Digest: Gn4bvK2HjzZoHMB1GmVH87INzc8=
++MD5-Digest: G2JUkDaw9CSm3HJAF99UdA==
++SHA1-Digest: qxg6/+3iBJdQkoJsyY2Ekhz24qI=
 +
- Name: content/lib/utils/domains.jsm
++Name: content/lib/utils.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: ScnpjwN0dwSXdt2J9zFiCQ==
- SHA1-Digest: uBAEHA+pMPfARjOjc5gRPNgUvJw=
++MD5-Digest: 7LTyEcJMRn5YPXyfy+uNag==
++SHA1-Digest: GO7pWMeQZT2cX1MyJPbOyJ+RlZA=
 +
- Name: content/lib/utils/files.jsm
++Name: content/lib/classes/keyboard-shortcut.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: b1Fpp6Ctd55aqkmfvuSXyA==
- SHA1-Digest: XyB5e7Mp5Jvi0s1aeWHR7k87xcM=
++MD5-Digest: /w0V0z2VmbRcYssyNJNcuw==
++SHA1-Digest: I05AiLJXUGLwLbr5Ve3XLOOgB3Y=
 +
- Name: content/lib/utils/windows.jsm
++Name: content/lib/classes/map-of-sets.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: JDZSW4Hqk2tk5GlQvtYhIw==
- SHA1-Digest: gHzE/KApw5zTAmEpwHt0jwIYwTg=
++MD5-Digest: ucTCLeBS+QNthQLDPwM23A==
++SHA1-Digest: 3KllC8C5tB7T8jdy7b5jFrTNr6k=
 +
- Name: content/lib/utils/constants.jsm
++Name: content/lib/classes/pref-branch.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: oNipzAYHApwLBDiMfvZKAg==
- SHA1-Digest: clgJiqQP3pPJdlA2CPynQ/sU/M8=
++MD5-Digest: qZXuF4+q+GcMhiyPEFL7Rg==
++SHA1-Digest: eQ7TKIyzHV7te+StF9k4T3zgyA8=
 +
- Name: content/lib/utils/xul.jsm
++Name: content/lib/classes/pref-observer.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: j0ELRwiA/1qSguJKpO/SrA==
- SHA1-Digest: /fkkDcTHvyE/S5Xz1/6dRHVrooQ=
++MD5-Digest: FcIlBeTyPyiXiM1gq3Jetw==
++SHA1-Digest: Ly0lNJyaMYE65Mtf8QsQ56SZ4iU=
 +
- Name: content/lib/utils/strings.jsm
++Name: content/lib/utils/constants.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: IO3vLnVOJ0Iz1hbDEwfIFg==
- SHA1-Digest: INKrThmmvbuPg2zzu/gMUeIIChs=
++MD5-Digest: UtREMomheMrmu5tfDJkbAg==
++SHA1-Digest: 3B8OSsP4gndHebPACCgcsgY7gFk=
 +
 +Name: content/lib/utils/dom.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: U1y5YwWhwAV6LpVncxgvEw==
- SHA1-Digest: 3g5j8dfxLsZpB693dsEFAJo5pks=
++MD5-Digest: GZD2K/X2W9b4TBHByM8BFg==
++SHA1-Digest: iP1AHCNzPszgqJ+s7MIDCYrDKb0=
 +
- Name: content/lib/utils/observers.jsm
++Name: content/lib/utils/domains.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: HGU7YL1Ba3qGkNJGxRrbzQ==
- SHA1-Digest: /C6Z4pvlQd3O1D7o6sQAwCxcToA=
++MD5-Digest: sPsrrdfAxcX3Sgr4QAx2DQ==
++SHA1-Digest: 1hqwLzNGupQUUv7e8+wu0nlmZlo=
 +
- Name: content/lib/subscription.jsm
++Name: content/lib/utils/files.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: wL4GOJQ3e9lohme0SFSB2w==
- SHA1-Digest: X7TC5edG0c6EDuVzkpc1WqYBqjk=
++MD5-Digest: EueYw6yeMZkL5raAEdqVtA==
++SHA1-Digest: XqyX9YD3V07rRmMR6wDXlo/OCFM=
 +
- Name: content/lib/utils.jsm
++Name: content/lib/utils/info.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: /SMrQF5+iPe4Jv1n2bl0YQ==
- SHA1-Digest: PQSPMvr/pz8LhLBJV0Sq+K966Go=
++MD5-Digest: 29PfJ3qaATFSaqJbLlDj1Q==
++SHA1-Digest: VwGB251FhD0Owsk/Q7Je1p5T3So=
 +
- Name: content/lib/default-preferences.js
++Name: content/lib/utils/javascript.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: p4lfJ+lhtPbM9JV3I/RV1A==
- SHA1-Digest: 8vQWdtfSNeJXkzh9A1/wOZiZHsU=
++MD5-Digest: z2rdTwEjq62QkomPH76c6w==
++SHA1-Digest: bhJvGQ7lRhaN1BtEzLNDTi3rsLw=
 +
- Name: content/lib/request-set.jsm
++Name: content/lib/utils/observers.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: iz8uRgLN2MvC0hrmp4BiLQ==
- SHA1-Digest: AgR4rGygrEvdujIfr233Gvcr9bQ=
++MD5-Digest: 1Q+ZP53H4aFGVUm6xR78lg==
++SHA1-Digest: dpm+3ww0FV01rROoiqZUkrvGeRw=
 +
- Name: content/lib/policy-manager.alias-functions.js
++Name: content/lib/utils/strings.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: jYjdlbe2edw/0/iiAYh+Bg==
- SHA1-Digest: /uzAHaEyttWJnSyo1uhPgh/1f6o=
++MD5-Digest: kfN0MLy6YNqCIeflPF31AA==
++SHA1-Digest: QenPrBfY1DrPTaeu/2dxJZIX8SA=
 +
- Name: content/lib/logger.jsm
++Name: content/lib/utils/windows.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: EIfRaTSQdScsKJd/8a6uUg==
- SHA1-Digest: M5uEgoYd+O9s2YVHyb9gmnmUoZQ=
++MD5-Digest: fzozQU8w76M181pO/94k9g==
++SHA1-Digest: OPRuqXOCeG+TKhPU4rdIpppRMUk=
 +
- Name: content/lib/request-processor.jsm
++Name: content/lib/utils/xul.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: 4bhnUIeMMdvaz0PFFnl0nw==
- SHA1-Digest: 5CqYMxPEVIqThBQoC/lwbqUb/kw=
++MD5-Digest: hESc2NMyK00+1+srMwrSiA==
++SHA1-Digest: a/T1Sg7DfrAWORZ5Oz6WdRkeWG8=
 +
- Name: content/lib/framescript-to-overlay-communication.jsm
++Name: content/main/about-uri.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: 7moenn4rlCjTqXptkWQMTw==
- SHA1-Digest: giSNsisfeCBl9EMHZtohemXSeEU=
++MD5-Digest: GYBbqPMjN/I8rRbvyPRjPA==
++SHA1-Digest: w/EW5tvx24dE8wldROdb5Za9JYk=
 +
- Name: content/lib/http-response.jsm
++Name: content/main/content-policy.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: v/AqtPf7OWxVgV/vw6JP2g==
- SHA1-Digest: nREO0chItf3VfrPv5e6aFyza0fw=
++MD5-Digest: PCtPnqmCZAM7RuCcMyrwmA==
++SHA1-Digest: EcADgIMly4nCZlCBTWtwX6SHizM=
 +
- Name: content/lib/manager-for-event-listeners.jsm
++Name: content/main/default-pref-handler.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: Kcxhra8tYocc+pvgZq3L4g==
- SHA1-Digest: JjqMdxfSrZYG63s6Ex3YdBH20Hs=
++MD5-Digest: MfHBJKW/+O8Nurb9nUuC8g==
++SHA1-Digest: hM/68FfcJLOl/kUoNr0bbCztzDw=
 +
- Name: content/lib/environment.process.js
++Name: content/main/pref-manager.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: XfEUYHvcPgommXxGLCAQGw==
- SHA1-Digest: 4UuylyFFCHspZnah+kPxFmj9La4=
++MD5-Digest: rM9TvPHJa3SV2wWWoNyi6Q==
++SHA1-Digest: vmv9DSOZ6lRFeG8+zdAs53duQdo=
 +
- Name: content/lib/request-processor.compat.js
++Name: content/main/requestpolicy-service.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: 2+0URFee+cDRkYnLbdW0aQ==
- SHA1-Digest: B3tFYh4rAK30Jr0/vNnYlaJFNM4=
++MD5-Digest: 3CNe1excCNjisFCtyXZnKw==
++SHA1-Digest: 5hZSTapn3+JKalWO/S1EA8NKWkw=
 +
- Name: content/lib/script-loader.jsm
++Name: content/main/window-manager.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: VS5tBd67oCBYaDIsqodm+g==
- SHA1-Digest: JVNtI/zlC426YlO0MWqoTH2ZqN0=
++MD5-Digest: /2rnAhPfc2JjjkxIRW0KAQ==
++SHA1-Digest: 9u4+x5v/CDuJk0xCV6bOJAjWmb8=
 +
- Name: content/settings/subscriptions.js
++Name: content/models/prefs.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: vGoe2o430BB0u2Ga+1WCzA==
- SHA1-Digest: GbYfl99OCcwBR3m4iUHR8e5ZDew=
++MD5-Digest: bvrfGABdp6MbpULFSQA4Yg==
++SHA1-Digest: JxBoGo38rEAWFHfeofTPKV3aPTs=
 +
- Name: content/settings/setup.css
++Name: content/models/windows.jsm
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: 1B2M2Y8AsgTpgAmY7PhCfg==
- SHA1-Digest: 2jmj7l5rSw0yVb/vlWAYkK/YBwk=
++MD5-Digest: i6Ss0+8ON4fScA4yNTNQ7A==
++SHA1-Digest: lMqN0D9N/ahLLxK+3lhZm4IHMUI=
 +
- Name: content/settings/common.js
++Name: content/settings/advancedprefs.html
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: M5rxEwLacCEjvJRpAXmIqA==
- SHA1-Digest: HUc5Y6u7wLfLkYMqbmBuSjTnmMc=
++MD5-Digest: D4jhxMX76XlmrwEsmO8b/A==
++SHA1-Digest: jOtMbr/QJ6hi1DWfF9K7yN781aE=
 +
 +Name: content/settings/advancedprefs.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: nUWJKjURjmD6fnbcEiSMJw==
- SHA1-Digest: AYBFGx2mvwq63YJkkJHVEegOG/0=
++MD5-Digest: wKrC7lPl4cUoHGZdYSn36Q==
++SHA1-Digest: X/fo5C8y9ldj4EJtiU/VAvWGil4=
 +
- Name: content/settings/setup.js
++Name: content/settings/basicprefs.html
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: LmUvFaIjge6lscYo2w+Cbg==
- SHA1-Digest: btRKr72ewV63BTCOBI8yVZRG2wE=
++MD5-Digest: uCQ2oQvThF8UQq5QsGR1Sg==
++SHA1-Digest: lQ6i+2+VFrI7UloDv+jReD7P3Eg=
 +
- Name: content/settings/subscriptions.html
++Name: content/settings/basicprefs.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: o5jWL7Mt+PTxeN162B1Fcw==
- SHA1-Digest: xFoXG4JTBgWRoYFN4MFGjBb7MN4=
++MD5-Digest: ajBTwr/Q8xA2LIp5mZVBpA==
++SHA1-Digest: i9tN08T29KimQHD8VtjL1JXH5w8=
 +
- Name: content/settings/basicprefs.html
++Name: content/settings/common.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: xagYClwCb5qiORgbv0bzxg==
- SHA1-Digest: 1lEmEbjQnlvdvWmtybhq3y0TCs0=
++MD5-Digest: /T+Q5Q8Pf2yzsSfx8DdPyg==
++SHA1-Digest: DfD9mfq8r9iEH1z4BASEkE3yuPA=
 +
 +Name: content/settings/defaultpolicy.html
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: gPZqqILqFyh5F4XQ0uBmkw==
- SHA1-Digest: twIXwlwSxIipXWOUI15EUpiyy6M=
++MD5-Digest: VccNe2QxC41hMR+tA++mIg==
++SHA1-Digest: cWSkYtyjxOk/nUBgV/0zS7zLiCQ=
 +
- Name: content/settings/yourpolicy.js
++Name: content/settings/defaultpolicy.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: 00YcHO875xHuPZF0XYlnxw==
- SHA1-Digest: N9uHe5blDDzyohZYlKsqLU4pgcg=
++MD5-Digest: a0XQGNrg9W0kbVSnTrs8KQ==
++SHA1-Digest: keQ9AyGzRWUsB6IyhQ5A4ww5jiM=
 +
- Name: content/settings/oldrules.js
++Name: content/settings/jquery.min.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: eV9bux3VbQYbgTVWTR8joA==
- SHA1-Digest: YlNqD7pPjmaIeELaFIXUGex3+ak=
++MD5-Digest: OnKEYBR/ua9/rw5Ye5+/Qg==
++SHA1-Digest: 86VfRPuBz47pCKOHKEH3DWVI+ME=
 +
- Name: content/settings/jquery.min.js
++Name: content/settings/oldrules.html
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: TxNjnTNZXvJw9hFQkAhB6Q==
- SHA1-Digest: jacHesddtmkZTyT/NOy74s7jwoU=
++MD5-Digest: 1FAx4y0RPyUj6uo3v+URaw==
++SHA1-Digest: XdNJHS2cn9V6mK/uKluSpQU8h8I=
 +
- Name: content/settings/defaultpolicy.js
++Name: content/settings/oldrules.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: AeHp46dxnsGMDZ/2J1WG6A==
- SHA1-Digest: DNbKh1KCcZSxC5Lh9oyVw+QPUXE=
++MD5-Digest: jggmOQlHth6v9RKjhBtaYA==
++SHA1-Digest: Sc6KJaD4wn+iHjUWxJOD/nSdlRo=
 +
- Name: content/settings/yourpolicy.html
++Name: content/settings/settings.css
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: z0JI+QHAdPmqNjEmL8H21Q==
- SHA1-Digest: jp5noRdWJibCXr2/dC+HbYBLWzI=
++MD5-Digest: 2l/CCHPLCvCWNtbEmrvvvg==
++SHA1-Digest: 9b4lInXqbruxI4IIN5cUMxNeVxk=
 +
- Name: content/settings/oldrules.html
++Name: content/settings/setup.css
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: toF5CmqKj9s9AOjTYoYBfw==
- SHA1-Digest: vDRslMxgs3LmmSWDJZXNbbjCpt4=
++MD5-Digest: 1B2M2Y8AsgTpgAmY7PhCfg==
++SHA1-Digest: 2jmj7l5rSw0yVb/vlWAYkK/YBwk=
 +
 +Name: content/settings/setup.html
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: GKP8hdKZ1NiAueuxZE7dEg==
- SHA1-Digest: xVwm8A/T8I+RqfEZOkop5LS1/No=
++MD5-Digest: y0BXNTsz2XGHlLyeEjRkFQ==
++SHA1-Digest: ZfbWDjGmWzbBJ53zYbRH7r3x9ck=
 +
- Name: content/settings/settings.css
++Name: content/settings/setup.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: 2l/CCHPLCvCWNtbEmrvvvg==
- SHA1-Digest: 9b4lInXqbruxI4IIN5cUMxNeVxk=
++MD5-Digest: 924yFnQO/B1DK8VUuPICOA==
++SHA1-Digest: iPNs2ESvHxT7hB8Rw1QhhwNk+B8=
 +
- Name: content/settings/basicprefs.js
++Name: content/settings/subscriptions.html
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: L5h06IQ3gqyKEhmXqPv8Uw==
- SHA1-Digest: C+7JP0vPPDoZsPo26eUcG98OaxI=
++MD5-Digest: IT6TruCgxU+FMRe0/CFdkg==
++SHA1-Digest: HqHiOfPueCpHxweuA5cXDw8pRsQ=
 +
- Name: content/settings/advancedprefs.html
++Name: content/settings/subscriptions.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: eCs9pVBPcnLYehMKKuPUwQ==
- SHA1-Digest: euJ3jzI8IGI2s2idOS+e4YNASLQ=
++MD5-Digest: riS7i+CEuwnFdLJ4g+Jkdw==
++SHA1-Digest: Dt71IOzzSV1LpnXbIIlOkgGXxKo=
 +
- Name: README
++Name: content/settings/yourpolicy.html
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: 6IfZq3sTTDTENL+Se1ZoIA==
- SHA1-Digest: iDJpM8K+fZKkpeqnpi0kVupmPDk=
++MD5-Digest: XUdfYluoURUgxSHcmbS5YA==
++SHA1-Digest: PHISekptB5i0oyEY+mYoLndcq6Q=
 +
- Name: install.rdf
++Name: content/settings/yourpolicy.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: wOAOTt0uFrUTrura5lzhnQ==
- SHA1-Digest: wJ12H7TqMz8LlBTLavzeoesoZWM=
++MD5-Digest: 5vzCkfL1ADjfHjshGpLasQ==
++SHA1-Digest: NvxeYaaO9U44nA7RpVsOqQ7onrw=
 +
- Name: LICENSE
++Name: content/ui/classicmenu.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: V+iUvQ8339+uK2nUxBt4oQ==
- SHA1-Digest: BKr7OaEqkHyN92EAoQgXBoUWHk4=
++MD5-Digest: WZ9Rhx/OaWLP3yhaYKQIgg==
++SHA1-Digest: fgFAxizTXzw/wgrq4mbYq8TyNXQ=
 +
- Name: locale/tr/requestpolicy.dtd
++Name: content/ui/frame.blocked-content.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: YHGevfSYcNwB5aR/DjrRLQ==
- SHA1-Digest: 7BKNoiJcmmRhC+PF2+2GaFOiNBI=
++MD5-Digest: MOcuRIaEzqhl4/nlX+eY2g==
++SHA1-Digest: yI14krjVU0rldXxuYCSH8k+3BRk=
 +
- Name: locale/tr/requestpolicy.properties
++Name: content/ui/frame.dom-content-loaded.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: I8aPz9IXaeT7uJNTv3aU5g==
- SHA1-Digest: hwgntpLwawJgqGlW/djmABru4MA=
++MD5-Digest: ZcIsAxiFtOWx2TvVFnpDVQ==
++SHA1-Digest: 2sHJTQBsluGb0WAgRR8C6vPnk5Q=
 +
- Name: locale/uk-UA/requestpolicy.dtd
++Name: content/ui/frame.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: oGWBoRlf+qVuz66wmB/J2Q==
- SHA1-Digest: Qucwrc3cqcj6CZhVG99sQWh+2LY=
++MD5-Digest: PYG0AYz6HhvzIdasqaKurA==
++SHA1-Digest: vv5tJ6cATMbIUSqrTqq+8wk3SMk=
 +
- Name: locale/uk-UA/requestpolicy.properties
++Name: content/ui/menu.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: 55aA1SzgTv8YQRuQvyLrSQ==
- SHA1-Digest: LjHa/vmplGrGFcN6aYSQMGwnVQ4=
++MD5-Digest: ZFQFLint7wWO0O4OWCIDng==
++SHA1-Digest: yVz+8MysjQyxxohCj9Po1BHBXTI=
 +
- Name: locale/eu/requestpolicy.dtd
++Name: content/ui/overlay.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: JgPEcTxbEgFGG7Ob2/+gsA==
- SHA1-Digest: WymoX3seqH1a90qpytnO7R3bBE0=
++MD5-Digest: VM13/oJUUxQKm9BoC9ckoA==
++SHA1-Digest: KW59k+LcyoFC+ht3g5IQAmUz6yk=
 +
- Name: locale/eu/requestpolicy.properties
++Name: content/ui/request-log.filtering.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: L4OiZnN89Ofpk6u8Ov6v4g==
- SHA1-Digest: rc+GRTLpOqdXsAeZoyRaFMFhO+0=
++MD5-Digest: iO2S3BIaBORr7tTAtXPYbw==
++SHA1-Digest: vvHvA2TQgl7ZLrcXeCu9HsX4IKM=
 +
- Name: locale/sk-SK/requestpolicy.dtd
++Name: content/ui/request-log.interface.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: /HrV/tEV1jqBNtrqcBs1WQ==
- SHA1-Digest: 20a1yeDGOjjAu9a4QNJiYcz5SeU=
++MD5-Digest: UmSOWB4bnrY0SvBVwnxSIg==
++SHA1-Digest: D6HocXrmvxqdv4xXeTRu6z21oKI=
 +
- Name: locale/sk-SK/requestpolicy.properties
++Name: content/ui/request-log.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: x32UxgRyEV7WyDse6UMpLg==
- SHA1-Digest: gyjG9VSAYtg/DxSmyJgBjrQkMQY=
++MD5-Digest: HZgC4qIIlyP84UVJox36hQ==
++SHA1-Digest: wztSPBDBY+4vY9mcpYmtgFMMJD0=
 +
- Name: locale/ru-RU/requestpolicy.dtd
++Name: content/ui/request-log.tree-view.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: CwU7WRvYODMiRHmWxWylcw==
- SHA1-Digest: zmeQL5LH3Q0zo+cf3I8yTAjMVpI=
++MD5-Digest: 1H214QktlW6AJJPfZuj6dQ==
++SHA1-Digest: eTbXppqH9+NfbIpnUAF8PW6Qk7Q=
 +
- Name: locale/ru-RU/requestpolicy.properties
++Name: content/ui/request-log.xul
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: XdwMR7yZe3WUisbXqbVw1w==
- SHA1-Digest: N7hl2feljxDbrDM/jkLq/oXKOpI=
++MD5-Digest: K2TnB0MRhDGCZuyLdkzgRQ==
++SHA1-Digest: Eaw6OXH+WjEmyYF/I+UgLf/jDAs=
 +
- Name: locale/it/requestpolicy.dtd
++Name: content/ui/xul-trees.js
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: iuaTQG8IWWJHMEqm8/wzeg==
- SHA1-Digest: ADrzsCPiLkT1ClP6Xp+nKwsQu2M=
++MD5-Digest: XHW/KGz1VPNgltxOyh5z7Q==
++SHA1-Digest: NSniFFjZ5P2f7U9jGaoZYWjsYQY=
 +
- Name: locale/it/requestpolicy.properties
++Name: locale/de/requestpolicy.dtd
++Digest-Algorithms: MD5 SHA1
++MD5-Digest: P3bt/Rvk7IFSK+FeLqrf2Q==
++SHA1-Digest: fi2ZzsQfYcSnMwVvzuMjKmj5ABA=
++
++Name: locale/de/requestpolicy.properties
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: S7Lqb6Rw3Woro63EdqgJaQ==
- SHA1-Digest: ZSgsU2bl5D+1+Kk7usdS2kDcBxg=
++MD5-Digest: gkXUNkdUcOkyj5ZF9zyUCw==
++SHA1-Digest: 22g2jthWnrXFQMwNQAxcTAzgGpI=
++
++Name: locale/en-US/requestpolicy.dtd
++Digest-Algorithms: MD5 SHA1
++MD5-Digest: z9mL9ndqOIJDSki2OAliIA==
++SHA1-Digest: oI+05rIfs3LkbVj2A8/ZybgtDSQ=
++
++Name: locale/en-US/requestpolicy.properties
++Digest-Algorithms: MD5 SHA1
++MD5-Digest: LxB7zeihOOl2whLALaJ8BQ==
++SHA1-Digest: 1oHS2bl5dgdWa9mrpBVUbKMMqpg=
 +
 +Name: locale/eo/requestpolicy.dtd
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: cpw0czZp2ImP3XqSkcOLew==
 +SHA1-Digest: 8Hof6vgM3HoPcg+NbWGct5A5f+c=
 +
 +Name: locale/eo/requestpolicy.properties
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: gb0aitVn5aEo1kTzhDwMFA==
- SHA1-Digest: lkdlIpiJNZZ3DBQ2Z1K0F2k5Y5s=
++MD5-Digest: 09ixu9cQ3/tYiDiEs49rLA==
++SHA1-Digest: hT1CNTdz4w1X9HDIKuuA//88RWU=
 +
- Name: locale/sv-SE/requestpolicy.dtd
++Name: locale/es-MX/requestpolicy.dtd
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: 9Oby/weV3RG1PoVJy+8Few==
- SHA1-Digest: B5ZC1vu7d2RT001lQ74d4lYDJ0A=
++MD5-Digest: p4AB7nYZ/Kw6d9gfDi8IoQ==
++SHA1-Digest: zq7CXn+GYo7De4Xt91GOeOS3qZg=
 +
- Name: locale/sv-SE/requestpolicy.properties
++Name: locale/es-MX/requestpolicy.properties
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: F0z6wfIevyZY243iA1162g==
- SHA1-Digest: Y0bmCIXYh0vxRUcTNhdVc3RpBfw=
++MD5-Digest: B+WW3roFHkra7N8InBTxBA==
++SHA1-Digest: hNjwpOPYyx3j160EXjma+GoIx9s=
++
++Name: locale/eu/requestpolicy.dtd
++Digest-Algorithms: MD5 SHA1
++MD5-Digest: JgPEcTxbEgFGG7Ob2/+gsA==
++SHA1-Digest: WymoX3seqH1a90qpytnO7R3bBE0=
++
++Name: locale/eu/requestpolicy.properties
++Digest-Algorithms: MD5 SHA1
++MD5-Digest: yfvCRzfTkEvw2slzi6eo6g==
++SHA1-Digest: Vq/NaBXnCnSP1mLodJwCJ9cVQgQ=
++
++Name: locale/fr/requestpolicy.dtd
++Digest-Algorithms: MD5 SHA1
++MD5-Digest: cU13QRB7T8ukgCiSoJgkmw==
++SHA1-Digest: 8ASkBmqZ2Im5sU7XfRJmghOc+Yg=
++
++Name: locale/fr/requestpolicy.properties
++Digest-Algorithms: MD5 SHA1
++MD5-Digest: S3Hze+xk0bDufTjrOqcwgg==
++SHA1-Digest: AfrkjnBw/Zggs6Pu1c6NF8LUjjg=
++
++Name: locale/it/requestpolicy.dtd
++Digest-Algorithms: MD5 SHA1
++MD5-Digest: iuaTQG8IWWJHMEqm8/wzeg==
++SHA1-Digest: ADrzsCPiLkT1ClP6Xp+nKwsQu2M=
++
++Name: locale/it/requestpolicy.properties
++Digest-Algorithms: MD5 SHA1
++MD5-Digest: JbV41SvnFX9lVq6jFnVbCw==
++SHA1-Digest: IdOEu3LWIF2v8j6k3ybpdZTY6Q4=
 +
 +Name: locale/ja/requestpolicy.dtd
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: D1qyBtMKfDUCxQ78Xclzew==
 +SHA1-Digest: RsE6DQpQPXNKipnGtRGrVuYxvrU=
 +
 +Name: locale/ja/requestpolicy.properties
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: p6w2dHwDS+zKlHGor8Zyiw==
- SHA1-Digest: GsA7CSbLsAIhrMHovVYd9zBF0no=
++MD5-Digest: pt1DcFcyonIBcB5UEf+aSA==
++SHA1-Digest: mSIixefqBFg+kHKzjWtNENrynng=
 +
- Name: locale/nl/requestpolicy.dtd
++Name: locale/ko-KR/requestpolicy.dtd
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: 8MG3dZttG264EPhnB/K3+Q==
- SHA1-Digest: ZeyaN7q1wX+om//sU36NpYYIU8M=
++MD5-Digest: awJU2LVBkGH5531QM3WseQ==
++SHA1-Digest: 0CW1gSuTZoPHkUo8QaBSiEtPJ5Y=
 +
- Name: locale/nl/requestpolicy.properties
++Name: locale/ko-KR/requestpolicy.properties
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: 3F/5dquMiSaXRQoasd08zg==
- SHA1-Digest: WWmLeOuASx1woRCfngdB++Rt6U4=
++MD5-Digest: WO/BS8QwiduyUfuqNJI1Qg==
++SHA1-Digest: ek6M3UOY3YXkmF67cOrzJZ6DwFs=
 +
- Name: locale/zh-CN/requestpolicy.dtd
++Name: locale/lv-LV/requestpolicy.dtd
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: T5Bqf7eJXZxkvt1kRf2WTw==
- SHA1-Digest: rsMS9bomSXElul3g2FIISZAq0CA=
++MD5-Digest: F9pyEdjG26OezWX4uIvt3Q==
++SHA1-Digest: qU+7HD6MIJakGnFqLLJzRv6hPkA=
 +
- Name: locale/zh-CN/requestpolicy.properties
++Name: locale/lv-LV/requestpolicy.properties
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: xPgWgIMArCFCL0q0+k6rSA==
- SHA1-Digest: /Y/yByEEGxlw7iOlUfBPPstugJk=
++MD5-Digest: 2IbiXvBvyW3EW4kJA3KzQA==
++SHA1-Digest: 4htjQfVVM/+9Ue28upSK2ntIb4E=
 +
- Name: locale/zh-TW/requestpolicy.dtd
++Name: locale/nl/requestpolicy.dtd
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: PfmqQTFvc1tNhrhtngY7tQ==
- SHA1-Digest: MejY4QleZFjtH1FQRmulTz+bMcM=
++MD5-Digest: 8MG3dZttG264EPhnB/K3+Q==
++SHA1-Digest: ZeyaN7q1wX+om//sU36NpYYIU8M=
 +
- Name: locale/zh-TW/requestpolicy.properties
++Name: locale/nl/requestpolicy.properties
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: olR2LzmDRd6zMDjd3iGELg==
- SHA1-Digest: Gw19BnRvWgOOJRxXQ14wYsMf0qg=
++MD5-Digest: C/jJ8EptYmySRLseSqsmyw==
++SHA1-Digest: 4MQrVAgLWcIE8AbPdkw59P6T2uM=
 +
 +Name: locale/pt-BR/requestpolicy.dtd
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: ygevhxxjopSuy+jHRvTQ4w==
 +SHA1-Digest: G9v9ugU1Ksv5F+OmOvg/xpxedQ4=
 +
 +Name: locale/pt-BR/requestpolicy.properties
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: b+tMxOgG/1Vqr1M3m10tpA==
- SHA1-Digest: 9wpV19K7DuEHVhrigdxxQQ92yRc=
++MD5-Digest: KqV7a9AXm/FJLSB6mknPHA==
++SHA1-Digest: 0OR0uxxq1axntmg0Ts4sEZafHqw=
 +
- Name: locale/fr/requestpolicy.dtd
++Name: locale/ru-RU/requestpolicy.dtd
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: cU13QRB7T8ukgCiSoJgkmw==
- SHA1-Digest: 8ASkBmqZ2Im5sU7XfRJmghOc+Yg=
++MD5-Digest: CwU7WRvYODMiRHmWxWylcw==
++SHA1-Digest: zmeQL5LH3Q0zo+cf3I8yTAjMVpI=
 +
- Name: locale/fr/requestpolicy.properties
++Name: locale/ru-RU/requestpolicy.properties
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: lcTaxrkvn6nvbMfXhP+4qQ==
- SHA1-Digest: T8yYeCC+/87sAziU4YEUxp6juVI=
++MD5-Digest: zV859Duay/Dq9ypdQKmIWg==
++SHA1-Digest: gg/eh93oXhL/7wotdsskZ6kNcNA=
 +
- Name: locale/de/requestpolicy.dtd
++Name: locale/sk-SK/requestpolicy.dtd
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: P3bt/Rvk7IFSK+FeLqrf2Q==
- SHA1-Digest: fi2ZzsQfYcSnMwVvzuMjKmj5ABA=
++MD5-Digest: /HrV/tEV1jqBNtrqcBs1WQ==
++SHA1-Digest: 20a1yeDGOjjAu9a4QNJiYcz5SeU=
 +
- Name: locale/de/requestpolicy.properties
++Name: locale/sk-SK/requestpolicy.properties
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: swV0aAKvSuaSKKdBMKqRhw==
- SHA1-Digest: PCUQHkYaO2T84ALwTdlwPDoR8dU=
++MD5-Digest: pT59XvD0Z4rxBxF6rtCE6A==
++SHA1-Digest: kQdTb7v7uw7QnuDssbT/7P4eNFs=
 +
- Name: locale/en-US/requestpolicy.dtd
++Name: locale/sv-SE/requestpolicy.dtd
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: z9mL9ndqOIJDSki2OAliIA==
- SHA1-Digest: oI+05rIfs3LkbVj2A8/ZybgtDSQ=
++MD5-Digest: 9Oby/weV3RG1PoVJy+8Few==
++SHA1-Digest: B5ZC1vu7d2RT001lQ74d4lYDJ0A=
 +
- Name: locale/en-US/requestpolicy.properties
++Name: locale/sv-SE/requestpolicy.properties
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: iPC4ldfVruBYx8G8QXVBNA==
- SHA1-Digest: LxODHJXeLrt/jcgZd/L6cRWpj/g=
++MD5-Digest: aa+65NqWb8hvpjVgBIoyvQ==
++SHA1-Digest: H0btLvHx8aS0pZzSPARFhwlgJ+c=
 +
- Name: locale/ko-KR/requestpolicy.dtd
++Name: locale/tr/requestpolicy.dtd
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: awJU2LVBkGH5531QM3WseQ==
- SHA1-Digest: 0CW1gSuTZoPHkUo8QaBSiEtPJ5Y=
++MD5-Digest: YHGevfSYcNwB5aR/DjrRLQ==
++SHA1-Digest: 7BKNoiJcmmRhC+PF2+2GaFOiNBI=
 +
- Name: locale/ko-KR/requestpolicy.properties
++Name: locale/tr/requestpolicy.properties
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: kUuwL52KmnmfSsjhIlHkrg==
- SHA1-Digest: kkaHcO4jk1Po9zQTBnXLpoLYWpM=
++MD5-Digest: XQ0lfO6ZkVfnXMxxwOjvjQ==
++SHA1-Digest: E+4Sx9nkONZt2JVB5f2+0SK0A18=
 +
- Name: locale/lv-LV/requestpolicy.dtd
++Name: locale/uk-UA/requestpolicy.dtd
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: F9pyEdjG26OezWX4uIvt3Q==
- SHA1-Digest: qU+7HD6MIJakGnFqLLJzRv6hPkA=
++MD5-Digest: oGWBoRlf+qVuz66wmB/J2Q==
++SHA1-Digest: Qucwrc3cqcj6CZhVG99sQWh+2LY=
 +
- Name: locale/lv-LV/requestpolicy.properties
++Name: locale/uk-UA/requestpolicy.properties
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: QDxm102/FVytCfNHeajzSw==
- SHA1-Digest: yU/r3ZdNqwR33eQcXao8Ma2yGTs=
++MD5-Digest: wfTjGfPn2fcq0r91G6ofqQ==
++SHA1-Digest: xPqiQcv2wG/JnfDfviq8mODKqfU=
 +
- Name: locale/es-MX/requestpolicy.dtd
++Name: locale/zh-CN/requestpolicy.dtd
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: p4AB7nYZ/Kw6d9gfDi8IoQ==
- SHA1-Digest: zq7CXn+GYo7De4Xt91GOeOS3qZg=
++MD5-Digest: T5Bqf7eJXZxkvt1kRf2WTw==
++SHA1-Digest: rsMS9bomSXElul3g2FIISZAq0CA=
 +
- Name: locale/es-MX/requestpolicy.properties
++Name: locale/zh-CN/requestpolicy.properties
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: hZJZe4f//f5CTW5OzkBpTg==
- SHA1-Digest: BAE7m5U7fj+zax9opW8HOopFA0U=
++MD5-Digest: 2rGYVt9h8MCjX0fetGYW4A==
++SHA1-Digest: FgkWEGPFz7dhkeokNxnS5I37HSs=
 +
- Name: skin/requestpolicy-statusbar-blocked.png
++Name: locale/zh-TW/requestpolicy.dtd
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: DLfnmMXcX11H83/x1l+PkA==
- SHA1-Digest: JwE7jJrdz9dY3SDzPDN5cXyuIPE=
++MD5-Digest: PfmqQTFvc1tNhrhtngY7tQ==
++SHA1-Digest: MejY4QleZFjtH1FQRmulTz+bMcM=
 +
- Name: skin/dot.png
++Name: locale/zh-TW/requestpolicy.properties
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: 6ZQiOl6YR5jZzvD/M9z8ig==
- SHA1-Digest: RDgRl3pigBseZY3o2FgGlA4lhe4=
++MD5-Digest: RjdaDueY58j27fa0aUK4rA==
++SHA1-Digest: svpzOSx/LXc8lNOQ+cMisgxFWII=
 +
- Name: skin/request-log.css
++Name: skin/close.png
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: Dy1U0gvGP9lHyEF5OFqW3w==
- SHA1-Digest: gDzFQguILzvYrXM8k5XERcGsK/w=
++MD5-Digest: 7h607/eRKeau7XntOi2fCw==
++SHA1-Digest: iTy8yNjtkoRcODVHdACukPyUdmk=
 +
- Name: skin/requestpolicy-icon-32-blocked.png
++Name: skin/dot.png
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: Azv0YBgCQQPEOYE1H5FA1Q==
- SHA1-Digest: r/saE8YuaR1GmoXPLNiEEcWDyCQ=
++MD5-Digest: 6ZQiOl6YR5jZzvD/M9z8ig==
++SHA1-Digest: RDgRl3pigBseZY3o2FgGlA4lhe4=
 +
- Name: skin/requestpolicy-statusbar-allowed.png
++Name: skin/initial-setup.css
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: 0folj9+9/KhWd2DmfBs3Fg==
- SHA1-Digest: v7VT838WMXI1DwX2lrSW3YH9jow=
++MD5-Digest: SivkyepsnCnN6H1YiYqwfw==
++SHA1-Digest: J3sxJn/rTfCYlZiy9I0d8FAvzNY=
 +
- Name: skin/close.png
++Name: skin/menu-allowed.svg
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: 7h607/eRKeau7XntOi2fCw==
- SHA1-Digest: iTy8yNjtkoRcODVHdACukPyUdmk=
++MD5-Digest: nV5VrjIu5Xtzzx12iVediw==
++SHA1-Digest: Xa8xm1qix3i/VH+dvzVvDwImgC8=
 +
- Name: skin/requestpolicy-icon-32-allowed.png
++Name: skin/menu-blocked.svg
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: ad8QX7maxSoOWvptubGk2w==
- SHA1-Digest: jJxLCde6TR+WUhbU+uADUvfaTe4=
++MD5-Digest: n3DEgJZDT6gUSnxPKSq26g==
++SHA1-Digest: DWmR3LX2AnSv2Ns92RkP037LKr0=
 +
- Name: skin/requestpolicy-icon-disabled.png
++Name: skin/menu-default.svg
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: IbB/LJgfFQ0Bh//Ov/Pl1Q==
- SHA1-Digest: poh+kgwVdBewWFYWOXD6jMTnqUM=
++MD5-Digest: YMrcua6M9KW8ha0v3Ye6rw==
++SHA1-Digest: UnW/mDqYtJjpsmaMDxseUmWZqbw=
 +
 +Name: skin/menu-other-origins.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: dUzdeO5c8zbWFl/zN6NwfQ==
 +SHA1-Digest: wz+fvLxp7vdR4rq6/B3r6lZhVGM=
 +
++Name: skin/request-log.css
++Digest-Algorithms: MD5 SHA1
++MD5-Digest: Dy1U0gvGP9lHyEF5OFqW3w==
++SHA1-Digest: gDzFQguILzvYrXM8k5XERcGsK/w=
++
 +Name: skin/requestpolicy-icon-24-allowed.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: zYXVJ1OS66hBNFm5yrFgkA==
 +SHA1-Digest: C2IFm7adI+wabttSCm8NiLINjlo=
 +
- Name: skin/toolbarbutton-seamonkey.css
- Digest-Algorithms: MD5 SHA1
- MD5-Digest: TEeNSDq+8q/vwLDQ48+Yag==
- SHA1-Digest: o2eyybot7PxmxQUQZdlm7s2WW7o=
- 
- Name: skin/menu-default.svg
- Digest-Algorithms: MD5 SHA1
- MD5-Digest: YMrcua6M9KW8ha0v3Ye6rw==
- SHA1-Digest: UnW/mDqYtJjpsmaMDxseUmWZqbw=
- 
- Name: skin/toolbarbutton.css
- Digest-Algorithms: MD5 SHA1
- MD5-Digest: tbTc7iHHY3IxgZZzRNWHEQ==
- SHA1-Digest: Pwx6sucpQTLpIbu+UKOD6/3cgTQ=
- 
 +Name: skin/requestpolicy-icon-24-blocked.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: Wic5nAdiHv1e+ncHnNZhxg==
 +SHA1-Digest: GsJl5v6HO7CUOS/8lB/4MMRPCuw=
 +
- Name: skin/initial-setup.css
++Name: skin/requestpolicy-icon-24-disabled.png
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: SivkyepsnCnN6H1YiYqwfw==
- SHA1-Digest: J3sxJn/rTfCYlZiy9I0d8FAvzNY=
++MD5-Digest: g/xzYn+NcYrBALsvLvCygA==
++SHA1-Digest: HgHArB9Dfe7ljls1nIrJNK6MHTg=
 +
- Name: skin/menu-allowed.svg
++Name: skin/requestpolicy-icon-32-allowed.png
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: nV5VrjIu5Xtzzx12iVediw==
- SHA1-Digest: Xa8xm1qix3i/VH+dvzVvDwImgC8=
++MD5-Digest: ad8QX7maxSoOWvptubGk2w==
++SHA1-Digest: jJxLCde6TR+WUhbU+uADUvfaTe4=
++
++Name: skin/requestpolicy-icon-32-blocked.png
++Digest-Algorithms: MD5 SHA1
++MD5-Digest: Azv0YBgCQQPEOYE1H5FA1Q==
++SHA1-Digest: r/saE8YuaR1GmoXPLNiEEcWDyCQ=
 +
 +Name: skin/requestpolicy-icon-32-disabled.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: B2n1zStlybgvbtikAtcGyg==
 +SHA1-Digest: HfF/LBsrRVTUF3vqN4fH4OVoyVI=
 +
 +Name: skin/requestpolicy-icon-32.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: 7cfrRo4hVSZjIitHKQJd6A==
 +SHA1-Digest: L8b37XGnevF0DKRos7lxvVq7sTs=
 +
- Name: skin/requestpolicy-icon-24-disabled.png
- Digest-Algorithms: MD5 SHA1
- MD5-Digest: g/xzYn+NcYrBALsvLvCygA==
- SHA1-Digest: HgHArB9Dfe7ljls1nIrJNK6MHTg=
- 
- Name: skin/menu-blocked.svg
- Digest-Algorithms: MD5 SHA1
- MD5-Digest: n3DEgJZDT6gUSnxPKSq26g==
- SHA1-Digest: DWmR3LX2AnSv2Ns92RkP037LKr0=
- 
 +Name: skin/requestpolicy-icon-allowed.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: T7JlJKlYh0xouf5n3nXoIw==
 +SHA1-Digest: 9Xd8pFqrBNRfiJaii6PuSQNwGGg=
 +
- Name: skin/requestpolicy.css
- Digest-Algorithms: MD5 SHA1
- MD5-Digest: 9wPJ/dCof0IjQp+ygdCi8g==
- SHA1-Digest: Q2oo/S5K3eJAVxbf7DKNE/wkNIQ=
- 
 +Name: skin/requestpolicy-icon-blocked.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: H2bEnhsko2AFOyB/J0CoXg==
 +SHA1-Digest: GKvD/D6A6XHVoYfW9J5LtkpFQis=
 +
++Name: skin/requestpolicy-icon-disabled.png
++Digest-Algorithms: MD5 SHA1
++MD5-Digest: IbB/LJgfFQ0Bh//Ov/Pl1Q==
++SHA1-Digest: poh+kgwVdBewWFYWOXD6jMTnqUM=
++
++Name: skin/requestpolicy-statusbar-allowed.png
++Digest-Algorithms: MD5 SHA1
++MD5-Digest: 0folj9+9/KhWd2DmfBs3Fg==
++SHA1-Digest: v7VT838WMXI1DwX2lrSW3YH9jow=
++
++Name: skin/requestpolicy-statusbar-blocked.png
++Digest-Algorithms: MD5 SHA1
++MD5-Digest: DLfnmMXcX11H83/x1l+PkA==
++SHA1-Digest: JwE7jJrdz9dY3SDzPDN5cXyuIPE=
++
 +Name: skin/requestpolicy-statusbar-disabled.png
 +Digest-Algorithms: MD5 SHA1
 +MD5-Digest: AbAK6+qCdyzo9q3OA5Qt9w==
 +SHA1-Digest: ulSmlBGaY0+PeWUM//y8TQryZ44=
 +
- Name: chrome.manifest
++Name: skin/requestpolicy.css
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: RPJPQ0xi45CRx2zI0SuZiw==
- SHA1-Digest: CQz+MaCf0siuPn+qjNMkqIV0GbM=
++MD5-Digest: P0UKh3kEWzc+A67Y2IjxwQ==
++SHA1-Digest: H925YlxuDw07mwfjJsR9jTRrhX8=
 +
- Name: bootstrap.js
++Name: skin/toolbarbutton-seamonkey.css
++Digest-Algorithms: MD5 SHA1
++MD5-Digest: TEeNSDq+8q/vwLDQ48+Yag==
++SHA1-Digest: o2eyybot7PxmxQUQZdlm7s2WW7o=
++
++Name: skin/toolbarbutton.css
 +Digest-Algorithms: MD5 SHA1
- MD5-Digest: NrKgyQ7kZsPGT2ff9OFX2A==
- SHA1-Digest: weFhqK4W8qUUee//yL5VH0fEh3o=
++MD5-Digest: rRJgwME7ZsXu8lzdQxhGmQ==
++SHA1-Digest: a+zfbIUeLWYnFiyn02Ddlnck1io=
++
++Name: LICENSE
++Digest-Algorithms: MD5 SHA1
++MD5-Digest: V+iUvQ8339+uK2nUxBt4oQ==
++SHA1-Digest: BKr7OaEqkHyN92EAoQgXBoUWHk4=
++
diff --cc META-INF/mozilla.rsa
index 0000000,0000000..75c927b
new file mode 100644
Binary files differ
diff --cc META-INF/mozilla.sf
index 0000000,0000000..5bf2160
new file mode 100644
--- /dev/null
+++ b/META-INF/mozilla.sf
@@@ -1,0 -1,0 +1,4 @@@
++Signature-Version: 1.0
++MD5-Digest-Manifest: gPyJS94SHa4JmlLR9WaeSg==
++SHA1-Digest-Manifest: gm9+tTF+InAhV3RtdSbEo/7RoKE=
++
diff --cc content/controllers/keyboard-shortcuts.jsm
index 0000000,b656d3f..b656d3f
mode 000000,100644..100644
--- a/content/controllers/keyboard-shortcuts.jsm
+++ b/content/controllers/keyboard-shortcuts.jsm
diff --cc content/controllers/old-rules.jsm
index 0000000,4bf2827..4bf2827
mode 000000,100644..100644
--- a/content/controllers/old-rules.jsm
+++ b/content/controllers/old-rules.jsm
diff --cc content/controllers/windows.overlay.jsm
index 0000000,d4de0e1..d4de0e1
mode 000000,100644..100644
--- a/content/controllers/windows.overlay.jsm
+++ b/content/controllers/windows.overlay.jsm
diff --cc content/controllers/windows.style-sheets.jsm
index 0000000,2617b85..2617b85
mode 000000,100644..100644
--- a/content/controllers/windows.style-sheets.jsm
+++ b/content/controllers/windows.style-sheets.jsm
diff --cc content/controllers/windows.toolbarbutton.jsm
index 0000000,b6043a8..b6043a8
mode 000000,100644..100644
--- a/content/controllers/windows.toolbarbutton.jsm
+++ b/content/controllers/windows.toolbarbutton.jsm
diff --cc content/lib/classes/keyboard-shortcut.jsm
index 0000000,af1a54c..af1a54c
mode 000000,100644..100644
--- a/content/lib/classes/keyboard-shortcut.jsm
+++ b/content/lib/classes/keyboard-shortcut.jsm
diff --cc content/lib/classes/map-of-sets.jsm
index 0000000,8a1fdd6..8a1fdd6
mode 000000,100644..100644
--- a/content/lib/classes/map-of-sets.jsm
+++ b/content/lib/classes/map-of-sets.jsm
diff --cc content/lib/classes/pref-branch.jsm
index 0000000,f1824c0..f1824c0
mode 000000,100644..100644
--- a/content/lib/classes/pref-branch.jsm
+++ b/content/lib/classes/pref-branch.jsm
diff --cc content/lib/classes/pref-observer.jsm
index 0000000,58817fb..58817fb
mode 000000,100644..100644
--- a/content/lib/classes/pref-observer.jsm
+++ b/content/lib/classes/pref-observer.jsm
diff --cc content/lib/environment.jsm
index 89dc349,c200bce..a4f4ef4
--- a/content/lib/environment.jsm
+++ b/content/lib/environment.jsm
@@@ -27,491 -31,590 +31,538 @@@ this.EXPORTED_SYMBOLS = 
    "ProcessEnvironment"
  ];
  
- const Ci = Components.interfaces;
- const Cc = Components.classes;
- const Cu = Components.utils;
- 
  let globalScope = this;
  
- Cu.import("resource://gre/modules/XPCOMUtils.jsm");
- Cu.import("resource://gre/modules/Services.jsm");
- Cu.import("resource://gre/modules/devtools/Console.jsm");
+ let {XPCOMUtils} = Cu.import("resource://gre/modules/XPCOMUtils.jsm", {});
+ let {Services} = Cu.import("resource://gre/modules/Services.jsm", {});
+ let {console} = Cu.import("resource://gre/modules/devtools/Console.jsm", {});
  
- Cu.import("chrome://rpcontinued/content/lib/script-loader.jsm");
+ let {ScriptLoader} = Cu.import(
+     "chrome://rpcontinued/content/lib/script-loader.jsm", {});
  
  ScriptLoader.defineLazyModuleGetters({
+   /* global ManagerForEventListeners */
    "lib/manager-for-event-listeners": ["ManagerForEventListeners"],
+   /* global ManagerForMessageListeners */
    "lib/manager-for-message-listeners": ["ManagerForMessageListeners"],
-   "lib/utils/constants": ["C"],
-   "lib/observer-manager": ["ObserverManager"]
+   /* global ObserverManager */
+   "lib/observer-manager": ["ObserverManager"],
+   /* global PrefObserver */
+   "lib/classes/pref-observer": ["PrefObserver"]
  }, globalScope);
  
+ //==============================================================================
+ // utilities
+ //==============================================================================
  
+ const LOG_PREFIX = "[RPC] [Environment] ";
  
+ function consoleLog(method, message) {
+   console[method](LOG_PREFIX + message);
+ }
  
- let ENV_STATES = {
-   "NOT_STARTED": 0,
-   "STARTING_UP": 1,
-   "STARTUP_DONE": 2,
-   "SHUTTING_DOWN": 3,
-   "SHUT_DOWN": 4
+ let log = {
+   debug: consoleLog.bind(null, "debug"),
+   warning: consoleLog.bind(null, "warn"),
+   error: consoleLog.bind(null, "error")
  };
  
- let LEVELS = {
-   // Essential functions do tasks that must be run first on startup and last
-   // on shutdown, that is they do tasks that are requirements for the Backend.
-   "ESSENTIAL": 1,
-   // Backend functions start up/shut down main parts of RequestPolicy, but
-   // they do not enable RequestPolicy at all.
-   "BACKEND": 2,
-   // Interface functions enable/disable external as well as internal interfaces,
-   // e.g. Event Listeners, Message Listeners, Observers, Factories.
-   "INTERFACE": 3,
-   // UI functions will enable/disable UI elements such as the menu.
-   "UI": 4
- };
+ //==============================================================================
+ // Environment
+ //==============================================================================
  
- // a level can be entered, being processed, or finished being processed.
- let LEVEL_STATES = {
-   "NOT_ENTERED": 0,
-   "PROCESSING": 1,
-   "FINISHED_PROCESSING": 2
- };
+ var Environment = (function() {
  
+   //----------------------------------------------------------------------------
+   // constants, metadata
+   //----------------------------------------------------------------------------
  
- let BOOTSTRAP = {
-   "startup": {
-     levelSequence: [
-       LEVELS.ESSENTIAL,
-       LEVELS.BACKEND,
-       LEVELS.INTERFACE,
-       LEVELS.UI
-     ],
-     lastLevel: LEVELS.UI,
-     envStates: {
-       "beforeProcessing": ENV_STATES.NOT_STARTED,
-       "duringProcessing": ENV_STATES.STARTING_UP,
-       "afterProcessing": ENV_STATES.STARTUP_DONE
-     },
-     functions: {
-       "beforeProcessing": function() {
-         // "this" will be an environment
-         let self = this;
-         self.register();
+   const ENV_STATES = {
+     "NOT_STARTED": 0,
+     "STARTING_UP": 1,
+     "STARTUP_DONE": 2,
+     "SHUTTING_DOWN": 3,
+     "SHUT_DOWN": 4
+   };
+ 
+   const LEVELS = {
+     // Essential functions do tasks that must be run first on startup and last
+     // on shutdown, that is they do tasks that are requirements for the Backend.
+     "ESSENTIAL": 1,
+     // Backend functions start up/shut down main parts of RequestPolicy, but
+     // they do not enable RequestPolicy at all.
+     "BACKEND": 2,
+     // Interface functions enable/disable external as well as internal
+     // interfaces, e.g. Event Listeners, Message Listeners, Observers,
+     // Factories.
+     "INTERFACE": 3,
+     // UI functions will enable/disable UI elements such as the menu.
+     "UI": 4
+   };
+ 
+   // a level can be entered, being processed, or finished being processed.
+   const LEVEL_STATES = {
+     "NOT_ENTERED": 0,
+     "PROCESSING": 1,
+     "FINISHED_PROCESSING": 2
+   };
+ 
+   let BOOTSTRAP = {
+     "startup": {
+       levelSequence: [
+         LEVELS.ESSENTIAL,
+         LEVELS.BACKEND,
+         LEVELS.INTERFACE,
+         LEVELS.UI
+       ],
+       lastLevel: LEVELS.UI,
+       envStates: {
+         "beforeProcessing": ENV_STATES.NOT_STARTED,
+         "duringProcessing": ENV_STATES.STARTING_UP,
+         "afterProcessing": ENV_STATES.STARTUP_DONE
        },
-       "afterProcessing": function() {}
-     }
-   },
-   "shutdown": {
-     levelSequence: [
-       LEVELS.UI,
-       LEVELS.INTERFACE,
-       LEVELS.BACKEND,
-       LEVELS.ESSENTIAL
-     ],
-     lastLevel: LEVELS.ESSENTIAL,
-     envStates: {
-       "beforeProcessing": ENV_STATES.STARTUP_DONE,
-       "duringProcessing": ENV_STATES.SHUTTING_DOWN,
-       "afterProcessing": ENV_STATES.SHUT_DOWN
+       functions: {
+         /**
+          * @this {Environment}
+          */
+         "beforeProcessing": function() {
+           this.register();
+         },
+         "afterProcessing": function() {}
+       }
      },
-     functions: {
-       "beforeProcessing": function() {},
-       "afterProcessing": function() {
-         // "this" will be an environment
-         let self = this;
-         self.innerEnvs.length = 0;
-         self.unregister();
+     "shutdown": {
+       levelSequence: [
+         LEVELS.UI,
+         LEVELS.INTERFACE,
+         LEVELS.BACKEND,
+         LEVELS.ESSENTIAL
+       ],
+       lastLevel: LEVELS.ESSENTIAL,
+       envStates: {
+         "beforeProcessing": ENV_STATES.STARTUP_DONE,
+         "duringProcessing": ENV_STATES.SHUTTING_DOWN,
+         "afterProcessing": ENV_STATES.SHUT_DOWN
+       },
+       functions: {
+         "beforeProcessing": function() {},
+         /**
+          * @this {Environment}
+          */
+         "afterProcessing": function() {
+           this.innerEnvs.length = 0;
+           this.unregister();
+         }
        }
      }
-   }
- };
- function getBootstrapMetadata(startupOrShutdown) {
-   return BOOTSTRAP[startupOrShutdown];
- }
- 
- 
- /**
-  * The `Environment` class can take care of the "startup" (=initialization)
-  * and "shutdown" of any environment.
-  *
-  * To each `Environment` instance, `startup` and `shutdown` functions can be
-  * added. As soon as the Environment starts up, e.g. via its startup()
-  * function, all those functions will be called. Equally the shutdown
-  * functions are called on the environment's shutdown.
-  *
-  * Both startup and shutdown functions will have Levels assigned. The levels
-  * of the functions determine in which sequence they are called.
-  *
-  * @constructor
-  * @param {Environment=} aOuterEnv - the Environment to which this environment
-  *     will register itself. Inner environments shut down when its outer
-  *     environment shuts down.
-  * @param {string=} aName - the Environment's name; only needed for debugging.
-  */
- function Environment(aOuterEnv, aName="anonymous") {
-   let self = this;
- 
-   self.envState = ENV_STATES.NOT_STARTED;
- 
-   self.name = aName;
- 
-   self.outerEnv = aOuterEnv instanceof Environment ? aOuterEnv : null;
-   self.innerEnvs = new Set();
- 
-   self.levels = {
-     "startup": generateLevelObjects(),
-     "shutdown": generateLevelObjects()
    };
+   function getBootstrapMetadata(startupOrShutdown) {
+     return BOOTSTRAP[startupOrShutdown];
+   }
  
-   // Define a Lazy Getter to get an ObserverManager for this Environment.
-   // Using that Getter is more convenient than doing it manually, as the
-   // Environment has to be created *before* the ObserverManager.
-   XPCOMUtils.defineLazyGetter(self, "obMan", function() {
-     return new ObserverManager(self);
-   });
- 
-   // Define a Lazy Getter to get an instance of `ManagerForEventListeners` for
-   // this Environment.
-   XPCOMUtils.defineLazyGetter(self, "elManager", function() {
-     return new ManagerForEventListeners(self);
-   });
- 
-   // generate an unique ID for debugging purposes
-   XPCOMUtils.defineLazyGetter(self, "uid", function() {
-     return Math.random().toString(36).substr(2, 5);
-   });
- 
-   //console.debug('[RPC] created new Environment "'+self.name+'"');
- }
+   //----------------------------------------------------------------------------
+   // Environment
+   //----------------------------------------------------------------------------
  
- Environment.LEVELS = LEVELS;
+   /**
+    * The `Environment` class can take care of the "startup" (=initialization)
+    * and "shutdown" of any environment.
+    *
+    * To each `Environment` instance, `startup` and `shutdown` functions can be
+    * added. As soon as the Environment starts up, e.g. via its startup()
+    * function, all those functions will be called. Equally the shutdown
+    * functions are called on the environment's shutdown.
+    *
+    * Both startup and shutdown functions will have Levels assigned. The levels
+    * of the functions determine in which sequence they are called.
+    *
+    * @constructor
+    * @param {Environment=} aOuterEnv - the Environment to which this environment
+    *     will register itself. Inner environments shut down when its outer
+    *     environment shuts down.
+    * @param {string=} aName - the Environment's name; only needed for debugging.
+    */
+   function Environment(aOuterEnv, aName="anonymous") {
+     let self = this;
  
+     self.envState = ENV_STATES.NOT_STARTED;
  
- /**
-  * This function creates one "Level Object" for each level. Those objects
-  * mainly will hold the startup- or shutdown-functions of the corresponding
-  * level. All of the Level Objects are put together in another object which
-  * is then returned.
-  */
- function generateLevelObjects() {
-   let obj = {};
-   for (let levelName in Environment.LEVELS) {
-     let level = Environment.LEVELS[levelName];
-     obj[level] = {"functions": [], "levelState": LEVEL_STATES.NOT_ENTERED};
-   }
-   return obj;
- }
+     self.name = aName;
  
+     self.outerEnv = aOuterEnv instanceof Environment ? aOuterEnv : null;
+     self.innerEnvs = new Set();
  
- /**
-  * Registers the environment to its outer environment.
-  */
- Environment.prototype.register = function() {
-   let self = this;
-   if (self.outerEnv) {
-     self.outerEnv.registerInnerEnvironment(self);
-   }
- }
- /**
-  * Unregisters the environment from its outer environment.
-  */
- Environment.prototype.unregister = function() {
-   let self = this;
-   if (self.outerEnv) {
-     self.outerEnv.unregisterInnerEnvironment(self);
-   }
- }
- /**
-  * Function called by an inner environment when it starts up.
-  *
-  * @param {Environment} aEnv - the environment that wants to register itself.
-  */
- Environment.prototype.registerInnerEnvironment = function(aEnv) {
-   let self = this;
-   if (self.envState === ENV_STATES.NOT_STARTED) {
-     console.warn("[RPC] registerInnerEnvironment() has been called, " +
-                  "but the outer environment hasn't started up yet. " +
-                  "Starting up now.");
-     self.startup();
-   }
-   //console.debug("[RPC] registering inner environment.");
-   self.innerEnvs.add(aEnv);
- };
- /**
-  * Function that is called each time an inner environment shuts down.
-  *
-  * @param {Environment} aEnv - the environment that is unregistering
-  */
- Environment.prototype.unregisterInnerEnvironment = function(aEnv) {
-   let self = this;
- 
-   if (self.innerEnvs.has(aEnv) === false) {
-     console.error("[RPC] it seems like an inner Environment " +
-                   "did not register.");
-   } else {
-     self.innerEnvs.delete(aEnv);
-   }
- };
+     self.levels = {
+       "startup": generateLevelObjects(),
+       "shutdown": generateLevelObjects()
+     };
  
+     // Define a Lazy Getter to get an ObserverManager for this Environment.
+     // Using that Getter is more convenient than doing it manually, as the
+     // Environment has to be created *before* the ObserverManager.
+     XPCOMUtils.defineLazyGetter(self, "obMan", function() {
+       return new ObserverManager(self);
+     });
  
+     // Define a Lazy Getter to get an instance of `ManagerForEventListeners` for
+     // this Environment.
+     XPCOMUtils.defineLazyGetter(self, "elManager", function() {
+       return new ManagerForEventListeners(self);
+     });
  
+     // generate an unique ID for debugging purposes
+     XPCOMUtils.defineLazyGetter(self, "uid", function() {
+       return Math.random().toString(36).substr(2, 5);
+     });
  
- /**
-  * Add a startup function to the environment.
-  */
- Environment.prototype.addStartupFunction = function(aLevel, f) {
-   let self = this;
-   if (self.envState >= ENV_STATES.SHUTTING_DOWN) {
-     // the environment is shutting down or already shut down.
-     return;
-   }
-   if (self.levels["startup"][aLevel].levelState >= LEVEL_STATES.PROCESSING) {
-     // Either the startup functions of the same level as `aLevel` have
-     //        already been processed
-     //    OR  they are currently being processed.
-     //
-     // ==> call the function immediately.
-     f();
-   } else {
-     // the startup process did not reach the function's level yet.
-     //
-     // ==> remember the function.
-     self.levels["startup"][aLevel].functions.push(f);
 -    // #ifdef LOG_ENVIRONMENT
 -    log.debug("created new Environment \"" + self.name + "\"");
 -    // #endif
    }
- };
  
- /**
-  * Add a shutdown function to the environment.
-  */
- Environment.prototype.addShutdownFunction = function(aLevel, f) {
-   let self = this;
-   if (self.levels["shutdown"][aLevel].levelState >= LEVEL_STATES.PROCESSING) {
-     // Either the shutdown functions of the same level as `aLevel` have
-     //        already been processed
-     //    OR  they are currently being processed.
-     //
-     // ==> call the function immediately.
-     f();
-     //console.debug('[RPC] calling shutdown function immediately: "' +
-     //              (f.name || "anonymous") + '" (' + self.name + ')');
-   } else {
-     // The opposite, i.e. the startup process did not reach the function's
-     // level yet.
-     //
-     // ==> remember the function.
-     self.levels["shutdown"][aLevel].functions.push(f);
-   }
- };
+   Object.defineProperty(Environment.prototype, "prefObs", {
+     get: function() {
+       if (!this._prefObserver) {
+         this._prefObserver = new PrefObserver();
+         this.addShutdownFunction(Environment.LEVELS.INTERFACE, () => {
+           this._prefObserver.removeAllListeners();
+         });
+       }
+       return this._prefObserver;
+     }
+   });
  
+   Environment.LEVELS = LEVELS;
+   Environment.ENV_STATES = ENV_STATES;
  
- // have a scope/closure for private functions specific to
- // startup() and shutdown().
- (function createMethods_StartupAndShutdown(Environment) {
    /**
-    * Iterates all levels of either the startup or the shutdown
-    * sequence and calls a function for each level.
-    *
-    * @param {string} aStartupOrShutdown
-    * @param {function()} aFn - the function to call
-    * @param {integer=} aUntilLevel - if specified, iteration stops
-    *     after that level.
+    * This function creates one "Level Object" for each level. Those objects
+    * mainly will hold the startup- or shutdown-functions of the corresponding
+    * level. All of the Level Objects are put together in another object which
+    * is then returned.
     */
-   function iterateLevels(aStartupOrShutdown, aFn, aUntilLevel=null) {
-     let sequence = BOOTSTRAP[aStartupOrShutdown].levelSequence;
- 
-     for (let i = 0, len = sequence.length; i < len; ++i) {
-       // Note: It's necessary to use for(;;) instead of  for(..of..)
-       //       because the order/sequence must be exactly the same as in the
-       //       array.  for(..of..) doesn't guarantee that the elements are
-       //       called in order.
- 
-       let level = sequence[i];
-       aFn(level);
- 
-       if (level === aUntilLevel) {
-         // Stop after aUntilLevel
-         break;
-       }
+   function generateLevelObjects() {
+     let obj = {};
+     for (let levelName in Environment.LEVELS) {
+       let level = Environment.LEVELS[levelName];
+       obj[level] = {"functions": [], "levelState": LEVEL_STATES.NOT_ENTERED};
      }
+     return obj;
    }
  
- 
    /**
-    * This function calls all functions in an array.
-    *
-    * @param {Array.<function()>} aFunctions
-    * @param {Array} aBootstrapArgs - the arguments to apply
+    * Registers the environment to its outer environment.
     */
-   function callFunctions(aFunctions, aBootstrapArgs) {
-     // process the Array as long as it contains elements
-     while (aFunctions.length > 0) {
-       // The following is either `fnArray.pop()` or `fnArray.shift()`
-       // depending on `sequence`.
-       let f = aFunctions.pop();
- 
-       // call the function
-       f.apply(null, aBootstrapArgs);
-       //console.debug("[RPC] function called! (" + fnArray.length +
-       //              " functions left)");
+   Environment.prototype.register = function() {
+     let self = this;
+     if (self.outerEnv) {
+       self.outerEnv.registerInnerEnvironment(self);
+     }
+   };
+   /**
+    * Unregisters the environment from its outer environment.
+    */
+   Environment.prototype.unregister = function() {
+     let self = this;
+     if (self.outerEnv) {
+       self.outerEnv.unregisterInnerEnvironment(self);
      }
    };
- 
- 
    /**
-    * Process a level independently of the environment's states and
-    * independently of the other levels' states.
+    * Function called by an inner environment when it starts up.
     *
-    * @this {Environment}
-    * @param {string} aStartupOrShutdown - either "startup" or "shutdown"
-    * @param {integer} aLevel
+    * @param {Environment} aEnv - the environment that wants to register itself.
     */
-   function processLevel(aStartupOrShutdown, aLevel, aBootstrapArgs) {
+   Environment.prototype.registerInnerEnvironment = function(aEnv) {
      let self = this;
- 
-     let levelObj = self.levels[aStartupOrShutdown][aLevel];
- 
-     if (levelObj.levelState === LEVEL_STATES.NOT_ENTERED) {
-       levelObj.levelState = LEVEL_STATES.PROCESSING;
- 
-       if (aStartupOrShutdown === "shutdown") {
-         // shut down all inner environments
-         self.innerEnvs.forEach(function(innerEnv) {
-           innerEnv.shutdown(aBootstrapArgs, aLevel);
-         });
-       }
- 
-       callFunctions(levelObj.functions, aBootstrapArgs);
- 
-       levelObj.levelState = LEVEL_STATES.FINISHED_PROCESSING;
+     if (self.envState === ENV_STATES.NOT_STARTED) {
+       log.warning("registerInnerEnvironment() has been called but " +
+           "the outer environment hasn't started up yet. " +
+           "Starting up now.");
+       self.startup();
      }
-   }
- 
- 
 -    // #ifdef LOG_ENVIRONMENT
 -    log.debug("registering inner environment");
 -    // #endif
+     self.innerEnvs.add(aEnv);
+   };
    /**
-    * Iterate levels and call processLevel() for each level.
+    * Function that is called each time an inner environment shuts down.
     *
-    * @this {Environment}
-    * @param {string} aStartupOrShutdown
-    * @param {Array} aBootstrapArgs
-    * @param {integer=} aUntilLevel
+    * @param {Environment} aEnv - the environment that is unregistering
     */
-   function processLevels(aStartupOrShutdown, aBootstrapArgs, aUntilLevel) {
+   Environment.prototype.unregisterInnerEnvironment = function(aEnv) {
      let self = this;
-     iterateLevels(aStartupOrShutdown, function (level) {
-       processLevel.call(self, aStartupOrShutdown, level, aBootstrapArgs);
-     }, aUntilLevel);
-   }
  
+     if (self.innerEnvs.has(aEnv) === false) {
+       log.error("it seems like an inner Environment did not register.");
+     } else {
+       self.innerEnvs.delete(aEnv);
+     }
+   };
  
    /**
-    * Return some information about an environment.
-    *
-    * @param {Environment} env
-    * @return {string}
+    * Add a startup function to the environment.
     */
-   function getEnvInfo(env) {
-     return "'" + env.name + "' (" + env.uid + ")";
-   }
- 
+   Environment.prototype.addStartupFunction = function(aLevel, f) {
+     let self = this;
+     if (self.envState >= ENV_STATES.SHUTTING_DOWN) {
+       // the environment is shutting down or already shut down.
+       return;
+     }
+     if (self.levels.startup[aLevel].levelState >= LEVEL_STATES.PROCESSING) {
+       // Either the startup functions of the same level as `aLevel` have
+       //        already been processed
+       //    OR  they are currently being processed.
+       //
+       // ==> call the function immediately.
+       f();
+     } else {
+       // the startup process did not reach the function's level yet.
+       //
+       // ==> remember the function.
+       self.levels.startup[aLevel].functions.push(f);
+     }
+   };
  
    /**
-    * Actual body of the functions startup() and shutdown().
-    *
-    * @this {Environment}
-    * @param {string} aStartupOrShutdown - either "startup" or "shutdown"
-    * @param {Array} aBootstrapArgs
-    * @param {integer=} aUntilLevel - The level after which the startup
-    *     (or shutdown) processing is stopped.
+    * Add a shutdown function to the environment.
     */
-   function bootstrap(aStartupOrShutdown,
-                      aBootstrapArgs,
-                      aUntilLevel=BOOTSTRAP[aStartupOrShutdown].lastLevel) {
+   Environment.prototype.addShutdownFunction = function(aLevel, f) {
      let self = this;
+     if (self.levels.shutdown[aLevel].levelState >= LEVEL_STATES.PROCESSING) {
+       // Either the shutdown functions of the same level as `aLevel` have
+       //        already been processed
+       //    OR  they are currently being processed.
+       //
+       // ==> call the function immediately.
+       f();
 -      // #ifdef LOG_ENVIRONMENT
 -      let fName = f.name || "anonymous";
 -      log.debug("calling shutdown function immediately: " +
 -          "\"" + fName + "\" (" + self.name + ")");
 -      // #endif
+     } else {
+       // The opposite, i.e. the startup process did not reach the function's
+       // level yet.
+       //
+       // ==> remember the function.
+       self.levels.shutdown[aLevel].functions.push(f);
+     }
+   };
  
-     let {
-       lastLevel,
-       envStates,
-       functions
-     } = getBootstrapMetadata(aStartupOrShutdown);
+   // have a scope/closure for private functions specific to
+   // startup() and shutdown().
+   (function createMethodsStartupAndShutdown(Environment) {
+     /**
+      * Iterates all levels of either the startup or the shutdown
+      * sequence and calls a function for each level.
+      *
+      * @param {string} aStartupOrShutdown
+      * @param {function()} aFn - the function to call
+      * @param {integer=} aUntilLevel - if specified, iteration stops
+      *     after that level.
+      */
+     function iterateLevels(aStartupOrShutdown, aFn, aUntilLevel=null) {
+       let sequence = BOOTSTRAP[aStartupOrShutdown].levelSequence;
+ 
+       for (let i = 0, len = sequence.length; i < len; ++i) {
+         // Note: It's necessary to use for(;;) instead of  for(..of..)
+         //       because the order/sequence must be exactly the same as in the
+         //       array.  for(..of..) doesn't guarantee that the elements are
+         //       called in order.
+ 
+         let level = sequence[i];
+         aFn(level);
+ 
+         if (level === aUntilLevel) {
+           // Stop after aUntilLevel
+           break;
+         }
+       }
+     }
  
-     if (self.envState === envStates["beforeProcessing"]) {
-       functions["beforeProcessing"].call(self);
+     /**
+      * This function calls all functions in an array.
+      *
+      * @param {Array.<function()>} aFunctions
+      * @param {Array} aBootstrapArgs - the arguments to apply
+      */
+     function callFunctions(aFunctions, aBootstrapArgs) {
+       // process the Array as long as it contains elements
+       while (aFunctions.length > 0) {
+         // The following is either `fnArray.pop()` or `fnArray.shift()`
+         // depending on `sequence`.
+         let f = aFunctions.pop();
+ 
+         // call the function
+         try {
+           f.apply(null, aBootstrapArgs);
+         } catch (e) {
+           Cu.reportError(e);
+         }
 -        // #ifdef LOG_ENVIRONMENT
 -        log.debug("function called! (" + aFunctions.length +
 -            " functions left)");
 -        // #endif
+       }
+     }
+ 
+     /**
+      * Process a level independently of the environment's states and
+      * independently of the other levels' states.
+      *
+      * @this {Environment}
+      * @param {string} aStartupOrShutdown - either "startup" or "shutdown"
+      * @param {integer} aLevel
+      */
+     function processLevel(aStartupOrShutdown, aLevel, aBootstrapArgs) {
+       let self = this;
+ 
+       let levelObj = self.levels[aStartupOrShutdown][aLevel];
+ 
+       if (levelObj.levelState === LEVEL_STATES.NOT_ENTERED) {
+         levelObj.levelState = LEVEL_STATES.PROCESSING;
 -        // #ifdef LOG_ENVIRONMENT
 -        log.debug("processing level " + aLevel + " of startup (" +
 -            self.uid + ")");
 -        // #endif
+ 
+         if (aStartupOrShutdown === "shutdown") {
+           // shut down all inner environments
+           self.innerEnvs.forEach(function(innerEnv) {
+             innerEnv.shutdown(aBootstrapArgs, aLevel);
+           });
+         }
+ 
+         callFunctions(levelObj.functions, aBootstrapArgs);
+ 
+         levelObj.levelState = LEVEL_STATES.FINISHED_PROCESSING;
 -        // #ifdef LOG_ENVIRONMENT
 -        log.debug("processing level " + aLevel + " of startup " +
 -            "(" + self.uid + ") finished");
 -        // #endif
+       }
+     }
  
-       self.envState = envStates["duringProcessing"];
+     /**
+      * Iterate levels and call processLevel() for each level.
+      *
+      * @this {Environment}
+      * @param {string} aStartupOrShutdown
+      * @param {Array} aBootstrapArgs
+      * @param {integer=} aUntilLevel
+      */
+     function processLevels(aStartupOrShutdown, aBootstrapArgs, aUntilLevel) {
+       let self = this;
+       iterateLevels(aStartupOrShutdown, function(level) {
+         processLevel.call(self, aStartupOrShutdown, level, aBootstrapArgs);
+       }, aUntilLevel);
      }
  
-     if (self.envState === envStates["duringProcessing"]) {
-       processLevels.call(self, aStartupOrShutdown, aBootstrapArgs, aUntilLevel);
+     /**
+      * Return some information about an environment.
+      *
+      * @param {Environment} env
+      * @return {string}
+      */
+     function getEnvInfo(env) {
+       return "'" + env.name + "' (" + env.uid + ")";
+     }
+ 
 -    // #ifdef LOG_ENVIRONMENT
 -    /**
 -     * Log some debug information on startup or shutdown.
 -     *
 -     * @this {Environment}
 -     * @param {string} aStartupOrShutdown
 -     */
 -    function logStartupOrShutdown(aStartupOrShutdown) {
 -      let self = this;
 -      log.debug(aStartupOrShutdown + ": " + getEnvInfo(self) + "." +
 -                (self.outerEnv ?
 -                 " OuterEnv is " + getEnvInfo(self.outerEnv) + "." :
 -                 " No OuterEnv."));
 -    }
 -    // #endif
+ 
+     /**
+      * Actual body of the functions startup() and shutdown().
+      *
+      * @this {Environment}
+      * @param {string} aStartupOrShutdown - either "startup" or "shutdown"
+      * @param {Array} aBootstrapArgs
+      * @param {integer=} aUntilLevel - The level after which the startup
+      *     (or shutdown) processing is stopped.
+      */
+     function bootstrap(aStartupOrShutdown,
+                        aBootstrapArgs,
+                        aUntilLevel=BOOTSTRAP[aStartupOrShutdown].lastLevel) {
+       let self = this;
+ 
+       let {
+         lastLevel,
+         envStates,
+         functions
+       } = getBootstrapMetadata(aStartupOrShutdown);
+ 
+       if (self.envState === envStates.beforeProcessing) {
 -        // #ifdef LOG_ENVIRONMENT
 -        logStartupOrShutdown.call(self, aStartupOrShutdown);
 -        // #endif
+         functions.beforeProcessing.call(self);
+ 
+         self.envState = envStates.duringProcessing;
+       }
+ 
+       if (self.envState === envStates.duringProcessing) {
+         processLevels.call(self, aStartupOrShutdown, aBootstrapArgs,
+             aUntilLevel);
  
-       if (aUntilLevel === lastLevel) {
-         self.envState = envStates["afterProcessing"];
-         functions["afterProcessing"].call(self);
+         if (aUntilLevel === lastLevel) {
+           self.envState = envStates.afterProcessing;
+           functions.afterProcessing.call(self);
+         }
        }
      }
-   };
  
-   Environment.prototype.startup = function(aBootstrapArgs, aUntilLevel) {
-     let self = this;
-     bootstrap.call(self, "startup", aBootstrapArgs, aUntilLevel);
-   };
+     Environment.prototype.startup = function(aBootstrapArgs, aUntilLevel) {
+       let self = this;
 -      // #ifdef LOG_ENVIRONMENT
 -      log.debug("starting up: " + self.name);
 -      // #endif
+       bootstrap.call(self, "startup", aBootstrapArgs, aUntilLevel);
+     };
+ 
+     Environment.prototype.shutdown = function(aBootstrapArgs, aUntilLevel) {
+       let self = this;
 -      // #ifdef LOG_ENVIRONMENT
 -      log.debug("shutting down: " + self.name);
 -      // #endif
+       bootstrap.call(self, "shutdown", aBootstrapArgs, aUntilLevel);
+     };
  
-   Environment.prototype.shutdown = function(aBootstrapArgs, aUntilLevel) {
+   }(Environment));
+ 
+   /**
+    * Tell the Environment to shut down when an EventTarget's
+    * "unload" event occurres.
+    *
+    * @param {EventTarget} aEventTarget - an object having the functions
+    *     addEventListener() and removeEventListener().
+    */
+   Environment.prototype.shutdownOnUnload = function(aEventTarget) {
      let self = this;
-     bootstrap.call(self, "shutdown", aBootstrapArgs, aUntilLevel);
+     self.elManager.addListener(aEventTarget, "unload", function() {
 -      // #ifdef LOG_ENVIRONMENT
 -      log.debug("an EventTarget's `unload` function " +
 -          "has been called. Going to shut down Environment \"" +
 -          self.name + "\"");
 -      // #endif
+       self.shutdown();
+     });
    };
  
- })(Environment);
- 
- /**
-  * Tell the Environment to shut down when an EventTarget's
-  * "unload" event occurres.
-  *
-  * @param {EventTarget} aEventTarget - an object having the functions
-  *     addEventListener() and removeEventListener().
-  */
- Environment.prototype.shutdownOnUnload = function(aEventTarget) {
-   let self = this;
-   self.elManager.addListener(aEventTarget, "unload", function() {
-     self.shutdown();
-   });
- };
+   return Environment;
+ }());
  
+ //==============================================================================
+ // ProcessEnvironment
+ //==============================================================================
  
- /**
-  * @constructor
-  * @extends {Environment}
-  * @param {ContentFrameMessageManager} aMM
-  * @param {string=} aName - the environment's name, passed to the superclass.
-  */
- function FrameScriptEnvironment(aMM, aName="frame script environment") {
-   let self = this;
+ var ProcessEnvironment = (function() {
+   let scope = {
+     Environment: Environment
+   };
+   Services.scriptloader.loadSubScript(
+       "chrome://rpcontinued/content/lib/environment.process.js", scope);
+   return scope.ProcessEnvironment;
+ }());
  
-   // The outer Environment will be either ChildProcessEnvironment
-   // or ParentProcessEnvironment.
-   let _outerEnv = ProcessEnvironment;
+ //==============================================================================
+ // FrameScriptEnvironment
+ //==============================================================================
  
-   Environment.call(self, _outerEnv, aName);
+ var FrameScriptEnvironment = (function() {
+   /**
+    * @constructor
+    * @extends {Environment}
+    * @param {ContentFrameMessageManager} aMM
+    * @param {string=} aName - the environment's name, passed to the superclass.
+    */
+   function FrameScriptEnvironment(aMM, aName="frame script environment") {
+     let self = this;
  
-   self.mm = aMM;
+     // The outer Environment will be either ChildProcessEnvironment
+     // or ParentProcessEnvironment.
+     let _outerEnv = ProcessEnvironment;
  
-   self.addStartupFunction(LEVELS.INTERFACE, function() {
-     // shut down the framescript on the message manager's
-     // `unload`. That event will occur when the browsing context
-     // (e.g. the tab) has been closed.
-     self.shutdownOnUnload(self.mm);
-   });
+     Environment.call(self, _outerEnv, aName);
  
-   // a "MessageListener"-Manager for this environment
-   XPCOMUtils.defineLazyGetter(self, "mlManager", function() {
-     return new ManagerForMessageListeners(self, self.mm);
-   });
- }
- FrameScriptEnvironment.prototype = Object.create(Environment.prototype);
- FrameScriptEnvironment.prototype.constructor = Environment;
+     self.mm = aMM;
  
+     self.addStartupFunction(Environment.LEVELS.INTERFACE, function() {
+       // shut down the framescript on the message manager's
+       // `unload`. That event will occur when the browsing context
+       // (e.g. the tab) has been closed.
+       self.shutdownOnUnload(self.mm);
+     });
  
- // Load the "ProcessEnvironment"
- Services.scriptloader.loadSubScript("chrome://rpcontinued/content/" +
-                                     "lib/environment.process.js");
+     // a "MessageListener"-Manager for this environment
+     XPCOMUtils.defineLazyGetter(self, "mlManager", function() {
+       return new ManagerForMessageListeners(self, self.mm);
+     });
+   }
+   FrameScriptEnvironment.prototype = Object.create(Environment.prototype);
+   FrameScriptEnvironment.prototype.constructor = Environment;
  
+   return FrameScriptEnvironment;
+ }());
diff --cc content/lib/environment.process.js
index ebcaef0,ff795f7..e7c1e90
--- a/content/lib/environment.process.js
+++ b/content/lib/environment.process.js
@@@ -170,9 -211,11 +211,8 @@@ var ProcessEnvironment = (function() 
        // Unloading `environment.jsm` has to be the last task.
        // After that task, any global object, such as
        // `Environment` or `Cu` is not available anymore.
-       //console.debug("unloading environment.jsm");
 -      // #ifdef LOG_ENVIRONMENT
 -      console.debug("unloading environment.jsm");
 -      // #endif
        Cu.unload("chrome://rpcontinued/content/lib/environment.jsm");
-     };
+     }
  
      childMM.addMessageListener(shutdownMessage, receiveShutdownMessage);
    }
@@@ -194,10 -237,13 +234,9 @@@
  
    ChildProcessEnvironment.prototype.registerInnerEnvironment = function(aEnv) {
      let self = this;
-     if (self.envState === ENV_STATES.NOT_STARTED) {
+     if (self.envState === Environment.ENV_STATES.NOT_STARTED) {
        // The child Process Environment needs to start up when
        // the first framescript in that child is loading.
-       //console.debug("[RPC] Going to start up Child Process Environment.");
 -      // #ifdef LOG_ENVIRONMENT
 -      console.debug("[RPC] [Environment] Going to start up Child " +
 -          "Process Environment.");
 -      // #endif
        self.startup();
      }
      ProcessEnvironmentBase.prototype.registerInnerEnvironment.apply(self,
diff --cc content/lib/logger.jsm
index 0b86d62,0aa00a0..cda87a1
--- a/content/lib/logger.jsm
+++ b/content/lib/logger.jsm
@@@ -124,20 -132,20 +132,9 @@@ var Logger = (function() 
  
    ProcessEnvironment.addStartupFunction(Environment.LEVELS.ESSENTIAL, init);
  
- 
- 
- 
-   /**
-    * This function will be called in case Logger isn't fully initialized yet.
-    */
-   let initialLog = function() {
-     init();
-     log.apply(this, arguments);
-   };
- 
-   let log = function(aLevel, aType, aMessage, aError) {
-     let shouldLog = (enabled && aLevel >= level && types & aType);
+   function log(aLevel, aType, aMessage, aError) {
+     let shouldLog = enabled && aLevel >= level && types & aType;
  
 -    // #ifdef UNIT_TESTING
 -    if (aType === self.TYPE_ERROR || aLevel === self.LEVEL_SEVERE) {
 -      // increment the error count
 -      let errorCount = Prefs.get("unitTesting.errorCount");
 -      Prefs.set("unitTesting.errorCount", ++errorCount);
 -      Prefs.save();
 -
 -      // log even if logging is disabled
 -      shouldLog = true;
 -    }
 -    // #endif
  
      if (shouldLog) {
        let levelName = self._LEVEL_NAMES[aLevel.toString()];
@@@ -189,4 -194,87 +183,3 @@@
    return self;
  }());
  
 -// #ifdef UNIT_TESTING
 -
 -//==============================================================================
 -// unit testing part
 -//==============================================================================
 -
 -/**
 - * Triggers errors for a RequestPolicy unit test.
 - * It's used to test Error Detection from the unit tests.
 - */
 -var UnitTestObserver = (function() {
 -  let self = {};
 -
 -  var loggingErrorTopic = "requestpolicy-trigger-logging-error";
 -  var consoleErrorTopic = "requestpolicy-trigger-console-error";
 -
 -  self.startup = function() {
 -    Services.obs.addObserver(self, loggingErrorTopic, false);
 -    Services.obs.addObserver(self, consoleErrorTopic, false);
 -  };
 -
 -  self.shutdown = function() {
 -    Services.obs.removeObserver(self, loggingErrorTopic);
 -    Services.obs.removeObserver(self, consoleErrorTopic);
 -  };
 -
 -  /**
 -   * Split a string like
 -   *   "foo:bar:baz"
 -   * to two strings:
 -   *   ["foo", "bar:baz"]
 -   * Only the first colon counts.
 -   */
 -  function splitColon(aString) {
 -    var index = aString.indexOf(":");
 -    if (index === -1) {
 -      return [aString, ""];
 -    }
 -    var part1 = aString.substr(0, index);
 -    var part2 = aString.substr(index + 1);
 -    return [part1, part2];
 -  }
 -
 -  self.observe = function(aSubject, aTopic, aData) {
 -    switch (aTopic) {
 -      case loggingErrorTopic:
 -        let [logLevel, logMessage] = splitColon(aData);
 -
 -        if (logLevel === "warning") {
 -          Logger.warning(Logger.TYPE_ERROR, logMessage);
 -        } else if (logLevel === "severe") {
 -          Logger.severe(Logger.TYPE_INTERNAL, logMessage);
 -        }
 -        break;
 -
 -      case consoleErrorTopic:
 -        if (aData === "ReferenceError") {
 -          runAsync(produceReferenceError);
 -        }
 -        break;
 -
 -      default:
 -        break;
 -    }
 -  };
 -
 -  function produceReferenceError() {
 -    var localVar = nonexistantVariable; // jshint ignore:line
 -  }
 -
 -  function runAsync(aFunction) {
 -    var runnable = {run: aFunction};
 -    Services.tm.currentThread.dispatch(runnable,
 -        Ci.nsIEventTarget.DISPATCH_NORMAL);
 -  }
 -
 -  return self;
 -}());
--
 -ProcessEnvironment.addStartupFunction(Environment.LEVELS.BACKEND,
 -                                      UnitTestObserver.startup);
 -ProcessEnvironment.addShutdownFunction(Environment.LEVELS.BACKEND,
 -                                       UnitTestObserver.shutdown);
 -// #endif
diff --cc content/lib/manager-for-event-listeners.jsm
index a579927,fd83454..6806e7a
--- a/content/lib/manager-for-event-listeners.jsm
+++ b/content/lib/manager-for-event-listeners.jsm
@@@ -64,9 -64,11 +64,6 @@@ function ManagerForEventListeners(aEnv
      self.environment.addStartupFunction(
          Environment.LEVELS.INTERFACE,
          function() {
-           Logger.dump('From now on new event listeners will be ' +
-                       'added immediately. Environment: "' +
-                       self.environment.name + '"');
 -          // #ifdef LOG_EVENT_LISTENERS
 -          Logger.dump("From now on new event listeners will be " +
 -                      "added immediately. Environment: \"" +
 -                      self.environment.name + "\"");
 -          // #endif
            self.addNewListenersImmediately = true;
            self.addAllListeners();
          });
@@@ -112,9 -112,11 +107,6 @@@ ManagerForEventListeners.prototype.addL
      listening: false
    };
    if (self.addNewListenersImmediately) {
-     Logger.dump('Immediately adding event listener for "' +
-                 listener.eventType + '". Environment: "' +
-                 self.environment.name + '"');
 -    // #ifdef LOG_EVENT_LISTENERS
 -    Logger.dump("Immediately adding event listener for \"" +
 -                listener.eventType + "\". Environment: \"" +
 -                self.environment.name + "\"");
 -    // #endif
      addEvLis(listener);
    }
    self.listeners.push(listener);
@@@ -129,9 -129,11 +119,6 @@@ ManagerForEventListeners.prototype.addA
    let self = this;
    for (let listener of self.listeners) {
      if (listener.listening === false) {
-       Logger.dump('Lazily adding event listener for "' +
-                   listener.eventType + '". Environment: "' +
-                   self.environment.name + '"');
 -      // #ifdef LOG_EVENT_LISTENERS
 -      Logger.dump("Lazily adding event listener for \"" +
 -                  listener.eventType + "\". Environment: \"" +
 -                  self.environment.name + "\"");
 -      // #endif
        addEvLis(listener);
      }
    }
@@@ -144,8 -146,10 +131,6 @@@ ManagerForEventListeners.prototype.remo
    let self = this;
    while (self.listeners.length > 0) {
      let listener = self.listeners.pop();
-     Logger.dump('Removing event listener for "' + listener.eventType +
-                 '". Environment: "' + self.environment.name + '"');
 -    // #ifdef LOG_EVENT_LISTENERS
 -    Logger.dump("Removing event listener for \"" + listener.eventType +
 -                "\". Environment: \"" + self.environment.name + "\"");
 -    // #endif
      listener.target.removeEventListener(listener.eventType, listener.callback,
                                          listener.useCapture);
    }
diff --cc content/lib/manager-for-message-listeners.jsm
index 8776c4c,7b15e3d..6aa5dc6
--- a/content/lib/manager-for-message-listeners.jsm
+++ b/content/lib/manager-for-message-listeners.jsm
@@@ -65,9 -65,11 +65,6 @@@ function ManagerForMessageListeners(aEn
      self.environment.addStartupFunction(
          Environment.LEVELS.INTERFACE,
          function() {
-           Logger.dump('From now on new message listeners will be ' +
-                       'added immediately. Environment: "' +
-                       self.environment.name + '"');
 -          // #ifdef LOG_MESSAGE_LISTENERS
 -          Logger.dump("From now on new message listeners will be " +
 -                      "added immediately. Environment: \"" +
 -                      self.environment.name + "\"");
 -          // #endif
            self.addNewListenersImmediately = true;
            self.addAllListeners();
          });
@@@ -132,9 -132,11 +127,6 @@@ ManagerForMessageListeners.prototype.ad
      listening: false
    };
    if (aAddImmediately === true || self.addNewListenersImmediately) {
-     Logger.dump('Immediately adding message listener for "' +
-                 listener.messageName + '". Environment: "' +
-                 self.environment.name + '"');
 -    // #ifdef LOG_MESSAGE_LISTENERS
 -    Logger.dump("Immediately adding message listener for \"" +
 -                listener.messageName + "\". Environment: \"" +
 -                self.environment.name + "\"");
 -    // #endif
      self.mm.addMessageListener(listener.messageID, listener.callback);
      listener.listening = true;
    }
@@@ -150,9 -150,11 +140,6 @@@ ManagerForMessageListeners.prototype.ad
    let self = this;
    for (let listener of self.listeners) {
      if (listener.listening === false) {
-       Logger.dump('Lazily adding message listener for "' +
-                   listener.messageName + '". Environment: "' +
-                   self.environment.name + '"');
 -      // #ifdef LOG_MESSAGE_LISTENERS
 -      Logger.dump("Lazily adding message listener for \"" +
 -                  listener.messageName + "\". Environment: \"" +
 -                  self.environment.name + "\"");
 -      // #endif
        self.mm.addMessageListener(listener.messageID, listener.callback);
        listener.listening = true;
      }
@@@ -172,8 -174,10 +159,6 @@@ ManagerForMessageListeners.prototype.re
      //                 'is undefined!');
      //  continue;
      //}
-     Logger.dump('Removing message listener for "' + listener.messageName +
-                 '".');
 -    // #ifdef LOG_MESSAGE_LISTENERS
 -    Logger.dump("Removing message listener for \"" + listener.messageName +
 -                "\".");
 -    // #endif
      //try {
      self.mm.removeMessageListener(listener.messageID, listener.callback);
      //} catch (e) {
diff --cc content/lib/old-rules.jsm
index 0000000,a5d72b9..a5d72b9
mode 000000,100644..100644
--- a/content/lib/old-rules.jsm
+++ b/content/lib/old-rules.jsm
diff --cc content/lib/request-processor.jsm
index b75248b,ca105a1..540a35d
--- a/content/lib/request-processor.jsm
+++ b/content/lib/request-processor.jsm
@@@ -302,15 -322,26 +322,14 @@@ var RequestProcessor = (function() 
          // only return requests from the given base domain
          continue;
        }
-       Logger.dump("test destBase: " + destBase);
-       for (var destBase in requests[originUri]) {
-         Logger.dump("test destBase: " + destBase);
-         for (var destIdent in requests[originUri][destBase]) {
-           Logger.dump("test destIdent: " + destIdent);
-           for (var destUri in requests[originUri][destBase][destIdent]) {
-             Logger.dump("test destUri: " + destUri);
-             var dest = requests[originUri][destBase][destIdent][destUri];
-             for (var i in dest) {
 -      // #ifdef LOG_GETTING_SAVED_REQUESTS
 -      Logger.dump("test originUri: " + originUri);
 -      // #endif
+       let originUriRequests = requests[originUri];
+       for (let destBase in originUriRequests) {
 -        // #ifdef LOG_GETTING_SAVED_REQUESTS
 -        Logger.dump("test destBase: " + destBase);
 -        // #endif
+         let destBaseRequests = originUriRequests[destBase];
+         for (let destIdent in destBaseRequests) {
 -          // #ifdef LOG_GETTING_SAVED_REQUESTS
 -          Logger.dump("test destIdent: " + destIdent);
 -          // #endif
+           let destIdentRequests = destBaseRequests[destIdent];
+           for (let destUri in destIdentRequests) {
 -            // #ifdef LOG_GETTING_SAVED_REQUESTS
 -            Logger.dump("test destUri: " + destUri);
 -            // #endif
+             let dest = destIdentRequests[destUri];
+             for (let i in dest) {
                // TODO: This variable could have been created easily already in
                //       getAllRequestsInBrowser(). ==> rewrite RequestSet to
                //       contain a blocked list, an allowed list (and maybe a list
@@@ -374,8 -405,10 +393,6 @@@
  
    function _addRecursivelyAllRequestsFromURI(originURI, reqSet,
        checkedOrigins) {
-     Logger.dump("Looking for other origins within allowed requests from "
-             + originURI);
 -    // #ifdef LOG_GETTING_SAVED_REQUESTS
 -    Logger.dump("Looking for other origins within allowed requests from " +
 -        originURI);
 -    // #endif
      if (!checkedOrigins[originURI]) {
        // this "if" is needed for the first call of this function.
        checkedOrigins[originURI] = true;
@@@ -387,8 -420,10 +404,6 @@@
        for (var destBase in allowedRequests) {
          for (var destIdent in allowedRequests[destBase]) {
            for (var destURI in allowedRequests[destBase][destIdent]) {
-             Logger.dump("Found allowed request to <"
-                 + destURI + "> from <" + originURI + ">");
 -            // #ifdef LOG_GETTING_SAVED_REQUESTS
 -            Logger.dump("Found allowed request to <" + destURI + "> " +
 -                "from <" + originURI + ">");
 -            // #endif
              reqSet.addRequest(originURI, destURI,
                                allowedRequests[destBase][destIdent][destURI]);
  
@@@ -406,15 -441,19 +421,11 @@@
    }
  
    function _addAllDeniedRequestsFromURI(originURI, reqSet) {
 -    // #ifdef LOG_GETTING_SAVED_REQUESTS
--    Logger.dump("Looking for other origins within denied requests from " +
--        originURI);
 -    // #endif
      var requests = RequestProcessor._rejectedRequests.getOriginUri(originURI);
      if (requests) {
        for (var destBase in requests) {
          for (var destIdent in requests[destBase]) {
            for (var destUri in requests[destBase][destIdent]) {
 -            // #ifdef LOG_GETTING_SAVED_REQUESTS
--            Logger.dump("Found denied request to <" + destUri + "> from <" +
--                originURI + ">");
 -            // #endif
              reqSet.addRequest(originURI, destUri,
                  requests[destBase][destIdent][destUri]);
            }
@@@ -1015,16 -1052,20 +1024,14 @@@
          "Could not find observer to remove " + "in removeRequestObserver()");
    };
  
- 
- 
-   self.getDeniedRequests = function(currentlySelectedOrigin, allRequestsOnDocument) {
-     Logger.dump("## getDeniedRequests");
+   self.getDeniedRequests = function(currentlySelectedOrigin,
+       allRequestsOnDocument) {
 -    // #ifdef LOG_GETTING_SAVED_REQUESTS
 -    Logger.dump("## getDeniedRequests");
 -    // #endif
      return _getRequestsHelper(currentlySelectedOrigin, allRequestsOnDocument,
          false);
    };
  
-   self.getAllowedRequests = function(currentlySelectedOrigin, allRequestsOnDocument) {
-     Logger.dump("## getAllowedRequests");
+   self.getAllowedRequests = function(currentlySelectedOrigin,
+       allRequestsOnDocument) {
 -    // #ifdef LOG_GETTING_SAVED_REQUESTS
 -    Logger.dump("## getAllowedRequests");
 -    // #endif
      return _getRequestsHelper(currentlySelectedOrigin, allRequestsOnDocument,
          true);
    };
diff --cc content/lib/script-loader.jsm
index 52d60b5,c34eebf..2bb72b3
--- a/content/lib/script-loader.jsm
+++ b/content/lib/script-loader.jsm
@@@ -79,12 -81,15 +81,12 @@@ var ScriptLoader = (function() 
        for (let uri in importedModuleURIs) {
          if (importedModuleURIs.hasOwnProperty(uri) &&
              moduleUnloadExceptions.hasOwnProperty(uri) === false) {
-           //console.debug("[RPC] Unloading module "+uri);
 -          // #ifdef LOG_SCRIPTLOADER
 -          console.debug("[RPC] [ScriptLoader] Cu.unload(\"" + uri + "\");");
 -          // #endif
            try {
              Cu.unload(uri);
-           } catch(e) {
-             console.error("[RPC] Failed to unload module "+uri);
-             Components.utils.reportError(e);
+           } catch (e) {
+             console.error("[RPC] [ScriptLoader] failed to unload \"" + uri +
+                 "\"");
+             Cu.reportError(e);
            }
            delete importedModuleURIs[uri];
          }
@@@ -115,16 -120,21 +117,14 @@@
          return scope;
        }
  
-       //console.debug("[RPC] `importModule` called for "+moduleID);
 -      // #ifdef LOG_SCRIPTLOADER
 -      console.debug("[RPC] [ScriptLoader] importModule(\"" + moduleID +
 -          "\") called.");
 -      // #endif
  
        let uri = getModuleURI(moduleID);
        try {
          if (!(uri in importedModuleURIs)) {
            // the module hasn't been imported yet
            modulesCurrentlyBeingImported[moduleID] = true;
-           //console.debug("[RPC] importing " + moduleID);
          }
  
 -        // #ifdef LOG_SCRIPTLOADER
 -        console.debug("[RPC] [ScriptLoader] Cu.import(\"" + uri + "\");");
 -        // #endif
          Cu.import(uri, scope);
          importedModuleURIs[uri] = true;
  
@@@ -172,7 -184,10 +174,6 @@@
      defineLazyModuleGetter: function(moduleID, names, scope) {
        scope = scope || {};
  
-       //console.debug("[RPC] defining lazy module getter(s) for " + moduleID);
 -      // #ifdef LOG_SCRIPTLOADER
 -      console.debug("[RPC] [ScriptLoader] " +
 -          "defineLazyModuleGetter(\"" + moduleID + "\") called.");
 -      // #endif
        let uri = getModuleURI(moduleID);
        for (let i in names) {
          let name = names[i];
diff --cc content/lib/utils/constants.jsm
index 873dc4e,7d881a6..6a029c7
--- a/content/lib/utils/constants.jsm
+++ b/content/lib/utils/constants.jsm
@@@ -21,15 -21,19 +21,15 @@@
   * ***** END LICENSE BLOCK *****
   */
  
- const Ci = Components.interfaces;
- const Cc = Components.classes;
- const Cu = Components.utils;
+ /* global Components */
+ const {interfaces: Ci} = Components;
  
- let EXPORTED_SYMBOLS = ["C"];
+ /* exported C */
+ this.EXPORTED_SYMBOLS = ["C"];
  
- let C = {};
+ var C = {};
  
 -// #ifdef AMO
 -C.EXTENSION_ID = "rpcontinued at requestpolicy.org";
 -// #else
  C.EXTENSION_ID = "rpcontinued at non-amo.requestpolicy.org";
 -// #endif
  
  C.FIREFOX_ID = "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}";
  C.SEAMONKEY_ID = "{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}";
diff --cc content/lib/utils/info.jsm
index 0000000,55c3b6d..55c3b6d
mode 000000,100644..100644
--- a/content/lib/utils/info.jsm
+++ b/content/lib/utils/info.jsm
diff --cc content/lib/utils/javascript.jsm
index 0000000,cd547a8..cd547a8
mode 000000,100644..100644
--- a/content/lib/utils/javascript.jsm
+++ b/content/lib/utils/javascript.jsm
diff --cc content/models/prefs.jsm
index 0000000,50af705..804efef
mode 000000,100644..100644
--- a/content/models/prefs.jsm
+++ b/content/models/prefs.jsm
@@@ -1,0 -1,214 +1,211 @@@
+ /*
+  * ***** BEGIN LICENSE BLOCK *****
+  *
+  * RequestPolicy - A Firefox extension for control over cross-site requests.
+  * Copyright (c) 2008-2012 Justin Samuel
+  * Copyright (c) 2014-2015 Martin Kimmerle
+  *
+  * This program is free software: you can redistribute it and/or modify it under
+  * the terms of the GNU General Public License as published by the Free Software
+  * Foundation, either version 3 of the License, or (at your option) any later
+  * version.
+  *
+  * This program is distributed in the hope that it will be useful, but WITHOUT
+  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+  * details.
+  *
+  * You should have received a copy of the GNU General Public License along with
+  * this program. If not, see <http://www.gnu.org/licenses/>.
+  *
+  * ***** END LICENSE BLOCK *****
+  */
+ 
+ /* global Components */
+ const {interfaces: Ci, utils: Cu} = Components;
+ 
+ /* exported Prefs */
+ this.EXPORTED_SYMBOLS = ["Prefs"];
+ 
+ let {Services} = Cu.import("resource://gre/modules/Services.jsm", {});
+ 
+ let {ScriptLoader: {importModule}} = Cu.import(
+     "chrome://rpcontinued/content/lib/script-loader.jsm", {});
+ let {PrefBranch} = importModule("lib/classes/pref-branch");
+ 
+ //==============================================================================
+ // Prefs
+ //==============================================================================
+ 
+ var Prefs = (function() {
+   let self = {};
+ 
+   self.save = function() {
+     Services.prefs.savePrefFile(null);
+   };
+ 
+   self.branches = {
+     rp: new PrefBranch("extensions.requestpolicy.", {
+       "autoReload": "BoolPref",
+       "contextMenu": "BoolPref",
+       "defaultPolicy.allow": "BoolPref",
+       "defaultPolicy.allowSameDomain": "BoolPref",
+       "indicateBlacklistedObjects": "BoolPref",
+       "indicateBlockedObjects": "BoolPref",
+       "keyboardShortcuts.openMenu.enabled": "BoolPref",
+       "keyboardShortcuts.openMenu.combo": "CharPref",
+       "lastAppVersion": "CharPref",
+       "lastVersion": "CharPref",
+       "log": "BoolPref",
+       "log.level": "IntPref",
+       "log.types": "IntPref",
+       "menu.info.showNumRequests": "BoolPref",
+       "menu.sorting": "CharPref",
+       "prefetch.dns.disableOnStartup": "BoolPref",
+       "prefetch.dns.restoreDefaultOnUninstall": "BoolPref",
+       "prefetch.link.disableOnStartup": "BoolPref",
+       "prefetch.link.restoreDefaultOnUninstall": "BoolPref",
+       "privateBrowsingPermanentWhitelisting": "BoolPref",
+       "startWithAllowAllEnabled": "BoolPref",
+       "welcomeWindowShown": "BoolPref",
 -      // #ifdef UNIT_TESTING
 -      "unitTesting.errorCount": "IntPref",
 -      // #endif
+     }),
+ 
+     root: new PrefBranch("", {
+       "network.dns.disablePrefetch": "BoolPref",
+       "network.prefetch-next": "BoolPref",
+     })
+   };
+ 
+   /**
+    * Translate an alias into a real prefName, and also return the branch.
+    *
+    * Valid "fake pref names" are:
+    *   - "root/ network.prefetch-next" (root pref branch)
+    *   - "welcomeWindowShown" (RequestPolicy pref branch)
+    */
+   function getBranchAndRealName(aFakePrefName) {
+     if (aFakePrefName.startsWith("root/ ")) {
+       return {
+         branch: self.branches.root,
+         name: aFakePrefName.slice(6)
+       };
+     }
+     return {
+       branch: self.branches.rp,
+       name: aFakePrefName
+     };
+   }
+ 
+   self.get = function(aFakePrefName) {
+     let {branch, name} = getBranchAndRealName(aFakePrefName);
+     return branch.get(name);
+   };
+ 
+   self.set = function(aFakePrefName, aValue) {
+     let {branch, name} = getBranchAndRealName(aFakePrefName);
+     return branch.set(name, aValue);
+   };
+ 
+   self.reset = function(aFakePrefName) {
+     let {branch, name} = getBranchAndRealName(aFakePrefName);
+     return branch.reset(name);
+   };
+ 
+   self.isSet = function(aFakePrefName) {
+     let {branch, name} = getBranchAndRealName(aFakePrefName);
+     return branch.isSet(name);
+   };
+ 
+   //----------------------------------------------------------------------------
+   // Observer functions
+   //----------------------------------------------------------------------------
+ 
+   /**
+    * Notes about addObserver and removeObserver:
+    *
+    * The functions take fake domain names, but the actual observers
+    * will get the "real" pref names / domain names. If translation
+    * of names is needed, the two functions could be replaced by
+    * "addListener" and "removeListener" functions. In other words,
+    * the "domainsToObservers" object in "PrefObserver" could be moved
+    * here, and "PrefObserver" would only manage the listeners per
+    * environment.
+    *
+    * The addObserver and removeObserver functions are preixed with
+    * an underscore because they shouldn't be used directly, only
+    * by PrefObserver.
+    */
+ 
+   self._addObserver = function(aFakeDomain, aObserver, aHoldWeak) {
+     let {branch, name: domain} = getBranchAndRealName(aFakeDomain);
+     return branch.addObserver(domain, aObserver, aHoldWeak);
+   };
+ 
+   self._removeObserver = function(aFakeDomain, aObserver) {
+     let {branch, name: domain} = getBranchAndRealName(aFakeDomain);
+     return branch.removeObserver(domain, aObserver);
+   };
+ 
+   return self;
+ }());
+ 
+ //==============================================================================
+ // Prefs - Aliases
+ //==============================================================================
+ 
+ (function(self) {
+   //----------------------------------------------------------------------------
+   // Dynamically created aliases
+   //----------------------------------------------------------------------------
+ 
+   /**
+    * Define a list of pref aliases that will be available through
+    * `Prefs.getter_function_name()` and `Prefs.setter_function_name()`.
+    * Those functions will be added to `self` subsequently.
+    */
+   const RP_PREF_ALIASES = {
+     "bool": [
+       ["defaultPolicy.allow", "DefaultAllow"],
+       ["defaultPolicy.allowSameDomain", "DefaultAllowSameDomain"],
+ 
+       // As an example, this will become `isBlockingDisabled()` and
+       // `setBlockingDisabled()`:
+       ["startWithAllowAllEnabled", "BlockingDisabled"]
+     ]
+   };
+ 
+   // Dynamically create functions like `isDefaultAllow` or
+   // `setBlockingDisabled`.
+   for (let [prefName, prefAlias] of RP_PREF_ALIASES.bool) {
+     // define the pref's getter function to `self`
+     self["is" + prefAlias] = self.get.bind(null, prefName);
+ 
+     // define the pref's getter function to `self`
+     self["set" + prefAlias] = self.set.bind(null, prefName);
+   }
+ 
+   //----------------------------------------------------------------------------
+   // Other aliases
+   //----------------------------------------------------------------------------
+ 
+   self.isPrefetchEnabled = function() {
+     return self.get("root/ network.prefetch-next") ||
+         !self.get("root/ network.dns.disablePrefetch");
+   };
+ 
+   function isOldRulePrefEmpty(pref) {
+     try {
+       let value = self.branches.rp.branch.
+           getComplexValue(pref, Ci.nsISupportsString).data;
+       return value === "";
+     } catch (e) {
+       return true;
+     }
+   }
+ 
+   self.oldRulesExist = function() {
+     return !(isOldRulePrefEmpty("allowedOrigins") &&
+              isOldRulePrefEmpty("allowedDestinations") &&
+              isOldRulePrefEmpty("allowedOriginsToDestinations"));
+   };
+ }(Prefs));
diff --cc content/models/windows.jsm
index 0000000,9645c48..9645c48
mode 000000,100644..100644
--- a/content/models/windows.jsm
+++ b/content/models/windows.jsm
diff --cc content/ui/overlay.js
index 23583e2,684c04b..408ca13
--- a/content/ui/overlay.js
+++ b/content/ui/overlay.js
@@@ -599,8 -561,10 +561,6 @@@ window.rpcontinued.overlay = (function(
      try {
        let browser = gBrowser.selectedBrowser;
        let uri = DomainUtil.stripFragment(browser.currentURI.spec);
 -      // #ifdef LOG_FLAG_STATE
--      Logger.debug(Logger.TYPE_INTERNAL,
--          "Checking for blocked requests from page <" + uri + ">");
 -      // #endif
  
        // TODO: this needs to be rewritten. checking if there is blocked
        // content could be done much more efficiently.
@@@ -608,10 -572,12 +568,6 @@@
            .getAllRequestsInBrowser(browser).containsBlockedRequests();
        self._setContentBlockedState(documentContainsBlockedContent);
  
 -      // #ifdef LOG_FLAG_STATE
--      let logText = documentContainsBlockedContent ?
--                    "Requests have been blocked." :
--                    "No requests have been blocked.";
--      Logger.debug(Logger.TYPE_INTERNAL, logText);
 -      // #endif
      } catch (e) {
        Logger.severeError(
            "Unable to complete _updateBlockedContentState actions: " + e, e);

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/requestpolicy.git



More information about the Pkg-mozext-commits mailing list