summaryrefslogtreecommitdiffstats
path: root/mobile/android/android-components/components/browser
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/android-components/components/browser')
-rw-r--r--mobile/android/android-components/components/browser/engine-gecko/build.gradle3
-rw-r--r--mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt4
-rw-r--r--mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt19
-rw-r--r--mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineView.kt36
-rw-r--r--mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/prompt/GeckoPromptDelegate.kt9
-rw-r--r--mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/translate/GeckoTranslateSessionDelegate.kt9
-rw-r--r--mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt8
-rw-r--r--mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt22
-rw-r--r--mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineViewTest.kt9
-rw-r--r--mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/translate/GeckoTranslateSessionDelegateTest.kt22
-rw-r--r--mobile/android/android-components/components/browser/engine-system/src/main/res/raw/domain_blocklist.json19382
-rw-r--r--mobile/android/android-components/components/browser/engine-system/src/main/res/raw/domain_safelist.json18901
-rw-r--r--mobile/android/android-components/components/browser/errorpages/src/main/assets/errorPageScripts.js158
-rw-r--r--mobile/android/android-components/components/browser/errorpages/src/main/assets/error_page_js.html106
-rw-r--r--mobile/android/android-components/components/browser/errorpages/src/main/res/values-azb/strings.xml15
-rw-r--r--mobile/android/android-components/components/browser/errorpages/src/main/res/values-su/strings.xml8
-rw-r--r--mobile/android/android-components/components/browser/errorpages/src/main/res/values-sv-rSE/strings.xml2
-rw-r--r--mobile/android/android-components/components/browser/icons/src/main/assets/extensions/browser-icons/icons.js103
-rw-r--r--mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/BrowserIcons.kt13
-rw-r--r--mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/loader/HttpIconLoader.kt47
-rw-r--r--mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/loader/MemoryInfoProvider.kt32
-rw-r--r--mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/loader/NonBlockingHttpIconLoader.kt3
-rw-r--r--mobile/android/android-components/components/browser/icons/src/test/java/mozilla/components/browser/icons/BrowserIconsTest.kt26
-rw-r--r--mobile/android/android-components/components/browser/icons/src/test/java/mozilla/components/browser/icons/loader/HttpIconLoaderTest.kt175
-rw-r--r--mobile/android/android-components/components/browser/icons/src/test/java/mozilla/components/browser/icons/loader/NonBlockingHttpIconLoaderTest.kt21
-rw-r--r--mobile/android/android-components/components/browser/menu/src/main/java/mozilla/components/browser/menu/item/CustomTooltip.kt3
-rw-r--r--mobile/android/android-components/components/browser/menu/src/main/res/values-be/strings.xml8
-rw-r--r--mobile/android/android-components/components/browser/menu/src/main/res/values-br/strings.xml6
-rw-r--r--mobile/android/android-components/components/browser/menu/src/main/res/values-cak/strings.xml14
-rw-r--r--mobile/android/android-components/components/browser/menu/src/main/res/values-eo/strings.xml14
-rw-r--r--mobile/android/android-components/components/browser/menu/src/main/res/values-eu/strings.xml14
-rw-r--r--mobile/android/android-components/components/browser/menu/src/main/res/values-kab/strings.xml8
-rw-r--r--mobile/android/android-components/components/browser/menu/src/main/res/values-sc/strings.xml12
-rw-r--r--mobile/android/android-components/components/browser/menu2/src/test/java/mozilla/components/browser/menu2/ext/BrowserMenuPositioningTest.kt5
-rw-r--r--mobile/android/android-components/components/browser/session-storage/src/androidTest/assets/index.html8
-rw-r--r--mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/action/BrowserAction.kt49
-rw-r--r--mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/CreateEngineSessionMiddleware.kt6
-rw-r--r--mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/EngineDelegateMiddleware.kt4
-rw-r--r--mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/LinkingMiddleware.kt13
-rw-r--r--mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/TranslationsMiddleware.kt160
-rw-r--r--mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/ext/TabSessionState.kt18
-rw-r--r--mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/reducer/TranslationsStateReducer.kt100
-rw-r--r--mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/state/TranslationsBrowserState.kt4
-rw-r--r--mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/state/TranslationsState.kt2
-rw-r--r--mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/action/TranslationsActionTest.kt101
-rw-r--r--mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/EngineDelegateMiddlewareTest.kt1
-rw-r--r--mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/LinkingMiddlewareTest.kt4
-rw-r--r--mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/TranslationsMiddlewareTest.kt181
-rw-r--r--mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/ext/TabSessionStateTest.kt34
-rw-r--r--mobile/android/android-components/components/browser/toolbar/src/main/res/values-nb-rNO/strings.xml3
-rw-r--r--mobile/android/android-components/components/browser/toolbar/src/main/res/values-sc/strings.xml5
-rw-r--r--mobile/android/android-components/components/browser/toolbar/src/main/res/values/strings.xml1
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/README.md37
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/build.gradle56
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/proguard-rules.pro21
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/AndroidManifest.xml4
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/BrowserToolbar.kt691
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/DisplayToolbar.kt711
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/DisplayToolbarView.kt51
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/HighlightView.kt91
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/MenuButton.kt106
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/OriginView.kt198
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/SiteSecurityIconView.kt48
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/TrackingProtectionIconView.kt135
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/edit/EditToolbar.kt415
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/facts/ToolbarFacts.kt60
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/internal/ActionContainer.kt134
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/internal/ActionWrapper.kt16
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_browser_toolbar_icons_vertical_separator.xml9
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_dot_notification.xml16
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_ic_site_security.xml11
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_ic_tracking_protection_off_for_a_site.xml12
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_ic_tracking_protection_on_no_trackers_blocked.xml12
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_ic_tracking_protection_on_trackers_blocked.xml12
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/layout/mozac_browser_toolbar_displaytoolbar.xml175
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/layout/mozac_browser_toolbar_edittoolbar.xml116
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-am/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-an/strings.xml16
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ar/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ast/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-az/strings.xml16
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-azb/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ban/strings.xml8
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-be/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-bg/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-bn/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-br/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-bs/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ca/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-cak/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ceb/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ckb/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-co/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-cs/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-cy/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-da/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-de/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-dsb/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-el/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-en-rCA/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-en-rGB/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-eo/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-es-rAR/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-es-rCL/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-es-rES/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-es-rMX/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-es/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-et/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-eu/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-fa/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ff/strings.xml16
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-fi/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-fr/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-fur/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-fy-rNL/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ga-rIE/strings.xml16
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-gd/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-gl/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-gn/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-gu-rIN/strings.xml16
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hi-rIN/strings.xml16
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hil/strings.xml8
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hr/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hsb/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hu/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hy-rAM/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ia/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-in/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-is/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-it/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-iw/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ja/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ka/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-kaa/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-kab/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-kk/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-kmr/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-kn/strings.xml16
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ko/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ldrtl/dimens.xml8
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-lij/strings.xml16
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-lo/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-lt/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-mix/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ml/strings.xml16
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-mr/strings.xml16
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-my/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-nb-rNO/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ne-rNP/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-nl/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-nn-rNO/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-oc/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-or/strings.xml16
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-pa-rIN/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-pa-rPK/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-pl/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-pt-rBR/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-pt-rPT/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-rm/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ro/strings.xml16
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ru/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sat/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sc/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-si/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sk/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-skr/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sl/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sq/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sr/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-su/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sv-rSE/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-szl/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ta/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-te/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tg/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-th/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tl/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tok/strings.xml14
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tr/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-trs/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tt/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tzm/strings.xml10
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ug/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-uk/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ur/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-uz/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-vec/strings.xml16
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-vi/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-yo/strings.xml18
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-zh-rCN/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values-zh-rTW/strings.xml19
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values/attrs_browser_toolbar.xml33
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values/dimens.xml31
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values/ids.xml8
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/main/res/values/strings.xml22
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/AsyncFilterListenerTest.kt350
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/BrowserToolbarTest.kt1044
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/display/DisplayToolbarTest.kt824
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/display/HighlightViewTest.kt67
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/display/MenuButtonTest.kt156
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/display/TrackingProtectionIconViewTest.kt43
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/edit/EditToolbarTest.kt290
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/internal/ActionContainerTest.kt99
-rw-r--r--mobile/android/android-components/components/browser/toolbar2/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker2
204 files changed, 24267 insertions, 23816 deletions
diff --git a/mobile/android/android-components/components/browser/engine-gecko/build.gradle b/mobile/android/android-components/components/browser/engine-gecko/build.gradle
index 4e5c2fda65..776c083ee9 100644
--- a/mobile/android/android-components/components/browser/engine-gecko/build.gradle
+++ b/mobile/android/android-components/components/browser/engine-gecko/build.gradle
@@ -76,8 +76,9 @@ dependencies {
api getGeckoViewDependency()
}
+ implementation ComponentsDependencies.androidx_core_ktx
implementation ComponentsDependencies.androidx_paging
- implementation ComponentsDependencies.androidx_data_store_preferences
+ implementation ComponentsDependencies.androidx_datastore_preferences
implementation ComponentsDependencies.androidx_lifecycle_livedata
testImplementation ComponentsDependencies.androidx_test_core
diff --git a/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt b/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt
index 92e6074a61..f5f1012448 100644
--- a/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt
+++ b/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt
@@ -426,6 +426,10 @@ class GeckoEngine(
exception as WebExtensionInstallException,
)
}
+
+ override fun onOptionalPermissionsChanged(extension: org.mozilla.geckoview.WebExtension) {
+ webExtensionDelegate.onOptionalPermissionsChanged(GeckoWebExtension(extension, runtime))
+ }
}
val extensionProcessDelegate = object : WebExtensionController.ExtensionProcessDelegate {
diff --git a/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt b/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt
index e6907c6dde..dbf7b2d54f 100644
--- a/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt
+++ b/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt
@@ -4,7 +4,6 @@
package mozilla.components.browser.engine.gecko
-import android.annotation.SuppressLint
import android.net.Uri
import android.os.Build
import android.view.WindowManager
@@ -58,6 +57,7 @@ import mozilla.components.support.base.facts.Action
import mozilla.components.support.base.facts.Fact
import mozilla.components.support.base.facts.collect
import mozilla.components.support.base.log.logger.Logger
+import mozilla.components.support.ktx.kotlin.decode
import mozilla.components.support.ktx.kotlin.isEmail
import mozilla.components.support.ktx.kotlin.isExtensionUrl
import mozilla.components.support.ktx.kotlin.isGeoLocation
@@ -557,9 +557,8 @@ class GeckoEngineSession(
/**
* See [EngineSession.findNext]
*/
- @SuppressLint("WrongConstant") // FinderFindFlags annotation doesn't include a 0 value.
override fun findNext(forward: Boolean) {
- val findFlags = if (forward) 0 else GeckoSession.FINDER_FIND_BACKWARDS
+ val findFlags = if (forward) GeckoSession.FINDER_FIND_FORWARD else GeckoSession.FINDER_FIND_BACKWARDS
geckoSession.finder.find(null, findFlags).then { result: GeckoSession.FinderResult? ->
result?.let {
val activeMatchOrdinal = if (it.current > 0) it.current - 1 else it.current
@@ -1159,9 +1158,9 @@ class GeckoEngineSession(
return when {
maybeInterceptRequest(request, false) != null ->
- GeckoResult.fromValue(AllowOrDeny.DENY)
+ GeckoResult.deny()
request.target == NavigationDelegate.TARGET_WINDOW_NEW ->
- GeckoResult.fromValue(AllowOrDeny.ALLOW)
+ GeckoResult.allow()
else -> {
notifyObservers {
onLoadRequest(
@@ -1171,7 +1170,7 @@ class GeckoEngineSession(
)
}
- GeckoResult.fromValue(AllowOrDeny.ALLOW)
+ GeckoResult.allow()
}
}
}
@@ -1181,15 +1180,15 @@ class GeckoEngineSession(
request: NavigationDelegate.LoadRequest,
): GeckoResult<AllowOrDeny> {
if (request.target == NavigationDelegate.TARGET_WINDOW_NEW) {
- return GeckoResult.fromValue(AllowOrDeny.ALLOW)
+ return GeckoResult.allow()
}
return if (maybeInterceptRequest(request, true) != null) {
- GeckoResult.fromValue(AllowOrDeny.DENY)
+ GeckoResult.deny()
} else {
// Not notifying session observer because of performance concern and currently there
// is no use case.
- GeckoResult.fromValue(AllowOrDeny.ALLOW)
+ GeckoResult.allow()
}
}
@@ -1526,7 +1525,7 @@ class GeckoEngineSession(
url = url,
contentLength = contentLength,
contentType = DownloadUtils.sanitizeMimeType(contentType),
- fileName = fileName.sanitizeFileName(),
+ fileName = fileName.sanitizeFileName().decode(),
response = response,
isPrivate = privateMode,
openInApp = webResponse.requestExternalApp,
diff --git a/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineView.kt b/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineView.kt
index d5d77b3073..39a4c2d6cc 100644
--- a/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineView.kt
+++ b/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineView.kt
@@ -9,6 +9,7 @@ import android.content.res.Configuration
import android.graphics.Bitmap
import android.graphics.Color
import android.util.AttributeSet
+import android.view.View
import android.widget.FrameLayout
import androidx.annotation.VisibleForTesting
import androidx.core.view.ViewCompat
@@ -63,7 +64,7 @@ class GeckoEngineView @JvmOverloads constructor(
// Explicitly mark this view as important for autofill. The default "auto" doesn't seem to trigger any
// autofill behavior for us here.
@Suppress("WrongConstant")
- ViewCompat.setImportantForAutofill(this, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES)
+ ViewCompat.setImportantForAutofill(this, View.IMPORTANT_FOR_ACCESSIBILITY_YES)
}
internal fun setColorScheme(preferredColorScheme: PreferredColorScheme) {
@@ -205,29 +206,18 @@ class GeckoEngineView @JvmOverloads constructor(
geckoView.activityContextDelegate = GeckoViewActivityContextDelegate(WeakReference(context))
}
- @Suppress("TooGenericExceptionCaught")
override fun captureThumbnail(onFinish: (Bitmap?) -> Unit) {
- try {
- val geckoResult = geckoView.capturePixels()
- geckoResult.then(
- { bitmap ->
- onFinish(bitmap)
- GeckoResult<Void>()
- },
- {
- onFinish(null)
- GeckoResult<Void>()
- },
- )
- } catch (e: Exception) {
- // There's currently no reliable way for consumers of GeckoView to
- // know whether or not the compositor is ready. So we have to add
- // a catch-all here. In the future, GeckoView will invoke our error
- // callback instead and this block can be removed:
- // https://bugzilla.mozilla.org/show_bug.cgi?id=1645114
- // https://github.com/mozilla-mobile/android-components/issues/6680
- onFinish(null)
- }
+ val geckoResult = geckoView.capturePixels()
+ geckoResult.then(
+ { bitmap ->
+ onFinish(bitmap)
+ GeckoResult()
+ },
+ {
+ onFinish(null)
+ GeckoResult<Void>()
+ },
+ )
}
override fun clearSelection() {
diff --git a/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/prompt/GeckoPromptDelegate.kt b/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/prompt/GeckoPromptDelegate.kt
index d4276e675a..8fb2e1e0fb 100644
--- a/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/prompt/GeckoPromptDelegate.kt
+++ b/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/prompt/GeckoPromptDelegate.kt
@@ -282,17 +282,16 @@ internal class GeckoPromptDelegate(private val geckoEngineSession: GeckoEngineSe
return geckoResult
}
+ @Suppress("MaxLineLength")
override fun onLoginSelect(
session: GeckoSession,
prompt: AutocompleteRequest<Autocomplete.LoginSelectOption>,
): GeckoResult<PromptResponse>? {
val promptOptions = prompt.options
+
val generatedPassword =
- if (promptOptions.isNotEmpty() && promptOptions.first().hint == Autocomplete.SelectOption.Hint.GENERATED) {
- promptOptions.first().value.password
- } else {
- null
- }
+ promptOptions.firstOrNull { option -> option.hint == Autocomplete.SelectOption.Hint.GENERATED }?.value?.password
+
val geckoResult = GeckoResult<PromptResponse>()
val onConfirmSelect: (Login) -> Unit = { login ->
if (!prompt.isComplete) {
diff --git a/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/translate/GeckoTranslateSessionDelegate.kt b/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/translate/GeckoTranslateSessionDelegate.kt
index 3266ba8538..884db33824 100644
--- a/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/translate/GeckoTranslateSessionDelegate.kt
+++ b/mobile/android/android-components/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/translate/GeckoTranslateSessionDelegate.kt
@@ -66,10 +66,11 @@ internal class GeckoTranslateSessionDelegate(
state?.requestedTranslationPair?.toLanguage,
)
val translationsState = TranslationEngineState(
- detectedLanguages,
- state?.error,
- state?.isEngineReady,
- pair,
+ detectedLanguages = detectedLanguages,
+ error = state?.error,
+ isEngineReady = state?.isEngineReady,
+ hasVisibleChange = state?.hasVisibleChange,
+ requestedTranslationPair = pair,
)
engineSession.notifyObservers {
diff --git a/mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt b/mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt
index 87849440b6..871c46a33d 100644
--- a/mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt
+++ b/mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt
@@ -349,7 +349,7 @@ class GeckoEngineSessionTest {
val observer: EngineSession.Observer = mock()
engineSession.register(observer)
- val response = WebResponse.Builder("https://download.mozilla.org/image.png")
+ val response = WebResponse.Builder("https://download.mozilla.org/image%20name.png")
.addHeader(Headers.Names.CONTENT_TYPE, "image/png")
.addHeader(Headers.Names.CONTENT_LENGTH, "42")
.skipConfirmation(true)
@@ -362,8 +362,8 @@ class GeckoEngineSessionTest {
contentDelegate.value.onExternalResponse(mock(), response)
verify(observer).onExternalResource(
- url = eq("https://download.mozilla.org/image.png"),
- fileName = eq("image.png"),
+ url = eq("https://download.mozilla.org/image%20name.png"),
+ fileName = eq("image name.png"),
contentLength = eq(42),
contentType = eq("image/png"),
cookie = eq(null),
@@ -4361,7 +4361,7 @@ class GeckoEngineSessionTest {
mockLoadRequest("sample:about", triggeredByRedirect = true),
)
- assertEquals(geckoResult!!, GeckoResult.fromValue(AllowOrDeny.ALLOW))
+ assertEquals(geckoResult!!, GeckoResult.allow())
}
@Test
diff --git a/mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt b/mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt
index 6a8ed3c330..a7b6c59954 100644
--- a/mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt
+++ b/mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt
@@ -2740,6 +2740,28 @@ class GeckoEngineTest {
}
@Test
+ fun `web extension delegate handles add-on onOptionalPermissionsChanged event`() {
+ val runtime: GeckoRuntime = mock()
+ val webExtensionController: WebExtensionController = mock()
+ whenever(runtime.webExtensionController).thenReturn(webExtensionController)
+
+ val extension = mockNativeWebExtension("test", "uri")
+ val webExtensionsDelegate: WebExtensionDelegate = mock()
+ val engine = GeckoEngine(context, runtime = runtime)
+ engine.registerWebExtensionDelegate(webExtensionsDelegate)
+
+ val geckoDelegateCaptor = argumentCaptor<WebExtensionController.AddonManagerDelegate>()
+ verify(webExtensionController).setAddonManagerDelegate(geckoDelegateCaptor.capture())
+
+ assertEquals(Unit, geckoDelegateCaptor.value.onOptionalPermissionsChanged(extension))
+ val extensionCaptor = argumentCaptor<WebExtension>()
+ verify(webExtensionsDelegate).onOptionalPermissionsChanged(extensionCaptor.capture())
+ val capturedExtension =
+ extensionCaptor.value as mozilla.components.browser.engine.gecko.webextension.GeckoWebExtension
+ assertEquals(extension, capturedExtension.nativeExtension)
+ }
+
+ @Test
fun `web extension delegate handles add-on onInstallationFailed event`() {
val runtime: GeckoRuntime = mock()
val webExtensionController: WebExtensionController = mock()
diff --git a/mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineViewTest.kt b/mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineViewTest.kt
index 7056187e09..13fd983483 100644
--- a/mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineViewTest.kt
+++ b/mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineViewTest.kt
@@ -90,15 +90,6 @@ class GeckoEngineViewTest {
shadowOf(getMainLooper()).idle()
assertNull(thumbnail)
-
- // Test GeckoView throwing an exception
- whenever(mockGeckoView.capturePixels()).thenThrow(IllegalStateException("Compositor not ready"))
-
- thumbnail = mock()
- engineView.captureThumbnail {
- thumbnail = it
- }
- assertNull(thumbnail)
}
@Test
diff --git a/mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/translate/GeckoTranslateSessionDelegateTest.kt b/mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/translate/GeckoTranslateSessionDelegateTest.kt
index 65a1c7d8f9..f0c9762fa8 100644
--- a/mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/translate/GeckoTranslateSessionDelegateTest.kt
+++ b/mobile/android/android-components/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/translate/GeckoTranslateSessionDelegateTest.kt
@@ -69,13 +69,14 @@ class GeckoTranslateSessionDelegateTest {
val gecko = GeckoTranslateSessionDelegate(mockSession)
// Mock state parameters to check Gecko to AC mapping is correctly occurring
- var userLangTag = "en"
- var isDocLangTagSupported = true
- var docLangTag = "es"
- var fromLanguage = "de"
- var toLanguage = "bg"
- var error = "Error!"
- var isEngineReady = false
+ val userLangTag = "en"
+ val isDocLangTagSupported = true
+ val docLangTag = "es"
+ val fromLanguage = "de"
+ val toLanguage = "bg"
+ val error = "Error!"
+ val isEngineReady = false
+ val hasVisibleChange = true
mockSession.register(
object : EngineSession.Observer {
@@ -88,14 +89,15 @@ class GeckoTranslateSessionDelegateTest {
assertTrue(state.requestedTranslationPair?.toLanguage == toLanguage)
assertTrue(state.error == error)
assertTrue(state.isEngineReady == isEngineReady)
+ assertTrue(state.hasVisibleChange == hasVisibleChange)
}
},
)
// Mock states
- var mockDetectedLanguages = TranslationsController.SessionTranslation.DetectedLanguages(userLangTag, isDocLangTagSupported, docLangTag)
- var mockTranslationsPair = TranslationsController.SessionTranslation.TranslationPair(fromLanguage, toLanguage)
- var mockGeckoState = TranslationsController.SessionTranslation.TranslationState(mockTranslationsPair, error, mockDetectedLanguages, isEngineReady)
+ val mockDetectedLanguages = TranslationsController.SessionTranslation.DetectedLanguages(userLangTag, isDocLangTagSupported, docLangTag)
+ val mockTranslationsPair = TranslationsController.SessionTranslation.TranslationPair(fromLanguage, toLanguage)
+ val mockGeckoState = TranslationsController.SessionTranslation.TranslationState(mockTranslationsPair, error, mockDetectedLanguages, isEngineReady, hasVisibleChange)
gecko.onTranslationStateChange(mock(), mockGeckoState)
assertTrue(onTranslateStateChangeWasCalled)
diff --git a/mobile/android/android-components/components/browser/engine-system/src/main/res/raw/domain_blocklist.json b/mobile/android/android-components/components/browser/engine-system/src/main/res/raw/domain_blocklist.json
index 845571cfa0..05571a483f 100644
--- a/mobile/android/android-components/components/browser/engine-system/src/main/res/raw/domain_blocklist.json
+++ b/mobile/android/android-components/components/browser/engine-system/src/main/res/raw/domain_blocklist.json
@@ -1,11046 +1,8340 @@
{
- "license": "Copyright 2010-2019 Disconnect, Inc. / 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/>.",
- "categories": {
- "Advertising": [
- {
- "2leep.com": {
- "http://2leep.com/": [
- "2leep.com"
- ]
- }
- },
- {
- "33Across": {
- "http://33across.com/": [
- "33across.com"
- ]
- }
- },
- {
- "365Media": {
- "http://365media.com/": [
- "365media.com"
- ]
- }
- },
- {
- "4INFO": {
- "http://www.4info.com/": [
- "4info.com",
- "adhaven.com"
- ]
- }
- },
- {
- "4mads": {
- "http://4mads.com/": [
- "4mads.com"
- ]
- }
- },
- {
- "Abax Interactive": {
- "http://abaxinteractive.com/": [
- "abaxinteractive.com"
- ]
- }
- },
- {
- "Accelia": {
- "http://www.accelia.net/": [
- "accelia.net",
- "durasite.net"
- ]
- }
- },
- {
- "Accordant Media": {
- "http://www.accordantmedia.com/": [
- "accordantmedia.com"
- ]
- }
- },
- {
- "Acquisio": {
- "http://www.acquisio.com/": [
- "acquisio.com",
- "clickequations.net"
- ]
- }
- },
- {
- "Actisens": {
- "http://www.actisens.com/": [
- "actisens.com",
- "gestionpub.com"
- ]
- }
- },
- {
- "ActiveConversion": {
- "http://www.activeconversion.com/": [
- "activeconversion.com",
- "activemeter.com"
- ]
- }
- },
- {
- "Act-On": {
- "http://www.act-on.com/": [
- "act-on.com",
- "actonsoftware.com"
- ]
- }
- },
- {
- "Acuity": {
- "http://www.acuity.com/": [
- "acuity.com",
- "acuityads.com",
- "acuityplatform.com"
- ]
- }
- },
- {
- "AD2ONE": {
- "http://www.ad2onegroup.com/": [
- "ad2onegroup.com"
- ]
- }
- },
- {
- "Ad4Game": {
- "http://ad4game.com/": [
- "ad4game.com"
- ]
- }
- },
- {
- "ad6media": {
- "http://www.ad6media.fr/": [
- "ad6media.fr"
- ]
- }
- },
- {
- "Adabra": {
- "https://www.adabra.com/": [
- "adabra.com"
- ]
- }
- },
- {
- "Adality": {
- "http://adality.de/": [
- "adality.de",
- "adrtx.net"
- ]
- }
- },
- {
- "AdaptiveAds": {
- "http://www.adaptiveads.com/": [
- "adaptiveads.com"
- ]
- }
- },
- {
- "Adaptly": {
- "http://adaptly.com/": [
- "adaptly.com"
- ]
- }
- },
- {
- "Adara Media": {
- "http://www.adaramedia.com/": [
- "adaramedia.com",
- "opinmind.com",
- "yieldoptimizer.com"
- ]
- }
- },
- {
- "Adatus": {
- "http://www.adatus.com/": [
- "adatus.com"
- ]
- }
- },
- {
- "Adbot": {
- "https://adbot.tw/": [
- "adbot.tw"
- ]
- }
- },
- {
- "Adbrain": {
- "http://www.adbrain.com/": [
- "adbrain.com",
- "adbrn.com"
- ]
- }
- },
- {
- "adBrite": {
- "http://www.adbrite.com/": [
- "adbrite.com"
- ]
- }
- },
- {
- "Adbroker.de": {
- "http://adbroker.de/": [
- "adbroker.de"
- ]
- }
- },
- {
- "Adchemy": {
- "http://www.adchemy.com/": [
- "adchemy.com"
- ]
- }
- },
- {
- "AdCirrus": {
- "http://adcirrus.com/": [
- "adcirrus.com"
- ]
- }
- },
- {
- "Ad Decisive": {
- "http://www.addecisive.com/": [
- "a2dfp.net",
- "addecisive.com"
- ]
- }
- },
- {
- "addGloo": {
- "http://www.addgloo.com/": [
- "addgloo.com"
- ]
- }
- },
- {
- "Addvantage Media": {
- "http://www.addvantagemedia.com/": [
- "addvantagemedia.com"
- ]
- }
- },
- {
- "Ad Dynamo": {
- "http://www.addynamo.com/": [
- "addynamo.com",
- "addynamo.net"
- ]
- }
- },
- {
- "Adelphic": {
- "https://adelphic.com/": [
- "adelphic.com",
- "ipredictive.com"
- ]
- }
- },
- {
- "AdEngage": {
- "http://adengage.com/": [
- "adengage.com"
- ]
- }
- },
- {
- "AD Europe": {
- "http://www.adeurope.com/": [
- "adeurope.com"
- ]
- }
- },
- {
- "AdExtent": {
- "http://www.adextent.com/": [
- "adextent.com"
- ]
- }
- },
- {
- "AdF.ly": {
- "http://adf.ly/": [
- "adf.ly"
- ]
- }
- },
- {
- "Adfonic": {
- "http://adfonic.com/": [
- "adfonic.com"
- ]
- }
- },
- {
- "Adforge": {
- "http://adforgeinc.com/": [
- "adforgeinc.com"
- ]
- }
- },
- {
- "Adform": {
- "http://www.adform.com/": [
- "adform.com",
- "adform.net",
- "adformdsp.net"
- ]
- }
- },
- {
- "AdFox": {
- "http://adfox.ru/": [
- "adfox.ru"
- ]
- }
- },
- {
- "AdFrontiers": {
- "http://www.adfrontiers.com/": [
- "adfrontiers.com"
- ]
- }
- },
- {
- "Adfunky": {
- "http://www.adfunky.com/": [
- "adfunky.com",
- "adfunkyserver.com"
- ]
- }
- },
- {
- "Adfusion": {
- "http://www.adfusion.com/": [
- "adfusion.com"
- ]
- }
- },
- {
- "AdGainerSolutions": {
- "http://adgainersolutions.com/adgainer/": [
- "adgainersolutions.com"
- ]
- }
- },
- {
- "AdGent Digital": {
- "http://www.adgentdigital.com/": [
- "adgentdigital.com",
- "shorttailmedia.com"
- ]
- }
- },
- {
- "AdGibbon": {
- "http://www.adgibbon.com/": [
- "adgibbon.com"
- ]
- }
- },
- {
- "Adglare": {
- "https://www.adglare.com/": [
- "adglare.com",
- "adglare.net"
- ]
- }
- },
- {
- "adhood": {
- "http://www.adhood.com/": [
- "adhood.com"
- ]
- }
- },
- {
- "Adiant": {
- "http://www.adiant.com/": [
- "adblade.com",
- "adiant.com"
- ]
- }
- },
- {
- "AdInsight": {
- "http://www.adinsight.com/": [
- "adinsight.com",
- "adinsight.eu"
- ]
- }
- },
- {
- "AdIQuity": {
- "http://adiquity.com/": [
- "adiquity.com"
- ]
- }
- },
- {
- "ADITION": {
- "http://www.adition.com/": [
- "adition.com"
- ]
- }
- },
- {
- "AdJug": {
- "http://www.adjug.com/": [
- "adjug.com"
- ]
- }
- },
- {
- "AdJuggler": {
- "http://www.adjuggler.com/": [
- "adjuggler.com",
- "adjuggler.net"
- ]
- }
- },
- {
- "Adjust": {
- "https://adjust.com": [
- "adjust.com"
- ]
- }
- },
- {
- "AdKeeper": {
- "http://www.adkeeper.com/": [
- "adkeeper.com",
- "akncdn.com"
- ]
- }
- },
- {
- "AdKernel": {
- "http://adkernel.com": [
- "adkernel.com"
- ]
- }
- },
- {
- "Ad Knife": {
- "http://static.adknife.com/": [
- "adknife.com"
- ]
- }
- },
- {
- "Adknowledge": {
- "http://www.adknowledge.com/": [
- "adknowledge.com",
- "adparlor.com",
- "bidsystem.com",
- "cubics.com",
- "lookery.com"
- ]
- }
- },
- {
- "AdLantis": {
- "http://www.adlantis.jp/": [
- "adimg.net",
- "adlantis.jp"
- ]
- }
- },
- {
- "AdLeave": {
- "http://www.adleave.com/": [
- "adleave.com"
- ]
- }
- },
- {
- "Adlibrium": {
- "http://www.adlibrium.com/": [
- "adlibrium.com"
- ]
- }
- },
- {
- "Adlucent": {
- "http://adlucent.com": [
- "adlucent.com"
- ]
- }
- },
- {
- "Ad Magnet": {
- "http://www.admagnet.com/": [
- "admagnet.com",
- "admagnet.net"
- ]
- }
- },
- {
- "Admarketplace": {
- "http://www.admarketplace.com/": [
- "admarketplace.com",
- "admarketplace.net",
- "ampxchange.com"
- ]
- }
- },
- {
- "AdMarvel": {
- "http://www.admarvel.com/": [
- "admarvel.com"
- ]
- }
- },
- {
- "AdMatrix": {
- "http://www.admatrix.jp/": [
- "admatrix.jp"
- ]
- }
- },
- {
- "AdMaven": {
- "https://ad-maven.com/": [
- "ad-maven.com",
- "agreensdistra.info",
- "boudja.com",
- "rensovetors.info",
- "wrethicap.info"
- ]
- }
- },
- {
- "AdMaximizer Network": {
- "http://admaximizer.com/": [
- "admaximizer.com"
- ]
- }
- },
- {
- "AdMedia": {
- "http://www.admedia.com/": [
- "admedia.com"
- ]
- }
- },
- {
- "Admeta": {
- "http://www.admeta.com/": [
- "admeta.com",
- "atemda.com"
- ]
- }
- },
- {
- "Admicro": {
- "http://www.admicro.vn/": [
- "admicro.vn",
- "vcmedia.vn"
- ]
- }
- },
- {
- "Admixer": {
- "https://admixer.co.kr/main": [
- "admixer.co.kr"
- ]
- }
- },
- {
- "Admized": {
- "http://www.admized.com/": [
- "admized.com"
- ]
- }
- },
- {
- "Admobile": {
- "http://admobile.com/": [
- "admobile.com"
- ]
- }
- },
- {
- "Admotion": {
- "http://www.admotion.com/": [
- "admotion.com",
- "nspmotion.com"
- ]
- }
- },
- {
- "Adnetik": {
- "http://adnetik.com/": [
- "adnetik.com",
- "wtp101.com"
- ]
- }
- },
- {
- "AdNetwork.net": {
- "http://www.adnetwork.net/": [
- "adnetwork.net"
- ]
- }
- },
- {
- "Adnium": {
- "https://adnium.com": [
- "adnium.com"
- ]
- }
- },
- {
- "adnologies": {
- "http://www.adnologies.com/": [
- "adnologies.com",
- "heias.com"
- ]
- }
- },
- {
- "Adobe": {
- "http://www.adobe.com/": [
- "2o7.net",
- "auditude.com",
- "demdex.com",
- "demdex.net",
- "dmtracker.com",
- "efrontier.com",
- "everestads.net",
- "everestjs.net",
- "everesttech.net",
- "hitbox.com",
- "omniture.com",
- "omtrdc.net",
- "touchclarity.com"
- ]
- }
- },
- {
- "AdOcean": {
- "http://www.adocean-global.com/": [
- "adocean-global.com",
- "adocean.pl"
- ]
- }
- },
- {
- "Adometry": {
- "http://www.adometry.com/": [
- "adometry.com",
- "dmtry.com"
- ]
- }
- },
- {
- "Adomik": {
- "http://www.adomik.com/": [
- "adomik.com"
- ]
- }
- },
- {
- "AdOnion": {
- "http://www.adonion.com/": [
- "adonion.com"
- ]
- }
- },
- {
- "Adorika": {
- "http://www.clickotmedia.com/": [
- "clickotmedia.com"
- ]
- }
- },
- {
- "Adotmob": {
- "https://adotmob.com/": [
- "adotmob.com"
- ]
- }
- },
- {
- "ADP Dealer Services": {
- "http://www.adpdealerservices.com/": [
- "admission.net",
- "adpdealerservices.com",
- "cobalt.com"
- ]
- }
- },
- {
- "ad pepper media": {
- "http://www.adpepper.us/": [
- "adpepper.com",
- "adpepper.us"
- ]
- }
- },
- {
- "AdPerfect": {
- "http://www.adperfect.com/": [
- "adperfect.com"
- ]
- }
- },
- {
- "Adperium": {
- "http://www.adperium.com/": [
- "adperium.com"
- ]
- }
- },
- {
- "Adpersia": {
- "http://www.adpersia.com/": [
- "adpersia.com"
- ]
- }
- },
- {
- "adPrecision": {
- "http://adprecision.net/": [
- "adprs.net",
- "aprecision.net"
- ]
- }
- },
- {
- "AdPredictive": {
- "http://www.adpredictive.com/": [
- "adpredictive.com"
- ]
- }
- },
- {
- "AdReactor": {
- "http://www.adreactor.com/": [
- "adreactor.com"
- ]
- }
- },
- {
- "AdReady": {
- "http://www.adready.com/": [
- "adready.com",
- "adreadytractions.com"
- ]
- }
- },
- {
- "AdRevolution": {
- "http://adrevolution.com/": [
- "adrevolution.com"
- ]
- }
- },
- {
- "AdRiver": {
- "http://adriver.ru/": [
- "adriver.ru"
- ]
- }
- },
- {
- "adrolays": {
- "http://adrolays.com/": [
- "adrolays.com",
- "adrolays.de"
- ]
- }
- },
- {
- "AdRoll": {
- "http://www.adroll.com/": [
- "adroll.com"
- ]
- }
- },
- {
- "adscale": {
- "http://www.adscale.de/": [
- "adscale.de"
- ]
- }
- },
- {
- "Adscience": {
- "https://www.adscience.nl/": [
- "adscience.nl"
- ]
- }
- },
- {
- "AdServerPub": {
- "http://www.adserverpub.com/": [
- "adserverpub.com"
- ]
- }
- },
- {
- "AdShuffle": {
- "http://www.adshuffle.com/": [
- "adshuffle.com"
- ]
- }
- },
- {
- "AdSide": {
- "http://www.adside.com/": [
- "adside.com",
- "doclix.com"
- ]
- }
- },
- {
- "AdSpeed": {
- "http://www.adspeed.com/": [
- "adspeed.com",
- "adspeed.net"
- ]
- }
- },
- {
- "Adsperity": {
- "https://www.adsperity.com/": [
- "adsperity.com"
- ]
- }
- },
- {
- "AdSpirit": {
- "http://www.adspirit.de/": [
- "adspirit.com",
- "adspirit.de",
- "adspirit.net"
- ]
- }
- },
- {
- "Adsrevenue.net": {
- "http://adsrevenue.net/": [
- "adsrevenue.net"
- ]
- }
- },
- {
- "AdStir": {
- "https://en.ad-stir.com/": [
- "ad-stir.com"
- ]
- }
- },
- {
- "AdsTours": {
- "http://www.adstours.com/": [
- "adstours.com",
- "clickintext.net"
- ]
- }
- },
- {
- "Adsty": {
- "http://adsty.com/": [
- "adsty.com",
- "adx1.com"
- ]
- }
- },
- {
- "Adsupply": {
- "http://www.adsupply.com/": [
- "4dsply.com",
- "adsupply.com"
- ]
- }
- },
- {
- "Adswizz": {
- "http://adswizz.com": [
- "adswizz.com"
- ]
- }
- },
- {
- "ADTECH": {
- "http://www.adtech.com/": [
- "adtech.com",
- "adtech.de",
- "adtechus.com"
- ]
- }
- },
- {
- "Adtegrity.com": {
- "http://www.adtegrity.com/": [
- "adtegrity.com",
- "adtegrity.net"
- ]
- }
- },
- {
- "ADTELLIGENCE": {
- "http://www.adtelligence.de/": [
- "adtelligence.de"
- ]
- }
- },
- {
- "Adthink": {
- "https://adthink.com/": [
- "adthink.com",
- "audienceinsights.net"
- ]
- }
- },
- {
- "AdTiger": {
- "http://www.adtiger.de/": [
- "adtiger.de"
- ]
- }
- },
- {
- "AdTruth": {
- "http://adtruth.com/": [
- "adtruth.com"
- ]
- }
- },
- {
- "Adult AdWorld": {
- "http://adultadworld.com/": [
- "adultadworld.com"
- ]
- }
- },
- {
- "Adultmoda": {
- "http://www.adultmoda.com/": [
- "adultmoda.com"
- ]
- }
- },
- {
- "Adventive": {
- "http://adventive.com/": [
- "adventive.com"
- ]
- }
- },
- {
- "Adverline": {
- "http://www.adverline.com/": [
- "adnext.fr",
- "adverline.com"
- ]
- }
- },
- {
- "Adversal.com": {
- "http://www.adversal.com/": [
- "adv-adserver.com",
- "adversal.com"
- ]
- }
- },
- {
- "Adverticum": {
- "http://www.adverticum.com/": [
- "adsmart.com",
- "adverticum.com",
- "adverticum.net"
- ]
- }
- },
- {
- "Advertise.com": {
- "http://www.advertise.com/": [
- "advertise.com"
- ]
- }
- },
- {
- "AdvertiseSpace": {
- "http://www.advertisespace.com/": [
- "advertisespace.com"
- ]
- }
- },
- {
- "Advert Stream": {
- "http://www.advertstream.com/": [
- "advertstream.com"
- ]
- }
- },
- {
- "Advisor Media": {
- "http://advisormedia.cz/": [
- "advisormedia.cz"
- ]
- }
- },
- {
- "Adworx": {
- "http://adworx.at/": [
- "adworx.at",
- "adworx.be",
- "adworx.nl"
- ]
- }
- },
- {
- "AdXpansion": {
- "http://www.adxpansion.com/": [
- "adxpansion.com"
- ]
- }
- },
- {
- "Adxvalue": {
- "http://adxvalue.com/": [
- "adxvalue.com",
- "adxvalue.de"
- ]
- }
- },
- {
- "adyard": {
- "http://adyard.de/": [
- "adyard.de"
- ]
- }
- },
- {
- "AdYield": {
- "http://www.adyield.com/": [
- "adxyield.com",
- "adyield.com"
- ]
- }
- },
- {
- "AdYouLike": {
- "https://www.adyoulike.com/": [
- "adyoulike.com",
- "omnitagjs.com",
- "pulpix.com"
- ]
- }
- },
- {
- "ADZ": {
- "http://www.adzcentral.com/": [
- "adzcentral.com"
- ]
- }
- },
- {
- "Adzerk": {
- "http://www.adzerk.com/": [
- "adzerk.com",
- "adzerk.net"
- ]
- }
- },
- {
- "adzly": {
- "http://www.adzly.com/": [
- "adzly.com"
- ]
- }
- },
- {
- "Aegis Group": {
- "http://www.aemedia.com/": [
- "aemedia.com",
- "bluestreak.com"
- ]
- }
- },
- {
- "AERIFY MEDIA": {
- "http://aerifymedia.com/": [
- "aerifymedia.com",
- "anonymous-media.com"
- ]
- }
- },
- {
- "Affectv": {
- "http://affectv.co.uk/": [
- "affectv.co.uk"
- ]
- }
- },
- {
- "affilinet": {
- "http://www.affili.net/": [
- "affili.net",
- "affilinet-inside.de",
- "banner-rotation.com",
- "successfultogether.co.uk"
- ]
- }
- },
- {
- "Affine": {
- "http://www.affine.tv/": [
- "affine.tv",
- "affinesystems.com"
- ]
- }
- },
- {
- "Affinity": {
- "http://www.affinity.com/": [
- "affinity.com"
- ]
- }
- },
- {
- "AfterDownload": {
- "http://www.afterdownload.com/": [
- "afdads.com",
- "afterdownload.com"
- ]
- }
- },
- {
- "Aim4Media": {
- "http://aim4media.com/": [
- "aim4media.com"
- ]
- }
- },
- {
- "Airpush": {
- "http://www.airpush.com/": [
- "airpush.com"
- ]
- }
- },
- {
- "AK": {
- "http://www.aggregateknowledge.com/": [
- "aggregateknowledge.com",
- "agkn.com"
- ]
- }
- },
- {
- "Akamai": {
- "http://www.akamai.com/": [
- "imiclk.com"
- ]
- }
- },
- {
- "Albacross": {
- "https://albacross.com": [
- "albacross.com"
- ]
- }
- },
- {
- "AllStarMediaGroup": {
- "http://allstarmediagroup.com/": [
- "allstarmediagroup.com"
- ]
- }
- },
- {
- "Aloodo": {
- "https://aloodo.com/": [
- "aloodo.com"
- ]
- }
- },
- {
- "AlterGeo": {
- "http://altergeo.ru/": [
- "altergeo.ru"
- ]
- }
- },
- {
- "Amazon.com": {
- "http://www.amazon.com/": [
- "amazon-adsystem.com",
- "amazon.ca",
- "amazon.co.jp",
- "amazon.co.uk",
- "amazon.de",
- "amazon.es",
- "amazon.fr",
- "amazon.it",
- "assoc-amazon.com"
- ]
- }
- },
- {
- "Ambient Digital": {
- "http://ambientdigital.com.vn/": [
- "adnetwork.vn",
- "ambientdigital.com.vn"
- ]
- }
- },
- {
- "Amobee": {
- "http://amobee.com/": [
- "adconion.com",
- "amgdgt.com",
- "amobee.com",
- "euroclick.com",
- "smartclip.com",
- "turn.com"
- ]
- }
- },
- {
- "AndBeyond": {
- "http://andbeyond.media/": [
- "andbeyond.media"
- ]
- }
- },
- {
- "Answers.com": {
- "http://www.answers.com/": [
- "dsply.com"
- ]
- }
- },
- {
- "AOL": {
- "http://www.aol.com/": [
- "adsonar.com",
- "adtechjp.com",
- "advertising.com",
- "aolcloud.net",
- "atwola.com",
- "leadback.com",
- "tacoda.net",
- "vidible.tv"
- ]
- }
- },
- {
- "AppCast": {
- "https://appcast.io/": [
- "appcast.io"
- ]
- }
- },
- {
- "Appenda": {
- "http://www.appenda.com/": [
- "appenda.com"
- ]
- }
- },
- {
- "AppFlood": {
- "http://appflood.com/": [
- "appflood.com"
- ]
- }
- },
- {
- "Appier": {
- "http://appier.com/": [
- "appier.com"
- ]
- }
- },
- {
- "Applifier": {
- "http://www.applifier.com/": [
- "applifier.com"
- ]
- }
- },
- {
- "Applovin": {
- "http://www.applovin.com/": [
- "applovin.com"
- ]
- }
- },
- {
- "AppNexus": {
- "http://www.appnexus.com/": [
- "adlantic.nl",
- "adnxs.com",
- "adrdgt.com",
- "alenty.com",
- "appnexus.com"
- ]
- }
- },
- {
- "AppsFlyer": {
- "http://appsflyer.com/": [
- "appsflyer.com"
- ]
- }
- },
- {
- "appssavvy": {
- "http://appssavvy.com/": [
- "appssavvy.com"
- ]
- }
- },
- {
- "Arkwrights Homebrew": {
- "http://www.arkwrightshomebrew.com/": [
- "arkwrightshomebrew.com",
- "ctasnet.com"
- ]
- }
- },
- {
- "AT Internet": {
- "http://www.atinternet.com/": [
- "hit-parade.com"
- ]
- }
- },
- {
- "ATN": {
- "http://affiliatetracking.com/": [
- "affiliatetracking.com"
- ]
- }
- },
- {
- "Atoomic.com": {
- "http://www.atoomic.com/": [
- "atoomic.com"
- ]
- }
- },
- {
- "Atrinsic": {
- "http://atrinsic.com/": [
- "atrinsic.com"
- ]
- }
- },
- {
- "AT&T": {
- "http://www.att.com/": [
- "att.com",
- "yp.com"
- ]
- }
- },
- {
- "Audience2Media": {
- "http://www.audience2media.com/": [
- "audience2media.com"
- ]
- }
- },
- {
- "Audience Ad Network": {
- "http://audienceadnetwork.com/": [
- "audienceadnetwork.com"
- ]
- }
- },
- {
- "AudienceScience": {
- "http://www.audiencescience.com/": [
- "audiencescience.com",
- "revsci.net",
- "targetingmarketplace.com",
- "wunderloop.net"
- ]
- }
- },
- {
- "Augme": {
- "http://www.augme.com/": [
- "augme.com",
- "hipcricket.com"
- ]
- }
- },
- {
- "Augur": {
- "http://www.augur.io/": [
- "augur.io"
- ]
- }
- },
- {
- "AUTOCENTRE.UA": {
- "http://www.autocentre.ua/": [
- "am.ua",
- "autocentre.ua"
- ]
- }
- },
- {
- "Automattic": {
- "http://automattic.com/": [
- "pubmine.com"
- ]
- }
- },
- {
- "Avalanchers": {
- "http://www.avalanchers.com/": [
- "avalanchers.com"
- ]
- }
- },
- {
- "AvantLink": {
- "http://www.avantlink.com/": [
- "avantlink.com"
- ]
- }
- },
- {
- "Avocet": {
- "https://avocet.io/": [
- "avocet.io"
- ]
- }
- },
- {
- "Avsads": {
- "http://avsads.com/": [
- "avsads.com"
- ]
- }
- },
- {
- "AWeber": {
- "http://www.aweber.com/": [
- "aweber.com"
- ]
- }
- },
- {
- "Awin": {
- "http://www.awin.com/": [
- "digitalwindow.com",
- "dwin1.com",
- "perfiliate.com"
- ]
- }
- },
- {
- "Azet": {
- "http://mediaimpact.sk/": [
- "azetklik.sk",
- "rsz.sk"
- ]
- }
- },
- {
- "BackBeat Media": {
- "http://www.backbeatmedia.com/": [
- "backbeatmedia.com"
- ]
- }
- },
- {
- "Bannerconnect": {
- "http://www.bannerconnect.net/": [
- "bannerconnect.net"
- ]
- }
- },
- {
- "Barilliance": {
- "http://www.barilliance.com/": [
- "barilliance.com"
- ]
- }
- },
- {
- "BaronsNetworks": {
- "http://baronsoffers.com/": [
- "baronsoffers.com"
- ]
- }
- },
- {
- "Batanga Network": {
- "http://www.batanganetwork.com/": [
- "batanga.com",
- "batanganetwork.com"
- ]
- }
- },
- {
- "BeachFront": {
- "http://beachfront.com/": [
- "beachfront.com"
- ]
- }
- },
- {
- "Beanstock Media": {
- "http://www.beanstockmedia.com/": [
- "beanstockmedia.com"
- ]
- }
- },
- {
- "beencounter": {
- "http://www.beencounter.com/": [
- "beencounter.com"
- ]
- }
- },
- {
- "Begun": {
- "http://www.begun.ru/": [
- "begun.ru"
- ]
- }
- },
- {
- "belboon": {
- "http://www.belboon.com/": [
- "adbutler.de",
- "belboon.com"
- ]
- }
- },
- {
- "Betgenius": {
- "http://www.betgenius.com/": [
- "betgenius.com",
- "connextra.com"
- ]
- }
- },
- {
- "BetweenDigital": {
- "http://betweendigital.com": [
- "betweendigital.com"
- ]
- }
- },
- {
- "Bidfluence": {
- "https://www.bidfluence.com/": [
- "bidfluence.com"
- ]
- }
- },
- {
- "Bidr": {
- "http://bidr.io": [
- "bidr.io"
- ]
- }
- },
- {
- "BidSwitch": {
- "https://www.bidswitch.com/": [
- "bidswitch.net",
- "mfadsrvr.com"
- ]
- }
- },
- {
- "Bidtellect": {
- "https://www.bidtellect.com/": [
- "bidtellect.com",
- "bttrack.com"
- ]
- }
- },
- {
- "BidVertiser": {
- "http://www.bidvertiser.com/": [
- "bidvertiser.com"
- ]
- }
- },
- {
- "BigClick": {
- "http://bigclick.me/": [
- "bgclck.me",
- "xcvgdf.party"
- ]
- }
- },
- {
- "bigmirnet": {
- "http://www.bigmir.net/": [
- "bigmir.net"
- ]
- }
- },
- {
- "BinLayer": {
- "http://binlayer.com/": [
- "binlayer.com"
- ]
- }
- },
- {
- "Bitcoin Plus": {
- "http://www.bitcoinplus.com/": [
- "bitcoinplus.com"
- ]
- }
- },
- {
- "BitMedia": {
- "https://bitmedia.io/": [
- "bitmedia.io"
- ]
- }
- },
- {
- "BittAds": {
- "http://www.bittads.com/": [
- "bittads.com"
- ]
- }
- },
- {
- "Bizo": {
- "http://www.bizo.com/": [
- "bizo.com",
- "bizographics.com"
- ]
- }
- },
- {
- "Black Label Ads": {
- "http://www.blacklabelads.com/": [
- "blacklabelads.com"
- ]
- }
- },
- {
- "BlogCatalog": {
- "http://www.blogcatalog.com/": [
- "blogcatalog.com"
- ]
- }
- },
- {
- "BlogFrog": {
- "http://theblogfrog.com/": [
- "theblogfrog.com"
- ]
- }
- },
- {
- "BlogHer": {
- "http://www.blogher.com/": [
- "blogher.com",
- "blogherads.com"
- ]
- }
- },
- {
- "BlogRollr": {
- "http://blogrollr.com/": [
- "blogrollr.com"
- ]
- }
- },
- {
- "BLOOM Digital Platforms": {
- "http://bloom-hq.com/": [
- "adgear.com",
- "adgrx.com",
- "bloom-hq.com"
- ]
- }
- },
- {
- "BlueKai": {
- "http://www.bluekai.com/": [
- "bkrtx.com",
- "bluekai.com",
- "tracksimple.com"
- ]
- }
- },
- {
- "Blu Trumpet": {
- "http://www.blutrumpet.com/": [
- "blutrumpet.com"
- ]
- }
- },
- {
- "Boo-Box": {
- "http://boo-box.com/": [
- "boo-box.com"
- ]
- }
- },
- {
- "BoostBox": {
- "https://www.boostbox.com.br/": [
- "boostbox.com.br"
- ]
- }
- },
- {
- "Bouncex": {
- "https://www.bouncex.com/": [
- "bounceexchange.com",
- "bouncex.com",
- "bouncex.net"
- ]
- }
- },
- {
- "Brainient": {
- "http://brainient.com/": [
- "brainient.com"
- ]
- }
- },
- {
- "Brand Affinity Technologies": {
- "http://www.brandaffinity.net/": [
- "brandaffinity.net"
- ]
- }
- },
- {
- "Brandcrumb": {
- "http://www.brandcrumb.com": [
- "brandcrumb.com"
- ]
- }
- },
- {
- "Brand.net": {
- "http://www.brand.net/": [
- "brand.net"
- ]
- }
- },
- {
- "Brandscreen": {
- "http://www.brandscreen.com/": [
- "brandscreen.com",
- "rtbidder.net"
- ]
- }
- },
- {
- "BreakTime": {
- "https://www.breaktime.com.tw/": [
- "breaktime.com.tw"
- ]
- }
- },
- {
- "BrightRoll": {
- "http://www.brightroll.com/": [
- "brightroll.com",
- "btrll.com"
- ]
- }
- },
- {
- "BrightTag": {
- "http://www.brighttag.com/": [
- "brighttag.com",
- "btstatic.com",
- "thebrighttag.com"
- ]
- }
- },
- {
- "Brilig": {
- "http://www.brilig.com/": [
- "brilig.com"
- ]
- }
- },
- {
- "BuckSense": {
- "http://www.bucksense.com": [
- "bucksense.com"
- ]
- }
- },
- {
- "Burstly": {
- "http://www.burstly.com/": [
- "burstly.com"
- ]
- }
- },
- {
- "Burst Media": {
- "http://www.burstmedia.com/": [
- "burstbeacon.com",
- "burstdirectads.com",
- "burstmedia.com",
- "burstnet.com",
- "giantrealm.com"
- ]
- }
- },
- {
- "BusinessOnline": {
- "http://www.businessol.com/": [
- "businessol.com"
- ]
- }
- },
- {
- "Button": {
- "https://www.usebutton.com": [
- "usebutton.com"
- ]
- }
- },
- {
- "BuySellAds": {
- "http://buysellads.com/": [
- "beaconads.com",
- "buysellads.com"
- ]
- }
- },
- {
- "Buysight": {
- "http://www.buysight.com/": [
- "buysight.com",
- "permuto.com",
- "pulsemgr.com"
- ]
- }
- },
- {
- "BuzzParadise": {
- "http://www.buzzparadise.com/": [
- "buzzparadise.com"
- ]
- }
- },
- {
- "BV! MEDIA": {
- "http://www.bvmedia.ca/": [
- "bvmedia.ca",
- "networldmedia.com",
- "networldmedia.net"
- ]
- }
- },
- {
- "c1exchange": {
- "https://c1exchange.com/": [
- "c1exchange.com"
- ]
- }
- },
- {
- "C3 Metrics": {
- "http://c3metrics.com/": [
- "attributionmodel.com",
- "c3metrics.com",
- "c3tag.com"
- ]
- }
- },
- {
- "Cadreon": {
- "http://www.cadreon.com/": [
- "cadreon.com"
- ]
- }
- },
- {
- "CampaignGrid": {
- "http://www.campaigngrid.com/": [
- "campaigngrid.com"
- ]
- }
- },
- {
- "CAPITALDATA": {
- "http://www.capitaldata.fr/": [
- "capitaldata.fr"
- ]
- }
- },
- {
- "Carambola": {
- "https://www.carambola.com/": [
- "carambo.la"
- ]
- }
- },
- {
- "Caraytech": {
- "http://www.caraytech.com.ar/": [
- "caraytech.com.ar",
- "e-planning.net"
- ]
- }
- },
- {
- "Cart.ro": {
- "http://www.cart.ro/": [
- "cart.ro",
- "statistics.ro"
- ]
- }
- },
- {
- "CartsGuru": {
- "https://carts.guru/": [
- "carts.guru"
- ]
- }
- },
- {
- "Casale Media": {
- "http://www.casalemedia.com/": [
- "casalemedia.com",
- "medianet.com"
- ]
- }
- },
- {
- "CBproADS": {
- "http://www.cbproads.com/": [
- "cbproads.com"
- ]
- }
- },
- {
- "Cedato": {
- "https://www.cedato.com/": [
- "cedato.com"
- ]
- }
- },
- {
- "Chango": {
- "http://www.chango.com/": [
- "chango.ca",
- "chango.com"
- ]
- }
- },
- {
- "ChannelAdvisor": {
- "http://www.channeladvisor.com/": [
- "channeladvisor.com",
- "searchmarketing.com"
- ]
- }
- },
- {
- "Channel Intelligence": {
- "http://www.channelintelligence.com/": [
- "channelintelligence.com"
- ]
- }
- },
- {
- "Chartboost": {
- "https://www.chartboost.com/": [
- "chartboost.com"
- ]
- }
- },
- {
- "CheckM8": {
- "http://www.checkm8.com/": [
- "checkm8.com"
- ]
- }
- },
- {
- "Chitika": {
- "http://chitika.com/": [
- "chitika.com",
- "chitika.net"
- ]
- }
- },
- {
- "ChoiceStream": {
- "http://www.choicestream.com/": [
- "choicestream.com"
- ]
- }
- },
- {
- "ClearLink": {
- "https://www.clearlink.com/": [
- "clearlink.com"
- ]
- }
- },
- {
- "ClearSaleing": {
- "http://www.clearsaleing.com/": [
- "clearsaleing.com",
- "csdata1.com",
- "csdata2.com",
- "csdata3.com"
- ]
- }
- },
- {
- "Clearsearch Media": {
- "http://www.clearsearchmedia.com/": [
- "clearsearchmedia.com",
- "csm-secure.com"
- ]
- }
- },
- {
- "ClearSight Interactive": {
- "http://www.clearsightinteractive.com/": [
- "clearsightinteractive.com",
- "csi-tracking.com"
- ]
- }
- },
- {
- "ClickAider": {
- "http://clickaider.com/": [
- "clickaider.com"
- ]
- }
- },
- {
- "Clickayab": {
- "http://www.clickyab.com": [
- "clickyab.com"
- ]
- }
- },
- {
- "Clickbooth": {
- "http://www.clickbooth.com/": [
- "adtoll.com",
- "clickbooth.com"
- ]
- }
- },
- {
- "ClickDimensions": {
- "http://www.clickdimensions.com/": [
- "clickdimensions.com"
- ]
- }
- },
- {
- "ClickDistrict": {
- "http://www.clickdistrict.com/": [
- "clickdistrict.com",
- "creative-serving.com"
- ]
- }
- },
- {
- "ClickFrog": {
- "https://clickfrog.ru/": [
- "bashirian.biz",
- "buckridge.link",
- "clickfrog.ru",
- "franecki.net",
- "quitzon.net",
- "reichelcormier.bid",
- "wisokykulas.bid"
- ]
- }
- },
- {
- "ClickFuel": {
- "http://clickfuel.com/": [
- "conversiondashboard.com"
- ]
- }
- },
- {
- "ClickInc": {
- "http://www.clickinc.com/": [
- "clickinc.com"
- ]
- }
- },
- {
- "Clicksor": {
- "http://www.clicksor.com/": [
- "clicksor.com",
- "clicksor.net"
- ]
- }
- },
- {
- "Clickwinks": {
- "http://www.clickwinks.com/": [
- "clickwinks.com"
- ]
- }
- },
- {
- "ClicManager": {
- "http://www.clicmanager.fr/": [
- "clicmanager.fr"
- ]
- }
- },
- {
- "Clixtell": {
- "https://www.clixtell.com/": [
- "clixtell.com"
- ]
- }
- },
- {
- "Clove Network": {
- "http://www.clovenetwork.com/": [
- "clovenetwork.com"
- ]
- }
- },
- {
- "Cognitive Match": {
- "http://www.cognitivematch.com/": [
- "cmads.com.tw",
- "cmadsasia.com",
- "cmadseu.com",
- "cmmeglobal.com",
- "cognitivematch.com"
- ]
- }
- },
- {
- "Collective": {
- "http://collective.com/": [
- "collective-media.net",
- "collective.com",
- "oggifinogi.com",
- "tumri.com",
- "tumri.net",
- "yt1187.net"
- ]
- }
- },
- {
- "Commission Junction": {
- "http://www.cj.com/": [
- "apmebf.com",
- "awltovhc.com",
- "cj.com",
- "ftjcfx.com",
- "kcdwa.com",
- "qksz.com",
- "qksz.net",
- "tqlkg.com",
- "yceml.net"
- ]
- }
- },
- {
- "Communicator Corp": {
- "http://www.communicatorcorp.com/": [
- "communicatorcorp.com"
- ]
- }
- },
- {
- "Compass Labs": {
- "http://compasslabs.com/": [
- "compasslabs.com"
- ]
- }
- },
- {
- "Complex Media": {
- "http://www.complexmedianetwork.com/": [
- "complex.com",
- "complexmedianetwork.com"
- ]
- }
- },
- {
- "comScore": {
- "http://www.comscore.com/": [
- "adxpose.com",
- "proxilinks.com",
- "proximic.com",
- "proximic.net"
- ]
- }
- },
- {
- "Connatix.com": {
- "https://connatix.com/": [
- "connatix.com"
- ]
- }
- },
- {
- "Connexity": {
- "http://www.connexity.com/": [
- "pricegrabber.com"
- ]
- }
- },
- {
- "Consilium Media": {
- "http://www.consiliummedia.com/": [
- "consiliummedia.com"
- ]
- }
- },
- {
- "Consumable": {
- "http://consumable.com/": [
- "consumable.com"
- ]
- }
- },
- {
- "CONTAXE": {
- "http://www.contaxe.com/": [
- "contaxe.com"
- ]
- }
- },
- {
- "ContentABC": {
- "http://contentabc.com/": [
- "contentabc.com"
- ]
- }
- },
- {
- "CONTEXTin": {
- "http://www.contextin.com/": [
- "admailtiser.com",
- "contextin.com"
- ]
- }
- },
- {
- "ContextuAds": {
- "http://www.contextuads.com/": [
- "agencytradingdesk.net",
- "contextuads.com"
- ]
- }
- },
- {
- "CONTEXTWEB": {
- "http://www.contextweb.com/": [
- "contextweb.com"
- ]
- }
- },
- {
- "ConvergeDirect": {
- "http://www.convergedirect.com/": [
- "convergedirect.com",
- "convergetrack.com"
- ]
- }
- },
- {
- "ConversantMedia": {
- "http://conversantmedia.com": [
- "adserver.com",
- "conversantmedia.com",
- "dotomi.com",
- "dtmpub.com",
- "emjcd.com",
- "fastclick.com",
- "fastclick.net",
- "greystripe.com",
- "lduhtrp.net",
- "mediaplex.com",
- "valueclick.com",
- "valueclick.net",
- "valueclickmedia.com"
- ]
- }
- },
- {
- "ConversionRuler": {
- "http://www.conversionruler.com/": [
- "conversionruler.com"
- ]
- }
- },
- {
- "Conversive": {
- "http://www.conversive.nl/": [
- "conversive.nl"
- ]
- }
- },
- {
- "CoreMotives": {
- "http://coremotives.com/": [
- "coremotives.com"
- ]
- }
- },
- {
- "Cox Digital Solutions": {
- "http://www.coxdigitalsolutions.com/": [
- "adify.com",
- "afy11.net",
- "coxdigitalsolutions.com"
- ]
- }
- },
- {
- "CPMStar": {
- "http://www.cpmstar.com/": [
- "cpmstar.com"
- ]
- }
- },
- {
- "CPX Interactive": {
- "http://www.cpxinteractive.com/": [
- "adreadypixels.com",
- "cpxadroit.com",
- "cpxinteractive.com"
- ]
- }
- },
- {
- "Creafi": {
- "http://www.creafi.com/": [
- "creafi.com"
- ]
- }
- },
- {
- "Crimtan": {
- "http://www.crimtan.com/": [
- "crimtan.com"
- ]
- }
- },
- {
- "Crisp Media": {
- "http://www.crispmedia.com/": [
- "crispmedia.com"
- ]
- }
- },
- {
- "Criteo": {
- "http://www.criteo.com/": [
- "criteo.com",
- "criteo.net",
- "hlserve.com",
- "hooklogic.com",
- "storetail.io"
- ]
- }
- },
- {
- "Cross Pixel": {
- "http://crosspixel.net/": [
- "crosspixel.net",
- "crosspixelmedia.com",
- "crsspxl.com"
- ]
- }
- },
- {
- "cXense": {
- "http://www.cxense.com/": [
- "cxense.com",
- "emediate.biz",
- "emediate.com",
- "emediate.dk",
- "emediate.eu"
- ]
- }
- },
- {
- "Cyberplex": {
- "http://www.cyberplex.com/": [
- "cyberplex.com"
- ]
- }
- },
- {
- "Dada": {
- "http://dada.pro/": [
- "dada.pro",
- "simply.com"
- ]
- }
- },
- {
- "Datalogix": {
- "http://www.datalogix.com/": [
- "nexac.com",
- "nextaction.net"
- ]
- }
- },
- {
- "DataXu": {
- "http://www.dataxu.com/": [
- "dataxu.com",
- "dataxu.net",
- "mexad.com",
- "w55c.net"
- ]
- }
- },
- {
- "Datonics": {
- "http://datonics.com/": [
- "datonics.com",
- "pro-market.net"
- ]
- }
- },
- {
- "Datran Media": {
- "http://www.datranmedia.com/": [
- "datranmedia.com",
- "displaymarketplace.com"
- ]
- }
- },
- {
- "Datvantage": {
- "http://datvantage.com/": [
- "datvantage.com"
- ]
- }
- },
- {
- "DC Storm": {
- "http://www.dc-storm.com/": [
- "dc-storm.com",
- "stormiq.com"
- ]
- }
- },
- {
- "Dedicated Media": {
- "http://www.dedicatedmedia.com/": [
- "dedicatedmedia.com",
- "dedicatednetworks.com"
- ]
- }
- },
- {
- "Delivr": {
- "http://delivr.com/": [
- "delivr.com",
- "percentmobile.com"
- ]
- }
- },
- {
- "Delta Projects": {
- "http://www.deltaprojects.se/": [
- "adaction.se",
- "de17a.com",
- "deltaprojects.se"
- ]
- }
- },
- {
- "Demand Media": {
- "http://www.demandmedia.com/": [
- "demandmedia.com",
- "indieclick.com"
- ]
- }
- },
- {
- "Deutsche Post DHL": {
- "http://www.dp-dhl.com/": [
- "adcloud.com",
- "adcloud.net",
- "dp-dhl.com"
- ]
- }
- },
- {
- "Developer Media": {
- "http://developermedia.com/": [
- "developermedia.com",
- "lqcdn.com"
- ]
- }
- },
- {
- "DG": {
- "http://www.dgit.com/": [
- "dgit.com",
- "eyeblaster.com",
- "eyewonder.com",
- "mdadx.com",
- "serving-sys.com",
- "unicast.com"
- ]
- }
- },
- {
- "dianomi": {
- "http://www.dianomi.com/": [
- "dianomi.com"
- ]
- }
- },
- {
- "Didit": {
- "http://www.didit.com/": [
- "did-it.com",
- "didit.com"
- ]
- }
- },
- {
- "DigitalAdConsortium": {
- "https://www.dac.co.jp/": [
- "impact-ad.jp"
- ]
- }
- },
- {
- "Digital River": {
- "http://www.digitalriver.com/": [
- "digitalriver.com",
- "keywordmax.com",
- "netflame.cc"
- ]
- }
- },
- {
- "Digital Target": {
- "http://digitaltarget.ru": [
- "digitaltarget.ru"
- ]
- }
- },
- {
- "Digitize": {
- "http://www.digitize.ie/": [
- "digitize.ie"
- ]
- }
- },
- {
- "DirectAdvert": {
- "http://www.directadvert.ru/": [
- "directadvert.ru"
- ]
- }
- },
- {
- "Direct Response Group": {
- "http://www.directresponsegroup.com/": [
- "directresponsegroup.com",
- "ppctracking.net"
- ]
- }
- },
- {
- "Directtrack": {
- "http://directtrack.com/": [
- "directtrack.com"
- ]
- }
- },
- {
- "Disqus": {
- "http://disqus.com/": [
- "disqusads.com"
- ]
- }
- },
- {
- "DistrictM": {
- "https://districtm.net": [
- "districtm.io"
- ]
- }
- },
- {
- "dmpxs": {
- "http://bob.dmpxs.com": [
- "dmpxs.com"
- ]
- }
- },
- {
- "DoublePimp": {
- "http://doublepimp.com/": [
- "doublepimp.com"
- ]
- }
- },
- {
- "DoublePositive": {
- "http://www.doublepositive.com/": [
- "bid-tag.com",
- "doublepositive.com"
- ]
- }
- },
- {
- "Drawbridge": {
- "http://drawbrid.ge/": [
- "adsymptotic.com",
- "drawbrid.ge"
- ]
- }
- },
- {
- "DS-IQ": {
- "http://www.ds-iq.com/": [
- "ds-iq.com"
- ]
- }
- },
- {
- "DSNR Group": {
- "http://www.dsnrmg.com/": [
- "dsnrgroup.com",
- "dsnrmg.com",
- "traffiliate.com",
- "z5x.com",
- "z5x.net"
- ]
- }
- },
- {
- "DynAdmic": {
- "https://dynadmic.com/": [
- "dynadmic.com",
- "dyntrk.com"
- ]
- }
- },
- {
- "DynamicOxygen": {
- "http://www.dynamicoxygen.com/": [
- "dynamicoxygen.com",
- "exitjunction.com"
- ]
- }
- },
- {
- "DynamicYield": {
- "https://www.dynamicyield.com/": [
- "px-eu.dynamicyield.com",
- "px.dynamicyield.com"
- ]
- }
- },
- {
- "Earnify": {
- "http://earnify.com/": [
- "earnify.com"
- ]
- }
- },
- {
- "eBay": {
- "http://www.ebay.com/": [
- "ebay.com"
- ]
- }
- },
- {
- "Effective Measure": {
- "http://www.effectivemeasure.com/": [
- "effectivemeasure.com",
- "effectivemeasure.net"
- ]
- }
- },
- {
- "ekolay": {
- "http://www.ekolay.net/": [
- "e-kolay.net",
- "ekolay.net"
- ]
- }
- },
- {
- "Eleavers": {
- "http://eleavers.com/": [
- "eleavers.com"
- ]
- }
- },
- {
- "Emego": {
- "http://www.usemax.de/": [
- "usemax.de"
- ]
- }
- },
- {
- "Emerse": {
- "https://www.emerse.com": [
- "emerse.com"
- ]
- }
- },
- {
- "EMX": {
- "https://emxdigital.com/": [
- "brealtime.com",
- "clearstream.tv",
- "emxdgt.com",
- "emxdigital.com"
- ]
- }
- },
- {
- "Enecto": {
- "http://www.enecto.com/": [
- "enecto.com"
- ]
- }
- },
- {
- "engage:BDR": {
- "http://engagebdr.com/": [
- "bnmla.com",
- "engagebdr.com"
- ]
- }
- },
- {
- "Engago Technology": {
- "http://www.engago.com/": [
- "appmetrx.com",
- "engago.com"
- ]
- }
- },
- {
- "Engine Network": {
- "http://enginenetwork.com/": [
- "enginenetwork.com"
- ]
- }
- },
- {
- "Ensighten": {
- "http://www.ensighten.com/": [
- "ensighten.com"
- ]
- }
- },
- {
- "Entireweb": {
- "http://www.entireweb.com/": [
- "entireweb.com"
- ]
- }
- },
- {
- "Epic Media Group": {
- "http://www.theepicmediagroup.com/": [
- "epicadvertising.com",
- "epicmarketplace.com",
- "epicmobileads.com",
- "theepicmediagroup.com",
- "trafficmp.com"
- ]
- }
- },
- {
- "Epsilon": {
- "http://www.epsilon.com/": [
- "epsilon.com"
- ]
- }
- },
- {
- "EQ Ads": {
- "http://www.eqads.com/": [
- "eqads.com"
- ]
- }
- },
- {
- "EroAdvertising": {
- "http://www.ero-advertising.com/": [
- "ero-advertising.com"
- ]
- }
- },
- {
- "Etarget": {
- "http://etargetnet.com/": [
- "etarget.eu",
- "etargetnet.com"
- ]
- }
- },
- {
- "Etineria": {
- "http://www.etineria.com/": [
- "adwitserver.com",
- "etineria.com"
- ]
- }
- },
- {
- "eTrigue": {
- "http://www.etrigue.com/": [
- "etrigue.com"
- ]
- }
- },
- {
- "Evergage": {
- "http://www.evergage.com": [
- "mybuys.com",
- "veruta.com"
- ]
- }
- },
- {
- "Everyday Health": {
- "http://www.everydayhealth.com/": [
- "everydayhealth.com",
- "waterfrontmedia.com"
- ]
- }
- },
- {
- "Evisions Marketing": {
- "http://www.evisionsmarketing.com/": [
- "engineseeker.com",
- "evisionsmarketing.com"
- ]
- }
- },
- {
- "Evolve": {
- "http://www.evolvemediacorp.com/": [
- "evolvemediacorp.com",
- "evolvemediametrics.com",
- "gorillanation.com"
- ]
- }
- },
- {
- "eWayDirect": {
- "http://www.ewaydirect.com/": [
- "ewaydirect.com",
- "ixs1.net"
- ]
- }
- },
- {
- "ewebse": {
- "http://ewebse.com/": [
- "777seo.com",
- "ewebse.com"
- ]
- }
- },
- {
- "excitad": {
- "http://excitad.com/": [
- "excitad.com"
- ]
- }
- },
- {
- "eXelate": {
- "http://exelate.com/": [
- "exelate.com",
- "exelator.com"
- ]
- }
- },
- {
- "ExoClick": {
- "http://www.exoclick.com/": [
- "exoclick.com"
- ]
- }
- },
- {
- "Exosrv": {
- "http://main.exosrv.com/": [
- "exosrv.com"
- ]
- }
- },
- {
- "Experian": {
- "http://www.experian.com/": [
- "audienceiq.com",
- "experian.com"
- ]
- }
- },
- {
- "expo-MAX": {
- "http://expo-max.com/": [
- "expo-max.com"
- ]
- }
- },
- {
- "Exponential Interactive": {
- "http://www.exponential.com/": [
- "adotube.com",
- "exponential.com",
- "fulltango.com",
- "tribalfusion.com"
- ]
- }
- },
- {
- "Extension Factory": {
- "http://www.extensionfactory.com/": [
- "extensionfactory.com"
- ]
- }
- },
- {
- "EXTENSIONS.RU": {
- "http://extensions.ru/": [
- "extensions.ru"
- ]
- }
- },
- {
- "Eyeconomy": {
- "http://www.eyeconomy.co.uk/": [
- "eyeconomy.co.uk",
- "eyeconomy.com",
- "sublimemedia.net"
- ]
- }
- },
- {
- "EyeNewton": {
- "http://eyenewton.ru/": [
- "eyenewton.ru"
- ]
- }
- },
- {
- "eyeReturn Marketing": {
- "http://www.eyereturnmarketing.com/": [
- "eyereturn.com",
- "eyereturnmarketing.com"
- ]
- }
- },
- {
- "Eyeviewdigital": {
- "http://www.eyeviewdigital.com/": [
- "eyeviewdigital.com"
- ]
- }
- },
- {
- "Facebook": {
- "http://www.facebook.com/": [
- "atlassolutions.com"
- ]
- }
- },
- {
- "Facilitate Digital": {
- "http://www.facilitatedigital.com/": [
- "adsfac.eu",
- "adsfac.info",
- "adsfac.net",
- "adsfac.sg",
- "adsfac.us",
- "facilitatedigital.com"
- ]
- }
- },
- {
- "Fairfax Media": {
- "http://www.fxj.com.au/": [
- "fairfax.com.au",
- "fxj.com.au"
- ]
- }
- },
- {
- "faithadnet": {
- "http://www.faithadnet.com/": [
- "faithadnet.com"
- ]
- }
- },
- {
- "Fanplayr": {
- "https://fanplayr.com/": [
- "fanplayr.com"
- ]
- }
- },
- {
- "Fathom": {
- "http://www.fathomdelivers.com/": [
- "fathomdelivers.com",
- "fathomseo.com"
- ]
- }
- },
- {
- "Federated Media": {
- "http://www.federatedmedia.net/": [
- "federatedmedia.net",
- "fmpub.net",
- "lijit.com"
- ]
- }
- },
- {
- "FetchBack": {
- "http://www.fetchback.com/": [
- "fetchback.com"
- ]
- }
- },
- {
- "Fiksu": {
- "http://www.fiksu.com/": [
- "fiksu.com"
- ]
- }
- },
- {
- "FinancialContent": {
- "http://www.financialcontent.com/": [
- "financialcontent.com"
- ]
- }
- },
- {
- "Fizz-Buzz Media": {
- "http://www.fizzbuzzmedia.com/": [
- "fizzbuzzmedia.com",
- "fizzbuzzmedia.net"
- ]
- }
- },
- {
- "Flashtalking": {
- "http://www.flashtalking.com/": [
- "flashtalking.com"
- ]
- }
- },
- {
- "Flite": {
- "http://www.flite.com/": [
- "flite.com",
- "widgetserver.com"
- ]
- }
- },
- {
- "Fluct": {
- "https://corp.fluct.jp/": [
- "adingo.jp",
- "fluct.jp"
- ]
- }
- },
- {
- "Flytxt": {
- "http://www.flytxt.com/": [
- "flytxt.com"
- ]
- }
- },
- {
- "Forbes": {
- "http://www.forbes.com/": [
- "brandsideplatform.com",
- "forbes.com"
- ]
- }
- },
- {
- "Fox One Stop Media": {
- "http://www.foxonestop.com/": [
- "fimserve.com",
- "foxnetworks.com",
- "foxonestop.com",
- "mobsmith.com",
- "myads.com",
- "othersonline.com"
- ]
- }
- },
- {
- "FreakOut": {
- "http://fout.jp/": [
- "fout.jp"
- ]
- }
- },
- {
- "Freedom Communications": {
- "http://www.freedom.com/": [
- "freedom.com"
- ]
- }
- },
- {
- "FreeWheel": {
- "http://www.freewheel.tv/": [
- "stickyadstv.com"
- ]
- }
- },
- {
- "FriendFinder Networks": {
- "http://ffn.com/": [
- "adultfriendfinder.com",
- "ffn.com",
- "pop6.com"
- ]
- }
- },
- {
- "Friends2Follow": {
- "https://friends2follow.com/": [
- "tracking.friends2follow.com"
- ]
- }
- },
- {
- "Frog Sex": {
- "http://www.frogsex.com/": [
- "double-check.com",
- "frogsex.com"
- ]
- }
- },
- {
- "FuelX": {
- "https://fuelx.com/": [
- "fuel451.com",
- "fuelx.com"
- ]
- }
- },
- {
- "Future Ads": {
- "https://www.futureads.com/": [
- "futureads.com",
- "resultlinks.com"
- ]
- }
- },
- {
- "Fyber": {
- "https://www.fyber.com/": [
- "fyber.com"
- ]
- }
- },
- {
- "Game Advertising Online": {
- "http://www.game-advertising-online.com/": [
- "game-advertising-online.com"
- ]
- }
- },
- {
- "Games2win": {
- "http://www.games2win.com/": [
- "games2win.com",
- "inviziads.com"
- ]
- }
- },
- {
- "Gamned": {
- "http://www.gamned.com/": [
- "gamned.com"
- ]
- }
- },
- {
- "Gannett": {
- "http://www.gannett.com/": [
- "gannett.com",
- "pointroll.com"
- ]
- }
- },
- {
- "GB-World": {
- "http://www.gb-world.net/": [
- "gb-world.net"
- ]
- }
- },
- {
- "Gemius": {
- "http://www.gemius.com/": [
- "gemius.com",
- "gemius.pl"
- ]
- }
- },
- {
- "Genesis Media": {
- "http://www.genesismedia.com/": [
- "genesismedia.com",
- "genesismediaus.com"
- ]
- }
- },
- {
- "GENIEE": {
- "https://geniee.co.jp/": [
- "geniee.co.jp",
- "gssprt.jp"
- ]
- }
- },
- {
- "GENIE GROUP": {
- "http://www.geniegroupltd.co.uk/": [
- "geniegroupltd.co.uk"
- ]
- }
- },
- {
- "GeoAds": {
- "http://www.geoads.com/": [
- "geoads.com"
- ]
- }
- },
- {
- "GetGlue": {
- "http://getglue.com/": [
- "getglue.com",
- "smrtlnks.com"
- ]
- }
- },
- {
- "GetIntent": {
- "http://getintent.com/": [
- "adhigh.net",
- "getintent.com"
- ]
- }
- },
- {
- "GISMAds": {
- "http://www.gismads.jp/": [
- "gismads.jp"
- ]
- }
- },
- {
- "Glam Media": {
- "http://www.glammedia.com/": [
- "glam.com",
- "glammedia.com"
- ]
- }
- },
- {
- "Gleam": {
- "https://gleam.io/": [
- "fraudjs.io",
- "gleam.io"
- ]
- }
- },
- {
- "Globe7": {
- "http://www.globe7.com/": [
- "globe7.com"
- ]
- }
- },
- {
- "GoDataFeed": {
- "http://godatafeed.com/": [
- "godatafeed.com"
- ]
- }
- },
- {
- "Goldbach": {
- "http://www.goldbachgroup.com/": [
- "goldbach.com",
- "goldbachgroup.com"
- ]
- }
- },
- {
- "GoldSpot Media": {
- "http://www.goldspotmedia.com/": [
- "goldspotmedia.com"
- ]
- }
- },
- {
- "Google": {
- "http://www.google.com/": [
- "2mdn.net",
- "admeld.com",
- "admob.com",
- "adservice.google.ca",
- "adservice.google.com",
- "adwords.google.com",
- "cc-dt.com",
- "destinationurl.com",
- "doubleclick.net",
- "googleadservices.com",
- "googlesyndication.com",
- "googletagservices.com",
- "invitemedia.com",
- "smtad.net",
- "teracent.com",
- "teracent.net",
- "ytsa.net"
- ]
- }
- },
- {
- "Grapeshot": {
- "http://www.grapeshot.co.uk/": [
- "grapeshot.co.uk"
- ]
- }
- },
- {
- "Graphnium": {
- "https://www.graphinium.com/": [
- "crm4d.com"
- ]
- }
- },
- {
- "Grocery Shopping Network": {
- "http://www.groceryshopping.net/": [
- "groceryshopping.net"
- ]
- }
- },
- {
- "GroovinAds": {
- "http://www.groovinads.com/": [
- "groovinads.com"
- ]
- }
- },
- {
- "Gruner + Jahr": {
- "http://www.guj.de/": [
- "guj.de",
- "ligatus.com"
- ]
- }
- },
- {
- "GumGum": {
- "http://gumgum.com/": [
- "gumgum.com"
- ]
- }
- },
- {
- "Gunggo": {
- "http://www.gunggo.com/": [
- "gunggo.com"
- ]
- }
- },
- {
- "Hands Mobile": {
- "http://www.hands.com.br/": [
- "hands.com.br"
- ]
- }
- },
- {
- "Harrenmedia": {
- "http://www.harrenmedia.com/": [
- "harrenmedia.com",
- "harrenmedianetwork.com"
- ]
- }
- },
- {
- "HealthPricer": {
- "http://www.healthpricer.com/": [
- "adacado.com",
- "healthpricer.com"
- ]
- }
- },
- {
- "Hearst": {
- "http://www.hearst.com/": [
- "hearst.com",
- "ic-live.com",
- "iclive.com",
- "icrossing.com",
- "sptag.com",
- "sptag1.com",
- "sptag2.com",
- "sptag3.com"
- ]
- }
- },
- {
- "HilltopAds": {
- "https://hilltopads.com/": [
- "hilltopads.com",
- "hilltopads.net",
- "shoporielder.pro"
- ]
- }
- },
- {
- "Hi-media": {
- "http://www.hi-media.com/": [
- "comclick.com",
- "hi-media.com"
- ]
- }
- },
- {
- "Horyzon Media": {
- "http://www.horyzon-media.com/": [
- "horyzon-media.com"
- ]
- }
- },
- {
- "HotMart": {
- "https://www.hotmart.com/en/": [
- "hotmart.com"
- ]
- }
- },
- {
- "HOTWords": {
- "http://www.hotwords.com/": [
- "hotwords.com",
- "hotwords.es"
- ]
- }
- },
- {
- "HP": {
- "http://www.hp.com/": [
- "hp.com",
- "optimost.com"
- ]
- }
- },
- {
- "Httpool": {
- "http://www.httpool.com/": [
- "httpool.com"
- ]
- }
- },
- {
- "HUNT Mobile Ads": {
- "http://www.huntmads.com/": [
- "huntmads.com"
- ]
- }
- },
- {
- "Hurra.com": {
- "http://www.hurra.com/": [
- "hurra.com"
- ]
- }
- },
- {
- "IAB": {
- "https://iabtechlab.com/": [
- "digitru.st"
- ]
- }
- },
- {
- "IAC": {
- "http://www.iac.com/": [
- "iac.com",
- "iacadvertising.com"
- ]
- }
- },
- {
- "iBehavior": {
- "http://www.i-behavior.com/": [
- "i-behavior.com",
- "ib-ibi.com"
- ]
- }
- },
- {
- "IBM": {
- "http://www.ibm.com/": [
- "unica.com"
- ]
- }
- },
- {
- "ID5": {
- "http://id5.io/": [
- "id5-sync.com"
- ]
- }
- },
- {
- "IDG": {
- "http://www.idg.com/": [
- "idg.com",
- "idgtechnetwork.com"
- ]
- }
- },
- {
- "iEntry": {
- "http://www.ientry.com/": [
- "600z.com",
- "ientry.com"
- ]
- }
- },
- {
- "IgnitAd": {
- "http://www.ignitad.com/": [
- "ignitad.com"
- ]
- }
- },
- {
- "IgnitionOne": {
- "http://www.ignitionone.com/": [
- "ignitionone.com",
- "ignitionone.net",
- "searchignite.com"
- ]
- }
- },
- {
- "Improve Digital": {
- "www.improvedigital.com/": [
- "360yield.com",
- "improvedigital.com"
- ]
- }
- },
- {
- "Inadco": {
- "http://www.inadco.com/": [
- "anadcoads.com",
- "inadco.com",
- "inadcoads.com"
- ]
- }
- },
- {
- "IndexExchange": {
- "https://www.indexexchange.com": [
- "indexexchange.com"
- ]
- }
- },
- {
- "Infectious Media": {
- "http://www.infectiousmedia.com/": [
- "impressiondesk.com",
- "infectiousmedia.com"
- ]
- }
- },
- {
- "Inflection Point Media": {
- "http://www.inflectionpointmedia.com/": [
- "inflectionpointmedia.com"
- ]
- }
- },
- {
- "Infogroup": {
- "http://www.infogroup.com/": [
- "infogroup.com"
- ]
- }
- },
- {
- "Infolinks": {
- "http://www.infolinks.com/": [
- "infolinks.com"
- ]
- }
- },
- {
- "Infra-Ad": {
- "http://www.infra-ad.com/": [
- "infra-ad.com"
- ]
- }
- },
- {
- "InMobi": {
- "http://www.inmobi.com/": [
- "aerserv.com",
- "inmobi.com",
- "sproutinc.com"
- ]
- }
- },
- {
- "inneractive": {
- "http://inner-active.com/": [
- "inner-active.com"
- ]
- }
- },
- {
- "Innity": {
- "http://innity.com/": [
- "innity.com"
- ]
- }
- },
- {
- "InsightExpress": {
- "http://www.insightexpress.com/": [
- "insightexpress.com",
- "insightexpressai.com"
- ]
- }
- },
- {
- "InSkin Media": {
- "http://inskinmedia.com/": [
- "inskinmedia.com"
- ]
- }
- },
- {
- "Instinctive": {
- "https://instinctive.io/": [
- "instinctive.io",
- "instinctiveads.com"
- ]
- }
- },
- {
- "Integral Ad Science": {
- "https://integralads.com/": [
- "adsafemedia.com",
- "adsafeprotected.com",
- "iasds01.com",
- "integralads.com"
- ]
- }
- },
- {
- "Intent Media": {
- "http://www.intentmedia.com/": [
- "intentmedia.com",
- "intentmedia.net"
- ]
- }
- },
- {
- "Intergi": {
- "http://intergi.com/": [
- "intergi.com"
- ]
- }
- },
- {
- "Intermarkets": {
- "http://www.intermarkets.net/": [
- "intermarkets.net"
- ]
- }
- },
- {
- "Intermundo Media": {
- "http://intermundomedia.com/": [
- "intermundomedia.com"
- ]
- }
- },
- {
- "Internet Brands": {
- "http://www.internetbrands.com/": [
- "ibpxl.com",
- "internetbrands.com"
- ]
- }
- },
- {
- "Interpolls": {
- "http://www.interpolls.com/": [
- "interpolls.com"
- ]
- }
- },
- {
- "Inuvo": {
- "http://inuvo.com/": [
- "inuvo.com"
- ]
- }
- },
- {
- "InvestingChannel": {
- "http://investingchannel.com/": [
- "investingchannel.com"
- ]
- }
- },
- {
- "IponWeb": {
- "https://www.iponweb.com/": [
- "iponweb.com",
- "iponweb.net"
- ]
- }
- },
- {
- "iPROM": {
- "http://www.iprom.si/": [
- "centraliprom.com",
- "iprom.net",
- "iprom.si",
- "mediaiprom.com"
- ]
- }
- },
- {
- "iPromote": {
- "http://www.ipromote.com/": [
- "ipromote.com"
- ]
- }
- },
- {
- "iProspect": {
- "http://www.iprospect.com/": [
- "clickmanage.com",
- "iprospect.com"
- ]
- }
- },
- {
- "ISI Technologies": {
- "http://digbro.com/": [
- "adversalservers.com",
- "digbro.com"
- ]
- }
- },
- {
- "ismatlab.com": {
- "http://ismatlab.com": [
- "ismatlab.com"
- ]
- }
- },
- {
- "I.UA": {
- "http://www.i.ua/": [
- "i.ua"
- ]
- }
- },
- {
- "Jaroop": {
- "http://www.jaroop.com/": [
- "jaroop.com"
- ]
- }
- },
- {
- "JasperLabs": {
- "http://www.jasperlabs.com/": [
- "jasperlabs.com"
- ]
- }
- },
- {
- "Jemm": {
- "http://jemmgroup.com/": [
- "jemmgroup.com"
- ]
- }
- },
- {
- "Jink": {
- "http://www.jink.de/": [
- "jink.de",
- "jinkads.com"
- ]
- }
- },
- {
- "Jirbo": {
- "http://jirbo.com/": [
- "adcolony.com",
- "jirbo.com"
- ]
- }
- },
- {
- "Jivox": {
- "http://www.jivox.com/": [
- "jivox.com"
- ]
- }
- },
- {
- "JobThread": {
- "http://www.jobthread.com/": [
- "jobthread.com"
- ]
- }
- },
- {
- "JuicyAds": {
- "http://www.juicyads.com/": [
- "juicyads.com"
- ]
- }
- },
- {
- "Jumptap": {
- "http://www.jumptap.com/": [
- "jumptap.com"
- ]
- }
- },
- {
- "justuno": {
- "https://www.justuno.com/": [
- "justuno.com"
- ]
- }
- },
- {
- "Kargo": {
- "https://kargo.com/": [
- "kargo.com"
- ]
- }
- },
- {
- "Kenshoo": {
- "http://www.kenshoo.com/": [
- "kenshoo.com",
- "xg4ken.com"
- ]
- }
- },
- {
- "Keyade": {
- "http://www.keyade.com/": [
- "keyade.com"
- ]
- }
- },
- {
- "Keywee": {
- "https://keywee.co": [
- "keywee.co"
- ]
- }
- },
- {
- "KissMyAds": {
- "http://kissmyads.com/": [
- "kissmyads.com"
- ]
- }
- },
- {
- "Kitara Media": {
- "http://www.kitaramedia.com/": [
- "103092804.com",
- "kitaramedia.com"
- ]
- }
- },
- {
- "KIT digital": {
- "http://kitd.com/": [
- "keewurd.com",
- "kitd.com",
- "peerset.com"
- ]
- }
- },
- {
- "Kokteyl": {
- "http://www.kokteyl.com/": [
- "admost.com",
- "kokteyl.com"
- ]
- }
- },
- {
- "Komli": {
- "http://www.komli.com/": [
- "komli.com"
- ]
- }
- },
- {
- "Kontera": {
- "http://www.kontera.com/": [
- "kontera.com"
- ]
- }
- },
- {
- "Korrelate": {
- "http://korrelate.com/": [
- "adsummos.com",
- "adsummos.net",
- "korrelate.com"
- ]
- }
- },
- {
- "Krux": {
- "http://www.krux.com/": [
- "krux.com",
- "kruxdigital.com",
- "krxd.net"
- ]
- }
- },
- {
- "Lakana": {
- "http://www.lakana.com/": [
- "ibsys.com",
- "lakana.com"
- ]
- }
- },
- {
- "Layer-Ad.org": {
- "http://layer-ad.org/": [
- "layer-ad.org"
- ]
- }
- },
- {
- "Layer Ads": {
- "http://layer-ads.net/": [
- "layer-ads.net"
- ]
- }
- },
- {
- "LeadBolt": {
- "http://www.leadbolt.com/": [
- "leadbolt.com"
- ]
- }
- },
- {
- "LeadFormix": {
- "http://www.leadformix.com/": [
- "leadforce1.com",
- "leadformix.com"
- ]
- }
- },
- {
- "LeanPlum": {
- "https://www.leanplum.com/": [
- "leanplum.com"
- ]
- }
- },
- {
- "Legolas Media": {
- "http://www.legolas-media.com/": [
- "legolas-media.com"
- ]
- }
- },
- {
- "Levexis": {
- "http://www.levexis.com/": [
- "levexis.com"
- ]
- }
- },
- {
- "Lexos Media": {
- "http://www.lexosmedia.com/": [
- "adbull.com",
- "lexosmedia.com"
- ]
- }
- },
- {
- "LifeStreet": {
- "http://lifestreetmedia.com/": [
- "lfstmedia.com",
- "lifestreetmedia.com"
- ]
- }
- },
- {
- "LinkConnector": {
- "http://www.linkconnector.com/": [
- "linkconnector.com"
- ]
- }
- },
- {
- "LinkShare": {
- "http://www.linkshare.com/": [
- "linkshare.com",
- "linksynergy.com"
- ]
- }
- },
- {
- "Linkz": {
- "http://www.linkz.net/": [
- "linkz.net"
- ]
- }
- },
- {
- "Listrak": {
- "http://www.listrak.com/": [
- "listrak.com",
- "listrakbi.com"
- ]
- }
- },
- {
- "LiveIntent": {
- "http://www.liveintent.com/": [
- "liadm.com",
- "liveintent.com"
- ]
- }
- },
- {
- "LiveInternet": {
- "http://www.liveinternet.ru": [
- "liveinternet.ru",
- "yadro.ru"
- ]
- }
- },
- {
- "LiveRamp": {
- "https://liveramp.com/": [
- "liveramp.com",
- "tvpixel.com"
- ]
- }
- },
- {
- "LKQD": {
- "http://lkqd.com": [
- "lkqd.com",
- "lkqd.net"
- ]
- }
- },
- {
- "Local Yokel Media": {
- "http://www.localyokelmedia.com/": [
- "localyokelmedia.com"
- ]
- }
- },
- {
- "Localytics": {
- "https://www.localytics.com/": [
- "localytics.com"
- ]
- }
- },
- {
- "LockerDome": {
- "https://lockerdome.com/": [
- "lockerdome.com"
- ]
- }
- },
- {
- "Longboard Media": {
- "http://longboardmedia.com/": [
- "longboardmedia.com"
- ]
- }
- },
- {
- "Loomia": {
- "http://www.loomia.com/": [
- "loomia.com"
- ]
- }
- },
- {
- "LoopFuse": {
- "https://www.loopfuse.net/": [
- "lfov.net",
- "loopfuse.net"
- ]
- }
- },
- {
- "LoopMe": {
- "https://loopme.com/": [
- "loopme.com"
- ]
- }
- },
- {
- "LotLinx": {
- "https://www.lotlinx.com": [
- "lotlinx.com"
- ]
- }
- },
- {
- "Lower My Bills": {
- "http://lowermybills.com": [
- "lowermybills.com"
- ]
- }
- },
- {
- "lptracker": {
- "https://lptracker.io/": [
- "lptracker.io"
- ]
- }
- },
- {
- "LucidMedia": {
- "http://www.lucidmedia.com/": [
- "lucidmedia.com"
- ]
- }
- },
- {
- "m6d": {
- "http://m6d.com/": [
- "m6d.com",
- "media6degrees.com"
- ]
- }
- },
- {
- "Madhouse": {
- "http://www.madhouse.cn/": [
- "madhouse.cn"
- ]
- }
- },
- {
- "Madison Logic": {
- "http://www.madisonlogic.com/": [
- "dinclinx.com",
- "madisonlogic.com"
- ]
- }
- },
- {
- "madvertise": {
- "http://madvertise.com/": [
- "madvertise.com"
- ]
- }
- },
- {
- "Magnetic": {
- "http://www.magnetic.com/": [
- "domdex.com",
- "domdex.net",
- "magnetic.com",
- "qjex.net"
- ]
- }
- },
- {
- "Magnify360": {
- "http://www.magnify360.com/": [
- "dialogmgr.com",
- "magnify360.com"
- ]
- }
- },
- {
- "MailChimp": {
- "http://mailchimp.com/": [
- "campaign-archive1.com",
- "list-manage.com",
- "mailchimp.com"
- ]
- }
- },
- {
- "Manifest": {
- "http://www.manifest.ru/": [
- "bannerbank.ru",
- "manifest.ru"
- ]
- }
- },
- {
- "Marchex": {
- "http://www.marchex.com/": [
- "industrybrains.com",
- "marchex.com"
- ]
- }
- },
- {
- "Marimedia": {
- "http://www.marimedia.net/": [
- "marimedia.net"
- ]
- }
- },
- {
- "MarketGid": {
- "http://www.marketgid.com/": [
- "dt00.net",
- "dt07.net",
- "marketgid.com"
- ]
- }
- },
- {
- "Marketo": {
- "http://www.marketo.com/": [
- "marketo.com",
- "marketo.net"
- ]
- }
- },
- {
- "Martini Media": {
- "http://martinimedianetwork.com/": [
- "martiniadnetwork.com",
- "martinimedianetwork.com"
- ]
- }
- },
- {
- "mashero": {
- "http://www.mashero.com/": [
- "mashero.com"
- ]
- }
- },
- {
- "Match.com": {
- "http://www.match.com/": [
- "chemistry.com",
- "match.com",
- "meetic-partners.com"
- ]
- }
- },
- {
- "Matomy": {
- "http://www.matomy.com/": [
- "adnetinteractive.com",
- "adsmarket.com",
- "matomy.com",
- "matomymarket.com",
- "matomymedia.com",
- "mediawhiz.com",
- "optimatic.com",
- "xtendmedia.com"
- ]
- }
- },
- {
- "MaxBounty": {
- "http://www.maxbounty.com/": [
- "maxbounty.com",
- "mb01.com"
- ]
- }
- },
- {
- "MaxPoint": {
- "http://maxpointinteractive.com/": [
- "maxpointinteractive.com",
- "maxusglobal.com",
- "mxptint.net"
- ]
- }
- },
- {
- "MdotM": {
- "http://mdotm.com/": [
- "mdotm.com"
- ]
- }
- },
- {
- "MediaBrix": {
- "http://www.mediabrix.com/": [
- "mediabrix.com"
- ]
- }
- },
- {
- "MediaCom": {
- "http://www.mediacom.com/": [
- "mediacom.com"
- ]
- }
- },
- {
- "mediaFORGE": {
- "http://www.mediaforge.com/": [
- "mediaforge.com"
- ]
- }
- },
- {
- "Medialets": {
- "http://www.medialets.com/": [
- "medialets.com"
- ]
- }
- },
- {
- "MediaMath": {
- "http://www.mediamath.com/": [
- "adroitinteractive.com",
- "designbloxlive.com",
- "mathtag.com",
- "mediamath.com"
- ]
- }
- },
- {
- "media.net": {
- "http://www.media.net/": [
- "media.net"
- ]
- }
- },
- {
- "Mediaocean": {
- "http://www.mediaocean.com/": [
- "adbuyer.com",
- "mediaocean.com"
- ]
- }
- },
- {
- "MediaShakers": {
- "http://www.mediashakers.com/": [
- "media-servers.net",
- "mediashakers.com"
- ]
- }
- },
- {
- "MediaTrust": {
- "http://www.mediatrust.com/": [
- "mediatrust.com"
- ]
- }
- },
- {
- "Medicx Media Solutions": {
- "http://www.medicxmedia.com/": [
- "medicxmedia.com"
- ]
- }
- },
- {
- "MegaIndex": {
- "http://www.megaindex.ru/": [
- "megaindex.ru"
- ]
- }
- },
- {
- "Mercent": {
- "http://www.mercent.com/": [
- "mercent.com"
- ]
- }
- },
- {
- "MerchantAdvantage": {
- "http://www.merchantadvantage.com/": [
- "merchantadvantage.com"
- ]
- }
- },
- {
- "Merchenta": {
- "http://www.merchenta.com/": [
- "merchenta.com"
- ]
- }
- },
- {
- "Merkle": {
- "https://www.merkleinc.com/": [
- "rimmkaufman.com",
- "rkdms.com"
- ]
- }
- },
- {
- "Meta Network": {
- "http://www.metanetwork.com/": [
- "metanetwork.com"
- ]
- }
- },
- {
- "Meteor": {
- "http://www.meteorsolutions.com/": [
- "meteorsolutions.com"
- ]
- }
- },
- {
- "MetrixLab": {
- "https://www.metrixlab.com": [
- "adoftheyear.com",
- "crm-metrix.com",
- "customerconversio.com",
- "metrixlab.com",
- "opinionbar.com"
- ]
- }
- },
- {
- "MicroAd": {
- "http://www.microad.jp/": [
- "microad.jp"
- ]
- }
- },
- {
- "Microsoft": {
- "http://www.microsoft.com/": [
- "adbureau.net",
- "adecn.com",
- "aquantive.com",
- "msads.net",
- "netconversions.com",
- "roiservice.com"
- ]
- }
- },
- {
- "Millennial Media": {
- "http://www.millennialmedia.com/": [
- "decktrade.com",
- "millennialmedia.com",
- "mydas.mobi"
- ]
- }
- },
- {
- "Mindset Media": {
- "http://www.mindset-media.com/": [
- "mindset-media.com",
- "mmismm.com"
- ]
- }
- },
- {
- "Mirando": {
- "http://www.mirando.de/": [
- "mirando.de"
- ]
- }
- },
- {
- "Mixpo": {
- "http://www.mixpo.com/": [
- "mixpo.com"
- ]
- }
- },
- {
- "Moat": {
- "http://www.moat.com/": [
- "moat.com",
- "moatads.com"
- ]
- }
- },
- {
- "MobFox": {
- "http://www.mobfox.com/": [
- "mobfox.com"
- ]
- }
- },
- {
- "Mobials": {
- "http://mobials.com": [
- "mobials.com"
- ]
- }
- },
- {
- "MobileAdTrading": {
- "https://mobileadtrading.com/": [
- "mobileadtrading.com"
- ]
- }
- },
- {
- "Mobile Meteor": {
- "http://mobilemeteor.com/": [
- "mobilemeteor.com",
- "showmeinn.com"
- ]
- }
- },
- {
- "Mobile Storm": {
- "http://mobilestorm.com/": [
- "mobilestorm.com"
- ]
- }
- },
- {
- "MobVision": {
- "http://www.mobvision.com/": [
- "admoda.com",
- "mobvision.com"
- ]
- }
- },
- {
- "Mocean Mobile": {
- "http://www.moceanmobile.com/": [
- "moceanmobile.com"
- ]
- }
- },
- {
- "Mochila": {
- "http://www.mochila.com/": [
- "mochila.com"
- ]
- }
- },
- {
- "Mojiva": {
- "http://www.mojiva.com/": [
- "mojiva.com"
- ]
- }
- },
- {
- "Monetate": {
- "http://monetate.com/": [
- "monetate.com",
- "monetate.net"
- ]
- }
- },
- {
- "MONETIZEdigital": {
- "https://www.cpalead.com/": [
- "cpalead.com"
- ]
- }
- },
- {
- "Monetize More": {
- "http://monetizemore.com/": [
- "monetizemore.com"
- ]
- }
- },
- {
- "Monoloop": {
- "http://www.monoloop.com/": [
- "monoloop.com"
- ]
- }
- },
- {
- "Monster": {
- "http://www.monster.com/": [
- "monster.com"
- ]
- }
- },
- {
- "Moolah Media": {
- "http://www.moolahmedia.com/": [
- "moolah-media.com",
- "moolahmedia.com"
- ]
- }
- },
- {
- "MoPub": {
- "http://www.mopub.com/": [
- "mopub.com"
- ]
- }
- },
- {
- "MovieLush.com": {
- "https://www.movielush.com/": [
- "affbuzzads.com",
- "movielush.com"
- ]
- }
- },
- {
- "Multiple Stream Media": {
- "http://www.multiplestreammktg.com/": [
- "adclickmedia.com",
- "multiplestreammktg.com"
- ]
- }
- },
- {
- "MUNDO Media": {
- "http://www.mundomedia.com/": [
- "mundomedia.com",
- "silver-path.com"
- ]
- }
- },
- {
- "MyCounter": {
- "http://mycounter.com.ua/": [
- "mycounter.com.ua"
- ]
- }
- },
- {
- "MyPressPlus": {
- "http://www.mypressplus.com/": [
- "mypressplus.com",
- "ppjol.net"
- ]
- }
- },
- {
- "myThings": {
- "http://www.mythings.com/": [
- "mythings.com",
- "mythingsmedia.com"
- ]
- }
- },
- {
- "MyWebGrocer": {
- "http://www.mywebgrocer.com/": [
- "mywebgrocer.com"
- ]
- }
- },
- {
- "Nanigans": {
- "http://www.nanigans.com/": [
- "nanigans.com"
- ]
- }
- },
- {
- "NativeAds": {
- "https://nativeads.com/": [
- "nativeads.com"
- ]
- }
- },
- {
- "Nativo": {
- "http://www.nativo.net/": [
- "postrelease.com"
- ]
- }
- },
- {
- "Navegg": {
- "http://www.navegg.com/": [
- "navdmp.com",
- "navegg.com"
- ]
- }
- },
- {
- "NetAffiliation": {
- "http://www.netaffiliation.com/": [
- "netaffiliation.com"
- ]
- }
- },
- {
- "NetBina": {
- "http://www.netbina.com/": [
- "netbina.com"
- ]
- }
- },
- {
- "NetElixir": {
- "http://www.netelixir.com/": [
- "adelixir.com",
- "netelixir.com"
- ]
- }
- },
- {
- "Netmining": {
- "http://www.netmining.com/": [
- "netmining.com",
- "netmng.com"
- ]
- }
- },
- {
- "Net-Results": {
- "http://www.net-results.com/": [
- "cdnma.com",
- "net-results.com",
- "nr7.us"
- ]
- }
- },
- {
- "NetSeer": {
- "http://www.netseer.com/": [
- "netseer.com"
- ]
- }
- },
- {
- "NetShelter": {
- "http://netshelter.com/": [
- "netshelter.com",
- "netshelter.net"
- ]
- }
- },
- {
- "Neustar": {
- "http://www.neustar.biz/": [
- "adadvisor.net",
- "neustar.biz"
- ]
- }
- },
- {
- "newtention": {
- "http://newtention.de/": [
- "newtention.de",
- "newtention.net",
- "newtentionassets.net"
- ]
- }
- },
- {
- "Nexage": {
- "http://nexage.com/": [
- "nexage.com"
- ]
- }
- },
- {
- "Nextag": {
- "http://www.nextag.com/": [
- "nextag.com"
- ]
- }
- },
- {
- "NextPerformance": {
- "http://www.nextperformance.com/": [
- "nextperformance.com",
- "nxtck.com"
- ]
- }
- },
- {
- "Nielsen": {
- "http://www.nielsen.com/": [
- "imrworldwide.com",
- "imrworldwide.net"
- ]
- }
- },
- {
- "Ninua": {
- "http://www.ninua.com/": [
- "networkedblogs.com",
- "ninua.com"
- ]
- }
- },
- {
- "Nokta": {
- "http://www.noktamedya.com/": [
- "noktamedya.com",
- "virgul.com"
- ]
- }
- },
- {
- "NowSpots": {
- "http://nowspots.com/": [
- "nowspots.com"
- ]
- }
- },
- {
- "nrelate": {
- "http://nrelate.com/": [
- "nrelate.com"
- ]
- }
- },
- {
- "Nuffnang": {
- "http://www.nuffnang.com.my/": [
- "nuffnang.com",
- "nuffnang.com.my"
- ]
- }
- },
- {
- "nugg.ad": {
- "http://www.nugg.ad/": [
- "nugg.ad",
- "nuggad.net"
- ]
- }
- },
- {
- "Ohana Media": {
- "http://www.ohana-media.com/": [
- "adohana.com",
- "ohana-media.com",
- "ohanaqb.com"
- ]
- }
- },
- {
- "Omnicom Group": {
- "http://www.omnicomgroup.com/": [
- "accuenmedia.com",
- "omnicomgroup.com",
- "p-td.com"
- ]
- }
- },
- {
- "onAd": {
- "http://www.onad.eu/": [
- "onad.eu"
- ]
- }
- },
- {
- "Onclusive": {
- "https://onclusive.com/": [
- "airpr.com"
- ]
- }
- },
- {
- "OneAd": {
- "https://www.onead.com.tw/": [
- "guoshipartners.com",
- "onevision.com.tw"
- ]
- }
- },
- {
- "One iota": {
- "http://www.itsoneiota.com/": [
- "itsoneiota.com",
- "oneiota.co.uk"
- ]
- }
- },
- {
- "Oneupweb": {
- "http://www.oneupweb.com/": [
- "oneupweb.com",
- "sodoit.com"
- ]
- }
- },
- {
- "OnlineMetrix": {
- "http://h.online-metrix.net": [
- "online-metrix.net"
- ]
- }
- },
- {
- "Open New Media": {
- "http://www.onm.de/": [
- "onm.de"
- ]
- }
- },
- {
- "OpenX": {
- "http://openx.com/": [
- "liftdna.com",
- "openx.com",
- "openx.net",
- "openx.org",
- "openxenterprise.com",
- "servedbyopenx.com"
- ]
- }
- },
- {
- "Opera": {
- "http://www.opera.com/": [
- "mobiletheory.com",
- "opera.com",
- "operamediaworks.com",
- "operasoftware.com"
- ]
- }
- },
- {
- "OPT": {
- "http://www.opt.ne.jp/": [
- "advg.jp",
- "opt.ne.jp",
- "p-advg.com"
- ]
- }
- },
- {
- "Optify": {
- "http://www.optify.net/": [
- "optify.net"
- ]
- }
- },
- {
- "Optimal": {
- "http://optim.al/": [
- "cpmadvisors.com",
- "cpmatic.com",
- "nprove.com",
- "optim.al",
- "orbengine.com",
- "xa.net"
- ]
- }
- },
- {
- "OptimumResponse": {
- "http://www.optimumresponse.com/": [
- "optimumresponse.com"
- ]
- }
- },
- {
- "OptinMonster": {
- "https://optinmonster.com/": [
- "optinmonster.com",
- "optnmstr.com"
- ]
- }
- },
- {
- "OptMD": {
- "http://optmd.com/": [
- "optmd.com"
- ]
- }
- },
- {
- "Oracle": {
- "http://www.oracle.com/": [
- "estara.com"
- ]
- }
- },
- {
- "OrangeSoda": {
- "http://www.orangesoda.com/": [
- "orangesoda.com",
- "otracking.com"
- ]
- }
- },
- {
- "Outbrain": {
- "http://www.outbrain.com/": [
- "outbrain.com",
- "sphere.com",
- "visualrevenue.com"
- ]
- }
- },
- {
- "Out There Media": {
- "http://www.out-there-media.com/": [
- "out-there-media.com"
- ]
- }
- },
- {
- "Oversee.net": {
- "http://www.oversee.net/": [
- "dsnextgen.com",
- "oversee.net"
- ]
- }
- },
- {
- "OwnerIQ": {
- "http://www.owneriq.com/": [
- "owneriq.com",
- "owneriq.net"
- ]
- }
- },
- {
- "OxaMedia": {
- "http://www.oxamedia.com/": [
- "adconnexa.com",
- "adsbwm.com",
- "oxamedia.com"
- ]
- }
- },
- {
- "PageFair": {
- "https://pagefair.com/": [
- "pagefair.com",
- "pagefair.net"
- ]
- }
- },
- {
- "Paid-To-Promote.net": {
- "http://www.paid-to-promote.net/": [
- "paid-to-promote.net"
- ]
- }
- },
- {
- "Pardot": {
- "http://www.pardot.com/": [
- "pardot.com"
- ]
- }
- },
- {
- "PayHit": {
- "http://www.payhit.com/": [
- "payhit.com"
- ]
- }
- },
- {
- "Paypopup.com": {
- "http://www.paypopup.com/": [
- "lzjl.com",
- "paypopup.com"
- ]
- }
- },
- {
- "PebblePost": {
- "https://www.pebblepost.com/": [
- "pbbl.co"
- ]
- }
- },
- {
- "Peer39": {
- "http://www.peer39.com/": [
- "peer39.com",
- "peer39.net"
- ]
- }
- },
- {
- "PeerFly": {
- "http://peerfly.com/": [
- "peerfly.com"
- ]
- }
- },
- {
- "Performancing": {
- "http://performancing.com/": [
- "performancing.com"
- ]
- }
- },
- {
- "PerimeterX": {
- "https://www.perimeterx.com": [
- "perimeterx.net"
- ]
- }
- },
- {
- "Pheedo": {
- "http://site.pheedo.com/": [
- "pheedo.com"
- ]
- }
- },
- {
- "Pictela": {
- "http://www.pictela.com/": [
- "pictela.com",
- "pictela.net"
- ]
- }
- },
- {
- "PinPoll": {
- "https://pinpoll.com/": [
- "pinpoll.com"
- ]
- }
- },
- {
- "Pixel.sg": {
- "http://www.pixel.sg/": [
- "pixel.sg"
- ]
- }
- },
- {
- "Piximedia": {
- "http://www.piximedia.com/": [
- "piximedia.com"
- ]
- }
- },
- {
- "Pixlee": {
- "https://www.pixlee.com/": [
- "pixlee.com"
- ]
- }
- },
- {
- "PLATFORM ONE": {
- "http://www.platform-one.co.jp/": [
- "platform-one.co.jp"
- ]
- }
- },
- {
- "plista": {
- "http://www.plista.com/": [
- "plista.com"
- ]
- }
- },
- {
- "PocketCents": {
- "http://pocketcents.com/": [
- "pocketcents.com"
- ]
- }
- },
- {
- "Polar Mobile": {
- "http://polarmobile.com": [
- "mediavoice.com",
- "polarmobile.com"
- ]
- }
- },
- {
- "Politads": {
- "http://politads.com/": [
- "politads.com"
- ]
- }
- },
- {
- "Polymorph": {
- "http://getpolymorph.com/": [
- "adsnative.com",
- "getpolymorph.com"
- ]
- }
- },
- {
- "Pontiflex": {
- "http://www.pontiflex.com/": [
- "pontiflex.com"
- ]
- }
- },
- {
- "PopAds": {
- "https://www.popads.net/": [
- "popads.net",
- "popadscdn.net"
- ]
- }
- },
- {
- "PopRule": {
- "http://poprule.com/": [
- "gocampaignlive.com",
- "poprule.com"
- ]
- }
- },
- {
- "Popunder.ru": {
- "http://popunder.ru/": [
- "popunder.ru"
- ]
- }
- },
- {
- "Po.st": {
- "http://www.po.st/": [
- "po.st"
- ]
- }
- },
- {
- "Powerlinks": {
- "https://www.powerlinks.com/": [
- "powerlinks.com"
- ]
- }
- },
- {
- "PPCProtect": {
- "https://ppcprotect.com": [
- "ppcprotect.com"
- ]
- }
- },
- {
- "PrecisionClick": {
- "http://www.precisionclick.com/": [
- "precisionclick.com"
- ]
- }
- },
- {
- "PredictAd": {
- "http://www.predictad.com/": [
- "predictad.com"
- ]
- }
- },
- {
- "Pressflex": {
- "http://www.pressflex.com/": [
- "blogads.com",
- "pressflex.com"
- ]
- }
- },
- {
- "Prime Visibility": {
- "http://www.primevisibility.com/": [
- "adcde.com",
- "addlvr.com",
- "adonnetwork.com",
- "adonnetwork.net",
- "adtrgt.com",
- "bannertgt.com",
- "cptgt.com",
- "cpvfeed.com",
- "cpvtgt.com",
- "dashboardad.net",
- "popcde.com",
- "primevisibility.com",
- "sdfje.com",
- "urtbk.com"
- ]
- }
- },
- {
- "Primis": {
- "https://www.primis.tech": [
- "sekindo.com"
- ]
- }
- },
- {
- "PrismApp": {
- "https://www.prismapp.io/": [
- "prismapp.io"
- ]
- }
- },
- {
- "Proclivity": {
- "http://www.proclivitymedia.com/": [
- "proclivitymedia.com",
- "proclivitysystems.com",
- "pswec.com"
- ]
- }
- },
- {
- "Project Wonderful": {
- "http://www.projectwonderful.com/": [
- "projectwonderful.com"
- ]
- }
- },
- {
- "PrometheusIntelligenceTechnology": {
- "https://prometheusintelligencetechnology.com/": [
- "prometheusintelligencetechnology.com"
- ]
- }
- },
- {
- "Propeller Ads": {
- "http://propellerads.com/": [
- "propellerads.com"
- ]
- }
- },
- {
- "Prosperent": {
- "http://prosperent.com/": [
- "prosperent.com"
- ]
- }
- },
- {
- "Protected Media": {
- "http://www.protected.media/": [
- "ad-score.com",
- "protected.media"
- ]
- }
- },
- {
- "Provers": {
- "http://provers.pro": [
- "provers.pro"
- ]
- }
- },
- {
- "Psonstrentie": {
- "http://psonstrentie.info": [
- "psonstrentie.info"
- ]
- }
- },
- {
- "Public-Idées": {
- "http://www.publicidees.com/": [
- "publicidees.com"
- ]
- }
- },
- {
- "Publishers Clearing House": {
- "http://www.pch.com/": [
- "pch.com"
- ]
- }
- },
- {
- "PubMatic": {
- "http://www.pubmatic.com/": [
- "pubmatic.com",
- "revinet.com"
- ]
- }
- },
- {
- "PulsePoint": {
- "https://www.pulsepoint.com/": [
- "pulsepoint.com"
- ]
- }
- },
- {
- "quadrantOne": {
- "http://www.quadrantone.com/": [
- "quadrantone.com"
- ]
- }
- },
- {
- "Quake Marketing": {
- "http://quakemarketing.com/": [
- "quakemarketing.com"
- ]
- }
- },
- {
- "Quantcast": {
- "http://www.quantcast.com/": [
- "quantcast.com",
- "quantcount.com",
- "quantserve.com"
- ]
- }
- },
- {
- "QuantumAdvertising": {
- "http://quantum-advertising.com": [
- "quantum-advertising.com"
- ]
- }
- },
- {
- "QuinStreet": {
- "http://quinstreet.com/": [
- "qnsr.com",
- "qsstats.com",
- "quinstreet.com"
- ]
- }
- },
- {
- "QUISMA": {
- "https://quisma.com/": [
- "iaded.com",
- "quisma.com",
- "quismatch.com",
- "xaded.com",
- "xmladed.com"
- ]
- }
- },
- {
- "Radial": {
- "https://www.radial.com": [
- "gsicommerce.com",
- "gsimedia.net"
- ]
- }
- },
- {
- "Radiate Media": {
- "http://www.radiatemedia.com/": [
- "matchbin.com",
- "radiatemedia.com"
- ]
- }
- },
- {
- "RadiumOne": {
- "http://www.radiumone.com/": [
- "gwallet.com",
- "radiumone.com"
- ]
- }
- },
- {
- "Radius Marketing": {
- "http://www.radiusmarketing.com/": [
- "radiusmarketing.com"
- ]
- }
- },
- {
- "Rambler": {
- "http://www.rambler.ru/": [
- "rambler.ru"
- ]
- }
- },
- {
- "Rapleaf": {
- "http://www.rapleaf.com/": [
- "rapleaf.com",
- "rlcdn.com"
- ]
- }
- },
- {
- "ReachLocal": {
- "http://www.reachlocal.com/": [
- "reachlocal.com",
- "rlcdn.net"
- ]
- }
- },
- {
- "React2Media": {
- "http://www.react2media.com/": [
- "react2media.com"
- ]
- }
- },
- {
- "Redux Media": {
- "http://reduxmedia.com/": [
- "reduxmedia.com"
- ]
- }
- },
- {
- "Rekko": {
- "http://rekko.com/": [
- "convertglobal.com",
- "rekko.com"
- ]
- }
- },
- {
- "Reklamport": {
- "http://www.reklamport.com/": [
- "reklamport.com"
- ]
- }
- },
- {
- "Reklam Store": {
- "http://reklamstore.com/": [
- "reklamstore.com"
- ]
- }
- },
- {
- "Reklamz": {
- "http://www.reklamz.com/": [
- "reklamz.com"
- ]
- }
- },
- {
- "Relevad": {
- "http://www.relevad.com/": [
- "relestar.com",
- "relevad.com"
- ]
- }
- },
- {
- "Renegade Internet": {
- "http://www.renegadeinternet.com/": [
- "advertserve.com",
- "renegadeinternet.com"
- ]
- }
- },
- {
- "Reporo": {
- "http://www.reporo.com/": [
- "buzzcity.com"
- ]
- }
- },
- {
- "ResolutionMedia": {
- "https://nonstoppartner.net/": [
- "nonstoppartner.net"
- ]
- }
- },
- {
- "Resolution Media": {
- "http://resolutionmedia.com/": [
- "resolutionmedia.com"
- ]
- }
- },
- {
- "Resonate": {
- "http://www.resonateinsights.com/": [
- "reson8.com",
- "resonateinsights.com",
- "resonatenetworks.com"
- ]
- }
- },
- {
- "Responsys": {
- "http://www.responsys.com/": [
- "responsys.com"
- ]
- }
- },
- {
- "ReTargeter": {
- "http://www.retargeter.com/": [
- "retargeter.com"
- ]
- }
- },
- {
- "Retirement Living": {
- "www.retirement-living.com/": [
- "blvdstatus.com",
- "retirement-living.com"
- ]
- }
- },
- {
- "RevContent": {
- "http://revcontent.com/": [
- "revcontent.com"
- ]
- }
- },
- {
- "RevenueMax": {
- "http://revenuemax.de/": [
- "revenuemax.de"
- ]
- }
- },
- {
- "Rhythm": {
- "http://rhythmnewmedia.com/": [
- "1rx.io",
- "rhythmnewmedia.com",
- "rhythmone.com",
- "rhythmxchange.com",
- "rnmd.net"
- ]
- }
- },
- {
- "RichAudience": {
- "https://richaudience.com/": [
- "richaudience.com"
- ]
- }
- },
- {
- "RichRelevance": {
- "http://www.richrelevance.com/": [
- "richrelevance.com"
- ]
- }
- },
- {
- "RightAction": {
- "http://rightaction.com/": [
- "rightaction.com"
- ]
- }
- },
- {
- "RMBN": {
- "http://rmbn.net/": [
- "rmbn.net",
- "rmbn.ru"
- ]
- }
- },
- {
- "RMM": {
- "http://www.rmmonline.com/": [
- "rmmonline.com"
- ]
- }
- },
- {
- "Rocket Fuel": {
- "http://rocketfuel.com/": [
- "rfihub.com",
- "rfihub.net",
- "rocketfuel.com",
- "ru4.com",
- "xplusone.com"
- ]
- }
- },
- {
- "Rovion": {
- "http://www.rovion.com/": [
- "rovion.com"
- ]
- }
- },
- {
- "rtk": {
- "http://rtk.io/": [
- "rtk.io"
- ]
- }
- },
- {
- "RubiconProject": {
- "http://rubiconproject.com/": [
- "adsbyisocket.com",
- "isocket.com",
- "rubiconproject.com"
- ]
- }
- },
- {
- "RunAds": {
- "http://www.runads.com/": [
- "runads.com",
- "rundsp.com"
- ]
- }
- },
- {
- "RuTarget": {
- "http://www.rutarget.ru/": [
- "rutarget.ru"
- ]
- }
- },
- {
- "Sabavision": {
- "http://www.sabavision.com": [
- "sabavision.com"
- ]
- }
- },
- {
- "Sabre": {
- "http://www.sabre.com/": [
- "reztrack.com",
- "sabre.com",
- "sabrehospitality.com"
- ]
- }
- },
- {
- "Salesforce.com": {
- "http://www.salesforce.com/": [
- "salesforce.com"
- ]
- }
- },
- {
- "Samurai Factory": {
- "http://www.samurai-factory.jp/": [
- "samurai-factory.jp",
- "shinobi.jp"
- ]
- }
- },
- {
- "SAP": {
- "https://www.sap.com": [
- "seewhy.com"
- ]
- }
- },
- {
- "Sapient": {
- "http://www.sapient.com/": [
- "bridgetrack.com",
- "sapient.com"
- ]
- }
- },
- {
- "SAS": {
- "http://www.sas.com/": [
- "aimatch.com",
- "sas.com"
- ]
- }
- },
- {
- "Scandinavian AdNetworks": {
- "http://www.scandinavianadnetworks.com/": [
- "scandinavianadnetworks.com"
- ]
- }
- },
- {
- "Scribol": {
- "http://scribol.com/": [
- "scribol.com"
- ]
- }
- },
- {
- "SearchForce": {
- "http://www.searchforce.com/": [
- "searchforce.com",
- "searchforce.net"
- ]
- }
- },
- {
- "Seevast": {
- "http://www.seevast.com/": [
- "kanoodle.com",
- "pulse360.com",
- "seevast.com",
- "syndigonetworks.com"
- ]
- }
- },
- {
- "Selectable Media": {
- "http://selectablemedia.com/": [
- "nabbr.com",
- "selectablemedia.com"
- ]
- }
- },
- {
- "Semantiqo": {
- "http://semantiqo.com/": [
- "semantiqo.com"
- ]
- }
- },
- {
- "Semasio": {
- "http://www.semasio.com/": [
- "semasio.com",
- "semasio.net"
- ]
- }
- },
- {
- "SevenAds": {
- "http://www.sevenads.net/": [
- "sevenads.net"
- ]
- }
- },
- {
- "SexInYourCity": {
- "http://www.sexinyourcity.com/": [
- "sexinyourcity.com"
- ]
- }
- },
- {
- "ShaftTraffic": {
- "https://shafttraffic.com": [
- "libertystmedia.com"
- ]
- }
- },
- {
- "ShareASale": {
- "http://www.shareasale.com/": [
- "shareasale.com"
- ]
- }
- },
- {
- "Sharethrough": {
- "http://sharethrough.com/": [
- "sharethrough.com"
- ]
- }
- },
- {
- "Shopzilla": {
- "http://www.shopzilla.com/": [
- "shopzilla.com"
- ]
- }
- },
- {
- "Shortest": {
- "http://shorte.st/": [
- "shorte.st"
- ]
- }
- },
- {
- "Silverpop": {
- "http://www.silverpop.com/": [
- "mkt51.net",
- "pages05.net",
- "silverpop.com",
- "vtrenz.net"
- ]
- }
- },
- {
- "Simpli.fi": {
- "http://www.simpli.fi/": [
- "simpli.fi"
- ]
- }
- },
- {
- "SiteScout": {
- "http://www.sitescout.com/": [
- "sitescout.com"
- ]
- }
- },
- {
- "Skimlinks": {
- "http://skimlinks.com/": [
- "skimlinks.com",
- "skimresources.com"
- ]
- }
- },
- {
- "Skupe Net": {
- "http://www.skupenet.com/": [
- "adcentriconline.com",
- "skupenet.com"
- ]
- }
- },
- {
- "Smaato": {
- "http://www.smaato.com/": [
- "smaato.com"
- ]
- }
- },
- {
- "SmartAdServer": {
- "http://smartadserver.com/": [
- "smartadserver.com"
- ]
- }
- },
- {
- "SmartyAds": {
- "https://smartyads.com/": [
- "smartyads.com"
- ]
- }
- },
- {
- "Smiley Media": {
- "http://www.smileymedia.com/": [
- "smileymedia.com"
- ]
- }
- },
- {
- "Smowtion": {
- "http://smowtion.com/": [
- "smowtion.com"
- ]
- }
- },
- {
- "Snap": {
- "http://www.snap.com/": [
- "snap.com"
- ]
- }
- },
- {
- "SocialChorus": {
- "http://www.socialchorus.com/": [
- "halogenmediagroup.com",
- "halogennetwork.com",
- "socialchorus.com"
- ]
- }
- },
- {
- "SocialInterface": {
- "http://socialinterface.com/": [
- "ratevoice.com",
- "socialinterface.com"
- ]
- }
- },
- {
- "SocialTwist": {
- "http://tellafriend.socialtwist.com/": [
- "socialtwist.com"
- ]
- }
- },
- {
- "sociomantic labs": {
- "http://www.sociomantic.com/": [
- "sociomantic.com"
- ]
- }
- },
- {
- "Socital": {
- "https://www.socital.com": [
- "socital.com"
- ]
- }
- },
- {
- "Sojern": {
- "https://www.sojern.com": [
- "sojern.com"
- ]
- }
- },
- {
- "SomoAudience": {
- "https://somoaudience.com/": [
- "somoaudience.com"
- ]
- }
- },
- {
- "Sonobi": {
- "http://sonobi.com/": [
- "sonobi.com"
- ]
- }
- },
- {
- "sophus3": {
- "http://www.sophus3.com/": [
- "sophus3.co.uk",
- "sophus3.com"
- ]
- }
- },
- {
- "Sortable": {
- "https://www.sortable.com/": [
- "deployads.com"
- ]
- }
- },
- {
- "Sovrn": {
- "https://www.sovrn.com/": [
- "sovrn.com"
- ]
- }
- },
- {
- "Space Chimp Media": {
- "http://spacechimpmedia.com/": [
- "spacechimpmedia.com"
- ]
- }
- },
- {
- "Sparklit": {
- "http://www.sparklit.com/": [
- "adbutler.com",
- "sparklit.com"
- ]
- }
- },
- {
- "Spark Studios": {
- "http://www.sparkstudios.com/": [
- "sparkstudios.com"
- ]
- }
- },
- {
- "Specific Media": {
- "http://www.specificmedia.com/": [
- "adviva.co.uk",
- "adviva.net",
- "sitemeter.com",
- "specificclick.net",
- "specificmedia.co.uk",
- "specificmedia.com"
- ]
- }
- },
- {
- "Spectate": {
- "http://spectate.com/": [
- "spectate.com"
- ]
- }
- },
- {
- "Sponge": {
- "http://spongegroup.com/": [
- "spongegroup.com"
- ]
- }
- },
- {
- "Spongecell": {
- "http://www.spongecell.com/": [
- "spongecell.com"
- ]
- }
- },
- {
- "SponsorAds": {
- "http://www.sponsorads.de/": [
- "sponsorads.de"
- ]
- }
- },
- {
- "Spot200": {
- "http://spot200.com/": [
- "spot200.com"
- ]
- }
- },
- {
- "SpotX": {
- "https://www.spotx.tv": [
- "spotx.tv"
- ]
- }
- },
- {
- "SpotXchange": {
- "http://www.spotxchange.com/": [
- "spotxchange.com"
- ]
- }
- },
- {
- "SpringServe": {
- "https://springserve.com/": [
- "springserve.com"
- ]
- }
- },
- {
- "StackAdapt": {
- "https://www.stackadapt.com/": [
- "stackadapt.com"
- ]
- }
- },
- {
- "StarGames": {
- "https://www.stargames.net/": [
- "stargamesaffiliate.com"
- ]
- }
- },
- {
- "SteelHouse": {
- "http://www.steelhouse.com/": [
- "steelhouse.com",
- "steelhousemedia.com"
- ]
- }
- },
- {
- "Storygize": {
- "http://www.storygize.com/": [
- "storygize.com",
- "storygize.net"
- ]
- }
- },
- {
- "Streamray": {
- "http://streamray.com/": [
- "cams.com",
- "streamray.com"
- ]
- }
- },
- {
- "StrikeAd": {
- "http://www.strikead.com/": [
- "strikead.com"
- ]
- }
- },
- {
- "StrongMail": {
- "http://www.strongmail.com/": [
- "popularmedia.com"
- ]
- }
- },
- {
- "Struq": {
- "http://struq.com/": [
- "struq.com"
- ]
- }
- },
- {
- "Sublime Skinz": {
- "http://sublime.xyz/": [
- "ayads.co",
- "sublime.xyz"
- ]
- }
- },
- {
- "Suite 66": {
- "http://www.suite66.com/": [
- "suite66.com"
- ]
- }
- },
- {
- "Summit": {
- "http://www.summit.co.uk/": [
- "summitmedia.co.uk"
- ]
- }
- },
- {
- "Superfish": {
- "http://www.superfish.com/": [
- "superfish.com"
- ]
- }
- },
- {
- "SupersonicAds": {
- "http://www.supersonicads.com/": [
- "supersonicads.com"
- ]
- }
- },
- {
- "Survata": {
- "https://www.survata.com/": [
- "survata.com"
- ]
- }
- },
- {
- "Switch": {
- "http://www.switchconcepts.com/": [
- "ethicalads.net",
- "switchadhub.com",
- "switchconcepts.co.uk",
- "switchconcepts.com"
- ]
- }
- },
- {
- "Swoop": {
- "http://swoop.com/": [
- "swoop.com"
- ]
- }
- },
- {
- "SymphonyAM": {
- "http://www.factortg.com/": [
- "factortg.com"
- ]
- }
- },
- {
- "Syncapse": {
- "http://www.syncapse.com/": [
- "clickable.net",
- "syncapse.com"
- ]
- }
- },
- {
- "Syrup Ad": {
- "http://adotsolution.com/": [
- "adotsolution.com"
- ]
- }
- },
- {
- "Taboola": {
- "https://www.taboola.com/": [
- "perfectmarket.com",
- "taboola.com"
- ]
- }
- },
- {
- "Tailsweep": {
- "http://www.tailsweep.com/": [
- "tailsweep.com"
- ]
- }
- },
- {
- "Taleria": {
- "https://outstream.telaria.com/": [
- "freeskreen.com"
- ]
- }
- },
- {
- "Tapad": {
- "http://www.tapad.com/": [
- "tapad.com"
- ]
- }
- },
- {
- "Tapgage": {
- "http://www.tapgage.com/": [
- "bizmey.com",
- "tapgage.com"
- ]
- }
- },
- {
- "TapIt!": {
- "http://tapit.com/": [
- "tapit.com"
- ]
- }
- },
- {
- "Tap.me": {
- "http://tap.me/": [
- "tap.me"
- ]
- }
- },
- {
- "Targetix": {
- "http://targetix.net/": [
- "targetix.net"
- ]
- }
- },
- {
- "Tatto Media": {
- "http://tattomedia.com/": [
- "quicknoodles.com",
- "tattomedia.com"
- ]
- }
- },
- {
- "Teadma": {
- "http://www.teadma.com/": [
- "teadma.com"
- ]
- }
- },
- {
- "Teads.tv": {
- "http://teads.tv/": [
- "ebuzzing.com",
- "teads.tv"
- ]
- }
- },
- {
- "Technorati": {
- "http://technorati.com/": [
- "technorati.com",
- "technoratimedia.com"
- ]
- }
- },
- {
- "TellApart": {
- "http://tellapart.com/": [
- "tellapart.com",
- "tellapt.com"
- ]
- }
- },
- {
- "Telstra": {
- "http://www.telstra.com.au/": [
- "sensis.com.au",
- "sensisdata.com.au",
- "sensisdigitalmedia.com.au",
- "telstra.com.au"
- ]
- }
- },
- {
- "Terra": {
- "http://www.terra.com.br/": [
- "eztargetmedia.com",
- "terra.com.br"
- ]
- }
- },
- {
- "The Numa Group": {
- "http://www.thenumagroup.com/": [
- "hittail.com",
- "thenumagroup.com"
- ]
- }
- },
- {
- "The Search Agency": {
- "http://www.thesearchagency.com/": [
- "thesearchagency.com",
- "thesearchagency.net"
- ]
- }
- },
- {
- "The Trade Desk": {
- "http://thetradedesk.com/": [
- "adsrvr.org",
- "thetradedesk.com"
- ]
- }
- },
- {
- "Think Realtime": {
- "http://www.thinkrealtime.com/": [
- "echosearch.com",
- "esm1.net",
- "thinkrealtime.com"
- ]
- }
- },
- {
- "Tinder": {
- "http://tinder.com/": [
- "carbonads.com",
- "tinder.com"
- ]
- }
- },
- {
- "TiqIQ": {
- "http://www.tiqiq.com/": [
- "tiqiq.com"
- ]
- }
- },
- {
- "Tisoomi": {
- "http://www.tisoomi.com/": [
- "adternal.com",
- "tisoomi.com"
- ]
- }
- },
- {
- "TLVMedia": {
- "http://tlvmedia.com/": [
- "tlvmedia.com"
- ]
- }
- },
- {
- "Todacell": {
- "http://www.todacell.com/": [
- "todacell.com"
- ]
- }
- },
- {
- "ToneFuse": {
- "http://tonefuse.com/": [
- "tonefuse.com"
- ]
- }
- },
- {
- "ToneMedia": {
- "http://tonemedia.com/": [
- "clickfuse.com",
- "tonemedia.com"
- ]
- }
- },
- {
- "TouchCommerce": {
- "http://www.touchcommerce.com/": [
- "inq.com",
- "touchcommerce.com"
- ]
- }
- },
- {
- "TrackingSoft": {
- "http://trackingsoft.com/": [
- "trackingsoft.com"
- ]
- }
- },
- {
- "Tradedoubler": {
- "http://www.tradedoubler.com/": [
- "tradedoubler.com"
- ]
- }
- },
- {
- "TradeTracker": {
- "http://www.tradetracker.com/": [
- "tradetracker.com",
- "tradetracker.net"
- ]
- }
- },
- {
- "TrafficHaus": {
- "http://www.traffichaus.com/": [
- "traffichaus.com",
- "traffichouse.com"
- ]
- }
- },
- {
- "TrafficRevenue": {
- "http://www.trafficrevenue.net/": [
- "trafficrevenue.net"
- ]
- }
- },
- {
- "Traffiq": {
- "http://www.traffiq.com/": [
- "traffiq.com"
- ]
- }
- },
- {
- "Trafmag": {
- "http://trafmag.com/": [
- "trafmag.com"
- ]
- }
- },
- {
- "Traverse": {
- "http://www.traversedata.com/": [
- "traversedlp.com"
- ]
- }
- },
- {
- "Travora Media": {
- "http://www.travoramedia.com/": [
- "traveladnetwork.com",
- "traveladvertising.com",
- "travoramedia.com"
- ]
- }
- },
- {
- "Tremor Video": {
- "http://www.tremorvideo.com/": [
- "scanscout.com",
- "tmnetads.com",
- "tremorhub.com",
- "tremormedia.com",
- "tremorvideo.com"
- ]
- }
- },
- {
- "Triggit": {
- "http://triggit.com/": [
- "triggit.com"
- ]
- }
- },
- {
- "TripleLift": {
- "http://triplelift.com/": [
- "3lift.com",
- "triplelift.com"
- ]
- }
- },
- {
- "TruEffect": {
- "http://www.trueffect.com/": [
- "adlegend.com",
- "trueffect.com"
- ]
- }
- },
- {
- "TrustX": {
- "https://trustx.org/": [
- "trustx.org"
- ]
- }
- },
- {
- "TubeMogul": {
- "http://www.tubemogul.com/": [
- "tmogul.com",
- "tubemogul.com"
- ]
- }
- },
- {
- "Twelvefold": {
- "http://www.twelvefold.com/": [
- "buzzlogic.com",
- "twelvefold.com"
- ]
- }
- },
- {
- "Twitter": {
- "https://twitter.com/": [
- "ads-twitter.com"
- ]
- }
- },
- {
- "Twyn Group": {
- "http://www.twyn.com/": [
- "twyn-group.com",
- "twyn.com"
- ]
- }
- },
- {
- "Tyroo": {
- "http://www.tyroo.com/": [
- "tyroo.com"
- ]
- }
- },
- {
- "ucfunnel": {
- "https://www.ucfunnel.com/": [
- "aralego.com",
- "ucfunnel.com"
- ]
- }
- },
- {
- "uCoz": {
- "http://www.ucoz.com/": [
- "ucoz.ae",
- "ucoz.br",
- "ucoz.com",
- "ucoz.du",
- "ucoz.fr",
- "ucoz.net",
- "ucoz.ru"
- ]
- }
- },
- {
- "Unanimis": {
- "http://www.unanimis.co.uk/": [
- "unanimis.co.uk"
- ]
- }
- },
- {
- "Underdog Media": {
- "http://www.underdogmedia.com/": [
- "udmserve.net",
- "underdogmedia.com"
- ]
- }
- },
- {
- "Undertone": {
- "http://www.undertone.com/": [
- "undertone.com",
- "undertonenetworks.com",
- "undertonevideo.com"
- ]
- }
- },
- {
- "UniQlick": {
- "http://www.uniqlick.com/": [
- "51network.com",
- "uniqlick.com",
- "wanmo.com"
- ]
- }
- },
- {
- "Unruly": {
- "https://unruly.co/": [
- "unrulymedia.com"
- ]
- }
- },
- {
- "Upland": {
- "https://uplandsoftware.com/": [
- "leadlander.com",
- "trackalyzer.com"
- ]
- }
- },
- {
- "up-value": {
- "http://www.up-value.de/": [
- "up-value.de"
- ]
- }
- },
- {
- "Value Ad": {
- "http://valuead.com/": [
- "valuead.com"
- ]
- }
- },
- {
- "Various": {
- "http://www.various.com/": [
- "amigos.com",
- "getiton.com",
- "medley.com",
- "nostringsattached.com",
- "various.com"
- ]
- }
- },
- {
- "Vdopia": {
- "http://www.vdopia.com/": [
- "ivdopia.com",
- "vdopia.com"
- ]
- }
- },
- {
- "Veeseo": {
- "http://veeseo.com": [
- "veeseo.com"
- ]
- }
- },
- {
- "Velocity Media": {
- "http://adsvelocity.com/": [
- "adsvelocity.com"
- ]
- }
- },
- {
- "Velti": {
- "http://www.velti.com/": [
- "mobclix.com",
- "velti.com"
- ]
- }
- },
- {
- "Vemba": {
- "https://www.vemba.com/": [
- "vemba.com"
- ]
- }
- },
- {
- "Venatus Media": {
- "http://venatusmedia.com": [
- "venatusmedia.com"
- ]
- }
- },
- {
- "Vendemore": {
- "https://vendemore.com/": [
- "vendemore.com"
- ]
- }
- },
- {
- "Vendio": {
- "http://www.vendio.com/": [
- "singlefeed.com",
- "vendio.com"
- ]
- }
- },
- {
- "Veoxa": {
- "http://www.veoxa.com/": [
- "veoxa.com"
- ]
- }
- },
- {
- "Veremedia": {
- "http://www.veremedia.com/": [
- "veremedia.com"
- ]
- }
- },
- {
- "VerticalHealth": {
- "https://www.verticalhealth.com/": [
- "verticalhealth.net"
- ]
- }
- },
- {
- "VerticalResponse": {
- "http://www.verticalresponse.com/": [
- "verticalresponse.com",
- "vresp.com"
- ]
- }
- },
- {
- "Vibrant Media": {
- "http://www.vibrantmedia.com/": [
- "intellitxt.com",
- "picadmedia.com",
- "vibrantmedia.com"
- ]
- }
- },
- {
- "VideoIntelligence": {
- "https://www.vi.ai/": [
- "vi.ai"
- ]
- }
- },
- {
- "VigLink": {
- "http://www.viglink.com/": [
- "viglink.com"
- ]
- }
- },
- {
- "VisibleBrands": {
- "http://www.visbrands.com/": [
- "visbrands.com"
- ]
- }
- },
- {
- "Visible Measures": {
- "http://www.visiblemeasures.com/": [
- "viewablemedia.net",
- "visiblemeasures.com"
- ]
- }
- },
- {
- "VisualDNA": {
- "http://www.visualdna.com/": [
- "vdna-assets.com",
- "visualdna-stats.com",
- "visualdna.com"
- ]
- }
- },
- {
- "Vizu": {
- "http://www.vizu.com/": [
- "vizu.com"
- ]
- }
- },
- {
- "Vizury": {
- "http://www.vizury.com/": [
- "vizury.com"
- ]
- }
- },
- {
- "Vserv": {
- "http://www.vserv.com/": [
- "vserv.com",
- "vserv.mobi"
- ]
- }
- },
- {
- "Vuble": {
- "https://vuble.tv/us/": [
- "mediabong.com"
- ]
- }
- },
- {
- "Wahoha": {
- "http://wahoha.com/": [
- "contentwidgets.net",
- "wahoha.com"
- ]
- }
- },
- {
- "Wayfair": {
- "https://www.wayfair.com/": [
- "wayfair.com"
- ]
- }
- },
- {
- "WebAds": {
- "http://www.webads.co.uk/": [
- "webads.co.uk"
- ]
- }
- },
- {
- "Web.com": {
- "http://www.web.com/": [
- "feedperfect.com",
- "web.com"
- ]
- }
- },
- {
- "WebGozar.com": {
- "http://www.webgozar.com/": [
- "webgozar.com",
- "webgozar.ir"
- ]
- }
- },
- {
- "Webmecanik": {
- "https://www.webmecanik.com/": [
- "webmecanik.com"
- ]
- }
- },
- {
- "WebMetro": {
- "http://www.webmetro.com/": [
- "dsmmadvantage.com",
- "webmetro.com"
- ]
- }
- },
- {
- "Weborama": {
- "http://weborama.com/": [
- "weborama.com",
- "weborama.fr"
- ]
- }
- },
- {
- "Webtraffic": {
- "http://www.webtraffic.se/": [
- "webtraffic.no",
- "webtraffic.se"
- ]
- }
- },
- {
- "WideOrbit": {
- "https://www.wideorbit.com/": [
- "dep-x.com"
- ]
- }
- },
- {
- "WiredMinds": {
- "http://www.wiredminds.com/": [
- "wiredminds.com",
- "wiredminds.de"
- ]
- }
- },
- {
- "Wishabi": {
- "http://wishabi.com": [
- "wishabi.com",
- "wishabi.net"
- ]
- }
- },
- {
- "WordStream": {
- "http://www.wordstream.com/": [
- "wordstream.com"
- ]
- }
- },
- {
- "WPP": {
- "http://www.wpp.com/": [
- "247realmedia.com",
- "accelerator-media.com",
- "acceleratorusa.com",
- "decdna.net",
- "decideinteractive.com",
- "gmads.net",
- "groupm.com",
- "kantarmedia.com",
- "mecglobal.com",
- "mindshare.nl",
- "mookie1.com",
- "pm14.com",
- "realmedia.com",
- "targ.ad",
- "themig.com",
- "wpp.com",
- "xaxis.com"
- ]
- }
- },
- {
- "xAd": {
- "http://www.xad.com/": [
- "xad.com"
- ]
- }
- },
- {
- "Xertive Media": {
- "http://www.xertivemedia.com/": [
- "admanager-xertive.com",
- "xertivemedia.com"
- ]
- }
- },
- {
- "xplosion interactive": {
- "http://www.xplosion.de/": [
- "xplosion.de"
- ]
- }
- },
- {
- "Xrost DS": {
- "http://www.adplan-ds.com/": [
- "adplan-ds.com"
- ]
- }
- },
- {
- "Yabuka": {
- "http://www.yabuka.com/": [
- "yabuka.com"
- ]
- }
- },
- {
- "Yahoo!": {
- "http://www.yahoo.com/": [
- "adinterax.com",
- "adrevolver.com",
- "ads.yahoo.com",
- "adserver.yahoo.com",
- "advertising.yahoo.com",
- "bluelithium.com",
- "dapper.net",
- "flurry.com",
- "interclick.com",
- "marketingsolutions.yahoo.com",
- "overture.com",
- "rightmedia.com",
- "rmxads.com",
- "secure-adserver.com",
- "thewheelof.com",
- "yieldmanager.com",
- "yieldmanager.net",
- "yldmgrimg.net"
- ]
- }
- },
- {
- "Yandex": {
- "http://www.yandex.com/": [
- "adfox.yandex.ru",
- "an.yandex.ru",
- "awaps.yandex.ru",
- "mc.yandex.ru",
- "moikrug.ru",
- "web-visor.com",
- "yandex.ru/clck/click",
- "yandex.ru/clck/counter",
- "yandex.ru/cycounter",
- "yandex.ru/portal/set/any",
- "yandex.ru/set/s/rsya-tag-users/data"
- ]
- }
- },
- {
- "Ybrant Digital": {
- "http://www.ybrantdigital.com/": [
- "addynamix.com",
- "adserverplus.com",
- "oridian.com",
- "ybrantdigital.com"
- ]
- }
- },
- {
- "YD": {
- "http://www.ydworld.com/": [
- "ydworld.com",
- "yieldivision.com"
- ]
- }
- },
- {
- "YellowHammer": {
- "http://www.yhmg.com/": [
- "attracto.com",
- "clickhype.com",
- "yellowhammermg.com",
- "yhmg.com"
- ]
- }
- },
- {
- "Yes Ads": {
- "http://yesads.com/": [
- "yesads.com"
- ]
- }
- },
- {
- "YieldAds": {
- "http://yieldads.com/": [
- "yieldads.com"
- ]
- }
- },
- {
- "YieldBids": {
- "http://ybx.io/": [
- "ybx.io"
- ]
- }
- },
- {
- "YieldBot": {
- "http://yieldbot.com/": [
- "yldbt.com"
- ]
- }
- },
- {
- "YieldBuild": {
- "http://yieldbuild.com/": [
- "yieldbuild.com"
- ]
- }
- },
- {
- "Yieldify": {
- "https://www.yieldify.com/": [
- "yieldify.com"
- ]
- }
- },
- {
- "Yieldlab": {
- "http://www.yieldlab.de/": [
- "yieldlab.de",
- "yieldlab.net"
- ]
- }
- },
- {
- "Yieldmo": {
- "https://yieldmo.com": [
- "yieldmo.com"
- ]
- }
- },
- {
- "YieldNexus": {
- "https://www.yieldnexus.com/": [
- "ynxs.io"
- ]
- }
- },
- {
- "YOC": {
- "http://group.yoc.com/": [
- "yoc-performance.com",
- "yoc.com"
- ]
- }
- },
- {
- "Yoggrt": {
- "http://www.yoggrt.com/": [
- "yoggrt.com"
- ]
- }
- },
- {
- "youknowbest": {
- "http://www.youknowbest.com/": [
- "youknowbest.com"
- ]
- }
- },
- {
- "YuMe": {
- "http://www.yume.com/": [
- "yume.com",
- "yumenetworks.com"
- ]
- }
- },
- {
- "ZafulAffiliate": {
- "https://affiliate.zaful.com/": [
- "affasi.com",
- "gw-ec.com",
- "zaful.com"
- ]
- }
- },
- {
- "Zango": {
- "http://www.zango.com/": [
- "metricsdirect.com",
- "zango.com"
- ]
- }
- },
- {
- "zanox": {
- "http://www.zanox.com/": [
- "buy.at",
- "zanox-affiliate.de",
- "zanox.com"
- ]
- }
- },
- {
- "zapunited": {
- "http://www.zapunited.com/": [
- "zaparena.com",
- "zapunited.com"
- ]
- }
- },
- {
- "ZEDO": {
- "http://www.zedo.com/": [
- "zedo.com",
- "zincx.com"
- ]
- }
- },
- {
- "Zefir": {
- "https://ze-fir.com/": [
- "ze-fir.com"
- ]
- }
- },
- {
- "Zemanta": {
- "http://www.zemanta.com/": [
- "zemanta.com"
- ]
- }
- },
- {
- "ZestAd": {
- "http://www.zestad.com/": [
- "zestad.com"
- ]
- }
- },
- {
- "Zeta Email Solutions": {
- "http://www.zetaemailsolutions.com/": [
- "insightgrit.com",
- "zetaemailsolutions.com"
- ]
- }
- },
- {
- "Zumobi": {
- "http://www.zumobi.com/": [
- "zumobi.com"
- ]
- }
- },
- {
- "ZypMedia": {
- "http://www.zypmedia.com/": [
- "extend.tv",
- "zypmedia.com"
- ]
- }
- }
- ],
- "Content": [
- {
- "33Across": {
- "http://33across.com/": [
- "tynt.com"
- ]
- }
- },
- {
- "ActivEngage": {
- "http://www.activengage.com/": [
- "activengage.com"
- ]
- }
- },
- {
- "Adap.tv": {
- "http://adap.tv/": [
- "adap.tv"
- ]
- }
- },
- {
- "Adobe": {
- "http://www.adobe.com/": [
- "adobe.com",
- "fyre.co",
- "livefyre.com",
- "typekit.com"
- ]
- }
- },
- {
- "Akamai": {
- "http://www.akamai.com/": [
- "abmr.net",
- "akamai.com",
- "edgesuite.net"
- ]
- }
- },
- {
- "AKQA": {
- "http://www.akqa.com/": [
- "akqa.com",
- "srtk.net"
- ]
- }
- },
- {
- "Amazon.com": {
- "http://www.amazon.com/": [
- "alexa.com",
- "amazon.com",
- "cloudfront.net"
- ]
- }
- },
- {
- "AOL": {
- "http://www.aol.com/": [
- "5min.com",
- "aim.com",
- "aol.com",
- "aolanswers.com",
- "aolcdn.com",
- "aoltechguru.com",
- "autoblog.com",
- "cambio.com",
- "dailyfinance.com",
- "editions.com",
- "engadget.com",
- "games.com",
- "homesessive.com",
- "huffingtonpost.com",
- "joystiq.com",
- "kitchendaily.com",
- "makers.com",
- "mandatory.com",
- "mapquest.com",
- "moviefone.com",
- "noisecreep.com",
- "patch.com",
- "pawnation.com",
- "shortcuts.com",
- "shoutcast.com",
- "spinner.com",
- "stylelist.com",
- "stylemepretty.com",
- "surphace.com",
- "techcrunch.com",
- "theboombox.com",
- "theboot.com",
- "tuaw.com",
- "userplane.com",
- "winamp.com"
- ]
- }
- },
- {
- "Automattic": {
- "http://automattic.com/": [
- "automattic.com",
- "gravatar.com",
- "intensedebate.com"
- ]
- }
- },
- {
- "Baynote": {
- "http://www.baynote.com/": [
- "baynote.com",
- "baynote.net"
- ]
- }
- },
- {
- "Bazaarvoice": {
- "http://www.bazaarvoice.com/": [
- "bazaarvoice.com"
- ]
- }
- },
- {
- "BigDoor": {
- "http://www.bigdoor.com/": [
- "bigdoor.com",
- "onetruefan.com"
- ]
- }
- },
- {
- "Brightcove": {
- "http://www.brightcove.com/": [
- "brightcove.com"
- ]
- }
- },
- {
- "Browser-Update.org": {
- "www.browser-update.org/": [
- "browser-update.org"
- ]
- }
- },
- {
- "BTBuckets": {
- "http://btbuckets.com/": [
- "btbuckets.com"
- ]
- }
- },
- {
- "Buffer": {
- "http://bufferapp.com/": [
- "bufferapp.com"
- ]
- }
- },
- {
- "Bunchball": {
- "http://www.bunchball.com/": [
- "bunchball.com"
- ]
- }
- },
- {
- "buySAFE": {
- "http://www.buysafe.com/": [
- "buysafe.com"
- ]
- }
- },
- {
- "BuzzFeed": {
- "http://www.buzzfeed.com/": [
- "buzzfed.com",
- "buzzfeed.com"
- ]
- }
- },
- {
- "Cbox": {
- "http://www.cbox.ws/": [
- "cbox.ws"
- ]
- }
- },
- {
- "CBS Interactive": {
- "http://www.cbsinteractive.com/": [
- "cbsinteractive.com",
- "com.com"
- ]
- }
- },
- {
- "Cedexis": {
- "http://www.cedexis.com/": [
- "cedexis.com",
- "cedexis.net"
- ]
- }
- },
- {
- "Certona": {
- "http://www.certona.com/": [
- "certona.com",
- "res-x.com"
- ]
- }
- },
- {
- "ClipSyndicate": {
- "http://www.clipsyndicate.com/": [
- "clipsyndicate.com"
- ]
- }
- },
- {
- "Collarity": {
- "http://www.collarity.com/": [
- "collarity.com"
- ]
- }
- },
- {
- "Conduit": {
- "http://www.conduit.com/": [
- "conduit-banners.com",
- "conduit-services.com",
- "conduit.com",
- "wibiya.com"
- ]
- }
- },
- {
- "Congoo": {
- "http://www.congoo.com/": [
- "congoo.com"
- ]
- }
- },
- {
- "Contact At Once!": {
- "http://www.contactatonce.com/": [
- "contactatonce.com"
- ]
- }
- },
- {
- "Conviva": {
- "http://www.conviva.com/": [
- "conviva.com"
- ]
- }
- },
- {
- "DailyMe": {
- "http://dailyme.com/": [
- "dailyme.com",
- "newstogram.com"
- ]
- }
- },
- {
- "DataSift": {
- "http://datasift.com/": [
- "datasift.com",
- "tweetmeme.com"
- ]
- }
- },
- {
- "Disqus": {
- "http://disqus.com/": [
- "disqus.com"
- ]
- }
- },
- {
- "Echo": {
- "http://aboutecho.com/": [
- "aboutecho.com",
- "haloscan.com",
- "js-kit.com"
- ]
- }
- },
- {
- "Facebook": {
- "http://www.facebook.com/": [
- "fbcdn.net",
- "instagram.com",
- "messenger.com"
- ]
- }
- },
- {
- "Flattr": {
- "http://flattr.com/": [
- "flattr.com"
- ]
- }
- },
- {
- "FreeWheel": {
- "http://www.freewheel.tv/": [
- "freewheel.tv",
- "fwmrm.net"
- ]
- }
- },
- {
- "Genius.com": {
- "http://www.genius.com/": [
- "genius.com"
- ]
- }
- },
- {
- "Get Satisfaction": {
- "https://getsatisfaction.com/": [
- "getsatisfaction.com"
- ]
- }
- },
- {
- "Gigya": {
- "http://www.gigya.com/": [
- "gigcount.com",
- "gigya.com"
- ]
- }
- },
- {
- "Global Takeoff": {
- "http://www.globaltakeoff.com/": [
- "globaltakeoff.com",
- "globaltakeoff.net"
- ]
- }
- },
- {
- "GoGrid": {
- "http://www.gogrid.com/": [
- "formalyzer.com",
- "gogrid.com",
- "komli.net"
- ]
- }
- },
- {
- "Google": {
- "http://www.google.com/": [
- "accounts.google.com",
- "apis.google.com",
- "appengine.google.com",
- "apture.com",
- "blogger.com",
- "books.google.com",
- "checkout.google.com",
- "chrome.google.com",
- "code.google.com",
- "codesearch.google.com",
- "docs.google.com",
- "drive.google.com",
- "earth.google.com",
- "encrypted.google.com",
- "feedburner.com",
- "feedburner.google.com",
- "feedproxy.google.com",
- "finance.google.com",
- "ggpht.com",
- "gmodules.com",
- "google-melange.com",
- "google.ad",
- "google.ae",
- "google.al",
- "google.am",
- "google.as",
- "google.at",
- "google.az",
- "google.ba",
- "google.be",
- "google.bf",
- "google.bg",
- "google.bi",
- "google.bj",
- "google.bs",
- "google.bt",
- "google.by",
- "google.ca",
- "google.cat",
- "google.cd",
- "google.cf",
- "google.cg",
- "google.ch",
- "google.ci",
- "google.cl",
- "google.cm",
- "google.cn",
- "google.co.ao",
- "google.co.bw",
- "google.co.ck",
- "google.co.cr",
- "google.co.id",
- "google.co.il",
- "google.co.in",
- "google.co.jp",
- "google.co.ke",
- "google.co.kr",
- "google.co.ls",
- "google.co.ma",
- "google.co.mz",
- "google.co.nz",
- "google.co.th",
- "google.co.tz",
- "google.co.ug",
- "google.co.uk",
- "google.co.uz",
- "google.co.ve",
- "google.co.vi",
- "google.co.za",
- "google.co.zm",
- "google.co.zw",
- "google.com",
- "google.com.af",
- "google.com.ag",
- "google.com.ai",
- "google.com.ar",
- "google.com.au",
- "google.com.bd",
- "google.com.bh",
- "google.com.bn",
- "google.com.bo",
- "google.com.br",
- "google.com.bz",
- "google.com.co",
- "google.com.cu",
- "google.com.cy",
- "google.com.do",
- "google.com.ec",
- "google.com.eg",
- "google.com.et",
- "google.com.fj",
- "google.com.gh",
- "google.com.gi",
- "google.com.gt",
- "google.com.hk",
- "google.com.jm",
- "google.com.kh",
- "google.com.kw",
- "google.com.lb",
- "google.com.ly",
- "google.com.mm",
- "google.com.mt",
- "google.com.mx",
- "google.com.my",
- "google.com.na",
- "google.com.nf",
- "google.com.ng",
- "google.com.ni",
- "google.com.np",
- "google.com.om",
- "google.com.pa",
- "google.com.pe",
- "google.com.pg",
- "google.com.ph",
- "google.com.pk",
- "google.com.pr",
- "google.com.py",
- "google.com.qa",
- "google.com.sa",
- "google.com.sb",
- "google.com.sg",
- "google.com.sl",
- "google.com.sv",
- "google.com.tj",
- "google.com.tr",
- "google.com.tw",
- "google.com.ua",
- "google.com.uy",
- "google.com.vc",
- "google.com.vn",
- "google.cv",
- "google.cz",
- "google.de",
- "google.dj",
- "google.dk",
- "google.dm",
- "google.dz",
- "google.ee",
- "google.es",
- "google.fi",
- "google.fm",
- "google.fr",
- "google.ga",
- "google.ge",
- "google.gg",
- "google.gl",
- "google.gm",
- "google.gp",
- "google.gr",
- "google.gy",
- "google.hn",
- "google.hr",
- "google.ht",
- "google.hu",
- "google.ie",
- "google.im",
- "google.iq",
- "google.is",
- "google.it",
- "google.je",
- "google.jo",
- "google.kg",
- "google.ki",
- "google.kz",
- "google.la",
- "google.li",
- "google.lk",
- "google.lt",
- "google.lu",
- "google.lv",
- "google.md",
- "google.me",
- "google.mg",
- "google.mk",
- "google.ml",
- "google.mn",
- "google.ms",
- "google.mu",
- "google.mv",
- "google.mw",
- "google.ne",
- "google.nl",
- "google.no",
- "google.nr",
- "google.nu",
- "google.pl",
- "google.pn",
- "google.ps",
- "google.pt",
- "google.ro",
- "google.rs",
- "google.ru",
- "google.rw",
- "google.sc",
- "google.se",
- "google.sh",
- "google.si",
- "google.sk",
- "google.sm",
- "google.sn",
- "google.so",
- "google.st",
- "google.td",
- "google.tg",
- "google.tk",
- "google.tl",
- "google.tm",
- "google.tn",
- "google.to",
- "google.tt",
- "google.vg",
- "google.vu",
- "google.ws",
- "googleapis.com",
- "googleartproject.com",
- "googleusercontent.com",
- "groups.google.com",
- "gstatic.com",
- "health.google.com",
- "images.google.com",
- "investor.google.com",
- "knol.google.com",
- "maps.google.com",
- "music.google.com",
- "news.google.com",
- "panoramio.com",
- "picasa.google.com",
- "picasaweb.google.com",
- "play.google.com",
- "postini.com",
- "recaptcha.net",
- "script.google.com",
- "shopping.google.com",
- "sites.google.com",
- "sketchup.google.com",
- "support.google.com",
- "talk.google.com",
- "talkgadget.google.com",
- "toolbar.google.com",
- "translate.google.com",
- "trends.google.com",
- "video.google.com",
- "videos.google.com",
- "wallet.google.com",
- "youtube.com"
- ]
- }
- },
- {
- "Gravity": {
- "http://www.gravity.com/": [
- "gravity.com",
- "grvcdn.com"
- ]
- }
- },
- {
- "Heyzap": {
- "http://www.heyzap.com/": [
- "heyzap.com"
- ]
- }
- },
- {
- "HubSpot": {
- "http://www.hubspot.com/": [
- "hubspot.com"
- ]
- }
- },
- {
- "IBM": {
- "http://www.ibm.com/": [
- "xtify.com"
- ]
- }
- },
- {
- "iovation": {
- "http://www.iovation.com/": [
- "iesnare.com",
- "iovation.com"
- ]
- }
- },
- {
- "Kaltura": {
- "http://corp.kaltura.com/": [
- "kaltura.com"
- ]
- }
- },
- {
- "kikin": {
- "http://www.kikin.com/": [
- "kikin.com"
- ]
- }
- },
- {
- "Limelight Networks": {
- "http://www.limelight.com/": [
- "clickability.com",
- "limelight.com",
- "llnwd.net"
- ]
- }
- },
- {
- "LivePerson": {
- "http://www.liveperson.net/": [
- "liveperson.net"
- ]
- }
- },
- {
- "LiveRail": {
- "http://liverail.com/": [
- "liverail.com"
- ]
- }
- },
- {
- "LongTail Video": {
- "http://www.longtailvideo.com/": [
- "longtailvideo.com",
- "ltassrv.com"
- ]
- }
- },
- {
- "Markit": {
- "http://www.markit.com/": [
- "markit.com",
- "wsod.com"
- ]
- }
- },
- {
- "MashLogic": {
- "http://www.mashlogic.com/": [
- "mashlogic.com"
- ]
- }
- },
- {
- "McAfee": {
- "http://www.mcafee.com/": [
- "mcafee.com",
- "scanalert.com"
- ]
- }
- },
- {
- "Microsoft": {
- "http://www.microsoft.com/": [
- "bing.com",
- "gamesforwindows.com",
- "getgamesmart.com",
- "healthvault.com",
- "ieaddons.com",
- "iegallery.com",
- "live.com",
- "microsoft.com",
- "microsoftalumni.com",
- "microsoftalumni.org",
- "microsoftstore.com",
- "msn.com",
- "msndirect.com",
- "office.com",
- "officelive.com",
- "outlook.com",
- "s-msn.com",
- "skype.com",
- "windowsphone.com",
- "worldwidetelescope.org",
- "xbox.com",
- "zune.com",
- "zune.net"
- ]
- }
- },
- {
- "NDN": {
- "http://www.newsinc.com/": [
- "newsinc.com"
- ]
- }
- },
- {
- "Oberon Media": {
- "http://www.oberon-media.com/": [
- "blaze.com",
- "oberon-media.com"
- ]
- }
- },
- {
- "Ooyala": {
- "http://www.ooyala.com/": [
- "oo4.com",
- "ooyala.com"
- ]
- }
- },
- {
- "Oracle": {
- "http://www.oracle.com/": [
- "atgsvcs.com",
- "instantservice.com",
- "istrack.com",
- "oracle.com"
- ]
- }
- },
- {
- "Peerius": {
- "http://www.peerius.com/": [
- "peerius.com"
- ]
- }
- },
- {
- "Pinterest": {
- "http://pinterest.com/": [
- "pinimg.com",
- "pinterest.com"
- ]
- }
- },
- {
- "PunchTab": {
- "http://www.punchtab.com/": [
- "punchtab.com"
- ]
- }
- },
- {
- "RIM": {
- "http://www.rim.com/": [
- "rim.com",
- "scoreloop.com"
- ]
- }
- },
- {
- "Salesforce.com": {
- "http://www.salesforce.com/": [
- "salesforceliveagent.com"
- ]
- }
- },
- {
- "SAY": {
- "http://saymedia.com/": [
- "saymedia.com",
- "typepad.com",
- "videoegg.com"
- ]
- }
- },
- {
- "ScribeFire": {
- "http://www.scribefire.com/": [
- "scribefire.com"
- ]
- }
- },
- {
- "Six Apart": {
- "http://www.sixapart.com/": [
- "sixapart.com"
- ]
- }
- },
- {
- "Skribit": {
- "http://skribit.com/": [
- "skribit.com"
- ]
- }
- },
- {
- "SnapEngage": {
- "http://www.snapengage.com/": [
- "snapengage.com"
- ]
- }
- },
- {
- "Spring Metrics": {
- "http://www.springmetrics.com/": [
- "springmetrics.com"
- ]
- }
- },
- {
- "Synacor": {
- "http://www.synacor.com/": [
- "synacor.com"
- ]
- }
- },
- {
- "ThingLink": {
- "http://www.thinglink.com/": [
- "thinglink.com"
- ]
- }
- },
- {
- "Thismoment": {
- "http://www.thismoment.com/": [
- "thismoment.com"
- ]
- }
- },
- {
- "Thummit": {
- "http://www.thummit.com/": [
- "thummit.com"
- ]
- }
- },
- {
- "Topsy": {
- "http://topsy.com/": [
- "topsy.com"
- ]
- }
- },
- {
- "TraceMyIP.org": {
- "http://www.tracemyip.org/": [
- "tracemyip.org"
- ]
- }
- },
- {
- "Trackset": {
- "http://www.trackset.com/": [
- "trackset.com"
- ]
- }
- },
- {
- "Trovus": {
- "http://www.trovus.co.uk/": [
- "trovus.co.uk"
- ]
- }
- },
- {
- "Trumba": {
- "http://www.trumba.com/": [
- "trumba.com"
- ]
- }
- },
- {
- "TRUSTe": {
- "http://www.truste.com/": [
- "truste.com"
- ]
- }
- },
- {
- "TurnTo": {
- "http://www.turntonetworks.com/": [
- "turnto.com",
- "turntonetworks.com"
- ]
- }
- },
- {
- "Tweetboard": {
- "http://tweetboard.com/": [
- "tweetboard.com"
- ]
- }
- },
- {
- "Twitter Counter": {
- "http://twittercounter.com/": [
- "twittercounter.com"
- ]
- }
- },
- {
- "UberMedia": {
- "http://ubermedia.com/": [
- "tweetup.com",
- "ubermedia.com"
- ]
- }
- },
- {
- "UberTags": {
- "http://ubertags.com/": [
- "ubertags.com"
- ]
- }
- },
- {
- "Unbounce": {
- "http://unbounce.com/": [
- "unbounce.com"
- ]
- }
- },
- {
- "Uptrends": {
- "http://www.uptrends.com/": [
- "uptrends.com"
- ]
- }
- },
- {
- "Usability Sciences": {
- "http://www.usabilitysciences.com/": [
- "usabilitysciences.com",
- "webiqonline.com"
- ]
- }
- },
- {
- "UserVoice": {
- "http://www.uservoice.com/": [
- "uservoice.com"
- ]
- }
- },
- {
- "Vertical Acuity": {
- "http://www.verticalacuity.com/": [
- "verticalacuity.com"
- ]
- }
- },
- {
- "VG WORT": {
- "http://www.vgwort.de/": [
- "vgwort.de"
- ]
- }
- },
- {
- "Videology": {
- "http://www.videologygroup.com/": [
- "tidaltv.com",
- "videologygroup.com"
- ]
- }
- },
- {
- "Viewbix": {
- "http://www.viewbix.com/": [
- "qoof.com",
- "viewbix.com"
- ]
- }
- },
- {
- "Vimeo": {
- "http://vimeo.com/": [
- "vimeo.com",
- "vimeocdn.com"
- ]
- }
- },
- {
- "VINDICO": {
- "http://vindicogroup.com/": [
- "vindicogroup.com",
- "vindicosuite.com"
- ]
- }
- },
- {
- "Voice2Page": {
- "http://www.voice2page.com/": [
- "voice2page.com"
- ]
- }
- },
- {
- "WebsiteAlive": {
- "http://www.websitealive.com/": [
- "websitealive.com",
- "websitealive0.com",
- "websitealive1.com",
- "websitealive2.com",
- "websitealive3.com",
- "websitealive4.com",
- "websitealive5.com",
- "websitealive6.com",
- "websitealive7.com",
- "websitealive8.com",
- "websitealive9.com"
- ]
- }
- },
- {
- "Yahoo!": {
- "http://www.yahoo.com/": [
- "answers.yahoo.com",
- "apps.yahoo.com",
- "autos.yahoo.com",
- "biz.yahoo.com",
- "developer.yahoo.com",
- "everything.yahoo.com",
- "finance.yahoo.com",
- "flickr.com",
- "games.yahoo.com",
- "groups.yahoo.com",
- "help.yahoo.com",
- "hotjobs.yahoo.com",
- "info.yahoo.com",
- "local.yahoo.com",
- "luminate.com",
- "messages.yahoo.com",
- "movies.yahoo.com",
- "msg.yahoo.com",
- "news.yahoo.com",
- "omg.yahoo.com",
- "pipes.yahoo.com",
- "pixazza.com",
- "realestate.yahoo.com",
- "search.yahoo.com",
- "shine.yahoo.com",
- "smallbusiness.yahoo.com",
- "sports.yahoo.com",
- "staticflickr.com",
- "suggestions.yahoo.com",
- "travel.yahoo.com",
- "tumblr.com",
- "upcoming.yahoo.com",
- "webhosting.yahoo.com",
- "widgets.yahoo.com",
- "www.yahoo.com",
- "yahooapis.com",
- "yahoofs.com",
- "yimg.com",
- "ypolicyblog.com",
- "yuilibrary.com",
- "zenfs.com"
- ]
- }
- },
- {
- "Yandex": {
- "http://www.yandex.com/": [
- "kinopoisk.ru",
- "yandex.by",
- "yandex.com",
- "yandex.com.tr",
- "yandex.ru",
- "yandex.st",
- "yandex.ua"
- ]
- }
- },
- {
- "Zendesk": {
- "http://www.zendesk.com/": [
- "zendesk.com"
- ]
- }
- },
- {
- "Zopim": {
- "https://www.zopim.com/": [
- "zopim.com"
- ]
- }
- }
- ],
- "Analytics": [
- {
- "63 Squares": {
- "http://63squares.com/": [
- "63squares.com",
- "i-stats.com"
- ]
- }
- },
- {
- "Acxiom": {
- "http://www.acxiom.com/": [
- "acxiom.com",
- "acxiomapac.com",
- "mm7.net",
- "pippio.com"
- ]
- }
- },
- {
- "AddFreeStats": {
- "http://www.addfreestats.com/": [
- "3dstats.com",
- "addfreestats.com"
- ]
- }
- },
- {
- "Adloox": {
- "http://www.adloox.com/": [
- "adloox.com",
- "adlooxtracking.com"
- ]
- }
- },
- {
- "Adventori": {
- "https://adventori.com": [
- "adventori.com"
- ]
- }
- },
- {
- "AIData": {
- "http://www.aidata.me/": [
- "advombat.ru",
- "aidata.me"
- ]
- }
- },
- {
- "AivaLabs": {
- "https://aivalabs.com": [
- "aivalabs.com"
- ]
- }
- },
- {
- "Akamai": {
- "http://www.akamai.com/": [
- "go-mpulse.net"
- ]
- }
- },
- {
- "Amadesa": {
- "http://www.amadesa.com/": [
- "amadesa.com"
- ]
- }
- },
- {
- "Amazing Counters": {
- "http://amazingcounters.com/": [
- "amazingcounters.com"
- ]
- }
- },
- {
- "Amazon.com": {
- "http://www.amazon.com/": [
- "alexametrics.com"
- ]
- }
- },
- {
- "Amplitude": {
- "https://amplitude.com/": [
- "amplitude.com"
- ]
- }
- },
- {
- "anormal-media.de": {
- "http://anormal-media.de/": [
- "anormal-media.de",
- "anormal-tracker.de"
- ]
- }
- },
- {
- "AT Internet": {
- "http://www.atinternet.com/": [
- "at-o.net",
- "atinternet.com",
- "xiti.com"
- ]
- }
- },
- {
- "Attracta": {
- "https://www.attracta.com/": [
- "attracta.com"
- ]
- }
- },
- {
- "Automattic": {
- "http://automattic.com/": [
- "polldaddy.com"
- ]
- }
- },
- {
- "AvantLink": {
- "http://www.avantlink.com/": [
- "avmws.com"
- ]
- }
- },
- {
- "Awio": {
- "http://www.awio.com/": [
- "awio.com",
- "w3counter.com",
- "w3roi.com"
- ]
- }
- },
- {
- "Belstat": {
- "http://www.belstat.com/": [
- "belstat.be",
- "belstat.com",
- "belstat.de",
- "belstat.fr",
- "belstat.nl"
- ]
- }
- },
- {
- "BetssonPalantir": {
- "https://betssonpalantir.com/": [
- "betssonpalantir.com"
- ]
- }
- },
- {
- "BlogCounter.com": {
- "http://www.blogcounter.de/": [
- "blogcounter.de"
- ]
- }
- },
- {
- "BloomReach": {
- "http://www.bloomreach.com/": [
- "p.brsrvr.com"
- ]
- }
- },
- {
- "BlueCava": {
- "http://www.bluecava.com/": [
- "bluecava.com"
- ]
- }
- },
- {
- "Bluemetrix": {
- "http://www.bluemetrix.com/": [
- "bluemetrix.com",
- "bmmetrix.com"
- ]
- }
- },
- {
- "Bombora": {
- "https://bombora.com/": [
- "ml314.com"
- ]
- }
- },
- {
- "Branch": {
- "https://branch.io/": [
- "branch.io"
- ]
- }
- },
- {
- "Branica": {
- "http://www.branica.com/": [
- "branica.com"
- ]
- }
- },
- {
- "BrightEdge": {
- "http://www.brightedge.com/": [
- "b0e8.com",
- "brightedge.com"
- ]
- }
- },
- {
- "Bubblestat": {
- "http://www.bubblestat.com/": [
- "bubblestat.com"
- ]
- }
- },
- {
- "Cardlytics": {
- "http://www.cardlytics.com/": [
- "cardlytics.com"
- ]
- }
- },
- {
- "Chartbeat": {
- "http://chartbeat.com/": [
- "chartbeat.com",
- "chartbeat.net"
- ]
- }
- },
- {
- "Clickdensity": {
- "http://www.clickdensity.com/": [
- "clickdensity.com"
- ]
- }
- },
- {
- "ClickGuard": {
- "https://www.clickguard.com/": [
- "clickguard.com"
- ]
- }
- },
- {
- "ClickTale": {
- "http://www.clicktale.com/": [
- "clicktale.com",
- "clicktale.net",
- "pantherssl.com"
- ],
- "session-replay": "true"
- }
- },
- {
- "ClixMetrix": {
- "http://www.clixmetrix.com/": [
- "clixmetrix.com"
- ]
- }
- },
- {
- "Clixpy": {
- "http://clixpy.com/": [
- "clixpy.com"
- ]
- }
- },
- {
- "ClustrMaps": {
- "http://www.clustrmaps.com/": [
- "clustrmaps.com"
- ]
- }
- },
- {
- "CNZZ": {
- "http://www.cnzz.com/": [
- "cnzz.com"
- ]
- }
- },
- {
- "Compuware": {
- "http://www.compuware.com/": [
- "axf8.net",
- "compuware.com",
- "gomez.com"
- ]
- }
- },
- {
- "comScore": {
- "http://www.comscore.com/": [
- "certifica.com",
- "comscore.com",
- "mdotlabs.com",
- "scorecardresearch.com",
- "sitestat.com",
- "voicefive.com"
- ]
- }
- },
- {
- "Connexity": {
- "http://www.connexity.com/": [
- "connexity.com",
- "connexity.net"
- ]
- }
- },
- {
- "Convert Insights": {
- "http://www.convert.com/": [
- "convert.com",
- "reedge.com"
- ]
- }
- },
- {
- "Convertro": {
- "http://www.convertro.com/": [
- "convertro.com"
- ]
- }
- },
- {
- "Crazy Egg": {
- "http://www.crazyegg.com/": [
- "cetrk.com",
- "crazyegg.com"
- ]
- }
- },
- {
- "Crowd Science": {
- "http://crowdscience.com/": [
- "crowdscience.com"
- ]
- }
- },
- {
- "Cya2": {
- "http://cya2.net/": [
- "cya2.net"
- ]
- }
- },
- {
- "Dataium": {
- "http://www.dataium.com/": [
- "collserve.com",
- "dataium.com"
- ]
- }
- },
- {
- "Deep Intent": {
- "https://www.deepintent.com/": [
- "deepintent.com"
- ]
- }
- },
- {
- "Demandbase": {
- "http://www.demandbase.com/": [
- "company-target.com",
- "demandbase.com"
- ]
- }
- },
- {
- "DirectCORP": {
- "http://www.directcorp.de/": [
- "ipcounter.de"
- ]
- }
- },
- {
- "DistilNetworks": {
- "https://www.distilnetworks.com/": [
- "distiltag.com"
- ]
- }
- },
- {
- "DoubleVerify": {
- "http://www.doubleverify.com/": [
- "doubleverify.com"
- ]
- }
- },
- {
- "dwstat.com": {
- "http://www.dwstat.cn/": [
- "dwstat.cn"
- ]
- }
- },
- {
- "ECSAnalytics": {
- "https://www.theecsinc.com/": [
- "ecsanalytics.com"
- ]
- }
- },
- {
- "EFF": {
- "https://www.eff.org/": [
- "do-not-tracker.org",
- "eviltracker.net",
- "trackersimulator.org"
- ]
- }
- },
- {
- "eProof.com": {
- "http://www.eproof.com/": [
- "eproof.com"
- ]
- }
- },
- {
- "etracker": {
- "http://www.etracker.com/": [
- "etracker.com",
- "etracker.de",
- "sedotracker.com",
- "sedotracker.de"
- ]
- }
- },
- {
- "Eulerian Technologies": {
- "http://www.eulerian.com/": [
- "eulerian.com",
- "eulerian.net"
- ]
- }
- },
- {
- "eXTReMe digital": {
- "http://extremetracking.com/": [
- "extreme-dm.com",
- "extremetracking.com"
- ]
- }
- },
- {
- "Eyeota": {
- "http://eyeota.net/": [
- "eyeota.net"
- ]
- }
- },
- {
- "Feedjit": {
- "http://feedjit.com/": [
- "feedjit.com"
- ]
- }
- },
- {
- "Flashtalking": {
- "http://www.flashtalking.com/": [
- "encoremetrics.com",
- "sitecompass.com"
- ]
- }
- },
- {
- "Footprint": {
- "http://www.footprintlive.com/": [
- "footprintlive.com"
- ]
- }
- },
- {
- "Free Online Users": {
- "http://www.freeonlineusers.com/": [
- "freeonlineusers.com"
- ]
- }
- },
- {
- "Free-PageRank.com": {
- "http://www.free-pagerank.com/": [
- "free-pagerank.com"
- ]
- }
- },
- {
- "Friends2Follow": {
- "https://friends2follow.com/": [
- "antifraudjs.friends2follow.com"
- ]
- }
- },
- {
- "Fullstory": {
- "https://www.fullstory.com/": [
- "fullstory.com"
- ],
- "session-replay": "true"
- }
- },
- {
- "GetSiteControl": {
- "https://getsitecontrol.com/": [
- "getsitecontrol.com"
- ]
- }
- },
- {
- "GfK Group": {
- "http://www.gfk.com/": [
- "daphnecm.com",
- "gfk.com",
- "gfkdaphne.com"
- ]
- }
- },
- {
- "GitHub": {
- "https://github.com/": [
- "gaug.es"
- ]
- }
- },
- {
- "Go Daddy": {
- "http://www.godaddy.com/": [
- "godaddy.com",
- "trafficfacts.com"
- ]
- }
- },
- {
- "Google": {
- "http://www.google.com/": [
- "google-analytics.com",
- "postrank.com"
- ]
- }
- },
- {
- "GoSquared": {
- "https://www.gosquared.com/": [
- "gosquared.com"
- ]
- }
- },
- {
- "GoStats": {
- "http://gostats.com/": [
- "gostats.com"
- ]
- }
- },
- {
- "GrapheneMedia": {
- "http://graphenemedia.in/": [
- "graphenedigitalanalytics.in"
- ]
- }
- },
- {
- "GTop": {
- "http://www.gtop.ro/": [
- "gtop.ro",
- "gtopstats.com"
- ]
- }
- },
- {
- "Hearst": {
- "http://www.hearst.com/": [
- "raasnet.com",
- "redaril.com"
- ]
- }
- },
- {
- "Histats": {
- "http://www.histats.com/": [
- "histats.com"
- ]
- }
- },
- {
- "HitsLink": {
- "http://www.hitslink.com/": [
- "hitslink.com"
- ]
- }
- },
- {
- "Hit Sniffer": {
- "http://www.hitsniffer.com/": [
- "hitsniffer.com"
- ]
- }
- },
- {
- "Hotjar": {
- "https://www.hotjar.com": [
- "hotjar.com"
- ]
- }
- },
- {
- "HubSpot": {
- "http://www.hubspot.com/": [
- "hs-analytics.net"
- ]
- }
- },
- {
- "IBM": {
- "http://www.ibm.com/": [
- "cmcore.com",
- "coremetrics.com",
- "ibm.com"
- ]
- }
- },
- {
- "InboundWriter": {
- "http://www.inboundwriter.com/": [
- "enquisite.com",
- "inboundwriter.com"
- ]
- }
- },
- {
- "Infernotions": {
- "https://infernotions.com/": [
- "infernotions.com"
- ]
- }
- },
- {
- "INFOnline": {
- "https://www.infonline.de/": [
- "infonline.de",
- "ioam.de",
- "ivwbox.de"
- ]
- }
- },
- {
- "InfoStars": {
- "http://infostars.ru/": [
- "hotlog.ru",
- "infostars.ru"
- ]
- }
- },
- {
- "Inspectlet": {
- "http://www.inspectlet.com/": [
- "inspectlet.com"
- ]
- }
- },
- {
- "IntelligenceFocus": {
- "http://www.intelligencefocus.com/": [
- "domodomain.com",
- "intelligencefocus.com"
- ]
- }
- },
- {
- "iPerceptions": {
- "http://www.iperceptions.com/": [
- "iperceptions.com"
- ]
- }
- },
- {
- "IslayTech": {
- "http://islay.tech": [
- "islay.tech"
- ]
- }
- },
- {
- "ItIsATracker": {
- "https://itisatracker.com/": [
- "itisatracker.com"
- ],
- "dnt": "eff"
- }
- },
- {
- "KeyMetric": {
- "http://www.keymetric.net/": [
- "keymetric.net"
- ]
- }
- },
- {
- "KISSmetrics": {
- "http://kissmetrics.com/": [
- "kissmetrics.com"
- ]
- }
- },
- {
- "Kitcode": {
- "http://src.kitcode.net/": [
- "src.kitcode.net"
- ]
- }
- },
- {
- "LeadForensics": {
- "https://www.leadforensics.com": [
- "leadforensics.com"
- ]
- }
- },
- {
- "LineZing": {
- "http://www.linezing.com/": [
- "linezing.com"
- ]
- }
- },
- {
- "LivePerson": {
- "http://www.liveperson.net/": [
- "liveperson.com",
- "nuconomy.com"
- ]
- }
- },
- {
- "Logdy": {
- "http://logdy.com/": [
- "logdy.com"
- ]
- }
- },
- {
- "Lotame": {
- "http://www.lotame.com/": [
- "crwdcntrl.net",
- "lotame.com"
- ]
- }
- },
- {
- "LuckyOrange": {
- "https://www.luckyorange.com": [
- "luckyorange.com",
- "luckyorange.net"
- ],
- "session-replay": "true"
- }
- },
- {
- "Lynchpin": {
- "http://www.lynchpin.com/": [
- "lynchpin.com",
- "lypn.com"
- ]
- }
- },
- {
- "Lyris": {
- "http://www.lyris.com/": [
- "clicktracks.com",
- "lyris.com"
- ]
- }
- },
- {
- "Lytiks": {
- "http://www.lytiks.com/": [
- "lytiks.com"
- ]
- }
- },
- {
- "MarkMonitor": {
- "https://www.markmonitor.com": [
- "9c9media.ca",
- "markmonitor.com"
- ]
- }
- },
- {
- "Marktest": {
- "http://www.marktest.com/": [
- "marktest.com",
- "marktest.pt"
- ]
- }
- },
- {
- "MaxMind": {
- "https://www.maxmind.com/en/home": [
- "maxmind.com",
- "mmapiws.com"
- ]
- }
- },
- {
- "Médiamétrie-eStat": {
- "http://www.mediametrie-estat.com/": [
- "estat.com",
- "mediametrie-estat.com"
- ]
- }
- },
- {
- "Merkle": {
- "https://www.merkleinc.com/": [
- "merkleinc.com",
- "rkdms.com"
- ]
- }
- },
- {
- "Mixpanel": {
- "https://mixpanel.com/": [
- "mixpanel.com",
- "mxpnl.com"
- ]
- }
- },
- {
- "Mongoose Metrics": {
- "http://www.mongoosemetrics.com/": [
- "mongoosemetrics.com"
- ]
- }
- },
- {
- "Monitus": {
- "http://www.monitus.net/": [
- "monitus.net"
- ]
- }
- },
- {
- "motigo": {
- "http://motigo.com/": [
- "motigo.com",
- "nedstatbasic.net"
- ]
- }
- },
- {
- "Mouseflow": {
- "http://mouseflow.com/": [
- "mouseflow.com"
- ]
- }
- },
- {
- "MyPagerank.Net": {
- "http://www.mypagerank.net/": [
- "mypagerank.net"
- ]
- }
- },
- {
- "Mystighty": {
- "http://mystighty.info/": [
- "mystighty.info",
- "sweeterge.info"
- ]
- }
- },
- {
- "Narrative": {
- "http://narrative.io/2/": [
- "narrative.io"
- ]
- }
- },
- {
- "Net Applications": {
- "http://www.netapplications.com/": [
- "hitsprocessor.com",
- "netapplications.com"
- ]
- }
- },
- {
- "New Relic": {
- "http://newrelic.com/": [
- "newrelic.com",
- "nr-data.net"
- ]
- }
- },
- {
- "NewsRight": {
- "http://www.newsright.com/": [
- "apnewsregistry.com"
- ]
- }
- },
- {
- "NextSTAT": {
- "http://www.nextstat.com/": [
- "nextstat.com"
- ]
- }
- },
- {
- "Nielsen": {
- "http://www.nielsen.com/": [
- "glanceguide.com",
- "nielsen.com"
- ]
- }
- },
- {
- "NuDataSecurity": {
- "https://nudatasecurity.com/": [
- "nudatasecurity.com"
- ]
- }
- },
- {
- "nurago": {
- "http://www.nurago.com/": [
- "nurago.com",
- "nurago.de",
- "sensic.net"
- ]
- }
- },
- {
- "Observer": {
- "http://observerapp.com/": [
- "observerapp.com"
- ]
- }
- },
- {
- "OnAudience": {
- "http://www.onaudience.com/": [
- "behavioralengine.com",
- "onaudience.com"
- ]
- }
- },
- {
- "OneStat": {
- "http://www.onestat.com/": [
- "onestat.com"
- ]
- }
- },
- {
- "Openstat": {
- "https://www.openstat.ru/": [
- "openstat.ru",
- "spylog.com"
- ]
- }
- },
- {
- "Opentracker": {
- "http://www.opentracker.net/": [
- "opentracker.net"
- ]
- }
- },
- {
- "Opolen": {
- "https://opolen.com.br": [
- "opolen.com.br"
- ]
- }
- },
- {
- "Optimizely": {
- "https://www.optimizely.com/": [
- "optimizely.com"
- ]
- }
- },
- {
- "Oracle": {
- "http://www.oracle.com/": [
- "eloqua.com",
- "maxymiser.com"
- ]
- }
- },
- {
- "ÖWA": {
- "http://www.oewa.at/": [
- "oewa.at",
- "oewabox.at"
- ]
- }
- },
- {
- "Parse.ly": {
- "http://parsely.com/": [
- "parsely.com"
- ]
- }
- },
- {
- "PersianStat.com": {
- "http://www.persianstat.com/": [
- "persianstat.com"
- ]
- }
- },
- {
- "Phonalytics": {
- "http://www.phonalytics.com/": [
- "phonalytics.com"
- ]
- }
- },
- {
- "phpMyVisites": {
- "http://www.phpmyvisites.us/": [
- "phpmyvisites.us"
- ]
- }
- },
- {
- "Piwik": {
- "http://piwik.org/": [
- "piwik.org"
- ]
- }
- },
- {
- "PixAnalytics": {
- "https://pixanalytics.com/": [
- "pixanalytics.com"
- ]
- }
- },
- {
- "Poool": {
- "http://poool.fr/": [
- "poool.fr"
- ]
- }
- },
- {
- "Pronunciator": {
- "http://www.pronunciator.com/": [
- "pronunciator.com",
- "visitorville.com"
- ]
- }
- },
- {
- "Qualaroo": {
- "http://qualaroo.com/": [
- "kissinsights.com",
- "qualaroo.com"
- ]
- }
- },
- {
- "QuinStreet": {
- "http://quinstreet.com/": [
- "thecounter.com"
- ]
- }
- },
- {
- "Quintelligence": {
- "http://www.quintelligence.com/": [
- "quintelligence.com"
- ]
- }
- },
- {
- "RadarURL": {
- "http://radarurl.com/": [
- "radarurl.com"
- ]
- }
- },
- {
- "Research Now": {
- "http://www.researchnow.com/": [
- "researchnow.com",
- "valuedopinions.co.uk"
- ]
- }
- },
- {
- "Retail Automata": {
- "https://retailautomata.com": [
- "retailautomata.com"
- ]
- }
- },
- {
- "Revtracks": {
- "http://revtrax.com/": [
- "revtrax.com"
- ]
- }
- },
- {
- "Ringier": {
- "http://ringier.cz/": [
- "ringier.cz"
- ]
- }
- },
- {
- "Rollick": {
- "https://gorollick.com": [
- "rollick.io"
- ]
- }
- },
- {
- "Roxr": {
- "http://roxr.net/": [
- "getclicky.com",
- "roxr.net",
- "staticstuff.net"
- ]
- }
- },
- {
- "Safecount": {
- "http://www.safecount.net/": [
- "dl-rms.com",
- "dlqm.net",
- "questionmarket.com",
- "safecount.net"
- ]
- }
- },
- {
- "SageMetrics": {
- "http://www.sagemetrics.com/": [
- "sageanalyst.net",
- "sagemetrics.com"
- ]
- }
- },
- {
- "Salesintelligence": {
- "https://salesintelligence.pl/": [
- "plugin.management"
- ]
- }
- },
- {
- "SeeVolution": {
- "https://www.seevolution.com/": [
- "seevolution.com",
- "svlu.net"
- ]
- }
- },
- {
- "Segment.io": {
- "https://segment.io/": [
- "segment.io"
- ]
- }
- },
- {
- "SendPulse": {
- "https://sendpulse.com/": [
- "sendpulse.com"
- ]
- }
- },
- {
- "SessionCam": {
- "https://sessioncam.com/": [
- "sessioncam.com"
- ],
- "session-replay": "true"
- }
- },
- {
- "ShinyStat": {
- "http://www.shinystat.com/": [
- "shinystat.com"
- ]
- }
- },
- {
- "Smartlook": {
- "https://www.smartlook.com/": [
- "smartlook.com"
- ],
- "session-replay": "true"
- }
- },
- {
- "Snoobi": {
- "http://www.snoobi.com/": [
- "snoobi.com"
- ]
- }
- },
- {
- "Sourcepoint": {
- "https://www.sourcepoint.com/": [
- "summerhamster.com"
- ]
- }
- },
- {
- "Sputnik.ru": {
- "http://sputnik.ru": [
- "sputnik.ru"
- ]
- }
- },
- {
- "StackTrack": {
- "http://stat-track.com": [
- "stat-track.com"
- ]
- }
- },
- {
- "stat4u": {
- "http://stat.4u.pl/": [
- "4u.pl"
- ]
- }
- },
- {
- "StatCounter": {
- "http://statcounter.com/": [
- "statcounter.com"
- ]
- }
- },
- {
- "Statisfy": {
- "http://statisfy.net": [
- "statisfy.net"
- ]
- }
- },
- {
- "STATSIT": {
- "http://www.statsit.com/": [
- "statsit.com"
- ]
- }
- },
- {
- "Storeland": {
- "https://storeland.ru/": [
- "storeland.ru"
- ]
- }
- },
- {
- "Stratigent": {
- "http://www.stratigent.com/": [
- "stratigent.com"
- ]
- }
- },
- {
- "Tealium": {
- "https://tealium.com": [
- "tealiumiq.com"
- ]
- }
- },
- {
- "TechSolutions": {
- "https://www.techsolutions.com.tw/": [
- "techsolutions.com.tw"
- ]
- }
- },
- {
- "TENSQUARE": {
- "http://www.tensquare.com/": [
- "tensquare.com"
- ]
- }
- },
- {
- "The Heron Partnership": {
- "http://www.heronpartners.com.au/": [
- "heronpartners.com.au",
- "marinsm.com"
- ]
- }
- },
- {
- "TNS": {
- "http://www.tnsglobal.com/": [
- "sesamestats.com",
- "statistik-gallup.net",
- "tns-counter.ru",
- "tns-cs.net",
- "tnsglobal.com"
- ]
- }
- },
- {
- "TrackingSoft": {
- "http://trackingsoft.com/": [
- "roia.biz",
- "trackingsoft.com"
- ]
- }
- },
- {
- "TrafficScore": {
- "https://trafficscore.com/": [
- "trafficscore.com"
- ]
- }
- },
- {
- "Twitter": {
- "https://twitter.com/": [
- "crashlytics.com",
- "tweetdeck.com"
- ]
- }
- },
- {
- "Umbel": {
- "https://www.umbel.com/": [
- "umbel.com"
- ]
- }
- },
- {
- "User Local": {
- "http://nakanohito.jp/": [
- "nakanohito.jp"
- ]
- }
- },
- {
- "V12 Data": {
- "https://www.v12data.com/": [
- "v12data.com",
- "v12group.com"
- ]
- }
- },
- {
- "Vertster": {
- "http://www.vertster.com/": [
- "vertster.com"
- ]
- }
- },
- {
- "VisiStat": {
- "http://www.visistat.com/": [
- "sa-as.com",
- "visistat.com"
- ]
- }
- },
- {
- "Visit Streamer": {
- "http://www.visitstreamer.com/": [
- "visitstreamer.com"
- ]
- }
- },
- {
- "vistrac": {
- "http://vistrac.com/": [
- "vistrac.com"
- ]
- }
- },
- {
- "ViziSense": {
- "http://www.vizisense.com/": [
- "vizisense.com",
- "vizisense.net"
- ]
- }
- },
- {
- "Webclicktracker": {
- "http://www.webclicktracker.com/": [
- "webclicktracker.com"
- ]
- }
- },
- {
- "Web Stats": {
- "http://www.onlinewebstats.com/": [
- "onlinewebstats.com"
- ]
- }
- },
- {
- "Web Tracking Services": {
- "http://www.webtrackingservices.com/": [
- "web-stat.com",
- "webtrackingservices.com"
- ]
- }
- },
- {
- "Web Traxs": {
- "http://www.webtraxs.com/": [
- "webtraxs.com"
- ]
- }
- },
- {
- "Webtrekk": {
- "http://www.webtrekk.com/": [
- "webtrekk.com",
- "webtrekk.net"
- ]
- }
- },
- {
- "Webtrends": {
- "http://webtrends.com/": [
- "reinvigorate.net",
- "webtrends.com",
- "webtrendslive.com"
- ]
- }
- },
- {
- "White Ops": {
- "https://www.whiteops.com/": [
- "adzmath.com",
- "whiteops.com"
- ]
- }
- },
- {
- "whos.amung.us": {
- "http://whos.amung.us/": [
- "amung.us"
- ]
- }
- },
- {
- "Wingify": {
- "http://wingify.com/": [
- "visualwebsiteoptimizer.com",
- "wingify.com"
- ]
- }
- },
- {
- "Woopra": {
- "http://www.woopra.com/": [
- "woopra-ns.com",
- "woopra.com"
- ]
- }
- },
- {
- "WOW Analytics": {
- "http://www.wowanalytics.co.uk/": [
- "wowanalytics.co.uk"
- ]
- }
- },
- {
- "WPP": {
- "http://www.wpp.com/": [
- "compete.com"
- ]
- }
- },
- {
- "Wysistat": {
- "http://www.wysistat.com/": [
- "wysistat.com"
- ]
- }
- },
- {
- "Yahoo!": {
- "http://www.yahoo.com/": [
- "analytics.yahoo.com"
- ]
- }
- },
- {
- "YellowTracker": {
- "http://www.yellowtracker.com/": [
- "yellowtracker.com"
- ]
- }
- },
- {
- "YSance": {
- "https://www.ysance.com/data-services/fr/home/": [
- "y-track.com"
- ]
- }
- }
- ],
- "Fingerprinting": [
- {
- "Adabra": {
- "https://www.adabra.com/": [
- "adabra.com"
- ]
- }
- },
- {
- "Adbot": {
- "https://adbot.tw/": [
- "adbot.tw"
- ]
- }
- },
- {
- "AdGainerSolutions": {
- "http://adgainersolutions.com/adgainer/": [
- "adgainersolutions.com"
- ]
- }
- },
- {
- "AdMaven": {
- "https://ad-maven.com/": [
- "ad-maven.com",
- "agreensdistra.info",
- "boudja.com",
- "rensovetors.info",
- "wrethicap.info"
- ]
- }
- },
- {
- "Admicro": {
- "http://www.admicro.vn/": [
- "admicro.vn",
- "vcmedia.vn"
- ]
- }
- },
- {
- "Adnium": {
- "https://adnium.com": [
- "adnium.com",
- "montwam.top"
- ]
- }
- },
- {
- "AdScore": {
- "http://www.adscoremarketing.com/": [
- "adsco.re"
- ]
- }
- },
- {
- "AdYouLike": {
- "https://www.adyoulike.com/": [
- "pulpix.com"
- ]
- }
- },
- {
- "AivaLabs": {
- "https://aivalabs.com": [
- "aivalabs.com"
- ]
- }
- },
- {
- "Albacross": {
- "https://albacross.com": [
- "albacross.com"
- ]
- }
- },
- {
- "AppCast": {
- "https://appcast.io/": [
- "appcast.io"
- ]
- }
- },
- {
- "AuditedMedia": {
- "https://auditedmedia.com/": [
- "aamapi.com",
- "aamsitecertifier.com",
- "auditedmedia.com"
- ]
- }
- },
- {
- "Augur": {
- "http://www.augur.io/": [
- "augur.io"
- ]
- }
- },
- {
- "Azet": {
- "http://mediaimpact.sk/": [
- "azetklik.sk",
- "rsz.sk"
- ]
- }
- },
- {
- "BetssonPalantir": {
- "https://betssonpalantir.com/": [
- "betssonpalantir.com"
- ]
- }
- },
- {
- "BigClick": {
- "http://bigclick.me/": [
- "bgclck.me",
- "xcvgdf.party"
- ]
- }
- },
- {
- "BitMedia": {
- "https://bitmedia.io/": [
- "bitmedia.io"
- ]
- }
- },
- {
- "BlueCava": {
- "http://www.bluecava.com/": [
- "bluecava.com"
- ]
- }
- },
- {
- "BoostBox": {
- "https://www.boostbox.com.br/": [
- "boostbox.com.br"
- ]
- }
- },
- {
- "Brandcrumb": {
- "http://www.brandcrumb.com": [
- "brandcrumb.com"
- ]
- }
- },
- {
- "BreakTime": {
- "https://www.breaktime.com.tw/": [
- "breaktime.com.tw"
- ]
- }
- },
- {
- "BrightEdge": {
- "http://www.brightedge.com/": [
- "b0e8.com"
- ]
- }
- },
- {
- "C3 Metrics": {
- "http://c3metrics.com/": [
- "attributionmodel.com",
- "c3metrics.com",
- "c3tag.com"
- ]
- }
- },
- {
- "CallSource": {
- "https://www.callsource.com/": [
- "leadtrackingdata.com"
- ]
- }
- },
- {
- "CartsGuru": {
- "https://carts.guru/": [
- "carts.guru"
- ]
- }
- },
- {
- "ClearLink": {
- "https://www.clearlink.com/": [
- "clearlink.com"
- ]
- }
- },
- {
- "Clickayab": {
- "http://www.clickyab.com": [
- "clickyab.com"
- ]
- }
- },
- {
- "ClickFrog": {
- "https://clickfrog.ru/": [
- "bashirian.biz",
- "buckridge.link",
- "franecki.net",
- "quitzon.net",
- "reichelcormier.bid",
- "wisokykulas.bid"
- ]
- }
- },
- {
- "ClickGuard": {
- "https://www.clickguard.com/": [
- "clickguard.com"
- ]
- }
- },
- {
- "Clixtell": {
- "https://www.clixtell.com/": [
- "clixtell.com"
- ]
- }
- },
- {
- "Consumable": {
- "http://consumable.com/": [
- "consumable.com"
- ]
- }
- },
- {
- "dmpxs": {
- "http://bob.dmpxs.com": [
- "dmpxs.com"
- ]
- }
- },
- {
- "ECSAnalytics": {
- "https://www.theecsinc.com/": [
- "ecsanalytics.com"
- ]
- }
- },
- {
- "EroAdvertising": {
- "http://www.ero-advertising.com/": [
- "ero-advertising.com"
- ]
- }
- },
- {
- "eyeReturn Marketing": {
- "http://www.eyereturnmarketing.com/": [
- "eyereturn.com",
- "eyereturnmarketing.com"
- ]
- }
- },
- {
- "Fanplayr": {
- "https://fanplayr.com/": [
- "fanplayr.com"
- ]
- }
- },
- {
- "Foresee": {
- "https://www.foresee.com": [
- "answerscloud.com",
- "foresee.com"
- ]
- }
- },
- {
- "Friends2Follow": {
- "https://friends2follow.com/": [
- "antifraudjs.friends2follow.com"
- ]
- }
- },
- {
- "FuelX": {
- "https://fuelx.com/": [
- "fuel451.com",
- "fuelx.com"
- ]
- }
- },
- {
- "Gleam": {
- "https://gleam.io/": [
- "fraudjs.io"
- ]
- }
- },
- {
- "GrapheneMedia": {
- "http://graphenemedia.in/": [
- "graphenedigitalanalytics.in"
- ]
- }
- },
- {
- "Gruner + Jahr": {
- "http://www.guj.de/": [
- "ligatus.com"
- ]
- }
- },
- {
- "HilltopAds": {
- "https://hilltopads.com/": [
- "hilltopads.net",
- "shoporielder.pro"
- ]
- }
- },
- {
- "HotelChamp": {
- "https://www.hotelchamp.com": [
- "hotelchamp.com"
- ]
- }
- },
- {
- "iMedia": {
- "http://www.imedia.cz": [
- "imedia.cz"
- ]
- }
- },
- {
- "IslayTech": {
- "http://islay.tech": [
- "islay.tech"
- ]
- }
- },
- {
- "ismatlab.com": {
- "http://ismatlab.com": [
- "ismatlab.com"
- ]
- }
- },
- {
- "Itch": {
- "https://itch.io/": [
- "itch.io"
- ]
- }
- },
- {
- "justuno": {
- "https://www.justuno.com/": [
- "justuno.com"
- ]
- }
- },
- {
- "Konduto": {
- "http://konduto.com": [
- "k-analytix.com",
- "konduto.com"
- ]
- }
- },
- {
- "LeadsHub": {
- "https://ztsrv.com/": [
- "ztsrv.com"
- ]
- }
- },
- {
- "lptracker": {
- "https://lptracker.io/": [
- "lptracker.io"
- ]
- }
- },
- {
- "MaxMind": {
- "https://www.maxmind.com/en/home": [
- "maxmind.com",
- "mmapiws.com"
- ]
- }
- },
- {
- "Mercadopago": {
- "https://www.mercadopago.com/": [
- "mercadopago.com"
- ]
- }
- },
- {
- "Mobials": {
- "http://mobials.com": [
- "mobials.com"
- ]
- }
- },
- {
- "Mystighty": {
- "http://mystighty.info/": [
- "mystighty.info",
- "sweeterge.info"
- ]
- }
- },
- {
- "Negishim": {
- "http://www.negishim.org": [
- "negishim.org"
- ]
- }
- },
- {
- "NuDataSecurity": {
- "https://nudatasecurity.com/": [
- "nudatasecurity.com"
- ]
- }
- },
- {
- "OneAd": {
- "https://www.onead.com.tw/": [
- "guoshipartners.com",
- "onevision.com.tw"
- ]
- }
- },
- {
- "OnlineMetrix": {
- "http://h.online-metrix.net": [
- "online-metrix.net"
- ]
- }
- },
- {
- "Opolen": {
- "https://opolen.com.br": [
- "opolen.com.br"
- ]
- }
- },
- {
- "PaymentsMB": {
- "https://paymentsmb.com": [
- "paymentsmb.com"
- ]
- }
- },
- {
- "Paypal": {
- "https://www.paypal.com": [
- "simility.com"
- ]
- }
- },
- {
- "PerimeterX": {
- "https://www.perimeterx.com": [
- "perimeterx.net"
- ]
- }
- },
- {
- "PixAnalytics": {
- "https://pixanalytics.com/": [
- "pixanalytics.com"
- ]
- }
- },
- {
- "Pixlee": {
- "https://www.pixlee.com/": [
- "pixlee.com"
- ]
- }
- },
- {
- "Poool": {
- "http://poool.fr/": [
- "poool.fr"
- ]
- }
- },
- {
- "PPCProtect": {
- "https://ppcprotect.com": [
- "ppcprotect.com"
- ]
- }
- },
- {
- "PrismApp": {
- "https://www.prismapp.io/": [
- "prismapp.io"
- ]
- }
- },
- {
- "PrometheusIntelligenceTechnology": {
- "https://prometheusintelligencetechnology.com/": [
- "prometheusintelligencetechnology.com"
- ]
- }
- },
- {
- "Provers": {
- "http://provers.pro": [
- "provers.pro"
- ]
- }
- },
- {
- "Psonstrentie": {
- "http://psonstrentie.info": [
- "psonstrentie.info"
- ]
- }
- },
- {
- "Rollick": {
- "https://gorollick.com": [
- "rollick.io"
- ]
- }
- },
- {
- "SAP": {
- "https://www.sap.com": [
- "seewhy.com"
- ]
- }
- },
- {
- "Selectable Media": {
- "http://selectablemedia.com/": [
- "nabbr.com",
- "selectablemedia.com"
- ]
- }
- },
- {
- "Semantiqo": {
- "http://semantiqo.com/": [
- "semantiqo.com"
- ]
- }
- },
- {
- "SendPulse": {
- "https://sendpulse.com/": [
- "sendpulse.com"
- ]
- }
- },
- {
- "ShaftTraffic": {
- "https://shafttraffic.com": [
- "libertystmedia.com"
- ]
- }
- },
- {
- "Shortest": {
- "http://shorte.st/": [
- "shorte.st"
- ]
- }
- },
- {
- "SiftScience": {
- "https://sift.com/": [
- "siftscience.com"
- ]
- }
- },
- {
- "Signifyd": {
- "https://www.signifyd.com/": [
- "signifyd.com"
- ]
- }
- },
- {
- "Smi": {
- "http://24smi.net": [
- "24smi.net"
- ]
- }
- },
- {
- "Socital": {
- "https://www.socital.com": [
- "socital.com"
- ]
- }
- },
- {
- "Storeland": {
- "https://storeland.ru/": [
- "storeland.ru"
- ]
- }
- },
- {
- "Stripe": {
- "https://stripe.com": [
- "stripe.network"
- ]
- }
- },
- {
- "TechSolutions": {
- "https://www.techsolutions.com.tw/": [
- "techsolutions.com.tw"
- ]
- }
- },
- {
- "tongdun.cn": {
- "https://www.tongdun.cn/?lan=EN": [
- "fraudmetrix.cn",
- "tongdun.net"
- ]
- }
- },
- {
- "Upland": {
- "https://uplandsoftware.com/": [
- "leadlander.com",
- "sf14g.com"
- ]
- }
- },
- {
- "Vendemore": {
- "https://vendemore.com/": [
- "vendemore.com"
- ]
- }
- },
- {
- "VerticalHealth": {
- "https://www.verticalhealth.com/": [
- "verticalhealth.net"
- ]
- }
- },
- {
- "Webmecanik": {
- "https://www.webmecanik.com/": [
- "webmecanik.com"
- ]
- }
- },
- {
- "WideOrbit": {
- "https://www.wideorbit.com/": [
- "dep-x.com"
- ]
- }
- },
- {
- "YSance": {
- "https://www.ysance.com/data-services/fr/home/": [
- "y-track.com"
- ]
- }
- },
- {
- "ZafulAffiliate": {
- "https://affiliate.zaful.com/": [
- "affasi.com",
- "gw-ec.com",
- "zaful.com"
- ]
- }
- },
- {
- "Zefir": {
- "https://ze-fir.com/": [
- "ze-fir.com"
- ]
- }
- }
- ],
- "Social": [
- {
- "AddThis": {
- "http://www.addthis.com/": [
- "addthis.com",
- "addthiscdn.com",
- "addthisedge.com",
- "clearspring.com",
- "connectedads.net",
- "xgraph.com",
- "xgraph.net"
- ]
- }
- },
- {
- "Causes": {
- "http://www.causes.com/": [
- "causes.com"
- ]
- }
- },
- {
- "Digg": {
- "http://digg.com/": [
- "digg.com"
- ]
- }
- },
- {
- "Facebook": {
- "http://www.facebook.com/": [
- "apps.fbsbx.com",
- "atdmt.com",
- "facebook.com",
- "facebook.de",
- "facebook.fr",
- "facebook.net",
- "fb.com",
- "fbsbx.com",
- "friendfeed.com"
- ]
- }
- },
- {
- "Google": {
- "http://www.google.com/": [
- "developers.google.com",
- "gmail.com",
- "googlemail.com",
- "inbox.google.com",
- "mail.google.com",
- "orkut.com",
- "plus.google.com",
- "plusone.google.com",
- "smartlock.google.com",
- "voice.google.com",
- "wave.google.com"
- ]
- }
- },
- {
- "LinkedIn": {
- "http://www.linkedin.com/": [
- "licdn.com",
- "linkedin.com"
- ]
- }
- },
- {
- "Lockerz": {
- "http://lockerz.com/": [
- "lockerz.com"
- ]
- }
- },
- {
- "Mail.Ru": {
- "http://mail.ru/": [
- "list.ru",
- "mail.ru"
- ]
- }
- },
- {
- "Meebo": {
- "https://www.meebo.com/": [
- "meebo.com",
- "meebocdn.net"
- ]
- }
- },
- {
- "Papaya": {
- "http://papayamobile.com/": [
- "papayamobile.com"
- ]
- }
- },
- {
- "reddit": {
- "http://www.reddit.com/": [
- "reddit.com"
- ]
- }
- },
- {
- "Shareaholic": {
- "http://www.shareaholic.com/": [
- "shareaholic.com"
- ]
- }
- },
- {
- "ShareThis": {
- "http://sharethis.com/": [
- "sharethis.com"
- ]
- }
- },
- {
- "StumbleUpon": {
- "http://www.stumbleupon.com/": [
- "stumble-upon.com",
- "stumbleupon.com"
- ]
- }
- },
- {
- "Twitter": {
- "https://twitter.com/": [
- "twimg.com",
- "twitter.com",
- "twitter.jp"
- ]
- }
- },
- {
- "VKontakte": {
- "http://vk.com/": [
- "userapi.com",
- "vk.com",
- "vkontakte.ru"
- ]
- }
- },
- {
- "Yahoo!": {
- "http://www.yahoo.com/": [
- "address.yahoo.com",
- "alerts.yahoo.com",
- "avatars.yahoo.com",
- "buzz.yahoo.com",
- "calendar.yahoo.com",
- "edit.yahoo.com",
- "legalredirect.yahoo.com",
- "login.yahoo.com",
- "mail.yahoo.com",
- "my.yahoo.com",
- "mybloglog.com",
- "notepad.yahoo.com",
- "pulse.yahoo.com",
- "rocketmail.com",
- "webmessenger.yahoo.com",
- "ymail.com"
- ]
- }
- }
- ],
- "Cryptomining": [
- {
- "a.js": {
- "http://zymerget.bid": [
- "alflying.date",
- "alflying.win",
- "anybest.site",
- "flightsy.bid",
- "flightsy.win",
- "flightzy.bid",
- "flightzy.date",
- "flightzy.win",
- "zymerget.bid",
- "zymerget.faith"
- ],
- "performance": "true"
- }
- },
- {
- "CashBeet": {
- "http://cashbeet.com": [
- "cashbeet.com",
- "serv1swork.com"
- ]
- }
- },
- {
- "CoinHive": {
- "https://coinhive.com": [
- "ad-miner.com",
- "authedmine.com",
- "bmst.pw",
- "cnhv.co",
- "coin-hive.com",
- "coinhive.com",
- "wsservices.org"
- ],
- "performance": "true"
- }
- },
- {
- "CoinPot": {
- "http://coinpot.co": [
- "coinpot.co"
- ],
- "performance": "true"
- }
- },
- {
- "CryptoLoot": {
- "https://crypto-loot.com": [
- "cryptaloot.pro",
- "crypto-loot.com",
- "cryptolootminer.com",
- "flashx.pw",
- "gitgrub.pro",
- "reauthenticator.com",
- "statdynamic.com",
- "webmine.pro"
- ],
- "performance": "true"
- }
- },
- {
- "CryptoWebMiner": {
- "https://www.crypto-webminer.com": [
- "bitcoin-pay.eu",
- "crypto-webminer.com",
- "ethpocket.de",
- "ethtrader.de"
- ]
- }
- },
- {
- "Gridcash": {
- "https://www.gridcash.net/": [
- "adless.io",
- "gridcash.net"
- ],
- "performance": "true"
- }
- },
- {
- "JSE": {
- "http://jsecoin.com": [
- "freecontent.bid",
- "freecontent.date",
- "freecontent.stream",
- "hashing.win",
- "hostingcloud.racing",
- "hostingcloud.science",
- "jsecoin.com"
- ],
- "performance": "true"
- }
- },
- {
- "MinerAlt": {
- "http://mineralt.io": [
- "1q2w3.website",
- "analytics.blue",
- "aster18cdn.nl",
- "belicimo.pw",
- "besstahete.info",
- "dinorslick.icu",
- "feesocrald.com",
- "gramombird.com",
- "istlandoll.com",
- "mepirtedic.com",
- "mineralt.io",
- "pampopholf.com",
- "tercabilis.info",
- "tulip18.com",
- "vidzi.tv",
- "yololike.space"
- ],
- "performance": "true"
- }
- },
- {
- "Minescripts": {
- "http://minescripts.info": [
- "minescripts.info",
- "sslverify.info"
- ],
- "performance": "true"
- }
- },
- {
- "MineXMR": {
- "http://minexmr.stream": [
- "minexmr.stream"
- ],
- "performance": "true"
- }
- },
- {
- "NeroHut": {
- "https://nerohut.com": [
- "nerohut.com",
- "nhsrv.cf"
- ],
- "performance": "true"
- }
- },
- {
- "Service4refresh": {
- "https://service4refresh.info": [
- "service4refresh.info"
- ]
- }
- },
- {
- "SpareChange": {
- "http://sparechange.io": [
- "sparechange.io"
- ],
- "performance": "true"
- }
- },
- {
- "SwiftMining": {
- "https://swiftmining.win/": [
- "swiftmining.win"
- ]
- }
- },
- {
- "Webmine": {
- "https://webmine.cz/": [
- "authedwebmine.cz",
- "webmine.cz"
- ]
- }
- },
- {
- "WebminePool": {
- "http://webminepool.com": [
- "webminepool.com"
- ],
- "performance": "true"
- }
- },
- {
- "Webmining": {
- "https://webmining.co/": [
- "webmining.co"
- ]
- }
- }
- ]
- }
+ "license": "Copyright 2010-2019 Disconnect, Inc. / 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/>.",
+ "categories": {
+ "Advertising": [
+ {
+ "2leep.com": {
+ "http://2leep.com/": ["2leep.com"]
+ }
+ },
+ {
+ "33Across": {
+ "http://33across.com/": ["33across.com"]
+ }
+ },
+ {
+ "365Media": {
+ "http://365media.com/": ["365media.com"]
+ }
+ },
+ {
+ "4INFO": {
+ "http://www.4info.com/": ["4info.com", "adhaven.com"]
+ }
+ },
+ {
+ "4mads": {
+ "http://4mads.com/": ["4mads.com"]
+ }
+ },
+ {
+ "Abax Interactive": {
+ "http://abaxinteractive.com/": ["abaxinteractive.com"]
+ }
+ },
+ {
+ "Accelia": {
+ "http://www.accelia.net/": ["accelia.net", "durasite.net"]
+ }
+ },
+ {
+ "Accordant Media": {
+ "http://www.accordantmedia.com/": ["accordantmedia.com"]
+ }
+ },
+ {
+ "Acquisio": {
+ "http://www.acquisio.com/": ["acquisio.com", "clickequations.net"]
+ }
+ },
+ {
+ "Actisens": {
+ "http://www.actisens.com/": ["actisens.com", "gestionpub.com"]
+ }
+ },
+ {
+ "ActiveConversion": {
+ "http://www.activeconversion.com/": [
+ "activeconversion.com",
+ "activemeter.com"
+ ]
+ }
+ },
+ {
+ "Act-On": {
+ "http://www.act-on.com/": ["act-on.com", "actonsoftware.com"]
+ }
+ },
+ {
+ "Acuity": {
+ "http://www.acuity.com/": [
+ "acuity.com",
+ "acuityads.com",
+ "acuityplatform.com"
+ ]
+ }
+ },
+ {
+ "AD2ONE": {
+ "http://www.ad2onegroup.com/": ["ad2onegroup.com"]
+ }
+ },
+ {
+ "Ad4Game": {
+ "http://ad4game.com/": ["ad4game.com"]
+ }
+ },
+ {
+ "ad6media": {
+ "http://www.ad6media.fr/": ["ad6media.fr"]
+ }
+ },
+ {
+ "Adabra": {
+ "https://www.adabra.com/": ["adabra.com"]
+ }
+ },
+ {
+ "Adality": {
+ "http://adality.de/": ["adality.de", "adrtx.net"]
+ }
+ },
+ {
+ "AdaptiveAds": {
+ "http://www.adaptiveads.com/": ["adaptiveads.com"]
+ }
+ },
+ {
+ "Adaptly": {
+ "http://adaptly.com/": ["adaptly.com"]
+ }
+ },
+ {
+ "Adara Media": {
+ "http://www.adaramedia.com/": [
+ "adaramedia.com",
+ "opinmind.com",
+ "yieldoptimizer.com"
+ ]
+ }
+ },
+ {
+ "Adatus": {
+ "http://www.adatus.com/": ["adatus.com"]
+ }
+ },
+ {
+ "Adbot": {
+ "https://adbot.tw/": ["adbot.tw"]
+ }
+ },
+ {
+ "Adbrain": {
+ "http://www.adbrain.com/": ["adbrain.com", "adbrn.com"]
+ }
+ },
+ {
+ "adBrite": {
+ "http://www.adbrite.com/": ["adbrite.com"]
+ }
+ },
+ {
+ "Adbroker.de": {
+ "http://adbroker.de/": ["adbroker.de"]
+ }
+ },
+ {
+ "Adchemy": {
+ "http://www.adchemy.com/": ["adchemy.com"]
+ }
+ },
+ {
+ "AdCirrus": {
+ "http://adcirrus.com/": ["adcirrus.com"]
+ }
+ },
+ {
+ "Ad Decisive": {
+ "http://www.addecisive.com/": ["a2dfp.net", "addecisive.com"]
+ }
+ },
+ {
+ "addGloo": {
+ "http://www.addgloo.com/": ["addgloo.com"]
+ }
+ },
+ {
+ "Addvantage Media": {
+ "http://www.addvantagemedia.com/": ["addvantagemedia.com"]
+ }
+ },
+ {
+ "Ad Dynamo": {
+ "http://www.addynamo.com/": ["addynamo.com", "addynamo.net"]
+ }
+ },
+ {
+ "Adelphic": {
+ "https://adelphic.com/": ["adelphic.com", "ipredictive.com"]
+ }
+ },
+ {
+ "AdEngage": {
+ "http://adengage.com/": ["adengage.com"]
+ }
+ },
+ {
+ "AD Europe": {
+ "http://www.adeurope.com/": ["adeurope.com"]
+ }
+ },
+ {
+ "AdExtent": {
+ "http://www.adextent.com/": ["adextent.com"]
+ }
+ },
+ {
+ "AdF.ly": {
+ "http://adf.ly/": ["adf.ly"]
+ }
+ },
+ {
+ "Adfonic": {
+ "http://adfonic.com/": ["adfonic.com"]
+ }
+ },
+ {
+ "Adforge": {
+ "http://adforgeinc.com/": ["adforgeinc.com"]
+ }
+ },
+ {
+ "Adform": {
+ "http://www.adform.com/": [
+ "adform.com",
+ "adform.net",
+ "adformdsp.net"
+ ]
+ }
+ },
+ {
+ "AdFox": {
+ "http://adfox.ru/": ["adfox.ru"]
+ }
+ },
+ {
+ "AdFrontiers": {
+ "http://www.adfrontiers.com/": ["adfrontiers.com"]
+ }
+ },
+ {
+ "Adfunky": {
+ "http://www.adfunky.com/": ["adfunky.com", "adfunkyserver.com"]
+ }
+ },
+ {
+ "Adfusion": {
+ "http://www.adfusion.com/": ["adfusion.com"]
+ }
+ },
+ {
+ "AdGainerSolutions": {
+ "http://adgainersolutions.com/adgainer/": ["adgainersolutions.com"]
+ }
+ },
+ {
+ "AdGent Digital": {
+ "http://www.adgentdigital.com/": [
+ "adgentdigital.com",
+ "shorttailmedia.com"
+ ]
+ }
+ },
+ {
+ "AdGibbon": {
+ "http://www.adgibbon.com/": ["adgibbon.com"]
+ }
+ },
+ {
+ "Adglare": {
+ "https://www.adglare.com/": ["adglare.com", "adglare.net"]
+ }
+ },
+ {
+ "adhood": {
+ "http://www.adhood.com/": ["adhood.com"]
+ }
+ },
+ {
+ "Adiant": {
+ "http://www.adiant.com/": ["adblade.com", "adiant.com"]
+ }
+ },
+ {
+ "AdInsight": {
+ "http://www.adinsight.com/": ["adinsight.com", "adinsight.eu"]
+ }
+ },
+ {
+ "AdIQuity": {
+ "http://adiquity.com/": ["adiquity.com"]
+ }
+ },
+ {
+ "ADITION": {
+ "http://www.adition.com/": ["adition.com"]
+ }
+ },
+ {
+ "AdJug": {
+ "http://www.adjug.com/": ["adjug.com"]
+ }
+ },
+ {
+ "AdJuggler": {
+ "http://www.adjuggler.com/": ["adjuggler.com", "adjuggler.net"]
+ }
+ },
+ {
+ "Adjust": {
+ "https://adjust.com": ["adjust.com"]
+ }
+ },
+ {
+ "AdKeeper": {
+ "http://www.adkeeper.com/": ["adkeeper.com", "akncdn.com"]
+ }
+ },
+ {
+ "AdKernel": {
+ "http://adkernel.com": ["adkernel.com"]
+ }
+ },
+ {
+ "Ad Knife": {
+ "http://static.adknife.com/": ["adknife.com"]
+ }
+ },
+ {
+ "Adknowledge": {
+ "http://www.adknowledge.com/": [
+ "adknowledge.com",
+ "adparlor.com",
+ "bidsystem.com",
+ "cubics.com",
+ "lookery.com"
+ ]
+ }
+ },
+ {
+ "AdLantis": {
+ "http://www.adlantis.jp/": ["adimg.net", "adlantis.jp"]
+ }
+ },
+ {
+ "AdLeave": {
+ "http://www.adleave.com/": ["adleave.com"]
+ }
+ },
+ {
+ "Adlibrium": {
+ "http://www.adlibrium.com/": ["adlibrium.com"]
+ }
+ },
+ {
+ "Adlucent": {
+ "http://adlucent.com": ["adlucent.com"]
+ }
+ },
+ {
+ "Ad Magnet": {
+ "http://www.admagnet.com/": ["admagnet.com", "admagnet.net"]
+ }
+ },
+ {
+ "Admarketplace": {
+ "http://www.admarketplace.com/": [
+ "admarketplace.com",
+ "admarketplace.net",
+ "ampxchange.com"
+ ]
+ }
+ },
+ {
+ "AdMarvel": {
+ "http://www.admarvel.com/": ["admarvel.com"]
+ }
+ },
+ {
+ "AdMatrix": {
+ "http://www.admatrix.jp/": ["admatrix.jp"]
+ }
+ },
+ {
+ "AdMaven": {
+ "https://ad-maven.com/": [
+ "ad-maven.com",
+ "agreensdistra.info",
+ "boudja.com",
+ "rensovetors.info",
+ "wrethicap.info"
+ ]
+ }
+ },
+ {
+ "AdMaximizer Network": {
+ "http://admaximizer.com/": ["admaximizer.com"]
+ }
+ },
+ {
+ "AdMedia": {
+ "http://www.admedia.com/": ["admedia.com"]
+ }
+ },
+ {
+ "Admeta": {
+ "http://www.admeta.com/": ["admeta.com", "atemda.com"]
+ }
+ },
+ {
+ "Admicro": {
+ "http://www.admicro.vn/": ["admicro.vn", "vcmedia.vn"]
+ }
+ },
+ {
+ "Admixer": {
+ "https://admixer.co.kr/main": ["admixer.co.kr"]
+ }
+ },
+ {
+ "Admized": {
+ "http://www.admized.com/": ["admized.com"]
+ }
+ },
+ {
+ "Admobile": {
+ "http://admobile.com/": ["admobile.com"]
+ }
+ },
+ {
+ "Admotion": {
+ "http://www.admotion.com/": ["admotion.com", "nspmotion.com"]
+ }
+ },
+ {
+ "Adnetik": {
+ "http://adnetik.com/": ["adnetik.com", "wtp101.com"]
+ }
+ },
+ {
+ "AdNetwork.net": {
+ "http://www.adnetwork.net/": ["adnetwork.net"]
+ }
+ },
+ {
+ "Adnium": {
+ "https://adnium.com": ["adnium.com"]
+ }
+ },
+ {
+ "adnologies": {
+ "http://www.adnologies.com/": ["adnologies.com", "heias.com"]
+ }
+ },
+ {
+ "Adobe": {
+ "http://www.adobe.com/": [
+ "2o7.net",
+ "auditude.com",
+ "demdex.com",
+ "demdex.net",
+ "dmtracker.com",
+ "efrontier.com",
+ "everestads.net",
+ "everestjs.net",
+ "everesttech.net",
+ "hitbox.com",
+ "omniture.com",
+ "omtrdc.net",
+ "touchclarity.com"
+ ]
+ }
+ },
+ {
+ "AdOcean": {
+ "http://www.adocean-global.com/": ["adocean-global.com", "adocean.pl"]
+ }
+ },
+ {
+ "Adometry": {
+ "http://www.adometry.com/": ["adometry.com", "dmtry.com"]
+ }
+ },
+ {
+ "Adomik": {
+ "http://www.adomik.com/": ["adomik.com"]
+ }
+ },
+ {
+ "AdOnion": {
+ "http://www.adonion.com/": ["adonion.com"]
+ }
+ },
+ {
+ "Adorika": {
+ "http://www.clickotmedia.com/": ["clickotmedia.com"]
+ }
+ },
+ {
+ "Adotmob": {
+ "https://adotmob.com/": ["adotmob.com"]
+ }
+ },
+ {
+ "ADP Dealer Services": {
+ "http://www.adpdealerservices.com/": [
+ "admission.net",
+ "adpdealerservices.com",
+ "cobalt.com"
+ ]
+ }
+ },
+ {
+ "ad pepper media": {
+ "http://www.adpepper.us/": ["adpepper.com", "adpepper.us"]
+ }
+ },
+ {
+ "AdPerfect": {
+ "http://www.adperfect.com/": ["adperfect.com"]
+ }
+ },
+ {
+ "Adperium": {
+ "http://www.adperium.com/": ["adperium.com"]
+ }
+ },
+ {
+ "Adpersia": {
+ "http://www.adpersia.com/": ["adpersia.com"]
+ }
+ },
+ {
+ "adPrecision": {
+ "http://adprecision.net/": ["adprs.net", "aprecision.net"]
+ }
+ },
+ {
+ "AdPredictive": {
+ "http://www.adpredictive.com/": ["adpredictive.com"]
+ }
+ },
+ {
+ "AdReactor": {
+ "http://www.adreactor.com/": ["adreactor.com"]
+ }
+ },
+ {
+ "AdReady": {
+ "http://www.adready.com/": ["adready.com", "adreadytractions.com"]
+ }
+ },
+ {
+ "AdRevolution": {
+ "http://adrevolution.com/": ["adrevolution.com"]
+ }
+ },
+ {
+ "AdRiver": {
+ "http://adriver.ru/": ["adriver.ru"]
+ }
+ },
+ {
+ "adrolays": {
+ "http://adrolays.com/": ["adrolays.com", "adrolays.de"]
+ }
+ },
+ {
+ "AdRoll": {
+ "http://www.adroll.com/": ["adroll.com"]
+ }
+ },
+ {
+ "adscale": {
+ "http://www.adscale.de/": ["adscale.de"]
+ }
+ },
+ {
+ "Adscience": {
+ "https://www.adscience.nl/": ["adscience.nl"]
+ }
+ },
+ {
+ "AdServerPub": {
+ "http://www.adserverpub.com/": ["adserverpub.com"]
+ }
+ },
+ {
+ "AdShuffle": {
+ "http://www.adshuffle.com/": ["adshuffle.com"]
+ }
+ },
+ {
+ "AdSide": {
+ "http://www.adside.com/": ["adside.com", "doclix.com"]
+ }
+ },
+ {
+ "AdSpeed": {
+ "http://www.adspeed.com/": ["adspeed.com", "adspeed.net"]
+ }
+ },
+ {
+ "Adsperity": {
+ "https://www.adsperity.com/": ["adsperity.com"]
+ }
+ },
+ {
+ "AdSpirit": {
+ "http://www.adspirit.de/": [
+ "adspirit.com",
+ "adspirit.de",
+ "adspirit.net"
+ ]
+ }
+ },
+ {
+ "Adsrevenue.net": {
+ "http://adsrevenue.net/": ["adsrevenue.net"]
+ }
+ },
+ {
+ "AdStir": {
+ "https://en.ad-stir.com/": ["ad-stir.com"]
+ }
+ },
+ {
+ "AdsTours": {
+ "http://www.adstours.com/": ["adstours.com", "clickintext.net"]
+ }
+ },
+ {
+ "Adsty": {
+ "http://adsty.com/": ["adsty.com", "adx1.com"]
+ }
+ },
+ {
+ "Adsupply": {
+ "http://www.adsupply.com/": ["4dsply.com", "adsupply.com"]
+ }
+ },
+ {
+ "Adswizz": {
+ "http://adswizz.com": ["adswizz.com"]
+ }
+ },
+ {
+ "ADTECH": {
+ "http://www.adtech.com/": ["adtech.com", "adtech.de", "adtechus.com"]
+ }
+ },
+ {
+ "Adtegrity.com": {
+ "http://www.adtegrity.com/": ["adtegrity.com", "adtegrity.net"]
+ }
+ },
+ {
+ "ADTELLIGENCE": {
+ "http://www.adtelligence.de/": ["adtelligence.de"]
+ }
+ },
+ {
+ "Adthink": {
+ "https://adthink.com/": ["adthink.com", "audienceinsights.net"]
+ }
+ },
+ {
+ "AdTiger": {
+ "http://www.adtiger.de/": ["adtiger.de"]
+ }
+ },
+ {
+ "AdTruth": {
+ "http://adtruth.com/": ["adtruth.com"]
+ }
+ },
+ {
+ "Adult AdWorld": {
+ "http://adultadworld.com/": ["adultadworld.com"]
+ }
+ },
+ {
+ "Adultmoda": {
+ "http://www.adultmoda.com/": ["adultmoda.com"]
+ }
+ },
+ {
+ "Adventive": {
+ "http://adventive.com/": ["adventive.com"]
+ }
+ },
+ {
+ "Adverline": {
+ "http://www.adverline.com/": ["adnext.fr", "adverline.com"]
+ }
+ },
+ {
+ "Adversal.com": {
+ "http://www.adversal.com/": ["adv-adserver.com", "adversal.com"]
+ }
+ },
+ {
+ "Adverticum": {
+ "http://www.adverticum.com/": [
+ "adsmart.com",
+ "adverticum.com",
+ "adverticum.net"
+ ]
+ }
+ },
+ {
+ "Advertise.com": {
+ "http://www.advertise.com/": ["advertise.com"]
+ }
+ },
+ {
+ "AdvertiseSpace": {
+ "http://www.advertisespace.com/": ["advertisespace.com"]
+ }
+ },
+ {
+ "Advert Stream": {
+ "http://www.advertstream.com/": ["advertstream.com"]
+ }
+ },
+ {
+ "Advisor Media": {
+ "http://advisormedia.cz/": ["advisormedia.cz"]
+ }
+ },
+ {
+ "Adworx": {
+ "http://adworx.at/": ["adworx.at", "adworx.be", "adworx.nl"]
+ }
+ },
+ {
+ "AdXpansion": {
+ "http://www.adxpansion.com/": ["adxpansion.com"]
+ }
+ },
+ {
+ "Adxvalue": {
+ "http://adxvalue.com/": ["adxvalue.com", "adxvalue.de"]
+ }
+ },
+ {
+ "adyard": {
+ "http://adyard.de/": ["adyard.de"]
+ }
+ },
+ {
+ "AdYield": {
+ "http://www.adyield.com/": ["adxyield.com", "adyield.com"]
+ }
+ },
+ {
+ "AdYouLike": {
+ "https://www.adyoulike.com/": [
+ "adyoulike.com",
+ "omnitagjs.com",
+ "pulpix.com"
+ ]
+ }
+ },
+ {
+ "ADZ": {
+ "http://www.adzcentral.com/": ["adzcentral.com"]
+ }
+ },
+ {
+ "Adzerk": {
+ "http://www.adzerk.com/": ["adzerk.com", "adzerk.net"]
+ }
+ },
+ {
+ "adzly": {
+ "http://www.adzly.com/": ["adzly.com"]
+ }
+ },
+ {
+ "Aegis Group": {
+ "http://www.aemedia.com/": ["aemedia.com", "bluestreak.com"]
+ }
+ },
+ {
+ "AERIFY MEDIA": {
+ "http://aerifymedia.com/": ["aerifymedia.com", "anonymous-media.com"]
+ }
+ },
+ {
+ "Affectv": {
+ "http://affectv.co.uk/": ["affectv.co.uk"]
+ }
+ },
+ {
+ "affilinet": {
+ "http://www.affili.net/": [
+ "affili.net",
+ "affilinet-inside.de",
+ "banner-rotation.com",
+ "successfultogether.co.uk"
+ ]
+ }
+ },
+ {
+ "Affine": {
+ "http://www.affine.tv/": ["affine.tv", "affinesystems.com"]
+ }
+ },
+ {
+ "Affinity": {
+ "http://www.affinity.com/": ["affinity.com"]
+ }
+ },
+ {
+ "AfterDownload": {
+ "http://www.afterdownload.com/": ["afdads.com", "afterdownload.com"]
+ }
+ },
+ {
+ "Aim4Media": {
+ "http://aim4media.com/": ["aim4media.com"]
+ }
+ },
+ {
+ "Airpush": {
+ "http://www.airpush.com/": ["airpush.com"]
+ }
+ },
+ {
+ "AK": {
+ "http://www.aggregateknowledge.com/": [
+ "aggregateknowledge.com",
+ "agkn.com"
+ ]
+ }
+ },
+ {
+ "Akamai": {
+ "http://www.akamai.com/": ["imiclk.com"]
+ }
+ },
+ {
+ "Albacross": {
+ "https://albacross.com": ["albacross.com"]
+ }
+ },
+ {
+ "AllStarMediaGroup": {
+ "http://allstarmediagroup.com/": ["allstarmediagroup.com"]
+ }
+ },
+ {
+ "Aloodo": {
+ "https://aloodo.com/": ["aloodo.com"]
+ }
+ },
+ {
+ "AlterGeo": {
+ "http://altergeo.ru/": ["altergeo.ru"]
+ }
+ },
+ {
+ "Amazon.com": {
+ "http://www.amazon.com/": [
+ "amazon-adsystem.com",
+ "amazon.ca",
+ "amazon.co.jp",
+ "amazon.co.uk",
+ "amazon.de",
+ "amazon.es",
+ "amazon.fr",
+ "amazon.it",
+ "assoc-amazon.com"
+ ]
+ }
+ },
+ {
+ "Ambient Digital": {
+ "http://ambientdigital.com.vn/": [
+ "adnetwork.vn",
+ "ambientdigital.com.vn"
+ ]
+ }
+ },
+ {
+ "Amobee": {
+ "http://amobee.com/": [
+ "adconion.com",
+ "amgdgt.com",
+ "amobee.com",
+ "euroclick.com",
+ "smartclip.com",
+ "turn.com"
+ ]
+ }
+ },
+ {
+ "AndBeyond": {
+ "http://andbeyond.media/": ["andbeyond.media"]
+ }
+ },
+ {
+ "Answers.com": {
+ "http://www.answers.com/": ["dsply.com"]
+ }
+ },
+ {
+ "AOL": {
+ "http://www.aol.com/": [
+ "adsonar.com",
+ "adtechjp.com",
+ "advertising.com",
+ "aolcloud.net",
+ "atwola.com",
+ "leadback.com",
+ "tacoda.net",
+ "vidible.tv"
+ ]
+ }
+ },
+ {
+ "AppCast": {
+ "https://appcast.io/": ["appcast.io"]
+ }
+ },
+ {
+ "Appenda": {
+ "http://www.appenda.com/": ["appenda.com"]
+ }
+ },
+ {
+ "AppFlood": {
+ "http://appflood.com/": ["appflood.com"]
+ }
+ },
+ {
+ "Appier": {
+ "http://appier.com/": ["appier.com"]
+ }
+ },
+ {
+ "Applifier": {
+ "http://www.applifier.com/": ["applifier.com"]
+ }
+ },
+ {
+ "Applovin": {
+ "http://www.applovin.com/": ["applovin.com"]
+ }
+ },
+ {
+ "AppNexus": {
+ "http://www.appnexus.com/": [
+ "adlantic.nl",
+ "adnxs.com",
+ "adrdgt.com",
+ "alenty.com",
+ "appnexus.com"
+ ]
+ }
+ },
+ {
+ "AppsFlyer": {
+ "http://appsflyer.com/": ["appsflyer.com"]
+ }
+ },
+ {
+ "appssavvy": {
+ "http://appssavvy.com/": ["appssavvy.com"]
+ }
+ },
+ {
+ "Arkwrights Homebrew": {
+ "http://www.arkwrightshomebrew.com/": [
+ "arkwrightshomebrew.com",
+ "ctasnet.com"
+ ]
+ }
+ },
+ {
+ "AT Internet": {
+ "http://www.atinternet.com/": ["hit-parade.com"]
+ }
+ },
+ {
+ "ATN": {
+ "http://affiliatetracking.com/": ["affiliatetracking.com"]
+ }
+ },
+ {
+ "Atoomic.com": {
+ "http://www.atoomic.com/": ["atoomic.com"]
+ }
+ },
+ {
+ "Atrinsic": {
+ "http://atrinsic.com/": ["atrinsic.com"]
+ }
+ },
+ {
+ "AT&T": {
+ "http://www.att.com/": ["att.com", "yp.com"]
+ }
+ },
+ {
+ "Audience2Media": {
+ "http://www.audience2media.com/": ["audience2media.com"]
+ }
+ },
+ {
+ "Audience Ad Network": {
+ "http://audienceadnetwork.com/": ["audienceadnetwork.com"]
+ }
+ },
+ {
+ "AudienceScience": {
+ "http://www.audiencescience.com/": [
+ "audiencescience.com",
+ "revsci.net",
+ "targetingmarketplace.com",
+ "wunderloop.net"
+ ]
+ }
+ },
+ {
+ "Augme": {
+ "http://www.augme.com/": ["augme.com", "hipcricket.com"]
+ }
+ },
+ {
+ "Augur": {
+ "http://www.augur.io/": ["augur.io"]
+ }
+ },
+ {
+ "AUTOCENTRE.UA": {
+ "http://www.autocentre.ua/": ["am.ua", "autocentre.ua"]
+ }
+ },
+ {
+ "Automattic": {
+ "http://automattic.com/": ["pubmine.com"]
+ }
+ },
+ {
+ "Avalanchers": {
+ "http://www.avalanchers.com/": ["avalanchers.com"]
+ }
+ },
+ {
+ "AvantLink": {
+ "http://www.avantlink.com/": ["avantlink.com"]
+ }
+ },
+ {
+ "Avocet": {
+ "https://avocet.io/": ["avocet.io"]
+ }
+ },
+ {
+ "Avsads": {
+ "http://avsads.com/": ["avsads.com"]
+ }
+ },
+ {
+ "AWeber": {
+ "http://www.aweber.com/": ["aweber.com"]
+ }
+ },
+ {
+ "Awin": {
+ "http://www.awin.com/": [
+ "digitalwindow.com",
+ "dwin1.com",
+ "perfiliate.com"
+ ]
+ }
+ },
+ {
+ "Azet": {
+ "http://mediaimpact.sk/": ["azetklik.sk", "rsz.sk"]
+ }
+ },
+ {
+ "BackBeat Media": {
+ "http://www.backbeatmedia.com/": ["backbeatmedia.com"]
+ }
+ },
+ {
+ "Bannerconnect": {
+ "http://www.bannerconnect.net/": ["bannerconnect.net"]
+ }
+ },
+ {
+ "Barilliance": {
+ "http://www.barilliance.com/": ["barilliance.com"]
+ }
+ },
+ {
+ "BaronsNetworks": {
+ "http://baronsoffers.com/": ["baronsoffers.com"]
+ }
+ },
+ {
+ "Batanga Network": {
+ "http://www.batanganetwork.com/": [
+ "batanga.com",
+ "batanganetwork.com"
+ ]
+ }
+ },
+ {
+ "BeachFront": {
+ "http://beachfront.com/": ["beachfront.com"]
+ }
+ },
+ {
+ "Beanstock Media": {
+ "http://www.beanstockmedia.com/": ["beanstockmedia.com"]
+ }
+ },
+ {
+ "beencounter": {
+ "http://www.beencounter.com/": ["beencounter.com"]
+ }
+ },
+ {
+ "Begun": {
+ "http://www.begun.ru/": ["begun.ru"]
+ }
+ },
+ {
+ "belboon": {
+ "http://www.belboon.com/": ["adbutler.de", "belboon.com"]
+ }
+ },
+ {
+ "Betgenius": {
+ "http://www.betgenius.com/": ["betgenius.com", "connextra.com"]
+ }
+ },
+ {
+ "BetweenDigital": {
+ "http://betweendigital.com": ["betweendigital.com"]
+ }
+ },
+ {
+ "Bidfluence": {
+ "https://www.bidfluence.com/": ["bidfluence.com"]
+ }
+ },
+ {
+ "Bidr": {
+ "http://bidr.io": ["bidr.io"]
+ }
+ },
+ {
+ "BidSwitch": {
+ "https://www.bidswitch.com/": ["bidswitch.net", "mfadsrvr.com"]
+ }
+ },
+ {
+ "Bidtellect": {
+ "https://www.bidtellect.com/": ["bidtellect.com", "bttrack.com"]
+ }
+ },
+ {
+ "BidVertiser": {
+ "http://www.bidvertiser.com/": ["bidvertiser.com"]
+ }
+ },
+ {
+ "BigClick": {
+ "http://bigclick.me/": ["bgclck.me", "xcvgdf.party"]
+ }
+ },
+ {
+ "bigmirnet": {
+ "http://www.bigmir.net/": ["bigmir.net"]
+ }
+ },
+ {
+ "BinLayer": {
+ "http://binlayer.com/": ["binlayer.com"]
+ }
+ },
+ {
+ "Bitcoin Plus": {
+ "http://www.bitcoinplus.com/": ["bitcoinplus.com"]
+ }
+ },
+ {
+ "BitMedia": {
+ "https://bitmedia.io/": ["bitmedia.io"]
+ }
+ },
+ {
+ "BittAds": {
+ "http://www.bittads.com/": ["bittads.com"]
+ }
+ },
+ {
+ "Bizo": {
+ "http://www.bizo.com/": ["bizo.com", "bizographics.com"]
+ }
+ },
+ {
+ "Black Label Ads": {
+ "http://www.blacklabelads.com/": ["blacklabelads.com"]
+ }
+ },
+ {
+ "BlogCatalog": {
+ "http://www.blogcatalog.com/": ["blogcatalog.com"]
+ }
+ },
+ {
+ "BlogFrog": {
+ "http://theblogfrog.com/": ["theblogfrog.com"]
+ }
+ },
+ {
+ "BlogHer": {
+ "http://www.blogher.com/": ["blogher.com", "blogherads.com"]
+ }
+ },
+ {
+ "BlogRollr": {
+ "http://blogrollr.com/": ["blogrollr.com"]
+ }
+ },
+ {
+ "BLOOM Digital Platforms": {
+ "http://bloom-hq.com/": ["adgear.com", "adgrx.com", "bloom-hq.com"]
+ }
+ },
+ {
+ "BlueKai": {
+ "http://www.bluekai.com/": [
+ "bkrtx.com",
+ "bluekai.com",
+ "tracksimple.com"
+ ]
+ }
+ },
+ {
+ "Blu Trumpet": {
+ "http://www.blutrumpet.com/": ["blutrumpet.com"]
+ }
+ },
+ {
+ "Boo-Box": {
+ "http://boo-box.com/": ["boo-box.com"]
+ }
+ },
+ {
+ "BoostBox": {
+ "https://www.boostbox.com.br/": ["boostbox.com.br"]
+ }
+ },
+ {
+ "Bouncex": {
+ "https://www.bouncex.com/": [
+ "bounceexchange.com",
+ "bouncex.com",
+ "bouncex.net"
+ ]
+ }
+ },
+ {
+ "Brainient": {
+ "http://brainient.com/": ["brainient.com"]
+ }
+ },
+ {
+ "Brand Affinity Technologies": {
+ "http://www.brandaffinity.net/": ["brandaffinity.net"]
+ }
+ },
+ {
+ "Brandcrumb": {
+ "http://www.brandcrumb.com": ["brandcrumb.com"]
+ }
+ },
+ {
+ "Brand.net": {
+ "http://www.brand.net/": ["brand.net"]
+ }
+ },
+ {
+ "Brandscreen": {
+ "http://www.brandscreen.com/": ["brandscreen.com", "rtbidder.net"]
+ }
+ },
+ {
+ "BreakTime": {
+ "https://www.breaktime.com.tw/": ["breaktime.com.tw"]
+ }
+ },
+ {
+ "BrightRoll": {
+ "http://www.brightroll.com/": ["brightroll.com", "btrll.com"]
+ }
+ },
+ {
+ "BrightTag": {
+ "http://www.brighttag.com/": [
+ "brighttag.com",
+ "btstatic.com",
+ "thebrighttag.com"
+ ]
+ }
+ },
+ {
+ "Brilig": {
+ "http://www.brilig.com/": ["brilig.com"]
+ }
+ },
+ {
+ "BuckSense": {
+ "http://www.bucksense.com": ["bucksense.com"]
+ }
+ },
+ {
+ "Burstly": {
+ "http://www.burstly.com/": ["burstly.com"]
+ }
+ },
+ {
+ "Burst Media": {
+ "http://www.burstmedia.com/": [
+ "burstbeacon.com",
+ "burstdirectads.com",
+ "burstmedia.com",
+ "burstnet.com",
+ "giantrealm.com"
+ ]
+ }
+ },
+ {
+ "BusinessOnline": {
+ "http://www.businessol.com/": ["businessol.com"]
+ }
+ },
+ {
+ "Button": {
+ "https://www.usebutton.com": ["usebutton.com"]
+ }
+ },
+ {
+ "BuySellAds": {
+ "http://buysellads.com/": ["beaconads.com", "buysellads.com"]
+ }
+ },
+ {
+ "Buysight": {
+ "http://www.buysight.com/": [
+ "buysight.com",
+ "permuto.com",
+ "pulsemgr.com"
+ ]
+ }
+ },
+ {
+ "BuzzParadise": {
+ "http://www.buzzparadise.com/": ["buzzparadise.com"]
+ }
+ },
+ {
+ "BV! MEDIA": {
+ "http://www.bvmedia.ca/": [
+ "bvmedia.ca",
+ "networldmedia.com",
+ "networldmedia.net"
+ ]
+ }
+ },
+ {
+ "c1exchange": {
+ "https://c1exchange.com/": ["c1exchange.com"]
+ }
+ },
+ {
+ "C3 Metrics": {
+ "http://c3metrics.com/": [
+ "attributionmodel.com",
+ "c3metrics.com",
+ "c3tag.com"
+ ]
+ }
+ },
+ {
+ "Cadreon": {
+ "http://www.cadreon.com/": ["cadreon.com"]
+ }
+ },
+ {
+ "CampaignGrid": {
+ "http://www.campaigngrid.com/": ["campaigngrid.com"]
+ }
+ },
+ {
+ "CAPITALDATA": {
+ "http://www.capitaldata.fr/": ["capitaldata.fr"]
+ }
+ },
+ {
+ "Carambola": {
+ "https://www.carambola.com/": ["carambo.la"]
+ }
+ },
+ {
+ "Caraytech": {
+ "http://www.caraytech.com.ar/": ["caraytech.com.ar", "e-planning.net"]
+ }
+ },
+ {
+ "Cart.ro": {
+ "http://www.cart.ro/": ["cart.ro", "statistics.ro"]
+ }
+ },
+ {
+ "CartsGuru": {
+ "https://carts.guru/": ["carts.guru"]
+ }
+ },
+ {
+ "Casale Media": {
+ "http://www.casalemedia.com/": ["casalemedia.com", "medianet.com"]
+ }
+ },
+ {
+ "CBproADS": {
+ "http://www.cbproads.com/": ["cbproads.com"]
+ }
+ },
+ {
+ "Cedato": {
+ "https://www.cedato.com/": ["cedato.com"]
+ }
+ },
+ {
+ "Chango": {
+ "http://www.chango.com/": ["chango.ca", "chango.com"]
+ }
+ },
+ {
+ "ChannelAdvisor": {
+ "http://www.channeladvisor.com/": [
+ "channeladvisor.com",
+ "searchmarketing.com"
+ ]
+ }
+ },
+ {
+ "Channel Intelligence": {
+ "http://www.channelintelligence.com/": ["channelintelligence.com"]
+ }
+ },
+ {
+ "Chartboost": {
+ "https://www.chartboost.com/": ["chartboost.com"]
+ }
+ },
+ {
+ "CheckM8": {
+ "http://www.checkm8.com/": ["checkm8.com"]
+ }
+ },
+ {
+ "Chitika": {
+ "http://chitika.com/": ["chitika.com", "chitika.net"]
+ }
+ },
+ {
+ "ChoiceStream": {
+ "http://www.choicestream.com/": ["choicestream.com"]
+ }
+ },
+ {
+ "ClearLink": {
+ "https://www.clearlink.com/": ["clearlink.com"]
+ }
+ },
+ {
+ "ClearSaleing": {
+ "http://www.clearsaleing.com/": [
+ "clearsaleing.com",
+ "csdata1.com",
+ "csdata2.com",
+ "csdata3.com"
+ ]
+ }
+ },
+ {
+ "Clearsearch Media": {
+ "http://www.clearsearchmedia.com/": [
+ "clearsearchmedia.com",
+ "csm-secure.com"
+ ]
+ }
+ },
+ {
+ "ClearSight Interactive": {
+ "http://www.clearsightinteractive.com/": [
+ "clearsightinteractive.com",
+ "csi-tracking.com"
+ ]
+ }
+ },
+ {
+ "ClickAider": {
+ "http://clickaider.com/": ["clickaider.com"]
+ }
+ },
+ {
+ "Clickayab": {
+ "http://www.clickyab.com": ["clickyab.com"]
+ }
+ },
+ {
+ "Clickbooth": {
+ "http://www.clickbooth.com/": ["adtoll.com", "clickbooth.com"]
+ }
+ },
+ {
+ "ClickDimensions": {
+ "http://www.clickdimensions.com/": ["clickdimensions.com"]
+ }
+ },
+ {
+ "ClickDistrict": {
+ "http://www.clickdistrict.com/": [
+ "clickdistrict.com",
+ "creative-serving.com"
+ ]
+ }
+ },
+ {
+ "ClickFrog": {
+ "https://clickfrog.ru/": [
+ "bashirian.biz",
+ "buckridge.link",
+ "clickfrog.ru",
+ "franecki.net",
+ "quitzon.net",
+ "reichelcormier.bid",
+ "wisokykulas.bid"
+ ]
+ }
+ },
+ {
+ "ClickFuel": {
+ "http://clickfuel.com/": ["conversiondashboard.com"]
+ }
+ },
+ {
+ "ClickInc": {
+ "http://www.clickinc.com/": ["clickinc.com"]
+ }
+ },
+ {
+ "Clicksor": {
+ "http://www.clicksor.com/": ["clicksor.com", "clicksor.net"]
+ }
+ },
+ {
+ "Clickwinks": {
+ "http://www.clickwinks.com/": ["clickwinks.com"]
+ }
+ },
+ {
+ "ClicManager": {
+ "http://www.clicmanager.fr/": ["clicmanager.fr"]
+ }
+ },
+ {
+ "Clixtell": {
+ "https://www.clixtell.com/": ["clixtell.com"]
+ }
+ },
+ {
+ "Clove Network": {
+ "http://www.clovenetwork.com/": ["clovenetwork.com"]
+ }
+ },
+ {
+ "Cognitive Match": {
+ "http://www.cognitivematch.com/": [
+ "cmads.com.tw",
+ "cmadsasia.com",
+ "cmadseu.com",
+ "cmmeglobal.com",
+ "cognitivematch.com"
+ ]
+ }
+ },
+ {
+ "Collective": {
+ "http://collective.com/": [
+ "collective-media.net",
+ "collective.com",
+ "oggifinogi.com",
+ "tumri.com",
+ "tumri.net",
+ "yt1187.net"
+ ]
+ }
+ },
+ {
+ "Commission Junction": {
+ "http://www.cj.com/": [
+ "apmebf.com",
+ "awltovhc.com",
+ "cj.com",
+ "ftjcfx.com",
+ "kcdwa.com",
+ "qksz.com",
+ "qksz.net",
+ "tqlkg.com",
+ "yceml.net"
+ ]
+ }
+ },
+ {
+ "Communicator Corp": {
+ "http://www.communicatorcorp.com/": ["communicatorcorp.com"]
+ }
+ },
+ {
+ "Compass Labs": {
+ "http://compasslabs.com/": ["compasslabs.com"]
+ }
+ },
+ {
+ "Complex Media": {
+ "http://www.complexmedianetwork.com/": [
+ "complex.com",
+ "complexmedianetwork.com"
+ ]
+ }
+ },
+ {
+ "comScore": {
+ "http://www.comscore.com/": [
+ "adxpose.com",
+ "proxilinks.com",
+ "proximic.com",
+ "proximic.net"
+ ]
+ }
+ },
+ {
+ "Connatix.com": {
+ "https://connatix.com/": ["connatix.com"]
+ }
+ },
+ {
+ "Connexity": {
+ "http://www.connexity.com/": ["pricegrabber.com"]
+ }
+ },
+ {
+ "Consilium Media": {
+ "http://www.consiliummedia.com/": ["consiliummedia.com"]
+ }
+ },
+ {
+ "Consumable": {
+ "http://consumable.com/": ["consumable.com"]
+ }
+ },
+ {
+ "CONTAXE": {
+ "http://www.contaxe.com/": ["contaxe.com"]
+ }
+ },
+ {
+ "ContentABC": {
+ "http://contentabc.com/": ["contentabc.com"]
+ }
+ },
+ {
+ "CONTEXTin": {
+ "http://www.contextin.com/": ["admailtiser.com", "contextin.com"]
+ }
+ },
+ {
+ "ContextuAds": {
+ "http://www.contextuads.com/": [
+ "agencytradingdesk.net",
+ "contextuads.com"
+ ]
+ }
+ },
+ {
+ "CONTEXTWEB": {
+ "http://www.contextweb.com/": ["contextweb.com"]
+ }
+ },
+ {
+ "ConvergeDirect": {
+ "http://www.convergedirect.com/": [
+ "convergedirect.com",
+ "convergetrack.com"
+ ]
+ }
+ },
+ {
+ "ConversantMedia": {
+ "http://conversantmedia.com": [
+ "adserver.com",
+ "conversantmedia.com",
+ "dotomi.com",
+ "dtmpub.com",
+ "emjcd.com",
+ "fastclick.com",
+ "fastclick.net",
+ "greystripe.com",
+ "lduhtrp.net",
+ "mediaplex.com",
+ "valueclick.com",
+ "valueclick.net",
+ "valueclickmedia.com"
+ ]
+ }
+ },
+ {
+ "ConversionRuler": {
+ "http://www.conversionruler.com/": ["conversionruler.com"]
+ }
+ },
+ {
+ "Conversive": {
+ "http://www.conversive.nl/": ["conversive.nl"]
+ }
+ },
+ {
+ "CoreMotives": {
+ "http://coremotives.com/": ["coremotives.com"]
+ }
+ },
+ {
+ "Cox Digital Solutions": {
+ "http://www.coxdigitalsolutions.com/": [
+ "adify.com",
+ "afy11.net",
+ "coxdigitalsolutions.com"
+ ]
+ }
+ },
+ {
+ "CPMStar": {
+ "http://www.cpmstar.com/": ["cpmstar.com"]
+ }
+ },
+ {
+ "CPX Interactive": {
+ "http://www.cpxinteractive.com/": [
+ "adreadypixels.com",
+ "cpxadroit.com",
+ "cpxinteractive.com"
+ ]
+ }
+ },
+ {
+ "Creafi": {
+ "http://www.creafi.com/": ["creafi.com"]
+ }
+ },
+ {
+ "Crimtan": {
+ "http://www.crimtan.com/": ["crimtan.com"]
+ }
+ },
+ {
+ "Crisp Media": {
+ "http://www.crispmedia.com/": ["crispmedia.com"]
+ }
+ },
+ {
+ "Criteo": {
+ "http://www.criteo.com/": [
+ "criteo.com",
+ "criteo.net",
+ "hlserve.com",
+ "hooklogic.com",
+ "storetail.io"
+ ]
+ }
+ },
+ {
+ "Cross Pixel": {
+ "http://crosspixel.net/": [
+ "crosspixel.net",
+ "crosspixelmedia.com",
+ "crsspxl.com"
+ ]
+ }
+ },
+ {
+ "cXense": {
+ "http://www.cxense.com/": [
+ "cxense.com",
+ "emediate.biz",
+ "emediate.com",
+ "emediate.dk",
+ "emediate.eu"
+ ]
+ }
+ },
+ {
+ "Cyberplex": {
+ "http://www.cyberplex.com/": ["cyberplex.com"]
+ }
+ },
+ {
+ "Dada": {
+ "http://dada.pro/": ["dada.pro", "simply.com"]
+ }
+ },
+ {
+ "Datalogix": {
+ "http://www.datalogix.com/": ["nexac.com", "nextaction.net"]
+ }
+ },
+ {
+ "DataXu": {
+ "http://www.dataxu.com/": [
+ "dataxu.com",
+ "dataxu.net",
+ "mexad.com",
+ "w55c.net"
+ ]
+ }
+ },
+ {
+ "Datonics": {
+ "http://datonics.com/": ["datonics.com", "pro-market.net"]
+ }
+ },
+ {
+ "Datran Media": {
+ "http://www.datranmedia.com/": [
+ "datranmedia.com",
+ "displaymarketplace.com"
+ ]
+ }
+ },
+ {
+ "Datvantage": {
+ "http://datvantage.com/": ["datvantage.com"]
+ }
+ },
+ {
+ "DC Storm": {
+ "http://www.dc-storm.com/": ["dc-storm.com", "stormiq.com"]
+ }
+ },
+ {
+ "Dedicated Media": {
+ "http://www.dedicatedmedia.com/": [
+ "dedicatedmedia.com",
+ "dedicatednetworks.com"
+ ]
+ }
+ },
+ {
+ "Delivr": {
+ "http://delivr.com/": ["delivr.com", "percentmobile.com"]
+ }
+ },
+ {
+ "Delta Projects": {
+ "http://www.deltaprojects.se/": [
+ "adaction.se",
+ "de17a.com",
+ "deltaprojects.se"
+ ]
+ }
+ },
+ {
+ "Demand Media": {
+ "http://www.demandmedia.com/": ["demandmedia.com", "indieclick.com"]
+ }
+ },
+ {
+ "Deutsche Post DHL": {
+ "http://www.dp-dhl.com/": ["adcloud.com", "adcloud.net", "dp-dhl.com"]
+ }
+ },
+ {
+ "Developer Media": {
+ "http://developermedia.com/": ["developermedia.com", "lqcdn.com"]
+ }
+ },
+ {
+ "DG": {
+ "http://www.dgit.com/": [
+ "dgit.com",
+ "eyeblaster.com",
+ "eyewonder.com",
+ "mdadx.com",
+ "serving-sys.com",
+ "unicast.com"
+ ]
+ }
+ },
+ {
+ "dianomi": {
+ "http://www.dianomi.com/": ["dianomi.com"]
+ }
+ },
+ {
+ "Didit": {
+ "http://www.didit.com/": ["did-it.com", "didit.com"]
+ }
+ },
+ {
+ "DigitalAdConsortium": {
+ "https://www.dac.co.jp/": ["impact-ad.jp"]
+ }
+ },
+ {
+ "Digital River": {
+ "http://www.digitalriver.com/": [
+ "digitalriver.com",
+ "keywordmax.com",
+ "netflame.cc"
+ ]
+ }
+ },
+ {
+ "Digital Target": {
+ "http://digitaltarget.ru": ["digitaltarget.ru"]
+ }
+ },
+ {
+ "Digitize": {
+ "http://www.digitize.ie/": ["digitize.ie"]
+ }
+ },
+ {
+ "DirectAdvert": {
+ "http://www.directadvert.ru/": ["directadvert.ru"]
+ }
+ },
+ {
+ "Direct Response Group": {
+ "http://www.directresponsegroup.com/": [
+ "directresponsegroup.com",
+ "ppctracking.net"
+ ]
+ }
+ },
+ {
+ "Directtrack": {
+ "http://directtrack.com/": ["directtrack.com"]
+ }
+ },
+ {
+ "Disqus": {
+ "http://disqus.com/": ["disqusads.com"]
+ }
+ },
+ {
+ "DistrictM": {
+ "https://districtm.net": ["districtm.io"]
+ }
+ },
+ {
+ "dmpxs": {
+ "http://bob.dmpxs.com": ["dmpxs.com"]
+ }
+ },
+ {
+ "DoublePimp": {
+ "http://doublepimp.com/": ["doublepimp.com"]
+ }
+ },
+ {
+ "DoublePositive": {
+ "http://www.doublepositive.com/": [
+ "bid-tag.com",
+ "doublepositive.com"
+ ]
+ }
+ },
+ {
+ "Drawbridge": {
+ "http://drawbrid.ge/": ["adsymptotic.com", "drawbrid.ge"]
+ }
+ },
+ {
+ "DS-IQ": {
+ "http://www.ds-iq.com/": ["ds-iq.com"]
+ }
+ },
+ {
+ "DSNR Group": {
+ "http://www.dsnrmg.com/": [
+ "dsnrgroup.com",
+ "dsnrmg.com",
+ "traffiliate.com",
+ "z5x.com",
+ "z5x.net"
+ ]
+ }
+ },
+ {
+ "DynAdmic": {
+ "https://dynadmic.com/": ["dynadmic.com", "dyntrk.com"]
+ }
+ },
+ {
+ "DynamicOxygen": {
+ "http://www.dynamicoxygen.com/": [
+ "dynamicoxygen.com",
+ "exitjunction.com"
+ ]
+ }
+ },
+ {
+ "DynamicYield": {
+ "https://www.dynamicyield.com/": [
+ "px-eu.dynamicyield.com",
+ "px.dynamicyield.com"
+ ]
+ }
+ },
+ {
+ "Earnify": {
+ "http://earnify.com/": ["earnify.com"]
+ }
+ },
+ {
+ "eBay": {
+ "http://www.ebay.com/": ["ebay.com"]
+ }
+ },
+ {
+ "Effective Measure": {
+ "http://www.effectivemeasure.com/": [
+ "effectivemeasure.com",
+ "effectivemeasure.net"
+ ]
+ }
+ },
+ {
+ "ekolay": {
+ "http://www.ekolay.net/": ["e-kolay.net", "ekolay.net"]
+ }
+ },
+ {
+ "Eleavers": {
+ "http://eleavers.com/": ["eleavers.com"]
+ }
+ },
+ {
+ "Emego": {
+ "http://www.usemax.de/": ["usemax.de"]
+ }
+ },
+ {
+ "Emerse": {
+ "https://www.emerse.com": ["emerse.com"]
+ }
+ },
+ {
+ "EMX": {
+ "https://emxdigital.com/": [
+ "brealtime.com",
+ "clearstream.tv",
+ "emxdgt.com",
+ "emxdigital.com"
+ ]
+ }
+ },
+ {
+ "Enecto": {
+ "http://www.enecto.com/": ["enecto.com"]
+ }
+ },
+ {
+ "engage:BDR": {
+ "http://engagebdr.com/": ["bnmla.com", "engagebdr.com"]
+ }
+ },
+ {
+ "Engago Technology": {
+ "http://www.engago.com/": ["appmetrx.com", "engago.com"]
+ }
+ },
+ {
+ "Engine Network": {
+ "http://enginenetwork.com/": ["enginenetwork.com"]
+ }
+ },
+ {
+ "Ensighten": {
+ "http://www.ensighten.com/": ["ensighten.com"]
+ }
+ },
+ {
+ "Entireweb": {
+ "http://www.entireweb.com/": ["entireweb.com"]
+ }
+ },
+ {
+ "Epic Media Group": {
+ "http://www.theepicmediagroup.com/": [
+ "epicadvertising.com",
+ "epicmarketplace.com",
+ "epicmobileads.com",
+ "theepicmediagroup.com",
+ "trafficmp.com"
+ ]
+ }
+ },
+ {
+ "Epsilon": {
+ "http://www.epsilon.com/": ["epsilon.com"]
+ }
+ },
+ {
+ "EQ Ads": {
+ "http://www.eqads.com/": ["eqads.com"]
+ }
+ },
+ {
+ "EroAdvertising": {
+ "http://www.ero-advertising.com/": ["ero-advertising.com"]
+ }
+ },
+ {
+ "Etarget": {
+ "http://etargetnet.com/": ["etarget.eu", "etargetnet.com"]
+ }
+ },
+ {
+ "Etineria": {
+ "http://www.etineria.com/": ["adwitserver.com", "etineria.com"]
+ }
+ },
+ {
+ "eTrigue": {
+ "http://www.etrigue.com/": ["etrigue.com"]
+ }
+ },
+ {
+ "Evergage": {
+ "http://www.evergage.com": ["mybuys.com", "veruta.com"]
+ }
+ },
+ {
+ "Everyday Health": {
+ "http://www.everydayhealth.com/": [
+ "everydayhealth.com",
+ "waterfrontmedia.com"
+ ]
+ }
+ },
+ {
+ "Evisions Marketing": {
+ "http://www.evisionsmarketing.com/": [
+ "engineseeker.com",
+ "evisionsmarketing.com"
+ ]
+ }
+ },
+ {
+ "Evolve": {
+ "http://www.evolvemediacorp.com/": [
+ "evolvemediacorp.com",
+ "evolvemediametrics.com",
+ "gorillanation.com"
+ ]
+ }
+ },
+ {
+ "eWayDirect": {
+ "http://www.ewaydirect.com/": ["ewaydirect.com", "ixs1.net"]
+ }
+ },
+ {
+ "ewebse": {
+ "http://ewebse.com/": ["777seo.com", "ewebse.com"]
+ }
+ },
+ {
+ "excitad": {
+ "http://excitad.com/": ["excitad.com"]
+ }
+ },
+ {
+ "eXelate": {
+ "http://exelate.com/": ["exelate.com", "exelator.com"]
+ }
+ },
+ {
+ "ExoClick": {
+ "http://www.exoclick.com/": ["exoclick.com"]
+ }
+ },
+ {
+ "Exosrv": {
+ "http://main.exosrv.com/": ["exosrv.com"]
+ }
+ },
+ {
+ "Experian": {
+ "http://www.experian.com/": ["audienceiq.com", "experian.com"]
+ }
+ },
+ {
+ "expo-MAX": {
+ "http://expo-max.com/": ["expo-max.com"]
+ }
+ },
+ {
+ "Exponential Interactive": {
+ "http://www.exponential.com/": [
+ "adotube.com",
+ "exponential.com",
+ "fulltango.com",
+ "tribalfusion.com"
+ ]
+ }
+ },
+ {
+ "Extension Factory": {
+ "http://www.extensionfactory.com/": ["extensionfactory.com"]
+ }
+ },
+ {
+ "EXTENSIONS.RU": {
+ "http://extensions.ru/": ["extensions.ru"]
+ }
+ },
+ {
+ "Eyeconomy": {
+ "http://www.eyeconomy.co.uk/": [
+ "eyeconomy.co.uk",
+ "eyeconomy.com",
+ "sublimemedia.net"
+ ]
+ }
+ },
+ {
+ "EyeNewton": {
+ "http://eyenewton.ru/": ["eyenewton.ru"]
+ }
+ },
+ {
+ "eyeReturn Marketing": {
+ "http://www.eyereturnmarketing.com/": [
+ "eyereturn.com",
+ "eyereturnmarketing.com"
+ ]
+ }
+ },
+ {
+ "Eyeviewdigital": {
+ "http://www.eyeviewdigital.com/": ["eyeviewdigital.com"]
+ }
+ },
+ {
+ "Facebook": {
+ "http://www.facebook.com/": ["atlassolutions.com"]
+ }
+ },
+ {
+ "Facilitate Digital": {
+ "http://www.facilitatedigital.com/": [
+ "adsfac.eu",
+ "adsfac.info",
+ "adsfac.net",
+ "adsfac.sg",
+ "adsfac.us",
+ "facilitatedigital.com"
+ ]
+ }
+ },
+ {
+ "Fairfax Media": {
+ "http://www.fxj.com.au/": ["fairfax.com.au", "fxj.com.au"]
+ }
+ },
+ {
+ "faithadnet": {
+ "http://www.faithadnet.com/": ["faithadnet.com"]
+ }
+ },
+ {
+ "Fanplayr": {
+ "https://fanplayr.com/": ["fanplayr.com"]
+ }
+ },
+ {
+ "Fathom": {
+ "http://www.fathomdelivers.com/": [
+ "fathomdelivers.com",
+ "fathomseo.com"
+ ]
+ }
+ },
+ {
+ "Federated Media": {
+ "http://www.federatedmedia.net/": [
+ "federatedmedia.net",
+ "fmpub.net",
+ "lijit.com"
+ ]
+ }
+ },
+ {
+ "FetchBack": {
+ "http://www.fetchback.com/": ["fetchback.com"]
+ }
+ },
+ {
+ "Fiksu": {
+ "http://www.fiksu.com/": ["fiksu.com"]
+ }
+ },
+ {
+ "FinancialContent": {
+ "http://www.financialcontent.com/": ["financialcontent.com"]
+ }
+ },
+ {
+ "Fizz-Buzz Media": {
+ "http://www.fizzbuzzmedia.com/": [
+ "fizzbuzzmedia.com",
+ "fizzbuzzmedia.net"
+ ]
+ }
+ },
+ {
+ "Flashtalking": {
+ "http://www.flashtalking.com/": ["flashtalking.com"]
+ }
+ },
+ {
+ "Flite": {
+ "http://www.flite.com/": ["flite.com", "widgetserver.com"]
+ }
+ },
+ {
+ "Fluct": {
+ "https://corp.fluct.jp/": ["adingo.jp", "fluct.jp"]
+ }
+ },
+ {
+ "Flytxt": {
+ "http://www.flytxt.com/": ["flytxt.com"]
+ }
+ },
+ {
+ "Forbes": {
+ "http://www.forbes.com/": ["brandsideplatform.com", "forbes.com"]
+ }
+ },
+ {
+ "Fox One Stop Media": {
+ "http://www.foxonestop.com/": [
+ "fimserve.com",
+ "foxnetworks.com",
+ "foxonestop.com",
+ "mobsmith.com",
+ "myads.com",
+ "othersonline.com"
+ ]
+ }
+ },
+ {
+ "FreakOut": {
+ "http://fout.jp/": ["fout.jp"]
+ }
+ },
+ {
+ "Freedom Communications": {
+ "http://www.freedom.com/": ["freedom.com"]
+ }
+ },
+ {
+ "FreeWheel": {
+ "http://www.freewheel.tv/": ["stickyadstv.com"]
+ }
+ },
+ {
+ "FriendFinder Networks": {
+ "http://ffn.com/": ["adultfriendfinder.com", "ffn.com", "pop6.com"]
+ }
+ },
+ {
+ "Friends2Follow": {
+ "https://friends2follow.com/": ["tracking.friends2follow.com"]
+ }
+ },
+ {
+ "Frog Sex": {
+ "http://www.frogsex.com/": ["double-check.com", "frogsex.com"]
+ }
+ },
+ {
+ "FuelX": {
+ "https://fuelx.com/": ["fuel451.com", "fuelx.com"]
+ }
+ },
+ {
+ "Future Ads": {
+ "https://www.futureads.com/": ["futureads.com", "resultlinks.com"]
+ }
+ },
+ {
+ "Fyber": {
+ "https://www.fyber.com/": ["fyber.com"]
+ }
+ },
+ {
+ "Game Advertising Online": {
+ "http://www.game-advertising-online.com/": [
+ "game-advertising-online.com"
+ ]
+ }
+ },
+ {
+ "Games2win": {
+ "http://www.games2win.com/": ["games2win.com", "inviziads.com"]
+ }
+ },
+ {
+ "Gamned": {
+ "http://www.gamned.com/": ["gamned.com"]
+ }
+ },
+ {
+ "Gannett": {
+ "http://www.gannett.com/": ["gannett.com", "pointroll.com"]
+ }
+ },
+ {
+ "GB-World": {
+ "http://www.gb-world.net/": ["gb-world.net"]
+ }
+ },
+ {
+ "Gemius": {
+ "http://www.gemius.com/": ["gemius.com", "gemius.pl"]
+ }
+ },
+ {
+ "Genesis Media": {
+ "http://www.genesismedia.com/": [
+ "genesismedia.com",
+ "genesismediaus.com"
+ ]
+ }
+ },
+ {
+ "GENIEE": {
+ "https://geniee.co.jp/": ["geniee.co.jp", "gssprt.jp"]
+ }
+ },
+ {
+ "GENIE GROUP": {
+ "http://www.geniegroupltd.co.uk/": ["geniegroupltd.co.uk"]
+ }
+ },
+ {
+ "GeoAds": {
+ "http://www.geoads.com/": ["geoads.com"]
+ }
+ },
+ {
+ "GetGlue": {
+ "http://getglue.com/": ["getglue.com", "smrtlnks.com"]
+ }
+ },
+ {
+ "GetIntent": {
+ "http://getintent.com/": ["adhigh.net", "getintent.com"]
+ }
+ },
+ {
+ "GISMAds": {
+ "http://www.gismads.jp/": ["gismads.jp"]
+ }
+ },
+ {
+ "Glam Media": {
+ "http://www.glammedia.com/": ["glam.com", "glammedia.com"]
+ }
+ },
+ {
+ "Gleam": {
+ "https://gleam.io/": ["fraudjs.io", "gleam.io"]
+ }
+ },
+ {
+ "Globe7": {
+ "http://www.globe7.com/": ["globe7.com"]
+ }
+ },
+ {
+ "GoDataFeed": {
+ "http://godatafeed.com/": ["godatafeed.com"]
+ }
+ },
+ {
+ "Goldbach": {
+ "http://www.goldbachgroup.com/": ["goldbach.com", "goldbachgroup.com"]
+ }
+ },
+ {
+ "GoldSpot Media": {
+ "http://www.goldspotmedia.com/": ["goldspotmedia.com"]
+ }
+ },
+ {
+ "Google": {
+ "http://www.google.com/": [
+ "2mdn.net",
+ "admeld.com",
+ "admob.com",
+ "adservice.google.ca",
+ "adservice.google.com",
+ "adwords.google.com",
+ "cc-dt.com",
+ "destinationurl.com",
+ "doubleclick.net",
+ "googleadservices.com",
+ "googlesyndication.com",
+ "googletagservices.com",
+ "invitemedia.com",
+ "smtad.net",
+ "teracent.com",
+ "teracent.net",
+ "ytsa.net"
+ ]
+ }
+ },
+ {
+ "Grapeshot": {
+ "http://www.grapeshot.co.uk/": ["grapeshot.co.uk"]
+ }
+ },
+ {
+ "Graphnium": {
+ "https://www.graphinium.com/": ["crm4d.com"]
+ }
+ },
+ {
+ "Grocery Shopping Network": {
+ "http://www.groceryshopping.net/": ["groceryshopping.net"]
+ }
+ },
+ {
+ "GroovinAds": {
+ "http://www.groovinads.com/": ["groovinads.com"]
+ }
+ },
+ {
+ "Gruner + Jahr": {
+ "http://www.guj.de/": ["guj.de", "ligatus.com"]
+ }
+ },
+ {
+ "GumGum": {
+ "http://gumgum.com/": ["gumgum.com"]
+ }
+ },
+ {
+ "Gunggo": {
+ "http://www.gunggo.com/": ["gunggo.com"]
+ }
+ },
+ {
+ "Hands Mobile": {
+ "http://www.hands.com.br/": ["hands.com.br"]
+ }
+ },
+ {
+ "Harrenmedia": {
+ "http://www.harrenmedia.com/": [
+ "harrenmedia.com",
+ "harrenmedianetwork.com"
+ ]
+ }
+ },
+ {
+ "HealthPricer": {
+ "http://www.healthpricer.com/": ["adacado.com", "healthpricer.com"]
+ }
+ },
+ {
+ "Hearst": {
+ "http://www.hearst.com/": [
+ "hearst.com",
+ "ic-live.com",
+ "iclive.com",
+ "icrossing.com",
+ "sptag.com",
+ "sptag1.com",
+ "sptag2.com",
+ "sptag3.com"
+ ]
+ }
+ },
+ {
+ "HilltopAds": {
+ "https://hilltopads.com/": [
+ "hilltopads.com",
+ "hilltopads.net",
+ "shoporielder.pro"
+ ]
+ }
+ },
+ {
+ "Hi-media": {
+ "http://www.hi-media.com/": ["comclick.com", "hi-media.com"]
+ }
+ },
+ {
+ "Horyzon Media": {
+ "http://www.horyzon-media.com/": ["horyzon-media.com"]
+ }
+ },
+ {
+ "HotMart": {
+ "https://www.hotmart.com/en/": ["hotmart.com"]
+ }
+ },
+ {
+ "HOTWords": {
+ "http://www.hotwords.com/": ["hotwords.com", "hotwords.es"]
+ }
+ },
+ {
+ "HP": {
+ "http://www.hp.com/": ["hp.com", "optimost.com"]
+ }
+ },
+ {
+ "Httpool": {
+ "http://www.httpool.com/": ["httpool.com"]
+ }
+ },
+ {
+ "HUNT Mobile Ads": {
+ "http://www.huntmads.com/": ["huntmads.com"]
+ }
+ },
+ {
+ "Hurra.com": {
+ "http://www.hurra.com/": ["hurra.com"]
+ }
+ },
+ {
+ "IAB": {
+ "https://iabtechlab.com/": ["digitru.st"]
+ }
+ },
+ {
+ "IAC": {
+ "http://www.iac.com/": ["iac.com", "iacadvertising.com"]
+ }
+ },
+ {
+ "iBehavior": {
+ "http://www.i-behavior.com/": ["i-behavior.com", "ib-ibi.com"]
+ }
+ },
+ {
+ "IBM": {
+ "http://www.ibm.com/": ["unica.com"]
+ }
+ },
+ {
+ "ID5": {
+ "http://id5.io/": ["id5-sync.com"]
+ }
+ },
+ {
+ "IDG": {
+ "http://www.idg.com/": ["idg.com", "idgtechnetwork.com"]
+ }
+ },
+ {
+ "iEntry": {
+ "http://www.ientry.com/": ["600z.com", "ientry.com"]
+ }
+ },
+ {
+ "IgnitAd": {
+ "http://www.ignitad.com/": ["ignitad.com"]
+ }
+ },
+ {
+ "IgnitionOne": {
+ "http://www.ignitionone.com/": [
+ "ignitionone.com",
+ "ignitionone.net",
+ "searchignite.com"
+ ]
+ }
+ },
+ {
+ "Improve Digital": {
+ "www.improvedigital.com/": ["360yield.com", "improvedigital.com"]
+ }
+ },
+ {
+ "Inadco": {
+ "http://www.inadco.com/": [
+ "anadcoads.com",
+ "inadco.com",
+ "inadcoads.com"
+ ]
+ }
+ },
+ {
+ "IndexExchange": {
+ "https://www.indexexchange.com": ["indexexchange.com"]
+ }
+ },
+ {
+ "Infectious Media": {
+ "http://www.infectiousmedia.com/": [
+ "impressiondesk.com",
+ "infectiousmedia.com"
+ ]
+ }
+ },
+ {
+ "Inflection Point Media": {
+ "http://www.inflectionpointmedia.com/": ["inflectionpointmedia.com"]
+ }
+ },
+ {
+ "Infogroup": {
+ "http://www.infogroup.com/": ["infogroup.com"]
+ }
+ },
+ {
+ "Infolinks": {
+ "http://www.infolinks.com/": ["infolinks.com"]
+ }
+ },
+ {
+ "Infra-Ad": {
+ "http://www.infra-ad.com/": ["infra-ad.com"]
+ }
+ },
+ {
+ "InMobi": {
+ "http://www.inmobi.com/": [
+ "aerserv.com",
+ "inmobi.com",
+ "sproutinc.com"
+ ]
+ }
+ },
+ {
+ "inneractive": {
+ "http://inner-active.com/": ["inner-active.com"]
+ }
+ },
+ {
+ "Innity": {
+ "http://innity.com/": ["innity.com"]
+ }
+ },
+ {
+ "InsightExpress": {
+ "http://www.insightexpress.com/": [
+ "insightexpress.com",
+ "insightexpressai.com"
+ ]
+ }
+ },
+ {
+ "InSkin Media": {
+ "http://inskinmedia.com/": ["inskinmedia.com"]
+ }
+ },
+ {
+ "Instinctive": {
+ "https://instinctive.io/": ["instinctive.io", "instinctiveads.com"]
+ }
+ },
+ {
+ "Integral Ad Science": {
+ "https://integralads.com/": [
+ "adsafemedia.com",
+ "adsafeprotected.com",
+ "iasds01.com",
+ "integralads.com"
+ ]
+ }
+ },
+ {
+ "Intent Media": {
+ "http://www.intentmedia.com/": ["intentmedia.com", "intentmedia.net"]
+ }
+ },
+ {
+ "Intergi": {
+ "http://intergi.com/": ["intergi.com"]
+ }
+ },
+ {
+ "Intermarkets": {
+ "http://www.intermarkets.net/": ["intermarkets.net"]
+ }
+ },
+ {
+ "Intermundo Media": {
+ "http://intermundomedia.com/": ["intermundomedia.com"]
+ }
+ },
+ {
+ "Internet Brands": {
+ "http://www.internetbrands.com/": ["ibpxl.com", "internetbrands.com"]
+ }
+ },
+ {
+ "Interpolls": {
+ "http://www.interpolls.com/": ["interpolls.com"]
+ }
+ },
+ {
+ "Inuvo": {
+ "http://inuvo.com/": ["inuvo.com"]
+ }
+ },
+ {
+ "InvestingChannel": {
+ "http://investingchannel.com/": ["investingchannel.com"]
+ }
+ },
+ {
+ "IponWeb": {
+ "https://www.iponweb.com/": ["iponweb.com", "iponweb.net"]
+ }
+ },
+ {
+ "iPROM": {
+ "http://www.iprom.si/": [
+ "centraliprom.com",
+ "iprom.net",
+ "iprom.si",
+ "mediaiprom.com"
+ ]
+ }
+ },
+ {
+ "iPromote": {
+ "http://www.ipromote.com/": ["ipromote.com"]
+ }
+ },
+ {
+ "iProspect": {
+ "http://www.iprospect.com/": ["clickmanage.com", "iprospect.com"]
+ }
+ },
+ {
+ "ISI Technologies": {
+ "http://digbro.com/": ["adversalservers.com", "digbro.com"]
+ }
+ },
+ {
+ "ismatlab.com": {
+ "http://ismatlab.com": ["ismatlab.com"]
+ }
+ },
+ {
+ "I.UA": {
+ "http://www.i.ua/": ["i.ua"]
+ }
+ },
+ {
+ "Jaroop": {
+ "http://www.jaroop.com/": ["jaroop.com"]
+ }
+ },
+ {
+ "JasperLabs": {
+ "http://www.jasperlabs.com/": ["jasperlabs.com"]
+ }
+ },
+ {
+ "Jemm": {
+ "http://jemmgroup.com/": ["jemmgroup.com"]
+ }
+ },
+ {
+ "Jink": {
+ "http://www.jink.de/": ["jink.de", "jinkads.com"]
+ }
+ },
+ {
+ "Jirbo": {
+ "http://jirbo.com/": ["adcolony.com", "jirbo.com"]
+ }
+ },
+ {
+ "Jivox": {
+ "http://www.jivox.com/": ["jivox.com"]
+ }
+ },
+ {
+ "JobThread": {
+ "http://www.jobthread.com/": ["jobthread.com"]
+ }
+ },
+ {
+ "JuicyAds": {
+ "http://www.juicyads.com/": ["juicyads.com"]
+ }
+ },
+ {
+ "Jumptap": {
+ "http://www.jumptap.com/": ["jumptap.com"]
+ }
+ },
+ {
+ "justuno": {
+ "https://www.justuno.com/": ["justuno.com"]
+ }
+ },
+ {
+ "Kargo": {
+ "https://kargo.com/": ["kargo.com"]
+ }
+ },
+ {
+ "Kenshoo": {
+ "http://www.kenshoo.com/": ["kenshoo.com", "xg4ken.com"]
+ }
+ },
+ {
+ "Keyade": {
+ "http://www.keyade.com/": ["keyade.com"]
+ }
+ },
+ {
+ "Keywee": {
+ "https://keywee.co": ["keywee.co"]
+ }
+ },
+ {
+ "KissMyAds": {
+ "http://kissmyads.com/": ["kissmyads.com"]
+ }
+ },
+ {
+ "Kitara Media": {
+ "http://www.kitaramedia.com/": ["103092804.com", "kitaramedia.com"]
+ }
+ },
+ {
+ "KIT digital": {
+ "http://kitd.com/": ["keewurd.com", "kitd.com", "peerset.com"]
+ }
+ },
+ {
+ "Kokteyl": {
+ "http://www.kokteyl.com/": ["admost.com", "kokteyl.com"]
+ }
+ },
+ {
+ "Komli": {
+ "http://www.komli.com/": ["komli.com"]
+ }
+ },
+ {
+ "Kontera": {
+ "http://www.kontera.com/": ["kontera.com"]
+ }
+ },
+ {
+ "Korrelate": {
+ "http://korrelate.com/": [
+ "adsummos.com",
+ "adsummos.net",
+ "korrelate.com"
+ ]
+ }
+ },
+ {
+ "Krux": {
+ "http://www.krux.com/": ["krux.com", "kruxdigital.com", "krxd.net"]
+ }
+ },
+ {
+ "Lakana": {
+ "http://www.lakana.com/": ["ibsys.com", "lakana.com"]
+ }
+ },
+ {
+ "Layer-Ad.org": {
+ "http://layer-ad.org/": ["layer-ad.org"]
+ }
+ },
+ {
+ "Layer Ads": {
+ "http://layer-ads.net/": ["layer-ads.net"]
+ }
+ },
+ {
+ "LeadBolt": {
+ "http://www.leadbolt.com/": ["leadbolt.com"]
+ }
+ },
+ {
+ "LeadFormix": {
+ "http://www.leadformix.com/": ["leadforce1.com", "leadformix.com"]
+ }
+ },
+ {
+ "LeanPlum": {
+ "https://www.leanplum.com/": ["leanplum.com"]
+ }
+ },
+ {
+ "Legolas Media": {
+ "http://www.legolas-media.com/": ["legolas-media.com"]
+ }
+ },
+ {
+ "Levexis": {
+ "http://www.levexis.com/": ["levexis.com"]
+ }
+ },
+ {
+ "Lexos Media": {
+ "http://www.lexosmedia.com/": ["adbull.com", "lexosmedia.com"]
+ }
+ },
+ {
+ "LifeStreet": {
+ "http://lifestreetmedia.com/": [
+ "lfstmedia.com",
+ "lifestreetmedia.com"
+ ]
+ }
+ },
+ {
+ "LinkConnector": {
+ "http://www.linkconnector.com/": ["linkconnector.com"]
+ }
+ },
+ {
+ "LinkShare": {
+ "http://www.linkshare.com/": ["linkshare.com", "linksynergy.com"]
+ }
+ },
+ {
+ "Linkz": {
+ "http://www.linkz.net/": ["linkz.net"]
+ }
+ },
+ {
+ "Listrak": {
+ "http://www.listrak.com/": ["listrak.com", "listrakbi.com"]
+ }
+ },
+ {
+ "LiveIntent": {
+ "http://www.liveintent.com/": ["liadm.com", "liveintent.com"]
+ }
+ },
+ {
+ "LiveInternet": {
+ "http://www.liveinternet.ru": ["liveinternet.ru", "yadro.ru"]
+ }
+ },
+ {
+ "LiveRamp": {
+ "https://liveramp.com/": ["liveramp.com", "tvpixel.com"]
+ }
+ },
+ {
+ "LKQD": {
+ "http://lkqd.com": ["lkqd.com", "lkqd.net"]
+ }
+ },
+ {
+ "Local Yokel Media": {
+ "http://www.localyokelmedia.com/": ["localyokelmedia.com"]
+ }
+ },
+ {
+ "Localytics": {
+ "https://www.localytics.com/": ["localytics.com"]
+ }
+ },
+ {
+ "LockerDome": {
+ "https://lockerdome.com/": ["lockerdome.com"]
+ }
+ },
+ {
+ "Longboard Media": {
+ "http://longboardmedia.com/": ["longboardmedia.com"]
+ }
+ },
+ {
+ "Loomia": {
+ "http://www.loomia.com/": ["loomia.com"]
+ }
+ },
+ {
+ "LoopFuse": {
+ "https://www.loopfuse.net/": ["lfov.net", "loopfuse.net"]
+ }
+ },
+ {
+ "LoopMe": {
+ "https://loopme.com/": ["loopme.com"]
+ }
+ },
+ {
+ "LotLinx": {
+ "https://www.lotlinx.com": ["lotlinx.com"]
+ }
+ },
+ {
+ "Lower My Bills": {
+ "http://lowermybills.com": ["lowermybills.com"]
+ }
+ },
+ {
+ "lptracker": {
+ "https://lptracker.io/": ["lptracker.io"]
+ }
+ },
+ {
+ "LucidMedia": {
+ "http://www.lucidmedia.com/": ["lucidmedia.com"]
+ }
+ },
+ {
+ "m6d": {
+ "http://m6d.com/": ["m6d.com", "media6degrees.com"]
+ }
+ },
+ {
+ "Madhouse": {
+ "http://www.madhouse.cn/": ["madhouse.cn"]
+ }
+ },
+ {
+ "Madison Logic": {
+ "http://www.madisonlogic.com/": ["dinclinx.com", "madisonlogic.com"]
+ }
+ },
+ {
+ "madvertise": {
+ "http://madvertise.com/": ["madvertise.com"]
+ }
+ },
+ {
+ "Magnetic": {
+ "http://www.magnetic.com/": [
+ "domdex.com",
+ "domdex.net",
+ "magnetic.com",
+ "qjex.net"
+ ]
+ }
+ },
+ {
+ "Magnify360": {
+ "http://www.magnify360.com/": ["dialogmgr.com", "magnify360.com"]
+ }
+ },
+ {
+ "MailChimp": {
+ "http://mailchimp.com/": [
+ "campaign-archive1.com",
+ "list-manage.com",
+ "mailchimp.com"
+ ]
+ }
+ },
+ {
+ "Manifest": {
+ "http://www.manifest.ru/": ["bannerbank.ru", "manifest.ru"]
+ }
+ },
+ {
+ "Marchex": {
+ "http://www.marchex.com/": ["industrybrains.com", "marchex.com"]
+ }
+ },
+ {
+ "Marimedia": {
+ "http://www.marimedia.net/": ["marimedia.net"]
+ }
+ },
+ {
+ "MarketGid": {
+ "http://www.marketgid.com/": ["dt00.net", "dt07.net", "marketgid.com"]
+ }
+ },
+ {
+ "Marketo": {
+ "http://www.marketo.com/": ["marketo.com", "marketo.net"]
+ }
+ },
+ {
+ "Martini Media": {
+ "http://martinimedianetwork.com/": [
+ "martiniadnetwork.com",
+ "martinimedianetwork.com"
+ ]
+ }
+ },
+ {
+ "mashero": {
+ "http://www.mashero.com/": ["mashero.com"]
+ }
+ },
+ {
+ "Match.com": {
+ "http://www.match.com/": [
+ "chemistry.com",
+ "match.com",
+ "meetic-partners.com"
+ ]
+ }
+ },
+ {
+ "Matomy": {
+ "http://www.matomy.com/": [
+ "adnetinteractive.com",
+ "adsmarket.com",
+ "matomy.com",
+ "matomymarket.com",
+ "matomymedia.com",
+ "mediawhiz.com",
+ "optimatic.com",
+ "xtendmedia.com"
+ ]
+ }
+ },
+ {
+ "MaxBounty": {
+ "http://www.maxbounty.com/": ["maxbounty.com", "mb01.com"]
+ }
+ },
+ {
+ "MaxPoint": {
+ "http://maxpointinteractive.com/": [
+ "maxpointinteractive.com",
+ "maxusglobal.com",
+ "mxptint.net"
+ ]
+ }
+ },
+ {
+ "MdotM": {
+ "http://mdotm.com/": ["mdotm.com"]
+ }
+ },
+ {
+ "MediaBrix": {
+ "http://www.mediabrix.com/": ["mediabrix.com"]
+ }
+ },
+ {
+ "MediaCom": {
+ "http://www.mediacom.com/": ["mediacom.com"]
+ }
+ },
+ {
+ "mediaFORGE": {
+ "http://www.mediaforge.com/": ["mediaforge.com"]
+ }
+ },
+ {
+ "Medialets": {
+ "http://www.medialets.com/": ["medialets.com"]
+ }
+ },
+ {
+ "MediaMath": {
+ "http://www.mediamath.com/": [
+ "adroitinteractive.com",
+ "designbloxlive.com",
+ "mathtag.com",
+ "mediamath.com"
+ ]
+ }
+ },
+ {
+ "media.net": {
+ "http://www.media.net/": ["media.net"]
+ }
+ },
+ {
+ "Mediaocean": {
+ "http://www.mediaocean.com/": ["adbuyer.com", "mediaocean.com"]
+ }
+ },
+ {
+ "MediaShakers": {
+ "http://www.mediashakers.com/": [
+ "media-servers.net",
+ "mediashakers.com"
+ ]
+ }
+ },
+ {
+ "MediaTrust": {
+ "http://www.mediatrust.com/": ["mediatrust.com"]
+ }
+ },
+ {
+ "Medicx Media Solutions": {
+ "http://www.medicxmedia.com/": ["medicxmedia.com"]
+ }
+ },
+ {
+ "MegaIndex": {
+ "http://www.megaindex.ru/": ["megaindex.ru"]
+ }
+ },
+ {
+ "Mercent": {
+ "http://www.mercent.com/": ["mercent.com"]
+ }
+ },
+ {
+ "MerchantAdvantage": {
+ "http://www.merchantadvantage.com/": ["merchantadvantage.com"]
+ }
+ },
+ {
+ "Merchenta": {
+ "http://www.merchenta.com/": ["merchenta.com"]
+ }
+ },
+ {
+ "Merkle": {
+ "https://www.merkleinc.com/": ["rimmkaufman.com", "rkdms.com"]
+ }
+ },
+ {
+ "Meta Network": {
+ "http://www.metanetwork.com/": ["metanetwork.com"]
+ }
+ },
+ {
+ "Meteor": {
+ "http://www.meteorsolutions.com/": ["meteorsolutions.com"]
+ }
+ },
+ {
+ "MetrixLab": {
+ "https://www.metrixlab.com": [
+ "adoftheyear.com",
+ "crm-metrix.com",
+ "customerconversio.com",
+ "metrixlab.com",
+ "opinionbar.com"
+ ]
+ }
+ },
+ {
+ "MicroAd": {
+ "http://www.microad.jp/": ["microad.jp"]
+ }
+ },
+ {
+ "Microsoft": {
+ "http://www.microsoft.com/": [
+ "adbureau.net",
+ "adecn.com",
+ "aquantive.com",
+ "msads.net",
+ "netconversions.com",
+ "roiservice.com"
+ ]
+ }
+ },
+ {
+ "Millennial Media": {
+ "http://www.millennialmedia.com/": [
+ "decktrade.com",
+ "millennialmedia.com",
+ "mydas.mobi"
+ ]
+ }
+ },
+ {
+ "Mindset Media": {
+ "http://www.mindset-media.com/": ["mindset-media.com", "mmismm.com"]
+ }
+ },
+ {
+ "Mirando": {
+ "http://www.mirando.de/": ["mirando.de"]
+ }
+ },
+ {
+ "Mixpo": {
+ "http://www.mixpo.com/": ["mixpo.com"]
+ }
+ },
+ {
+ "Moat": {
+ "http://www.moat.com/": ["moat.com", "moatads.com"]
+ }
+ },
+ {
+ "MobFox": {
+ "http://www.mobfox.com/": ["mobfox.com"]
+ }
+ },
+ {
+ "Mobials": {
+ "http://mobials.com": ["mobials.com"]
+ }
+ },
+ {
+ "MobileAdTrading": {
+ "https://mobileadtrading.com/": ["mobileadtrading.com"]
+ }
+ },
+ {
+ "Mobile Meteor": {
+ "http://mobilemeteor.com/": ["mobilemeteor.com", "showmeinn.com"]
+ }
+ },
+ {
+ "Mobile Storm": {
+ "http://mobilestorm.com/": ["mobilestorm.com"]
+ }
+ },
+ {
+ "MobVision": {
+ "http://www.mobvision.com/": ["admoda.com", "mobvision.com"]
+ }
+ },
+ {
+ "Mocean Mobile": {
+ "http://www.moceanmobile.com/": ["moceanmobile.com"]
+ }
+ },
+ {
+ "Mochila": {
+ "http://www.mochila.com/": ["mochila.com"]
+ }
+ },
+ {
+ "Mojiva": {
+ "http://www.mojiva.com/": ["mojiva.com"]
+ }
+ },
+ {
+ "Monetate": {
+ "http://monetate.com/": ["monetate.com", "monetate.net"]
+ }
+ },
+ {
+ "MONETIZEdigital": {
+ "https://www.cpalead.com/": ["cpalead.com"]
+ }
+ },
+ {
+ "Monetize More": {
+ "http://monetizemore.com/": ["monetizemore.com"]
+ }
+ },
+ {
+ "Monoloop": {
+ "http://www.monoloop.com/": ["monoloop.com"]
+ }
+ },
+ {
+ "Monster": {
+ "http://www.monster.com/": ["monster.com"]
+ }
+ },
+ {
+ "Moolah Media": {
+ "http://www.moolahmedia.com/": ["moolah-media.com", "moolahmedia.com"]
+ }
+ },
+ {
+ "MoPub": {
+ "http://www.mopub.com/": ["mopub.com"]
+ }
+ },
+ {
+ "MovieLush.com": {
+ "https://www.movielush.com/": ["affbuzzads.com", "movielush.com"]
+ }
+ },
+ {
+ "Multiple Stream Media": {
+ "http://www.multiplestreammktg.com/": [
+ "adclickmedia.com",
+ "multiplestreammktg.com"
+ ]
+ }
+ },
+ {
+ "MUNDO Media": {
+ "http://www.mundomedia.com/": ["mundomedia.com", "silver-path.com"]
+ }
+ },
+ {
+ "MyCounter": {
+ "http://mycounter.com.ua/": ["mycounter.com.ua"]
+ }
+ },
+ {
+ "MyPressPlus": {
+ "http://www.mypressplus.com/": ["mypressplus.com", "ppjol.net"]
+ }
+ },
+ {
+ "myThings": {
+ "http://www.mythings.com/": ["mythings.com", "mythingsmedia.com"]
+ }
+ },
+ {
+ "MyWebGrocer": {
+ "http://www.mywebgrocer.com/": ["mywebgrocer.com"]
+ }
+ },
+ {
+ "Nanigans": {
+ "http://www.nanigans.com/": ["nanigans.com"]
+ }
+ },
+ {
+ "NativeAds": {
+ "https://nativeads.com/": ["nativeads.com"]
+ }
+ },
+ {
+ "Nativo": {
+ "http://www.nativo.net/": ["postrelease.com"]
+ }
+ },
+ {
+ "Navegg": {
+ "http://www.navegg.com/": ["navdmp.com", "navegg.com"]
+ }
+ },
+ {
+ "NetAffiliation": {
+ "http://www.netaffiliation.com/": ["netaffiliation.com"]
+ }
+ },
+ {
+ "NetBina": {
+ "http://www.netbina.com/": ["netbina.com"]
+ }
+ },
+ {
+ "NetElixir": {
+ "http://www.netelixir.com/": ["adelixir.com", "netelixir.com"]
+ }
+ },
+ {
+ "Netmining": {
+ "http://www.netmining.com/": ["netmining.com", "netmng.com"]
+ }
+ },
+ {
+ "Net-Results": {
+ "http://www.net-results.com/": [
+ "cdnma.com",
+ "net-results.com",
+ "nr7.us"
+ ]
+ }
+ },
+ {
+ "NetSeer": {
+ "http://www.netseer.com/": ["netseer.com"]
+ }
+ },
+ {
+ "NetShelter": {
+ "http://netshelter.com/": ["netshelter.com", "netshelter.net"]
+ }
+ },
+ {
+ "Neustar": {
+ "http://www.neustar.biz/": ["adadvisor.net", "neustar.biz"]
+ }
+ },
+ {
+ "newtention": {
+ "http://newtention.de/": [
+ "newtention.de",
+ "newtention.net",
+ "newtentionassets.net"
+ ]
+ }
+ },
+ {
+ "Nexage": {
+ "http://nexage.com/": ["nexage.com"]
+ }
+ },
+ {
+ "Nextag": {
+ "http://www.nextag.com/": ["nextag.com"]
+ }
+ },
+ {
+ "NextPerformance": {
+ "http://www.nextperformance.com/": [
+ "nextperformance.com",
+ "nxtck.com"
+ ]
+ }
+ },
+ {
+ "Nielsen": {
+ "http://www.nielsen.com/": ["imrworldwide.com", "imrworldwide.net"]
+ }
+ },
+ {
+ "Ninua": {
+ "http://www.ninua.com/": ["networkedblogs.com", "ninua.com"]
+ }
+ },
+ {
+ "Nokta": {
+ "http://www.noktamedya.com/": ["noktamedya.com", "virgul.com"]
+ }
+ },
+ {
+ "NowSpots": {
+ "http://nowspots.com/": ["nowspots.com"]
+ }
+ },
+ {
+ "nrelate": {
+ "http://nrelate.com/": ["nrelate.com"]
+ }
+ },
+ {
+ "Nuffnang": {
+ "http://www.nuffnang.com.my/": ["nuffnang.com", "nuffnang.com.my"]
+ }
+ },
+ {
+ "nugg.ad": {
+ "http://www.nugg.ad/": ["nugg.ad", "nuggad.net"]
+ }
+ },
+ {
+ "Ohana Media": {
+ "http://www.ohana-media.com/": [
+ "adohana.com",
+ "ohana-media.com",
+ "ohanaqb.com"
+ ]
+ }
+ },
+ {
+ "Omnicom Group": {
+ "http://www.omnicomgroup.com/": [
+ "accuenmedia.com",
+ "omnicomgroup.com",
+ "p-td.com"
+ ]
+ }
+ },
+ {
+ "onAd": {
+ "http://www.onad.eu/": ["onad.eu"]
+ }
+ },
+ {
+ "Onclusive": {
+ "https://onclusive.com/": ["airpr.com"]
+ }
+ },
+ {
+ "OneAd": {
+ "https://www.onead.com.tw/": [
+ "guoshipartners.com",
+ "onevision.com.tw"
+ ]
+ }
+ },
+ {
+ "One iota": {
+ "http://www.itsoneiota.com/": ["itsoneiota.com", "oneiota.co.uk"]
+ }
+ },
+ {
+ "Oneupweb": {
+ "http://www.oneupweb.com/": ["oneupweb.com", "sodoit.com"]
+ }
+ },
+ {
+ "OnlineMetrix": {
+ "http://h.online-metrix.net": ["online-metrix.net"]
+ }
+ },
+ {
+ "Open New Media": {
+ "http://www.onm.de/": ["onm.de"]
+ }
+ },
+ {
+ "OpenX": {
+ "http://openx.com/": [
+ "liftdna.com",
+ "openx.com",
+ "openx.net",
+ "openx.org",
+ "openxenterprise.com",
+ "servedbyopenx.com"
+ ]
+ }
+ },
+ {
+ "Opera": {
+ "http://www.opera.com/": [
+ "mobiletheory.com",
+ "opera.com",
+ "operamediaworks.com",
+ "operasoftware.com"
+ ]
+ }
+ },
+ {
+ "OPT": {
+ "http://www.opt.ne.jp/": ["advg.jp", "opt.ne.jp", "p-advg.com"]
+ }
+ },
+ {
+ "Optify": {
+ "http://www.optify.net/": ["optify.net"]
+ }
+ },
+ {
+ "Optimal": {
+ "http://optim.al/": [
+ "cpmadvisors.com",
+ "cpmatic.com",
+ "nprove.com",
+ "optim.al",
+ "orbengine.com",
+ "xa.net"
+ ]
+ }
+ },
+ {
+ "OptimumResponse": {
+ "http://www.optimumresponse.com/": ["optimumresponse.com"]
+ }
+ },
+ {
+ "OptinMonster": {
+ "https://optinmonster.com/": ["optinmonster.com", "optnmstr.com"]
+ }
+ },
+ {
+ "OptMD": {
+ "http://optmd.com/": ["optmd.com"]
+ }
+ },
+ {
+ "Oracle": {
+ "http://www.oracle.com/": ["estara.com"]
+ }
+ },
+ {
+ "OrangeSoda": {
+ "http://www.orangesoda.com/": ["orangesoda.com", "otracking.com"]
+ }
+ },
+ {
+ "Outbrain": {
+ "http://www.outbrain.com/": [
+ "outbrain.com",
+ "sphere.com",
+ "visualrevenue.com"
+ ]
+ }
+ },
+ {
+ "Out There Media": {
+ "http://www.out-there-media.com/": ["out-there-media.com"]
+ }
+ },
+ {
+ "Oversee.net": {
+ "http://www.oversee.net/": ["dsnextgen.com", "oversee.net"]
+ }
+ },
+ {
+ "OwnerIQ": {
+ "http://www.owneriq.com/": ["owneriq.com", "owneriq.net"]
+ }
+ },
+ {
+ "OxaMedia": {
+ "http://www.oxamedia.com/": [
+ "adconnexa.com",
+ "adsbwm.com",
+ "oxamedia.com"
+ ]
+ }
+ },
+ {
+ "PageFair": {
+ "https://pagefair.com/": ["pagefair.com", "pagefair.net"]
+ }
+ },
+ {
+ "Paid-To-Promote.net": {
+ "http://www.paid-to-promote.net/": ["paid-to-promote.net"]
+ }
+ },
+ {
+ "Pardot": {
+ "http://www.pardot.com/": ["pardot.com"]
+ }
+ },
+ {
+ "PayHit": {
+ "http://www.payhit.com/": ["payhit.com"]
+ }
+ },
+ {
+ "Paypopup.com": {
+ "http://www.paypopup.com/": ["lzjl.com", "paypopup.com"]
+ }
+ },
+ {
+ "PebblePost": {
+ "https://www.pebblepost.com/": ["pbbl.co"]
+ }
+ },
+ {
+ "Peer39": {
+ "http://www.peer39.com/": ["peer39.com", "peer39.net"]
+ }
+ },
+ {
+ "PeerFly": {
+ "http://peerfly.com/": ["peerfly.com"]
+ }
+ },
+ {
+ "Performancing": {
+ "http://performancing.com/": ["performancing.com"]
+ }
+ },
+ {
+ "PerimeterX": {
+ "https://www.perimeterx.com": ["perimeterx.net"]
+ }
+ },
+ {
+ "Pheedo": {
+ "http://site.pheedo.com/": ["pheedo.com"]
+ }
+ },
+ {
+ "Pictela": {
+ "http://www.pictela.com/": ["pictela.com", "pictela.net"]
+ }
+ },
+ {
+ "PinPoll": {
+ "https://pinpoll.com/": ["pinpoll.com"]
+ }
+ },
+ {
+ "Pixel.sg": {
+ "http://www.pixel.sg/": ["pixel.sg"]
+ }
+ },
+ {
+ "Piximedia": {
+ "http://www.piximedia.com/": ["piximedia.com"]
+ }
+ },
+ {
+ "Pixlee": {
+ "https://www.pixlee.com/": ["pixlee.com"]
+ }
+ },
+ {
+ "PLATFORM ONE": {
+ "http://www.platform-one.co.jp/": ["platform-one.co.jp"]
+ }
+ },
+ {
+ "plista": {
+ "http://www.plista.com/": ["plista.com"]
+ }
+ },
+ {
+ "PocketCents": {
+ "http://pocketcents.com/": ["pocketcents.com"]
+ }
+ },
+ {
+ "Polar Mobile": {
+ "http://polarmobile.com": ["mediavoice.com", "polarmobile.com"]
+ }
+ },
+ {
+ "Politads": {
+ "http://politads.com/": ["politads.com"]
+ }
+ },
+ {
+ "Polymorph": {
+ "http://getpolymorph.com/": ["adsnative.com", "getpolymorph.com"]
+ }
+ },
+ {
+ "Pontiflex": {
+ "http://www.pontiflex.com/": ["pontiflex.com"]
+ }
+ },
+ {
+ "PopAds": {
+ "https://www.popads.net/": ["popads.net", "popadscdn.net"]
+ }
+ },
+ {
+ "PopRule": {
+ "http://poprule.com/": ["gocampaignlive.com", "poprule.com"]
+ }
+ },
+ {
+ "Popunder.ru": {
+ "http://popunder.ru/": ["popunder.ru"]
+ }
+ },
+ {
+ "Po.st": {
+ "http://www.po.st/": ["po.st"]
+ }
+ },
+ {
+ "Powerlinks": {
+ "https://www.powerlinks.com/": ["powerlinks.com"]
+ }
+ },
+ {
+ "PPCProtect": {
+ "https://ppcprotect.com": ["ppcprotect.com"]
+ }
+ },
+ {
+ "PrecisionClick": {
+ "http://www.precisionclick.com/": ["precisionclick.com"]
+ }
+ },
+ {
+ "PredictAd": {
+ "http://www.predictad.com/": ["predictad.com"]
+ }
+ },
+ {
+ "Pressflex": {
+ "http://www.pressflex.com/": ["blogads.com", "pressflex.com"]
+ }
+ },
+ {
+ "Prime Visibility": {
+ "http://www.primevisibility.com/": [
+ "adcde.com",
+ "addlvr.com",
+ "adonnetwork.com",
+ "adonnetwork.net",
+ "adtrgt.com",
+ "bannertgt.com",
+ "cptgt.com",
+ "cpvfeed.com",
+ "cpvtgt.com",
+ "dashboardad.net",
+ "popcde.com",
+ "primevisibility.com",
+ "sdfje.com",
+ "urtbk.com"
+ ]
+ }
+ },
+ {
+ "Primis": {
+ "https://www.primis.tech": ["sekindo.com"]
+ }
+ },
+ {
+ "PrismApp": {
+ "https://www.prismapp.io/": ["prismapp.io"]
+ }
+ },
+ {
+ "Proclivity": {
+ "http://www.proclivitymedia.com/": [
+ "proclivitymedia.com",
+ "proclivitysystems.com",
+ "pswec.com"
+ ]
+ }
+ },
+ {
+ "Project Wonderful": {
+ "http://www.projectwonderful.com/": ["projectwonderful.com"]
+ }
+ },
+ {
+ "PrometheusIntelligenceTechnology": {
+ "https://prometheusintelligencetechnology.com/": [
+ "prometheusintelligencetechnology.com"
+ ]
+ }
+ },
+ {
+ "Propeller Ads": {
+ "http://propellerads.com/": ["propellerads.com"]
+ }
+ },
+ {
+ "Prosperent": {
+ "http://prosperent.com/": ["prosperent.com"]
+ }
+ },
+ {
+ "Protected Media": {
+ "http://www.protected.media/": ["ad-score.com", "protected.media"]
+ }
+ },
+ {
+ "Provers": {
+ "http://provers.pro": ["provers.pro"]
+ }
+ },
+ {
+ "Psonstrentie": {
+ "http://psonstrentie.info": ["psonstrentie.info"]
+ }
+ },
+ {
+ "Public-Idées": {
+ "http://www.publicidees.com/": ["publicidees.com"]
+ }
+ },
+ {
+ "Publishers Clearing House": {
+ "http://www.pch.com/": ["pch.com"]
+ }
+ },
+ {
+ "PubMatic": {
+ "http://www.pubmatic.com/": ["pubmatic.com", "revinet.com"]
+ }
+ },
+ {
+ "PulsePoint": {
+ "https://www.pulsepoint.com/": ["pulsepoint.com"]
+ }
+ },
+ {
+ "quadrantOne": {
+ "http://www.quadrantone.com/": ["quadrantone.com"]
+ }
+ },
+ {
+ "Quake Marketing": {
+ "http://quakemarketing.com/": ["quakemarketing.com"]
+ }
+ },
+ {
+ "Quantcast": {
+ "http://www.quantcast.com/": [
+ "quantcast.com",
+ "quantcount.com",
+ "quantserve.com"
+ ]
+ }
+ },
+ {
+ "QuantumAdvertising": {
+ "http://quantum-advertising.com": ["quantum-advertising.com"]
+ }
+ },
+ {
+ "QuinStreet": {
+ "http://quinstreet.com/": [
+ "qnsr.com",
+ "qsstats.com",
+ "quinstreet.com"
+ ]
+ }
+ },
+ {
+ "QUISMA": {
+ "https://quisma.com/": [
+ "iaded.com",
+ "quisma.com",
+ "quismatch.com",
+ "xaded.com",
+ "xmladed.com"
+ ]
+ }
+ },
+ {
+ "Radial": {
+ "https://www.radial.com": ["gsicommerce.com", "gsimedia.net"]
+ }
+ },
+ {
+ "Radiate Media": {
+ "http://www.radiatemedia.com/": ["matchbin.com", "radiatemedia.com"]
+ }
+ },
+ {
+ "RadiumOne": {
+ "http://www.radiumone.com/": ["gwallet.com", "radiumone.com"]
+ }
+ },
+ {
+ "Radius Marketing": {
+ "http://www.radiusmarketing.com/": ["radiusmarketing.com"]
+ }
+ },
+ {
+ "Rambler": {
+ "http://www.rambler.ru/": ["rambler.ru"]
+ }
+ },
+ {
+ "Rapleaf": {
+ "http://www.rapleaf.com/": ["rapleaf.com", "rlcdn.com"]
+ }
+ },
+ {
+ "ReachLocal": {
+ "http://www.reachlocal.com/": ["reachlocal.com", "rlcdn.net"]
+ }
+ },
+ {
+ "React2Media": {
+ "http://www.react2media.com/": ["react2media.com"]
+ }
+ },
+ {
+ "Redux Media": {
+ "http://reduxmedia.com/": ["reduxmedia.com"]
+ }
+ },
+ {
+ "Rekko": {
+ "http://rekko.com/": ["convertglobal.com", "rekko.com"]
+ }
+ },
+ {
+ "Reklamport": {
+ "http://www.reklamport.com/": ["reklamport.com"]
+ }
+ },
+ {
+ "Reklam Store": {
+ "http://reklamstore.com/": ["reklamstore.com"]
+ }
+ },
+ {
+ "Reklamz": {
+ "http://www.reklamz.com/": ["reklamz.com"]
+ }
+ },
+ {
+ "Relevad": {
+ "http://www.relevad.com/": ["relestar.com", "relevad.com"]
+ }
+ },
+ {
+ "Renegade Internet": {
+ "http://www.renegadeinternet.com/": [
+ "advertserve.com",
+ "renegadeinternet.com"
+ ]
+ }
+ },
+ {
+ "Reporo": {
+ "http://www.reporo.com/": ["buzzcity.com"]
+ }
+ },
+ {
+ "ResolutionMedia": {
+ "https://nonstoppartner.net/": ["nonstoppartner.net"]
+ }
+ },
+ {
+ "Resolution Media": {
+ "http://resolutionmedia.com/": ["resolutionmedia.com"]
+ }
+ },
+ {
+ "Resonate": {
+ "http://www.resonateinsights.com/": [
+ "reson8.com",
+ "resonateinsights.com",
+ "resonatenetworks.com"
+ ]
+ }
+ },
+ {
+ "Responsys": {
+ "http://www.responsys.com/": ["responsys.com"]
+ }
+ },
+ {
+ "ReTargeter": {
+ "http://www.retargeter.com/": ["retargeter.com"]
+ }
+ },
+ {
+ "Retirement Living": {
+ "www.retirement-living.com/": [
+ "blvdstatus.com",
+ "retirement-living.com"
+ ]
+ }
+ },
+ {
+ "RevContent": {
+ "http://revcontent.com/": ["revcontent.com"]
+ }
+ },
+ {
+ "RevenueMax": {
+ "http://revenuemax.de/": ["revenuemax.de"]
+ }
+ },
+ {
+ "Rhythm": {
+ "http://rhythmnewmedia.com/": [
+ "1rx.io",
+ "rhythmnewmedia.com",
+ "rhythmone.com",
+ "rhythmxchange.com",
+ "rnmd.net"
+ ]
+ }
+ },
+ {
+ "RichAudience": {
+ "https://richaudience.com/": ["richaudience.com"]
+ }
+ },
+ {
+ "RichRelevance": {
+ "http://www.richrelevance.com/": ["richrelevance.com"]
+ }
+ },
+ {
+ "RightAction": {
+ "http://rightaction.com/": ["rightaction.com"]
+ }
+ },
+ {
+ "RMBN": {
+ "http://rmbn.net/": ["rmbn.net", "rmbn.ru"]
+ }
+ },
+ {
+ "RMM": {
+ "http://www.rmmonline.com/": ["rmmonline.com"]
+ }
+ },
+ {
+ "Rocket Fuel": {
+ "http://rocketfuel.com/": [
+ "rfihub.com",
+ "rfihub.net",
+ "rocketfuel.com",
+ "ru4.com",
+ "xplusone.com"
+ ]
+ }
+ },
+ {
+ "Rovion": {
+ "http://www.rovion.com/": ["rovion.com"]
+ }
+ },
+ {
+ "rtk": {
+ "http://rtk.io/": ["rtk.io"]
+ }
+ },
+ {
+ "RubiconProject": {
+ "http://rubiconproject.com/": [
+ "adsbyisocket.com",
+ "isocket.com",
+ "rubiconproject.com"
+ ]
+ }
+ },
+ {
+ "RunAds": {
+ "http://www.runads.com/": ["runads.com", "rundsp.com"]
+ }
+ },
+ {
+ "RuTarget": {
+ "http://www.rutarget.ru/": ["rutarget.ru"]
+ }
+ },
+ {
+ "Sabavision": {
+ "http://www.sabavision.com": ["sabavision.com"]
+ }
+ },
+ {
+ "Sabre": {
+ "http://www.sabre.com/": [
+ "reztrack.com",
+ "sabre.com",
+ "sabrehospitality.com"
+ ]
+ }
+ },
+ {
+ "Salesforce.com": {
+ "http://www.salesforce.com/": ["salesforce.com"]
+ }
+ },
+ {
+ "Samurai Factory": {
+ "http://www.samurai-factory.jp/": ["samurai-factory.jp", "shinobi.jp"]
+ }
+ },
+ {
+ "SAP": {
+ "https://www.sap.com": ["seewhy.com"]
+ }
+ },
+ {
+ "Sapient": {
+ "http://www.sapient.com/": ["bridgetrack.com", "sapient.com"]
+ }
+ },
+ {
+ "SAS": {
+ "http://www.sas.com/": ["aimatch.com", "sas.com"]
+ }
+ },
+ {
+ "Scandinavian AdNetworks": {
+ "http://www.scandinavianadnetworks.com/": [
+ "scandinavianadnetworks.com"
+ ]
+ }
+ },
+ {
+ "Scribol": {
+ "http://scribol.com/": ["scribol.com"]
+ }
+ },
+ {
+ "SearchForce": {
+ "http://www.searchforce.com/": ["searchforce.com", "searchforce.net"]
+ }
+ },
+ {
+ "Seevast": {
+ "http://www.seevast.com/": [
+ "kanoodle.com",
+ "pulse360.com",
+ "seevast.com",
+ "syndigonetworks.com"
+ ]
+ }
+ },
+ {
+ "Selectable Media": {
+ "http://selectablemedia.com/": ["nabbr.com", "selectablemedia.com"]
+ }
+ },
+ {
+ "Semantiqo": {
+ "http://semantiqo.com/": ["semantiqo.com"]
+ }
+ },
+ {
+ "Semasio": {
+ "http://www.semasio.com/": ["semasio.com", "semasio.net"]
+ }
+ },
+ {
+ "SevenAds": {
+ "http://www.sevenads.net/": ["sevenads.net"]
+ }
+ },
+ {
+ "SexInYourCity": {
+ "http://www.sexinyourcity.com/": ["sexinyourcity.com"]
+ }
+ },
+ {
+ "ShaftTraffic": {
+ "https://shafttraffic.com": ["libertystmedia.com"]
+ }
+ },
+ {
+ "ShareASale": {
+ "http://www.shareasale.com/": ["shareasale.com"]
+ }
+ },
+ {
+ "Sharethrough": {
+ "http://sharethrough.com/": ["sharethrough.com"]
+ }
+ },
+ {
+ "Shopzilla": {
+ "http://www.shopzilla.com/": ["shopzilla.com"]
+ }
+ },
+ {
+ "Shortest": {
+ "http://shorte.st/": ["shorte.st"]
+ }
+ },
+ {
+ "Silverpop": {
+ "http://www.silverpop.com/": [
+ "mkt51.net",
+ "pages05.net",
+ "silverpop.com",
+ "vtrenz.net"
+ ]
+ }
+ },
+ {
+ "Simpli.fi": {
+ "http://www.simpli.fi/": ["simpli.fi"]
+ }
+ },
+ {
+ "SiteScout": {
+ "http://www.sitescout.com/": ["sitescout.com"]
+ }
+ },
+ {
+ "Skimlinks": {
+ "http://skimlinks.com/": ["skimlinks.com", "skimresources.com"]
+ }
+ },
+ {
+ "Skupe Net": {
+ "http://www.skupenet.com/": ["adcentriconline.com", "skupenet.com"]
+ }
+ },
+ {
+ "Smaato": {
+ "http://www.smaato.com/": ["smaato.com"]
+ }
+ },
+ {
+ "SmartAdServer": {
+ "http://smartadserver.com/": ["smartadserver.com"]
+ }
+ },
+ {
+ "SmartyAds": {
+ "https://smartyads.com/": ["smartyads.com"]
+ }
+ },
+ {
+ "Smiley Media": {
+ "http://www.smileymedia.com/": ["smileymedia.com"]
+ }
+ },
+ {
+ "Smowtion": {
+ "http://smowtion.com/": ["smowtion.com"]
+ }
+ },
+ {
+ "Snap": {
+ "http://www.snap.com/": ["snap.com"]
+ }
+ },
+ {
+ "SocialChorus": {
+ "http://www.socialchorus.com/": [
+ "halogenmediagroup.com",
+ "halogennetwork.com",
+ "socialchorus.com"
+ ]
+ }
+ },
+ {
+ "SocialInterface": {
+ "http://socialinterface.com/": [
+ "ratevoice.com",
+ "socialinterface.com"
+ ]
+ }
+ },
+ {
+ "SocialTwist": {
+ "http://tellafriend.socialtwist.com/": ["socialtwist.com"]
+ }
+ },
+ {
+ "sociomantic labs": {
+ "http://www.sociomantic.com/": ["sociomantic.com"]
+ }
+ },
+ {
+ "Socital": {
+ "https://www.socital.com": ["socital.com"]
+ }
+ },
+ {
+ "Sojern": {
+ "https://www.sojern.com": ["sojern.com"]
+ }
+ },
+ {
+ "SomoAudience": {
+ "https://somoaudience.com/": ["somoaudience.com"]
+ }
+ },
+ {
+ "Sonobi": {
+ "http://sonobi.com/": ["sonobi.com"]
+ }
+ },
+ {
+ "sophus3": {
+ "http://www.sophus3.com/": ["sophus3.co.uk", "sophus3.com"]
+ }
+ },
+ {
+ "Sortable": {
+ "https://www.sortable.com/": ["deployads.com"]
+ }
+ },
+ {
+ "Sovrn": {
+ "https://www.sovrn.com/": ["sovrn.com"]
+ }
+ },
+ {
+ "Space Chimp Media": {
+ "http://spacechimpmedia.com/": ["spacechimpmedia.com"]
+ }
+ },
+ {
+ "Sparklit": {
+ "http://www.sparklit.com/": ["adbutler.com", "sparklit.com"]
+ }
+ },
+ {
+ "Spark Studios": {
+ "http://www.sparkstudios.com/": ["sparkstudios.com"]
+ }
+ },
+ {
+ "Specific Media": {
+ "http://www.specificmedia.com/": [
+ "adviva.co.uk",
+ "adviva.net",
+ "sitemeter.com",
+ "specificclick.net",
+ "specificmedia.co.uk",
+ "specificmedia.com"
+ ]
+ }
+ },
+ {
+ "Spectate": {
+ "http://spectate.com/": ["spectate.com"]
+ }
+ },
+ {
+ "Sponge": {
+ "http://spongegroup.com/": ["spongegroup.com"]
+ }
+ },
+ {
+ "Spongecell": {
+ "http://www.spongecell.com/": ["spongecell.com"]
+ }
+ },
+ {
+ "SponsorAds": {
+ "http://www.sponsorads.de/": ["sponsorads.de"]
+ }
+ },
+ {
+ "Spot200": {
+ "http://spot200.com/": ["spot200.com"]
+ }
+ },
+ {
+ "SpotX": {
+ "https://www.spotx.tv": ["spotx.tv"]
+ }
+ },
+ {
+ "SpotXchange": {
+ "http://www.spotxchange.com/": ["spotxchange.com"]
+ }
+ },
+ {
+ "SpringServe": {
+ "https://springserve.com/": ["springserve.com"]
+ }
+ },
+ {
+ "StackAdapt": {
+ "https://www.stackadapt.com/": ["stackadapt.com"]
+ }
+ },
+ {
+ "StarGames": {
+ "https://www.stargames.net/": ["stargamesaffiliate.com"]
+ }
+ },
+ {
+ "SteelHouse": {
+ "http://www.steelhouse.com/": [
+ "steelhouse.com",
+ "steelhousemedia.com"
+ ]
+ }
+ },
+ {
+ "Storygize": {
+ "http://www.storygize.com/": ["storygize.com", "storygize.net"]
+ }
+ },
+ {
+ "Streamray": {
+ "http://streamray.com/": ["cams.com", "streamray.com"]
+ }
+ },
+ {
+ "StrikeAd": {
+ "http://www.strikead.com/": ["strikead.com"]
+ }
+ },
+ {
+ "StrongMail": {
+ "http://www.strongmail.com/": ["popularmedia.com"]
+ }
+ },
+ {
+ "Struq": {
+ "http://struq.com/": ["struq.com"]
+ }
+ },
+ {
+ "Sublime Skinz": {
+ "http://sublime.xyz/": ["ayads.co", "sublime.xyz"]
+ }
+ },
+ {
+ "Suite 66": {
+ "http://www.suite66.com/": ["suite66.com"]
+ }
+ },
+ {
+ "Summit": {
+ "http://www.summit.co.uk/": ["summitmedia.co.uk"]
+ }
+ },
+ {
+ "Superfish": {
+ "http://www.superfish.com/": ["superfish.com"]
+ }
+ },
+ {
+ "SupersonicAds": {
+ "http://www.supersonicads.com/": ["supersonicads.com"]
+ }
+ },
+ {
+ "Survata": {
+ "https://www.survata.com/": ["survata.com"]
+ }
+ },
+ {
+ "Switch": {
+ "http://www.switchconcepts.com/": [
+ "ethicalads.net",
+ "switchadhub.com",
+ "switchconcepts.co.uk",
+ "switchconcepts.com"
+ ]
+ }
+ },
+ {
+ "Swoop": {
+ "http://swoop.com/": ["swoop.com"]
+ }
+ },
+ {
+ "SymphonyAM": {
+ "http://www.factortg.com/": ["factortg.com"]
+ }
+ },
+ {
+ "Syncapse": {
+ "http://www.syncapse.com/": ["clickable.net", "syncapse.com"]
+ }
+ },
+ {
+ "Syrup Ad": {
+ "http://adotsolution.com/": ["adotsolution.com"]
+ }
+ },
+ {
+ "Taboola": {
+ "https://www.taboola.com/": ["perfectmarket.com", "taboola.com"]
+ }
+ },
+ {
+ "Tailsweep": {
+ "http://www.tailsweep.com/": ["tailsweep.com"]
+ }
+ },
+ {
+ "Taleria": {
+ "https://outstream.telaria.com/": ["freeskreen.com"]
+ }
+ },
+ {
+ "Tapad": {
+ "http://www.tapad.com/": ["tapad.com"]
+ }
+ },
+ {
+ "Tapgage": {
+ "http://www.tapgage.com/": ["bizmey.com", "tapgage.com"]
+ }
+ },
+ {
+ "TapIt!": {
+ "http://tapit.com/": ["tapit.com"]
+ }
+ },
+ {
+ "Tap.me": {
+ "http://tap.me/": ["tap.me"]
+ }
+ },
+ {
+ "Targetix": {
+ "http://targetix.net/": ["targetix.net"]
+ }
+ },
+ {
+ "Tatto Media": {
+ "http://tattomedia.com/": ["quicknoodles.com", "tattomedia.com"]
+ }
+ },
+ {
+ "Teadma": {
+ "http://www.teadma.com/": ["teadma.com"]
+ }
+ },
+ {
+ "Teads.tv": {
+ "http://teads.tv/": ["ebuzzing.com", "teads.tv"]
+ }
+ },
+ {
+ "Technorati": {
+ "http://technorati.com/": ["technorati.com", "technoratimedia.com"]
+ }
+ },
+ {
+ "TellApart": {
+ "http://tellapart.com/": ["tellapart.com", "tellapt.com"]
+ }
+ },
+ {
+ "Telstra": {
+ "http://www.telstra.com.au/": [
+ "sensis.com.au",
+ "sensisdata.com.au",
+ "sensisdigitalmedia.com.au",
+ "telstra.com.au"
+ ]
+ }
+ },
+ {
+ "Terra": {
+ "http://www.terra.com.br/": ["eztargetmedia.com", "terra.com.br"]
+ }
+ },
+ {
+ "The Numa Group": {
+ "http://www.thenumagroup.com/": ["hittail.com", "thenumagroup.com"]
+ }
+ },
+ {
+ "The Search Agency": {
+ "http://www.thesearchagency.com/": [
+ "thesearchagency.com",
+ "thesearchagency.net"
+ ]
+ }
+ },
+ {
+ "The Trade Desk": {
+ "http://thetradedesk.com/": ["adsrvr.org", "thetradedesk.com"]
+ }
+ },
+ {
+ "Think Realtime": {
+ "http://www.thinkrealtime.com/": [
+ "echosearch.com",
+ "esm1.net",
+ "thinkrealtime.com"
+ ]
+ }
+ },
+ {
+ "Tinder": {
+ "http://tinder.com/": ["carbonads.com", "tinder.com"]
+ }
+ },
+ {
+ "TiqIQ": {
+ "http://www.tiqiq.com/": ["tiqiq.com"]
+ }
+ },
+ {
+ "Tisoomi": {
+ "http://www.tisoomi.com/": ["adternal.com", "tisoomi.com"]
+ }
+ },
+ {
+ "TLVMedia": {
+ "http://tlvmedia.com/": ["tlvmedia.com"]
+ }
+ },
+ {
+ "Todacell": {
+ "http://www.todacell.com/": ["todacell.com"]
+ }
+ },
+ {
+ "ToneFuse": {
+ "http://tonefuse.com/": ["tonefuse.com"]
+ }
+ },
+ {
+ "ToneMedia": {
+ "http://tonemedia.com/": ["clickfuse.com", "tonemedia.com"]
+ }
+ },
+ {
+ "TouchCommerce": {
+ "http://www.touchcommerce.com/": ["inq.com", "touchcommerce.com"]
+ }
+ },
+ {
+ "TrackingSoft": {
+ "http://trackingsoft.com/": ["trackingsoft.com"]
+ }
+ },
+ {
+ "Tradedoubler": {
+ "http://www.tradedoubler.com/": ["tradedoubler.com"]
+ }
+ },
+ {
+ "TradeTracker": {
+ "http://www.tradetracker.com/": [
+ "tradetracker.com",
+ "tradetracker.net"
+ ]
+ }
+ },
+ {
+ "TrafficHaus": {
+ "http://www.traffichaus.com/": ["traffichaus.com", "traffichouse.com"]
+ }
+ },
+ {
+ "TrafficRevenue": {
+ "http://www.trafficrevenue.net/": ["trafficrevenue.net"]
+ }
+ },
+ {
+ "Traffiq": {
+ "http://www.traffiq.com/": ["traffiq.com"]
+ }
+ },
+ {
+ "Trafmag": {
+ "http://trafmag.com/": ["trafmag.com"]
+ }
+ },
+ {
+ "Traverse": {
+ "http://www.traversedata.com/": ["traversedlp.com"]
+ }
+ },
+ {
+ "Travora Media": {
+ "http://www.travoramedia.com/": [
+ "traveladnetwork.com",
+ "traveladvertising.com",
+ "travoramedia.com"
+ ]
+ }
+ },
+ {
+ "Tremor Video": {
+ "http://www.tremorvideo.com/": [
+ "scanscout.com",
+ "tmnetads.com",
+ "tremorhub.com",
+ "tremormedia.com",
+ "tremorvideo.com"
+ ]
+ }
+ },
+ {
+ "Triggit": {
+ "http://triggit.com/": ["triggit.com"]
+ }
+ },
+ {
+ "TripleLift": {
+ "http://triplelift.com/": ["3lift.com", "triplelift.com"]
+ }
+ },
+ {
+ "TruEffect": {
+ "http://www.trueffect.com/": ["adlegend.com", "trueffect.com"]
+ }
+ },
+ {
+ "TrustX": {
+ "https://trustx.org/": ["trustx.org"]
+ }
+ },
+ {
+ "TubeMogul": {
+ "http://www.tubemogul.com/": ["tmogul.com", "tubemogul.com"]
+ }
+ },
+ {
+ "Twelvefold": {
+ "http://www.twelvefold.com/": ["buzzlogic.com", "twelvefold.com"]
+ }
+ },
+ {
+ "Twitter": {
+ "https://twitter.com/": ["ads-twitter.com"]
+ }
+ },
+ {
+ "Twyn Group": {
+ "http://www.twyn.com/": ["twyn-group.com", "twyn.com"]
+ }
+ },
+ {
+ "Tyroo": {
+ "http://www.tyroo.com/": ["tyroo.com"]
+ }
+ },
+ {
+ "ucfunnel": {
+ "https://www.ucfunnel.com/": ["aralego.com", "ucfunnel.com"]
+ }
+ },
+ {
+ "uCoz": {
+ "http://www.ucoz.com/": [
+ "ucoz.ae",
+ "ucoz.br",
+ "ucoz.com",
+ "ucoz.du",
+ "ucoz.fr",
+ "ucoz.net",
+ "ucoz.ru"
+ ]
+ }
+ },
+ {
+ "Unanimis": {
+ "http://www.unanimis.co.uk/": ["unanimis.co.uk"]
+ }
+ },
+ {
+ "Underdog Media": {
+ "http://www.underdogmedia.com/": ["udmserve.net", "underdogmedia.com"]
+ }
+ },
+ {
+ "Undertone": {
+ "http://www.undertone.com/": [
+ "undertone.com",
+ "undertonenetworks.com",
+ "undertonevideo.com"
+ ]
+ }
+ },
+ {
+ "UniQlick": {
+ "http://www.uniqlick.com/": [
+ "51network.com",
+ "uniqlick.com",
+ "wanmo.com"
+ ]
+ }
+ },
+ {
+ "Unruly": {
+ "https://unruly.co/": ["unrulymedia.com"]
+ }
+ },
+ {
+ "Upland": {
+ "https://uplandsoftware.com/": ["leadlander.com", "trackalyzer.com"]
+ }
+ },
+ {
+ "up-value": {
+ "http://www.up-value.de/": ["up-value.de"]
+ }
+ },
+ {
+ "Value Ad": {
+ "http://valuead.com/": ["valuead.com"]
+ }
+ },
+ {
+ "Various": {
+ "http://www.various.com/": [
+ "amigos.com",
+ "getiton.com",
+ "medley.com",
+ "nostringsattached.com",
+ "various.com"
+ ]
+ }
+ },
+ {
+ "Vdopia": {
+ "http://www.vdopia.com/": ["ivdopia.com", "vdopia.com"]
+ }
+ },
+ {
+ "Veeseo": {
+ "http://veeseo.com": ["veeseo.com"]
+ }
+ },
+ {
+ "Velocity Media": {
+ "http://adsvelocity.com/": ["adsvelocity.com"]
+ }
+ },
+ {
+ "Velti": {
+ "http://www.velti.com/": ["mobclix.com", "velti.com"]
+ }
+ },
+ {
+ "Vemba": {
+ "https://www.vemba.com/": ["vemba.com"]
+ }
+ },
+ {
+ "Venatus Media": {
+ "http://venatusmedia.com": ["venatusmedia.com"]
+ }
+ },
+ {
+ "Vendemore": {
+ "https://vendemore.com/": ["vendemore.com"]
+ }
+ },
+ {
+ "Vendio": {
+ "http://www.vendio.com/": ["singlefeed.com", "vendio.com"]
+ }
+ },
+ {
+ "Veoxa": {
+ "http://www.veoxa.com/": ["veoxa.com"]
+ }
+ },
+ {
+ "Veremedia": {
+ "http://www.veremedia.com/": ["veremedia.com"]
+ }
+ },
+ {
+ "VerticalHealth": {
+ "https://www.verticalhealth.com/": ["verticalhealth.net"]
+ }
+ },
+ {
+ "VerticalResponse": {
+ "http://www.verticalresponse.com/": [
+ "verticalresponse.com",
+ "vresp.com"
+ ]
+ }
+ },
+ {
+ "Vibrant Media": {
+ "http://www.vibrantmedia.com/": [
+ "intellitxt.com",
+ "picadmedia.com",
+ "vibrantmedia.com"
+ ]
+ }
+ },
+ {
+ "VideoIntelligence": {
+ "https://www.vi.ai/": ["vi.ai"]
+ }
+ },
+ {
+ "VigLink": {
+ "http://www.viglink.com/": ["viglink.com"]
+ }
+ },
+ {
+ "VisibleBrands": {
+ "http://www.visbrands.com/": ["visbrands.com"]
+ }
+ },
+ {
+ "Visible Measures": {
+ "http://www.visiblemeasures.com/": [
+ "viewablemedia.net",
+ "visiblemeasures.com"
+ ]
+ }
+ },
+ {
+ "VisualDNA": {
+ "http://www.visualdna.com/": [
+ "vdna-assets.com",
+ "visualdna-stats.com",
+ "visualdna.com"
+ ]
+ }
+ },
+ {
+ "Vizu": {
+ "http://www.vizu.com/": ["vizu.com"]
+ }
+ },
+ {
+ "Vizury": {
+ "http://www.vizury.com/": ["vizury.com"]
+ }
+ },
+ {
+ "Vserv": {
+ "http://www.vserv.com/": ["vserv.com", "vserv.mobi"]
+ }
+ },
+ {
+ "Vuble": {
+ "https://vuble.tv/us/": ["mediabong.com"]
+ }
+ },
+ {
+ "Wahoha": {
+ "http://wahoha.com/": ["contentwidgets.net", "wahoha.com"]
+ }
+ },
+ {
+ "Wayfair": {
+ "https://www.wayfair.com/": ["wayfair.com"]
+ }
+ },
+ {
+ "WebAds": {
+ "http://www.webads.co.uk/": ["webads.co.uk"]
+ }
+ },
+ {
+ "Web.com": {
+ "http://www.web.com/": ["feedperfect.com", "web.com"]
+ }
+ },
+ {
+ "WebGozar.com": {
+ "http://www.webgozar.com/": ["webgozar.com", "webgozar.ir"]
+ }
+ },
+ {
+ "Webmecanik": {
+ "https://www.webmecanik.com/": ["webmecanik.com"]
+ }
+ },
+ {
+ "WebMetro": {
+ "http://www.webmetro.com/": ["dsmmadvantage.com", "webmetro.com"]
+ }
+ },
+ {
+ "Weborama": {
+ "http://weborama.com/": ["weborama.com", "weborama.fr"]
+ }
+ },
+ {
+ "Webtraffic": {
+ "http://www.webtraffic.se/": ["webtraffic.no", "webtraffic.se"]
+ }
+ },
+ {
+ "WideOrbit": {
+ "https://www.wideorbit.com/": ["dep-x.com"]
+ }
+ },
+ {
+ "WiredMinds": {
+ "http://www.wiredminds.com/": ["wiredminds.com", "wiredminds.de"]
+ }
+ },
+ {
+ "Wishabi": {
+ "http://wishabi.com": ["wishabi.com", "wishabi.net"]
+ }
+ },
+ {
+ "WordStream": {
+ "http://www.wordstream.com/": ["wordstream.com"]
+ }
+ },
+ {
+ "WPP": {
+ "http://www.wpp.com/": [
+ "247realmedia.com",
+ "accelerator-media.com",
+ "acceleratorusa.com",
+ "decdna.net",
+ "decideinteractive.com",
+ "gmads.net",
+ "groupm.com",
+ "kantarmedia.com",
+ "mecglobal.com",
+ "mindshare.nl",
+ "mookie1.com",
+ "pm14.com",
+ "realmedia.com",
+ "targ.ad",
+ "themig.com",
+ "wpp.com",
+ "xaxis.com"
+ ]
+ }
+ },
+ {
+ "xAd": {
+ "http://www.xad.com/": ["xad.com"]
+ }
+ },
+ {
+ "Xertive Media": {
+ "http://www.xertivemedia.com/": [
+ "admanager-xertive.com",
+ "xertivemedia.com"
+ ]
+ }
+ },
+ {
+ "xplosion interactive": {
+ "http://www.xplosion.de/": ["xplosion.de"]
+ }
+ },
+ {
+ "Xrost DS": {
+ "http://www.adplan-ds.com/": ["adplan-ds.com"]
+ }
+ },
+ {
+ "Yabuka": {
+ "http://www.yabuka.com/": ["yabuka.com"]
+ }
+ },
+ {
+ "Yahoo!": {
+ "http://www.yahoo.com/": [
+ "adinterax.com",
+ "adrevolver.com",
+ "ads.yahoo.com",
+ "adserver.yahoo.com",
+ "advertising.yahoo.com",
+ "bluelithium.com",
+ "dapper.net",
+ "flurry.com",
+ "interclick.com",
+ "marketingsolutions.yahoo.com",
+ "overture.com",
+ "rightmedia.com",
+ "rmxads.com",
+ "secure-adserver.com",
+ "thewheelof.com",
+ "yieldmanager.com",
+ "yieldmanager.net",
+ "yldmgrimg.net"
+ ]
+ }
+ },
+ {
+ "Yandex": {
+ "http://www.yandex.com/": [
+ "adfox.yandex.ru",
+ "an.yandex.ru",
+ "awaps.yandex.ru",
+ "mc.yandex.ru",
+ "moikrug.ru",
+ "web-visor.com",
+ "yandex.ru/clck/click",
+ "yandex.ru/clck/counter",
+ "yandex.ru/cycounter",
+ "yandex.ru/portal/set/any",
+ "yandex.ru/set/s/rsya-tag-users/data"
+ ]
+ }
+ },
+ {
+ "Ybrant Digital": {
+ "http://www.ybrantdigital.com/": [
+ "addynamix.com",
+ "adserverplus.com",
+ "oridian.com",
+ "ybrantdigital.com"
+ ]
+ }
+ },
+ {
+ "YD": {
+ "http://www.ydworld.com/": ["ydworld.com", "yieldivision.com"]
+ }
+ },
+ {
+ "YellowHammer": {
+ "http://www.yhmg.com/": [
+ "attracto.com",
+ "clickhype.com",
+ "yellowhammermg.com",
+ "yhmg.com"
+ ]
+ }
+ },
+ {
+ "Yes Ads": {
+ "http://yesads.com/": ["yesads.com"]
+ }
+ },
+ {
+ "YieldAds": {
+ "http://yieldads.com/": ["yieldads.com"]
+ }
+ },
+ {
+ "YieldBids": {
+ "http://ybx.io/": ["ybx.io"]
+ }
+ },
+ {
+ "YieldBot": {
+ "http://yieldbot.com/": ["yldbt.com"]
+ }
+ },
+ {
+ "YieldBuild": {
+ "http://yieldbuild.com/": ["yieldbuild.com"]
+ }
+ },
+ {
+ "Yieldify": {
+ "https://www.yieldify.com/": ["yieldify.com"]
+ }
+ },
+ {
+ "Yieldlab": {
+ "http://www.yieldlab.de/": ["yieldlab.de", "yieldlab.net"]
+ }
+ },
+ {
+ "Yieldmo": {
+ "https://yieldmo.com": ["yieldmo.com"]
+ }
+ },
+ {
+ "YieldNexus": {
+ "https://www.yieldnexus.com/": ["ynxs.io"]
+ }
+ },
+ {
+ "YOC": {
+ "http://group.yoc.com/": ["yoc-performance.com", "yoc.com"]
+ }
+ },
+ {
+ "Yoggrt": {
+ "http://www.yoggrt.com/": ["yoggrt.com"]
+ }
+ },
+ {
+ "youknowbest": {
+ "http://www.youknowbest.com/": ["youknowbest.com"]
+ }
+ },
+ {
+ "YuMe": {
+ "http://www.yume.com/": ["yume.com", "yumenetworks.com"]
+ }
+ },
+ {
+ "ZafulAffiliate": {
+ "https://affiliate.zaful.com/": [
+ "affasi.com",
+ "gw-ec.com",
+ "zaful.com"
+ ]
+ }
+ },
+ {
+ "Zango": {
+ "http://www.zango.com/": ["metricsdirect.com", "zango.com"]
+ }
+ },
+ {
+ "zanox": {
+ "http://www.zanox.com/": ["buy.at", "zanox-affiliate.de", "zanox.com"]
+ }
+ },
+ {
+ "zapunited": {
+ "http://www.zapunited.com/": ["zaparena.com", "zapunited.com"]
+ }
+ },
+ {
+ "ZEDO": {
+ "http://www.zedo.com/": ["zedo.com", "zincx.com"]
+ }
+ },
+ {
+ "Zefir": {
+ "https://ze-fir.com/": ["ze-fir.com"]
+ }
+ },
+ {
+ "Zemanta": {
+ "http://www.zemanta.com/": ["zemanta.com"]
+ }
+ },
+ {
+ "ZestAd": {
+ "http://www.zestad.com/": ["zestad.com"]
+ }
+ },
+ {
+ "Zeta Email Solutions": {
+ "http://www.zetaemailsolutions.com/": [
+ "insightgrit.com",
+ "zetaemailsolutions.com"
+ ]
+ }
+ },
+ {
+ "Zumobi": {
+ "http://www.zumobi.com/": ["zumobi.com"]
+ }
+ },
+ {
+ "ZypMedia": {
+ "http://www.zypmedia.com/": ["extend.tv", "zypmedia.com"]
+ }
+ }
+ ],
+ "Content": [
+ {
+ "33Across": {
+ "http://33across.com/": ["tynt.com"]
+ }
+ },
+ {
+ "ActivEngage": {
+ "http://www.activengage.com/": ["activengage.com"]
+ }
+ },
+ {
+ "Adap.tv": {
+ "http://adap.tv/": ["adap.tv"]
+ }
+ },
+ {
+ "Adobe": {
+ "http://www.adobe.com/": [
+ "adobe.com",
+ "fyre.co",
+ "livefyre.com",
+ "typekit.com"
+ ]
+ }
+ },
+ {
+ "Akamai": {
+ "http://www.akamai.com/": ["abmr.net", "akamai.com", "edgesuite.net"]
+ }
+ },
+ {
+ "AKQA": {
+ "http://www.akqa.com/": ["akqa.com", "srtk.net"]
+ }
+ },
+ {
+ "Amazon.com": {
+ "http://www.amazon.com/": [
+ "alexa.com",
+ "amazon.com",
+ "cloudfront.net"
+ ]
+ }
+ },
+ {
+ "AOL": {
+ "http://www.aol.com/": [
+ "5min.com",
+ "aim.com",
+ "aol.com",
+ "aolanswers.com",
+ "aolcdn.com",
+ "aoltechguru.com",
+ "autoblog.com",
+ "cambio.com",
+ "dailyfinance.com",
+ "editions.com",
+ "engadget.com",
+ "games.com",
+ "homesessive.com",
+ "huffingtonpost.com",
+ "joystiq.com",
+ "kitchendaily.com",
+ "makers.com",
+ "mandatory.com",
+ "mapquest.com",
+ "moviefone.com",
+ "noisecreep.com",
+ "patch.com",
+ "pawnation.com",
+ "shortcuts.com",
+ "shoutcast.com",
+ "spinner.com",
+ "stylelist.com",
+ "stylemepretty.com",
+ "surphace.com",
+ "techcrunch.com",
+ "theboombox.com",
+ "theboot.com",
+ "tuaw.com",
+ "userplane.com",
+ "winamp.com"
+ ]
+ }
+ },
+ {
+ "Automattic": {
+ "http://automattic.com/": [
+ "automattic.com",
+ "gravatar.com",
+ "intensedebate.com"
+ ]
+ }
+ },
+ {
+ "Baynote": {
+ "http://www.baynote.com/": ["baynote.com", "baynote.net"]
+ }
+ },
+ {
+ "Bazaarvoice": {
+ "http://www.bazaarvoice.com/": ["bazaarvoice.com"]
+ }
+ },
+ {
+ "BigDoor": {
+ "http://www.bigdoor.com/": ["bigdoor.com", "onetruefan.com"]
+ }
+ },
+ {
+ "Brightcove": {
+ "http://www.brightcove.com/": ["brightcove.com"]
+ }
+ },
+ {
+ "Browser-Update.org": {
+ "www.browser-update.org/": ["browser-update.org"]
+ }
+ },
+ {
+ "BTBuckets": {
+ "http://btbuckets.com/": ["btbuckets.com"]
+ }
+ },
+ {
+ "Buffer": {
+ "http://bufferapp.com/": ["bufferapp.com"]
+ }
+ },
+ {
+ "Bunchball": {
+ "http://www.bunchball.com/": ["bunchball.com"]
+ }
+ },
+ {
+ "buySAFE": {
+ "http://www.buysafe.com/": ["buysafe.com"]
+ }
+ },
+ {
+ "BuzzFeed": {
+ "http://www.buzzfeed.com/": ["buzzfed.com", "buzzfeed.com"]
+ }
+ },
+ {
+ "Cbox": {
+ "http://www.cbox.ws/": ["cbox.ws"]
+ }
+ },
+ {
+ "CBS Interactive": {
+ "http://www.cbsinteractive.com/": ["cbsinteractive.com", "com.com"]
+ }
+ },
+ {
+ "Cedexis": {
+ "http://www.cedexis.com/": ["cedexis.com", "cedexis.net"]
+ }
+ },
+ {
+ "Certona": {
+ "http://www.certona.com/": ["certona.com", "res-x.com"]
+ }
+ },
+ {
+ "ClipSyndicate": {
+ "http://www.clipsyndicate.com/": ["clipsyndicate.com"]
+ }
+ },
+ {
+ "Collarity": {
+ "http://www.collarity.com/": ["collarity.com"]
+ }
+ },
+ {
+ "Conduit": {
+ "http://www.conduit.com/": [
+ "conduit-banners.com",
+ "conduit-services.com",
+ "conduit.com",
+ "wibiya.com"
+ ]
+ }
+ },
+ {
+ "Congoo": {
+ "http://www.congoo.com/": ["congoo.com"]
+ }
+ },
+ {
+ "Contact At Once!": {
+ "http://www.contactatonce.com/": ["contactatonce.com"]
+ }
+ },
+ {
+ "Conviva": {
+ "http://www.conviva.com/": ["conviva.com"]
+ }
+ },
+ {
+ "DailyMe": {
+ "http://dailyme.com/": ["dailyme.com", "newstogram.com"]
+ }
+ },
+ {
+ "DataSift": {
+ "http://datasift.com/": ["datasift.com", "tweetmeme.com"]
+ }
+ },
+ {
+ "Disqus": {
+ "http://disqus.com/": ["disqus.com"]
+ }
+ },
+ {
+ "Echo": {
+ "http://aboutecho.com/": [
+ "aboutecho.com",
+ "haloscan.com",
+ "js-kit.com"
+ ]
+ }
+ },
+ {
+ "Facebook": {
+ "http://www.facebook.com/": [
+ "fbcdn.net",
+ "instagram.com",
+ "messenger.com"
+ ]
+ }
+ },
+ {
+ "Flattr": {
+ "http://flattr.com/": ["flattr.com"]
+ }
+ },
+ {
+ "FreeWheel": {
+ "http://www.freewheel.tv/": ["freewheel.tv", "fwmrm.net"]
+ }
+ },
+ {
+ "Genius.com": {
+ "http://www.genius.com/": ["genius.com"]
+ }
+ },
+ {
+ "Get Satisfaction": {
+ "https://getsatisfaction.com/": ["getsatisfaction.com"]
+ }
+ },
+ {
+ "Gigya": {
+ "http://www.gigya.com/": ["gigcount.com", "gigya.com"]
+ }
+ },
+ {
+ "Global Takeoff": {
+ "http://www.globaltakeoff.com/": [
+ "globaltakeoff.com",
+ "globaltakeoff.net"
+ ]
+ }
+ },
+ {
+ "GoGrid": {
+ "http://www.gogrid.com/": [
+ "formalyzer.com",
+ "gogrid.com",
+ "komli.net"
+ ]
+ }
+ },
+ {
+ "Google": {
+ "http://www.google.com/": [
+ "accounts.google.com",
+ "apis.google.com",
+ "appengine.google.com",
+ "apture.com",
+ "blogger.com",
+ "books.google.com",
+ "checkout.google.com",
+ "chrome.google.com",
+ "code.google.com",
+ "codesearch.google.com",
+ "docs.google.com",
+ "drive.google.com",
+ "earth.google.com",
+ "encrypted.google.com",
+ "feedburner.com",
+ "feedburner.google.com",
+ "feedproxy.google.com",
+ "finance.google.com",
+ "ggpht.com",
+ "gmodules.com",
+ "google-melange.com",
+ "google.ad",
+ "google.ae",
+ "google.al",
+ "google.am",
+ "google.as",
+ "google.at",
+ "google.az",
+ "google.ba",
+ "google.be",
+ "google.bf",
+ "google.bg",
+ "google.bi",
+ "google.bj",
+ "google.bs",
+ "google.bt",
+ "google.by",
+ "google.ca",
+ "google.cat",
+ "google.cd",
+ "google.cf",
+ "google.cg",
+ "google.ch",
+ "google.ci",
+ "google.cl",
+ "google.cm",
+ "google.cn",
+ "google.co.ao",
+ "google.co.bw",
+ "google.co.ck",
+ "google.co.cr",
+ "google.co.id",
+ "google.co.il",
+ "google.co.in",
+ "google.co.jp",
+ "google.co.ke",
+ "google.co.kr",
+ "google.co.ls",
+ "google.co.ma",
+ "google.co.mz",
+ "google.co.nz",
+ "google.co.th",
+ "google.co.tz",
+ "google.co.ug",
+ "google.co.uk",
+ "google.co.uz",
+ "google.co.ve",
+ "google.co.vi",
+ "google.co.za",
+ "google.co.zm",
+ "google.co.zw",
+ "google.com",
+ "google.com.af",
+ "google.com.ag",
+ "google.com.ai",
+ "google.com.ar",
+ "google.com.au",
+ "google.com.bd",
+ "google.com.bh",
+ "google.com.bn",
+ "google.com.bo",
+ "google.com.br",
+ "google.com.bz",
+ "google.com.co",
+ "google.com.cu",
+ "google.com.cy",
+ "google.com.do",
+ "google.com.ec",
+ "google.com.eg",
+ "google.com.et",
+ "google.com.fj",
+ "google.com.gh",
+ "google.com.gi",
+ "google.com.gt",
+ "google.com.hk",
+ "google.com.jm",
+ "google.com.kh",
+ "google.com.kw",
+ "google.com.lb",
+ "google.com.ly",
+ "google.com.mm",
+ "google.com.mt",
+ "google.com.mx",
+ "google.com.my",
+ "google.com.na",
+ "google.com.nf",
+ "google.com.ng",
+ "google.com.ni",
+ "google.com.np",
+ "google.com.om",
+ "google.com.pa",
+ "google.com.pe",
+ "google.com.pg",
+ "google.com.ph",
+ "google.com.pk",
+ "google.com.pr",
+ "google.com.py",
+ "google.com.qa",
+ "google.com.sa",
+ "google.com.sb",
+ "google.com.sg",
+ "google.com.sl",
+ "google.com.sv",
+ "google.com.tj",
+ "google.com.tr",
+ "google.com.tw",
+ "google.com.ua",
+ "google.com.uy",
+ "google.com.vc",
+ "google.com.vn",
+ "google.cv",
+ "google.cz",
+ "google.de",
+ "google.dj",
+ "google.dk",
+ "google.dm",
+ "google.dz",
+ "google.ee",
+ "google.es",
+ "google.fi",
+ "google.fm",
+ "google.fr",
+ "google.ga",
+ "google.ge",
+ "google.gg",
+ "google.gl",
+ "google.gm",
+ "google.gp",
+ "google.gr",
+ "google.gy",
+ "google.hn",
+ "google.hr",
+ "google.ht",
+ "google.hu",
+ "google.ie",
+ "google.im",
+ "google.iq",
+ "google.is",
+ "google.it",
+ "google.je",
+ "google.jo",
+ "google.kg",
+ "google.ki",
+ "google.kz",
+ "google.la",
+ "google.li",
+ "google.lk",
+ "google.lt",
+ "google.lu",
+ "google.lv",
+ "google.md",
+ "google.me",
+ "google.mg",
+ "google.mk",
+ "google.ml",
+ "google.mn",
+ "google.ms",
+ "google.mu",
+ "google.mv",
+ "google.mw",
+ "google.ne",
+ "google.nl",
+ "google.no",
+ "google.nr",
+ "google.nu",
+ "google.pl",
+ "google.pn",
+ "google.ps",
+ "google.pt",
+ "google.ro",
+ "google.rs",
+ "google.ru",
+ "google.rw",
+ "google.sc",
+ "google.se",
+ "google.sh",
+ "google.si",
+ "google.sk",
+ "google.sm",
+ "google.sn",
+ "google.so",
+ "google.st",
+ "google.td",
+ "google.tg",
+ "google.tk",
+ "google.tl",
+ "google.tm",
+ "google.tn",
+ "google.to",
+ "google.tt",
+ "google.vg",
+ "google.vu",
+ "google.ws",
+ "googleapis.com",
+ "googleartproject.com",
+ "googleusercontent.com",
+ "groups.google.com",
+ "gstatic.com",
+ "health.google.com",
+ "images.google.com",
+ "investor.google.com",
+ "knol.google.com",
+ "maps.google.com",
+ "music.google.com",
+ "news.google.com",
+ "panoramio.com",
+ "picasa.google.com",
+ "picasaweb.google.com",
+ "play.google.com",
+ "postini.com",
+ "recaptcha.net",
+ "script.google.com",
+ "shopping.google.com",
+ "sites.google.com",
+ "sketchup.google.com",
+ "support.google.com",
+ "talk.google.com",
+ "talkgadget.google.com",
+ "toolbar.google.com",
+ "translate.google.com",
+ "trends.google.com",
+ "video.google.com",
+ "videos.google.com",
+ "wallet.google.com",
+ "youtube.com"
+ ]
+ }
+ },
+ {
+ "Gravity": {
+ "http://www.gravity.com/": ["gravity.com", "grvcdn.com"]
+ }
+ },
+ {
+ "Heyzap": {
+ "http://www.heyzap.com/": ["heyzap.com"]
+ }
+ },
+ {
+ "HubSpot": {
+ "http://www.hubspot.com/": ["hubspot.com"]
+ }
+ },
+ {
+ "IBM": {
+ "http://www.ibm.com/": ["xtify.com"]
+ }
+ },
+ {
+ "iovation": {
+ "http://www.iovation.com/": ["iesnare.com", "iovation.com"]
+ }
+ },
+ {
+ "Kaltura": {
+ "http://corp.kaltura.com/": ["kaltura.com"]
+ }
+ },
+ {
+ "kikin": {
+ "http://www.kikin.com/": ["kikin.com"]
+ }
+ },
+ {
+ "Limelight Networks": {
+ "http://www.limelight.com/": [
+ "clickability.com",
+ "limelight.com",
+ "llnwd.net"
+ ]
+ }
+ },
+ {
+ "LivePerson": {
+ "http://www.liveperson.net/": ["liveperson.net"]
+ }
+ },
+ {
+ "LiveRail": {
+ "http://liverail.com/": ["liverail.com"]
+ }
+ },
+ {
+ "LongTail Video": {
+ "http://www.longtailvideo.com/": ["longtailvideo.com", "ltassrv.com"]
+ }
+ },
+ {
+ "Markit": {
+ "http://www.markit.com/": ["markit.com", "wsod.com"]
+ }
+ },
+ {
+ "MashLogic": {
+ "http://www.mashlogic.com/": ["mashlogic.com"]
+ }
+ },
+ {
+ "McAfee": {
+ "http://www.mcafee.com/": ["mcafee.com", "scanalert.com"]
+ }
+ },
+ {
+ "Microsoft": {
+ "http://www.microsoft.com/": [
+ "bing.com",
+ "gamesforwindows.com",
+ "getgamesmart.com",
+ "healthvault.com",
+ "ieaddons.com",
+ "iegallery.com",
+ "live.com",
+ "microsoft.com",
+ "microsoftalumni.com",
+ "microsoftalumni.org",
+ "microsoftstore.com",
+ "msn.com",
+ "msndirect.com",
+ "office.com",
+ "officelive.com",
+ "outlook.com",
+ "s-msn.com",
+ "skype.com",
+ "windowsphone.com",
+ "worldwidetelescope.org",
+ "xbox.com",
+ "zune.com",
+ "zune.net"
+ ]
+ }
+ },
+ {
+ "NDN": {
+ "http://www.newsinc.com/": ["newsinc.com"]
+ }
+ },
+ {
+ "Oberon Media": {
+ "http://www.oberon-media.com/": ["blaze.com", "oberon-media.com"]
+ }
+ },
+ {
+ "Ooyala": {
+ "http://www.ooyala.com/": ["oo4.com", "ooyala.com"]
+ }
+ },
+ {
+ "Oracle": {
+ "http://www.oracle.com/": [
+ "atgsvcs.com",
+ "instantservice.com",
+ "istrack.com",
+ "oracle.com"
+ ]
+ }
+ },
+ {
+ "Peerius": {
+ "http://www.peerius.com/": ["peerius.com"]
+ }
+ },
+ {
+ "Pinterest": {
+ "http://pinterest.com/": ["pinimg.com", "pinterest.com"]
+ }
+ },
+ {
+ "PunchTab": {
+ "http://www.punchtab.com/": ["punchtab.com"]
+ }
+ },
+ {
+ "RIM": {
+ "http://www.rim.com/": ["rim.com", "scoreloop.com"]
+ }
+ },
+ {
+ "Salesforce.com": {
+ "http://www.salesforce.com/": ["salesforceliveagent.com"]
+ }
+ },
+ {
+ "SAY": {
+ "http://saymedia.com/": [
+ "saymedia.com",
+ "typepad.com",
+ "videoegg.com"
+ ]
+ }
+ },
+ {
+ "ScribeFire": {
+ "http://www.scribefire.com/": ["scribefire.com"]
+ }
+ },
+ {
+ "Six Apart": {
+ "http://www.sixapart.com/": ["sixapart.com"]
+ }
+ },
+ {
+ "Skribit": {
+ "http://skribit.com/": ["skribit.com"]
+ }
+ },
+ {
+ "SnapEngage": {
+ "http://www.snapengage.com/": ["snapengage.com"]
+ }
+ },
+ {
+ "Spring Metrics": {
+ "http://www.springmetrics.com/": ["springmetrics.com"]
+ }
+ },
+ {
+ "Synacor": {
+ "http://www.synacor.com/": ["synacor.com"]
+ }
+ },
+ {
+ "ThingLink": {
+ "http://www.thinglink.com/": ["thinglink.com"]
+ }
+ },
+ {
+ "Thismoment": {
+ "http://www.thismoment.com/": ["thismoment.com"]
+ }
+ },
+ {
+ "Thummit": {
+ "http://www.thummit.com/": ["thummit.com"]
+ }
+ },
+ {
+ "Topsy": {
+ "http://topsy.com/": ["topsy.com"]
+ }
+ },
+ {
+ "TraceMyIP.org": {
+ "http://www.tracemyip.org/": ["tracemyip.org"]
+ }
+ },
+ {
+ "Trackset": {
+ "http://www.trackset.com/": ["trackset.com"]
+ }
+ },
+ {
+ "Trovus": {
+ "http://www.trovus.co.uk/": ["trovus.co.uk"]
+ }
+ },
+ {
+ "Trumba": {
+ "http://www.trumba.com/": ["trumba.com"]
+ }
+ },
+ {
+ "TRUSTe": {
+ "http://www.truste.com/": ["truste.com"]
+ }
+ },
+ {
+ "TurnTo": {
+ "http://www.turntonetworks.com/": ["turnto.com", "turntonetworks.com"]
+ }
+ },
+ {
+ "Tweetboard": {
+ "http://tweetboard.com/": ["tweetboard.com"]
+ }
+ },
+ {
+ "Twitter Counter": {
+ "http://twittercounter.com/": ["twittercounter.com"]
+ }
+ },
+ {
+ "UberMedia": {
+ "http://ubermedia.com/": ["tweetup.com", "ubermedia.com"]
+ }
+ },
+ {
+ "UberTags": {
+ "http://ubertags.com/": ["ubertags.com"]
+ }
+ },
+ {
+ "Unbounce": {
+ "http://unbounce.com/": ["unbounce.com"]
+ }
+ },
+ {
+ "Uptrends": {
+ "http://www.uptrends.com/": ["uptrends.com"]
+ }
+ },
+ {
+ "Usability Sciences": {
+ "http://www.usabilitysciences.com/": [
+ "usabilitysciences.com",
+ "webiqonline.com"
+ ]
+ }
+ },
+ {
+ "UserVoice": {
+ "http://www.uservoice.com/": ["uservoice.com"]
+ }
+ },
+ {
+ "Vertical Acuity": {
+ "http://www.verticalacuity.com/": ["verticalacuity.com"]
+ }
+ },
+ {
+ "VG WORT": {
+ "http://www.vgwort.de/": ["vgwort.de"]
+ }
+ },
+ {
+ "Videology": {
+ "http://www.videologygroup.com/": [
+ "tidaltv.com",
+ "videologygroup.com"
+ ]
+ }
+ },
+ {
+ "Viewbix": {
+ "http://www.viewbix.com/": ["qoof.com", "viewbix.com"]
+ }
+ },
+ {
+ "Vimeo": {
+ "http://vimeo.com/": ["vimeo.com", "vimeocdn.com"]
+ }
+ },
+ {
+ "VINDICO": {
+ "http://vindicogroup.com/": ["vindicogroup.com", "vindicosuite.com"]
+ }
+ },
+ {
+ "Voice2Page": {
+ "http://www.voice2page.com/": ["voice2page.com"]
+ }
+ },
+ {
+ "WebsiteAlive": {
+ "http://www.websitealive.com/": [
+ "websitealive.com",
+ "websitealive0.com",
+ "websitealive1.com",
+ "websitealive2.com",
+ "websitealive3.com",
+ "websitealive4.com",
+ "websitealive5.com",
+ "websitealive6.com",
+ "websitealive7.com",
+ "websitealive8.com",
+ "websitealive9.com"
+ ]
+ }
+ },
+ {
+ "Yahoo!": {
+ "http://www.yahoo.com/": [
+ "answers.yahoo.com",
+ "apps.yahoo.com",
+ "autos.yahoo.com",
+ "biz.yahoo.com",
+ "developer.yahoo.com",
+ "everything.yahoo.com",
+ "finance.yahoo.com",
+ "flickr.com",
+ "games.yahoo.com",
+ "groups.yahoo.com",
+ "help.yahoo.com",
+ "hotjobs.yahoo.com",
+ "info.yahoo.com",
+ "local.yahoo.com",
+ "luminate.com",
+ "messages.yahoo.com",
+ "movies.yahoo.com",
+ "msg.yahoo.com",
+ "news.yahoo.com",
+ "omg.yahoo.com",
+ "pipes.yahoo.com",
+ "pixazza.com",
+ "realestate.yahoo.com",
+ "search.yahoo.com",
+ "shine.yahoo.com",
+ "smallbusiness.yahoo.com",
+ "sports.yahoo.com",
+ "staticflickr.com",
+ "suggestions.yahoo.com",
+ "travel.yahoo.com",
+ "tumblr.com",
+ "upcoming.yahoo.com",
+ "webhosting.yahoo.com",
+ "widgets.yahoo.com",
+ "www.yahoo.com",
+ "yahooapis.com",
+ "yahoofs.com",
+ "yimg.com",
+ "ypolicyblog.com",
+ "yuilibrary.com",
+ "zenfs.com"
+ ]
+ }
+ },
+ {
+ "Yandex": {
+ "http://www.yandex.com/": [
+ "kinopoisk.ru",
+ "yandex.by",
+ "yandex.com",
+ "yandex.com.tr",
+ "yandex.ru",
+ "yandex.st",
+ "yandex.ua"
+ ]
+ }
+ },
+ {
+ "Zendesk": {
+ "http://www.zendesk.com/": ["zendesk.com"]
+ }
+ },
+ {
+ "Zopim": {
+ "https://www.zopim.com/": ["zopim.com"]
+ }
+ }
+ ],
+ "Analytics": [
+ {
+ "63 Squares": {
+ "http://63squares.com/": ["63squares.com", "i-stats.com"]
+ }
+ },
+ {
+ "Acxiom": {
+ "http://www.acxiom.com/": [
+ "acxiom.com",
+ "acxiomapac.com",
+ "mm7.net",
+ "pippio.com"
+ ]
+ }
+ },
+ {
+ "AddFreeStats": {
+ "http://www.addfreestats.com/": ["3dstats.com", "addfreestats.com"]
+ }
+ },
+ {
+ "Adloox": {
+ "http://www.adloox.com/": ["adloox.com", "adlooxtracking.com"]
+ }
+ },
+ {
+ "Adventori": {
+ "https://adventori.com": ["adventori.com"]
+ }
+ },
+ {
+ "AIData": {
+ "http://www.aidata.me/": ["advombat.ru", "aidata.me"]
+ }
+ },
+ {
+ "AivaLabs": {
+ "https://aivalabs.com": ["aivalabs.com"]
+ }
+ },
+ {
+ "Akamai": {
+ "http://www.akamai.com/": ["go-mpulse.net"]
+ }
+ },
+ {
+ "Amadesa": {
+ "http://www.amadesa.com/": ["amadesa.com"]
+ }
+ },
+ {
+ "Amazing Counters": {
+ "http://amazingcounters.com/": ["amazingcounters.com"]
+ }
+ },
+ {
+ "Amazon.com": {
+ "http://www.amazon.com/": ["alexametrics.com"]
+ }
+ },
+ {
+ "Amplitude": {
+ "https://amplitude.com/": ["amplitude.com"]
+ }
+ },
+ {
+ "anormal-media.de": {
+ "http://anormal-media.de/": ["anormal-media.de", "anormal-tracker.de"]
+ }
+ },
+ {
+ "AT Internet": {
+ "http://www.atinternet.com/": [
+ "at-o.net",
+ "atinternet.com",
+ "xiti.com"
+ ]
+ }
+ },
+ {
+ "Attracta": {
+ "https://www.attracta.com/": ["attracta.com"]
+ }
+ },
+ {
+ "Automattic": {
+ "http://automattic.com/": ["polldaddy.com"]
+ }
+ },
+ {
+ "AvantLink": {
+ "http://www.avantlink.com/": ["avmws.com"]
+ }
+ },
+ {
+ "Awio": {
+ "http://www.awio.com/": ["awio.com", "w3counter.com", "w3roi.com"]
+ }
+ },
+ {
+ "Belstat": {
+ "http://www.belstat.com/": [
+ "belstat.be",
+ "belstat.com",
+ "belstat.de",
+ "belstat.fr",
+ "belstat.nl"
+ ]
+ }
+ },
+ {
+ "BetssonPalantir": {
+ "https://betssonpalantir.com/": ["betssonpalantir.com"]
+ }
+ },
+ {
+ "BlogCounter.com": {
+ "http://www.blogcounter.de/": ["blogcounter.de"]
+ }
+ },
+ {
+ "BloomReach": {
+ "http://www.bloomreach.com/": ["p.brsrvr.com"]
+ }
+ },
+ {
+ "BlueCava": {
+ "http://www.bluecava.com/": ["bluecava.com"]
+ }
+ },
+ {
+ "Bluemetrix": {
+ "http://www.bluemetrix.com/": ["bluemetrix.com", "bmmetrix.com"]
+ }
+ },
+ {
+ "Bombora": {
+ "https://bombora.com/": ["ml314.com"]
+ }
+ },
+ {
+ "Branch": {
+ "https://branch.io/": ["branch.io"]
+ }
+ },
+ {
+ "Branica": {
+ "http://www.branica.com/": ["branica.com"]
+ }
+ },
+ {
+ "BrightEdge": {
+ "http://www.brightedge.com/": ["b0e8.com", "brightedge.com"]
+ }
+ },
+ {
+ "Bubblestat": {
+ "http://www.bubblestat.com/": ["bubblestat.com"]
+ }
+ },
+ {
+ "Cardlytics": {
+ "http://www.cardlytics.com/": ["cardlytics.com"]
+ }
+ },
+ {
+ "Chartbeat": {
+ "http://chartbeat.com/": ["chartbeat.com", "chartbeat.net"]
+ }
+ },
+ {
+ "Clickdensity": {
+ "http://www.clickdensity.com/": ["clickdensity.com"]
+ }
+ },
+ {
+ "ClickGuard": {
+ "https://www.clickguard.com/": ["clickguard.com"]
+ }
+ },
+ {
+ "ClickTale": {
+ "http://www.clicktale.com/": [
+ "clicktale.com",
+ "clicktale.net",
+ "pantherssl.com"
+ ],
+ "session-replay": "true"
+ }
+ },
+ {
+ "ClixMetrix": {
+ "http://www.clixmetrix.com/": ["clixmetrix.com"]
+ }
+ },
+ {
+ "Clixpy": {
+ "http://clixpy.com/": ["clixpy.com"]
+ }
+ },
+ {
+ "ClustrMaps": {
+ "http://www.clustrmaps.com/": ["clustrmaps.com"]
+ }
+ },
+ {
+ "CNZZ": {
+ "http://www.cnzz.com/": ["cnzz.com"]
+ }
+ },
+ {
+ "Compuware": {
+ "http://www.compuware.com/": [
+ "axf8.net",
+ "compuware.com",
+ "gomez.com"
+ ]
+ }
+ },
+ {
+ "comScore": {
+ "http://www.comscore.com/": [
+ "certifica.com",
+ "comscore.com",
+ "mdotlabs.com",
+ "scorecardresearch.com",
+ "sitestat.com",
+ "voicefive.com"
+ ]
+ }
+ },
+ {
+ "Connexity": {
+ "http://www.connexity.com/": ["connexity.com", "connexity.net"]
+ }
+ },
+ {
+ "Convert Insights": {
+ "http://www.convert.com/": ["convert.com", "reedge.com"]
+ }
+ },
+ {
+ "Convertro": {
+ "http://www.convertro.com/": ["convertro.com"]
+ }
+ },
+ {
+ "Crazy Egg": {
+ "http://www.crazyegg.com/": ["cetrk.com", "crazyegg.com"]
+ }
+ },
+ {
+ "Crowd Science": {
+ "http://crowdscience.com/": ["crowdscience.com"]
+ }
+ },
+ {
+ "Cya2": {
+ "http://cya2.net/": ["cya2.net"]
+ }
+ },
+ {
+ "Dataium": {
+ "http://www.dataium.com/": ["collserve.com", "dataium.com"]
+ }
+ },
+ {
+ "Deep Intent": {
+ "https://www.deepintent.com/": ["deepintent.com"]
+ }
+ },
+ {
+ "Demandbase": {
+ "http://www.demandbase.com/": ["company-target.com", "demandbase.com"]
+ }
+ },
+ {
+ "DirectCORP": {
+ "http://www.directcorp.de/": ["ipcounter.de"]
+ }
+ },
+ {
+ "DistilNetworks": {
+ "https://www.distilnetworks.com/": ["distiltag.com"]
+ }
+ },
+ {
+ "DoubleVerify": {
+ "http://www.doubleverify.com/": ["doubleverify.com"]
+ }
+ },
+ {
+ "dwstat.com": {
+ "http://www.dwstat.cn/": ["dwstat.cn"]
+ }
+ },
+ {
+ "ECSAnalytics": {
+ "https://www.theecsinc.com/": ["ecsanalytics.com"]
+ }
+ },
+ {
+ "EFF": {
+ "https://www.eff.org/": [
+ "do-not-tracker.org",
+ "eviltracker.net",
+ "trackersimulator.org"
+ ]
+ }
+ },
+ {
+ "eProof.com": {
+ "http://www.eproof.com/": ["eproof.com"]
+ }
+ },
+ {
+ "etracker": {
+ "http://www.etracker.com/": [
+ "etracker.com",
+ "etracker.de",
+ "sedotracker.com",
+ "sedotracker.de"
+ ]
+ }
+ },
+ {
+ "Eulerian Technologies": {
+ "http://www.eulerian.com/": ["eulerian.com", "eulerian.net"]
+ }
+ },
+ {
+ "eXTReMe digital": {
+ "http://extremetracking.com/": [
+ "extreme-dm.com",
+ "extremetracking.com"
+ ]
+ }
+ },
+ {
+ "Eyeota": {
+ "http://eyeota.net/": ["eyeota.net"]
+ }
+ },
+ {
+ "Feedjit": {
+ "http://feedjit.com/": ["feedjit.com"]
+ }
+ },
+ {
+ "Flashtalking": {
+ "http://www.flashtalking.com/": [
+ "encoremetrics.com",
+ "sitecompass.com"
+ ]
+ }
+ },
+ {
+ "Footprint": {
+ "http://www.footprintlive.com/": ["footprintlive.com"]
+ }
+ },
+ {
+ "Free Online Users": {
+ "http://www.freeonlineusers.com/": ["freeonlineusers.com"]
+ }
+ },
+ {
+ "Free-PageRank.com": {
+ "http://www.free-pagerank.com/": ["free-pagerank.com"]
+ }
+ },
+ {
+ "Friends2Follow": {
+ "https://friends2follow.com/": ["antifraudjs.friends2follow.com"]
+ }
+ },
+ {
+ "Fullstory": {
+ "https://www.fullstory.com/": ["fullstory.com"],
+ "session-replay": "true"
+ }
+ },
+ {
+ "GetSiteControl": {
+ "https://getsitecontrol.com/": ["getsitecontrol.com"]
+ }
+ },
+ {
+ "GfK Group": {
+ "http://www.gfk.com/": ["daphnecm.com", "gfk.com", "gfkdaphne.com"]
+ }
+ },
+ {
+ "GitHub": {
+ "https://github.com/": ["gaug.es"]
+ }
+ },
+ {
+ "Go Daddy": {
+ "http://www.godaddy.com/": ["godaddy.com", "trafficfacts.com"]
+ }
+ },
+ {
+ "Google": {
+ "http://www.google.com/": ["google-analytics.com", "postrank.com"]
+ }
+ },
+ {
+ "GoSquared": {
+ "https://www.gosquared.com/": ["gosquared.com"]
+ }
+ },
+ {
+ "GoStats": {
+ "http://gostats.com/": ["gostats.com"]
+ }
+ },
+ {
+ "GrapheneMedia": {
+ "http://graphenemedia.in/": ["graphenedigitalanalytics.in"]
+ }
+ },
+ {
+ "GTop": {
+ "http://www.gtop.ro/": ["gtop.ro", "gtopstats.com"]
+ }
+ },
+ {
+ "Hearst": {
+ "http://www.hearst.com/": ["raasnet.com", "redaril.com"]
+ }
+ },
+ {
+ "Histats": {
+ "http://www.histats.com/": ["histats.com"]
+ }
+ },
+ {
+ "HitsLink": {
+ "http://www.hitslink.com/": ["hitslink.com"]
+ }
+ },
+ {
+ "Hit Sniffer": {
+ "http://www.hitsniffer.com/": ["hitsniffer.com"]
+ }
+ },
+ {
+ "Hotjar": {
+ "https://www.hotjar.com": ["hotjar.com"]
+ }
+ },
+ {
+ "HubSpot": {
+ "http://www.hubspot.com/": ["hs-analytics.net"]
+ }
+ },
+ {
+ "IBM": {
+ "http://www.ibm.com/": ["cmcore.com", "coremetrics.com", "ibm.com"]
+ }
+ },
+ {
+ "InboundWriter": {
+ "http://www.inboundwriter.com/": [
+ "enquisite.com",
+ "inboundwriter.com"
+ ]
+ }
+ },
+ {
+ "Infernotions": {
+ "https://infernotions.com/": ["infernotions.com"]
+ }
+ },
+ {
+ "INFOnline": {
+ "https://www.infonline.de/": ["infonline.de", "ioam.de", "ivwbox.de"]
+ }
+ },
+ {
+ "InfoStars": {
+ "http://infostars.ru/": ["hotlog.ru", "infostars.ru"]
+ }
+ },
+ {
+ "Inspectlet": {
+ "http://www.inspectlet.com/": ["inspectlet.com"]
+ }
+ },
+ {
+ "IntelligenceFocus": {
+ "http://www.intelligencefocus.com/": [
+ "domodomain.com",
+ "intelligencefocus.com"
+ ]
+ }
+ },
+ {
+ "iPerceptions": {
+ "http://www.iperceptions.com/": ["iperceptions.com"]
+ }
+ },
+ {
+ "IslayTech": {
+ "http://islay.tech": ["islay.tech"]
+ }
+ },
+ {
+ "ItIsATracker": {
+ "https://itisatracker.com/": ["itisatracker.com"],
+ "dnt": "eff"
+ }
+ },
+ {
+ "KeyMetric": {
+ "http://www.keymetric.net/": ["keymetric.net"]
+ }
+ },
+ {
+ "KISSmetrics": {
+ "http://kissmetrics.com/": ["kissmetrics.com"]
+ }
+ },
+ {
+ "Kitcode": {
+ "http://src.kitcode.net/": ["src.kitcode.net"]
+ }
+ },
+ {
+ "LeadForensics": {
+ "https://www.leadforensics.com": ["leadforensics.com"]
+ }
+ },
+ {
+ "LineZing": {
+ "http://www.linezing.com/": ["linezing.com"]
+ }
+ },
+ {
+ "LivePerson": {
+ "http://www.liveperson.net/": ["liveperson.com", "nuconomy.com"]
+ }
+ },
+ {
+ "Logdy": {
+ "http://logdy.com/": ["logdy.com"]
+ }
+ },
+ {
+ "Lotame": {
+ "http://www.lotame.com/": ["crwdcntrl.net", "lotame.com"]
+ }
+ },
+ {
+ "LuckyOrange": {
+ "https://www.luckyorange.com": ["luckyorange.com", "luckyorange.net"],
+ "session-replay": "true"
+ }
+ },
+ {
+ "Lynchpin": {
+ "http://www.lynchpin.com/": ["lynchpin.com", "lypn.com"]
+ }
+ },
+ {
+ "Lyris": {
+ "http://www.lyris.com/": ["clicktracks.com", "lyris.com"]
+ }
+ },
+ {
+ "Lytiks": {
+ "http://www.lytiks.com/": ["lytiks.com"]
+ }
+ },
+ {
+ "MarkMonitor": {
+ "https://www.markmonitor.com": ["9c9media.ca", "markmonitor.com"]
+ }
+ },
+ {
+ "Marktest": {
+ "http://www.marktest.com/": ["marktest.com", "marktest.pt"]
+ }
+ },
+ {
+ "MaxMind": {
+ "https://www.maxmind.com/en/home": ["maxmind.com", "mmapiws.com"]
+ }
+ },
+ {
+ "Médiamétrie-eStat": {
+ "http://www.mediametrie-estat.com/": [
+ "estat.com",
+ "mediametrie-estat.com"
+ ]
+ }
+ },
+ {
+ "Merkle": {
+ "https://www.merkleinc.com/": ["merkleinc.com", "rkdms.com"]
+ }
+ },
+ {
+ "Mixpanel": {
+ "https://mixpanel.com/": ["mixpanel.com", "mxpnl.com"]
+ }
+ },
+ {
+ "Mongoose Metrics": {
+ "http://www.mongoosemetrics.com/": ["mongoosemetrics.com"]
+ }
+ },
+ {
+ "Monitus": {
+ "http://www.monitus.net/": ["monitus.net"]
+ }
+ },
+ {
+ "motigo": {
+ "http://motigo.com/": ["motigo.com", "nedstatbasic.net"]
+ }
+ },
+ {
+ "Mouseflow": {
+ "http://mouseflow.com/": ["mouseflow.com"]
+ }
+ },
+ {
+ "MyPagerank.Net": {
+ "http://www.mypagerank.net/": ["mypagerank.net"]
+ }
+ },
+ {
+ "Mystighty": {
+ "http://mystighty.info/": ["mystighty.info", "sweeterge.info"]
+ }
+ },
+ {
+ "Narrative": {
+ "http://narrative.io/2/": ["narrative.io"]
+ }
+ },
+ {
+ "Net Applications": {
+ "http://www.netapplications.com/": [
+ "hitsprocessor.com",
+ "netapplications.com"
+ ]
+ }
+ },
+ {
+ "New Relic": {
+ "http://newrelic.com/": ["newrelic.com", "nr-data.net"]
+ }
+ },
+ {
+ "NewsRight": {
+ "http://www.newsright.com/": ["apnewsregistry.com"]
+ }
+ },
+ {
+ "NextSTAT": {
+ "http://www.nextstat.com/": ["nextstat.com"]
+ }
+ },
+ {
+ "Nielsen": {
+ "http://www.nielsen.com/": ["glanceguide.com", "nielsen.com"]
+ }
+ },
+ {
+ "NuDataSecurity": {
+ "https://nudatasecurity.com/": ["nudatasecurity.com"]
+ }
+ },
+ {
+ "nurago": {
+ "http://www.nurago.com/": ["nurago.com", "nurago.de", "sensic.net"]
+ }
+ },
+ {
+ "Observer": {
+ "http://observerapp.com/": ["observerapp.com"]
+ }
+ },
+ {
+ "OnAudience": {
+ "http://www.onaudience.com/": [
+ "behavioralengine.com",
+ "onaudience.com"
+ ]
+ }
+ },
+ {
+ "OneStat": {
+ "http://www.onestat.com/": ["onestat.com"]
+ }
+ },
+ {
+ "Openstat": {
+ "https://www.openstat.ru/": ["openstat.ru", "spylog.com"]
+ }
+ },
+ {
+ "Opentracker": {
+ "http://www.opentracker.net/": ["opentracker.net"]
+ }
+ },
+ {
+ "Opolen": {
+ "https://opolen.com.br": ["opolen.com.br"]
+ }
+ },
+ {
+ "Optimizely": {
+ "https://www.optimizely.com/": ["optimizely.com"]
+ }
+ },
+ {
+ "Oracle": {
+ "http://www.oracle.com/": ["eloqua.com", "maxymiser.com"]
+ }
+ },
+ {
+ "ÖWA": {
+ "http://www.oewa.at/": ["oewa.at", "oewabox.at"]
+ }
+ },
+ {
+ "Parse.ly": {
+ "http://parsely.com/": ["parsely.com"]
+ }
+ },
+ {
+ "PersianStat.com": {
+ "http://www.persianstat.com/": ["persianstat.com"]
+ }
+ },
+ {
+ "Phonalytics": {
+ "http://www.phonalytics.com/": ["phonalytics.com"]
+ }
+ },
+ {
+ "phpMyVisites": {
+ "http://www.phpmyvisites.us/": ["phpmyvisites.us"]
+ }
+ },
+ {
+ "Piwik": {
+ "http://piwik.org/": ["piwik.org"]
+ }
+ },
+ {
+ "PixAnalytics": {
+ "https://pixanalytics.com/": ["pixanalytics.com"]
+ }
+ },
+ {
+ "Poool": {
+ "http://poool.fr/": ["poool.fr"]
+ }
+ },
+ {
+ "Pronunciator": {
+ "http://www.pronunciator.com/": [
+ "pronunciator.com",
+ "visitorville.com"
+ ]
+ }
+ },
+ {
+ "Qualaroo": {
+ "http://qualaroo.com/": ["kissinsights.com", "qualaroo.com"]
+ }
+ },
+ {
+ "QuinStreet": {
+ "http://quinstreet.com/": ["thecounter.com"]
+ }
+ },
+ {
+ "Quintelligence": {
+ "http://www.quintelligence.com/": ["quintelligence.com"]
+ }
+ },
+ {
+ "RadarURL": {
+ "http://radarurl.com/": ["radarurl.com"]
+ }
+ },
+ {
+ "Research Now": {
+ "http://www.researchnow.com/": [
+ "researchnow.com",
+ "valuedopinions.co.uk"
+ ]
+ }
+ },
+ {
+ "Retail Automata": {
+ "https://retailautomata.com": ["retailautomata.com"]
+ }
+ },
+ {
+ "Revtracks": {
+ "http://revtrax.com/": ["revtrax.com"]
+ }
+ },
+ {
+ "Ringier": {
+ "http://ringier.cz/": ["ringier.cz"]
+ }
+ },
+ {
+ "Rollick": {
+ "https://gorollick.com": ["rollick.io"]
+ }
+ },
+ {
+ "Roxr": {
+ "http://roxr.net/": ["getclicky.com", "roxr.net", "staticstuff.net"]
+ }
+ },
+ {
+ "Safecount": {
+ "http://www.safecount.net/": [
+ "dl-rms.com",
+ "dlqm.net",
+ "questionmarket.com",
+ "safecount.net"
+ ]
+ }
+ },
+ {
+ "SageMetrics": {
+ "http://www.sagemetrics.com/": ["sageanalyst.net", "sagemetrics.com"]
+ }
+ },
+ {
+ "Salesintelligence": {
+ "https://salesintelligence.pl/": ["plugin.management"]
+ }
+ },
+ {
+ "SeeVolution": {
+ "https://www.seevolution.com/": ["seevolution.com", "svlu.net"]
+ }
+ },
+ {
+ "Segment.io": {
+ "https://segment.io/": ["segment.io"]
+ }
+ },
+ {
+ "SendPulse": {
+ "https://sendpulse.com/": ["sendpulse.com"]
+ }
+ },
+ {
+ "SessionCam": {
+ "https://sessioncam.com/": ["sessioncam.com"],
+ "session-replay": "true"
+ }
+ },
+ {
+ "ShinyStat": {
+ "http://www.shinystat.com/": ["shinystat.com"]
+ }
+ },
+ {
+ "Smartlook": {
+ "https://www.smartlook.com/": ["smartlook.com"],
+ "session-replay": "true"
+ }
+ },
+ {
+ "Snoobi": {
+ "http://www.snoobi.com/": ["snoobi.com"]
+ }
+ },
+ {
+ "Sourcepoint": {
+ "https://www.sourcepoint.com/": ["summerhamster.com"]
+ }
+ },
+ {
+ "Sputnik.ru": {
+ "http://sputnik.ru": ["sputnik.ru"]
+ }
+ },
+ {
+ "StackTrack": {
+ "http://stat-track.com": ["stat-track.com"]
+ }
+ },
+ {
+ "stat4u": {
+ "http://stat.4u.pl/": ["4u.pl"]
+ }
+ },
+ {
+ "StatCounter": {
+ "http://statcounter.com/": ["statcounter.com"]
+ }
+ },
+ {
+ "Statisfy": {
+ "http://statisfy.net": ["statisfy.net"]
+ }
+ },
+ {
+ "STATSIT": {
+ "http://www.statsit.com/": ["statsit.com"]
+ }
+ },
+ {
+ "Storeland": {
+ "https://storeland.ru/": ["storeland.ru"]
+ }
+ },
+ {
+ "Stratigent": {
+ "http://www.stratigent.com/": ["stratigent.com"]
+ }
+ },
+ {
+ "Tealium": {
+ "https://tealium.com": ["tealiumiq.com"]
+ }
+ },
+ {
+ "TechSolutions": {
+ "https://www.techsolutions.com.tw/": ["techsolutions.com.tw"]
+ }
+ },
+ {
+ "TENSQUARE": {
+ "http://www.tensquare.com/": ["tensquare.com"]
+ }
+ },
+ {
+ "The Heron Partnership": {
+ "http://www.heronpartners.com.au/": [
+ "heronpartners.com.au",
+ "marinsm.com"
+ ]
+ }
+ },
+ {
+ "TNS": {
+ "http://www.tnsglobal.com/": [
+ "sesamestats.com",
+ "statistik-gallup.net",
+ "tns-counter.ru",
+ "tns-cs.net",
+ "tnsglobal.com"
+ ]
+ }
+ },
+ {
+ "TrackingSoft": {
+ "http://trackingsoft.com/": ["roia.biz", "trackingsoft.com"]
+ }
+ },
+ {
+ "TrafficScore": {
+ "https://trafficscore.com/": ["trafficscore.com"]
+ }
+ },
+ {
+ "Twitter": {
+ "https://twitter.com/": ["crashlytics.com", "tweetdeck.com"]
+ }
+ },
+ {
+ "Umbel": {
+ "https://www.umbel.com/": ["umbel.com"]
+ }
+ },
+ {
+ "User Local": {
+ "http://nakanohito.jp/": ["nakanohito.jp"]
+ }
+ },
+ {
+ "V12 Data": {
+ "https://www.v12data.com/": ["v12data.com", "v12group.com"]
+ }
+ },
+ {
+ "Vertster": {
+ "http://www.vertster.com/": ["vertster.com"]
+ }
+ },
+ {
+ "VisiStat": {
+ "http://www.visistat.com/": ["sa-as.com", "visistat.com"]
+ }
+ },
+ {
+ "Visit Streamer": {
+ "http://www.visitstreamer.com/": ["visitstreamer.com"]
+ }
+ },
+ {
+ "vistrac": {
+ "http://vistrac.com/": ["vistrac.com"]
+ }
+ },
+ {
+ "ViziSense": {
+ "http://www.vizisense.com/": ["vizisense.com", "vizisense.net"]
+ }
+ },
+ {
+ "Webclicktracker": {
+ "http://www.webclicktracker.com/": ["webclicktracker.com"]
+ }
+ },
+ {
+ "Web Stats": {
+ "http://www.onlinewebstats.com/": ["onlinewebstats.com"]
+ }
+ },
+ {
+ "Web Tracking Services": {
+ "http://www.webtrackingservices.com/": [
+ "web-stat.com",
+ "webtrackingservices.com"
+ ]
+ }
+ },
+ {
+ "Web Traxs": {
+ "http://www.webtraxs.com/": ["webtraxs.com"]
+ }
+ },
+ {
+ "Webtrekk": {
+ "http://www.webtrekk.com/": ["webtrekk.com", "webtrekk.net"]
+ }
+ },
+ {
+ "Webtrends": {
+ "http://webtrends.com/": [
+ "reinvigorate.net",
+ "webtrends.com",
+ "webtrendslive.com"
+ ]
+ }
+ },
+ {
+ "White Ops": {
+ "https://www.whiteops.com/": ["adzmath.com", "whiteops.com"]
+ }
+ },
+ {
+ "whos.amung.us": {
+ "http://whos.amung.us/": ["amung.us"]
+ }
+ },
+ {
+ "Wingify": {
+ "http://wingify.com/": ["visualwebsiteoptimizer.com", "wingify.com"]
+ }
+ },
+ {
+ "Woopra": {
+ "http://www.woopra.com/": ["woopra-ns.com", "woopra.com"]
+ }
+ },
+ {
+ "WOW Analytics": {
+ "http://www.wowanalytics.co.uk/": ["wowanalytics.co.uk"]
+ }
+ },
+ {
+ "WPP": {
+ "http://www.wpp.com/": ["compete.com"]
+ }
+ },
+ {
+ "Wysistat": {
+ "http://www.wysistat.com/": ["wysistat.com"]
+ }
+ },
+ {
+ "Yahoo!": {
+ "http://www.yahoo.com/": ["analytics.yahoo.com"]
+ }
+ },
+ {
+ "YellowTracker": {
+ "http://www.yellowtracker.com/": ["yellowtracker.com"]
+ }
+ },
+ {
+ "YSance": {
+ "https://www.ysance.com/data-services/fr/home/": ["y-track.com"]
+ }
+ }
+ ],
+ "Fingerprinting": [
+ {
+ "Adabra": {
+ "https://www.adabra.com/": ["adabra.com"]
+ }
+ },
+ {
+ "Adbot": {
+ "https://adbot.tw/": ["adbot.tw"]
+ }
+ },
+ {
+ "AdGainerSolutions": {
+ "http://adgainersolutions.com/adgainer/": ["adgainersolutions.com"]
+ }
+ },
+ {
+ "AdMaven": {
+ "https://ad-maven.com/": [
+ "ad-maven.com",
+ "agreensdistra.info",
+ "boudja.com",
+ "rensovetors.info",
+ "wrethicap.info"
+ ]
+ }
+ },
+ {
+ "Admicro": {
+ "http://www.admicro.vn/": ["admicro.vn", "vcmedia.vn"]
+ }
+ },
+ {
+ "Adnium": {
+ "https://adnium.com": ["adnium.com", "montwam.top"]
+ }
+ },
+ {
+ "AdScore": {
+ "http://www.adscoremarketing.com/": ["adsco.re"]
+ }
+ },
+ {
+ "AdYouLike": {
+ "https://www.adyoulike.com/": ["pulpix.com"]
+ }
+ },
+ {
+ "AivaLabs": {
+ "https://aivalabs.com": ["aivalabs.com"]
+ }
+ },
+ {
+ "Albacross": {
+ "https://albacross.com": ["albacross.com"]
+ }
+ },
+ {
+ "AppCast": {
+ "https://appcast.io/": ["appcast.io"]
+ }
+ },
+ {
+ "AuditedMedia": {
+ "https://auditedmedia.com/": [
+ "aamapi.com",
+ "aamsitecertifier.com",
+ "auditedmedia.com"
+ ]
+ }
+ },
+ {
+ "Augur": {
+ "http://www.augur.io/": ["augur.io"]
+ }
+ },
+ {
+ "Azet": {
+ "http://mediaimpact.sk/": ["azetklik.sk", "rsz.sk"]
+ }
+ },
+ {
+ "BetssonPalantir": {
+ "https://betssonpalantir.com/": ["betssonpalantir.com"]
+ }
+ },
+ {
+ "BigClick": {
+ "http://bigclick.me/": ["bgclck.me", "xcvgdf.party"]
+ }
+ },
+ {
+ "BitMedia": {
+ "https://bitmedia.io/": ["bitmedia.io"]
+ }
+ },
+ {
+ "BlueCava": {
+ "http://www.bluecava.com/": ["bluecava.com"]
+ }
+ },
+ {
+ "BoostBox": {
+ "https://www.boostbox.com.br/": ["boostbox.com.br"]
+ }
+ },
+ {
+ "Brandcrumb": {
+ "http://www.brandcrumb.com": ["brandcrumb.com"]
+ }
+ },
+ {
+ "BreakTime": {
+ "https://www.breaktime.com.tw/": ["breaktime.com.tw"]
+ }
+ },
+ {
+ "BrightEdge": {
+ "http://www.brightedge.com/": ["b0e8.com"]
+ }
+ },
+ {
+ "C3 Metrics": {
+ "http://c3metrics.com/": [
+ "attributionmodel.com",
+ "c3metrics.com",
+ "c3tag.com"
+ ]
+ }
+ },
+ {
+ "CallSource": {
+ "https://www.callsource.com/": ["leadtrackingdata.com"]
+ }
+ },
+ {
+ "CartsGuru": {
+ "https://carts.guru/": ["carts.guru"]
+ }
+ },
+ {
+ "ClearLink": {
+ "https://www.clearlink.com/": ["clearlink.com"]
+ }
+ },
+ {
+ "Clickayab": {
+ "http://www.clickyab.com": ["clickyab.com"]
+ }
+ },
+ {
+ "ClickFrog": {
+ "https://clickfrog.ru/": [
+ "bashirian.biz",
+ "buckridge.link",
+ "franecki.net",
+ "quitzon.net",
+ "reichelcormier.bid",
+ "wisokykulas.bid"
+ ]
+ }
+ },
+ {
+ "ClickGuard": {
+ "https://www.clickguard.com/": ["clickguard.com"]
+ }
+ },
+ {
+ "Clixtell": {
+ "https://www.clixtell.com/": ["clixtell.com"]
+ }
+ },
+ {
+ "Consumable": {
+ "http://consumable.com/": ["consumable.com"]
+ }
+ },
+ {
+ "dmpxs": {
+ "http://bob.dmpxs.com": ["dmpxs.com"]
+ }
+ },
+ {
+ "ECSAnalytics": {
+ "https://www.theecsinc.com/": ["ecsanalytics.com"]
+ }
+ },
+ {
+ "EroAdvertising": {
+ "http://www.ero-advertising.com/": ["ero-advertising.com"]
+ }
+ },
+ {
+ "eyeReturn Marketing": {
+ "http://www.eyereturnmarketing.com/": [
+ "eyereturn.com",
+ "eyereturnmarketing.com"
+ ]
+ }
+ },
+ {
+ "Fanplayr": {
+ "https://fanplayr.com/": ["fanplayr.com"]
+ }
+ },
+ {
+ "Foresee": {
+ "https://www.foresee.com": ["answerscloud.com", "foresee.com"]
+ }
+ },
+ {
+ "Friends2Follow": {
+ "https://friends2follow.com/": ["antifraudjs.friends2follow.com"]
+ }
+ },
+ {
+ "FuelX": {
+ "https://fuelx.com/": ["fuel451.com", "fuelx.com"]
+ }
+ },
+ {
+ "Gleam": {
+ "https://gleam.io/": ["fraudjs.io"]
+ }
+ },
+ {
+ "GrapheneMedia": {
+ "http://graphenemedia.in/": ["graphenedigitalanalytics.in"]
+ }
+ },
+ {
+ "Gruner + Jahr": {
+ "http://www.guj.de/": ["ligatus.com"]
+ }
+ },
+ {
+ "HilltopAds": {
+ "https://hilltopads.com/": ["hilltopads.net", "shoporielder.pro"]
+ }
+ },
+ {
+ "HotelChamp": {
+ "https://www.hotelchamp.com": ["hotelchamp.com"]
+ }
+ },
+ {
+ "iMedia": {
+ "http://www.imedia.cz": ["imedia.cz"]
+ }
+ },
+ {
+ "IslayTech": {
+ "http://islay.tech": ["islay.tech"]
+ }
+ },
+ {
+ "ismatlab.com": {
+ "http://ismatlab.com": ["ismatlab.com"]
+ }
+ },
+ {
+ "Itch": {
+ "https://itch.io/": ["itch.io"]
+ }
+ },
+ {
+ "justuno": {
+ "https://www.justuno.com/": ["justuno.com"]
+ }
+ },
+ {
+ "Konduto": {
+ "http://konduto.com": ["k-analytix.com", "konduto.com"]
+ }
+ },
+ {
+ "LeadsHub": {
+ "https://ztsrv.com/": ["ztsrv.com"]
+ }
+ },
+ {
+ "lptracker": {
+ "https://lptracker.io/": ["lptracker.io"]
+ }
+ },
+ {
+ "MaxMind": {
+ "https://www.maxmind.com/en/home": ["maxmind.com", "mmapiws.com"]
+ }
+ },
+ {
+ "Mercadopago": {
+ "https://www.mercadopago.com/": ["mercadopago.com"]
+ }
+ },
+ {
+ "Mobials": {
+ "http://mobials.com": ["mobials.com"]
+ }
+ },
+ {
+ "Mystighty": {
+ "http://mystighty.info/": ["mystighty.info", "sweeterge.info"]
+ }
+ },
+ {
+ "Negishim": {
+ "http://www.negishim.org": ["negishim.org"]
+ }
+ },
+ {
+ "NuDataSecurity": {
+ "https://nudatasecurity.com/": ["nudatasecurity.com"]
+ }
+ },
+ {
+ "OneAd": {
+ "https://www.onead.com.tw/": [
+ "guoshipartners.com",
+ "onevision.com.tw"
+ ]
+ }
+ },
+ {
+ "OnlineMetrix": {
+ "http://h.online-metrix.net": ["online-metrix.net"]
+ }
+ },
+ {
+ "Opolen": {
+ "https://opolen.com.br": ["opolen.com.br"]
+ }
+ },
+ {
+ "PaymentsMB": {
+ "https://paymentsmb.com": ["paymentsmb.com"]
+ }
+ },
+ {
+ "Paypal": {
+ "https://www.paypal.com": ["simility.com"]
+ }
+ },
+ {
+ "PerimeterX": {
+ "https://www.perimeterx.com": ["perimeterx.net"]
+ }
+ },
+ {
+ "PixAnalytics": {
+ "https://pixanalytics.com/": ["pixanalytics.com"]
+ }
+ },
+ {
+ "Pixlee": {
+ "https://www.pixlee.com/": ["pixlee.com"]
+ }
+ },
+ {
+ "Poool": {
+ "http://poool.fr/": ["poool.fr"]
+ }
+ },
+ {
+ "PPCProtect": {
+ "https://ppcprotect.com": ["ppcprotect.com"]
+ }
+ },
+ {
+ "PrismApp": {
+ "https://www.prismapp.io/": ["prismapp.io"]
+ }
+ },
+ {
+ "PrometheusIntelligenceTechnology": {
+ "https://prometheusintelligencetechnology.com/": [
+ "prometheusintelligencetechnology.com"
+ ]
+ }
+ },
+ {
+ "Provers": {
+ "http://provers.pro": ["provers.pro"]
+ }
+ },
+ {
+ "Psonstrentie": {
+ "http://psonstrentie.info": ["psonstrentie.info"]
+ }
+ },
+ {
+ "Rollick": {
+ "https://gorollick.com": ["rollick.io"]
+ }
+ },
+ {
+ "SAP": {
+ "https://www.sap.com": ["seewhy.com"]
+ }
+ },
+ {
+ "Selectable Media": {
+ "http://selectablemedia.com/": ["nabbr.com", "selectablemedia.com"]
+ }
+ },
+ {
+ "Semantiqo": {
+ "http://semantiqo.com/": ["semantiqo.com"]
+ }
+ },
+ {
+ "SendPulse": {
+ "https://sendpulse.com/": ["sendpulse.com"]
+ }
+ },
+ {
+ "ShaftTraffic": {
+ "https://shafttraffic.com": ["libertystmedia.com"]
+ }
+ },
+ {
+ "Shortest": {
+ "http://shorte.st/": ["shorte.st"]
+ }
+ },
+ {
+ "SiftScience": {
+ "https://sift.com/": ["siftscience.com"]
+ }
+ },
+ {
+ "Signifyd": {
+ "https://www.signifyd.com/": ["signifyd.com"]
+ }
+ },
+ {
+ "Smi": {
+ "http://24smi.net": ["24smi.net"]
+ }
+ },
+ {
+ "Socital": {
+ "https://www.socital.com": ["socital.com"]
+ }
+ },
+ {
+ "Storeland": {
+ "https://storeland.ru/": ["storeland.ru"]
+ }
+ },
+ {
+ "Stripe": {
+ "https://stripe.com": ["stripe.network"]
+ }
+ },
+ {
+ "TechSolutions": {
+ "https://www.techsolutions.com.tw/": ["techsolutions.com.tw"]
+ }
+ },
+ {
+ "tongdun.cn": {
+ "https://www.tongdun.cn/?lan=EN": ["fraudmetrix.cn", "tongdun.net"]
+ }
+ },
+ {
+ "Upland": {
+ "https://uplandsoftware.com/": ["leadlander.com", "sf14g.com"]
+ }
+ },
+ {
+ "Vendemore": {
+ "https://vendemore.com/": ["vendemore.com"]
+ }
+ },
+ {
+ "VerticalHealth": {
+ "https://www.verticalhealth.com/": ["verticalhealth.net"]
+ }
+ },
+ {
+ "Webmecanik": {
+ "https://www.webmecanik.com/": ["webmecanik.com"]
+ }
+ },
+ {
+ "WideOrbit": {
+ "https://www.wideorbit.com/": ["dep-x.com"]
+ }
+ },
+ {
+ "YSance": {
+ "https://www.ysance.com/data-services/fr/home/": ["y-track.com"]
+ }
+ },
+ {
+ "ZafulAffiliate": {
+ "https://affiliate.zaful.com/": [
+ "affasi.com",
+ "gw-ec.com",
+ "zaful.com"
+ ]
+ }
+ },
+ {
+ "Zefir": {
+ "https://ze-fir.com/": ["ze-fir.com"]
+ }
+ }
+ ],
+ "Social": [
+ {
+ "AddThis": {
+ "http://www.addthis.com/": [
+ "addthis.com",
+ "addthiscdn.com",
+ "addthisedge.com",
+ "clearspring.com",
+ "connectedads.net",
+ "xgraph.com",
+ "xgraph.net"
+ ]
+ }
+ },
+ {
+ "Causes": {
+ "http://www.causes.com/": ["causes.com"]
+ }
+ },
+ {
+ "Digg": {
+ "http://digg.com/": ["digg.com"]
+ }
+ },
+ {
+ "Facebook": {
+ "http://www.facebook.com/": [
+ "apps.fbsbx.com",
+ "atdmt.com",
+ "facebook.com",
+ "facebook.de",
+ "facebook.fr",
+ "facebook.net",
+ "fb.com",
+ "fbsbx.com",
+ "friendfeed.com"
+ ]
+ }
+ },
+ {
+ "Google": {
+ "http://www.google.com/": [
+ "developers.google.com",
+ "gmail.com",
+ "googlemail.com",
+ "inbox.google.com",
+ "mail.google.com",
+ "orkut.com",
+ "plus.google.com",
+ "plusone.google.com",
+ "smartlock.google.com",
+ "voice.google.com",
+ "wave.google.com"
+ ]
+ }
+ },
+ {
+ "LinkedIn": {
+ "http://www.linkedin.com/": ["licdn.com", "linkedin.com"]
+ }
+ },
+ {
+ "Lockerz": {
+ "http://lockerz.com/": ["lockerz.com"]
+ }
+ },
+ {
+ "Mail.Ru": {
+ "http://mail.ru/": ["list.ru", "mail.ru"]
+ }
+ },
+ {
+ "Meebo": {
+ "https://www.meebo.com/": ["meebo.com", "meebocdn.net"]
+ }
+ },
+ {
+ "Papaya": {
+ "http://papayamobile.com/": ["papayamobile.com"]
+ }
+ },
+ {
+ "reddit": {
+ "http://www.reddit.com/": ["reddit.com"]
+ }
+ },
+ {
+ "Shareaholic": {
+ "http://www.shareaholic.com/": ["shareaholic.com"]
+ }
+ },
+ {
+ "ShareThis": {
+ "http://sharethis.com/": ["sharethis.com"]
+ }
+ },
+ {
+ "StumbleUpon": {
+ "http://www.stumbleupon.com/": ["stumble-upon.com", "stumbleupon.com"]
+ }
+ },
+ {
+ "Twitter": {
+ "https://twitter.com/": ["twimg.com", "twitter.com", "twitter.jp"]
+ }
+ },
+ {
+ "VKontakte": {
+ "http://vk.com/": ["userapi.com", "vk.com", "vkontakte.ru"]
+ }
+ },
+ {
+ "Yahoo!": {
+ "http://www.yahoo.com/": [
+ "address.yahoo.com",
+ "alerts.yahoo.com",
+ "avatars.yahoo.com",
+ "buzz.yahoo.com",
+ "calendar.yahoo.com",
+ "edit.yahoo.com",
+ "legalredirect.yahoo.com",
+ "login.yahoo.com",
+ "mail.yahoo.com",
+ "my.yahoo.com",
+ "mybloglog.com",
+ "notepad.yahoo.com",
+ "pulse.yahoo.com",
+ "rocketmail.com",
+ "webmessenger.yahoo.com",
+ "ymail.com"
+ ]
+ }
+ }
+ ],
+ "Cryptomining": [
+ {
+ "a.js": {
+ "http://zymerget.bid": [
+ "alflying.date",
+ "alflying.win",
+ "anybest.site",
+ "flightsy.bid",
+ "flightsy.win",
+ "flightzy.bid",
+ "flightzy.date",
+ "flightzy.win",
+ "zymerget.bid",
+ "zymerget.faith"
+ ],
+ "performance": "true"
+ }
+ },
+ {
+ "CashBeet": {
+ "http://cashbeet.com": ["cashbeet.com", "serv1swork.com"]
+ }
+ },
+ {
+ "CoinHive": {
+ "https://coinhive.com": [
+ "ad-miner.com",
+ "authedmine.com",
+ "bmst.pw",
+ "cnhv.co",
+ "coin-hive.com",
+ "coinhive.com",
+ "wsservices.org"
+ ],
+ "performance": "true"
+ }
+ },
+ {
+ "CoinPot": {
+ "http://coinpot.co": ["coinpot.co"],
+ "performance": "true"
+ }
+ },
+ {
+ "CryptoLoot": {
+ "https://crypto-loot.com": [
+ "cryptaloot.pro",
+ "crypto-loot.com",
+ "cryptolootminer.com",
+ "flashx.pw",
+ "gitgrub.pro",
+ "reauthenticator.com",
+ "statdynamic.com",
+ "webmine.pro"
+ ],
+ "performance": "true"
+ }
+ },
+ {
+ "CryptoWebMiner": {
+ "https://www.crypto-webminer.com": [
+ "bitcoin-pay.eu",
+ "crypto-webminer.com",
+ "ethpocket.de",
+ "ethtrader.de"
+ ]
+ }
+ },
+ {
+ "Gridcash": {
+ "https://www.gridcash.net/": ["adless.io", "gridcash.net"],
+ "performance": "true"
+ }
+ },
+ {
+ "JSE": {
+ "http://jsecoin.com": [
+ "freecontent.bid",
+ "freecontent.date",
+ "freecontent.stream",
+ "hashing.win",
+ "hostingcloud.racing",
+ "hostingcloud.science",
+ "jsecoin.com"
+ ],
+ "performance": "true"
+ }
+ },
+ {
+ "MinerAlt": {
+ "http://mineralt.io": [
+ "1q2w3.website",
+ "analytics.blue",
+ "aster18cdn.nl",
+ "belicimo.pw",
+ "besstahete.info",
+ "dinorslick.icu",
+ "feesocrald.com",
+ "gramombird.com",
+ "istlandoll.com",
+ "mepirtedic.com",
+ "mineralt.io",
+ "pampopholf.com",
+ "tercabilis.info",
+ "tulip18.com",
+ "vidzi.tv",
+ "yololike.space"
+ ],
+ "performance": "true"
+ }
+ },
+ {
+ "Minescripts": {
+ "http://minescripts.info": ["minescripts.info", "sslverify.info"],
+ "performance": "true"
+ }
+ },
+ {
+ "MineXMR": {
+ "http://minexmr.stream": ["minexmr.stream"],
+ "performance": "true"
+ }
+ },
+ {
+ "NeroHut": {
+ "https://nerohut.com": ["nerohut.com", "nhsrv.cf"],
+ "performance": "true"
+ }
+ },
+ {
+ "Service4refresh": {
+ "https://service4refresh.info": ["service4refresh.info"]
+ }
+ },
+ {
+ "SpareChange": {
+ "http://sparechange.io": ["sparechange.io"],
+ "performance": "true"
+ }
+ },
+ {
+ "SwiftMining": {
+ "https://swiftmining.win/": ["swiftmining.win"]
+ }
+ },
+ {
+ "Webmine": {
+ "https://webmine.cz/": ["authedwebmine.cz", "webmine.cz"]
+ }
+ },
+ {
+ "WebminePool": {
+ "http://webminepool.com": ["webminepool.com"],
+ "performance": "true"
+ }
+ },
+ {
+ "Webmining": {
+ "https://webmining.co/": ["webmining.co"]
+ }
+ }
+ ]
+ }
}
diff --git a/mobile/android/android-components/components/browser/engine-system/src/main/res/raw/domain_safelist.json b/mobile/android/android-components/components/browser/engine-system/src/main/res/raw/domain_safelist.json
index a2c80176b6..862e7db0de 100644
--- a/mobile/android/android-components/components/browser/engine-system/src/main/res/raw/domain_safelist.json
+++ b/mobile/android/android-components/components/browser/engine-system/src/main/res/raw/domain_safelist.json
@@ -1,12347 +1,6558 @@
{
- "2leep.com": {
- "properties": [
- "2leep.com"
- ],
- "resources": [
- "2leep.com"
- ]
- },
- "33Across": {
- "properties": [
- "33across.com",
- "tynt.com"
- ],
- "resources": [
- "33across.com",
- "tynt.com"
- ]
- },
- "365Media": {
- "properties": [
- "aggregateintelligence.com"
- ],
- "resources": [
- "365media.com",
- "aggregateintelligence.com"
- ]
- },
- "4INFO": {
- "properties": [
- "4info.com",
- "adhaven.com"
- ],
- "resources": [
- "4info.com",
- "adhaven.com"
- ]
- },
- "4mads": {
- "properties": [
- "4mads.com"
- ],
- "resources": [
- "4mads.com"
- ]
- },
- "63 Squares": {
- "properties": [
- "63labs.com"
- ],
- "resources": [
- "63labs.com",
- "63squares.com",
- "i-stats.com"
- ]
- },
- "Abax Interactive": {
- "properties": [
- "abaxinteractive.com"
- ],
- "resources": [
- "abaxinteractive.com"
- ]
- },
- "Accelia": {
- "properties": [
- "accelia.net",
- "durasite.net"
- ],
- "resources": [
- "accelia.net",
- "durasite.net"
- ]
- },
- "Accordant Media": {
- "properties": [
- "accordantmedia.com"
- ],
- "resources": [
- "accordantmedia.com"
- ]
- },
- "Acquisio": {
- "properties": [
- "acquisio.com",
- "clickequations.net"
- ],
- "resources": [
- "acquisio.com",
- "clickequations.net"
- ]
- },
- "Actisens": {
- "properties": [
- "actisens.com",
- "gestionpub.com"
- ],
- "resources": [
- "actisens.com",
- "gestionpub.com"
- ]
- },
- "ActiveConversion": {
- "properties": [
- "activeconversion.com",
- "activemeter.com"
- ],
- "resources": [
- "activeconversion.com",
- "activemeter.com"
- ]
- },
- "ActivEngage": {
- "properties": [
- "activengage.com"
- ],
- "resources": [
- "activengage.com"
- ]
- },
- "Act-On": {
- "properties": [
- "act-on.com",
- "actonsoftware.com"
- ],
- "resources": [
- "act-on.com",
- "actonsoftware.com"
- ]
- },
- "Acuity": {
- "properties": [
- "acuity.com",
- "acuityads.com",
- "acuityplatform.com"
- ],
- "resources": [
- "acuity.com",
- "acuityads.com",
- "acuityplatform.com"
- ]
- },
- "Acxiom": {
- "properties": [
- "acxiom.com",
- "mm7.net"
- ],
- "resources": [
- "acxiom.com",
- "acxiomapac.com",
- "mm7.net",
- "pippio.com"
- ]
- },
- "AD2ONE": {
- "properties": [
- "ad2onegroup.com"
- ],
- "resources": [
- "ad2onegroup.com"
- ]
- },
- "Ad4Game": {
- "properties": [
- "ad4game.com"
- ],
- "resources": [
- "ad4game.com"
- ]
- },
- "ad6media": {
- "properties": [
- "ad6media.fr"
- ],
- "resources": [
- "ad6media.fr"
- ]
- },
- "Adabra": {
- "properties": [
- "adabra.com"
- ],
- "resources": [
- "adabra.com"
- ]
- },
- "Adality": {
- "properties": [
- "adality.de"
- ],
- "resources": [
- "adality.de",
- "adrtx.net"
- ]
- },
- "AdaptiveAds": {
- "properties": [
- "adaptiveads.com"
- ],
- "resources": [
- "adaptiveads.com"
- ]
- },
- "Adaptly": {
- "properties": [
- "adaptly.com"
- ],
- "resources": [
- "adaptly.com"
- ]
- },
- "Adap.tv": {
- "properties": [
- "adap.tv"
- ],
- "resources": [
- "adap.tv"
- ]
- },
- "Adara Media": {
- "properties": [
- "adaramedia.com",
- "opinmind.com",
- "yieldoptimizer.com"
- ],
- "resources": [
- "adaramedia.com",
- "opinmind.com",
- "yieldoptimizer.com"
- ]
- },
- "Adatus": {
- "properties": [
- "adatus.com"
- ],
- "resources": [
- "adatus.com"
- ]
- },
- "Adbot": {
- "properties": [
- "adbot.tw"
- ],
- "resources": [
- "adbot.tw"
- ]
- },
- "Adbrain": {
- "properties": [
- "adbrain.com"
- ],
- "resources": [
- "adbrain.com",
- "adbrn.com"
- ]
- },
- "adBrite": {
- "properties": [
- "adbrite.com"
- ],
- "resources": [
- "adbrite.com"
- ]
- },
- "Adbroker.de": {
- "properties": [
- "adbroker.de"
- ],
- "resources": [
- "adbroker.de"
- ]
- },
- "Adchemy": {
- "properties": [
- "adchemy.com"
- ],
- "resources": [
- "adchemy.com"
- ]
- },
- "AdCirrus": {
- "properties": [
- "adcirrus.com"
- ],
- "resources": [
- "adcirrus.com"
- ]
- },
- "Ad Decisive": {
- "properties": [
- "a2dfp.net",
- "addecisive.com"
- ],
- "resources": [
- "a2dfp.net",
- "addecisive.com"
- ]
- },
- "AddFreeStats": {
- "properties": [
- "3dstats.com",
- "addfreestats.com"
- ],
- "resources": [
- "3dstats.com",
- "addfreestats.com"
- ]
- },
- "addGloo": {
- "properties": [
- "addgloo.com"
- ],
- "resources": [
- "addgloo.com"
- ]
- },
- "AddThis": {
- "properties": [
- "addthis.com"
- ],
- "resources": [
- "addthis.com",
- "addthiscdn.com",
- "addthisedge.com",
- "clearspring.com",
- "connectedads.net",
- "xgraph.com",
- "xgraph.net"
- ]
- },
- "Addvantage Media": {
- "properties": [
- "addvantagemedia.com"
- ],
- "resources": [
- "addvantagemedia.com"
- ]
- },
- "Ad Dynamo": {
- "properties": [
- "addynamo.com"
- ],
- "resources": [
- "addynamo.com",
- "addynamo.net"
- ]
- },
- "Adelphic": {
- "properties": [
- "adelphic.com"
- ],
- "resources": [
- "adelphic.com",
- "ipredictive.com"
- ]
- },
- "AdEngage": {
- "properties": [
- "adengage.com"
- ],
- "resources": [
- "adengage.com"
- ]
- },
- "AD Europe": {
- "properties": [
- "adeurope.com"
- ],
- "resources": [
- "adeurope.com"
- ]
- },
- "AdExtent": {
- "properties": [
- "adextent.com"
- ],
- "resources": [
- "adextent.com"
- ]
- },
- "AdF.ly": {
- "properties": [
- "adf.ly"
- ],
- "resources": [
- "adf.ly"
- ]
- },
- "Adfonic": {
- "properties": [
- "adfonic.com"
- ],
- "resources": [
- "adfonic.com"
- ]
- },
- "Adforge": {
- "properties": [
- "adforgeinc.com"
- ],
- "resources": [
- "adforgeinc.com"
- ]
- },
- "Adform": {
- "properties": [
- "adform.com"
- ],
- "resources": [
- "adform.com",
- "adform.net",
- "adformdsp.net"
- ]
- },
- "AdFox": {
- "properties": [
- "adfox.ru"
- ],
- "resources": [
- "adfox.ru"
- ]
- },
- "AdFrontiers": {
- "properties": [
- "adfrontiers.com"
- ],
- "resources": [
- "adfrontiers.com"
- ]
- },
- "Adfunky": {
- "properties": [
- "adfunky.com",
- "adfunkyserver.com"
- ],
- "resources": [
- "adfunky.com",
- "adfunkyserver.com"
- ]
- },
- "Adfusion": {
- "properties": [
- "adfusion.com"
- ],
- "resources": [
- "adfusion.com"
- ]
- },
- "AdGainerSolutions": {
- "properties": [
- "adgainersolutions.com"
- ],
- "resources": [
- "adgainersolutions.com"
- ]
- },
- "AdGent Digital": {
- "properties": [
- "adgentdigital.com"
- ],
- "resources": [
- "adgentdigital.com",
- "shorttailmedia.com"
- ]
- },
- "AdGibbon": {
- "properties": [
- "adgibbon.com"
- ],
- "resources": [
- "adgibbon.com"
- ]
- },
- "Adglare": {
- "properties": [
- "adglare.com"
- ],
- "resources": [
- "adglare.com",
- "adglare.net"
- ]
- },
- "adhood": {
- "properties": [
- "adhood.com"
- ],
- "resources": [
- "adhood.com"
- ]
- },
- "Adiant": {
- "properties": [
- "adblade.com",
- "adiant.com"
- ],
- "resources": [
- "adblade.com",
- "adiant.com"
- ]
- },
- "AdInsight": {
- "properties": [
- "responsetap.com"
- ],
- "resources": [
- "adinsight.com",
- "adinsight.eu",
- "responsetap.com"
- ]
- },
- "AdIQuity": {
- "properties": [
- "adiquity.com"
- ],
- "resources": [
- "adiquity.com"
- ]
- },
- "ADITION": {
- "properties": [
- "adition.com"
- ],
- "resources": [
- "adition.com"
- ]
- },
- "AdJug": {
- "properties": [
- "adjug.com"
- ],
- "resources": [
- "adjug.com"
- ]
- },
- "AdJuggler": {
- "properties": [
- "adjuggler.com",
- "adjuggler.net"
- ],
- "resources": [
- "adjuggler.com",
- "adjuggler.net"
- ]
- },
- "Adjust": {
- "properties": [
- "adjust.com"
- ],
- "resources": [
- "adjust.com"
- ]
- },
- "AdKeeper": {
- "properties": [
- "keep.com"
- ],
- "resources": [
- "adkeeper.com",
- "akncdn.com",
- "keep.com"
- ]
- },
- "AdKernel": {
- "properties": [
- "adkernel.com"
- ],
- "resources": [
- "adkernel.com"
- ]
- },
- "Ad Knife": {
- "properties": [
- "adknife.com"
- ],
- "resources": [
- "adknife.com"
- ]
- },
- "Adknowledge": {
- "properties": [
- "adknowledge.com",
- "adparlor.com",
- "bidsystem.com",
- "cubics.com",
- "lookery.com"
- ],
- "resources": [
- "adknowledge.com",
- "adparlor.com",
- "bidsystem.com",
- "cubics.com",
- "lookery.com"
- ]
- },
- "AdLantis": {
- "properties": [
- "adimg.net",
- "adlantis.jp",
- "www.adlantis.jp"
- ],
- "resources": [
- "adimg.net",
- "adlantis.jp",
- "www.adlantis.jp"
- ]
- },
- "AdLeave": {
- "properties": [
- "adleave.com"
- ],
- "resources": [
- "adleave.com"
- ]
- },
- "Adlibrium": {
- "properties": [
- "adlibrium.com"
- ],
- "resources": [
- "adlibrium.com"
- ]
- },
- "Adloox": {
- "properties": [
- "adloox.com"
- ],
- "resources": [
- "adloox.com",
- "adlooxtracking.com"
- ]
- },
- "Adlucent": {
- "properties": [
- "adlucent.com"
- ],
- "resources": [
- "adlucent.com"
- ]
- },
- "Ad Magnet": {
- "properties": [
- "admagnet.com",
- "admagnet.net"
- ],
- "resources": [
- "admagnet.com",
- "admagnet.net"
- ]
- },
- "Admarketplace": {
- "properties": [
- "admarketplace.com"
- ],
- "resources": [
- "admarketplace.com",
- "admarketplace.net",
- "ampxchange.com"
- ]
- },
- "AdMarvel": {
- "properties": [
- "admarvel.com"
- ],
- "resources": [
- "admarvel.com"
- ]
- },
- "AdMatrix": {
- "properties": [
- "admatrix.jp"
- ],
- "resources": [
- "admatrix.jp"
- ]
- },
- "AdMaven": {
- "properties": [
- "ad-maven.com"
- ],
- "resources": [
- "ad-maven.com",
- "agreensdistra.info",
- "boudja.com",
- "rensovetors.info",
- "wrethicap.info"
- ]
- },
- "AdMaximizer Network": {
- "properties": [
- "admaximizer.com"
- ],
- "resources": [
- "admaximizer.com"
- ]
- },
- "AdMedia": {
- "properties": [
- "admedia.com"
- ],
- "resources": [
- "admedia.com"
- ]
- },
- "Admeta": {
- "properties": [
- "admeta.com",
- "atemda.com"
- ],
- "resources": [
- "admeta.com",
- "atemda.com"
- ]
- },
- "Admicro": {
- "properties": [
- "admicro.vn"
- ],
- "resources": [
- "admicro.vn",
- "vcmedia.vn"
- ]
- },
- "Admixer": {
- "properties": [
- "admixer.co.kr"
- ],
- "resources": [
- "admixer.co.kr"
- ]
- },
- "Admized": {
- "properties": [
- "admized.com"
- ],
- "resources": [
- "admized.com"
- ]
- },
- "Admobile": {
- "properties": [
- "admobile.com"
- ],
- "resources": [
- "admobile.com"
- ]
- },
- "Admotion": {
- "properties": [
- "admotion.com"
- ],
- "resources": [
- "admotion.com",
- "nspmotion.com"
- ]
- },
- "Adnetik": {
- "properties": [
- "wtp101.com"
- ],
- "resources": [
- "adnetik.com",
- "wtp101.com"
- ]
- },
- "AdNetwork.net": {
- "properties": [
- "adnetwork.net"
- ],
- "resources": [
- "adnetwork.net"
- ]
- },
- "Adnium": {
- "properties": [
- "adnium.com"
- ],
- "resources": [
- "adnium.com",
- "montwam.top"
- ]
- },
- "adnologies": {
- "properties": [
- "adnologies.com",
- "heias.com"
- ],
- "resources": [
- "adnologies.com",
- "heias.com"
- ]
- },
- "Adobe": {
- "properties": [
- "adobe.com",
- "livefyre.com",
- "typekit.com"
- ],
- "resources": [
- "2o7.net",
- "adobe.com",
- "auditude.com",
- "demdex.com",
- "demdex.net",
- "dmtracker.com",
- "efrontier.com",
- "everestads.net",
- "everestjs.net",
- "everesttech.net",
- "fyre.co",
- "hitbox.com",
- "livefyre.com",
- "omniture.com",
- "omtrdc.net",
- "touchclarity.com",
- "typekit.com"
- ]
- },
- "AdOcean": {
- "properties": [
- "adocean-global.com",
- "adocean.pl"
- ],
- "resources": [
- "adocean-global.com",
- "adocean.pl"
- ]
- },
- "Adometry": {
- "properties": [
- "adometry.com"
- ],
- "resources": [
- "adometry.com",
- "dmtry.com"
- ]
- },
- "Adomik": {
- "properties": [
- "adomik.com"
- ],
- "resources": [
- "adomik.com"
- ]
- },
- "AdOnion": {
- "properties": [
- "adonion.com"
- ],
- "resources": [
- "adonion.com"
- ]
- },
- "Adorika": {
- "properties": [
- "clickotmedia.com"
- ],
- "resources": [
- "clickotmedia.com"
- ]
- },
- "Adotmob": {
- "properties": [
- "adotmob.com"
- ],
- "resources": [
- "adotmob.com"
- ]
- },
- "ADP Dealer Services": {
- "properties": [
- "cdkglobal.com"
- ],
- "resources": [
- "admission.net",
- "adpdealerservices.com",
- "cdkglobal.com",
- "cobalt.com"
- ]
- },
- "ad pepper media": {
- "properties": [
- "adpepper.com",
- "adpepper.us"
- ],
- "resources": [
- "adpepper.com",
- "adpepper.us"
- ]
- },
- "AdPerfect": {
- "properties": [
- "adperfect.com"
- ],
- "resources": [
- "adperfect.com"
- ]
- },
- "Adperium": {
- "properties": [
- "adperium.com"
- ],
- "resources": [
- "adperium.com"
- ]
- },
- "Adpersia": {
- "properties": [
- "adpersia.com"
- ],
- "resources": [
- "adpersia.com"
- ]
- },
- "adPrecision": {
- "properties": [
- "adprecision.net",
- "adprs.net"
- ],
- "resources": [
- "adprecision.net",
- "adprs.net",
- "aprecision.net"
- ]
- },
- "AdPredictive": {
- "properties": [
- "adpredictive.com"
- ],
- "resources": [
- "adpredictive.com"
- ]
- },
- "AdReactor": {
- "properties": [
- "adreactor.com"
- ],
- "resources": [
- "adreactor.com"
- ]
- },
- "AdReady": {
- "properties": [
- "digitalremedy.com"
- ],
- "resources": [
- "adready.com",
- "adreadytractions.com",
- "digitalremedy"
- ]
- },
- "AdRevolution": {
- "properties": [
- "adrevolution.com"
- ],
- "resources": [
- "adrevolution.com"
- ]
- },
- "AdRiver": {
- "properties": [
- "adriver.ru"
- ],
- "resources": [
- "adriver.ru"
- ]
- },
- "adrolays": {
- "properties": [
- "contactimpact.de"
- ],
- "resources": [
- "adrolays.com",
- "adrolays.de",
- "contactimpact.de"
- ]
- },
- "AdRoll": {
- "properties": [
- "adroll.com"
- ],
- "resources": [
- "adroll.com"
- ]
- },
- "adscale": {
- "properties": [
- "stroeer.de"
- ],
- "resources": [
- "adscale.de",
- "stroeer.de"
- ]
- },
- "Adscience": {
- "properties": [
- "adscience.nl"
- ],
- "resources": [
- "adscience.nl"
- ]
- },
- "AdScore": {
- "properties": [
- "adscoremarketing.com"
- ],
- "resources": [
- "adsco.re"
- ]
- },
- "AdServerPub": {
- "properties": [
- "adserverpub.com"
- ],
- "resources": [
- "adserverpub.com"
- ]
- },
- "AdShuffle": {
- "properties": [
- "adshuffle.com"
- ],
- "resources": [
- "adshuffle.com"
- ]
- },
- "AdSide": {
- "properties": [
- "adside.com",
- "doclix.com"
- ],
- "resources": [
- "adside.com",
- "doclix.com"
- ]
- },
- "AdSpeed": {
- "properties": [
- "adspeed.com",
- "adspeed.net"
- ],
- "resources": [
- "adspeed.com",
- "adspeed.net"
- ]
- },
- "Adsperity": {
- "properties": [
- "adsperity.com"
- ],
- "resources": [
- "adsperity.com"
- ]
- },
- "AdSpirit": {
- "properties": [
- "adspirit.com",
- "adspirit.de",
- "adspirit.net"
- ],
- "resources": [
- "adspirit.com",
- "adspirit.de",
- "adspirit.net"
- ]
- },
- "Adsrevenue.net": {
- "properties": [
- "adsrevenue.net"
- ],
- "resources": [
- "adsrevenue.net"
- ]
- },
- "AdStir": {
- "properties": [
- "ad-stir.com"
- ],
- "resources": [
- "ad-stir.com"
- ]
- },
- "AdsTours": {
- "properties": [
- "adstours.com",
- "clickintext.net"
- ],
- "resources": [
- "adstours.com",
- "clickintext.net"
- ]
- },
- "Adsty": {
- "properties": [
- "adsty.com",
- "adx1.com"
- ],
- "resources": [
- "adsty.com",
- "adx1.com"
- ]
- },
- "Adsupply": {
- "properties": [
- "4dsply.com",
- "adsupply.com"
- ],
- "resources": [
- "4dsply.com",
- "adsupply.com"
- ]
- },
- "Adswizz": {
- "properties": [
- "adswizz.com"
- ],
- "resources": [
- "adswizz.com"
- ]
- },
- "ADTECH": {
- "properties": [
- "adtech.com",
- "adtech.de",
- "adtechus.com"
- ],
- "resources": [
- "adtech.com",
- "adtech.de",
- "adtechus.com"
- ]
- },
- "Adtegrity.com": {
- "properties": [
- "adtegrity.com",
- "adtegrity.net"
- ],
- "resources": [
- "adtegrity.com",
- "adtegrity.net"
- ]
- },
- "ADTELLIGENCE": {
- "properties": [
- "adtelligence.de"
- ],
- "resources": [
- "adtelligence.de"
- ]
- },
- "Adthink": {
- "properties": [
- "adthink.com"
- ],
- "resources": [
- "adthink.com",
- "audienceinsights.net"
- ]
- },
- "AdTiger": {
- "properties": [
- "adtiger.de"
- ],
- "resources": [
- "adtiger.de"
- ]
- },
- "AdTruth": {
- "properties": [
- "adtruth.com"
- ],
- "resources": [
- "adtruth.com"
- ]
- },
- "Adult AdWorld": {
- "properties": [
- "adultadworld.com"
- ],
- "resources": [
- "adultadworld.com"
- ]
- },
- "Adultmoda": {
- "properties": [
- "adultmoda.com"
- ],
- "resources": [
- "adultmoda.com"
- ]
- },
- "Adventive": {
- "properties": [
- "adventive.com"
- ],
- "resources": [
- "adventive.com"
- ]
- },
- "Adventori": {
- "properties": [
- "adventori.com"
- ],
- "resources": [
- "adventori.com"
- ]
- },
- "Adverline": {
- "properties": [
- "adnext.fr",
- "adverline.com"
- ],
- "resources": [
- "adnext.fr",
- "adverline.com"
- ]
- },
- "Adversal.com": {
- "properties": [
- "adv-adserver.com",
- "adversal.com"
- ],
- "resources": [
- "adv-adserver.com",
- "adversal.com"
- ]
- },
- "Adverticum": {
- "properties": [
- "adsmart.com",
- "adverticum.com",
- "adverticum.net"
- ],
- "resources": [
- "adsmart.com",
- "adverticum.com",
- "adverticum.net"
- ]
- },
- "Advertise.com": {
- "properties": [
- "advertise.com"
- ],
- "resources": [
- "advertise.com"
- ]
- },
- "AdvertiseSpace": {
- "properties": [
- "advertisespace.com"
- ],
- "resources": [
- "advertisespace.com"
- ]
- },
- "Advert Stream": {
- "properties": [
- "advertstream.com"
- ],
- "resources": [
- "advertstream.com"
- ]
- },
- "Advisor Media": {
- "properties": [
- "advisormedia.cz"
- ],
- "resources": [
- "advisormedia.cz"
- ]
- },
- "Adworx": {
- "properties": [
- "adworx.at",
- "adworx.be",
- "adworx.nl"
- ],
- "resources": [
- "adworx.at",
- "adworx.be",
- "adworx.nl"
- ]
- },
- "AdXpansion": {
- "properties": [
- "adxpansion.com"
- ],
- "resources": [
- "adxpansion.com"
- ]
- },
- "Adxvalue": {
- "properties": [
- "adxvalue.com",
- "adxvalue.de"
- ],
- "resources": [
- "adxvalue.com",
- "adxvalue.de"
- ]
- },
- "adyard": {
- "properties": [
- "adyard.de"
- ],
- "resources": [
- "adyard.de"
- ]
- },
- "AdYield": {
- "properties": [
- "adyield.com"
- ],
- "resources": [
- "adxyield.com",
- "adyield.com"
- ]
- },
- "AdYouLike": {
- "properties": [
- "adyoulike.com"
- ],
- "resources": [
- "adyoulike.com",
- "omnitagjs.com",
- "pulpix.com"
- ]
- },
- "ADZ": {
- "properties": [
- "adzcentral.com"
- ],
- "resources": [
- "adzcentral.com"
- ]
- },
- "Adzerk": {
- "properties": [
- "adzerk.com"
- ],
- "resources": [
- "adzerk.com",
- "adzerk.net"
- ]
- },
- "adzly": {
- "properties": [
- "adzly.com"
- ],
- "resources": [
- "adzly.com"
- ]
- },
- "Aegis Group": {
- "properties": [
- "aemedia.com",
- "bluestreak.com",
- "dentsuaegisnetwork.com"
- ],
- "resources": [
- "aemedia.com",
- "bluestreak.com",
- "dentsuaegisnetwork.com"
- ]
- },
- "AERIFY MEDIA": {
- "properties": [
- "aerifymedia.com",
- "anonymous-media.com"
- ],
- "resources": [
- "aerifymedia.com",
- "anonymous-media.com"
- ]
- },
- "Affectv": {
- "properties": [
- "affectv.co.uk"
- ],
- "resources": [
- "affectv.co.uk"
- ]
- },
- "affilinet": {
- "properties": [
- "affili.net",
- "affilinet-inside.de"
- ],
- "resources": [
- "affili.net",
- "affilinet-inside.de",
- "banner-rotation.com",
- "successfultogether.co.uk"
- ]
- },
- "Affine": {
- "properties": [
- "affine.tv",
- "affinesystems.com"
- ],
- "resources": [
- "affine.tv",
- "affinesystems.com"
- ]
- },
- "Affinity": {
- "properties": [
- "affinity.com"
- ],
- "resources": [
- "affinity.com"
- ]
- },
- "AfterDownload": {
- "properties": [
- "afdads.com",
- "afterdownload.com"
- ],
- "resources": [
- "afdads.com",
- "afterdownload.com"
- ]
- },
- "AIData": {
- "properties": [
- "advombat.ru",
- "aidata.me"
- ],
- "resources": [
- "advombat.ru",
- "aidata.me"
- ]
- },
- "Aim4Media": {
- "properties": [
- "aim4media.com"
- ],
- "resources": [
- "aim4media.com"
- ]
- },
- "Airpush": {
- "properties": [
- "airpush.com"
- ],
- "resources": [
- "airpush.com"
- ]
- },
- "AivaLabs": {
- "properties": [
- "aivalabs.com"
- ],
- "resources": [
- "aivalabs.com"
- ]
- },
- "a.js": {
- "properties": [
- "alflying.date",
- "alflying.win",
- "anybest.site",
- "flightsy.bid",
- "flightsy.win",
- "flightzy.bid",
- "flightzy.date",
- "flightzy.win",
- "zymerget.bid",
- "zymerget.faith"
- ],
- "resources": [
- "alflying.date",
- "alflying.win",
- "anybest.site",
- "flightsy.bid",
- "flightsy.win",
- "flightzy.bid",
- "flightzy.date",
- "flightzy.win",
- "zymerget.bid",
- "zymerget.faith"
- ]
- },
- "AK": {
- "properties": [
- "aggregateknowledge.com",
- "agkn.com"
- ],
- "resources": [
- "aggregateknowledge.com",
- "agkn.com"
- ]
- },
- "Akamai": {
- "properties": [
- "akamai.com"
- ],
- "resources": [
- "abmr.net",
- "akamai.com",
- "edgesuite.net",
- "go-mpulse.net",
- "imiclk.com"
- ]
- },
- "AKQA": {
- "properties": [
- "akqa.com"
- ],
- "resources": [
- "akqa.com",
- "srtk.net"
- ]
- },
- "Albacross": {
- "properties": [
- "albacross.com"
- ],
- "resources": [
- "albacross.com"
- ]
- },
- "AllStarMediaGroup": {
- "properties": [
- "allstarmediagroup.com"
- ],
- "resources": [
- "allstarmediagroup.com"
- ]
- },
- "Aloodo": {
- "properties": [
- "aloodo.com"
- ],
- "resources": [
- "aloodo.com"
- ]
- },
- "AlterGeo": {
- "properties": [
- "altergeo.ru"
- ],
- "resources": [
- "altergeo.ru"
- ]
- },
- "Amadesa": {
- "properties": [
- "amadesa.com"
- ],
- "resources": [
- "amadesa.com"
- ]
- },
- "Amazing Counters": {
- "properties": [
- "amazingcounters.com"
- ],
- "resources": [
- "amazingcounters.com"
- ]
- },
- "Amazon.com": {
- "properties": [
- "6pm.com",
- "abebooks.co.uk",
- "abebooks.com",
- "abebooks.de",
- "abebooks.fr",
- "abebooks.it",
- "acx.com",
- "alexa.com",
- "amazon.ae",
- "amazon.ca",
- "amazon.cn",
- "amazon.co.jp",
- "amazon.co.uk",
- "amazon.com",
- "amazon.com.au",
- "amazon.com.br",
- "amazon.com.mx",
- "amazon.com.sg",
- "amazon.com.tr",
- "amazon.de",
- "amazon.es",
- "amazon.fr",
- "amazon.in",
- "amazon.it",
- "amazon.nl",
- "amazon.sa",
- "amazonaws.com",
- "amazoninspire.com",
- "assoc-amazon.com",
- "audible.co.jp",
- "audible.co.uk",
- "audible.com",
- "audible.de",
- "audible.fr",
- "audible.in",
- "audible.it",
- "bookdepository.com",
- "boxofficemojo.com",
- "brilliancepublishing.com",
- "comixology.com",
- "createspace.com",
- "dpreview.com",
- "dpreview.in",
- "eastdane.com",
- "fabric.com",
- "goodreads.com",
- "iberlibro.com",
- "imdb.com",
- "imdb.de",
- "junglee.com",
- "look.com",
- "pillpack.com",
- "shopbop.com",
- "souq.com",
- "twitch.com",
- "twitch.tv",
- "wholefoodsmarket.com",
- "withoutabox.com",
- "woot.com",
- "yoyo.com",
- "zappos.com",
- "zvab.com"
- ],
- "resources": [
- "alexa.com",
- "alexametrics.com",
- "amazon-adsystem.com",
- "amazon.ca",
- "amazon.co.jp",
- "amazon.co.uk",
- "amazon.com",
- "amazon.de",
- "amazon.es",
- "amazon.fr",
- "amazon.it",
- "amazonaws.com",
- "assoc-amazon.com",
- "cloudfront.net",
- "ssl-images-amazon.com"
- ]
- },
- "Ambient Digital": {
- "properties": [
- "adnetwork.vn",
- "ambientdigital.com.vn"
- ],
- "resources": [
- "adnetwork.vn",
- "ambientdigital.com.vn"
- ]
- },
- "Amobee": {
- "properties": [
- "amobee.com",
- "smartclip.com"
- ],
- "resources": [
- "adconion.com",
- "amgdgt.com",
- "amobee.com",
- "euroclick.com",
- "smartclip.com",
- "turn.com"
- ]
- },
- "Amplitude": {
- "properties": [
- "amplitude.com"
- ],
- "resources": [
- "amplitude.com"
- ]
- },
- "AndBeyond": {
- "properties": [
- "andbeyond.media"
- ],
- "resources": [
- "andbeyond.media"
- ]
- },
- "anormal-media.de": {
- "properties": [
- "anormal-media.de",
- "primawebtools.de"
- ],
- "resources": [
- "anormal-media.de",
- "anormal-tracker.de",
- "primawebtools.de"
- ]
- },
- "Answers.com": {
- "properties": [
- "answers.com",
- "dsply.com"
- ],
- "resources": [
- "dsply.com"
- ]
- },
- "AOL": {
- "properties": [
- "5min.com",
- "adsonar.com",
- "advertising.com",
- "aim.com",
- "aol.com",
- "aolcdn.com",
- "aoltechguru.com",
- "atwola.com",
- "autoblog.com",
- "cambio.com",
- "dailyfinance.com",
- "editions.com",
- "engadget.com",
- "games.com",
- "homesessive.com",
- "huffingtonpost.com",
- "leadback.com",
- "makers.com",
- "mandatory.com",
- "mapquest.com",
- "moviefone.com",
- "noisecreep.com",
- "patch.com",
- "pawnation.com",
- "shortcuts.com",
- "shoutcast.com",
- "spinner.com",
- "stylelist.com",
- "stylemepretty.com",
- "surphace.com",
- "tacoda.net",
- "techcrunch.com",
- "theboombox.com",
- "theboot.com",
- "userplane.com",
- "winamp.com"
- ],
- "resources": [
- "5min.com",
- "adsonar.com",
- "adtechjp.com",
- "advertising.com",
- "aim.com",
- "aol.com",
- "aolcdn.com",
- "aolcloud.net",
- "atwola.com",
- "editions.com",
- "leadback.com",
- "mapquest.com",
- "patch.com",
- "shortcuts.com",
- "shoutcast.com",
- "spinner.com",
- "surphace.com",
- "tacoda.net",
- "userplane.com",
- "vidible.tv",
- "winamp.com"
- ]
- },
- "AppCast": {
- "properties": [
- "appcast.io"
- ],
- "resources": [
- "appcast.io"
- ]
- },
- "Appenda": {
- "properties": [
- "appenda.com"
- ],
- "resources": [
- "appenda.com"
- ]
- },
- "AppFlood": {
- "properties": [
- "appflood.com"
- ],
- "resources": [
- "appflood.com"
- ]
- },
- "Appier": {
- "properties": [
- "appier.com"
- ],
- "resources": [
- "appier.com"
- ]
- },
- "Applifier": {
- "properties": [
- "applifier.com"
- ],
- "resources": [
- "applifier.com"
- ]
- },
- "Applovin": {
- "properties": [
- "applovin.com"
- ],
- "resources": [
- "applovin.com"
- ]
- },
- "AppNexus": {
- "properties": [
- "adlantic.nl",
- "adnxs.com",
- "adrdgt.com",
- "appnexus.com"
- ],
- "resources": [
- "adlantic.nl",
- "adnxs.com",
- "adrdgt.com",
- "appnexus.com"
- ]
- },
- "AppsFlyer": {
- "properties": [
- "appsflyer.com"
- ],
- "resources": [
- "appsflyer.com"
- ]
- },
- "appssavvy": {
- "properties": [
- "appssavvy.com"
- ],
- "resources": [
- "appssavvy.com"
- ]
- },
- "Arkwrights Homebrew": {
- "properties": [
- "whiskyandwines.com"
- ],
- "resources": [
- "arkwrightshomebrew.com",
- "ctasnet.com",
- "whiskyandwines.com"
- ]
- },
- "AT Internet": {
- "properties": [
- "atinternet.com",
- "xiti.com"
- ],
- "resources": [
- "at-o.net",
- "atinternet.com",
- "hit-parade.com",
- "xiti.com"
- ]
- },
- "ATN": {
- "properties": [
- "affiliatetracking.com"
- ],
- "resources": [
- "affiliatetracking.com"
- ]
- },
- "Atoomic.com": {
- "properties": [
- "atoomic.com"
- ],
- "resources": [
- "atoomic.com"
- ]
- },
- "Atrinsic": {
- "properties": [
- "atrinsic.com"
- ],
- "resources": [
- "atrinsic.com"
- ]
- },
- "AT&T": {
- "properties": [
- "att.com",
- "yp.com"
- ],
- "resources": [
- "att.com",
- "yp.com"
- ]
- },
- "Attracta": {
- "properties": [
- "attracta.com"
- ],
- "resources": [
- "attracta.com"
- ]
- },
- "Audience2Media": {
- "properties": [
- "audience2media.com"
- ],
- "resources": [
- "audience2media.com"
- ]
- },
- "Audience Ad Network": {
- "properties": [
- "audienceadnetwork.com"
- ],
- "resources": [
- "audienceadnetwork.com"
- ]
- },
- "AudienceScience": {
- "properties": [
- "audiencescience.com"
- ],
- "resources": [
- "audiencescience.com",
- "revsci.net",
- "targetingmarketplace.com",
- "wunderloop.net"
- ]
- },
- "AuditedMedia": {
- "properties": [
- "auditedmedia.com"
- ],
- "resources": [
- "aamapi.com",
- "aamsitecertifier.com",
- "auditedmedia.com"
- ]
- },
- "Augme": {
- "properties": [
- "hipcricket.com"
- ],
- "resources": [
- "augme.com",
- "hipcricket.com"
- ]
- },
- "Augur": {
- "properties": [
- "augur.io"
- ],
- "resources": [
- "augur.io"
- ]
- },
- "AUTOCENTRE.UA": {
- "properties": [
- "am.ua",
- "autocentre.ua"
- ],
- "resources": [
- "am.ua",
- "autocentre.ua"
- ]
- },
- "Automattic": {
- "properties": [
- "automattic.com",
- "gravatar.com",
- "intensedebate.com",
- "polldaddy.com"
- ],
- "resources": [
- "automattic.com",
- "gravatar.com",
- "intensedebate.com",
- "polldaddy.com",
- "pubmine.com"
- ]
- },
- "Avalanchers": {
- "properties": [
- "avalanchers.com"
- ],
- "resources": [
- "avalanchers.com"
- ]
- },
- "AvantLink": {
- "properties": [
- "avantlink.com",
- "avantmetrics.com"
- ],
- "resources": [
- "avantlink.com",
- "avmws.com"
- ]
- },
- "Avocet": {
- "properties": [
- "avocet.io"
- ],
- "resources": [
- "avocet.io"
- ]
- },
- "Avsads": {
- "properties": [
- "avsads.com"
- ],
- "resources": [
- "avsads.com"
- ]
- },
- "AWeber": {
- "properties": [
- "aweber.com"
- ],
- "resources": [
- "aweber.com"
- ]
- },
- "Awin": {
- "properties": [
- "awin.com"
- ],
- "resources": [
- "awin.com",
- "digitalwindow.com",
- "dwin1.com",
- "perfiliate.com"
- ]
- },
- "Awio": {
- "properties": [
- "awio.com",
- "w3counter.com"
- ],
- "resources": [
- "awio.com",
- "w3counter.com",
- "w3roi.com"
- ]
- },
- "Azet": {
- "properties": [
- "azet.sk",
- "mediaimpact.sk"
- ],
- "resources": [
- "azet.sk",
- "azetklik.sk",
- "mediaimpact.sk",
- "rsz.sk"
- ]
- },
- "BackBeat Media": {
- "properties": [
- "backbeatmedia.com"
- ],
- "resources": [
- "backbeatmedia.com"
- ]
- },
- "Bannerconnect": {
- "properties": [
- "bannerconnect.net"
- ],
- "resources": [
- "bannerconnect.net"
- ]
- },
- "Barilliance": {
- "properties": [
- "barilliance.com"
- ],
- "resources": [
- "barilliance.com"
- ]
- },
- "BaronsNetworks": {
- "properties": [
- "baronsoffers.com"
- ],
- "resources": [
- "baronsoffers.com"
- ]
- },
- "Batanga Network": {
- "properties": [
- "batanga.com",
- "corp.vix.com",
- "vix.com"
- ],
- "resources": [
- "batanga.com",
- "batanganetwork.com",
- "vix.com"
- ]
- },
- "Baynote": {
- "properties": [
- "baynote.com"
- ],
- "resources": [
- "baynote.com",
- "baynote.net"
- ]
- },
- "Bazaarvoice": {
- "properties": [
- "bazaarvoice.com"
- ],
- "resources": [
- "bazaarvoice.com"
- ]
- },
- "BeachFront": {
- "properties": [
- "beachfront.com"
- ],
- "resources": [
- "beachfront.com"
- ]
- },
- "Beanstock Media": {
- "properties": [
- "beanstockmedia.com"
- ],
- "resources": [
- "beanstockmedia.com"
- ]
- },
- "beencounter": {
- "properties": [
- "beencounter.com"
- ],
- "resources": [
- "beencounter.com"
- ]
- },
- "Begun": {
- "properties": [
- "begun.ru"
- ],
- "resources": [
- "begun.ru"
- ]
- },
- "belboon": {
- "properties": [
- "belboon.com"
- ],
- "resources": [
- "adbutler.de",
- "belboon.com"
- ]
- },
- "Belstat": {
- "properties": [
- "belstat.be",
- "belstat.com",
- "belstat.de",
- "belstat.fr",
- "belstat.nl"
- ],
- "resources": [
- "belstat.be",
- "belstat.com",
- "belstat.de",
- "belstat.fr",
- "belstat.nl"
- ]
- },
- "Betgenius": {
- "properties": [
- "betgenius.com",
- "connextra.com"
- ],
- "resources": [
- "betgenius.com",
- "connextra.com"
- ]
- },
- "BetssonPalantir": {
- "properties": [
- "betssonpalantir.com"
- ],
- "resources": [
- "betssonpalantir.com"
- ]
- },
- "BetweenDigital": {
- "properties": [
- "betweendigital.com"
- ],
- "resources": [
- "betweendigital.com"
- ]
- },
- "Bidfluence": {
- "properties": [
- "bidfluence.com"
- ],
- "resources": [
- "bidfluence.com"
- ]
- },
- "Bidr": {
- "properties": [
- "bidr.io"
- ],
- "resources": [
- "bidr.io"
- ]
- },
- "BidSwitch": {
- "properties": [
- "bidswitch.com"
- ],
- "resources": [
- "bidswitch.net",
- "mfadsrvr.com"
- ]
- },
- "Bidtellect": {
- "properties": [
- "bidtellect.com",
- "bttrack.com"
- ],
- "resources": [
- "bidtellect.com",
- "bttrack.com"
- ]
- },
- "BidVertiser": {
- "properties": [
- "bidvertiser.com"
- ],
- "resources": [
- "bidvertiser.com"
- ]
- },
- "BigClick": {
- "properties": [
- "bigclick.me"
- ],
- "resources": [
- "bgclck.me",
- "xcvgdf.party"
- ]
- },
- "BigDoor": {
- "properties": [
- "bigdoor.com"
- ],
- "resources": [
- "bigdoor.com",
- "onetruefan.com"
- ]
- },
- "bigmirnet": {
- "properties": [
- "bigmir.net"
- ],
- "resources": [
- "bigmir.net"
- ]
- },
- "BinLayer": {
- "properties": [
- "binlayer.com"
- ],
- "resources": [
- "binlayer.com"
- ]
- },
- "Bitcoin Plus": {
- "properties": [
- "bitcoinplus.com"
- ],
- "resources": [
- "bitcoinplus.com"
- ]
- },
- "BitMedia": {
- "properties": [
- "bitmedia.io"
- ],
- "resources": [
- "bitmedia.io"
- ]
- },
- "BittAds": {
- "properties": [
- "bittads.com"
- ],
- "resources": [
- "bittads.com"
- ]
- },
- "Bizo": {
- "properties": [
- "bizo.com",
- "bizographics.com"
- ],
- "resources": [
- "bizo.com",
- "bizographics.com"
- ]
- },
- "Black Label Ads": {
- "properties": [
- "blacklabelads.com"
- ],
- "resources": [
- "blacklabelads.com"
- ]
- },
- "BlogCatalog": {
- "properties": [
- "blogcatalog.com"
- ],
- "resources": [
- "blogcatalog.com"
- ]
- },
- "BlogCounter.com": {
- "properties": [
- "blogcounter.de"
- ],
- "resources": [
- "blogcounter.de"
- ]
- },
- "BlogFrog": {
- "properties": [
- "theblogfrog.com"
- ],
- "resources": [
- "theblogfrog.com"
- ]
- },
- "BlogHer": {
- "properties": [
- "blogher.com",
- "blogherads.com"
- ],
- "resources": [
- "blogher.com",
- "blogherads.com"
- ]
- },
- "BlogRollr": {
- "properties": [
- "blogrollr.com"
- ],
- "resources": [
- "blogrollr.com"
- ]
- },
- "BLOOM Digital Platforms": {
- "properties": [
- "adgear.com",
- "bloom-hq.com"
- ],
- "resources": [
- "adgear.com",
- "adgrx.com",
- "bloom-hq.com"
- ]
- },
- "BloomReach": {
- "properties": [
- "bloomreach.com",
- "brcdn.com"
- ],
- "resources": [
- "bloomreach.com",
- "brcdn.com",
- "brsrvr.com"
- ]
- },
- "BlueCava": {
- "properties": [
- "bluecava.com"
- ],
- "resources": [
- "bluecava.com"
- ]
- },
- "BlueKai": {
- "properties": [
- "bluekai.com",
- "tracksimple.com"
- ],
- "resources": [
- "bkrtx.com",
- "bluekai.com",
- "tracksimple.com"
- ]
- },
- "Bluemetrix": {
- "properties": [
- "bluemetrix.com",
- "bmmetrix.com"
- ],
- "resources": [
- "bluemetrix.com",
- "bmmetrix.com"
- ]
- },
- "Blu Trumpet": {
- "properties": [
- "blutrumpet.com"
- ],
- "resources": [
- "blutrumpet.com"
- ]
- },
- "Bombora": {
- "properties": [
- "bombora.com"
- ],
- "resources": [
- "ml314.com"
- ]
- },
- "Boo-Box": {
- "properties": [
- "boo-box.com"
- ],
- "resources": [
- "boo-box.com"
- ]
- },
- "BoostBox": {
- "properties": [
- "boostbox.com.br"
- ],
- "resources": [
- "boostbox.com.br"
- ]
- },
- "Bouncex": {
- "properties": [
- "bouncex.com"
- ],
- "resources": [
- "bounceexchange.com",
- "bouncex.com",
- "bouncex.net"
- ]
- },
- "Brainient": {
- "properties": [
- "brainient.com"
- ],
- "resources": [
- "brainient.com"
- ]
- },
- "Branch": {
- "properties": [
- "branch.io"
- ],
- "resources": [
- "branch.io"
- ]
- },
- "Brand Affinity Technologies": {
- "properties": [
- "brandaffinity.net"
- ],
- "resources": [
- "brandaffinity.net"
- ]
- },
- "Brandcrumb": {
- "properties": [
- "brandcrumb.com"
- ],
- "resources": [
- "brandcrumb.com"
- ]
- },
- "Brand.net": {
- "properties": [
- "brand.net"
- ],
- "resources": [
- "brand.net"
- ]
- },
- "Brandscreen": {
- "properties": [
- "brandscreen.com",
- "rtbidder.net"
- ],
- "resources": [
- "brandscreen.com",
- "rtbidder.net"
- ]
- },
- "Branica": {
- "properties": [
- "branica.com"
- ],
- "resources": [
- "branica.com"
- ]
- },
- "BreakTime": {
- "properties": [
- "breaktime.com.tw"
- ],
- "resources": [
- "breaktime.com.tw"
- ]
- },
- "Brightcove": {
- "properties": [
- "brightcove.com"
- ],
- "resources": [
- "brightcove.com"
- ]
- },
- "BrightEdge": {
- "properties": [
- "brightedge.com"
- ],
- "resources": [
- "b0e8.com",
- "brightedge.com"
- ]
- },
- "BrightRoll": {
- "properties": [
- "brightroll.com"
- ],
- "resources": [
- "brightroll.com",
- "btrll.com"
- ]
- },
- "BrightTag": {
- "properties": [
- "brighttag.com",
- "btstatic.com",
- "thebrighttag.com"
- ],
- "resources": [
- "brighttag.com",
- "btstatic.com",
- "thebrighttag.com"
- ]
- },
- "Brilig": {
- "properties": [
- "brilig.com"
- ],
- "resources": [
- "brilig.com"
- ]
- },
- "Browser-Update.org": {
- "properties": [
- "browser-update.org"
- ],
- "resources": [
- "browser-update.org"
- ]
- },
- "BTBuckets": {
- "properties": [
- "btbuckets.com"
- ],
- "resources": [
- "btbuckets.com"
- ]
- },
- "Bubblestat": {
- "properties": [
- "bubblestat.com"
- ],
- "resources": [
- "bubblestat.com"
- ]
- },
- "BuckSense": {
- "properties": [
- "bucksense.com"
- ],
- "resources": [
- "bucksense.com"
- ]
- },
- "Buffer": {
- "properties": [
- "bufferapp.com"
- ],
- "resources": [
- "bufferapp.com"
- ]
- },
- "Bunchball": {
- "properties": [
- "bunchball.com"
- ],
- "resources": [
- "bunchball.com"
- ]
- },
- "Burstly": {
- "properties": [
- "burstly.com"
- ],
- "resources": [
- "burstly.com"
- ]
- },
- "Burst Media": {
- "properties": [
- "burstbeacon.com",
- "burstdirectads.com",
- "burstmedia.com",
- "burstnet.com",
- "giantrealm.com"
- ],
- "resources": [
- "burstbeacon.com",
- "burstdirectads.com",
- "burstmedia.com",
- "burstnet.com",
- "giantrealm.com"
- ]
- },
- "BusinessOnline": {
- "properties": [
- "businessol.com"
- ],
- "resources": [
- "businessol.com"
- ]
- },
- "Button": {
- "properties": [
- "usebutton.com"
- ],
- "resources": [
- "usebutton.com"
- ]
- },
- "buySAFE": {
- "properties": [
- "buysafe.com"
- ],
- "resources": [
- "buysafe.com"
- ]
- },
- "BuySellAds": {
- "properties": [
- "beaconads.com",
- "buysellads.com"
- ],
- "resources": [
- "beaconads.com",
- "buysellads.com"
- ]
- },
- "Buysight": {
- "properties": [
- "buysight.com",
- "permuto.com",
- "pulsemgr.com"
- ],
- "resources": [
- "buysight.com",
- "permuto.com",
- "pulsemgr.com"
- ]
- },
- "BuzzFeed": {
- "properties": [
- "buzzfeed.com"
- ],
- "resources": [
- "buzzfed.com",
- "buzzfeed.com"
- ]
- },
- "BuzzParadise": {
- "properties": [
- "buzzparadise.com"
- ],
- "resources": [
- "buzzparadise.com"
- ]
- },
- "BV! MEDIA": {
- "properties": [
- "branchez-vous.com",
- "bvmedia.ca"
- ],
- "resources": [
- "branchez-vous.com",
- "bvmedia.ca",
- "networldmedia.com",
- "networldmedia.net"
- ]
- },
- "c1exchange": {
- "properties": [
- "c1exchange.com"
- ],
- "resources": [
- "c1exchange.com"
- ]
- },
- "C3 Metrics": {
- "properties": [
- "attributionmodel.com",
- "c3metrics.com",
- "c3tag.com"
- ],
- "resources": [
- "attributionmodel.com",
- "c3metrics.com",
- "c3tag.com"
- ]
- },
- "Cadreon": {
- "properties": [
- "cadreon.com"
- ],
- "resources": [
- "cadreon.com"
- ]
- },
- "CallSource": {
- "properties": [
- "callsource.com"
- ],
- "resources": [
- "leadtrackingdata.com"
- ]
- },
- "CampaignGrid": {
- "properties": [
- "campaigngrid.com"
- ],
- "resources": [
- "campaigngrid.com"
- ]
- },
- "CAPITALDATA": {
- "properties": [
- "capitaldata.fr"
- ],
- "resources": [
- "capitaldata.fr"
- ]
- },
- "Carambola": {
- "properties": [
- "carambola.com"
- ],
- "resources": [
- "carambo.la"
- ]
- },
- "Caraytech": {
- "properties": [
- "caraytech.com.ar",
- "e-planning.net",
- "www.caraytech.com.ar"
- ],
- "resources": [
- "caraytech.com.ar",
- "e-planning.net",
- "www.caraytech.com.ar"
- ]
- },
- "Cardlytics": {
- "properties": [
- "cardlytics.com"
- ],
- "resources": [
- "cardlytics.com"
- ]
- },
- "Cart.ro": {
- "properties": [
- "cart.ro"
- ],
- "resources": [
- "cart.ro",
- "statistics.ro"
- ]
- },
- "CartsGuru": {
- "properties": [
- "carts.guru"
- ],
- "resources": [
- "carts.guru"
- ]
- },
- "Casale Media": {
- "properties": [
- "casalemedia.com",
- "medianet.com"
- ],
- "resources": [
- "casalemedia.com",
- "medianet.com"
- ]
- },
- "CashBeet": {
- "properties": [
- "cashbeet.com"
- ],
- "resources": [
- "cashbeet.com",
- "serv1swork.com"
- ]
- },
- "Causes": {
- "properties": [
- "causes.com"
- ],
- "resources": [
- "causes.com"
- ]
- },
- "Cbox": {
- "properties": [
- "cbox.ws"
- ],
- "resources": [
- "cbox.ws"
- ]
- },
- "CBproADS": {
- "properties": [
- "cbproads.com"
- ],
- "resources": [
- "cbproads.com"
- ]
- },
- "CBS Interactive": {
- "properties": [
- "cbsinteractive.com",
- "com.com"
- ],
- "resources": [
- "cbsinteractive.com",
- "com.com"
- ]
- },
- "Cedato": {
- "properties": [
- "cedato.com"
- ],
- "resources": [
- "cedato.com"
- ]
- },
- "Cedexis": {
- "properties": [
- "cedexis.com"
- ],
- "resources": [
- "cedexis.com",
- "cedexis.net"
- ]
- },
- "Certona": {
- "properties": [
- "certona.com",
- "res-x.com"
- ],
- "resources": [
- "certona.com",
- "res-x.com"
- ]
- },
- "Chango": {
- "properties": [
- "chango.ca",
- "chango.com"
- ],
- "resources": [
- "chango.ca",
- "chango.com"
- ]
- },
- "ChannelAdvisor": {
- "properties": [
- "channeladvisor.com",
- "searchmarketing.com"
- ],
- "resources": [
- "channeladvisor.com",
- "searchmarketing.com"
- ]
- },
- "Channel Intelligence": {
- "properties": [
- "channelintelligence.com"
- ],
- "resources": [
- "channelintelligence.com"
- ]
- },
- "Chartbeat": {
- "properties": [
- "chartbeat.com",
- "chartbeat.net"
- ],
- "resources": [
- "chartbeat.com",
- "chartbeat.net"
- ]
- },
- "Chartboost": {
- "properties": [
- "chartboost.com"
- ],
- "resources": [
- "chartboost.com"
- ]
- },
- "CheckM8": {
- "properties": [
- "checkm8.com"
- ],
- "resources": [
- "checkm8.com"
- ]
- },
- "Chitika": {
- "properties": [
- "chitika.com"
- ],
- "resources": [
- "chitika.com",
- "chitika.net"
- ]
- },
- "ChoiceStream": {
- "properties": [
- "choicestream.com"
- ],
- "resources": [
- "choicestream.com"
- ]
- },
- "ClearLink": {
- "properties": [
- "clearlink.com"
- ],
- "resources": [
- "clearlink.com"
- ]
- },
- "ClearSaleing": {
- "properties": [
- "clearsaleing.com"
- ],
- "resources": [
- "clearsaleing.com",
- "csdata1.com",
- "csdata2.com",
- "csdata3.com"
- ]
- },
- "Clearsearch Media": {
- "properties": [
- "pathinteractive.com"
- ],
- "resources": [
- "clearsearchmedia.com",
- "csm-secure.com",
- "pathinteractive.com"
- ]
- },
- "ClearSight Interactive": {
- "properties": [
- "clearsightinteractive.com",
- "csi-tracking.com"
- ],
- "resources": [
- "clearsightinteractive.com",
- "csi-tracking.com"
- ]
- },
- "ClickAider": {
- "properties": [
- "clickaider.com"
- ],
- "resources": [
- "clickaider.com"
- ]
- },
- "Clickayab": {
- "properties": [
- "clickyab.com"
- ],
- "resources": [
- "clickyab.com"
- ]
- },
- "Clickbooth": {
- "properties": [
- "clickbooth.com"
- ],
- "resources": [
- "adtoll.com",
- "clickbooth.com"
- ]
- },
- "Clickdensity": {
- "properties": [
- "clickdensity.com"
- ],
- "resources": [
- "clickdensity.com"
- ]
- },
- "ClickDimensions": {
- "properties": [
- "clickdimensions.com"
- ],
- "resources": [
- "clickdimensions.com"
- ]
- },
- "ClickDistrict": {
- "properties": [
- "clickdistrict.com",
- "creative-serving.com"
- ],
- "resources": [
- "clickdistrict.com",
- "creative-serving.com"
- ]
- },
- "ClickFrog": {
- "properties": [
- "clickfrog.ru"
- ],
- "resources": [
- "bashirian.biz",
- "buckridge.link",
- "clickfrog.ru",
- "franecki.net",
- "quitzon.net",
- "reichelcormier.bid",
- "wisokykulas.bid"
- ]
- },
- "ClickFuel": {
- "properties": [
- "clickfuel.com",
- "myconversionlab.com"
- ],
- "resources": [
- "clickfuel.com",
- "conversiondashboard.com",
- "myconversionlab.com"
- ]
- },
- "ClickGuard": {
- "properties": [
- "clickguard.com"
- ],
- "resources": [
- "clickguard.com"
- ]
- },
- "ClickInc": {
- "properties": [
- "clickinc.com"
- ],
- "resources": [
- "clickinc.com"
- ]
- },
- "Clicksor": {
- "properties": [
- "clicksor.com",
- "clicksor.net"
- ],
- "resources": [
- "clicksor.com",
- "clicksor.net"
- ]
- },
- "ClickTale": {
- "properties": [
- "clicktale.com"
- ],
- "resources": [
- "clicktale.com",
- "clicktale.net",
- "pantherssl.com"
- ]
- },
- "Clickwinks": {
- "properties": [
- "clickwinks.com"
- ],
- "resources": [
- "clickwinks.com"
- ]
- },
- "ClicManager": {
- "properties": [
- "clicmanager.fr"
- ],
- "resources": [
- "clicmanager.fr"
- ]
- },
- "ClipSyndicate": {
- "properties": [
- "clipsyndicate.com"
- ],
- "resources": [
- "clipsyndicate.com"
- ]
- },
- "ClixMetrix": {
- "properties": [
- "clixmetrix.com"
- ],
- "resources": [
- "clixmetrix.com"
- ]
- },
- "Clixpy": {
- "properties": [
- "clixpy.com"
- ],
- "resources": [
- "clixpy.com"
- ]
- },
- "Clixtell": {
- "properties": [
- "clixtell.com"
- ],
- "resources": [
- "clixtell.com"
- ]
- },
- "Clove Network": {
- "properties": [
- "clovenetwork.com"
- ],
- "resources": [
- "clovenetwork.com"
- ]
- },
- "ClustrMaps": {
- "properties": [
- "clustrmaps.com"
- ],
- "resources": [
- "clustrmaps.com"
- ]
- },
- "CNZZ": {
- "properties": [
- "cnzz.com"
- ],
- "resources": [
- "cnzz.com"
- ]
- },
- "Cognitive Match": {
- "properties": [
- "cmads.com.tw",
- "cmadsasia.com",
- "cmadseu.com",
- "cmmeglobal.com",
- "cognitivematch.com"
- ],
- "resources": [
- "cmads.com.tw",
- "cmadsasia.com",
- "cmadseu.com",
- "cmmeglobal.com",
- "cognitivematch.com"
- ]
- },
- "CoinHive": {
- "properties": [
- "authedmine.com",
- "coinhive.com"
- ],
- "resources": [
- "ad-miner.com",
- "authedmine.com",
- "bmst.pw",
- "cnhv.co",
- "coin-hive.com",
- "coinhive.com",
- "wsservices.org"
- ]
- },
- "CoinPot": {
- "properties": [
- "coinpot.co"
- ],
- "resources": [
- "coinpot.co"
- ]
- },
- "Collarity": {
- "properties": [
- "collarity.com"
- ],
- "resources": [
- "collarity.com"
- ]
- },
- "Collective": {
- "properties": [
- "collective.com"
- ],
- "resources": [
- "collective-media.net",
- "collective.com",
- "oggifinogi.com",
- "tumri.com",
- "tumri.net",
- "yt1187.net"
- ]
- },
- "Commission Junction": {
- "properties": [
- "cj.com"
- ],
- "resources": [
- "apmebf.com",
- "awltovhc.com",
- "cj.com",
- "ftjcfx.com",
- "kcdwa.com",
- "qksz.com",
- "qksz.net",
- "tqlkg.com",
- "yceml.net"
- ]
- },
- "Communicator Corp": {
- "properties": [
- "communicatorcorp.com"
- ],
- "resources": [
- "communicatorcorp.com"
- ]
- },
- "Compass Labs": {
- "properties": [
- "compasslabs.com"
- ],
- "resources": [
- "compasslabs.com"
- ]
- },
- "Complex Media": {
- "properties": [
- "collider.com",
- "complex.com",
- "complexmedianetwork.com",
- "firstwefeast.com",
- "pigeonsandplanes.com",
- "solecollector.com",
- "theridechannel.com"
- ],
- "resources": [
- "complex.com",
- "complexmedianetwork.com"
- ]
- },
- "Compuware": {
- "properties": [
- "axf8.net",
- "compuware.com",
- "dynatrace.com"
- ],
- "resources": [
- "axf8.net",
- "compuware.com",
- "dynatrace.com",
- "gomez.com"
- ]
- },
- "comScore": {
- "properties": [
- "adxpose.com",
- "comscore.com",
- "scorecardresearch.com",
- "sitestat.com",
- "voicefive.com"
- ],
- "resources": [
- "adxpose.com",
- "certifica.com",
- "comscore.com",
- "mdotlabs.com",
- "proxilinks.com",
- "proximic.com",
- "proximic.net",
- "scorecardresearch.com",
- "sitestat.com",
- "voicefive.com"
- ]
- },
- "Conduit": {
- "properties": [
- "conduit-banners.com",
- "conduit.com"
- ],
- "resources": [
- "conduit-banners.com",
- "conduit-services.com",
- "conduit.com",
- "wibiya.com"
- ]
- },
- "Congoo": {
- "properties": [
- "congoo.com"
- ],
- "resources": [
- "congoo.com"
- ]
- },
- "Connatix.com": {
- "properties": [
- "connatix.com"
- ],
- "resources": [
- "connatix.com"
- ]
- },
- "Connexity": {
- "properties": [
- "connexity.com",
- "pricegrabber.com"
- ],
- "resources": [
- "connexity.com",
- "connexity.net",
- "pricegrabber.com"
- ]
- },
- "Consilium Media": {
- "properties": [
- "consiliummedia.com"
- ],
- "resources": [
- "consiliummedia.com"
- ]
- },
- "Consumable": {
- "properties": [
- "consumable.com"
- ],
- "resources": [
- "consumable.com"
- ]
- },
- "Contact At Once!": {
- "properties": [
- "contactatonce.com"
- ],
- "resources": [
- "contactatonce.com"
- ]
- },
- "CONTAXE": {
- "properties": [
- "contaxe.com"
- ],
- "resources": [
- "contaxe.com"
- ]
- },
- "ContentABC": {
- "properties": [
- "contentabc.com"
- ],
- "resources": [
- "contentabc.com"
- ]
- },
- "CONTEXTin": {
- "properties": [
- "admailtiser.com",
- "contextin.com"
- ],
- "resources": [
- "admailtiser.com",
- "contextin.com"
- ]
- },
- "ContextuAds": {
- "properties": [
- "agencytradingdesk.net",
- "contextuads.com"
- ],
- "resources": [
- "agencytradingdesk.net",
- "contextuads.com"
- ]
- },
- "CONTEXTWEB": {
- "properties": [
- "contextweb.com"
- ],
- "resources": [
- "contextweb.com"
- ]
- },
- "ConvergeDirect": {
- "properties": [
- "convergedirect.com",
- "convergetrack.com"
- ],
- "resources": [
- "convergedirect.com",
- "convergetrack.com"
- ]
- },
- "ConversantMedia": {
- "properties": [
- "conversantmedia.com"
- ],
- "resources": [
- "adserver.com",
- "conversantmedia.com",
- "dotomi.com",
- "dtmpub.com",
- "emjcd.com",
- "fastclick.com",
- "fastclick.net",
- "greystripe.com",
- "lduhtrp.net",
- "mediaplex.com",
- "valueclick.com",
- "valueclick.net",
- "valueclickmedia.com"
- ]
- },
- "ConversionRuler": {
- "properties": [
- "conversionruler.com"
- ],
- "resources": [
- "conversionruler.com"
- ]
- },
- "Conversive": {
- "properties": [
- "conversive.nl"
- ],
- "resources": [
- "conversive.nl"
- ]
- },
- "Convert Insights": {
- "properties": [
- "convert.com",
- "reedge.com"
- ],
- "resources": [
- "convert.com",
- "reedge.com"
- ]
- },
- "Convertro": {
- "properties": [
- "convertro.com"
- ],
- "resources": [
- "convertro.com"
- ]
- },
- "Conviva": {
- "properties": [
- "conviva.com"
- ],
- "resources": [
- "conviva.com"
- ]
- },
- "CoreMotives": {
- "properties": [
- "coremotives.com"
- ],
- "resources": [
- "coremotives.com"
- ]
- },
- "Cox Digital Solutions": {
- "properties": [
- "adify.com",
- "coxdigitalsolutions.com",
- "novomotus.com"
- ],
- "resources": [
- "adify.com",
- "afy11.net",
- "coxdigitalsolutions.com",
- "novomotus.com"
- ]
- },
- "CPMStar": {
- "properties": [
- "cpmstar.com"
- ],
- "resources": [
- "cpmstar.com"
- ]
- },
- "CPX Interactive": {
- "properties": [
- "cpxadroit.com"
- ],
- "resources": [
- "adreadypixels.com",
- "cpxadroit.com",
- "cpxinteractive.com"
- ]
- },
- "Crazy Egg": {
- "properties": [
- "cetrk.com",
- "crazyegg.com"
- ],
- "resources": [
- "cetrk.com",
- "crazyegg.com"
- ]
- },
- "Creafi": {
- "properties": [
- "creafi.com"
- ],
- "resources": [
- "creafi.com"
- ]
- },
- "Crimtan": {
- "properties": [
- "crimtan.com"
- ],
- "resources": [
- "crimtan.com"
- ]
- },
- "Crisp Media": {
- "properties": [
- "crispmedia.com"
- ],
- "resources": [
- "crispmedia.com"
- ]
- },
- "Criteo": {
- "properties": [
- "criteo.com",
- "criteo.net"
- ],
- "resources": [
- "criteo.com",
- "criteo.net",
- "hlserve.com",
- "hooklogic.com",
- "storetail.io"
- ]
- },
- "Cross Pixel": {
- "properties": [
- "crosspixel.net"
- ],
- "resources": [
- "crosspixel.net",
- "crosspixelmedia.com",
- "crsspxl.com"
- ]
- },
- "Crowd Science": {
- "properties": [
- "crowdscience.com"
- ],
- "resources": [
- "crowdscience.com"
- ]
- },
- "CryptoLoot": {
- "properties": [
- "crypto-loot.com"
- ],
- "resources": [
- "cryptaloot.pro",
- "crypto-loot.com",
- "cryptolootminer.com",
- "flashx.pw",
- "gitgrub.pro",
- "reauthenticator.com",
- "statdynamic.com",
- "webmine.pro"
- ]
- },
- "CryptoWebMiner": {
- "properties": [
- "crypto-webminer.com"
- ],
- "resources": [
- "bitcoin-pay.eu",
- "crypto-webminer.com",
- "ethpocket.de",
- "ethtrader.de"
- ]
- },
- "cXense": {
- "properties": [
- "cxense.com"
- ],
- "resources": [
- "cxense.com",
- "emediate.biz",
- "emediate.com",
- "emediate.dk",
- "emediate.eu"
- ]
- },
- "Cya2": {
- "properties": [
- "cya2.net"
- ],
- "resources": [
- "cya2.net"
- ]
- },
- "Cyberplex": {
- "properties": [
- "cyberplex.com"
- ],
- "resources": [
- "cyberplex.com"
- ]
- },
- "Dada": {
- "properties": [
- "dada.eu",
- "dada.pro",
- "simply.com"
- ],
- "resources": [
- "dada.eu",
- "dada.pro",
- "simply.com"
- ]
- },
- "DailyMe": {
- "properties": [
- "dailyme.com",
- "newstogram.com"
- ],
- "resources": [
- "dailyme.com",
- "newstogram.com"
- ]
- },
- "Dataium": {
- "properties": [
- "collserve.com",
- "ihs.com"
- ],
- "resources": [
- "collserve.com",
- "dataium.com",
- "ihs.com"
- ]
- },
- "Datalogix": {
- "properties": [
- "datalogix.com",
- "nexac.com"
- ],
- "resources": [
- "datalogix.com",
- "nexac.com",
- "nextaction.net"
- ]
- },
- "DataSift": {
- "properties": [
- "datasift.com",
- "tweetmeme.com"
- ],
- "resources": [
- "datasift.com",
- "tweetmeme.com"
- ]
- },
- "DataXu": {
- "properties": [
- "dataxu.com",
- "mexad.com",
- "w55c.net"
- ],
- "resources": [
- "dataxu.com",
- "dataxu.net",
- "mexad.com",
- "w55c.net"
- ]
- },
- "Datonics": {
- "properties": [
- "datonics.com"
- ],
- "resources": [
- "datonics.com",
- "pro-market.net"
- ]
- },
- "Datran Media": {
- "properties": [
- "datranmedia.com",
- "displaymarketplace.com"
- ],
- "resources": [
- "datranmedia.com",
- "displaymarketplace.com"
- ]
- },
- "Datvantage": {
- "properties": [
- "datvantage.com"
- ],
- "resources": [
- "datvantage.com"
- ]
- },
- "DC Storm": {
- "properties": [
- "dc-storm.com",
- "stormiq.com"
- ],
- "resources": [
- "dc-storm.com",
- "stormiq.com"
- ]
- },
- "Dedicated Media": {
- "properties": [
- "dedicatedmedia.com",
- "dedicatednetworks.com"
- ],
- "resources": [
- "dedicatedmedia.com",
- "dedicatednetworks.com"
- ]
- },
- "Deep Intent": {
- "properties": [
- "deepintent.com"
- ],
- "resources": [
- "deepintent.com"
- ]
- },
- "Delivr": {
- "properties": [
- "delivr.com"
- ],
- "resources": [
- "delivr.com",
- "percentmobile.com"
- ]
- },
- "Delta Projects": {
- "properties": [
- "deltaprojects.com"
- ],
- "resources": [
- "adaction.se",
- "de17a.com",
- "deltaprojects.com",
- "deltaprojects.se"
- ]
- },
- "Demandbase": {
- "properties": [
- "demandbase.com"
- ],
- "resources": [
- "company-target.com",
- "demandbase.com"
- ]
- },
- "Demand Media": {
- "properties": [
- "leafgroup.com"
- ],
- "resources": [
- "demandmedia.com",
- "indieclick.com"
- ]
- },
- "Deutsche Post DHL": {
- "properties": [
- "dpdhl.com"
- ],
- "resources": [
- "adcloud.com",
- "adcloud.net",
- "dp-dhl.com",
- "dpdhl.com"
- ]
- },
- "Developer Media": {
- "properties": [
- "developermedia.com"
- ],
- "resources": [
- "developermedia.com",
- "lqcdn.com"
- ]
- },
- "DG": {
- "properties": [
- "dgit.com",
- "sizmek.com"
- ],
- "resources": [
- "dgit.com",
- "eyeblaster.com",
- "eyewonder.com",
- "mdadx.com",
- "serving-sys.com",
- "unicast.com"
- ]
- },
- "dianomi": {
- "properties": [
- "dianomi.com"
- ],
- "resources": [
- "dianomi.com"
- ]
- },
- "Didit": {
- "properties": [
- "didit.com"
- ],
- "resources": [
- "did-it.com",
- "didit.com"
- ]
- },
- "Digg": {
- "properties": [
- "digg.com"
- ],
- "resources": [
- "digg.com"
- ]
- },
- "DigitalAdConsortium": {
- "properties": [
- "dac.co.jp"
- ],
- "resources": [
- "impact-ad.jp"
- ]
- },
- "Digital River": {
- "properties": [
- "digitalriver.com",
- "keywordmax.com",
- "netflame.cc"
- ],
- "resources": [
- "digitalriver.com",
- "keywordmax.com",
- "netflame.cc"
- ]
- },
- "Digital Target": {
- "properties": [
- "digitaltarget.ru"
- ],
- "resources": [
- "digitaltarget.ru"
- ]
- },
- "Digitize": {
- "properties": [
- "digitize.ie"
- ],
- "resources": [
- "digitize.ie"
- ]
- },
- "DirectAdvert": {
- "properties": [
- "directadvert.ru"
- ],
- "resources": [
- "directadvert.ru"
- ]
- },
- "DirectCORP": {
- "properties": [
- "directcorp.de",
- "ipcounter.de"
- ],
- "resources": [
- "directcorp.de",
- "ipcounter.de"
- ]
- },
- "Direct Response Group": {
- "properties": [
- "directresponsegroup.com"
- ],
- "resources": [
- "directresponsegroup.com",
- "ppctracking.net"
- ]
- },
- "Directtrack": {
- "properties": [
- "directtrack.com"
- ],
- "resources": [
- "directtrack.com"
- ]
- },
- "Disqus": {
- "properties": [
- "disqus.com",
- "disqusads.com"
- ],
- "resources": [
- "disqus.com",
- "disqusads.com"
- ]
- },
- "DistilNetworks": {
- "properties": [
- "distilnetworks.com"
- ],
- "resources": [
- "distilnetworks.com",
- "distiltag.com"
- ]
- },
- "DistrictM": {
- "properties": [
- "districtm.net"
- ],
- "resources": [
- "districtm.io"
- ]
- },
- "dmpxs": {
- "properties": [
- "dmpxs.com"
- ],
- "resources": [
- "dmpxs.com"
- ]
- },
- "DoublePimp": {
- "properties": [
- "doublepimp.com"
- ],
- "resources": [
- "doublepimp.com"
- ]
- },
- "DoublePositive": {
- "properties": [
- "doublepositive.com"
- ],
- "resources": [
- "bid-tag.com",
- "doublepositive.com"
- ]
- },
- "DoubleVerify": {
- "properties": [
- "doubleverify.com"
- ],
- "resources": [
- "doubleverify.com"
- ]
- },
- "Drawbridge": {
- "properties": [
- "drawbridge.com"
- ],
- "resources": [
- "adsymptotic.com",
- "drawbrid.ge",
- "drawbridge.com"
- ]
- },
- "DS-IQ": {
- "properties": [
- "ds-iq.com"
- ],
- "resources": [
- "ds-iq.com"
- ]
- },
- "DSNR Group": {
- "properties": [
- "dsnrgroup.com",
- "dsnrmg.com",
- "traffiliate.com",
- "z5x.net"
- ],
- "resources": [
- "dsnrgroup.com",
- "dsnrmg.com",
- "traffiliate.com",
- "z5x.com",
- "z5x.net"
- ]
- },
- "dwstat.com": {
- "properties": [
- "dwstat.cn"
- ],
- "resources": [
- "dwstat.cn"
- ]
- },
- "DynAdmic": {
- "properties": [
- "dynadmic.com"
- ],
- "resources": [
- "dynadmic.com",
- "dyntrk.com"
- ]
- },
- "DynamicOxygen": {
- "properties": [
- "dynamicoxygen.com",
- "exitjunction.com"
- ],
- "resources": [
- "dynamicoxygen.com",
- "exitjunction.com"
- ]
- },
- "DynamicYield": {
- "properties": [
- "dynamicyield.com"
- ],
- "resources": [
- "dynamicyield.com"
- ]
- },
- "Earnify": {
- "properties": [
- "earnify.com"
- ],
- "resources": [
- "earnify.com"
- ]
- },
- "eBay": {
- "properties": [
- "ebay.at",
- "ebay.ba",
- "ebay.be",
- "ebay.ca",
- "ebay.ch",
- "ebay.cn",
- "ebay.co.jp",
- "ebay.co.kr",
- "ebay.co.uk",
- "ebay.com",
- "ebay.com.au",
- "ebay.com.hk",
- "ebay.com.my",
- "ebay.com.ph",
- "ebay.com.sg",
- "ebay.com.tw",
- "ebay.de",
- "ebay.es",
- "ebay.fr",
- "ebay.ie",
- "ebay.in",
- "ebay.it",
- "ebay.nl",
- "ebay.pl"
- ],
- "resources": [
- "ebay.com"
- ]
- },
- "Echo": {
- "properties": [
- "aboutecho.com",
- "haloscan.com",
- "js-kit.com"
- ],
- "resources": [
- "aboutecho.com",
- "haloscan.com",
- "js-kit.com"
- ]
- },
- "ECSAnalytics": {
- "properties": [
- "ecsanalytics.com",
- "theecsinc.com"
- ],
- "resources": [
- "ecsanalytics.com"
- ]
- },
- "EFF": {
- "properties": [
- "do-not-tracker.org",
- "eff.org",
- "eviltracker.net",
- "trackersimulator.org"
- ],
- "resources": [
- "do-not-tracker.org",
- "eff.org",
- "eviltracker.net",
- "trackersimulator.org"
- ]
- },
- "Effective Measure": {
- "properties": [
- "effectivemeasure.com",
- "effectivemeasure.net"
- ],
- "resources": [
- "effectivemeasure.com",
- "effectivemeasure.net"
- ]
- },
- "ekolay": {
- "properties": [
- "hurriyet.com.tr"
- ],
- "resources": [
- "e-kolay.net",
- "ekolay.net",
- "hurriyet.com.tr"
- ]
- },
- "Eleavers": {
- "properties": [
- "eleavers.com"
- ],
- "resources": [
- "eleavers.com"
- ]
- },
- "Emego": {
- "properties": [
- "usemax.de"
- ],
- "resources": [
- "usemax.de"
- ]
- },
- "Emerse": {
- "properties": [
- "emerse.com"
- ],
- "resources": [
- "emerse.com"
- ]
- },
- "EMX": {
- "properties": [
- "emxdigital.com"
- ],
- "resources": [
- "brealtime.com",
- "clearstream.tv",
- "emxdgt.com",
- "emxdigital.com"
- ]
- },
- "Enecto": {
- "properties": [
- "enecto.com"
- ],
- "resources": [
- "enecto.com"
- ]
- },
- "engage:BDR": {
- "properties": [
- "engagebdr.com"
- ],
- "resources": [
- "bnmla.com",
- "engagebdr.com"
- ]
- },
- "Engago Technology": {
- "properties": [
- "engago.com"
- ],
- "resources": [
- "appmetrx.com",
- "engago.com"
- ]
- },
- "Engine Network": {
- "properties": [
- "enginenetwork.com"
- ],
- "resources": [
- "enginenetwork.com"
- ]
- },
- "Ensighten": {
- "properties": [
- "ensighten.com"
- ],
- "resources": [
- "ensighten.com"
- ]
- },
- "Entireweb": {
- "properties": [
- "entireweb.com"
- ],
- "resources": [
- "entireweb.com"
- ]
- },
- "Epic Media Group": {
- "properties": [
- "epicadvertising.com",
- "epicmarketplace.com",
- "theepicmediagroup.com"
- ],
- "resources": [
- "epicadvertising.com",
- "epicmarketplace.com",
- "epicmobileads.com",
- "theepicmediagroup.com",
- "trafficmp.com"
- ]
- },
- "eProof.com": {
- "properties": [
- "eproof.com"
- ],
- "resources": [
- "eproof.com"
- ]
- },
- "Epsilon": {
- "properties": [
- "epsilon.com"
- ],
- "resources": [
- "epsilon.com"
- ]
- },
- "EQ Ads": {
- "properties": [
- "eqads.com"
- ],
- "resources": [
- "eqads.com"
- ]
- },
- "EroAdvertising": {
- "properties": [
- "ero-advertising.com"
- ],
- "resources": [
- "ero-advertising.com"
- ]
- },
- "Etarget": {
- "properties": [
- "etarget.net",
- "etargetnet.com"
- ],
- "resources": [
- "etarget.net",
- "etargetnet.com"
- ]
- },
- "Etineria": {
- "properties": [
- "adwitserver.com",
- "etineria.com"
- ],
- "resources": [
- "adwitserver.com",
- "etineria.com"
- ]
- },
- "etracker": {
- "properties": [
- "etracker.com",
- "etracker.de"
- ],
- "resources": [
- "etracker.com",
- "etracker.de",
- "sedotracker.com",
- "sedotracker.de"
- ]
- },
- "eTrigue": {
- "properties": [
- "etrigue.com"
- ],
- "resources": [
- "etrigue.com"
- ]
- },
- "Eulerian Technologies": {
- "properties": [
- "eulerian.com"
- ],
- "resources": [
- "eulerian.com",
- "eulerian.net"
- ]
- },
- "Evergage": {
- "properties": [
- "evergage.com"
- ],
- "resources": [
- "mybuys.com",
- "veruta.com"
- ]
- },
- "Everyday Health": {
- "properties": [
- "everydayhealth.com",
- "waterfrontmedia.com"
- ],
- "resources": [
- "everydayhealth.com",
- "waterfrontmedia.com"
- ]
- },
- "Evisions Marketing": {
- "properties": [
- "engineseeker.com",
- "evisionsmarketing.com"
- ],
- "resources": [
- "engineseeker.com",
- "evisionsmarketing.com"
- ]
- },
- "Evolve": {
- "properties": [
- "evolvemediacorp.com",
- "gorillanation.com"
- ],
- "resources": [
- "evolvemediacorp.com",
- "evolvemediametrics.com",
- "gorillanation.com"
- ]
- },
- "eWayDirect": {
- "properties": [
- "ewaydirect.com"
- ],
- "resources": [
- "ewaydirect.com",
- "ixs1.net"
- ]
- },
- "ewebse": {
- "properties": [
- "777seo.com",
- "ewebse.com"
- ],
- "resources": [
- "777seo.com",
- "ewebse.com"
- ]
- },
- "excitad": {
- "properties": [
- "excitad.com"
- ],
- "resources": [
- "excitad.com"
- ]
- },
- "eXelate": {
- "properties": [
- "exelate.com"
- ],
- "resources": [
- "exelate.com",
- "exelator.com"
- ]
- },
- "ExoClick": {
- "properties": [
- "exoclick.com"
- ],
- "resources": [
- "exoclick.com"
- ]
- },
- "Exosrv": {
- "properties": [
- "exosrv.com"
- ],
- "resources": [
- "exosrv.com"
- ]
- },
- "Experian": {
- "properties": [
- "experian.com"
- ],
- "resources": [
- "audienceiq.com",
- "experian.com"
- ]
- },
- "expo-MAX": {
- "properties": [
- "expo-max.com"
- ],
- "resources": [
- "expo-max.com"
- ]
- },
- "Exponential Interactive": {
- "properties": [
- "exponential.com",
- "fulltango.com"
- ],
- "resources": [
- "adotube.com",
- "exponential.com",
- "fulltango.com",
- "tribalfusion.com"
- ]
- },
- "Extension Factory": {
- "properties": [
- "extensionfactory.com"
- ],
- "resources": [
- "extensionfactory.com"
- ]
- },
- "EXTENSIONS.RU": {
- "properties": [
- "extensions.ru"
- ],
- "resources": [
- "extensions.ru"
- ]
- },
- "eXTReMe digital": {
- "properties": [
- "extremetracking.com"
- ],
- "resources": [
- "extreme-dm.com",
- "extremetracking.com"
- ]
- },
- "Eyeconomy": {
- "properties": [
- "eyeconomy.co.uk"
- ],
- "resources": [
- "eyeconomy.co.uk",
- "eyeconomy.com",
- "sublimemedia.net",
- "www.eyeconomy.co.uk"
- ]
- },
- "EyeNewton": {
- "properties": [
- "eyenewton.ru"
- ],
- "resources": [
- "eyenewton.ru"
- ]
- },
- "Eyeota": {
- "properties": [
- "eyeota.net"
- ],
- "resources": [
- "eyeota.net"
- ]
- },
- "eyeReturn Marketing": {
- "properties": [
- "eyereturnmarketing.com"
- ],
- "resources": [
- "eyereturn.com",
- "eyereturnmarketing.com"
- ]
- },
- "Eyeviewdigital": {
- "properties": [
- "eyeviewdigital.com"
- ],
- "resources": [
- "eyeviewads.com",
- "eyeviewdigital.com"
- ]
- },
- "Facebook": {
- "properties": [
- "atlassolutions.com",
- "facebook.com",
- "facebook.de",
- "facebook.fr",
- "facebook.net",
- "fb.com",
- "fb.me",
- "fbcdn.net",
- "friendfeed.com",
- "instagram.com",
- "internalfb.com",
- "messenger.com",
- "oculus.com",
- "whatsapp.com",
- "workplace.com"
- ],
- "resources": [
- "apps.fbsbx.com",
- "atdmt.com",
- "atlassolutions.com",
- "facebook.com",
- "facebook.de",
- "facebook.fr",
- "facebook.net",
- "fb.com",
- "fb.me",
- "fbcdn.net",
- "fbsbx.com",
- "friendfeed.com",
- "instagram.com",
- "messenger.com"
- ]
- },
- "Facilitate Digital": {
- "properties": [
- "adsfac.eu",
- "adsfac.net",
- "adsfac.us",
- "facilitatedigital.com"
- ],
- "resources": [
- "adsfac.eu",
- "adsfac.info",
- "adsfac.net",
- "adsfac.sg",
- "adsfac.us",
- "facilitatedigital.com"
- ]
- },
- "Fairfax Media": {
- "properties": [
- "fairfax.com.au",
- "fxj.com.au",
- "www.fxj.com.au"
- ],
- "resources": [
- "fairfax.com.au",
- "fxj.com.au",
- "www.fxj.com.au"
- ]
- },
- "faithadnet": {
- "properties": [
- "faithadnet.com"
- ],
- "resources": [
- "faithadnet.com"
- ]
- },
- "Fanplayr": {
- "properties": [
- "fanplayr.com"
- ],
- "resources": [
- "fanplayr.com"
- ]
- },
- "Fathom": {
- "properties": [
- "fathomdelivers.com",
- "fathomseo.com"
- ],
- "resources": [
- "fathomdelivers.com",
- "fathomseo.com"
- ]
- },
- "Federated Media": {
- "properties": [
- "hyfn.com",
- "lijit.com"
- ],
- "resources": [
- "federatedmedia.net",
- "fmpub.net",
- "hyfn.com",
- "lijit.com"
- ]
- },
- "Feedjit": {
- "properties": [
- "feedjit.com"
- ],
- "resources": [
- "feedjit.com"
- ]
- },
- "FetchBack": {
- "properties": [
- "fetchback.com"
- ],
- "resources": [
- "fetchback.com"
- ]
- },
- "Fiksu": {
- "properties": [
- "fiksu.com"
- ],
- "resources": [
- "fiksu.com"
- ]
- },
- "FinancialContent": {
- "properties": [
- "financialcontent.com"
- ],
- "resources": [
- "financialcontent.com"
- ]
- },
- "Fizz-Buzz Media": {
- "properties": [
- "fizzbuzzmedia.com",
- "fizzbuzzmedia.net"
- ],
- "resources": [
- "fizzbuzzmedia.com",
- "fizzbuzzmedia.net"
- ]
- },
- "Flashtalking": {
- "properties": [
- "flashtalking.com"
- ],
- "resources": [
- "encoremetrics.com",
- "flashtalking.com",
- "sitecompass.com"
- ]
- },
- "Flattr": {
- "properties": [
- "flattr.com"
- ],
- "resources": [
- "flattr.com"
- ]
- },
- "Flite": {
- "properties": [
- "flite.com",
- "widgetserver.com"
- ],
- "resources": [
- "flite.com",
- "widgetserver.com"
- ]
- },
- "Fluct": {
- "properties": [
- "adingo.jp",
- "fluct.jp"
- ],
- "resources": [
- "adingo.jp",
- "fluct.jp"
- ]
- },
- "Flytxt": {
- "properties": [
- "flytxt.com"
- ],
- "resources": [
- "flytxt.com"
- ]
- },
- "Footprint": {
- "properties": [
- "footprintlive.com"
- ],
- "resources": [
- "footprintlive.com"
- ]
- },
- "Forbes": {
- "properties": [
- "brandsideplatform.com",
- "forbes.com"
- ],
- "resources": [
- "brandsideplatform.com",
- "forbes.com"
- ]
- },
- "Foresee": {
- "properties": [
- "foresee.com"
- ],
- "resources": [
- "answerscloud.com"
- ]
- },
- "Fox One Stop Media": {
- "properties": [
- "fimserve.com",
- "foxnetworks.com",
- "foxonestop.com",
- "mobsmith.com",
- "myads.com",
- "othersonline.com"
- ],
- "resources": [
- "fimserve.com",
- "foxnetworks.com",
- "foxonestop.com",
- "mobsmith.com",
- "myads.com",
- "othersonline.com"
- ]
- },
- "FreakOut": {
- "properties": [
- "fout.jp"
- ],
- "resources": [
- "fout.jp"
- ]
- },
- "Freedom Communications": {
- "properties": [
- "freedom.com"
- ],
- "resources": [
- "freedom.com"
- ]
- },
- "Free Online Users": {
- "properties": [
- "freeonlineusers.com"
- ],
- "resources": [
- "freeonlineusers.com"
- ]
- },
- "Free-PageRank.com": {
- "properties": [
- "free-pagerank.com"
- ],
- "resources": [
- "free-pagerank.com"
- ]
- },
- "FreeWheel": {
- "properties": [
- "freewheel.tv",
- "fwmrm.net"
- ],
- "resources": [
- "freewheel.tv",
- "fwmrm.net",
- "stickyadstv.com"
- ]
- },
- "FriendFinder Networks": {
- "properties": [
- "adultfriendfinder.com",
- "ffn.com",
- "pop6.com"
- ],
- "resources": [
- "adultfriendfinder.com",
- "ffn.com",
- "pop6.com"
- ]
- },
- "Friends2Follow": {
- "properties": [
- "friends2follow.com"
- ],
- "resources": [
- "friends2follow.com"
- ]
- },
- "Frog Sex": {
- "properties": [
- "double-check.com",
- "frogsex.com"
- ],
- "resources": [
- "double-check.com",
- "frogsex.com"
- ]
- },
- "FuelX": {
- "properties": [
- "fuelx.com"
- ],
- "resources": [
- "fuel451.com"
- ]
- },
- "Fullstory": {
- "properties": [
- "fullstory.com"
- ],
- "resources": [
- "fullstory.com"
- ]
- },
- "Future Ads": {
- "properties": [
- "futureads.com",
- "resultlinks.com"
- ],
- "resources": [
- "futureads.com",
- "resultlinks.com"
- ]
- },
- "Fyber": {
- "properties": [
- "fyber.com"
- ],
- "resources": [
- "fyber.com"
- ]
- },
- "Game Advertising Online": {
- "properties": [
- "game-advertising-online.com"
- ],
- "resources": [
- "game-advertising-online.com"
- ]
- },
- "Games2win": {
- "properties": [
- "games2win.com",
- "inviziads.com"
- ],
- "resources": [
- "games2win.com",
- "inviziads.com"
- ]
- },
- "Gamned": {
- "properties": [
- "gamned.com"
- ],
- "resources": [
- "gamned.com"
- ]
- },
- "Gannett": {
- "properties": [
- "gannett.com",
- "pointroll.com"
- ],
- "resources": [
- "gannett.com",
- "pointroll.com"
- ]
- },
- "GB-World": {
- "properties": [
- "gb-world.net"
- ],
- "resources": [
- "gb-world.net"
- ]
- },
- "Gemius": {
- "properties": [
- "gemius.com",
- "gemius.pl"
- ],
- "resources": [
- "gemius.com",
- "gemius.pl"
- ]
- },
- "Genesis Media": {
- "properties": [
- "genesismedia.com"
- ],
- "resources": [
- "genesismedia.com",
- "genesismediaus.com"
- ]
- },
- "GENIEE": {
- "properties": [
- "geniee.co.jp"
- ],
- "resources": [
- "geniee.co.jp",
- "gssprt.jp"
- ]
- },
- "GENIE GROUP": {
- "properties": [
- "geniegroupltd.co.uk",
- "www.geniegroupltd.co.uk"
- ],
- "resources": [
- "geniegroupltd.co.uk",
- "www.geniegroupltd.co.uk"
- ]
- },
- "Genius.com": {
- "properties": [
- "genius.com",
- "rsvpgenius.com"
- ],
- "resources": [
- "genius.com",
- "rsvpgenius.com"
- ]
- },
- "GeoAds": {
- "properties": [
- "geoads.com"
- ],
- "resources": [
- "geoads.com"
- ]
- },
- "GetGlue": {
- "properties": [
- "elfie.com",
- "smrtlnks.com"
- ],
- "resources": [
- "getglue.com",
- "smrtlnks.com"
- ]
- },
- "GetIntent": {
- "properties": [
- "adhigh.net",
- "getintent.com"
- ],
- "resources": [
- "adhigh.net",
- "getintent.com"
- ]
- },
- "Get Satisfaction": {
- "properties": [
- "getsatisfaction.com"
- ],
- "resources": [
- "getsatisfaction.com"
- ]
- },
- "GetSiteControl": {
- "properties": [
- "getsitecontrol.com"
- ],
- "resources": [
- "getsitecontrol.com"
- ]
- },
- "GfK Group": {
- "properties": [
- "gfk.com"
- ],
- "resources": [
- "daphnecm.com",
- "gfk.com",
- "gfkdaphne.com"
- ]
- },
- "Gigya": {
- "properties": [
- "gigya.com"
- ],
- "resources": [
- "gigcount.com",
- "gigya.com"
- ]
- },
- "GISMAds": {
- "properties": [
- "gismads.jp"
- ],
- "resources": [
- "gismads.jp"
- ]
- },
- "GitHub": {
- "properties": [
- "gaug.es",
- "github.com"
- ],
- "resources": [
- "gaug.es",
- "github.com"
- ]
- },
- "Glam Media": {
- "properties": [
- "glam.com",
- "glammedia.com"
- ],
- "resources": [
- "glam.com",
- "glammedia.com"
- ]
- },
- "Gleam": {
- "properties": [
- "gleam.io"
- ],
- "resources": [
- "fraudjs.io",
- "gleam.io"
- ]
- },
- "Global Takeoff": {
- "properties": [
- "globaltakeoff.com",
- "globaltakeoff.net"
- ],
- "resources": [
- "globaltakeoff.com",
- "globaltakeoff.net"
- ]
- },
- "Globe7": {
- "properties": [
- "globe7.com"
- ],
- "resources": [
- "globe7.com"
- ]
- },
- "Go Daddy": {
- "properties": [
- "godaddy.com",
- "trafficfacts.com"
- ],
- "resources": [
- "godaddy.com",
- "trafficfacts.com"
- ]
- },
- "GoDataFeed": {
- "properties": [
- "godatafeed.com"
- ],
- "resources": [
- "godatafeed.com"
- ]
- },
- "GoGrid": {
- "properties": [
- "datapipe.com",
- "formalyzer.com"
- ],
- "resources": [
- "datapipe.com",
- "formalyzer.com",
- "gogrid.com",
- "komli.net"
- ]
- },
- "Goldbach": {
- "properties": [
- "goldbachgroup.com"
- ],
- "resources": [
- "goldbach.com",
- "goldbachgroup.com"
- ]
- },
- "GoldSpot Media": {
- "properties": [
- "goldspotmedia.com"
- ],
- "resources": [
- "goldspotmedia.com"
- ]
- },
- "Google": {
- "properties": [
- "abc.xyz",
- "admeld.com",
- "blogger.com",
- "blogspot.com",
- "crashlytics.com",
- "google-melange.com",
- "google.ac",
- "google.ad",
- "google.ae",
- "google.al",
- "google.am",
- "google.as",
- "google.at",
- "google.az",
- "google.ba",
- "google.be",
- "google.bf",
- "google.bg",
- "google.bi",
- "google.bj",
- "google.bs",
- "google.bt",
- "google.by",
- "google.ca",
- "google.cat",
- "google.cd",
- "google.cf",
- "google.cg",
- "google.ch",
- "google.ci",
- "google.cl",
- "google.cm",
- "google.cn",
- "google.co.ao",
- "google.co.bw",
- "google.co.ck",
- "google.co.cr",
- "google.co.id",
- "google.co.il",
- "google.co.in",
- "google.co.jp",
- "google.co.ke",
- "google.co.kr",
- "google.co.ls",
- "google.co.ma",
- "google.co.mz",
- "google.co.nz",
- "google.co.th",
- "google.co.tz",
- "google.co.ug",
- "google.co.uk",
- "google.co.uz",
- "google.co.ve",
- "google.co.vi",
- "google.co.za",
- "google.co.zm",
- "google.co.zw",
- "google.com",
- "google.com.af",
- "google.com.ag",
- "google.com.ai",
- "google.com.ar",
- "google.com.au",
- "google.com.bd",
- "google.com.bh",
- "google.com.bn",
- "google.com.bo",
- "google.com.br",
- "google.com.bz",
- "google.com.co",
- "google.com.cu",
- "google.com.cy",
- "google.com.do",
- "google.com.ec",
- "google.com.eg",
- "google.com.et",
- "google.com.fj",
- "google.com.gh",
- "google.com.gi",
- "google.com.gt",
- "google.com.hk",
- "google.com.jm",
- "google.com.kh",
- "google.com.kw",
- "google.com.lb",
- "google.com.ly",
- "google.com.mm",
- "google.com.mt",
- "google.com.mx",
- "google.com.my",
- "google.com.na",
- "google.com.nf",
- "google.com.ng",
- "google.com.ni",
- "google.com.np",
- "google.com.om",
- "google.com.pa",
- "google.com.pe",
- "google.com.pg",
- "google.com.ph",
- "google.com.pk",
- "google.com.pr",
- "google.com.py",
- "google.com.qa",
- "google.com.sa",
- "google.com.sb",
- "google.com.sg",
- "google.com.sl",
- "google.com.sv",
- "google.com.tj",
- "google.com.tr",
- "google.com.tw",
- "google.com.ua",
- "google.com.uy",
- "google.com.vc",
- "google.com.vn",
- "google.cv",
- "google.cz",
- "google.de",
- "google.dj",
- "google.dk",
- "google.dm",
- "google.dz",
- "google.ee",
- "google.es",
- "google.fi",
- "google.fm",
- "google.fr",
- "google.ga",
- "google.ge",
- "google.gg",
- "google.gl",
- "google.gm",
- "google.gp",
- "google.gr",
- "google.gy",
- "google.hn",
- "google.hr",
- "google.ht",
- "google.hu",
- "google.ie",
- "google.im",
- "google.iq",
- "google.is",
- "google.it",
- "google.je",
- "google.jo",
- "google.kg",
- "google.ki",
- "google.kz",
- "google.la",
- "google.li",
- "google.lk",
- "google.lt",
- "google.lu",
- "google.lv",
- "google.md",
- "google.me",
- "google.mg",
- "google.mk",
- "google.ml",
- "google.mn",
- "google.ms",
- "google.mu",
- "google.mv",
- "google.mw",
- "google.ne",
- "google.nl",
- "google.no",
- "google.nr",
- "google.nu",
- "google.pl",
- "google.pn",
- "google.ps",
- "google.pt",
- "google.ro",
- "google.rs",
- "google.ru",
- "google.rw",
- "google.sc",
- "google.se",
- "google.sh",
- "google.si",
- "google.sk",
- "google.sm",
- "google.sn",
- "google.so",
- "google.st",
- "google.td",
- "google.tg",
- "google.tk",
- "google.tl",
- "google.tm",
- "google.tn",
- "google.to",
- "google.tt",
- "google.vg",
- "google.vu",
- "google.ws",
- "googlesource.com",
- "ingress.com",
- "nest.com",
- "panoramio.com",
- "pinpoint-dot-chromeperf.appspot.com",
- "youtube.com"
- ],
- "resources": [
- "2mdn.net",
- "admeld.com",
- "admob.com",
- "apture.com",
- "blogger.com",
- "cc-dt.com",
- "crashlytics.com",
- "destinationurl.com",
- "doubleclick.net",
- "ggpht.com",
- "gmail.com",
- "gmodules.com",
- "google-analytics.com",
- "google.ac",
- "google.ad",
- "google.ae",
- "google.al",
- "google.am",
- "google.as",
- "google.at",
- "google.az",
- "google.ba",
- "google.be",
- "google.bf",
- "google.bg",
- "google.bi",
- "google.bj",
- "google.bs",
- "google.bt",
- "google.by",
- "google.ca",
- "google.cat",
- "google.cc",
- "google.cd",
- "google.cf",
- "google.cg",
- "google.ch",
- "google.ci",
- "google.cl",
- "google.cm",
- "google.cn",
- "google.co.ao",
- "google.co.bw",
- "google.co.ck",
- "google.co.cr",
- "google.co.id",
- "google.co.il",
- "google.co.in",
- "google.co.jp",
- "google.co.ke",
- "google.co.kr",
- "google.co.ls",
- "google.co.ma",
- "google.co.mz",
- "google.co.nz",
- "google.co.th",
- "google.co.tz",
- "google.co.ug",
- "google.co.uk",
- "google.co.uz",
- "google.co.ve",
- "google.co.vi",
- "google.co.za",
- "google.co.zm",
- "google.co.zw",
- "google.com",
- "google.com.af",
- "google.com.ag",
- "google.com.ai",
- "google.com.ar",
- "google.com.au",
- "google.com.bd",
- "google.com.bh",
- "google.com.bn",
- "google.com.bo",
- "google.com.br",
- "google.com.bz",
- "google.com.co",
- "google.com.cu",
- "google.com.cy",
- "google.com.do",
- "google.com.ec",
- "google.com.eg",
- "google.com.et",
- "google.com.fj",
- "google.com.gh",
- "google.com.gi",
- "google.com.gt",
- "google.com.hk",
- "google.com.jm",
- "google.com.kh",
- "google.com.kw",
- "google.com.lb",
- "google.com.lc",
- "google.com.ly",
- "google.com.mm",
- "google.com.mt",
- "google.com.mx",
- "google.com.my",
- "google.com.na",
- "google.com.nf",
- "google.com.ng",
- "google.com.ni",
- "google.com.np",
- "google.com.om",
- "google.com.pa",
- "google.com.pe",
- "google.com.pg",
- "google.com.ph",
- "google.com.pk",
- "google.com.pr",
- "google.com.py",
- "google.com.qa",
- "google.com.sa",
- "google.com.sb",
- "google.com.sg",
- "google.com.sl",
- "google.com.sv",
- "google.com.tj",
- "google.com.tn",
- "google.com.tr",
- "google.com.tw",
- "google.com.ua",
- "google.com.uy",
- "google.com.vc",
- "google.com.vn",
- "google.cv",
- "google.cz",
- "google.de",
- "google.dj",
- "google.dk",
- "google.dm",
- "google.dz",
- "google.ee",
- "google.es",
- "google.fi",
- "google.fm",
- "google.fr",
- "google.ga",
- "google.ge",
- "google.gf",
- "google.gg",
- "google.gl",
- "google.gm",
- "google.gp",
- "google.gr",
- "google.gy",
- "google.hn",
- "google.hr",
- "google.ht",
- "google.hu",
- "google.ie",
- "google.im",
- "google.io",
- "google.iq",
- "google.is",
- "google.it",
- "google.je",
- "google.jo",
- "google.kg",
- "google.ki",
- "google.kz",
- "google.la",
- "google.li",
- "google.lk",
- "google.lt",
- "google.lu",
- "google.lv",
- "google.md",
- "google.me",
- "google.mg",
- "google.mk",
- "google.ml",
- "google.mn",
- "google.ms",
- "google.mu",
- "google.mv",
- "google.mw",
- "google.ne",
- "google.nl",
- "google.no",
- "google.nr",
- "google.nu",
- "google.pl",
- "google.pn",
- "google.ps",
- "google.pt",
- "google.ro",
- "google.rs",
- "google.ru",
- "google.rw",
- "google.sc",
- "google.se",
- "google.sh",
- "google.si",
- "google.sk",
- "google.sm",
- "google.sn",
- "google.so",
- "google.st",
- "google.td",
- "google.tg",
- "google.tk",
- "google.tl",
- "google.tm",
- "google.tn",
- "google.to",
- "google.tt",
- "google.vg",
- "google.vu",
- "google.ws",
- "googleadservices.com",
- "googleapis.com",
- "googlemail.com",
- "googlesyndication.com",
- "googletagservices.com",
- "googleusercontent.com",
- "googlevideo.com",
- "gstatic.com",
- "invitemedia.com",
- "postrank.com",
- "recaptcha.net",
- "smtad.net",
- "youtube.com"
- ]
- },
- "GoSquared": {
- "properties": [
- "gosquared.com"
- ],
- "resources": [
- "gosquared.com"
- ]
- },
- "GoStats": {
- "properties": [
- "gostats.com"
- ],
- "resources": [
- "gostats.com"
- ]
- },
- "Grapeshot": {
- "properties": [
- "grapeshot.co.uk",
- "www.grapeshot.co.uk"
- ],
- "resources": [
- "grapeshot.co.uk",
- "www.grapeshot.co.uk"
- ]
- },
- "GrapheneMedia": {
- "properties": [
- "graphenemedia.in"
- ],
- "resources": [
- "graphenedigitalanalytics.in"
- ]
- },
- "Graphnium": {
- "properties": [
- "graphinium.com"
- ],
- "resources": [
- "crm4d.com"
- ]
- },
- "Gravity": {
- "properties": [
- "gravity.com",
- "grvcdn.com"
- ],
- "resources": [
- "gravity.com",
- "grvcdn.com"
- ]
- },
- "Gridcash": {
- "properties": [
- "adless.io",
- "gridcash.net"
- ],
- "resources": [
- "adless.io",
- "gridcash.net"
- ]
- },
- "Grocery Shopping Network": {
- "properties": [
- "groceryshopping.net"
- ],
- "resources": [
- "groceryshopping.net"
- ]
- },
- "GroovinAds": {
- "properties": [
- "groovinads.com"
- ],
- "resources": [
- "groovinads.com"
- ]
- },
- "Gruner + Jahr": {
- "properties": [
- "guj.de",
- "ligatus.com"
- ],
- "resources": [
- "guj.de",
- "ligatus.com"
- ]
- },
- "GTop": {
- "properties": [
- "arenaweb.ro"
- ],
- "resources": [
- "arenaweb.ro",
- "gtop.ro",
- "gtopstats.com"
- ]
- },
- "GumGum": {
- "properties": [
- "gumgum.com"
- ],
- "resources": [
- "gumgum.com"
- ]
- },
- "Gunggo": {
- "properties": [
- "gunggo.com"
- ],
- "resources": [
- "gunggo.com"
- ]
- },
- "Hands Mobile": {
- "properties": [
- "hands.com.br",
- "www.hands.com.br"
- ],
- "resources": [
- "hands.com.br",
- "www.hands.com.br"
- ]
- },
- "Harrenmedia": {
- "properties": [
- "harrenmedia.com",
- "harrenmedianetwork.com"
- ],
- "resources": [
- "harrenmedia.com",
- "harrenmedianetwork.com"
- ]
- },
- "HealthPricer": {
- "properties": [
- "adacado.com",
- "healthpricer.com"
- ],
- "resources": [
- "adacado.com",
- "healthpricer.com"
- ]
- },
- "Hearst": {
- "properties": [
- "hearst.com",
- "ic-live.com",
- "iclive.com",
- "icrossing.com",
- "raasnet.com"
- ],
- "resources": [
- "hearst.com",
- "ic-live.com",
- "iclive.com",
- "icrossing.com",
- "raasnet.com",
- "redaril.com",
- "sptag.com",
- "sptag1.com",
- "sptag2.com",
- "sptag3.com"
- ]
- },
- "Heyzap": {
- "properties": [
- "heyzap.com"
- ],
- "resources": [
- "heyzap.com"
- ]
- },
- "HilltopAds": {
- "properties": [
- "hilltopads.com"
- ],
- "resources": [
- "hilltopads.com",
- "hilltopads.net",
- "shoporielder.pro"
- ]
- },
- "Hi-media": {
- "properties": [
- "himediagroup.com"
- ],
- "resources": [
- "comclick.com",
- "hi-media.com",
- "himediagroup.com"
- ]
- },
- "Histats": {
- "properties": [
- "histats.com"
- ],
- "resources": [
- "histats.com"
- ]
- },
- "HitsLink": {
- "properties": [
- "hitslink.com"
- ],
- "resources": [
- "hitslink.com"
- ]
- },
- "Hit Sniffer": {
- "properties": [
- "hitsniffer.com"
- ],
- "resources": [
- "hitsniffer.com"
- ]
- },
- "Horyzon Media": {
- "properties": [
- "horyzon-media.com"
- ],
- "resources": [
- "horyzon-media.com"
- ]
- },
- "HotelChamp": {
- "properties": [
- "hotelchamp.com"
- ],
- "resources": [
- "hotelchamp.com"
- ]
- },
- "Hotjar": {
- "properties": [
- "hotjar.com"
- ],
- "resources": [
- "hotjar.com"
- ]
- },
- "HotMart": {
- "properties": [
- "hotmart.com"
- ],
- "resources": [
- "hotmart.com"
- ]
- },
- "HOTWords": {
- "properties": [
- "hotwords.com",
- "hotwords.es"
- ],
- "resources": [
- "hotwords.com",
- "hotwords.es"
- ]
- },
- "HP": {
- "properties": [
- "hp.com",
- "opentext.com",
- "optimost.com"
- ],
- "resources": [
- "hp.com",
- "optimost.com"
- ]
- },
- "Httpool": {
- "properties": [
- "httpool.com"
- ],
- "resources": [
- "httpool.com"
- ]
- },
- "HubSpot": {
- "properties": [
- "hubspot.com"
- ],
- "resources": [
- "hs-analytics.net",
- "hubspot.com"
- ]
- },
- "HUNT Mobile Ads": {
- "properties": [
- "huntmads.com"
- ],
- "resources": [
- "huntmads.com"
- ]
- },
- "Hurra.com": {
- "properties": [
- "hurra.com"
- ],
- "resources": [
- "hurra.com"
- ]
- },
- "IAB": {
- "properties": [
- "digitru.st",
- "iabtechlab.com"
- ],
- "resources": [
- "digitru.st"
- ]
- },
- "IAC": {
- "properties": [
- "iac.com",
- "iacadvertising.com"
- ],
- "resources": [
- "iac.com",
- "iacadvertising.com"
- ]
- },
- "iBehavior": {
- "properties": [
- "i-behavior.com",
- "ib-ibi.com"
- ],
- "resources": [
- "i-behavior.com",
- "ib-ibi.com"
- ]
- },
- "IBM": {
- "properties": [
- "ibm.com",
- "multicloud-ibm.com"
- ],
- "resources": [
- "cmcore.com",
- "coremetrics.com",
- "ibm.com",
- "unica.com",
- "xtify.com"
- ]
- },
- "ID5": {
- "properties": [
- "id5.io"
- ],
- "resources": [
- "id5-sync.com"
- ]
- },
- "IDG": {
- "properties": [
- "idg.com",
- "idgtechnetwork.com"
- ],
- "resources": [
- "idg.com",
- "idgtechnetwork.com"
- ]
- },
- "iEntry": {
- "properties": [
- "600z.com",
- "ientry.com"
- ],
- "resources": [
- "600z.com",
- "ientry.com"
- ]
- },
- "IgnitAd": {
- "properties": [
- "ignitad.com"
- ],
- "resources": [
- "ignitad.com"
- ]
- },
- "IgnitionOne": {
- "properties": [
- "ignitionone.com",
- "ignitionone.net",
- "searchignite.com"
- ],
- "resources": [
- "ignitionone.com",
- "ignitionone.net",
- "searchignite.com"
- ]
- },
- "iMedia": {
- "properties": [
- "imedia.cz"
- ],
- "resources": [
- "imedia.cz"
- ]
- },
- "Improve Digital": {
- "properties": [
- "360yield.com",
- "improvedigital.com"
- ],
- "resources": [
- "360yield.com",
- "improvedigital.com"
- ]
- },
- "Inadco": {
- "properties": [
- "inadco.com"
- ],
- "resources": [
- "anadcoads.com",
- "inadco.com",
- "inadcoads.com"
- ]
- },
- "InboundWriter": {
- "properties": [
- "enquisite.com",
- "inboundwriter.com"
- ],
- "resources": [
- "enquisite.com",
- "inboundwriter.com"
- ]
- },
- "IndexExchange": {
- "properties": [
- "indexexchange.com"
- ],
- "resources": [
- "indexexchange.com"
- ]
- },
- "Infectious Media": {
- "properties": [
- "infectiousmedia.com"
- ],
- "resources": [
- "impressiondesk.com",
- "infectiousmedia.com"
- ]
- },
- "Infernotions": {
- "properties": [
- "infernotions.com"
- ],
- "resources": [
- "infernotions.com"
- ]
- },
- "Inflection Point Media": {
- "properties": [
- "inflectionpointmedia.com"
- ],
- "resources": [
- "inflectionpointmedia.com"
- ]
- },
- "Infogroup": {
- "properties": [
- "infogroup.com"
- ],
- "resources": [
- "infogroup.com"
- ]
- },
- "Infolinks": {
- "properties": [
- "infolinks.com"
- ],
- "resources": [
- "infolinks.com"
- ]
- },
- "INFOnline": {
- "properties": [
- "infonline.de"
- ],
- "resources": [
- "infonline.de",
- "ioam.de",
- "ivwbox.de"
- ]
- },
- "InfoStars": {
- "properties": [
- "hotlog.ru",
- "infostars.ru"
- ],
- "resources": [
- "hotlog.ru",
- "infostars.ru"
- ]
- },
- "Infra-Ad": {
- "properties": [
- "infra-ad.com"
- ],
- "resources": [
- "infra-ad.com"
- ]
- },
- "InMobi": {
- "properties": [
- "aerserv.com",
- "inmobi.com",
- "sproutinc.com"
- ],
- "resources": [
- "aerserv.com",
- "inmobi.com",
- "sproutinc.com"
- ]
- },
- "inneractive": {
- "properties": [
- "inner-active.com"
- ],
- "resources": [
- "inner-active.com"
- ]
- },
- "Innity": {
- "properties": [
- "innity.com"
- ],
- "resources": [
- "innity.com"
- ]
- },
- "InsightExpress": {
- "properties": [
- "insightexpress.com"
- ],
- "resources": [
- "insightexpress.com",
- "insightexpressai.com"
- ]
- },
- "InSkin Media": {
- "properties": [
- "inskinmedia.com"
- ],
- "resources": [
- "inskinmedia.com"
- ]
- },
- "Inspectlet": {
- "properties": [
- "inspectlet.com"
- ],
- "resources": [
- "inspectlet.com"
- ]
- },
- "Instinctive": {
- "properties": [
- "instinctive.io"
- ],
- "resources": [
- "instinctive.io",
- "instinctiveads.com"
- ]
- },
- "Integral Ad Science": {
- "properties": [
- "integralads.com"
- ],
- "resources": [
- "adsafemedia.com",
- "adsafeprotected.com",
- "iasds01.com",
- "integralads.com"
- ]
- },
- "IntelligenceFocus": {
- "properties": [
- "intelligencefocus.com",
- "leadchampion.com"
- ],
- "resources": [
- "domodomain.com",
- "intelligencefocus.com",
- "leadchampion.com"
- ]
- },
- "Intent Media": {
- "properties": [
- "intentmedia.com"
- ],
- "resources": [
- "intentmedia.com",
- "intentmedia.net"
- ]
- },
- "Intergi": {
- "properties": [
- "intergi.com"
- ],
- "resources": [
- "intergi.com"
- ]
- },
- "Intermarkets": {
- "properties": [
- "intermarkets.net"
- ],
- "resources": [
- "intermarkets.net"
- ]
- },
- "Intermundo Media": {
- "properties": [
- "intermundomedia.com"
- ],
- "resources": [
- "intermundomedia.com"
- ]
- },
- "Internet Brands": {
- "properties": [
- "ibpxl.com",
- "internetbrands.com"
- ],
- "resources": [
- "ibpxl.com",
- "internetbrands.com"
- ]
- },
- "Interpolls": {
- "properties": [
- "interpolls.com"
- ],
- "resources": [
- "interpolls.com"
- ]
- },
- "Inuvo": {
- "properties": [
- "inuvo.com"
- ],
- "resources": [
- "inuvo.com"
- ]
- },
- "InvestingChannel": {
- "properties": [
- "investingchannel.com"
- ],
- "resources": [
- "investingchannel.com"
- ]
- },
- "iovation": {
- "properties": [
- "iovation.com"
- ],
- "resources": [
- "iesnare.com",
- "iovation.com"
- ]
- },
- "iPerceptions": {
- "properties": [
- "iperceptions.com"
- ],
- "resources": [
- "iperceptions.com"
- ]
- },
- "IponWeb": {
- "properties": [
- "iponweb.com"
- ],
- "resources": [
- "iponweb.com",
- "iponweb.net"
- ]
- },
- "iPROM": {
- "properties": [
- "centraliprom.com",
- "iprom.net",
- "iprom.si",
- "mediaiprom.com"
- ],
- "resources": [
- "centraliprom.com",
- "iprom.net",
- "iprom.si",
- "mediaiprom.com"
- ]
- },
- "iPromote": {
- "properties": [
- "ipromote.com"
- ],
- "resources": [
- "ipromote.com"
- ]
- },
- "iProspect": {
- "properties": [
- "iprospect.com"
- ],
- "resources": [
- "clickmanage.com",
- "iprospect.com"
- ]
- },
- "ISI Technologies": {
- "properties": [
- "adversalservers.com",
- "digbro.com"
- ],
- "resources": [
- "adversalservers.com",
- "digbro.com"
- ]
- },
- "IslayTech": {
- "properties": [
- "islay.tech"
- ],
- "resources": [
- "islay.tech"
- ]
- },
- "ismatlab.com": {
- "properties": [
- "ismatlab.com"
- ],
- "resources": [
- "ismatlab.com"
- ]
- },
- "Itch": {
- "properties": [
- "itch.io"
- ],
- "resources": [
- "itch.io"
- ]
- },
- "ItIsATracker": {
- "properties": [
- "itisatracker.com"
- ],
- "resources": [
- "itisatracker.com"
- ]
- },
- "I.UA": {
- "properties": [
- "i.ua"
- ],
- "resources": [
- "i.ua"
- ]
- },
- "Jaroop": {
- "properties": [
- "jaroop.com"
- ],
- "resources": [
- "jaroop.com"
- ]
- },
- "JasperLabs": {
- "properties": [
- "jasperlabs.com"
- ],
- "resources": [
- "jasperlabs.com"
- ]
- },
- "Jemm": {
- "properties": [
- "jemmgroup.com"
- ],
- "resources": [
- "jemmgroup.com"
- ]
- },
- "Jink": {
- "properties": [
- "jink.de",
- "jinkads.com"
- ],
- "resources": [
- "jink.de",
- "jinkads.com"
- ]
- },
- "Jirbo": {
- "properties": [
- "adcolony.com"
- ],
- "resources": [
- "adcolony.com",
- "jirbo.com"
- ]
- },
- "Jivox": {
- "properties": [
- "jivox.com"
- ],
- "resources": [
- "jivox.com"
- ]
- },
- "JobThread": {
- "properties": [
- "jobthread.com"
- ],
- "resources": [
- "jobthread.com"
- ]
- },
- "JSE": {
- "properties": [
- "jsecoin.com"
- ],
- "resources": [
- "freecontent.bid",
- "freecontent.date",
- "freecontent.stream",
- "hashing.win",
- "hostingcloud.racing",
- "hostingcloud.science",
- "jsecoin.com"
- ]
- },
- "JuicyAds": {
- "properties": [
- "juicyads.com"
- ],
- "resources": [
- "juicyads.com"
- ]
- },
- "Jumptap": {
- "properties": [
- "jumptap.com"
- ],
- "resources": [
- "jumptap.com"
- ]
- },
- "justuno": {
- "properties": [
- "justuno.com"
- ],
- "resources": [
- "justuno.com"
- ]
- },
- "Kaltura": {
- "properties": [
- "kaltura.com"
- ],
- "resources": [
- "kaltura.com"
- ]
- },
- "Kargo": {
- "properties": [
- "kargo.com"
- ],
- "resources": [
- "kargo.com"
- ]
- },
- "Kenshoo": {
- "properties": [
- "kenshoo.com",
- "xg4ken.com"
- ],
- "resources": [
- "kenshoo.com",
- "xg4ken.com"
- ]
- },
- "Keyade": {
- "properties": [
- "keyade.com"
- ],
- "resources": [
- "keyade.com"
- ]
- },
- "KeyMetric": {
- "properties": [
- "keymetric.net"
- ],
- "resources": [
- "keymetric.net"
- ]
- },
- "Keywee": {
- "properties": [
- "keywee.co"
- ],
- "resources": [
- "keywee.co"
- ]
- },
- "kikin": {
- "properties": [
- "kikin.com"
- ],
- "resources": [
- "kikin.com"
- ]
- },
- "KISSmetrics": {
- "properties": [
- "kissmetrics.com"
- ],
- "resources": [
- "kissmetrics.com"
- ]
- },
- "KissMyAds": {
- "properties": [
- "kissmyads.com"
- ],
- "resources": [
- "kissmyads.com"
- ]
- },
- "Kitara Media": {
- "properties": [
- "103092804.com",
- "kitaramedia.com"
- ],
- "resources": [
- "103092804.com",
- "kitaramedia.com"
- ]
- },
- "Kitcode": {
- "properties": [
- "kitcode.net"
- ],
- "resources": [
- "kitcode.net"
- ]
- },
- "KIT digital": {
- "properties": [
- "kitd.com"
- ],
- "resources": [
- "keewurd.com",
- "kitd.com",
- "peerset.com"
- ]
- },
- "Kokteyl": {
- "properties": [
- "admost.com",
- "kokteyl.com"
- ],
- "resources": [
- "admost.com",
- "kokteyl.com"
- ]
- },
- "Komli": {
- "properties": [
- "komli.com"
- ],
- "resources": [
- "komli.com"
- ]
- },
- "Konduto": {
- "properties": [
- "konduto.com"
- ],
- "resources": [
- "k-analytix.com",
- "konduto.com"
- ]
- },
- "Kontera": {
- "properties": [
- "kontera.com"
- ],
- "resources": [
- "kontera.com"
- ]
- },
- "Korrelate": {
- "properties": [
- "korrelate.com"
- ],
- "resources": [
- "adsummos.com",
- "adsummos.net",
- "korrelate.com"
- ]
- },
- "Krux": {
- "properties": [
- "krux.com",
- "kruxdigital.com"
- ],
- "resources": [
- "krux.com",
- "kruxdigital.com",
- "krxd.net"
- ]
- },
- "Lakana": {
- "properties": [
- "lakana.com"
- ],
- "resources": [
- "ibsys.com",
- "lakana.com"
- ]
- },
- "Layer-Ad.org": {
- "properties": [
- "layer-ad.org"
- ],
- "resources": [
- "layer-ad.org"
- ]
- },
- "Layer Ads": {
- "properties": [
- "layer-ads.net"
- ],
- "resources": [
- "layer-ads.net"
- ]
- },
- "LeadBolt": {
- "properties": [
- "leadbolt.com"
- ],
- "resources": [
- "leadbolt.com"
- ]
- },
- "LeadForensics": {
- "properties": [
- "leadforensics.com"
- ],
- "resources": [
- "leadforensics.com"
- ]
- },
- "LeadFormix": {
- "properties": [
- "calliduscloud.com",
- "leadforce1.com",
- "leadformix.com"
- ],
- "resources": [
- "calliduscloud.com",
- "leadforce1.com",
- "leadformix.com"
- ]
- },
- "LeadsHub": {
- "properties": [
- "ztsrv.com"
- ],
- "resources": [
- "ztsrv.com"
- ]
- },
- "LeanPlum": {
- "properties": [
- "leanplum.com"
- ],
- "resources": [
- "leanplum.com"
- ]
- },
- "Legolas Media": {
- "properties": [
- "legolas-media.com"
- ],
- "resources": [
- "legolas-media.com"
- ]
- },
- "Levexis": {
- "properties": [
- "levexis.com"
- ],
- "resources": [
- "levexis.com"
- ]
- },
- "Lexos Media": {
- "properties": [
- "adbull.com",
- "lexosmedia.com"
- ],
- "resources": [
- "adbull.com",
- "lexosmedia.com"
- ]
- },
- "LifeStreet": {
- "properties": [
- "lfstmedia.com",
- "lifestreetmedia.com"
- ],
- "resources": [
- "lfstmedia.com",
- "lifestreetmedia.com"
- ]
- },
- "Limelight Networks": {
- "properties": [
- "limelight.com"
- ],
- "resources": [
- "clickability.com",
- "limelight.com",
- "llnwd.net"
- ]
- },
- "LineZing": {
- "properties": [
- "linezing.com"
- ],
- "resources": [
- "linezing.com"
- ]
- },
- "LinkConnector": {
- "properties": [
- "linkconnector.com"
- ],
- "resources": [
- "linkconnector.com"
- ]
- },
- "LinkedIn": {
- "properties": [
- "linkedin.com"
- ],
- "resources": [
- "licdn.com",
- "linkedin.com"
- ]
- },
- "LinkShare": {
- "properties": [
- "rakutenmarketing.com"
- ],
- "resources": [
- "linkshare.com",
- "linksynergy.com",
- "rakutenmarketing.com"
- ]
- },
- "Linkz": {
- "properties": [
- "linkz.net"
- ],
- "resources": [
- "linkz.net"
- ]
- },
- "Listrak": {
- "properties": [
- "listrak.com",
- "listrakbi.com"
- ],
- "resources": [
- "listrak.com",
- "listrakbi.com"
- ]
- },
- "LiveIntent": {
- "properties": [
- "liveintent.com"
- ],
- "resources": [
- "liadm.com",
- "liveintent.com"
- ]
- },
- "LiveInternet": {
- "properties": [
- "liveinternet.ru",
- "yadro.ru"
- ],
- "resources": [
- "liveinternet.ru",
- "yadro.ru"
- ]
- },
- "LivePerson": {
- "properties": [
- "liveperson.com"
- ],
- "resources": [
- "liveperson.com",
- "liveperson.net",
- "nuconomy.com"
- ]
- },
- "LiveRail": {
- "properties": [
- "liverail.com"
- ],
- "resources": [
- "liverail.com"
- ]
- },
- "LiveRamp": {
- "properties": [
- "liveramp.com"
- ],
- "resources": [
- "liveramp.com",
- "tvpixel.com"
- ]
- },
- "LKQD": {
- "properties": [
- "lkqd.com",
- "lkqd.net"
- ],
- "resources": [
- "lkqd.com",
- "lkqd.net"
- ]
- },
- "Local Yokel Media": {
- "properties": [
- "localyokelmedia.com"
- ],
- "resources": [
- "localyokelmedia.com"
- ]
- },
- "Localytics": {
- "properties": [
- "localytics.com"
- ],
- "resources": [
- "localytics.com"
- ]
- },
- "LockerDome": {
- "properties": [
- "lockerdome.com"
- ],
- "resources": [
- "lockerdome.com"
- ]
- },
- "Lockerz": {
- "properties": [
- "lockerz.com"
- ],
- "resources": [
- "lockerz.com"
- ]
- },
- "Logdy": {
- "properties": [
- "logdy.com"
- ],
- "resources": [
- "logdy.com"
- ]
- },
- "Longboard Media": {
- "properties": [
- "longboardmedia.com"
- ],
- "resources": [
- "longboardmedia.com"
- ]
- },
- "LongTail Video": {
- "properties": [
- "jwplayer.com"
- ],
- "resources": [
- "longtailvideo.com",
- "ltassrv.com"
- ]
- },
- "Loomia": {
- "properties": [
- "loomia.com"
- ],
- "resources": [
- "loomia.com"
- ]
- },
- "LoopFuse": {
- "properties": [
- "lfov.net",
- "loopfuse.net"
- ],
- "resources": [
- "lfov.net",
- "loopfuse.net"
- ]
- },
- "LoopMe": {
- "properties": [
- "loopme.com"
- ],
- "resources": [
- "loopme.com"
- ]
- },
- "Lotame": {
- "properties": [
- "crwdcntrl.net",
- "lotame.com"
- ],
- "resources": [
- "crwdcntrl.net",
- "lotame.com"
- ]
- },
- "LotLinx": {
- "properties": [
- "lotlinx.com"
- ],
- "resources": [
- "lotlinx.com"
- ]
- },
- "Lower My Bills": {
- "properties": [
- "lowermybills.com"
- ],
- "resources": [
- "lowermybills.com"
- ]
- },
- "lptracker": {
- "properties": [
- "lptracker.io"
- ],
- "resources": [
- "lptracker.io"
- ]
- },
- "LucidMedia": {
- "properties": [
- "lucidmedia.com"
- ],
- "resources": [
- "lucidmedia.com"
- ]
- },
- "LuckyOrange": {
- "properties": [
- "luckyorange.com"
- ],
- "resources": [
- "luckyorange.com",
- "luckyorange.net"
- ]
- },
- "Lynchpin": {
- "properties": [
- "lynchpin.com"
- ],
- "resources": [
- "lynchpin.com",
- "lypn.com"
- ]
- },
- "Lyris": {
- "properties": [
- "aurea.com"
- ],
- "resources": [
- "aurea.com",
- "clicktracks.com",
- "lyris.com"
- ]
- },
- "Lytiks": {
- "properties": [
- "lytiks.com"
- ],
- "resources": [
- "lytiks.com"
- ]
- },
- "m6d": {
- "properties": [
- "dstillery.com"
- ],
- "resources": [
- "dstillery.com",
- "m6d.com",
- "media6degrees.com"
- ]
- },
- "Madhouse": {
- "properties": [
- "madhouse.cn"
- ],
- "resources": [
- "madhouse.cn"
- ]
- },
- "Madison Logic": {
- "properties": [
- "dinclinx.com",
- "madisonlogic.com"
- ],
- "resources": [
- "dinclinx.com",
- "madisonlogic.com"
- ]
- },
- "madvertise": {
- "properties": [
- "madvertise.com"
- ],
- "resources": [
- "madvertise.com"
- ]
- },
- "Magnetic": {
- "properties": [
- "domdex.net",
- "magnetic.com"
- ],
- "resources": [
- "domdex.com",
- "domdex.net",
- "magnetic.com",
- "qjex.net"
- ]
- },
- "Magnify360": {
- "properties": [
- "dialogmgr.com",
- "magnify360.com"
- ],
- "resources": [
- "dialogmgr.com",
- "magnify360.com"
- ]
- },
- "MailChimp": {
- "properties": [
- "campaign-archive1.com",
- "mailchi.mp",
- "mailchimp.com"
- ],
- "resources": [
- "campaign-archive1.com",
- "list-manage.com",
- "mailchi.mp",
- "mailchimp.com"
- ]
- },
- "Mail.Ru": {
- "properties": [
- "list.ru",
- "mail.ru"
- ],
- "resources": [
- "list.ru",
- "mail.ru"
- ]
- },
- "Manifest": {
- "properties": [
- "bannerbank.ru",
- "manifest.ru"
- ],
- "resources": [
- "bannerbank.ru",
- "manifest.ru"
- ]
- },
- "Marchex": {
- "properties": [
- "industrybrains.com",
- "marchex.com"
- ],
- "resources": [
- "industrybrains.com",
- "marchex.com"
- ]
- },
- "Marimedia": {
- "properties": [
- "marimedia.net"
- ],
- "resources": [
- "marimedia.net"
- ]
- },
- "MarketGid": {
- "properties": [
- "dt00.net",
- "dt07.net",
- "marketgid.com"
- ],
- "resources": [
- "dt00.net",
- "dt07.net",
- "marketgid.com"
- ]
- },
- "Marketo": {
- "properties": [
- "marketo.com"
- ],
- "resources": [
- "marketo.com",
- "marketo.net"
- ]
- },
- "Markit": {
- "properties": [
- "markit.com",
- "wsod.com"
- ],
- "resources": [
- "markit.com",
- "wsod.com"
- ]
- },
- "MarkMonitor": {
- "properties": [
- "9c9media.ca",
- "markmonitor.com"
- ],
- "resources": [
- "9c9media.ca",
- "markmonitor.com"
- ]
- },
- "Marktest": {
- "properties": [
- "marktest.com",
- "marktest.pt"
- ],
- "resources": [
- "marktest.com",
- "marktest.pt"
- ]
- },
- "Martini Media": {
- "properties": [
- "martiniadnetwork.com"
- ],
- "resources": [
- "martiniadnetwork.com",
- "martinimedianetwork.com"
- ]
- },
- "mashero": {
- "properties": [
- "mashero.com"
- ],
- "resources": [
- "mashero.com"
- ]
- },
- "MashLogic": {
- "properties": [
- "mashlogic.com"
- ],
- "resources": [
- "mashlogic.com"
- ]
- },
- "Match.com": {
- "properties": [
- "chemistry.com",
- "match.com"
- ],
- "resources": [
- "chemistry.com",
- "match.com",
- "meetic-partners.com"
- ]
- },
- "Matomy": {
- "properties": [
- "matomy.com"
- ],
- "resources": [
- "adnetinteractive.com",
- "adsmarket.com",
- "matomy.com",
- "matomymarket.com",
- "matomymedia.com",
- "mediawhiz.com",
- "optimatic.com",
- "xtendmedia.com"
- ]
- },
- "MaxBounty": {
- "properties": [
- "maxbounty.com",
- "mb01.com"
- ],
- "resources": [
- "maxbounty.com",
- "mb01.com"
- ]
- },
- "MaxMind": {
- "properties": [
- "maxmind.com"
- ],
- "resources": [
- "maxmind.com",
- "mmapiws.com"
- ]
- },
- "MaxPoint": {
- "properties": [
- "maxpointinteractive.com",
- "maxusglobal.com",
- "mxptint.net"
- ],
- "resources": [
- "maxpointinteractive.com",
- "maxusglobal.com",
- "mxptint.net"
- ]
- },
- "McAfee": {
- "properties": [
- "mcafee.com",
- "mcafeesecure.com"
- ],
- "resources": [
- "mcafee.com",
- "mcafeesecure.com",
- "scanalert.com"
- ]
- },
- "MdotM": {
- "properties": [
- "mdotm.com"
- ],
- "resources": [
- "mdotm.com"
- ]
- },
- "MediaBrix": {
- "properties": [
- "mediabrix.com"
- ],
- "resources": [
- "mediabrix.com"
- ]
- },
- "MediaCom": {
- "properties": [
- "mediacom.com"
- ],
- "resources": [
- "mediacom.com"
- ]
- },
- "mediaFORGE": {
- "properties": [
- "mediaforge.com"
- ],
- "resources": [
- "mediaforge.com"
- ]
- },
- "Medialets": {
- "properties": [
- "medialets.com"
- ],
- "resources": [
- "medialets.com"
- ]
- },
- "MediaMath": {
- "properties": [
- "mediamath.com"
- ],
- "resources": [
- "adroitinteractive.com",
- "designbloxlive.com",
- "mathtag.com",
- "mediamath.com"
- ]
- },
- "Médiamétrie-eStat": {
- "properties": [
- "mediametrie-estat.com"
- ],
- "resources": [
- "estat.com",
- "mediametrie-estat.com"
- ]
- },
- "media.net": {
- "properties": [
- "media.net"
- ],
- "resources": [
- "media.net"
- ]
- },
- "Mediaocean": {
- "properties": [
- "adbuyer.com",
- "mediaocean.com"
- ],
- "resources": [
- "adbuyer.com",
- "mediaocean.com"
- ]
- },
- "MediaShakers": {
- "properties": [
- "media-servers.net",
- "mediashakers.com"
- ],
- "resources": [
- "media-servers.net",
- "mediashakers.com"
- ]
- },
- "MediaTrust": {
- "properties": [
- "mediatrust.com"
- ],
- "resources": [
- "mediatrust.com"
- ]
- },
- "Medicx Media Solutions": {
- "properties": [
- "medicxmedia.com"
- ],
- "resources": [
- "medicxmedia.com"
- ]
- },
- "Meebo": {
- "properties": [
- "meebo.com"
- ],
- "resources": [
- "meebo.com",
- "meebocdn.net"
- ]
- },
- "MegaIndex": {
- "properties": [
- "megaindex.ru"
- ],
- "resources": [
- "megaindex.ru"
- ]
- },
- "Mercadopago": {
- "properties": [
- "mercadolibre.cl",
- "mercadolibre.co.cr",
- "mercadolibre.com",
- "mercadolibre.com.ar",
- "mercadolibre.com.bo",
- "mercadolibre.com.co",
- "mercadolibre.com.do",
- "mercadolibre.com.ec",
- "mercadolibre.com.gt",
- "mercadolibre.com.hn",
- "mercadolibre.com.mx",
- "mercadolibre.com.ni",
- "mercadolibre.com.pa",
- "mercadolibre.com.pe",
- "mercadolibre.com.py",
- "mercadolibre.com.sv",
- "mercadolibre.com.uy",
- "mercadolibre.com.ve",
- "mercadolivre.com.br",
- "mercadopago.com"
- ],
- "resources": [
- "mercadopago.com"
- ]
- },
- "Mercent": {
- "properties": [
- "mercent.com"
- ],
- "resources": [
- "mercent.com"
- ]
- },
- "MerchantAdvantage": {
- "properties": [
- "merchantadvantage.com"
- ],
- "resources": [
- "merchantadvantage.com"
- ]
- },
- "Merchenta": {
- "properties": [
- "merchenta.com"
- ],
- "resources": [
- "merchenta.com"
- ]
- },
- "Merkle": {
- "properties": [
- "merkleinc.com",
- "rkdms.com"
- ],
- "resources": [
- "merkleinc.com",
- "rimmkaufman.com",
- "rkdms.com"
- ]
- },
- "Meta Network": {
- "properties": [
- "metanetwork.com"
- ],
- "resources": [
- "metanetwork.com"
- ]
- },
- "Meteor": {
- "properties": [
- "meteorsolutions.com"
- ],
- "resources": [
- "meteorsolutions.com"
- ]
- },
- "MetrixLab": {
- "properties": [
- "crm-metrix.com",
- "customerconversio.com",
- "metrixlab.com",
- "opinionbar.com"
- ],
- "resources": [
- "adoftheyear.com",
- "crm-metrix.com",
- "customerconversio.com",
- "metrixlab.com",
- "opinionbar.com"
- ]
- },
- "MicroAd": {
- "properties": [
- "microad.jp",
- "www.microad.jp"
- ],
- "resources": [
- "microad.jp",
- "www.microad.jp"
- ]
- },
- "Microsoft": {
- "properties": [
- "acompli.net",
- "aka.ms",
- "azure.com",
- "azure.net",
- "azurerms.com",
- "bing.com",
- "cloudappsecurity.com",
- "gamesforwindows.com",
- "getgamesmart.com",
- "gfx.ms",
- "healthvault.com",
- "hockeyapp.net",
- "ieaddons.com",
- "iegallery.com",
- "live.com",
- "microsoft.com",
- "microsoftalumni.com",
- "microsoftalumni.org",
- "microsoftazuread-sso.com",
- "microsoftedgeinsiders.com",
- "microsoftonline-p.com",
- "microsoftonline-p.net",
- "microsoftonline.com",
- "microsoftstore.com",
- "microsoftstream.com",
- "msappproxy.net",
- "msft.net",
- "msftidentity.com",
- "msidentity.com",
- "msn.com",
- "o365weve.com",
- "oaspapps.com",
- "office.com",
- "office365.com",
- "officelive.com",
- "onedrive.com",
- "onenote.com",
- "outlook.com",
- "outlookmobile.com",
- "phonefactor.net",
- "s-msn.com",
- "sfx.ms",
- "sharepoint.com",
- "skype.com",
- "skypeforbusiness.com",
- "staffhub.ms",
- "sway-extensions.com",
- "sway.com",
- "trafficmanager.net",
- "virtualearth.net",
- "visualstudio.com",
- "windows.net",
- "windowsazure.com",
- "windowsphone.com",
- "worldwidetelescope.org",
- "wunderlist.com",
- "xbox.com",
- "yammer.com"
- ],
- "resources": [
- "aadrm.com",
- "adbureau.net",
- "adecn.com",
- "aquantive.com",
- "aspnetcdn.com",
- "assets-yammer.com",
- "azure.com",
- "azureedge.net",
- "bing.com",
- "cloudapp.net",
- "gamesforwindows.com",
- "getgamesmart.com",
- "gfx.ms",
- "healthvault.com",
- "live.com",
- "microsoft.com",
- "microsoftazuread-sso.com",
- "microsoftonline-p.com",
- "microsoftonline-p.net",
- "microsoftonline.com",
- "microsoftstore.com",
- "msads.net",
- "msauthimages.net",
- "msecnd.net",
- "msedge.net",
- "msndirect.com",
- "msocdn.com",
- "netconversions.com",
- "oaspapps.com",
- "office.com",
- "office.net",
- "officelive.com",
- "onenote.net",
- "onestore.ms",
- "onmicrosoft.com",
- "outlook.com",
- "roiservice.com",
- "s-msn.com",
- "sfbassets.com",
- "sharepoint.com",
- "skype.com",
- "skypeassets.com",
- "sway-cdn.com",
- "sway-extensions.com",
- "windows.net",
- "windowsazure.com",
- "yammerusercontent.com"
- ]
- },
- "Millennial Media": {
- "properties": [
- "decktrade.com",
- "millennialmedia.com",
- "mydas.mobi"
- ],
- "resources": [
- "decktrade.com",
- "millennialmedia.com",
- "mydas.mobi"
- ]
- },
- "Mindset Media": {
- "properties": [
- "mindset-media.com"
- ],
- "resources": [
- "mindset-media.com",
- "mmismm.com"
- ]
- },
- "MinerAlt": {
- "properties": [
- "mineralt.io",
- "vidzi.nu",
- "vidzi.tv"
- ],
- "resources": [
- "1q2w3.website",
- "analytics.blue",
- "aster18cdn.nl",
- "belicimo.pw",
- "besstahete.info",
- "dinorslick.icu",
- "feesocrald.com",
- "gramombird.com",
- "istlandoll.com",
- "mepirtedic.com",
- "mineralt.io",
- "pampopholf.com",
- "tercabilis.info",
- "tulip18.com",
- "vidzi.tv",
- "yololike.space"
- ]
- },
- "Minescripts": {
- "properties": [
- "minescripts.info"
- ],
- "resources": [
- "minescripts.info",
- "sslverify.info"
- ]
- },
- "MineXMR": {
- "properties": [
- "minexmr.stream"
- ],
- "resources": [
- "minexmr.stream"
- ]
- },
- "Mirando": {
- "properties": [
- "mirando.de"
- ],
- "resources": [
- "mirando.de"
- ]
- },
- "Mixpanel": {
- "properties": [
- "mixpanel.com"
- ],
- "resources": [
- "mixpanel.com",
- "mxpnl.com"
- ]
- },
- "Mixpo": {
- "properties": [
- "mixpo.com"
- ],
- "resources": [
- "mixpo.com"
- ]
- },
- "Moat": {
- "properties": [
- "moat.com",
- "moatads.com"
- ],
- "resources": [
- "moat.com",
- "moatads.com"
- ]
- },
- "MobFox": {
- "properties": [
- "mobfox.com"
- ],
- "resources": [
- "mobfox.com"
- ]
- },
- "Mobials": {
- "properties": [
- "mobials.com"
- ],
- "resources": [
- "mobials.com"
- ]
- },
- "MobileAdTrading": {
- "properties": [
- "mobileadtrading.com"
- ],
- "resources": [
- "mobileadtrading.com"
- ]
- },
- "Mobile Meteor": {
- "properties": [
- "mobilemeteor.com"
- ],
- "resources": [
- "mobilemeteor.com",
- "showmeinn.com"
- ]
- },
- "Mobile Storm": {
- "properties": [
- "mobilestorm.com"
- ],
- "resources": [
- "mobilestorm.com"
- ]
- },
- "MobVision": {
- "properties": [
- "admoda.com"
- ],
- "resources": [
- "admoda.com",
- "mobvision.com"
- ]
- },
- "Mocean Mobile": {
- "properties": [
- "moceanmobile.com"
- ],
- "resources": [
- "moceanmobile.com"
- ]
- },
- "Mochila": {
- "properties": [
- "mochila.com"
- ],
- "resources": [
- "mochila.com"
- ]
- },
- "Mojiva": {
- "properties": [
- "mojiva.com"
- ],
- "resources": [
- "mojiva.com"
- ]
- },
- "Monetate": {
- "properties": [
- "monetate.com",
- "monetate.net"
- ],
- "resources": [
- "monetate.com",
- "monetate.net"
- ]
- },
- "MONETIZEdigital": {
- "properties": [
- "cpalead.com"
- ],
- "resources": [
- "cpalead.com"
- ]
- },
- "Monetize More": {
- "properties": [
- "monetizemore.com"
- ],
- "resources": [
- "monetizemore.com"
- ]
- },
- "Mongoose Metrics": {
- "properties": [
- "mongoosemetrics.com"
- ],
- "resources": [
- "mongoosemetrics.com"
- ]
- },
- "Monitus": {
- "properties": [
- "monitus.net"
- ],
- "resources": [
- "monitus.net"
- ]
- },
- "Monoloop": {
- "properties": [
- "monoloop.com"
- ],
- "resources": [
- "monoloop.com"
- ]
- },
- "Monster": {
- "properties": [
- "monster.com"
- ],
- "resources": [
- "monster.com"
- ]
- },
- "Moolah Media": {
- "properties": [
- "moolah-media.com",
- "moolahmedia.com"
- ],
- "resources": [
- "moolah-media.com",
- "moolahmedia.com"
- ]
- },
- "MoPub": {
- "properties": [
- "mopub.com"
- ],
- "resources": [
- "mopub.com"
- ]
- },
- "motigo": {
- "properties": [
- "motigo.com"
- ],
- "resources": [
- "motigo.com",
- "nedstatbasic.net"
- ]
- },
- "Mouseflow": {
- "properties": [
- "mouseflow.com"
- ],
- "resources": [
- "mouseflow.com"
- ]
- },
- "MovieLush.com": {
- "properties": [
- "affbuzzads.com",
- "movielush.com"
- ],
- "resources": [
- "affbuzzads.com",
- "movielush.com"
- ]
- },
- "Multiple Stream Media": {
- "properties": [
- "adclickmedia.com",
- "multiplestreammktg.com"
- ],
- "resources": [
- "adclickmedia.com",
- "multiplestreammktg.com"
- ]
- },
- "MUNDO Media": {
- "properties": [
- "mundomedia.com",
- "silver-path.com"
- ],
- "resources": [
- "mundomedia.com",
- "silver-path.com"
- ]
- },
- "MyCounter": {
- "properties": [
- "mycounter.com.ua"
- ],
- "resources": [
- "mycounter.com.ua"
- ]
- },
- "MyPagerank.Net": {
- "properties": [
- "mypagerank.net"
- ],
- "resources": [
- "mypagerank.net"
- ]
- },
- "MyPressPlus": {
- "properties": [
- "mypressplus.com",
- "ppjol.net"
- ],
- "resources": [
- "mypressplus.com",
- "ppjol.net"
- ]
- },
- "Mystighty": {
- "properties": [
- "mystighty.info"
- ],
- "resources": [
- "mystighty.info",
- "sweeterge.info"
- ]
- },
- "myThings": {
- "properties": [
- "mythings.com",
- "mythingsmedia.com"
- ],
- "resources": [
- "mythings.com",
- "mythingsmedia.com"
- ]
- },
- "MyWebGrocer": {
- "properties": [
- "mywebgrocer.com"
- ],
- "resources": [
- "mywebgrocer.com"
- ]
- },
- "Nanigans": {
- "properties": [
- "nanigans.com"
- ],
- "resources": [
- "nanigans.com"
- ]
- },
- "Narrative": {
- "properties": [
- "narrative.io"
- ],
- "resources": [
- "narrative.io"
- ]
- },
- "NativeAds": {
- "properties": [
- "nativeads.com"
- ],
- "resources": [
- "nativeads.com"
- ]
- },
- "Nativo": {
- "properties": [
- "nativo.com",
- "postrelease.com"
- ],
- "resources": [
- "nativo.com",
- "postrelease.com"
- ]
- },
- "Navegg": {
- "properties": [
- "navdmp.com",
- "navegg.com"
- ],
- "resources": [
- "navdmp.com",
- "navegg.com"
- ]
- },
- "NDN": {
- "properties": [
- "newsinc.com"
- ],
- "resources": [
- "newsinc.com"
- ]
- },
- "Negishim": {
- "properties": [
- "negishim.org"
- ],
- "resources": [
- "negishim.org"
- ]
- },
- "NeroHut": {
- "properties": [
- "nerohut.com"
- ],
- "resources": [
- "nerohut.com",
- "nhsrv.cf"
- ]
- },
- "NetAffiliation": {
- "properties": [
- "netaffiliation.com"
- ],
- "resources": [
- "netaffiliation.com"
- ]
- },
- "Net Applications": {
- "properties": [
- "netapplications.com"
- ],
- "resources": [
- "hitsprocessor.com",
- "netapplications.com"
- ]
- },
- "NetBina": {
- "properties": [
- "netbina.com"
- ],
- "resources": [
- "netbina.com"
- ]
- },
- "NetElixir": {
- "properties": [
- "adelixir.com",
- "netelixir.com"
- ],
- "resources": [
- "adelixir.com",
- "netelixir.com"
- ]
- },
- "Netmining": {
- "properties": [
- "netmining.com",
- "netmng.com"
- ],
- "resources": [
- "netmining.com",
- "netmng.com"
- ]
- },
- "Net-Results": {
- "properties": [
- "net-results.com",
- "nr7.us"
- ],
- "resources": [
- "cdnma.com",
- "net-results.com",
- "nr7.us"
- ]
- },
- "NetSeer": {
- "properties": [
- "netseer.com"
- ],
- "resources": [
- "netseer.com"
- ]
- },
- "NetShelter": {
- "properties": [
- "ziffdavistech.com"
- ],
- "resources": [
- "netshelter.com",
- "netshelter.net",
- "ziffdavistech.com"
- ]
- },
- "Neustar": {
- "properties": [
- "adadvisor.net",
- "home.neustar",
- "neustar.biz"
- ],
- "resources": [
- "adadvisor.net",
- "neustar.biz"
- ]
- },
- "New Relic": {
- "properties": [
- "newrelic.com"
- ],
- "resources": [
- "newrelic.com",
- "nr-data.net"
- ]
- },
- "NewsRight": {
- "properties": [
- "apnewsregistry.com",
- "newsright.com"
- ],
- "resources": [
- "apnewsregistry.com",
- "newsright.com"
- ]
- },
- "newtention": {
- "properties": [
- "newtention.de",
- "newtention.net",
- "newtentionassets.net"
- ],
- "resources": [
- "newtention.de",
- "newtention.net",
- "newtentionassets.net"
- ]
- },
- "Nexage": {
- "properties": [
- "nexage.com"
- ],
- "resources": [
- "nexage.com"
- ]
- },
- "Nextag": {
- "properties": [
- "nextag.com"
- ],
- "resources": [
- "nextag.com"
- ]
- },
- "NextPerformance": {
- "properties": [
- "nextperf.com",
- "nextperformance.com",
- "nxtck.com"
- ],
- "resources": [
- "nextperf.com",
- "nextperformance.com",
- "nxtck.com"
- ]
- },
- "NextSTAT": {
- "properties": [
- "nextstat.com"
- ],
- "resources": [
- "nextstat.com"
- ]
- },
- "Nielsen": {
- "properties": [
- "glanceguide.com",
- "imrworldwide.com",
- "imrworldwide.net",
- "nielsen.com"
- ],
- "resources": [
- "glanceguide.com",
- "imrworldwide.com",
- "imrworldwide.net",
- "nielsen.com"
- ]
- },
- "Ninua": {
- "properties": [
- "networkedblogs.com",
- "ninua.com"
- ],
- "resources": [
- "networkedblogs.com",
- "ninua.com"
- ]
- },
- "Nokta": {
- "properties": [
- "noktamedya.com",
- "virgul.com"
- ],
- "resources": [
- "noktamedya.com",
- "virgul.com"
- ]
- },
- "NowSpots": {
- "properties": [
- "nowspots.com"
- ],
- "resources": [
- "nowspots.com"
- ]
- },
- "nrelate": {
- "properties": [
- "nrelate.com"
- ],
- "resources": [
- "nrelate.com"
- ]
- },
- "NuDataSecurity": {
- "properties": [
- "nudatasecurity.com"
- ],
- "resources": [
- "nudatasecurity.com"
- ]
- },
- "Nuffnang": {
- "properties": [
- "nuffnang.com",
- "nuffnang.com.my",
- "www.nuffnang.com.my"
- ],
- "resources": [
- "nuffnang.com",
- "nuffnang.com.my",
- "www.nuffnang.com.my"
- ]
- },
- "nugg.ad": {
- "properties": [
- "nugg.ad"
- ],
- "resources": [
- "nugg.ad",
- "nuggad.net"
- ]
- },
- "nurago": {
- "properties": [
- "sensic.net"
- ],
- "resources": [
- "nurago.com",
- "nurago.de",
- "sensic.net"
- ]
- },
- "Oberon Media": {
- "properties": [
- "iwin.com"
- ],
- "resources": [
- "blaze.com",
- "iwin.com",
- "oberon-media.com"
- ]
- },
- "Observer": {
- "properties": [
- "observerapp.com"
- ],
- "resources": [
- "observerapp.com"
- ]
- },
- "Ohana Media": {
- "properties": [
- "adohana.com",
- "ohana-media.com",
- "ohanaqb.com"
- ],
- "resources": [
- "adohana.com",
- "ohana-media.com",
- "ohanaqb.com"
- ]
- },
- "Omnicom Group": {
- "properties": [
- "accuenmedia.com",
- "omnicomgroup.com"
- ],
- "resources": [
- "accuenmedia.com",
- "omnicomgroup.com",
- "p-td.com"
- ]
- },
- "onAd": {
- "properties": [
- "onad.eu"
- ],
- "resources": [
- "onad.eu"
- ]
- },
- "OnAudience": {
- "properties": [
- "behavioralengine.com",
- "onaudience.com"
- ],
- "resources": [
- "behavioralengine.com",
- "onaudience.com"
- ]
- },
- "Onclusive": {
- "properties": [
- "onclusive.com"
- ],
- "resources": [
- "airpr.com"
- ]
- },
- "OneAd": {
- "properties": [
- "onead.com.tw"
- ],
- "resources": [
- "guoshipartners.com",
- "onevision.com.tw"
- ]
- },
- "One iota": {
- "properties": [
- "itsoneiota.com",
- "oneiota.co.uk"
- ],
- "resources": [
- "itsoneiota.com",
- "oneiota.co.uk"
- ]
- },
- "OneStat": {
- "properties": [
- "onestat.com"
- ],
- "resources": [
- "onestat.com"
- ]
- },
- "Oneupweb": {
- "properties": [
- "oneupweb.com",
- "sodoit.com"
- ],
- "resources": [
- "oneupweb.com",
- "sodoit.com"
- ]
- },
- "OnlineMetrix": {
- "properties": [
- "online-metrix.net"
- ],
- "resources": [
- "online-metrix.net"
- ]
- },
- "Ooyala": {
- "properties": [
- "ooyala.com"
- ],
- "resources": [
- "oo4.com",
- "ooyala.com"
- ]
- },
- "Open New Media": {
- "properties": [
- "onm.de"
- ],
- "resources": [
- "onm.de"
- ]
- },
- "Openstat": {
- "properties": [
- "openstat.com"
- ],
- "resources": [
- "openstat.com",
- "openstat.ru",
- "spylog.com"
- ]
- },
- "Opentracker": {
- "properties": [
- "opentracker.net"
- ],
- "resources": [
- "opentracker.net"
- ]
- },
- "OpenX": {
- "properties": [
- "openx.com",
- "openx.net"
- ],
- "resources": [
- "liftdna.com",
- "openx.com",
- "openx.net",
- "openx.org",
- "openxenterprise.com",
- "servedbyopenx.com"
- ]
- },
- "Opera": {
- "properties": [
- "opera.com"
- ],
- "resources": [
- "mobiletheory.com",
- "opera.com"
- ]
- },
- "Opolen": {
- "properties": [
- "opolen.com.br"
- ],
- "resources": [
- "opolen.com.br"
- ]
- },
- "OPT": {
- "properties": [
- "www.opt.ne.jp"
- ],
- "resources": [
- "advg.jp",
- "opt.ne.jp",
- "p-advg.com",
- "www.opt.ne.jp"
- ]
- },
- "Optify": {
- "properties": [
- "optify.net"
- ],
- "resources": [
- "optify.net"
- ]
- },
- "Optimal": {
- "properties": [
- "bn.co"
- ],
- "resources": [
- "cpmadvisors.com",
- "cpmatic.com",
- "nprove.com",
- "optim.al",
- "orbengine.com",
- "xa.net"
- ]
- },
- "Optimizely": {
- "properties": [
- "optimizely.com"
- ],
- "resources": [
- "optimizely.com"
- ]
- },
- "OptimumResponse": {
- "properties": [
- "optimumresponse.com"
- ],
- "resources": [
- "optimumresponse.com"
- ]
- },
- "OptinMonster": {
- "properties": [
- "optinmonster.com",
- "optnmstr.com"
- ],
- "resources": [
- "optinmonster.com",
- "optnmstr.com"
- ]
- },
- "OptMD": {
- "properties": [
- "optmd.com"
- ],
- "resources": [
- "optmd.com"
- ]
- },
- "Oracle": {
- "properties": [
- "oracle.com"
- ],
- "resources": [
- "atgsvcs.com",
- "eloqua.com",
- "estara.com",
- "instantservice.com",
- "istrack.com",
- "maxymiser.com",
- "oracle.com"
- ]
- },
- "OrangeSoda": {
- "properties": [
- "orangesoda.com",
- "otracking.com"
- ],
- "resources": [
- "orangesoda.com",
- "otracking.com"
- ]
- },
- "Outbrain": {
- "properties": [
- "outbrain.com",
- "sphere.com"
- ],
- "resources": [
- "outbrain.com",
- "sphere.com",
- "visualrevenue.com"
- ]
- },
- "Out There Media": {
- "properties": [
- "out-there-media.com"
- ],
- "resources": [
- "out-there-media.com"
- ]
- },
- "Oversee.net": {
- "properties": [
- "dsnextgen.com",
- "oversee.net"
- ],
- "resources": [
- "dsnextgen.com",
- "oversee.net"
- ]
- },
- "ÖWA": {
- "properties": [
- "oewa.at"
- ],
- "resources": [
- "oewa.at",
- "oewabox.at"
- ]
- },
- "OwnerIQ": {
- "properties": [
- "owneriq.com",
- "owneriq.net"
- ],
- "resources": [
- "owneriq.com",
- "owneriq.net"
- ]
- },
- "OxaMedia": {
- "properties": [
- "oxamedia.com"
- ],
- "resources": [
- "adconnexa.com",
- "adsbwm.com",
- "oxamedia.com"
- ]
- },
- "PageFair": {
- "properties": [
- "pagefair.com",
- "pagefair.net"
- ],
- "resources": [
- "pagefair.com",
- "pagefair.net"
- ]
- },
- "Paid-To-Promote.net": {
- "properties": [
- "paid-to-promote.net"
- ],
- "resources": [
- "paid-to-promote.net"
- ]
- },
- "Papaya": {
- "properties": [
- "papayamobile.com"
- ],
- "resources": [
- "papayamobile.com"
- ]
- },
- "Pardot": {
- "properties": [
- "pardot.com"
- ],
- "resources": [
- "pardot.com"
- ]
- },
- "Parse.ly": {
- "properties": [
- "parsely.com"
- ],
- "resources": [
- "parsely.com"
- ]
- },
- "PayHit": {
- "properties": [
- "payhit.com"
- ],
- "resources": [
- "payhit.com"
- ]
- },
- "PaymentsMB": {
- "properties": [
- "paymentsmb.com"
- ],
- "resources": [
- "paymentsmb.com"
- ]
- },
- "Paypal": {
- "properties": [
- "paypal.com",
- "simility.com"
- ],
- "resources": [
- "paypal.com",
- "simility.com"
- ]
- },
- "Paypopup.com": {
- "properties": [
- "paypopup.com"
- ],
- "resources": [
- "lzjl.com",
- "paypopup.com"
- ]
- },
- "PebblePost": {
- "properties": [
- "pebblepost.com"
- ],
- "resources": [
- "pbbl.co"
- ]
- },
- "Peer39": {
- "properties": [
- "peer39.com",
- "peer39.net"
- ],
- "resources": [
- "peer39.com",
- "peer39.net"
- ]
- },
- "PeerFly": {
- "properties": [
- "peerfly.com"
- ],
- "resources": [
- "peerfly.com"
- ]
- },
- "Peerius": {
- "properties": [
- "peerius.com"
- ],
- "resources": [
- "peerius.com"
- ]
- },
- "Performancing": {
- "properties": [
- "performancing.com"
- ],
- "resources": [
- "performancing.com"
- ]
- },
- "PerimeterX": {
- "properties": [
- "perimeterx.com"
- ],
- "resources": [
- "perimeterx.com"
- ]
- },
- "PersianStat.com": {
- "properties": [
- "persianstat.com"
- ],
- "resources": [
- "persianstat.com"
- ]
- },
- "Pheedo": {
- "properties": [
- "pheedo.com"
- ],
- "resources": [
- "pheedo.com"
- ]
- },
- "Phonalytics": {
- "properties": [
- "phonalytics.com"
- ],
- "resources": [
- "phonalytics.com"
- ]
- },
- "phpMyVisites": {
- "properties": [
- "phpmyvisites.us"
- ],
- "resources": [
- "phpmyvisites.us"
- ]
- },
- "Pictela": {
- "properties": [
- "pictela.com",
- "pictela.net"
- ],
- "resources": [
- "pictela.com",
- "pictela.net"
- ]
- },
- "PinPoll": {
- "properties": [
- "pinpoll.com"
- ],
- "resources": [
- "pinpoll.com"
- ]
- },
- "Pinterest": {
- "properties": [
- "pinterest.at",
- "pinterest.ca",
- "pinterest.ch",
- "pinterest.cl",
- "pinterest.co.kr",
- "pinterest.co.uk",
- "pinterest.com",
- "pinterest.com.au",
- "pinterest.com.mx",
- "pinterest.de",
- "pinterest.dk",
- "pinterest.es",
- "pinterest.fr",
- "pinterest.ie",
- "pinterest.jp",
- "pinterest.nz",
- "pinterest.pt",
- "pinterest.se"
- ],
- "resources": [
- "pinimg.com",
- "pinterest.com"
- ]
- },
- "Piwik": {
- "properties": [
- "piwik.org"
- ],
- "resources": [
- "piwik.org"
- ]
- },
- "PixAnalytics": {
- "properties": [
- "pixanalytics.com"
- ],
- "resources": [
- "pixanalytics.com"
- ]
- },
- "Pixel.sg": {
- "properties": [
- "pixel.sg"
- ],
- "resources": [
- "pixel.sg"
- ]
- },
- "Piximedia": {
- "properties": [
- "piximedia.com"
- ],
- "resources": [
- "piximedia.com"
- ]
- },
- "Pixlee": {
- "properties": [
- "pixlee.com"
- ],
- "resources": [
- "pixlee.com"
- ]
- },
- "PLATFORM ONE": {
- "properties": [
- "platform-one.co.jp",
- "www.platform-one.co.jp"
- ],
- "resources": [
- "platform-one.co.jp",
- "www.platform-one.co.jp"
- ]
- },
- "plista": {
- "properties": [
- "plista.com"
- ],
- "resources": [
- "plista.com"
- ]
- },
- "PocketCents": {
- "properties": [
- "pocketcents.com"
- ],
- "resources": [
- "pocketcents.com"
- ]
- },
- "Polar Mobile": {
- "properties": [
- "mediavoice.com"
- ],
- "resources": [
- "mediavoice.com",
- "polarmobile.com"
- ]
- },
- "Politads": {
- "properties": [
- "politads.com"
- ],
- "resources": [
- "politads.com"
- ]
- },
- "Polymorph": {
- "properties": [
- "getpolymorph.com"
- ],
- "resources": [
- "adsnative.com",
- "getpolymorph.com"
- ]
- },
- "Pontiflex": {
- "properties": [
- "pontiflex.com"
- ],
- "resources": [
- "pontiflex.com"
- ]
- },
- "Poool": {
- "properties": [
- "poool.fr"
- ],
- "resources": [
- "poool.fr"
- ]
- },
- "PopAds": {
- "properties": [
- "popads.net"
- ],
- "resources": [
- "popads.net",
- "popadscdn.net"
- ]
- },
- "PopRule": {
- "properties": [
- "gocampaignlive.com",
- "poprule.com"
- ],
- "resources": [
- "gocampaignlive.com",
- "poprule.com"
- ]
- },
- "Popunder.ru": {
- "properties": [
- "popunder.ru"
- ],
- "resources": [
- "popunder.ru"
- ]
- },
- "Po.st": {
- "properties": [
- "po.st"
- ],
- "resources": [
- "po.st"
- ]
- },
- "Powerlinks": {
- "properties": [
- "powerlinks.com"
- ],
- "resources": [
- "powerlinks.com"
- ]
- },
- "PPCProtect": {
- "properties": [
- "ppcprotect.com"
- ],
- "resources": [
- "ppcprotect.com"
- ]
- },
- "PrecisionClick": {
- "properties": [
- "precisionclick.com"
- ],
- "resources": [
- "precisionclick.com"
- ]
- },
- "PredictAd": {
- "properties": [
- "predictad.com"
- ],
- "resources": [
- "predictad.com"
- ]
- },
- "Pressflex": {
- "properties": [
- "blogads.com",
- "pressflex.com"
- ],
- "resources": [
- "blogads.com",
- "pressflex.com"
- ]
- },
- "Prime Visibility": {
- "properties": [
- "primevisibility.com"
- ],
- "resources": [
- "adcde.com",
- "addlvr.com",
- "adonnetwork.com",
- "adonnetwork.net",
- "adtrgt.com",
- "bannertgt.com",
- "cptgt.com",
- "cpvfeed.com",
- "cpvtgt.com",
- "dashboardad.net",
- "popcde.com",
- "primevisibility.com",
- "sdfje.com",
- "urtbk.com"
- ]
- },
- "Primis": {
- "properties": [
- "primis.tech"
- ],
- "resources": [
- "sekindo.com"
- ]
- },
- "PrismApp": {
- "properties": [
- "prismapp.io"
- ],
- "resources": [
- "prismapp.io"
- ]
- },
- "Proclivity": {
- "properties": [
- "proclivitysystems.com",
- "pswec.com"
- ],
- "resources": [
- "proclivitymedia.com",
- "proclivitysystems.com",
- "pswec.com"
- ]
- },
- "Project Wonderful": {
- "properties": [
- "projectwonderful.com"
- ],
- "resources": [
- "projectwonderful.com"
- ]
- },
- "PrometheusIntelligenceTechnology": {
- "properties": [
- "prometheusintelligencetechnology.com"
- ],
- "resources": [
- "prometheusintelligencetechnology.com"
- ]
- },
- "Pronunciator": {
- "properties": [
- "pronunciator.com",
- "visitorville.com"
- ],
- "resources": [
- "pronunciator.com",
- "visitorville.com"
- ]
- },
- "Propeller Ads": {
- "properties": [
- "propellerads.com"
- ],
- "resources": [
- "propellerads.com"
- ]
- },
- "Prosperent": {
- "properties": [
- "prosperent.com"
- ],
- "resources": [
- "prosperent.com"
- ]
- },
- "Protected Media": {
- "properties": [
- "ad-score.com",
- "protected.media"
- ],
- "resources": [
- "ad-score.com",
- "protected.media"
- ]
- },
- "Provers": {
- "properties": [
- "provers.pro"
- ],
- "resources": [
- "provers.pro"
- ]
- },
- "Psonstrentie": {
- "properties": [
- "psonstrentie.info"
- ],
- "resources": [
- "psonstrentie.info"
- ]
- },
- "Public-Idées": {
- "properties": [
- "publicidees.com"
- ],
- "resources": [
- "publicidees.com"
- ]
- },
- "Publishers Clearing House": {
- "properties": [
- "pch.com"
- ],
- "resources": [
- "pch.com"
- ]
- },
- "PubMatic": {
- "properties": [
- "pubmatic.com"
- ],
- "resources": [
- "pubmatic.com",
- "revinet.com"
- ]
- },
- "PulsePoint": {
- "properties": [
- "pulsepoint.com"
- ],
- "resources": [
- "pulsepoint.com"
- ]
- },
- "PunchTab": {
- "properties": [
- "punchtab.com"
- ],
- "resources": [
- "punchtab.com"
- ]
- },
- "quadrantOne": {
- "properties": [
- "quadrantone.com"
- ],
- "resources": [
- "quadrantone.com"
- ]
- },
- "Quake Marketing": {
- "properties": [
- "quakemarketing.com"
- ],
- "resources": [
- "quakemarketing.com"
- ]
- },
- "Qualaroo": {
- "properties": [
- "qualaroo.com"
- ],
- "resources": [
- "kissinsights.com",
- "qualaroo.com"
- ]
- },
- "Quantcast": {
- "properties": [
- "quantcast.com",
- "quantserve.com"
- ],
- "resources": [
- "quantcast.com",
- "quantserve.com"
- ]
- },
- "QuantumAdvertising": {
- "properties": [
- "quantum-advertising.com"
- ],
- "resources": [
- "quantum-advertising.com"
- ]
- },
- "QuinStreet": {
- "properties": [
- "quinstreet.com",
- "thecounter.com"
- ],
- "resources": [
- "qnsr.com",
- "qsstats.com",
- "quinstreet.com",
- "thecounter.com"
- ]
- },
- "Quintelligence": {
- "properties": [
- "quintelligence.com"
- ],
- "resources": [
- "quintelligence.com"
- ]
- },
- "QUISMA": {
- "properties": [
- "quisma.com"
- ],
- "resources": [
- "iaded.com",
- "quisma.com",
- "quismatch.com",
- "xaded.com",
- "xmladed.com"
- ]
- },
- "RadarURL": {
- "properties": [
- "radarurl.com"
- ],
- "resources": [
- "radarurl.com"
- ]
- },
- "Radial": {
- "properties": [
- "radial.com"
- ],
- "resources": [
- "gsicommerce.com",
- "gsimedia.net"
- ]
- },
- "Radiate Media": {
- "properties": [
- "gtnetwork.com.au",
- "solesolution.com"
- ],
- "resources": [
- "gtnetwork.com.au",
- "matchbin.com",
- "radiatemedia.com",
- "solesolution.com"
- ]
- },
- "RadiumOne": {
- "properties": [
- "radiumone.com"
- ],
- "resources": [
- "gwallet.com",
- "radiumone.com"
- ]
- },
- "Radius Marketing": {
- "properties": [
- "radiusmarketing.com"
- ],
- "resources": [
- "radiusmarketing.com"
- ]
- },
- "Rambler": {
- "properties": [
- "rambler.ru"
- ],
- "resources": [
- "rambler.ru"
- ]
- },
- "Rapleaf": {
- "properties": [
- "rapleaf.com",
- "rlcdn.com"
- ],
- "resources": [
- "rapleaf.com",
- "rlcdn.com"
- ]
- },
- "ReachLocal": {
- "properties": [
- "reachlocal.com",
- "rlcdn.net"
- ],
- "resources": [
- "reachlocal.com",
- "rlcdn.net"
- ]
- },
- "React2Media": {
- "properties": [
- "react2media.com"
- ],
- "resources": [
- "react2media.com"
- ]
- },
- "reddit": {
- "properties": [
- "reddit.com"
- ],
- "resources": [
- "reddit.com"
- ]
- },
- "Redux Media": {
- "properties": [
- "reduxmedia.com"
- ],
- "resources": [
- "reduxmedia.com"
- ]
- },
- "Rekko": {
- "properties": [
- "convertglobal.com",
- "rekko.com"
- ],
- "resources": [
- "convertglobal.com",
- "rekko.com"
- ]
- },
- "Reklamport": {
- "properties": [
- "reklamport.com"
- ],
- "resources": [
- "reklamport.com"
- ]
- },
- "Reklam Store": {
- "properties": [
- "reklamstore.com"
- ],
- "resources": [
- "reklamstore.com"
- ]
- },
- "Reklamz": {
- "properties": [
- "reklamz.com"
- ],
- "resources": [
- "reklamz.com"
- ]
- },
- "Relevad": {
- "properties": [
- "relestar.com",
- "relevad.com"
- ],
- "resources": [
- "relestar.com",
- "relevad.com"
- ]
- },
- "Renegade Internet": {
- "properties": [
- "advertserve.com",
- "renegadeinternet.com"
- ],
- "resources": [
- "advertserve.com",
- "renegadeinternet.com"
- ]
- },
- "Reporo": {
- "properties": [
- "reporo.com"
- ],
- "resources": [
- "buzzcity.com"
- ]
- },
- "Research Now": {
- "properties": [
- "researchnow.com",
- "valuedopinions.co.uk"
- ],
- "resources": [
- "researchnow.com",
- "valuedopinions.co.uk"
- ]
- },
- "ResolutionMedia": {
- "properties": [
- "nonstoppartner.net"
- ],
- "resources": [
- "nonstoppartner.net"
- ]
- },
- "Resolution Media": {
- "properties": [
- "resolutionmedia.com"
- ],
- "resources": [
- "resolutionmedia.com"
- ]
- },
- "Resonate": {
- "properties": [
- "resonateinsights.com",
- "resonatenetworks.com"
- ],
- "resources": [
- "reson8.com",
- "resonateinsights.com",
- "resonatenetworks.com"
- ]
- },
- "Responsys": {
- "properties": [
- "responsys.com"
- ],
- "resources": [
- "responsys.com"
- ]
- },
- "Retail Automata": {
- "properties": [
- "retailautomata.com"
- ],
- "resources": [
- "retailautomata.com"
- ]
- },
- "ReTargeter": {
- "properties": [
- "retargeter.com"
- ],
- "resources": [
- "retargeter.com"
- ]
- },
- "Retirement Living": {
- "properties": [
- "blvdstatus.com",
- "retirement-living.com"
- ],
- "resources": [
- "blvdstatus.com",
- "retirement-living.com"
- ]
- },
- "RevContent": {
- "properties": [
- "revcontent.com"
- ],
- "resources": [
- "revcontent.com"
- ]
- },
- "RevenueMax": {
- "properties": [
- "revenuemax.de"
- ],
- "resources": [
- "revenuemax.de"
- ]
- },
- "Revtracks": {
- "properties": [
- "revtrax.com"
- ],
- "resources": [
- "revtrax.com"
- ]
- },
- "Rhythm": {
- "properties": [
- "rhythmone.com"
- ],
- "resources": [
- "1rx.io",
- "rhythmnewmedia.com",
- "rhythmone.com",
- "rhythmxchange.com",
- "rnmd.net"
- ]
- },
- "RichAudience": {
- "properties": [
- "richaudience.com"
- ],
- "resources": [
- "richaudience.com"
- ]
- },
- "RichRelevance": {
- "properties": [
- "richrelevance.com"
- ],
- "resources": [
- "richrelevance.com"
- ]
- },
- "RightAction": {
- "properties": [
- "rightaction.com"
- ],
- "resources": [
- "rightaction.com"
- ]
- },
- "RIM": {
- "properties": [
- "global.blackberry.com",
- "laptopverge.com"
- ],
- "resources": [
- "global.blackberry.com",
- "laptopverge.com",
- "rim.com",
- "scoreloop.com"
- ]
- },
- "Ringier": {
- "properties": [
- "ringier.cz"
- ],
- "resources": [
- "ringier.cz"
- ]
- },
- "RMBN": {
- "properties": [
- "traforet.com"
- ],
- "resources": [
- "rmbn.net",
- "rmbn.ru",
- "traforet.com"
- ]
- },
- "RMM": {
- "properties": [
- "rmmonline.com"
- ],
- "resources": [
- "rmmonline.com"
- ]
- },
- "Rocket Fuel": {
- "properties": [
- "rfihub.com",
- "rfihub.net",
- "rocketfuel.com"
- ],
- "resources": [
- "rfihub.com",
- "rfihub.net",
- "rocketfuel.com",
- "ru4.com",
- "xplusone.com"
- ]
- },
- "Rollick": {
- "properties": [
- "gorollick.com"
- ],
- "resources": [
- "rollick.io"
- ]
- },
- "Rovion": {
- "properties": [
- "rovion.com"
- ],
- "resources": [
- "rovion.com"
- ]
- },
- "Roxr": {
- "properties": [
- "clicky.com",
- "roxr.net"
- ],
- "resources": [
- "clicky.com",
- "getclicky.com",
- "roxr.net",
- "staticstuff.net"
- ]
- },
- "rtk": {
- "properties": [
- "rtk.io"
- ],
- "resources": [
- "rtk.io"
- ]
- },
- "RubiconProject": {
- "properties": [
- "rubiconproject.com"
- ],
- "resources": [
- "adsbyisocket.com",
- "isocket.com",
- "rubiconproject.com"
- ]
- },
- "RunAds": {
- "properties": [
- "runads.com"
- ],
- "resources": [
- "runads.com",
- "rundsp.com"
- ]
- },
- "RuTarget": {
- "properties": [
- "rutarget.ru"
- ],
- "resources": [
- "rutarget.ru"
- ]
- },
- "Sabavision": {
- "properties": [
- "sabavision.com"
- ],
- "resources": [
- "sabavision.com"
- ]
- },
- "Sabre": {
- "properties": [
- "reztrack.com",
- "sabre.com",
- "sabrehospitality.com"
- ],
- "resources": [
- "reztrack.com",
- "sabre.com",
- "sabrehospitality.com"
- ]
- },
- "Safecount": {
- "properties": [
- "safecount.net"
- ],
- "resources": [
- "dl-rms.com",
- "dlqm.net",
- "questionmarket.com",
- "safecount.net"
- ]
- },
- "SageMetrics": {
- "properties": [
- "sagemetrics.com"
- ],
- "resources": [
- "sageanalyst.net",
- "sagemetrics.com"
- ]
- },
- "Salesforce.com": {
- "properties": [
- "force.com",
- "salesforce.com",
- "trailblazer.me"
- ],
- "resources": [
- "documentforce.com",
- "force.com",
- "forcesslreports.com",
- "forceusercontent.com",
- "lightning.com",
- "salesforce-communities.com",
- "salesforce-hub.com",
- "salesforce.com",
- "salesforceliveagent.com",
- "trailblazer.me",
- "visualforce.com"
- ]
- },
- "Salesintelligence": {
- "properties": [
- "salesintelligence.pl"
- ],
- "resources": [
- "plugin.management"
- ]
- },
- "Samurai Factory": {
- "properties": [
- "samurai-factory.jp",
- "shinobi.jp"
- ],
- "resources": [
- "samurai-factory.jp",
- "shinobi.jp"
- ]
- },
- "SAP": {
- "properties": [
- "sap.com"
- ],
- "resources": [
- "sap.com",
- "seewhy.com"
- ]
- },
- "Sapient": {
- "properties": [
- "bridgetrack.com",
- "sapient.com"
- ],
- "resources": [
- "bridgetrack.com",
- "sapient.com"
- ]
- },
- "SAS": {
- "properties": [
- "aimatch.com",
- "sas.com"
- ],
- "resources": [
- "aimatch.com",
- "sas.com"
- ]
- },
- "SAY": {
- "properties": [
- "saymedia.com",
- "typepad.com",
- "videoegg.com"
- ],
- "resources": [
- "saymedia.com",
- "typepad.com",
- "videoegg.com"
- ]
- },
- "Scandinavian AdNetworks": {
- "properties": [
- "scandinavianadnetworks.com"
- ],
- "resources": [
- "scandinavianadnetworks.com"
- ]
- },
- "ScribeFire": {
- "properties": [
- "scribefire.com"
- ],
- "resources": [
- "scribefire.com"
- ]
- },
- "Scribol": {
- "properties": [
- "scribol.com"
- ],
- "resources": [
- "scribol.com"
- ]
- },
- "SearchForce": {
- "properties": [
- "searchforce.com",
- "searchforce.net"
- ],
- "resources": [
- "searchforce.com",
- "searchforce.net"
- ]
- },
- "Seevast": {
- "properties": [
- "kanoodle.com"
- ],
- "resources": [
- "kanoodle.com",
- "pulse360.com",
- "seevast.com",
- "syndigonetworks.com"
- ]
- },
- "SeeVolution": {
- "properties": [
- "seevolution.com",
- "svlu.net"
- ],
- "resources": [
- "seevolution.com",
- "svlu.net"
- ]
- },
- "Segment.io": {
- "properties": [
- "segment.io"
- ],
- "resources": [
- "segment.io"
- ]
- },
- "Selectable Media": {
- "properties": [
- "selectablemedia.com"
- ],
- "resources": [
- "nabbr.com",
- "selectablemedia.com"
- ]
- },
- "Semantiqo": {
- "properties": [
- "semantiqo.com"
- ],
- "resources": [
- "semantiqo.com"
- ]
- },
- "Semasio": {
- "properties": [
- "semasio.com"
- ],
- "resources": [
- "semasio.com",
- "semasio.net"
- ]
- },
- "SendPulse": {
- "properties": [
- "sendpulse.com"
- ],
- "resources": [
- "sendpulse.com"
- ]
- },
- "Service4refresh": {
- "properties": [
- "service4refresh.info"
- ],
- "resources": [
- "service4refresh.info"
- ]
- },
- "SessionCam": {
- "properties": [
- "sessioncam.com"
- ],
- "resources": [
- "sessioncam.com"
- ]
- },
- "SevenAds": {
- "properties": [
- "sevenads.net"
- ],
- "resources": [
- "sevenads.net"
- ]
- },
- "SexInYourCity": {
- "properties": [
- "sexinyourcity.com"
- ],
- "resources": [
- "sexinyourcity.com"
- ]
- },
- "ShaftTraffic": {
- "properties": [
- "shafttraffic.com"
- ],
- "resources": [
- "libertystmedia.com",
- "shafttraffic.com"
- ]
- },
- "Shareaholic": {
- "properties": [
- "shareaholic.com"
- ],
- "resources": [
- "shareaholic.com"
- ]
- },
- "ShareASale": {
- "properties": [
- "shareasale.com"
- ],
- "resources": [
- "shareasale.com"
- ]
- },
- "ShareThis": {
- "properties": [
- "sharethis.com"
- ],
- "resources": [
- "sharethis.com"
- ]
- },
- "Sharethrough": {
- "properties": [
- "sharethrough.com"
- ],
- "resources": [
- "sharethrough.com"
- ]
- },
- "ShinyStat": {
- "properties": [
- "shinystat.com"
- ],
- "resources": [
- "shinystat.com"
- ]
- },
- "Shopzilla": {
- "properties": [
- "shopzilla.com"
- ],
- "resources": [
- "shopzilla.com"
- ]
- },
- "Shortest": {
- "properties": [
- "shorte.st"
- ],
- "resources": [
- "shorte.st"
- ]
- },
- "SiftScience": {
- "properties": [
- "sift.com"
- ],
- "resources": [
- "siftscience.com"
- ]
- },
- "Signifyd": {
- "properties": [
- "signifyd.com"
- ],
- "resources": [
- "signifyd.com"
- ]
- },
- "Silverpop": {
- "properties": [
- "mkt51.net",
- "silverpop.com"
- ],
- "resources": [
- "mkt51.net",
- "pages05.net",
- "silverpop.com",
- "vtrenz.net"
- ]
- },
- "Simpli.fi": {
- "properties": [
- "simpli.fi"
- ],
- "resources": [
- "simpli.fi"
- ]
- },
- "SiteScout": {
- "properties": [
- "sitescout.com"
- ],
- "resources": [
- "sitescout.com"
- ]
- },
- "Six Apart": {
- "properties": [
- "movabletype.com",
- "sixapart.com"
- ],
- "resources": [
- "movabletype.com",
- "sixapart.com"
- ]
- },
- "Skimlinks": {
- "properties": [
- "skimlinks.com",
- "skimresources.com"
- ],
- "resources": [
- "skimlinks.com",
- "skimresources.com"
- ]
- },
- "Skribit": {
- "properties": [
- "paulstamatiou.com"
- ],
- "resources": [
- "paulstamatiou.com",
- "skribit.com"
- ]
- },
- "Skupe Net": {
- "properties": [
- "adcentriconline.com",
- "skupenet.com"
- ],
- "resources": [
- "adcentriconline.com",
- "skupenet.com"
- ]
- },
- "Smaato": {
- "properties": [
- "smaato.com"
- ],
- "resources": [
- "smaato.com"
- ]
- },
- "SmartAdServer": {
- "properties": [
- "smartadserver.com"
- ],
- "resources": [
- "smartadserver.com"
- ]
- },
- "Smartlook": {
- "properties": [
- "smartlook.com"
- ],
- "resources": [
- "smartlook.com"
- ]
- },
- "SmartyAds": {
- "properties": [
- "smartyads.com"
- ],
- "resources": [
- "smartyads.com"
- ]
- },
- "Smi": {
- "properties": [
- "24smi.net"
- ],
- "resources": [
- "24smi.net"
- ]
- },
- "Smiley Media": {
- "properties": [
- "smileymedia.com"
- ],
- "resources": [
- "smileymedia.com"
- ]
- },
- "Smowtion": {
- "properties": [
- "smowtion.com"
- ],
- "resources": [
- "smowtion.com"
- ]
- },
- "Snap": {
- "properties": [
- "snap.com"
- ],
- "resources": [
- "snap.com"
- ]
- },
- "SnapEngage": {
- "properties": [
- "snapengage.com"
- ],
- "resources": [
- "snapengage.com"
- ]
- },
- "Snoobi": {
- "properties": [
- "snoobi.fi"
- ],
- "resources": [
- "snoobi.com",
- "snoobi.fi"
- ]
- },
- "SocialChorus": {
- "properties": [
- "socialchorus.com"
- ],
- "resources": [
- "halogenmediagroup.com",
- "halogennetwork.com",
- "socialchorus.com"
- ]
- },
- "SocialInterface": {
- "properties": [
- "socialinterface.com"
- ],
- "resources": [
- "ratevoice.com",
- "socialinterface.com"
- ]
- },
- "SocialTwist": {
- "properties": [
- "socialtwist.com"
- ],
- "resources": [
- "socialtwist.com"
- ]
- },
- "sociomantic labs": {
- "properties": [
- "sociomantic.com"
- ],
- "resources": [
- "sociomantic.com"
- ]
- },
- "Socital": {
- "properties": [
- "socital.com"
- ],
- "resources": [
- "socital.com"
- ]
- },
- "Sojern": {
- "properties": [
- "sojern.com"
- ],
- "resources": [
- "sojern.com"
- ]
- },
- "SomoAudience": {
- "properties": [
- "somoaudience.com"
- ],
- "resources": [
- "somoaudience.com"
- ]
- },
- "Sonobi": {
- "properties": [
- "sonobi.com"
- ],
- "resources": [
- "sonobi.com"
- ]
- },
- "sophus3": {
- "properties": [
- "sophus3.com"
- ],
- "resources": [
- "sophus3.co.uk",
- "sophus3.com"
- ]
- },
- "Sortable": {
- "properties": [
- "sortable.com"
- ],
- "resources": [
- "deployads.com"
- ]
- },
- "Sourcepoint": {
- "properties": [
- "sourcepoint.com"
- ],
- "resources": [
- "summerhamster.com"
- ]
- },
- "Sovrn": {
- "properties": [
- "sovrn.com"
- ],
- "resources": [
- "sovrn.com"
- ]
- },
- "Space Chimp Media": {
- "properties": [
- "spacechimpmedia.com"
- ],
- "resources": [
- "spacechimpmedia.com"
- ]
- },
- "SpareChange": {
- "properties": [
- "sparechange.io"
- ],
- "resources": [
- "sparechange.io"
- ]
- },
- "Sparklit": {
- "properties": [
- "adbutler.com",
- "sparklit.com"
- ],
- "resources": [
- "adbutler.com",
- "sparklit.com"
- ]
- },
- "Spark Studios": {
- "properties": [
- "sparkstudios.com"
- ],
- "resources": [
- "sparkstudios.com"
- ]
- },
- "Specific Media": {
- "properties": [
- "sitemeter.com",
- "specificmedia.com"
- ],
- "resources": [
- "adviva.co.uk",
- "adviva.net",
- "sitemeter.com",
- "specificclick.net",
- "specificmedia.com"
- ]
- },
- "Spectate": {
- "properties": [
- "spectate.com"
- ],
- "resources": [
- "spectate.com"
- ]
- },
- "Sponge": {
- "properties": [
- "spongegroup.com"
- ],
- "resources": [
- "spongegroup.com"
- ]
- },
- "Spongecell": {
- "properties": [
- "spongecell.com"
- ],
- "resources": [
- "spongecell.com"
- ]
- },
- "SponsorAds": {
- "properties": [
- "sponsorads.de"
- ],
- "resources": [
- "sponsorads.de"
- ]
- },
- "Spot200": {
- "properties": [
- "spot200.com"
- ],
- "resources": [
- "spot200.com"
- ]
- },
- "SpotX": {
- "properties": [
- "spotx.tv"
- ],
- "resources": [
- "spotx.tv"
- ]
- },
- "SpotXchange": {
- "properties": [
- "spotxchange.com"
- ],
- "resources": [
- "spotxcdn.com",
- "spotxchange.com"
- ]
- },
- "Spring Metrics": {
- "properties": [
- "springmetrics.com"
- ],
- "resources": [
- "springmetrics.com"
- ]
- },
- "SpringServe": {
- "properties": [
- "springserve.com"
- ],
- "resources": [
- "springserve.com"
- ]
- },
- "Sputnik.ru": {
- "properties": [
- "sputnik.ru"
- ],
- "resources": [
- "sputnik.ru"
- ]
- },
- "StackAdapt": {
- "properties": [
- "stackadapt.com"
- ],
- "resources": [
- "stackadapt.com"
- ]
- },
- "StackTrack": {
- "properties": [
- "stat-track.com"
- ],
- "resources": [
- "stat-track.com"
- ]
- },
- "StarGames": {
- "properties": [
- "stargames.net",
- "stargamesaffiliate.com"
- ],
- "resources": [
- "stargames.net",
- "stargamesaffiliate.com"
- ]
- },
- "stat4u": {
- "properties": [
- "4u.pl"
- ],
- "resources": [
- "4u.pl"
- ]
- },
- "StatCounter": {
- "properties": [
- "statcounter.com"
- ],
- "resources": [
- "statcounter.com"
- ]
- },
- "Statisfy": {
- "properties": [
- "statisfy.net"
- ],
- "resources": [
- "statisfy.net"
- ]
- },
- "STATSIT": {
- "properties": [
- "statsit.com"
- ],
- "resources": [
- "statsit.com"
- ]
- },
- "SteelHouse": {
- "properties": [
- "steelhouse.com",
- "steelhousemedia.com"
- ],
- "resources": [
- "steelhouse.com",
- "steelhousemedia.com"
- ]
- },
- "Storeland": {
- "properties": [
- "storeland.ru"
- ],
- "resources": [
- "storeland.ru"
- ]
- },
- "Storygize": {
- "properties": [
- "storygize.com"
- ],
- "resources": [
- "storygize.com",
- "storygize.net"
- ]
- },
- "Stratigent": {
- "properties": [
- "stratigent.com"
- ],
- "resources": [
- "stratigent.com"
- ]
- },
- "Streamray": {
- "properties": [
- "cams.com",
- "streamray.com"
- ],
- "resources": [
- "cams.com",
- "streamray.com"
- ]
- },
- "StrikeAd": {
- "properties": [
- "strikead.com"
- ],
- "resources": [
- "strikead.com"
- ]
- },
- "Stripe": {
- "properties": [
- "stripe.com"
- ],
- "resources": [
- "stripe.network"
- ]
- },
- "StrongMail": {
- "properties": [
- "strongmail.com"
- ],
- "resources": [
- "popularmedia.com",
- "strongmail.com"
- ]
- },
- "Struq": {
- "properties": [
- "struq.com"
- ],
- "resources": [
- "struq.com"
- ]
- },
- "StumbleUpon": {
- "properties": [
- "stumbleupon.com"
- ],
- "resources": [
- "stumble-upon.com",
- "stumbleupon.com"
- ]
- },
- "Sublime Skinz": {
- "properties": [
- "sublime.xyz"
- ],
- "resources": [
- "ayads.co",
- "sublime.xyz"
- ]
- },
- "Suite 66": {
- "properties": [
- "suite66.com"
- ],
- "resources": [
- "suite66.com"
- ]
- },
- "Summit": {
- "properties": [
- "summitmedia.co.uk",
- "www.summit.co.uk"
- ],
- "resources": [
- "summitmedia.co.uk",
- "www.summit.co.uk"
- ]
- },
- "Superfish": {
- "properties": [
- "superfish.com"
- ],
- "resources": [
- "superfish.com"
- ]
- },
- "SupersonicAds": {
- "properties": [
- "supersonicads.com"
- ],
- "resources": [
- "supersonicads.com"
- ]
- },
- "Survata": {
- "properties": [
- "survata.com"
- ],
- "resources": [
- "survata.com"
- ]
- },
- "SwiftMining": {
- "properties": [
- "swiftmining.win"
- ],
- "resources": [
- "swiftmining.win"
- ]
- },
- "Switch": {
- "properties": [
- "switchadhub.com",
- "switchconcepts.com"
- ],
- "resources": [
- "switchadhub.com",
- "switchads.com",
- "switchconcepts.co.uk",
- "switchconcepts.com"
- ]
- },
- "Swoop": {
- "properties": [
- "swoop.com"
- ],
- "resources": [
- "swoop.com"
- ]
- },
- "SymphonyAM": {
- "properties": [
- "factortg.com"
- ],
- "resources": [
- "factortg.com"
- ]
- },
- "Synacor": {
- "properties": [
- "synacor.com"
- ],
- "resources": [
- "synacor.com"
- ]
- },
- "Syncapse": {
- "properties": [
- "clickable.net",
- "syncapse.com"
- ],
- "resources": [
- "clickable.net",
- "syncapse.com"
- ]
- },
- "Syrup Ad": {
- "properties": [
- "adotsolution.com"
- ],
- "resources": [
- "adotsolution.com"
- ]
- },
- "Taboola": {
- "properties": [
- "taboola.com"
- ],
- "resources": [
- "perfectmarket.com",
- "taboola.com"
- ]
- },
- "Tailsweep": {
- "properties": [
- "tailsweep.com"
- ],
- "resources": [
- "tailsweep.com"
- ]
- },
- "Taleria": {
- "properties": [
- "telaria.com"
- ],
- "resources": [
- "freeskreen.com"
- ]
- },
- "Tapad": {
- "properties": [
- "tapad.com"
- ],
- "resources": [
- "tapad.com"
- ]
- },
- "Tapgage": {
- "properties": [
- "bizmey.com",
- "tapgage.com"
- ],
- "resources": [
- "bizmey.com",
- "tapgage.com"
- ]
- },
- "TapIt!": {
- "properties": [
- "tapit.com"
- ],
- "resources": [
- "tapit.com"
- ]
- },
- "Tap.me": {
- "properties": [
- "tap.me"
- ],
- "resources": [
- "tap.me"
- ]
- },
- "Targetix": {
- "properties": [
- "targetix.net"
- ],
- "resources": [
- "targetix.net"
- ]
- },
- "Tatto Media": {
- "properties": [
- "tattomedia.com"
- ],
- "resources": [
- "quicknoodles.com",
- "tattomedia.com"
- ]
- },
- "Teadma": {
- "properties": [
- "teadma.com"
- ],
- "resources": [
- "teadma.com"
- ]
- },
- "Teads.tv": {
- "properties": [
- "teads.tv"
- ],
- "resources": [
- "teads.tv"
- ]
- },
- "Tealium": {
- "properties": [
- "tealium.com"
- ],
- "resources": [
- "tealiumiq.com"
- ]
- },
- "Technorati": {
- "properties": [
- "technorati.com"
- ],
- "resources": [
- "technorati.com",
- "technoratimedia.com"
- ]
- },
- "TechSolutions": {
- "properties": [
- "techsolutions.com.tw"
- ],
- "resources": [
- "techsolutions.com.tw"
- ]
- },
- "TellApart": {
- "properties": [
- "tellapart.com",
- "tellapt.com"
- ],
- "resources": [
- "tellapart.com",
- "tellapt.com"
- ]
- },
- "Telstra": {
- "properties": [
- "sensis.com.au",
- "sensisdata.com.au",
- "telstra.com.au"
- ],
- "resources": [
- "sensis.com.au",
- "sensisdata.com.au",
- "sensisdigitalmedia.com.au",
- "telstra.com.au"
- ]
- },
- "TENSQUARE": {
- "properties": [
- "tensquare.com"
- ],
- "resources": [
- "tensquare.com"
- ]
- },
- "Terra": {
- "properties": [
- "eztargetmedia.com",
- "terra.com.br",
- "www.terra.com.br"
- ],
- "resources": [
- "eztargetmedia.com",
- "terra.com.br",
- "www.terra.com.br"
- ]
- },
- "The Heron Partnership": {
- "properties": [
- "marinsm.com"
- ],
- "resources": [
- "heronpartners.com.au",
- "marinsm.com",
- "marinsoftware.com"
- ]
- },
- "The Numa Group": {
- "properties": [
- "hittail.com",
- "thenumagroup.com"
- ],
- "resources": [
- "hittail.com",
- "thenumagroup.com"
- ]
- },
- "The Search Agency": {
- "properties": [
- "thesearchagency.com"
- ],
- "resources": [
- "thesearchagency.com",
- "thesearchagency.net"
- ]
- },
- "The Trade Desk": {
- "properties": [
- "thetradedesk.com"
- ],
- "resources": [
- "adsrvr.org",
- "thetradedesk.com"
- ]
- },
- "ThingLink": {
- "properties": [
- "thinglink.com"
- ],
- "resources": [
- "thinglink.com"
- ]
- },
- "Think Realtime": {
- "properties": [
- "echosearch.com",
- "thinkrealtime.com"
- ],
- "resources": [
- "echosearch.com",
- "esm1.net",
- "thinkrealtime.com"
- ]
- },
- "Thismoment": {
- "properties": [
- "thismoment.com"
- ],
- "resources": [
- "thismoment.com"
- ]
- },
- "Thummit": {
- "properties": [
- "thummit.com"
- ],
- "resources": [
- "thummit.com"
- ]
- },
- "Tinder": {
- "properties": [
- "carbonads.com",
- "tinder.com"
- ],
- "resources": [
- "carbonads.com",
- "tinder.com"
- ]
- },
- "TiqIQ": {
- "properties": [
- "tiqiq.com"
- ],
- "resources": [
- "tiqiq.com"
- ]
- },
- "Tisoomi": {
- "properties": [
- "adternal.com",
- "tisoomi.com"
- ],
- "resources": [
- "adternal.com",
- "tisoomi.com"
- ]
- },
- "TLVMedia": {
- "properties": [
- "tlvmedia.com"
- ],
- "resources": [
- "tlvmedia.com"
- ]
- },
- "TNS": {
- "properties": [
- "statistik-gallup.net",
- "tns-counter.ru",
- "tns-cs.net",
- "tnsglobal.com"
- ],
- "resources": [
- "sesamestats.com",
- "statistik-gallup.net",
- "tns-counter.ru",
- "tns-cs.net",
- "tnsglobal.com"
- ]
- },
- "Todacell": {
- "properties": [
- "todacell.com"
- ],
- "resources": [
- "todacell.com"
- ]
- },
- "ToneFuse": {
- "properties": [
- "tonefuse.com"
- ],
- "resources": [
- "tonefuse.com"
- ]
- },
- "ToneMedia": {
- "properties": [
- "clickfuse.com"
- ],
- "resources": [
- "clickfuse.com",
- "tonemedia.com"
- ]
- },
- "tongdun.cn": {
- "properties": [
- "tongdun.cn"
- ],
- "resources": [
- "fraudmetrix.cn",
- "tongdun.net"
- ]
- },
- "Topsy": {
- "properties": [
- "topsy.com"
- ],
- "resources": [
- "topsy.com"
- ]
- },
- "TouchCommerce": {
- "properties": [
- "nuance.com"
- ],
- "resources": [
- "inq.com",
- "nuance.com",
- "touchcommerce.com"
- ]
- },
- "TraceMyIP.org": {
- "properties": [
- "tracemyip.org"
- ],
- "resources": [
- "tracemyip.org"
- ]
- },
- "TrackingSoft": {
- "properties": [
- "roia.biz",
- "trackingsoft.com"
- ],
- "resources": [
- "roia.biz",
- "trackingsoft.com"
- ]
- },
- "Trackset": {
- "properties": [
- "trackset.com"
- ],
- "resources": [
- "trackset.com"
- ]
- },
- "Tradedoubler": {
- "properties": [
- "tradedoubler.com"
- ],
- "resources": [
- "tradedoubler.com"
- ]
- },
- "TradeTracker": {
- "properties": [
- "tradetracker.com"
- ],
- "resources": [
- "tradetracker.com",
- "tradetracker.net"
- ]
- },
- "TrafficHaus": {
- "properties": [
- "traffichaus.com",
- "traffichouse.com"
- ],
- "resources": [
- "traffichaus.com",
- "traffichouse.com"
- ]
- },
- "TrafficRevenue": {
- "properties": [
- "trafficrevenue.net"
- ],
- "resources": [
- "trafficrevenue.net"
- ]
- },
- "TrafficScore": {
- "properties": [
- "trafficscore.com"
- ],
- "resources": [
- "trafficscore.com"
- ]
- },
- "Traffiq": {
- "properties": [
- "traffiq.com"
- ],
- "resources": [
- "traffiq.com"
- ]
- },
- "Trafmag": {
- "properties": [
- "trafmag.com"
- ],
- "resources": [
- "trafmag.com"
- ]
- },
- "Traverse": {
- "properties": [
- "traversedata.com"
- ],
- "resources": [
- "traversedlp.com"
- ]
- },
- "Travora Media": {
- "properties": [
- "travoramedia.com"
- ],
- "resources": [
- "traveladnetwork.com",
- "traveladvertising.com",
- "travoramedia.com"
- ]
- },
- "Tremor Video": {
- "properties": [
- "tremorvideo.com"
- ],
- "resources": [
- "scanscout.com",
- "tmnetads.com",
- "tremorhub.com",
- "tremormedia.com",
- "tremorvideo.com"
- ]
- },
- "Triggit": {
- "properties": [
- "triggit.com"
- ],
- "resources": [
- "triggit.com"
- ]
- },
- "TripleLift": {
- "properties": [
- "triplelift.com"
- ],
- "resources": [
- "3lift.com",
- "triplelift.com"
- ]
- },
- "Trovus": {
- "properties": [
- "trovus.co.uk",
- "www.trovus.co.uk"
- ],
- "resources": [
- "trovus.co.uk",
- "www.trovus.co.uk"
- ]
- },
- "TruEffect": {
- "properties": [
- "adlegend.com",
- "trueffect.com"
- ],
- "resources": [
- "adlegend.com",
- "trueffect.com"
- ]
- },
- "Trumba": {
- "properties": [
- "trumba.com"
- ],
- "resources": [
- "trumba.com"
- ]
- },
- "TRUSTe": {
- "properties": [
- "truste.com"
- ],
- "resources": [
- "truste.com"
- ]
- },
- "TrustX": {
- "properties": [
- "trustx.org"
- ],
- "resources": [
- "trustx.org"
- ]
- },
- "TubeMogul": {
- "properties": [
- "tmogul.com",
- "tubemogul.com"
- ],
- "resources": [
- "tmogul.com",
- "tubemogul.com"
- ]
- },
- "TurnTo": {
- "properties": [
- "turntonetworks.com"
- ],
- "resources": [
- "turnto.com",
- "turntonetworks.com"
- ]
- },
- "Tweetboard": {
- "properties": [
- "tweetboard.com"
- ],
- "resources": [
- "tweetboard.com"
- ]
- },
- "Twelvefold": {
- "properties": [
- "buzzlogic.com",
- "twelvefold.com"
- ],
- "resources": [
- "buzzlogic.com",
- "twelvefold.com"
- ]
- },
- "Twitter": {
- "properties": [
- "digits.com",
- "fabric.io",
- "tweetdeck.com",
- "twitter.com",
- "twitter.jp"
- ],
- "resources": [
- "ads-twitter.com",
- "fabric.io",
- "tweetdeck.com",
- "twimg.com",
- "twitter.com",
- "twitter.jp"
- ]
- },
- "Twitter Counter": {
- "properties": [
- "twittercounter.com"
- ],
- "resources": [
- "twittercounter.com"
- ]
- },
- "Twyn Group": {
- "properties": [
- "twyn-group.com",
- "twyn.com"
- ],
- "resources": [
- "twyn-group.com",
- "twyn.com"
- ]
- },
- "Tyroo": {
- "properties": [
- "tyroo.com"
- ],
- "resources": [
- "tyroo.com"
- ]
- },
- "UberMedia": {
- "properties": [
- "tweetup.com",
- "ubermedia.com"
- ],
- "resources": [
- "tweetup.com",
- "ubermedia.com"
- ]
- },
- "UberTags": {
- "properties": [
- "ubertags.com"
- ],
- "resources": [
- "ubertags.com"
- ]
- },
- "ucfunnel": {
- "properties": [
- "ucfunnel.com"
- ],
- "resources": [
- "aralego.com",
- "ucfunnel.com"
- ]
- },
- "uCoz": {
- "properties": [
- "ucoz.ae",
- "ucoz.com",
- "ucoz.fr",
- "ucoz.net",
- "ucoz.ru"
- ],
- "resources": [
- "ucoz.ae",
- "ucoz.br",
- "ucoz.com",
- "ucoz.du",
- "ucoz.fr",
- "ucoz.net",
- "ucoz.ru"
- ]
- },
- "Umbel": {
- "properties": [
- "umbel.com"
- ],
- "resources": [
- "umbel.com"
- ]
- },
- "Unanimis": {
- "properties": [
- "unanimis.co.uk",
- "www.unanimis.co.uk"
- ],
- "resources": [
- "unanimis.co.uk",
- "www.unanimis.co.uk"
- ]
- },
- "Unbounce": {
- "properties": [
- "unbounce.com"
- ],
- "resources": [
- "unbounce.com"
- ]
- },
- "Underdog Media": {
- "properties": [
- "udmserve.net",
- "underdogmedia.com"
- ],
- "resources": [
- "udmserve.net",
- "underdogmedia.com"
- ]
- },
- "Undertone": {
- "properties": [
- "undertone.com",
- "undertonevideo.com"
- ],
- "resources": [
- "undertone.com",
- "undertonenetworks.com",
- "undertonevideo.com"
- ]
- },
- "UniQlick": {
- "properties": [
- "51network.com",
- "uniqlick.com",
- "wanmo.com"
- ],
- "resources": [
- "51network.com",
- "uniqlick.com",
- "wanmo.com"
- ]
- },
- "Unruly": {
- "properties": [
- "unruly.co"
- ],
- "resources": [
- "unrulymedia.com"
- ]
- },
- "Upland": {
- "properties": [
- "uplandsoftware.com"
- ],
- "resources": [
- "leadlander.com",
- "sf14g.com",
- "trackalyzer.com",
- "uplandsoftware.com"
- ]
- },
- "Uptrends": {
- "properties": [
- "uptrends.com"
- ],
- "resources": [
- "uptrends.com"
- ]
- },
- "up-value": {
- "properties": [
- "up-value.de"
- ],
- "resources": [
- "up-value.de"
- ]
- },
- "Usability Sciences": {
- "properties": [
- "usabilitysciences.com"
- ],
- "resources": [
- "usabilitysciences.com",
- "webiqonline.com"
- ]
- },
- "User Local": {
- "properties": [
- "nakanohito.jp"
- ],
- "resources": [
- "nakanohito.jp"
- ]
- },
- "UserVoice": {
- "properties": [
- "uservoice.com"
- ],
- "resources": [
- "uservoice.com"
- ]
- },
- "V12 Data": {
- "properties": [
- "v12group.com"
- ],
- "resources": [
- "v12data.com",
- "v12group.com"
- ]
- },
- "Value Ad": {
- "properties": [
- "valuead.com"
- ],
- "resources": [
- "valuead.com"
- ]
- },
- "Various": {
- "properties": [
- "amigos.com",
- "getiton.com",
- "medley.com",
- "nostringsattached.com",
- "various.com"
- ],
- "resources": [
- "amigos.com",
- "getiton.com",
- "medley.com",
- "nostringsattached.com",
- "various.com"
- ]
- },
- "Vdopia": {
- "properties": [
- "ivdopia.com",
- "vdopia.com"
- ],
- "resources": [
- "ivdopia.com",
- "vdopia.com"
- ]
- },
- "Veeseo": {
- "properties": [
- "veeseo.com"
- ],
- "resources": [
- "veeseo.com"
- ]
- },
- "Velocity Media": {
- "properties": [
- "adsvelocity.com"
- ],
- "resources": [
- "adsvelocity.com"
- ]
- },
- "Velti": {
- "properties": [
- "mobclix.com",
- "velti.com"
- ],
- "resources": [
- "mobclix.com",
- "velti.com"
- ]
- },
- "Vemba": {
- "properties": [
- "vemba.com"
- ],
- "resources": [
- "vemba.com"
- ]
- },
- "Venatus Media": {
- "properties": [
- "venatusmedia.com"
- ],
- "resources": [
- "venatusmedia.com"
- ]
- },
- "Vendemore": {
- "properties": [
- "vendemore.com"
- ],
- "resources": [
- "vendemore.com"
- ]
- },
- "Vendio": {
- "properties": [
- "singlefeed.com",
- "vendio.com"
- ],
- "resources": [
- "singlefeed.com",
- "vendio.com"
- ]
- },
- "Veoxa": {
- "properties": [
- "veoxa.com"
- ],
- "resources": [
- "veoxa.com"
- ]
- },
- "Veremedia": {
- "properties": [
- "veremedia.com"
- ],
- "resources": [
- "veremedia.com"
- ]
- },
- "Vertical Acuity": {
- "properties": [
- "verticalacuity.com"
- ],
- "resources": [
- "verticalacuity.com"
- ]
- },
- "VerticalHealth": {
- "properties": [
- "verticalhealth.com"
- ],
- "resources": [
- "verticalhealth.net"
- ]
- },
- "VerticalResponse": {
- "properties": [
- "verticalresponse.com",
- "vresp.com"
- ],
- "resources": [
- "verticalresponse.com",
- "vresp.com"
- ]
- },
- "Vertster": {
- "properties": [
- "vertster.com"
- ],
- "resources": [
- "vertster.com"
- ]
- },
- "VG WORT": {
- "properties": [
- "vgwort.de"
- ],
- "resources": [
- "vgwort.de"
- ]
- },
- "Vibrant Media": {
- "properties": [
- "vibrantmedia.com"
- ],
- "resources": [
- "intellitxt.com",
- "picadmedia.com",
- "vibrantmedia.com"
- ]
- },
- "VideoIntelligence": {
- "properties": [
- "vi.ai"
- ],
- "resources": [
- "vi.ai"
- ]
- },
- "Videology": {
- "properties": [
- "tidaltv.com",
- "videologygroup.com"
- ],
- "resources": [
- "tidaltv.com",
- "videologygroup.com"
- ]
- },
- "Viewbix": {
- "properties": [
- "qoof.com",
- "viewbix.com"
- ],
- "resources": [
- "qoof.com",
- "viewbix.com"
- ]
- },
- "VigLink": {
- "properties": [
- "viglink.com"
- ],
- "resources": [
- "viglink.com"
- ]
- },
- "Vimeo": {
- "properties": [
- "vimeo.com",
- "vimeocdn.com"
- ],
- "resources": [
- "vimeo.com",
- "vimeocdn.com"
- ]
- },
- "VINDICO": {
- "properties": [
- "vindicogroup.com",
- "vindicosuite.com"
- ],
- "resources": [
- "vindicogroup.com",
- "vindicosuite.com"
- ]
- },
- "VisibleBrands": {
- "properties": [
- "visbrands.com"
- ],
- "resources": [
- "visbrands.com"
- ]
- },
- "Visible Measures": {
- "properties": [
- "visiblemeasures.com"
- ],
- "resources": [
- "viewablemedia.net",
- "visiblemeasures.com"
- ]
- },
- "VisiStat": {
- "properties": [
- "id.kickfire.com",
- "sa-as.com"
- ],
- "resources": [
- "d.kickfire.com",
- "sa-as.com",
- "visistat.com"
- ]
- },
- "Visit Streamer": {
- "properties": [
- "visitstreamer.com"
- ],
- "resources": [
- "visitstreamer.com"
- ]
- },
- "vistrac": {
- "properties": [
- "vistrac.com"
- ],
- "resources": [
- "vistrac.com"
- ]
- },
- "VisualDNA": {
- "properties": [
- "vdna-assets.com",
- "visualdna-stats.com",
- "visualdna.com"
- ],
- "resources": [
- "vdna-assets.com",
- "visualdna-stats.com",
- "visualdna.com"
- ]
- },
- "ViziSense": {
- "properties": [
- "vizisense.com",
- "vizisense.net"
- ],
- "resources": [
- "vizisense.com",
- "vizisense.net"
- ]
- },
- "Vizu": {
- "properties": [
- "vizu.com"
- ],
- "resources": [
- "vizu.com"
- ]
- },
- "Vizury": {
- "properties": [
- "vizury.com"
- ],
- "resources": [
- "vizury.com"
- ]
- },
- "VKontakte": {
- "properties": [
- "vk.com"
- ],
- "resources": [
- "userapi.com",
- "vk.com",
- "vkontakte.ru"
- ]
- },
- "Voice2Page": {
- "properties": [
- "voice2page.com"
- ],
- "resources": [
- "voice2page.com"
- ]
- },
- "Vserv": {
- "properties": [
- "vserv.com",
- "vserv.mobi"
- ],
- "resources": [
- "vserv.com",
- "vserv.mobi"
- ]
- },
- "Vuble": {
- "properties": [
- "vuble.tv"
- ],
- "resources": [
- "mediabong.com"
- ]
- },
- "Wahoha": {
- "properties": [
- "contentwidgets.net",
- "wahoha.com"
- ],
- "resources": [
- "contentwidgets.net",
- "wahoha.com"
- ]
- },
- "Wayfair": {
- "properties": [
- "wayfair.com"
- ],
- "resources": [
- "wayfair.com"
- ]
- },
- "WebAds": {
- "properties": [
- "webads.co.uk",
- "www.webads.co.uk"
- ],
- "resources": [
- "webads.co.uk",
- "www.webads.co.uk"
- ]
- },
- "Webclicktracker": {
- "properties": [
- "webclicktracker.com"
- ],
- "resources": [
- "webclicktracker.com"
- ]
- },
- "Web.com": {
- "properties": [
- "feedperfect.com",
- "web.com"
- ],
- "resources": [
- "feedperfect.com",
- "web.com"
- ]
- },
- "WebGozar.com": {
- "properties": [
- "webgozar.com",
- "webgozar.ir"
- ],
- "resources": [
- "webgozar.com",
- "webgozar.ir"
- ]
- },
- "Webmecanik": {
- "properties": [
- "webmecanik.com"
- ],
- "resources": [
- "webmecanik.com"
- ]
- },
- "WebMetro": {
- "properties": [
- "dsmmadvantage.com",
- "revanadigital.com"
- ],
- "resources": [
- "dsmmadvantage.com",
- "revanadigital.com",
- "webmetro.com"
- ]
- },
- "Webmine": {
- "properties": [
- "webmine.cz"
- ],
- "resources": [
- "authedwebmine.cz",
- "webmine.cz"
- ]
- },
- "WebminePool": {
- "properties": [
- "webminepool.com"
- ],
- "resources": [
- "webminepool.com"
- ]
- },
- "Webmining": {
- "properties": [
- "webmining.co"
- ],
- "resources": [
- "webmining.co"
- ]
- },
- "Weborama": {
- "properties": [
- "weborama.com"
- ],
- "resources": [
- "weborama.com",
- "weborama.fr"
- ]
- },
- "WebsiteAlive": {
- "properties": [
- "websitealive.com",
- "websitealive0.com",
- "websitealive1.com",
- "websitealive2.com",
- "websitealive3.com",
- "websitealive4.com",
- "websitealive5.com",
- "websitealive6.com",
- "websitealive7.com",
- "websitealive8.com",
- "websitealive9.com"
- ],
- "resources": [
- "websitealive.com"
- ]
- },
- "Web Stats": {
- "properties": [
- "onlinewebstats.com"
- ],
- "resources": [
- "onlinewebstats.com"
- ]
- },
- "Web Tracking Services": {
- "properties": [
- "web-stat.com",
- "webtrackingservices.com"
- ],
- "resources": [
- "web-stat.com",
- "webtrackingservices.com"
- ]
- },
- "Webtraffic": {
- "properties": [
- "webtraffic.no",
- "webtraffic.se"
- ],
- "resources": [
- "webtraffic.no",
- "webtraffic.se"
- ]
- },
- "Web Traxs": {
- "properties": [
- "webtraxs.com"
- ],
- "resources": [
- "webtraxs.com"
- ]
- },
- "Webtrekk": {
- "properties": [
- "webtrekk.com",
- "webtrekk.net"
- ],
- "resources": [
- "webtrekk.com",
- "webtrekk.net"
- ]
- },
- "Webtrends": {
- "properties": [
- "webtrends.com"
- ],
- "resources": [
- "reinvigorate.net",
- "webtrends.com",
- "webtrendslive.com"
- ]
- },
- "White Ops": {
- "properties": [
- "adzmath.com",
- "whiteops.com"
- ],
- "resources": [
- "adzmath.com",
- "whiteops.com"
- ]
- },
- "whos.amung.us": {
- "properties": [
- "amung.us"
- ],
- "resources": [
- "amung.us"
- ]
- },
- "WideOrbit": {
- "properties": [
- "wideorbit.com"
- ],
- "resources": [
- "dep-x.com"
- ]
- },
- "Wingify": {
- "properties": [
- "vwo.com",
- "wingify.com"
- ],
- "resources": [
- "visualwebsiteoptimizer.com",
- "vwo.com",
- "wingify.com"
- ]
- },
- "WiredMinds": {
- "properties": [
- "wiredminds.de"
- ],
- "resources": [
- "wiredminds.com",
- "wiredminds.de"
- ]
- },
- "Wishabi": {
- "properties": [
- "wishabi.com",
- "wishabi.net"
- ],
- "resources": [
- "flipp.com",
- "wishabi.com",
- "wishabi.net"
- ]
- },
- "Woopra": {
- "properties": [
- "woopra-ns.com",
- "woopra.com"
- ],
- "resources": [
- "woopra-ns.com",
- "woopra.com"
- ]
- },
- "WordStream": {
- "properties": [
- "wordstream.com"
- ],
- "resources": [
- "wordstream.com"
- ]
- },
- "WOW Analytics": {
- "properties": [
- "wowanalytics.co.uk"
- ],
- "resources": [
- "wowanalytics.co.uk"
- ]
- },
- "WPP": {
- "properties": [
- "compete.com",
- "decdna.net",
- "groupm.com",
- "kantarmedia.com",
- "mecglobal.com",
- "mindshareworld.com",
- "themig.com",
- "wpp.com",
- "xaxis.com"
- ],
- "resources": [
- "247realmedia.com",
- "accelerator-media.com",
- "acceleratorusa.com",
- "compete.com",
- "decdna.net",
- "decideinteractive.com",
- "gmads.net",
- "groupm.com",
- "kantarmedia.com",
- "mecglobal.com",
- "mindshare.nl",
- "mindshareworld.com",
- "mookie1.com",
- "pm14.com",
- "realmedia.com",
- "targ.ad",
- "themig.com",
- "wpp.com",
- "xaxis.com"
- ]
- },
- "Wysistat": {
- "properties": [
- "wysistat.net"
- ],
- "resources": [
- "wysistat.com",
- "wysistat.net"
- ]
- },
- "xAd": {
- "properties": [
- "xad.com"
- ],
- "resources": [
- "xad.com"
- ]
- },
- "Xertive Media": {
- "properties": [
- "xertivemedia.com"
- ],
- "resources": [
- "admanager-xertive.com",
- "xertivemedia.com"
- ]
- },
- "xplosion interactive": {
- "properties": [
- "xplosion.de"
- ],
- "resources": [
- "xplosion.de"
- ]
- },
- "Xrost DS": {
- "properties": [
- "adplan-ds.com"
- ],
- "resources": [
- "adplan-ds.com"
- ]
- },
- "Yabuka": {
- "properties": [
- "yabuka.com"
- ],
- "resources": [
- "yabuka.com"
- ]
- },
- "Yahoo!": {
- "properties": [
- "flickr.com",
- "flurry.com",
- "tumblr.com",
- "yahoo.co.jp",
- "yahoo.com",
- "yahoostudios.com",
- "yuilibrary.com"
- ],
- "resources": [
- "adinterax.com",
- "adrevolver.com",
- "bluelithium.com",
- "dapper.net",
- "flickr.com",
- "flurry.com",
- "interclick.com",
- "luminate.com",
- "mybloglog.com",
- "overture.com",
- "pixazza.com",
- "rightmedia.com",
- "rmxads.com",
- "rocketmail.com",
- "secure-adserver.com",
- "staticflickr.com",
- "tumblr.com",
- "yahoo.co.jp",
- "yahoo.com",
- "yahooapis.com",
- "yahooapis.jp",
- "yahoofs.com",
- "yieldmanager.com",
- "yieldmanager.net",
- "yimg.com",
- "yimg.jp",
- "yldmgrimg.net",
- "ymail.com",
- "yuilibrary.com",
- "zenfs.com"
- ]
- },
- "Yandex": {
- "properties": [
- "kinopoisk.ru",
- "moikrug.ru",
- "yadi.sk",
- "yandex.by",
- "yandex.com",
- "yandex.com.tr",
- "yandex.ru",
- "yandex.st",
- "yandex.ua"
- ],
- "resources": [
- "api-maps.yandex.ru",
- "moikrug.ru",
- "web-visor.com",
- "yandex.by",
- "yandex.com",
- "yandex.com.tr",
- "yandex.ru",
- "yandex.st",
- "yandex.ua"
- ]
- },
- "Ybrant Digital": {
- "properties": [
- "addynamix.com",
- "brightcom.com",
- "luj.sdsjweb.com"
- ],
- "resources": [
- "addynamix.com",
- "adserverplus.com",
- "brightcom.com",
- "oridian.com",
- "ybrantdigital.com"
- ]
- },
- "YD": {
- "properties": [
- "ydworld.com",
- "yieldivision.com"
- ],
- "resources": [
- "ydworld.com",
- "yieldivision.com"
- ]
- },
- "YellowHammer": {
- "properties": [
- "yhmg.com"
- ],
- "resources": [
- "attracto.com",
- "clickhype.com",
- "yellowhammermg.com",
- "yhmg.com"
- ]
- },
- "YellowTracker": {
- "properties": [
- "yellowtracker.com"
- ],
- "resources": [
- "yellowtracker.com"
- ]
- },
- "Yes Ads": {
- "properties": [
- "yesads.com"
- ],
- "resources": [
- "yesads.com"
- ]
- },
- "YieldAds": {
- "properties": [
- "yieldads.com"
- ],
- "resources": [
- "yieldads.com"
- ]
- },
- "YieldBids": {
- "properties": [
- "ybx.io"
- ],
- "resources": [
- "ybx.io"
- ]
- },
- "YieldBot": {
- "properties": [
- "yieldbot.com"
- ],
- "resources": [
- "yldbt.com"
- ]
- },
- "YieldBuild": {
- "properties": [
- "yieldbuild.com"
- ],
- "resources": [
- "yieldbuild.com"
- ]
- },
- "Yieldify": {
- "properties": [
- "yieldify.com"
- ],
- "resources": [
- "yieldify.com"
- ]
- },
- "Yieldlab": {
- "properties": [
- "yieldlab.de",
- "yieldlab.net"
- ],
- "resources": [
- "yieldlab.de",
- "yieldlab.net"
- ]
- },
- "Yieldmo": {
- "properties": [
- "yieldmo.com"
- ],
- "resources": [
- "yieldmo.com"
- ]
- },
- "YieldNexus": {
- "properties": [
- "ynxs.io"
- ],
- "resources": [
- "ynxs.io"
- ]
- },
- "YOC": {
- "properties": [
- "yoc.com"
- ],
- "resources": [
- "yoc.com"
- ]
- },
- "Yoggrt": {
- "properties": [
- "yoggrt.com"
- ],
- "resources": [
- "yoggrt.com"
- ]
- },
- "youknowbest": {
- "properties": [
- "youknowbest.com"
- ],
- "resources": [
- "youknowbest.com"
- ]
- },
- "YSance": {
- "properties": [
- "ysance.com"
- ],
- "resources": [
- "y-track.com"
- ]
- },
- "YuMe": {
- "properties": [
- "yume.com",
- "yumenetworks.com"
- ],
- "resources": [
- "yume.com",
- "yumenetworks.com"
- ]
- },
- "ZafulAffiliate": {
- "properties": [
- "zaful.com"
- ],
- "resources": [
- "zaful.com"
- ]
- },
- "Zango": {
- "properties": [
- "metricsdirect.com",
- "zango.com"
- ],
- "resources": [
- "metricsdirect.com",
- "zango.com"
- ]
- },
- "zanox": {
- "properties": [
- "buy.at",
- "zanox-affiliate.de",
- "zanox.com"
- ],
- "resources": [
- "buy.at",
- "zanox-affiliate.de",
- "zanox.com"
- ]
- },
- "zapunited": {
- "properties": [
- "zaparena.com",
- "zapunited.com"
- ],
- "resources": [
- "zaparena.com",
- "zapunited.com"
- ]
- },
- "ZEDO": {
- "properties": [
- "zedo.com",
- "zincx.com"
- ],
- "resources": [
- "zedo.com",
- "zincx.com"
- ]
- },
- "Zefir": {
- "properties": [
- "ze-fir.com"
- ],
- "resources": [
- "ze-fir.com"
- ]
- },
- "Zemanta": {
- "properties": [
- "zemanta.com"
- ],
- "resources": [
- "zemanta.com"
- ]
- },
- "Zendesk": {
- "properties": [
- "zendesk.com"
- ],
- "resources": [
- "zendesk.com"
- ]
- },
- "ZestAd": {
- "properties": [
- "zestad.com"
- ],
- "resources": [
- "zestad.com"
- ]
- },
- "Zeta Email Solutions": {
- "properties": [
- "insightgrit.com",
- "zetaemailsolutions.com"
- ],
- "resources": [
- "insightgrit.com",
- "zetaemailsolutions.com"
- ]
- },
- "Zopim": {
- "properties": [
- "zopim.com"
- ],
- "resources": [
- "zopim.com"
- ]
- },
- "Zumobi": {
- "properties": [
- "zumobi.com"
- ],
- "resources": [
- "zumobi.com"
- ]
- },
- "ZypMedia": {
- "properties": [
- "zypmedia.com"
- ],
- "resources": [
- "extend.tv",
- "zypmedia.com"
- ]
- }
+ "2leep.com": {
+ "properties": ["2leep.com"],
+ "resources": ["2leep.com"]
+ },
+ "33Across": {
+ "properties": ["33across.com", "tynt.com"],
+ "resources": ["33across.com", "tynt.com"]
+ },
+ "365Media": {
+ "properties": ["aggregateintelligence.com"],
+ "resources": ["365media.com", "aggregateintelligence.com"]
+ },
+ "4INFO": {
+ "properties": ["4info.com", "adhaven.com"],
+ "resources": ["4info.com", "adhaven.com"]
+ },
+ "4mads": {
+ "properties": ["4mads.com"],
+ "resources": ["4mads.com"]
+ },
+ "63 Squares": {
+ "properties": ["63labs.com"],
+ "resources": ["63labs.com", "63squares.com", "i-stats.com"]
+ },
+ "Abax Interactive": {
+ "properties": ["abaxinteractive.com"],
+ "resources": ["abaxinteractive.com"]
+ },
+ "Accelia": {
+ "properties": ["accelia.net", "durasite.net"],
+ "resources": ["accelia.net", "durasite.net"]
+ },
+ "Accordant Media": {
+ "properties": ["accordantmedia.com"],
+ "resources": ["accordantmedia.com"]
+ },
+ "Acquisio": {
+ "properties": ["acquisio.com", "clickequations.net"],
+ "resources": ["acquisio.com", "clickequations.net"]
+ },
+ "Actisens": {
+ "properties": ["actisens.com", "gestionpub.com"],
+ "resources": ["actisens.com", "gestionpub.com"]
+ },
+ "ActiveConversion": {
+ "properties": ["activeconversion.com", "activemeter.com"],
+ "resources": ["activeconversion.com", "activemeter.com"]
+ },
+ "ActivEngage": {
+ "properties": ["activengage.com"],
+ "resources": ["activengage.com"]
+ },
+ "Act-On": {
+ "properties": ["act-on.com", "actonsoftware.com"],
+ "resources": ["act-on.com", "actonsoftware.com"]
+ },
+ "Acuity": {
+ "properties": ["acuity.com", "acuityads.com", "acuityplatform.com"],
+ "resources": ["acuity.com", "acuityads.com", "acuityplatform.com"]
+ },
+ "Acxiom": {
+ "properties": ["acxiom.com", "mm7.net"],
+ "resources": ["acxiom.com", "acxiomapac.com", "mm7.net", "pippio.com"]
+ },
+ "AD2ONE": {
+ "properties": ["ad2onegroup.com"],
+ "resources": ["ad2onegroup.com"]
+ },
+ "Ad4Game": {
+ "properties": ["ad4game.com"],
+ "resources": ["ad4game.com"]
+ },
+ "ad6media": {
+ "properties": ["ad6media.fr"],
+ "resources": ["ad6media.fr"]
+ },
+ "Adabra": {
+ "properties": ["adabra.com"],
+ "resources": ["adabra.com"]
+ },
+ "Adality": {
+ "properties": ["adality.de"],
+ "resources": ["adality.de", "adrtx.net"]
+ },
+ "AdaptiveAds": {
+ "properties": ["adaptiveads.com"],
+ "resources": ["adaptiveads.com"]
+ },
+ "Adaptly": {
+ "properties": ["adaptly.com"],
+ "resources": ["adaptly.com"]
+ },
+ "Adap.tv": {
+ "properties": ["adap.tv"],
+ "resources": ["adap.tv"]
+ },
+ "Adara Media": {
+ "properties": ["adaramedia.com", "opinmind.com", "yieldoptimizer.com"],
+ "resources": ["adaramedia.com", "opinmind.com", "yieldoptimizer.com"]
+ },
+ "Adatus": {
+ "properties": ["adatus.com"],
+ "resources": ["adatus.com"]
+ },
+ "Adbot": {
+ "properties": ["adbot.tw"],
+ "resources": ["adbot.tw"]
+ },
+ "Adbrain": {
+ "properties": ["adbrain.com"],
+ "resources": ["adbrain.com", "adbrn.com"]
+ },
+ "adBrite": {
+ "properties": ["adbrite.com"],
+ "resources": ["adbrite.com"]
+ },
+ "Adbroker.de": {
+ "properties": ["adbroker.de"],
+ "resources": ["adbroker.de"]
+ },
+ "Adchemy": {
+ "properties": ["adchemy.com"],
+ "resources": ["adchemy.com"]
+ },
+ "AdCirrus": {
+ "properties": ["adcirrus.com"],
+ "resources": ["adcirrus.com"]
+ },
+ "Ad Decisive": {
+ "properties": ["a2dfp.net", "addecisive.com"],
+ "resources": ["a2dfp.net", "addecisive.com"]
+ },
+ "AddFreeStats": {
+ "properties": ["3dstats.com", "addfreestats.com"],
+ "resources": ["3dstats.com", "addfreestats.com"]
+ },
+ "addGloo": {
+ "properties": ["addgloo.com"],
+ "resources": ["addgloo.com"]
+ },
+ "AddThis": {
+ "properties": ["addthis.com"],
+ "resources": [
+ "addthis.com",
+ "addthiscdn.com",
+ "addthisedge.com",
+ "clearspring.com",
+ "connectedads.net",
+ "xgraph.com",
+ "xgraph.net"
+ ]
+ },
+ "Addvantage Media": {
+ "properties": ["addvantagemedia.com"],
+ "resources": ["addvantagemedia.com"]
+ },
+ "Ad Dynamo": {
+ "properties": ["addynamo.com"],
+ "resources": ["addynamo.com", "addynamo.net"]
+ },
+ "Adelphic": {
+ "properties": ["adelphic.com"],
+ "resources": ["adelphic.com", "ipredictive.com"]
+ },
+ "AdEngage": {
+ "properties": ["adengage.com"],
+ "resources": ["adengage.com"]
+ },
+ "AD Europe": {
+ "properties": ["adeurope.com"],
+ "resources": ["adeurope.com"]
+ },
+ "AdExtent": {
+ "properties": ["adextent.com"],
+ "resources": ["adextent.com"]
+ },
+ "AdF.ly": {
+ "properties": ["adf.ly"],
+ "resources": ["adf.ly"]
+ },
+ "Adfonic": {
+ "properties": ["adfonic.com"],
+ "resources": ["adfonic.com"]
+ },
+ "Adforge": {
+ "properties": ["adforgeinc.com"],
+ "resources": ["adforgeinc.com"]
+ },
+ "Adform": {
+ "properties": ["adform.com"],
+ "resources": ["adform.com", "adform.net", "adformdsp.net"]
+ },
+ "AdFox": {
+ "properties": ["adfox.ru"],
+ "resources": ["adfox.ru"]
+ },
+ "AdFrontiers": {
+ "properties": ["adfrontiers.com"],
+ "resources": ["adfrontiers.com"]
+ },
+ "Adfunky": {
+ "properties": ["adfunky.com", "adfunkyserver.com"],
+ "resources": ["adfunky.com", "adfunkyserver.com"]
+ },
+ "Adfusion": {
+ "properties": ["adfusion.com"],
+ "resources": ["adfusion.com"]
+ },
+ "AdGainerSolutions": {
+ "properties": ["adgainersolutions.com"],
+ "resources": ["adgainersolutions.com"]
+ },
+ "AdGent Digital": {
+ "properties": ["adgentdigital.com"],
+ "resources": ["adgentdigital.com", "shorttailmedia.com"]
+ },
+ "AdGibbon": {
+ "properties": ["adgibbon.com"],
+ "resources": ["adgibbon.com"]
+ },
+ "Adglare": {
+ "properties": ["adglare.com"],
+ "resources": ["adglare.com", "adglare.net"]
+ },
+ "adhood": {
+ "properties": ["adhood.com"],
+ "resources": ["adhood.com"]
+ },
+ "Adiant": {
+ "properties": ["adblade.com", "adiant.com"],
+ "resources": ["adblade.com", "adiant.com"]
+ },
+ "AdInsight": {
+ "properties": ["responsetap.com"],
+ "resources": ["adinsight.com", "adinsight.eu", "responsetap.com"]
+ },
+ "AdIQuity": {
+ "properties": ["adiquity.com"],
+ "resources": ["adiquity.com"]
+ },
+ "ADITION": {
+ "properties": ["adition.com"],
+ "resources": ["adition.com"]
+ },
+ "AdJug": {
+ "properties": ["adjug.com"],
+ "resources": ["adjug.com"]
+ },
+ "AdJuggler": {
+ "properties": ["adjuggler.com", "adjuggler.net"],
+ "resources": ["adjuggler.com", "adjuggler.net"]
+ },
+ "Adjust": {
+ "properties": ["adjust.com"],
+ "resources": ["adjust.com"]
+ },
+ "AdKeeper": {
+ "properties": ["keep.com"],
+ "resources": ["adkeeper.com", "akncdn.com", "keep.com"]
+ },
+ "AdKernel": {
+ "properties": ["adkernel.com"],
+ "resources": ["adkernel.com"]
+ },
+ "Ad Knife": {
+ "properties": ["adknife.com"],
+ "resources": ["adknife.com"]
+ },
+ "Adknowledge": {
+ "properties": [
+ "adknowledge.com",
+ "adparlor.com",
+ "bidsystem.com",
+ "cubics.com",
+ "lookery.com"
+ ],
+ "resources": [
+ "adknowledge.com",
+ "adparlor.com",
+ "bidsystem.com",
+ "cubics.com",
+ "lookery.com"
+ ]
+ },
+ "AdLantis": {
+ "properties": ["adimg.net", "adlantis.jp", "www.adlantis.jp"],
+ "resources": ["adimg.net", "adlantis.jp", "www.adlantis.jp"]
+ },
+ "AdLeave": {
+ "properties": ["adleave.com"],
+ "resources": ["adleave.com"]
+ },
+ "Adlibrium": {
+ "properties": ["adlibrium.com"],
+ "resources": ["adlibrium.com"]
+ },
+ "Adloox": {
+ "properties": ["adloox.com"],
+ "resources": ["adloox.com", "adlooxtracking.com"]
+ },
+ "Adlucent": {
+ "properties": ["adlucent.com"],
+ "resources": ["adlucent.com"]
+ },
+ "Ad Magnet": {
+ "properties": ["admagnet.com", "admagnet.net"],
+ "resources": ["admagnet.com", "admagnet.net"]
+ },
+ "Admarketplace": {
+ "properties": ["admarketplace.com"],
+ "resources": ["admarketplace.com", "admarketplace.net", "ampxchange.com"]
+ },
+ "AdMarvel": {
+ "properties": ["admarvel.com"],
+ "resources": ["admarvel.com"]
+ },
+ "AdMatrix": {
+ "properties": ["admatrix.jp"],
+ "resources": ["admatrix.jp"]
+ },
+ "AdMaven": {
+ "properties": ["ad-maven.com"],
+ "resources": [
+ "ad-maven.com",
+ "agreensdistra.info",
+ "boudja.com",
+ "rensovetors.info",
+ "wrethicap.info"
+ ]
+ },
+ "AdMaximizer Network": {
+ "properties": ["admaximizer.com"],
+ "resources": ["admaximizer.com"]
+ },
+ "AdMedia": {
+ "properties": ["admedia.com"],
+ "resources": ["admedia.com"]
+ },
+ "Admeta": {
+ "properties": ["admeta.com", "atemda.com"],
+ "resources": ["admeta.com", "atemda.com"]
+ },
+ "Admicro": {
+ "properties": ["admicro.vn"],
+ "resources": ["admicro.vn", "vcmedia.vn"]
+ },
+ "Admixer": {
+ "properties": ["admixer.co.kr"],
+ "resources": ["admixer.co.kr"]
+ },
+ "Admized": {
+ "properties": ["admized.com"],
+ "resources": ["admized.com"]
+ },
+ "Admobile": {
+ "properties": ["admobile.com"],
+ "resources": ["admobile.com"]
+ },
+ "Admotion": {
+ "properties": ["admotion.com"],
+ "resources": ["admotion.com", "nspmotion.com"]
+ },
+ "Adnetik": {
+ "properties": ["wtp101.com"],
+ "resources": ["adnetik.com", "wtp101.com"]
+ },
+ "AdNetwork.net": {
+ "properties": ["adnetwork.net"],
+ "resources": ["adnetwork.net"]
+ },
+ "Adnium": {
+ "properties": ["adnium.com"],
+ "resources": ["adnium.com", "montwam.top"]
+ },
+ "adnologies": {
+ "properties": ["adnologies.com", "heias.com"],
+ "resources": ["adnologies.com", "heias.com"]
+ },
+ "Adobe": {
+ "properties": ["adobe.com", "livefyre.com", "typekit.com"],
+ "resources": [
+ "2o7.net",
+ "adobe.com",
+ "auditude.com",
+ "demdex.com",
+ "demdex.net",
+ "dmtracker.com",
+ "efrontier.com",
+ "everestads.net",
+ "everestjs.net",
+ "everesttech.net",
+ "fyre.co",
+ "hitbox.com",
+ "livefyre.com",
+ "omniture.com",
+ "omtrdc.net",
+ "touchclarity.com",
+ "typekit.com"
+ ]
+ },
+ "AdOcean": {
+ "properties": ["adocean-global.com", "adocean.pl"],
+ "resources": ["adocean-global.com", "adocean.pl"]
+ },
+ "Adometry": {
+ "properties": ["adometry.com"],
+ "resources": ["adometry.com", "dmtry.com"]
+ },
+ "Adomik": {
+ "properties": ["adomik.com"],
+ "resources": ["adomik.com"]
+ },
+ "AdOnion": {
+ "properties": ["adonion.com"],
+ "resources": ["adonion.com"]
+ },
+ "Adorika": {
+ "properties": ["clickotmedia.com"],
+ "resources": ["clickotmedia.com"]
+ },
+ "Adotmob": {
+ "properties": ["adotmob.com"],
+ "resources": ["adotmob.com"]
+ },
+ "ADP Dealer Services": {
+ "properties": ["cdkglobal.com"],
+ "resources": [
+ "admission.net",
+ "adpdealerservices.com",
+ "cdkglobal.com",
+ "cobalt.com"
+ ]
+ },
+ "ad pepper media": {
+ "properties": ["adpepper.com", "adpepper.us"],
+ "resources": ["adpepper.com", "adpepper.us"]
+ },
+ "AdPerfect": {
+ "properties": ["adperfect.com"],
+ "resources": ["adperfect.com"]
+ },
+ "Adperium": {
+ "properties": ["adperium.com"],
+ "resources": ["adperium.com"]
+ },
+ "Adpersia": {
+ "properties": ["adpersia.com"],
+ "resources": ["adpersia.com"]
+ },
+ "adPrecision": {
+ "properties": ["adprecision.net", "adprs.net"],
+ "resources": ["adprecision.net", "adprs.net", "aprecision.net"]
+ },
+ "AdPredictive": {
+ "properties": ["adpredictive.com"],
+ "resources": ["adpredictive.com"]
+ },
+ "AdReactor": {
+ "properties": ["adreactor.com"],
+ "resources": ["adreactor.com"]
+ },
+ "AdReady": {
+ "properties": ["digitalremedy.com"],
+ "resources": ["adready.com", "adreadytractions.com", "digitalremedy"]
+ },
+ "AdRevolution": {
+ "properties": ["adrevolution.com"],
+ "resources": ["adrevolution.com"]
+ },
+ "AdRiver": {
+ "properties": ["adriver.ru"],
+ "resources": ["adriver.ru"]
+ },
+ "adrolays": {
+ "properties": ["contactimpact.de"],
+ "resources": ["adrolays.com", "adrolays.de", "contactimpact.de"]
+ },
+ "AdRoll": {
+ "properties": ["adroll.com"],
+ "resources": ["adroll.com"]
+ },
+ "adscale": {
+ "properties": ["stroeer.de"],
+ "resources": ["adscale.de", "stroeer.de"]
+ },
+ "Adscience": {
+ "properties": ["adscience.nl"],
+ "resources": ["adscience.nl"]
+ },
+ "AdScore": {
+ "properties": ["adscoremarketing.com"],
+ "resources": ["adsco.re"]
+ },
+ "AdServerPub": {
+ "properties": ["adserverpub.com"],
+ "resources": ["adserverpub.com"]
+ },
+ "AdShuffle": {
+ "properties": ["adshuffle.com"],
+ "resources": ["adshuffle.com"]
+ },
+ "AdSide": {
+ "properties": ["adside.com", "doclix.com"],
+ "resources": ["adside.com", "doclix.com"]
+ },
+ "AdSpeed": {
+ "properties": ["adspeed.com", "adspeed.net"],
+ "resources": ["adspeed.com", "adspeed.net"]
+ },
+ "Adsperity": {
+ "properties": ["adsperity.com"],
+ "resources": ["adsperity.com"]
+ },
+ "AdSpirit": {
+ "properties": ["adspirit.com", "adspirit.de", "adspirit.net"],
+ "resources": ["adspirit.com", "adspirit.de", "adspirit.net"]
+ },
+ "Adsrevenue.net": {
+ "properties": ["adsrevenue.net"],
+ "resources": ["adsrevenue.net"]
+ },
+ "AdStir": {
+ "properties": ["ad-stir.com"],
+ "resources": ["ad-stir.com"]
+ },
+ "AdsTours": {
+ "properties": ["adstours.com", "clickintext.net"],
+ "resources": ["adstours.com", "clickintext.net"]
+ },
+ "Adsty": {
+ "properties": ["adsty.com", "adx1.com"],
+ "resources": ["adsty.com", "adx1.com"]
+ },
+ "Adsupply": {
+ "properties": ["4dsply.com", "adsupply.com"],
+ "resources": ["4dsply.com", "adsupply.com"]
+ },
+ "Adswizz": {
+ "properties": ["adswizz.com"],
+ "resources": ["adswizz.com"]
+ },
+ "ADTECH": {
+ "properties": ["adtech.com", "adtech.de", "adtechus.com"],
+ "resources": ["adtech.com", "adtech.de", "adtechus.com"]
+ },
+ "Adtegrity.com": {
+ "properties": ["adtegrity.com", "adtegrity.net"],
+ "resources": ["adtegrity.com", "adtegrity.net"]
+ },
+ "ADTELLIGENCE": {
+ "properties": ["adtelligence.de"],
+ "resources": ["adtelligence.de"]
+ },
+ "Adthink": {
+ "properties": ["adthink.com"],
+ "resources": ["adthink.com", "audienceinsights.net"]
+ },
+ "AdTiger": {
+ "properties": ["adtiger.de"],
+ "resources": ["adtiger.de"]
+ },
+ "AdTruth": {
+ "properties": ["adtruth.com"],
+ "resources": ["adtruth.com"]
+ },
+ "Adult AdWorld": {
+ "properties": ["adultadworld.com"],
+ "resources": ["adultadworld.com"]
+ },
+ "Adultmoda": {
+ "properties": ["adultmoda.com"],
+ "resources": ["adultmoda.com"]
+ },
+ "Adventive": {
+ "properties": ["adventive.com"],
+ "resources": ["adventive.com"]
+ },
+ "Adventori": {
+ "properties": ["adventori.com"],
+ "resources": ["adventori.com"]
+ },
+ "Adverline": {
+ "properties": ["adnext.fr", "adverline.com"],
+ "resources": ["adnext.fr", "adverline.com"]
+ },
+ "Adversal.com": {
+ "properties": ["adv-adserver.com", "adversal.com"],
+ "resources": ["adv-adserver.com", "adversal.com"]
+ },
+ "Adverticum": {
+ "properties": ["adsmart.com", "adverticum.com", "adverticum.net"],
+ "resources": ["adsmart.com", "adverticum.com", "adverticum.net"]
+ },
+ "Advertise.com": {
+ "properties": ["advertise.com"],
+ "resources": ["advertise.com"]
+ },
+ "AdvertiseSpace": {
+ "properties": ["advertisespace.com"],
+ "resources": ["advertisespace.com"]
+ },
+ "Advert Stream": {
+ "properties": ["advertstream.com"],
+ "resources": ["advertstream.com"]
+ },
+ "Advisor Media": {
+ "properties": ["advisormedia.cz"],
+ "resources": ["advisormedia.cz"]
+ },
+ "Adworx": {
+ "properties": ["adworx.at", "adworx.be", "adworx.nl"],
+ "resources": ["adworx.at", "adworx.be", "adworx.nl"]
+ },
+ "AdXpansion": {
+ "properties": ["adxpansion.com"],
+ "resources": ["adxpansion.com"]
+ },
+ "Adxvalue": {
+ "properties": ["adxvalue.com", "adxvalue.de"],
+ "resources": ["adxvalue.com", "adxvalue.de"]
+ },
+ "adyard": {
+ "properties": ["adyard.de"],
+ "resources": ["adyard.de"]
+ },
+ "AdYield": {
+ "properties": ["adyield.com"],
+ "resources": ["adxyield.com", "adyield.com"]
+ },
+ "AdYouLike": {
+ "properties": ["adyoulike.com"],
+ "resources": ["adyoulike.com", "omnitagjs.com", "pulpix.com"]
+ },
+ "ADZ": {
+ "properties": ["adzcentral.com"],
+ "resources": ["adzcentral.com"]
+ },
+ "Adzerk": {
+ "properties": ["adzerk.com"],
+ "resources": ["adzerk.com", "adzerk.net"]
+ },
+ "adzly": {
+ "properties": ["adzly.com"],
+ "resources": ["adzly.com"]
+ },
+ "Aegis Group": {
+ "properties": ["aemedia.com", "bluestreak.com", "dentsuaegisnetwork.com"],
+ "resources": ["aemedia.com", "bluestreak.com", "dentsuaegisnetwork.com"]
+ },
+ "AERIFY MEDIA": {
+ "properties": ["aerifymedia.com", "anonymous-media.com"],
+ "resources": ["aerifymedia.com", "anonymous-media.com"]
+ },
+ "Affectv": {
+ "properties": ["affectv.co.uk"],
+ "resources": ["affectv.co.uk"]
+ },
+ "affilinet": {
+ "properties": ["affili.net", "affilinet-inside.de"],
+ "resources": [
+ "affili.net",
+ "affilinet-inside.de",
+ "banner-rotation.com",
+ "successfultogether.co.uk"
+ ]
+ },
+ "Affine": {
+ "properties": ["affine.tv", "affinesystems.com"],
+ "resources": ["affine.tv", "affinesystems.com"]
+ },
+ "Affinity": {
+ "properties": ["affinity.com"],
+ "resources": ["affinity.com"]
+ },
+ "AfterDownload": {
+ "properties": ["afdads.com", "afterdownload.com"],
+ "resources": ["afdads.com", "afterdownload.com"]
+ },
+ "AIData": {
+ "properties": ["advombat.ru", "aidata.me"],
+ "resources": ["advombat.ru", "aidata.me"]
+ },
+ "Aim4Media": {
+ "properties": ["aim4media.com"],
+ "resources": ["aim4media.com"]
+ },
+ "Airpush": {
+ "properties": ["airpush.com"],
+ "resources": ["airpush.com"]
+ },
+ "AivaLabs": {
+ "properties": ["aivalabs.com"],
+ "resources": ["aivalabs.com"]
+ },
+ "a.js": {
+ "properties": [
+ "alflying.date",
+ "alflying.win",
+ "anybest.site",
+ "flightsy.bid",
+ "flightsy.win",
+ "flightzy.bid",
+ "flightzy.date",
+ "flightzy.win",
+ "zymerget.bid",
+ "zymerget.faith"
+ ],
+ "resources": [
+ "alflying.date",
+ "alflying.win",
+ "anybest.site",
+ "flightsy.bid",
+ "flightsy.win",
+ "flightzy.bid",
+ "flightzy.date",
+ "flightzy.win",
+ "zymerget.bid",
+ "zymerget.faith"
+ ]
+ },
+ "AK": {
+ "properties": ["aggregateknowledge.com", "agkn.com"],
+ "resources": ["aggregateknowledge.com", "agkn.com"]
+ },
+ "Akamai": {
+ "properties": ["akamai.com"],
+ "resources": [
+ "abmr.net",
+ "akamai.com",
+ "edgesuite.net",
+ "go-mpulse.net",
+ "imiclk.com"
+ ]
+ },
+ "AKQA": {
+ "properties": ["akqa.com"],
+ "resources": ["akqa.com", "srtk.net"]
+ },
+ "Albacross": {
+ "properties": ["albacross.com"],
+ "resources": ["albacross.com"]
+ },
+ "AllStarMediaGroup": {
+ "properties": ["allstarmediagroup.com"],
+ "resources": ["allstarmediagroup.com"]
+ },
+ "Aloodo": {
+ "properties": ["aloodo.com"],
+ "resources": ["aloodo.com"]
+ },
+ "AlterGeo": {
+ "properties": ["altergeo.ru"],
+ "resources": ["altergeo.ru"]
+ },
+ "Amadesa": {
+ "properties": ["amadesa.com"],
+ "resources": ["amadesa.com"]
+ },
+ "Amazing Counters": {
+ "properties": ["amazingcounters.com"],
+ "resources": ["amazingcounters.com"]
+ },
+ "Amazon.com": {
+ "properties": [
+ "6pm.com",
+ "abebooks.co.uk",
+ "abebooks.com",
+ "abebooks.de",
+ "abebooks.fr",
+ "abebooks.it",
+ "acx.com",
+ "alexa.com",
+ "amazon.ae",
+ "amazon.ca",
+ "amazon.cn",
+ "amazon.co.jp",
+ "amazon.co.uk",
+ "amazon.com",
+ "amazon.com.au",
+ "amazon.com.br",
+ "amazon.com.mx",
+ "amazon.com.sg",
+ "amazon.com.tr",
+ "amazon.de",
+ "amazon.es",
+ "amazon.fr",
+ "amazon.in",
+ "amazon.it",
+ "amazon.nl",
+ "amazon.sa",
+ "amazonaws.com",
+ "amazoninspire.com",
+ "assoc-amazon.com",
+ "audible.co.jp",
+ "audible.co.uk",
+ "audible.com",
+ "audible.de",
+ "audible.fr",
+ "audible.in",
+ "audible.it",
+ "bookdepository.com",
+ "boxofficemojo.com",
+ "brilliancepublishing.com",
+ "comixology.com",
+ "createspace.com",
+ "dpreview.com",
+ "dpreview.in",
+ "eastdane.com",
+ "fabric.com",
+ "goodreads.com",
+ "iberlibro.com",
+ "imdb.com",
+ "imdb.de",
+ "junglee.com",
+ "look.com",
+ "pillpack.com",
+ "shopbop.com",
+ "souq.com",
+ "twitch.com",
+ "twitch.tv",
+ "wholefoodsmarket.com",
+ "withoutabox.com",
+ "woot.com",
+ "yoyo.com",
+ "zappos.com",
+ "zvab.com"
+ ],
+ "resources": [
+ "alexa.com",
+ "alexametrics.com",
+ "amazon-adsystem.com",
+ "amazon.ca",
+ "amazon.co.jp",
+ "amazon.co.uk",
+ "amazon.com",
+ "amazon.de",
+ "amazon.es",
+ "amazon.fr",
+ "amazon.it",
+ "amazonaws.com",
+ "assoc-amazon.com",
+ "cloudfront.net",
+ "ssl-images-amazon.com"
+ ]
+ },
+ "Ambient Digital": {
+ "properties": ["adnetwork.vn", "ambientdigital.com.vn"],
+ "resources": ["adnetwork.vn", "ambientdigital.com.vn"]
+ },
+ "Amobee": {
+ "properties": ["amobee.com", "smartclip.com"],
+ "resources": [
+ "adconion.com",
+ "amgdgt.com",
+ "amobee.com",
+ "euroclick.com",
+ "smartclip.com",
+ "turn.com"
+ ]
+ },
+ "Amplitude": {
+ "properties": ["amplitude.com"],
+ "resources": ["amplitude.com"]
+ },
+ "AndBeyond": {
+ "properties": ["andbeyond.media"],
+ "resources": ["andbeyond.media"]
+ },
+ "anormal-media.de": {
+ "properties": ["anormal-media.de", "primawebtools.de"],
+ "resources": ["anormal-media.de", "anormal-tracker.de", "primawebtools.de"]
+ },
+ "Answers.com": {
+ "properties": ["answers.com", "dsply.com"],
+ "resources": ["dsply.com"]
+ },
+ "AOL": {
+ "properties": [
+ "5min.com",
+ "adsonar.com",
+ "advertising.com",
+ "aim.com",
+ "aol.com",
+ "aolcdn.com",
+ "aoltechguru.com",
+ "atwola.com",
+ "autoblog.com",
+ "cambio.com",
+ "dailyfinance.com",
+ "editions.com",
+ "engadget.com",
+ "games.com",
+ "homesessive.com",
+ "huffingtonpost.com",
+ "leadback.com",
+ "makers.com",
+ "mandatory.com",
+ "mapquest.com",
+ "moviefone.com",
+ "noisecreep.com",
+ "patch.com",
+ "pawnation.com",
+ "shortcuts.com",
+ "shoutcast.com",
+ "spinner.com",
+ "stylelist.com",
+ "stylemepretty.com",
+ "surphace.com",
+ "tacoda.net",
+ "techcrunch.com",
+ "theboombox.com",
+ "theboot.com",
+ "userplane.com",
+ "winamp.com"
+ ],
+ "resources": [
+ "5min.com",
+ "adsonar.com",
+ "adtechjp.com",
+ "advertising.com",
+ "aim.com",
+ "aol.com",
+ "aolcdn.com",
+ "aolcloud.net",
+ "atwola.com",
+ "editions.com",
+ "leadback.com",
+ "mapquest.com",
+ "patch.com",
+ "shortcuts.com",
+ "shoutcast.com",
+ "spinner.com",
+ "surphace.com",
+ "tacoda.net",
+ "userplane.com",
+ "vidible.tv",
+ "winamp.com"
+ ]
+ },
+ "AppCast": {
+ "properties": ["appcast.io"],
+ "resources": ["appcast.io"]
+ },
+ "Appenda": {
+ "properties": ["appenda.com"],
+ "resources": ["appenda.com"]
+ },
+ "AppFlood": {
+ "properties": ["appflood.com"],
+ "resources": ["appflood.com"]
+ },
+ "Appier": {
+ "properties": ["appier.com"],
+ "resources": ["appier.com"]
+ },
+ "Applifier": {
+ "properties": ["applifier.com"],
+ "resources": ["applifier.com"]
+ },
+ "Applovin": {
+ "properties": ["applovin.com"],
+ "resources": ["applovin.com"]
+ },
+ "AppNexus": {
+ "properties": ["adlantic.nl", "adnxs.com", "adrdgt.com", "appnexus.com"],
+ "resources": ["adlantic.nl", "adnxs.com", "adrdgt.com", "appnexus.com"]
+ },
+ "AppsFlyer": {
+ "properties": ["appsflyer.com"],
+ "resources": ["appsflyer.com"]
+ },
+ "appssavvy": {
+ "properties": ["appssavvy.com"],
+ "resources": ["appssavvy.com"]
+ },
+ "Arkwrights Homebrew": {
+ "properties": ["whiskyandwines.com"],
+ "resources": ["arkwrightshomebrew.com", "ctasnet.com", "whiskyandwines.com"]
+ },
+ "AT Internet": {
+ "properties": ["atinternet.com", "xiti.com"],
+ "resources": ["at-o.net", "atinternet.com", "hit-parade.com", "xiti.com"]
+ },
+ "ATN": {
+ "properties": ["affiliatetracking.com"],
+ "resources": ["affiliatetracking.com"]
+ },
+ "Atoomic.com": {
+ "properties": ["atoomic.com"],
+ "resources": ["atoomic.com"]
+ },
+ "Atrinsic": {
+ "properties": ["atrinsic.com"],
+ "resources": ["atrinsic.com"]
+ },
+ "AT&T": {
+ "properties": ["att.com", "yp.com"],
+ "resources": ["att.com", "yp.com"]
+ },
+ "Attracta": {
+ "properties": ["attracta.com"],
+ "resources": ["attracta.com"]
+ },
+ "Audience2Media": {
+ "properties": ["audience2media.com"],
+ "resources": ["audience2media.com"]
+ },
+ "Audience Ad Network": {
+ "properties": ["audienceadnetwork.com"],
+ "resources": ["audienceadnetwork.com"]
+ },
+ "AudienceScience": {
+ "properties": ["audiencescience.com"],
+ "resources": [
+ "audiencescience.com",
+ "revsci.net",
+ "targetingmarketplace.com",
+ "wunderloop.net"
+ ]
+ },
+ "AuditedMedia": {
+ "properties": ["auditedmedia.com"],
+ "resources": ["aamapi.com", "aamsitecertifier.com", "auditedmedia.com"]
+ },
+ "Augme": {
+ "properties": ["hipcricket.com"],
+ "resources": ["augme.com", "hipcricket.com"]
+ },
+ "Augur": {
+ "properties": ["augur.io"],
+ "resources": ["augur.io"]
+ },
+ "AUTOCENTRE.UA": {
+ "properties": ["am.ua", "autocentre.ua"],
+ "resources": ["am.ua", "autocentre.ua"]
+ },
+ "Automattic": {
+ "properties": [
+ "automattic.com",
+ "gravatar.com",
+ "intensedebate.com",
+ "polldaddy.com"
+ ],
+ "resources": [
+ "automattic.com",
+ "gravatar.com",
+ "intensedebate.com",
+ "polldaddy.com",
+ "pubmine.com"
+ ]
+ },
+ "Avalanchers": {
+ "properties": ["avalanchers.com"],
+ "resources": ["avalanchers.com"]
+ },
+ "AvantLink": {
+ "properties": ["avantlink.com", "avantmetrics.com"],
+ "resources": ["avantlink.com", "avmws.com"]
+ },
+ "Avocet": {
+ "properties": ["avocet.io"],
+ "resources": ["avocet.io"]
+ },
+ "Avsads": {
+ "properties": ["avsads.com"],
+ "resources": ["avsads.com"]
+ },
+ "AWeber": {
+ "properties": ["aweber.com"],
+ "resources": ["aweber.com"]
+ },
+ "Awin": {
+ "properties": ["awin.com"],
+ "resources": [
+ "awin.com",
+ "digitalwindow.com",
+ "dwin1.com",
+ "perfiliate.com"
+ ]
+ },
+ "Awio": {
+ "properties": ["awio.com", "w3counter.com"],
+ "resources": ["awio.com", "w3counter.com", "w3roi.com"]
+ },
+ "Azet": {
+ "properties": ["azet.sk", "mediaimpact.sk"],
+ "resources": ["azet.sk", "azetklik.sk", "mediaimpact.sk", "rsz.sk"]
+ },
+ "BackBeat Media": {
+ "properties": ["backbeatmedia.com"],
+ "resources": ["backbeatmedia.com"]
+ },
+ "Bannerconnect": {
+ "properties": ["bannerconnect.net"],
+ "resources": ["bannerconnect.net"]
+ },
+ "Barilliance": {
+ "properties": ["barilliance.com"],
+ "resources": ["barilliance.com"]
+ },
+ "BaronsNetworks": {
+ "properties": ["baronsoffers.com"],
+ "resources": ["baronsoffers.com"]
+ },
+ "Batanga Network": {
+ "properties": ["batanga.com", "corp.vix.com", "vix.com"],
+ "resources": ["batanga.com", "batanganetwork.com", "vix.com"]
+ },
+ "Baynote": {
+ "properties": ["baynote.com"],
+ "resources": ["baynote.com", "baynote.net"]
+ },
+ "Bazaarvoice": {
+ "properties": ["bazaarvoice.com"],
+ "resources": ["bazaarvoice.com"]
+ },
+ "BeachFront": {
+ "properties": ["beachfront.com"],
+ "resources": ["beachfront.com"]
+ },
+ "Beanstock Media": {
+ "properties": ["beanstockmedia.com"],
+ "resources": ["beanstockmedia.com"]
+ },
+ "beencounter": {
+ "properties": ["beencounter.com"],
+ "resources": ["beencounter.com"]
+ },
+ "Begun": {
+ "properties": ["begun.ru"],
+ "resources": ["begun.ru"]
+ },
+ "belboon": {
+ "properties": ["belboon.com"],
+ "resources": ["adbutler.de", "belboon.com"]
+ },
+ "Belstat": {
+ "properties": [
+ "belstat.be",
+ "belstat.com",
+ "belstat.de",
+ "belstat.fr",
+ "belstat.nl"
+ ],
+ "resources": [
+ "belstat.be",
+ "belstat.com",
+ "belstat.de",
+ "belstat.fr",
+ "belstat.nl"
+ ]
+ },
+ "Betgenius": {
+ "properties": ["betgenius.com", "connextra.com"],
+ "resources": ["betgenius.com", "connextra.com"]
+ },
+ "BetssonPalantir": {
+ "properties": ["betssonpalantir.com"],
+ "resources": ["betssonpalantir.com"]
+ },
+ "BetweenDigital": {
+ "properties": ["betweendigital.com"],
+ "resources": ["betweendigital.com"]
+ },
+ "Bidfluence": {
+ "properties": ["bidfluence.com"],
+ "resources": ["bidfluence.com"]
+ },
+ "Bidr": {
+ "properties": ["bidr.io"],
+ "resources": ["bidr.io"]
+ },
+ "BidSwitch": {
+ "properties": ["bidswitch.com"],
+ "resources": ["bidswitch.net", "mfadsrvr.com"]
+ },
+ "Bidtellect": {
+ "properties": ["bidtellect.com", "bttrack.com"],
+ "resources": ["bidtellect.com", "bttrack.com"]
+ },
+ "BidVertiser": {
+ "properties": ["bidvertiser.com"],
+ "resources": ["bidvertiser.com"]
+ },
+ "BigClick": {
+ "properties": ["bigclick.me"],
+ "resources": ["bgclck.me", "xcvgdf.party"]
+ },
+ "BigDoor": {
+ "properties": ["bigdoor.com"],
+ "resources": ["bigdoor.com", "onetruefan.com"]
+ },
+ "bigmirnet": {
+ "properties": ["bigmir.net"],
+ "resources": ["bigmir.net"]
+ },
+ "BinLayer": {
+ "properties": ["binlayer.com"],
+ "resources": ["binlayer.com"]
+ },
+ "Bitcoin Plus": {
+ "properties": ["bitcoinplus.com"],
+ "resources": ["bitcoinplus.com"]
+ },
+ "BitMedia": {
+ "properties": ["bitmedia.io"],
+ "resources": ["bitmedia.io"]
+ },
+ "BittAds": {
+ "properties": ["bittads.com"],
+ "resources": ["bittads.com"]
+ },
+ "Bizo": {
+ "properties": ["bizo.com", "bizographics.com"],
+ "resources": ["bizo.com", "bizographics.com"]
+ },
+ "Black Label Ads": {
+ "properties": ["blacklabelads.com"],
+ "resources": ["blacklabelads.com"]
+ },
+ "BlogCatalog": {
+ "properties": ["blogcatalog.com"],
+ "resources": ["blogcatalog.com"]
+ },
+ "BlogCounter.com": {
+ "properties": ["blogcounter.de"],
+ "resources": ["blogcounter.de"]
+ },
+ "BlogFrog": {
+ "properties": ["theblogfrog.com"],
+ "resources": ["theblogfrog.com"]
+ },
+ "BlogHer": {
+ "properties": ["blogher.com", "blogherads.com"],
+ "resources": ["blogher.com", "blogherads.com"]
+ },
+ "BlogRollr": {
+ "properties": ["blogrollr.com"],
+ "resources": ["blogrollr.com"]
+ },
+ "BLOOM Digital Platforms": {
+ "properties": ["adgear.com", "bloom-hq.com"],
+ "resources": ["adgear.com", "adgrx.com", "bloom-hq.com"]
+ },
+ "BloomReach": {
+ "properties": ["bloomreach.com", "brcdn.com"],
+ "resources": ["bloomreach.com", "brcdn.com", "brsrvr.com"]
+ },
+ "BlueCava": {
+ "properties": ["bluecava.com"],
+ "resources": ["bluecava.com"]
+ },
+ "BlueKai": {
+ "properties": ["bluekai.com", "tracksimple.com"],
+ "resources": ["bkrtx.com", "bluekai.com", "tracksimple.com"]
+ },
+ "Bluemetrix": {
+ "properties": ["bluemetrix.com", "bmmetrix.com"],
+ "resources": ["bluemetrix.com", "bmmetrix.com"]
+ },
+ "Blu Trumpet": {
+ "properties": ["blutrumpet.com"],
+ "resources": ["blutrumpet.com"]
+ },
+ "Bombora": {
+ "properties": ["bombora.com"],
+ "resources": ["ml314.com"]
+ },
+ "Boo-Box": {
+ "properties": ["boo-box.com"],
+ "resources": ["boo-box.com"]
+ },
+ "BoostBox": {
+ "properties": ["boostbox.com.br"],
+ "resources": ["boostbox.com.br"]
+ },
+ "Bouncex": {
+ "properties": ["bouncex.com"],
+ "resources": ["bounceexchange.com", "bouncex.com", "bouncex.net"]
+ },
+ "Brainient": {
+ "properties": ["brainient.com"],
+ "resources": ["brainient.com"]
+ },
+ "Branch": {
+ "properties": ["branch.io"],
+ "resources": ["branch.io"]
+ },
+ "Brand Affinity Technologies": {
+ "properties": ["brandaffinity.net"],
+ "resources": ["brandaffinity.net"]
+ },
+ "Brandcrumb": {
+ "properties": ["brandcrumb.com"],
+ "resources": ["brandcrumb.com"]
+ },
+ "Brand.net": {
+ "properties": ["brand.net"],
+ "resources": ["brand.net"]
+ },
+ "Brandscreen": {
+ "properties": ["brandscreen.com", "rtbidder.net"],
+ "resources": ["brandscreen.com", "rtbidder.net"]
+ },
+ "Branica": {
+ "properties": ["branica.com"],
+ "resources": ["branica.com"]
+ },
+ "BreakTime": {
+ "properties": ["breaktime.com.tw"],
+ "resources": ["breaktime.com.tw"]
+ },
+ "Brightcove": {
+ "properties": ["brightcove.com"],
+ "resources": ["brightcove.com"]
+ },
+ "BrightEdge": {
+ "properties": ["brightedge.com"],
+ "resources": ["b0e8.com", "brightedge.com"]
+ },
+ "BrightRoll": {
+ "properties": ["brightroll.com"],
+ "resources": ["brightroll.com", "btrll.com"]
+ },
+ "BrightTag": {
+ "properties": ["brighttag.com", "btstatic.com", "thebrighttag.com"],
+ "resources": ["brighttag.com", "btstatic.com", "thebrighttag.com"]
+ },
+ "Brilig": {
+ "properties": ["brilig.com"],
+ "resources": ["brilig.com"]
+ },
+ "Browser-Update.org": {
+ "properties": ["browser-update.org"],
+ "resources": ["browser-update.org"]
+ },
+ "BTBuckets": {
+ "properties": ["btbuckets.com"],
+ "resources": ["btbuckets.com"]
+ },
+ "Bubblestat": {
+ "properties": ["bubblestat.com"],
+ "resources": ["bubblestat.com"]
+ },
+ "BuckSense": {
+ "properties": ["bucksense.com"],
+ "resources": ["bucksense.com"]
+ },
+ "Buffer": {
+ "properties": ["bufferapp.com"],
+ "resources": ["bufferapp.com"]
+ },
+ "Bunchball": {
+ "properties": ["bunchball.com"],
+ "resources": ["bunchball.com"]
+ },
+ "Burstly": {
+ "properties": ["burstly.com"],
+ "resources": ["burstly.com"]
+ },
+ "Burst Media": {
+ "properties": [
+ "burstbeacon.com",
+ "burstdirectads.com",
+ "burstmedia.com",
+ "burstnet.com",
+ "giantrealm.com"
+ ],
+ "resources": [
+ "burstbeacon.com",
+ "burstdirectads.com",
+ "burstmedia.com",
+ "burstnet.com",
+ "giantrealm.com"
+ ]
+ },
+ "BusinessOnline": {
+ "properties": ["businessol.com"],
+ "resources": ["businessol.com"]
+ },
+ "Button": {
+ "properties": ["usebutton.com"],
+ "resources": ["usebutton.com"]
+ },
+ "buySAFE": {
+ "properties": ["buysafe.com"],
+ "resources": ["buysafe.com"]
+ },
+ "BuySellAds": {
+ "properties": ["beaconads.com", "buysellads.com"],
+ "resources": ["beaconads.com", "buysellads.com"]
+ },
+ "Buysight": {
+ "properties": ["buysight.com", "permuto.com", "pulsemgr.com"],
+ "resources": ["buysight.com", "permuto.com", "pulsemgr.com"]
+ },
+ "BuzzFeed": {
+ "properties": ["buzzfeed.com"],
+ "resources": ["buzzfed.com", "buzzfeed.com"]
+ },
+ "BuzzParadise": {
+ "properties": ["buzzparadise.com"],
+ "resources": ["buzzparadise.com"]
+ },
+ "BV! MEDIA": {
+ "properties": ["branchez-vous.com", "bvmedia.ca"],
+ "resources": [
+ "branchez-vous.com",
+ "bvmedia.ca",
+ "networldmedia.com",
+ "networldmedia.net"
+ ]
+ },
+ "c1exchange": {
+ "properties": ["c1exchange.com"],
+ "resources": ["c1exchange.com"]
+ },
+ "C3 Metrics": {
+ "properties": ["attributionmodel.com", "c3metrics.com", "c3tag.com"],
+ "resources": ["attributionmodel.com", "c3metrics.com", "c3tag.com"]
+ },
+ "Cadreon": {
+ "properties": ["cadreon.com"],
+ "resources": ["cadreon.com"]
+ },
+ "CallSource": {
+ "properties": ["callsource.com"],
+ "resources": ["leadtrackingdata.com"]
+ },
+ "CampaignGrid": {
+ "properties": ["campaigngrid.com"],
+ "resources": ["campaigngrid.com"]
+ },
+ "CAPITALDATA": {
+ "properties": ["capitaldata.fr"],
+ "resources": ["capitaldata.fr"]
+ },
+ "Carambola": {
+ "properties": ["carambola.com"],
+ "resources": ["carambo.la"]
+ },
+ "Caraytech": {
+ "properties": [
+ "caraytech.com.ar",
+ "e-planning.net",
+ "www.caraytech.com.ar"
+ ],
+ "resources": ["caraytech.com.ar", "e-planning.net", "www.caraytech.com.ar"]
+ },
+ "Cardlytics": {
+ "properties": ["cardlytics.com"],
+ "resources": ["cardlytics.com"]
+ },
+ "Cart.ro": {
+ "properties": ["cart.ro"],
+ "resources": ["cart.ro", "statistics.ro"]
+ },
+ "CartsGuru": {
+ "properties": ["carts.guru"],
+ "resources": ["carts.guru"]
+ },
+ "Casale Media": {
+ "properties": ["casalemedia.com", "medianet.com"],
+ "resources": ["casalemedia.com", "medianet.com"]
+ },
+ "CashBeet": {
+ "properties": ["cashbeet.com"],
+ "resources": ["cashbeet.com", "serv1swork.com"]
+ },
+ "Causes": {
+ "properties": ["causes.com"],
+ "resources": ["causes.com"]
+ },
+ "Cbox": {
+ "properties": ["cbox.ws"],
+ "resources": ["cbox.ws"]
+ },
+ "CBproADS": {
+ "properties": ["cbproads.com"],
+ "resources": ["cbproads.com"]
+ },
+ "CBS Interactive": {
+ "properties": ["cbsinteractive.com", "com.com"],
+ "resources": ["cbsinteractive.com", "com.com"]
+ },
+ "Cedato": {
+ "properties": ["cedato.com"],
+ "resources": ["cedato.com"]
+ },
+ "Cedexis": {
+ "properties": ["cedexis.com"],
+ "resources": ["cedexis.com", "cedexis.net"]
+ },
+ "Certona": {
+ "properties": ["certona.com", "res-x.com"],
+ "resources": ["certona.com", "res-x.com"]
+ },
+ "Chango": {
+ "properties": ["chango.ca", "chango.com"],
+ "resources": ["chango.ca", "chango.com"]
+ },
+ "ChannelAdvisor": {
+ "properties": ["channeladvisor.com", "searchmarketing.com"],
+ "resources": ["channeladvisor.com", "searchmarketing.com"]
+ },
+ "Channel Intelligence": {
+ "properties": ["channelintelligence.com"],
+ "resources": ["channelintelligence.com"]
+ },
+ "Chartbeat": {
+ "properties": ["chartbeat.com", "chartbeat.net"],
+ "resources": ["chartbeat.com", "chartbeat.net"]
+ },
+ "Chartboost": {
+ "properties": ["chartboost.com"],
+ "resources": ["chartboost.com"]
+ },
+ "CheckM8": {
+ "properties": ["checkm8.com"],
+ "resources": ["checkm8.com"]
+ },
+ "Chitika": {
+ "properties": ["chitika.com"],
+ "resources": ["chitika.com", "chitika.net"]
+ },
+ "ChoiceStream": {
+ "properties": ["choicestream.com"],
+ "resources": ["choicestream.com"]
+ },
+ "ClearLink": {
+ "properties": ["clearlink.com"],
+ "resources": ["clearlink.com"]
+ },
+ "ClearSaleing": {
+ "properties": ["clearsaleing.com"],
+ "resources": [
+ "clearsaleing.com",
+ "csdata1.com",
+ "csdata2.com",
+ "csdata3.com"
+ ]
+ },
+ "Clearsearch Media": {
+ "properties": ["pathinteractive.com"],
+ "resources": [
+ "clearsearchmedia.com",
+ "csm-secure.com",
+ "pathinteractive.com"
+ ]
+ },
+ "ClearSight Interactive": {
+ "properties": ["clearsightinteractive.com", "csi-tracking.com"],
+ "resources": ["clearsightinteractive.com", "csi-tracking.com"]
+ },
+ "ClickAider": {
+ "properties": ["clickaider.com"],
+ "resources": ["clickaider.com"]
+ },
+ "Clickayab": {
+ "properties": ["clickyab.com"],
+ "resources": ["clickyab.com"]
+ },
+ "Clickbooth": {
+ "properties": ["clickbooth.com"],
+ "resources": ["adtoll.com", "clickbooth.com"]
+ },
+ "Clickdensity": {
+ "properties": ["clickdensity.com"],
+ "resources": ["clickdensity.com"]
+ },
+ "ClickDimensions": {
+ "properties": ["clickdimensions.com"],
+ "resources": ["clickdimensions.com"]
+ },
+ "ClickDistrict": {
+ "properties": ["clickdistrict.com", "creative-serving.com"],
+ "resources": ["clickdistrict.com", "creative-serving.com"]
+ },
+ "ClickFrog": {
+ "properties": ["clickfrog.ru"],
+ "resources": [
+ "bashirian.biz",
+ "buckridge.link",
+ "clickfrog.ru",
+ "franecki.net",
+ "quitzon.net",
+ "reichelcormier.bid",
+ "wisokykulas.bid"
+ ]
+ },
+ "ClickFuel": {
+ "properties": ["clickfuel.com", "myconversionlab.com"],
+ "resources": [
+ "clickfuel.com",
+ "conversiondashboard.com",
+ "myconversionlab.com"
+ ]
+ },
+ "ClickGuard": {
+ "properties": ["clickguard.com"],
+ "resources": ["clickguard.com"]
+ },
+ "ClickInc": {
+ "properties": ["clickinc.com"],
+ "resources": ["clickinc.com"]
+ },
+ "Clicksor": {
+ "properties": ["clicksor.com", "clicksor.net"],
+ "resources": ["clicksor.com", "clicksor.net"]
+ },
+ "ClickTale": {
+ "properties": ["clicktale.com"],
+ "resources": ["clicktale.com", "clicktale.net", "pantherssl.com"]
+ },
+ "Clickwinks": {
+ "properties": ["clickwinks.com"],
+ "resources": ["clickwinks.com"]
+ },
+ "ClicManager": {
+ "properties": ["clicmanager.fr"],
+ "resources": ["clicmanager.fr"]
+ },
+ "ClipSyndicate": {
+ "properties": ["clipsyndicate.com"],
+ "resources": ["clipsyndicate.com"]
+ },
+ "ClixMetrix": {
+ "properties": ["clixmetrix.com"],
+ "resources": ["clixmetrix.com"]
+ },
+ "Clixpy": {
+ "properties": ["clixpy.com"],
+ "resources": ["clixpy.com"]
+ },
+ "Clixtell": {
+ "properties": ["clixtell.com"],
+ "resources": ["clixtell.com"]
+ },
+ "Clove Network": {
+ "properties": ["clovenetwork.com"],
+ "resources": ["clovenetwork.com"]
+ },
+ "ClustrMaps": {
+ "properties": ["clustrmaps.com"],
+ "resources": ["clustrmaps.com"]
+ },
+ "CNZZ": {
+ "properties": ["cnzz.com"],
+ "resources": ["cnzz.com"]
+ },
+ "Cognitive Match": {
+ "properties": [
+ "cmads.com.tw",
+ "cmadsasia.com",
+ "cmadseu.com",
+ "cmmeglobal.com",
+ "cognitivematch.com"
+ ],
+ "resources": [
+ "cmads.com.tw",
+ "cmadsasia.com",
+ "cmadseu.com",
+ "cmmeglobal.com",
+ "cognitivematch.com"
+ ]
+ },
+ "CoinHive": {
+ "properties": ["authedmine.com", "coinhive.com"],
+ "resources": [
+ "ad-miner.com",
+ "authedmine.com",
+ "bmst.pw",
+ "cnhv.co",
+ "coin-hive.com",
+ "coinhive.com",
+ "wsservices.org"
+ ]
+ },
+ "CoinPot": {
+ "properties": ["coinpot.co"],
+ "resources": ["coinpot.co"]
+ },
+ "Collarity": {
+ "properties": ["collarity.com"],
+ "resources": ["collarity.com"]
+ },
+ "Collective": {
+ "properties": ["collective.com"],
+ "resources": [
+ "collective-media.net",
+ "collective.com",
+ "oggifinogi.com",
+ "tumri.com",
+ "tumri.net",
+ "yt1187.net"
+ ]
+ },
+ "Commission Junction": {
+ "properties": ["cj.com"],
+ "resources": [
+ "apmebf.com",
+ "awltovhc.com",
+ "cj.com",
+ "ftjcfx.com",
+ "kcdwa.com",
+ "qksz.com",
+ "qksz.net",
+ "tqlkg.com",
+ "yceml.net"
+ ]
+ },
+ "Communicator Corp": {
+ "properties": ["communicatorcorp.com"],
+ "resources": ["communicatorcorp.com"]
+ },
+ "Compass Labs": {
+ "properties": ["compasslabs.com"],
+ "resources": ["compasslabs.com"]
+ },
+ "Complex Media": {
+ "properties": [
+ "collider.com",
+ "complex.com",
+ "complexmedianetwork.com",
+ "firstwefeast.com",
+ "pigeonsandplanes.com",
+ "solecollector.com",
+ "theridechannel.com"
+ ],
+ "resources": ["complex.com", "complexmedianetwork.com"]
+ },
+ "Compuware": {
+ "properties": ["axf8.net", "compuware.com", "dynatrace.com"],
+ "resources": ["axf8.net", "compuware.com", "dynatrace.com", "gomez.com"]
+ },
+ "comScore": {
+ "properties": [
+ "adxpose.com",
+ "comscore.com",
+ "scorecardresearch.com",
+ "sitestat.com",
+ "voicefive.com"
+ ],
+ "resources": [
+ "adxpose.com",
+ "certifica.com",
+ "comscore.com",
+ "mdotlabs.com",
+ "proxilinks.com",
+ "proximic.com",
+ "proximic.net",
+ "scorecardresearch.com",
+ "sitestat.com",
+ "voicefive.com"
+ ]
+ },
+ "Conduit": {
+ "properties": ["conduit-banners.com", "conduit.com"],
+ "resources": [
+ "conduit-banners.com",
+ "conduit-services.com",
+ "conduit.com",
+ "wibiya.com"
+ ]
+ },
+ "Congoo": {
+ "properties": ["congoo.com"],
+ "resources": ["congoo.com"]
+ },
+ "Connatix.com": {
+ "properties": ["connatix.com"],
+ "resources": ["connatix.com"]
+ },
+ "Connexity": {
+ "properties": ["connexity.com", "pricegrabber.com"],
+ "resources": ["connexity.com", "connexity.net", "pricegrabber.com"]
+ },
+ "Consilium Media": {
+ "properties": ["consiliummedia.com"],
+ "resources": ["consiliummedia.com"]
+ },
+ "Consumable": {
+ "properties": ["consumable.com"],
+ "resources": ["consumable.com"]
+ },
+ "Contact At Once!": {
+ "properties": ["contactatonce.com"],
+ "resources": ["contactatonce.com"]
+ },
+ "CONTAXE": {
+ "properties": ["contaxe.com"],
+ "resources": ["contaxe.com"]
+ },
+ "ContentABC": {
+ "properties": ["contentabc.com"],
+ "resources": ["contentabc.com"]
+ },
+ "CONTEXTin": {
+ "properties": ["admailtiser.com", "contextin.com"],
+ "resources": ["admailtiser.com", "contextin.com"]
+ },
+ "ContextuAds": {
+ "properties": ["agencytradingdesk.net", "contextuads.com"],
+ "resources": ["agencytradingdesk.net", "contextuads.com"]
+ },
+ "CONTEXTWEB": {
+ "properties": ["contextweb.com"],
+ "resources": ["contextweb.com"]
+ },
+ "ConvergeDirect": {
+ "properties": ["convergedirect.com", "convergetrack.com"],
+ "resources": ["convergedirect.com", "convergetrack.com"]
+ },
+ "ConversantMedia": {
+ "properties": ["conversantmedia.com"],
+ "resources": [
+ "adserver.com",
+ "conversantmedia.com",
+ "dotomi.com",
+ "dtmpub.com",
+ "emjcd.com",
+ "fastclick.com",
+ "fastclick.net",
+ "greystripe.com",
+ "lduhtrp.net",
+ "mediaplex.com",
+ "valueclick.com",
+ "valueclick.net",
+ "valueclickmedia.com"
+ ]
+ },
+ "ConversionRuler": {
+ "properties": ["conversionruler.com"],
+ "resources": ["conversionruler.com"]
+ },
+ "Conversive": {
+ "properties": ["conversive.nl"],
+ "resources": ["conversive.nl"]
+ },
+ "Convert Insights": {
+ "properties": ["convert.com", "reedge.com"],
+ "resources": ["convert.com", "reedge.com"]
+ },
+ "Convertro": {
+ "properties": ["convertro.com"],
+ "resources": ["convertro.com"]
+ },
+ "Conviva": {
+ "properties": ["conviva.com"],
+ "resources": ["conviva.com"]
+ },
+ "CoreMotives": {
+ "properties": ["coremotives.com"],
+ "resources": ["coremotives.com"]
+ },
+ "Cox Digital Solutions": {
+ "properties": ["adify.com", "coxdigitalsolutions.com", "novomotus.com"],
+ "resources": [
+ "adify.com",
+ "afy11.net",
+ "coxdigitalsolutions.com",
+ "novomotus.com"
+ ]
+ },
+ "CPMStar": {
+ "properties": ["cpmstar.com"],
+ "resources": ["cpmstar.com"]
+ },
+ "CPX Interactive": {
+ "properties": ["cpxadroit.com"],
+ "resources": ["adreadypixels.com", "cpxadroit.com", "cpxinteractive.com"]
+ },
+ "Crazy Egg": {
+ "properties": ["cetrk.com", "crazyegg.com"],
+ "resources": ["cetrk.com", "crazyegg.com"]
+ },
+ "Creafi": {
+ "properties": ["creafi.com"],
+ "resources": ["creafi.com"]
+ },
+ "Crimtan": {
+ "properties": ["crimtan.com"],
+ "resources": ["crimtan.com"]
+ },
+ "Crisp Media": {
+ "properties": ["crispmedia.com"],
+ "resources": ["crispmedia.com"]
+ },
+ "Criteo": {
+ "properties": ["criteo.com", "criteo.net"],
+ "resources": [
+ "criteo.com",
+ "criteo.net",
+ "hlserve.com",
+ "hooklogic.com",
+ "storetail.io"
+ ]
+ },
+ "Cross Pixel": {
+ "properties": ["crosspixel.net"],
+ "resources": ["crosspixel.net", "crosspixelmedia.com", "crsspxl.com"]
+ },
+ "Crowd Science": {
+ "properties": ["crowdscience.com"],
+ "resources": ["crowdscience.com"]
+ },
+ "CryptoLoot": {
+ "properties": ["crypto-loot.com"],
+ "resources": [
+ "cryptaloot.pro",
+ "crypto-loot.com",
+ "cryptolootminer.com",
+ "flashx.pw",
+ "gitgrub.pro",
+ "reauthenticator.com",
+ "statdynamic.com",
+ "webmine.pro"
+ ]
+ },
+ "CryptoWebMiner": {
+ "properties": ["crypto-webminer.com"],
+ "resources": [
+ "bitcoin-pay.eu",
+ "crypto-webminer.com",
+ "ethpocket.de",
+ "ethtrader.de"
+ ]
+ },
+ "cXense": {
+ "properties": ["cxense.com"],
+ "resources": [
+ "cxense.com",
+ "emediate.biz",
+ "emediate.com",
+ "emediate.dk",
+ "emediate.eu"
+ ]
+ },
+ "Cya2": {
+ "properties": ["cya2.net"],
+ "resources": ["cya2.net"]
+ },
+ "Cyberplex": {
+ "properties": ["cyberplex.com"],
+ "resources": ["cyberplex.com"]
+ },
+ "Dada": {
+ "properties": ["dada.eu", "dada.pro", "simply.com"],
+ "resources": ["dada.eu", "dada.pro", "simply.com"]
+ },
+ "DailyMe": {
+ "properties": ["dailyme.com", "newstogram.com"],
+ "resources": ["dailyme.com", "newstogram.com"]
+ },
+ "Dataium": {
+ "properties": ["collserve.com", "ihs.com"],
+ "resources": ["collserve.com", "dataium.com", "ihs.com"]
+ },
+ "Datalogix": {
+ "properties": ["datalogix.com", "nexac.com"],
+ "resources": ["datalogix.com", "nexac.com", "nextaction.net"]
+ },
+ "DataSift": {
+ "properties": ["datasift.com", "tweetmeme.com"],
+ "resources": ["datasift.com", "tweetmeme.com"]
+ },
+ "DataXu": {
+ "properties": ["dataxu.com", "mexad.com", "w55c.net"],
+ "resources": ["dataxu.com", "dataxu.net", "mexad.com", "w55c.net"]
+ },
+ "Datonics": {
+ "properties": ["datonics.com"],
+ "resources": ["datonics.com", "pro-market.net"]
+ },
+ "Datran Media": {
+ "properties": ["datranmedia.com", "displaymarketplace.com"],
+ "resources": ["datranmedia.com", "displaymarketplace.com"]
+ },
+ "Datvantage": {
+ "properties": ["datvantage.com"],
+ "resources": ["datvantage.com"]
+ },
+ "DC Storm": {
+ "properties": ["dc-storm.com", "stormiq.com"],
+ "resources": ["dc-storm.com", "stormiq.com"]
+ },
+ "Dedicated Media": {
+ "properties": ["dedicatedmedia.com", "dedicatednetworks.com"],
+ "resources": ["dedicatedmedia.com", "dedicatednetworks.com"]
+ },
+ "Deep Intent": {
+ "properties": ["deepintent.com"],
+ "resources": ["deepintent.com"]
+ },
+ "Delivr": {
+ "properties": ["delivr.com"],
+ "resources": ["delivr.com", "percentmobile.com"]
+ },
+ "Delta Projects": {
+ "properties": ["deltaprojects.com"],
+ "resources": [
+ "adaction.se",
+ "de17a.com",
+ "deltaprojects.com",
+ "deltaprojects.se"
+ ]
+ },
+ "Demandbase": {
+ "properties": ["demandbase.com"],
+ "resources": ["company-target.com", "demandbase.com"]
+ },
+ "Demand Media": {
+ "properties": ["leafgroup.com"],
+ "resources": ["demandmedia.com", "indieclick.com"]
+ },
+ "Deutsche Post DHL": {
+ "properties": ["dpdhl.com"],
+ "resources": ["adcloud.com", "adcloud.net", "dp-dhl.com", "dpdhl.com"]
+ },
+ "Developer Media": {
+ "properties": ["developermedia.com"],
+ "resources": ["developermedia.com", "lqcdn.com"]
+ },
+ "DG": {
+ "properties": ["dgit.com", "sizmek.com"],
+ "resources": [
+ "dgit.com",
+ "eyeblaster.com",
+ "eyewonder.com",
+ "mdadx.com",
+ "serving-sys.com",
+ "unicast.com"
+ ]
+ },
+ "dianomi": {
+ "properties": ["dianomi.com"],
+ "resources": ["dianomi.com"]
+ },
+ "Didit": {
+ "properties": ["didit.com"],
+ "resources": ["did-it.com", "didit.com"]
+ },
+ "Digg": {
+ "properties": ["digg.com"],
+ "resources": ["digg.com"]
+ },
+ "DigitalAdConsortium": {
+ "properties": ["dac.co.jp"],
+ "resources": ["impact-ad.jp"]
+ },
+ "Digital River": {
+ "properties": ["digitalriver.com", "keywordmax.com", "netflame.cc"],
+ "resources": ["digitalriver.com", "keywordmax.com", "netflame.cc"]
+ },
+ "Digital Target": {
+ "properties": ["digitaltarget.ru"],
+ "resources": ["digitaltarget.ru"]
+ },
+ "Digitize": {
+ "properties": ["digitize.ie"],
+ "resources": ["digitize.ie"]
+ },
+ "DirectAdvert": {
+ "properties": ["directadvert.ru"],
+ "resources": ["directadvert.ru"]
+ },
+ "DirectCORP": {
+ "properties": ["directcorp.de", "ipcounter.de"],
+ "resources": ["directcorp.de", "ipcounter.de"]
+ },
+ "Direct Response Group": {
+ "properties": ["directresponsegroup.com"],
+ "resources": ["directresponsegroup.com", "ppctracking.net"]
+ },
+ "Directtrack": {
+ "properties": ["directtrack.com"],
+ "resources": ["directtrack.com"]
+ },
+ "Disqus": {
+ "properties": ["disqus.com", "disqusads.com"],
+ "resources": ["disqus.com", "disqusads.com"]
+ },
+ "DistilNetworks": {
+ "properties": ["distilnetworks.com"],
+ "resources": ["distilnetworks.com", "distiltag.com"]
+ },
+ "DistrictM": {
+ "properties": ["districtm.net"],
+ "resources": ["districtm.io"]
+ },
+ "dmpxs": {
+ "properties": ["dmpxs.com"],
+ "resources": ["dmpxs.com"]
+ },
+ "DoublePimp": {
+ "properties": ["doublepimp.com"],
+ "resources": ["doublepimp.com"]
+ },
+ "DoublePositive": {
+ "properties": ["doublepositive.com"],
+ "resources": ["bid-tag.com", "doublepositive.com"]
+ },
+ "DoubleVerify": {
+ "properties": ["doubleverify.com"],
+ "resources": ["doubleverify.com"]
+ },
+ "Drawbridge": {
+ "properties": ["drawbridge.com"],
+ "resources": ["adsymptotic.com", "drawbrid.ge", "drawbridge.com"]
+ },
+ "DS-IQ": {
+ "properties": ["ds-iq.com"],
+ "resources": ["ds-iq.com"]
+ },
+ "DSNR Group": {
+ "properties": ["dsnrgroup.com", "dsnrmg.com", "traffiliate.com", "z5x.net"],
+ "resources": [
+ "dsnrgroup.com",
+ "dsnrmg.com",
+ "traffiliate.com",
+ "z5x.com",
+ "z5x.net"
+ ]
+ },
+ "dwstat.com": {
+ "properties": ["dwstat.cn"],
+ "resources": ["dwstat.cn"]
+ },
+ "DynAdmic": {
+ "properties": ["dynadmic.com"],
+ "resources": ["dynadmic.com", "dyntrk.com"]
+ },
+ "DynamicOxygen": {
+ "properties": ["dynamicoxygen.com", "exitjunction.com"],
+ "resources": ["dynamicoxygen.com", "exitjunction.com"]
+ },
+ "DynamicYield": {
+ "properties": ["dynamicyield.com"],
+ "resources": ["dynamicyield.com"]
+ },
+ "Earnify": {
+ "properties": ["earnify.com"],
+ "resources": ["earnify.com"]
+ },
+ "eBay": {
+ "properties": [
+ "ebay.at",
+ "ebay.ba",
+ "ebay.be",
+ "ebay.ca",
+ "ebay.ch",
+ "ebay.cn",
+ "ebay.co.jp",
+ "ebay.co.kr",
+ "ebay.co.uk",
+ "ebay.com",
+ "ebay.com.au",
+ "ebay.com.hk",
+ "ebay.com.my",
+ "ebay.com.ph",
+ "ebay.com.sg",
+ "ebay.com.tw",
+ "ebay.de",
+ "ebay.es",
+ "ebay.fr",
+ "ebay.ie",
+ "ebay.in",
+ "ebay.it",
+ "ebay.nl",
+ "ebay.pl"
+ ],
+ "resources": ["ebay.com"]
+ },
+ "Echo": {
+ "properties": ["aboutecho.com", "haloscan.com", "js-kit.com"],
+ "resources": ["aboutecho.com", "haloscan.com", "js-kit.com"]
+ },
+ "ECSAnalytics": {
+ "properties": ["ecsanalytics.com", "theecsinc.com"],
+ "resources": ["ecsanalytics.com"]
+ },
+ "EFF": {
+ "properties": [
+ "do-not-tracker.org",
+ "eff.org",
+ "eviltracker.net",
+ "trackersimulator.org"
+ ],
+ "resources": [
+ "do-not-tracker.org",
+ "eff.org",
+ "eviltracker.net",
+ "trackersimulator.org"
+ ]
+ },
+ "Effective Measure": {
+ "properties": ["effectivemeasure.com", "effectivemeasure.net"],
+ "resources": ["effectivemeasure.com", "effectivemeasure.net"]
+ },
+ "ekolay": {
+ "properties": ["hurriyet.com.tr"],
+ "resources": ["e-kolay.net", "ekolay.net", "hurriyet.com.tr"]
+ },
+ "Eleavers": {
+ "properties": ["eleavers.com"],
+ "resources": ["eleavers.com"]
+ },
+ "Emego": {
+ "properties": ["usemax.de"],
+ "resources": ["usemax.de"]
+ },
+ "Emerse": {
+ "properties": ["emerse.com"],
+ "resources": ["emerse.com"]
+ },
+ "EMX": {
+ "properties": ["emxdigital.com"],
+ "resources": [
+ "brealtime.com",
+ "clearstream.tv",
+ "emxdgt.com",
+ "emxdigital.com"
+ ]
+ },
+ "Enecto": {
+ "properties": ["enecto.com"],
+ "resources": ["enecto.com"]
+ },
+ "engage:BDR": {
+ "properties": ["engagebdr.com"],
+ "resources": ["bnmla.com", "engagebdr.com"]
+ },
+ "Engago Technology": {
+ "properties": ["engago.com"],
+ "resources": ["appmetrx.com", "engago.com"]
+ },
+ "Engine Network": {
+ "properties": ["enginenetwork.com"],
+ "resources": ["enginenetwork.com"]
+ },
+ "Ensighten": {
+ "properties": ["ensighten.com"],
+ "resources": ["ensighten.com"]
+ },
+ "Entireweb": {
+ "properties": ["entireweb.com"],
+ "resources": ["entireweb.com"]
+ },
+ "Epic Media Group": {
+ "properties": [
+ "epicadvertising.com",
+ "epicmarketplace.com",
+ "theepicmediagroup.com"
+ ],
+ "resources": [
+ "epicadvertising.com",
+ "epicmarketplace.com",
+ "epicmobileads.com",
+ "theepicmediagroup.com",
+ "trafficmp.com"
+ ]
+ },
+ "eProof.com": {
+ "properties": ["eproof.com"],
+ "resources": ["eproof.com"]
+ },
+ "Epsilon": {
+ "properties": ["epsilon.com"],
+ "resources": ["epsilon.com"]
+ },
+ "EQ Ads": {
+ "properties": ["eqads.com"],
+ "resources": ["eqads.com"]
+ },
+ "EroAdvertising": {
+ "properties": ["ero-advertising.com"],
+ "resources": ["ero-advertising.com"]
+ },
+ "Etarget": {
+ "properties": ["etarget.net", "etargetnet.com"],
+ "resources": ["etarget.net", "etargetnet.com"]
+ },
+ "Etineria": {
+ "properties": ["adwitserver.com", "etineria.com"],
+ "resources": ["adwitserver.com", "etineria.com"]
+ },
+ "etracker": {
+ "properties": ["etracker.com", "etracker.de"],
+ "resources": [
+ "etracker.com",
+ "etracker.de",
+ "sedotracker.com",
+ "sedotracker.de"
+ ]
+ },
+ "eTrigue": {
+ "properties": ["etrigue.com"],
+ "resources": ["etrigue.com"]
+ },
+ "Eulerian Technologies": {
+ "properties": ["eulerian.com"],
+ "resources": ["eulerian.com", "eulerian.net"]
+ },
+ "Evergage": {
+ "properties": ["evergage.com"],
+ "resources": ["mybuys.com", "veruta.com"]
+ },
+ "Everyday Health": {
+ "properties": ["everydayhealth.com", "waterfrontmedia.com"],
+ "resources": ["everydayhealth.com", "waterfrontmedia.com"]
+ },
+ "Evisions Marketing": {
+ "properties": ["engineseeker.com", "evisionsmarketing.com"],
+ "resources": ["engineseeker.com", "evisionsmarketing.com"]
+ },
+ "Evolve": {
+ "properties": ["evolvemediacorp.com", "gorillanation.com"],
+ "resources": [
+ "evolvemediacorp.com",
+ "evolvemediametrics.com",
+ "gorillanation.com"
+ ]
+ },
+ "eWayDirect": {
+ "properties": ["ewaydirect.com"],
+ "resources": ["ewaydirect.com", "ixs1.net"]
+ },
+ "ewebse": {
+ "properties": ["777seo.com", "ewebse.com"],
+ "resources": ["777seo.com", "ewebse.com"]
+ },
+ "excitad": {
+ "properties": ["excitad.com"],
+ "resources": ["excitad.com"]
+ },
+ "eXelate": {
+ "properties": ["exelate.com"],
+ "resources": ["exelate.com", "exelator.com"]
+ },
+ "ExoClick": {
+ "properties": ["exoclick.com"],
+ "resources": ["exoclick.com"]
+ },
+ "Exosrv": {
+ "properties": ["exosrv.com"],
+ "resources": ["exosrv.com"]
+ },
+ "Experian": {
+ "properties": ["experian.com"],
+ "resources": ["audienceiq.com", "experian.com"]
+ },
+ "expo-MAX": {
+ "properties": ["expo-max.com"],
+ "resources": ["expo-max.com"]
+ },
+ "Exponential Interactive": {
+ "properties": ["exponential.com", "fulltango.com"],
+ "resources": [
+ "adotube.com",
+ "exponential.com",
+ "fulltango.com",
+ "tribalfusion.com"
+ ]
+ },
+ "Extension Factory": {
+ "properties": ["extensionfactory.com"],
+ "resources": ["extensionfactory.com"]
+ },
+ "EXTENSIONS.RU": {
+ "properties": ["extensions.ru"],
+ "resources": ["extensions.ru"]
+ },
+ "eXTReMe digital": {
+ "properties": ["extremetracking.com"],
+ "resources": ["extreme-dm.com", "extremetracking.com"]
+ },
+ "Eyeconomy": {
+ "properties": ["eyeconomy.co.uk"],
+ "resources": [
+ "eyeconomy.co.uk",
+ "eyeconomy.com",
+ "sublimemedia.net",
+ "www.eyeconomy.co.uk"
+ ]
+ },
+ "EyeNewton": {
+ "properties": ["eyenewton.ru"],
+ "resources": ["eyenewton.ru"]
+ },
+ "Eyeota": {
+ "properties": ["eyeota.net"],
+ "resources": ["eyeota.net"]
+ },
+ "eyeReturn Marketing": {
+ "properties": ["eyereturnmarketing.com"],
+ "resources": ["eyereturn.com", "eyereturnmarketing.com"]
+ },
+ "Eyeviewdigital": {
+ "properties": ["eyeviewdigital.com"],
+ "resources": ["eyeviewads.com", "eyeviewdigital.com"]
+ },
+ "Facebook": {
+ "properties": [
+ "atlassolutions.com",
+ "facebook.com",
+ "facebook.de",
+ "facebook.fr",
+ "facebook.net",
+ "fb.com",
+ "fb.me",
+ "fbcdn.net",
+ "friendfeed.com",
+ "instagram.com",
+ "internalfb.com",
+ "messenger.com",
+ "oculus.com",
+ "whatsapp.com",
+ "workplace.com"
+ ],
+ "resources": [
+ "apps.fbsbx.com",
+ "atdmt.com",
+ "atlassolutions.com",
+ "facebook.com",
+ "facebook.de",
+ "facebook.fr",
+ "facebook.net",
+ "fb.com",
+ "fb.me",
+ "fbcdn.net",
+ "fbsbx.com",
+ "friendfeed.com",
+ "instagram.com",
+ "messenger.com"
+ ]
+ },
+ "Facilitate Digital": {
+ "properties": [
+ "adsfac.eu",
+ "adsfac.net",
+ "adsfac.us",
+ "facilitatedigital.com"
+ ],
+ "resources": [
+ "adsfac.eu",
+ "adsfac.info",
+ "adsfac.net",
+ "adsfac.sg",
+ "adsfac.us",
+ "facilitatedigital.com"
+ ]
+ },
+ "Fairfax Media": {
+ "properties": ["fairfax.com.au", "fxj.com.au", "www.fxj.com.au"],
+ "resources": ["fairfax.com.au", "fxj.com.au", "www.fxj.com.au"]
+ },
+ "faithadnet": {
+ "properties": ["faithadnet.com"],
+ "resources": ["faithadnet.com"]
+ },
+ "Fanplayr": {
+ "properties": ["fanplayr.com"],
+ "resources": ["fanplayr.com"]
+ },
+ "Fathom": {
+ "properties": ["fathomdelivers.com", "fathomseo.com"],
+ "resources": ["fathomdelivers.com", "fathomseo.com"]
+ },
+ "Federated Media": {
+ "properties": ["hyfn.com", "lijit.com"],
+ "resources": ["federatedmedia.net", "fmpub.net", "hyfn.com", "lijit.com"]
+ },
+ "Feedjit": {
+ "properties": ["feedjit.com"],
+ "resources": ["feedjit.com"]
+ },
+ "FetchBack": {
+ "properties": ["fetchback.com"],
+ "resources": ["fetchback.com"]
+ },
+ "Fiksu": {
+ "properties": ["fiksu.com"],
+ "resources": ["fiksu.com"]
+ },
+ "FinancialContent": {
+ "properties": ["financialcontent.com"],
+ "resources": ["financialcontent.com"]
+ },
+ "Fizz-Buzz Media": {
+ "properties": ["fizzbuzzmedia.com", "fizzbuzzmedia.net"],
+ "resources": ["fizzbuzzmedia.com", "fizzbuzzmedia.net"]
+ },
+ "Flashtalking": {
+ "properties": ["flashtalking.com"],
+ "resources": ["encoremetrics.com", "flashtalking.com", "sitecompass.com"]
+ },
+ "Flattr": {
+ "properties": ["flattr.com"],
+ "resources": ["flattr.com"]
+ },
+ "Flite": {
+ "properties": ["flite.com", "widgetserver.com"],
+ "resources": ["flite.com", "widgetserver.com"]
+ },
+ "Fluct": {
+ "properties": ["adingo.jp", "fluct.jp"],
+ "resources": ["adingo.jp", "fluct.jp"]
+ },
+ "Flytxt": {
+ "properties": ["flytxt.com"],
+ "resources": ["flytxt.com"]
+ },
+ "Footprint": {
+ "properties": ["footprintlive.com"],
+ "resources": ["footprintlive.com"]
+ },
+ "Forbes": {
+ "properties": ["brandsideplatform.com", "forbes.com"],
+ "resources": ["brandsideplatform.com", "forbes.com"]
+ },
+ "Foresee": {
+ "properties": ["foresee.com"],
+ "resources": ["answerscloud.com"]
+ },
+ "Fox One Stop Media": {
+ "properties": [
+ "fimserve.com",
+ "foxnetworks.com",
+ "foxonestop.com",
+ "mobsmith.com",
+ "myads.com",
+ "othersonline.com"
+ ],
+ "resources": [
+ "fimserve.com",
+ "foxnetworks.com",
+ "foxonestop.com",
+ "mobsmith.com",
+ "myads.com",
+ "othersonline.com"
+ ]
+ },
+ "FreakOut": {
+ "properties": ["fout.jp"],
+ "resources": ["fout.jp"]
+ },
+ "Freedom Communications": {
+ "properties": ["freedom.com"],
+ "resources": ["freedom.com"]
+ },
+ "Free Online Users": {
+ "properties": ["freeonlineusers.com"],
+ "resources": ["freeonlineusers.com"]
+ },
+ "Free-PageRank.com": {
+ "properties": ["free-pagerank.com"],
+ "resources": ["free-pagerank.com"]
+ },
+ "FreeWheel": {
+ "properties": ["freewheel.tv", "fwmrm.net"],
+ "resources": ["freewheel.tv", "fwmrm.net", "stickyadstv.com"]
+ },
+ "FriendFinder Networks": {
+ "properties": ["adultfriendfinder.com", "ffn.com", "pop6.com"],
+ "resources": ["adultfriendfinder.com", "ffn.com", "pop6.com"]
+ },
+ "Friends2Follow": {
+ "properties": ["friends2follow.com"],
+ "resources": ["friends2follow.com"]
+ },
+ "Frog Sex": {
+ "properties": ["double-check.com", "frogsex.com"],
+ "resources": ["double-check.com", "frogsex.com"]
+ },
+ "FuelX": {
+ "properties": ["fuelx.com"],
+ "resources": ["fuel451.com"]
+ },
+ "Fullstory": {
+ "properties": ["fullstory.com"],
+ "resources": ["fullstory.com"]
+ },
+ "Future Ads": {
+ "properties": ["futureads.com", "resultlinks.com"],
+ "resources": ["futureads.com", "resultlinks.com"]
+ },
+ "Fyber": {
+ "properties": ["fyber.com"],
+ "resources": ["fyber.com"]
+ },
+ "Game Advertising Online": {
+ "properties": ["game-advertising-online.com"],
+ "resources": ["game-advertising-online.com"]
+ },
+ "Games2win": {
+ "properties": ["games2win.com", "inviziads.com"],
+ "resources": ["games2win.com", "inviziads.com"]
+ },
+ "Gamned": {
+ "properties": ["gamned.com"],
+ "resources": ["gamned.com"]
+ },
+ "Gannett": {
+ "properties": ["gannett.com", "pointroll.com"],
+ "resources": ["gannett.com", "pointroll.com"]
+ },
+ "GB-World": {
+ "properties": ["gb-world.net"],
+ "resources": ["gb-world.net"]
+ },
+ "Gemius": {
+ "properties": ["gemius.com", "gemius.pl"],
+ "resources": ["gemius.com", "gemius.pl"]
+ },
+ "Genesis Media": {
+ "properties": ["genesismedia.com"],
+ "resources": ["genesismedia.com", "genesismediaus.com"]
+ },
+ "GENIEE": {
+ "properties": ["geniee.co.jp"],
+ "resources": ["geniee.co.jp", "gssprt.jp"]
+ },
+ "GENIE GROUP": {
+ "properties": ["geniegroupltd.co.uk", "www.geniegroupltd.co.uk"],
+ "resources": ["geniegroupltd.co.uk", "www.geniegroupltd.co.uk"]
+ },
+ "Genius.com": {
+ "properties": ["genius.com", "rsvpgenius.com"],
+ "resources": ["genius.com", "rsvpgenius.com"]
+ },
+ "GeoAds": {
+ "properties": ["geoads.com"],
+ "resources": ["geoads.com"]
+ },
+ "GetGlue": {
+ "properties": ["elfie.com", "smrtlnks.com"],
+ "resources": ["getglue.com", "smrtlnks.com"]
+ },
+ "GetIntent": {
+ "properties": ["adhigh.net", "getintent.com"],
+ "resources": ["adhigh.net", "getintent.com"]
+ },
+ "Get Satisfaction": {
+ "properties": ["getsatisfaction.com"],
+ "resources": ["getsatisfaction.com"]
+ },
+ "GetSiteControl": {
+ "properties": ["getsitecontrol.com"],
+ "resources": ["getsitecontrol.com"]
+ },
+ "GfK Group": {
+ "properties": ["gfk.com"],
+ "resources": ["daphnecm.com", "gfk.com", "gfkdaphne.com"]
+ },
+ "Gigya": {
+ "properties": ["gigya.com"],
+ "resources": ["gigcount.com", "gigya.com"]
+ },
+ "GISMAds": {
+ "properties": ["gismads.jp"],
+ "resources": ["gismads.jp"]
+ },
+ "GitHub": {
+ "properties": ["gaug.es", "github.com"],
+ "resources": ["gaug.es", "github.com"]
+ },
+ "Glam Media": {
+ "properties": ["glam.com", "glammedia.com"],
+ "resources": ["glam.com", "glammedia.com"]
+ },
+ "Gleam": {
+ "properties": ["gleam.io"],
+ "resources": ["fraudjs.io", "gleam.io"]
+ },
+ "Global Takeoff": {
+ "properties": ["globaltakeoff.com", "globaltakeoff.net"],
+ "resources": ["globaltakeoff.com", "globaltakeoff.net"]
+ },
+ "Globe7": {
+ "properties": ["globe7.com"],
+ "resources": ["globe7.com"]
+ },
+ "Go Daddy": {
+ "properties": ["godaddy.com", "trafficfacts.com"],
+ "resources": ["godaddy.com", "trafficfacts.com"]
+ },
+ "GoDataFeed": {
+ "properties": ["godatafeed.com"],
+ "resources": ["godatafeed.com"]
+ },
+ "GoGrid": {
+ "properties": ["datapipe.com", "formalyzer.com"],
+ "resources": ["datapipe.com", "formalyzer.com", "gogrid.com", "komli.net"]
+ },
+ "Goldbach": {
+ "properties": ["goldbachgroup.com"],
+ "resources": ["goldbach.com", "goldbachgroup.com"]
+ },
+ "GoldSpot Media": {
+ "properties": ["goldspotmedia.com"],
+ "resources": ["goldspotmedia.com"]
+ },
+ "Google": {
+ "properties": [
+ "abc.xyz",
+ "admeld.com",
+ "blogger.com",
+ "blogspot.com",
+ "crashlytics.com",
+ "google-melange.com",
+ "google.ac",
+ "google.ad",
+ "google.ae",
+ "google.al",
+ "google.am",
+ "google.as",
+ "google.at",
+ "google.az",
+ "google.ba",
+ "google.be",
+ "google.bf",
+ "google.bg",
+ "google.bi",
+ "google.bj",
+ "google.bs",
+ "google.bt",
+ "google.by",
+ "google.ca",
+ "google.cat",
+ "google.cd",
+ "google.cf",
+ "google.cg",
+ "google.ch",
+ "google.ci",
+ "google.cl",
+ "google.cm",
+ "google.cn",
+ "google.co.ao",
+ "google.co.bw",
+ "google.co.ck",
+ "google.co.cr",
+ "google.co.id",
+ "google.co.il",
+ "google.co.in",
+ "google.co.jp",
+ "google.co.ke",
+ "google.co.kr",
+ "google.co.ls",
+ "google.co.ma",
+ "google.co.mz",
+ "google.co.nz",
+ "google.co.th",
+ "google.co.tz",
+ "google.co.ug",
+ "google.co.uk",
+ "google.co.uz",
+ "google.co.ve",
+ "google.co.vi",
+ "google.co.za",
+ "google.co.zm",
+ "google.co.zw",
+ "google.com",
+ "google.com.af",
+ "google.com.ag",
+ "google.com.ai",
+ "google.com.ar",
+ "google.com.au",
+ "google.com.bd",
+ "google.com.bh",
+ "google.com.bn",
+ "google.com.bo",
+ "google.com.br",
+ "google.com.bz",
+ "google.com.co",
+ "google.com.cu",
+ "google.com.cy",
+ "google.com.do",
+ "google.com.ec",
+ "google.com.eg",
+ "google.com.et",
+ "google.com.fj",
+ "google.com.gh",
+ "google.com.gi",
+ "google.com.gt",
+ "google.com.hk",
+ "google.com.jm",
+ "google.com.kh",
+ "google.com.kw",
+ "google.com.lb",
+ "google.com.ly",
+ "google.com.mm",
+ "google.com.mt",
+ "google.com.mx",
+ "google.com.my",
+ "google.com.na",
+ "google.com.nf",
+ "google.com.ng",
+ "google.com.ni",
+ "google.com.np",
+ "google.com.om",
+ "google.com.pa",
+ "google.com.pe",
+ "google.com.pg",
+ "google.com.ph",
+ "google.com.pk",
+ "google.com.pr",
+ "google.com.py",
+ "google.com.qa",
+ "google.com.sa",
+ "google.com.sb",
+ "google.com.sg",
+ "google.com.sl",
+ "google.com.sv",
+ "google.com.tj",
+ "google.com.tr",
+ "google.com.tw",
+ "google.com.ua",
+ "google.com.uy",
+ "google.com.vc",
+ "google.com.vn",
+ "google.cv",
+ "google.cz",
+ "google.de",
+ "google.dj",
+ "google.dk",
+ "google.dm",
+ "google.dz",
+ "google.ee",
+ "google.es",
+ "google.fi",
+ "google.fm",
+ "google.fr",
+ "google.ga",
+ "google.ge",
+ "google.gg",
+ "google.gl",
+ "google.gm",
+ "google.gp",
+ "google.gr",
+ "google.gy",
+ "google.hn",
+ "google.hr",
+ "google.ht",
+ "google.hu",
+ "google.ie",
+ "google.im",
+ "google.iq",
+ "google.is",
+ "google.it",
+ "google.je",
+ "google.jo",
+ "google.kg",
+ "google.ki",
+ "google.kz",
+ "google.la",
+ "google.li",
+ "google.lk",
+ "google.lt",
+ "google.lu",
+ "google.lv",
+ "google.md",
+ "google.me",
+ "google.mg",
+ "google.mk",
+ "google.ml",
+ "google.mn",
+ "google.ms",
+ "google.mu",
+ "google.mv",
+ "google.mw",
+ "google.ne",
+ "google.nl",
+ "google.no",
+ "google.nr",
+ "google.nu",
+ "google.pl",
+ "google.pn",
+ "google.ps",
+ "google.pt",
+ "google.ro",
+ "google.rs",
+ "google.ru",
+ "google.rw",
+ "google.sc",
+ "google.se",
+ "google.sh",
+ "google.si",
+ "google.sk",
+ "google.sm",
+ "google.sn",
+ "google.so",
+ "google.st",
+ "google.td",
+ "google.tg",
+ "google.tk",
+ "google.tl",
+ "google.tm",
+ "google.tn",
+ "google.to",
+ "google.tt",
+ "google.vg",
+ "google.vu",
+ "google.ws",
+ "googlesource.com",
+ "ingress.com",
+ "nest.com",
+ "panoramio.com",
+ "pinpoint-dot-chromeperf.appspot.com",
+ "youtube.com"
+ ],
+ "resources": [
+ "2mdn.net",
+ "admeld.com",
+ "admob.com",
+ "apture.com",
+ "blogger.com",
+ "cc-dt.com",
+ "crashlytics.com",
+ "destinationurl.com",
+ "doubleclick.net",
+ "ggpht.com",
+ "gmail.com",
+ "gmodules.com",
+ "google-analytics.com",
+ "google.ac",
+ "google.ad",
+ "google.ae",
+ "google.al",
+ "google.am",
+ "google.as",
+ "google.at",
+ "google.az",
+ "google.ba",
+ "google.be",
+ "google.bf",
+ "google.bg",
+ "google.bi",
+ "google.bj",
+ "google.bs",
+ "google.bt",
+ "google.by",
+ "google.ca",
+ "google.cat",
+ "google.cc",
+ "google.cd",
+ "google.cf",
+ "google.cg",
+ "google.ch",
+ "google.ci",
+ "google.cl",
+ "google.cm",
+ "google.cn",
+ "google.co.ao",
+ "google.co.bw",
+ "google.co.ck",
+ "google.co.cr",
+ "google.co.id",
+ "google.co.il",
+ "google.co.in",
+ "google.co.jp",
+ "google.co.ke",
+ "google.co.kr",
+ "google.co.ls",
+ "google.co.ma",
+ "google.co.mz",
+ "google.co.nz",
+ "google.co.th",
+ "google.co.tz",
+ "google.co.ug",
+ "google.co.uk",
+ "google.co.uz",
+ "google.co.ve",
+ "google.co.vi",
+ "google.co.za",
+ "google.co.zm",
+ "google.co.zw",
+ "google.com",
+ "google.com.af",
+ "google.com.ag",
+ "google.com.ai",
+ "google.com.ar",
+ "google.com.au",
+ "google.com.bd",
+ "google.com.bh",
+ "google.com.bn",
+ "google.com.bo",
+ "google.com.br",
+ "google.com.bz",
+ "google.com.co",
+ "google.com.cu",
+ "google.com.cy",
+ "google.com.do",
+ "google.com.ec",
+ "google.com.eg",
+ "google.com.et",
+ "google.com.fj",
+ "google.com.gh",
+ "google.com.gi",
+ "google.com.gt",
+ "google.com.hk",
+ "google.com.jm",
+ "google.com.kh",
+ "google.com.kw",
+ "google.com.lb",
+ "google.com.lc",
+ "google.com.ly",
+ "google.com.mm",
+ "google.com.mt",
+ "google.com.mx",
+ "google.com.my",
+ "google.com.na",
+ "google.com.nf",
+ "google.com.ng",
+ "google.com.ni",
+ "google.com.np",
+ "google.com.om",
+ "google.com.pa",
+ "google.com.pe",
+ "google.com.pg",
+ "google.com.ph",
+ "google.com.pk",
+ "google.com.pr",
+ "google.com.py",
+ "google.com.qa",
+ "google.com.sa",
+ "google.com.sb",
+ "google.com.sg",
+ "google.com.sl",
+ "google.com.sv",
+ "google.com.tj",
+ "google.com.tn",
+ "google.com.tr",
+ "google.com.tw",
+ "google.com.ua",
+ "google.com.uy",
+ "google.com.vc",
+ "google.com.vn",
+ "google.cv",
+ "google.cz",
+ "google.de",
+ "google.dj",
+ "google.dk",
+ "google.dm",
+ "google.dz",
+ "google.ee",
+ "google.es",
+ "google.fi",
+ "google.fm",
+ "google.fr",
+ "google.ga",
+ "google.ge",
+ "google.gf",
+ "google.gg",
+ "google.gl",
+ "google.gm",
+ "google.gp",
+ "google.gr",
+ "google.gy",
+ "google.hn",
+ "google.hr",
+ "google.ht",
+ "google.hu",
+ "google.ie",
+ "google.im",
+ "google.io",
+ "google.iq",
+ "google.is",
+ "google.it",
+ "google.je",
+ "google.jo",
+ "google.kg",
+ "google.ki",
+ "google.kz",
+ "google.la",
+ "google.li",
+ "google.lk",
+ "google.lt",
+ "google.lu",
+ "google.lv",
+ "google.md",
+ "google.me",
+ "google.mg",
+ "google.mk",
+ "google.ml",
+ "google.mn",
+ "google.ms",
+ "google.mu",
+ "google.mv",
+ "google.mw",
+ "google.ne",
+ "google.nl",
+ "google.no",
+ "google.nr",
+ "google.nu",
+ "google.pl",
+ "google.pn",
+ "google.ps",
+ "google.pt",
+ "google.ro",
+ "google.rs",
+ "google.ru",
+ "google.rw",
+ "google.sc",
+ "google.se",
+ "google.sh",
+ "google.si",
+ "google.sk",
+ "google.sm",
+ "google.sn",
+ "google.so",
+ "google.st",
+ "google.td",
+ "google.tg",
+ "google.tk",
+ "google.tl",
+ "google.tm",
+ "google.tn",
+ "google.to",
+ "google.tt",
+ "google.vg",
+ "google.vu",
+ "google.ws",
+ "googleadservices.com",
+ "googleapis.com",
+ "googlemail.com",
+ "googlesyndication.com",
+ "googletagservices.com",
+ "googleusercontent.com",
+ "googlevideo.com",
+ "gstatic.com",
+ "invitemedia.com",
+ "postrank.com",
+ "recaptcha.net",
+ "smtad.net",
+ "youtube.com"
+ ]
+ },
+ "GoSquared": {
+ "properties": ["gosquared.com"],
+ "resources": ["gosquared.com"]
+ },
+ "GoStats": {
+ "properties": ["gostats.com"],
+ "resources": ["gostats.com"]
+ },
+ "Grapeshot": {
+ "properties": ["grapeshot.co.uk", "www.grapeshot.co.uk"],
+ "resources": ["grapeshot.co.uk", "www.grapeshot.co.uk"]
+ },
+ "GrapheneMedia": {
+ "properties": ["graphenemedia.in"],
+ "resources": ["graphenedigitalanalytics.in"]
+ },
+ "Graphnium": {
+ "properties": ["graphinium.com"],
+ "resources": ["crm4d.com"]
+ },
+ "Gravity": {
+ "properties": ["gravity.com", "grvcdn.com"],
+ "resources": ["gravity.com", "grvcdn.com"]
+ },
+ "Gridcash": {
+ "properties": ["adless.io", "gridcash.net"],
+ "resources": ["adless.io", "gridcash.net"]
+ },
+ "Grocery Shopping Network": {
+ "properties": ["groceryshopping.net"],
+ "resources": ["groceryshopping.net"]
+ },
+ "GroovinAds": {
+ "properties": ["groovinads.com"],
+ "resources": ["groovinads.com"]
+ },
+ "Gruner + Jahr": {
+ "properties": ["guj.de", "ligatus.com"],
+ "resources": ["guj.de", "ligatus.com"]
+ },
+ "GTop": {
+ "properties": ["arenaweb.ro"],
+ "resources": ["arenaweb.ro", "gtop.ro", "gtopstats.com"]
+ },
+ "GumGum": {
+ "properties": ["gumgum.com"],
+ "resources": ["gumgum.com"]
+ },
+ "Gunggo": {
+ "properties": ["gunggo.com"],
+ "resources": ["gunggo.com"]
+ },
+ "Hands Mobile": {
+ "properties": ["hands.com.br", "www.hands.com.br"],
+ "resources": ["hands.com.br", "www.hands.com.br"]
+ },
+ "Harrenmedia": {
+ "properties": ["harrenmedia.com", "harrenmedianetwork.com"],
+ "resources": ["harrenmedia.com", "harrenmedianetwork.com"]
+ },
+ "HealthPricer": {
+ "properties": ["adacado.com", "healthpricer.com"],
+ "resources": ["adacado.com", "healthpricer.com"]
+ },
+ "Hearst": {
+ "properties": [
+ "hearst.com",
+ "ic-live.com",
+ "iclive.com",
+ "icrossing.com",
+ "raasnet.com"
+ ],
+ "resources": [
+ "hearst.com",
+ "ic-live.com",
+ "iclive.com",
+ "icrossing.com",
+ "raasnet.com",
+ "redaril.com",
+ "sptag.com",
+ "sptag1.com",
+ "sptag2.com",
+ "sptag3.com"
+ ]
+ },
+ "Heyzap": {
+ "properties": ["heyzap.com"],
+ "resources": ["heyzap.com"]
+ },
+ "HilltopAds": {
+ "properties": ["hilltopads.com"],
+ "resources": ["hilltopads.com", "hilltopads.net", "shoporielder.pro"]
+ },
+ "Hi-media": {
+ "properties": ["himediagroup.com"],
+ "resources": ["comclick.com", "hi-media.com", "himediagroup.com"]
+ },
+ "Histats": {
+ "properties": ["histats.com"],
+ "resources": ["histats.com"]
+ },
+ "HitsLink": {
+ "properties": ["hitslink.com"],
+ "resources": ["hitslink.com"]
+ },
+ "Hit Sniffer": {
+ "properties": ["hitsniffer.com"],
+ "resources": ["hitsniffer.com"]
+ },
+ "Horyzon Media": {
+ "properties": ["horyzon-media.com"],
+ "resources": ["horyzon-media.com"]
+ },
+ "HotelChamp": {
+ "properties": ["hotelchamp.com"],
+ "resources": ["hotelchamp.com"]
+ },
+ "Hotjar": {
+ "properties": ["hotjar.com"],
+ "resources": ["hotjar.com"]
+ },
+ "HotMart": {
+ "properties": ["hotmart.com"],
+ "resources": ["hotmart.com"]
+ },
+ "HOTWords": {
+ "properties": ["hotwords.com", "hotwords.es"],
+ "resources": ["hotwords.com", "hotwords.es"]
+ },
+ "HP": {
+ "properties": ["hp.com", "opentext.com", "optimost.com"],
+ "resources": ["hp.com", "optimost.com"]
+ },
+ "Httpool": {
+ "properties": ["httpool.com"],
+ "resources": ["httpool.com"]
+ },
+ "HubSpot": {
+ "properties": ["hubspot.com"],
+ "resources": ["hs-analytics.net", "hubspot.com"]
+ },
+ "HUNT Mobile Ads": {
+ "properties": ["huntmads.com"],
+ "resources": ["huntmads.com"]
+ },
+ "Hurra.com": {
+ "properties": ["hurra.com"],
+ "resources": ["hurra.com"]
+ },
+ "IAB": {
+ "properties": ["digitru.st", "iabtechlab.com"],
+ "resources": ["digitru.st"]
+ },
+ "IAC": {
+ "properties": ["iac.com", "iacadvertising.com"],
+ "resources": ["iac.com", "iacadvertising.com"]
+ },
+ "iBehavior": {
+ "properties": ["i-behavior.com", "ib-ibi.com"],
+ "resources": ["i-behavior.com", "ib-ibi.com"]
+ },
+ "IBM": {
+ "properties": ["ibm.com", "multicloud-ibm.com"],
+ "resources": [
+ "cmcore.com",
+ "coremetrics.com",
+ "ibm.com",
+ "unica.com",
+ "xtify.com"
+ ]
+ },
+ "ID5": {
+ "properties": ["id5.io"],
+ "resources": ["id5-sync.com"]
+ },
+ "IDG": {
+ "properties": ["idg.com", "idgtechnetwork.com"],
+ "resources": ["idg.com", "idgtechnetwork.com"]
+ },
+ "iEntry": {
+ "properties": ["600z.com", "ientry.com"],
+ "resources": ["600z.com", "ientry.com"]
+ },
+ "IgnitAd": {
+ "properties": ["ignitad.com"],
+ "resources": ["ignitad.com"]
+ },
+ "IgnitionOne": {
+ "properties": ["ignitionone.com", "ignitionone.net", "searchignite.com"],
+ "resources": ["ignitionone.com", "ignitionone.net", "searchignite.com"]
+ },
+ "iMedia": {
+ "properties": ["imedia.cz"],
+ "resources": ["imedia.cz"]
+ },
+ "Improve Digital": {
+ "properties": ["360yield.com", "improvedigital.com"],
+ "resources": ["360yield.com", "improvedigital.com"]
+ },
+ "Inadco": {
+ "properties": ["inadco.com"],
+ "resources": ["anadcoads.com", "inadco.com", "inadcoads.com"]
+ },
+ "InboundWriter": {
+ "properties": ["enquisite.com", "inboundwriter.com"],
+ "resources": ["enquisite.com", "inboundwriter.com"]
+ },
+ "IndexExchange": {
+ "properties": ["indexexchange.com"],
+ "resources": ["indexexchange.com"]
+ },
+ "Infectious Media": {
+ "properties": ["infectiousmedia.com"],
+ "resources": ["impressiondesk.com", "infectiousmedia.com"]
+ },
+ "Infernotions": {
+ "properties": ["infernotions.com"],
+ "resources": ["infernotions.com"]
+ },
+ "Inflection Point Media": {
+ "properties": ["inflectionpointmedia.com"],
+ "resources": ["inflectionpointmedia.com"]
+ },
+ "Infogroup": {
+ "properties": ["infogroup.com"],
+ "resources": ["infogroup.com"]
+ },
+ "Infolinks": {
+ "properties": ["infolinks.com"],
+ "resources": ["infolinks.com"]
+ },
+ "INFOnline": {
+ "properties": ["infonline.de"],
+ "resources": ["infonline.de", "ioam.de", "ivwbox.de"]
+ },
+ "InfoStars": {
+ "properties": ["hotlog.ru", "infostars.ru"],
+ "resources": ["hotlog.ru", "infostars.ru"]
+ },
+ "Infra-Ad": {
+ "properties": ["infra-ad.com"],
+ "resources": ["infra-ad.com"]
+ },
+ "InMobi": {
+ "properties": ["aerserv.com", "inmobi.com", "sproutinc.com"],
+ "resources": ["aerserv.com", "inmobi.com", "sproutinc.com"]
+ },
+ "inneractive": {
+ "properties": ["inner-active.com"],
+ "resources": ["inner-active.com"]
+ },
+ "Innity": {
+ "properties": ["innity.com"],
+ "resources": ["innity.com"]
+ },
+ "InsightExpress": {
+ "properties": ["insightexpress.com"],
+ "resources": ["insightexpress.com", "insightexpressai.com"]
+ },
+ "InSkin Media": {
+ "properties": ["inskinmedia.com"],
+ "resources": ["inskinmedia.com"]
+ },
+ "Inspectlet": {
+ "properties": ["inspectlet.com"],
+ "resources": ["inspectlet.com"]
+ },
+ "Instinctive": {
+ "properties": ["instinctive.io"],
+ "resources": ["instinctive.io", "instinctiveads.com"]
+ },
+ "Integral Ad Science": {
+ "properties": ["integralads.com"],
+ "resources": [
+ "adsafemedia.com",
+ "adsafeprotected.com",
+ "iasds01.com",
+ "integralads.com"
+ ]
+ },
+ "IntelligenceFocus": {
+ "properties": ["intelligencefocus.com", "leadchampion.com"],
+ "resources": ["domodomain.com", "intelligencefocus.com", "leadchampion.com"]
+ },
+ "Intent Media": {
+ "properties": ["intentmedia.com"],
+ "resources": ["intentmedia.com", "intentmedia.net"]
+ },
+ "Intergi": {
+ "properties": ["intergi.com"],
+ "resources": ["intergi.com"]
+ },
+ "Intermarkets": {
+ "properties": ["intermarkets.net"],
+ "resources": ["intermarkets.net"]
+ },
+ "Intermundo Media": {
+ "properties": ["intermundomedia.com"],
+ "resources": ["intermundomedia.com"]
+ },
+ "Internet Brands": {
+ "properties": ["ibpxl.com", "internetbrands.com"],
+ "resources": ["ibpxl.com", "internetbrands.com"]
+ },
+ "Interpolls": {
+ "properties": ["interpolls.com"],
+ "resources": ["interpolls.com"]
+ },
+ "Inuvo": {
+ "properties": ["inuvo.com"],
+ "resources": ["inuvo.com"]
+ },
+ "InvestingChannel": {
+ "properties": ["investingchannel.com"],
+ "resources": ["investingchannel.com"]
+ },
+ "iovation": {
+ "properties": ["iovation.com"],
+ "resources": ["iesnare.com", "iovation.com"]
+ },
+ "iPerceptions": {
+ "properties": ["iperceptions.com"],
+ "resources": ["iperceptions.com"]
+ },
+ "IponWeb": {
+ "properties": ["iponweb.com"],
+ "resources": ["iponweb.com", "iponweb.net"]
+ },
+ "iPROM": {
+ "properties": [
+ "centraliprom.com",
+ "iprom.net",
+ "iprom.si",
+ "mediaiprom.com"
+ ],
+ "resources": ["centraliprom.com", "iprom.net", "iprom.si", "mediaiprom.com"]
+ },
+ "iPromote": {
+ "properties": ["ipromote.com"],
+ "resources": ["ipromote.com"]
+ },
+ "iProspect": {
+ "properties": ["iprospect.com"],
+ "resources": ["clickmanage.com", "iprospect.com"]
+ },
+ "ISI Technologies": {
+ "properties": ["adversalservers.com", "digbro.com"],
+ "resources": ["adversalservers.com", "digbro.com"]
+ },
+ "IslayTech": {
+ "properties": ["islay.tech"],
+ "resources": ["islay.tech"]
+ },
+ "ismatlab.com": {
+ "properties": ["ismatlab.com"],
+ "resources": ["ismatlab.com"]
+ },
+ "Itch": {
+ "properties": ["itch.io"],
+ "resources": ["itch.io"]
+ },
+ "ItIsATracker": {
+ "properties": ["itisatracker.com"],
+ "resources": ["itisatracker.com"]
+ },
+ "I.UA": {
+ "properties": ["i.ua"],
+ "resources": ["i.ua"]
+ },
+ "Jaroop": {
+ "properties": ["jaroop.com"],
+ "resources": ["jaroop.com"]
+ },
+ "JasperLabs": {
+ "properties": ["jasperlabs.com"],
+ "resources": ["jasperlabs.com"]
+ },
+ "Jemm": {
+ "properties": ["jemmgroup.com"],
+ "resources": ["jemmgroup.com"]
+ },
+ "Jink": {
+ "properties": ["jink.de", "jinkads.com"],
+ "resources": ["jink.de", "jinkads.com"]
+ },
+ "Jirbo": {
+ "properties": ["adcolony.com"],
+ "resources": ["adcolony.com", "jirbo.com"]
+ },
+ "Jivox": {
+ "properties": ["jivox.com"],
+ "resources": ["jivox.com"]
+ },
+ "JobThread": {
+ "properties": ["jobthread.com"],
+ "resources": ["jobthread.com"]
+ },
+ "JSE": {
+ "properties": ["jsecoin.com"],
+ "resources": [
+ "freecontent.bid",
+ "freecontent.date",
+ "freecontent.stream",
+ "hashing.win",
+ "hostingcloud.racing",
+ "hostingcloud.science",
+ "jsecoin.com"
+ ]
+ },
+ "JuicyAds": {
+ "properties": ["juicyads.com"],
+ "resources": ["juicyads.com"]
+ },
+ "Jumptap": {
+ "properties": ["jumptap.com"],
+ "resources": ["jumptap.com"]
+ },
+ "justuno": {
+ "properties": ["justuno.com"],
+ "resources": ["justuno.com"]
+ },
+ "Kaltura": {
+ "properties": ["kaltura.com"],
+ "resources": ["kaltura.com"]
+ },
+ "Kargo": {
+ "properties": ["kargo.com"],
+ "resources": ["kargo.com"]
+ },
+ "Kenshoo": {
+ "properties": ["kenshoo.com", "xg4ken.com"],
+ "resources": ["kenshoo.com", "xg4ken.com"]
+ },
+ "Keyade": {
+ "properties": ["keyade.com"],
+ "resources": ["keyade.com"]
+ },
+ "KeyMetric": {
+ "properties": ["keymetric.net"],
+ "resources": ["keymetric.net"]
+ },
+ "Keywee": {
+ "properties": ["keywee.co"],
+ "resources": ["keywee.co"]
+ },
+ "kikin": {
+ "properties": ["kikin.com"],
+ "resources": ["kikin.com"]
+ },
+ "KISSmetrics": {
+ "properties": ["kissmetrics.com"],
+ "resources": ["kissmetrics.com"]
+ },
+ "KissMyAds": {
+ "properties": ["kissmyads.com"],
+ "resources": ["kissmyads.com"]
+ },
+ "Kitara Media": {
+ "properties": ["103092804.com", "kitaramedia.com"],
+ "resources": ["103092804.com", "kitaramedia.com"]
+ },
+ "Kitcode": {
+ "properties": ["kitcode.net"],
+ "resources": ["kitcode.net"]
+ },
+ "KIT digital": {
+ "properties": ["kitd.com"],
+ "resources": ["keewurd.com", "kitd.com", "peerset.com"]
+ },
+ "Kokteyl": {
+ "properties": ["admost.com", "kokteyl.com"],
+ "resources": ["admost.com", "kokteyl.com"]
+ },
+ "Komli": {
+ "properties": ["komli.com"],
+ "resources": ["komli.com"]
+ },
+ "Konduto": {
+ "properties": ["konduto.com"],
+ "resources": ["k-analytix.com", "konduto.com"]
+ },
+ "Kontera": {
+ "properties": ["kontera.com"],
+ "resources": ["kontera.com"]
+ },
+ "Korrelate": {
+ "properties": ["korrelate.com"],
+ "resources": ["adsummos.com", "adsummos.net", "korrelate.com"]
+ },
+ "Krux": {
+ "properties": ["krux.com", "kruxdigital.com"],
+ "resources": ["krux.com", "kruxdigital.com", "krxd.net"]
+ },
+ "Lakana": {
+ "properties": ["lakana.com"],
+ "resources": ["ibsys.com", "lakana.com"]
+ },
+ "Layer-Ad.org": {
+ "properties": ["layer-ad.org"],
+ "resources": ["layer-ad.org"]
+ },
+ "Layer Ads": {
+ "properties": ["layer-ads.net"],
+ "resources": ["layer-ads.net"]
+ },
+ "LeadBolt": {
+ "properties": ["leadbolt.com"],
+ "resources": ["leadbolt.com"]
+ },
+ "LeadForensics": {
+ "properties": ["leadforensics.com"],
+ "resources": ["leadforensics.com"]
+ },
+ "LeadFormix": {
+ "properties": ["calliduscloud.com", "leadforce1.com", "leadformix.com"],
+ "resources": ["calliduscloud.com", "leadforce1.com", "leadformix.com"]
+ },
+ "LeadsHub": {
+ "properties": ["ztsrv.com"],
+ "resources": ["ztsrv.com"]
+ },
+ "LeanPlum": {
+ "properties": ["leanplum.com"],
+ "resources": ["leanplum.com"]
+ },
+ "Legolas Media": {
+ "properties": ["legolas-media.com"],
+ "resources": ["legolas-media.com"]
+ },
+ "Levexis": {
+ "properties": ["levexis.com"],
+ "resources": ["levexis.com"]
+ },
+ "Lexos Media": {
+ "properties": ["adbull.com", "lexosmedia.com"],
+ "resources": ["adbull.com", "lexosmedia.com"]
+ },
+ "LifeStreet": {
+ "properties": ["lfstmedia.com", "lifestreetmedia.com"],
+ "resources": ["lfstmedia.com", "lifestreetmedia.com"]
+ },
+ "Limelight Networks": {
+ "properties": ["limelight.com"],
+ "resources": ["clickability.com", "limelight.com", "llnwd.net"]
+ },
+ "LineZing": {
+ "properties": ["linezing.com"],
+ "resources": ["linezing.com"]
+ },
+ "LinkConnector": {
+ "properties": ["linkconnector.com"],
+ "resources": ["linkconnector.com"]
+ },
+ "LinkedIn": {
+ "properties": ["linkedin.com"],
+ "resources": ["licdn.com", "linkedin.com"]
+ },
+ "LinkShare": {
+ "properties": ["rakutenmarketing.com"],
+ "resources": ["linkshare.com", "linksynergy.com", "rakutenmarketing.com"]
+ },
+ "Linkz": {
+ "properties": ["linkz.net"],
+ "resources": ["linkz.net"]
+ },
+ "Listrak": {
+ "properties": ["listrak.com", "listrakbi.com"],
+ "resources": ["listrak.com", "listrakbi.com"]
+ },
+ "LiveIntent": {
+ "properties": ["liveintent.com"],
+ "resources": ["liadm.com", "liveintent.com"]
+ },
+ "LiveInternet": {
+ "properties": ["liveinternet.ru", "yadro.ru"],
+ "resources": ["liveinternet.ru", "yadro.ru"]
+ },
+ "LivePerson": {
+ "properties": ["liveperson.com"],
+ "resources": ["liveperson.com", "liveperson.net", "nuconomy.com"]
+ },
+ "LiveRail": {
+ "properties": ["liverail.com"],
+ "resources": ["liverail.com"]
+ },
+ "LiveRamp": {
+ "properties": ["liveramp.com"],
+ "resources": ["liveramp.com", "tvpixel.com"]
+ },
+ "LKQD": {
+ "properties": ["lkqd.com", "lkqd.net"],
+ "resources": ["lkqd.com", "lkqd.net"]
+ },
+ "Local Yokel Media": {
+ "properties": ["localyokelmedia.com"],
+ "resources": ["localyokelmedia.com"]
+ },
+ "Localytics": {
+ "properties": ["localytics.com"],
+ "resources": ["localytics.com"]
+ },
+ "LockerDome": {
+ "properties": ["lockerdome.com"],
+ "resources": ["lockerdome.com"]
+ },
+ "Lockerz": {
+ "properties": ["lockerz.com"],
+ "resources": ["lockerz.com"]
+ },
+ "Logdy": {
+ "properties": ["logdy.com"],
+ "resources": ["logdy.com"]
+ },
+ "Longboard Media": {
+ "properties": ["longboardmedia.com"],
+ "resources": ["longboardmedia.com"]
+ },
+ "LongTail Video": {
+ "properties": ["jwplayer.com"],
+ "resources": ["longtailvideo.com", "ltassrv.com"]
+ },
+ "Loomia": {
+ "properties": ["loomia.com"],
+ "resources": ["loomia.com"]
+ },
+ "LoopFuse": {
+ "properties": ["lfov.net", "loopfuse.net"],
+ "resources": ["lfov.net", "loopfuse.net"]
+ },
+ "LoopMe": {
+ "properties": ["loopme.com"],
+ "resources": ["loopme.com"]
+ },
+ "Lotame": {
+ "properties": ["crwdcntrl.net", "lotame.com"],
+ "resources": ["crwdcntrl.net", "lotame.com"]
+ },
+ "LotLinx": {
+ "properties": ["lotlinx.com"],
+ "resources": ["lotlinx.com"]
+ },
+ "Lower My Bills": {
+ "properties": ["lowermybills.com"],
+ "resources": ["lowermybills.com"]
+ },
+ "lptracker": {
+ "properties": ["lptracker.io"],
+ "resources": ["lptracker.io"]
+ },
+ "LucidMedia": {
+ "properties": ["lucidmedia.com"],
+ "resources": ["lucidmedia.com"]
+ },
+ "LuckyOrange": {
+ "properties": ["luckyorange.com"],
+ "resources": ["luckyorange.com", "luckyorange.net"]
+ },
+ "Lynchpin": {
+ "properties": ["lynchpin.com"],
+ "resources": ["lynchpin.com", "lypn.com"]
+ },
+ "Lyris": {
+ "properties": ["aurea.com"],
+ "resources": ["aurea.com", "clicktracks.com", "lyris.com"]
+ },
+ "Lytiks": {
+ "properties": ["lytiks.com"],
+ "resources": ["lytiks.com"]
+ },
+ "m6d": {
+ "properties": ["dstillery.com"],
+ "resources": ["dstillery.com", "m6d.com", "media6degrees.com"]
+ },
+ "Madhouse": {
+ "properties": ["madhouse.cn"],
+ "resources": ["madhouse.cn"]
+ },
+ "Madison Logic": {
+ "properties": ["dinclinx.com", "madisonlogic.com"],
+ "resources": ["dinclinx.com", "madisonlogic.com"]
+ },
+ "madvertise": {
+ "properties": ["madvertise.com"],
+ "resources": ["madvertise.com"]
+ },
+ "Magnetic": {
+ "properties": ["domdex.net", "magnetic.com"],
+ "resources": ["domdex.com", "domdex.net", "magnetic.com", "qjex.net"]
+ },
+ "Magnify360": {
+ "properties": ["dialogmgr.com", "magnify360.com"],
+ "resources": ["dialogmgr.com", "magnify360.com"]
+ },
+ "MailChimp": {
+ "properties": ["campaign-archive1.com", "mailchi.mp", "mailchimp.com"],
+ "resources": [
+ "campaign-archive1.com",
+ "list-manage.com",
+ "mailchi.mp",
+ "mailchimp.com"
+ ]
+ },
+ "Mail.Ru": {
+ "properties": ["list.ru", "mail.ru"],
+ "resources": ["list.ru", "mail.ru"]
+ },
+ "Manifest": {
+ "properties": ["bannerbank.ru", "manifest.ru"],
+ "resources": ["bannerbank.ru", "manifest.ru"]
+ },
+ "Marchex": {
+ "properties": ["industrybrains.com", "marchex.com"],
+ "resources": ["industrybrains.com", "marchex.com"]
+ },
+ "Marimedia": {
+ "properties": ["marimedia.net"],
+ "resources": ["marimedia.net"]
+ },
+ "MarketGid": {
+ "properties": ["dt00.net", "dt07.net", "marketgid.com"],
+ "resources": ["dt00.net", "dt07.net", "marketgid.com"]
+ },
+ "Marketo": {
+ "properties": ["marketo.com"],
+ "resources": ["marketo.com", "marketo.net"]
+ },
+ "Markit": {
+ "properties": ["markit.com", "wsod.com"],
+ "resources": ["markit.com", "wsod.com"]
+ },
+ "MarkMonitor": {
+ "properties": ["9c9media.ca", "markmonitor.com"],
+ "resources": ["9c9media.ca", "markmonitor.com"]
+ },
+ "Marktest": {
+ "properties": ["marktest.com", "marktest.pt"],
+ "resources": ["marktest.com", "marktest.pt"]
+ },
+ "Martini Media": {
+ "properties": ["martiniadnetwork.com"],
+ "resources": ["martiniadnetwork.com", "martinimedianetwork.com"]
+ },
+ "mashero": {
+ "properties": ["mashero.com"],
+ "resources": ["mashero.com"]
+ },
+ "MashLogic": {
+ "properties": ["mashlogic.com"],
+ "resources": ["mashlogic.com"]
+ },
+ "Match.com": {
+ "properties": ["chemistry.com", "match.com"],
+ "resources": ["chemistry.com", "match.com", "meetic-partners.com"]
+ },
+ "Matomy": {
+ "properties": ["matomy.com"],
+ "resources": [
+ "adnetinteractive.com",
+ "adsmarket.com",
+ "matomy.com",
+ "matomymarket.com",
+ "matomymedia.com",
+ "mediawhiz.com",
+ "optimatic.com",
+ "xtendmedia.com"
+ ]
+ },
+ "MaxBounty": {
+ "properties": ["maxbounty.com", "mb01.com"],
+ "resources": ["maxbounty.com", "mb01.com"]
+ },
+ "MaxMind": {
+ "properties": ["maxmind.com"],
+ "resources": ["maxmind.com", "mmapiws.com"]
+ },
+ "MaxPoint": {
+ "properties": ["maxpointinteractive.com", "maxusglobal.com", "mxptint.net"],
+ "resources": ["maxpointinteractive.com", "maxusglobal.com", "mxptint.net"]
+ },
+ "McAfee": {
+ "properties": ["mcafee.com", "mcafeesecure.com"],
+ "resources": ["mcafee.com", "mcafeesecure.com", "scanalert.com"]
+ },
+ "MdotM": {
+ "properties": ["mdotm.com"],
+ "resources": ["mdotm.com"]
+ },
+ "MediaBrix": {
+ "properties": ["mediabrix.com"],
+ "resources": ["mediabrix.com"]
+ },
+ "MediaCom": {
+ "properties": ["mediacom.com"],
+ "resources": ["mediacom.com"]
+ },
+ "mediaFORGE": {
+ "properties": ["mediaforge.com"],
+ "resources": ["mediaforge.com"]
+ },
+ "Medialets": {
+ "properties": ["medialets.com"],
+ "resources": ["medialets.com"]
+ },
+ "MediaMath": {
+ "properties": ["mediamath.com"],
+ "resources": [
+ "adroitinteractive.com",
+ "designbloxlive.com",
+ "mathtag.com",
+ "mediamath.com"
+ ]
+ },
+ "Médiamétrie-eStat": {
+ "properties": ["mediametrie-estat.com"],
+ "resources": ["estat.com", "mediametrie-estat.com"]
+ },
+ "media.net": {
+ "properties": ["media.net"],
+ "resources": ["media.net"]
+ },
+ "Mediaocean": {
+ "properties": ["adbuyer.com", "mediaocean.com"],
+ "resources": ["adbuyer.com", "mediaocean.com"]
+ },
+ "MediaShakers": {
+ "properties": ["media-servers.net", "mediashakers.com"],
+ "resources": ["media-servers.net", "mediashakers.com"]
+ },
+ "MediaTrust": {
+ "properties": ["mediatrust.com"],
+ "resources": ["mediatrust.com"]
+ },
+ "Medicx Media Solutions": {
+ "properties": ["medicxmedia.com"],
+ "resources": ["medicxmedia.com"]
+ },
+ "Meebo": {
+ "properties": ["meebo.com"],
+ "resources": ["meebo.com", "meebocdn.net"]
+ },
+ "MegaIndex": {
+ "properties": ["megaindex.ru"],
+ "resources": ["megaindex.ru"]
+ },
+ "Mercadopago": {
+ "properties": [
+ "mercadolibre.cl",
+ "mercadolibre.co.cr",
+ "mercadolibre.com",
+ "mercadolibre.com.ar",
+ "mercadolibre.com.bo",
+ "mercadolibre.com.co",
+ "mercadolibre.com.do",
+ "mercadolibre.com.ec",
+ "mercadolibre.com.gt",
+ "mercadolibre.com.hn",
+ "mercadolibre.com.mx",
+ "mercadolibre.com.ni",
+ "mercadolibre.com.pa",
+ "mercadolibre.com.pe",
+ "mercadolibre.com.py",
+ "mercadolibre.com.sv",
+ "mercadolibre.com.uy",
+ "mercadolibre.com.ve",
+ "mercadolivre.com.br",
+ "mercadopago.com"
+ ],
+ "resources": ["mercadopago.com"]
+ },
+ "Mercent": {
+ "properties": ["mercent.com"],
+ "resources": ["mercent.com"]
+ },
+ "MerchantAdvantage": {
+ "properties": ["merchantadvantage.com"],
+ "resources": ["merchantadvantage.com"]
+ },
+ "Merchenta": {
+ "properties": ["merchenta.com"],
+ "resources": ["merchenta.com"]
+ },
+ "Merkle": {
+ "properties": ["merkleinc.com", "rkdms.com"],
+ "resources": ["merkleinc.com", "rimmkaufman.com", "rkdms.com"]
+ },
+ "Meta Network": {
+ "properties": ["metanetwork.com"],
+ "resources": ["metanetwork.com"]
+ },
+ "Meteor": {
+ "properties": ["meteorsolutions.com"],
+ "resources": ["meteorsolutions.com"]
+ },
+ "MetrixLab": {
+ "properties": [
+ "crm-metrix.com",
+ "customerconversio.com",
+ "metrixlab.com",
+ "opinionbar.com"
+ ],
+ "resources": [
+ "adoftheyear.com",
+ "crm-metrix.com",
+ "customerconversio.com",
+ "metrixlab.com",
+ "opinionbar.com"
+ ]
+ },
+ "MicroAd": {
+ "properties": ["microad.jp", "www.microad.jp"],
+ "resources": ["microad.jp", "www.microad.jp"]
+ },
+ "Microsoft": {
+ "properties": [
+ "acompli.net",
+ "aka.ms",
+ "azure.com",
+ "azure.net",
+ "azurerms.com",
+ "bing.com",
+ "cloudappsecurity.com",
+ "gamesforwindows.com",
+ "getgamesmart.com",
+ "gfx.ms",
+ "healthvault.com",
+ "hockeyapp.net",
+ "ieaddons.com",
+ "iegallery.com",
+ "live.com",
+ "microsoft.com",
+ "microsoftalumni.com",
+ "microsoftalumni.org",
+ "microsoftazuread-sso.com",
+ "microsoftedgeinsiders.com",
+ "microsoftonline-p.com",
+ "microsoftonline-p.net",
+ "microsoftonline.com",
+ "microsoftstore.com",
+ "microsoftstream.com",
+ "msappproxy.net",
+ "msft.net",
+ "msftidentity.com",
+ "msidentity.com",
+ "msn.com",
+ "o365weve.com",
+ "oaspapps.com",
+ "office.com",
+ "office365.com",
+ "officelive.com",
+ "onedrive.com",
+ "onenote.com",
+ "outlook.com",
+ "outlookmobile.com",
+ "phonefactor.net",
+ "s-msn.com",
+ "sfx.ms",
+ "sharepoint.com",
+ "skype.com",
+ "skypeforbusiness.com",
+ "staffhub.ms",
+ "sway-extensions.com",
+ "sway.com",
+ "trafficmanager.net",
+ "virtualearth.net",
+ "visualstudio.com",
+ "windows.net",
+ "windowsazure.com",
+ "windowsphone.com",
+ "worldwidetelescope.org",
+ "wunderlist.com",
+ "xbox.com",
+ "yammer.com"
+ ],
+ "resources": [
+ "aadrm.com",
+ "adbureau.net",
+ "adecn.com",
+ "aquantive.com",
+ "aspnetcdn.com",
+ "assets-yammer.com",
+ "azure.com",
+ "azureedge.net",
+ "bing.com",
+ "cloudapp.net",
+ "gamesforwindows.com",
+ "getgamesmart.com",
+ "gfx.ms",
+ "healthvault.com",
+ "live.com",
+ "microsoft.com",
+ "microsoftazuread-sso.com",
+ "microsoftonline-p.com",
+ "microsoftonline-p.net",
+ "microsoftonline.com",
+ "microsoftstore.com",
+ "msads.net",
+ "msauthimages.net",
+ "msecnd.net",
+ "msedge.net",
+ "msndirect.com",
+ "msocdn.com",
+ "netconversions.com",
+ "oaspapps.com",
+ "office.com",
+ "office.net",
+ "officelive.com",
+ "onenote.net",
+ "onestore.ms",
+ "onmicrosoft.com",
+ "outlook.com",
+ "roiservice.com",
+ "s-msn.com",
+ "sfbassets.com",
+ "sharepoint.com",
+ "skype.com",
+ "skypeassets.com",
+ "sway-cdn.com",
+ "sway-extensions.com",
+ "windows.net",
+ "windowsazure.com",
+ "yammerusercontent.com"
+ ]
+ },
+ "Millennial Media": {
+ "properties": ["decktrade.com", "millennialmedia.com", "mydas.mobi"],
+ "resources": ["decktrade.com", "millennialmedia.com", "mydas.mobi"]
+ },
+ "Mindset Media": {
+ "properties": ["mindset-media.com"],
+ "resources": ["mindset-media.com", "mmismm.com"]
+ },
+ "MinerAlt": {
+ "properties": ["mineralt.io", "vidzi.nu", "vidzi.tv"],
+ "resources": [
+ "1q2w3.website",
+ "analytics.blue",
+ "aster18cdn.nl",
+ "belicimo.pw",
+ "besstahete.info",
+ "dinorslick.icu",
+ "feesocrald.com",
+ "gramombird.com",
+ "istlandoll.com",
+ "mepirtedic.com",
+ "mineralt.io",
+ "pampopholf.com",
+ "tercabilis.info",
+ "tulip18.com",
+ "vidzi.tv",
+ "yololike.space"
+ ]
+ },
+ "Minescripts": {
+ "properties": ["minescripts.info"],
+ "resources": ["minescripts.info", "sslverify.info"]
+ },
+ "MineXMR": {
+ "properties": ["minexmr.stream"],
+ "resources": ["minexmr.stream"]
+ },
+ "Mirando": {
+ "properties": ["mirando.de"],
+ "resources": ["mirando.de"]
+ },
+ "Mixpanel": {
+ "properties": ["mixpanel.com"],
+ "resources": ["mixpanel.com", "mxpnl.com"]
+ },
+ "Mixpo": {
+ "properties": ["mixpo.com"],
+ "resources": ["mixpo.com"]
+ },
+ "Moat": {
+ "properties": ["moat.com", "moatads.com"],
+ "resources": ["moat.com", "moatads.com"]
+ },
+ "MobFox": {
+ "properties": ["mobfox.com"],
+ "resources": ["mobfox.com"]
+ },
+ "Mobials": {
+ "properties": ["mobials.com"],
+ "resources": ["mobials.com"]
+ },
+ "MobileAdTrading": {
+ "properties": ["mobileadtrading.com"],
+ "resources": ["mobileadtrading.com"]
+ },
+ "Mobile Meteor": {
+ "properties": ["mobilemeteor.com"],
+ "resources": ["mobilemeteor.com", "showmeinn.com"]
+ },
+ "Mobile Storm": {
+ "properties": ["mobilestorm.com"],
+ "resources": ["mobilestorm.com"]
+ },
+ "MobVision": {
+ "properties": ["admoda.com"],
+ "resources": ["admoda.com", "mobvision.com"]
+ },
+ "Mocean Mobile": {
+ "properties": ["moceanmobile.com"],
+ "resources": ["moceanmobile.com"]
+ },
+ "Mochila": {
+ "properties": ["mochila.com"],
+ "resources": ["mochila.com"]
+ },
+ "Mojiva": {
+ "properties": ["mojiva.com"],
+ "resources": ["mojiva.com"]
+ },
+ "Monetate": {
+ "properties": ["monetate.com", "monetate.net"],
+ "resources": ["monetate.com", "monetate.net"]
+ },
+ "MONETIZEdigital": {
+ "properties": ["cpalead.com"],
+ "resources": ["cpalead.com"]
+ },
+ "Monetize More": {
+ "properties": ["monetizemore.com"],
+ "resources": ["monetizemore.com"]
+ },
+ "Mongoose Metrics": {
+ "properties": ["mongoosemetrics.com"],
+ "resources": ["mongoosemetrics.com"]
+ },
+ "Monitus": {
+ "properties": ["monitus.net"],
+ "resources": ["monitus.net"]
+ },
+ "Monoloop": {
+ "properties": ["monoloop.com"],
+ "resources": ["monoloop.com"]
+ },
+ "Monster": {
+ "properties": ["monster.com"],
+ "resources": ["monster.com"]
+ },
+ "Moolah Media": {
+ "properties": ["moolah-media.com", "moolahmedia.com"],
+ "resources": ["moolah-media.com", "moolahmedia.com"]
+ },
+ "MoPub": {
+ "properties": ["mopub.com"],
+ "resources": ["mopub.com"]
+ },
+ "motigo": {
+ "properties": ["motigo.com"],
+ "resources": ["motigo.com", "nedstatbasic.net"]
+ },
+ "Mouseflow": {
+ "properties": ["mouseflow.com"],
+ "resources": ["mouseflow.com"]
+ },
+ "MovieLush.com": {
+ "properties": ["affbuzzads.com", "movielush.com"],
+ "resources": ["affbuzzads.com", "movielush.com"]
+ },
+ "Multiple Stream Media": {
+ "properties": ["adclickmedia.com", "multiplestreammktg.com"],
+ "resources": ["adclickmedia.com", "multiplestreammktg.com"]
+ },
+ "MUNDO Media": {
+ "properties": ["mundomedia.com", "silver-path.com"],
+ "resources": ["mundomedia.com", "silver-path.com"]
+ },
+ "MyCounter": {
+ "properties": ["mycounter.com.ua"],
+ "resources": ["mycounter.com.ua"]
+ },
+ "MyPagerank.Net": {
+ "properties": ["mypagerank.net"],
+ "resources": ["mypagerank.net"]
+ },
+ "MyPressPlus": {
+ "properties": ["mypressplus.com", "ppjol.net"],
+ "resources": ["mypressplus.com", "ppjol.net"]
+ },
+ "Mystighty": {
+ "properties": ["mystighty.info"],
+ "resources": ["mystighty.info", "sweeterge.info"]
+ },
+ "myThings": {
+ "properties": ["mythings.com", "mythingsmedia.com"],
+ "resources": ["mythings.com", "mythingsmedia.com"]
+ },
+ "MyWebGrocer": {
+ "properties": ["mywebgrocer.com"],
+ "resources": ["mywebgrocer.com"]
+ },
+ "Nanigans": {
+ "properties": ["nanigans.com"],
+ "resources": ["nanigans.com"]
+ },
+ "Narrative": {
+ "properties": ["narrative.io"],
+ "resources": ["narrative.io"]
+ },
+ "NativeAds": {
+ "properties": ["nativeads.com"],
+ "resources": ["nativeads.com"]
+ },
+ "Nativo": {
+ "properties": ["nativo.com", "postrelease.com"],
+ "resources": ["nativo.com", "postrelease.com"]
+ },
+ "Navegg": {
+ "properties": ["navdmp.com", "navegg.com"],
+ "resources": ["navdmp.com", "navegg.com"]
+ },
+ "NDN": {
+ "properties": ["newsinc.com"],
+ "resources": ["newsinc.com"]
+ },
+ "Negishim": {
+ "properties": ["negishim.org"],
+ "resources": ["negishim.org"]
+ },
+ "NeroHut": {
+ "properties": ["nerohut.com"],
+ "resources": ["nerohut.com", "nhsrv.cf"]
+ },
+ "NetAffiliation": {
+ "properties": ["netaffiliation.com"],
+ "resources": ["netaffiliation.com"]
+ },
+ "Net Applications": {
+ "properties": ["netapplications.com"],
+ "resources": ["hitsprocessor.com", "netapplications.com"]
+ },
+ "NetBina": {
+ "properties": ["netbina.com"],
+ "resources": ["netbina.com"]
+ },
+ "NetElixir": {
+ "properties": ["adelixir.com", "netelixir.com"],
+ "resources": ["adelixir.com", "netelixir.com"]
+ },
+ "Netmining": {
+ "properties": ["netmining.com", "netmng.com"],
+ "resources": ["netmining.com", "netmng.com"]
+ },
+ "Net-Results": {
+ "properties": ["net-results.com", "nr7.us"],
+ "resources": ["cdnma.com", "net-results.com", "nr7.us"]
+ },
+ "NetSeer": {
+ "properties": ["netseer.com"],
+ "resources": ["netseer.com"]
+ },
+ "NetShelter": {
+ "properties": ["ziffdavistech.com"],
+ "resources": ["netshelter.com", "netshelter.net", "ziffdavistech.com"]
+ },
+ "Neustar": {
+ "properties": ["adadvisor.net", "home.neustar", "neustar.biz"],
+ "resources": ["adadvisor.net", "neustar.biz"]
+ },
+ "New Relic": {
+ "properties": ["newrelic.com"],
+ "resources": ["newrelic.com", "nr-data.net"]
+ },
+ "NewsRight": {
+ "properties": ["apnewsregistry.com", "newsright.com"],
+ "resources": ["apnewsregistry.com", "newsright.com"]
+ },
+ "newtention": {
+ "properties": ["newtention.de", "newtention.net", "newtentionassets.net"],
+ "resources": ["newtention.de", "newtention.net", "newtentionassets.net"]
+ },
+ "Nexage": {
+ "properties": ["nexage.com"],
+ "resources": ["nexage.com"]
+ },
+ "Nextag": {
+ "properties": ["nextag.com"],
+ "resources": ["nextag.com"]
+ },
+ "NextPerformance": {
+ "properties": ["nextperf.com", "nextperformance.com", "nxtck.com"],
+ "resources": ["nextperf.com", "nextperformance.com", "nxtck.com"]
+ },
+ "NextSTAT": {
+ "properties": ["nextstat.com"],
+ "resources": ["nextstat.com"]
+ },
+ "Nielsen": {
+ "properties": [
+ "glanceguide.com",
+ "imrworldwide.com",
+ "imrworldwide.net",
+ "nielsen.com"
+ ],
+ "resources": [
+ "glanceguide.com",
+ "imrworldwide.com",
+ "imrworldwide.net",
+ "nielsen.com"
+ ]
+ },
+ "Ninua": {
+ "properties": ["networkedblogs.com", "ninua.com"],
+ "resources": ["networkedblogs.com", "ninua.com"]
+ },
+ "Nokta": {
+ "properties": ["noktamedya.com", "virgul.com"],
+ "resources": ["noktamedya.com", "virgul.com"]
+ },
+ "NowSpots": {
+ "properties": ["nowspots.com"],
+ "resources": ["nowspots.com"]
+ },
+ "nrelate": {
+ "properties": ["nrelate.com"],
+ "resources": ["nrelate.com"]
+ },
+ "NuDataSecurity": {
+ "properties": ["nudatasecurity.com"],
+ "resources": ["nudatasecurity.com"]
+ },
+ "Nuffnang": {
+ "properties": ["nuffnang.com", "nuffnang.com.my", "www.nuffnang.com.my"],
+ "resources": ["nuffnang.com", "nuffnang.com.my", "www.nuffnang.com.my"]
+ },
+ "nugg.ad": {
+ "properties": ["nugg.ad"],
+ "resources": ["nugg.ad", "nuggad.net"]
+ },
+ "nurago": {
+ "properties": ["sensic.net"],
+ "resources": ["nurago.com", "nurago.de", "sensic.net"]
+ },
+ "Oberon Media": {
+ "properties": ["iwin.com"],
+ "resources": ["blaze.com", "iwin.com", "oberon-media.com"]
+ },
+ "Observer": {
+ "properties": ["observerapp.com"],
+ "resources": ["observerapp.com"]
+ },
+ "Ohana Media": {
+ "properties": ["adohana.com", "ohana-media.com", "ohanaqb.com"],
+ "resources": ["adohana.com", "ohana-media.com", "ohanaqb.com"]
+ },
+ "Omnicom Group": {
+ "properties": ["accuenmedia.com", "omnicomgroup.com"],
+ "resources": ["accuenmedia.com", "omnicomgroup.com", "p-td.com"]
+ },
+ "onAd": {
+ "properties": ["onad.eu"],
+ "resources": ["onad.eu"]
+ },
+ "OnAudience": {
+ "properties": ["behavioralengine.com", "onaudience.com"],
+ "resources": ["behavioralengine.com", "onaudience.com"]
+ },
+ "Onclusive": {
+ "properties": ["onclusive.com"],
+ "resources": ["airpr.com"]
+ },
+ "OneAd": {
+ "properties": ["onead.com.tw"],
+ "resources": ["guoshipartners.com", "onevision.com.tw"]
+ },
+ "One iota": {
+ "properties": ["itsoneiota.com", "oneiota.co.uk"],
+ "resources": ["itsoneiota.com", "oneiota.co.uk"]
+ },
+ "OneStat": {
+ "properties": ["onestat.com"],
+ "resources": ["onestat.com"]
+ },
+ "Oneupweb": {
+ "properties": ["oneupweb.com", "sodoit.com"],
+ "resources": ["oneupweb.com", "sodoit.com"]
+ },
+ "OnlineMetrix": {
+ "properties": ["online-metrix.net"],
+ "resources": ["online-metrix.net"]
+ },
+ "Ooyala": {
+ "properties": ["ooyala.com"],
+ "resources": ["oo4.com", "ooyala.com"]
+ },
+ "Open New Media": {
+ "properties": ["onm.de"],
+ "resources": ["onm.de"]
+ },
+ "Openstat": {
+ "properties": ["openstat.com"],
+ "resources": ["openstat.com", "openstat.ru", "spylog.com"]
+ },
+ "Opentracker": {
+ "properties": ["opentracker.net"],
+ "resources": ["opentracker.net"]
+ },
+ "OpenX": {
+ "properties": ["openx.com", "openx.net"],
+ "resources": [
+ "liftdna.com",
+ "openx.com",
+ "openx.net",
+ "openx.org",
+ "openxenterprise.com",
+ "servedbyopenx.com"
+ ]
+ },
+ "Opera": {
+ "properties": ["opera.com"],
+ "resources": ["mobiletheory.com", "opera.com"]
+ },
+ "Opolen": {
+ "properties": ["opolen.com.br"],
+ "resources": ["opolen.com.br"]
+ },
+ "OPT": {
+ "properties": ["www.opt.ne.jp"],
+ "resources": ["advg.jp", "opt.ne.jp", "p-advg.com", "www.opt.ne.jp"]
+ },
+ "Optify": {
+ "properties": ["optify.net"],
+ "resources": ["optify.net"]
+ },
+ "Optimal": {
+ "properties": ["bn.co"],
+ "resources": [
+ "cpmadvisors.com",
+ "cpmatic.com",
+ "nprove.com",
+ "optim.al",
+ "orbengine.com",
+ "xa.net"
+ ]
+ },
+ "Optimizely": {
+ "properties": ["optimizely.com"],
+ "resources": ["optimizely.com"]
+ },
+ "OptimumResponse": {
+ "properties": ["optimumresponse.com"],
+ "resources": ["optimumresponse.com"]
+ },
+ "OptinMonster": {
+ "properties": ["optinmonster.com", "optnmstr.com"],
+ "resources": ["optinmonster.com", "optnmstr.com"]
+ },
+ "OptMD": {
+ "properties": ["optmd.com"],
+ "resources": ["optmd.com"]
+ },
+ "Oracle": {
+ "properties": ["oracle.com"],
+ "resources": [
+ "atgsvcs.com",
+ "eloqua.com",
+ "estara.com",
+ "instantservice.com",
+ "istrack.com",
+ "maxymiser.com",
+ "oracle.com"
+ ]
+ },
+ "OrangeSoda": {
+ "properties": ["orangesoda.com", "otracking.com"],
+ "resources": ["orangesoda.com", "otracking.com"]
+ },
+ "Outbrain": {
+ "properties": ["outbrain.com", "sphere.com"],
+ "resources": ["outbrain.com", "sphere.com", "visualrevenue.com"]
+ },
+ "Out There Media": {
+ "properties": ["out-there-media.com"],
+ "resources": ["out-there-media.com"]
+ },
+ "Oversee.net": {
+ "properties": ["dsnextgen.com", "oversee.net"],
+ "resources": ["dsnextgen.com", "oversee.net"]
+ },
+ "ÖWA": {
+ "properties": ["oewa.at"],
+ "resources": ["oewa.at", "oewabox.at"]
+ },
+ "OwnerIQ": {
+ "properties": ["owneriq.com", "owneriq.net"],
+ "resources": ["owneriq.com", "owneriq.net"]
+ },
+ "OxaMedia": {
+ "properties": ["oxamedia.com"],
+ "resources": ["adconnexa.com", "adsbwm.com", "oxamedia.com"]
+ },
+ "PageFair": {
+ "properties": ["pagefair.com", "pagefair.net"],
+ "resources": ["pagefair.com", "pagefair.net"]
+ },
+ "Paid-To-Promote.net": {
+ "properties": ["paid-to-promote.net"],
+ "resources": ["paid-to-promote.net"]
+ },
+ "Papaya": {
+ "properties": ["papayamobile.com"],
+ "resources": ["papayamobile.com"]
+ },
+ "Pardot": {
+ "properties": ["pardot.com"],
+ "resources": ["pardot.com"]
+ },
+ "Parse.ly": {
+ "properties": ["parsely.com"],
+ "resources": ["parsely.com"]
+ },
+ "PayHit": {
+ "properties": ["payhit.com"],
+ "resources": ["payhit.com"]
+ },
+ "PaymentsMB": {
+ "properties": ["paymentsmb.com"],
+ "resources": ["paymentsmb.com"]
+ },
+ "Paypal": {
+ "properties": ["paypal.com", "simility.com"],
+ "resources": ["paypal.com", "simility.com"]
+ },
+ "Paypopup.com": {
+ "properties": ["paypopup.com"],
+ "resources": ["lzjl.com", "paypopup.com"]
+ },
+ "PebblePost": {
+ "properties": ["pebblepost.com"],
+ "resources": ["pbbl.co"]
+ },
+ "Peer39": {
+ "properties": ["peer39.com", "peer39.net"],
+ "resources": ["peer39.com", "peer39.net"]
+ },
+ "PeerFly": {
+ "properties": ["peerfly.com"],
+ "resources": ["peerfly.com"]
+ },
+ "Peerius": {
+ "properties": ["peerius.com"],
+ "resources": ["peerius.com"]
+ },
+ "Performancing": {
+ "properties": ["performancing.com"],
+ "resources": ["performancing.com"]
+ },
+ "PerimeterX": {
+ "properties": ["perimeterx.com"],
+ "resources": ["perimeterx.com"]
+ },
+ "PersianStat.com": {
+ "properties": ["persianstat.com"],
+ "resources": ["persianstat.com"]
+ },
+ "Pheedo": {
+ "properties": ["pheedo.com"],
+ "resources": ["pheedo.com"]
+ },
+ "Phonalytics": {
+ "properties": ["phonalytics.com"],
+ "resources": ["phonalytics.com"]
+ },
+ "phpMyVisites": {
+ "properties": ["phpmyvisites.us"],
+ "resources": ["phpmyvisites.us"]
+ },
+ "Pictela": {
+ "properties": ["pictela.com", "pictela.net"],
+ "resources": ["pictela.com", "pictela.net"]
+ },
+ "PinPoll": {
+ "properties": ["pinpoll.com"],
+ "resources": ["pinpoll.com"]
+ },
+ "Pinterest": {
+ "properties": [
+ "pinterest.at",
+ "pinterest.ca",
+ "pinterest.ch",
+ "pinterest.cl",
+ "pinterest.co.kr",
+ "pinterest.co.uk",
+ "pinterest.com",
+ "pinterest.com.au",
+ "pinterest.com.mx",
+ "pinterest.de",
+ "pinterest.dk",
+ "pinterest.es",
+ "pinterest.fr",
+ "pinterest.ie",
+ "pinterest.jp",
+ "pinterest.nz",
+ "pinterest.pt",
+ "pinterest.se"
+ ],
+ "resources": ["pinimg.com", "pinterest.com"]
+ },
+ "Piwik": {
+ "properties": ["piwik.org"],
+ "resources": ["piwik.org"]
+ },
+ "PixAnalytics": {
+ "properties": ["pixanalytics.com"],
+ "resources": ["pixanalytics.com"]
+ },
+ "Pixel.sg": {
+ "properties": ["pixel.sg"],
+ "resources": ["pixel.sg"]
+ },
+ "Piximedia": {
+ "properties": ["piximedia.com"],
+ "resources": ["piximedia.com"]
+ },
+ "Pixlee": {
+ "properties": ["pixlee.com"],
+ "resources": ["pixlee.com"]
+ },
+ "PLATFORM ONE": {
+ "properties": ["platform-one.co.jp", "www.platform-one.co.jp"],
+ "resources": ["platform-one.co.jp", "www.platform-one.co.jp"]
+ },
+ "plista": {
+ "properties": ["plista.com"],
+ "resources": ["plista.com"]
+ },
+ "PocketCents": {
+ "properties": ["pocketcents.com"],
+ "resources": ["pocketcents.com"]
+ },
+ "Polar Mobile": {
+ "properties": ["mediavoice.com"],
+ "resources": ["mediavoice.com", "polarmobile.com"]
+ },
+ "Politads": {
+ "properties": ["politads.com"],
+ "resources": ["politads.com"]
+ },
+ "Polymorph": {
+ "properties": ["getpolymorph.com"],
+ "resources": ["adsnative.com", "getpolymorph.com"]
+ },
+ "Pontiflex": {
+ "properties": ["pontiflex.com"],
+ "resources": ["pontiflex.com"]
+ },
+ "Poool": {
+ "properties": ["poool.fr"],
+ "resources": ["poool.fr"]
+ },
+ "PopAds": {
+ "properties": ["popads.net"],
+ "resources": ["popads.net", "popadscdn.net"]
+ },
+ "PopRule": {
+ "properties": ["gocampaignlive.com", "poprule.com"],
+ "resources": ["gocampaignlive.com", "poprule.com"]
+ },
+ "Popunder.ru": {
+ "properties": ["popunder.ru"],
+ "resources": ["popunder.ru"]
+ },
+ "Po.st": {
+ "properties": ["po.st"],
+ "resources": ["po.st"]
+ },
+ "Powerlinks": {
+ "properties": ["powerlinks.com"],
+ "resources": ["powerlinks.com"]
+ },
+ "PPCProtect": {
+ "properties": ["ppcprotect.com"],
+ "resources": ["ppcprotect.com"]
+ },
+ "PrecisionClick": {
+ "properties": ["precisionclick.com"],
+ "resources": ["precisionclick.com"]
+ },
+ "PredictAd": {
+ "properties": ["predictad.com"],
+ "resources": ["predictad.com"]
+ },
+ "Pressflex": {
+ "properties": ["blogads.com", "pressflex.com"],
+ "resources": ["blogads.com", "pressflex.com"]
+ },
+ "Prime Visibility": {
+ "properties": ["primevisibility.com"],
+ "resources": [
+ "adcde.com",
+ "addlvr.com",
+ "adonnetwork.com",
+ "adonnetwork.net",
+ "adtrgt.com",
+ "bannertgt.com",
+ "cptgt.com",
+ "cpvfeed.com",
+ "cpvtgt.com",
+ "dashboardad.net",
+ "popcde.com",
+ "primevisibility.com",
+ "sdfje.com",
+ "urtbk.com"
+ ]
+ },
+ "Primis": {
+ "properties": ["primis.tech"],
+ "resources": ["sekindo.com"]
+ },
+ "PrismApp": {
+ "properties": ["prismapp.io"],
+ "resources": ["prismapp.io"]
+ },
+ "Proclivity": {
+ "properties": ["proclivitysystems.com", "pswec.com"],
+ "resources": ["proclivitymedia.com", "proclivitysystems.com", "pswec.com"]
+ },
+ "Project Wonderful": {
+ "properties": ["projectwonderful.com"],
+ "resources": ["projectwonderful.com"]
+ },
+ "PrometheusIntelligenceTechnology": {
+ "properties": ["prometheusintelligencetechnology.com"],
+ "resources": ["prometheusintelligencetechnology.com"]
+ },
+ "Pronunciator": {
+ "properties": ["pronunciator.com", "visitorville.com"],
+ "resources": ["pronunciator.com", "visitorville.com"]
+ },
+ "Propeller Ads": {
+ "properties": ["propellerads.com"],
+ "resources": ["propellerads.com"]
+ },
+ "Prosperent": {
+ "properties": ["prosperent.com"],
+ "resources": ["prosperent.com"]
+ },
+ "Protected Media": {
+ "properties": ["ad-score.com", "protected.media"],
+ "resources": ["ad-score.com", "protected.media"]
+ },
+ "Provers": {
+ "properties": ["provers.pro"],
+ "resources": ["provers.pro"]
+ },
+ "Psonstrentie": {
+ "properties": ["psonstrentie.info"],
+ "resources": ["psonstrentie.info"]
+ },
+ "Public-Idées": {
+ "properties": ["publicidees.com"],
+ "resources": ["publicidees.com"]
+ },
+ "Publishers Clearing House": {
+ "properties": ["pch.com"],
+ "resources": ["pch.com"]
+ },
+ "PubMatic": {
+ "properties": ["pubmatic.com"],
+ "resources": ["pubmatic.com", "revinet.com"]
+ },
+ "PulsePoint": {
+ "properties": ["pulsepoint.com"],
+ "resources": ["pulsepoint.com"]
+ },
+ "PunchTab": {
+ "properties": ["punchtab.com"],
+ "resources": ["punchtab.com"]
+ },
+ "quadrantOne": {
+ "properties": ["quadrantone.com"],
+ "resources": ["quadrantone.com"]
+ },
+ "Quake Marketing": {
+ "properties": ["quakemarketing.com"],
+ "resources": ["quakemarketing.com"]
+ },
+ "Qualaroo": {
+ "properties": ["qualaroo.com"],
+ "resources": ["kissinsights.com", "qualaroo.com"]
+ },
+ "Quantcast": {
+ "properties": ["quantcast.com", "quantserve.com"],
+ "resources": ["quantcast.com", "quantserve.com"]
+ },
+ "QuantumAdvertising": {
+ "properties": ["quantum-advertising.com"],
+ "resources": ["quantum-advertising.com"]
+ },
+ "QuinStreet": {
+ "properties": ["quinstreet.com", "thecounter.com"],
+ "resources": ["qnsr.com", "qsstats.com", "quinstreet.com", "thecounter.com"]
+ },
+ "Quintelligence": {
+ "properties": ["quintelligence.com"],
+ "resources": ["quintelligence.com"]
+ },
+ "QUISMA": {
+ "properties": ["quisma.com"],
+ "resources": [
+ "iaded.com",
+ "quisma.com",
+ "quismatch.com",
+ "xaded.com",
+ "xmladed.com"
+ ]
+ },
+ "RadarURL": {
+ "properties": ["radarurl.com"],
+ "resources": ["radarurl.com"]
+ },
+ "Radial": {
+ "properties": ["radial.com"],
+ "resources": ["gsicommerce.com", "gsimedia.net"]
+ },
+ "Radiate Media": {
+ "properties": ["gtnetwork.com.au", "solesolution.com"],
+ "resources": [
+ "gtnetwork.com.au",
+ "matchbin.com",
+ "radiatemedia.com",
+ "solesolution.com"
+ ]
+ },
+ "RadiumOne": {
+ "properties": ["radiumone.com"],
+ "resources": ["gwallet.com", "radiumone.com"]
+ },
+ "Radius Marketing": {
+ "properties": ["radiusmarketing.com"],
+ "resources": ["radiusmarketing.com"]
+ },
+ "Rambler": {
+ "properties": ["rambler.ru"],
+ "resources": ["rambler.ru"]
+ },
+ "Rapleaf": {
+ "properties": ["rapleaf.com", "rlcdn.com"],
+ "resources": ["rapleaf.com", "rlcdn.com"]
+ },
+ "ReachLocal": {
+ "properties": ["reachlocal.com", "rlcdn.net"],
+ "resources": ["reachlocal.com", "rlcdn.net"]
+ },
+ "React2Media": {
+ "properties": ["react2media.com"],
+ "resources": ["react2media.com"]
+ },
+ "reddit": {
+ "properties": ["reddit.com"],
+ "resources": ["reddit.com"]
+ },
+ "Redux Media": {
+ "properties": ["reduxmedia.com"],
+ "resources": ["reduxmedia.com"]
+ },
+ "Rekko": {
+ "properties": ["convertglobal.com", "rekko.com"],
+ "resources": ["convertglobal.com", "rekko.com"]
+ },
+ "Reklamport": {
+ "properties": ["reklamport.com"],
+ "resources": ["reklamport.com"]
+ },
+ "Reklam Store": {
+ "properties": ["reklamstore.com"],
+ "resources": ["reklamstore.com"]
+ },
+ "Reklamz": {
+ "properties": ["reklamz.com"],
+ "resources": ["reklamz.com"]
+ },
+ "Relevad": {
+ "properties": ["relestar.com", "relevad.com"],
+ "resources": ["relestar.com", "relevad.com"]
+ },
+ "Renegade Internet": {
+ "properties": ["advertserve.com", "renegadeinternet.com"],
+ "resources": ["advertserve.com", "renegadeinternet.com"]
+ },
+ "Reporo": {
+ "properties": ["reporo.com"],
+ "resources": ["buzzcity.com"]
+ },
+ "Research Now": {
+ "properties": ["researchnow.com", "valuedopinions.co.uk"],
+ "resources": ["researchnow.com", "valuedopinions.co.uk"]
+ },
+ "ResolutionMedia": {
+ "properties": ["nonstoppartner.net"],
+ "resources": ["nonstoppartner.net"]
+ },
+ "Resolution Media": {
+ "properties": ["resolutionmedia.com"],
+ "resources": ["resolutionmedia.com"]
+ },
+ "Resonate": {
+ "properties": ["resonateinsights.com", "resonatenetworks.com"],
+ "resources": ["reson8.com", "resonateinsights.com", "resonatenetworks.com"]
+ },
+ "Responsys": {
+ "properties": ["responsys.com"],
+ "resources": ["responsys.com"]
+ },
+ "Retail Automata": {
+ "properties": ["retailautomata.com"],
+ "resources": ["retailautomata.com"]
+ },
+ "ReTargeter": {
+ "properties": ["retargeter.com"],
+ "resources": ["retargeter.com"]
+ },
+ "Retirement Living": {
+ "properties": ["blvdstatus.com", "retirement-living.com"],
+ "resources": ["blvdstatus.com", "retirement-living.com"]
+ },
+ "RevContent": {
+ "properties": ["revcontent.com"],
+ "resources": ["revcontent.com"]
+ },
+ "RevenueMax": {
+ "properties": ["revenuemax.de"],
+ "resources": ["revenuemax.de"]
+ },
+ "Revtracks": {
+ "properties": ["revtrax.com"],
+ "resources": ["revtrax.com"]
+ },
+ "Rhythm": {
+ "properties": ["rhythmone.com"],
+ "resources": [
+ "1rx.io",
+ "rhythmnewmedia.com",
+ "rhythmone.com",
+ "rhythmxchange.com",
+ "rnmd.net"
+ ]
+ },
+ "RichAudience": {
+ "properties": ["richaudience.com"],
+ "resources": ["richaudience.com"]
+ },
+ "RichRelevance": {
+ "properties": ["richrelevance.com"],
+ "resources": ["richrelevance.com"]
+ },
+ "RightAction": {
+ "properties": ["rightaction.com"],
+ "resources": ["rightaction.com"]
+ },
+ "RIM": {
+ "properties": ["global.blackberry.com", "laptopverge.com"],
+ "resources": [
+ "global.blackberry.com",
+ "laptopverge.com",
+ "rim.com",
+ "scoreloop.com"
+ ]
+ },
+ "Ringier": {
+ "properties": ["ringier.cz"],
+ "resources": ["ringier.cz"]
+ },
+ "RMBN": {
+ "properties": ["traforet.com"],
+ "resources": ["rmbn.net", "rmbn.ru", "traforet.com"]
+ },
+ "RMM": {
+ "properties": ["rmmonline.com"],
+ "resources": ["rmmonline.com"]
+ },
+ "Rocket Fuel": {
+ "properties": ["rfihub.com", "rfihub.net", "rocketfuel.com"],
+ "resources": [
+ "rfihub.com",
+ "rfihub.net",
+ "rocketfuel.com",
+ "ru4.com",
+ "xplusone.com"
+ ]
+ },
+ "Rollick": {
+ "properties": ["gorollick.com"],
+ "resources": ["rollick.io"]
+ },
+ "Rovion": {
+ "properties": ["rovion.com"],
+ "resources": ["rovion.com"]
+ },
+ "Roxr": {
+ "properties": ["clicky.com", "roxr.net"],
+ "resources": ["clicky.com", "getclicky.com", "roxr.net", "staticstuff.net"]
+ },
+ "rtk": {
+ "properties": ["rtk.io"],
+ "resources": ["rtk.io"]
+ },
+ "RubiconProject": {
+ "properties": ["rubiconproject.com"],
+ "resources": ["adsbyisocket.com", "isocket.com", "rubiconproject.com"]
+ },
+ "RunAds": {
+ "properties": ["runads.com"],
+ "resources": ["runads.com", "rundsp.com"]
+ },
+ "RuTarget": {
+ "properties": ["rutarget.ru"],
+ "resources": ["rutarget.ru"]
+ },
+ "Sabavision": {
+ "properties": ["sabavision.com"],
+ "resources": ["sabavision.com"]
+ },
+ "Sabre": {
+ "properties": ["reztrack.com", "sabre.com", "sabrehospitality.com"],
+ "resources": ["reztrack.com", "sabre.com", "sabrehospitality.com"]
+ },
+ "Safecount": {
+ "properties": ["safecount.net"],
+ "resources": [
+ "dl-rms.com",
+ "dlqm.net",
+ "questionmarket.com",
+ "safecount.net"
+ ]
+ },
+ "SageMetrics": {
+ "properties": ["sagemetrics.com"],
+ "resources": ["sageanalyst.net", "sagemetrics.com"]
+ },
+ "Salesforce.com": {
+ "properties": ["force.com", "salesforce.com", "trailblazer.me"],
+ "resources": [
+ "documentforce.com",
+ "force.com",
+ "forcesslreports.com",
+ "forceusercontent.com",
+ "lightning.com",
+ "salesforce-communities.com",
+ "salesforce-hub.com",
+ "salesforce.com",
+ "salesforceliveagent.com",
+ "trailblazer.me",
+ "visualforce.com"
+ ]
+ },
+ "Salesintelligence": {
+ "properties": ["salesintelligence.pl"],
+ "resources": ["plugin.management"]
+ },
+ "Samurai Factory": {
+ "properties": ["samurai-factory.jp", "shinobi.jp"],
+ "resources": ["samurai-factory.jp", "shinobi.jp"]
+ },
+ "SAP": {
+ "properties": ["sap.com"],
+ "resources": ["sap.com", "seewhy.com"]
+ },
+ "Sapient": {
+ "properties": ["bridgetrack.com", "sapient.com"],
+ "resources": ["bridgetrack.com", "sapient.com"]
+ },
+ "SAS": {
+ "properties": ["aimatch.com", "sas.com"],
+ "resources": ["aimatch.com", "sas.com"]
+ },
+ "SAY": {
+ "properties": ["saymedia.com", "typepad.com", "videoegg.com"],
+ "resources": ["saymedia.com", "typepad.com", "videoegg.com"]
+ },
+ "Scandinavian AdNetworks": {
+ "properties": ["scandinavianadnetworks.com"],
+ "resources": ["scandinavianadnetworks.com"]
+ },
+ "ScribeFire": {
+ "properties": ["scribefire.com"],
+ "resources": ["scribefire.com"]
+ },
+ "Scribol": {
+ "properties": ["scribol.com"],
+ "resources": ["scribol.com"]
+ },
+ "SearchForce": {
+ "properties": ["searchforce.com", "searchforce.net"],
+ "resources": ["searchforce.com", "searchforce.net"]
+ },
+ "Seevast": {
+ "properties": ["kanoodle.com"],
+ "resources": [
+ "kanoodle.com",
+ "pulse360.com",
+ "seevast.com",
+ "syndigonetworks.com"
+ ]
+ },
+ "SeeVolution": {
+ "properties": ["seevolution.com", "svlu.net"],
+ "resources": ["seevolution.com", "svlu.net"]
+ },
+ "Segment.io": {
+ "properties": ["segment.io"],
+ "resources": ["segment.io"]
+ },
+ "Selectable Media": {
+ "properties": ["selectablemedia.com"],
+ "resources": ["nabbr.com", "selectablemedia.com"]
+ },
+ "Semantiqo": {
+ "properties": ["semantiqo.com"],
+ "resources": ["semantiqo.com"]
+ },
+ "Semasio": {
+ "properties": ["semasio.com"],
+ "resources": ["semasio.com", "semasio.net"]
+ },
+ "SendPulse": {
+ "properties": ["sendpulse.com"],
+ "resources": ["sendpulse.com"]
+ },
+ "Service4refresh": {
+ "properties": ["service4refresh.info"],
+ "resources": ["service4refresh.info"]
+ },
+ "SessionCam": {
+ "properties": ["sessioncam.com"],
+ "resources": ["sessioncam.com"]
+ },
+ "SevenAds": {
+ "properties": ["sevenads.net"],
+ "resources": ["sevenads.net"]
+ },
+ "SexInYourCity": {
+ "properties": ["sexinyourcity.com"],
+ "resources": ["sexinyourcity.com"]
+ },
+ "ShaftTraffic": {
+ "properties": ["shafttraffic.com"],
+ "resources": ["libertystmedia.com", "shafttraffic.com"]
+ },
+ "Shareaholic": {
+ "properties": ["shareaholic.com"],
+ "resources": ["shareaholic.com"]
+ },
+ "ShareASale": {
+ "properties": ["shareasale.com"],
+ "resources": ["shareasale.com"]
+ },
+ "ShareThis": {
+ "properties": ["sharethis.com"],
+ "resources": ["sharethis.com"]
+ },
+ "Sharethrough": {
+ "properties": ["sharethrough.com"],
+ "resources": ["sharethrough.com"]
+ },
+ "ShinyStat": {
+ "properties": ["shinystat.com"],
+ "resources": ["shinystat.com"]
+ },
+ "Shopzilla": {
+ "properties": ["shopzilla.com"],
+ "resources": ["shopzilla.com"]
+ },
+ "Shortest": {
+ "properties": ["shorte.st"],
+ "resources": ["shorte.st"]
+ },
+ "SiftScience": {
+ "properties": ["sift.com"],
+ "resources": ["siftscience.com"]
+ },
+ "Signifyd": {
+ "properties": ["signifyd.com"],
+ "resources": ["signifyd.com"]
+ },
+ "Silverpop": {
+ "properties": ["mkt51.net", "silverpop.com"],
+ "resources": ["mkt51.net", "pages05.net", "silverpop.com", "vtrenz.net"]
+ },
+ "Simpli.fi": {
+ "properties": ["simpli.fi"],
+ "resources": ["simpli.fi"]
+ },
+ "SiteScout": {
+ "properties": ["sitescout.com"],
+ "resources": ["sitescout.com"]
+ },
+ "Six Apart": {
+ "properties": ["movabletype.com", "sixapart.com"],
+ "resources": ["movabletype.com", "sixapart.com"]
+ },
+ "Skimlinks": {
+ "properties": ["skimlinks.com", "skimresources.com"],
+ "resources": ["skimlinks.com", "skimresources.com"]
+ },
+ "Skribit": {
+ "properties": ["paulstamatiou.com"],
+ "resources": ["paulstamatiou.com", "skribit.com"]
+ },
+ "Skupe Net": {
+ "properties": ["adcentriconline.com", "skupenet.com"],
+ "resources": ["adcentriconline.com", "skupenet.com"]
+ },
+ "Smaato": {
+ "properties": ["smaato.com"],
+ "resources": ["smaato.com"]
+ },
+ "SmartAdServer": {
+ "properties": ["smartadserver.com"],
+ "resources": ["smartadserver.com"]
+ },
+ "Smartlook": {
+ "properties": ["smartlook.com"],
+ "resources": ["smartlook.com"]
+ },
+ "SmartyAds": {
+ "properties": ["smartyads.com"],
+ "resources": ["smartyads.com"]
+ },
+ "Smi": {
+ "properties": ["24smi.net"],
+ "resources": ["24smi.net"]
+ },
+ "Smiley Media": {
+ "properties": ["smileymedia.com"],
+ "resources": ["smileymedia.com"]
+ },
+ "Smowtion": {
+ "properties": ["smowtion.com"],
+ "resources": ["smowtion.com"]
+ },
+ "Snap": {
+ "properties": ["snap.com"],
+ "resources": ["snap.com"]
+ },
+ "SnapEngage": {
+ "properties": ["snapengage.com"],
+ "resources": ["snapengage.com"]
+ },
+ "Snoobi": {
+ "properties": ["snoobi.fi"],
+ "resources": ["snoobi.com", "snoobi.fi"]
+ },
+ "SocialChorus": {
+ "properties": ["socialchorus.com"],
+ "resources": [
+ "halogenmediagroup.com",
+ "halogennetwork.com",
+ "socialchorus.com"
+ ]
+ },
+ "SocialInterface": {
+ "properties": ["socialinterface.com"],
+ "resources": ["ratevoice.com", "socialinterface.com"]
+ },
+ "SocialTwist": {
+ "properties": ["socialtwist.com"],
+ "resources": ["socialtwist.com"]
+ },
+ "sociomantic labs": {
+ "properties": ["sociomantic.com"],
+ "resources": ["sociomantic.com"]
+ },
+ "Socital": {
+ "properties": ["socital.com"],
+ "resources": ["socital.com"]
+ },
+ "Sojern": {
+ "properties": ["sojern.com"],
+ "resources": ["sojern.com"]
+ },
+ "SomoAudience": {
+ "properties": ["somoaudience.com"],
+ "resources": ["somoaudience.com"]
+ },
+ "Sonobi": {
+ "properties": ["sonobi.com"],
+ "resources": ["sonobi.com"]
+ },
+ "sophus3": {
+ "properties": ["sophus3.com"],
+ "resources": ["sophus3.co.uk", "sophus3.com"]
+ },
+ "Sortable": {
+ "properties": ["sortable.com"],
+ "resources": ["deployads.com"]
+ },
+ "Sourcepoint": {
+ "properties": ["sourcepoint.com"],
+ "resources": ["summerhamster.com"]
+ },
+ "Sovrn": {
+ "properties": ["sovrn.com"],
+ "resources": ["sovrn.com"]
+ },
+ "Space Chimp Media": {
+ "properties": ["spacechimpmedia.com"],
+ "resources": ["spacechimpmedia.com"]
+ },
+ "SpareChange": {
+ "properties": ["sparechange.io"],
+ "resources": ["sparechange.io"]
+ },
+ "Sparklit": {
+ "properties": ["adbutler.com", "sparklit.com"],
+ "resources": ["adbutler.com", "sparklit.com"]
+ },
+ "Spark Studios": {
+ "properties": ["sparkstudios.com"],
+ "resources": ["sparkstudios.com"]
+ },
+ "Specific Media": {
+ "properties": ["sitemeter.com", "specificmedia.com"],
+ "resources": [
+ "adviva.co.uk",
+ "adviva.net",
+ "sitemeter.com",
+ "specificclick.net",
+ "specificmedia.com"
+ ]
+ },
+ "Spectate": {
+ "properties": ["spectate.com"],
+ "resources": ["spectate.com"]
+ },
+ "Sponge": {
+ "properties": ["spongegroup.com"],
+ "resources": ["spongegroup.com"]
+ },
+ "Spongecell": {
+ "properties": ["spongecell.com"],
+ "resources": ["spongecell.com"]
+ },
+ "SponsorAds": {
+ "properties": ["sponsorads.de"],
+ "resources": ["sponsorads.de"]
+ },
+ "Spot200": {
+ "properties": ["spot200.com"],
+ "resources": ["spot200.com"]
+ },
+ "SpotX": {
+ "properties": ["spotx.tv"],
+ "resources": ["spotx.tv"]
+ },
+ "SpotXchange": {
+ "properties": ["spotxchange.com"],
+ "resources": ["spotxcdn.com", "spotxchange.com"]
+ },
+ "Spring Metrics": {
+ "properties": ["springmetrics.com"],
+ "resources": ["springmetrics.com"]
+ },
+ "SpringServe": {
+ "properties": ["springserve.com"],
+ "resources": ["springserve.com"]
+ },
+ "Sputnik.ru": {
+ "properties": ["sputnik.ru"],
+ "resources": ["sputnik.ru"]
+ },
+ "StackAdapt": {
+ "properties": ["stackadapt.com"],
+ "resources": ["stackadapt.com"]
+ },
+ "StackTrack": {
+ "properties": ["stat-track.com"],
+ "resources": ["stat-track.com"]
+ },
+ "StarGames": {
+ "properties": ["stargames.net", "stargamesaffiliate.com"],
+ "resources": ["stargames.net", "stargamesaffiliate.com"]
+ },
+ "stat4u": {
+ "properties": ["4u.pl"],
+ "resources": ["4u.pl"]
+ },
+ "StatCounter": {
+ "properties": ["statcounter.com"],
+ "resources": ["statcounter.com"]
+ },
+ "Statisfy": {
+ "properties": ["statisfy.net"],
+ "resources": ["statisfy.net"]
+ },
+ "STATSIT": {
+ "properties": ["statsit.com"],
+ "resources": ["statsit.com"]
+ },
+ "SteelHouse": {
+ "properties": ["steelhouse.com", "steelhousemedia.com"],
+ "resources": ["steelhouse.com", "steelhousemedia.com"]
+ },
+ "Storeland": {
+ "properties": ["storeland.ru"],
+ "resources": ["storeland.ru"]
+ },
+ "Storygize": {
+ "properties": ["storygize.com"],
+ "resources": ["storygize.com", "storygize.net"]
+ },
+ "Stratigent": {
+ "properties": ["stratigent.com"],
+ "resources": ["stratigent.com"]
+ },
+ "Streamray": {
+ "properties": ["cams.com", "streamray.com"],
+ "resources": ["cams.com", "streamray.com"]
+ },
+ "StrikeAd": {
+ "properties": ["strikead.com"],
+ "resources": ["strikead.com"]
+ },
+ "Stripe": {
+ "properties": ["stripe.com"],
+ "resources": ["stripe.network"]
+ },
+ "StrongMail": {
+ "properties": ["strongmail.com"],
+ "resources": ["popularmedia.com", "strongmail.com"]
+ },
+ "Struq": {
+ "properties": ["struq.com"],
+ "resources": ["struq.com"]
+ },
+ "StumbleUpon": {
+ "properties": ["stumbleupon.com"],
+ "resources": ["stumble-upon.com", "stumbleupon.com"]
+ },
+ "Sublime Skinz": {
+ "properties": ["sublime.xyz"],
+ "resources": ["ayads.co", "sublime.xyz"]
+ },
+ "Suite 66": {
+ "properties": ["suite66.com"],
+ "resources": ["suite66.com"]
+ },
+ "Summit": {
+ "properties": ["summitmedia.co.uk", "www.summit.co.uk"],
+ "resources": ["summitmedia.co.uk", "www.summit.co.uk"]
+ },
+ "Superfish": {
+ "properties": ["superfish.com"],
+ "resources": ["superfish.com"]
+ },
+ "SupersonicAds": {
+ "properties": ["supersonicads.com"],
+ "resources": ["supersonicads.com"]
+ },
+ "Survata": {
+ "properties": ["survata.com"],
+ "resources": ["survata.com"]
+ },
+ "SwiftMining": {
+ "properties": ["swiftmining.win"],
+ "resources": ["swiftmining.win"]
+ },
+ "Switch": {
+ "properties": ["switchadhub.com", "switchconcepts.com"],
+ "resources": [
+ "switchadhub.com",
+ "switchads.com",
+ "switchconcepts.co.uk",
+ "switchconcepts.com"
+ ]
+ },
+ "Swoop": {
+ "properties": ["swoop.com"],
+ "resources": ["swoop.com"]
+ },
+ "SymphonyAM": {
+ "properties": ["factortg.com"],
+ "resources": ["factortg.com"]
+ },
+ "Synacor": {
+ "properties": ["synacor.com"],
+ "resources": ["synacor.com"]
+ },
+ "Syncapse": {
+ "properties": ["clickable.net", "syncapse.com"],
+ "resources": ["clickable.net", "syncapse.com"]
+ },
+ "Syrup Ad": {
+ "properties": ["adotsolution.com"],
+ "resources": ["adotsolution.com"]
+ },
+ "Taboola": {
+ "properties": ["taboola.com"],
+ "resources": ["perfectmarket.com", "taboola.com"]
+ },
+ "Tailsweep": {
+ "properties": ["tailsweep.com"],
+ "resources": ["tailsweep.com"]
+ },
+ "Taleria": {
+ "properties": ["telaria.com"],
+ "resources": ["freeskreen.com"]
+ },
+ "Tapad": {
+ "properties": ["tapad.com"],
+ "resources": ["tapad.com"]
+ },
+ "Tapgage": {
+ "properties": ["bizmey.com", "tapgage.com"],
+ "resources": ["bizmey.com", "tapgage.com"]
+ },
+ "TapIt!": {
+ "properties": ["tapit.com"],
+ "resources": ["tapit.com"]
+ },
+ "Tap.me": {
+ "properties": ["tap.me"],
+ "resources": ["tap.me"]
+ },
+ "Targetix": {
+ "properties": ["targetix.net"],
+ "resources": ["targetix.net"]
+ },
+ "Tatto Media": {
+ "properties": ["tattomedia.com"],
+ "resources": ["quicknoodles.com", "tattomedia.com"]
+ },
+ "Teadma": {
+ "properties": ["teadma.com"],
+ "resources": ["teadma.com"]
+ },
+ "Teads.tv": {
+ "properties": ["teads.tv"],
+ "resources": ["teads.tv"]
+ },
+ "Tealium": {
+ "properties": ["tealium.com"],
+ "resources": ["tealiumiq.com"]
+ },
+ "Technorati": {
+ "properties": ["technorati.com"],
+ "resources": ["technorati.com", "technoratimedia.com"]
+ },
+ "TechSolutions": {
+ "properties": ["techsolutions.com.tw"],
+ "resources": ["techsolutions.com.tw"]
+ },
+ "TellApart": {
+ "properties": ["tellapart.com", "tellapt.com"],
+ "resources": ["tellapart.com", "tellapt.com"]
+ },
+ "Telstra": {
+ "properties": ["sensis.com.au", "sensisdata.com.au", "telstra.com.au"],
+ "resources": [
+ "sensis.com.au",
+ "sensisdata.com.au",
+ "sensisdigitalmedia.com.au",
+ "telstra.com.au"
+ ]
+ },
+ "TENSQUARE": {
+ "properties": ["tensquare.com"],
+ "resources": ["tensquare.com"]
+ },
+ "Terra": {
+ "properties": ["eztargetmedia.com", "terra.com.br", "www.terra.com.br"],
+ "resources": ["eztargetmedia.com", "terra.com.br", "www.terra.com.br"]
+ },
+ "The Heron Partnership": {
+ "properties": ["marinsm.com"],
+ "resources": ["heronpartners.com.au", "marinsm.com", "marinsoftware.com"]
+ },
+ "The Numa Group": {
+ "properties": ["hittail.com", "thenumagroup.com"],
+ "resources": ["hittail.com", "thenumagroup.com"]
+ },
+ "The Search Agency": {
+ "properties": ["thesearchagency.com"],
+ "resources": ["thesearchagency.com", "thesearchagency.net"]
+ },
+ "The Trade Desk": {
+ "properties": ["thetradedesk.com"],
+ "resources": ["adsrvr.org", "thetradedesk.com"]
+ },
+ "ThingLink": {
+ "properties": ["thinglink.com"],
+ "resources": ["thinglink.com"]
+ },
+ "Think Realtime": {
+ "properties": ["echosearch.com", "thinkrealtime.com"],
+ "resources": ["echosearch.com", "esm1.net", "thinkrealtime.com"]
+ },
+ "Thismoment": {
+ "properties": ["thismoment.com"],
+ "resources": ["thismoment.com"]
+ },
+ "Thummit": {
+ "properties": ["thummit.com"],
+ "resources": ["thummit.com"]
+ },
+ "Tinder": {
+ "properties": ["carbonads.com", "tinder.com"],
+ "resources": ["carbonads.com", "tinder.com"]
+ },
+ "TiqIQ": {
+ "properties": ["tiqiq.com"],
+ "resources": ["tiqiq.com"]
+ },
+ "Tisoomi": {
+ "properties": ["adternal.com", "tisoomi.com"],
+ "resources": ["adternal.com", "tisoomi.com"]
+ },
+ "TLVMedia": {
+ "properties": ["tlvmedia.com"],
+ "resources": ["tlvmedia.com"]
+ },
+ "TNS": {
+ "properties": [
+ "statistik-gallup.net",
+ "tns-counter.ru",
+ "tns-cs.net",
+ "tnsglobal.com"
+ ],
+ "resources": [
+ "sesamestats.com",
+ "statistik-gallup.net",
+ "tns-counter.ru",
+ "tns-cs.net",
+ "tnsglobal.com"
+ ]
+ },
+ "Todacell": {
+ "properties": ["todacell.com"],
+ "resources": ["todacell.com"]
+ },
+ "ToneFuse": {
+ "properties": ["tonefuse.com"],
+ "resources": ["tonefuse.com"]
+ },
+ "ToneMedia": {
+ "properties": ["clickfuse.com"],
+ "resources": ["clickfuse.com", "tonemedia.com"]
+ },
+ "tongdun.cn": {
+ "properties": ["tongdun.cn"],
+ "resources": ["fraudmetrix.cn", "tongdun.net"]
+ },
+ "Topsy": {
+ "properties": ["topsy.com"],
+ "resources": ["topsy.com"]
+ },
+ "TouchCommerce": {
+ "properties": ["nuance.com"],
+ "resources": ["inq.com", "nuance.com", "touchcommerce.com"]
+ },
+ "TraceMyIP.org": {
+ "properties": ["tracemyip.org"],
+ "resources": ["tracemyip.org"]
+ },
+ "TrackingSoft": {
+ "properties": ["roia.biz", "trackingsoft.com"],
+ "resources": ["roia.biz", "trackingsoft.com"]
+ },
+ "Trackset": {
+ "properties": ["trackset.com"],
+ "resources": ["trackset.com"]
+ },
+ "Tradedoubler": {
+ "properties": ["tradedoubler.com"],
+ "resources": ["tradedoubler.com"]
+ },
+ "TradeTracker": {
+ "properties": ["tradetracker.com"],
+ "resources": ["tradetracker.com", "tradetracker.net"]
+ },
+ "TrafficHaus": {
+ "properties": ["traffichaus.com", "traffichouse.com"],
+ "resources": ["traffichaus.com", "traffichouse.com"]
+ },
+ "TrafficRevenue": {
+ "properties": ["trafficrevenue.net"],
+ "resources": ["trafficrevenue.net"]
+ },
+ "TrafficScore": {
+ "properties": ["trafficscore.com"],
+ "resources": ["trafficscore.com"]
+ },
+ "Traffiq": {
+ "properties": ["traffiq.com"],
+ "resources": ["traffiq.com"]
+ },
+ "Trafmag": {
+ "properties": ["trafmag.com"],
+ "resources": ["trafmag.com"]
+ },
+ "Traverse": {
+ "properties": ["traversedata.com"],
+ "resources": ["traversedlp.com"]
+ },
+ "Travora Media": {
+ "properties": ["travoramedia.com"],
+ "resources": [
+ "traveladnetwork.com",
+ "traveladvertising.com",
+ "travoramedia.com"
+ ]
+ },
+ "Tremor Video": {
+ "properties": ["tremorvideo.com"],
+ "resources": [
+ "scanscout.com",
+ "tmnetads.com",
+ "tremorhub.com",
+ "tremormedia.com",
+ "tremorvideo.com"
+ ]
+ },
+ "Triggit": {
+ "properties": ["triggit.com"],
+ "resources": ["triggit.com"]
+ },
+ "TripleLift": {
+ "properties": ["triplelift.com"],
+ "resources": ["3lift.com", "triplelift.com"]
+ },
+ "Trovus": {
+ "properties": ["trovus.co.uk", "www.trovus.co.uk"],
+ "resources": ["trovus.co.uk", "www.trovus.co.uk"]
+ },
+ "TruEffect": {
+ "properties": ["adlegend.com", "trueffect.com"],
+ "resources": ["adlegend.com", "trueffect.com"]
+ },
+ "Trumba": {
+ "properties": ["trumba.com"],
+ "resources": ["trumba.com"]
+ },
+ "TRUSTe": {
+ "properties": ["truste.com"],
+ "resources": ["truste.com"]
+ },
+ "TrustX": {
+ "properties": ["trustx.org"],
+ "resources": ["trustx.org"]
+ },
+ "TubeMogul": {
+ "properties": ["tmogul.com", "tubemogul.com"],
+ "resources": ["tmogul.com", "tubemogul.com"]
+ },
+ "TurnTo": {
+ "properties": ["turntonetworks.com"],
+ "resources": ["turnto.com", "turntonetworks.com"]
+ },
+ "Tweetboard": {
+ "properties": ["tweetboard.com"],
+ "resources": ["tweetboard.com"]
+ },
+ "Twelvefold": {
+ "properties": ["buzzlogic.com", "twelvefold.com"],
+ "resources": ["buzzlogic.com", "twelvefold.com"]
+ },
+ "Twitter": {
+ "properties": [
+ "digits.com",
+ "fabric.io",
+ "tweetdeck.com",
+ "twitter.com",
+ "twitter.jp"
+ ],
+ "resources": [
+ "ads-twitter.com",
+ "fabric.io",
+ "tweetdeck.com",
+ "twimg.com",
+ "twitter.com",
+ "twitter.jp"
+ ]
+ },
+ "Twitter Counter": {
+ "properties": ["twittercounter.com"],
+ "resources": ["twittercounter.com"]
+ },
+ "Twyn Group": {
+ "properties": ["twyn-group.com", "twyn.com"],
+ "resources": ["twyn-group.com", "twyn.com"]
+ },
+ "Tyroo": {
+ "properties": ["tyroo.com"],
+ "resources": ["tyroo.com"]
+ },
+ "UberMedia": {
+ "properties": ["tweetup.com", "ubermedia.com"],
+ "resources": ["tweetup.com", "ubermedia.com"]
+ },
+ "UberTags": {
+ "properties": ["ubertags.com"],
+ "resources": ["ubertags.com"]
+ },
+ "ucfunnel": {
+ "properties": ["ucfunnel.com"],
+ "resources": ["aralego.com", "ucfunnel.com"]
+ },
+ "uCoz": {
+ "properties": ["ucoz.ae", "ucoz.com", "ucoz.fr", "ucoz.net", "ucoz.ru"],
+ "resources": [
+ "ucoz.ae",
+ "ucoz.br",
+ "ucoz.com",
+ "ucoz.du",
+ "ucoz.fr",
+ "ucoz.net",
+ "ucoz.ru"
+ ]
+ },
+ "Umbel": {
+ "properties": ["umbel.com"],
+ "resources": ["umbel.com"]
+ },
+ "Unanimis": {
+ "properties": ["unanimis.co.uk", "www.unanimis.co.uk"],
+ "resources": ["unanimis.co.uk", "www.unanimis.co.uk"]
+ },
+ "Unbounce": {
+ "properties": ["unbounce.com"],
+ "resources": ["unbounce.com"]
+ },
+ "Underdog Media": {
+ "properties": ["udmserve.net", "underdogmedia.com"],
+ "resources": ["udmserve.net", "underdogmedia.com"]
+ },
+ "Undertone": {
+ "properties": ["undertone.com", "undertonevideo.com"],
+ "resources": [
+ "undertone.com",
+ "undertonenetworks.com",
+ "undertonevideo.com"
+ ]
+ },
+ "UniQlick": {
+ "properties": ["51network.com", "uniqlick.com", "wanmo.com"],
+ "resources": ["51network.com", "uniqlick.com", "wanmo.com"]
+ },
+ "Unruly": {
+ "properties": ["unruly.co"],
+ "resources": ["unrulymedia.com"]
+ },
+ "Upland": {
+ "properties": ["uplandsoftware.com"],
+ "resources": [
+ "leadlander.com",
+ "sf14g.com",
+ "trackalyzer.com",
+ "uplandsoftware.com"
+ ]
+ },
+ "Uptrends": {
+ "properties": ["uptrends.com"],
+ "resources": ["uptrends.com"]
+ },
+ "up-value": {
+ "properties": ["up-value.de"],
+ "resources": ["up-value.de"]
+ },
+ "Usability Sciences": {
+ "properties": ["usabilitysciences.com"],
+ "resources": ["usabilitysciences.com", "webiqonline.com"]
+ },
+ "User Local": {
+ "properties": ["nakanohito.jp"],
+ "resources": ["nakanohito.jp"]
+ },
+ "UserVoice": {
+ "properties": ["uservoice.com"],
+ "resources": ["uservoice.com"]
+ },
+ "V12 Data": {
+ "properties": ["v12group.com"],
+ "resources": ["v12data.com", "v12group.com"]
+ },
+ "Value Ad": {
+ "properties": ["valuead.com"],
+ "resources": ["valuead.com"]
+ },
+ "Various": {
+ "properties": [
+ "amigos.com",
+ "getiton.com",
+ "medley.com",
+ "nostringsattached.com",
+ "various.com"
+ ],
+ "resources": [
+ "amigos.com",
+ "getiton.com",
+ "medley.com",
+ "nostringsattached.com",
+ "various.com"
+ ]
+ },
+ "Vdopia": {
+ "properties": ["ivdopia.com", "vdopia.com"],
+ "resources": ["ivdopia.com", "vdopia.com"]
+ },
+ "Veeseo": {
+ "properties": ["veeseo.com"],
+ "resources": ["veeseo.com"]
+ },
+ "Velocity Media": {
+ "properties": ["adsvelocity.com"],
+ "resources": ["adsvelocity.com"]
+ },
+ "Velti": {
+ "properties": ["mobclix.com", "velti.com"],
+ "resources": ["mobclix.com", "velti.com"]
+ },
+ "Vemba": {
+ "properties": ["vemba.com"],
+ "resources": ["vemba.com"]
+ },
+ "Venatus Media": {
+ "properties": ["venatusmedia.com"],
+ "resources": ["venatusmedia.com"]
+ },
+ "Vendemore": {
+ "properties": ["vendemore.com"],
+ "resources": ["vendemore.com"]
+ },
+ "Vendio": {
+ "properties": ["singlefeed.com", "vendio.com"],
+ "resources": ["singlefeed.com", "vendio.com"]
+ },
+ "Veoxa": {
+ "properties": ["veoxa.com"],
+ "resources": ["veoxa.com"]
+ },
+ "Veremedia": {
+ "properties": ["veremedia.com"],
+ "resources": ["veremedia.com"]
+ },
+ "Vertical Acuity": {
+ "properties": ["verticalacuity.com"],
+ "resources": ["verticalacuity.com"]
+ },
+ "VerticalHealth": {
+ "properties": ["verticalhealth.com"],
+ "resources": ["verticalhealth.net"]
+ },
+ "VerticalResponse": {
+ "properties": ["verticalresponse.com", "vresp.com"],
+ "resources": ["verticalresponse.com", "vresp.com"]
+ },
+ "Vertster": {
+ "properties": ["vertster.com"],
+ "resources": ["vertster.com"]
+ },
+ "VG WORT": {
+ "properties": ["vgwort.de"],
+ "resources": ["vgwort.de"]
+ },
+ "Vibrant Media": {
+ "properties": ["vibrantmedia.com"],
+ "resources": ["intellitxt.com", "picadmedia.com", "vibrantmedia.com"]
+ },
+ "VideoIntelligence": {
+ "properties": ["vi.ai"],
+ "resources": ["vi.ai"]
+ },
+ "Videology": {
+ "properties": ["tidaltv.com", "videologygroup.com"],
+ "resources": ["tidaltv.com", "videologygroup.com"]
+ },
+ "Viewbix": {
+ "properties": ["qoof.com", "viewbix.com"],
+ "resources": ["qoof.com", "viewbix.com"]
+ },
+ "VigLink": {
+ "properties": ["viglink.com"],
+ "resources": ["viglink.com"]
+ },
+ "Vimeo": {
+ "properties": ["vimeo.com", "vimeocdn.com"],
+ "resources": ["vimeo.com", "vimeocdn.com"]
+ },
+ "VINDICO": {
+ "properties": ["vindicogroup.com", "vindicosuite.com"],
+ "resources": ["vindicogroup.com", "vindicosuite.com"]
+ },
+ "VisibleBrands": {
+ "properties": ["visbrands.com"],
+ "resources": ["visbrands.com"]
+ },
+ "Visible Measures": {
+ "properties": ["visiblemeasures.com"],
+ "resources": ["viewablemedia.net", "visiblemeasures.com"]
+ },
+ "VisiStat": {
+ "properties": ["id.kickfire.com", "sa-as.com"],
+ "resources": ["d.kickfire.com", "sa-as.com", "visistat.com"]
+ },
+ "Visit Streamer": {
+ "properties": ["visitstreamer.com"],
+ "resources": ["visitstreamer.com"]
+ },
+ "vistrac": {
+ "properties": ["vistrac.com"],
+ "resources": ["vistrac.com"]
+ },
+ "VisualDNA": {
+ "properties": ["vdna-assets.com", "visualdna-stats.com", "visualdna.com"],
+ "resources": ["vdna-assets.com", "visualdna-stats.com", "visualdna.com"]
+ },
+ "ViziSense": {
+ "properties": ["vizisense.com", "vizisense.net"],
+ "resources": ["vizisense.com", "vizisense.net"]
+ },
+ "Vizu": {
+ "properties": ["vizu.com"],
+ "resources": ["vizu.com"]
+ },
+ "Vizury": {
+ "properties": ["vizury.com"],
+ "resources": ["vizury.com"]
+ },
+ "VKontakte": {
+ "properties": ["vk.com"],
+ "resources": ["userapi.com", "vk.com", "vkontakte.ru"]
+ },
+ "Voice2Page": {
+ "properties": ["voice2page.com"],
+ "resources": ["voice2page.com"]
+ },
+ "Vserv": {
+ "properties": ["vserv.com", "vserv.mobi"],
+ "resources": ["vserv.com", "vserv.mobi"]
+ },
+ "Vuble": {
+ "properties": ["vuble.tv"],
+ "resources": ["mediabong.com"]
+ },
+ "Wahoha": {
+ "properties": ["contentwidgets.net", "wahoha.com"],
+ "resources": ["contentwidgets.net", "wahoha.com"]
+ },
+ "Wayfair": {
+ "properties": ["wayfair.com"],
+ "resources": ["wayfair.com"]
+ },
+ "WebAds": {
+ "properties": ["webads.co.uk", "www.webads.co.uk"],
+ "resources": ["webads.co.uk", "www.webads.co.uk"]
+ },
+ "Webclicktracker": {
+ "properties": ["webclicktracker.com"],
+ "resources": ["webclicktracker.com"]
+ },
+ "Web.com": {
+ "properties": ["feedperfect.com", "web.com"],
+ "resources": ["feedperfect.com", "web.com"]
+ },
+ "WebGozar.com": {
+ "properties": ["webgozar.com", "webgozar.ir"],
+ "resources": ["webgozar.com", "webgozar.ir"]
+ },
+ "Webmecanik": {
+ "properties": ["webmecanik.com"],
+ "resources": ["webmecanik.com"]
+ },
+ "WebMetro": {
+ "properties": ["dsmmadvantage.com", "revanadigital.com"],
+ "resources": ["dsmmadvantage.com", "revanadigital.com", "webmetro.com"]
+ },
+ "Webmine": {
+ "properties": ["webmine.cz"],
+ "resources": ["authedwebmine.cz", "webmine.cz"]
+ },
+ "WebminePool": {
+ "properties": ["webminepool.com"],
+ "resources": ["webminepool.com"]
+ },
+ "Webmining": {
+ "properties": ["webmining.co"],
+ "resources": ["webmining.co"]
+ },
+ "Weborama": {
+ "properties": ["weborama.com"],
+ "resources": ["weborama.com", "weborama.fr"]
+ },
+ "WebsiteAlive": {
+ "properties": [
+ "websitealive.com",
+ "websitealive0.com",
+ "websitealive1.com",
+ "websitealive2.com",
+ "websitealive3.com",
+ "websitealive4.com",
+ "websitealive5.com",
+ "websitealive6.com",
+ "websitealive7.com",
+ "websitealive8.com",
+ "websitealive9.com"
+ ],
+ "resources": ["websitealive.com"]
+ },
+ "Web Stats": {
+ "properties": ["onlinewebstats.com"],
+ "resources": ["onlinewebstats.com"]
+ },
+ "Web Tracking Services": {
+ "properties": ["web-stat.com", "webtrackingservices.com"],
+ "resources": ["web-stat.com", "webtrackingservices.com"]
+ },
+ "Webtraffic": {
+ "properties": ["webtraffic.no", "webtraffic.se"],
+ "resources": ["webtraffic.no", "webtraffic.se"]
+ },
+ "Web Traxs": {
+ "properties": ["webtraxs.com"],
+ "resources": ["webtraxs.com"]
+ },
+ "Webtrekk": {
+ "properties": ["webtrekk.com", "webtrekk.net"],
+ "resources": ["webtrekk.com", "webtrekk.net"]
+ },
+ "Webtrends": {
+ "properties": ["webtrends.com"],
+ "resources": ["reinvigorate.net", "webtrends.com", "webtrendslive.com"]
+ },
+ "White Ops": {
+ "properties": ["adzmath.com", "whiteops.com"],
+ "resources": ["adzmath.com", "whiteops.com"]
+ },
+ "whos.amung.us": {
+ "properties": ["amung.us"],
+ "resources": ["amung.us"]
+ },
+ "WideOrbit": {
+ "properties": ["wideorbit.com"],
+ "resources": ["dep-x.com"]
+ },
+ "Wingify": {
+ "properties": ["vwo.com", "wingify.com"],
+ "resources": ["visualwebsiteoptimizer.com", "vwo.com", "wingify.com"]
+ },
+ "WiredMinds": {
+ "properties": ["wiredminds.de"],
+ "resources": ["wiredminds.com", "wiredminds.de"]
+ },
+ "Wishabi": {
+ "properties": ["wishabi.com", "wishabi.net"],
+ "resources": ["flipp.com", "wishabi.com", "wishabi.net"]
+ },
+ "Woopra": {
+ "properties": ["woopra-ns.com", "woopra.com"],
+ "resources": ["woopra-ns.com", "woopra.com"]
+ },
+ "WordStream": {
+ "properties": ["wordstream.com"],
+ "resources": ["wordstream.com"]
+ },
+ "WOW Analytics": {
+ "properties": ["wowanalytics.co.uk"],
+ "resources": ["wowanalytics.co.uk"]
+ },
+ "WPP": {
+ "properties": [
+ "compete.com",
+ "decdna.net",
+ "groupm.com",
+ "kantarmedia.com",
+ "mecglobal.com",
+ "mindshareworld.com",
+ "themig.com",
+ "wpp.com",
+ "xaxis.com"
+ ],
+ "resources": [
+ "247realmedia.com",
+ "accelerator-media.com",
+ "acceleratorusa.com",
+ "compete.com",
+ "decdna.net",
+ "decideinteractive.com",
+ "gmads.net",
+ "groupm.com",
+ "kantarmedia.com",
+ "mecglobal.com",
+ "mindshare.nl",
+ "mindshareworld.com",
+ "mookie1.com",
+ "pm14.com",
+ "realmedia.com",
+ "targ.ad",
+ "themig.com",
+ "wpp.com",
+ "xaxis.com"
+ ]
+ },
+ "Wysistat": {
+ "properties": ["wysistat.net"],
+ "resources": ["wysistat.com", "wysistat.net"]
+ },
+ "xAd": {
+ "properties": ["xad.com"],
+ "resources": ["xad.com"]
+ },
+ "Xertive Media": {
+ "properties": ["xertivemedia.com"],
+ "resources": ["admanager-xertive.com", "xertivemedia.com"]
+ },
+ "xplosion interactive": {
+ "properties": ["xplosion.de"],
+ "resources": ["xplosion.de"]
+ },
+ "Xrost DS": {
+ "properties": ["adplan-ds.com"],
+ "resources": ["adplan-ds.com"]
+ },
+ "Yabuka": {
+ "properties": ["yabuka.com"],
+ "resources": ["yabuka.com"]
+ },
+ "Yahoo!": {
+ "properties": [
+ "flickr.com",
+ "flurry.com",
+ "tumblr.com",
+ "yahoo.co.jp",
+ "yahoo.com",
+ "yahoostudios.com",
+ "yuilibrary.com"
+ ],
+ "resources": [
+ "adinterax.com",
+ "adrevolver.com",
+ "bluelithium.com",
+ "dapper.net",
+ "flickr.com",
+ "flurry.com",
+ "interclick.com",
+ "luminate.com",
+ "mybloglog.com",
+ "overture.com",
+ "pixazza.com",
+ "rightmedia.com",
+ "rmxads.com",
+ "rocketmail.com",
+ "secure-adserver.com",
+ "staticflickr.com",
+ "tumblr.com",
+ "yahoo.co.jp",
+ "yahoo.com",
+ "yahooapis.com",
+ "yahooapis.jp",
+ "yahoofs.com",
+ "yieldmanager.com",
+ "yieldmanager.net",
+ "yimg.com",
+ "yimg.jp",
+ "yldmgrimg.net",
+ "ymail.com",
+ "yuilibrary.com",
+ "zenfs.com"
+ ]
+ },
+ "Yandex": {
+ "properties": [
+ "kinopoisk.ru",
+ "moikrug.ru",
+ "yadi.sk",
+ "yandex.by",
+ "yandex.com",
+ "yandex.com.tr",
+ "yandex.ru",
+ "yandex.st",
+ "yandex.ua"
+ ],
+ "resources": [
+ "api-maps.yandex.ru",
+ "moikrug.ru",
+ "web-visor.com",
+ "yandex.by",
+ "yandex.com",
+ "yandex.com.tr",
+ "yandex.ru",
+ "yandex.st",
+ "yandex.ua"
+ ]
+ },
+ "Ybrant Digital": {
+ "properties": ["addynamix.com", "brightcom.com", "luj.sdsjweb.com"],
+ "resources": [
+ "addynamix.com",
+ "adserverplus.com",
+ "brightcom.com",
+ "oridian.com",
+ "ybrantdigital.com"
+ ]
+ },
+ "YD": {
+ "properties": ["ydworld.com", "yieldivision.com"],
+ "resources": ["ydworld.com", "yieldivision.com"]
+ },
+ "YellowHammer": {
+ "properties": ["yhmg.com"],
+ "resources": [
+ "attracto.com",
+ "clickhype.com",
+ "yellowhammermg.com",
+ "yhmg.com"
+ ]
+ },
+ "YellowTracker": {
+ "properties": ["yellowtracker.com"],
+ "resources": ["yellowtracker.com"]
+ },
+ "Yes Ads": {
+ "properties": ["yesads.com"],
+ "resources": ["yesads.com"]
+ },
+ "YieldAds": {
+ "properties": ["yieldads.com"],
+ "resources": ["yieldads.com"]
+ },
+ "YieldBids": {
+ "properties": ["ybx.io"],
+ "resources": ["ybx.io"]
+ },
+ "YieldBot": {
+ "properties": ["yieldbot.com"],
+ "resources": ["yldbt.com"]
+ },
+ "YieldBuild": {
+ "properties": ["yieldbuild.com"],
+ "resources": ["yieldbuild.com"]
+ },
+ "Yieldify": {
+ "properties": ["yieldify.com"],
+ "resources": ["yieldify.com"]
+ },
+ "Yieldlab": {
+ "properties": ["yieldlab.de", "yieldlab.net"],
+ "resources": ["yieldlab.de", "yieldlab.net"]
+ },
+ "Yieldmo": {
+ "properties": ["yieldmo.com"],
+ "resources": ["yieldmo.com"]
+ },
+ "YieldNexus": {
+ "properties": ["ynxs.io"],
+ "resources": ["ynxs.io"]
+ },
+ "YOC": {
+ "properties": ["yoc.com"],
+ "resources": ["yoc.com"]
+ },
+ "Yoggrt": {
+ "properties": ["yoggrt.com"],
+ "resources": ["yoggrt.com"]
+ },
+ "youknowbest": {
+ "properties": ["youknowbest.com"],
+ "resources": ["youknowbest.com"]
+ },
+ "YSance": {
+ "properties": ["ysance.com"],
+ "resources": ["y-track.com"]
+ },
+ "YuMe": {
+ "properties": ["yume.com", "yumenetworks.com"],
+ "resources": ["yume.com", "yumenetworks.com"]
+ },
+ "ZafulAffiliate": {
+ "properties": ["zaful.com"],
+ "resources": ["zaful.com"]
+ },
+ "Zango": {
+ "properties": ["metricsdirect.com", "zango.com"],
+ "resources": ["metricsdirect.com", "zango.com"]
+ },
+ "zanox": {
+ "properties": ["buy.at", "zanox-affiliate.de", "zanox.com"],
+ "resources": ["buy.at", "zanox-affiliate.de", "zanox.com"]
+ },
+ "zapunited": {
+ "properties": ["zaparena.com", "zapunited.com"],
+ "resources": ["zaparena.com", "zapunited.com"]
+ },
+ "ZEDO": {
+ "properties": ["zedo.com", "zincx.com"],
+ "resources": ["zedo.com", "zincx.com"]
+ },
+ "Zefir": {
+ "properties": ["ze-fir.com"],
+ "resources": ["ze-fir.com"]
+ },
+ "Zemanta": {
+ "properties": ["zemanta.com"],
+ "resources": ["zemanta.com"]
+ },
+ "Zendesk": {
+ "properties": ["zendesk.com"],
+ "resources": ["zendesk.com"]
+ },
+ "ZestAd": {
+ "properties": ["zestad.com"],
+ "resources": ["zestad.com"]
+ },
+ "Zeta Email Solutions": {
+ "properties": ["insightgrit.com", "zetaemailsolutions.com"],
+ "resources": ["insightgrit.com", "zetaemailsolutions.com"]
+ },
+ "Zopim": {
+ "properties": ["zopim.com"],
+ "resources": ["zopim.com"]
+ },
+ "Zumobi": {
+ "properties": ["zumobi.com"],
+ "resources": ["zumobi.com"]
+ },
+ "ZypMedia": {
+ "properties": ["zypmedia.com"],
+ "resources": ["extend.tv", "zypmedia.com"]
+ }
}
diff --git a/mobile/android/android-components/components/browser/errorpages/src/main/assets/errorPageScripts.js b/mobile/android/android-components/components/browser/errorpages/src/main/assets/errorPageScripts.js
index 7836e30ac0..09804908f7 100644
--- a/mobile/android/android-components/components/browser/errorpages/src/main/assets/errorPageScripts.js
+++ b/mobile/android/android-components/components/browser/errorpages/src/main/assets/errorPageScripts.js
@@ -6,50 +6,54 @@
* Handles the parsing of the ErrorPages URI and then passes them to injectValues
*/
function parseQuery(queryString) {
- if (queryString[0] === '?') {
- queryString = queryString.substr(1);
- }
- const query = Object.fromEntries(new URLSearchParams(queryString).entries());
- injectValues(query)
- updateShowSSL(query)
- updateShowHSTS(query)
-};
+ if (queryString[0] === "?") {
+ queryString = queryString.substr(1);
+ }
+ const query = Object.fromEntries(new URLSearchParams(queryString).entries());
+ injectValues(query);
+ updateShowSSL(query);
+ updateShowHSTS(query);
+}
/**
* Updates the HTML elements based on the queryMap
*/
function injectValues(queryMap) {
- const tryAgainButton = document.getElementById('errorTryAgain')
- const continueHttpButton = document.getElementById("continueHttp")
-
+ const tryAgainButton = document.getElementById("errorTryAgain");
+ const continueHttpButton = document.getElementById("continueHttp");
- // Go through each element and inject the values
- document.title = queryMap.title
- tryAgainButton.innerHTML = queryMap.button
- continueHttpButton.innerHTML = queryMap.continueHttpButton
- document.getElementById('errorTitleText').innerHTML = queryMap.title
- document.getElementById('errorShortDesc').innerHTML = queryMap.description
- document.getElementById('advancedButton').innerHTML = queryMap.badCertAdvanced
- document.getElementById('badCertTechnicalInfo').innerHTML = queryMap.badCertTechInfo
- document.getElementById('advancedPanelBackButton').innerHTML = queryMap.badCertGoBack
- document.getElementById('advancedPanelAcceptButton').innerHTML = queryMap.badCertAcceptTemporary
- document.getElementById('advancedPanelAcceptButton').s = queryMap.badCertAcceptTemporary
+ // Go through each element and inject the values
+ document.title = queryMap.title;
+ tryAgainButton.innerHTML = queryMap.button;
+ continueHttpButton.innerHTML = queryMap.continueHttpButton;
+ document.getElementById("errorTitleText").innerHTML = queryMap.title;
+ document.getElementById("errorShortDesc").innerHTML = queryMap.description;
+ document.getElementById("advancedButton").innerHTML =
+ queryMap.badCertAdvanced;
+ document.getElementById("badCertTechnicalInfo").innerHTML =
+ queryMap.badCertTechInfo;
+ document.getElementById("advancedPanelBackButton").innerHTML =
+ queryMap.badCertGoBack;
+ document.getElementById("advancedPanelAcceptButton").innerHTML =
+ queryMap.badCertAcceptTemporary;
+ document.getElementById("advancedPanelAcceptButton").s =
+ queryMap.badCertAcceptTemporary;
- // If no image is passed in, remove the element so as not to leave an empty iframe
- const errorImage = document.getElementById('errorImage');
- if (!queryMap.image) {
- errorImage.remove();
- } else {
- errorImage.src = "resource://android/assets/" + queryMap.image;
- }
+ // If no image is passed in, remove the element so as not to leave an empty iframe
+ const errorImage = document.getElementById("errorImage");
+ if (!queryMap.image) {
+ errorImage.remove();
+ } else {
+ errorImage.src = "resource://android/assets/" + queryMap.image;
+ }
- if (queryMap.showContinueHttp === "true") {
- // On the "HTTPS-Only" error page "Try again" doesn't make sense since reloading the page
- // will just show an error page again.
- tryAgainButton.style.display = 'none';
- } else {
- continueHttpButton.style.display = 'none';
- }
+ if (queryMap.showContinueHttp === "true") {
+ // On the "HTTPS-Only" error page "Try again" doesn't make sense since reloading the page
+ // will just show an error page again.
+ tryAgainButton.style.display = "none";
+ } else {
+ continueHttpButton.style.display = "none";
+ }
}
var advancedVisible = false;
@@ -58,65 +62,75 @@ var advancedVisible = false;
* Used to show or hide the "advanced" button based on the validity of the SSL certificate
*/
function updateShowSSL(queryMap) {
- /** @type {'true' | 'false'} */
- const showSSL = queryMap.showSSL;
- if (typeof document.addCertException === "undefined") {
- document.getElementById('advancedButton').style.display='none';
+ /** @type {'true' | 'false'} */
+ const showSSL = queryMap.showSSL;
+ if (typeof document.addCertException === "undefined") {
+ document.getElementById("advancedButton").style.display = "none";
+ } else {
+ if (showSSL === "true") {
+ document.getElementById("advancedButton").style.display = "block";
} else {
- if (showSSL === 'true') {
- document.getElementById('advancedButton').style.display='block';
- } else {
- document.getElementById('advancedButton').style.display='none';
- }
+ document.getElementById("advancedButton").style.display = "none";
}
+ }
}
/**
* Used to show or hide the "accept" button based for the HSTS error page
*/
function updateShowHSTS(queryMap) {
- const showHSTS = queryMap.showHSTS;
- if (showHSTS === 'true') {
- document.getElementById('advancedButton').style.display='block';
- document.getElementById('advancedPanelAcceptButton').style.display='none';
- }
+ const showHSTS = queryMap.showHSTS;
+ if (showHSTS === "true") {
+ document.getElementById("advancedButton").style.display = "block";
+ document.getElementById("advancedPanelAcceptButton").style.display = "none";
+ }
}
/**
* Used to display information about the SSL certificate in `error_pages.html`
*/
function toggleAdvanced() {
- if (advancedVisible) {
- document.getElementById('badCertAdvancedPanel').style.display='none';
- } else {
- document.getElementById('badCertAdvancedPanel').style.display='block';
- }
- advancedVisible = !advancedVisible;
+ if (advancedVisible) {
+ document.getElementById("badCertAdvancedPanel").style.display = "none";
+ } else {
+ document.getElementById("badCertAdvancedPanel").style.display = "block";
+ }
+ advancedVisible = !advancedVisible;
}
/**
* Used to bypass an SSL pages in `error_pages.html`
*/
async function acceptAndContinue(temporary) {
- try {
- await document.addCertException(temporary);
- location.reload();
- } catch (error) {
- console.error("Unexpected error: " + error)
- }
+ try {
+ await document.addCertException(temporary);
+ location.reload();
+ } catch (error) {
+ console.error("Unexpected error: " + error);
+ }
}
-document.addEventListener('DOMContentLoaded', function () {
- if (window.history.length == 1) {
- document.getElementById('advancedPanelBackButton').style.display = 'none';
- } else {
- document.getElementById('advancedPanelBackButton').addEventListener('click', () => window.history.back());
- }
+document.addEventListener("DOMContentLoaded", function () {
+ if (window.history.length == 1) {
+ document.getElementById("advancedPanelBackButton").style.display = "none";
+ } else {
+ document
+ .getElementById("advancedPanelBackButton")
+ .addEventListener("click", () => window.history.back());
+ }
- document.getElementById('errorTryAgain').addEventListener('click', () => window.location.reload());
- document.getElementById('advancedButton').addEventListener('click', toggleAdvanced);
- document.getElementById('advancedPanelAcceptButton').addEventListener('click', () => acceptAndContinue(true));
- document.getElementById('continueHttp').addEventListener('click', () => document.reloadWithHttpsOnlyException());
+ document
+ .getElementById("errorTryAgain")
+ .addEventListener("click", () => window.location.reload());
+ document
+ .getElementById("advancedButton")
+ .addEventListener("click", toggleAdvanced);
+ document
+ .getElementById("advancedPanelAcceptButton")
+ .addEventListener("click", () => acceptAndContinue(true));
+ document
+ .getElementById("continueHttp")
+ .addEventListener("click", () => document.reloadWithHttpsOnlyException());
});
parseQuery(document.documentURI);
diff --git a/mobile/android/android-components/components/browser/errorpages/src/main/assets/error_page_js.html b/mobile/android/android-components/components/browser/errorpages/src/main/assets/error_page_js.html
index 397e237303..a6ae19df7c 100644
--- a/mobile/android/android-components/components/browser/errorpages/src/main/assets/error_page_js.html
+++ b/mobile/android/android-components/components/browser/errorpages/src/main/assets/error_page_js.html
@@ -5,54 +5,64 @@
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width; user-scalable=false;" />
- <meta http-equiv="Content-Security-Policy" content="default-src resource:; object-src 'none'" />
- <link rel="stylesheet" type="text/css" href="error_style.css">
- </head>
-
- <body id="errorPage" dir="auto">
- <!-- PAGE CONTAINER (for styling purposes only) -->
- <div id="errorPageContainer">
-
- <!-- Error Image -->
- <iframe id="errorImage" src="" frameborder="0"></iframe>
-
- <!-- Error Title -->
- <div id="errorTitle">
- <h1 id="errorTitleText"></h1>
- </div>
-
- <!-- LONG CONTENT (the section most likely to require scrolling) -->
- <div id="errorLongContent">
- <div id="errorShortDesc"></div>
- </div>
-
- <!-- Retry Button -->
- <button id="errorTryAgain"></button>
-
- <!-- Advanced Button -->
- <button id="advancedButton" class="buttonSecondary"></button>
-
- <!-- "Continue to HTTP site" Button (For HTTPS-Only error page only) -->
- <button id="continueHttp" class="buttonSecondary"></button>
-
- <div id="advancedPanelContainer">
- <div id="badCertAdvancedPanel" class="advanced-panel">
- <p id="badCertTechnicalInfo"></p>
- <div id="advancedPanelBackButtonContainer" class="advancedPanelButtonContainer">
- <button id="advancedPanelBackButton"></button>
- </div>
- <div id="advancedPanelAcceptButtonContainer" class="advancedPanelButtonContainer">
- <button id="advancedPanelAcceptButton" class="buttonSecondary"></button>
- </div>
- </div>
- </div>
- </div>
+ <head>
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width; user-scalable=false;" />
+ <meta
+ http-equiv="Content-Security-Policy"
+ content="default-src resource:; object-src 'none'"
+ />
+ <link rel="stylesheet" type="text/css" href="error_style.css" />
+ </head>
+
+ <body id="errorPage" dir="auto">
+ <!-- PAGE CONTAINER (for styling purposes only) -->
+ <div id="errorPageContainer">
+ <!-- Error Image -->
+ <iframe id="errorImage" src="" frameborder="0"></iframe>
+
+ <!-- Error Title -->
+ <div id="errorTitle">
+ <h1 id="errorTitleText"></h1>
+ </div>
+
+ <!-- LONG CONTENT (the section most likely to require scrolling) -->
+ <div id="errorLongContent">
+ <div id="errorShortDesc"></div>
+ </div>
- </body>
+ <!-- Retry Button -->
+ <button id="errorTryAgain"></button>
+
+ <!-- Advanced Button -->
+ <button id="advancedButton" class="buttonSecondary"></button>
+
+ <!-- "Continue to HTTP site" Button (For HTTPS-Only error page only) -->
+ <button id="continueHttp" class="buttonSecondary"></button>
+
+ <div id="advancedPanelContainer">
+ <div id="badCertAdvancedPanel" class="advanced-panel">
+ <p id="badCertTechnicalInfo"></p>
+ <div
+ id="advancedPanelBackButtonContainer"
+ class="advancedPanelButtonContainer"
+ >
+ <button id="advancedPanelBackButton"></button>
+ </div>
+ <div
+ id="advancedPanelAcceptButtonContainer"
+ class="advancedPanelButtonContainer"
+ >
+ <button
+ id="advancedPanelAcceptButton"
+ class="buttonSecondary"
+ ></button>
+ </div>
+ </div>
+ </div>
+ </div>
+ </body>
- <!-- Each consumer that uses a unique HTML error page must implement a parsing script-->
- <script src="./errorPageScripts.js"></script>
+ <!-- Each consumer that uses a unique HTML error page must implement a parsing script-->
+ <script src="./errorPageScripts.js"></script>
</html>
diff --git a/mobile/android/android-components/components/browser/errorpages/src/main/res/values-azb/strings.xml b/mobile/android/android-components/components/browser/errorpages/src/main/res/values-azb/strings.xml
index 158dbeb60f..b9ca4c9688 100644
--- a/mobile/android/android-components/components/browser/errorpages/src/main/res/values-azb/strings.xml
+++ b/mobile/android/android-components/components/browser/errorpages/src/main/res/values-azb/strings.xml
@@ -83,6 +83,21 @@
<string name="mozac_browser_errorpages_unknown_protocol_title">تانینمایان پروتکل</string>
<!-- The document title and heading of an error page. -->
+ <string name="mozac_browser_errorpages_file_not_found_title">فایل تاپیلمادی</string>
+
+ <!-- The document title and heading of an error page. -->
+ <string name="mozac_browser_errorpages_file_access_denied_title">فایلؽن ایشلدیلمه‌سینه ایجازه وئریلمه‌دی</string>
+
+ <!-- The document title and heading of an error page. -->
+ <string name="mozac_browser_errorpages_proxy_connection_refused_title">پروکسی سرور باغلانتی‌نی رد ائتدی</string>
+
+ <!-- The document title and heading of an error page. -->
+ <string name="mozac_browser_errorpages_unknown_proxy_host_title">پروکسی سرور تاپیلمادی</string>
+
+ <!-- The document title and heading of an error page. -->
+ <string name="mozac_browser_errorpages_safe_browsing_malware_uri_title">ضرر وئریجی سایت سورونو</string>
+
+ <!-- The document title and heading of an error page. -->
<string name="mozac_browser_errorpages_safe_browsing_unwanted_uri_title">ایستنمیه‌ن سایت سورونو</string>
<!-- The document title and heading of an error page. -->
diff --git a/mobile/android/android-components/components/browser/errorpages/src/main/res/values-su/strings.xml b/mobile/android/android-components/components/browser/errorpages/src/main/res/values-su/strings.xml
index 2620051760..cc7efa64eb 100644
--- a/mobile/android/android-components/components/browser/errorpages/src/main/res/values-su/strings.xml
+++ b/mobile/android/android-components/components/browser/errorpages/src/main/res/values-su/strings.xml
@@ -115,7 +115,7 @@
<string name="mozac_browser_errorpages_offline_title">Mode Oplén</string>
<!-- The error message shown when a website cannot be loaded because the browser is in offline mode. -->
- <string name="mozac_browser_errorpages_offline_message"><![CDATA[<p>Panyungsi keur leumpang dina mode luring na jeung teu tiasa nyambung ka barang anu dipénta.</p>
+ <string name="mozac_browser_errorpages_offline_message"><![CDATA[<p>Panyungsi keur leumpang dina modeu luring na jeung teu tiasa nyambung ka barang anu dipénta.</p>
<ul>
<li>Ieu parangkat nyambung ka jaringan aktip heunteu?</li>
<li>Pencét "Cobi deui" pikeun ngalih ka modeu daring sareng ngamuat deui ieu kaca.</li>
@@ -125,7 +125,7 @@
<string name="mozac_browser_errorpages_port_blocked_title">Port diwates pikeun kaamanan</string>
<!-- The error message shown when the browser prevents loading a website on a restricted port. -->
- <string name="mozac_browser_errorpages_port_blocked_message"><![CDATA[<p>Alamat anu dipénta nyebutkeun port (contona <q>mozilla.org:80</q> pikeun port 80 di mozilla.org) galibna dipaké <em>lain</em> pikeun nyungsi Raramat. Panyungsi geus ngabolaykeun paménta pikeun kaamanan anjeun.</p>]]></string>
+ <string name="mozac_browser_errorpages_port_blocked_message"><![CDATA[<p>Alamat anu dipénta nyebutkeun port (contona <q>mozilla.org:80</q> pikeun port 80 di mozilla.org) umumna dipaké <em>lain</em> pikeun nyungsi Raramat. Panyungsi geus ngabolaykeun paménta pikeun kaamanan anjeun.</p>]]></string>
<!-- The document title and heading of the error page shown when the Internet connection is disrupted while loading a website. -->
<string name="mozac_browser_errorpages_net_reset_title">Sambunganana dirését</string>
@@ -206,7 +206,7 @@
</ul>]]></string>
<!-- The document title and heading of an error page. -->
- <string name="mozac_browser_errorpages_unknown_protocol_title">Protokol Teu Dipikawanoh</string>
+ <string name="mozac_browser_errorpages_unknown_protocol_title">Protokol Teu Dipiwanoh</string>
<string name="mozac_browser_errorpages_unknown_protocol_message"><![CDATA[<p>Alamatna méré protocol (e.g., <q>wxyz://</q>) anu teu dipikawanoh ku pamaluruh, ku kituna pamaluruhna teu bisa nyambung kalawan bener ka lokana.</p>
<ul>
@@ -273,7 +273,7 @@
<!-- The title of the error page for websites that do not support HTTPS when HTTPS-Only is turned on -->
<string name="mozac_browser_errorpages_httpsonly_title">Situs Aman Teu Sayaga</string>
<!-- The text of the error page for websites that do not support HTTPS when HTTPS-Only is turned on. %1$s will be replaced with the URL of the website. -->
- <string name="mozac_browser_errorpages_httpsonly_message"><![CDATA[Anjeun ngahurungkeun Mode Ukur-HTTPS pikeun kaamanan lanjutan, anapon pérsi HTTPS <em>%1$s</em> teu sayaga.]]></string>
+ <string name="mozac_browser_errorpages_httpsonly_message"><![CDATA[Anjeun ngahurungkeun Mode Ukur-HTTPS pikeun kaamanan terusan, anapon pérsi HTTPS <em>%1$s</em> teu sayaga.]]></string>
<!-- Button on error page for websites that do not support HTTPS when HTTPS-Only is turned on. Clicking the button allows the user to nevertheless load the website using HTTP. -->
<string name="mozac_browser_errorpages_httpsonly_button">Teruskeun ka Situs HTTP</string>
</resources>
diff --git a/mobile/android/android-components/components/browser/errorpages/src/main/res/values-sv-rSE/strings.xml b/mobile/android/android-components/components/browser/errorpages/src/main/res/values-sv-rSE/strings.xml
index 9a0bf69388..4f22ac030e 100644
--- a/mobile/android/android-components/components/browser/errorpages/src/main/res/values-sv-rSE/strings.xml
+++ b/mobile/android/android-components/components/browser/errorpages/src/main/res/values-sv-rSE/strings.xml
@@ -241,7 +241,7 @@
<ul>
<li>Kan objektet ha bytt namn, tagits bort eller flyttat?</li>
<li>Finns det stavfel, stor bokstav eller annat typografiskt fel i adressen?</li>
- <li>Har du tillräckliga åtkomstbehörigheter till den begärda objektet?</li>
+ <li>Har du tillräckliga åtkomstbehörigheter till det begärda objektet?</li>
</ul>
]]></string>
diff --git a/mobile/android/android-components/components/browser/icons/src/main/assets/extensions/browser-icons/icons.js b/mobile/android/android-components/components/browser/icons/src/main/assets/extensions/browser-icons/icons.js
index 20eada9a19..bc2c6ee35e 100644
--- a/mobile/android/android-components/components/browser/icons/src/main/assets/extensions/browser-icons/icons.js
+++ b/mobile/android/android-components/components/browser/icons/src/main/assets/extensions/browser-icons/icons.js
@@ -2,80 +2,81 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- /*
- * This web extension looks for known icon tags, collects URLs and available
- * meta data (e.g. sizes) and passes that to the app code.
- */
+/*
+ * This web extension looks for known icon tags, collects URLs and available
+ * meta data (e.g. sizes) and passes that to the app code.
+ */
/**
* Takes a DOMTokenList and returns a String array.
*/
function sizesToList(sizes) {
- if (sizes == null) {
- return []
- }
+ if (sizes == null) {
+ return [];
+ }
- if (!(sizes instanceof DOMTokenList)) {
- return []
- }
+ if (!(sizes instanceof DOMTokenList)) {
+ return [];
+ }
- return Array.from(sizes)
+ return Array.from(sizes);
}
function collect_link_icons(icons, rel) {
- document.querySelectorAll('link[rel="' + rel + '"]').forEach(
- function(currentValue, currentIndex, listObj) {
- icons.push({
- 'type': rel,
- 'href': currentValue.href,
- 'sizes': sizesToList(currentValue.sizes),
- 'mimeType': currentValue.type
- });
- })
+ document
+ .querySelectorAll('link[rel="' + rel + '"]')
+ .forEach(function (currentValue, currentIndex, listObj) {
+ icons.push({
+ type: rel,
+ href: currentValue.href,
+ sizes: sizesToList(currentValue.sizes),
+ mimeType: currentValue.type,
+ });
+ });
}
function collect_meta_property_icons(icons, property) {
- document.querySelectorAll('meta[property="' + property + '"]').forEach(
- function(currentValue, currentIndex, listObj) {
- icons.push({
- 'type': property,
- 'href': currentValue.content
- })
- }
- )
+ document
+ .querySelectorAll('meta[property="' + property + '"]')
+ .forEach(function (currentValue, currentIndex, listObj) {
+ icons.push({
+ type: property,
+ href: currentValue.content,
+ });
+ });
}
function collect_meta_name_icons(icons, name) {
- document.querySelectorAll('meta[name="' + name + '"]').forEach(
- function(currentValue, currentIndex, listObj) {
- icons.push({
- 'type': name,
- 'href': currentValue.content
- })
- }
- )
+ document
+ .querySelectorAll('meta[name="' + name + '"]')
+ .forEach(function (currentValue, currentIndex, listObj) {
+ icons.push({
+ type: name,
+ href: currentValue.content,
+ });
+ });
}
let icons = [];
-collect_link_icons(icons, 'icon');
-collect_link_icons(icons, 'shortcut icon');
-collect_link_icons(icons, 'fluid-icon')
-collect_link_icons(icons, 'apple-touch-icon')
-collect_link_icons(icons, 'image_src')
-collect_link_icons(icons, 'apple-touch-icon image_src')
-collect_link_icons(icons, 'apple-touch-icon-precomposed')
+collect_link_icons(icons, "icon");
+collect_link_icons(icons, "shortcut icon");
+collect_link_icons(icons, "fluid-icon");
+collect_link_icons(icons, "apple-touch-icon");
+collect_link_icons(icons, "image_src");
+collect_link_icons(icons, "apple-touch-icon image_src");
+collect_link_icons(icons, "apple-touch-icon-precomposed");
-collect_meta_property_icons(icons, 'og:image')
-collect_meta_property_icons(icons, 'og:image:url')
-collect_meta_property_icons(icons, 'og:image:secure_url')
+collect_meta_property_icons(icons, "og:image");
+collect_meta_property_icons(icons, "og:image:url");
+collect_meta_property_icons(icons, "og:image:secure_url");
-collect_meta_name_icons(icons, 'twitter:image')
-collect_meta_name_icons(icons, 'msapplication-TileImage')
+collect_meta_name_icons(icons, "twitter:image");
+collect_meta_name_icons(icons, "msapplication-TileImage");
let message = {
- 'url': document.location.href,
- 'icons': icons
-}
+ url: document.location.href,
+ icons: icons,
+};
browser.runtime.sendNativeMessage("MozacBrowserIcons", message);
diff --git a/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/BrowserIcons.kt b/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/BrowserIcons.kt
index 3bf5c2b2ff..fe44cfc6be 100644
--- a/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/BrowserIcons.kt
+++ b/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/BrowserIcons.kt
@@ -38,10 +38,12 @@ import mozilla.components.browser.icons.extension.IconMessageHandler
import mozilla.components.browser.icons.generator.DefaultIconGenerator
import mozilla.components.browser.icons.generator.IconGenerator
import mozilla.components.browser.icons.loader.DataUriIconLoader
+import mozilla.components.browser.icons.loader.DefaultMemoryInfoProvider
import mozilla.components.browser.icons.loader.DiskIconLoader
import mozilla.components.browser.icons.loader.HttpIconLoader
import mozilla.components.browser.icons.loader.IconLoader
import mozilla.components.browser.icons.loader.MemoryIconLoader
+import mozilla.components.browser.icons.loader.MemoryInfoProvider
import mozilla.components.browser.icons.loader.NonBlockingHttpIconLoader
import mozilla.components.browser.icons.pipeline.IconResourceComparator
import mozilla.components.browser.icons.preparer.DiskIconPreparer
@@ -91,6 +93,7 @@ class BrowserIcons constructor(
private val context: Context,
httpClient: Client,
private val generator: IconGenerator = DefaultIconGenerator(),
+ private val memoryInfoProvider: MemoryInfoProvider = DefaultMemoryInfoProvider(context),
private val preparers: List<IconPreprarer> = listOf(
TippyTopIconPreparer(context.assets),
MemoryIconPreparer(sharedMemoryCache),
@@ -99,7 +102,10 @@ class BrowserIcons constructor(
internal var loaders: List<IconLoader> = listOf(
MemoryIconLoader(sharedMemoryCache),
DiskIconLoader(sharedDiskCache),
- HttpIconLoader(httpClient),
+ HttpIconLoader(
+ httpClient = httpClient,
+ memoryInfoProvider = memoryInfoProvider,
+ ),
DataUriIconLoader(),
),
private val decoders: List<ImageDecoder> = listOf(
@@ -120,7 +126,10 @@ class BrowserIcons constructor(
private val maximumSize = context.resources.getDimensionPixelSize(R.dimen.mozac_browser_icons_maximum_size)
private val minimumSize = context.resources.getDimensionPixelSize(R.dimen.mozac_browser_icons_minimum_size)
private val scope = CoroutineScope(jobDispatcher)
- private val backgroundHttpIconLoader = NonBlockingHttpIconLoader(httpClient) { request, resource, result ->
+ private val backgroundHttpIconLoader = NonBlockingHttpIconLoader(
+ httpClient = httpClient,
+ memoryInfoProvider = DefaultMemoryInfoProvider(context),
+ ) { request, resource, result ->
val desiredSize = request.getDesiredSize(context, minimumSize, maximumSize)
val icon = decodeIconLoaderResult(result, decoders, desiredSize)
diff --git a/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/loader/HttpIconLoader.kt b/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/loader/HttpIconLoader.kt
index 430f46f3ec..d3217bc4b2 100644
--- a/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/loader/HttpIconLoader.kt
+++ b/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/loader/HttpIconLoader.kt
@@ -12,26 +12,30 @@ import androidx.core.net.toUri
import mozilla.components.browser.icons.Icon
import mozilla.components.browser.icons.IconRequest
import mozilla.components.concept.fetch.Client
+import mozilla.components.concept.fetch.Headers
import mozilla.components.concept.fetch.Request
import mozilla.components.concept.fetch.Response
import mozilla.components.concept.fetch.isSuccess
import mozilla.components.support.base.log.logger.Logger
import mozilla.components.support.ktx.android.net.isHttpOrHttps
import mozilla.components.support.ktx.kotlin.sanitizeURL
+import java.io.ByteArrayOutputStream
import java.io.IOException
import java.util.concurrent.TimeUnit
private const val CONNECT_TIMEOUT = 2L // Seconds
private const val READ_TIMEOUT = 10L // Seconds
+private const val MAX_DOWNLOAD_BYTES = 1048576 // 1MB
/**
* [IconLoader] implementation that will try to download the icon for resources that point to an http(s) URL.
*/
open class HttpIconLoader(
private val httpClient: Client,
+ private val memoryInfoProvider: MemoryInfoProvider,
) : IconLoader {
- private val logger = Logger("HttpIconLoader")
private val failureCache = FailureCache()
+ private val logger = Logger("HttpIconLoader")
override fun load(context: Context, request: IconRequest, resource: IconRequest.Resource): IconLoader.Result {
if (!shouldDownload(resource)) {
@@ -78,10 +82,45 @@ open class HttpIconLoader(
protected fun shouldDownload(resource: IconRequest.Resource): Boolean {
return resource.url.sanitizeURL().toUri().isHttpOrHttps && !failureCache.hasFailedRecently(resource.url)
}
-}
-private fun Response.toIconLoaderResult() = body.useStream {
- IconLoader.Result.BytesResult(it.readBytes(), Icon.Source.DOWNLOAD)
+ private fun Response.toIconLoaderResult(): IconLoader.Result {
+ // Compare the Response Content-Length header with the available memory on device
+ val contentLengthHeader = headers[Headers.Names.CONTENT_LENGTH]
+ if (!contentLengthHeader.isNullOrEmpty()) {
+ val contentLength = contentLengthHeader.toLong()
+ return if (contentLength > MAX_DOWNLOAD_BYTES || contentLength > memoryInfoProvider.getAvailMem()) {
+ IconLoader.Result.NoResult
+ } else {
+ // Load the icon without reading to buffers since the checks above passed
+ body.useStream {
+ IconLoader.Result.BytesResult(it.readBytes(), Icon.Source.DOWNLOAD)
+ }
+ }
+ } else {
+ // Read the response body in chunks and check with available memory to prevent exceeding it
+ val buffer = ByteArray(DEFAULT_BUFFER_SIZE)
+ return ByteArrayOutputStream().use { outStream ->
+ body.useStream { inputStream ->
+ var bytesRead = 0
+ var bytesInChunk: Int
+
+ while (inputStream.read(buffer).also { bytesInChunk = it } != -1) {
+ outStream.write(buffer, 0, bytesInChunk)
+ bytesRead += bytesInChunk
+
+ if (bytesRead > MAX_DOWNLOAD_BYTES || bytesRead > memoryInfoProvider.getAvailMem()) {
+ return@useStream IconLoader.Result.NoResult
+ }
+
+ if (bytesInChunk < DEFAULT_BUFFER_SIZE) {
+ break
+ }
+ }
+ IconLoader.Result.BytesResult(outStream.toByteArray(), Icon.Source.DOWNLOAD)
+ }
+ }
+ }
+ }
}
private const val MAX_FAILURE_URLS = 25
diff --git a/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/loader/MemoryInfoProvider.kt b/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/loader/MemoryInfoProvider.kt
new file mode 100644
index 0000000000..52f8bcbb28
--- /dev/null
+++ b/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/loader/MemoryInfoProvider.kt
@@ -0,0 +1,32 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.icons.loader
+
+import android.app.ActivityManager
+import android.content.Context
+import androidx.core.content.ContextCompat
+
+/**
+ * This class provides information about the device memory info without exposing the android
+ * framework APIs directly, making it easier to test the code that depends on it.
+ */
+interface MemoryInfoProvider {
+ /**
+ * Returns the device's available memory
+ */
+ fun getAvailMem(): Long
+}
+
+/**
+ * This class retrieves the available memory on device using activity manager.
+ */
+class DefaultMemoryInfoProvider(private val context: Context) : MemoryInfoProvider {
+ override fun getAvailMem(): Long {
+ val activityManager = ContextCompat.getSystemService(context, ActivityManager::class.java)
+ val memoryInfo = ActivityManager.MemoryInfo()
+ activityManager?.getMemoryInfo(memoryInfo)
+ return memoryInfo.availMem
+ }
+}
diff --git a/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/loader/NonBlockingHttpIconLoader.kt b/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/loader/NonBlockingHttpIconLoader.kt
index c3203dc13f..fcd64662d6 100644
--- a/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/loader/NonBlockingHttpIconLoader.kt
+++ b/mobile/android/android-components/components/browser/icons/src/main/java/mozilla/components/browser/icons/loader/NonBlockingHttpIconLoader.kt
@@ -24,9 +24,10 @@ import mozilla.components.concept.fetch.Client
*/
class NonBlockingHttpIconLoader(
httpClient: Client,
+ memoryInfoProvider: MemoryInfoProvider,
private val scope: CoroutineScope = CoroutineScope(Dispatchers.IO),
private val loadCallback: (IconRequest, IconRequest.Resource, IconLoader.Result) -> Unit,
-) : HttpIconLoader(httpClient) {
+) : HttpIconLoader(httpClient, memoryInfoProvider) {
override fun load(context: Context, request: IconRequest, resource: IconRequest.Resource): IconLoader.Result {
if (!shouldDownload(resource)) {
return IconLoader.Result.NoResult
diff --git a/mobile/android/android-components/components/browser/icons/src/test/java/mozilla/components/browser/icons/BrowserIconsTest.kt b/mobile/android/android-components/components/browser/icons/src/test/java/mozilla/components/browser/icons/BrowserIconsTest.kt
index 67a392d0a2..b14b5a30b3 100644
--- a/mobile/android/android-components/components/browser/icons/src/test/java/mozilla/components/browser/icons/BrowserIconsTest.kt
+++ b/mobile/android/android-components/components/browser/icons/src/test/java/mozilla/components/browser/icons/BrowserIconsTest.kt
@@ -13,6 +13,7 @@ import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.Job
import mozilla.components.browser.icons.generator.IconGenerator
+import mozilla.components.browser.icons.loader.MemoryInfoProvider
import mozilla.components.concept.engine.manifest.Size
import mozilla.components.lib.fetch.httpurlconnection.HttpURLConnectionClient
import mozilla.components.support.test.any
@@ -46,6 +47,11 @@ import java.io.OutputStream
@ExperimentalCoroutinesApi // for runTestOnMain
@RunWith(AndroidJUnit4::class)
class BrowserIconsTest {
+ private val defaultAvailMem: Long = 100000
+
+ class FakeMemoryInfoProvider(private val availMem: Long) : MemoryInfoProvider {
+ override fun getAvailMem(): Long = availMem
+ }
@get:Rule
val coroutinesTestRule = MainCoroutineRule()
@@ -65,7 +71,12 @@ class BrowserIconsTest {
`when`(generator.generate(any(), any())).thenReturn(mockedIcon)
val request = IconRequest(url = "https://www.mozilla_test.org")
- val icon = BrowserIcons(testContext, httpClient = mock(), generator = generator)
+ val icon = BrowserIcons(
+ context = testContext,
+ httpClient = mock(),
+ generator = generator,
+ memoryInfoProvider = FakeMemoryInfoProvider(defaultAvailMem),
+ )
.loadIcon(request)
assertEquals(mockedIcon, icon.await())
@@ -114,6 +125,7 @@ class BrowserIconsTest {
val icon = BrowserIcons(
testContext,
httpClient = HttpURLConnectionClient(),
+ memoryInfoProvider = FakeMemoryInfoProvider(defaultAvailMem),
).loadIcon(request).await()
assertNotNull(icon)
@@ -139,7 +151,11 @@ class BrowserIconsTest {
server.start()
try {
- val icons = BrowserIcons(testContext, httpClient = HttpURLConnectionClient())
+ val icons = BrowserIcons(
+ context = testContext,
+ httpClient = HttpURLConnectionClient(),
+ memoryInfoProvider = FakeMemoryInfoProvider(defaultAvailMem),
+ )
val request = IconRequest(
url = "https://www.mozilla.org",
@@ -182,7 +198,11 @@ class BrowserIconsTest {
server.start()
try {
- val icons = BrowserIcons(testContext, httpClient = HttpURLConnectionClient())
+ val icons = BrowserIcons(
+ context = testContext,
+ httpClient = HttpURLConnectionClient(),
+ memoryInfoProvider = FakeMemoryInfoProvider(defaultAvailMem),
+ )
val request = IconRequest(
url = "https://www.mozilla.org",
diff --git a/mobile/android/android-components/components/browser/icons/src/test/java/mozilla/components/browser/icons/loader/HttpIconLoaderTest.kt b/mobile/android/android-components/components/browser/icons/src/test/java/mozilla/components/browser/icons/loader/HttpIconLoaderTest.kt
index 3670066921..872440900a 100644
--- a/mobile/android/android-components/components/browser/icons/src/test/java/mozilla/components/browser/icons/loader/HttpIconLoaderTest.kt
+++ b/mobile/android/android-components/components/browser/icons/src/test/java/mozilla/components/browser/icons/loader/HttpIconLoaderTest.kt
@@ -34,6 +34,11 @@ import java.io.InputStream
@RunWith(AndroidJUnit4::class)
class HttpIconLoaderTest {
+ private val defaultAvailMem: Long = 100000
+
+ class FakeMemoryInfoProvider(private val availMem: Long) : MemoryInfoProvider {
+ override fun getAvailMem(): Long = availMem
+ }
@Test
fun `Loader downloads data and uses appropriate headers`() {
@@ -56,7 +61,7 @@ class HttpIconLoaderTest {
server.start()
try {
- val loader = HttpIconLoader(client)
+ val loader = HttpIconLoader(client, FakeMemoryInfoProvider(defaultAvailMem))
val result = loader.load(
mock(),
mock(),
@@ -94,7 +99,7 @@ class HttpIconLoaderTest {
fun `Loader will not perform any requests for data uris`() {
val client: Client = mock()
- val result = HttpIconLoader(client).load(
+ val result = HttpIconLoader(client, FakeMemoryInfoProvider(defaultAvailMem)).load(
mock(),
mock(),
IconRequest.Resource(
@@ -112,7 +117,7 @@ class HttpIconLoaderTest {
fun `Request has timeouts applied`() {
val client: Client = mock()
- val loader = HttpIconLoader(client)
+ val loader = HttpIconLoader(client, FakeMemoryInfoProvider(defaultAvailMem))
doReturn(
Response(
url = "https://www.example.org",
@@ -144,7 +149,7 @@ class HttpIconLoaderTest {
fun `NoResult is returned for non-successful requests`() {
val client: Client = mock()
- val loader = HttpIconLoader(client)
+ val loader = HttpIconLoader(client, FakeMemoryInfoProvider(defaultAvailMem))
doReturn(
Response(
url = "https://www.example.org",
@@ -170,7 +175,7 @@ class HttpIconLoaderTest {
fun `Loader will not try to load URL again that just recently failed`() {
val client: Client = mock()
- val loader = HttpIconLoader(client)
+ val loader = HttpIconLoader(client, FakeMemoryInfoProvider(defaultAvailMem))
doReturn(
Response(
url = "https://www.example.org",
@@ -203,7 +208,7 @@ class HttpIconLoaderTest {
val client: Client = mock()
doThrow(IOException("Mock")).`when`(client).fetch(any())
- val loader = HttpIconLoader(client)
+ val loader = HttpIconLoader(client, FakeMemoryInfoProvider(defaultAvailMem))
val resource = IconRequest.Resource(
url = "https://www.example.org",
@@ -223,7 +228,7 @@ class HttpIconLoaderTest {
}
}
- val loader = HttpIconLoader(client)
+ val loader = HttpIconLoader(client, FakeMemoryInfoProvider(defaultAvailMem))
doReturn(
Response(
url = "https://www.example.org",
@@ -242,10 +247,164 @@ class HttpIconLoaderTest {
}
@Test
+ fun `Loader will return NoResult for response with large Content-Length size`() {
+ val clients = listOf(
+ HttpURLConnectionClient(),
+ OkHttpClient(),
+ )
+
+ clients.forEach { client ->
+ val server = MockWebServer()
+
+ // Create a mock Response object with the Content-Length header set to a large size
+ server.enqueue(
+ MockResponse().setBody(
+ javaClass.getResourceAsStream("/misc/test.txt")!!
+ .bufferedReader()
+ .use { it.readText() },
+ ).addHeader("Content-Length", "2048576"),
+ )
+
+ server.start()
+
+ try {
+ val loader = HttpIconLoader(client, FakeMemoryInfoProvider(defaultAvailMem))
+ val result = loader.load(
+ mock(),
+ mock(),
+ IconRequest.Resource(
+ url = server.url("/some/path").toString(),
+ type = IconRequest.Resource.Type.APPLE_TOUCH_ICON,
+ ),
+ )
+
+ assertTrue(result is IconLoader.Result.NoResult)
+ } finally {
+ server.shutdown()
+ }
+ }
+ }
+
+ @Test
+ fun `Loader will return NoResult for valid Content-Length size and low available memory`() {
+ val clients = listOf(
+ HttpURLConnectionClient(),
+ OkHttpClient(),
+ )
+
+ clients.forEach { client ->
+ val server = MockWebServer()
+
+ server.enqueue(
+ MockResponse().setBody(
+ javaClass.getResourceAsStream("/misc/test.txt")!!
+ .bufferedReader()
+ .use { it.readText() },
+ ).addHeader("Content-Length", "10000"),
+ )
+
+ server.start()
+
+ try {
+ val loader = HttpIconLoader(client, FakeMemoryInfoProvider(availMem = 0))
+ val result = loader.load(
+ mock(),
+ mock(),
+ IconRequest.Resource(
+ url = server.url("/some/path").toString(),
+ type = IconRequest.Resource.Type.APPLE_TOUCH_ICON,
+ ),
+ )
+
+ assertTrue(result is IconLoader.Result.NoResult)
+ } finally {
+ server.shutdown()
+ }
+ }
+ }
+
+ @Test
+ fun `Loader will return NoResult for null Content-Length header and low available memory`() {
+ val clients = listOf(
+ HttpURLConnectionClient(),
+ OkHttpClient(),
+ )
+
+ clients.forEach { client ->
+ val server = MockWebServer()
+
+ server.enqueue(
+ MockResponse().setBody(
+ javaClass.getResourceAsStream("/misc/test.txt")!!
+ .bufferedReader()
+ .use { it.readText() },
+ ).removeHeader("Content-Length"),
+ )
+
+ server.start()
+
+ try {
+ val loader = HttpIconLoader(client, FakeMemoryInfoProvider(availMem = 0))
+ val result = loader.load(
+ mock(),
+ mock(),
+ IconRequest.Resource(
+ url = server.url("/some/path").toString(),
+ type = IconRequest.Resource.Type.APPLE_TOUCH_ICON,
+ ),
+ )
+
+ assertTrue(result is IconLoader.Result.NoResult)
+ } finally {
+ server.shutdown()
+ }
+ }
+ }
+
+ @Test
+ fun `Loader downloads data for null Content-Length header and response size within limits`() {
+ val clients = listOf(
+ HttpURLConnectionClient(),
+ OkHttpClient(),
+ )
+
+ clients.forEach { client ->
+ val server = MockWebServer()
+
+ server.enqueue(
+ MockResponse().setBody(
+ javaClass.getResourceAsStream("/misc/test.txt")!!
+ .bufferedReader()
+ .use { it.readText() },
+ ).removeHeader("Content-Length"),
+ )
+
+ server.start()
+
+ try {
+ val loader = HttpIconLoader(client, FakeMemoryInfoProvider(defaultAvailMem))
+ val result = loader.load(
+ mock(),
+ mock(),
+ IconRequest.Resource(
+ url = server.url("/some/path").toString(),
+ type = IconRequest.Resource.Type.APPLE_TOUCH_ICON,
+ ),
+ )
+ assertTrue("Result should match BytesResult", result is IconLoader.Result.BytesResult)
+ val data = (result as IconLoader.Result.BytesResult).bytes
+ assertTrue("Data should not be empty", data.isNotEmpty())
+ } finally {
+ server.shutdown()
+ }
+ }
+ }
+
+ @Test
fun `Loader will sanitize URL`() {
val client: Client = mock()
- val loader = HttpIconLoader(client)
+ val loader = HttpIconLoader(client, FakeMemoryInfoProvider(defaultAvailMem))
doReturn(
Response(
url = "https://www.example.org",
diff --git a/mobile/android/android-components/components/browser/icons/src/test/java/mozilla/components/browser/icons/loader/NonBlockingHttpIconLoaderTest.kt b/mobile/android/android-components/components/browser/icons/src/test/java/mozilla/components/browser/icons/loader/NonBlockingHttpIconLoaderTest.kt
index 6b2fe8d8ad..2a2da044bf 100644
--- a/mobile/android/android-components/components/browser/icons/src/test/java/mozilla/components/browser/icons/loader/NonBlockingHttpIconLoaderTest.kt
+++ b/mobile/android/android-components/components/browser/icons/src/test/java/mozilla/components/browser/icons/loader/NonBlockingHttpIconLoaderTest.kt
@@ -45,6 +45,11 @@ class NonBlockingHttpIconLoaderTest {
@get:Rule
val coroutinesTestRule = MainCoroutineRule()
private val scope = coroutinesTestRule.scope
+ private val defaultAvailMem: Long = 100000
+
+ class FakeMemoryInfoProvider(private val availMem: Long) : MemoryInfoProvider {
+ override fun getAvailMem(): Long = availMem
+ }
@Test
fun `Loader will return IconLoader#Result#NoResult for a load request and respond with the result through a callback`() = runTestOnMain {
@@ -71,7 +76,7 @@ class NonBlockingHttpIconLoaderTest {
var callbackIconRequest: IconRequest? = null
var callbackResource: IconRequest.Resource? = null
var callbackIcon: IconLoader.Result? = null
- val loader = NonBlockingHttpIconLoader(client, scope) { request, resource, icon ->
+ val loader = NonBlockingHttpIconLoader(client, FakeMemoryInfoProvider(defaultAvailMem), scope) { request, resource, icon ->
callbackIconRequest = request
callbackResource = resource
callbackIcon = icon
@@ -106,7 +111,7 @@ class NonBlockingHttpIconLoaderTest {
var callbackIconRequest: IconRequest? = null
var callbackResource: IconRequest.Resource? = null
var callbackIcon: IconLoader.Result? = null
- val loader = NonBlockingHttpIconLoader(client, scope) { request, resource, icon ->
+ val loader = NonBlockingHttpIconLoader(client, FakeMemoryInfoProvider(defaultAvailMem), scope) { request, resource, icon ->
callbackIconRequest = request
callbackResource = resource
callbackIcon = icon
@@ -132,7 +137,7 @@ class NonBlockingHttpIconLoaderTest {
@Test
fun `Request has timeouts applied`() = runTestOnMain {
val client: Client = mock()
- val loader = NonBlockingHttpIconLoader(client, scope) { _, _, _ -> }
+ val loader = NonBlockingHttpIconLoader(client, FakeMemoryInfoProvider(defaultAvailMem), scope) { _, _, _ -> }
doReturn(
Response(
url = "https://www.example.org",
@@ -165,7 +170,7 @@ class NonBlockingHttpIconLoaderTest {
var callbackIconRequest: IconRequest? = null
var callbackResource: IconRequest.Resource? = null
var callbackIcon: IconLoader.Result? = null
- val loader = NonBlockingHttpIconLoader(client, scope) { request, resource, icon ->
+ val loader = NonBlockingHttpIconLoader(client, FakeMemoryInfoProvider(defaultAvailMem), scope) { request, resource, icon ->
callbackIconRequest = request
callbackResource = resource
callbackIcon = icon
@@ -198,7 +203,7 @@ class NonBlockingHttpIconLoaderTest {
@Test
fun `Loader will not try to load URL again that just recently failed`() = runTestOnMain {
val client: Client = mock()
- val loader = NonBlockingHttpIconLoader(client, scope) { _, _, _ -> }
+ val loader = NonBlockingHttpIconLoader(client, FakeMemoryInfoProvider(defaultAvailMem), scope) { _, _, _ -> }
doReturn(
Response(
url = "https://www.example.org",
@@ -231,7 +236,7 @@ class NonBlockingHttpIconLoaderTest {
var callbackIconRequest: IconRequest? = null
var callbackResource: IconRequest.Resource? = null
var callbackIcon: IconLoader.Result? = null
- val loader = NonBlockingHttpIconLoader(client, scope) { request, resource, icon ->
+ val loader = NonBlockingHttpIconLoader(client, FakeMemoryInfoProvider(defaultAvailMem), scope) { request, resource, icon ->
callbackIconRequest = request
callbackResource = resource
callbackIcon = icon
@@ -256,7 +261,7 @@ class NonBlockingHttpIconLoaderTest {
var callbackIconRequest: IconRequest? = null
var callbackResource: IconRequest.Resource? = null
var callbackIcon: IconLoader.Result? = null
- val loader = NonBlockingHttpIconLoader(client, scope) { request, resource, icon ->
+ val loader = NonBlockingHttpIconLoader(client, FakeMemoryInfoProvider(defaultAvailMem), scope) { request, resource, icon ->
callbackIconRequest = request
callbackResource = resource
callbackIcon = icon
@@ -292,7 +297,7 @@ class NonBlockingHttpIconLoaderTest {
fun `Loader will sanitize URL`() = runTestOnMain {
val client: Client = mock()
val captor = argumentCaptor<Request>()
- val loader = NonBlockingHttpIconLoader(client, scope) { _, _, _ -> }
+ val loader = NonBlockingHttpIconLoader(client, FakeMemoryInfoProvider(defaultAvailMem), scope) { _, _, _ -> }
doReturn(
Response(
url = "https://www.example.org",
diff --git a/mobile/android/android-components/components/browser/menu/src/main/java/mozilla/components/browser/menu/item/CustomTooltip.kt b/mobile/android/android-components/components/browser/menu/src/main/java/mozilla/components/browser/menu/item/CustomTooltip.kt
index 9e7ce8b674..6f83c1ffd9 100644
--- a/mobile/android/android-components/components/browser/menu/src/main/java/mozilla/components/browser/menu/item/CustomTooltip.kt
+++ b/mobile/android/android-components/components/browser/menu/src/main/java/mozilla/components/browser/menu/item/CustomTooltip.kt
@@ -14,7 +14,6 @@ import android.view.WindowManager
import android.widget.LinearLayout
import android.widget.PopupWindow
import android.widget.TextView
-import androidx.core.view.ViewCompat
import androidx.core.widget.PopupWindowCompat
import mozilla.components.browser.menu.R
@@ -34,7 +33,7 @@ internal class CustomTooltip private constructor(
}
override fun onLongClick(view: View): Boolean {
- if (ViewCompat.isAttachedToWindow(anchor)) {
+ if (anchor.isAttachedToWindow()) {
show()
anchor.addOnAttachStateChangeListener(this)
}
diff --git a/mobile/android/android-components/components/browser/menu/src/main/res/values-be/strings.xml b/mobile/android/android-components/components/browser/menu/src/main/res/values-be/strings.xml
index f3b3bb1755..9edc4724a9 100644
--- a/mobile/android/android-components/components/browser/menu/src/main/res/values-be/strings.xml
+++ b/mobile/android/android-components/components/browser/menu/src/main/res/values-be/strings.xml
@@ -10,6 +10,12 @@
<string name="mozac_browser_menu_extensions">Пашырэнні</string>
<!-- Label for add-ons sub menu item for add-ons manager -->
<string name="mozac_browser_menu_addons_manager" moz:removedIn="126" tools:ignore="UnusedResources">Менеджар дадаткаў</string>
+ <!-- Label for extensions sub menu item for extensions manager -->
+ <string name="mozac_browser_menu_extensions_manager">Менеджар пашырэнняў</string>
<!-- Content description for the action bar "up" button -->
<string name="action_bar_up_description">Перайсці ўверх</string>
- </resources>
+ <!-- Content description for the action bar "up" button of the add-ons sub menu item -->
+ <string name="mozac_browser_menu_addons_description" moz:removedIn="126" tools:ignore="UnusedResources">Дадаткі, перайсці ўніз</string>
+ <!-- Content description for the action bar "up" button of the extensions sub menu item -->
+ <string name="mozac_browser_menu_extensions_content_description">Пашырэнні, перайсці ўверх</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/menu/src/main/res/values-br/strings.xml b/mobile/android/android-components/components/browser/menu/src/main/res/values-br/strings.xml
index 548cbd7785..f8e14c773d 100644
--- a/mobile/android/android-components/components/browser/menu/src/main/res/values-br/strings.xml
+++ b/mobile/android/android-components/components/browser/menu/src/main/res/values-br/strings.xml
@@ -14,4 +14,8 @@
<string name="mozac_browser_menu_extensions_manager">Merañ an askouezhioù</string>
<!-- Content description for the action bar "up" button -->
<string name="action_bar_up_description">Adpignat</string>
- </resources>
+ <!-- Content description for the action bar "up" button of the add-ons sub menu item -->
+ <string name="mozac_browser_menu_addons_description" moz:removedIn="126" tools:ignore="UnusedResources">Enlugelladoù, pignat</string>
+ <!-- Content description for the action bar "up" button of the extensions sub menu item -->
+ <string name="mozac_browser_menu_extensions_content_description">Askouezhioù, pignat</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/menu/src/main/res/values-cak/strings.xml b/mobile/android/android-components/components/browser/menu/src/main/res/values-cak/strings.xml
index 7ccb1be616..7623a1f39f 100644
--- a/mobile/android/android-components/components/browser/menu/src/main/res/values-cak/strings.xml
+++ b/mobile/android/android-components/components/browser/menu/src/main/res/values-cak/strings.xml
@@ -5,11 +5,17 @@
<!-- Content description (not visible, for screen readers etc.): Indicates the overflow menu has a highlight -->
<string name="mozac_browser_menu_highlighted">Ya\'on ruq\'ij</string>
<!-- Label for add-ons submenu section -->
- <string name="mozac_browser_menu_addons">Taq tz\'aqat</string>
+ <string name="mozac_browser_menu_addons" moz:removedIn="126" tools:ignore="UnusedResources">Taq tz\'aqat</string>
+ <!-- Label for extensions submenu section -->
+ <string name="mozac_browser_menu_extensions">Taq k\'amal</string>
<!-- Label for add-ons sub menu item for add-ons manager -->
- <string name="mozac_browser_menu_addons_manager">Kinuk\'samajel taq Tz\'aqat</string>
+ <string name="mozac_browser_menu_addons_manager" moz:removedIn="126" tools:ignore="UnusedResources">Kinuk\'samajel taq Tz\'aqat</string>
+ <!-- Label for extensions sub menu item for extensions manager -->
+ <string name="mozac_browser_menu_extensions_manager">Runuk\'samajel taq K\'amal</string>
<!-- Content description for the action bar "up" button -->
<string name="action_bar_up_description">Tib\'an okem ajsik</string>
<!-- Content description for the action bar "up" button of the add-ons sub menu item -->
- <string name="mozac_browser_menu_addons_description">Taq tz\'aqat, tijote\' chi rokem</string>
- </resources>
+ <string name="mozac_browser_menu_addons_description" moz:removedIn="126" tools:ignore="UnusedResources">Taq tz\'aqat, tijote\' chi rokem</string>
+ <!-- Content description for the action bar "up" button of the extensions sub menu item -->
+ <string name="mozac_browser_menu_extensions_content_description">Taq k\'amal, tok q\'anij</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/menu/src/main/res/values-eo/strings.xml b/mobile/android/android-components/components/browser/menu/src/main/res/values-eo/strings.xml
index 63b30a2150..1ca46d5302 100644
--- a/mobile/android/android-components/components/browser/menu/src/main/res/values-eo/strings.xml
+++ b/mobile/android/android-components/components/browser/menu/src/main/res/values-eo/strings.xml
@@ -5,11 +5,17 @@
<!-- Content description (not visible, for screen readers etc.): Indicates the overflow menu has a highlight -->
<string name="mozac_browser_menu_highlighted">Elstarigitaj</string>
<!-- Label for add-ons submenu section -->
- <string name="mozac_browser_menu_addons">Aldonaĵoj</string>
+ <string name="mozac_browser_menu_addons" moz:removedIn="126" tools:ignore="UnusedResources">Aldonaĵoj</string>
+ <!-- Label for extensions submenu section -->
+ <string name="mozac_browser_menu_extensions">Etendaĵoj</string>
<!-- Label for add-ons sub menu item for add-ons manager -->
- <string name="mozac_browser_menu_addons_manager">Administrilo de aldonaĵoj</string>
+ <string name="mozac_browser_menu_addons_manager" moz:removedIn="126" tools:ignore="UnusedResources">Administrilo de aldonaĵoj</string>
+ <!-- Label for extensions sub menu item for extensions manager -->
+ <string name="mozac_browser_menu_extensions_manager">Administranto de etendaĵoj</string>
<!-- Content description for the action bar "up" button -->
<string name="action_bar_up_description">Iri supren</string>
<!-- Content description for the action bar "up" button of the add-ons sub menu item -->
- <string name="mozac_browser_menu_addons_description">Aldonaĵoj, supren</string>
- </resources>
+ <string name="mozac_browser_menu_addons_description" moz:removedIn="126" tools:ignore="UnusedResources">Aldonaĵoj, supren</string>
+ <!-- Content description for the action bar "up" button of the extensions sub menu item -->
+ <string name="mozac_browser_menu_extensions_content_description">Etendaĵoj, supren</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/menu/src/main/res/values-eu/strings.xml b/mobile/android/android-components/components/browser/menu/src/main/res/values-eu/strings.xml
index 53f1a556a3..b69e874c01 100644
--- a/mobile/android/android-components/components/browser/menu/src/main/res/values-eu/strings.xml
+++ b/mobile/android/android-components/components/browser/menu/src/main/res/values-eu/strings.xml
@@ -5,11 +5,17 @@
<!-- Content description (not visible, for screen readers etc.): Indicates the overflow menu has a highlight -->
<string name="mozac_browser_menu_highlighted">Nabarmendua</string>
<!-- Label for add-ons submenu section -->
- <string name="mozac_browser_menu_addons">Gehigarriak</string>
+ <string name="mozac_browser_menu_addons" moz:removedIn="126" tools:ignore="UnusedResources">Gehigarriak</string>
+ <!-- Label for extensions submenu section -->
+ <string name="mozac_browser_menu_extensions">Hedapenak</string>
<!-- Label for add-ons sub menu item for add-ons manager -->
- <string name="mozac_browser_menu_addons_manager">Gehigarrien kudeatzailea</string>
+ <string name="mozac_browser_menu_addons_manager" moz:removedIn="126" tools:ignore="UnusedResources">Gehigarrien kudeatzailea</string>
+ <!-- Label for extensions sub menu item for extensions manager -->
+ <string name="mozac_browser_menu_extensions_manager">Hedapenen kudeatzailea</string>
<!-- Content description for the action bar "up" button -->
<string name="action_bar_up_description">Nabigatu gora</string>
<!-- Content description for the action bar "up" button of the add-ons sub menu item -->
- <string name="mozac_browser_menu_addons_description">Gehigarriak, nabigatu gora</string>
- </resources>
+ <string name="mozac_browser_menu_addons_description" moz:removedIn="126" tools:ignore="UnusedResources">Gehigarriak, nabigatu gora</string>
+ <!-- Content description for the action bar "up" button of the extensions sub menu item -->
+ <string name="mozac_browser_menu_extensions_content_description">Hedapenak, nabigatu gora</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/menu/src/main/res/values-kab/strings.xml b/mobile/android/android-components/components/browser/menu/src/main/res/values-kab/strings.xml
index f36a1014b1..58d8809a2c 100644
--- a/mobile/android/android-components/components/browser/menu/src/main/res/values-kab/strings.xml
+++ b/mobile/android/android-components/components/browser/menu/src/main/res/values-kab/strings.xml
@@ -10,6 +10,12 @@
<string name="mozac_browser_menu_extensions">Isiɣzaf</string>
<!-- Label for add-ons sub menu item for add-ons manager -->
<string name="mozac_browser_menu_addons_manager" moz:removedIn="126" tools:ignore="UnusedResources">Amsefrak n izegrar</string>
+ <!-- Label for extensions sub menu item for extensions manager -->
+ <string name="mozac_browser_menu_extensions_manager">Amsefrak n yisiɣzaf</string>
<!-- Content description for the action bar "up" button -->
<string name="action_bar_up_description">Inig d asawen</string>
- </resources>
+ <!-- Content description for the action bar "up" button of the add-ons sub menu item -->
+ <string name="mozac_browser_menu_addons_description" moz:removedIn="126" tools:ignore="UnusedResources">Izegrar niḍen, ulin-d</string>
+ <!-- Content description for the action bar "up" button of the extensions sub menu item -->
+ <string name="mozac_browser_menu_extensions_content_description">Isiɣzaf niḍen, ulin-d</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/menu/src/main/res/values-sc/strings.xml b/mobile/android/android-components/components/browser/menu/src/main/res/values-sc/strings.xml
index 4fd82314b3..0a94a4fc21 100644
--- a/mobile/android/android-components/components/browser/menu/src/main/res/values-sc/strings.xml
+++ b/mobile/android/android-components/components/browser/menu/src/main/res/values-sc/strings.xml
@@ -5,9 +5,15 @@
<!-- Content description (not visible, for screen readers etc.): Indicates the overflow menu has a highlight -->
<string name="mozac_browser_menu_highlighted">In evidèntzia</string>
<!-- Label for add-ons submenu section -->
- <string name="mozac_browser_menu_addons">Cumplementos</string>
+ <string name="mozac_browser_menu_addons" moz:removedIn="126" tools:ignore="UnusedResources">Cumplementos</string>
+ <!-- Label for extensions submenu section -->
+ <string name="mozac_browser_menu_extensions">Estensiones</string>
<!-- Label for add-ons sub menu item for add-ons manager -->
- <string name="mozac_browser_menu_addons_manager">Gestore de cumplementos</string>
+ <string name="mozac_browser_menu_addons_manager" moz:removedIn="126" tools:ignore="UnusedResources">Gestore de cumplementos</string>
+ <!-- Label for extensions sub menu item for extensions manager -->
+ <string name="mozac_browser_menu_extensions_manager">Gestore de estensiones</string>
<!-- Content description for the action bar "up" button -->
<string name="action_bar_up_description">Nàviga in artu</string>
- </resources>
+ <!-- Content description for the action bar "up" button of the extensions sub menu item -->
+ <string name="mozac_browser_menu_extensions_content_description">Estensiones, torra a coa</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/menu2/src/test/java/mozilla/components/browser/menu2/ext/BrowserMenuPositioningTest.kt b/mobile/android/android-components/components/browser/menu2/src/test/java/mozilla/components/browser/menu2/ext/BrowserMenuPositioningTest.kt
index d9be746793..23c421bd7c 100644
--- a/mobile/android/android-components/components/browser/menu2/src/test/java/mozilla/components/browser/menu2/ext/BrowserMenuPositioningTest.kt
+++ b/mobile/android/android-components/components/browser/menu2/src/test/java/mozilla/components/browser/menu2/ext/BrowserMenuPositioningTest.kt
@@ -7,7 +7,6 @@ package mozilla.components.browser.menu2.ext
import android.graphics.Rect
import android.view.View
import android.widget.PopupWindow
-import androidx.core.view.ViewCompat
import androidx.recyclerview.widget.RecyclerView
import androidx.test.ext.junit.runners.AndroidJUnit4
import mozilla.components.browser.menu2.R
@@ -755,9 +754,9 @@ internal fun createAnchor(x: Int, y: Int, isRTL: Boolean = false): View {
}.`when`(view).getLocationInWindow(any())
if (isRTL) {
- doReturn(ViewCompat.LAYOUT_DIRECTION_RTL).`when`(view).layoutDirection
+ doReturn(View.LAYOUT_DIRECTION_RTL).`when`(view).layoutDirection
} else {
- doReturn(ViewCompat.LAYOUT_DIRECTION_LTR).`when`(view).layoutDirection
+ doReturn(View.LAYOUT_DIRECTION_LTR).`when`(view).layoutDirection
}
doReturn(10).`when`(view).height
doReturn(15).`when`(view).width
diff --git a/mobile/android/android-components/components/browser/session-storage/src/androidTest/assets/index.html b/mobile/android/android-components/components/browser/session-storage/src/androidTest/assets/index.html
index b511ab2f19..199b5f61d4 100644
--- a/mobile/android/android-components/components/browser/session-storage/src/androidTest/assets/index.html
+++ b/mobile/android/android-components/components/browser/session-storage/src/androidTest/assets/index.html
@@ -1,8 +1,8 @@
<html>
-<head>
+ <head>
<title>Restore Test</title>
-</head>
-<body>
+ </head>
+ <body>
<h1>Hello World</h1>
-</body>
+ </body>
</html>
diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/action/BrowserAction.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/action/BrowserAction.kt
index cd492b18e5..42ad594c8f 100644
--- a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/action/BrowserAction.kt
+++ b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/action/BrowserAction.kt
@@ -1048,6 +1048,30 @@ sealed class TranslationsAction : BrowserAction() {
) : TranslationsAction(), ActionWithTab
/**
+ * Sets the translations offer setting on the global store.
+ * The translations offer setting controls when to offer a translation on a page.
+ *
+ * See [SetPageSettingsAction] for setting the offer setting on the session store.
+ *
+ * @property offerTranslation The offer setting to set.
+ */
+ data class SetGlobalOfferTranslateSettingAction(
+ val offerTranslation: Boolean,
+ ) : TranslationsAction()
+
+ /**
+ * Updates the specified translation offer setting on the translation engine and ensures the final
+ * state on the global store remains in-sync.
+ *
+ * See [UpdatePageSettingAction] for updating the offer setting on the session store.
+ *
+ * @property offerTranslation The offer setting to set.
+ */
+ data class UpdateGlobalOfferTranslateSettingAction(
+ val offerTranslation: Boolean,
+ ) : TranslationsAction()
+
+ /**
* Sets the map of BCP 47 language codes (key) and the [LanguageSetting] option (value).
*
* @property languageSettings A map containing a key of BCP 47 language code and its
@@ -1058,26 +1082,36 @@ sealed class TranslationsAction : BrowserAction() {
) : TranslationsAction()
/**
+ * Updates the specified translation language setting on the translation engine and ensures the
+ * final state on the global store remains in-sync.
+ *
+ * See [UpdatePageSettingAction] for updating the language setting on the session store.
+ *
+ * @property languageCode The BCP-47 language code to update.
+ * @property setting The [LanguageSetting] for the language.
+ */
+ data class UpdateLanguageSettingsAction(
+ val languageCode: String,
+ val setting: LanguageSetting,
+ ) : TranslationsAction()
+
+ /**
* Sets the list of sites that the user has opted to never translate.
*
- * @property tabId The ID of the tab the [EngineSession] that requested the list.
* @property neverTranslateSites The never translate sites.
*/
data class SetNeverTranslateSitesAction(
- override val tabId: String,
val neverTranslateSites: List<String>,
- ) : TranslationsAction(), ActionWithTab
+ ) : TranslationsAction()
/**
* Remove from the list of sites the user has opted to never translate.
*
- * @property tabId The ID of the tab the [EngineSession] that requested the removal.
* @property origin A site origin URI that will have the specified never translate permission set.
*/
data class RemoveNeverTranslateSiteAction(
- override val tabId: String,
val origin: String,
- ) : TranslationsAction(), ActionWithTab
+ ) : TranslationsAction()
/**
* Sets the list of language machine learning translation models the translation engine has available.
@@ -1255,6 +1289,7 @@ sealed class EngineAction : BrowserAction() {
override val tabId: String,
val skipLoading: Boolean = false,
val followupAction: BrowserAction? = null,
+ val includeParent: Boolean = false,
) : EngineAction(), ActionWithTab
/**
@@ -1265,6 +1300,7 @@ sealed class EngineAction : BrowserAction() {
val url: String,
val flags: EngineSession.LoadUrlFlags = EngineSession.LoadUrlFlags.none(),
val additionalHeaders: Map<String, String>? = null,
+ val includeParent: Boolean = false,
) : EngineAction(), ActionWithTab
/**
@@ -1402,6 +1438,7 @@ sealed class EngineAction : BrowserAction() {
val engineSession: EngineSession,
val timestamp: Long = Clock.elapsedRealtime(),
val skipLoading: Boolean = false,
+ val includeParent: Boolean = false,
) : EngineAction(), ActionWithTab
/**
diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/CreateEngineSessionMiddleware.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/CreateEngineSessionMiddleware.kt
index 6f807eff16..e83fefb9e1 100644
--- a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/CreateEngineSessionMiddleware.kt
+++ b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/CreateEngineSessionMiddleware.kt
@@ -69,6 +69,7 @@ internal class CreateEngineSessionMiddleware(
logger,
store,
action.tabId,
+ action.includeParent,
)
action.followupAction?.let {
@@ -85,6 +86,7 @@ private fun getOrCreateEngineSession(
logger: Logger,
store: Store<BrowserState, BrowserAction>,
tabId: String,
+ includeParent: Boolean,
): EngineSession? {
val tab = store.state.findTabOrCustomTab(tabId)
if (tab == null) {
@@ -102,7 +104,7 @@ private fun getOrCreateEngineSession(
return it
}
- return createEngineSession(engine, logger, store, tab)
+ return createEngineSession(engine, logger, store, tab, includeParent)
}
@MainThread
@@ -111,6 +113,7 @@ private fun createEngineSession(
logger: Logger,
store: Store<BrowserState, BrowserAction>,
tab: SessionState,
+ includeParent: Boolean,
): EngineSession {
val engineSession = engine.createSession(tab.content.private, tab.contextId)
logger.debug("Created engine session for tab ${tab.id}")
@@ -127,6 +130,7 @@ private fun createEngineSession(
tab.id,
engineSession,
skipLoading = skipLoading,
+ includeParent = includeParent,
),
)
diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/EngineDelegateMiddleware.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/EngineDelegateMiddleware.kt
index 1b7744ff41..82298ef2ce 100644
--- a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/EngineDelegateMiddleware.kt
+++ b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/EngineDelegateMiddleware.kt
@@ -70,11 +70,11 @@ internal class EngineDelegateMiddleware(
// session is already pointing to. Creating an EngineSession will do exactly
// that in the linking step. So let's do that. Otherwise we would load the URL
// twice.
- store.dispatch(EngineAction.CreateEngineSessionAction(action.tabId))
+ store.dispatch(EngineAction.CreateEngineSessionAction(action.tabId, includeParent = action.includeParent))
return@launch
}
- val parentEngineSession = if (tab is TabSessionState) {
+ val parentEngineSession = if (action.includeParent && tab is TabSessionState) {
tab.parentId?.let { store.state.findTabOrCustomTab(it)?.engineState?.engineSession }
} else {
null
diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/LinkingMiddleware.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/LinkingMiddleware.kt
index c6f1d01d39..ba714b5e90 100644
--- a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/LinkingMiddleware.kt
+++ b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/LinkingMiddleware.kt
@@ -37,7 +37,13 @@ internal class LinkingMiddleware(
when (action) {
is TabListAction.AddTabAction -> {
if (action.tab.engineState.engineSession != null && action.tab.engineState.engineObserver == null) {
- engineObserver = link(context, action.tab.engineState.engineSession, action.tab)
+ engineObserver = link(
+ context,
+ action.tab.engineState.engineSession,
+ action.tab,
+ skipLoading = true,
+ includeParent = false,
+ )
}
}
is TabListAction.AddMultipleTabsAction -> {
@@ -58,7 +64,7 @@ internal class LinkingMiddleware(
when (action) {
is EngineAction.LinkEngineSessionAction -> {
context.state.findTabOrCustomTab(action.tabId)?.let { tab ->
- engineObserver = link(context, action.engineSession, tab, action.skipLoading)
+ engineObserver = link(context, action.engineSession, tab, action.skipLoading, action.includeParent)
}
}
else -> {
@@ -77,6 +83,7 @@ internal class LinkingMiddleware(
engineSession: EngineSession,
tab: SessionState,
skipLoading: Boolean = true,
+ includeParent: Boolean,
): Pair<String, EngineObserver> {
val observer = EngineObserver(tab.id, context.store)
engineSession.register(observer)
@@ -91,7 +98,7 @@ internal class LinkingMiddleware(
// tab, but opened by an extension e.g. via browser.tabs.update.
performLoadOnMainThread(engineSession, tab.content.url, loadFlags = tab.engineState.initialLoadFlags)
} else {
- val parentEngineSession = if (tab is TabSessionState) {
+ val parentEngineSession = if (includeParent && tab is TabSessionState) {
tab.parentId?.let { context.state.findTabOrCustomTab(it)?.engineState?.engineSession }
} else {
null
diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/TranslationsMiddleware.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/TranslationsMiddleware.kt
index 81e3b8b48b..3c8e645a97 100644
--- a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/TranslationsMiddleware.kt
+++ b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/TranslationsMiddleware.kt
@@ -79,6 +79,12 @@ class TranslationsMiddleware(
requestPageSettings(context, action.tabId)
}
}
+ TranslationOperation.FETCH_OFFER_SETTING -> {
+ scope.launch {
+ requestOfferSetting(context, action.tabId)
+ }
+ }
+
TranslationOperation.FETCH_AUTOMATIC_LANGUAGE_SETTINGS -> {
scope.launch {
requestLanguageSettings(context, action.tabId)
@@ -86,7 +92,7 @@ class TranslationsMiddleware(
}
TranslationOperation.FETCH_NEVER_TRANSLATE_SITES -> {
scope.launch {
- getNeverTranslateSites(context, action.tabId)
+ requestNeverTranslateSites(context, action.tabId)
}
}
TranslationOperation.TRANSLATE,
@@ -108,7 +114,7 @@ class TranslationsMiddleware(
is TranslationsAction.RemoveNeverTranslateSiteAction -> {
scope.launch {
- removeNeverTranslateSite(context, action.tabId, action.origin)
+ removeNeverTranslateSite(context, action.origin)
}
}
@@ -151,6 +157,25 @@ class TranslationsMiddleware(
}
}
}
+
+ is TranslationsAction.UpdateGlobalOfferTranslateSettingAction -> {
+ scope.launch {
+ updateAlwaysOfferPopupPageSetting(
+ setting = action.offerTranslation,
+ )
+ }
+ }
+
+ is TranslationsAction.UpdateLanguageSettingsAction -> {
+ scope.launch {
+ updateLanguageSetting(
+ context = context,
+ languageCode = action.languageCode,
+ setting = action.setting,
+ )
+ }
+ }
+
else -> {
// no-op
}
@@ -168,6 +193,8 @@ class TranslationsMiddleware(
* Language Support - [requestSupportedLanguages]
* Language Models - [requestLanguageModels]
* Language Settings - [requestLanguageSettings]
+ * Never Translate Sites List - [requestNeverTranslateSites]
+ * Offer Setting - [requestOfferSetting]
*
* @param context Context to use to dispatch to the store.
*/
@@ -177,6 +204,8 @@ class TranslationsMiddleware(
requestSupportedLanguages(context)
requestLanguageModels(context)
requestLanguageSettings(context)
+ requestNeverTranslateSites(context)
+ requestOfferSetting(context)
}
/**
@@ -336,22 +365,22 @@ class TranslationsMiddleware(
}
/**
- * Retrieves the list of never translate sites using [scope] and dispatches the result to the
- * store via [TranslationsAction.SetNeverTranslateSitesAction] or else dispatches the failure
- * [TranslationsAction.TranslateExceptionAction].
+ * Retrieves the list of never translate sites and dispatches the result to the
+ * store via [TranslationsAction.SetNeverTranslateSitesAction] or else
+ * dispatches the failure via [TranslationsAction.EngineExceptionAction] and
+ * when a [tabId] is provided, [TranslationsAction.TranslateExceptionAction].
*
* @param context Context to use to dispatch to the store.
* @param tabId Tab ID associated with the request.
*/
- private fun getNeverTranslateSites(
+ private fun requestNeverTranslateSites(
context: MiddlewareContext<BrowserState, BrowserAction>,
- tabId: String,
+ tabId: String? = null,
) {
engine.getNeverTranslateSiteList(
onSuccess = {
context.store.dispatch(
TranslationsAction.SetNeverTranslateSitesAction(
- tabId = tabId,
neverTranslateSites = it,
),
)
@@ -360,12 +389,19 @@ class TranslationsMiddleware(
onError = {
context.store.dispatch(
- TranslationsAction.TranslateExceptionAction(
- tabId = tabId,
- operation = TranslationOperation.FETCH_NEVER_TRANSLATE_SITES,
- translationError = TranslationError.CouldNotLoadNeverTranslateSites(it),
+ TranslationsAction.EngineExceptionAction(
+ error = TranslationError.CouldNotLoadNeverTranslateSites(it),
),
)
+ if (tabId != null) {
+ context.store.dispatch(
+ TranslationsAction.TranslateExceptionAction(
+ tabId = tabId,
+ operation = TranslationOperation.FETCH_NEVER_TRANSLATE_SITES,
+ translationError = TranslationError.CouldNotLoadNeverTranslateSites(it),
+ ),
+ )
+ }
logger.error("Error requesting never translate sites: ", it)
},
)
@@ -377,38 +413,23 @@ class TranslationsMiddleware(
* [TranslationsAction.TranslateExceptionAction].
*
* @param context Context to use to dispatch to the store.
- * @param tabId Tab ID associated with the request.
* @param origin A site origin URI that will have the specified never translate permission set.
*/
private fun removeNeverTranslateSite(
context: MiddlewareContext<BrowserState, BrowserAction>,
- tabId: String,
origin: String,
) {
engine.setNeverTranslateSpecifiedSite(
origin = origin,
setting = false,
onSuccess = {
- logger.info("Success requesting never translate sites.")
-
- // Fetch page settings to ensure the state matches the engine.
- context.store.dispatch(
- TranslationsAction.OperationRequestedAction(
- tabId = tabId,
- operation = TranslationOperation.FETCH_PAGE_SETTINGS,
- ),
- )
+ logger.info("Success changing never translate sites.")
},
onError = {
logger.error("Error removing site from never translate list: ", it)
-
- // Fetch never translate sites to ensure the state matches the engine.
- context.store.dispatch(
- TranslationsAction.OperationRequestedAction(
- tabId = tabId,
- operation = TranslationOperation.FETCH_NEVER_TRANSLATE_SITES,
- ),
- )
+ // Fetch never translate sites to ensure the state matches the engine, because it
+ // was proactively removed in the reducer.
+ requestNeverTranslateSites(context)
},
)
}
@@ -472,6 +493,38 @@ class TranslationsMiddleware(
}
/**
+ * Retrieves the setting to always offer to translate and dispatches the result to the
+ * store via [TranslationsAction.SetGlobalOfferTranslateSettingAction]. Will additionally
+ * dispatch a request to update page settings, when a [tabId] is provided.
+ *
+ * @param context Context to use to dispatch to the store.
+ * @param tabId Tab ID associated with the request.
+ */
+ private fun requestOfferSetting(
+ context: MiddlewareContext<BrowserState, BrowserAction>,
+ tabId: String? = null,
+ ) {
+ logger.info("Requesting offer setting.")
+ val alwaysOfferPopup: Boolean = engine.getTranslationsOfferPopup()
+
+ context.store.dispatch(
+ TranslationsAction.SetGlobalOfferTranslateSettingAction(
+ offerTranslation = alwaysOfferPopup,
+ ),
+ )
+
+ if (tabId != null) {
+ // Fetch page settings to ensure the state matches the engine.
+ context.store.dispatch(
+ TranslationsAction.OperationRequestedAction(
+ tabId = tabId,
+ operation = TranslationOperation.FETCH_PAGE_SETTINGS,
+ ),
+ )
+ }
+ }
+
+ /**
* Fetches the always or never language setting synchronously from the engine. Will
* return null if an error occurs.
*
@@ -708,8 +761,8 @@ class TranslationsMiddleware(
/**
* Updates the language settings with the [Engine].
*
- * If an error occurs, then the method will request the page settings be re-fetched and set on
- * the browser store.
+ * If an error occurs, and a [tabId] is known then the method will request the page settings be
+ * re-fetched and set on the browser store.
*
* @param context The context used to request the page settings.
* @param tabId Tab ID associated with the request.
@@ -718,7 +771,7 @@ class TranslationsMiddleware(
*/
private fun updateLanguageSetting(
context: MiddlewareContext<BrowserState, BrowserAction>,
- tabId: String,
+ tabId: String? = null,
languageCode: String,
setting: LanguageSetting,
) {
@@ -729,26 +782,37 @@ class TranslationsMiddleware(
languageSetting = setting,
onSuccess = {
- // Ensure the session's page settings remain in sync with this update.
- context.store.dispatch(
- TranslationsAction.OperationRequestedAction(
- tabId = tabId,
- operation = TranslationOperation.FETCH_AUTOMATIC_LANGUAGE_SETTINGS,
- ),
- )
+ // Value was proactively updated in [TranslationsStateReducer] for
+ // [TranslationsBrowserState.languageSettings]
+
+ if (tabId != null) {
+ // Ensure the session's page settings remain in sync with this update.
+ context.store.dispatch(
+ TranslationsAction.OperationRequestedAction(
+ tabId = tabId,
+ operation = TranslationOperation.FETCH_AUTOMATIC_LANGUAGE_SETTINGS,
+ ),
+ )
+ }
+
logger.info("Successfully updated the language preference.")
},
onError = {
logger.error("Could not update the language preference.", it)
+ // The browser store [TranslationsBrowserState.languageSettings] is out of sync,
+ // re-request to sync the state.
+ requestLanguageSettings(context, tabId)
- // Fetch page settings to ensure the state matches the engine.
- context.store.dispatch(
- TranslationsAction.OperationRequestedAction(
- tabId = tabId,
- operation = TranslationOperation.FETCH_PAGE_SETTINGS,
- ),
- )
+ if (tabId != null) {
+ // Fetch page settings to ensure the state matches the engine.
+ context.store.dispatch(
+ TranslationsAction.OperationRequestedAction(
+ tabId = tabId,
+ operation = TranslationOperation.FETCH_PAGE_SETTINGS,
+ ),
+ )
+ }
},
)
}
diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/ext/TabSessionState.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/ext/TabSessionState.kt
new file mode 100644
index 0000000000..b0f1c2e9e9
--- /dev/null
+++ b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/ext/TabSessionState.kt
@@ -0,0 +1,18 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.state.ext
+
+import mozilla.components.browser.state.state.TabSessionState
+
+/**
+ * Returns the URL of the [TabSessionState].
+ */
+fun TabSessionState.getUrl(): String? {
+ return if (this.readerState.active) {
+ this.readerState.activeUrl
+ } else {
+ this.content.url
+ }
+}
diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/reducer/TranslationsStateReducer.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/reducer/TranslationsStateReducer.kt
index 266964455e..89c7ee3ed4 100644
--- a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/reducer/TranslationsStateReducer.kt
+++ b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/reducer/TranslationsStateReducer.kt
@@ -62,11 +62,8 @@ internal object TranslationsStateReducer {
}
// Checking for if the translations engine is in the fully translated state or not based
- // on the values of the translation pair.
- if (action.translationEngineState.requestedTranslationPair == null ||
- action.translationEngineState.requestedTranslationPair?.fromLanguage == null ||
- action.translationEngineState.requestedTranslationPair?.toLanguage == null
- ) {
+ // on if a visual change has occurred on the browser.
+ if (action.translationEngineState.hasVisibleChange != true) {
// In an untranslated state
var translationsError: TranslationError? = null
if (action.translationEngineState.detectedLanguages?.supportedDocumentLang == false) {
@@ -111,9 +108,9 @@ internal object TranslationsStateReducer {
is TranslationsAction.TranslateSuccessAction -> {
when (action.operation) {
TranslationOperation.TRANSLATE -> {
+ // The isTranslated state will be identified on a translation state change.
state.copyWithTranslationsState(action.tabId) {
it.copy(
- isTranslated = true,
isTranslateProcessing = false,
translationError = null,
)
@@ -163,6 +160,17 @@ internal object TranslationsStateReducer {
}
}
+ TranslationOperation.FETCH_OFFER_SETTING -> {
+ // Reset the error state, and then generally expect
+ // [TranslationsAction.SetGlobalOfferTranslateSettingAction] to update state in the
+ // success case.
+ state.copyWithTranslationsState(action.tabId) {
+ it.copy(
+ settingsError = null,
+ )
+ }
+ }
+
TranslationOperation.FETCH_AUTOMATIC_LANGUAGE_SETTINGS -> {
state.copy(
translationEngine = state.translationEngine.copy(
@@ -175,11 +183,11 @@ internal object TranslationsStateReducer {
// Reset the error state, and then generally expect
// [TranslationsAction.SetNeverTranslateSitesAction] to update
// state in the success case.
- state.copyWithTranslationsState(action.tabId) {
- it.copy(
+ state.copy(
+ translationEngine = state.translationEngine.copy(
neverTranslateSites = null,
- )
- }
+ ),
+ )
}
}
}
@@ -229,6 +237,14 @@ internal object TranslationsStateReducer {
}
}
+ TranslationOperation.FETCH_OFFER_SETTING -> {
+ state.copyWithTranslationsState(action.tabId) {
+ it.copy(
+ translationError = action.translationError,
+ )
+ }
+ }
+
TranslationOperation.FETCH_AUTOMATIC_LANGUAGE_SETTINGS -> {
state.copyWithTranslationsState(action.tabId) {
it.copy(
@@ -240,7 +256,6 @@ internal object TranslationsStateReducer {
TranslationOperation.FETCH_NEVER_TRANSLATE_SITES -> {
state.copyWithTranslationsState(action.tabId) {
it.copy(
- neverTranslateSites = null,
settingsError = action.translationError,
)
}
@@ -277,20 +292,20 @@ internal object TranslationsStateReducer {
}
is TranslationsAction.SetNeverTranslateSitesAction ->
- state.copyWithTranslationsState(action.tabId) {
- it.copy(
+ state.copy(
+ translationEngine = state.translationEngine.copy(
neverTranslateSites = action.neverTranslateSites,
- )
- }
+ ),
+ )
is TranslationsAction.RemoveNeverTranslateSiteAction -> {
- val neverTranslateSites = state.findTab(action.tabId)?.translationsState?.neverTranslateSites
+ val neverTranslateSites = state.translationEngine.neverTranslateSites
val updatedNeverTranslateSites = neverTranslateSites?.filter { it != action.origin }?.toList()
- state.copyWithTranslationsState(action.tabId) {
- it.copy(
+ state.copy(
+ translationEngine = state.translationEngine.copy(
neverTranslateSites = updatedNeverTranslateSites,
- )
- }
+ ),
+ )
}
is TranslationsAction.OperationRequestedAction ->
@@ -326,12 +341,20 @@ internal object TranslationsStateReducer {
}
}
+ TranslationOperation.FETCH_OFFER_SETTING -> {
+ state.copy(
+ translationEngine = state.translationEngine.copy(
+ offerTranslation = null,
+ ),
+ )
+ }
+
TranslationOperation.FETCH_NEVER_TRANSLATE_SITES -> {
- state.copyWithTranslationsState(action.tabId) {
- it.copy(
+ state.copy(
+ translationEngine = state.translationEngine.copy(
neverTranslateSites = null,
- )
- }
+ ),
+ )
}
TranslationOperation.TRANSLATE, TranslationOperation.RESTORE -> {
// No state change for these operations
@@ -400,6 +423,35 @@ internal object TranslationsStateReducer {
}
}
+ is TranslationsAction.UpdateLanguageSettingsAction -> {
+ val languageSettings = state.translationEngine.languageSettings?.toMutableMap()
+ // Only set when keys are present.
+ if (languageSettings?.get(action.languageCode) != null) {
+ languageSettings[action.languageCode] = action.setting
+ }
+ state.copy(
+ translationEngine = state.translationEngine.copy(
+ languageSettings = languageSettings,
+ ),
+ )
+ }
+
+ is TranslationsAction.SetGlobalOfferTranslateSettingAction -> {
+ state.copy(
+ translationEngine = state.translationEngine.copy(
+ offerTranslation = action.offerTranslation,
+ ),
+ )
+ }
+
+ is TranslationsAction.UpdateGlobalOfferTranslateSettingAction -> {
+ state.copy(
+ translationEngine = state.translationEngine.copy(
+ offerTranslation = action.offerTranslation,
+ ),
+ )
+ }
+
is TranslationsAction.SetEngineSupportedAction -> {
state.copy(
translationEngine = state.translationEngine.copy(
diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/state/TranslationsBrowserState.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/state/TranslationsBrowserState.kt
index 2fb937f9f3..c34e1bc062 100644
--- a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/state/TranslationsBrowserState.kt
+++ b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/state/TranslationsBrowserState.kt
@@ -13,17 +13,21 @@ import mozilla.components.concept.engine.translate.TranslationSupport
* Value type that represents the state of the translations engine within a [BrowserState].
*
* @property isEngineSupported Whether the translations engine supports the device architecture.
+ * @property offerTranslation Whether to offer translations or not to the user.
* @property supportedLanguages Set of languages the translation engine supports.
* @property languageModels Set of language machine learning translation models the translation engine has available.
* @property languageSettings A map containing a key of BCP 47 language code and its
* [LanguageSetting] to represent the automatic language settings.
+ * @property neverTranslateSites List of sites the user has opted to never translate.
* @property engineError Holds the error state of the translations engine.
* See [TranslationsState.translationError] for session level errors.
*/
data class TranslationsBrowserState(
val isEngineSupported: Boolean? = null,
+ val offerTranslation: Boolean? = null,
val supportedLanguages: TranslationSupport? = null,
val languageModels: List<LanguageModel>? = null,
val languageSettings: Map<String, LanguageSetting>? = null,
+ val neverTranslateSites: List<String>? = null,
val engineError: TranslationError? = null,
)
diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/state/TranslationsState.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/state/TranslationsState.kt
index 8c05340928..d70d6e1492 100644
--- a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/state/TranslationsState.kt
+++ b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/state/TranslationsState.kt
@@ -23,7 +23,6 @@ import mozilla.components.concept.engine.translate.TranslationPageSettings
* translation engine requires the pair's ML models to be present on the device to complete a
* translation.
* @property pageSettings The translation engine settings that relate to the current page.
- * @property neverTranslateSites List of sites the user has opted to never translate.
* @property translationError Type of error that occurred when acquiring resources, translating, or
* restoring a translation.
* @property settingsError Type of error that occurred when acquiring resources or setting preferences.
@@ -37,7 +36,6 @@ data class TranslationsState(
val isRestoreProcessing: Boolean = false,
val translationDownloadSize: TranslationDownloadSize? = null,
val pageSettings: TranslationPageSettings? = null,
- val neverTranslateSites: List<String>? = null,
val translationError: TranslationError? = null,
val settingsError: TranslationError? = null,
)
diff --git a/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/action/TranslationsActionTest.kt b/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/action/TranslationsActionTest.kt
index 2a12cda264..ecbbae9c61 100644
--- a/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/action/TranslationsActionTest.kt
+++ b/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/action/TranslationsActionTest.kt
@@ -95,6 +95,7 @@ class TranslationsActionTest {
error = null,
isEngineReady = true,
requestedTranslationPair = TranslationPair(fromLanguage = "es", toLanguage = "en"),
+ hasVisibleChange = true,
)
store.dispatch(TranslationsAction.TranslateStateChangeAction(tabId = tab.id, translationEngineState = translatedEngineState))
@@ -110,6 +111,7 @@ class TranslationsActionTest {
error = null,
isEngineReady = true,
requestedTranslationPair = TranslationPair(fromLanguage = null, toLanguage = null),
+ hasVisibleChange = false,
)
store.dispatch(TranslationsAction.TranslateStateChangeAction(tabId = tab.id, nonTranslatedEngineState))
@@ -264,7 +266,6 @@ class TranslationsActionTest {
store.dispatch(TranslationsAction.TranslateSuccessAction(tabId = tab.id, operation = TranslationOperation.TRANSLATE))
.joinBlocking()
assertEquals(false, tabState().translationsState.isTranslateProcessing)
- assertEquals(true, tabState().translationsState.isTranslated)
assertEquals(null, tabState().translationsState.translationError)
}
@@ -347,44 +348,41 @@ class TranslationsActionTest {
@Test
fun `WHEN a SetNeverTranslateSitesAction is dispatched AND successful THEN update neverTranslateSites`() {
// Initial
- assertEquals(null, tabState().translationsState.neverTranslateSites)
+ assertNull(store.state.translationEngine.neverTranslateSites)
// Action started
val neverTranslateSites = listOf("google.com")
store.dispatch(
TranslationsAction.SetNeverTranslateSitesAction(
- tabId = tab.id,
neverTranslateSites = neverTranslateSites,
),
).joinBlocking()
// Action success
- assertEquals(neverTranslateSites, tabState().translationsState.neverTranslateSites)
+ assertEquals(neverTranslateSites, store.state.translationEngine.neverTranslateSites)
}
@Test
fun `WHEN a RemoveNeverTranslateSiteAction is dispatched AND successful THEN update neverTranslateSites`() {
// Initial add to neverTranslateSites
- assertEquals(null, tabState().translationsState.neverTranslateSites)
+ assertNull(store.state.translationEngine.neverTranslateSites)
val neverTranslateSites = listOf("google.com")
store.dispatch(
TranslationsAction.SetNeverTranslateSitesAction(
- tabId = tab.id,
neverTranslateSites = neverTranslateSites,
),
).joinBlocking()
- assertEquals(neverTranslateSites, tabState().translationsState.neverTranslateSites)
+ assertEquals(neverTranslateSites, store.state.translationEngine.neverTranslateSites)
// Action started
store.dispatch(
TranslationsAction.RemoveNeverTranslateSiteAction(
- tabId = tab.id,
origin = "google.com",
),
).joinBlocking()
// Action success
- assertEquals(listOf<String>(), tabState().translationsState.neverTranslateSites)
+ assertEquals(listOf<String>(), store.state.translationEngine.neverTranslateSites)
}
@Test
@@ -451,7 +449,6 @@ class TranslationsActionTest {
),
).joinBlocking()
assertEquals(null, tabState().translationsState.translationError)
- assertEquals(true, tabState().translationsState.isTranslated)
assertEquals(false, tabState().translationsState.isTranslateProcessing)
// RESTORE usage
@@ -900,4 +897,88 @@ class TranslationsActionTest {
// Final state
assertEquals(languageModels, store.state.translationEngine.languageModels)
}
+
+ @Test
+ fun `WHEN SetOfferTranslateSettingAction is called then set offerToTranslate`() {
+ // Initial State
+ assertNull(store.state.translationEngine.offerTranslation)
+
+ // Action started
+ store.dispatch(
+ TranslationsAction.SetGlobalOfferTranslateSettingAction(
+ offerTranslation = false,
+ ),
+ ).joinBlocking()
+
+ // Action success
+ assertFalse(store.state.translationEngine.offerTranslation!!)
+ }
+
+ @Test
+ fun `WHEN UpdateOfferTranslateSettingAction is called then set offerToTranslate`() {
+ // Initial State
+ assertNull(store.state.translationEngine.offerTranslation)
+
+ // Action started
+ store.dispatch(
+ TranslationsAction.UpdateGlobalOfferTranslateSettingAction(
+ offerTranslation = false,
+ ),
+ ).joinBlocking()
+
+ // Action success
+ assertFalse(store.state.translationEngine.offerTranslation!!)
+ }
+
+ @Test
+ fun `WHEN UpdateGlobalLanguageSettingAction is called then update languageSettings`() {
+ // Initial State
+ assertNull(store.state.translationEngine.languageSettings)
+
+ // No-op null test
+ store.dispatch(
+ TranslationsAction.UpdateLanguageSettingsAction(
+ languageCode = "fr",
+ setting = LanguageSetting.ALWAYS,
+ ),
+ ).joinBlocking()
+
+ assertNull(store.state.translationEngine.languageSettings)
+
+ // Setting Initial State
+ val languageSettings = mapOf<String, LanguageSetting>(
+ "en" to LanguageSetting.OFFER,
+ "es" to LanguageSetting.NEVER,
+ "de" to LanguageSetting.ALWAYS,
+ )
+
+ store.dispatch(
+ TranslationsAction.SetLanguageSettingsAction(
+ languageSettings = languageSettings,
+ ),
+ ).joinBlocking()
+
+ assertEquals(languageSettings, store.state.translationEngine.languageSettings)
+
+ // No-op update test
+ store.dispatch(
+ TranslationsAction.UpdateLanguageSettingsAction(
+ languageCode = "fr",
+ setting = LanguageSetting.ALWAYS,
+ ),
+ ).joinBlocking()
+
+ assertEquals(languageSettings, store.state.translationEngine.languageSettings)
+
+ // Main action started
+ store.dispatch(
+ TranslationsAction.UpdateLanguageSettingsAction(
+ languageCode = "es",
+ setting = LanguageSetting.ALWAYS,
+ ),
+ ).joinBlocking()
+
+ // Action success
+ assertEquals(LanguageSetting.ALWAYS, store.state.translationEngine.languageSettings!!["es"])
+ }
}
diff --git a/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/EngineDelegateMiddlewareTest.kt b/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/EngineDelegateMiddlewareTest.kt
index 5eaeb328ee..13365b57a7 100644
--- a/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/EngineDelegateMiddlewareTest.kt
+++ b/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/EngineDelegateMiddlewareTest.kt
@@ -263,6 +263,7 @@ class EngineDelegateMiddlewareTest {
EngineAction.LoadUrlAction(
"test-tab",
"https://www.firefox.com",
+ includeParent = true,
),
).joinBlocking()
diff --git a/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/LinkingMiddlewareTest.kt b/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/LinkingMiddlewareTest.kt
index 89939b71a2..c24f838c02 100644
--- a/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/LinkingMiddlewareTest.kt
+++ b/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/LinkingMiddlewareTest.kt
@@ -96,7 +96,9 @@ class LinkingMiddlewareTest {
store.dispatch(EngineAction.LinkEngineSessionAction(parent.id, parentEngineSession)).joinBlocking()
val childEngineSession: EngineSession = mock()
- store.dispatch(EngineAction.LinkEngineSessionAction(child.id, childEngineSession)).joinBlocking()
+ store.dispatch(
+ EngineAction.LinkEngineSessionAction(child.id, childEngineSession, includeParent = true),
+ ).joinBlocking()
dispatcher.scheduler.advanceUntilIdle()
diff --git a/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/TranslationsMiddlewareTest.kt b/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/TranslationsMiddlewareTest.kt
index cf30f7060e..dadc88de52 100644
--- a/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/TranslationsMiddlewareTest.kt
+++ b/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/TranslationsMiddlewareTest.kt
@@ -327,6 +327,35 @@ class TranslationsMiddlewareTest {
}
@Test
+ fun `WHEN InitTranslationsBrowserState is dispatched AND the engine is supported THEN SetNeverTranslateSitesAction is also dispatched`() = runTest {
+ // Send Action
+ translationsMiddleware.invoke(context = context, next = {}, action = TranslationsAction.InitTranslationsBrowserState)
+
+ // Set the engine to support
+ val engineSupportedCallback = argumentCaptor<((Boolean) -> Unit)>()
+ // At least once, since InitAction also will trigger this
+ verify(engine, atLeastOnce()).isTranslationsEngineSupported(
+ onSuccess = engineSupportedCallback.capture(),
+ onError = any(),
+ )
+ engineSupportedCallback.value.invoke(true)
+
+ val neverTranslateSitesCallBack = argumentCaptor<((List<String>) -> Unit)>()
+ verify(engine, atLeastOnce()).getNeverTranslateSiteList(onSuccess = neverTranslateSitesCallBack.capture(), onError = any())
+ val mockNeverTranslate = listOf("www.mozilla.org")
+ neverTranslateSitesCallBack.value.invoke(mockNeverTranslate)
+
+ waitForIdle()
+
+ // Verifying at least once
+ verify(store, atLeastOnce()).dispatch(
+ TranslationsAction.SetNeverTranslateSitesAction(
+ neverTranslateSites = mockNeverTranslate,
+ ),
+ )
+ }
+
+ @Test
fun `WHEN InitTranslationsBrowserState is dispatched AND has an issue with the engine THEN EngineExceptionAction is dispatched`() = runTest() {
// Send Action
// Note: Implicitly called once due to connection with InitAction
@@ -726,7 +755,6 @@ class TranslationsMiddlewareTest {
verify(context.store).dispatch(
TranslationsAction.SetNeverTranslateSitesAction(
- tabId = tab.id,
neverTranslateSites = neverTranslateSites,
),
)
@@ -825,7 +853,7 @@ class TranslationsMiddlewareTest {
}
@Test
- fun `WHEN RemoveNeverTranslateSiteAction is dispatched AND removing is unsuccessful THEN FETCH_NEVER_TRANSLATE_SITES is dispatched`() = runTest {
+ fun `WHEN RemoveNeverTranslateSiteAction is dispatched AND removing is unsuccessful THEN SetNeverTranslateSitesAction is dispatched`() = runTest {
val errorCallback = argumentCaptor<((Throwable) -> Unit)>()
whenever(
engine.setNeverTranslateSpecifiedSite(
@@ -838,45 +866,20 @@ class TranslationsMiddlewareTest {
val action =
TranslationsAction.RemoveNeverTranslateSiteAction(
- tabId = tab.id,
origin = "google.com",
)
translationsMiddleware.invoke(context, {}, action)
waitForIdle()
- // Verify Dispatch
- verify(store).dispatch(
- TranslationsAction.OperationRequestedAction(
- tabId = tab.id,
- operation = TranslationOperation.FETCH_NEVER_TRANSLATE_SITES,
- ),
- )
- waitForIdle()
- }
-
- @Test
- fun `WHEN RemoveNeverTranslateSiteAction is dispatched AND removing is successful THEN FETCH_PAGE_SETTINGS is dispatched`() = runTest {
- val sitesCallback = argumentCaptor<(() -> Unit)>()
- val action =
- TranslationsAction.RemoveNeverTranslateSiteAction(
- tabId = tab.id,
- origin = "google.com",
- )
- translationsMiddleware.invoke(context, {}, action)
- verify(engine).setNeverTranslateSpecifiedSite(
- origin = any(),
- setting = anyBoolean(),
- onSuccess = sitesCallback.capture(),
- onError = any(),
- )
- sitesCallback.value.invoke()
- waitForIdle()
+ val neverTranslateSitesCallBack = argumentCaptor<((List<String>) -> Unit)>()
+ verify(engine, atLeastOnce()).getNeverTranslateSiteList(onSuccess = neverTranslateSitesCallBack.capture(), onError = any())
+ val mockNeverTranslate = listOf("www.mozilla.org")
+ neverTranslateSitesCallBack.value.invoke(mockNeverTranslate)
// Verify Dispatch
verify(store).dispatch(
- TranslationsAction.OperationRequestedAction(
- tabId = tab.id,
- operation = TranslationOperation.FETCH_PAGE_SETTINGS,
+ TranslationsAction.SetNeverTranslateSitesAction(
+ neverTranslateSites = mockNeverTranslate,
),
)
waitForIdle()
@@ -942,4 +945,116 @@ class TranslationsMiddlewareTest {
waitForIdle()
}
+
+ @Test
+ fun `WHEN InitTranslationsBrowserState is dispatched AND the engine is supported THEN SetOfferTranslateSettingAction is also dispatched`() = runTest {
+ // Send Action
+ translationsMiddleware.invoke(context = context, next = {}, action = TranslationsAction.InitTranslationsBrowserState)
+
+ // Set the engine to support
+ val engineSupportedCallback = argumentCaptor<((Boolean) -> Unit)>()
+ // At least once, since InitAction also will trigger this
+ verify(engine, atLeastOnce()).isTranslationsEngineSupported(
+ onSuccess = engineSupportedCallback.capture(),
+ onError = any(),
+ )
+ engineSupportedCallback.value.invoke(true)
+
+ // Verify results for offer
+ verify(engine, atLeastOnce()).getTranslationsOfferPopup()
+ waitForIdle()
+
+ // Verifying at least once
+ verify(store, atLeastOnce()).dispatch(
+ TranslationsAction.SetGlobalOfferTranslateSettingAction(
+ offerTranslation = false,
+ ),
+ )
+
+ waitForIdle()
+ }
+
+ @Test
+ fun `WHEN FETCH_OFFER_SETTING is dispatched with a tab id THEN SetOfferTranslateSettingAction and SetPageSettingsAction are also dispatched`() = runTest {
+ // Set the mock offer value
+ whenever(
+ engine.getTranslationsOfferPopup(),
+ ).thenAnswer { true }
+
+ // Send Action
+ val action =
+ TranslationsAction.OperationRequestedAction(
+ tabId = tab.id,
+ operation = TranslationOperation.FETCH_OFFER_SETTING,
+ )
+ translationsMiddleware.invoke(context, {}, action)
+ waitForIdle()
+
+ // Verify Dispatch
+ verify(store, atLeastOnce()).dispatch(
+ TranslationsAction.SetGlobalOfferTranslateSettingAction(
+ offerTranslation = true,
+ ),
+ )
+
+ // Since we had a tabId, this call will also happen
+ verify(store, atLeastOnce()).dispatch(
+ TranslationsAction.SetPageSettingsAction(
+ tabId = tab.id,
+ pageSettings = any(),
+ ),
+ )
+
+ waitForIdle()
+ }
+
+ @Test
+ fun `WHEN UpdateOfferTranslateSettingAction is called then setTranslationsOfferPopup is called on the engine`() = runTest {
+ // Send Action
+ val action =
+ TranslationsAction.UpdateGlobalOfferTranslateSettingAction(
+ offerTranslation = true,
+ )
+ translationsMiddleware.invoke(context, {}, action)
+ waitForIdle()
+
+ // Verify offer was set
+ verify(engine, atLeastOnce()).setTranslationsOfferPopup(offer = true)
+ waitForIdle()
+ }
+
+ @Test
+ fun `WHEN UpdateLanguageSettingsAction is dispatched and fails THEN SetLanguageSettingsAction is dispatched`() = runTest {
+ // Send Action
+ val action =
+ TranslationsAction.UpdateLanguageSettingsAction(
+ languageCode = "es",
+ setting = LanguageSetting.ALWAYS,
+ )
+ translationsMiddleware.invoke(context, {}, action)
+
+ waitForIdle()
+
+ // Mock engine error
+ val updateLanguagesErrorCallback = argumentCaptor<((Throwable) -> Unit)>()
+ verify(engine).setLanguageSetting(
+ languageCode = any(),
+ languageSetting = any(),
+ onSuccess = any(),
+ onError = updateLanguagesErrorCallback.capture(),
+ )
+ updateLanguagesErrorCallback.value.invoke(Throwable())
+
+ waitForIdle()
+
+ // Verify Dispatch
+ val languageSettingsCallback = argumentCaptor<((Map<String, LanguageSetting>) -> Unit)>()
+ verify(engine, atLeastOnce()).getLanguageSettings(
+ onSuccess = languageSettingsCallback.capture(),
+ onError = any(),
+ )
+ val mockLanguageSetting = mapOf("en" to LanguageSetting.OFFER)
+ languageSettingsCallback.value.invoke(mockLanguageSetting)
+ waitForIdle()
+ }
}
diff --git a/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/ext/TabSessionStateTest.kt b/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/ext/TabSessionStateTest.kt
new file mode 100644
index 0000000000..1202afb1c6
--- /dev/null
+++ b/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/ext/TabSessionStateTest.kt
@@ -0,0 +1,34 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.state.ext
+
+import mozilla.components.browser.state.state.ReaderState
+import mozilla.components.browser.state.state.createTab
+import org.junit.Assert.assertEquals
+import org.junit.Test
+
+class TabSessionStateTest {
+
+ @Test
+ fun `GIVEN reader mode is active WHEN get url extension property is fetched THEN return the active url`() {
+ val readerUrl = "moz-extension://1234"
+ val activeUrl = "https://mozilla.org"
+ val readerTab = createTab(
+ url = readerUrl,
+ readerState = ReaderState(active = true, activeUrl = activeUrl),
+ title = "Mozilla",
+ )
+
+ assertEquals(activeUrl, readerTab.getUrl())
+ }
+
+ @Test
+ fun `WHEN get url extension property is fetched THEN return the content url`() {
+ val url = "https://mozilla.org"
+ val tab = createTab(url = url)
+
+ assertEquals(url, tab.getUrl())
+ }
+}
diff --git a/mobile/android/android-components/components/browser/toolbar/src/main/res/values-nb-rNO/strings.xml b/mobile/android/android-components/components/browser/toolbar/src/main/res/values-nb-rNO/strings.xml
index f9cb99c55d..9d9bcbfc13 100644
--- a/mobile/android/android-components/components/browser/toolbar/src/main/res/values-nb-rNO/strings.xml
+++ b/mobile/android/android-components/components/browser/toolbar/src/main/res/values-nb-rNO/strings.xml
@@ -2,6 +2,7 @@
<resources>
<!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
<string name="mozac_browser_toolbar_menu_button">Meny</string>
+ <!-- Content description: For the clear URL text button. -->
<string name="mozac_clear_button_description">Tøm</string>
<!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
<string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Sporingsbeskyttelse er på</string>
@@ -14,5 +15,5 @@
<!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
<string name="mozac_browser_toolbar_progress_loading">Laster</string>
<!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
- <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Noe av innholdet er blokkert av autoavspillings-innstillingene </string>
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Noe av innholdet er blokkert av autoavspillings-innstillingene</string>
</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar/src/main/res/values-sc/strings.xml b/mobile/android/android-components/components/browser/toolbar/src/main/res/values-sc/strings.xml
index 5194a4765e..f0b375f172 100644
--- a/mobile/android/android-components/components/browser/toolbar/src/main/res/values-sc/strings.xml
+++ b/mobile/android/android-components/components/browser/toolbar/src/main/res/values-sc/strings.xml
@@ -2,6 +2,7 @@
<resources>
<!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
<string name="mozac_browser_toolbar_menu_button">Menù</string>
+ <!-- Content description: For the clear URL text button. -->
<string name="mozac_clear_button_description">Isbòida</string>
<!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
<string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">S’amparu contra sa sighidura est ativu</string>
@@ -13,4 +14,6 @@
<string name="mozac_browser_toolbar_content_description_site_info">Informatziones de su situ</string>
<!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
<string name="mozac_browser_toolbar_progress_loading">Carrighende</string>
- </resources>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Sa funtzionalidade de riprodutzione automàtica at blocadu cuntenutos</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar/src/main/res/values/strings.xml b/mobile/android/android-components/components/browser/toolbar/src/main/res/values/strings.xml
index 3c2d7dcf1b..c845e189e7 100644
--- a/mobile/android/android-components/components/browser/toolbar/src/main/res/values/strings.xml
+++ b/mobile/android/android-components/components/browser/toolbar/src/main/res/values/strings.xml
@@ -5,6 +5,7 @@
<resources>
<!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
<string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <!-- Content description: For the clear URL text button. -->
<string name="mozac_clear_button_description">Clear</string>
<!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
<string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Tracking Protection is on</string>
diff --git a/mobile/android/android-components/components/browser/toolbar2/README.md b/mobile/android/android-components/components/browser/toolbar2/README.md
new file mode 100644
index 0000000000..a0cfe1d6ce
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/README.md
@@ -0,0 +1,37 @@
+# [Android Components](../../../README.md) > Browser > Toolbar2
+
+A customizable toolbar for browsers.
+
+## Usage
+
+### Setting up the dependency
+
+Use Gradle to download the library from [maven.mozilla.org](https://maven.mozilla.org/) ([Setup repository](../../../README.md#maven-repository)):
+
+```Groovy
+implementation "org.mozilla.components:browser-toolbar2:{latest-version}"
+```
+
+## Facts
+
+This component emits the following [Facts](../../support/base/README.md#Facts):
+
+| Action | Item | Extras | Description |
+|--------|---------|----------------|------------------------------------|
+| CLICK | menu | `menuExtras` | The user opened the overflow menu. |
+| COMMIT | toolbar | `commitExtras` | The user has edited the URL. |
+
+`menuExtras` are additional extras set on the `BrowserMenuBuilder` passed to the `BrowserToolbar` (see [browser-menu](../menu/README.md)).
+
+#### `commitExtras`
+
+| Key | Type | Value |
+|--------------|---------|-----------------------------------|
+| autocomplete | Boolean | Whether the URL was autocompleted |
+| source | String? | Which autocomplete list was used |
+
+## License
+
+ This Source Code Form is subject to the terms of the Mozilla Public
+ License, v. 2.0. If a copy of the MPL was not distributed with this
+ file, You can obtain one at http://mozilla.org/MPL/2.0/
diff --git a/mobile/android/android-components/components/browser/toolbar2/build.gradle b/mobile/android/android-components/components/browser/toolbar2/build.gradle
new file mode 100644
index 0000000000..60d3930430
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/build.gradle
@@ -0,0 +1,56 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+apply plugin: 'com.android.library'
+apply plugin: 'kotlin-android'
+
+android {
+ defaultConfig {
+ minSdkVersion config.minSdkVersion
+ compileSdk config.compileSdkVersion
+ targetSdkVersion config.targetSdkVersion
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ namespace 'mozilla.components.browser.toolbar2'
+}
+
+dependencies {
+ api project(':concept-toolbar')
+ api project(':ui-autocomplete')
+ api project(':support-base')
+
+ implementation project(':concept-engine')
+ implementation project(':concept-menu')
+ implementation project(':browser-menu')
+ implementation project(':browser-menu2')
+ implementation project(':ui-icons')
+ implementation project(':ui-colors')
+ implementation project(':ui-widgets')
+ implementation project(':support-ktx')
+
+ implementation ComponentsDependencies.androidx_appcompat
+ implementation ComponentsDependencies.androidx_constraintlayout
+ implementation ComponentsDependencies.androidx_core_ktx
+ implementation ComponentsDependencies.google_material
+
+ implementation ComponentsDependencies.kotlin_coroutines
+
+ testImplementation project(':support-test')
+
+ testImplementation ComponentsDependencies.androidx_test_core
+ testImplementation ComponentsDependencies.androidx_test_junit
+ testImplementation ComponentsDependencies.testing_robolectric
+ testImplementation ComponentsDependencies.testing_coroutines
+}
+
+apply from: '../../../android-lint.gradle'
+apply from: '../../../publish.gradle'
+ext.configurePublish(config.componentsGroupId, archivesBaseName, project.ext.description)
diff --git a/mobile/android/android-components/components/browser/toolbar2/proguard-rules.pro b/mobile/android/android-components/components/browser/toolbar2/proguard-rules.pro
new file mode 100644
index 0000000000..f1b424510d
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/AndroidManifest.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..e16cda1d34
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/AndroidManifest.xml
@@ -0,0 +1,4 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<manifest />
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/BrowserToolbar.kt b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/BrowserToolbar.kt
new file mode 100644
index 0000000000..e740455385
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/BrowserToolbar.kt
@@ -0,0 +1,691 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar2
+
+import android.content.Context
+import android.graphics.drawable.Drawable
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.view.View
+import android.view.View.NO_ID
+import android.view.ViewGroup
+import android.widget.ImageButton
+import android.widget.ImageView
+import androidx.annotation.ColorRes
+import androidx.annotation.DrawableRes
+import androidx.annotation.VisibleForTesting
+import androidx.annotation.VisibleForTesting.Companion.PRIVATE
+import androidx.coordinatorlayout.widget.CoordinatorLayout
+import androidx.core.content.ContextCompat
+import androidx.core.view.forEach
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.cancelChildren
+import kotlinx.coroutines.isActive
+import kotlinx.coroutines.launch
+import mozilla.components.browser.toolbar2.display.DisplayToolbar
+import mozilla.components.browser.toolbar2.edit.EditToolbar
+import mozilla.components.concept.toolbar.AutocompleteDelegate
+import mozilla.components.concept.toolbar.AutocompleteResult
+import mozilla.components.concept.toolbar.Toolbar
+import mozilla.components.concept.toolbar.Toolbar.Highlight
+import mozilla.components.support.base.android.Padding
+import mozilla.components.support.base.log.logger.Logger
+import mozilla.components.support.ktx.kotlin.trimmed
+import mozilla.components.ui.autocomplete.AutocompleteView
+import mozilla.components.ui.autocomplete.InlineAutocompleteEditText
+import mozilla.components.ui.autocomplete.OnFilterListener
+import mozilla.components.ui.widgets.behavior.EngineViewScrollingBehavior
+import kotlin.coroutines.CoroutineContext
+
+internal fun ImageView.setTintResource(@ColorRes tintColorResource: Int) {
+ if (tintColorResource != NO_ID) {
+ imageTintList = ContextCompat.getColorStateList(context, tintColorResource)
+ }
+}
+
+/**
+ * A customizable toolbar for browsers.
+ *
+ * The toolbar can switch between two modes: display and edit. The display mode displays the current
+ * URL and controls for navigation. In edit mode the current URL can be edited. Those two modes are
+ * implemented by the DisplayToolbar and EditToolbar classes.
+ *
+ * ```
+ * +----------------+
+ * | BrowserToolbar |
+ * +--------+-------+
+ * +
+ * +-------+-------+
+ * | |
+ * +---------v------+ +-------v--------+
+ * | DisplayToolbar | | EditToolbar |
+ * +----------------+ +----------------+
+ * ```
+ */
+@Suppress("TooManyFunctions")
+class BrowserToolbar @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0,
+) : ViewGroup(context, attrs, defStyleAttr), Toolbar {
+ private var state: State = State.DISPLAY
+
+ @VisibleForTesting
+ internal var searchTerms: String = ""
+ private var urlCommitListener: ((String) -> Boolean)? = null
+ var isNavBarEnabled: Boolean = false
+
+ /**
+ * Toolbar in "display mode".
+ */
+ var display = DisplayToolbar(
+ context,
+ this,
+ LayoutInflater.from(context).inflate(
+ R.layout.mozac_browser_toolbar_displaytoolbar,
+ this,
+ false,
+ ),
+ )
+ @VisibleForTesting(otherwise = PRIVATE)
+ internal set
+
+ /**
+ * Toolbar in "edit mode".
+ */
+ var edit = EditToolbar(
+ context,
+ this,
+ LayoutInflater.from(context).inflate(
+ R.layout.mozac_browser_toolbar_edittoolbar,
+ this,
+ false,
+ ),
+ )
+ @VisibleForTesting(otherwise = PRIVATE)
+ internal set
+
+ override var title: String
+ get() = display.title
+ set(value) { display.title = value }
+
+ override var url: CharSequence
+ get() = display.url.toString()
+ set(value) {
+ // We update the display toolbar immediately. We do not do that for the edit toolbar to not
+ // mess with what the user is entering. Instead we will remember the value and update the
+ // edit toolbar whenever we switch to it.
+ display.url = (value as String).trimmed()
+ }
+
+ override var siteSecure: Toolbar.SiteSecurity
+ get() = display.siteSecurity
+ set(value) { display.siteSecurity = value }
+
+ override var highlight: Highlight = Highlight.NONE
+ set(value) {
+ if (field != value) {
+ display.setHighlight(value)
+ field = value
+ }
+ }
+
+ override var siteTrackingProtection: Toolbar.SiteTrackingProtection =
+ Toolbar.SiteTrackingProtection.OFF_GLOBALLY
+ set(value) {
+ if (field != value) {
+ display.setTrackingProtectionState(value)
+ field = value
+ }
+ }
+
+ override var private: Boolean
+ get() = edit.private
+ set(value) { edit.private = value }
+
+ /**
+ * Registers the given listener to be invoked when the user edits the URL.
+ */
+ override fun setOnEditListener(listener: Toolbar.OnEditListener) {
+ edit.editListener = listener
+ }
+
+ /**
+ * Registers the given function to be invoked when users changes text in the toolbar.
+ *
+ * @param filter A function which will perform autocompletion and send results to [AutocompleteDelegate].
+ */
+ override fun setAutocompleteListener(filter: suspend (String, AutocompleteDelegate) -> Unit) {
+ // Our 'filter' knows how to autocomplete, and the 'urlView' knows how to apply results of
+ // autocompletion. Which gives us a lovely delegate chain!
+ // urlView decides when it's appropriate to ask for autocompletion, and in turn we invoke
+ // our 'filter' and send results back to 'urlView'.
+ edit.setAutocompleteListener(filter)
+ }
+
+ override fun refreshAutocomplete() {
+ edit.refreshAutocompleteSuggestion()
+ }
+
+ init {
+ addView(display.rootView)
+ addView(edit.rootView)
+
+ updateState(State.DISPLAY)
+ }
+
+ // We layout the toolbar ourselves to avoid the overhead from using complex ViewGroup implementations
+ override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
+ forEach { child ->
+ child.layout(
+ 0 + paddingLeft,
+ 0 + paddingTop,
+ paddingLeft + child.measuredWidth,
+ paddingTop + child.measuredHeight,
+ )
+ }
+ }
+
+ // We measure the views manually to avoid overhead by using complex ViewGroup implementations
+ override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
+ // Our toolbar will always use the full width and a fixed height (default) or the provided
+ // height if it's an exact value.
+ val width = MeasureSpec.getSize(widthMeasureSpec)
+ val height = if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.EXACTLY) {
+ MeasureSpec.getSize(heightMeasureSpec)
+ } else {
+ resources.getDimensionPixelSize(R.dimen.mozac_browser_toolbar_default_toolbar_height)
+ }
+
+ setMeasuredDimension(width, height)
+
+ // Let the children measure themselves using our fixed size (with padding subtracted)
+ val childWidth = width - paddingLeft - paddingRight
+ val childHeight = height - paddingTop - paddingBottom
+
+ val childWidthSpec = MeasureSpec.makeMeasureSpec(childWidth, MeasureSpec.EXACTLY)
+ val childHeightSpec = MeasureSpec.makeMeasureSpec(childHeight, MeasureSpec.EXACTLY)
+
+ forEach { child -> child.measure(childWidthSpec, childHeightSpec) }
+ }
+
+ override fun onBackPressed(): Boolean {
+ if (state == State.EDIT) {
+ displayMode()
+ return true
+ }
+ return false
+ }
+
+ override fun onStop() {
+ display.onStop()
+ }
+
+ override fun setSearchTerms(searchTerms: String) {
+ this.searchTerms = searchTerms.trimmed()
+
+ if (state == State.EDIT) {
+ edit.editSuggestion(this.searchTerms)
+ }
+ }
+
+ override fun displayProgress(progress: Int) {
+ display.updateProgress(progress)
+ }
+
+ override fun setOnUrlCommitListener(listener: (String) -> Boolean) {
+ this.urlCommitListener = listener
+ }
+
+ /**
+ * Declare that the actions (navigation actions, browser actions, page actions) have changed and
+ * should be updated if needed.
+ *
+ * The toolbar will call the <code>visible</code> lambda of every action to determine whether a
+ * view for this action should be added or removed. Additionally <code>bind</code> will be
+ * called on every visible action to update its view.
+ */
+ override fun invalidateActions() {
+ display.invalidateActions()
+ edit.invalidateActions()
+ }
+
+ /**
+ * Adds an action to be displayed on the right side of the toolbar (outside of the URL bounding
+ * box) in display mode.
+ *
+ * If there is not enough room to show all icons then some icons may be moved to an overflow
+ * menu.
+ *
+ * Related:
+ * https://developer.mozilla.org/en-US/Add-ons/WebExtensions/user_interface/Browser_action
+ */
+ override fun addBrowserAction(action: Toolbar.Action) {
+ display.addBrowserAction(action)
+ }
+
+ /**
+ * Removes a previously added browser action (see [addBrowserAction]). If the provided
+ * action was never added, this method has no effect.
+ *
+ * @param action the action to remove.
+ */
+ override fun removeBrowserAction(action: Toolbar.Action) {
+ display.removeBrowserAction(action)
+ }
+
+ /**
+ * Removes a previously added page action (see [addPageAction]). If the provided
+ * action was never added, this method has no effect.
+ *
+ * @param action the action to remove.
+ */
+ override fun removePageAction(action: Toolbar.Action) {
+ display.removePageAction(action)
+ }
+
+ /**
+ * Adds an action to be displayed on the right side of the URL in display mode.
+ *
+ * Related:
+ * https://developer.mozilla.org/en-US/Add-ons/WebExtensions/user_interface/Page_actions
+ */
+ override fun addPageAction(action: Toolbar.Action) {
+ display.addPageAction(action)
+ }
+
+ /**
+ * Adds an action to be display on the far left side of the toolbar. This area is usually used
+ * on larger devices for navigation actions like "back" and "forward".
+ */
+ override fun addNavigationAction(action: Toolbar.Action) {
+ display.addNavigationAction(action)
+ }
+
+ /**
+ * Removes a previously added navigation action (see [addNavigationAction]). If the provided
+ * action was never added, this method has no effect.
+ *
+ * @param action the action to remove.
+ */
+ override fun removeNavigationAction(action: Toolbar.Action) {
+ display.removeNavigationAction(action)
+ }
+
+ /**
+ * Adds an action to be displayed at the start of the URL in edit mode.
+ */
+ override fun addEditActionStart(action: Toolbar.Action) {
+ edit.addEditActionStart(action)
+ }
+
+ /**
+ * Adds an action to be displayed at the end of the URL in edit mode.
+ */
+ override fun addEditActionEnd(action: Toolbar.Action) {
+ edit.addEditActionEnd(action)
+ }
+
+ /**
+ * Removes an action end of the URL in edit mode.
+ */
+ override fun removeEditActionEnd(action: Toolbar.Action) {
+ edit.removeEditActionEnd(action)
+ }
+
+ /**
+ * Hides the menu button in display mode.
+ */
+ override fun hideMenuButton() {
+ display.hideMenuButton()
+ }
+
+ /**
+ * Shows the menu button in display mode.
+ */
+ override fun showMenuButton() {
+ display.showMenuButton()
+ }
+
+ /**
+ * Sets the horizontal padding in display mode.
+ */
+ override fun setDisplayHorizontalPadding(horizontalPadding: Int) {
+ display.setHorizontalPadding(horizontalPadding)
+ }
+
+ /**
+ * Hides the page action separator in display/edit mode.
+ */
+ override fun hidePageActionSeparator() {
+ display.hidePageActionSeparator()
+ edit.hidePageActionSeparator()
+ }
+
+ /**
+ * Shows the page action separator in display/edit mode.
+ */
+ override fun showPageActionSeparator() {
+ display.showPageActionSeparator()
+ edit.showPageActionSeparator()
+ }
+
+ /**
+ * Switches to URL editing mode.
+ *
+ * @param cursorPlacement Where the cursor should be placed after focusing on the URL input field.
+ */
+ override fun editMode(cursorPlacement: Toolbar.CursorPlacement) {
+ val urlValue = if (searchTerms.isEmpty()) url else searchTerms
+ edit.updateUrl(urlValue.toString(), false)
+ updateState(State.EDIT)
+ edit.focus()
+
+ when (cursorPlacement) {
+ Toolbar.CursorPlacement.ALL -> {
+ edit.selectAll()
+ }
+ Toolbar.CursorPlacement.END -> {
+ edit.selectEnd()
+ }
+ }
+ }
+
+ /**
+ * Switches to URL displaying mode.
+ */
+ override fun displayMode() {
+ updateState(State.DISPLAY)
+ }
+
+ /**
+ * Dismisses the display toolbar popup menu.
+ */
+ override fun dismissMenu() {
+ display.views.menu.dismissMenu()
+ }
+
+ override fun enableScrolling() {
+ // Behavior can be changed without us knowing. Not safe to use a memoized value.
+ (layoutParams as? CoordinatorLayout.LayoutParams)?.apply {
+ (behavior as? EngineViewScrollingBehavior)?.enableScrolling()
+ }
+ }
+
+ override fun disableScrolling() {
+ // Behavior can be changed without us knowing. Not safe to use a memoized value.
+ (layoutParams as? CoordinatorLayout.LayoutParams)?.apply {
+ (behavior as? EngineViewScrollingBehavior)?.disableScrolling()
+ }
+ }
+
+ override fun expand() {
+ (layoutParams as? CoordinatorLayout.LayoutParams)?.apply {
+ (behavior as? EngineViewScrollingBehavior)?.forceExpand(this@BrowserToolbar)
+ }
+ }
+
+ override fun collapse() {
+ (layoutParams as? CoordinatorLayout.LayoutParams)?.apply {
+ (behavior as? EngineViewScrollingBehavior)?.forceCollapse(this@BrowserToolbar)
+ }
+ }
+
+ internal fun onUrlEntered(url: String) {
+ if (urlCommitListener?.invoke(url) != false) {
+ // Return to display mode if there's no urlCommitListener or if it returned true. This lets
+ // the app control whether we should switch to display mode automatically.
+ displayMode()
+ }
+ }
+
+ private fun updateState(state: State) {
+ this.state = state
+
+ val (show, hide) = when (state) {
+ State.DISPLAY -> {
+ edit.stopEditing()
+ Pair(display.rootView, edit.rootView)
+ }
+ State.EDIT -> {
+ edit.startEditing()
+ Pair(edit.rootView, display.rootView)
+ }
+ }
+
+ show.visibility = View.VISIBLE
+ hide.visibility = View.GONE
+ }
+
+ private enum class State {
+ DISPLAY,
+ EDIT,
+ }
+
+ /**
+ * An action button to be added to the toolbar.
+ *
+ * @param imageDrawable The drawable to be shown.
+ * @param contentDescription The content description to use.
+ * @param visible Lambda that returns true or false to indicate whether this button should be shown.
+ * @param autoHide Lambda that returns true or false to indicate whether this button should auto hide.
+ * @param weight Lambda that returns an integer to indicate weight of an action. The lesser the weight,
+ * the closer it is to the url. A default weight -1 indicates, the position is not cared for
+ * and action will be appended at the end.
+ * @param background A custom (stateful) background drawable resource to be used.
+ * @param padding a custom [Padding] for this Button.
+ * @param iconTintColorResource Optional ID of color resource to tint the icon.
+ * @param longClickListener Callback that will be invoked whenever the button is long-pressed.
+ * @param listener Callback that will be invoked whenever the button is pressed
+ */
+ open class Button(
+ imageDrawable: Drawable,
+ contentDescription: String,
+ visible: () -> Boolean = { true },
+ autoHide: () -> Boolean = { false },
+ weight: () -> Int = { -1 },
+ @DrawableRes background: Int = 0,
+ val padding: Padding = DEFAULT_PADDING,
+ @ColorRes iconTintColorResource: Int = NO_ID,
+ longClickListener: (() -> Unit)? = null,
+ listener: () -> Unit,
+ ) : Toolbar.ActionButton(
+ imageDrawable,
+ contentDescription,
+ visible,
+ autoHide,
+ weight,
+ background,
+ padding,
+ iconTintColorResource,
+ longClickListener,
+ listener,
+ )
+
+ /**
+ * An action button with two states, selected and unselected. When the button is pressed, the
+ * state changes automatically.
+ *
+ * @param image The drawable to be shown if the button is in unselected state.
+ * @param imageSelected The drawable to be shown if the button is in selected state.
+ * @param contentDescription The content description to use if the button is in unselected state.
+ * @param contentDescriptionSelected The content description to use if the button is in selected state.
+ * @param visible Lambda that returns true or false to indicate whether this button should be shown.
+ * @param weight Lambda that returns an integer to indicate weight of an action. The lesser the weight,
+ * the closer it is to the url. A default weight -1 indicates, the position is not cared for
+ * and action will be appended at the end.
+ * @param selected Sets whether this button should be selected initially.
+ * @param background A custom (stateful) background drawable resource to be used.
+ * @param padding a custom [Padding] for this Button.
+ * @param listener Callback that will be invoked whenever the checked state changes.
+ */
+ open class ToggleButton(
+ image: Drawable,
+ imageSelected: Drawable,
+ contentDescription: String,
+ contentDescriptionSelected: String,
+ visible: () -> Boolean = { true },
+ weight: () -> Int = { -1 },
+ selected: Boolean = false,
+ @DrawableRes background: Int = 0,
+ val padding: Padding = DEFAULT_PADDING,
+ listener: (Boolean) -> Unit,
+ ) : Toolbar.ActionToggleButton(
+ image,
+ imageSelected,
+ contentDescription,
+ contentDescriptionSelected,
+ visible,
+ weight,
+ selected,
+ background,
+ padding,
+ listener,
+ )
+
+ /**
+ * An action that either shows an active button or an inactive button based on the provided
+ * <code>isInPrimaryState</code> lambda. All secondary characteristics default to their
+ * corresponding primary.
+ *
+ * @param primaryImage: The drawable to be shown if the button is in the primary/enabled state
+ * @param primaryContentDescription: The content description to use if the button is in the primary state.
+ * @param secondaryImage: The drawable to be shown if the button is in the secondary/disabled state.
+ * @param secondaryContentDescription: The content description to use if the button is in the secondary state.
+ * @param isInPrimaryState: Lambda that returns whether this button should be in the primary or secondary state.
+ * @param primaryImageTintResource: Optional ID of color resource to tint the icon in the primary state.
+ * @param secondaryImageTintResource: ID of color resource to tint the icon in the secondary state.
+ * @param disableInSecondaryState: Disable the button entirely when in the secondary state?
+ * @param weight Lambda that returns an integer to indicate weight of an action. The lesser the weight,
+ * the closer it is to the url. A default weight -1 indicates, the position is not cared for
+ * and action will be appended at the end.
+ * @param background A custom (stateful) background drawable resource to be used.
+ * @param longClickListener Callback that will be invoked whenever the button is long-pressed.
+ * @param listener Callback that will be invoked whenever the button is pressed.
+ */
+ open class TwoStateButton(
+ val primaryImage: Drawable,
+ val primaryContentDescription: String,
+ val secondaryImage: Drawable = primaryImage,
+ val secondaryContentDescription: String = primaryContentDescription,
+ val isInPrimaryState: () -> Boolean = { true },
+ @ColorRes val primaryImageTintResource: Int = NO_ID,
+ @ColorRes val secondaryImageTintResource: Int = primaryImageTintResource,
+ val disableInSecondaryState: Boolean = true,
+ override val weight: () -> Int = { -1 },
+ background: Int = 0,
+ longClickListener: (() -> Unit)? = null,
+ listener: () -> Unit,
+ ) : Button(
+ primaryImage,
+ primaryContentDescription,
+ weight = weight,
+ background = background,
+ longClickListener = longClickListener,
+ listener = listener,
+ ) {
+ var enabled: Boolean = false
+ private set
+
+ override fun bind(view: View) {
+ enabled = isInPrimaryState.invoke()
+
+ val button = view as ImageButton
+ if (enabled) {
+ button.setImageDrawable(primaryImage)
+ button.contentDescription = primaryContentDescription
+ button.setTintResource(primaryImageTintResource)
+ button.isEnabled = true
+ } else {
+ button.setImageDrawable(secondaryImage)
+ button.contentDescription = secondaryContentDescription
+ button.setTintResource(secondaryImageTintResource)
+ button.isEnabled = !disableInSecondaryState
+ }
+ }
+ }
+
+ companion object {
+ internal const val ACTION_PADDING_DP = 16
+ internal val DEFAULT_PADDING =
+ Padding(ACTION_PADDING_DP, ACTION_PADDING_DP, ACTION_PADDING_DP, ACTION_PADDING_DP)
+ }
+}
+
+/**
+ * Wraps [filter] execution in a coroutine context, cancelling prior executions on every invocation.
+ * [coroutineContext] must be of type that doesn't propagate cancellation of its children upwards.
+ */
+class AsyncFilterListener(
+ private val urlView: AutocompleteView,
+ override val coroutineContext: CoroutineContext,
+ private val filter: suspend (String, AutocompleteDelegate) -> Unit,
+ private val uiContext: CoroutineContext = Dispatchers.Main,
+) : OnFilterListener, CoroutineScope {
+ override fun invoke(text: String) {
+ // We got a new input, so whatever past autocomplete queries we still have running are
+ // irrelevant. We cancel them, but do not depend on cancellation to take place.
+ coroutineContext.cancelChildren()
+
+ CoroutineScope(coroutineContext).launch {
+ filter(text, AsyncAutocompleteDelegate(urlView, this, uiContext))
+ }
+ }
+}
+
+/**
+ * An autocomplete delegate which is aware of its parent scope (to check for cancellations).
+ * Responsible for processing autocompletion results and discarding stale results when [urlView] moved on.
+ */
+private class AsyncAutocompleteDelegate(
+ private val urlView: AutocompleteView,
+ private val parentScope: CoroutineScope,
+ override val coroutineContext: CoroutineContext,
+ private val logger: Logger = Logger("AsyncAutocompleteDelegate"),
+) : AutocompleteDelegate, CoroutineScope {
+ override fun applyAutocompleteResult(result: AutocompleteResult, onApplied: () -> Unit) {
+ // Bail out if we were cancelled already.
+ if (!parentScope.isActive) {
+ logger.debug("Autocomplete request cancelled. Discarding results.")
+ return
+ }
+
+ // Process results on the UI dispatcher.
+ CoroutineScope(coroutineContext).launch {
+ // Ignore this result if the query is stale.
+ if (result.input == urlView.originalText.lowercase()) {
+ urlView.applyAutocompleteResult(
+ InlineAutocompleteEditText.AutocompleteResult(
+ text = result.text,
+ source = result.source,
+ totalItems = result.totalItems,
+ ),
+ )
+ onApplied()
+ } else {
+ logger.debug("Discarding stale autocomplete result.")
+ }
+ }
+ }
+
+ override fun noAutocompleteResult(input: String) {
+ // Bail out if we were cancelled already.
+ if (!parentScope.isActive) {
+ logger.debug("Autocomplete request cancelled. Discarding 'noAutocompleteResult'.")
+ return
+ }
+
+ // Process results on the UI thread.
+ CoroutineScope(coroutineContext).launch {
+ // Ignore this result if the query is stale.
+ if (input == urlView.originalText) {
+ urlView.noAutocompleteResult()
+ } else {
+ logger.debug("Discarding stale lack of autocomplete results.")
+ }
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/DisplayToolbar.kt b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/DisplayToolbar.kt
new file mode 100644
index 0000000000..66218febbb
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/DisplayToolbar.kt
@@ -0,0 +1,711 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar2.display
+
+import android.content.Context
+import android.graphics.Color
+import android.graphics.Typeface
+import android.graphics.drawable.Drawable
+import android.os.Build
+import android.util.TypedValue
+import android.view.View
+import android.view.accessibility.AccessibilityEvent
+import android.widget.ImageView
+import android.widget.ProgressBar
+import androidx.annotation.ColorInt
+import androidx.appcompat.content.res.AppCompatResources.getDrawable
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.constraintlayout.widget.ConstraintSet
+import androidx.core.content.ContextCompat
+import androidx.core.view.isVisible
+import mozilla.components.browser.menu.BrowserMenuBuilder
+import mozilla.components.browser.toolbar2.BrowserToolbar
+import mozilla.components.browser.toolbar2.R
+import mozilla.components.browser.toolbar2.internal.ActionContainer
+import mozilla.components.concept.menu.MenuController
+import mozilla.components.concept.toolbar.Toolbar
+import mozilla.components.support.ktx.android.content.isScreenReaderEnabled
+import mozilla.components.ui.colors.R.color as photonColors
+
+/**
+ * Sub-component of the browser toolbar responsible for displaying the URL and related controls ("display mode").
+ *
+ * Structure:
+ * ```
+ * +-------------+------------+-----------------------+----------+------+
+ * | navigation | indicators | url [ page ] | browser | menu |
+ * | actions | | [ actions ] | actions | |
+ * +-------------+------------+-----------------------+----------+------+
+ * +------------------------progress------------------------------------+
+ * ```
+ *
+ * Navigation actions (optional):
+ * A dynamic list of clickable icons usually used for navigation on larger devices
+ * (e.g. “back”/”forward” buttons.)
+ *
+ * Indicators (optional):
+ * Tracking protection indicator icon (e.g. “shield” icon) that may show a doorhanger when clicked.
+ * Separator icon: a vertical line that separate the above and below icons.
+ * Site security indicator icon (e.g. “Lock” icon) that may show a doorhanger when clicked.
+ * Empty indicator: Icon that will be displayed if the URL is empty.
+ *
+ * URL:
+ * Section that displays the current URL (read-only)
+ *
+ * Page actions (optional):
+ * A dynamic list of clickable icons inside the URL section (e.g. “reader mode” icon)
+ *
+ * Browser actions (optional):
+ * A list of dynamic clickable icons on the toolbar (e.g. tabs tray button)
+ *
+ * Menu (optional):
+ * A button that shows an overflow menu when clicked (constructed using the browser-menu
+ * component)
+ *
+ * Progress (optional):
+ * A horizontal progress bar showing the loading progress (at the top or bottom of the toolbar).
+ */
+@Suppress("LargeClass")
+class DisplayToolbar internal constructor(
+ private val context: Context,
+ private val toolbar: BrowserToolbar,
+ internal val rootView: View,
+) {
+ /**
+ * Enum of indicators that can be displayed in the toolbar.
+ */
+ enum class Indicators {
+ SECURITY,
+ TRACKING_PROTECTION,
+ EMPTY,
+ HIGHLIGHT,
+ }
+
+ /**
+ * Data class holding the customizable colors in "display mode".
+ *
+ * @property securityIconSecure Color tint for the "secure connection" icon (lock).
+ * @property securityIconInsecure Color tint for the "insecure connection" icon (broken lock).
+ * @property emptyIcon Color tint for the icon shown when the URL is empty.
+ * @property menu Color tint for the menu icon.
+ * @property hint Text color of the hint shown when the URL is empty.
+ * @property title Text color of the website title.
+ * @property text Text color of the URL.
+ * @property trackingProtection Color tint for the tracking protection icons.
+ * @property separator Color tint for the separator shown between indicators.
+ * @property pageActionSeparator Color tint of separator dividing url and page actions.
+ * @property highlight Color tint for the highlight icon.
+ *
+ * Set/Get the site security icon colours. It uses a pair of color integers which represent the
+ * insecure and secure colours respectively.
+ */
+ data class Colors(
+ @ColorInt val securityIconSecure: Int,
+ @ColorInt val securityIconInsecure: Int,
+ @ColorInt val emptyIcon: Int,
+ @ColorInt val menu: Int,
+ @ColorInt val hint: Int,
+ @ColorInt val title: Int,
+ @ColorInt val text: Int,
+ @ColorInt val trackingProtection: Int?,
+ @ColorInt val separator: Int,
+ @ColorInt val pageActionSeparator: Int,
+ @ColorInt val highlight: Int?,
+ )
+
+ /**
+ * Data class holding the customizable icons in "display mode".
+ *
+ * @property emptyIcon An icon that is shown in front of the URL if the URL is empty.
+ * @property trackingProtectionTrackersBlocked An icon that is shown if tracking protection is
+ * enabled and trackers have been blocked.
+ * @property trackingProtectionNothingBlocked An icon that is shown if tracking protection is
+ * enabled and no trackers have been blocked.
+ * @property trackingProtectionException An icon that is shown if tracking protection is enabled
+ * but the current page is in the "exception list".
+ * @property highlight An icon that is shown if any event needs to be brought
+ * to the user's attention. Like the autoplay permission been blocked.
+ */
+ data class Icons(
+ val emptyIcon: Drawable?,
+ val trackingProtectionTrackersBlocked: Drawable,
+ val trackingProtectionNothingBlocked: Drawable,
+ val trackingProtectionException: Drawable,
+ val highlight: Drawable,
+ )
+
+ /**
+ * Gravity enum for positioning the progress bar.
+ */
+ enum class Gravity {
+ TOP,
+ BOTTOM,
+ }
+
+ internal val views = DisplayToolbarViews(
+ browserActions = rootView.findViewById(R.id.mozac_browser_toolbar_browser_actions),
+ pageActions = rootView.findViewById(R.id.mozac_browser_toolbar_page_actions),
+ navigationActions = rootView.findViewById(R.id.mozac_browser_toolbar_navigation_actions),
+ background = rootView.findViewById(R.id.mozac_browser_toolbar_background),
+ separator = rootView.findViewById(R.id.mozac_browser_toolbar_separator),
+ pageActionSeparator = rootView.findViewById(R.id.mozac_browser_toolbar_action_separator),
+ emptyIndicator = rootView.findViewById(R.id.mozac_browser_toolbar_empty_indicator),
+ menu = MenuButton(rootView.findViewById(R.id.mozac_browser_toolbar_menu)),
+ securityIndicator = rootView.findViewById(R.id.mozac_browser_toolbar_security_indicator),
+ trackingProtectionIndicator = rootView.findViewById(
+ R.id.mozac_browser_toolbar_tracking_protection_indicator,
+ ),
+ origin = rootView.findViewById<OriginView>(R.id.mozac_browser_toolbar_origin_view).also {
+ it.toolbar = toolbar
+ },
+ progress = rootView.findViewById<ProgressBar>(R.id.mozac_browser_toolbar_progress),
+ highlight = rootView.findViewById(R.id.mozac_browser_toolbar_permission_indicator),
+ )
+
+ /**
+ * Customizable colors in "display mode".
+ */
+ var colors: Colors = Colors(
+ securityIconSecure = ContextCompat.getColor(context, photonColors.photonWhite),
+ securityIconInsecure = ContextCompat.getColor(context, photonColors.photonWhite),
+ emptyIcon = ContextCompat.getColor(context, photonColors.photonWhite),
+ menu = ContextCompat.getColor(context, photonColors.photonWhite),
+ hint = views.origin.hintColor,
+ title = views.origin.titleColor,
+ text = views.origin.textColor,
+ trackingProtection = null,
+ separator = ContextCompat.getColor(context, photonColors.photonGrey80),
+ pageActionSeparator = ContextCompat.getColor(context, photonColors.photonGrey80),
+ highlight = null,
+ )
+ set(value) {
+ field = value
+
+ updateSiteSecurityIcon()
+ views.emptyIndicator.setColorFilter(value.emptyIcon)
+ views.menu.setColorFilter(value.menu)
+ views.origin.hintColor = value.hint
+ views.origin.titleColor = value.title
+ views.origin.textColor = value.text
+ views.separator.setColorFilter(value.separator)
+ views.pageActionSeparator.setBackgroundColor(value.pageActionSeparator)
+
+ if (value.trackingProtection != null) {
+ views.trackingProtectionIndicator.setTint(value.trackingProtection)
+ views.trackingProtectionIndicator.setColorFilter(value.trackingProtection)
+ }
+
+ if (value.highlight != null) {
+ views.highlight.setTint(value.highlight)
+ }
+ }
+
+ /**
+ * Customizable icons in "edit mode".
+ */
+ var icons: Icons = Icons(
+ emptyIcon = null,
+ trackingProtectionTrackersBlocked = requireNotNull(
+ getDrawable(context, TrackingProtectionIconView.DEFAULT_ICON_ON_TRACKERS_BLOCKED),
+ ),
+ trackingProtectionNothingBlocked = requireNotNull(
+ getDrawable(context, TrackingProtectionIconView.DEFAULT_ICON_ON_NO_TRACKERS_BLOCKED),
+ ),
+ trackingProtectionException = requireNotNull(
+ getDrawable(context, TrackingProtectionIconView.DEFAULT_ICON_OFF_FOR_A_SITE),
+ ),
+ highlight = requireNotNull(
+ getDrawable(context, R.drawable.mozac_dot_notification),
+ ),
+ )
+ set(value) {
+ field = value
+
+ views.emptyIndicator.setImageDrawable(value.emptyIcon)
+
+ views.trackingProtectionIndicator.setIcons(
+ value.trackingProtectionNothingBlocked,
+ value.trackingProtectionTrackersBlocked,
+ value.trackingProtectionException,
+ )
+ views.highlight.setIcon(value.highlight)
+ }
+
+ /**
+ * Allows customization of URL for display purposes.
+ */
+ var urlFormatter: ((CharSequence) -> CharSequence)? = null
+
+ /**
+ * Sets a listener to be invoked when the site security indicator icon is clicked.
+ */
+ fun setOnSiteSecurityClickedListener(listener: (() -> Unit)?) {
+ if (listener == null) {
+ views.securityIndicator.setOnClickListener(null)
+ views.securityIndicator.background = null
+ } else {
+ views.securityIndicator.setOnClickListener {
+ listener.invoke()
+ }
+
+ val outValue = TypedValue()
+ context.theme.resolveAttribute(
+ android.R.attr.selectableItemBackgroundBorderless,
+ outValue,
+ true,
+ )
+
+ views.securityIndicator.setBackgroundResource(outValue.resourceId)
+ }
+ }
+
+ /**
+ * Sets a listener to be invoked when the site tracking protection indicator icon is clicked.
+ */
+ fun setOnTrackingProtectionClickedListener(listener: (() -> Unit)?) {
+ if (listener == null) {
+ views.trackingProtectionIndicator.setOnClickListener(null)
+ views.trackingProtectionIndicator.background = null
+ } else {
+ views.trackingProtectionIndicator.setOnClickListener {
+ listener.invoke()
+ }
+
+ val outValue = TypedValue()
+ context.theme.resolveAttribute(
+ android.R.attr.selectableItemBackgroundBorderless,
+ outValue,
+ true,
+ )
+
+ views.trackingProtectionIndicator.setBackgroundResource(outValue.resourceId)
+ }
+ }
+
+ /**
+ * Sets a lambda to be invoked when the menu is dismissed
+ */
+ fun setMenuDismissAction(onDismiss: () -> Unit) {
+ views.menu.setMenuDismissAction(onDismiss)
+ }
+
+ /**
+ * List of indicators that should be displayed next to the URL.
+ */
+ var indicators: List<Indicators> = listOf(Indicators.SECURITY)
+ set(value) {
+ field = value
+
+ updateIndicatorVisibility()
+ }
+
+ var displayIndicatorSeparator: Boolean = true
+ set(value) {
+ field = value
+ updateIndicatorVisibility()
+ }
+
+ /**
+ * Sets the background that should be drawn behind the URL, page actions an indicators.
+ */
+ fun setUrlBackground(background: Drawable?) {
+ views.background.setImageDrawable(background)
+ }
+
+ /**
+ * Whether the progress bar should be drawn at the top or bottom of the toolbar.
+ */
+ var progressGravity: Gravity = Gravity.BOTTOM
+ set(value) {
+ field = value
+
+ val layout = rootView as ConstraintLayout
+ layout.hashCode()
+
+ val constraintSet = ConstraintSet()
+ constraintSet.clone(layout)
+ constraintSet.clear(views.progress.id, ConstraintSet.TOP)
+ constraintSet.clear(views.progress.id, ConstraintSet.BOTTOM)
+ constraintSet.connect(
+ views.progress.id,
+ if (value == Gravity.TOP) ConstraintSet.TOP else ConstraintSet.BOTTOM,
+ ConstraintSet.PARENT_ID,
+ if (value == Gravity.TOP) ConstraintSet.TOP else ConstraintSet.BOTTOM,
+ )
+ constraintSet.applyTo(layout)
+ }
+
+ /**
+ * Sets a lambda that will be invoked whenever the URL in display mode was clicked. Only if this
+ * lambda returns <code>true</code> the toolbar will switch to editing mode. Return
+ * <code>false</code> to not switch to editing mode and handle the click manually.
+ */
+ var onUrlClicked: () -> Boolean
+ get() = views.origin.onUrlClicked
+ set(value) {
+ views.origin.onUrlClicked = value
+ }
+
+ /**
+ * Sets the text to be displayed when the URL of the toolbar is empty.
+ */
+ var hint: String
+ get() = views.origin.hint
+ set(value) {
+ views.origin.hint = value
+ }
+
+ /**
+ * Sets the size of the text for the title displayed in the toolbar.
+ */
+ var titleTextSize: Float
+ get() = views.origin.titleTextSize
+ set(value) {
+ views.origin.titleTextSize = value
+ }
+
+ /**
+ * Sets the size of the text for the URL/search term displayed in the toolbar.
+ */
+ var textSize: Float
+ get() = views.origin.textSize
+ set(value) {
+ views.origin.textSize = value
+ }
+
+ /**
+ * Sets the typeface of the text for the URL/search term displayed in the toolbar.
+ */
+ var typeface: Typeface
+ get() = views.origin.typeface
+ set(value) {
+ views.origin.typeface = value
+ }
+
+ /**
+ * Sets a [BrowserMenuBuilder] that will be used to create a menu when the menu button is clicked.
+ * The menu button will only be visible if a builder or controller has been set.
+ */
+ var menuBuilder: BrowserMenuBuilder?
+ get() = views.menu.menuBuilder
+ set(value) {
+ views.menu.menuBuilder = value
+ }
+
+ /**
+ * Sets a [MenuController] that will be used to create a menu when the menu button is clicked.
+ * The menu button will only be visible if a builder or controller has been set.
+ * If both a [menuBuilder] and controller are present, only the controller will be used.
+ */
+ var menuController: MenuController?
+ get() = views.menu.menuController
+ set(value) {
+ views.menu.menuController = value
+ }
+
+ /**
+ * Set a LongClickListener to the urlView of the toolbar.
+ */
+ fun setOnUrlLongClickListener(handler: ((View) -> Boolean)?) = views.origin.setOnUrlLongClickListener(handler)
+
+ private fun updateIndicatorVisibility() {
+ val urlEmpty = url.isEmpty()
+
+ views.securityIndicator.visibility = if (!urlEmpty && indicators.contains(Indicators.SECURITY)) {
+ View.VISIBLE
+ } else {
+ View.GONE
+ }
+
+ views.trackingProtectionIndicator.visibility = if (
+ !urlEmpty && indicators.contains(Indicators.TRACKING_PROTECTION)
+ ) {
+ View.VISIBLE
+ } else {
+ View.GONE
+ }
+
+ views.emptyIndicator.visibility = if (urlEmpty && indicators.contains(Indicators.EMPTY)) {
+ View.VISIBLE
+ } else {
+ View.GONE
+ }
+
+ views.highlight.visibility = if (!urlEmpty && indicators.contains(Indicators.HIGHLIGHT)) {
+ setHighlight(toolbar.highlight)
+ } else {
+ View.GONE
+ }
+
+ updateSeparatorVisibility()
+ }
+
+ private fun updateSeparatorVisibility() {
+ views.separator.visibility = if (
+ displayIndicatorSeparator &&
+ views.trackingProtectionIndicator.isVisible &&
+ views.securityIndicator.isVisible
+ ) {
+ View.VISIBLE
+ } else {
+ View.GONE
+ }
+
+ // In Fenix (which is using a beta release of ConstraintLayout) we are seeing issues after
+ // early visibility changes. Children of the ConstraintLayout are not visible and have a
+ // size of 0x0 (even though they have a fixed size in the layout XML). Explicitly requesting
+ // to layout the ConstraintLayout fixes that issue. This may be a bug in the beta of
+ // ConstraintLayout and in the future we may be able to just remove this call.
+ rootView.requestLayout()
+ }
+
+ /**
+ * Updates the title to be displayed.
+ */
+ internal var title: String
+ get() = views.origin.title
+ set(value) {
+ views.origin.title = value
+ }
+
+ /**
+ * Updates the URL to be displayed.
+ */
+ internal var url: CharSequence = ""
+ set(value) {
+ field = value
+ views.origin.url = urlFormatter?.invoke(value) ?: value
+ updateIndicatorVisibility()
+ }
+
+ /**
+ * Sets the site's security icon as secure if true, else the regular globe.
+ */
+ internal var siteSecurity: Toolbar.SiteSecurity = Toolbar.SiteSecurity.INSECURE
+ set(value) {
+ field = value
+ updateSiteSecurityIcon()
+ }
+
+ private fun updateSiteSecurityIcon() {
+ @ColorInt val color = when (siteSecurity) {
+ Toolbar.SiteSecurity.INSECURE -> colors.securityIconInsecure
+ Toolbar.SiteSecurity.SECURE -> colors.securityIconSecure
+ }
+ if (color == Color.TRANSPARENT && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ views.securityIndicator.clearColorFilter()
+ } else {
+ views.securityIndicator.setColorFilter(color)
+ }
+
+ views.securityIndicator.siteSecurity = siteSecurity
+ }
+
+ internal fun setTrackingProtectionState(state: Toolbar.SiteTrackingProtection) {
+ views.trackingProtectionIndicator.siteTrackingProtection = state
+ updateSeparatorVisibility()
+ }
+
+ internal fun setHighlight(state: Toolbar.Highlight): Int {
+ if (!indicators.contains(Indicators.HIGHLIGHT)) {
+ return views.highlight.visibility
+ }
+
+ views.highlight.state = state
+
+ return views.highlight.visibility
+ }
+
+ internal fun onStop() {
+ views.menu.dismissMenu()
+ }
+
+ /**
+ * Updates the progress to be displayed.
+ *
+ * Accessibility note:
+ * ProgressBars can be made accessible to TalkBack by setting `android:accessibilityLiveRegion`.
+ * They will emit TYPE_VIEW_SELECTED events. TalkBack will format those events into percentage
+ * announcements along with a pitch-change earcon. We are not using that feature here for
+ * several reasons:
+ * 1. They are dispatched via a 200ms timeout. Since loading a page can be a short process,
+ * and since we only update the bar a handful of times, these events often never fire and
+ * they don't give the user a true sense of the progress.
+ * 2. The last 100% event is dispatched after the view is hidden. This prevents the event
+ * from being fired, so the user never gets a "complete" event.
+ * 3. Live regions in TalkBack have their role announced, so the user will hear
+ * "Progress bar, 25%". For a common feature like page load this is very chatty and unintuitive.
+ * 4. We can provide custom strings instead of the less useful percentage utterance, but
+ * TalkBack will not play an earcon if an event has its own text.
+ *
+ * For all those reasons, we are going another route here with a "loading" announcement
+ * when the progress bar first appears along with scroll events that have the same
+ * pitch-change earcon in TalkBack (although they are a bit louder). This gives a concise and
+ * consistent feedback to the user that they can depend on.
+ *
+ */
+ internal fun updateProgress(progress: Int) {
+ if (!views.progress.isVisible && progress > 0) {
+ // Loading has just started, make visible.
+ views.progress.visibility = View.VISIBLE
+
+ // Announce "loading" for accessibility if it has not been completed
+ if (progress < views.progress.max) {
+ views.progress.announceForAccessibility(
+ context.getString(R.string.mozac_browser_toolbar_progress_loading),
+ )
+ }
+ }
+
+ views.progress.progress = progress
+ val event = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+ AccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SCROLLED)
+ } else {
+ @Suppress("DEPRECATION")
+ AccessibilityEvent.obtain(AccessibilityEvent.TYPE_VIEW_SCROLLED)
+ }.apply {
+ scrollY = progress
+ maxScrollY = views.progress.max
+ }
+
+ if (context.isScreenReaderEnabled) {
+ views.progress.parent.requestSendAccessibilityEvent(views.progress, event)
+ }
+
+ if (progress >= views.progress.max) {
+ // Loading is done, hide progress bar.
+ views.progress.visibility = View.GONE
+ }
+ }
+
+ /**
+ * Declare that the actions (navigation actions, browser actions, page actions) have changed and
+ * should be updated if needed.
+ */
+ internal fun invalidateActions() {
+ views.menu.invalidateMenu()
+
+ views.browserActions.invalidateActions()
+ views.pageActions.invalidateActions()
+ views.navigationActions.invalidateActions()
+ }
+
+ /**
+ * Adds an action to be displayed on the right side of the toolbar (outside of the URL bounding
+ * box) in display mode.
+ *
+ * If there is not enough room to show all icons then some icons may be moved to an overflow
+ * menu.
+ *
+ * Related:
+ * https://developer.mozilla.org/en-US/Add-ons/WebExtensions/user_interface/Browser_action
+ */
+ internal fun addBrowserAction(action: Toolbar.Action) {
+ views.browserActions.addAction(action)
+ }
+
+ /**
+ * Removes a previously added browser action (see [addBrowserAction]). If the provided
+ * action was never added, this method has no effect.
+ *
+ * @param action the action to remove.
+ */
+ internal fun removeBrowserAction(action: Toolbar.Action) {
+ views.browserActions.removeAction(action)
+ }
+
+ /**
+ * Removes a previously added page action (see [addBrowserAction]). If the provided
+ * action was never added, this method has no effect.
+ *
+ * @param action the action to remove.
+ */
+ internal fun removePageAction(action: Toolbar.Action) {
+ views.pageActions.removeAction(action)
+ }
+
+ /**
+ * Adds an action to be displayed on the right side of the URL in display mode.
+ *
+ * Related:
+ * https://developer.mozilla.org/en-US/Add-ons/WebExtensions/user_interface/Page_actions
+ */
+ internal fun addPageAction(action: Toolbar.Action) {
+ views.pageActions.addAction(action)
+ }
+
+ /**
+ * Adds an action to be display on the far left side of the toolbar. This area is usually used
+ * on larger devices for navigation actions like "back" and "forward".
+ */
+ internal fun addNavigationAction(action: Toolbar.Action) {
+ views.navigationActions.addAction(action)
+ }
+
+ /**
+ * Removes a previously added navigation action (see [addNavigationAction]). If the provided
+ * action was never added, this method has no effect.
+ *
+ * @param action the action to remove.
+ */
+ internal fun removeNavigationAction(action: Toolbar.Action) {
+ views.navigationActions.removeAction(action)
+ }
+
+ /**
+ * Hides the menu button in display mode.
+ */
+ fun hideMenuButton() {
+ views.menu.setShouldBeHidden(true)
+ }
+
+ /**
+ * Shows the menu button in display mode.
+ */
+ internal fun showMenuButton() {
+ views.menu.setShouldBeHidden(false)
+ }
+
+ /**
+ * Sets the horizontal padding.
+ */
+ fun setHorizontalPadding(horizontalPadding: Int) {
+ rootView.setPadding(horizontalPadding, 0, horizontalPadding, 0)
+ }
+
+ /**
+ * Hides the page action separator in display mode.
+ */
+ fun hidePageActionSeparator() {
+ views.pageActionSeparator.isVisible = false
+ }
+
+ /**
+ * Shows the page action separator in display mode.
+ */
+ internal fun showPageActionSeparator() {
+ views.pageActionSeparator.isVisible = true
+ }
+}
+
+/**
+ * Internal holder for view references.
+ */
+@Suppress("LongParameterList")
+internal class DisplayToolbarViews(
+ val browserActions: ActionContainer,
+ val pageActions: ActionContainer,
+ val navigationActions: ActionContainer,
+ val background: ImageView,
+ val separator: ImageView,
+ val pageActionSeparator: View,
+ val emptyIndicator: ImageView,
+ val menu: MenuButton,
+ val securityIndicator: SiteSecurityIconView,
+ val trackingProtectionIndicator: TrackingProtectionIconView,
+ val origin: OriginView,
+ val progress: ProgressBar,
+ val highlight: HighlightView,
+)
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/DisplayToolbarView.kt b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/DisplayToolbarView.kt
new file mode 100644
index 0000000000..5bd684a07e
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/DisplayToolbarView.kt
@@ -0,0 +1,51 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar2.display
+
+import android.content.Context
+import android.graphics.Canvas
+import android.util.AttributeSet
+import android.view.View
+import android.widget.ImageView
+import androidx.constraintlayout.widget.ConstraintLayout
+import mozilla.components.browser.toolbar2.R
+
+/**
+ * Custom ConstraintLayout for DisplayToolbar that allows us to draw ripple backgrounds on the toolbar
+ * by setting a background to transparent.
+ */
+class DisplayToolbarView @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0,
+) : ConstraintLayout(context, attrs, defStyleAttr) {
+ init {
+ // Forcing transparent background so that draw methods will get called and ripple effect
+ // for children will be drawn on this layout.
+ setBackgroundColor(0x00000000)
+ }
+
+ lateinit var backgroundView: ImageView
+
+ override fun onFinishInflate() {
+ backgroundView = findViewById(R.id.mozac_browser_toolbar_background)
+ backgroundView.visibility = View.INVISIBLE
+
+ super.onFinishInflate()
+ }
+
+ // Overriding draw instead of onDraw since we want to draw the background before the actual
+ // (transparent) background (with a ripple effect) is drawn.
+ override fun draw(canvas: Canvas) {
+ canvas.save()
+ canvas.translate(backgroundView.x, backgroundView.y)
+
+ backgroundView.drawable?.draw(canvas)
+
+ canvas.restore()
+
+ super.draw(canvas)
+ }
+}
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/HighlightView.kt b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/HighlightView.kt
new file mode 100644
index 0000000000..240da038ec
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/HighlightView.kt
@@ -0,0 +1,91 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar2.display
+
+import android.content.Context
+import android.graphics.drawable.Drawable
+import android.util.AttributeSet
+import androidx.annotation.VisibleForTesting
+import androidx.appcompat.content.res.AppCompatResources
+import androidx.appcompat.widget.AppCompatImageView
+import androidx.core.view.isVisible
+import mozilla.components.browser.toolbar2.R
+import mozilla.components.concept.toolbar.Toolbar.Highlight
+import mozilla.components.concept.toolbar.Toolbar.Highlight.NONE
+import mozilla.components.concept.toolbar.Toolbar.Highlight.PERMISSIONS_CHANGED
+
+/**
+ * Internal widget to display a dot notification.
+ */
+internal class HighlightView @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0,
+) : AppCompatImageView(context, attrs, defStyleAttr) {
+
+ init {
+ visibility = GONE
+ }
+
+ var state: Highlight = NONE
+ set(value) {
+ if (value != field) {
+ field = value
+ updateIcon()
+ }
+ }
+
+ @VisibleForTesting
+ internal var highlightTint: Int? = null
+
+ private var highlightIcon: Drawable =
+ requireNotNull(AppCompatResources.getDrawable(context, DEFAULT_ICON))
+
+ fun setTint(tint: Int) {
+ highlightTint = tint
+ setColorFilter(tint)
+ }
+
+ fun setIcon(icons: Drawable) {
+ this.highlightIcon = icons
+
+ updateIcon()
+ }
+
+ @Synchronized
+ @VisibleForTesting
+ internal fun updateIcon() {
+ val update = state.toUpdate()
+
+ isVisible = update.visible
+
+ contentDescription = if (update.contentDescription != null) {
+ context.getString(update.contentDescription)
+ } else {
+ null
+ }
+
+ highlightTint?.let { setColorFilter(it) }
+ setImageDrawable(update.drawable)
+ }
+
+ companion object {
+ val DEFAULT_ICON = R.drawable.mozac_dot_notification
+ }
+
+ private fun Highlight.toUpdate(): Update = when (this) {
+ PERMISSIONS_CHANGED -> Update(
+ highlightIcon,
+ R.string.mozac_browser_toolbar_content_description_autoplay_blocked,
+ true,
+ )
+
+ NONE -> Update(
+ null,
+ null,
+ false,
+ )
+ }
+}
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/MenuButton.kt b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/MenuButton.kt
new file mode 100644
index 0000000000..6c2a919d00
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/MenuButton.kt
@@ -0,0 +1,106 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar2.display
+
+import androidx.annotation.ColorInt
+import androidx.annotation.VisibleForTesting
+import androidx.core.view.isVisible
+import mozilla.components.browser.menu.BrowserMenuBuilder
+import mozilla.components.browser.menu.ext.asCandidateList
+import mozilla.components.browser.menu.ext.getHighlight
+import mozilla.components.browser.toolbar2.facts.emitOpenMenuFact
+import mozilla.components.concept.menu.MenuController
+
+internal class MenuButton(
+ @get:VisibleForTesting internal val impl: mozilla.components.browser.menu.view.MenuButton,
+) {
+
+ init {
+ impl.isVisible = false
+ impl.register(
+ object : mozilla.components.concept.menu.MenuButton.Observer {
+ override fun onShow() {
+ emitOpenMenuFact(impl.menuBuilder?.extras)
+ }
+ },
+ )
+ }
+
+ /**
+ * Reference to the [MenuController].
+ * If present, [menuBuilder] will be ignored.
+ */
+ var menuController: MenuController?
+ get() = impl.menuController
+ set(value) {
+ impl.menuController = value
+ impl.isVisible = shouldBeVisible()
+ }
+
+ /**
+ * Legacy [BrowserMenuBuilder] reference.
+ * Used to build the menu.
+ */
+ var menuBuilder: BrowserMenuBuilder?
+ get() = impl.menuBuilder
+ set(value) {
+ impl.menuBuilder = value
+ impl.isVisible = shouldBeVisible()
+ }
+
+ /**
+ * Declare that the menu items should be updated if needed.
+ * This should only be used once a [menuBuilder] is set.
+ * To update items in the [menuController], call [MenuController.submitList] directly.
+ */
+ fun invalidateMenu() {
+ val menuController = menuController
+ if (menuController != null) {
+ // Convert the menu builder items into a menu candidate list,
+ // if the menu builder is present
+ menuBuilder?.items?.let { items ->
+ val list = items.asCandidateList(impl.context)
+ menuController.submitList(list)
+ }
+ } else {
+ // Invalidate the BrowserMenu
+ impl.invalidateBrowserMenu()
+ impl.setHighlight(menuBuilder?.items?.getHighlight())
+ }
+ }
+
+ fun dismissMenu() {
+ val menuController = menuController
+ if (menuController != null) {
+ // Use the controller to dismiss the menu
+ menuController.dismiss()
+ } else {
+ // Use the button to dismiss the legacy menu
+ impl.dismissMenu()
+ }
+ }
+
+ /**
+ * Sets a lambda to be invoked when the menu is dismissed
+ */
+ @Suppress("Deprecation")
+ fun setMenuDismissAction(onDismiss: () -> Unit) {
+ impl.onDismiss = onDismiss
+ }
+
+ fun setColorFilter(@ColorInt color: Int) = impl.setColorFilter(color)
+
+ /**
+ * Hides the menu button.
+ *
+ * @param shouldBeHidden A [Boolean] that determines the visibility of the menu button.
+ */
+ fun setShouldBeHidden(shouldBeHidden: Boolean) {
+ impl.isVisible = !shouldBeHidden && shouldBeVisible()
+ }
+
+ @VisibleForTesting
+ internal fun shouldBeVisible() = impl.menuBuilder != null || impl.menuController != null
+}
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/OriginView.kt b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/OriginView.kt
new file mode 100644
index 0000000000..3cd70d0dc9
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/OriginView.kt
@@ -0,0 +1,198 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar2.display
+
+import android.animation.LayoutTransition
+import android.content.Context
+import android.graphics.Typeface
+import android.util.AttributeSet
+import android.util.TypedValue
+import android.view.Gravity
+import android.view.View
+import android.widget.LinearLayout
+import android.widget.TextView
+import androidx.annotation.VisibleForTesting
+import androidx.core.view.isVisible
+import mozilla.components.browser.toolbar2.BrowserToolbar
+import mozilla.components.browser.toolbar2.R
+
+private const val TITLE_VIEW_WEIGHT = 5.7f
+private const val URL_VIEW_WEIGHT = 4.3f
+
+/**
+ * View displaying the URL and optionally the title of a website.
+ */
+internal class OriginView @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0,
+) : LinearLayout(context, attrs, defStyleAttr) {
+ internal lateinit var toolbar: BrowserToolbar
+
+ private val textSizeUrlNormal = context.resources.getDimension(
+ R.dimen.mozac_browser_toolbar_url_textsize,
+ )
+ private val textSizeUrlWithTitle = context.resources.getDimension(
+ R.dimen.mozac_browser_toolbar_url_with_title_textsize,
+ )
+ private val textSizeTitle = context.resources.getDimension(
+ R.dimen.mozac_browser_toolbar_title_textsize,
+ )
+
+ @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+ internal val urlView = TextView(context).apply {
+ id = R.id.mozac_browser_toolbar_url_view
+ setTextSize(TypedValue.COMPLEX_UNIT_PX, textSizeUrlNormal)
+ gravity = Gravity.CENTER_VERTICAL
+
+ setSingleLine()
+ isClickable = true
+ isFocusable = true
+
+ setOnClickListener {
+ if (onUrlClicked()) {
+ toolbar.editMode()
+ }
+ }
+
+ val fadingEdgeSize = resources.getDimensionPixelSize(
+ R.dimen.mozac_browser_toolbar_url_fading_edge_size,
+ )
+
+ setFadingEdgeLength(fadingEdgeSize)
+ isHorizontalFadingEdgeEnabled = fadingEdgeSize > 0
+ }
+
+ @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+ internal val titleView = TextView(context).apply {
+ id = R.id.mozac_browser_toolbar_title_view
+ visibility = View.GONE
+
+ setTextSize(
+ TypedValue.COMPLEX_UNIT_PX,
+ textSizeTitle,
+ )
+ gravity = Gravity.CENTER_VERTICAL
+
+ setSingleLine()
+
+ val fadingEdgeSize = resources.getDimensionPixelSize(
+ R.dimen.mozac_browser_toolbar_url_fading_edge_size,
+ )
+
+ setFadingEdgeLength(fadingEdgeSize)
+ isHorizontalFadingEdgeEnabled = fadingEdgeSize > 0
+ }
+
+ init {
+ orientation = VERTICAL
+
+ addView(
+ titleView,
+ LayoutParams(
+ LayoutParams.MATCH_PARENT,
+ 0,
+ TITLE_VIEW_WEIGHT,
+ ),
+ )
+
+ addView(
+ urlView,
+ LayoutParams(
+ LayoutParams.MATCH_PARENT,
+ 0,
+ URL_VIEW_WEIGHT,
+ ),
+ )
+
+ layoutTransition = LayoutTransition()
+ }
+
+ internal var title: String
+ get() = titleView.text.toString()
+ set(value) {
+ titleView.text = value
+
+ titleView.isVisible = value.isNotEmpty()
+
+ urlView.setTextSize(
+ TypedValue.COMPLEX_UNIT_PX,
+ if (value.isNotEmpty()) {
+ textSizeUrlWithTitle
+ } else {
+ textSizeUrlNormal
+ },
+ )
+ }
+
+ internal var onUrlClicked: () -> Boolean = { true }
+
+ fun setOnUrlLongClickListener(handler: ((View) -> Boolean)?) {
+ urlView.isLongClickable = true
+ titleView.isLongClickable = true
+
+ urlView.setOnLongClickListener(handler)
+ titleView.setOnLongClickListener(handler)
+ }
+
+ internal var url: CharSequence
+ get() = urlView.text
+ set(value) { urlView.text = value }
+
+ /**
+ * Sets the colour of the text to be displayed when the URL of the toolbar is empty.
+ */
+ var hintColor: Int
+ get() = urlView.currentHintTextColor
+ set(value) {
+ urlView.setHintTextColor(value)
+ }
+
+ /**
+ * Sets the text to be displayed when the URL of the toolbar is empty.
+ */
+ var hint: String
+ get() = urlView.hint.toString()
+ set(value) { urlView.hint = value }
+
+ /**
+ * Sets the colour of the text for title displayed in the toolbar.
+ */
+ var titleColor: Int
+ get() = urlView.currentTextColor
+ set(value) { titleView.setTextColor(value) }
+
+ /**
+ * Sets the colour of the text for the URL/search term displayed in the toolbar.
+ */
+ var textColor: Int
+ get() = urlView.currentTextColor
+ set(value) { urlView.setTextColor(value) }
+
+ /**
+ * Sets the size of the text for the title displayed in the toolbar.
+ */
+ var titleTextSize: Float
+ get() = titleView.textSize
+ set(value) { titleView.textSize = value }
+
+ /**
+ * Sets the size of the text for the URL/search term displayed in the toolbar.
+ */
+ var textSize: Float
+ get() = urlView.textSize
+ set(value) {
+ urlView.textSize = value
+ }
+
+ /**
+ * Sets the typeface of the text for the URL/search term displayed in the toolbar.
+ */
+ var typeface: Typeface
+ get() = urlView.typeface
+ set(value) {
+ urlView.typeface = value
+ }
+}
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/SiteSecurityIconView.kt b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/SiteSecurityIconView.kt
new file mode 100644
index 0000000000..6ebde5a885
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/SiteSecurityIconView.kt
@@ -0,0 +1,48 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar2.display
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.View
+import androidx.appcompat.widget.AppCompatImageView
+import mozilla.components.browser.toolbar2.R
+import mozilla.components.concept.toolbar.Toolbar.SiteSecurity
+
+/**
+ * Internal widget to display the different icons of site security, relies on the
+ * [SiteSecurity] state of each page.
+ */
+internal class SiteSecurityIconView @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0,
+) : AppCompatImageView(context, attrs, defStyleAttr) {
+
+ // We allow null here because in some situations, onCreateDrawableState is getting called from
+ // the super() constructor on the View class, way before this class properties get
+ // initialized causing a null pointer exception.
+ // See for more details: https://github.com/mozilla-mobile/android-components/issues/4058
+ var siteSecurity: SiteSecurity? = SiteSecurity.INSECURE
+ set(value) {
+ if (value != field) {
+ field = value
+ refreshDrawableState()
+ }
+
+ field = value
+ }
+
+ override fun onCreateDrawableState(extraSpace: Int): IntArray {
+ return when (siteSecurity) {
+ SiteSecurity.INSECURE, null -> super.onCreateDrawableState(extraSpace)
+ SiteSecurity.SECURE -> {
+ val drawableState = super.onCreateDrawableState(extraSpace + 1)
+ View.mergeDrawableStates(drawableState, intArrayOf(R.attr.state_site_secure))
+ drawableState
+ }
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/TrackingProtectionIconView.kt b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/TrackingProtectionIconView.kt
new file mode 100644
index 0000000000..654f4edadb
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/display/TrackingProtectionIconView.kt
@@ -0,0 +1,135 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar2.display
+
+import android.content.Context
+import android.graphics.drawable.Animatable
+import android.graphics.drawable.Drawable
+import android.util.AttributeSet
+import androidx.annotation.StringRes
+import androidx.annotation.VisibleForTesting
+import androidx.appcompat.content.res.AppCompatResources
+import androidx.appcompat.widget.AppCompatImageView
+import androidx.core.view.isVisible
+import mozilla.components.browser.toolbar2.R
+import mozilla.components.concept.toolbar.Toolbar.SiteTrackingProtection
+import mozilla.components.concept.toolbar.Toolbar.SiteTrackingProtection.OFF_FOR_A_SITE
+import mozilla.components.concept.toolbar.Toolbar.SiteTrackingProtection.OFF_GLOBALLY
+import mozilla.components.concept.toolbar.Toolbar.SiteTrackingProtection.ON_NO_TRACKERS_BLOCKED
+import mozilla.components.concept.toolbar.Toolbar.SiteTrackingProtection.ON_TRACKERS_BLOCKED
+
+/**
+ * Internal widget to display the different icons of tracking protection, relies on the
+ * [SiteTrackingProtection] state of each page.
+ */
+internal class TrackingProtectionIconView @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0,
+) : AppCompatImageView(context, attrs, defStyleAttr) {
+ var siteTrackingProtection: SiteTrackingProtection? = null
+ set(value) {
+ if (value != field) {
+ field = value
+ updateIcon()
+ }
+ }
+
+ @VisibleForTesting
+ internal var trackingProtectionTint: Int? = null
+
+ private var iconOnNoTrackersBlocked: Drawable =
+ requireNotNull(AppCompatResources.getDrawable(context, DEFAULT_ICON_ON_NO_TRACKERS_BLOCKED))
+ private var iconOnTrackersBlocked: Drawable =
+ requireNotNull(AppCompatResources.getDrawable(context, DEFAULT_ICON_ON_TRACKERS_BLOCKED))
+ private var disabledForSite: Drawable =
+ requireNotNull(AppCompatResources.getDrawable(context, DEFAULT_ICON_OFF_FOR_A_SITE))
+
+ fun setTint(tint: Int) {
+ trackingProtectionTint = tint
+ }
+
+ fun setIcons(
+ iconOnNoTrackersBlocked: Drawable,
+ iconOnTrackersBlocked: Drawable,
+ disabledForSite: Drawable,
+ ) {
+ this.iconOnNoTrackersBlocked = iconOnNoTrackersBlocked
+ this.iconOnTrackersBlocked = iconOnTrackersBlocked
+ this.disabledForSite = disabledForSite
+
+ updateIcon()
+ }
+
+ @Synchronized
+ private fun updateIcon() {
+ val update = siteTrackingProtection?.toUpdate() ?: return
+
+ isVisible = update.visible
+
+ contentDescription = if (update.contentDescription != null) {
+ context.getString(update.contentDescription)
+ } else {
+ null
+ }
+
+ setOrClearColorFilter(update.drawable)
+ setImageDrawable(update.drawable)
+
+ if (update.drawable is Animatable) {
+ update.drawable.start()
+ }
+ }
+
+ @VisibleForTesting
+ internal fun setOrClearColorFilter(drawable: Drawable?) {
+ if (drawable is Animatable) {
+ clearColorFilter()
+ } else {
+ trackingProtectionTint?.let { setColorFilter(it) }
+ }
+ }
+
+ companion object {
+ val DEFAULT_ICON_ON_NO_TRACKERS_BLOCKED =
+ R.drawable.mozac_ic_tracking_protection_on_no_trackers_blocked
+ val DEFAULT_ICON_ON_TRACKERS_BLOCKED =
+ R.drawable.mozac_ic_tracking_protection_on_trackers_blocked
+ val DEFAULT_ICON_OFF_FOR_A_SITE =
+ R.drawable.mozac_ic_tracking_protection_off_for_a_site
+ }
+
+ private fun SiteTrackingProtection.toUpdate(): Update = when (this) {
+ ON_NO_TRACKERS_BLOCKED -> Update(
+ iconOnNoTrackersBlocked,
+ R.string.mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked,
+ true,
+ )
+
+ ON_TRACKERS_BLOCKED -> Update(
+ iconOnTrackersBlocked,
+ R.string.mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1,
+ true,
+ )
+
+ OFF_FOR_A_SITE -> Update(
+ disabledForSite,
+ R.string.mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1,
+ true,
+ )
+
+ OFF_GLOBALLY -> Update(
+ null,
+ null,
+ false,
+ )
+ }
+}
+
+internal class Update(
+ val drawable: Drawable?,
+ @StringRes val contentDescription: Int?,
+ val visible: Boolean,
+)
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/edit/EditToolbar.kt b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/edit/EditToolbar.kt
new file mode 100644
index 0000000000..2595ab66e2
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/edit/EditToolbar.kt
@@ -0,0 +1,415 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar2.edit
+
+import android.content.Context
+import android.graphics.Typeface
+import android.graphics.drawable.Drawable
+import android.os.Build
+import android.view.KeyEvent
+import android.view.View
+import android.widget.ImageView
+import androidx.annotation.ColorInt
+import androidx.annotation.VisibleForTesting
+import androidx.annotation.VisibleForTesting.Companion.PRIVATE
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.constraintlayout.widget.ConstraintSet
+import androidx.core.content.ContextCompat
+import androidx.core.view.inputmethod.EditorInfoCompat
+import androidx.core.view.isVisible
+import kotlinx.coroutines.CoroutineExceptionHandler
+import kotlinx.coroutines.SupervisorJob
+import kotlinx.coroutines.asCoroutineDispatcher
+import mozilla.components.browser.toolbar2.AsyncFilterListener
+import mozilla.components.browser.toolbar2.BrowserToolbar
+import mozilla.components.browser.toolbar2.R
+import mozilla.components.browser.toolbar2.facts.emitCommitFact
+import mozilla.components.browser.toolbar2.internal.ActionContainer
+import mozilla.components.concept.toolbar.AutocompleteDelegate
+import mozilla.components.concept.toolbar.Toolbar
+import mozilla.components.support.base.log.logger.Logger
+import mozilla.components.support.base.utils.NamedThreadFactory
+import mozilla.components.support.ktx.android.view.showKeyboard
+import mozilla.components.ui.autocomplete.InlineAutocompleteEditText
+import java.util.concurrent.Executors
+import mozilla.components.ui.colors.R as colorsR
+
+private const val AUTOCOMPLETE_QUERY_THREADS = 3
+
+/**
+ * Sub-component of the browser toolbar responsible for allowing the user to edit the URL ("edit mode").
+ *
+ * Structure:
+ * +------+--------------------+---------------------------+------------------+------+
+ * | icon | edit actions start | url | edit actions end | exit |
+ * +------+--------------------+---------------------------+------------------+------+
+ *
+ * - icon: Optional icon that will be shown in front of the URL.
+ * - edit actions start: Optional action icons injected by other components in front of the URL
+ * (e.g. search engines).
+ * - url: Editable URL of the currently displayed website.
+ * - edit actions end: Optional action icons injected by other components after the URL
+ * (e.g. barcode scanner).
+ * - exit: Button that switches back to display mode or invoke an app-defined callback.
+ */
+@Suppress("LargeClass")
+class EditToolbar internal constructor(
+ context: Context,
+ private val toolbar: BrowserToolbar,
+ internal val rootView: View,
+) {
+ private val logger = Logger("EditToolbar")
+
+ /**
+ * Data class holding the customizable colors in "edit mode".
+ *
+ * @property clear Color tint used for the "cancel" icon to leave "edit mode".
+ * @property icon Color tint of the icon displayed in front of the URL.
+ * @property hint Text color of the hint shown when the URL field is empty.
+ * @property text Text color of the URL.
+ * @property suggestionBackground The background color used for autocomplete suggestions.
+ * @property suggestionForeground The foreground color used for autocomplete suggestions.
+ * @property pageActionSeparator Color tint of separator dividing page actions.
+ */
+ data class Colors(
+ @ColorInt val clear: Int,
+ @ColorInt val erase: Int,
+ @ColorInt val icon: Int?,
+ @ColorInt val hint: Int,
+ @ColorInt val text: Int,
+ @ColorInt val suggestionBackground: Int,
+ @ColorInt val suggestionForeground: Int?,
+ @ColorInt val pageActionSeparator: Int,
+ )
+
+ private val autocompleteDispatcher = SupervisorJob() +
+ Executors.newFixedThreadPool(
+ AUTOCOMPLETE_QUERY_THREADS,
+ NamedThreadFactory("EditToolbar"),
+ ).asCoroutineDispatcher() +
+ CoroutineExceptionHandler { _, throwable ->
+ logger.error("Error while processing autocomplete input", throwable)
+ }
+
+ @VisibleForTesting(otherwise = PRIVATE)
+ internal val views = EditToolbarViews(
+ background = rootView.findViewById(R.id.mozac_browser_toolbar_background),
+ icon = rootView.findViewById(R.id.mozac_browser_toolbar_edit_icon),
+ editActionsStart = rootView.findViewById(R.id.mozac_browser_toolbar_edit_actions_start),
+ editActionsEnd = rootView.findViewById(R.id.mozac_browser_toolbar_edit_actions_end),
+ clear = rootView.findViewById<ImageView>(R.id.mozac_browser_toolbar_clear_view).apply {
+ setOnClickListener {
+ onClear()
+ }
+ },
+ erase = rootView.findViewById<ImageView>(R.id.mozac_browser_toolbar_erase_view).apply {
+ setOnClickListener {
+ onClear()
+ }
+ },
+ url = rootView.findViewById<InlineAutocompleteEditText>(
+ R.id.mozac_browser_toolbar_edit_url_view,
+ ).apply {
+ setOnCommitListener {
+ // We emit the fact before notifying the listener because otherwise the listener may cause a focus
+ // change which may reset the autocomplete state that we want to report here.
+ emitCommitFact(autocompleteResult)
+
+ toolbar.onUrlEntered(text.toString())
+ }
+
+ setOnTextChangeListener { text, _ ->
+ onTextChanged(text)
+ }
+
+ setUrlGoneMargin(
+ ConstraintSet.END,
+ context.resources.getDimensionPixelSize(R.dimen.mozac_browser_toolbar_url_gone_margin_end),
+ )
+
+ setOnDispatchKeyEventPreImeListener { event ->
+ if (event?.keyCode == KeyEvent.KEYCODE_BACK && editListener?.onCancelEditing() != false) {
+ toolbar.displayMode()
+ }
+ false
+ }
+ },
+ pageActionSeparator = rootView.findViewById(R.id.mozac_browser_action_separator),
+ )
+
+ /**
+ * Customizable colors in "edit mode".
+ */
+ var colors: Colors = Colors(
+ clear = ContextCompat.getColor(context, colorsR.color.photonWhite),
+ erase = ContextCompat.getColor(context, colorsR.color.photonWhite),
+ icon = null,
+ hint = views.url.currentHintTextColor,
+ text = views.url.currentTextColor,
+ suggestionBackground = views.url.autoCompleteBackgroundColor,
+ suggestionForeground = views.url.autoCompleteForegroundColor,
+ pageActionSeparator = ContextCompat.getColor(context, colorsR.color.photonGrey80),
+ )
+ set(value) {
+ field = value
+
+ views.clear.setColorFilter(value.clear)
+
+ views.erase.setColorFilter(value.erase)
+
+ if (value.icon != null) {
+ views.icon.setColorFilter(value.icon)
+ }
+
+ views.url.setHintTextColor(value.hint)
+ views.url.setTextColor(value.text)
+ views.url.autoCompleteBackgroundColor = value.suggestionBackground
+ views.url.autoCompleteForegroundColor = value.suggestionForeground
+ views.pageActionSeparator.setBackgroundColor(value.pageActionSeparator)
+ }
+
+ /**
+ * Sets the background that will be drawn behind the URL, icon and edit actions.
+ */
+ fun setUrlBackground(background: Drawable?) {
+ views.background.setImageDrawable(background)
+ }
+
+ /**
+ * Sets an icon that will be drawn in front of the URL.
+ */
+ fun setIcon(icon: Drawable, contentDescription: String) {
+ views.icon.setImageDrawable(icon)
+ views.icon.contentDescription = contentDescription
+ views.icon.visibility = View.VISIBLE
+ }
+
+ /**
+ * Sets a click listener on the icon view
+ */
+ fun setIconClickListener(listener: ((View) -> Unit)?) {
+ views.icon.setOnClickListener(listener)
+ }
+
+ /**
+ * Sets the text to be displayed when the URL of the toolbar is empty.
+ */
+ var hint: String
+ get() = views.url.hint.toString()
+ set(value) { views.url.hint = value }
+
+ /**
+ * Sets the size of the text for the URL/search term displayed in the toolbar.
+ */
+ var textSize: Float
+ get() = views.url.textSize
+ set(value) {
+ views.url.textSize = value
+ }
+
+ /**
+ * Sets the typeface of the text for the URL/search term displayed in the toolbar.
+ */
+ var typeface: Typeface
+ get() = views.url.typeface
+ set(value) { views.url.typeface = value }
+
+ /**
+ * Sets a listener to be invoked when focus of the URL input view (in edit mode) changed.
+ */
+ fun setOnEditFocusChangeListener(listener: (Boolean) -> Unit) {
+ views.url.onFocusChangeListener = View.OnFocusChangeListener { _, hasFocus ->
+ listener.invoke(hasFocus)
+ }
+ }
+
+ /**
+ * Focuses the url input field and shows the virtual keyboard if needed.
+ */
+ fun focus() {
+ views.url.run {
+ if (!hasFocus()) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
+ // On Android 14 this needs to be called before requestFocus() in order to receive focus.
+ isFocusableInTouchMode = true
+ }
+ requestFocus()
+ showKeyboard()
+ }
+ }
+ }
+
+ internal fun stopEditing() {
+ editListener?.onStopEditing()
+ }
+
+ internal fun startEditing() {
+ editListener?.onStartEditing()
+ }
+
+ internal var editListener: Toolbar.OnEditListener? = null
+
+ internal fun setAutocompleteListener(filter: suspend (String, AutocompleteDelegate) -> Unit) {
+ views.url.setOnFilterListener(
+ AsyncFilterListener(views.url, autocompleteDispatcher, filter),
+ )
+ }
+
+ /**
+ * Attempt to restart the autocomplete functionality with the current user input.
+ */
+ internal fun refreshAutocompleteSuggestion() {
+ views.url.refreshAutocompleteSuggestions()
+ }
+
+ internal fun invalidateActions() {
+ views.editActionsStart.invalidateActions()
+ views.editActionsEnd.invalidateActions()
+ }
+
+ internal fun addEditActionStart(action: Toolbar.Action) {
+ views.editActionsStart.addAction(action)
+ }
+
+ internal fun addEditActionEnd(action: Toolbar.Action) {
+ views.editActionsEnd.addAction(action)
+ }
+
+ internal fun removeEditActionEnd(action: Toolbar.Action) {
+ views.editActionsEnd.removeAction(action)
+ }
+
+ /**
+ * Updates the text of the URL input field. Note: this does *not* affect the value of url itself
+ * and is only a visual change
+ */
+ fun updateUrl(
+ url: String,
+ shouldAutoComplete: Boolean = false,
+ shouldHighlight: Boolean = false,
+ shouldAppend: Boolean = false,
+ ): String {
+ if (shouldAppend) {
+ views.url.appendText(url, shouldAutoComplete)
+ } else {
+ views.url.setText(url, shouldAutoComplete)
+ }
+ views.clear.isVisible = url.isNotBlank() && !toolbar.isNavBarEnabled
+ views.erase.isVisible = url.isNotBlank() && toolbar.isNavBarEnabled
+
+ if (shouldHighlight) {
+ views.url.setSelection(views.url.text.length - url.length, views.url.text.length)
+ }
+ return views.url.text.toString()
+ }
+
+ /**
+ * Select the entire text in the URL input field.
+ */
+ internal fun selectAll() {
+ views.url.selectAll()
+ }
+
+ /**
+ * Places the cursor at the end of the URL input field.
+ */
+ internal fun selectEnd() {
+ views.url.setSelection(views.url.text.length)
+ }
+
+ /**
+ * Applies the given search terms for further editing, requesting new suggestions along the way.
+ */
+ internal fun editSuggestion(searchTerms: String) {
+ updateUrl(searchTerms)
+ views.url.setSelection(views.url.text.length)
+ focus()
+
+ editListener?.onTextChanged(searchTerms)
+ }
+
+ /**
+ * Sets/gets private mode.
+ *
+ * In private mode the IME should not update any personalized data such as typing history and personalized language
+ * model based on what the user typed.
+ */
+ internal var private: Boolean
+ get() = (views.url.imeOptions and EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING) != 0
+ set(value) {
+ views.url.imeOptions = if (value) {
+ views.url.imeOptions or EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING
+ } else {
+ views.url.imeOptions and (EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING.inv())
+ }
+ }
+
+ private fun onClear() {
+ // We set text to an empty string instead of using clear to avoid #3612.
+ views.url.setText("")
+ editListener?.onInputCleared()
+ }
+
+ private fun setUrlGoneMargin(anchor: Int, dimen: Int) {
+ val set = ConstraintSet()
+ val container = rootView.findViewById<ConstraintLayout>(
+ R.id.mozac_browser_toolbar_container,
+ )
+ set.clone(container)
+ set.setGoneMargin(R.id.mozac_browser_toolbar_edit_url_view, anchor, dimen)
+ set.applyTo(container)
+ }
+
+ private fun onTextChanged(text: String) {
+ views.clear.isVisible = text.isNotBlank() && !toolbar.isNavBarEnabled
+ views.erase.isVisible = text.isNotBlank() && toolbar.isNavBarEnabled
+ views.editActionsEnd.autoHideAction(text.isEmpty())
+
+ /*
+ We use margin_gone instead of margin to take into account both the actionContainer(which in
+ most cases is gone) and the clear button.
+ */
+ if (text.isNotBlank()) {
+ setUrlGoneMargin(ConstraintSet.END, 0)
+ } else {
+ setUrlGoneMargin(
+ ConstraintSet.END,
+ rootView.resources.getDimensionPixelSize(
+ R.dimen.mozac_browser_toolbar_url_gone_margin_end,
+ ),
+ )
+ }
+ editListener?.onTextChanged(text)
+ }
+
+ /**
+ * Hides the page action separator in edit mode.
+ */
+ fun hidePageActionSeparator() {
+ views.pageActionSeparator.isVisible = false
+ }
+
+ /**
+ * Shows the page action separator in edit mode.
+ */
+ fun showPageActionSeparator() {
+ views.pageActionSeparator.isVisible = true
+ }
+}
+
+/**
+ * Internal holder for view references.
+ */
+@Suppress("LongParameterList")
+internal class EditToolbarViews(
+ val background: ImageView,
+ val icon: ImageView,
+ val editActionsStart: ActionContainer,
+ val editActionsEnd: ActionContainer,
+ val clear: ImageView,
+ val erase: ImageView,
+ val url: InlineAutocompleteEditText,
+ val pageActionSeparator: View,
+)
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/facts/ToolbarFacts.kt b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/facts/ToolbarFacts.kt
new file mode 100644
index 0000000000..06f09ea18d
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/facts/ToolbarFacts.kt
@@ -0,0 +1,60 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar2.facts
+
+import mozilla.components.support.base.Component
+import mozilla.components.support.base.facts.Action
+import mozilla.components.support.base.facts.Fact
+import mozilla.components.support.base.facts.collect
+import mozilla.components.ui.autocomplete.InlineAutocompleteEditText
+
+/**
+ * Facts emitted for telemetry related to [ToolbarFeature]
+ */
+class ToolbarFacts {
+ /**
+ * Items that specify which portion of the [ToolbarFeature] was interacted with
+ */
+ object Items {
+ const val TOOLBAR = "toolbar"
+ const val MENU = "menu"
+ }
+}
+
+private fun emitToolbarFact(
+ action: Action,
+ item: String,
+ value: String? = null,
+ metadata: Map<String, Any>? = null,
+) {
+ Fact(
+ Component.BROWSER_TOOLBAR,
+ action,
+ item,
+ value,
+ metadata,
+ ).collect()
+}
+
+internal fun emitOpenMenuFact(extras: Map<String, Any>?) {
+ emitToolbarFact(Action.CLICK, ToolbarFacts.Items.MENU, metadata = extras)
+}
+
+internal fun emitCommitFact(
+ autocompleteResult: InlineAutocompleteEditText.AutocompleteResult?,
+) {
+ val metadata = if (autocompleteResult == null) {
+ mapOf(
+ "autocomplete" to false,
+ )
+ } else {
+ mapOf(
+ "autocomplete" to true,
+ "source" to autocompleteResult.source,
+ )
+ }
+
+ emitToolbarFact(Action.COMMIT, ToolbarFacts.Items.TOOLBAR, metadata = metadata)
+}
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/internal/ActionContainer.kt b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/internal/ActionContainer.kt
new file mode 100644
index 0000000000..7907dba520
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/internal/ActionContainer.kt
@@ -0,0 +1,134 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar2.internal
+
+import android.content.Context
+import android.transition.TransitionManager
+import android.util.AttributeSet
+import android.view.Gravity
+import android.view.View
+import android.widget.LinearLayout
+import androidx.annotation.VisibleForTesting
+import androidx.core.view.isVisible
+import mozilla.components.browser.toolbar2.R
+import mozilla.components.concept.toolbar.Toolbar
+
+/**
+ * A container [View] for displaying [Toolbar.Action] objects.
+ */
+internal class ActionContainer @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0,
+) : LinearLayout(context, attrs, defStyleAttr) {
+ private val actions = mutableListOf<ActionWrapper>()
+ private var actionSize: Int? = null
+
+ init {
+ gravity = Gravity.CENTER_VERTICAL
+ orientation = HORIZONTAL
+ visibility = View.GONE
+
+ context.obtainStyledAttributes(
+ attrs,
+ R.styleable.ActionContainer,
+ defStyleAttr,
+ 0,
+ ).run {
+ actionSize = attrs?.let {
+ getDimensionPixelSize(R.styleable.ActionContainer_actionContainerItemSize, 0)
+ }
+
+ recycle()
+ }
+ }
+
+ fun addAction(action: Toolbar.Action) {
+ val wrapper = ActionWrapper(action)
+
+ if (action.visible()) {
+ visibility = View.VISIBLE
+
+ action.createView(this).let {
+ wrapper.view = it
+ val insertionIndex = calculateInsertionIndex(action)
+ addActionView(it, insertionIndex)
+ }
+ }
+
+ actions.add(wrapper)
+ }
+
+ /**
+ * Essentially calculates the index of an action on toolbar based on a
+ * map [visibleActionIndicesWithWeights] that holds the order
+ * of visible action indices to their weights sorted by weights.
+ * An index is now calculated by finding the immediate next larger weight
+ * compared to the new action's weight. Index of this find becomes the index of the new action.
+ * If not found, action is appended at the end.
+ */
+ @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+ internal fun calculateInsertionIndex(newAction: Toolbar.Action): Int {
+ if (newAction.weight() == -1) {
+ return -1
+ }
+ val visibleActionIndicesWithWeights = actions.filter { it.actual.visible() }
+ .mapNotNull { actionWrapper ->
+ val index = indexOfChild(actionWrapper.view)
+ if (index != -1) index to actionWrapper.actual.weight() else null
+ }.sortedBy { it.second }
+
+ val insertionIndex = visibleActionIndicesWithWeights.firstOrNull { it.second > newAction.weight() }?.first
+
+ return insertionIndex ?: childCount
+ }
+
+ fun removeAction(action: Toolbar.Action) {
+ actions.find { it.actual == action }?.let {
+ actions.remove(it)
+ removeView(it.view)
+ }
+ }
+
+ fun invalidateActions() {
+ TransitionManager.beginDelayedTransition(this)
+ var updatedVisibility = View.GONE
+
+ for (action in actions) {
+ val visible = action.actual.visible()
+
+ if (visible) {
+ updatedVisibility = View.VISIBLE
+ }
+
+ if (!visible && action.view != null) {
+ removeView(action.view)
+ action.view = null
+ } else if (visible && action.view == null) {
+ action.actual.createView(this).let {
+ action.view = it
+ val insertionIndex = calculateInsertionIndex(action.actual)
+ addActionView(it, insertionIndex)
+ }
+ }
+
+ action.view?.let { action.actual.bind(it) }
+ }
+
+ visibility = updatedVisibility
+ }
+
+ fun autoHideAction(isVisible: Boolean) {
+ for (action in actions) {
+ if (action.actual.autoHide()) {
+ action.view?.isVisible = isVisible
+ }
+ }
+ }
+
+ private fun addActionView(view: View, index: Int) {
+ addView(view, index, LayoutParams(actionSize ?: 0, actionSize ?: 0))
+ }
+}
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/internal/ActionWrapper.kt b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/internal/ActionWrapper.kt
new file mode 100644
index 0000000000..8600372f1e
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/java/mozilla/components/browser/toolbar2/internal/ActionWrapper.kt
@@ -0,0 +1,16 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar2.internal
+
+import android.view.View
+import mozilla.components.concept.toolbar.Toolbar
+
+/**
+ * A wrapper helper to pair a Toolbar.Action with an optional View.
+ */
+internal class ActionWrapper(
+ var actual: Toolbar.Action,
+ var view: View? = null,
+)
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_browser_toolbar_icons_vertical_separator.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_browser_toolbar_icons_vertical_separator.xml
new file mode 100644
index 0000000000..2e366640df
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_browser_toolbar_icons_vertical_separator.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <size android:width="@dimen/mozac_browser_toolbar_icons_separator_width"
+ android:height="@dimen/mozac_browser_toolbar_icons_separator_height" />
+ <solid android:color="#aaaaaa" />
+</shape> \ No newline at end of file
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_dot_notification.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_dot_notification.xml
new file mode 100644
index 0000000000..5469b822af
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_dot_notification.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="8dp"
+ android:height="8dp"
+ android:viewportWidth="10"
+ android:viewportHeight="10">
+ <path
+ android:pathData="M1,5a4,4 0 1,0 8,0a4,4 0 1,0 -8,0"
+ android:strokeWidth="1"
+ android:strokeAlpha=".2"
+ android:fillColor="#fff"
+ android:strokeColor="#000" />
+</vector>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_ic_site_security.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_ic_site_security.xml
new file mode 100644
index 0000000000..ab2b8d0e37
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_ic_site_security.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<selector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ac="http://schemas.android.com/apk/res-auto">
+ <item
+ android:drawable="@drawable/mozac_ic_lock_24"
+ ac:state_site_secure="true" />
+ <item
+ android:drawable="@drawable/mozac_ic_broken_lock" />
+</selector>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_ic_tracking_protection_off_for_a_site.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_ic_tracking_protection_off_for_a_site.xml
new file mode 100644
index 0000000000..250bfbfc4c
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_ic_tracking_protection_off_for_a_site.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+ <path android:fillColor="@color/mozac_ui_icons_fill"
+ android:pathData="M17.9,10.83c-0.27,2.81 -0.75,4.18 -2,5.86A6.48,6.48 0,0 1,12 19a7,7 0,0 1,-2.32 -0.92l-1.44,1.43A8.44,8.44 0,0 0,11.89 21h0.22a8.36,8.36 0,0 0,5.33 -3.08c1.53,-2 2.14,-3.72 2.45,-6.89C20,10.28 20,9 20,7.76l-2,2c-0.06,0.47 -0.08,0.82 -0.1,1.07zM20.21,3.83a1,1 0,0 0,-1.42 0l-0.3,0.31a1.86,1.86 0,0 0,-0.31 -0.1L12,3 5.82,4A2.14,2.14 0,0 0,4 6.1c0,1.67 0,3.9 0.11,4.9a12.43,12.43 0,0 0,1.69 5.79l-2,2a1,1 0,0 0,0 1.42,1 1,0 0,0 1.42,0l15,-15a1,1 0,0 0,-0.01 -1.42zM12,10.59L12,7l-4,0.7c0,2 0.07,2.74 0.09,3a11.65,11.65 0,0 0,0.63 3.17l-1.46,1.46a11.13,11.13 0,0 1,-1.16 -4.5C6,10.08 6,8.4 6,6.11A0.15,0.15 0,0 1,6.14 6L12,5l4.79,0.79z" />
+</vector>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_ic_tracking_protection_on_no_trackers_blocked.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_ic_tracking_protection_on_no_trackers_blocked.xml
new file mode 100644
index 0000000000..4f81a5602b
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_ic_tracking_protection_on_no_trackers_blocked.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+ <path android:fillColor="@color/mozac_ui_icons_fill"
+ android:pathData="M20 6c0-1-0.8-1.9-1.8-2L12 3 5.8 4C4.8 4 4 5 4 6l0.1 5c0.3 3.2 1 5 2.5 7a8.4 8.4 0 0 0 5.3 3h0.2c2.1-0.3 4-1.4 5.3-3 1.6-2 2.2-3.8 2.5-7l0.1-5zm-2.1 4.8a10 10 0 0 1-2 6c-1 1.1-2.4 2-3.9 2.3a6.5 6.5 0 0 1-3.9-2.4 9.9 9.9 0 0 1-2-5.9 67.3 67.3 0 0 1 0-4.9L12 5l5.9 1 0.1 0.2-0.1 4.7zM8 7.6v3c0.3 2.7 0.8 3.7 1.7 5 0.6 0.6 1.4 1.2 2.3 1.4V7l-4 0.6z" />
+</vector>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_ic_tracking_protection_on_trackers_blocked.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_ic_tracking_protection_on_trackers_blocked.xml
new file mode 100644
index 0000000000..4f81a5602b
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/drawable/mozac_ic_tracking_protection_on_trackers_blocked.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+ <path android:fillColor="@color/mozac_ui_icons_fill"
+ android:pathData="M20 6c0-1-0.8-1.9-1.8-2L12 3 5.8 4C4.8 4 4 5 4 6l0.1 5c0.3 3.2 1 5 2.5 7a8.4 8.4 0 0 0 5.3 3h0.2c2.1-0.3 4-1.4 5.3-3 1.6-2 2.2-3.8 2.5-7l0.1-5zm-2.1 4.8a10 10 0 0 1-2 6c-1 1.1-2.4 2-3.9 2.3a6.5 6.5 0 0 1-3.9-2.4 9.9 9.9 0 0 1-2-5.9 67.3 67.3 0 0 1 0-4.9L12 5l5.9 1 0.1 0.2-0.1 4.7zM8 7.6v3c0.3 2.7 0.8 3.7 1.7 5 0.6 0.6 1.4 1.2 2.3 1.4V7l-4 0.6z" />
+</vector>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/layout/mozac_browser_toolbar_displaytoolbar.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/layout/mozac_browser_toolbar_displaytoolbar.xml
new file mode 100644
index 0000000000..5a5f779a70
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/layout/mozac_browser_toolbar_displaytoolbar.xml
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<mozilla.components.browser.toolbar2.display.DisplayToolbarView xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:mozac="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="56dp"
+ android:orientation="vertical">
+
+ <!-- Navigation -->
+
+ <mozilla.components.browser.toolbar2.internal.ActionContainer
+ android:id="@+id/mozac_browser_toolbar_navigation_actions"
+ android:layout_width="wrap_content"
+ android:layout_height="48dp"
+ android:layout_marginTop="4dp"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ mozac:actionContainerItemSize="48dp"
+ tools:layout_width="48dp" />
+
+ <!-- URL container -->
+
+ <ImageView
+ android:id="@+id/mozac_browser_toolbar_background"
+ android:layout_width="0dp"
+ android:layout_height="40dp"
+ android:layout_marginTop="8dp"
+ android:layout_marginEnd="8dp"
+ android:importantForAccessibility="no"
+ app:layout_constraintEnd_toStartOf="@+id/mozac_browser_toolbar_browser_actions"
+ app:layout_constraintStart_toEndOf="@+id/mozac_browser_toolbar_navigation_actions"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_goneMarginEnd="0dp" />
+
+ <!-- URL indicators (lock, tracking protection, ..) -->
+
+ <ImageView
+ android:id="@+id/mozac_browser_toolbar_empty_indicator"
+ android:layout_width="40dp"
+ android:layout_height="40dp"
+ android:layout_marginTop="8dp"
+ android:scaleType="center"
+ android:visibility="gone"
+ app:layout_constraintStart_toStartOf="@id/mozac_browser_toolbar_background"
+ app:layout_constraintTop_toTopOf="parent"
+ app:srcCompat="@drawable/mozac_ic_search_24"
+ tools:ignore="ContentDescription" />
+
+ <mozilla.components.browser.toolbar2.display.TrackingProtectionIconView
+ android:id="@+id/mozac_browser_toolbar_tracking_protection_indicator"
+ android:layout_width="40dp"
+ android:layout_height="40dp"
+ android:layout_marginTop="8dp"
+ android:scaleType="center"
+ android:visibility="gone"
+ app:layout_constraintStart_toEndOf="@id/mozac_browser_toolbar_empty_indicator"
+ app:layout_constraintTop_toTopOf="parent"
+ app:srcCompat="@drawable/mozac_ic_tracking_protection_on_no_trackers_blocked" />
+
+ <ImageView
+ android:id="@+id/mozac_browser_toolbar_separator"
+ android:layout_width="@dimen/mozac_browser_toolbar_icons_separator_width"
+ android:layout_height="40dp"
+ android:layout_marginTop="8dp"
+ android:importantForAccessibility="no"
+ android:scaleType="center"
+ android:visibility="gone"
+ app:layout_constraintStart_toEndOf="@+id/mozac_browser_toolbar_tracking_protection_indicator"
+ app:layout_constraintTop_toTopOf="parent"
+ app:srcCompat="@drawable/mozac_browser_toolbar_icons_vertical_separator" />
+
+ <mozilla.components.browser.toolbar2.display.SiteSecurityIconView
+ android:id="@+id/mozac_browser_toolbar_security_indicator"
+ android:layout_width="40dp"
+ android:layout_height="40dp"
+ android:layout_marginTop="8dp"
+ android:contentDescription="@string/mozac_browser_toolbar_content_description_site_info"
+ android:scaleType="center"
+ app:layout_constraintStart_toEndOf="@+id/mozac_browser_toolbar_separator"
+ app:layout_constraintTop_toTopOf="parent"
+ app:srcCompat="@drawable/mozac_ic_site_security" />
+
+ <mozilla.components.browser.toolbar2.display.HighlightView
+ android:id="@+id/mozac_browser_toolbar_permission_indicator"
+ android:layout_width="10dp"
+ android:layout_height="10dp"
+ android:importantForAccessibility="no"
+ app:layout_constraintBottom_toBottomOf="@+id/mozac_browser_toolbar_security_indicator"
+ app:layout_constraintEnd_toEndOf="@+id/mozac_browser_toolbar_security_indicator"
+ android:layout_marginEnd="8dp"
+ android:layout_marginBottom="8dp"
+ android:visibility="gone"
+ android:tint="@color/photonBlue40"
+ app:srcCompat="@drawable/mozac_dot_notification" />
+
+ <!-- URL & Title -->
+
+ <mozilla.components.browser.toolbar2.display.OriginView
+ android:id="@+id/mozac_browser_toolbar_origin_view"
+ android:layout_width="0dp"
+ android:layout_height="40dp"
+ android:layout_marginTop="8dp"
+ android:paddingEnd="@dimen/mozac_browser_toolbar_origin_padding_end"
+ app:layout_constraintEnd_toStartOf="@+id/mozac_browser_toolbar_action_separator"
+ app:layout_constraintStart_toEndOf="@+id/mozac_browser_toolbar_security_indicator"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_goneMarginStart="8dp"
+ app:layout_goneMarginTop="8dp" />
+
+ <View
+ android:id="@+id/mozac_browser_toolbar_action_separator"
+ android:layout_width="@dimen/mozac_browser_toolbar_page_action_separator_width"
+ android:layout_height="40dp"
+ android:layout_marginTop="8dp"
+ android:layout_marginStart="8dp"
+ android:visibility="gone"
+ android:importantForAccessibility="no"
+ android:scaleType="center"
+ app:layout_constraintStart_toEndOf="@+id/mozac_browser_toolbar_origin_view"
+ app:layout_constraintEnd_toStartOf="@id/mozac_browser_toolbar_page_actions"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <!-- Page actions -->
+
+ <mozilla.components.browser.toolbar2.internal.ActionContainer
+ android:id="@+id/mozac_browser_toolbar_page_actions"
+ android:layout_width="wrap_content"
+ android:layout_height="48dp"
+ android:layout_marginTop="4dp"
+ android:scaleType="center"
+ app:layout_constraintEnd_toEndOf="@+id/mozac_browser_toolbar_background"
+ app:layout_constraintTop_toTopOf="parent"
+ mozac:actionContainerItemSize="48dp"
+ tools:layout_width="48dp" />
+
+ <!-- Browser Actions -->
+
+ <mozilla.components.browser.toolbar2.internal.ActionContainer
+ android:id="@+id/mozac_browser_toolbar_browser_actions"
+ android:layout_width="wrap_content"
+ android:layout_height="48dp"
+ android:layout_marginTop="4dp"
+ app:layout_constraintEnd_toStartOf="@id/mozac_browser_toolbar_menu"
+ app:layout_constraintTop_toTopOf="parent"
+ mozac:actionContainerItemSize="48dp"
+ tools:layout_width="48dp" />
+
+ <!-- Menu -->
+
+ <mozilla.components.browser.menu.view.MenuButton
+ android:id="@+id/mozac_browser_toolbar_menu"
+ android:layout_width="36dp"
+ android:layout_height="48dp"
+ android:layout_marginTop="4dp"
+ android:background="?android:attr/selectableItemBackgroundBorderless"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <!-- Progress Bar -->
+
+ <ProgressBar
+ android:id="@+id/mozac_browser_toolbar_progress"
+ style="?android:attr/progressBarStyleHorizontal"
+ android:layout_width="0dp"
+ android:layout_height="@dimen/mozac_browser_toolbar_progress_bar_height"
+ android:visibility="gone"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent" />
+
+</mozilla.components.browser.toolbar2.display.DisplayToolbarView>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/layout/mozac_browser_toolbar_edittoolbar.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/layout/mozac_browser_toolbar_edittoolbar.xml
new file mode 100644
index 0000000000..3325cd099f
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/layout/mozac_browser_toolbar_edittoolbar.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<androidx.constraintlayout.widget.ConstraintLayout
+ android:id="@+id/mozac_browser_toolbar_container"
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:mozac="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:orientation="vertical"
+ android:layout_height="56dp">
+
+ <ImageView
+ android:id="@+id/mozac_browser_toolbar_background"
+ android:layout_width="0dp"
+ android:layout_height="40dp"
+ android:layout_marginTop="8dp"
+ android:layout_marginStart="8dp"
+ android:layout_marginEnd="8dp"
+ android:importantForAccessibility="no"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <ImageView
+ android:id="@+id/mozac_browser_toolbar_edit_icon"
+ android:layout_width="40dp"
+ android:layout_height="40dp"
+ android:scaleType="center"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintStart_toStartOf="@id/mozac_browser_toolbar_background"
+ app:srcCompat="@drawable/mozac_ic_search_24"
+ android:visibility="gone"
+ tools:ignore="ContentDescription"
+ android:layout_marginTop="8dp" />
+
+ <mozilla.components.browser.toolbar2.internal.ActionContainer
+ android:id="@+id/mozac_browser_toolbar_edit_actions_start"
+ android:layout_width="wrap_content"
+ android:layout_height="40dp"
+ android:layout_marginTop="8dp"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintStart_toEndOf="@id/mozac_browser_toolbar_edit_icon"
+ mozac:actionContainerItemSize="56dp"
+ tools:layout_width="56dp" />
+
+ <mozilla.components.ui.autocomplete.InlineAutocompleteEditText
+ android:id="@+id/mozac_browser_toolbar_edit_url_view"
+ android:layout_width="0dp"
+ android:layout_marginTop="8dp"
+ android:layout_height="40dp"
+ android:width="100dp"
+ android:height="100dp"
+ android:imeOptions="actionGo|flagNoExtractUi|flagNoFullscreen"
+ android:inputType="textUri|text"
+ android:lines="1"
+ android:gravity="center_vertical"
+ android:background="#00000000"
+ android:textSize="15sp"
+ app:layout_goneMarginStart="8dp"
+ app:layout_constraintStart_toEndOf="@id/mozac_browser_toolbar_edit_actions_start"
+ app:layout_constraintEnd_toStartOf="@id/mozac_browser_toolbar_erase_view"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <ImageView
+ android:id="@+id/mozac_browser_toolbar_erase_view"
+ android:layout_width="44dp"
+ android:layout_height="44dp"
+ android:contentDescription="@string/mozac_clear_button_description"
+ android:scaleType="center"
+ app:srcCompat="@drawable/mozac_ic_cross_circle_fill_20"
+ android:visibility="gone"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toEndOf="@+id/mozac_browser_toolbar_edit_url_view"
+ app:layout_constraintEnd_toStartOf="@id/mozac_browser_action_separator"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <View
+ android:id="@+id/mozac_browser_action_separator"
+ android:layout_width="@dimen/mozac_browser_toolbar_page_action_separator_width"
+ android:layout_height="40dp"
+ android:layout_marginTop="8dp"
+ android:visibility="gone"
+ android:importantForAccessibility="no"
+ android:scaleType="center"
+ app:layout_constraintStart_toEndOf="@+id/mozac_browser_toolbar_erase_view"
+ app:layout_constraintEnd_toStartOf="@id/mozac_browser_toolbar_edit_actions_end"
+ app:layout_constraintTop_toTopOf="parent" />
+
+ <mozilla.components.browser.toolbar2.internal.ActionContainer
+ android:id="@+id/mozac_browser_toolbar_edit_actions_end"
+ android:layout_width="wrap_content"
+ android:layout_height="40dp"
+ android:layout_marginTop="8dp"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintEnd_toStartOf="@id/mozac_browser_toolbar_clear_view"
+ mozac:actionContainerItemSize="40dp"
+ tools:layout_width="48dp" />
+
+ <ImageView
+ android:id="@+id/mozac_browser_toolbar_clear_view"
+ android:layout_width="40dp"
+ android:layout_height="40dp"
+ android:width="100dp"
+ android:height="100dp"
+ android:contentDescription="@string/mozac_clear_button_description"
+ android:scaleType="center"
+ app:srcCompat="@drawable/mozac_ic_cross_circle_fill_24"
+ android:visibility="gone"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="@+id/mozac_browser_toolbar_background"
+ app:layout_constraintTop_toTopOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-am/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-am/strings.xml
new file mode 100644
index 0000000000..eda99f879b
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-am/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">ምናሌ</string>
+ <string name="mozac_clear_button_description">አጽዳ</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">የመከታተያ ጥበቃ በርቷል</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">የክትትል ጥበቃ መከታተያዎችን አግዷል</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">የክትትል ጥበቃ ለዚህ ድረ-ገፅ ጠፍቷል</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">የድረ-ገፅ መረጃ</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">በመጫን ላይ</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">አንዳንድ ይዘቶች በራስ አጫውት ቅንብር ታግደዋል</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-an/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-an/strings.xml
new file mode 100644
index 0000000000..14b40de38e
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-an/strings.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menú</string>
+ <string name="mozac_clear_button_description">Borrar</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">La protección contra seguimiento ye activada</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Las protección contra seguimiento ha blocau elementos de seguimiento</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">La protección de seguimiento ye desactivada en este puesto</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Información d’o puesto</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Se ye cargando</string>
+ </resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ar/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ar/strings.xml
new file mode 100644
index 0000000000..a4a01aa836
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ar/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">القائمة</string>
+ <string name="mozac_clear_button_description">امسح</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">الحماية من التعقّب مفعّلة</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">حجبت الحماية من التعقّب بعض المتعقّبات</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">عُطّلت الحماية من التعقب في هذا الموقع</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">معلومات الموقع</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">يُحمّل</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">حجب إعداد التشغيل التلقائي بعض المحتوى</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ast/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ast/strings.xml
new file mode 100644
index 0000000000..6cb4e96a9a
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ast/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menú</string>
+ <string name="mozac_clear_button_description">Borrar</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">La proteición antirrastrexu ta activada</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">La proteición antirrastrexu bloquió rastrexadores</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">La proteición antirrastrexu ta desactivada nesti sitiu</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Información del sitiu</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Cargando</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">La configuración de la reproducción automática bloquió parte del conteníu</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-az/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-az/strings.xml
new file mode 100644
index 0000000000..0ccb692a99
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-az/strings.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menyu</string>
+ <string name="mozac_clear_button_description">Təmizlə</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">İzlənmə Qoruması açıqdır</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">İzlənmə Qoruması izləyiciləri əngəllədi</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">İzlənmə Qoruması bu sayt üçün sönülüdür</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Sayt məlumatları</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Yüklənir</string>
+ </resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-azb/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-azb/strings.xml
new file mode 100644
index 0000000000..d2901fff35
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-azb/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">منو</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">پوز</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">ایزله‌مه قورونماسی آچیق‌دیر</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">تعقیب قوروماسی تعقیب‌چی‌لری مسدود ائدیپ‌دیر</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">بو سایت اوچون ایزله‌مه قورونماسی باغلیدیر.</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">سایت بیلگی‌لری</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">دولور</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">بعضی محتوا اتوْماتیک‌چال تنظیمی ایله بلوْکلانیب</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ban/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ban/strings.xml
new file mode 100644
index 0000000000..037114093f
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ban/strings.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <string name="mozac_clear_button_description">Puyung</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Jantosang dumun</string>
+ </resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-be/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-be/strings.xml
new file mode 100644
index 0000000000..5042e0d03d
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-be/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Меню</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Ачысціць</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Ахова ад сачэння ўключана</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Ахова ад сачэння заблакавала трэкеры</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Ахова ад сачэння выключана на гэтым сайце</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Інфармацыя пра сайт</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Загрузка</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Некаторае змесціва было заблакавана наладамі аўтапрайгравання</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-bg/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-bg/strings.xml
new file mode 100644
index 0000000000..6f6d6ecbe0
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-bg/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Меню</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Изчистване</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Защита от проследяване включена</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Защитата от проследяване е спряла проследяване</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Защитата от проследяване е изключена за сайта</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Показване на информация за сайта</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Зареждане</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Част от съдържанието е спряно от настройките за автоматично възпроизвеждане</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-bn/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-bn/strings.xml
new file mode 100644
index 0000000000..8c93a8c6e7
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-bn/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">মেনু</string>
+ <string name="mozac_clear_button_description">পরিষ্কার করুন</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">ট্র্যাকিং সুরক্ষা চালু আছে</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">ট্র্যাকিং সুরক্ষা ট্র্যাকারদের অবরুদ্ধ করেছে</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">এই সাইটের জন্য ট্র্যাকিং সুরক্ষা বন্ধ</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">সাইটের তথ্য</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">লোড হচ্ছে</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">কিছু বিষয়বস্তু অটোপ্লে সেটিং দ্বারা ব্লক করা হয়েছে</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-br/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-br/strings.xml
new file mode 100644
index 0000000000..c5f9c203fd
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-br/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Lañser</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Skarzhañ</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Gweredekaet eo ar gware heuliañ</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Stanket ez eus bet heulierien gant ar gwarez heuliañ</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Diweredekaet eo bet ar gwarez heuliañ evit al lecʼhienn-mañ</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Titouroù al lecʼhienn</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">O kargañ</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Elfennoù ’zo a zo bet stanket gant arventenn al lenn emgefreek</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-bs/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-bs/strings.xml
new file mode 100644
index 0000000000..473bf58af2
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-bs/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Meni</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Očisti</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Zaštita od praćenja uključena</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Zaštita od praćenja je blokirala pratioce</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Zaštita od praćenja je isključena za ovu stranicu</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informacije o stranici</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Učitavanje</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Neki sadržaj je blokiran postavkom automatske reprodukcije</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ca/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ca/strings.xml
new file mode 100644
index 0000000000..44f350dcf2
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ca/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menú</string>
+ <string name="mozac_clear_button_description">Esborra</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">La protecció contra el seguiment està activada</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">La protecció contra el seguiment ha blocat elements de seguiment coneguts</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">S’ha desactivat la protecció contra el seguiment per a aquest lloc</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informació del lloc</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">S’està carregant</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Una part del contingut s’ha blocat per la configuració de la reproducció automàtica</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-cak/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-cak/strings.xml
new file mode 100644
index 0000000000..ae15567dc0
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-cak/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">K\'utsamaj</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Tijosq\'ïx</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Tzijïl ri Chajinïk Chuwäch Ojqanïk</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Eruq\'aton ojqanela\' ri i Chajinïk chuwäch Ojqanïk</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Chupül ri Chajinïk chuwäch Ojqanem pa re ruxaq re\'</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Rutzijol ruxaq</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Nusamajij</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Jun peraj chi re ri rupam xq\'at ruma ri runuk\'ulem ri ruyon nitzij</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ceb/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ceb/strings.xml
new file mode 100644
index 0000000000..4a03205a32
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ceb/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <string name="mozac_clear_button_description">Panas</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Ang Tracking Protection on</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Ang Tracking Protection nibara ug tracker</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Wala\'y Tracking Protection ani nga site</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Detalye sa site</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Loading</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Ang uban content gibara sa setting sa autoplay</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ckb/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ckb/strings.xml
new file mode 100644
index 0000000000..95e99bea91
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ckb/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">پێڕست</string>
+ <string name="mozac_clear_button_description">پاککردنەوە</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">پارێزگاری لە چاودێری کارایە</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">پارێزگاری چاودێری توانی چەند چاودێریکەرێک بلۆک بکات</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">پارێزگاری لە چاودێری ناکارایە بۆ ئەم ماڵپەڕە</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">زانیاری ماڵپەڕ</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">باردەکرێت</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">هەندێک ناوەڕۆک بلۆک کران لە لایەن ڕێکخستنی خۆپێکردنەوە</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-co/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-co/strings.xml
new file mode 100644
index 0000000000..2a309bb0b3
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-co/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Listinu</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Squassà</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">A prutezzione contr’à u spiunagiu hè attivata</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">A prutezzione contr’à u spiunagiu hà bluccatu perseguitatori</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">A prutezzione contr’à u spiunagiu hè disattivata per stu situ</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Infurmazioni nant’à u situ</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Caricamentu in corsu</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Certi cuntenuti sò stati bluccati da a preferenza di lettura autumatica</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-cs/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-cs/strings.xml
new file mode 100644
index 0000000000..a2c3e0d17a
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-cs/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Nabídka</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Vymazat</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Ochrana proti sledování je zapnuta</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Ochrana proti sledování zablokovala sledovací prvky</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Ochrana proti sledování je pro tento web vypnuta</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informace o stránce</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Načítání</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Část obsahu byla zablokována nastavením automatického přehrávání</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-cy/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-cy/strings.xml
new file mode 100644
index 0000000000..3689bb4004
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-cy/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Dewislen</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Clirio</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Mae Diogelwch rhag Tracio ymlaen</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Mae Diogelwch rhag Tracio wedi rhwystro tracwyr</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Mae Diogelwch rhag Tracio wedi ei ddiffodd ar gyfer y wefan hon</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Manylion y wefan</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Llwytho</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Mae rhywfaint o gynnwys wedi’i rwystro gan osodiadau awtochwarae</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-da/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-da/strings.xml
new file mode 100644
index 0000000000..b8d4ba146f
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-da/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Ryd</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Beskyttelse mod sporing er slået til</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Beskyttelse mod sporing har blokeret sporings-tjenester</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Beskyttelse mod sporing er slået fra for dette websted</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Information om webstedet</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Indlæser</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Noget indhold er blevet blokeret af indstillingen for automatisk afspilning</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-de/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-de/strings.xml
new file mode 100644
index 0000000000..2db37ddfd5
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-de/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menü</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Leeren</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Schutz vor Aktivitätenverfolgung ist an</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Der Tracking-Schutz hat Tracker blockiert</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Der Tracking-Schutz ist für diese Website deaktiviert</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Seiteninformation</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Wird geladen…</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Einige Inhalte wurden durch die Einstellung zur automatischen Wiedergabe blockiert</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-dsb/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-dsb/strings.xml
new file mode 100644
index 0000000000..5f13b6571d
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-dsb/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Meni</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Lašowaś</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Slědowański šćit jo zašaltowany</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Slědowański šćit jo blokěrował pśeslědowaki</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Slědowański šćit jo něnto znjemóžnjony za toś to sedło</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Sedłowe informacije</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Zacytujo se</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Někake wopśimjeśe jo se pśez wótgrawańske nastajenje zablokěrował</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-el/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-el/strings.xml
new file mode 100644
index 0000000000..8960320249
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-el/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Μενού</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Απαλοιφή</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Η προστασία από καταγραφή είναι ενεργή</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Η προστασία από καταγραφή έχει αποκλείσει ιχνηλάτες</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Η προστασία από καταγραφή είναι ανενεργή για τον ιστότοπο</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Πληροφορίες ιστοτόπου</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Φόρτωση</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Ορισμένο περιεχόμενο έχει αποκλειστεί από τη ρύθμιση αυτόματης αναπαραγωγής</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-en-rCA/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000000..29866e8096
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-en-rCA/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Clear</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Tracking Protection is on</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Tracking Protection has blocked trackers</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Tracking Protection is off for this site</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Site information</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Loading</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Some content has been blocked by the autoplay setting</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-en-rGB/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000000..29866e8096
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-en-rGB/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Clear</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Tracking Protection is on</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Tracking Protection has blocked trackers</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Tracking Protection is off for this site</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Site information</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Loading</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Some content has been blocked by the autoplay setting</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-eo/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-eo/strings.xml
new file mode 100644
index 0000000000..5f31034648
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-eo/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menuo</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Viŝi</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Protekto kontraŭ spurado ŝaltita</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">La protekto kontraŭ spurado blokis spurilojn</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Protekto kontraŭ spurado malŝaltita por tiu ĉi retejo</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informo pri retejo</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Ŝargado</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Parto de la enhavo estis blokita de la agordo pri aŭtomata ludado</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-es-rAR/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-es-rAR/strings.xml
new file mode 100644
index 0000000000..d5fa1f30f0
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-es-rAR/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menú</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Limpiar</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">La protección contra rastreo está habilitada</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">La protección contra rastreo bloqueó los rastreadores</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">La protección de rastreo está deshabilitada para este sitio</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Información del sitio</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Cargando</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Se bloquearon algunos contenidos debido a la configuración de reproducción automática</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-es-rCL/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-es-rCL/strings.xml
new file mode 100644
index 0000000000..107843b536
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-es-rCL/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menú</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Limpiar</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Protección de seguimiento activada</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">La Protección de seguimiento ha bloqueado rastreadores</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Protección de seguimiento desactivada para este sitio</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Información del sitio</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Cargando</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Algunos contenidos han sido bloqueados por los ajustes de reproducción automática</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-es-rES/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-es-rES/strings.xml
new file mode 100644
index 0000000000..9c4263b840
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-es-rES/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menú</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Limpiar</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">La protección contra rastreo está activada</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">La protección contra rastreo ha bloqueado rastreadores</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">La protección contra rastreo está desactivada para este sitio web</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Información del sitio</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Cargando</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Algunos contenidos han sido bloqueados por los ajustes de reproducción automática</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-es-rMX/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-es-rMX/strings.xml
new file mode 100644
index 0000000000..cd4388769d
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-es-rMX/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menú</string>
+ <string name="mozac_clear_button_description">Limpiar</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">La protección contra rastreo está activada</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">La protección contra rastreo ha bloqueado rastreadores</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">La protección contra rastreo está desactivada para este sitio</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Información del sitio</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Cargando</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Parte del contenido ha sido bloqueado por la configuración de reproducción automática</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-es/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-es/strings.xml
new file mode 100644
index 0000000000..9c4263b840
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-es/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menú</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Limpiar</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">La protección contra rastreo está activada</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">La protección contra rastreo ha bloqueado rastreadores</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">La protección contra rastreo está desactivada para este sitio web</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Información del sitio</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Cargando</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Algunos contenidos han sido bloqueados por los ajustes de reproducción automática</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-et/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-et/strings.xml
new file mode 100644
index 0000000000..7fb1096fd7
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-et/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menüü</string>
+ <string name="mozac_clear_button_description">Tühjenda</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Jälitamisvastane kaitse on sees</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Jälitamisvastane kaitse on jälitajaid blokkinud</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Täiustatud jälitamisvastane kaitse on sellel saidil väljas</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Saidi teave</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Laadimine</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Osa sisu on automaatse esitamise sättega blokitud</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-eu/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-eu/strings.xml
new file mode 100644
index 0000000000..fb0520f183
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-eu/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menua</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Garbitu</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Jarraipenaren babesa gaituta dago</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Jarraipenaren babesak jarraipen-elementuak blokeatu ditu</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Jarraipenaren babesa desgaituta dago webgune honetarako</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Gunearen informazioa</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Kargatzen</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Eduki batzuk blokeatu egin dira erreprodukzio automatikoko ezarpenetan oinarrituta</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-fa/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-fa/strings.xml
new file mode 100644
index 0000000000..f381a2069f
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-fa/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">منو</string>
+ <string name="mozac_clear_button_description">پاک کردن</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">حفاظت در برابر ردیابی روشن است</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">حفاظت در برابر ردیابی، ردیاب‌ها را مسدود کرده است</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">حفاظت در برابر ردیابی برای این پایگاه خاموش است</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">اطلاعات پایگاه</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">در حال بار کردن</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">برخی از محتواها توسط تنظیمات پخش خودکار مسدود شده‌اند</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ff/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ff/strings.xml
new file mode 100644
index 0000000000..b774316dfb
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ff/strings.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Dosol</string>
+ <string name="mozac_clear_button_description">Momtu</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Ndeenka Dewindol nani e</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Ndeenka Dewindol faliima rewindotooɓe</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Ndeenka Dewindol ko ko ñifi e ndee lowre</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Humpito lowre</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Nana loowa</string>
+ </resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-fi/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-fi/strings.xml
new file mode 100644
index 0000000000..b47d8af7bc
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-fi/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Valikko</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Tyhjennä</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Seurannan suojaus on päällä</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Seurannan suojaus on estänyt seuraimia</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Seurannan suojaus ei ole käytössä tällä sivustolla</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Sivustotiedot</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Ladataan</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Automaattisen toiston asetus on estänyt osan sisällöstä</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-fr/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-fr/strings.xml
new file mode 100644
index 0000000000..072941bc03
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-fr/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Effacer</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">La protection contre le pistage est activée</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">La protection contre le pistage a bloqué des traqueurs</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">La protection contre le pistage est désactivée pour ce site</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informations sur le site</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Chargement en cours</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Certains contenus ont été bloqués par le paramètre de lecture automatique</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-fur/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-fur/strings.xml
new file mode 100644
index 0000000000..19900e6bc0
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-fur/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menù</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Nete</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">La protezion da lis spiis e je ative</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">La protezion da lis spiis e à blocât spiis</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">La protezion da lis spiis e je disativade par chest sît</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informazions sît</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Daûr a cjamâ</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Cualchi contignût al è stât blocât de impostazion pe riproduzion automatiche</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-fy-rNL/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-fy-rNL/strings.xml
new file mode 100644
index 0000000000..9aca189901
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-fy-rNL/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Wiskje</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Beskerming tsjin folgjen is ynskeakele</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Beskerming tsjin folgjen hat trackers blokkearre</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Beskerming tsjin folgjen is út foar dizze website</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Website-ynformaasje</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Lade</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Guon ynhâld is blokkearre troch de ynstelling foar automatysk ôfspyljen</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ga-rIE/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ga-rIE/strings.xml
new file mode 100644
index 0000000000..ba4f41d62f
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ga-rIE/strings.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Roghchlár</string>
+ <string name="mozac_clear_button_description">Bánaigh</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Tá Cosaint ar Lorgaireacht ar siúl</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Chuir Cosaint ar Lorgaireacht cosc ar lorgairí</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Tá Cosaint ar Lorgaireacht múchta don suíomh seo</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Eolas faoin suíomh</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Á lódáil</string>
+ </resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-gd/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-gd/strings.xml
new file mode 100644
index 0000000000..d694698b3d
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-gd/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Clàr-taice</string>
+ <string name="mozac_clear_button_description">Falamhaich</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Tha an dìon o thracadh air</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Bhac gleus an dìon o thracadh tracaichean</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Tha an dìon o thracadh dheth air an làrach seo</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Fiosrachadh mun làrach</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Ga luchdadh</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Chaidh cuid dhen t-susbaint a bhacadh an cois roghainn na fèin-chluich</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-gl/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-gl/strings.xml
new file mode 100644
index 0000000000..990d910d08
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-gl/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menú</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Borrar</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Protección contra o rastrexo activada</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">A protección contra o rastrexo bloqueou rastrexadores</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">A protección contra o rastrexo está desactivada para este sitio</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Información sobre o sitio</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Cargando</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">A configuración de reprodución automática bloqueou algúns contidos</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-gn/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-gn/strings.xml
new file mode 100644
index 0000000000..7798e540da
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-gn/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Poravorã</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Mopotĩ</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Tapykuehoha ñemo’ã oñemyandy</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Ñemo’ã jehekaha ojoko tapykuehohápe</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Ñemo’ã jehekaha ndoikovéima ko tendápe g̃uarã</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Marandu tenda rehegua</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Henyhẽhína</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Ojejoko ndahetái tetepy ñemboheta ijeheguíva ñemboheko rupive</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-gu-rIN/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-gu-rIN/strings.xml
new file mode 100644
index 0000000000..a6ff2d26b0
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-gu-rIN/strings.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">મેનુ</string>
+ <string name="mozac_clear_button_description">સાફ કરો</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">ટ્રેકિંગ સુરક્ષા ચાલુ છે</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">ટ્રેકિંગ સુરક્ષા દ્વારા ટ્રેકર્સને અવરોધિત કરવામાં આવ્યા છે</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">આ સાઇટ માટે ટ્રેકિંગ સુરક્ષા બંધ છે</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">સાઇટ માહિતી</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">લોડ કરી રહ્યું છે</string>
+ </resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hi-rIN/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hi-rIN/strings.xml
new file mode 100644
index 0000000000..2d3c7d9b42
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hi-rIN/strings.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">मेन्यू</string>
+ <string name="mozac_clear_button_description">साफ करें</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">ट्रैकिंग सुरक्षा चालू है</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">ट्रैकिंग सुरक्षा ने ट्रैकरों को अवरुद्ध कर दिया है</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">इस साइट के लिए ट्रैकिंग सुरक्षा बंद है</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">साइट सूचना</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">लोड हो रहा है</string>
+ </resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hil/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hil/strings.xml
new file mode 100644
index 0000000000..b02bc03a94
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hil/strings.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <string name="mozac_clear_button_description">Klaro</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Loading</string>
+ </resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hr/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hr/strings.xml
new file mode 100644
index 0000000000..420583468b
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hr/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Izbornik</string>
+ <string name="mozac_clear_button_description">Izbriši</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Zaštita od praćenja je uključena</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Zaštita od praćenja je blokirala programe za praćenje</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Zaštita od praćenja je isključena za ovu stranicu</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informacije o web mjestu</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Učitavanje</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Neki sadržaji su blokirani zbog postavki automatske reprodukcije</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hsb/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hsb/strings.xml
new file mode 100644
index 0000000000..2c03305e16
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hsb/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Meni</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Zhašeć</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Slědowanski škit je zmóžnjeny</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Slědowanski škit je přesćěhowaki blokował</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Slědowanski škit je znjemóžnjeny za tute sydło</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Sydłowe informacije</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Začituje so</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Někajki wobsah je so přez wothrawanske nastajenje zablokował</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hu/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hu/strings.xml
new file mode 100644
index 0000000000..eef3c81920
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hu/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menü</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Törlés</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Követés elleni védelem bekapcsolva</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">A követés elleni védelem nyomkövetőket blokkolt</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">A követés elleni védelem le van tiltva ezen az oldalon</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Oldalinformációk</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Betöltés</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Bizonyos tartalmakat letiltott az automatikus lejátszási beállítás</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hy-rAM/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hy-rAM/strings.xml
new file mode 100644
index 0000000000..668ae3425c
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-hy-rAM/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Ցանկ</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Մաքրել</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Հետագծման պաշտպանությունը միաց. է</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Հետագծման պաշտպանությունն արգելափակել է հետագծիչները</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Հետագծման պաշտպանությունն անջ. է այս կայքի համար</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Կայքի տեղեկատվություն</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Բեռնում</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Որոշ բովանդակություն արգելափակվել է ինքնանվագարկման կարգավորումով</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ia/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ia/strings.xml
new file mode 100644
index 0000000000..8a27cf8a5a
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ia/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Vacuar</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Protection contra le traciamento active</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Le protection contra le traciamento ha blocate traciatores</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Le protection contra le traciamento es disactivate pro iste sito</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informationes del sito</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Cargamento</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Alcun contento ha essite blocate per le parametros del reproduction automatic</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-in/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-in/strings.xml
new file mode 100644
index 0000000000..2d7074c6ba
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-in/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <string name="mozac_clear_button_description">Bersihkan</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Perlindungan Pelacakan aktif</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Perlindungan Pelacakan telah memblokir pelacak</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Perlindungan Pelacakan dinonaktifkan untuk situs ini</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informasi situs</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Memuat</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Beberapa konten telah diblokir dengan pengaturan putar-otomatis</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-is/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-is/strings.xml
new file mode 100644
index 0000000000..653bc2c4d0
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-is/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Valmynd</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Hreinsa</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Vörn gegn gagnasöfnun virk</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Vörn gegn gagnasöfnun hefur lokað á rekjara</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Vörn gegn gagnasöfnun er ekki virk fyrir þetta svæði</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Upplýsingar um vefsvæði</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Hleður</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Lokað hefur verið sumt efni með stillingum fyrir sjálfvirka afspilun</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-it/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-it/strings.xml
new file mode 100644
index 0000000000..33d9f28220
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-it/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Cancella</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">La protezione antitracciamento è attiva</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">La protezione antitracciamento ha bloccato contenuti traccianti</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">La protezione antitracciamento è disattivata per questo sito</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informazioni sito</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Caricamento…</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Alcuni contenuti sono stati bloccati dall’impostazione per la riproduzione automatica</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-iw/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-iw/strings.xml
new file mode 100644
index 0000000000..51477ead53
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-iw/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">תפריט</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">ניקוי</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">הגנת מעקב פעילה</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">הגנת מעקב חסמה רכיבי מעקב</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">הגנת מעקב כבויה עבור אתר זה</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">פרטי האתר</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">בטעינה</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">תוכן מסויים נחסם על־ידי ההגדרה של הניגון האוטומטי</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ja/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ja/strings.xml
new file mode 100644
index 0000000000..4707063495
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ja/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">メニュー</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">消去</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">トラッキング防止はオンです</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">トラッキング防止によりトラッカーをブロックしました</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">このサイトではトラッキング防止がオフです</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">サイト情報</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">読み込み中</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">一部のコンテンツは自動再生設定によってブロックされています</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ka/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ka/strings.xml
new file mode 100644
index 0000000000..bf438a8ed7
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ka/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">მენიუ</string>
+ <string name="mozac_clear_button_description">გასუფთავება</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">თვალთვალისგან დაცვა ჩართულია</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">თვალთვალისგან დაცვამ შეზღუდა მეთვალყურეები</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">თვალთვალისგან დაცვა გამორთულია ამ საიტზე</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">საიტის მონაცემები</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">იტვირთება</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">ზოგიერთი მასალა შეიზღუდა თვითგაშვების პარამეტრებით</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-kaa/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-kaa/strings.xml
new file mode 100644
index 0000000000..e4ad1073b0
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-kaa/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menyu</string>
+ <string name="mozac_clear_button_description">Tazalaw</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Baqlaw qorǵanıwı qosılǵan</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Baqlaw qorǵanıw funkciyası trekkerlerdi blokladı</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Bul sayt ushın baqlaw qorǵanıwı óshirilgen</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Sayt maǵlıwmatları</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Júklenbekte</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Ayrım kontentler avtomatik sazlawlar tárepinen bloklanǵan</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-kab/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-kab/strings.xml
new file mode 100644
index 0000000000..034ec09580
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-kab/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Umuɣ</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Sfeḍ</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Ammesten mgal aḍfaṛ yermed</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Ammesten mgal aḍfaṛ yessewḥel ineḍfaṛen</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Ammesten mgal aḍfaṛ insa akka tura i usmel-a</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Asmel n telɣut</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Asali</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Yettusewḥel kra n yigburen s aɣewwar n tɣuri tawurmant</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-kk/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-kk/strings.xml
new file mode 100644
index 0000000000..17b7710fac
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-kk/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Мәзір</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Тазарту</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Бақылаудан қорғаныс іске қосулы</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Бақылаудан қорғаныс трекерлерді бұғаттады</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Бақылаудан қорғаныс бұл сайт үшін сөндірілген</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Сайт ақпараты</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Жүктелуде</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Кейбір құрама автоойнату баптауларымен бұғатталған</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-kmr/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-kmr/strings.xml
new file mode 100644
index 0000000000..29542924a0
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-kmr/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menû</string>
+ <string name="mozac_clear_button_description">Paqij bike</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Parastina ji Şopandinê vekirî ye</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Parastina ji şopandinê şopdar asteng kirin</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Parastina ji şopadinê, ji bo vê malperê girtî ye</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Agahiyên malperê</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Tê barkirin</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Hin naverok ji aliyê eyara lêdana-otomatîk ve hatin astengkirin</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-kn/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-kn/strings.xml
new file mode 100644
index 0000000000..ec07a646a6
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-kn/strings.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">ಪರಿವಿಡಿ</string>
+ <string name="mozac_clear_button_description">ಅಳಿಸು</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">ಜಾಡು ಇರಿಸುವಿಕೆ ಇಂದ ರಕ್ಷಣೆ ಶುರುವಾಗಿದೆ</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">ಟ್ರ್ಯಾಕಿಂಗ್ ಪ್ರೊಟೆಕ್ಷನ್ ಟ್ರ್ಯಾಕರ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿದೆ</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">ಈ ಸೈಟ್‌ಗಾಗಿ ಟ್ರ್ಯಾಕಿಂಗ್ ಪ್ರೊಟೆಕ್ಷನ್ ಆಫ್ ಆಗಿದೆ</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">ತಾಣದ ಮಾಹಿತಿ</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">ಲೋಡ್ ಆಗುತ್ತಿದೆ</string>
+ </resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ko/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ko/strings.xml
new file mode 100644
index 0000000000..ff3fcf3bcc
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ko/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">메뉴</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">지우기</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">추적 방지 기능이 켜져 있음</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">추적 방지 기능이 추적기를 차단함</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">이 사이트에 추적 방지 기능이 꺼져 있음</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">사이트 정보</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">로드 중</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">자동 재생 설정에 의해 일부 콘텐츠가 차단되었습니다.</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ldrtl/dimens.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ldrtl/dimens.xml
new file mode 100644
index 0000000000..a36c7c4366
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ldrtl/dimens.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<resources>
+ <!-- DisplayToolbar -->
+ <dimen name="mozac_browser_toolbar_origin_padding_end">16dp</dimen>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-lij/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-lij/strings.xml
new file mode 100644
index 0000000000..31fd025526
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-lij/strings.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menû</string>
+ <string name="mozac_clear_button_description">Scancella</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Proteçion anti-traciamento açeiza</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">A proteçion anti-traciamento a l\'à blocou di traciatoî</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">A proteçion anti-traciamento a l\'é asmortâ pe sto scito</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informaçioin do scito</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Carego</string>
+ </resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-lo/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-lo/strings.xml
new file mode 100644
index 0000000000..d9327a731d
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-lo/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">ເມນູ</string>
+ <string name="mozac_clear_button_description">ລົບລ້າງ</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">ການປ້ອງກັນການຕິດຕາມກຳລັງເປີດຢູ່</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">ການປ້ອງກັນການຕິດຕາມໄດ້ບັອກຕົວຕິດຕາມ</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">ການປ້ອງກັນການຕິດຕາມໄດ້ປິດສຳລັບເວັບໄຊທນີ້</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">ຂໍ້ມູນເວັບໄຊ</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">ກຳລັງໂຫລດ</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">ເນື້ອຫາບາງອັນຖືກບລັອກໂດຍການຕັ້ງຄ່າການຫຼີ້ນອັດຕະໂນມັດ</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-lt/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-lt/strings.xml
new file mode 100644
index 0000000000..433b57f18e
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-lt/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Meniu</string>
+ <string name="mozac_clear_button_description">Išvalyti</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Apsauga nuo stebėjimo įjungta</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Apsaugo nuo stebėjimo užblokavo stebėjimo elementus</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Apsauga nuo stebėjimo šioje svetainėje išjungta</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Svetainės informacija</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Įkeliama</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Dalį turinio užblokavo automatinio grojimo nuostatos</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-mix/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-mix/strings.xml
new file mode 100644
index 0000000000..1636f653d5
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-mix/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Katsi</string>
+ <string name="mozac_clear_button_description">Ku^un</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Chika va^a ña sau</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Chika va^a ña sau</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Chika va^a ña sau nu pagina yo^o </string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Tu^tu sitio yo^o</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Sachuin</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Ma ku kunu ña ku reproducción automática</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ml/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ml/strings.xml
new file mode 100644
index 0000000000..9f376452a4
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ml/strings.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">മെനു</string>
+ <string name="mozac_clear_button_description">മായ്ക്കുക</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">ട്രാക്കിങ്ങ് സംരക്ഷണം ഓൺ ആണ്</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">ട്രാക്കിംഗ് സംരക്ഷണം ട്രാക്കറുകളെ തടഞ്ഞു</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">ഈ സൈറ്റിന് ട്രാക്കിംഗ് പരിരക്ഷ ഇപ്പോൾ ഓഫാണ്</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">സൈറ്റ് വിവരങ്ങള്‍</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">ലഭ്യമാക്കുന്നു</string>
+ </resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-mr/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-mr/strings.xml
new file mode 100644
index 0000000000..5430ce7327
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-mr/strings.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">मेनू</string>
+ <string name="mozac_clear_button_description">साफ करा</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">ट्रॅकिंग संरक्षण चालू आहे</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">ट्रॅकिंग संरक्षणने ट्रॅकर्स अवरोधित केले आहेत</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">या साइटसाठी ट्रॅकिंग संरक्षण बंद आहे</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">साईट माहिती</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">लोड होत आहे</string>
+ </resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-my/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-my/strings.xml
new file mode 100644
index 0000000000..006be61ee2
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-my/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">စာရင်း</string>
+ <string name="mozac_clear_button_description">ရှင်းလင်းပါ</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">ခြေရာခံကာကွယ်မှုကို ဖွင့်ထားသည်</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">ခြေရာခံကာကွယ်မှုသည် ခြေရာခံသူများကိုပိတ်ဆို့ထားသည်။</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">ဒီ site အတွက်အကာအကွယ်ပေးမှုကိုပိတ်ထားသည်</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">ဆိုက်အချက်အလက်</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">အလုပ်လုပ်နေတယ်</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">အလိုအလျောက်ဖွင့်ခြင်း ဆက်တင်မှ အကြောင်းအရာအချို့အား ပိတ်ထားသည်။</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-nb-rNO/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-nb-rNO/strings.xml
new file mode 100644
index 0000000000..9d9bcbfc13
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-nb-rNO/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Meny</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Tøm</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Sporingsbeskyttelse er på</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Sporingsbeskyttelse har blokkert sporere</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Sporingsbeskyttelse er slått av for dette nettstedet</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informasjon om nettstedet</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Laster</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Noe av innholdet er blokkert av autoavspillings-innstillingene</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ne-rNP/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ne-rNP/strings.xml
new file mode 100644
index 0000000000..6a4341aafd
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ne-rNP/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">मेनु</string>
+ <string name="mozac_clear_button_description">खाली गर्नुहोस्</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">ट्र्याकिंग संरक्षण सक्रिय छ</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">ट्र्याकिङ्ग सुरक्षाले ट्रयाकरहरुलाई रोकेको छ</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">हाल यस साइटको लागी ट्रयाकिङ् सुरक्षा बन्द गरिएको छ।</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">साइट जानकारी</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">लोड हुँदैछ</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">केहि सामग्री स्वतः प्ले सेटिङ्ग द्वारा रोकिएको छ</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-nl/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-nl/strings.xml
new file mode 100644
index 0000000000..fee481b12f
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-nl/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Wissen</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Bescherming tegen volgen is ingeschakeld</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Bescherming tegen volgen heeft trackers geblokkeerd</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Bescherming tegen volgen is uit voor deze website</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Website-informatie</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Laden</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Sommige inhoud is geblokkeerd door de instelling voor automatisch afspelen</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-nn-rNO/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-nn-rNO/strings.xml
new file mode 100644
index 0000000000..c77b3373d0
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-nn-rNO/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Meny</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Tøm</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Sporingsvern er på</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Sporingsvern har blokkert sporarar</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Sporingsvern er slått av for denne nettstaden</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informasjon om nettstaden</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Lastar</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Noko innhald har vorte blokkert av autoavspelings-innstillingane</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-oc/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-oc/strings.xml
new file mode 100644
index 0000000000..d2a72f26c1
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-oc/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menú</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Escafar</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">La proteccion contra lo seguiment es activada</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">La proteccion contra lo seguiment a blocat de traçadors</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">La proteccion contra lo seguiment es desactivada per aqueste site</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informacions del site</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Cargament</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Una part del contengut es estada blocada per la configuracion de la lectura automatica</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-or/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-or/strings.xml
new file mode 100644
index 0000000000..9ca67e8959
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-or/strings.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">ମେନୁ</string>
+ <string name="mozac_clear_button_description">ଖାଲି କରନ୍ତୁ</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">ଟ୍ରାକିଂ ସୁରକ୍ଷା ଚାଲୁଛି</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">ଟ୍ରାକିଂ ସୁରକ୍ଷା ଟ୍ରାକରଗୁଡ଼ିକୁ ରୋକି ଦେଇଛି</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">ଟ୍ରାକିଂ ସୁରକ୍ଷା ଏହି ସାଇଟ ପାଇଁ ବନ୍ଦ ଅଛି</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">ସାଇଟ ସୂଚନା</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">ଧାରଣ କରୁଅଛି</string>
+ </resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-pa-rIN/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-pa-rIN/strings.xml
new file mode 100644
index 0000000000..10a68745b3
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-pa-rIN/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">ਮੇਨੂ</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">ਸਾਫ਼ ਕਰੋ</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">ਟਰੈਕ ਕਰਨ ਤੋਂ ਸੁਰੱਖਿਆ ਚਾਲੂ ਹੈ</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">ਟਰੈਕਿੰਗ ਸੁਰੱਖਿਆ ਟਰੈਕਾਂ ਉੱਤੇ ਪਾਬੰਦੀ ਲਗਾਉਂਦੀ ਹੈ</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">ਇਸ ਸਾਈਟ ਲਈ ਟਰੈਕਿੰਗ ਸੁਰੱਖਿਆ ਬੰਦ ਹੈ</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">ਸਾਈਟ ਜਾਣਕਾਰੀ</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">ਲੋਡ ਹੋ ਰਿਹਾ ਹੈ</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">ਕੁਝ ਸਮੱਗਰੀ ਨੂੰ ਆਪੇ-ਪਲੇਅ ਦੀ ਸੈਟਿੰਗ ਰਾਹੀਂ ਪਾਬੰਦੀ ਲਾਈ ਹੈ</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-pa-rPK/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-pa-rPK/strings.xml
new file mode 100644
index 0000000000..f48af403b2
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-pa-rPK/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">مینو</string>
+ <string name="mozac_clear_button_description">صاف کرو</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">ٹوہ لاوݨ توں سرکھیا چالو اے</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">ٹوہ لاوݨ توں کجھ روک لاۓ گئے ہن</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">ٹوہ لاوݨ توں سرکھیا بند ہو گیا</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">سائٹ جاݨکاری</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">لوڈ کیتا جا رہا اے</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">خود بخود چلݨ نال کجھ وستوآں روکے گئے</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-pl/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-pl/strings.xml
new file mode 100644
index 0000000000..083dfd9aa9
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-pl/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Wyczyść</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Ochrona przed śledzeniem jest włączona</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Ochrona przed śledzeniem zablokowała elementy śledzące</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Ochrona przed śledzeniem jest wyłączona na tej witrynie</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informacje o witrynie</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Wczytywanie</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Część treści została zablokowana przez ustawienie automatycznego odtwarzania</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-pt-rBR/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-pt-rBR/strings.xml
new file mode 100644
index 0000000000..135bacdc26
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-pt-rBR/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Limpar</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Proteção contra rastreamento ativada</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">A proteção contra rastreamento bloqueou rastreadores</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">A proteção contra rastreamento está desativada neste site</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informações do site</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Carregando</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Algum conteúdo foi bloqueado pela configuração de reprodução automática</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-pt-rPT/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000000..bcd168a481
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-pt-rPT/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Limpar</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Proteção contra monitorização está ativada</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">A proteção contra a monitorização bloqueou rastreadores</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">A proteção contra monitorização está desativada para este site</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informação do site</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">A carregar</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Algum conteúdo foi bloqueado pela configuração de reprodução automática</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-rm/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-rm/strings.xml
new file mode 100644
index 0000000000..d583fd3c77
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-rm/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Stizzar</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">La protecziun cunter il fastizar è activa</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">La protecziun cunter il fastizar ha bloccà fastizaders</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">La protecziun cunter il fastizar è deactivada per questa website</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Infurmaziuns davart la website</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Chargiar</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Tschert cuntegn è vegnì bloccà dal parameter da la reproducziun automatica</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ro/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ro/strings.xml
new file mode 100644
index 0000000000..72dee0c902
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ro/strings.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Meniu</string>
+ <string name="mozac_clear_button_description">Șterge</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Protecția împotriva urmăririi este activată</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Protecția împotriva urmăririi a blocat elementele de urmărire</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Protecția împotriva urmăririi este dezactivată pentru acest site</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informații despre site</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Se încarcă</string>
+ </resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ru/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ru/strings.xml
new file mode 100644
index 0000000000..f722325b3a
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ru/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Меню</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Очистить</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Защита от отслеживания включена</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Защита от отслеживания заблокировала трекеры</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Защита от отслеживания отключена для этого сайта</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Сведения о сайте</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Загрузка</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Некоторое содержимое было заблокировано настройками автовоспроизведения</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sat/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sat/strings.xml
new file mode 100644
index 0000000000..f363d29490
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sat/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">ᱢᱮᱱᱩ</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">ᱯᱷᱟᱨᱪᱟ</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">ᱯᱟᱸᱡᱟ ᱟᱰ ᱪᱟᱹᱞᱩ ᱢᱮᱱᱟᱜ-ᱟ</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">ᱯᱟᱸᱡᱟ ᱨᱚᱯᱷᱟ ᱯᱟᱧᱡᱟ ᱫᱟᱱᱟᱲ ᱠᱚ ᱟᱠᱚᱴ ᱠᱮᱜᱼᱟᱭ</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">ᱯᱟᱸᱡᱟ ᱨᱚᱯᱷᱟ ᱵᱚᱸᱫᱚ ᱢᱮᱱᱟᱜ-ᱟ</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">ᱥᱟᱭᱤᱴ ᱨᱮᱭᱟᱜ ᱠᱷᱚᱵᱚᱨ</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">ᱞᱟᱫᱮᱜ ᱠᱟᱱᱟ</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">ᱟᱡ ᱛᱮ ᱮᱛᱦᱚᱵ ᱥᱟᱡᱟᱣ ᱠᱚ ᱠᱷᱟᱹᱛᱤᱨ ᱛᱮ ᱠᱤᱪᱷᱤ ᱡᱤᱱᱤᱥ ᱠᱚ ᱵᱞᱚᱠ ᱠᱟᱱᱟ</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sc/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sc/strings.xml
new file mode 100644
index 0000000000..f0b375f172
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sc/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menù</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Isbòida</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">S’amparu contra sa sighidura est ativu</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">S’amparu contra sa sighidura at blocadu sighidores</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Sa protetzione contra sa sighidura est disativada pro custu situ</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informatziones de su situ</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Carrighende</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Sa funtzionalidade de riprodutzione automàtica at blocadu cuntenutos</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-si/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-si/strings.xml
new file mode 100644
index 0000000000..52a9db1744
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-si/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">වට්ටෝරුව</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">මකන්න</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">ලුහුබැඳීමේ රැකවරණය සක්‍රියයි</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">ලුහුබැඳීමේ රැකවරණයෙන් අවහිරයි</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">අඩවිය සඳහා ලුහුබැඳීමේ රැකවරණය අබලයි</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">අඩවියේ තොරතුරු</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">පූරණය වෙමින්</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">ස්වයං වාදන සැකසුම මගින් ඇතැම් අන්තර්ගත අවහිර වී ඇත</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sk/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sk/strings.xml
new file mode 100644
index 0000000000..d60ecd8152
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sk/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Ponuka</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Vymazať</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Ochrana pred sledovaním je zapnutá</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Ochrana pred sledovaním zablokovala sledovacie prvky</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Ochrana pred sledovaním je na tejto stránke vypnutá</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informácie o stránke</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Načítava sa</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Niektorý obsah bol zablokovaný nastavením automatického prehrávania</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-skr/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-skr/strings.xml
new file mode 100644
index 0000000000..ccf404cabd
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-skr/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">مینیو</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">صاف کرو</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">سراغ کاری تحفظ چالو ہے</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">سراغ کاری تحفظ نے سُراغ رساں کوں بلاک کر ݙتا ہے</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">سراغ کاری تحفظ ایں سائٹ کیتے بند ہے</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">سائٹ ڄاݨکاری</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">لوڈ تھیندا پئے</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">کجھ مواد کوں آٹو پلے ترتیباں نال بلاک کر ݙتا ڳئے</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sl/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sl/strings.xml
new file mode 100644
index 0000000000..0d7a545930
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sl/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Meni</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Počisti</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Zaščita pred sledenjem je vključena</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Zaščita pred sledenjem je zavrnila sledilce</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Zaščita pred sledenjem je za to spletno mesto izključena</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Podatki o strani</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Nalaganje</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Nastavitev samodejnega predvajanja je zavrnila nekaj vsebine</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sq/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sq/strings.xml
new file mode 100644
index 0000000000..33b69257a5
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sq/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Spastroje</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Mbrojtje Nga Gjurmimet është aktive</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Mbrojtja Nga Gjurmimet ka bllokuar gjurmues</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Mbrojtja Nga Gjurmimet është e çaktivizuar për këtë sajt</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Hollësi sajti</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Po ngarkohet</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Është bllokuar lëndë nga rregullimi i vetëluajtjes</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sr/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sr/strings.xml
new file mode 100644
index 0000000000..5e70cab0c1
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sr/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Мени</string>
+ <string name="mozac_clear_button_description">Обриши</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Заштита од праћења је укључена</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Заштита од праћења је блокирала пратиоце</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Заштита од праћења је искључена за ову страницу</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Информације о страници</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Учитавање</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Неки садржај је блокиран због подешавања аутоматске репродукције</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-su/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-su/strings.xml
new file mode 100644
index 0000000000..af9bfdc6b0
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-su/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Beresihan</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Kilung Palacakan keur hurung</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Kilung Palacakan geus meungpeuk palacak</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Kilung Palacakan pareum pikeun ieu loka</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Émbaran loka</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Ngamuat</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Sababaraha kontén dipeungpeuk ku setélan otoplay</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sv-rSE/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sv-rSE/strings.xml
new file mode 100644
index 0000000000..8922e20f5e
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-sv-rSE/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Meny</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Rensa</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Spårningsskydd är på</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Spårningsskydd har blockerat spårare</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Spårningsskydd är avstängt för den här webbplatsen</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Webbplatsinformation</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Laddar</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">En del innehåll har blockerats av inställningen för automatisk uppspelning</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-szl/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-szl/strings.xml
new file mode 100644
index 0000000000..e6537d32b1
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-szl/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Myni</string>
+ <string name="mozac_clear_button_description">Wypucuj</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Ôchrōna ôd śledzynio je załōnczōno</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Ôchrōna ôd śledzynio szperuje śledzōnce elymynty</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Na tyj strōnie ôchrōna ôd śledzynio je wyłōnczōno</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informacyje ô strōnie</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Ladowanie</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Nasztalowanie autōmatycznego puszczanio zaszperowało kōnsek zawartości</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ta/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ta/strings.xml
new file mode 100644
index 0000000000..9b6e317f6c
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ta/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">பட்டி</string>
+ <string name="mozac_clear_button_description">துடை</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">தடமறியல் பாதுகாப்பு இயக்கத்தில்</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">தடமறியல் பாதுகாப்பு தடமறிவான்களை முடக்கியது</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">தடமறியல் பாதுகாப்பு இத்தளத்தில் அணைக்கப்பட்டுள்ளது</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">தளத்தகவல்கள்</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">ஏற்றுகிறது</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">தன்னியக்க அமைப்பால் சில உள்ளடக்கம் தடுக்கப்பட்டுள்ளது</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-te/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-te/strings.xml
new file mode 100644
index 0000000000..504c84b58d
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-te/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">మెనూ</string>
+ <string name="mozac_clear_button_description">తుడిచివేయి</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">ట్రాకింగ్ సంరక్షణ చేతనంగా ఉంది</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">ట్రాకింగ్ సంరక్షణ ట్రాకర్లను నిరోధించింది</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">ఈ సైటుకి ట్రాకింగ్ సంరక్షణ ఆపివేయబడింది</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">సైటు సమాచారం</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">వస్తోంది</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">ఆటోప్లే అమరిక ద్వారా కొంత కంటెంట్ నిరోధించబడింది</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tg/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tg/strings.xml
new file mode 100644
index 0000000000..0fed273e55
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tg/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Меню</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Пок кардан</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Муҳофизат аз пайгирӣ фаъол аст</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Муҳофизат аз пайгирӣ васоити пайгириро манъ кард</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Муҳофизат аз пайгирӣ барои ин сомона хомӯш аст</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Маълумот дар бораи сомона</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Бор шуда истодааст</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Баъзеи муҳтаво тавассути танзими пахши худкор манъ карда шуд</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-th/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-th/strings.xml
new file mode 100644
index 0000000000..55f06924fa
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-th/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">เมนู</string>
+ <string name="mozac_clear_button_description">ล้าง</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">การป้องกันการติดตามเปิดอยู่</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">การป้องกันการติดตามได้ปิดกั้นตัวติดตาม</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">การป้องกันการติดตามปิดอยู่สำหรับไซต์นี้</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">ข้อมูลไซต์</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">กำลังโหลด</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">เนื้อหาบางส่วนถูกปิดกั้นด้วยการตั้งค่าเล่นอัตโนมัติ</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tl/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tl/strings.xml
new file mode 100644
index 0000000000..4e5e6b3300
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tl/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <string name="mozac_clear_button_description">Burahin</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Nakabukas ang Tracking Protection</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">May naharang na mga tracker ang Tracking Protection</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Nakasara ang Tracking Protection sa site na ito</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Impormasyon sa site</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Naglo-load</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">May ilang content na naharang dahil sa autoplay setting</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tok/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tok/strings.xml
new file mode 100644
index 0000000000..d9f3149d1b
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tok/strings.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <string name="mozac_clear_button_description">o weka ale</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">lipu li ken ala lukin e sona sina</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">lipu li weka e lipu lukin</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">lipu ni la weka pi lipu lukin li lon ala</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">sona lipu</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">o awen</string>
+ </resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tr/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tr/strings.xml
new file mode 100644
index 0000000000..904675f6e9
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tr/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menü</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Temizle</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">İzlenme koruması açık</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">İzlenme koruması, takip kodlarını engelledi</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Bu sitede izlenme koruması kapalı</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Site bilgileri</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Yükleniyor</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Otomatik oynatma ayarınız bazı içerikleri engelledi</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-trs/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-trs/strings.xml
new file mode 100644
index 0000000000..ef86e00be9
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-trs/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menû</string>
+ <string name="mozac_clear_button_description">Nā\'nïn\'</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Sa narrán riña sa naga\'nāj a</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Narrán sa dugumî ñù\' riña nej sa naga\'nāj a</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Nitāj si \'iaj sun sa narán riña sa naga\'nāj a riña sitiô nan</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Nuguan\' huā rayi\'î sitiô nan</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Hìaj ayì\'ij</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Huā da’āj nej sa mà riñaj narán gi’iaj guendâ nù sa duguachín man’an sa ni’io’</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tt/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tt/strings.xml
new file mode 100644
index 0000000000..3a463ee5cf
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tt/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Меню</string>
+ <string name="mozac_clear_button_description">Чистарту</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Күзәтелүдән Саклау кабызылган</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Күзәтүдән саклау күзәтеп торучыларны блоклады</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Бу сайт өчен Күзәтелүдән Саклау сүндерелгән</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Сайт турында мәгълүмат</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Йөкләү</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Автоуйнату көйләүләре аркасында кайбер эчтәлекләр блокланды</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tzm/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tzm/strings.xml
new file mode 100644
index 0000000000..d451c5972c
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-tzm/strings.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Umuɣ</string>
+ <string name="mozac_clear_button_description">Sfeḍ</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Asmel n wasit</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Asali</string>
+ </resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ug/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ug/strings.xml
new file mode 100644
index 0000000000..89e5173df3
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ug/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">تىزىملىك</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">تازىلا</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">ئىزلاشتىن توسۇش ئىقتىدارى ئوچۇق</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">ئىز قوغلاش قوغدىغۇچىسى ئىز قوغلىغۇچىلارنى توستى</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">بۇ توربېكەتكە نىسبەتەن ئىزلاشتىن قوغداش تاقاق</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">بېكەت ئۇچۇرى</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">يۈكلەۋاتىدۇ</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">بەزى مەزمۇنلارنى ئاپتوماتىك قويۇش تەڭشىكى توستى</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-uk/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-uk/strings.xml
new file mode 100644
index 0000000000..1460d015dd
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-uk/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Меню</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Очистити</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Захист від стеження увімкнено</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Захист від стеження заблокував стеження</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Захист від стеження вимкнено для цього сайту</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Інформація про сайт</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Завантаження</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Деякий вміст заблоковано налаштуванням автовідтворення</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ur/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ur/strings.xml
new file mode 100644
index 0000000000..78470d254c
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-ur/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">مینیو</string>
+ <string name="mozac_clear_button_description">صاف کریں</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">سراغ کاری تحفظ چالو ہے</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">سراغ کاری تحفظ نے سُراغ رساں کو مسدود کردیا ہے</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">سراغ کاری تحفظ اس سائٹ کے لیئے بند ہے</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">سائٹ کی معلومات</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">لوڈ کر رہا ہے</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">کچھ مشمولات کو آٹو پلے سیٹنگ سے مسدود کردیا گیا ہے</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-uz/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-uz/strings.xml
new file mode 100644
index 0000000000..ec69af71f6
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-uz/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menyu</string>
+ <string name="mozac_clear_button_description">Tozalash</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Kuzatuvdan himoya yoniq</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Kuzatuvdan himoya funksiyasi kuzatuvchilarni blokladi</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Bu sayt uchun kuzatuvdan himoya funksiyasi oʻchirilgan</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Sayt maʼlumoti</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Yuklanmoqda</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Avtomatik ishga tushirish sozlamasi tufayli ayrim kontentlar bloklandi</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-vec/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-vec/strings.xml
new file mode 100644
index 0000000000..15a625bcbc
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-vec/strings.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <string name="mozac_clear_button_description">Pulisi</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Ƚa protesion antitraciamento ƚa xe ativa</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Ƚa protesion antitraciamento ƚa ga blocà contenudi tracianti</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Ƚa protesion antitraciamento ƚa xe disativà par sto sito</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Informasioni sito</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Cargamento</string>
+ </resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-vi/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-vi/strings.xml
new file mode 100644
index 0000000000..c3c54456ed
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-vi/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Xóa</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Trình chống theo dõi đang bật</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Trình chống theo dõi đã chặn trình theo dõi</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Đã tắt Trình chống theo dõi cho trang web này</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Thông tin về trang web</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Đang tải</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Một số nội dung đã bị chặn bởi cài đặt tự động phát</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-yo/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-yo/strings.xml
new file mode 100644
index 0000000000..6f46be1286
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-yo/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Mẹ́nù</string>
+ <string name="mozac_clear_button_description">Paárẹ́</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Ìtọpinpin Ìdàábòbò wà ní títàn </string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Ìtọpinpin ìdàábòbò ti dènà atọpinpin</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Ìtọpinpin ìdàábòbò ti di pípa fún ìkànnì yìí</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Ìfitóniléti ìkànnì</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Ó ń gbáradì</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Àwọn àkòónú kan ti di dídénà ààtò ìfi-ara-ẹni-ṣisẹ́</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-zh-rCN/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000000..3cb765dc23
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-zh-rCN/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">菜单</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">清除</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">已开启跟踪保护</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">跟踪保护已拦截跟踪器</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">已关闭对此网站的跟踪保护</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">网站信息</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">正在加载</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">某些内容已被自动播放设置阻止</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-zh-rTW/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000000..d1d023f3db
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values-zh-rTW/strings.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">選單</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">清除</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">追蹤保護功能已開啟</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">追蹤保護功能已封鎖追蹤器</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">已關閉針對此網站的追蹤保護功能</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">網站資訊</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">載入中</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">某些內容已由自動播放設定封鎖</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values/attrs_browser_toolbar.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values/attrs_browser_toolbar.xml
new file mode 100644
index 0000000000..431bb6b080
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values/attrs_browser_toolbar.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<resources>
+ <declare-styleable name="BrowserToolbar">
+ <attr name="browserToolbarHintColor" format="color"/>
+ <attr name="browserToolbarTextColor" format="color"/>
+ <attr name="browserToolbarTextSize" format="dimension"/>
+ <attr name="browserToolbarSecurityIcon" format="reference"/>
+ <attr name="browserToolbarInsecureColor" format="color"/>
+ <attr name="browserToolbarSecureColor" format="color"/>
+ <attr name="browserToolbarMenuColor" format="color"/>
+ <attr name="browserToolbarSuggestionBackgroundColor" format="color" />
+ <attr name="browserToolbarSuggestionForegroundColor" format="color" />
+ <attr name="browserToolbarClearColor" format="color"/>
+ <attr name="browserToolbarTrackingProtectionAndSecurityIndicatorSeparatorColor" format="color"/>
+ <attr name="browserToolbarFadingEdgeSize" format="dimension" />
+ <attr name="browserToolbarProgressBarGravity">
+ <enum name="bottom" value="0" />
+ <enum name="top" value="1" />
+ </attr>
+ </declare-styleable>
+
+ <declare-styleable name="BrowserToolbarSiteSecurityState">
+ <attr name="state_site_secure" format="boolean"/>
+ </declare-styleable>
+
+ <declare-styleable name="ActionContainer">
+ <attr name="actionContainerItemSize" format="dimension" />
+ </declare-styleable>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values/dimens.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values/dimens.xml
new file mode 100644
index 0000000000..23fd755686
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values/dimens.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<resources>
+ <dimen name="mozac_browser_toolbar_default_toolbar_height">56dp</dimen>
+
+ <!-- DisplayToolbar -->
+ <dimen name="mozac_browser_toolbar_progress_bar_height">3dp</dimen>
+ <dimen name="mozac_browser_toolbar_icons_separator_height">24dp</dimen>
+ <dimen name="mozac_browser_toolbar_icons_separator_width">1dp</dimen>
+ <dimen name="mozac_browser_toolbar_page_action_separator_width">4dp</dimen>
+ <dimen name="mozac_browser_toolbar_url_fading_edge_size">24dp</dimen>
+ <dimen name="mozac_browser_toolbar_icon_padding">12dp</dimen>
+ <dimen name="mozac_browser_toolbar_icon_size">24dp</dimen>
+ <dimen name="mozac_browser_toolbar_menu_padding">16dp</dimen>
+ <dimen name="mozac_browser_toolbar_origin_padding_end">0dp</dimen>
+
+ <!-- EditToolbar -->
+ <dimen name="mozac_browser_toolbar_url_horizontal_padding">8dp</dimen>
+ <dimen name="mozac_browser_toolbar_url_vertical_padding">0dp</dimen>
+ <dimen name="mozac_browser_toolbar_url_gone_margin_end">8dp</dimen>
+ <dimen name="mozac_browser_toolbar_cancel_padding">16dp</dimen>
+
+ <dimen name="mozac_browser_toolbar_url_textsize">15sp</dimen>
+ <dimen name="mozac_browser_toolbar_title_textsize">15sp</dimen>
+ <dimen name="mozac_browser_toolbar_url_with_title_textsize">12sp</dimen>
+
+ <dimen name="mozac_browser_toolbar_pageaction_size">48dp</dimen>
+ <dimen name="mozac_browser_toolbar_browseraction_size">48dp</dimen>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values/ids.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values/ids.xml
new file mode 100644
index 0000000000..20e28a0c58
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values/ids.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<resources>
+ <item name="mozac_browser_toolbar_title_view" type="id"/>
+ <item name="mozac_browser_toolbar_url_view" type="id"/>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/main/res/values/strings.xml b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values/strings.xml
new file mode 100644
index 0000000000..c845e189e7
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/main/res/values/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<resources>
+ <!-- Content description (not visible, for screen readers etc.): Description for the overflow menu button in the browser toolbar. -->
+ <string name="mozac_browser_toolbar_menu_button">Menu</string>
+ <!-- Content description: For the clear URL text button. -->
+ <string name="mozac_clear_button_description">Clear</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, but none trackers have been blocked or detected. -->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_no_trackers_blocked">Tracking Protection is on</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection enabled, and trackers have been blocked or detected.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_on_trackers_blocked1">Tracking Protection has blocked trackers</string>
+ <!-- Content description: For the tracking protection toolbar icon, it is set when the site has tracking protection disabled.-->
+ <string name="mozac_browser_toolbar_content_description_tracking_protection_off_for_a_site1">Tracking Protection is off for this site</string>
+ <!-- Content description: For the site security information icon (the site security icon).-->
+ <string name="mozac_browser_toolbar_content_description_site_info">Site information</string>
+ <!-- Announcement made by the screen reader when the progress bar is shown and a page is loading -->
+ <string name="mozac_browser_toolbar_progress_loading">Loading</string>
+ <!-- Content description: For the autoplay toolbar icon, it is set when the auto play permission is blocking content playing.-->
+ <string name="mozac_browser_toolbar_content_description_autoplay_blocked">Some content has been blocked by the autoplay setting</string>
+</resources>
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/AsyncFilterListenerTest.kt b/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/AsyncFilterListenerTest.kt
new file mode 100644
index 0000000000..6c95c8f243
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/AsyncFilterListenerTest.kt
@@ -0,0 +1,350 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar2
+
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.asCoroutineDispatcher
+import kotlinx.coroutines.async
+import kotlinx.coroutines.cancelChildren
+import kotlinx.coroutines.isActive
+import kotlinx.coroutines.test.runTest
+import mozilla.components.concept.toolbar.AutocompleteDelegate
+import mozilla.components.concept.toolbar.AutocompleteResult
+import mozilla.components.support.test.mock
+import mozilla.components.ui.autocomplete.AutocompleteView
+import mozilla.components.ui.autocomplete.InlineAutocompleteEditText
+import org.junit.Assert.assertEquals
+import org.junit.Assert.fail
+import org.junit.Test
+import org.mockito.Mockito.atLeast
+import org.mockito.Mockito.atLeastOnce
+import org.mockito.Mockito.never
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
+import java.util.concurrent.Executor
+
+@ExperimentalCoroutinesApi // for runTest
+class AsyncFilterListenerTest {
+ @Test
+ fun `filter listener cancels prior filter executions`() = runTest {
+ val urlView: AutocompleteView = mock()
+ val filter: suspend (String, AutocompleteDelegate) -> Unit = mock()
+
+ val dispatcher = spy(
+ Executor {
+ it.run()
+ }.asCoroutineDispatcher(),
+ )
+
+ val listener = AsyncFilterListener(urlView, dispatcher, filter)
+
+ verify(dispatcher, never()).cancelChildren()
+
+ listener("test")
+
+ verify(dispatcher, atLeastOnce()).cancelChildren()
+ }
+
+ @Test
+ fun `filter delegate checks for cancellations before it runs, passes results to autocomplete view`() = runTest {
+ var filter: suspend (String, AutocompleteDelegate) -> Unit = { query, delegate ->
+ assertEquals("test", query)
+ delegate.applyAutocompleteResult(
+ AutocompleteResult(
+ input = "test",
+ text = "testing.com",
+ url = "http://www.testing.com",
+ source = "asyncTest",
+ totalItems = 1,
+ ),
+ )
+ }
+
+ val dispatcher = spy(
+ Executor {
+ it.run()
+ }.asCoroutineDispatcher(),
+ )
+
+ var didCallApply = 0
+
+ var listener = AsyncFilterListener(
+ object : AutocompleteView {
+ override val originalText: String = "test"
+
+ override fun applyAutocompleteResult(result: InlineAutocompleteEditText.AutocompleteResult) {
+ assertEquals("asyncTest", result.source)
+ assertEquals("testing.com", result.text)
+ assertEquals(1, result.totalItems)
+ didCallApply += 1
+ }
+
+ override fun noAutocompleteResult() {
+ fail()
+ }
+ },
+ dispatcher,
+ filter,
+ this.coroutineContext,
+ )
+
+ verify(dispatcher, never()).isActive
+
+ async { listener("test") }.await()
+
+ // Checked if parent scope is still active. Somehow, each access to 'isActive' registers as 4?
+ verify(dispatcher, atLeast(4)).isActive
+ // Passed the result to the view's apply method exactly once.
+ assertEquals(1, didCallApply)
+
+ filter = { query, delegate ->
+ assertEquals("moz", query)
+ delegate.applyAutocompleteResult(
+ AutocompleteResult(
+ input = "moz",
+ text = "mozilla.com",
+ url = "http://www.mozilla.com",
+ source = "asyncTestTwo",
+ totalItems = 2,
+ ),
+ )
+ }
+ listener = AsyncFilterListener(
+ object : AutocompleteView {
+ override val originalText: String = "moz"
+
+ override fun applyAutocompleteResult(result: InlineAutocompleteEditText.AutocompleteResult) {
+ assertEquals("asyncTestTwo", result.source)
+ assertEquals("mozilla.com", result.text)
+ assertEquals(2, result.totalItems)
+ didCallApply += 1
+ }
+
+ override fun noAutocompleteResult() {
+ fail()
+ }
+ },
+ dispatcher,
+ filter,
+ this.coroutineContext,
+ )
+
+ async { listener("moz") }.await()
+
+ verify(dispatcher, atLeast(8)).isActive
+ assertEquals(2, didCallApply)
+ }
+
+ @Test
+ fun `delegate discards stale results`() = runTest {
+ val filter: suspend (String, AutocompleteDelegate) -> Unit = { query, delegate ->
+ assertEquals("test", query)
+ delegate.applyAutocompleteResult(
+ AutocompleteResult(
+ input = "test",
+ text = "testing.com",
+ url = "http://www.testing.com",
+ source = "asyncTest",
+ totalItems = 1,
+ ),
+ )
+ }
+
+ val dispatcher = Executor {
+ it.run()
+ }.asCoroutineDispatcher()
+
+ val listener = AsyncFilterListener(
+ object : AutocompleteView {
+ override val originalText: String = "nolongertest"
+
+ override fun applyAutocompleteResult(result: InlineAutocompleteEditText.AutocompleteResult) {
+ fail()
+ }
+
+ override fun noAutocompleteResult() {
+ fail()
+ }
+ },
+ dispatcher,
+ filter,
+ this.coroutineContext,
+ )
+
+ listener("test")
+ }
+
+ @Test
+ fun `delegate discards stale lack of results`() = runTest {
+ val filter: suspend (String, AutocompleteDelegate) -> Unit = { query, delegate ->
+ assertEquals("test", query)
+ delegate.noAutocompleteResult("test")
+ }
+
+ val dispatcher = Executor {
+ it.run()
+ }.asCoroutineDispatcher()
+
+ val listener = AsyncFilterListener(
+ object : AutocompleteView {
+ override val originalText: String = "nolongertest"
+
+ override fun applyAutocompleteResult(result: InlineAutocompleteEditText.AutocompleteResult) {
+ fail()
+ }
+
+ override fun noAutocompleteResult() {
+ fail()
+ }
+ },
+ dispatcher,
+ filter,
+ this.coroutineContext,
+ )
+
+ listener("test")
+ }
+
+ @Test
+ fun `delegate passes through non-stale lack of results`() = runTest {
+ val filter: suspend (String, AutocompleteDelegate) -> Unit = { query, delegate ->
+ assertEquals("test", query)
+ delegate.noAutocompleteResult("test")
+ }
+
+ val dispatcher = Executor {
+ it.run()
+ }.asCoroutineDispatcher()
+
+ var calledNoResults = 0
+ val listener = AsyncFilterListener(
+ object : AutocompleteView {
+ override val originalText: String = "test"
+
+ override fun applyAutocompleteResult(result: InlineAutocompleteEditText.AutocompleteResult) {
+ fail()
+ }
+
+ override fun noAutocompleteResult() {
+ calledNoResults += 1
+ }
+ },
+ dispatcher,
+ filter,
+ this.coroutineContext,
+ )
+
+ async { listener("test") }.await()
+
+ assertEquals(1, calledNoResults)
+ }
+
+ @Test
+ fun `delegate discards results if parent scope was cancelled`() = runTest {
+ var preservedDelegate: AutocompleteDelegate? = null
+
+ val filter: suspend (String, AutocompleteDelegate) -> Unit = { query, delegate ->
+ preservedDelegate = delegate
+ assertEquals("test", query)
+ delegate.applyAutocompleteResult(
+ AutocompleteResult(
+ input = "test",
+ text = "testing.com",
+ url = "http://www.testing.com",
+ source = "asyncTest",
+ totalItems = 1,
+ ),
+ )
+ }
+
+ val dispatcher = Executor {
+ it.run()
+ }.asCoroutineDispatcher()
+
+ var calledResults = 0
+ val listener = AsyncFilterListener(
+ object : AutocompleteView {
+ override val originalText: String = "test"
+
+ override fun applyAutocompleteResult(result: InlineAutocompleteEditText.AutocompleteResult) {
+ assertEquals("asyncTest", result.source)
+ assertEquals("testing.com", result.text)
+ assertEquals(1, result.totalItems)
+ calledResults += 1
+ }
+
+ override fun noAutocompleteResult() {
+ fail()
+ }
+ },
+ dispatcher,
+ filter,
+ this.coroutineContext,
+ )
+
+ async {
+ listener("test")
+ listener("test")
+ }.await()
+
+ // This result application should be discarded, because scope has been cancelled by the second
+ // 'listener' call above.
+ preservedDelegate!!.applyAutocompleteResult(
+ AutocompleteResult(
+ input = "test",
+ text = "testing.com",
+ url = "http://www.testing.com",
+ source = "asyncCancelled",
+ totalItems = 1,
+ ),
+ )
+
+ assertEquals(2, calledResults)
+ }
+
+ @Test
+ fun `delegate discards lack of results if parent scope was cancelled`() = runTest {
+ var preservedDelegate: AutocompleteDelegate? = null
+
+ val filter: suspend (String, AutocompleteDelegate) -> Unit = { query, delegate ->
+ preservedDelegate = delegate
+ assertEquals("test", query)
+ delegate.noAutocompleteResult("test")
+ }
+
+ val dispatcher = Executor {
+ it.run()
+ }.asCoroutineDispatcher()
+
+ var calledResults = 0
+ val listener = AsyncFilterListener(
+ object : AutocompleteView {
+ override val originalText: String = "test"
+
+ override fun applyAutocompleteResult(result: InlineAutocompleteEditText.AutocompleteResult) {
+ fail()
+ }
+
+ override fun noAutocompleteResult() {
+ calledResults += 1
+ }
+ },
+ dispatcher,
+ filter,
+ this.coroutineContext,
+ )
+
+ async {
+ listener("test")
+ listener("test")
+ }.await()
+
+ // This "no results" call should be discarded, because scope has been cancelled by the second
+ // 'listener' call above.
+ preservedDelegate!!.noAutocompleteResult("test")
+
+ assertEquals(2, calledResults)
+ }
+}
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/BrowserToolbarTest.kt b/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/BrowserToolbarTest.kt
new file mode 100644
index 0000000000..d1a499e30c
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/BrowserToolbarTest.kt
@@ -0,0 +1,1044 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar2
+
+import android.content.Context
+import android.graphics.drawable.Drawable
+import android.util.AttributeSet
+import android.view.View
+import android.view.ViewParent
+import android.view.accessibility.AccessibilityEvent
+import android.view.accessibility.AccessibilityManager
+import android.widget.ImageButton
+import androidx.coordinatorlayout.widget.CoordinatorLayout
+import androidx.core.view.inputmethod.EditorInfoCompat
+import androidx.core.view.isGone
+import androidx.core.view.isVisible
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.browser.toolbar2.display.DisplayToolbar
+import mozilla.components.browser.toolbar2.display.DisplayToolbarViews
+import mozilla.components.browser.toolbar2.display.MenuButton
+import mozilla.components.browser.toolbar2.edit.EditToolbar
+import mozilla.components.concept.toolbar.AutocompleteDelegate
+import mozilla.components.concept.toolbar.Toolbar
+import mozilla.components.concept.toolbar.Toolbar.SiteSecurity
+import mozilla.components.concept.toolbar.Toolbar.SiteTrackingProtection
+import mozilla.components.support.ktx.kotlin.MAX_URI_LENGTH
+import mozilla.components.support.test.argumentCaptor
+import mozilla.components.support.test.mock
+import mozilla.components.support.test.robolectric.testContext
+import mozilla.components.support.test.whenever
+import mozilla.components.ui.widgets.behavior.EngineViewScrollingBehavior
+import mozilla.components.ui.widgets.behavior.ViewPosition
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotEquals
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentCaptor
+import org.mockito.ArgumentMatchers
+import org.mockito.Mockito.any
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.never
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.times
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.verifyNoMoreInteractions
+import org.mockito.Mockito.`when`
+import org.robolectric.Robolectric
+import org.robolectric.Shadows.shadowOf
+
+@RunWith(AndroidJUnit4::class)
+class BrowserToolbarTest {
+
+ @Test
+ fun `display toolbar is visible by default`() {
+ val toolbar = BrowserToolbar(testContext)
+ assertTrue(toolbar.display.rootView.visibility == View.VISIBLE)
+ assertTrue(toolbar.edit.rootView.visibility == View.GONE)
+ }
+
+ @Test
+ fun `calling editMode() makes edit toolbar visible`() {
+ val toolbar = BrowserToolbar(testContext)
+ assertTrue(toolbar.display.rootView.visibility == View.VISIBLE)
+ assertTrue(toolbar.edit.rootView.visibility == View.GONE)
+
+ toolbar.editMode()
+
+ assertTrue(toolbar.display.rootView.visibility == View.GONE)
+ assertTrue(toolbar.edit.rootView.visibility == View.VISIBLE)
+ }
+
+ @Test
+ fun `calling displayMode() makes display toolbar visible`() {
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.editMode()
+
+ assertTrue(toolbar.display.rootView.visibility == View.GONE)
+ assertTrue(toolbar.edit.rootView.visibility == View.VISIBLE)
+
+ toolbar.displayMode()
+
+ assertTrue(toolbar.display.rootView.visibility == View.VISIBLE)
+ assertTrue(toolbar.edit.rootView.visibility == View.GONE)
+ }
+
+ @Test
+ fun `back presses will not be handled in display mode`() {
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.displayMode()
+
+ assertFalse(toolbar.onBackPressed())
+
+ assertTrue(toolbar.display.rootView.visibility == View.VISIBLE)
+ assertTrue(toolbar.edit.rootView.visibility == View.GONE)
+ }
+
+ @Test
+ fun `back presses will switch from edit mode to display mode`() {
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.editMode()
+
+ assertTrue(toolbar.display.rootView.visibility == View.GONE)
+ assertTrue(toolbar.edit.rootView.visibility == View.VISIBLE)
+
+ assertTrue(toolbar.onBackPressed())
+
+ assertTrue(toolbar.display.rootView.visibility == View.VISIBLE)
+ assertTrue(toolbar.edit.rootView.visibility == View.GONE)
+ }
+
+ @Test
+ fun `displayUrl will be forwarded to display toolbar immediately`() {
+ val toolbar = BrowserToolbar(testContext)
+ val display: DisplayToolbar = mock()
+ val edit: EditToolbar = mock()
+
+ toolbar.display = display
+ toolbar.edit = edit
+
+ toolbar.url = "https://www.mozilla.org"
+
+ verify(display).url = "https://www.mozilla.org"
+ verify(edit, never()).updateUrl(ArgumentMatchers.anyString(), ArgumentMatchers.anyBoolean(), ArgumentMatchers.anyBoolean(), ArgumentMatchers.anyBoolean())
+ }
+
+ @Test
+ fun `displayUrl is truncated to prevent extreme cases from slowing down the UI`() {
+ val toolbar = BrowserToolbar(testContext)
+ val display: DisplayToolbar = mock()
+ val edit: EditToolbar = mock()
+
+ toolbar.display = display
+ toolbar.edit = edit
+
+ toolbar.url = "a".repeat(MAX_URI_LENGTH + 1)
+ toolbar.url = "b".repeat(MAX_URI_LENGTH)
+ toolbar.url = "c".repeat(MAX_URI_LENGTH - 1)
+
+ val urlCaptor = argumentCaptor<String>()
+ verify(display, times(3)).url = urlCaptor.capture()
+
+ val capturedValues = urlCaptor.allValues
+ // Value was too long and should've been truncated
+ assertEquals("a".repeat(MAX_URI_LENGTH), capturedValues[0])
+ // Values should be the same as before
+ assertEquals("b".repeat(MAX_URI_LENGTH), capturedValues[1])
+ assertEquals("c".repeat(MAX_URI_LENGTH - 1), capturedValues[2])
+ }
+
+ @Test
+ fun `searchTerms is truncated in case it is greater than MAX_URI_LENGTH`() {
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.edit = spy(toolbar.edit)
+ toolbar.editMode()
+
+ toolbar.setSearchTerms("a".repeat(MAX_URI_LENGTH + 1))
+
+ // Value was too long and should've been truncated
+ assertEquals(toolbar.searchTerms.length, MAX_URI_LENGTH)
+ verify(toolbar.edit).editSuggestion("a".repeat(MAX_URI_LENGTH))
+ }
+
+ @Test
+ fun `searchTerms is not truncated in case it is equal or less than MAX_URI_LENGTH`() {
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.edit = spy(toolbar.edit)
+ toolbar.editMode()
+
+ toolbar.setSearchTerms("b".repeat(MAX_URI_LENGTH))
+
+ // Value should be the same as before
+ assertEquals(toolbar.searchTerms.length, MAX_URI_LENGTH)
+ verify(toolbar.edit).editSuggestion("b".repeat(MAX_URI_LENGTH))
+
+ toolbar.setSearchTerms("c".repeat(MAX_URI_LENGTH - 1))
+
+ // Value should be the same as before
+ assertEquals(toolbar.searchTerms.length, MAX_URI_LENGTH - 1)
+ verify(toolbar.edit).editSuggestion("c".repeat(MAX_URI_LENGTH - 1))
+ }
+
+ @Test
+ fun `last URL will be forwarded to edit toolbar when switching mode`() {
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.edit = spy(toolbar.edit)
+
+ toolbar.url = "https://www.mozilla.org"
+ verify(toolbar.edit, never()).updateUrl("https://www.mozilla.org", false)
+
+ toolbar.editMode()
+
+ verify(toolbar.edit).updateUrl("https://www.mozilla.org", false)
+ }
+
+ @Test
+ fun `displayProgress will send accessibility events`() {
+ val toolbar = BrowserToolbar(testContext)
+ val root = mock(ViewParent::class.java)
+ shadowOf(toolbar).setMyParent(root)
+ `when`(root.requestSendAccessibilityEvent(any(), any())).thenReturn(false)
+
+ val shadowAccessibilityManager = shadowOf(testContext.getSystemService(Context.ACCESSIBILITY_SERVICE) as AccessibilityManager)
+ shadowAccessibilityManager.setEnabled(true)
+ shadowAccessibilityManager.setTouchExplorationEnabled(true)
+
+ toolbar.displayProgress(10)
+ toolbar.displayProgress(50)
+ toolbar.displayProgress(100)
+
+ // make sure multiple calls to 100% does not trigger "loading" announcement
+ toolbar.displayProgress(100)
+
+ val captor = ArgumentCaptor.forClass(AccessibilityEvent::class.java)
+
+ verify(root, times(5)).requestSendAccessibilityEvent(any(), captor.capture())
+
+ assertEquals(AccessibilityEvent.TYPE_ANNOUNCEMENT, captor.allValues[0].eventType)
+ assertEquals(testContext.getString(R.string.mozac_browser_toolbar_progress_loading), captor.allValues[0].text[0])
+
+ assertEquals(AccessibilityEvent.TYPE_VIEW_SCROLLED, captor.allValues[1].eventType)
+ assertEquals(10, captor.allValues[1].scrollY)
+ assertEquals(100, captor.allValues[1].maxScrollY)
+
+ assertEquals(AccessibilityEvent.TYPE_VIEW_SCROLLED, captor.allValues[2].eventType)
+ assertEquals(50, captor.allValues[2].scrollY)
+ assertEquals(100, captor.allValues[2].maxScrollY)
+
+ assertEquals(AccessibilityEvent.TYPE_VIEW_SCROLLED, captor.allValues[3].eventType)
+ assertEquals(100, captor.allValues[3].scrollY)
+ assertEquals(100, captor.allValues[3].maxScrollY)
+
+ assertEquals(AccessibilityEvent.TYPE_VIEW_SCROLLED, captor.allValues[4].eventType)
+ assertEquals(100, captor.allValues[3].scrollY)
+ assertEquals(100, captor.allValues[3].maxScrollY)
+ }
+
+ @Test
+ fun `displayProgress will not send send view scrolled accessibility events if touch exploration is disabled`() {
+ val toolbar = BrowserToolbar(testContext)
+ val root = mock(ViewParent::class.java)
+ shadowOf(toolbar).setMyParent(root)
+ `when`(root.requestSendAccessibilityEvent(any(), any())).thenReturn(false)
+
+ val shadowAccessibilityManager = shadowOf(testContext.getSystemService(Context.ACCESSIBILITY_SERVICE) as AccessibilityManager)
+ shadowAccessibilityManager.setEnabled(true)
+ shadowAccessibilityManager.setTouchExplorationEnabled(false)
+
+ toolbar.displayProgress(10)
+ toolbar.displayProgress(50)
+ toolbar.displayProgress(100)
+
+ // make sure multiple calls to 100% does not trigger "loading" announcement
+ toolbar.displayProgress(100)
+
+ val captor = ArgumentCaptor.forClass(AccessibilityEvent::class.java)
+
+ verify(root, times(1)).requestSendAccessibilityEvent(any(), captor.capture())
+
+ assertEquals(AccessibilityEvent.TYPE_ANNOUNCEMENT, captor.allValues[0].eventType)
+ assertEquals(testContext.getString(R.string.mozac_browser_toolbar_progress_loading), captor.allValues[0].text[0])
+ }
+
+ @Test
+ fun `displayProgress will be forwarded to display toolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+ val display: DisplayToolbar = mock()
+
+ toolbar.display = display
+
+ toolbar.displayProgress(10)
+ toolbar.displayProgress(50)
+ toolbar.displayProgress(75)
+ toolbar.displayProgress(100)
+
+ verify(display).updateProgress(10)
+ verify(display).updateProgress(50)
+ verify(display).updateProgress(75)
+ verify(display).updateProgress(100)
+
+ verifyNoMoreInteractions(display)
+ }
+
+ @Test
+ fun `internal onUrlEntered callback will be forwarded to urlChangeListener`() {
+ val toolbar = BrowserToolbar(testContext)
+
+ val mockedListener = object {
+ var called = false
+ var url: String? = null
+
+ fun invoke(url: String): Boolean {
+ this.called = true
+ this.url = url
+ return true
+ }
+ }
+
+ toolbar.setOnUrlCommitListener(mockedListener::invoke)
+ toolbar.onUrlEntered("https://www.mozilla.org")
+
+ assertTrue(mockedListener.called)
+ assertEquals("https://www.mozilla.org", mockedListener.url)
+ }
+
+ /*
+ @Test
+ fun `internal onEditCancelled callback will be forwarded to editListener`() {
+ val toolbar = BrowserToolbar(testContext)
+ val listener: Toolbar.OnEditListener = mock()
+ toolbar.setOnEditListener(listener)
+ assertEquals(toolbar.edit.editListener, listener)
+
+ toolbar.edit.views.url.onKeyPreIme(
+ KeyEvent.KEYCODE_BACK,
+ KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)
+ )
+ verify(listener, times(1)).onCancelEditing()
+ }*/
+
+ @Test
+ fun `toolbar measure will use full width and fixed 56dp height`() {
+ val toolbar = BrowserToolbar(testContext)
+
+ val widthSpec = View.MeasureSpec.makeMeasureSpec(1024, View.MeasureSpec.AT_MOST)
+ val heightSpec = View.MeasureSpec.makeMeasureSpec(800, View.MeasureSpec.AT_MOST)
+
+ toolbar.measure(widthSpec, heightSpec)
+
+ assertEquals(1024, toolbar.measuredWidth)
+ assertEquals(56, toolbar.measuredHeight)
+ }
+
+ @Test
+ fun `toolbar will use provided height with EXACTLY measure spec`() {
+ val toolbar = BrowserToolbar(testContext)
+
+ val widthSpec = View.MeasureSpec.makeMeasureSpec(1024, View.MeasureSpec.AT_MOST)
+ val heightSpec = View.MeasureSpec.makeMeasureSpec(800, View.MeasureSpec.EXACTLY)
+
+ toolbar.measure(widthSpec, heightSpec)
+
+ assertEquals(1024, toolbar.measuredWidth)
+ assertEquals(800, toolbar.measuredHeight)
+ }
+
+ @Test
+ fun `display and edit toolbar will use full size of browser toolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+
+ assertEquals(0, toolbar.display.rootView.measuredWidth)
+ assertEquals(0, toolbar.display.rootView.measuredHeight)
+ assertEquals(0, toolbar.edit.rootView.measuredWidth)
+ assertEquals(0, toolbar.edit.rootView.measuredHeight)
+
+ val widthSpec = View.MeasureSpec.makeMeasureSpec(1024, View.MeasureSpec.AT_MOST)
+ val heightSpec = View.MeasureSpec.makeMeasureSpec(800, View.MeasureSpec.AT_MOST)
+
+ toolbar.measure(widthSpec, heightSpec)
+
+ assertEquals(1024, toolbar.display.rootView.measuredWidth)
+ assertEquals(56, toolbar.display.rootView.measuredHeight)
+ assertEquals(1024, toolbar.edit.rootView.measuredWidth)
+ assertEquals(56, toolbar.edit.rootView.measuredHeight)
+ }
+
+ @Test
+ fun `toolbar will switch back to display mode after an URL has been entered`() {
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.editMode()
+
+ assertTrue(toolbar.display.rootView.visibility == View.GONE)
+ assertTrue(toolbar.edit.rootView.visibility == View.VISIBLE)
+
+ toolbar.onUrlEntered("https://www.mozilla.org")
+
+ assertTrue(toolbar.display.rootView.visibility == View.VISIBLE)
+ assertTrue(toolbar.edit.rootView.visibility == View.GONE)
+ }
+
+ @Test
+ fun `toolbar will switch back to display mode if URL commit listener returns true`() {
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.setOnUrlCommitListener { true }
+ toolbar.editMode()
+
+ assertTrue(toolbar.display.rootView.isGone)
+ assertTrue(toolbar.edit.rootView.isVisible)
+
+ toolbar.onUrlEntered("https://www.mozilla.org")
+
+ assertTrue(toolbar.display.rootView.isVisible)
+ assertTrue(toolbar.edit.rootView.isGone)
+ }
+
+ @Test
+ fun `toolbar will stay in edit mode if URL commit listener returns false`() {
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.setOnUrlCommitListener { false }
+ toolbar.editMode()
+
+ assertTrue(toolbar.display.rootView.isGone)
+ assertTrue(toolbar.edit.rootView.isVisible)
+
+ toolbar.onUrlEntered("https://www.mozilla.org")
+
+ assertTrue(toolbar.display.rootView.isGone)
+ assertTrue(toolbar.edit.rootView.isVisible)
+ }
+
+ @Test
+ fun `add browser action will be forwarded to display toolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+ val display: DisplayToolbar = mock()
+
+ toolbar.display = display
+
+ val action = BrowserToolbar.Button(mock(), "Hello") {
+ // Do nothing
+ }
+
+ toolbar.addBrowserAction(action)
+
+ verify(display).addBrowserAction(action)
+ }
+
+ @Test
+ fun `remove browser action will be forwarded to display toolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+ val display: DisplayToolbar = mock()
+
+ toolbar.display = display
+
+ val action = BrowserToolbar.Button(mock(), "Hello") {
+ // Do nothing
+ }
+
+ toolbar.removeBrowserAction(action)
+
+ verify(display).removeBrowserAction(action)
+ }
+
+ @Test
+ fun `remove navigation action will be forwarded to display toolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+ val display: DisplayToolbar = mock()
+
+ toolbar.display = display
+
+ val action = BrowserToolbar.Button(mock(), "Hello") {
+ // Do nothing
+ }
+
+ toolbar.removeNavigationAction(action)
+
+ verify(display).removeNavigationAction(action)
+ }
+
+ @Test
+ fun `remove page action will be forwarded to display toolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+ val display: DisplayToolbar = mock()
+
+ toolbar.display = display
+
+ val action = BrowserToolbar.Button(mock(), "Hello") {
+ // Do nothing
+ }
+
+ toolbar.removePageAction(action)
+
+ verify(display).removePageAction(action)
+ }
+
+ @Test
+ fun `add page action will be forwarded to display toolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+
+ val display: DisplayToolbar = mock()
+
+ toolbar.display = display
+
+ val action = BrowserToolbar.Button(mock(), "World") {
+ // Do nothing
+ }
+
+ toolbar.addPageAction(action)
+
+ verify(display).addPageAction(action)
+ }
+
+ @Test
+ fun `add edit action start will be forwarded to edit toolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+
+ val edit: EditToolbar = mock()
+ toolbar.edit = edit
+
+ val action = BrowserToolbar.Button(mock(), "QR code scanner") {
+ // Do nothing
+ }
+
+ toolbar.addEditActionStart(action)
+
+ verify(edit).addEditActionStart(action)
+ }
+
+ @Test
+ fun `add edit action end will be forwarded to edit toolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+
+ val edit: EditToolbar = mock()
+ toolbar.edit = edit
+
+ val action = BrowserToolbar.Button(mock(), "QR code scanner") {
+ // Do nothing
+ }
+
+ toolbar.addEditActionEnd(action)
+
+ verify(edit).addEditActionEnd(action)
+ }
+
+ @Test
+ fun `WHEN removing action end THEN it will be forwarded to the edit toolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+
+ val edit: EditToolbar = mock()
+ toolbar.edit = edit
+
+ val action = BrowserToolbar.Button(mock(), "QR code scanner") {
+ // Do nothing
+ }
+
+ toolbar.removeEditActionEnd(action)
+
+ verify(edit).removeEditActionEnd(action)
+ }
+
+ @Test
+ fun `WHEN hideMenuButton is sent to BrowserToolbar THEN it will be forwarded to the DisplayToolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+
+ val display: DisplayToolbar = mock()
+ toolbar.display = display
+
+ toolbar.hideMenuButton()
+
+ verify(display).hideMenuButton()
+ }
+
+ @Test
+ fun `WHEN showMenuButton is sent to BrowserToolbar THEN it will be forwarded to the DisplayToolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+
+ val display: DisplayToolbar = mock()
+ toolbar.display = display
+
+ toolbar.showMenuButton()
+
+ verify(display).showMenuButton()
+ }
+
+ @Test
+ fun `WHEN showPageActionSeparator is sent to BrowserToolbar THEN it will be forwarded to the DisplayToolbar and EditToolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+
+ val display: DisplayToolbar = mock()
+ val edit: EditToolbar = mock()
+ toolbar.display = display
+ toolbar.edit = edit
+
+ toolbar.showPageActionSeparator()
+
+ verify(display).showPageActionSeparator()
+ verify(edit).showPageActionSeparator()
+ }
+
+ @Test
+ fun `WHEN hidePageActionSeparator is sent to BrowserToolbar THEN it will be forwarded to the DisplayToolbar and EditToolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+
+ val display: DisplayToolbar = mock()
+ val edit: EditToolbar = mock()
+ toolbar.display = display
+ toolbar.edit = edit
+
+ toolbar.hidePageActionSeparator()
+
+ verify(display).hidePageActionSeparator()
+ verify(edit).hidePageActionSeparator()
+ }
+
+ @Test
+ fun `WHEN setDisplayHorizontalPadding is sent to BrowserToolbar THEN it will be forwarded to the DisplayToolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+
+ val display: DisplayToolbar = mock()
+ toolbar.display = display
+ toolbar.edit = mock()
+
+ toolbar.setDisplayHorizontalPadding(123)
+ verify(display).setHorizontalPadding(123)
+
+ toolbar.setDisplayHorizontalPadding(0)
+ verify(display).setHorizontalPadding(0)
+ }
+
+ @Test
+ fun `cast to view`() {
+ // Given
+ val toolbar = BrowserToolbar(testContext)
+
+ // When
+ val view = toolbar.asView()
+
+ // Then
+ assertNotNull(view)
+ }
+
+ @Test
+ fun `URL update does not override search terms in edit mode`() {
+ val toolbar = BrowserToolbar(testContext)
+
+ toolbar.display = spy(toolbar.display)
+ toolbar.edit = spy(toolbar.edit)
+
+ toolbar.setSearchTerms("mozilla android")
+ toolbar.url = "https://www.mozilla.com"
+ toolbar.editMode()
+ verify(toolbar.display).url = "https://www.mozilla.com"
+ verify(toolbar.edit).updateUrl("mozilla android", false)
+
+ toolbar.setSearchTerms("")
+ verify(toolbar.edit).updateUrl("", false)
+
+ toolbar.url = "https://www.mozilla.org"
+ toolbar.editMode()
+ verify(toolbar.display).url = "https://www.mozilla.org"
+ verify(toolbar.edit).updateUrl("https://www.mozilla.org", false)
+ }
+
+ @Test
+ fun `add navigation action will be forwarded to display toolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+ val display: DisplayToolbar = mock()
+ toolbar.display = display
+
+ val action = BrowserToolbar.Button(mock(), "Back") {
+ // Do nothing
+ }
+
+ toolbar.addNavigationAction(action)
+
+ verify(display).addNavigationAction(action)
+ }
+
+ @Test
+ fun `invalidate actions is forwarded to display toolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+ val display: DisplayToolbar = mock()
+ toolbar.display = display
+
+ verify(display, never()).invalidateActions()
+
+ toolbar.invalidateActions()
+
+ verify(display).invalidateActions()
+ }
+
+ @Test
+ fun `invalidate actions is forwarded to edit toolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+ val edit: EditToolbar = mock()
+ toolbar.edit = edit
+
+ verify(edit, never()).invalidateActions()
+
+ toolbar.invalidateActions()
+
+ verify(edit).invalidateActions()
+ }
+
+ @Test
+ fun `search terms (if set) are forwarded to edit toolbar instead of URL`() {
+ val toolbar = BrowserToolbar(testContext)
+
+ toolbar.edit = spy(toolbar.edit)
+
+ toolbar.url = "https://www.mozilla.org"
+ toolbar.setSearchTerms("Mozilla Firefox")
+
+ verify(toolbar.edit, never()).updateUrl("https://www.mozilla.org")
+ verify(toolbar.edit, never()).updateUrl("Mozilla Firefox")
+
+ toolbar.editMode()
+
+ verify(toolbar.edit, never()).updateUrl("https://www.mozilla.org")
+ verify(toolbar.edit).updateUrl("Mozilla Firefox")
+ }
+
+ @Test
+ fun `search terms are forwarded to edit toolbar when it is active`() {
+ val toolbar = BrowserToolbar(testContext)
+
+ toolbar.edit = spy(toolbar.edit)
+
+ toolbar.editMode()
+
+ toolbar.setSearchTerms("Mozilla Firefox")
+
+ verify(toolbar.edit).editSuggestion("Mozilla Firefox")
+ }
+
+ @Test
+ fun `editListener is set on edit`() {
+ val toolbar = BrowserToolbar(testContext)
+ assertNull(toolbar.edit.editListener)
+
+ val listener: Toolbar.OnEditListener = mock()
+ toolbar.setOnEditListener(listener)
+
+ assertEquals(listener, toolbar.edit.editListener)
+ }
+
+ @Test
+ fun `editListener is invoked when switching between modes`() {
+ val toolbar = BrowserToolbar(testContext)
+
+ val listener: Toolbar.OnEditListener = mock()
+ toolbar.setOnEditListener(listener)
+
+ toolbar.editMode()
+
+ verify(listener).onStartEditing()
+ verifyNoMoreInteractions(listener)
+
+ toolbar.displayMode()
+
+ verify(listener).onStopEditing()
+ verifyNoMoreInteractions(listener)
+ }
+
+ @Test
+ fun `editListener is invoked when text changes`() {
+ val toolbar = BrowserToolbar(testContext)
+
+ val listener: Toolbar.OnEditListener = mock()
+ toolbar.setOnEditListener(listener)
+
+ toolbar.edit.views.url.onAttachedToWindow()
+
+ toolbar.editMode()
+
+ toolbar.edit.views.url.setText("Hello")
+ toolbar.edit.views.url.setText("Hello World")
+
+ verify(listener).onStartEditing()
+ verify(listener).onTextChanged("Hello")
+ verify(listener).onTextChanged("Hello World")
+ }
+
+ @Test
+ fun `titleView visibility is based on being set`() {
+ val toolbar = BrowserToolbar(testContext)
+
+ assertEquals(toolbar.display.views.origin.titleView.visibility, View.GONE)
+ toolbar.title = "Mozilla"
+ assertEquals(toolbar.display.views.origin.titleView.visibility, View.VISIBLE)
+ toolbar.title = ""
+ assertEquals(toolbar.display.views.origin.titleView.visibility, View.GONE)
+ }
+
+ @Test
+ fun `titleView text is set properly`() {
+ val toolbar = BrowserToolbar(testContext)
+
+ toolbar.title = "Mozilla"
+ assertEquals("Mozilla", toolbar.display.views.origin.titleView.text)
+ assertEquals("Mozilla", toolbar.title)
+ }
+
+ @Test
+ fun `titleView fading is set properly with non-null attrs`() {
+ val attributeSet: AttributeSet = Robolectric.buildAttributeSet().build()
+
+ val toolbar = BrowserToolbar(testContext, attributeSet)
+ val titleView = toolbar.display.views.origin.titleView
+ val edgeLength = testContext.resources.getDimensionPixelSize(R.dimen.mozac_browser_toolbar_url_fading_edge_size)
+
+ assertTrue(titleView.isHorizontalFadingEdgeEnabled)
+ assertEquals(edgeLength, titleView.horizontalFadingEdgeLength)
+ }
+
+ @Test
+ fun `Button constructor with drawable`() {
+ val buttonDefault = BrowserToolbar.Button(mock(), "imageDrawable") {}
+
+ assertEquals(true, buttonDefault.visible())
+ assertEquals(BrowserToolbar.DEFAULT_PADDING, buttonDefault.padding)
+ assertEquals("imageDrawable", buttonDefault.contentDescription)
+
+ val button = BrowserToolbar.Button(mock(), "imageDrawable", visible = { false }) {}
+
+ assertEquals(false, button.visible())
+ }
+
+ @Test
+ fun `ToggleButton constructor with drawable`() {
+ val buttonDefault =
+ BrowserToolbar.ToggleButton(mock(), mock(), "imageDrawable", "imageSelectedDrawable") {}
+
+ assertEquals(true, buttonDefault.visible())
+ assertEquals(BrowserToolbar.DEFAULT_PADDING, buttonDefault.padding)
+
+ val button = BrowserToolbar.ToggleButton(
+ mock(),
+ mock(),
+ "imageDrawable",
+ "imageSelectedDrawable",
+ visible = { false },
+ ) {}
+
+ assertEquals(false, button.visible())
+ }
+
+ @Test
+ fun `ReloadPageAction visibility changes update image`() {
+ val reloadImage: Drawable = mock()
+ val stopImage: Drawable = mock()
+ val view: ImageButton = mock()
+ var reloadPageAction = BrowserToolbar.TwoStateButton(reloadImage, "reload", stopImage, "stop") {}
+ assertFalse(reloadPageAction.enabled)
+ reloadPageAction.bind(view)
+ verify(view).setImageDrawable(reloadImage)
+ verify(view).contentDescription = "reload"
+
+ reloadPageAction = BrowserToolbar.TwoStateButton(reloadImage, "reload", stopImage, "stop", { false }) {}
+ reloadPageAction.bind(view)
+ verify(view).setImageDrawable(stopImage)
+ verify(view).contentDescription = "stop"
+ }
+
+ @Test
+ fun `siteSecure updates the display`() {
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.display = spy(toolbar.display)
+ assertEquals(SiteSecurity.INSECURE, toolbar.siteSecure)
+
+ toolbar.siteSecure = SiteSecurity.SECURE
+
+ verify(toolbar.display).siteSecurity = SiteSecurity.SECURE
+ }
+
+ @Test
+ fun `siteTrackingProtection updates the display`() {
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.display = spy(toolbar.display)
+ assertEquals(SiteTrackingProtection.OFF_GLOBALLY, toolbar.siteTrackingProtection)
+
+ toolbar.siteTrackingProtection = SiteTrackingProtection.ON_NO_TRACKERS_BLOCKED
+
+ verify(toolbar.display).setTrackingProtectionState(SiteTrackingProtection.ON_NO_TRACKERS_BLOCKED)
+
+ toolbar.siteTrackingProtection = SiteTrackingProtection.ON_NO_TRACKERS_BLOCKED
+ verifyNoMoreInteractions(toolbar.display)
+ }
+
+ @Test
+ fun `private flag sets IME_FLAG_NO_PERSONALIZED_LEARNING on url edit view`() {
+ val toolbar = BrowserToolbar(testContext)
+ val edit = toolbar.edit
+
+ // By default "private mode" is off.
+ assertEquals(
+ 0,
+ edit.views.url.imeOptions and
+ EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING,
+ )
+ assertEquals(false, toolbar.private)
+
+ // Turning on private mode sets flag
+ toolbar.private = true
+ assertNotEquals(
+ 0,
+ edit.views.url.imeOptions and
+ EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING,
+ )
+ assertTrue(toolbar.private)
+
+ // Turning private mode off again - should remove flag
+ toolbar.private = false
+ assertEquals(
+ 0,
+ edit.views.url.imeOptions and
+ EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING,
+ )
+ assertEquals(false, toolbar.private)
+ }
+
+ @Test
+ fun `setAutocompleteListener is forwarded to edit toolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.edit = mock()
+
+ val filter: suspend (String, AutocompleteDelegate) -> Unit = { _, _ ->
+ // Do nothing
+ }
+
+ toolbar.setAutocompleteListener(filter)
+
+ verify(toolbar.edit).setAutocompleteListener(filter)
+ }
+
+ @Test
+ fun `WHEN an attempt to refresh autocomplete suggestions is made THEN forward the call to edit toolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.edit = mock()
+ toolbar.setAutocompleteListener { _, _ -> }
+
+ toolbar.refreshAutocomplete()
+
+ verify(toolbar.edit).refreshAutocompleteSuggestion()
+ }
+
+ @Test
+ fun `onStop is forwarded to display toolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.display = mock()
+
+ toolbar.onStop()
+
+ verify(toolbar.display).onStop()
+ }
+
+ @Test
+ fun `dismiss menu is forwarded to display toolbar`() {
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.display = mock()
+ val displayToolbarViews: DisplayToolbarViews = mock()
+ val menuButton: MenuButton = mock()
+
+ whenever(toolbar.display.views).thenReturn(displayToolbarViews)
+ whenever(displayToolbarViews.menu).thenReturn(menuButton)
+
+ toolbar.dismissMenu()
+ verify(menuButton).dismissMenu()
+ }
+
+ @Test
+ fun `enable scrolling is forwarded to the toolbar behavior`() {
+ // Seems like real instances are needed for things to be set properly
+ val toolbar = BrowserToolbar(testContext)
+ val behavior = spy(EngineViewScrollingBehavior(testContext, null, ViewPosition.BOTTOM))
+ val params = CoordinatorLayout.LayoutParams(10, 10).apply {
+ this.behavior = behavior
+ }
+ toolbar.layoutParams = params
+
+ toolbar.enableScrolling()
+
+ verify(behavior).enableScrolling()
+ }
+
+ @Test
+ fun `disable scrolling is forwarded to the toolbar behavior`() {
+ // Seems like real instances are needed for things to be set properly
+ val toolbar = BrowserToolbar(testContext)
+ val behavior = spy(EngineViewScrollingBehavior(testContext, null, ViewPosition.BOTTOM))
+ val params = CoordinatorLayout.LayoutParams(10, 10).apply {
+ this.behavior = behavior
+ }
+ toolbar.layoutParams = params
+
+ toolbar.disableScrolling()
+
+ verify(behavior).disableScrolling()
+ }
+
+ @Test
+ fun `expand is forwarded to the toolbar behavior`() {
+ // Seems like real instances are needed for things to be set properly
+ val toolbar = BrowserToolbar(testContext)
+ val behavior = spy(EngineViewScrollingBehavior(testContext, null, ViewPosition.BOTTOM))
+ val params = CoordinatorLayout.LayoutParams(10, 10).apply {
+ this.behavior = behavior
+ }
+ toolbar.layoutParams = params
+
+ toolbar.expand()
+
+ verify(behavior).forceExpand(toolbar)
+ }
+
+ @Test
+ fun `collapse is forwarded to the toolbar behavior`() {
+ // Seems like real instances are needed for things to be set properly
+ val toolbar = BrowserToolbar(testContext)
+ val behavior = spy(EngineViewScrollingBehavior(testContext, null, ViewPosition.BOTTOM))
+ val params = CoordinatorLayout.LayoutParams(10, 10).apply {
+ this.behavior = behavior
+ }
+ toolbar.layoutParams = params
+
+ toolbar.collapse()
+
+ verify(behavior).forceCollapse(toolbar)
+ }
+
+ @Test
+ fun `WHEN search terms changes THEN edit listener is notified`() {
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.edit = spy(toolbar.edit)
+ toolbar.edit.editListener = mock()
+
+ toolbar.setSearchTerms("")
+ toolbar.editMode()
+
+ toolbar.setSearchTerms("test")
+ verify(toolbar.edit.editListener)?.onTextChanged("test")
+
+ toolbar.setSearchTerms("")
+ verify(toolbar.edit.editListener)?.onTextChanged("")
+ }
+
+ @Test
+ fun `WHEN switching to edit mode AND the cursor placement parameter is specified THEN call the correct method to place the cursor`() {
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.edit = spy(toolbar.edit)
+
+ toolbar.editMode(Toolbar.CursorPlacement.ALL)
+
+ verify(toolbar.edit).selectAll()
+
+ toolbar.editMode(Toolbar.CursorPlacement.END)
+
+ verify(toolbar.edit).selectEnd()
+ }
+}
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/display/DisplayToolbarTest.kt b/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/display/DisplayToolbarTest.kt
new file mode 100644
index 0000000000..6a8ba9e478
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/display/DisplayToolbarTest.kt
@@ -0,0 +1,824 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar2.display
+
+import android.graphics.Color
+import android.os.Build
+import android.view.View
+import androidx.core.content.ContextCompat
+import androidx.core.view.isGone
+import androidx.core.view.isVisible
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.browser.menu.BrowserMenu
+import mozilla.components.browser.menu.BrowserMenuBuilder
+import mozilla.components.browser.menu.item.SimpleBrowserMenuItem
+import mozilla.components.browser.toolbar2.BrowserToolbar
+import mozilla.components.browser.toolbar2.R
+import mozilla.components.concept.menu.MenuButton
+import mozilla.components.concept.toolbar.Toolbar
+import mozilla.components.concept.toolbar.Toolbar.SiteSecurity
+import mozilla.components.concept.toolbar.Toolbar.SiteTrackingProtection
+import mozilla.components.support.base.Component
+import mozilla.components.support.base.facts.Action
+import mozilla.components.support.base.facts.processor.CollectionProcessor
+import mozilla.components.support.test.any
+import mozilla.components.support.test.eq
+import mozilla.components.support.test.mock
+import mozilla.components.support.test.robolectric.testContext
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotEquals
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.anyBoolean
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.never
+import org.mockito.Mockito.reset
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
+import org.robolectric.util.ReflectionHelpers
+import mozilla.components.ui.icons.R as iconsR
+
+@RunWith(AndroidJUnit4::class)
+class DisplayToolbarTest {
+ private fun createDisplayToolbar(): Pair<BrowserToolbar, DisplayToolbar> {
+ val toolbar: BrowserToolbar = mock()
+ val displayToolbar = DisplayToolbar(
+ testContext,
+ toolbar,
+ View.inflate(testContext, R.layout.mozac_browser_toolbar_displaytoolbar, null),
+ )
+ return Pair(toolbar, displayToolbar)
+ }
+
+ @Test
+ fun `clicking on the URL switches the toolbar to editing mode`() {
+ val (toolbar, displayToolbar) = createDisplayToolbar()
+
+ val urlView = displayToolbar.views.origin.urlView
+ assertTrue(urlView.performClick())
+
+ verify(toolbar).editMode()
+ }
+
+ @Test
+ fun `progress is forwarded to progress bar`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ val progressView = displayToolbar.views.progress
+
+ displayToolbar.updateProgress(0)
+ assertEquals(0, progressView.progress)
+ assertEquals(View.GONE, progressView.visibility)
+
+ displayToolbar.updateProgress(10)
+ assertEquals(10, progressView.progress)
+ assertEquals(View.VISIBLE, progressView.visibility)
+
+ displayToolbar.updateProgress(50)
+ assertEquals(50, progressView.progress)
+ assertEquals(View.VISIBLE, progressView.visibility)
+
+ displayToolbar.updateProgress(75)
+ assertEquals(75, progressView.progress)
+ assertEquals(View.VISIBLE, progressView.visibility)
+
+ displayToolbar.updateProgress(100)
+ assertEquals(100, progressView.progress)
+ assertEquals(View.GONE, progressView.visibility)
+ }
+
+ @Test
+ fun `trackingProtectionViewColor will change the color of the trackingProtectionIconView`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ assertNull(displayToolbar.views.trackingProtectionIndicator.colorFilter)
+
+ displayToolbar.colors = displayToolbar.colors.copy(
+ trackingProtection = Color.BLUE,
+ )
+
+ assertNotNull(displayToolbar.views.trackingProtectionIndicator.colorFilter)
+ assertNotNull(displayToolbar.views.trackingProtectionIndicator.trackingProtectionTint)
+ }
+
+ @Test
+ fun `highlightView will change the color of the dot`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ assertNull(displayToolbar.views.highlight.colorFilter)
+
+ displayToolbar.colors = displayToolbar.colors.copy(highlight = Color.BLUE)
+
+ assertNotNull(displayToolbar.views.highlight.colorFilter)
+ assertNotNull(displayToolbar.views.highlight.highlightTint)
+ }
+
+ @Test
+ fun `tracking protection and separator views become visible when states ON OR ACTIVE are set to siteTrackingProtection`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ val trackingView = displayToolbar.views.trackingProtectionIndicator
+ val separatorView = displayToolbar.views.separator
+
+ assertTrue(trackingView.visibility == View.GONE)
+ assertTrue(separatorView.visibility == View.GONE)
+
+ displayToolbar.indicators = listOf(
+ DisplayToolbar.Indicators.SECURITY,
+ DisplayToolbar.Indicators.TRACKING_PROTECTION,
+ )
+ displayToolbar.url = "https://www.mozilla.org"
+ displayToolbar.displayIndicatorSeparator = true
+ displayToolbar.setTrackingProtectionState(SiteTrackingProtection.ON_NO_TRACKERS_BLOCKED)
+
+ assertTrue(trackingView.isVisible)
+ assertTrue(separatorView.isVisible)
+
+ displayToolbar.setTrackingProtectionState(SiteTrackingProtection.OFF_GLOBALLY)
+
+ assertTrue(trackingView.visibility == View.GONE)
+ assertTrue(separatorView.visibility == View.GONE)
+
+ displayToolbar.setTrackingProtectionState(SiteTrackingProtection.ON_TRACKERS_BLOCKED)
+
+ assertTrue(trackingView.isVisible)
+ assertTrue(separatorView.isVisible)
+ }
+
+ @Test
+ fun `setTrackingProtectionIcons will forward to TrackingProtectionIconView`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ displayToolbar.indicators = listOf(DisplayToolbar.Indicators.TRACKING_PROTECTION)
+ displayToolbar.setTrackingProtectionState(SiteTrackingProtection.ON_NO_TRACKERS_BLOCKED)
+
+ val oldTrackingProtectionIcon = displayToolbar.views.trackingProtectionIndicator.drawable
+ assertNotNull(oldTrackingProtectionIcon)
+
+ val drawable1 =
+ testContext.getDrawable(TrackingProtectionIconView.DEFAULT_ICON_ON_NO_TRACKERS_BLOCKED)!!
+ val drawable2 =
+ testContext.getDrawable(TrackingProtectionIconView.DEFAULT_ICON_ON_TRACKERS_BLOCKED)!!
+ val drawable3 =
+ testContext.getDrawable(TrackingProtectionIconView.DEFAULT_ICON_OFF_FOR_A_SITE)!!
+
+ displayToolbar.icons = displayToolbar.icons.copy(
+ trackingProtectionTrackersBlocked = drawable1,
+ trackingProtectionNothingBlocked = drawable2,
+ trackingProtectionException = drawable3,
+ )
+
+ assertNotEquals(
+ oldTrackingProtectionIcon,
+ displayToolbar.views.trackingProtectionIndicator.drawable,
+ )
+
+ assertEquals(drawable2, displayToolbar.views.trackingProtectionIndicator.drawable)
+
+ displayToolbar.setTrackingProtectionState(SiteTrackingProtection.ON_TRACKERS_BLOCKED)
+
+ assertNotEquals(
+ oldTrackingProtectionIcon,
+ displayToolbar.views.trackingProtectionIndicator.drawable,
+ )
+
+ assertEquals(
+ drawable1,
+ displayToolbar.views.trackingProtectionIndicator.drawable,
+ )
+ }
+
+ @Test
+ fun `setHighlight will forward to HighlightView`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ val oldPermissionIcon = displayToolbar.views.highlight.drawable
+ assertNotNull(oldPermissionIcon)
+
+ val drawable1 = testContext.getDrawable(HighlightView.DEFAULT_ICON)!!
+
+ displayToolbar.indicators = listOf(DisplayToolbar.Indicators.HIGHLIGHT)
+ displayToolbar.icons = displayToolbar.icons.copy(
+ highlight = drawable1,
+ )
+
+ assertNotEquals(
+ oldPermissionIcon,
+ displayToolbar.views.highlight.drawable,
+ )
+
+ displayToolbar.setHighlight(Toolbar.Highlight.PERMISSIONS_CHANGED)
+
+ assertNotEquals(
+ oldPermissionIcon,
+ displayToolbar.views.highlight.drawable,
+ )
+ }
+
+ @Test
+ fun `menu view is gone by default`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ val menuView = displayToolbar.views.menu
+
+ assertNotNull(menuView)
+ assertEquals(View.GONE, menuView.impl.visibility)
+ }
+
+ @Test
+ fun `menu view becomes visible once a menu builder is set`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ val menuView = displayToolbar.views.menu
+
+ assertNotNull(menuView)
+
+ assertEquals(View.GONE, menuView.impl.visibility)
+
+ displayToolbar.menuBuilder = BrowserMenuBuilder(emptyList())
+
+ assertEquals(View.VISIBLE, menuView.impl.visibility)
+
+ displayToolbar.menuBuilder = null
+
+ assertEquals(View.GONE, menuView.impl.visibility)
+ }
+
+ @Test
+ fun `no menu builder is set by default`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ assertNull(displayToolbar.menuBuilder)
+ }
+
+ @Test
+ fun `menu builder will be used to create and show menu when button is clicked`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+ val menuView = displayToolbar.views.menu
+
+ val menuBuilder = mock(BrowserMenuBuilder::class.java)
+ val menu = mock(BrowserMenu::class.java)
+ doReturn(menu).`when`(menuBuilder).build(testContext)
+
+ displayToolbar.menuBuilder = menuBuilder
+
+ verify(menuBuilder, never()).build(testContext)
+ verify(menu, never()).show(menuView.impl)
+
+ menuView.impl.performClick()
+
+ verify(menuBuilder).build(testContext)
+ verify(menu).show(eq(menuView.impl), any(), any(), anyBoolean(), any())
+ verify(menu, never()).invalidate()
+
+ displayToolbar.invalidateActions()
+
+ verify(menu).invalidate()
+ }
+
+ @Test
+ fun `browser action gets added as view to toolbar`() {
+ val contentDescription = "Mozilla"
+
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ assertEquals(0, displayToolbar.views.browserActions.childCount)
+
+ val action = BrowserToolbar.Button(mock(), contentDescription) {}
+ displayToolbar.addBrowserAction(action)
+
+ assertEquals(1, displayToolbar.views.browserActions.childCount)
+
+ val view = displayToolbar.views.browserActions.getChildAt(0)
+ assertEquals(contentDescription, view.contentDescription)
+ }
+
+ @Test
+ fun `clicking browser action view triggers listener of action`() {
+ var callbackExecuted = false
+
+ val action = BrowserToolbar.Button(mock(), "Button") {
+ callbackExecuted = true
+ }
+
+ val (_, displayToolbar) = createDisplayToolbar()
+ displayToolbar.addBrowserAction(action)
+
+ assertEquals(1, displayToolbar.views.browserActions.childCount)
+ val view = displayToolbar.views.browserActions.getChildAt(0)
+
+ assertNotNull(view)
+
+ assertFalse(callbackExecuted)
+
+ view?.performClick()
+
+ assertTrue(callbackExecuted)
+ }
+
+ @Test
+ fun `browser action can be removed`() {
+ val contentDescription = "to-be-removed"
+
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ val action = BrowserToolbar.Button(mock(), contentDescription) {}
+ // Removing action which was never added has no effect
+ displayToolbar.removeBrowserAction(action)
+
+ displayToolbar.addBrowserAction(action)
+ assertEquals(1, displayToolbar.views.browserActions.childCount)
+
+ displayToolbar.removeBrowserAction(action)
+ assertEquals(0, displayToolbar.views.browserActions.childCount)
+ }
+
+ @Test
+ fun `navigation action can be removed`() {
+ val contentDescription = "to-be-removed"
+
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ val action = BrowserToolbar.Button(mock(), contentDescription) {}
+ // Removing action which was never added has no effect
+ displayToolbar.removeNavigationAction(action)
+
+ displayToolbar.addNavigationAction(action)
+ assertEquals(1, displayToolbar.views.navigationActions.childCount)
+
+ displayToolbar.removeNavigationAction(action)
+ assertEquals(0, displayToolbar.views.navigationActions.childCount)
+ }
+
+ @Test
+ fun `page action can be removed`() {
+ val contentDescription = "to-be-removed"
+
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ val action = BrowserToolbar.Button(mock(), contentDescription) {}
+ // Removing action which was never added has no effect
+ displayToolbar.removePageAction(action)
+
+ displayToolbar.addPageAction(action)
+ assertEquals(1, displayToolbar.views.pageActions.childCount)
+
+ displayToolbar.removePageAction(action)
+ assertEquals(0, displayToolbar.views.pageActions.childCount)
+ }
+
+ @Test
+ fun `page actions will be added as view to the toolbar`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ assertEquals(0, displayToolbar.views.pageActions.childCount)
+
+ val action = BrowserToolbar.Button(mock(), "Reader Mode") {}
+ displayToolbar.addPageAction(action)
+
+ assertEquals(1, displayToolbar.views.pageActions.childCount)
+ val view = displayToolbar.views.pageActions.getChildAt(0)
+ assertEquals("Reader Mode", view.contentDescription)
+ }
+
+ @Test
+ fun `clicking a page action view will execute the listener of the action`() {
+ var listenerExecuted = false
+
+ val action = BrowserToolbar.Button(mock(), "Reload") {
+ listenerExecuted = true
+ }
+
+ val (_, displayToolbar) = createDisplayToolbar()
+ displayToolbar.addPageAction(action)
+
+ assertFalse(listenerExecuted)
+
+ assertEquals(1, displayToolbar.views.pageActions.childCount)
+ val view = displayToolbar.views.pageActions.getChildAt(0)
+
+ assertNotNull(view)
+ view!!.performClick()
+
+ assertTrue(listenerExecuted)
+ }
+
+ @Test
+ fun `navigation actions will be added as view to the toolbar`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ assertEquals(0, displayToolbar.views.navigationActions.childCount)
+
+ displayToolbar.addNavigationAction(BrowserToolbar.Button(mock(), "Back") {})
+ displayToolbar.addNavigationAction(BrowserToolbar.Button(mock(), "Forward") {})
+
+ assertEquals(2, displayToolbar.views.navigationActions.childCount)
+ }
+
+ @Test
+ fun `clicking on navigation action will execute listener of the action`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ var listenerExecuted = false
+ val action = BrowserToolbar.Button(mock(), "Back") {
+ listenerExecuted = true
+ }
+
+ displayToolbar.addNavigationAction(action)
+
+ assertFalse(listenerExecuted)
+
+ assertEquals(1, displayToolbar.views.navigationActions.childCount)
+ val view = displayToolbar.views.navigationActions.getChildAt(0)
+ view.performClick()
+
+ assertTrue(listenerExecuted)
+ }
+
+ @Test
+ fun `view of not visible navigation action gets removed after invalidating`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ var shouldActionBeDisplayed = true
+
+ val action = BrowserToolbar.Button(
+ mock(),
+ "Back",
+ visible = { shouldActionBeDisplayed },
+ ) { /* Do nothing */ }
+
+ displayToolbar.addNavigationAction(action)
+
+ assertEquals(1, displayToolbar.views.navigationActions.childCount)
+
+ shouldActionBeDisplayed = false
+ displayToolbar.invalidateActions()
+
+ assertEquals(0, displayToolbar.views.navigationActions.childCount)
+
+ shouldActionBeDisplayed = true
+ displayToolbar.invalidateActions()
+
+ assertEquals(1, displayToolbar.views.navigationActions.childCount)
+ }
+
+ @Test
+ fun `toolbar should call bind with view argument on action after invalidating`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ val action = spy(BrowserToolbar.Button(mock(), "Reload") {})
+
+ displayToolbar.addPageAction(action)
+
+ assertEquals(1, displayToolbar.views.pageActions.childCount)
+ val view = displayToolbar.views.pageActions.getChildAt(0)
+
+ verify(action, never()).bind(view!!)
+
+ displayToolbar.invalidateActions()
+
+ verify(action).bind(view)
+ }
+
+ @Test
+ fun `page action will not be added if visible lambda of action returns false`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ val visibleAction = BrowserToolbar.Button(mock(), "Reload") {}
+ val invisibleAction = BrowserToolbar.Button(
+ mock(),
+ "Reader Mode",
+ visible = { false },
+ ) {}
+
+ displayToolbar.addPageAction(visibleAction)
+ displayToolbar.addPageAction(invisibleAction)
+
+ assertEquals(1, displayToolbar.views.pageActions.childCount)
+
+ val view = displayToolbar.views.pageActions.getChildAt(0)
+ assertEquals("Reload", view.contentDescription)
+ }
+
+ @Test
+ fun `browser action will not be added if visible lambda of action returns false`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ val visibleAction = BrowserToolbar.Button(mock(), "Tabs") {}
+ val invisibleAction = BrowserToolbar.Button(
+ mock(),
+ "Settings",
+ visible = { false },
+ ) {}
+
+ displayToolbar.addBrowserAction(visibleAction)
+ displayToolbar.addBrowserAction(invisibleAction)
+
+ assertEquals(1, displayToolbar.views.browserActions.childCount)
+
+ val view = displayToolbar.views.browserActions.getChildAt(0)
+ assertEquals("Tabs", view.contentDescription)
+ }
+
+ @Test
+ fun `navigation action will not be added if visible lambda of action returns false`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ val visibleAction = BrowserToolbar.Button(mock(), "Forward") {}
+ val invisibleAction = BrowserToolbar.Button(
+ mock(),
+ "Back",
+ visible = { false },
+ ) {}
+
+ displayToolbar.addNavigationAction(visibleAction)
+ displayToolbar.addNavigationAction(invisibleAction)
+
+ assertEquals(1, displayToolbar.views.navigationActions.childCount)
+
+ val view = displayToolbar.views.navigationActions.getChildAt(0)
+ assertEquals("Forward", view.contentDescription)
+ }
+
+ @Test
+ fun `url background will be added and removed from display layout`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ assertNull(displayToolbar.views.background.drawable)
+
+ displayToolbar.setUrlBackground(
+ ContextCompat.getDrawable(
+ testContext,
+ iconsR.drawable.mozac_ic_broken_lock,
+ ),
+ )
+
+ assertNotNull(displayToolbar.views.background.drawable)
+
+ displayToolbar.setUrlBackground(null)
+
+ assertNull(displayToolbar.views.background.drawable)
+ }
+
+ @Test
+ fun `titleView does not display when there is no title text`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ assertTrue(displayToolbar.views.origin.titleView.isGone)
+
+ displayToolbar.title = "Hello World"
+
+ assertTrue(displayToolbar.views.origin.titleView.isVisible)
+ }
+
+ @Test
+ fun `toolbar only switches to editing mode if onUrlClicked returns true`() {
+ val (toolbar, displayToolbar) = createDisplayToolbar()
+
+ displayToolbar.views.origin.urlView.performClick()
+
+ verify(toolbar).editMode()
+
+ reset(toolbar)
+ displayToolbar.onUrlClicked = { false }
+ displayToolbar.views.origin.urlView.performClick()
+
+ verify(toolbar, never()).editMode()
+
+ reset(toolbar)
+ displayToolbar.onUrlClicked = { true }
+ displayToolbar.views.origin.urlView.performClick()
+
+ verify(toolbar).editMode()
+ }
+
+ @Test
+ fun `urlView delegates long click when set`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ var longUrlClicked = false
+
+ displayToolbar.setOnUrlLongClickListener {
+ longUrlClicked = true
+ false
+ }
+
+ assertFalse(longUrlClicked)
+ displayToolbar.views.origin.urlView.performLongClick()
+ assertTrue(longUrlClicked)
+ }
+
+ @Test
+ fun `urlView longClickListener can be unset`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ var longClicked = false
+ displayToolbar.setOnUrlLongClickListener {
+ longClicked = true
+ true
+ }
+
+ displayToolbar.views.origin.urlView.performLongClick()
+ assertTrue(longClicked)
+ longClicked = false
+
+ displayToolbar.setOnUrlLongClickListener(null)
+ displayToolbar.views.origin.urlView.performLongClick()
+
+ assertFalse(longClicked)
+ }
+
+ @Test
+ fun `iconView changes site secure state when site security changes`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+ assertEquals(SiteSecurity.INSECURE, displayToolbar.views.securityIndicator.siteSecurity)
+
+ displayToolbar.siteSecurity = SiteSecurity.SECURE
+
+ assertEquals(SiteSecurity.SECURE, displayToolbar.views.securityIndicator.siteSecurity)
+
+ displayToolbar.siteSecurity = SiteSecurity.INSECURE
+
+ assertEquals(SiteSecurity.INSECURE, displayToolbar.views.securityIndicator.siteSecurity)
+ }
+
+ @Test
+ fun `securityIconColor is set when securityIconColor changes`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ assertNull(displayToolbar.views.securityIndicator.colorFilter)
+
+ displayToolbar.colors = displayToolbar.colors.copy(
+ securityIconSecure = Color.BLUE,
+ securityIconInsecure = Color.BLUE,
+ )
+
+ assertNotNull(displayToolbar.views.securityIndicator.colorFilter)
+ }
+
+ @Test
+ fun `color filter is set with transparent when securityIconColor changes to transparent and api version is lower than 23`() {
+ ReflectionHelpers.setStaticField(Build.VERSION::class.java, "SDK_INT", 22)
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ assertNull(displayToolbar.views.securityIndicator.colorFilter)
+
+ displayToolbar.colors = displayToolbar.colors.copy(
+ securityIconSecure = Color.TRANSPARENT,
+ securityIconInsecure = Color.TRANSPARENT,
+ )
+
+ assertNotNull(displayToolbar.views.securityIndicator.colorFilter)
+ }
+
+ @Test
+ fun `color filter is cleared when securityIconColor changes to transparent and api version is bigger than 22`() {
+ ReflectionHelpers.setStaticField(Build.VERSION::class.java, "SDK_INT", 23)
+
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ assertNull(displayToolbar.views.securityIndicator.colorFilter)
+
+ displayToolbar.colors = displayToolbar.colors.copy(
+ securityIconSecure = Color.TRANSPARENT,
+ securityIconInsecure = Color.TRANSPARENT,
+ )
+
+ assertNull(displayToolbar.views.securityIndicator.colorFilter)
+ }
+
+ @Test
+ fun `clicking menu button emits facts with additional extras from builder set`() {
+ CollectionProcessor.withFactCollection { facts ->
+ val (_, displayToolbar) = createDisplayToolbar()
+ val menuView = displayToolbar.views.menu
+
+ val menuBuilder = BrowserMenuBuilder(
+ listOf(SimpleBrowserMenuItem("Mozilla")),
+ mapOf(
+ "customTab" to true,
+ "test" to "23",
+ ),
+ )
+ displayToolbar.menuBuilder = menuBuilder
+
+ assertEquals(0, facts.size)
+
+ menuView.impl.performClick()
+
+ assertEquals(1, facts.size)
+
+ val fact = facts[0]
+
+ assertEquals(Component.BROWSER_TOOLBAR, fact.component)
+ assertEquals(Action.CLICK, fact.action)
+ assertEquals("menu", fact.item)
+ assertNull(fact.value)
+
+ assertNotNull(fact.metadata)
+
+ val metadata = fact.metadata!!
+ assertEquals(2, metadata.size)
+ assertTrue(metadata.containsKey("customTab"))
+ assertTrue(metadata.containsKey("test"))
+ assertEquals(true, metadata["customTab"])
+ assertEquals("23", metadata["test"])
+ }
+ }
+
+ @Test
+ fun `clicking on site security indicator invokes listener`() {
+ var listenerInvoked = false
+
+ val (_, displayToolbar) = createDisplayToolbar()
+
+ assertNull(displayToolbar.views.securityIndicator.background)
+
+ displayToolbar.setOnSiteSecurityClickedListener {
+ listenerInvoked = true
+ }
+
+ assertNotNull(displayToolbar.views.securityIndicator.background)
+
+ displayToolbar.views.securityIndicator.performClick()
+
+ assertTrue(listenerInvoked)
+
+ listenerInvoked = false
+
+ displayToolbar.setOnSiteSecurityClickedListener { }
+
+ assertNotNull(displayToolbar.views.securityIndicator.background)
+
+ displayToolbar.views.securityIndicator.performClick()
+
+ assertFalse(listenerInvoked)
+
+ displayToolbar.setOnSiteSecurityClickedListener(null)
+
+ assertNull(displayToolbar.views.securityIndicator.background)
+ }
+
+ @Test
+ fun `Security icon has proper content description`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+ val siteSecurityIconView = displayToolbar.views.securityIndicator
+
+ assertNotNull(siteSecurityIconView.contentDescription)
+ assertEquals(
+ testContext.getString(R.string.mozac_browser_toolbar_content_description_site_info),
+ siteSecurityIconView.contentDescription,
+ )
+ }
+
+ @Test
+ fun `Backgrounding the app dismisses menu if already open`() {
+ var wasDismissed = false
+ val (_, displayToolbar) = createDisplayToolbar()
+ val menuView = displayToolbar.views.menu
+ menuView.impl.register(
+ object : MenuButton.Observer {
+ override fun onDismiss() {
+ wasDismissed = true
+ }
+ },
+ )
+ menuView.menuBuilder = BrowserMenuBuilder(emptyList())
+ menuView.impl.performClick()
+
+ displayToolbar.onStop()
+
+ assertTrue(wasDismissed)
+ }
+
+ @Test
+ fun `set a dismiss lambda on the menu button`() {
+ var wasDismissed = false
+ val (_, displayToolbar) = createDisplayToolbar()
+ displayToolbar.setMenuDismissAction { wasDismissed = true }
+ val menuView = displayToolbar.views.menu
+ menuView.menuBuilder = BrowserMenuBuilder(emptyList())
+ menuView.impl.performClick()
+
+ menuView.dismissMenu()
+ assertTrue(wasDismissed)
+ }
+
+ @Test
+ fun `url formatter used if provided`() {
+ val (_, displayToolbar) = createDisplayToolbar()
+ displayToolbar.url = "https://mozilla.org"
+ assertEquals(displayToolbar.url, displayToolbar.views.origin.url)
+
+ displayToolbar.urlFormatter = { it.replace("https://".toRegex(), "") }
+ displayToolbar.url = "https://mozilla.org"
+ assertEquals("mozilla.org", displayToolbar.views.origin.url)
+ }
+}
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/display/HighlightViewTest.kt b/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/display/HighlightViewTest.kt
new file mode 100644
index 0000000000..e339b98538
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/display/HighlightViewTest.kt
@@ -0,0 +1,67 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar2.display
+
+import androidx.core.view.isVisible
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.browser.toolbar2.R
+import mozilla.components.concept.toolbar.Toolbar.Highlight.NONE
+import mozilla.components.concept.toolbar.Toolbar.Highlight.PERMISSIONS_CHANGED
+import mozilla.components.support.test.robolectric.testContext
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
+
+@RunWith(AndroidJUnit4::class)
+class HighlightViewTest {
+
+ @Test
+ fun `after setting tint, can get trackingProtectionTint`() {
+ val view = HighlightView(testContext)
+ view.setTint(android.R.color.black)
+ assertEquals(android.R.color.black, view.highlightTint)
+ }
+
+ @Test
+ fun `setting status will trigger an icon updated`() {
+ val view = HighlightView(testContext)
+
+ view.state = PERMISSIONS_CHANGED
+
+ assertEquals(PERMISSIONS_CHANGED, view.state)
+ assertTrue(view.isVisible)
+ assertNotNull(view.drawable)
+ assertEquals(
+ view.contentDescription,
+ testContext.getString(R.string.mozac_browser_toolbar_content_description_autoplay_blocked),
+ )
+
+ view.state = NONE
+
+ assertEquals(NONE, view.state)
+ assertNull(view.drawable)
+ assertFalse(view.isVisible)
+ assertNull(view.contentDescription)
+ }
+
+ @Test
+ fun `setIcons will trigger an icon updated`() {
+ val view = spy(HighlightView(testContext))
+
+ view.setIcon(
+ testContext.getDrawable(
+ TrackingProtectionIconView.DEFAULT_ICON_ON_NO_TRACKERS_BLOCKED,
+ )!!,
+ )
+
+ verify(view).updateIcon()
+ }
+}
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/display/MenuButtonTest.kt b/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/display/MenuButtonTest.kt
new file mode 100644
index 0000000000..ada49fd88b
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/display/MenuButtonTest.kt
@@ -0,0 +1,156 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar2.display
+
+import android.graphics.Color
+import android.view.View
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.browser.menu.BrowserMenu
+import mozilla.components.browser.menu.BrowserMenuBuilder
+import mozilla.components.browser.menu.BrowserMenuHighlight
+import mozilla.components.browser.menu.ext.getHighlight
+import mozilla.components.browser.menu.item.BrowserMenuHighlightableItem
+import mozilla.components.browser.menu.item.SimpleBrowserMenuItem
+import mozilla.components.concept.menu.MenuController
+import mozilla.components.concept.menu.candidate.DecorativeTextMenuCandidate
+import mozilla.components.concept.menu.candidate.TextMenuCandidate
+import mozilla.components.support.test.any
+import mozilla.components.support.test.mock
+import mozilla.components.support.test.robolectric.testContext
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.Mockito.doReturn
+import org.mockito.Mockito.never
+import org.mockito.Mockito.spy
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when`
+import org.mockito.MockitoAnnotations
+
+@RunWith(AndroidJUnit4::class)
+class MenuButtonTest {
+ @Mock private lateinit var menuBuilder: BrowserMenuBuilder
+
+ @Mock private lateinit var menuController: MenuController
+
+ @Mock private lateinit var menu: BrowserMenu
+
+ @Mock private lateinit var menuButtonInternal: mozilla.components.browser.menu.view.MenuButton
+ private lateinit var menuButton: MenuButton
+
+ @Before
+ fun setup() {
+ MockitoAnnotations.openMocks(this)
+ `when`(menuBuilder.build(testContext)).thenReturn(menu)
+ `when`(menuButtonInternal.context).thenReturn(testContext)
+
+ menuButton = MenuButton(menuButtonInternal)
+ }
+
+ @Test
+ fun `menu button is visible only if menu builder attached`() {
+ verify(menuButtonInternal).visibility = View.GONE
+
+ `when`(menuButtonInternal.menuBuilder).thenReturn(mock())
+ assertTrue(menuButton.shouldBeVisible())
+
+ `when`(menuButtonInternal.menuBuilder).thenReturn(null)
+ assertFalse(menuButton.shouldBeVisible())
+ }
+
+ @Suppress("Deprecation")
+ @Test
+ fun `menu button sets onDismiss action`() {
+ val action = {}
+ menuButton.setMenuDismissAction(action)
+
+ verify(menuButtonInternal).onDismiss = action
+ }
+
+ @Test
+ fun `icon displays dot if low highlighted item is present in menu`() {
+ verify(menuButtonInternal, never()).invalidateBrowserMenu()
+ verify(menuButtonInternal, never()).setHighlight(any())
+
+ var isHighlighted = false
+ val highlight = BrowserMenuHighlight.LowPriority(Color.YELLOW)
+ val highlightMenuBuilder = spy(
+ BrowserMenuBuilder(
+ listOf(
+ BrowserMenuHighlightableItem(
+ label = "Test",
+ startImageResource = 0,
+ highlight = highlight,
+ isHighlighted = { isHighlighted },
+ ),
+ ),
+ ),
+ )
+ doReturn(menu).`when`(highlightMenuBuilder).build(testContext)
+
+ menuButton.menuBuilder = highlightMenuBuilder
+ `when`(menuButtonInternal.menuBuilder).thenReturn(highlightMenuBuilder)
+ menuButton.invalidateMenu()
+
+ verify(menuButtonInternal).setHighlight(null)
+
+ isHighlighted = true
+ menuButton.invalidateMenu()
+
+ assertEquals(highlight, highlightMenuBuilder.items.getHighlight())
+ verify(menuButtonInternal).setHighlight(highlight)
+ }
+
+ @Test
+ fun `invalidateMenu should invalidate the internal menu`() {
+ `when`(menuButtonInternal.menuController).thenReturn(null)
+ `when`(menuButtonInternal.menuBuilder).thenReturn(mock())
+ verify(menuButtonInternal, never()).invalidateBrowserMenu()
+
+ menuButton.invalidateMenu()
+
+ verify(menuButtonInternal).invalidateBrowserMenu()
+ }
+
+ @Test
+ fun `invalidateMenu should do nothing if using the menu controller`() {
+ `when`(menuButtonInternal.menuController).thenReturn(menuController)
+ `when`(menuButtonInternal.menuBuilder).thenReturn(null)
+ verify(menuButtonInternal, never()).invalidateBrowserMenu()
+
+ menuButton.invalidateMenu()
+
+ verify(menuButtonInternal, never()).invalidateBrowserMenu()
+ }
+
+ @Test
+ fun `invalidateMenu should automatically upgrade menu items if both builder and controller are present`() {
+ val onClick = {}
+ `when`(menuButtonInternal.menuController).thenReturn(menuController)
+ `when`(menuButtonInternal.menuBuilder).thenReturn(
+ BrowserMenuBuilder(
+ listOf(
+ SimpleBrowserMenuItem("Item 1", listener = onClick),
+ SimpleBrowserMenuItem("Item 2"),
+ ),
+ ),
+ )
+ verify(menuButtonInternal, never()).invalidateBrowserMenu()
+
+ menuButton.invalidateMenu()
+
+ verify(menuButtonInternal, never()).invalidateBrowserMenu()
+ verify(menuController).submitList(
+ listOf(
+ TextMenuCandidate("Item 1", onClick = onClick),
+ DecorativeTextMenuCandidate("Item 2"),
+ ),
+ )
+ }
+}
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/display/TrackingProtectionIconViewTest.kt b/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/display/TrackingProtectionIconViewTest.kt
new file mode 100644
index 0000000000..1386c17e29
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/display/TrackingProtectionIconViewTest.kt
@@ -0,0 +1,43 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar2.display
+
+import android.graphics.PorterDuff
+import android.graphics.PorterDuffColorFilter
+import android.graphics.drawable.AnimatedVectorDrawable
+import android.graphics.drawable.Drawable
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import mozilla.components.support.test.mock
+import mozilla.components.support.test.robolectric.testContext
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertNotEquals
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class TrackingProtectionIconViewTest {
+
+ @Test
+ fun `After setting tint, can get trackingProtectionTint`() {
+ val view = TrackingProtectionIconView(testContext)
+ view.setTint(android.R.color.black)
+ assertEquals(android.R.color.black, view.trackingProtectionTint)
+ }
+
+ @Test
+ fun `colorFilter is cleared on animatable drawables`() {
+ val view = TrackingProtectionIconView(testContext)
+ view.trackingProtectionTint = android.R.color.black
+
+ val drawable = mock<Drawable>()
+ val animatedDrawable = mock<AnimatedVectorDrawable>()
+
+ view.setOrClearColorFilter(drawable)
+ assertEquals(PorterDuffColorFilter(android.R.color.black, PorterDuff.Mode.SRC_ATOP), view.colorFilter)
+
+ view.setOrClearColorFilter(animatedDrawable)
+ assertNotEquals(PorterDuffColorFilter(android.R.color.black, PorterDuff.Mode.SRC_ATOP), view.colorFilter)
+ }
+}
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/edit/EditToolbarTest.kt b/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/edit/EditToolbarTest.kt
new file mode 100644
index 0000000000..a371126a16
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/edit/EditToolbarTest.kt
@@ -0,0 +1,290 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar2.edit
+
+import android.view.KeyEvent
+import android.view.View
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import kotlinx.coroutines.ExperimentalCoroutinesApi
+import kotlinx.coroutines.test.runTest
+import mozilla.components.browser.toolbar2.BrowserToolbar
+import mozilla.components.browser.toolbar2.R
+import mozilla.components.concept.toolbar.AutocompleteDelegate
+import mozilla.components.concept.toolbar.Toolbar
+import mozilla.components.support.base.Component
+import mozilla.components.support.base.facts.Action
+import mozilla.components.support.base.facts.processor.CollectionProcessor
+import mozilla.components.support.test.mock
+import mozilla.components.support.test.robolectric.testContext
+import mozilla.components.ui.autocomplete.InlineAutocompleteEditText
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertNotNull
+import org.junit.Assert.assertNull
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
+import java.util.concurrent.CountDownLatch
+
+@ExperimentalCoroutinesApi // for runTest
+@RunWith(AndroidJUnit4::class)
+class EditToolbarTest {
+ private fun createEditToolbar(): Pair<BrowserToolbar, EditToolbar> {
+ val toolbar: BrowserToolbar = mock()
+ val displayToolbar = EditToolbar(
+ testContext,
+ toolbar,
+ View.inflate(testContext, R.layout.mozac_browser_toolbar_edittoolbar, null),
+ )
+ return Pair(toolbar, displayToolbar)
+ }
+
+ @Test
+ fun `entered text is forwarded to async autocomplete filter`() = runTest {
+ val toolbar = BrowserToolbar(testContext)
+
+ toolbar.edit.views.url.onAttachedToWindow()
+
+ val latch = CountDownLatch(1)
+ var invokedWithParams: List<Any?>? = null
+ toolbar.setAutocompleteListener { p1, p2 ->
+ invokedWithParams = listOf(p1, p2)
+ latch.countDown()
+ }
+
+ toolbar.edit.views.url.setText("Hello")
+
+ // Autocomplete filter will be invoked on a worker thread.
+ // Serialize here for the sake of tests.
+ latch.await()
+
+ assertEquals("Hello", invokedWithParams!![0])
+ assertTrue(invokedWithParams!![1] is AutocompleteDelegate)
+ }
+
+ @Test
+ fun `GIVEN existing user input WHEN a call to refresh autocomplete suggestions is made THEN retart the autocomplete functionality with the current text`() {
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.edit.views.url.onAttachedToWindow()
+ // Fake existing user input.
+ toolbar.edit.views.url.setText("Test")
+ val latch = CountDownLatch(1)
+ var invokedWithParams: List<Any?>? = null
+ // Only now enable the autocomplete functionality.
+ toolbar.setAutocompleteListener { p1, p2 ->
+ invokedWithParams = listOf(p1, p2)
+ latch.countDown()
+ }
+
+ toolbar.refreshAutocomplete()
+
+ // Autocomplete filter will be invoked on a worker thread.
+ // Serialize here for the sake of tests.
+ latch.await()
+ assertEquals("Test", invokedWithParams!![0])
+ assertTrue(invokedWithParams!![1] is AutocompleteDelegate)
+ }
+
+ @Test
+ fun `focus change is forwarded to listener`() {
+ var listenerInvoked = false
+ var value = false
+
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.edit.setOnEditFocusChangeListener { hasFocus ->
+ listenerInvoked = true
+ value = hasFocus
+ }
+
+ // Switch to editing mode and focus view.
+ toolbar.editMode()
+ toolbar.edit.views.url.requestFocus()
+
+ assertTrue(listenerInvoked)
+ assertTrue(value)
+
+ // Switch back to display mode
+ listenerInvoked = false
+ toolbar.displayMode()
+
+ assertTrue(listenerInvoked)
+ assertFalse(value)
+ }
+
+ @Test
+ fun `entering text emits facts`() {
+ CollectionProcessor.withFactCollection { facts ->
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.edit.views.url.onAttachedToWindow()
+
+ assertEquals(0, facts.size)
+
+ toolbar.edit.views.url.setText("https://www.mozilla.org")
+ toolbar.edit.views.url.dispatchKeyEvent(
+ KeyEvent(
+ System.currentTimeMillis(),
+ System.currentTimeMillis(),
+ KeyEvent.ACTION_DOWN,
+ KeyEvent.KEYCODE_ENTER,
+ 0,
+ ),
+ )
+
+ assertEquals(2, facts.size)
+
+ val factDetail = facts[0]
+ assertEquals(Component.UI_AUTOCOMPLETE, factDetail.component)
+ assertEquals(Action.IMPLEMENTATION_DETAIL, factDetail.action)
+ assertEquals("onTextChanged", factDetail.item)
+ assertEquals("InlineAutocompleteEditText", factDetail.value)
+
+ val fact = facts[1]
+ assertEquals(Component.BROWSER_TOOLBAR, fact.component)
+ assertEquals(Action.COMMIT, fact.action)
+ assertEquals("toolbar", fact.item)
+ assertNull(fact.value)
+
+ val metadata = fact.metadata
+ assertNotNull(metadata!!)
+ assertEquals(1, metadata.size)
+ assertTrue(metadata.contains("autocomplete"))
+ assertTrue(metadata["autocomplete"] is Boolean)
+ assertFalse(metadata["autocomplete"] as Boolean)
+ }
+ }
+
+ @Test
+ fun `entering text emits facts with autocomplete metadata`() {
+ CollectionProcessor.withFactCollection { facts ->
+ val toolbar = BrowserToolbar(testContext)
+ toolbar.edit.views.url.onAttachedToWindow()
+
+ assertEquals(0, facts.size)
+
+ toolbar.edit.views.url.setText("https://www.mozilla.org")
+
+ // Fake autocomplete
+ toolbar.edit.views.url.autocompleteResult = InlineAutocompleteEditText.AutocompleteResult(
+ text = "hello world",
+ source = "test-source",
+ totalItems = 100,
+ )
+
+ toolbar.edit.views.url.dispatchKeyEvent(
+ KeyEvent(
+ System.currentTimeMillis(),
+ System.currentTimeMillis(),
+ KeyEvent.ACTION_DOWN,
+ KeyEvent.KEYCODE_ENTER,
+ 0,
+ ),
+ )
+
+ assertEquals(2, facts.size)
+
+ val factDetail = facts[0]
+ assertEquals(Component.UI_AUTOCOMPLETE, factDetail.component)
+ assertEquals(Action.IMPLEMENTATION_DETAIL, factDetail.action)
+ assertEquals("onTextChanged", factDetail.item)
+ assertEquals("InlineAutocompleteEditText", factDetail.value)
+
+ val factCommit = facts[1]
+ assertEquals(Component.BROWSER_TOOLBAR, factCommit.component)
+ assertEquals(Action.COMMIT, factCommit.action)
+ assertEquals("toolbar", factCommit.item)
+ assertNull(factCommit.value)
+
+ val metadata = factCommit.metadata
+ assertNotNull(metadata!!)
+ assertEquals(2, metadata.size)
+
+ assertTrue(metadata.contains("autocomplete"))
+ assertTrue(metadata["autocomplete"] is Boolean)
+ assertTrue(metadata["autocomplete"] as Boolean)
+
+ assertTrue(metadata.contains("source"))
+ assertEquals("test-source", metadata["source"])
+ }
+ }
+
+ @Test
+ fun `clearView gone on init`() {
+ val (_, editToolbar) = createEditToolbar()
+ val clearView = editToolbar.views.clear
+ assertTrue(clearView.visibility == View.GONE)
+ }
+
+ @Test
+ fun `clearView visible on updateUrl`() {
+ val (_, editToolbar) = createEditToolbar()
+ val clearView = editToolbar.views.clear
+
+ editToolbar.updateUrl("TestUrl", false)
+ assertTrue(clearView.visibility == View.VISIBLE)
+ }
+
+ @Test
+ fun `WHEN shouldAppend is set to true updateUrl should append text`() {
+ val (_, editToolbar) = createEditToolbar()
+
+ // Initial state
+ editToolbar.updateUrl(url = "what ")
+
+ // Simulate text update with voice input
+ val actual = editToolbar.updateUrl(url = "is this", shouldAppend = true, shouldHighlight = true)
+ val expected = "what is this"
+
+ assertEquals(expected, actual)
+ assertEquals(expected, editToolbar.views.url.text.toString())
+ assertEquals(5, editToolbar.views.url.selectionStart)
+ assertEquals(12, editToolbar.views.url.selectionEnd)
+ }
+
+ @Test
+ fun `setIconClickListener sets a click listener on the icon view`() {
+ val (_, editToolbar) = createEditToolbar()
+ val iconView = editToolbar.views.icon
+ assertFalse(iconView.hasOnClickListeners())
+ editToolbar.setIconClickListener { /* noop */ }
+ assertTrue(iconView.hasOnClickListeners())
+ }
+
+ @Test
+ fun `clearView clears text in urlView`() {
+ val (_, editToolbar) = createEditToolbar()
+ val clearView = editToolbar.views.clear
+
+ editToolbar.views.url.setText("https://www.mozilla.org")
+ assertTrue(editToolbar.views.url.text.isNotBlank())
+
+ assertNotNull(clearView)
+ clearView.performClick()
+ assertTrue(editToolbar.views.url.text.isBlank())
+ }
+
+ @Test
+ fun `editSuggestion sets text in urlView`() {
+ val (_, editToolbar) = createEditToolbar()
+ val url = editToolbar.views.url
+
+ url.setText("https://www.mozilla.org")
+ assertEquals("https://www.mozilla.org", url.text.toString())
+
+ var callbackCalled = false
+
+ editToolbar.editListener = object : Toolbar.OnEditListener {
+ override fun onTextChanged(text: String) {
+ callbackCalled = true
+ }
+ }
+
+ editToolbar.editSuggestion("firefox")
+
+ assertEquals("firefox", url.text.toString())
+ assertTrue(callbackCalled)
+ assertEquals("firefox".length, url.selectionStart)
+ assertTrue(url.hasFocus())
+ }
+}
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/internal/ActionContainerTest.kt b/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/internal/ActionContainerTest.kt
new file mode 100644
index 0000000000..e79c804f9e
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/test/java/mozilla/components/browser/toolbar2/internal/ActionContainerTest.kt
@@ -0,0 +1,99 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.browser.toolbar2.internal
+
+import android.view.View
+import mozilla.components.browser.toolbar2.BrowserToolbar
+import mozilla.components.concept.toolbar.Toolbar
+import mozilla.components.support.test.robolectric.testContext
+import org.junit.Assert.assertEquals
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.mock
+import org.robolectric.RobolectricTestRunner
+
+@RunWith(RobolectricTestRunner::class)
+class ActionContainerTest {
+ private lateinit var actionContainer: ActionContainer
+ private lateinit var browserAction: Toolbar.Action
+
+ @Before
+ fun setUp() {
+ browserAction = BrowserToolbar.Button(
+ imageDrawable = mock(),
+ contentDescription = "Test",
+ visible = { true },
+ autoHide = { true },
+ weight = { 2 },
+ listener = mock(),
+ )
+ actionContainer = ActionContainer(testContext)
+ }
+
+ @Test
+ fun `GIVEN multiple actions with different weights WHEN calculateInsertionIndex is called THEN action is placed at right index`() {
+ actionContainer.addAction(
+ BrowserToolbar.Button(
+ imageDrawable = mock(),
+ contentDescription = "Share",
+ visible = { true },
+ weight = { 1 },
+ listener = mock(),
+ ),
+ )
+ actionContainer.addAction(
+ BrowserToolbar.Button(
+ imageDrawable = mock(),
+ contentDescription = "Reload",
+ visible = { true },
+ weight = { 3 },
+ listener = mock(),
+ ),
+ )
+ val newAction =
+ BrowserToolbar.Button(
+ imageDrawable = mock(),
+ contentDescription = "Translation",
+ visible = { true },
+ weight = { 2 },
+ listener = mock(),
+ )
+
+ val insertionIndex = actionContainer.calculateInsertionIndex(newAction)
+
+ assertEquals("The insertion index should be", 1, insertionIndex)
+ }
+
+ @Test
+ fun `WHEN addAction is called THEN child views are increased`() {
+ actionContainer.addAction(browserAction)
+
+ assertEquals(1, actionContainer.childCount)
+ }
+
+ @Test
+ fun `WHEN removeAction is called THEN child views are decreased`() {
+ actionContainer.addAction(browserAction)
+ actionContainer.removeAction(browserAction)
+
+ assertEquals(0, actionContainer.childCount)
+ }
+
+ @Test
+ fun `WHEN invalidateAction is called THEN action visibility is reconsidered`() {
+ val browserToolbarAction = BrowserToolbar.Button(
+ imageDrawable = mock(),
+ contentDescription = "Translation",
+ visible = { false },
+ weight = { 2 },
+ listener = mock(),
+ )
+ actionContainer.addAction(browserToolbarAction)
+ actionContainer.invalidateActions()
+
+ assertEquals(View.GONE, actionContainer.visibility)
+ }
+}
diff --git a/mobile/android/android-components/components/browser/toolbar2/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/mobile/android/android-components/components/browser/toolbar2/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
new file mode 100644
index 0000000000..cf1c399ea8
--- /dev/null
+++ b/mobile/android/android-components/components/browser/toolbar2/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker
@@ -0,0 +1,2 @@
+mock-maker-inline
+// This allows mocking final classes (classes are final by default in Kotlin)