// Copyright (c) 2018 GitHub, Inc. // Use of this source code is governed by the MIT license that can be // found in the LICENSE file. #include "atom/app/command_line_args.h" #include #include #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "content/public/common/content_switches.h" namespace { bool IsUrlArg(const base::CommandLine::CharType* arg) { // the first character must be a letter for this to be a URL auto c = *arg; if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')) { for (auto p = arg + 1; *p; ++p) { c = *p; // colon indicates that the argument starts with a URI scheme if (c == ':') { // it could also be a Windows filesystem path if (p == arg + 1) break; return true; } // white-space before a colon means it's not a URL if (c == ' ' || (0x9 <= c && c <= 0xD)) break; } } return false; } /* * The blacklist of command line switches, must be sorted. * Update the list by pasting the following command into bash * in libchromiumcontent/src/: (find ./ -name "*switches.cc" | \ xargs grep -P --no-filename "\"\S+\";" | \ perl -pe 's|^.*?"(\S+)";| "$1",|'; \ echo ' "inspect",'; \ echo ' "inspect-brk",') | \ LANG=C sort | \ uniq > blacklist-switches.txt */ const char* kBlacklist[] = { "/prefetch:1", "/prefetch:2", "/prefetch:3", "/prefetch:4", "/prefetch:5", "/prefetch:6", "/prefetch:8", "0", "?", "ChromeOSMemoryPressureHandling", "SafeSites", "accept-resource-provider", "account-consistency", "adaboost", "aec-refined-adaptive-filter", "agc-startup-min-volume", "aggressive", "aggressive-cache-discard", "aggressive-tab-discard", "all", "all-toolchains", "allarticles", "allow-cross-origin-auth-prompt", "allow-external-pages", "allow-failed-policy-fetch-for-test", "allow-file-access-from-files", "allow-hidden-media-playback", "allow-http-background-page", "allow-http-screen-capture", "allow-insecure-localhost", "allow-legacy-extension-manifests", "allow-loopback-in-peer-connection", "allow-nacl-crxfs-api", "allow-nacl-file-handle-api", "allow-nacl-socket-api", "allow-no-sandbox-job", "allow-outdated-plugins", "allow-ra-in-dev-mode", "allow-running-insecure-content", "allow-sandbox-debugging", "allow-silent-push", "alsa-check-close-timeout", "alsa-enable-upsampling", "alsa-fixed-output-sample-rate", "alsa-input-device", "alsa-mute-device-name", "alsa-mute-element-name", "alsa-output-avail-min", "alsa-output-buffer-size", "alsa-output-device", "alsa-output-period-size", "alsa-output-start-threshold", "alsa-volume-device-name", "alsa-volume-element-name", "also-emit-success-logs", "alternative", "always-authorize-plugins", "always-on", "always-use-complex-text", "alwaystrue", "amd-switchable", "android-fonts-path", "android-stderr-port", "android-stdin-port", "android-stdout-port", "angle", "app", "app-auto-launched", "app-id", "app-mode-auth-code", "app-mode-oauth-token", "app-mode-oem-manifest", "app-shell-allow-roaming", "app-shell-host-window-size", "app-shell-preferred-network", "app-shell-refresh-token", "app-shell-user", "apple", "apps-gallery-download-url", "apps-gallery-update-url", "apps-gallery-url", "apps-keep-chrome-alive-in-tests", "arc-availability", "arc-available", "arc-start-mode", "arc-transition-migration-required", "args", "artifacts-dir", "ash-constrain-pointer-to-root", "ash-debug-shortcuts", "ash-dev-shortcuts", "ash-disable-smooth-screen-rotation", "ash-disable-tablet-autohide-titlebars", "ash-disable-touch-exploration-mode", "ash-enable-magnifier-key-scroller", "ash-enable-mirrored-screen", "ash-enable-night-light", "ash-enable-palette-on-all-displays", "ash-enable-scale-settings-tray", "ash-enable-software-mirroring", "ash-enable-unified-desktop", "ash-estimated-presentation-delay", "ash-hide-notifications-for-factory", "ash-host-window-bounds", "ash-shelf-color", "ash-shelf-color-scheme", "ash-touch-hud", "ash-webui-init", "attestation-server", "audio-buffer-size", "audio-output-channels", "aura-legacy-power-button", "auth-ext-path", "auth-server-whitelist", "auth-spnego-account-type", "auto", "auto-open-devtools-for-tabs", "auto-select-desktop-capture-source", "autoplay-policy", "blink-settings", "bootstrap", "browser", "browser-startup-dialog", "browser-subprocess-path", "browser-test", "bwsi", "bypass-app-banner-engagement-checks", "canvas-msaa-sample-count", "cast-initial-screen-height", "cast-initial-screen-width", "cc-layer-tree-test-long-timeout", "cc-layer-tree-test-no-timeout", "cc-rebaseline-pixeltests", "cellular-first", "cellular-only", "check-for-update-interval", "check-layout-test-sys-deps", "child-wallpaper-large", "child-wallpaper-small", "chrome-home-swipe-logic", "cipher-suite-blacklist", "clamshell", "class", "clear-token-service", "cloud-print-file", "cloud-print-file-type", "cloud-print-job-title", "cloud-print-print-ticket", "cloud-print-setup-proxy", "cloud-print-url", "cloud-print-xmpp-endpoint", "color", "compensate-for-unstable-pinch-zoom", "compile-shader-always-succeeds", "component-updater", "connectivity-check-url", "conservative", "content-image-texture-target", "content-shell-host-window-size", "controller", "crash-dumps-dir", "crash-on-failure", "crash-on-hang-threads", "crash-server-url", "crash-test", "crashpad-handler", "create-browser-on-startup-for-tests", "cros-gaia-api-v1", "cros-region", "cros-regions-mode", "crosh-command", "cryptauth-http-host", "custom-devtools-frontend", "custom-launcher-page", "custom_summary", "d3d-support", "d3d11", "d3d9", "daemon", "dark_muted", "dark_vibrant", "data-path", "data-reduction-proxy-config-url", "data-reduction-proxy-experiment", "data-reduction-proxy-http-proxies", "data-reduction-proxy-lo-fi", "data-reduction-proxy-pingback-url", "data-reduction-proxy-secure-proxy-check-url", "data-reduction-proxy-server-experiments-disabled", "dbus-stub", "debug-devtools", "debug-enable-frame-toggle", "debug-packed-apps", "debug-print", "default", "default-background-color", "default-tile-height", "default-tile-width", "default-wallpaper-is-oem", "default-wallpaper-large", "default-wallpaper-small", "demo", "derelict-detection-timeout", "derelict-idle-timeout", "desktop", "desktop-window-1080p", "deterministic-fetch", "device-management-url", "device-scale-factor", "devtools-flags", "diagnostics", "diagnostics-format", "diagnostics-recovery", "dice", "dice_fix_auth_errors", "disable", "disable-2d-canvas-clip-aa", "disable-2d-canvas-image-chromium", "disable-3d-apis", "disable-accelerated-2d-canvas", "disable-accelerated-jpeg-decoding", "disable-accelerated-mjpeg-decode", "disable-accelerated-video-decode", "disable-app-info-dialog-mac", "disable-app-list-dismiss-on-blur", "disable-app-window-cycling", "disable-appcontainer", "disable-arc-data-wipe", "disable-arc-opt-in-verification", "disable-audio-support-for-desktop-share", "disable-avfoundation-overlays", "disable-background-networking", "disable-background-timer-throttling", "disable-backgrounding-occluded-windows", "disable-backing-store-limit", "disable-blink-features", "disable-boot-animation", "disable-breakpad", "disable-browser-task-scheduler", "disable-bundled-ppapi-flash", "disable-canvas-aa", "disable-captive-portal-bypass-proxy", "disable-cast-streaming-hw-encoding", "disable-checker-imaging", "disable-clear-browsing-data-counters", "disable-client-side-phishing-detection", "disable-cloud-import", "disable-component-cloud-policy", "disable-component-extensions-with-background-pages", "disable-component-update", "disable-composited-antialiasing", "disable-contextual-search", "disable-d3d11", "disable-databases", "disable-datasaver-prompt", "disable-default-apps", "disable-demo-mode", "disable-device-disabling", "disable-device-discovery-notifications", "disable-dinosaur-easter-egg", "disable-direct-composition", "disable-direct-composition-layers", "disable-directwrite-for-ui", "disable-display-list-2d-canvas", "disable-distance-field-text", "disable-domain-blocking-for-3d-apis", "disable-domain-reliability", "disable-drive-search-in-app-launcher", "disable-dwm-composition", "disable-encryption-migration", "disable-eol-notification", "disable-es3-apis", "disable-es3-gl-context", "disable-extensions", "disable-extensions-except", "disable-extensions-file-access-check", "disable-extensions-http-throttling", "disable-features", "disable-field-trial-config", "disable-file-manager-touch-mode", "disable-file-system", "disable-flash-3d", "disable-flash-stage3d", "disable-fullscreen-low-power-mode", "disable-fullscreen-tab-detaching", "disable-gaia-services", "disable-gesture-editing", "disable-gesture-requirement-for-presentation", "disable-gesture-typing", "disable-gl-drawing-for-tests", "disable-gl-error-limit", "disable-gl-extensions", "disable-glsl-translator", "disable-gpu", "disable-gpu-compositing", "disable-gpu-driver-bug-workarounds", "disable-gpu-early-init", "disable-gpu-memory-buffer-compositor-resources", "disable-gpu-memory-buffer-video-frames", "disable-gpu-process-crash-limit", "disable-gpu-program-cache", "disable-gpu-rasterization", "disable-gpu-sandbox", "disable-gpu-shader-disk-cache", "disable-gpu-vsync", "disable-gpu-watchdog", "disable-hang-monitor", "disable-hid-detection-on-oobe", "disable-histogram-customizer", "disable-hosted-app-shim-creation", "disable-hosted-apps-in-windows", "disable-in-process-stack-traces", "disable-infobars", "disable-input-ime-api", "disable-input-view", "disable-ios-password-suggestions", "disable-javascript-harmony-shipping", "disable-kill-after-bad-ipc", "disable-lcd-text", "disable-legacy-window", "disable-local-storage", "disable-lock-screen-apps", "disable-logging", "disable-logging-redirect", "disable-login-animations", "disable-login-screen-apps", "disable-low-end-device-mode", "disable-low-latency-dxva", "disable-low-res-tiling", "disable-mac-overlays", "disable-mac-views-native-app-windows", "disable-machine-cert-request", "disable-main-frame-before-activation", "disable-md-error-screen", "disable-md-oobe", "disable-media-session-api", "disable-media-suspend", "disable-merge-key-char-events", "disable-mojo-local-storage", "disable-mojo-renderer", "disable-mtp-write-support", "disable-multi-display-layout", "disable-namespace-sandbox", "disable-native-gpu-memory-buffers", "disable-network-portal-notification", "disable-new-korean-ime", "disable-new-virtual-keyboard-behavior", "disable-new-zip-unpacker", "disable-notifications", "disable-ntp-most-likely-favicons-from-server", "disable-ntp-popular-sites", "disable-nv12-dxgi-video", "disable-offer-store-unmasked-wallet-cards", "disable-offer-upload-credit-cards", "disable-office-editing-component-extension", "disable-offline-auto-reload", "disable-offline-auto-reload-visible-only", "disable-origin-trial-controlled-blink-features", "disable-overscroll-edge-effect", "disable-panel-fitting", "disable-partial-raster", "disable-password-generation", "disable-pepper-3d", "disable-pepper-3d-image-chromium", "disable-per-user-timezone", "disable-permission-action-reporting", "disable-permissions-api", "disable-physical-keyboard-autocorrect", "disable-pinch", "disable-pnacl-crash-throttling", "disable-popup-blocking", "disable-prefer-compositing-to-lcd-text", "disable-presentation-api", "disable-print-preview", "disable-prompt-on-repost", "disable-proximity-auth-bluetooth-low-energy-discovery", "disable-pull-to-refresh-effect", "disable-push-api-background-mode", "disable-reading-from-canvas", "disable-remote-core-animation", "disable-remote-fonts", "disable-remote-playback-api", "disable-renderer-accessibility", "disable-renderer-backgrounding", "disable-resize-lock", "disable-rgba-4444-textures", "disable-rollback-option", "disable-rtc-smoothness-algorithm", "disable-screen-orientation-lock", "disable-search-geolocation-disclosure", "disable-seccomp-filter-sandbox", "disable-setuid-sandbox", "disable-shader-name-hashing", "disable-shared-workers", "disable-signin-promo", "disable-signin-scoped-device-id", "disable-single-click-autofill", "disable-skia-runtime-opts", "disable-slim-navigation-manager", "disable-slimming-paint-invalidation", "disable-smooth-scrolling", "disable-software-rasterizer", "disable-speech-api", "disable-suggestions-ui", "disable-surface-references", "disable-sync", "disable-sync-app-list", "disable-sync-types", "disable-system-timezone-automatic-detection", "disable-tab-for-desktop-share", "disable-third-party-keyboard-workaround", "disable-threaded-animation", "disable-threaded-compositing", "disable-threaded-scrolling", "disable-timeouts-for-profiling", "disable-touch-adjustment", "disable-touch-drag-drop", "disable-translate-new-ux", "disable-usb-keyboard-detect", "disable-v8-idle-tasks", "disable-vaapi-accelerated-video-encode", "disable-virtual-keyboard-overscroll", "disable-voice-input", "disable-volume-adjust-sound", "disable-wake-on-wifi", "disable-web-notification-custom-layouts", "disable-web-security", "disable-webgl", "disable-webgl-image-chromium", "disable-webrtc-encryption", "disable-webrtc-hw-decoding", "disable-webrtc-hw-encoding", "disable-win32k-lockdown", "disable-xss-auditor", "disable-zero-browsers-open-for-tests", "disable-zero-copy", "disable-zero-copy-dxgi-video", "disabled", "disabled-new-style-notification", "disallow-non-exact-resource-reuse", "disk-cache-dir", "disk-cache-size", "display", "dmg-device", "dns-log-details", "document-user-activation-required", "dom-automation", "dotfile", "draft", "draw-view-bounds-rects", "duck-flash", "dump-blink-runtime-call-stats", "dump-browser-histograms", "dump-dom", "eafe-path", "eafe-url", "easy-unlock-app-path", "edge-touch-filtering", "egl", "elevate", "embedded-extension-options", "emphasize-titles-in-omnibox-dropdown", "emulate-shader-precision", "enable-accelerated-2d-canvas", "enable-accelerated-vpx-decode", "enable-accessibility-tab-switcher", "enable-adaptive-selection-handle-orientation", "enable-aggressive-domstorage-flushing", "enable-android-wallpapers-app", "enable-app-info-dialog-mac", "enable-app-list", "enable-app-window-cycling", "enable-appcontainer", "enable-arc", "enable-arc-oobe-optin", "enable-async-event-targeting", "enable-audio-debug-recordings-from-extension", "enable-audio-focus", "enable-automation", "enable-background-fetch-persistence", "enable-benchmarking", "enable-ble-advertising-in-apps", "enable-blink-features", "enable-bookmark-undo", "enable-browser-side-navigation", "enable-browser-task-scheduler", "enable-cast-receiver", "enable-checker-imaging", "enable-chromevox-arc-support", "enable-clear-browsing-data-counters", "enable-cloud-print-proxy", "enable-cloud-print-xps", "enable-consumer-kiosk", "enable-contextual-search", "enable-crash-reporter", "enable-crash-reporter-for-testing", "enable-crx-hash-check", "enable-data-reduction-proxy-bypass-warning", "enable-data-reduction-proxy-force-pingback", "enable-data-reduction-proxy-lite-page", "enable-data-reduction-proxy-savings-promo", "enable-datasaver-prompt", "enable-device-discovery-notifications", "enable-devtools-experiments", "enable-direct-composition-layers", "enable-display-list-2d-canvas", "enable-distance-field-text", "enable-distillability-service", "enable-dom-distiller", "enable-domain-reliability", "enable-drive-search-in-app-launcher", "enable-drm-atomic", "enable-embedded-extension-options", "enable-encryption-migration", "enable-encryption-selection", "enable-es3-apis", "enable-exclusive-audio", "enable-experimental-accessibility-features", "enable-experimental-canvas-features", "enable-experimental-extension-apis", "enable-experimental-fullscreen-exit-ui", "enable-experimental-input-view-features", "enable-experimental-web-platform-features", "enable-extension-activity-log-testing", "enable-extension-activity-logging", "enable-extension-assets-sharing", "enable-external-drive-rename", "enable-fast-unload", "enable-features", "enable-file-manager-touch-mode", "enable-first-run-ui-transitions", "enable-floating-virtual-keyboard", "enable-font-antialiasing", "enable-fullscreen-tab-detaching", "enable-fullscreen-toolbar-reveal", "enable-google-branded-context-menu", "enable-gpu-async-worker-context", "enable-gpu-benchmarking", "enable-gpu-client-logging", "enable-gpu-client-tracing", "enable-gpu-command-logging", "enable-gpu-debugging", "enable-gpu-driver-debug-logging", "enable-gpu-memory-buffer-compositor-resources", "enable-gpu-memory-buffer-video-frames", "enable-gpu-rasterization", "enable-gpu-service-logging", "enable-gpu-service-tracing", "enable-hardware-overlays", "enable-harfbuzz-rendertext", "enable-heap-profiling", "enable-hosted-app-quit-notification", "enable-hosted-apps-in-windows", "enable-hotword-hardware", "enable-hung-renderer-infobar", "enable-inband-text-tracks", "enable-input-ime-api", "enable-instant-tethering", "enable-internal-media-session", "enable-ios-handoff-to-other-devices", "enable-layer-lists", "enable-lcd-text", "enable-leak-detection", "enable-local-file-accesses", "enable-local-sync-backend", "enable-logging", "enable-longpress-drag-selection", "enable-low-end-device-mode", "enable-low-res-tiling", "enable-mac-views-native-app-windows", "enable-main-frame-before-activation", "enable-md-feedback", "enable-media-suspend", "enable-merge-key-char-events", "enable-message-center-always-scroll-up-upon-notification-removal", "enable-nacl", "enable-nacl-debug", "enable-nacl-nonsfi-mode", "enable-native-gpu-memory-buffers", "enable-natural-scroll-default", "enable-navigation-tracing", "enable-net-benchmarking", "enable-network-information-downlink-max", "enable-network-portal-notification", "enable-new-app-menu-icon", "enable-ntp-most-likely-favicons-from-server", "enable-ntp-popular-sites", "enable-ntp-search-engine-country-detection", "enable-offer-store-unmasked-wallet-cards", "enable-offer-upload-credit-cards", "enable-offline-auto-reload", "enable-offline-auto-reload-visible-only", "enable-oop-rasterization", "enable-osk-overscroll", "enable-override-bookmarks-ui", "enable-partial-raster", "enable-password-generation", "enable-pepper-testing", "enable-permission-action-reporting", "enable-physical-keyboard-autocorrect", "enable-picture-in-picture", "enable-pinch", "enable-pixel-canvas-recording", "enable-pixel-output-in-tests", "enable-plugin-placeholder-testing", "enable-potentially-annoying-security-features", "enable-power-overlay", "enable-precise-memory-info", "enable-prefer-compositing-to-lcd-text", "enable-print-browser", "enable-print-preview-register-promos", "enable-profile-shortcut-manager", "enable-profiling", "enable-push-api-background-mode", "enable-refresh-token-annotation-request", "enable-request-tablet-site", "enable-rgba-4444-textures", "enable-sandbox", "enable-sandbox-logging", "enable-screenshot-testing-with-mode", "enable-scripts-require-action", "enable-scroll-prediction", "enable-service-manager-tracing", "enable-sgi-video-sync", "enable-signin-promo", "enable-single-click-autofill", "enable-site-settings", "enable-skia-benchmarking", "enable-slim-navigation-manager", "enable-slimming-paint-invalidation", "enable-slimming-paint-v2", "enable-smooth-scrolling", "enable-spatial-navigation", "enable-spdy-proxy-auth", "enable-speech-dispatcher", "enable-spelling-feedback-field-trial", "enable-spotlight-actions", "enable-stats-collection-bindings", "enable-stats-table", "enable-strict-mixed-content-checking", "enable-strict-powerful-feature-restrictions", "enable-suggestions-ui", "enable-suggestions-with-substring-match", "enable-supervised-user-managed-bookmarks-folder", "enable-surface-synchronization", "enable-swap-buffers-with-bounds", "enable-sync-app-list", "enable-sync-articles", "enable-tab-audio-muting", "enable-tablet-splitview", "enable-tcp-fastopen", "enable-third-party-keyboard-workaround", "enable-threaded-compositing", "enable-threaded-texture-mailboxes", "enable-tile-compression", "enable-touch-calibration-setting", "enable-touch-drag-drop", "enable-touchpad-three-finger-click", "enable-touchview", "enable-trace-app-source", "enable-tracing", "enable-tracing-output", "enable-translate-new-ux", "enable-ui-devtools", "enable-use-zoom-for-dsf", "enable-user-metrics", "enable-usermedia-screen-capturing", "enable-video-player-chromecast-support", "enable-viewport", "enable-virtual-keyboard", "enable-voice-interaction", "enable-vtune-support", "enable-vulkan", "enable-wayland-server", "enable-web-notification-custom-layouts", "enable-webfonts-intervention-trigger", "enable-webfonts-intervention-v2", "enable-webgl-draft-extensions", "enable-webgl-image-chromium", "enable-webrtc-event-logging-from-extension", "enable-webrtc-srtp-aes-gcm", "enable-webrtc-srtp-encrypted-headers", "enable-webrtc-stun-origin", "enable-webview-variations", "enable-webvr", "enable-wifi-credential-sync", "enable-win7-webrtc-hw-h264-decoding", "enable-zero-copy", "enable-zip-archiver-on-file-manager", "enabled", "enabled-2g", "enabled-3g", "enabled-new-style-notification", "enabled-slow2g", "encode-binary", "enforce", "enforce-gl-minimums", "enforce-webrtc-ip-permission-check", "enforce_strict", "enterprise-disable-arc", "enterprise-enable-forced-re-enrollment", "enterprise-enable-license-type-selection", "enterprise-enable-zero-touch-enrollment", "enterprise-enrollment-initial-modulus", "enterprise-enrollment-modulus-limit", "error-console", "evaluate-type", "evaluate_capability", "experiment", "explicitly-allowed-ports", "expose-internals-for-testing", "extension-content-verification", "extension-process", "extensions-install-verification", "extensions-multi-account", "extensions-not-webstore", "extensions-on-chrome-urls", "extensions-update-frequency", "extra-search-query-params", "fail-on-unused-args", "fake-variations-channel", "false", "fast", "fast-start", "feedback-server", "field-trial-handle", "first-exec-after-boot", "flag-switches-begin", "flag-switches-end", "font-cache-shared-handle", "force-android-app-mode", "force-app-mode", "force-clamshell-power-button", "force-color-profile", "force-desktop-ios-promotion", "force-dev-mode-highlighting", "force-device-scale-factor", "force-display-list-2d-canvas", "force-effective-connection-type", "force-enable-metrics-reporting", "force-enable-stylus-tools", "force-fieldtrial-params", "force-fieldtrials", "force-first-run", "force-first-run-ui", "force-gpu-mem-available-mb", "force-gpu-rasterization", "force-happiness-tracking-system", "force-load-easy-unlock-app-in-tests", "force-local-ntp", "force-login-manager-in-tests", "force-mediafoundation", "force-overlay-fullscreen-video", "force-password-reauth", "force-pnacl-subzero", "force-presentation-receiver-for-testing", "force-renderer-accessibility", "force-show-update-menu-badge", "force-show-update-menu-item", "force-system-compositor-mode", "force-tablet-mode", "force-text-direction", "force-ui-direction", "force-variation-ids", "force-video-overlays", "force-wave-audio", "force-webrtc-ip-handling-policy", "full-memory-crash-report", "gaia-url", "gcm-checkin-url", "gcm-mcs-endpoint", "gcm-registration-url", "generate-accessibility-test-expectations", "gl", "gl-composited-overlay-candidate-quad-border", "gl-shader-interm-output", "gles", "golden-screenshots-dir", "google-apis-url", "google-base-url", "google-doodle-url", "google-url", "gpu-active-device-id", "gpu-active-vendor-id", "gpu-device-id", "gpu-driver-date", "gpu-driver-vendor", "gpu-driver-version", "gpu-launcher", "gpu-no-complete-info-collection", "gpu-no-context-lost", "gpu-process", "gpu-program-cache-size-kb", "gpu-rasterization-msaa-sample-count", "gpu-sandbox-allow-sysv-shm", "gpu-sandbox-failures-fatal", "gpu-sandbox-start-early", "gpu-secondary-device-ids", "gpu-secondary-vendor-ids", "gpu-startup-dialog", "gpu-testing-device-id", "gpu-testing-driver-date", "gpu-testing-gl-renderer", "gpu-testing-gl-vendor", "gpu-testing-gl-version", "gpu-testing-os-version", "gpu-testing-secondary-device-ids", "gpu-testing-secondary-vendor-ids", "gpu-testing-vendor-id", "gpu-vendor-id", "graphics-buffer-count", "guest-wallpaper-large", "guest-wallpaper-small", "h", "has-chromeos-diamond-key", "has-chromeos-keyboard", "has-internal-stylus", "headless", "help", "hide", "hide-icons", "hide-scrollbars", "history-entry-requires-user-gesture", "homedir", "homepage", "host", "host-pairing-oobe", "host-resolver-rules", "icu-data-dir", "ignore-autocomplete-off-autofill", "ignore-autoplay-restrictions", "ignore-certificate-errors", "ignore-certificate-errors-spki-list", "ignore-gpu-blacklist", "ignore-urlfetcher-cert-requests", "ignore-user-profile-mapping-for-tests", "in-process-gpu", "incognito", "input", "inspect", "inspect-brk", "install-chrome-app", "install-supervised-user-whitelists", "instant-process", "invalidation-use-gcm-channel", "ipc-connection-timeout", "ipc-dump-directory", "ipc-fuzzer-testcase", "is-running-in-mash", "isolate-origins", "isolate-sites-for-testing", "javascript-harmony", "js-flags", "keep-alive-for-test", "kiosk", "kiosk-printing", "lang", "last-launched-app", "layer", "light_muted", "light_vibrant", "limit-fps", "load-and-launch-app", "load-apps", "load-extension", "load-media-router-component-extension", "local-heuristics-only-for-password-generation", "local-ntp-reload", "local-sync-backend-dir", "log-gpu-control-list-decisions", "log-level", "log-net-log", "login-manager", "login-profile", "login-user", "loopback-i2s-bits", "loopback-i2s-bus-name", "loopback-i2s-channels", "loopback-i2s-rate-hz", "lso-url", "ltr", "main-frame-resizes-are-orientation-changes", "make-chrome-default", "make-default-browser", "managed-user-id", "managed-user-sync-token", "mark-non-secure-as", "markdown", "market-url-for-testing", "mash", "material", "material-design-ink-drop-animation-speed", "material-hybrid", "max-gum-fps", "max-output-volume-dba1m", "max-untiled-layer-height", "max-untiled-layer-width", "media-cache-size", "mem-pressure-system-reserved-kb", "memlog", "memory-pressure-off", "memory-pressure-thresholds", "memory-pressure-thresholds-mb", "message-center-changes-while-open", "method", "metrics-client-id", "metrics-recording-only", "mhtml-generator-option", "mirror", "mock", "mojo-local-storage", "mojo-pipe-token", "monitoring-destination-id", "mse-audio-buffer-size-limit", "mse-video-buffer-size-limit", "mus", "mus-config", "mute-audio", "nacl-broker", "nacl-dangerous-no-sandbox-nonsfi", "nacl-debug-mask", "nacl-gdb", "nacl-gdb-script", "nacl-loader", "nacl-loader-nonsfi", "native", "native-crx-bindings", "need-arc-migration-policy-check", "net-log-capture-mode", "netifs-to-ignore", "network-country-iso", "network-settings-config", "new-window", "no-default-browser-check", "no-experiments", "no-first-run", "no-managed-user-acknowledgment-check", "no-network-profile-warning", "no-pings", "no-proxy-server", "no-referrers", "no-sandbox", "no-service-autorun", "no-session-id", "no-startup-window", "no-user-gesture-required", "no-wifi", "no-zygote", "nocolor", "noerrdialogs", "non-material", "non-secure", "non-secure-after-editing", "non-secure-while-incognito", "non-secure-while-incognito-or-editing", "none", "normal_muted", "normal_vibrant", "note-taking-app-ids", "ntp-snippets-add-incomplete", "null", "num-raster-threads", "oauth2-client-id", "oauth2-client-secret", "off", "on", "oobe-bootstrapping-master", "oobe-force-show-screen", "oobe-guest-session", "oobe-skip-postlogin", "oobe-timer-interval", "open-ash", "opengraph", "origin-trial-disabled-features", "origin-trial-disabled-tokens", "origin-trial-public-key", "original-process-start-time", "osmesa", "output", "override", "override-metrics-upload-url", "override-plugin-power-saver-for-testing", "override-use-software-gl-for-tests", "overscroll-history-navigation", "overscroll-start-threshold", "ozone-dump-file", "ozone-platform", "pack-extension", "pack-extension-key", "parent-profile", "parent-window", "passive-listeners-default", "password-store", "permission-request-api-scope", "permission-request-api-url", "ppapi", "ppapi-antialiased-text-enabled", "ppapi-broker", "ppapi-flash-args", "ppapi-flash-path", "ppapi-flash-version", "ppapi-in-process", "ppapi-plugin-launcher", "ppapi-startup-dialog", "ppapi-subpixel-rendering-setting", "previous-app", "primary", "print-to-pdf", "privet-ipv6-only", "process-per-site", "process-per-tab", "product-version", "profile-directory", "profiler-timing", "profiling-at-start", "profiling-file", "profiling-flush", "progress-bar-animation", "progress-bar-completion", "prompt-for-external-extensions", "proxy-auto-detect", "proxy-bypass-list", "proxy-pac-url", "proxy-server", "pull-to-refresh", "q", "rdp_desktop_session", "reader-mode-feedback", "reader-mode-heuristics", "rebaseline-pixel-tests", "record-type", "reduce-security-for-testing", "reduced-referrer-granularity", "register-font-files", "register-pepper-plugins", "relauncher", "remote-debugging-address", "remote-debugging-port", "remote-debugging-socket-fd", "remote-debugging-socket-name", "remote-debugging-targets", "renderer", "renderer-client-id", "renderer-cmd-prefix", "renderer-process-limit", "renderer-startup-dialog", "renderer-wait-for-java-debugger", "renderpass", "repl", "report-vp9-as-an-unsupported-mime-type", "require-audio-hardware-for-testing", "reset-app-list-install-state", "reset-variation-state", "restore-last-session", "root", "root-layer-scrolls", "rtl", "run-all-compositor-stages-before-draw", "run-layout-test", "runtime-deps-list-file", "safebrowsing-disable-auto-update", "safebrowsing-disable-download-protection", "safebrowsing-disable-extension-blacklist", "safebrowsing-manual-download-blacklist", "sandbox-ipc", "save-page-as-mhtml", "screen-config", "screenshot", "script-executable", "scripts-require-action", "search-provider-logo-url", "secondary", "secondary-display-layout", "secondary-ui-md", "service", "service-manager", "service-name", "service-pipe-token", "service-request-channel-token", "service-runner", "shared-files", "shill-stub", "show-app-list", "show-autofill-signatures", "show-autofill-type-predictions", "show-cert-link", "show-component-extension-options", "show-composited-layer-borders", "show-fps-counter", "show-icons", "show-layer-animation-bounds", "show-login-dev-overlay", "show-mac-overlay-borders", "show-md-login", "show-non-md-login", "show-overdraw-feedback", "show-paint-rects", "show-property-changed-rects", "show-saved-copy", "show-screenspace-rects", "show-surface-damage-rects", "silent-debugger-extension-api", "silent-launch", "simulate-critical-update", "simulate-elevated-recovery", "simulate-outdated", "simulate-outdated-no-au", "simulate-upgrade", "single-process", "site-per-process", "skip-gpu-data-loading", "skip-nostore-all", "skip-nostore-main", "skip-reencoding-on-skp-capture", "slow", "slow-connections-only", "slow-down-compositing-scale-factor", "slow-down-raster-scale-factor", "sms-test-messages", "spdy-proxy-auth-fallback", "spdy-proxy-auth-origin", "spdy-proxy-auth-value", "spelling-service-feedback-interval-seconds", "spelling-service-feedback-url", "spurious-power-button-accel-count", "spurious-power-button-keyboard-accel", "spurious-power-button-lid-angle-change", "spurious-power-button-screen-accel", "spurious-power-button-window", "ssl-key-log-file", "ssl-version-max", "ssl-version-min", "stable-release-mode", "start-fullscreen", "start-maximized", "start-stack-profiler", "started", "stub", "stub-cros-settings", "surface", "swiftshader", "swiftshader-webgl", "sync-allow-insecure-xmpp-connection", "sync-deferred-startup-timeout-seconds", "sync-disable-deferred-startup", "sync-enable-get-update-avoidance", "sync-notification-host-port", "sync-on-draw-hardware", "sync-short-initial-retry-override", "sync-short-nudge-delay-for-test", "sync-url", "system-developer-mode", "system-log-upload-frequency", "tab-management-experiment-type-disabled", "tab-management-experiment-type-elderberry", "task-manager-show-extra-renderers", "task-profiler", "team-drives", "test-auto-update-ui", "test-child-process", "test-cros-gaia-id-migration", "test-do-not-initialize-icu", "test-encryption-migration-ui", "test-gl-lib", "test-launcher-batch-limit", "test-launcher-bot-mode", "test-launcher-debug-launcher", "test-launcher-filter-file", "test-launcher-force-run-broken-tests", "test-launcher-jobs", "test-launcher-list-tests", "test-launcher-output", "test-launcher-print-test-stdio", "test-launcher-print-writable-path", "test-launcher-retry-limit", "test-launcher-shard-index", "test-launcher-summary-output", "test-launcher-test-part-results-limit", "test-launcher-timeout", "test-launcher-total-shards", "test-launcher-trace", "test-name", "test-tiny-timeout", "test-type", "testing-fixed-http-port", "testing-fixed-https-port", "tether-stub", "third-party-doodle-url", "threads", "time", "timeout", "tls1", "tls1.1", "tls1.2", "tls1.3", "tls13-variant", "top-chrome-md", "top-controls-hide-threshold", "top-controls-show-threshold", "touch-calibration", "touch-devices", "touch-events", "touch-noise-filtering", "touch-selection-strategy", "touch_view", "trace-config-file", "trace-export-events-to-etw", "trace-shutdown", "trace-shutdown-file", "trace-startup", "trace-startup-duration", "trace-startup-file", "trace-to-console", "trace-to-file", "trace-to-file-name", "trace-upload-url", "tracelog", "translate-ranker-model-url", "translate-script-url", "translate-security-origin", "true", "trusted-download-sources", "try-chrome-again", "try-supported-channel-layouts", "type", "ui-disable-partial-swap", "ui-enable-layer-lists", "ui-enable-rgba-4444-textures", "ui-enable-zero-copy", "ui-prioritize-in-gpu-process", "ui-show-composited-layer-borders", "ui-show-fps-counter", "ui-show-layer-animation-bounds", "ui-show-paint-rects", "ui-show-property-changed-rects", "ui-show-screenspace-rects", "ui-show-surface-damage-rects", "ui-slow-animations", "ui-test-action-max-timeout", "ui-test-action-timeout", "uninstall", "unlimited-storage", "unsafe-pac-url", "unsafely-allow-protected-media-identifier-for-domain", "unsafely-treat-insecure-origin-as-secure", "use-angle", "use-cras", "use-fake-device-for-media-stream", "use-fake-jpeg-decode-accelerator", "use-fake-ui-for-media-stream", "use-file-for-fake-audio-capture", "use-file-for-fake-video-capture", "use-first-display-as-internal", "use-gl", "use-gpu-in-tests", "use-ime-service", "use-mobile-user-agent", "use-mock-keychain", "use-passthrough-cmd-decoder", "use-skia-renderer", "use-system-default-printer", "use-test-config", "use-viz-hit-test", "user-agent", "user-always-affiliated", "user-data-dir", "user-gesture-required", "user-gesture-required-for-cross-origin", "utility", "utility-allowed-dir", "utility-cmd-prefix", "utility-run-elevated", "utility-sandbox-type", "utility-startup-dialog", "v", "v2-sandbox", "v2-sandbox-enabled", "v8-cache-options", "v8-cache-strategies-for-cache-storage", "validate-crx", "validate-input-event-stream", "variations-override-country", "variations-server-url", "version", "video-image-texture-target", "video-threads", "video-underflow-threshold-ms", "virtual-time-budget", "vmodule", "voice-interaction-supported-locales", "wait-for-debugger", "wait-for-debugger-children", "wake-on-wifi-packet", "wallet-service-use-sandbox", "watcher", "waveout-buffers", "webapk-server-url", "webrtc-stun-probe-trial", "webview-enable-safebrowsing-support", "webview-sandboxed-renderer", "whitelisted-extension-id", "win-jumplist-action", "window-position", "window-size", "window-workspace", "windows10-custom-titlebar", "winhttp-proxy-resolver", "wm-window-animations-disabled", "yield-between-content-script-runs", "zygote", "zygote-cmd-prefix", }; bool IsBlacklistedArg(const base::CommandLine::CharType* arg) { #if defined(OS_WIN) const auto converted = base::WideToUTF8(arg); const char* a = converted.c_str(); #else const char* a = arg; #endif static const char* prefixes[] = {"--", "-", "/"}; int prefix_length = 0; for (auto& prefix : prefixes) { if (base::StartsWith(a, prefix, base::CompareCase::SENSITIVE)) { prefix_length = strlen(prefix); break; } } if (prefix_length > 0) { a += prefix_length; std::string switch_name = base::ToLowerASCII(base::StringPiece(a, strcspn(a, "="))); return std::binary_search(std::begin(kBlacklist), std::end(kBlacklist), switch_name); } return false; } } // namespace namespace atom { bool CheckCommandLineArguments(int argc, base::CommandLine::CharType** argv) { DCHECK(std::is_sorted(std::begin(kBlacklist), std::end(kBlacklist), [](const char* a, const char* b) { return base::StringPiece(a) < base::StringPiece(b); })) << "The kBlacklist must be in sorted order"; DCHECK_NE(std::binary_search(std::begin(kBlacklist), std::end(kBlacklist), base::StringPiece("inspect")); << "Do not forget to add Node command line flags to kBlacklist"; const base::CommandLine::StringType dashdash(2, '-'); bool block_blacklisted_args = false; for (int i = 0; i < argc; ++i) { if (argv[i] == dashdash) break; if (block_blacklisted_args) { if (IsBlacklistedArg(argv[i])) return false; } else if (IsUrlArg(argv[i])) { block_blacklisted_args = true; } } return true; } } // namespace atom