diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-06-05 17:27:05 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-06-18 08:33:46 +0000 |
commit | 9f4560b1027ae06fdb497023cdcaf91b8511fa74 (patch) | |
tree | f9789c1b2941956c5cc104cf03c6b6cc93759152 /chromium/net/proxy_resolution | |
parent | d17ea114e5ef69ad5d5d7413280a13e6428098aa (diff) | |
download | qtwebengine-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')
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) { |