summaryrefslogtreecommitdiff
path: root/chromium/net/proxy_resolution
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2018-06-05 17:27:05 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2018-06-18 08:33:46 +0000
commit9f4560b1027ae06fdb497023cdcaf91b8511fa74 (patch)
treef9789c1b2941956c5cc104cf03c6b6cc93759152 /chromium/net/proxy_resolution
parentd17ea114e5ef69ad5d5d7413280a13e6428098aa (diff)
downloadqtwebengine-chromium-9f4560b1027ae06fdb497023cdcaf91b8511fa74.tar.gz
BASELINE: Update Chromium to 67.0.3396.76
Change-Id: I9a14af4efb092ab203e9364f0779fca781909a38 Reviewed-by: Michal Klocek <michal.klocek@qt.io>
Diffstat (limited to 'chromium/net/proxy_resolution')
-rw-r--r--chromium/net/proxy_resolution/proxy_config_service_linux.cc44
-rw-r--r--chromium/net/proxy_resolution/proxy_config_service_linux.h16
-rw-r--r--chromium/net/proxy_resolution/proxy_config_service_linux_unittest.cc14
3 files changed, 42 insertions, 32 deletions
diff --git a/chromium/net/proxy_resolution/proxy_config_service_linux.cc b/chromium/net/proxy_resolution/proxy_config_service_linux.cc
index 90ed262b768..69890cf3a96 100644
--- a/chromium/net/proxy_resolution/proxy_config_service_linux.cc
+++ b/chromium/net/proxy_resolution/proxy_config_service_linux.cc
@@ -19,6 +19,7 @@
#include "base/files/scoped_file.h"
#include "base/logging.h"
#include "base/macros.h"
+#include "base/memory/ptr_util.h"
#include "base/nix/xdg_util.h"
#include "base/sequenced_task_runner.h"
#include "base/single_thread_task_runner.h"
@@ -1161,18 +1162,23 @@ ProxyConfigServiceLinux::Delegate::GetConfigFromSettings() {
return ProxyConfigWithAnnotation(
config, NetworkTrafficAnnotationTag(traffic_annotation_));
- ;
}
-ProxyConfigServiceLinux::Delegate::Delegate()
- : env_var_getter_(base::Environment::Create()) {}
-
ProxyConfigServiceLinux::Delegate::Delegate(
std::unique_ptr<base::Environment> env_var_getter,
- const NetworkTrafficAnnotationTag& traffic_annotation)
- : env_var_getter_(std::move(env_var_getter)),
- traffic_annotation_(
- MutableNetworkTrafficAnnotationTag(traffic_annotation)) {
+ base::Optional<std::unique_ptr<SettingGetter>> setting_getter,
+ base::Optional<NetworkTrafficAnnotationTag> traffic_annotation)
+ : env_var_getter_(std::move(env_var_getter)) {
+ if (traffic_annotation) {
+ traffic_annotation_ =
+ MutableNetworkTrafficAnnotationTag(traffic_annotation.value());
+ }
+
+ if (setting_getter) {
+ setting_getter_ = std::move(setting_getter.value());
+ return;
+ }
+
// Figure out which SettingGetterImpl to use, if any.
switch (base::nix::GetDesktopEnvironment(env_var_getter_.get())) {
case base::nix::DESKTOP_ENVIRONMENT_CINNAMON:
@@ -1201,15 +1207,6 @@ ProxyConfigServiceLinux::Delegate::Delegate(
}
}
-ProxyConfigServiceLinux::Delegate::Delegate(
- std::unique_ptr<base::Environment> env_var_getter,
- SettingGetter* setting_getter,
- const NetworkTrafficAnnotationTag& traffic_annotation)
- : env_var_getter_(std::move(env_var_getter)),
- setting_getter_(setting_getter),
- traffic_annotation_(
- MutableNetworkTrafficAnnotationTag(traffic_annotation)) {}
-
void ProxyConfigServiceLinux::Delegate::SetUpAndFetchInitialConfig(
const scoped_refptr<base::SingleThreadTaskRunner>& glib_task_runner,
const scoped_refptr<base::SequencedTaskRunner>& main_task_runner,
@@ -1339,7 +1336,8 @@ void ProxyConfigServiceLinux::Delegate::OnCheckProxyConfigSettings() {
// See if it is different from what we had before.
if (new_config.has_value() != reference_config_.has_value() ||
- !new_config->value().Equals(reference_config_->value())) {
+ (new_config.has_value() &&
+ !new_config->value().Equals(reference_config_->value()))) {
// Post a task to the main TaskRunner with the new configuration, so it can
// update |cached_config_|.
main_task_runner_->PostTask(
@@ -1389,7 +1387,9 @@ void ProxyConfigServiceLinux::Delegate::OnDestroy() {
}
ProxyConfigServiceLinux::ProxyConfigServiceLinux()
- : delegate_(new Delegate()) {}
+ : delegate_(new Delegate(base::Environment::Create(),
+ base::nullopt,
+ base::nullopt)) {}
ProxyConfigServiceLinux::~ProxyConfigServiceLinux() {
delegate_->PostDestroyTask();
@@ -1398,14 +1398,16 @@ ProxyConfigServiceLinux::~ProxyConfigServiceLinux() {
ProxyConfigServiceLinux::ProxyConfigServiceLinux(
std::unique_ptr<base::Environment> env_var_getter,
const NetworkTrafficAnnotationTag& traffic_annotation)
- : delegate_(new Delegate(std::move(env_var_getter), traffic_annotation)) {}
+ : delegate_(new Delegate(std::move(env_var_getter),
+ base::nullopt,
+ traffic_annotation)) {}
ProxyConfigServiceLinux::ProxyConfigServiceLinux(
std::unique_ptr<base::Environment> env_var_getter,
SettingGetter* setting_getter,
const NetworkTrafficAnnotationTag& traffic_annotation)
: delegate_(new Delegate(std::move(env_var_getter),
- setting_getter,
+ base::WrapUnique(setting_getter),
traffic_annotation)) {}
void ProxyConfigServiceLinux::AddObserver(Observer* observer) {
diff --git a/chromium/net/proxy_resolution/proxy_config_service_linux.h b/chromium/net/proxy_resolution/proxy_config_service_linux.h
index c853d1a4f6d..7abf2b167d1 100644
--- a/chromium/net/proxy_resolution/proxy_config_service_linux.h
+++ b/chromium/net/proxy_resolution/proxy_config_service_linux.h
@@ -167,17 +167,11 @@ class NET_EXPORT_PRIVATE ProxyConfigServiceLinux : public ProxyConfigService {
class Delegate : public base::RefCountedThreadSafe<Delegate> {
public:
- // Sets the |env_var_getter| to empty.
- Delegate();
-
- // Normal constructor.
- explicit Delegate(std::unique_ptr<base::Environment> env_var_getter,
- const NetworkTrafficAnnotationTag& traffic_annotation);
-
- // Constructor for testing.
+ // Test code can set |setting_getter| and |traffic_annotation|. If left
+ // unspecified, reasonable defaults will be used.
Delegate(std::unique_ptr<base::Environment> env_var_getter,
- SettingGetter* setting_getter,
- const NetworkTrafficAnnotationTag& traffic_annotation);
+ base::Optional<std::unique_ptr<SettingGetter>> setting_getter,
+ base::Optional<NetworkTrafficAnnotationTag> traffic_annotation);
// Synchronously obtains the proxy configuration. If gconf,
// gsettings, or kioslaverc are used, also enables notifications for
@@ -292,7 +286,7 @@ class NET_EXPORT_PRIVATE ProxyConfigServiceLinux : public ProxyConfigService {
const NetworkTrafficAnnotationTag& traffic_annotation);
ProxyConfigServiceLinux(
std::unique_ptr<base::Environment> env_var_getter,
- SettingGetter* setting_getter,
+ SettingGetter* setting_getter, // TODO(eroman): Use std::unique_ptr.
const NetworkTrafficAnnotationTag& traffic_annotation);
~ProxyConfigServiceLinux() override;
diff --git a/chromium/net/proxy_resolution/proxy_config_service_linux_unittest.cc b/chromium/net/proxy_resolution/proxy_config_service_linux_unittest.cc
index 14d06c8acb0..4772d071f6b 100644
--- a/chromium/net/proxy_resolution/proxy_config_service_linux_unittest.cc
+++ b/chromium/net/proxy_resolution/proxy_config_service_linux_unittest.cc
@@ -1120,6 +1120,20 @@ TEST_F(ProxyConfigServiceLinuxTest, GSettingsNotification) {
EXPECT_EQ(ProxyConfigService::CONFIG_VALID,
sync_config_getter.SyncGetLatestProxyConfig(&config));
EXPECT_TRUE(config.value().auto_detect());
+
+ // Simulate two settings changes, where PROXY_MODE is missing. This will make
+ // the settings be interpreted as DIRECT.
+ //
+ // Trigering the check a *second* time is a regression test for
+ // https://crbug.com/848237, where a comparison is done between two nullopts.
+ for (size_t i = 0; i < 2; ++i) {
+ setting_getter->values.mode = nullptr;
+ service->OnCheckProxyConfigSettings();
+ EXPECT_EQ(ProxyConfigService::CONFIG_VALID,
+ sync_config_getter.SyncGetLatestProxyConfig(&config));
+ EXPECT_FALSE(config.value().auto_detect());
+ EXPECT_TRUE(config.value().proxy_rules().empty());
+ }
}
TEST_F(ProxyConfigServiceLinuxTest, KDEConfigParser) {