"""Test that disable_security flag properly merges --disable-features flags without breaking extensions.""" import tempfile from browser_use.browser.profile import BrowserProfile class TestBrowserProfileDisableSecurity: """Test disable_security flag behavior.""" def test_disable_security_preserves_extension_features(self): """Test that disable_security=True doesn't break extension features by properly merging --disable-features flags.""" # Test with disable_security=False (baseline) profile_normal = BrowserProfile(disable_security=False, user_data_dir=tempfile.mkdtemp(prefix='test-normal-')) profile_normal.detect_display_configuration() args_normal = profile_normal.get_args() # Test with disable_security=True profile_security_disabled = BrowserProfile(disable_security=True, user_data_dir=tempfile.mkdtemp(prefix='test-security-')) profile_security_disabled.detect_display_configuration() args_security_disabled = profile_security_disabled.get_args() # Extract disable-features args def extract_disable_features(args): for arg in args: if arg.startswith('--disable-features='): return set(arg.split('=', 1)[1].split(',')) return set() features_normal = extract_disable_features(args_normal) features_security_disabled = extract_disable_features(args_security_disabled) # Check that extension-related features are preserved extension_features = { 'ExtensionManifestV2Disabled', 'ExtensionDisableUnsupportedDeveloper', 'ExtensionManifestV2Unsupported', } security_features = {'IsolateOrigins', 'site-per-process'} # Verify that security disabled has both extension and security features missing_extension_features = extension_features - features_security_disabled missing_security_features = security_features - features_security_disabled assert not missing_extension_features, ( f'Missing extension features when disable_security=True: {missing_extension_features}' ) assert not missing_security_features, f'Missing security features when disable_security=True: {missing_security_features}' # Verify that security disabled profile has more features than normal (due to added security features) assert len(features_security_disabled) > len(features_normal), ( 'Security disabled profile should have more features than normal profile' ) # Verify all normal features are preserved in security disabled profile missing_normal_features = features_normal - features_security_disabled assert not missing_normal_features, f'Normal features missing from security disabled profile: {missing_normal_features}' def test_disable_features_flag_deduplication(self): """Test that duplicate --disable-features values are properly deduplicated.""" profile = BrowserProfile( disable_security=True, user_data_dir=tempfile.mkdtemp(prefix='test-dedup-'), # Add duplicate features to test deduplication args=['--disable-features=TestFeature1,TestFeature2', '--disable-features=TestFeature2,TestFeature3'], ) profile.detect_display_configuration() args = profile.get_args() # Extract disable-features args disable_features_args = [arg for arg in args if arg.startswith('--disable-features=')] # Should only have one consolidated --disable-features flag assert len(disable_features_args) == 1, f'Expected 1 disable-features flag, got {len(disable_features_args)}' features = set(disable_features_args[0].split('=', 1)[1].split(',')) # Should have all test features without duplicates expected_test_features = {'TestFeature1', 'TestFeature2', 'TestFeature3'} assert expected_test_features.issubset(features), f'Missing test features: {expected_test_features - features}'