blob: b6444aa11967b808b92c74d7ee5b8bfd670872ce [file] [log] [blame]
// Copyright 2014 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 "network_change_notifier_util.h"
#include "base/android/jni_android.h"
#include "base/macros.h"
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
#include "jni/NetworkChangeNotifierUtil_jni.h"
#include "net/base/network_change_notifier.h"
namespace cronet {
namespace {
// An IPAddressObserver to test whether Cronet can receive notification
// when network changes.
class TestIPAddressObserver
: public net::NetworkChangeNotifier::IPAddressObserver {
public:
TestIPAddressObserver() : ip_address_changed_(false) {
}
~TestIPAddressObserver() override {}
// net::NetworkChangeNotifier::IPAddressObserver implementation.
void OnIPAddressChanged() override {
ip_address_changed_ = true;
}
bool ip_address_changed() const {
return ip_address_changed_;
}
private:
bool ip_address_changed_;
DISALLOW_COPY_AND_ASSIGN(TestIPAddressObserver);
};
} // namespace
// Adds a TestIPAddressObserver to the list of IPAddressObservers, and returns
// a boolean indicating whether the TestIPAddressObserver has received
// notification when network changes.
static jboolean IsTestIPAddressObserverCalled(
JNIEnv* jenv,
const JavaParamRef<jclass>& jcaller) {
// This method is called on a Java thread with no MessageLoop, but we need
// one for the NetworkChangeNotifier to call the observer on.
base::MessageLoop loop;
TestIPAddressObserver test_observer;
net::NetworkChangeNotifier::AddIPAddressObserver(&test_observer);
net::NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
base::RunLoop().RunUntilIdle();
net::NetworkChangeNotifier::RemoveIPAddressObserver(&test_observer);
return test_observer.ip_address_changed();
}
bool RegisterNetworkChangeNotifierUtil(JNIEnv* jenv) {
return RegisterNativesImpl(jenv);
}
} // namespace cronet