| Index: net/proxy/proxy_config_service_linux.cc
 | 
| diff --git a/net/proxy/proxy_config_service_linux.cc b/net/proxy/proxy_config_service_linux.cc
 | 
| index a8b2b7ce4e426aae1606c926588c4720ccacdaee..c2ae1a8a3985911b6924a5593812a3f347143ea9 100644
 | 
| --- a/net/proxy/proxy_config_service_linux.cc
 | 
| +++ b/net/proxy/proxy_config_service_linux.cc
 | 
| @@ -27,10 +27,13 @@
 | 
|  #include "base/logging.h"
 | 
|  #include "base/macros.h"
 | 
|  #include "base/nix/xdg_util.h"
 | 
| +#include "base/sequenced_task_runner.h"
 | 
|  #include "base/single_thread_task_runner.h"
 | 
|  #include "base/strings/string_number_conversions.h"
 | 
|  #include "base/strings/string_tokenizer.h"
 | 
|  #include "base/strings/string_util.h"
 | 
| +#include "base/task_scheduler/post_task.h"
 | 
| +#include "base/task_scheduler/task_traits.h"
 | 
|  #include "base/threading/thread_restrictions.h"
 | 
|  #include "base/timer/timer.h"
 | 
|  #include "net/base/net_errors.h"
 | 
