// Copyright 2015 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 "chromecast/net/connectivity_checker.h"

#include "base/single_thread_task_runner.h"
#include "chromecast/net/connectivity_checker_impl.h"

namespace chromecast {

ConnectivityChecker::ConnectivityChecker()
    : connectivity_observer_list_(
          new base::ObserverListThreadSafe<ConnectivityObserver>()) {
}

ConnectivityChecker::~ConnectivityChecker() {
}

void ConnectivityChecker::AddConnectivityObserver(
    ConnectivityObserver* observer) {
  connectivity_observer_list_->AddObserver(observer);
}

void ConnectivityChecker::RemoveConnectivityObserver(
    ConnectivityObserver* observer) {
  connectivity_observer_list_->RemoveObserver(observer);
}

void ConnectivityChecker::Notify(bool connected) {
  DCHECK(connectivity_observer_list_.get());
  connectivity_observer_list_->Notify(
      FROM_HERE, &ConnectivityObserver::OnConnectivityChanged, connected);
}

// static
scoped_refptr<ConnectivityChecker> ConnectivityChecker::Create(
    const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
    net::URLRequestContextGetter* url_request_context_getter) {
  return ConnectivityCheckerImpl::Create(task_runner,
                                         url_request_context_getter);
}

}  // namespace chromecast
