blob: 1ac813b3882c51eed6b11f43c4296ec226260d1a [file] [log] [blame]
// 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 "base/syslog_logging.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);
}
std::vector<std::string> rejected_patterns;
network::SecureOriginAllowlist::GetInstance().SetAuxiliaryAllowlist(
pref_value, &rejected_patterns);
if (!rejected_patterns.empty()) {
SYSLOG(ERROR) << "The '" << prefs::kUnsafelyTreatInsecureOriginAsSecure
<< "' preference or policy contained invalid values "
<< "(they have been ignored): "
<< base::JoinString(rejected_patterns, ", ");
}
}