| @@ -220,7 +223,7 @@ class SettingGetterImplGConf : public ProxyConfigServiceLinux::SettingGetter {
 | 
|      // and pending tasks may then be deleted without being run.
 | 
|      if (client_) {
 | 
|        // gconf client was not cleaned up.
 | 
| -      if (task_runner_->BelongsToCurrentThread()) {
 | 
| +      if (task_runner_->RunsTasksInCurrentSequence()) {
 | 
|          // We are on the UI thread so we can clean it safely. This is
 | 
|          // the case at least for ui_tests running under Valgrind in
 | 
|          // bug 16076.
 | 
| @@ -238,10 +241,9 @@ class SettingGetterImplGConf : public ProxyConfigServiceLinux::SettingGetter {
 | 
|      DCHECK(!client_);
 | 
|    }
 | 
|  
 | 
| -  bool Init(const scoped_refptr<base::SingleThreadTaskRunner>& glib_task_runner,
 | 
| -            const scoped_refptr<base::SingleThreadTaskRunner>& file_task_runner)
 | 
| +  bool Init(const scoped_refptr<base::SingleThreadTaskRunner>& glib_task_runner)
 | 
|        override {
 | 
| -    DCHECK(glib_task_runner->BelongsToCurrentThread());
 | 
| +    DCHECK(glib_task_runner->RunsTasksInCurrentSequence());
 | 
|      DCHECK(!client_);
 | 
|      DCHECK(!task_runner_.get());
 | 
|      task_runner_ = glib_task_runner;
 | 
| @@ -281,7 +283,7 @@ class SettingGetterImplGConf : public ProxyConfigServiceLinux::SettingGetter {
 | 
|  
 | 
|    void ShutDown() override {
 | 
|      if (client_) {
 | 
| -      DCHECK(task_runner_->BelongsToCurrentThread());
 | 
| +      DCHECK(task_runner_->RunsTasksInCurrentSequence());
 | 
|        // We must explicitly disable gconf notifications here, because the gconf
 | 
|        // client will be shared between all setting getters, and they do not all
 | 
|        // have the same lifetimes. (For instance, incognito sessions get their
 | 
| @@ -300,7 +302,7 @@ class SettingGetterImplGConf : public ProxyConfigServiceLinux::SettingGetter {
 | 
|    bool SetUpNotifications(
 | 
|        ProxyConfigServiceLinux::Delegate* delegate) override {
 | 
|      DCHECK(client_);
 | 
| -    DCHECK(task_runner_->BelongsToCurrentThread());
 | 
| +    DCHECK(task_runner_->RunsTasksInCurrentSequence());
 | 
|      GError* error = nullptr;
 | 
|      notify_delegate_ = delegate;
 | 
|      // We have to keep track of the IDs returned by gconf_client_notify_add() so
 | 
| @@ -326,7 +328,7 @@ class SettingGetterImplGConf : public ProxyConfigServiceLinux::SettingGetter {
 | 
|      return false;
 | 
|    }
 | 
|  
 | 
| -  const scoped_refptr<base::SingleThreadTaskRunner>& GetNotificationTaskRunner()
 | 
| +  const scoped_refptr<base::SequencedTaskRunner>& GetNotificationTaskRunner()
 | 
|        override {
 | 
|      return task_runner_;
 | 
|    }
 | 
| @@ -395,7 +397,7 @@ class SettingGetterImplGConf : public ProxyConfigServiceLinux::SettingGetter {
 | 
|   private:
 | 
|    bool GetStringByPath(base::StringPiece key, std::string* result) {
 | 
|      DCHECK(client_);
 | 
| -    DCHECK(task_runner_->BelongsToCurrentThread());
 | 
| +    DCHECK(task_runner_->RunsTasksInCurrentSequence());
 | 
|      GError* error = nullptr;
 | 
|      gchar* value = gconf_client_get_string(client_, key.data(), &error);
 | 
|      if (HandleGError(error, key.data()))
 | 
| @@ -408,7 +410,7 @@ class SettingGetterImplGConf : public ProxyConfigServiceLinux::SettingGetter {
 | 
|    }
 | 
|    bool GetBoolByPath(base::StringPiece key, bool* result) {
 | 
|      DCHECK(client_);
 | 
| -    DCHECK(task_runner_->BelongsToCurrentThread());
 | 
| +    DCHECK(task_runner_->RunsTasksInCurrentSequence());
 | 
|      GError* error = nullptr;
 | 
|      // We want to distinguish unset values from values defaulting to
 | 
|      // false. For that we need to use the type-generic
 | 
| @@ -431,7 +433,7 @@ class SettingGetterImplGConf : public ProxyConfigServiceLinux::SettingGetter {
 | 
|    }
 | 
|    bool GetIntByPath(base::StringPiece key, int* result) {
 | 
|      DCHECK(client_);
 | 
| -    DCHECK(task_runner_->BelongsToCurrentThread());
 | 
| +    DCHECK(task_runner_->RunsTasksInCurrentSequence());
 | 
|      GError* error = nullptr;
 | 
|      int value = gconf_client_get_int(client_, key.data(), &error);
 | 
|      if (HandleGError(error, key.data()))
 | 
| @@ -444,7 +446,7 @@ class SettingGetterImplGConf : public ProxyConfigServiceLinux::SettingGetter {
 | 
|    bool GetStringListByPath(base::StringPiece key,
 | 
|                             std::vector<std::string>* result) {
 | 
|      DCHECK(client_);
 | 
| -    DCHECK(task_runner_->BelongsToCurrentThread());
 | 
| +    DCHECK(task_runner_->RunsTasksInCurrentSequence());
 | 
|      GError* error = nullptr;
 | 
|      GSList* list =
 | 
|          gconf_client_get_list(client_, key.data(), GCONF_VALUE_STRING, &error);
 | 
| @@ -474,7 +476,7 @@ class SettingGetterImplGConf : public ProxyConfigServiceLinux::SettingGetter {
 | 
|  
 | 
|    // This is the callback from the debounce timer.
 | 
|    void OnDebouncedNotification() {
 | 
| -    DCHECK(task_runner_->BelongsToCurrentThread());
 | 
| +    DCHECK(task_runner_->RunsTasksInCurrentSequence());
 | 
|      CHECK(notify_delegate_);
 | 
|      // Forward to a method on the proxy config service delegate object.
 | 
|      notify_delegate_->OnCheckProxyConfigSettings();
 | 
| @@ -512,7 +514,7 @@ class SettingGetterImplGConf : public ProxyConfigServiceLinux::SettingGetter {
 | 
|    // Task runner for the thread that we make gconf calls on. It should
 | 
|    // be the UI thread and all our methods should be called on this
 | 
|    // thread. Only for assertions.
 | 
| -  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
 | 
| +  scoped_refptr<base::SequencedTaskRunner> task_runner_;
 | 
|  
 | 
|    DISALLOW_COPY_AND_ASSIGN(SettingGetterImplGConf);
 | 
|  };
 | 
| @@ -543,7 +545,7 @@ class SettingGetterImplGSettings
 | 
|      // without being run.
 | 
|      if (client_) {
 | 
|        // gconf client was not cleaned up.
 | 
| -      if (task_runner_->BelongsToCurrentThread()) {
 | 
| +      if (task_runner_->RunsTasksInCurrentSequence()) {
 | 
|          // We are on the UI thread so we can clean it safely. This is
 | 
|          // the case at least for ui_tests running under Valgrind in
 | 
|          // bug 16076.
 | 
| @@ -570,10 +572,9 @@ class SettingGetterImplGSettings
 | 
|    // LoadAndCheckVersion() must be called *before* Init()!
 | 
|    bool LoadAndCheckVersion(base::Environment* env);
 | 
|  
 | 
| -  bool Init(const scoped_refptr<base::SingleThreadTaskRunner>& glib_task_runner,
 | 
| -            const scoped_refptr<base::SingleThreadTaskRunner>& file_task_runner)
 | 
| +  bool Init(const scoped_refptr<base::SingleThreadTaskRunner>& glib_task_runner)
 | 
|        override {
 | 
| -    DCHECK(glib_task_runner->BelongsToCurrentThread());
 | 
| +    DCHECK(glib_task_runner->RunsTasksInCurrentSequence());
 | 
|      DCHECK(!client_);
 | 
|      DCHECK(!task_runner_.get());
 | 
|  
 | 
| @@ -595,7 +596,7 @@ class SettingGetterImplGSettings
 | 
|  
 | 
|    void ShutDown() override {
 | 
|      if (client_) {
 | 
| -      DCHECK(task_runner_->BelongsToCurrentThread());
 | 
| +      DCHECK(task_runner_->RunsTasksInCurrentSequence());
 | 
|        // This also disables gsettings notifications.
 | 
|        g_object_unref(socks_client_);
 | 
|        g_object_unref(ftp_client_);
 | 
| @@ -612,7 +613,7 @@ class SettingGetterImplGSettings
 | 
|    bool SetUpNotifications(
 | 
|        ProxyConfigServiceLinux::Delegate* delegate) override {
 | 
|      DCHECK(client_);
 | 
| -    DCHECK(task_runner_->BelongsToCurrentThread());
 | 
| +    DCHECK(task_runner_->RunsTasksInCurrentSequence());
 | 
|      notify_delegate_ = delegate;
 | 
|      // We could watch for the change-event signal instead of changed, but
 | 
|      // since we have to watch more than one object, we'd still have to
 | 
| @@ -632,7 +633,7 @@ class SettingGetterImplGSettings
 | 
|      return true;
 | 
|    }
 | 
|  
 | 
| -  const scoped_refptr<base::SingleThreadTaskRunner>& GetNotificationTaskRunner()
 | 
| +  const scoped_refptr<base::SequencedTaskRunner>& GetNotificationTaskRunner()
 | 
|        override {
 | 
|      return task_runner_;
 | 
|    }
 | 
| @@ -712,7 +713,7 @@ class SettingGetterImplGSettings
 | 
|    bool GetStringByPath(GSettings* client,
 | 
|                         base::StringPiece key,
 | 
|                         std::string* result) {
 | 
| -    DCHECK(task_runner_->BelongsToCurrentThread());
 | 
| +    DCHECK(task_runner_->RunsTasksInCurrentSequence());
 | 
|      gchar* value = libgio_loader_.g_settings_get_string(client, key.data());
 | 
|      if (!value)
 | 
|        return false;
 | 
| @@ -721,20 +722,20 @@ class SettingGetterImplGSettings
 | 
|      return true;
 | 
|    }
 | 
|    bool GetBoolByPath(GSettings* client, base::StringPiece key, bool* result) {
 | 
| -    DCHECK(task_runner_->BelongsToCurrentThread());
 | 
| +    DCHECK(task_runner_->RunsTasksInCurrentSequence());
 | 
|      *result = static_cast<bool>(
 | 
|          libgio_loader_.g_settings_get_boolean(client, key.data()));
 | 
|      return true;
 | 
|    }
 | 
|    bool GetIntByPath(GSettings* client, base::StringPiece key, int* result) {
 | 
| -    DCHECK(task_runner_->BelongsToCurrentThread());
 | 
| +    DCHECK(task_runner_->RunsTasksInCurrentSequence());
 | 
|      *result = libgio_loader_.g_settings_get_int(client, key.data());
 | 
|      return true;
 | 
|    }
 | 
|    bool GetStringListByPath(GSettings* client,
 | 
|                             base::StringPiece key,
 | 
|                             std::vector<std::string>* result) {
 | 
| -    DCHECK(task_runner_->BelongsToCurrentThread());
 | 
| +    DCHECK(task_runner_->RunsTasksInCurrentSequence());
 | 
|      gchar** list = libgio_loader_.g_settings_get_strv(client, key.data());
 | 
|      if (!list)
 | 
|        return false;
 | 
| @@ -748,7 +749,7 @@ class SettingGetterImplGSettings
 | 
|  
 | 
|    // This is the callback from the debounce timer.
 | 
|    void OnDebouncedNotification() {
 | 
| -    DCHECK(task_runner_->BelongsToCurrentThread());
 | 
| +    DCHECK(task_runner_->RunsTasksInCurrentSequence());
 | 
|      CHECK(notify_delegate_);
 | 
|      // Forward to a method on the proxy config service delegate object.
 | 
|      notify_delegate_->OnCheckProxyConfigSettings();
 | 
| @@ -784,7 +785,7 @@ class SettingGetterImplGSettings
 | 
|    // Task runner for the thread that we make gsettings calls on. It should
 | 
|    // be the UI thread and all our methods should be called on this
 | 
|    // thread. Only for assertions.
 | 
| -  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
 | 
| +  scoped_refptr<base::SequencedTaskRunner> task_runner_;
 | 
|  
 | 
|    LibGioLoader libgio_loader_;
 | 
|  
 | 
| @@ -941,8 +942,7 @@ class SettingGetterImplKDE : public ProxyConfigServiceLinux::SettingGetter {
 | 
|      DCHECK_LT(inotify_fd_, 0);
 | 
|    }
 | 
|  
 | 
| -  bool Init(const scoped_refptr<base::SingleThreadTaskRunner>& glib_task_runner,
 | 
| -            const scoped_refptr<base::SingleThreadTaskRunner>& file_task_runner)
 | 
| +  bool Init(const scoped_refptr<base::SingleThreadTaskRunner>& glib_task_runner)
 | 
|        override {
 | 
|      // This has to be called on the UI thread (http://crbug.com/69057).
 | 
|      base::ThreadRestrictions::ScopedAllowIO allow_io;
 | 
| @@ -958,7 +958,11 @@ class SettingGetterImplKDE : public ProxyConfigServiceLinux::SettingGetter {
 | 
|        inotify_fd_ = -1;
 | 
|        return false;
 | 
|      }
 | 
| -    file_task_runner_ = file_task_runner;
 | 
| +
 | 
| +    constexpr base::TaskTraits kTraits = {base::TaskPriority::USER_VISIBLE,
 | 
| +                                          base::MayBlock()};
 | 
| +    file_task_runner_ = base::CreateSequencedTaskRunnerWithTraits(kTraits);
 | 
| +
 | 
|      // The initial read is done on the current thread, not
 | 
|      // |file_task_runner_|, since we will need to have it for
 | 
|      // SetUpAndFetchInitialConfig().
 | 
| @@ -979,7 +983,7 @@ class SettingGetterImplKDE : public ProxyConfigServiceLinux::SettingGetter {
 | 
|    bool SetUpNotifications(
 | 
|        ProxyConfigServiceLinux::Delegate* delegate) override {
 | 
|      DCHECK_GE(inotify_fd_, 0);
 | 
| -    DCHECK(file_task_runner_->BelongsToCurrentThread());
 | 
| +    DCHECK(file_task_runner_->RunsTasksInCurrentSequence());
 | 
|      // We can't just watch the kioslaverc file directly, since KDE will write
 | 
|      // a new copy of it and then rename it whenever settings are changed and
 | 
|      // inotify watches inodes (so we'll be watching the old deleted file after
 | 
| @@ -999,7 +1003,7 @@ class SettingGetterImplKDE : public ProxyConfigServiceLinux::SettingGetter {
 | 
|      return true;
 | 
|    }
 | 
|  
 | 
| -  const scoped_refptr<base::SingleThreadTaskRunner>& GetNotificationTaskRunner()
 | 
| +  const scoped_refptr<base::SequencedTaskRunner>& GetNotificationTaskRunner()
 | 
|        override {
 | 
|      return file_task_runner_;
 | 
|    }
 | 
| @@ -1259,7 +1263,7 @@ class SettingGetterImplKDE : public ProxyConfigServiceLinux::SettingGetter {
 | 
|  
 | 
|    // This is the callback from the debounce timer.
 | 
|    void OnDebouncedNotification() {
 | 
| -    DCHECK(file_task_runner_->BelongsToCurrentThread());
 | 
| +    DCHECK(file_task_runner_->RunsTasksInCurrentSequence());
 | 
|      VLOG(1) << "inotify change notification for kioslaverc";
 | 
|      UpdateCachedSettings();
 | 
|      CHECK(notify_delegate_);
 | 
| @@ -1272,7 +1276,7 @@ class SettingGetterImplKDE : public ProxyConfigServiceLinux::SettingGetter {
 | 
|    // an event for kioslaverc is seen.
 | 
|    void OnChangeNotification() {
 | 
|      DCHECK_GE(inotify_fd_,  0);
 | 
| -    DCHECK(file_task_runner_->BelongsToCurrentThread());
 | 
| +    DCHECK(file_task_runner_->RunsTasksInCurrentSequence());
 | 
|      char event_buf[(sizeof(inotify_event) + NAME_MAX + 1) * 4];
 | 
|      bool kioslaverc_touched = false;
 | 
|      ssize_t r;
 | 
| @@ -1343,10 +1347,9 @@ class SettingGetterImplKDE : public ProxyConfigServiceLinux::SettingGetter {
 | 
|    string_map_type string_table_;
 | 
|    strings_map_type strings_table_;
 | 
|  
 | 
| -  // Task runner of the file thread, for reading kioslaverc. If NULL,
 | 
| -  // just read it directly (for testing). We also handle inotify events
 | 
| -  // on this thread.
 | 
| -  scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_;
 | 
| +  // Task runner for doing blocking file IO on, as well as handling inotify
 | 
| +  // events on.
 | 
| +  scoped_refptr<base::SequencedTaskRunner> file_task_runner_;
 | 
|  
 | 
|    DISALLOW_COPY_AND_ASSIGN(SettingGetterImplKDE);
 | 
|  };
 | 
| @@ -1567,18 +1570,17 @@ ProxyConfigServiceLinux::Delegate::Delegate(
 | 
|  
 | 
|  void ProxyConfigServiceLinux::Delegate::SetUpAndFetchInitialConfig(
 | 
|      const scoped_refptr<base::SingleThreadTaskRunner>& glib_task_runner,
 | 
| -    const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner,
 | 
| -    const scoped_refptr<base::SingleThreadTaskRunner>& file_task_runner) {
 | 
| +    const scoped_refptr<base::SingleThreadTaskRunner>& io_task_runner) {
 | 
|    // We should be running on the default glib main loop thread right
 | 
|    // now. gconf can only be accessed from this thread.
 | 
| -  DCHECK(glib_task_runner->BelongsToCurrentThread());
 | 
| +  DCHECK(glib_task_runner->RunsTasksInCurrentSequence());
 | 
|    glib_task_runner_ = glib_task_runner;
 | 
|    io_task_runner_ = io_task_runner;
 | 
|  
 | 
| -  // If we are passed a NULL |io_task_runner| or |file_task_runner|, then we
 | 
| -  // don't set up proxy setting change notifications. This should not be the
 | 
| -  // usual case but is intended to/ simplify test setups.
 | 
| -  if (!io_task_runner_.get() || !file_task_runner.get())
 | 
| +  // If we are passed a NULL |io_task_runner|, then don't set up proxy
 | 
| +  // setting change notifications. This should not be the usual case but is
 | 
| +  // intended to/ simplify test setups.
 | 
| +  if (!io_task_runner_.get())
 | 
|      VLOG(1) << "Monitoring of proxy setting changes is disabled";
 | 
|  
 | 
|    // Fetch and cache the current proxy config. The config is left in
 | 
| @@ -1594,8 +1596,7 @@ void ProxyConfigServiceLinux::Delegate::SetUpAndFetchInitialConfig(
 | 
|    // mislead us.
 | 
|  
 | 
|    bool got_config = false;
 | 
| -  if (setting_getter_ &&
 | 
| -      setting_getter_->Init(glib_task_runner, file_task_runner) &&
 | 
| +  if (setting_getter_ && setting_getter_->Init(glib_task_runner) &&
 | 
|        GetConfigFromSettings(&cached_config_)) {
 | 
|      cached_config_.set_id(1);  // Mark it as valid.
 | 
|      cached_config_.set_source(setting_getter_->GetConfigSource());
 | 
| @@ -1620,10 +1621,10 @@ void ProxyConfigServiceLinux::Delegate::SetUpAndFetchInitialConfig(
 | 
|      // that we won't lose any updates that may have happened after the initial
 | 
|      // fetch and before setting up notifications. We'll detect the common case
 | 
|      // of no changes in OnCheckProxyConfigSettings() (or sooner) and ignore it.
 | 
| -    if (io_task_runner.get() && file_task_runner.get()) {
 | 
| -      scoped_refptr<base::SingleThreadTaskRunner> required_loop =
 | 
| +    if (io_task_runner.get()) {
 | 
| +      scoped_refptr<base::SequencedTaskRunner> required_loop =
 | 
|            setting_getter_->GetNotificationTaskRunner();
 | 
| -      if (!required_loop.get() || required_loop->BelongsToCurrentThread()) {
 | 
| +      if (!required_loop.get() || required_loop->RunsTasksInCurrentSequence()) {
 | 
|          // In this case we are already on an acceptable thread.
 | 
|          SetUpNotifications();
 | 
|        } else {
 | 
| @@ -1650,9 +1651,9 @@ void ProxyConfigServiceLinux::Delegate::SetUpAndFetchInitialConfig(
 | 
|  // Depending on the SettingGetter in use, this method will be called
 | 
|  // on either the UI thread (GConf) or the file thread (KDE).
 | 
|  void ProxyConfigServiceLinux::Delegate::SetUpNotifications() {
 | 
| -  scoped_refptr<base::SingleThreadTaskRunner> required_loop =
 | 
| +  scoped_refptr<base::SequencedTaskRunner> required_loop =
 | 
|        setting_getter_->GetNotificationTaskRunner();
 | 
| -  DCHECK(!required_loop.get() || required_loop->BelongsToCurrentThread());
 | 
| +  DCHECK(!required_loop.get() || required_loop->RunsTasksInCurrentSequence());
 | 
|    if (!setting_getter_->SetUpNotifications(this))
 | 
|      LOG(ERROR) << "Unable to set up proxy configuration change notifications";
 | 
|  }
 | 
| @@ -1670,7 +1671,7 @@ ProxyConfigService::ConfigAvailability
 | 
|          ProxyConfig* config) {
 | 
|    // This is called from the IO thread.
 | 
|    DCHECK(!io_task_runner_.get() ||
 | 
| -         io_task_runner_->BelongsToCurrentThread());
 | 
| +         io_task_runner_->RunsTasksInCurrentSequence());
 | 
|  
 | 
|    // Simply return the last proxy configuration that glib_default_loop
 | 
|    // notified us of.
 | 
| @@ -1692,9 +1693,9 @@ ProxyConfigService::ConfigAvailability
 | 
|  // Depending on the SettingGetter in use, this method will be called
 | 
|  // on either the UI thread (GConf) or the file thread (KDE).
 | 
|  void ProxyConfigServiceLinux::Delegate::OnCheckProxyConfigSettings() {
 | 
| -  scoped_refptr<base::SingleThreadTaskRunner> required_loop =
 | 
| +  scoped_refptr<base::SequencedTaskRunner> required_loop =
 | 
|        setting_getter_->GetNotificationTaskRunner();
 | 
| -  DCHECK(!required_loop.get() || required_loop->BelongsToCurrentThread());
 | 
| +  DCHECK(!required_loop.get() || required_loop->RunsTasksInCurrentSequence());
 | 
|    ProxyConfig new_config;
 | 
|    bool valid = GetConfigFromSettings(&new_config);
 | 
|    if (valid)
 | 
| @@ -1717,7 +1718,7 @@ void ProxyConfigServiceLinux::Delegate::OnCheckProxyConfigSettings() {
 | 
|  
 | 
|  void ProxyConfigServiceLinux::Delegate::SetNewProxyConfig(
 | 
|      const ProxyConfig& new_config) {
 | 
| -  DCHECK(io_task_runner_->BelongsToCurrentThread());
 | 
| +  DCHECK(io_task_runner_->RunsTasksInCurrentSequence());
 | 
|    VLOG(1) << "Proxy configuration changed";
 | 
|    cached_config_ = new_config;
 | 
|    for (auto& observer : observers_)
 | 
| @@ -1728,9 +1729,9 @@ void ProxyConfigServiceLinux::Delegate::PostDestroyTask() {
 | 
|    if (!setting_getter_)
 | 
|      return;
 | 
|  
 | 
| -  scoped_refptr<base::SingleThreadTaskRunner> shutdown_loop =
 | 
| +  scoped_refptr<base::SequencedTaskRunner> shutdown_loop =
 | 
|        setting_getter_->GetNotificationTaskRunner();
 | 
| -  if (!shutdown_loop.get() || shutdown_loop->BelongsToCurrentThread()) {
 | 
| +  if (!shutdown_loop.get() || shutdown_loop->RunsTasksInCurrentSequence()) {
 | 
|      // Already on the right thread, call directly.
 | 
|      // This is the case for the unittests.
 | 
|      OnDestroy();
 | 
| @@ -1742,9 +1743,9 @@ void ProxyConfigServiceLinux::Delegate::PostDestroyTask() {
 | 
|    }
 | 
|  }
 | 
|  void ProxyConfigServiceLinux::Delegate::OnDestroy() {
 | 
| -  scoped_refptr<base::SingleThreadTaskRunner> shutdown_loop =
 | 
| +  scoped_refptr<base::SequencedTaskRunner> shutdown_loop =
 | 
|        setting_getter_->GetNotificationTaskRunner();
 | 
| -  DCHECK(!shutdown_loop.get() || shutdown_loop->BelongsToCurrentThread());
 | 
| +  DCHECK(!shutdown_loop.get() || shutdown_loop->RunsTasksInCurrentSequence());
 | 
|    setting_getter_->ShutDown();
 | 
|  }
 | 
|  
 | 
| 
 |