123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- // Copyright (c) 2019 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "android_webview/browser/aw_browser_process.h"
- #include "android_webview/browser/aw_browser_context.h"
- #include "android_webview/browser/aw_enterprise_authentication_app_link_manager.h"
- #include "android_webview/browser/component_updater/registration.h"
- #include "android_webview/browser/lifecycle/aw_contents_lifecycle_notifier.h"
- #include "android_webview/browser/metrics/visibility_metrics_logger.h"
- #include "android_webview/browser_jni_headers/AwBrowserProcess_jni.h"
- #include "android_webview/common/crash_reporter/crash_keys.h"
- #include "base/android/jni_array.h"
- #include "base/android/jni_string.h"
- #include "base/base_paths_posix.h"
- #include "base/path_service.h"
- #include "base/task/thread_pool.h"
- #include "components/component_updater/android/component_loader_policy.h"
- #include "components/crash/core/common/crash_key.h"
- #include "content/public/browser/browser_task_traits.h"
- #include "content/public/browser/browser_thread.h"
- #include "content/public/browser/process_visibility_util.h"
- using content::BrowserThread;
- namespace android_webview {
- namespace prefs {
- // String that specifies the Android account type to use for Negotiate
- // authentication.
- const char kAuthAndroidNegotiateAccountType[] =
- "auth.android_negotiate_account_type";
- // Allowlist containing servers for which Integrated Authentication is enabled.
- // This pref should match |prefs::kAuthServerAllowlist|.
- const char kAuthServerAllowlist[] = "auth.server_allowlist";
- // This pref contains a list of authentication urls, for which when webview is
- // navigated to any of these urls, browse intent will be sent.
- const char kEnterpriseAuthAppLinkPolicy[] = "enterprise_auth_app_link_policy";
- } // namespace prefs
- namespace {
- AwBrowserProcess* g_aw_browser_process = nullptr;
- } // namespace
- // static
- AwBrowserProcess* AwBrowserProcess::GetInstance() {
- return g_aw_browser_process;
- }
- AwBrowserProcess::AwBrowserProcess(
- AwFeatureListCreator* aw_feature_list_creator) {
- g_aw_browser_process = this;
- aw_feature_list_creator_ = aw_feature_list_creator;
- aw_contents_lifecycle_notifier_ =
- std::make_unique<AwContentsLifecycleNotifier>(base::BindRepeating(
- &AwBrowserProcess::OnLoseForeground, base::Unretained(this)));
- app_link_manager_ =
- absl::make_unique<EnterpriseAuthenticationAppLinkManager>(local_state());
- }
- AwBrowserProcess::~AwBrowserProcess() {
- g_aw_browser_process = nullptr;
- }
- void AwBrowserProcess::PreMainMessageLoopRun() {
- pref_change_registrar_.Init(local_state());
- auto auth_pref_callback = base::BindRepeating(
- &AwBrowserProcess::OnAuthPrefsChanged, base::Unretained(this));
- pref_change_registrar_.Add(prefs::kAuthServerAllowlist, auth_pref_callback);
- pref_change_registrar_.Add(prefs::kAuthAndroidNegotiateAccountType,
- auth_pref_callback);
- InitSafeBrowsing();
- }
- PrefService* AwBrowserProcess::local_state() {
- if (!local_state_)
- CreateLocalState();
- return local_state_.get();
- }
- void AwBrowserProcess::CreateLocalState() {
- DCHECK(!local_state_);
- local_state_ = aw_feature_list_creator_->TakePrefService();
- DCHECK(local_state_);
- }
- void AwBrowserProcess::OnLoseForeground() {
- if (local_state_)
- local_state_->CommitPendingWrite();
- }
- AwBrowserPolicyConnector* AwBrowserProcess::browser_policy_connector() {
- if (!browser_policy_connector_)
- CreateBrowserPolicyConnector();
- return browser_policy_connector_.get();
- }
- VisibilityMetricsLogger* AwBrowserProcess::visibility_metrics_logger() {
- if (!visibility_metrics_logger_) {
- visibility_metrics_logger_ = std::make_unique<VisibilityMetricsLogger>();
- visibility_metrics_logger_->SetOnVisibilityChangedCallback(
- base::BindRepeating([](bool visible) {
- content::OnBrowserVisibilityChanged(visible);
- }));
- }
- return visibility_metrics_logger_.get();
- }
- void AwBrowserProcess::CreateBrowserPolicyConnector() {
- DCHECK(!browser_policy_connector_);
- browser_policy_connector_ =
- aw_feature_list_creator_->TakeBrowserPolicyConnector();
- DCHECK(browser_policy_connector_);
- }
- void AwBrowserProcess::InitSafeBrowsing() {
- CreateSafeBrowsingUIManager();
- CreateSafeBrowsingAllowlistManager();
- }
- void AwBrowserProcess::CreateSafeBrowsingUIManager() {
- safe_browsing_ui_manager_ = new AwSafeBrowsingUIManager();
- }
- void AwBrowserProcess::CreateSafeBrowsingAllowlistManager() {
- scoped_refptr<base::SequencedTaskRunner> background_task_runner =
- base::ThreadPool::CreateSequencedTaskRunner(
- {base::MayBlock(), base::TaskPriority::BEST_EFFORT});
- scoped_refptr<base::SingleThreadTaskRunner> io_task_runner =
- content::GetIOThreadTaskRunner({});
- safe_browsing_allowlist_manager_ =
- std::make_unique<AwSafeBrowsingAllowlistManager>(background_task_runner,
- io_task_runner);
- }
- safe_browsing::RemoteSafeBrowsingDatabaseManager*
- AwBrowserProcess::GetSafeBrowsingDBManager() {
- DCHECK_CURRENTLY_ON(BrowserThread::IO);
- if (!safe_browsing_db_manager_) {
- safe_browsing_db_manager_ =
- new safe_browsing::RemoteSafeBrowsingDatabaseManager();
- }
- if (!safe_browsing_db_manager_started_) {
- // V4ProtocolConfig is not used. Just create one with empty values..
- safe_browsing::V4ProtocolConfig config("", false, "", "");
- safe_browsing_db_manager_->StartOnIOThread(
- GetSafeBrowsingUIManager()->GetURLLoaderFactoryOnIOThread(), config);
- safe_browsing_db_manager_started_ = true;
- }
- return safe_browsing_db_manager_.get();
- }
- safe_browsing::TriggerManager*
- AwBrowserProcess::GetSafeBrowsingTriggerManager() {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
- if (!safe_browsing_trigger_manager_) {
- safe_browsing_trigger_manager_ =
- std::make_unique<safe_browsing::TriggerManager>(
- GetSafeBrowsingUIManager(),
- /*local_state_prefs=*/nullptr);
- }
- return safe_browsing_trigger_manager_.get();
- }
- AwSafeBrowsingAllowlistManager*
- AwBrowserProcess::GetSafeBrowsingAllowlistManager() const {
- return safe_browsing_allowlist_manager_.get();
- }
- AwSafeBrowsingUIManager* AwBrowserProcess::GetSafeBrowsingUIManager() const {
- return safe_browsing_ui_manager_.get();
- }
- // static
- void AwBrowserProcess::RegisterNetworkContextLocalStatePrefs(
- PrefRegistrySimple* pref_registry) {
- pref_registry->RegisterStringPref(prefs::kAuthServerAllowlist, std::string());
- pref_registry->RegisterStringPref(prefs::kAuthAndroidNegotiateAccountType,
- std::string());
- }
- void AwBrowserProcess::RegisterEnterpriseAuthenticationAppLinkPolicyPref(
- PrefRegistrySimple* pref_registry) {
- pref_registry->RegisterListPref(prefs::kEnterpriseAuthAppLinkPolicy);
- }
- network::mojom::HttpAuthDynamicParamsPtr
- AwBrowserProcess::CreateHttpAuthDynamicParams() {
- network::mojom::HttpAuthDynamicParamsPtr auth_dynamic_params =
- network::mojom::HttpAuthDynamicParams::New();
- auth_dynamic_params->allowed_schemes = AwBrowserContext::GetAuthSchemes();
- auth_dynamic_params->server_allowlist =
- local_state()->GetString(prefs::kAuthServerAllowlist);
- auth_dynamic_params->android_negotiate_account_type =
- local_state()->GetString(prefs::kAuthAndroidNegotiateAccountType);
- auth_dynamic_params->ntlm_v2_enabled = true;
- return auth_dynamic_params;
- }
- void AwBrowserProcess::OnAuthPrefsChanged() {
- content::GetNetworkService()->ConfigureHttpAuthPrefs(
- CreateHttpAuthDynamicParams());
- }
- EnterpriseAuthenticationAppLinkManager*
- AwBrowserProcess::GetEnterpriseAuthenticationAppLinkManager() {
- return app_link_manager_.get();
- }
- // static
- void AwBrowserProcess::TriggerMinidumpUploading() {
- Java_AwBrowserProcess_triggerMinidumpUploading(
- base::android::AttachCurrentThread());
- }
- // static
- ApkType AwBrowserProcess::GetApkType() {
- return static_cast<ApkType>(
- Java_AwBrowserProcess_getApkType(base::android::AttachCurrentThread()));
- }
- static void JNI_AwBrowserProcess_SetProcessNameCrashKey(
- JNIEnv* env,
- const base::android::JavaParamRef<jstring>& processName) {
- static ::crash_reporter::CrashKeyString<64> crash_key(
- crash_keys::kAppProcessName);
- crash_key.Set(ConvertJavaStringToUTF8(env, processName));
- }
- static base::android::ScopedJavaLocalRef<jobjectArray>
- JNI_AwBrowserProcess_GetComponentLoaderPolicies(JNIEnv* env) {
- return component_updater::AndroidComponentLoaderPolicy::
- ToJavaArrayOfAndroidComponentLoaderPolicy(env,
- GetComponentLoaderPolicies());
- }
- } // namespace android_webview
|