| // Copyright 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 "chrome/browser/ssl/secure_origin_prefs_observer.h" |
| |
| #include <string> |
| |
| #include "base/bind.h" |
| #include "base/bind_helpers.h" |
| #include "chrome/common/pref_names.h" |
| #include "components/prefs/pref_service.h" |
| #include "services/network/public/cpp/is_potentially_trustworthy.h" |
| |
| SecureOriginPrefsObserver::SecureOriginPrefsObserver( |
| PrefService* pref_service) { |
| pref_change_registrar_.Init(pref_service); |
| |
| // Start listening for pref change notifications. |
| // |
| // base::Unretained is okay below, because |pref_change_registrar_|'s lifetime |
| // is owned by (and shorter than) |this|. |
| pref_change_registrar_.Add( |
| prefs::kUnsafelyTreatInsecureOriginAsSecure, |
| base::BindRepeating( |
| &SecureOriginPrefsObserver::OnChangeInSecureOriginPref, |
| base::Unretained(this))); |
| |
| // Make sure that not only *future* changes of prefs are applied, but that |
| // also the *current* state of prefs is applied. |
| OnChangeInSecureOriginPref(); |
| } |
| |
| void SecureOriginPrefsObserver::OnChangeInSecureOriginPref() { |
| // Don't do anything if the policy was removed or shouldn't apply. |
| std::string pref_value; |
| if (pref_change_registrar_.prefs()->HasPrefPath( |
| prefs::kUnsafelyTreatInsecureOriginAsSecure)) { |
| pref_value = pref_change_registrar_.prefs()->GetString( |
| prefs::kUnsafelyTreatInsecureOriginAsSecure); |
| } |
| |
| network::SecureOriginAllowlist::GetInstance().SetAuxiliaryAllowlist( |
| pref_value); |
| } |