mirror of
https://github.com/Alex313031/thorium.git
synced 2025-01-10 03:47:44 -03:00
Add files via upload
This commit is contained in:
parent
b733494dae
commit
70d8a832f4
1 changed files with 259 additions and 0 deletions
259
src/chrome/browser/ui/startup/bad_flags_prompt.cc
Normal file
259
src/chrome/browser/ui/startup/bad_flags_prompt.cc
Normal file
|
@ -0,0 +1,259 @@
|
|||
// Copyright 2012 The Chromium Authors
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "chrome/browser/ui/startup/bad_flags_prompt.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
|
||||
#include "base/base_switches.h"
|
||||
#include "base/command_line.h"
|
||||
#include "base/feature_list.h"
|
||||
#include "base/files/file_path.h"
|
||||
#include "base/strings/utf_string_conversions.h"
|
||||
#include "base/trace_event/memory_dump_manager.h"
|
||||
#include "build/build_config.h"
|
||||
#include "build/chromeos_buildflags.h"
|
||||
#include "chrome/browser/infobars/simple_alert_infobar_creator.h"
|
||||
#include "chrome/browser/ui/simple_message_box.h"
|
||||
#include "chrome/browser/webauthn/webauthn_switches.h"
|
||||
#include "chrome/common/chrome_paths.h"
|
||||
#include "chrome/common/chrome_switches.h"
|
||||
#include "chrome/grit/chromium_strings.h"
|
||||
#include "chrome/grit/generated_resources.h"
|
||||
#include "components/autofill/core/common/autofill_switches.h"
|
||||
#include "components/history_clusters/core/file_clustering_backend.h"
|
||||
#include "components/infobars/content/content_infobar_manager.h"
|
||||
#include "components/infobars/core/infobar_delegate.h"
|
||||
#include "components/network_session_configurator/common/network_switches.h"
|
||||
#include "components/startup_metric_utils/browser/startup_metric_utils.h"
|
||||
#include "components/translate/core/common/translate_switches.h"
|
||||
#include "content/public/common/content_features.h"
|
||||
#include "content/public/common/content_switches.h"
|
||||
#include "extensions/common/switches.h"
|
||||
#include "google_apis/gaia/gaia_switches.h"
|
||||
#include "gpu/config/gpu_switches.h"
|
||||
#include "media/base/media_switches.h"
|
||||
#include "media/media_buildflags.h"
|
||||
#include "sandbox/policy/switches.h"
|
||||
#include "services/device/public/cpp/hid/hid_switches.h"
|
||||
#include "services/network/public/cpp/network_switches.h"
|
||||
#include "ui/base/l10n/l10n_util.h"
|
||||
#include "ui/base/resource/resource_bundle.h"
|
||||
#include "ui/base/resource/scoped_startup_resource_bundle.h"
|
||||
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
#include "chrome/browser/android/flags/bad_flags_snackbar_manager.h"
|
||||
#include "chrome/browser/flags/android/chrome_feature_list.h"
|
||||
#else
|
||||
#include "chrome/browser/ui/browser.h"
|
||||
#endif
|
||||
|
||||
namespace chrome {
|
||||
|
||||
namespace {
|
||||
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
// Dangerous command line flags for which to display a warning that "stability
|
||||
// and security will suffer".
|
||||
static const char* kBadFlags[] = {
|
||||
network::switches::kIgnoreCertificateErrorsSPKIList,
|
||||
// These flags disable sandbox-related security.
|
||||
sandbox::policy::switches::kDisableGpuSandbox,
|
||||
sandbox::policy::switches::kDisableSeccompFilterSandbox,
|
||||
sandbox::policy::switches::kDisableSetuidSandbox,
|
||||
sandbox::policy::switches::kNoSandbox,
|
||||
#if BUILDFLAG(IS_WIN)
|
||||
sandbox::policy::switches::kAllowThirdPartyModules,
|
||||
#endif
|
||||
switches::kDisableSiteIsolation,
|
||||
switches::kDisableWebSecurity,
|
||||
switches::kSingleProcess,
|
||||
|
||||
// These flags disable or undermine the Same Origin Policy.
|
||||
translate::switches::kTranslateSecurityOrigin,
|
||||
|
||||
// These flags undermine HTTPS / connection security.
|
||||
switches::kDisableWebRtcEncryption,
|
||||
switches::kIgnoreCertificateErrors,
|
||||
|
||||
// This flag could prevent QuotaChange events from firing or cause the event
|
||||
// to fire too often, potentially impacting web application behavior.
|
||||
switches::kQuotaChangeEventInterval,
|
||||
|
||||
// These flags change the URLs that handle PII.
|
||||
switches::kGaiaUrl,
|
||||
translate::switches::kTranslateScriptURL,
|
||||
|
||||
#if BUILDFLAG(ENABLE_EXTENSIONS)
|
||||
// This flag gives extensions more powers.
|
||||
extensions::switches::kExtensionsOnChromeURLs,
|
||||
#endif
|
||||
|
||||
// TODO(crbug.com/1052397): Revisit the macro expression once build flag switch
|
||||
// of lacros-chrome is complete.
|
||||
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS)
|
||||
// Speech dispatcher is buggy, it can crash and it can make Chrome freeze.
|
||||
// http://crbug.com/327295
|
||||
switches::kEnableSpeechDispatcher,
|
||||
#endif
|
||||
|
||||
#if BUILDFLAG(IS_MAC)
|
||||
// This flag is only used for performance tests in mac, to ensure that
|
||||
// calculated values are reliable. Should not be used elsewhere.
|
||||
switches::kUseHighGPUThreadPriorityForPerfTests,
|
||||
#endif
|
||||
|
||||
// These flags control Blink feature state, which is not supported and is
|
||||
// intended only for use by Chromium developers.
|
||||
switches::kDisableBlinkFeatures,
|
||||
switches::kEnableBlinkFeatures,
|
||||
|
||||
// This flag allows people to allowlist certain origins as secure, even
|
||||
// if they are not.
|
||||
network::switches::kUnsafelyTreatInsecureOriginAsSecure,
|
||||
|
||||
// This flag allows sites to access the camera and microphone without
|
||||
// getting the user's permission.
|
||||
switches::kUseFakeUIForMediaStream,
|
||||
|
||||
// This flag allows sites to access protected media identifiers without
|
||||
// getting the user's permission.
|
||||
switches::kUnsafelyAllowProtectedMediaIdentifierForDomain,
|
||||
|
||||
// This flag delays execution of base::TaskPriority::BEST_EFFORT tasks until
|
||||
// shutdown. The queue of base::TaskPriority::BEST_EFFORT tasks can increase
|
||||
// memory usage. Also, while it should be possible to use Chrome almost
|
||||
// normally with this flag, it is expected that some non-visible operations
|
||||
// such as writing user data to disk, cleaning caches, reporting metrics or
|
||||
// updating components won't be performed until shutdown.
|
||||
switches::kDisableBestEffortTasks,
|
||||
|
||||
// GPU sanboxing isn't implemented for the Web GPU API yet meaning it would
|
||||
// be possible to read GPU data for other Chromium processes.
|
||||
// switches::kEnableUnsafeWebGPU,
|
||||
|
||||
// A flag to support local file based WebBundle loading, only for testing
|
||||
// purpose.
|
||||
switches::kTrustableWebBundleFileUrl,
|
||||
|
||||
// A flag to bypass the WebHID blocklist for testing purposes.
|
||||
switches::kDisableHidBlocklist,
|
||||
|
||||
// This flag enables restricted APIs (which unlock capabilities
|
||||
// with a high potential for security / privacy abuse) for specified
|
||||
// origins.
|
||||
switches::kIsolatedAppOrigins,
|
||||
|
||||
// This flag tells Chrome to automatically install an Isolated Web App in
|
||||
// developer mode. The flag should contain the path to an unsigned Web
|
||||
// Bundle containing the IWA. Paths will be resolved relative to the
|
||||
// current working directory.
|
||||
switches::kInstallIsolatedWebAppFromFile,
|
||||
|
||||
// This flag tells Chrome to automatically install an Isolated Web App in
|
||||
// developer mode. The flag should contain an HTTP(S) URL that all of the
|
||||
// app's requests will be proxied to.
|
||||
switches::kInstallIsolatedWebAppFromUrl,
|
||||
|
||||
// Allows the specified origin to make Web Authentication API requests on
|
||||
// behalf of other origins, if a corresponding Google-internal
|
||||
// platform-level enterprise policy is also applied.
|
||||
webauthn::switches::kRemoteProxiedRequestsAllowedAdditionalOrigin,
|
||||
|
||||
// When a file is specified as part of this flag, this sideloads machine
|
||||
// learning model output used by the History Clusters service and should
|
||||
// only be used for testing purposes.
|
||||
history_clusters::switches::kClustersOverrideFile,
|
||||
};
|
||||
#endif // !BUILDFLAG(IS_ANDROID)
|
||||
|
||||
// Dangerous feature flags in about:flags for which to display a warning that
|
||||
// "stability and security will suffer".
|
||||
static const base::Feature* kBadFeatureFlagsInAboutFlags[] = {
|
||||
// This feature enables experimental support for isolated web apps, which
|
||||
// unlock capabilities with a high potential for security / privacy abuse.
|
||||
&features::kIsolatedWebApps,
|
||||
|
||||
&features::kWebBundlesFromNetwork,
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
&chrome::android::kCommandLineOnNonRooted,
|
||||
#endif
|
||||
};
|
||||
|
||||
void ShowBadFlagsInfoBarHelper(content::WebContents* web_contents,
|
||||
int message_id,
|
||||
base::StringPiece flag) {
|
||||
// Animating the infobar also animates the content area size which can trigger
|
||||
// a flood of page layout, compositing, texture reallocations, etc. Do not
|
||||
// animate the infobar to reduce noise in perf benchmarks because they pass
|
||||
// --ignore-certificate-errors-spki-list. This infobar only appears at
|
||||
// startup so the animation isn't visible to users anyway.
|
||||
CreateSimpleAlertInfoBar(
|
||||
infobars::ContentInfoBarManager::FromWebContents(web_contents),
|
||||
infobars::InfoBarDelegate::BAD_FLAGS_INFOBAR_DELEGATE, nullptr,
|
||||
l10n_util::GetStringFUTF16(message_id, base::UTF8ToUTF16(flag)),
|
||||
/*auto_expire=*/false, /*should_animate=*/false);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
void ShowBadFlagsPrompt(content::WebContents* web_contents) {
|
||||
// On Android, ShowBadFlagsPrompt doesn't show the warning notification
|
||||
// for flags which are not available in about:flags.
|
||||
#if !BUILDFLAG(IS_ANDROID)
|
||||
for (const char* flag : kBadFlags) {
|
||||
if (base::CommandLine::ForCurrentProcess()->HasSwitch(flag)) {
|
||||
ShowBadFlagsInfoBar(web_contents, IDS_BAD_FLAGS_WARNING_MESSAGE, flag);
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
for (const base::Feature* feature : kBadFeatureFlagsInAboutFlags) {
|
||||
if (base::FeatureList::IsEnabled(*feature)) {
|
||||
#if BUILDFLAG(IS_ANDROID)
|
||||
ShowBadFlagsSnackbar(web_contents, l10n_util::GetStringFUTF16(
|
||||
IDS_BAD_FEATURES_WARNING_MESSAGE,
|
||||
base::UTF8ToUTF16(feature->name)));
|
||||
#else
|
||||
ShowBadFlagsInfoBarHelper(web_contents, IDS_BAD_FEATURES_WARNING_MESSAGE,
|
||||
feature->name);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ShowBadFlagsInfoBar(content::WebContents* web_contents,
|
||||
int message_id,
|
||||
const char* flag) {
|
||||
std::string switch_value =
|
||||
base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(flag);
|
||||
if (!switch_value.empty())
|
||||
switch_value = "=" + switch_value;
|
||||
ShowBadFlagsInfoBarHelper(web_contents, message_id,
|
||||
std::string("--") + flag + switch_value);
|
||||
}
|
||||
|
||||
void MaybeShowInvalidUserDataDirWarningDialog() {
|
||||
const base::FilePath& user_data_dir = GetInvalidSpecifiedUserDataDir();
|
||||
if (user_data_dir.empty())
|
||||
return;
|
||||
|
||||
startup_metric_utils::SetNonBrowserUIDisplayed();
|
||||
|
||||
// Ensure there is an instance of ResourceBundle that is initialized for
|
||||
// localized string resource accesses.
|
||||
ui::ScopedStartupResourceBundle startup_resource_bundle;
|
||||
const std::u16string& title =
|
||||
l10n_util::GetStringUTF16(IDS_CANT_WRITE_USER_DIRECTORY_TITLE);
|
||||
const std::u16string& message = l10n_util::GetStringFUTF16(
|
||||
IDS_CANT_WRITE_USER_DIRECTORY_SUMMARY, user_data_dir.LossyDisplayName());
|
||||
|
||||
// More complex dialogs cannot be shown before the earliest calls here.
|
||||
ShowWarningMessageBox(nullptr, title, message);
|
||||
}
|
||||
|
||||
} // namespace chrome
|
Loading…
Reference in a new issue