| Index: net/android/network_change_notifier_delegate_android.cc
|
| diff --git a/net/android/network_change_notifier_delegate_android.cc b/net/android/network_change_notifier_delegate_android.cc
|
| index 91b0cb0465e65c7a7513b5a2fc80a1aa090231b8..0031260b73ece3904eb63a69178575d47cae6aad 100644
|
| --- a/net/android/network_change_notifier_delegate_android.cc
|
| +++ b/net/android/network_change_notifier_delegate_android.cc
|
| @@ -11,8 +11,10 @@ namespace net {
|
|
|
| namespace {
|
|
|
| -// Returns whether the provided connection type is known.
|
| -bool CheckConnectionType(int connection_type) {
|
| +// Converts a Java side connection type (integer) to
|
| +// the native side NetworkChangeNotifier::ConnectionType.
|
| +NetworkChangeNotifier::ConnectionType ConvertConnectionType(
|
| + jint connection_type) {
|
| switch (connection_type) {
|
| case NetworkChangeNotifier::CONNECTION_UNKNOWN:
|
| case NetworkChangeNotifier::CONNECTION_ETHERNET:
|
| @@ -21,29 +23,42 @@ bool CheckConnectionType(int connection_type) {
|
| case NetworkChangeNotifier::CONNECTION_3G:
|
| case NetworkChangeNotifier::CONNECTION_4G:
|
| case NetworkChangeNotifier::CONNECTION_NONE:
|
| - return true;
|
| + break;
|
| default:
|
| NOTREACHED() << "Unknown connection type received: " << connection_type;
|
| - return false;
|
| + return NetworkChangeNotifier::CONNECTION_UNKNOWN;
|
| }
|
| + return static_cast<NetworkChangeNotifier::ConnectionType>(connection_type);
|
| }
|
|
|
| } // namespace
|
|
|
| NetworkChangeNotifierDelegateAndroid::NetworkChangeNotifierDelegateAndroid()
|
| : observers_(new ObserverListThreadSafe<Observer>()) {
|
| + JNIEnv* env = base::android::AttachCurrentThread();
|
| java_network_change_notifier_.Reset(
|
| - Java_NetworkChangeNotifier_createInstance(
|
| - base::android::AttachCurrentThread(),
|
| - base::android::GetApplicationContext(),
|
| - reinterpret_cast<jint>(this)));
|
| + Java_NetworkChangeNotifier_init(
|
| + env, base::android::GetApplicationContext()));
|
| + Java_NetworkChangeNotifier_addNativeObserver(
|
| + env, java_network_change_notifier_.obj(), reinterpret_cast<jint>(this));
|
| + SetCurrentConnectionType(
|
| + ConvertConnectionType(
|
| + Java_NetworkChangeNotifier_getCurrentConnectionType(
|
| + env, java_network_change_notifier_.obj())));
|
| }
|
|
|
| NetworkChangeNotifierDelegateAndroid::~NetworkChangeNotifierDelegateAndroid() {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| observers_->AssertEmpty();
|
| JNIEnv* env = base::android::AttachCurrentThread();
|
| - Java_NetworkChangeNotifier_destroyInstance(env);
|
| + Java_NetworkChangeNotifier_removeNativeObserver(
|
| + env, java_network_change_notifier_.obj(), reinterpret_cast<jint>(this));
|
| +}
|
| +
|
| +NetworkChangeNotifier::ConnectionType
|
| +NetworkChangeNotifierDelegateAndroid::GetCurrentConnectionType() const {
|
| + base::AutoLock auto_lock(connection_type_lock_);
|
| + return connection_type_;
|
| }
|
|
|
| void NetworkChangeNotifierDelegateAndroid::NotifyConnectionTypeChanged(
|
| @@ -51,16 +66,16 @@ void NetworkChangeNotifierDelegateAndroid::NotifyConnectionTypeChanged(
|
| jobject obj,
|
| jint new_connection_type) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| - connection_type_ = CheckConnectionType(new_connection_type) ?
|
| - static_cast<ConnectionType>(new_connection_type) :
|
| - NetworkChangeNotifier::CONNECTION_UNKNOWN;
|
| - observers_->Notify(&Observer::OnConnectionTypeChanged, connection_type_);
|
| + const ConnectionType actual_connection_type = ConvertConnectionType(
|
| + new_connection_type);
|
| + SetCurrentConnectionType(actual_connection_type);
|
| + observers_->Notify(&Observer::OnConnectionTypeChanged);
|
| }
|
|
|
| jint NetworkChangeNotifierDelegateAndroid::GetConnectionType(JNIEnv*,
|
| jobject) const {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| - return connection_type_;
|
| + return GetCurrentConnectionType();
|
| }
|
|
|
| void NetworkChangeNotifierDelegateAndroid::AddObserver(
|
| @@ -73,16 +88,25 @@ void NetworkChangeNotifierDelegateAndroid::RemoveObserver(
|
| observers_->RemoveObserver(observer);
|
| }
|
|
|
| -void NetworkChangeNotifierDelegateAndroid::ForceConnectivityState(
|
| - ConnectivityState state) {
|
| - DCHECK(thread_checker_.CalledOnValidThread());
|
| - JNIEnv* env = base::android::AttachCurrentThread();
|
| - Java_NetworkChangeNotifier_forceConnectivityState(env, state == ONLINE);
|
| -}
|
| -
|
| // static
|
| bool NetworkChangeNotifierDelegateAndroid::Register(JNIEnv* env) {
|
| return RegisterNativesImpl(env);
|
| }
|
|
|
| +void NetworkChangeNotifierDelegateAndroid::SetCurrentConnectionType(
|
| + ConnectionType new_connection_type) {
|
| + base::AutoLock auto_lock(connection_type_lock_);
|
| + connection_type_ = new_connection_type;
|
| +}
|
| +
|
| +void NetworkChangeNotifierDelegateAndroid::SetOnline() {
|
| + JNIEnv* env = base::android::AttachCurrentThread();
|
| + Java_NetworkChangeNotifier_forceConnectivityState(env, true);
|
| +}
|
| +
|
| +void NetworkChangeNotifierDelegateAndroid::SetOffline() {
|
| + JNIEnv* env = base::android::AttachCurrentThread();
|
| + Java_NetworkChangeNotifier_forceConnectivityState(env, false);
|
| +}
|
| +
|
| } // namespace net
|
|
|