Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(159)

Unified Diff: net/proxy/polling_proxy_config_service.cc

Issue 992733002: Remove //net (except for Android test stuff) and sdch (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/proxy/polling_proxy_config_service.h ('k') | net/proxy/proxy_bypass_rules.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/proxy/polling_proxy_config_service.cc
diff --git a/net/proxy/polling_proxy_config_service.cc b/net/proxy/polling_proxy_config_service.cc
deleted file mode 100644
index 7c086db3b89b7b82826e8cf48b79fa59e7650ad5..0000000000000000000000000000000000000000
--- a/net/proxy/polling_proxy_config_service.cc
+++ /dev/null
@@ -1,200 +0,0 @@
-// Copyright (c) 2012 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 "net/proxy/polling_proxy_config_service.h"
-
-#include "base/bind.h"
-#include "base/location.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/message_loop/message_loop_proxy.h"
-#include "base/observer_list.h"
-#include "base/profiler/scoped_tracker.h"
-#include "base/synchronization/lock.h"
-#include "base/threading/worker_pool.h"
-#include "net/proxy/proxy_config.h"
-
-namespace net {
-
-// Reference-counted wrapper that does all the work (needs to be
-// reference-counted since we post tasks between threads; may outlive
-// the parent PollingProxyConfigService).
-class PollingProxyConfigService::Core
- : public base::RefCountedThreadSafe<PollingProxyConfigService::Core> {
- public:
- Core(base::TimeDelta poll_interval,
- GetConfigFunction get_config_func)
- : get_config_func_(get_config_func),
- poll_interval_(poll_interval),
- have_initialized_origin_loop_(false),
- has_config_(false),
- poll_task_outstanding_(false),
- poll_task_queued_(false) {
- }
-
- // Called when the parent PollingProxyConfigService is destroyed
- // (observers should not be called past this point).
- void Orphan() {
- base::AutoLock l(lock_);
- origin_loop_proxy_ = NULL;
- }
-
- bool GetLatestProxyConfig(ProxyConfig* config) {
- LazyInitializeOriginLoop();
- DCHECK(origin_loop_proxy_->BelongsToCurrentThread());
-
- OnLazyPoll();
-
- // If we have already retrieved the proxy settings (on worker thread)
- // then return what we last saw.
- if (has_config_) {
- *config = last_config_;
- return true;
- }
- return false;
- }
-
- void AddObserver(Observer* observer) {
- LazyInitializeOriginLoop();
- DCHECK(origin_loop_proxy_->BelongsToCurrentThread());
- observers_.AddObserver(observer);
- }
-
- void RemoveObserver(Observer* observer) {
- DCHECK(origin_loop_proxy_->BelongsToCurrentThread());
- observers_.RemoveObserver(observer);
- }
-
- // Check for a new configuration if enough time has elapsed.
- void OnLazyPoll() {
- LazyInitializeOriginLoop();
- DCHECK(origin_loop_proxy_->BelongsToCurrentThread());
-
- if (last_poll_time_.is_null() ||
- (base::TimeTicks::Now() - last_poll_time_) > poll_interval_) {
- CheckForChangesNow();
- }
- }
-
- void CheckForChangesNow() {
- LazyInitializeOriginLoop();
- DCHECK(origin_loop_proxy_->BelongsToCurrentThread());
-
- if (poll_task_outstanding_) {
- // Only allow one task to be outstanding at a time. If we get a poll
- // request while we are busy, we will defer it until the current poll
- // completes.
- poll_task_queued_ = true;
- return;
- }
-
- last_poll_time_ = base::TimeTicks::Now();
- poll_task_outstanding_ = true;
- poll_task_queued_ = false;
- base::WorkerPool::PostTask(
- FROM_HERE,
- base::Bind(&Core::PollOnWorkerThread, this, get_config_func_),
- true);
- }
-
- private:
- friend class base::RefCountedThreadSafe<Core>;
- ~Core() {}
-
- void PollOnWorkerThread(GetConfigFunction func) {
- ProxyConfig config;
- func(&config);
-
- base::AutoLock l(lock_);
- if (origin_loop_proxy_.get()) {
- origin_loop_proxy_->PostTask(
- FROM_HERE, base::Bind(&Core::GetConfigCompleted, this, config));
- }
- }
-
- // Called after the worker thread has finished retrieving a configuration.
- void GetConfigCompleted(const ProxyConfig& config) {
- // TODO(pkasting): Remove ScopedTracker below once crbug.com/455942 is
- // fixed.
- tracked_objects::ScopedTracker tracking_profile(
- FROM_HERE_WITH_EXPLICIT_FUNCTION(
- "455942 PollingProxyConfigService::Core::GetConfigCompleted"));
- DCHECK(poll_task_outstanding_);
- poll_task_outstanding_ = false;
-
- if (!origin_loop_proxy_.get())
- return; // Was orphaned (parent has already been destroyed).
-
- DCHECK(origin_loop_proxy_->BelongsToCurrentThread());
-
- if (!has_config_ || !last_config_.Equals(config)) {
- // If the configuration has changed, notify the observers.
- has_config_ = true;
- last_config_ = config;
- FOR_EACH_OBSERVER(Observer, observers_,
- OnProxyConfigChanged(config,
- ProxyConfigService::CONFIG_VALID));
- }
-
- if (poll_task_queued_)
- CheckForChangesNow();
- }
-
- void LazyInitializeOriginLoop() {
- // TODO(eroman): Really this should be done in the constructor, but right
- // now chrome is constructing the ProxyConfigService on the
- // UI thread so we can't cache the IO thread for the purpose
- // of DCHECKs until the first call is made.
- if (!have_initialized_origin_loop_) {
- origin_loop_proxy_ = base::MessageLoopProxy::current();
- have_initialized_origin_loop_ = true;
- }
- }
-
- GetConfigFunction get_config_func_;
- ObserverList<Observer> observers_;
- ProxyConfig last_config_;
- base::TimeTicks last_poll_time_;
- base::TimeDelta poll_interval_;
-
- base::Lock lock_;
- scoped_refptr<base::MessageLoopProxy> origin_loop_proxy_;
-
- bool have_initialized_origin_loop_;
- bool has_config_;
- bool poll_task_outstanding_;
- bool poll_task_queued_;
-};
-
-void PollingProxyConfigService::AddObserver(Observer* observer) {
- core_->AddObserver(observer);
-}
-
-void PollingProxyConfigService::RemoveObserver(Observer* observer) {
- core_->RemoveObserver(observer);
-}
-
-ProxyConfigService::ConfigAvailability
- PollingProxyConfigService::GetLatestProxyConfig(ProxyConfig* config) {
- return core_->GetLatestProxyConfig(config) ? CONFIG_VALID : CONFIG_PENDING;
-}
-
-void PollingProxyConfigService::OnLazyPoll() {
- core_->OnLazyPoll();
-}
-
-PollingProxyConfigService::PollingProxyConfigService(
- base::TimeDelta poll_interval,
- GetConfigFunction get_config_func)
- : core_(new Core(poll_interval, get_config_func)) {
-}
-
-PollingProxyConfigService::~PollingProxyConfigService() {
- core_->Orphan();
-}
-
-void PollingProxyConfigService::CheckForChangesNow() {
- core_->CheckForChangesNow();
-}
-
-} // namespace net
« no previous file with comments | « net/proxy/polling_proxy_config_service.h ('k') | net/proxy/proxy_bypass_rules.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698