# SPDX-License-Identifier: CC0-1.0 """ Haketilo unit tests - modifying requests using webRequest API """ # This file is part of Haketilo # # Copyright (C) 2021, Wojtek Kosior # # This program is free software: you can redistribute it and/or modify # it under the terms of the CC0 1.0 Universal License as published by # the Creative Commons Corporation. # # 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 # CC0 1.0 Universal License for more details. import re from hashlib import sha256 import pytest from ..script_loader import load_script from .utils import are_scripts_allowed def webrequest_js(): return (load_script('background/webrequest.js', '#IMPORT common/patterns_query_tree.js AS pqt') + '''; // Mock pattern tree. tree = pqt.make(); // Mock default allow. default_allow = {name: "default_allow", value: true}; // Rule to block scripts. pqt.register(tree, "https://site.with.scripts.block.ed/***", "~allow", 0); // Rule to allow scripts, but overridden by payload assignment. pqt.register(tree, "https://site.with.paylo.ad/***", "~allow", 1); pqt.register(tree, "https://site.with.paylo.ad/***", "somemapping", {identifier: "someresource"}); // Mock stream_filter. stream_filter.apply = (details, headers, policy) => headers; // Mock secret and start webrequest operations. start("somesecret"); ''') @pytest.mark.ext_data({'background_script': webrequest_js}) @pytest.mark.usefixtures('webextension') def test_on_headers_received(driver, execute_in_page): for attempt in range(10): driver.get('https://site.with.scripts.block.ed/') if not are_scripts_allowed(driver): break assert attempt != 9 driver.get('https://site.with.scripts.allow.ed/') assert are_scripts_allowed(driver) driver.get('https://site.with.paylo.ad/') assert not are_scripts_allowed(driver) source = 'somemapping:someresource:https://site.with.paylo.ad/index.html:somesecret' assert are_scripts_allowed(driver, sha256(source.encode()).digest().hex())