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

Side by Side Diff: net/android/network_change_notifier_delegate_android.cc

Issue 11628008: Provide NetworkChangeNotifierAndroid with the actual initial connection type. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address Ryan's comments Created 7 years, 11 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/android/network_change_notifier_delegate_android.h" 5 #include "net/android/network_change_notifier_delegate_android.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "jni/NetworkChangeNotifier_jni.h" 8 #include "jni/NetworkChangeNotifier_jni.h"
9 9
10 namespace net { 10 namespace net {
11 11
12 namespace { 12 namespace {
13 13
14 // Returns whether the provided connection type is known. 14 // Converts a Java side connection type (integer) to
15 bool CheckConnectionType(int connection_type) { 15 // the native side NetworkChangeNotifier::ConnectionType.
16 NetworkChangeNotifier::ConnectionType ConvertConnectionType(
17 jint connection_type) {
16 switch (connection_type) { 18 switch (connection_type) {
17 case NetworkChangeNotifier::CONNECTION_UNKNOWN: 19 case NetworkChangeNotifier::CONNECTION_UNKNOWN:
18 case NetworkChangeNotifier::CONNECTION_ETHERNET: 20 case NetworkChangeNotifier::CONNECTION_ETHERNET:
19 case NetworkChangeNotifier::CONNECTION_WIFI: 21 case NetworkChangeNotifier::CONNECTION_WIFI:
20 case NetworkChangeNotifier::CONNECTION_2G: 22 case NetworkChangeNotifier::CONNECTION_2G:
21 case NetworkChangeNotifier::CONNECTION_3G: 23 case NetworkChangeNotifier::CONNECTION_3G:
22 case NetworkChangeNotifier::CONNECTION_4G: 24 case NetworkChangeNotifier::CONNECTION_4G:
23 case NetworkChangeNotifier::CONNECTION_NONE: 25 case NetworkChangeNotifier::CONNECTION_NONE:
24 return true; 26 break;
25 default: 27 default:
26 NOTREACHED() << "Unknown connection type received: " << connection_type; 28 NOTREACHED() << "Unknown connection type received: " << connection_type;
27 return false; 29 return NetworkChangeNotifier::CONNECTION_UNKNOWN;
28 } 30 }
31 return static_cast<NetworkChangeNotifier::ConnectionType>(connection_type);
29 } 32 }
30 33
31 } // namespace 34 } // namespace
32 35
33 NetworkChangeNotifierDelegateAndroid::NetworkChangeNotifierDelegateAndroid() 36 NetworkChangeNotifierDelegateAndroid::NetworkChangeNotifierDelegateAndroid()
34 : observers_(new ObserverListThreadSafe<Observer>()) { 37 : observers_(new ObserverListThreadSafe<Observer>()) {
38 JNIEnv* env = base::android::AttachCurrentThread();
35 java_network_change_notifier_.Reset( 39 java_network_change_notifier_.Reset(
36 Java_NetworkChangeNotifier_createInstance( 40 Java_NetworkChangeNotifier_init(
37 base::android::AttachCurrentThread(), 41 env, base::android::GetApplicationContext()));
38 base::android::GetApplicationContext(), 42 Java_NetworkChangeNotifier_addNativeObserver(
39 reinterpret_cast<jint>(this))); 43 env, java_network_change_notifier_.obj(), reinterpret_cast<jint>(this));
44 SetCurrentConnectionType(
45 ConvertConnectionType(
46 Java_NetworkChangeNotifier_getCurrentConnectionType(
47 env, java_network_change_notifier_.obj())));
40 } 48 }
41 49
42 NetworkChangeNotifierDelegateAndroid::~NetworkChangeNotifierDelegateAndroid() { 50 NetworkChangeNotifierDelegateAndroid::~NetworkChangeNotifierDelegateAndroid() {
43 DCHECK(thread_checker_.CalledOnValidThread()); 51 DCHECK(thread_checker_.CalledOnValidThread());
44 observers_->AssertEmpty(); 52 observers_->AssertEmpty();
45 JNIEnv* env = base::android::AttachCurrentThread(); 53 JNIEnv* env = base::android::AttachCurrentThread();
46 Java_NetworkChangeNotifier_destroyInstance(env); 54 Java_NetworkChangeNotifier_removeNativeObserver(
55 env, java_network_change_notifier_.obj(), reinterpret_cast<jint>(this));
56 }
57
58 NetworkChangeNotifier::ConnectionType
59 NetworkChangeNotifierDelegateAndroid::GetCurrentConnectionType() const {
60 base::AutoLock auto_lock(connection_type_lock_);
61 return connection_type_;
47 } 62 }
48 63
49 void NetworkChangeNotifierDelegateAndroid::NotifyConnectionTypeChanged( 64 void NetworkChangeNotifierDelegateAndroid::NotifyConnectionTypeChanged(
50 JNIEnv* env, 65 JNIEnv* env,
51 jobject obj, 66 jobject obj,
52 jint new_connection_type) { 67 jint new_connection_type) {
53 DCHECK(thread_checker_.CalledOnValidThread()); 68 DCHECK(thread_checker_.CalledOnValidThread());
54 connection_type_ = CheckConnectionType(new_connection_type) ? 69 const ConnectionType actual_connection_type = ConvertConnectionType(
55 static_cast<ConnectionType>(new_connection_type) : 70 new_connection_type);
56 NetworkChangeNotifier::CONNECTION_UNKNOWN; 71 SetCurrentConnectionType(actual_connection_type);
57 observers_->Notify(&Observer::OnConnectionTypeChanged, connection_type_); 72 observers_->Notify(&Observer::OnConnectionTypeChanged);
58 } 73 }
59 74
60 jint NetworkChangeNotifierDelegateAndroid::GetConnectionType(JNIEnv*, 75 jint NetworkChangeNotifierDelegateAndroid::GetConnectionType(JNIEnv*,
61 jobject) const { 76 jobject) const {
62 DCHECK(thread_checker_.CalledOnValidThread()); 77 DCHECK(thread_checker_.CalledOnValidThread());
63 return connection_type_; 78 return GetCurrentConnectionType();
64 } 79 }
65 80
66 void NetworkChangeNotifierDelegateAndroid::AddObserver( 81 void NetworkChangeNotifierDelegateAndroid::AddObserver(
67 Observer* observer) { 82 Observer* observer) {
68 observers_->AddObserver(observer); 83 observers_->AddObserver(observer);
69 } 84 }
70 85
71 void NetworkChangeNotifierDelegateAndroid::RemoveObserver( 86 void NetworkChangeNotifierDelegateAndroid::RemoveObserver(
72 Observer* observer) { 87 Observer* observer) {
73 observers_->RemoveObserver(observer); 88 observers_->RemoveObserver(observer);
74 } 89 }
75 90
76 void NetworkChangeNotifierDelegateAndroid::ForceConnectivityState(
77 ConnectivityState state) {
78 DCHECK(thread_checker_.CalledOnValidThread());
79 JNIEnv* env = base::android::AttachCurrentThread();
80 Java_NetworkChangeNotifier_forceConnectivityState(env, state == ONLINE);
81 }
82
83 // static 91 // static
84 bool NetworkChangeNotifierDelegateAndroid::Register(JNIEnv* env) { 92 bool NetworkChangeNotifierDelegateAndroid::Register(JNIEnv* env) {
85 return RegisterNativesImpl(env); 93 return RegisterNativesImpl(env);
86 } 94 }
87 95
96 void NetworkChangeNotifierDelegateAndroid::SetCurrentConnectionType(
97 ConnectionType new_connection_type) {
98 base::AutoLock auto_lock(connection_type_lock_);
99 connection_type_ = new_connection_type;
100 }
101
102 void NetworkChangeNotifierDelegateAndroid::SetOnline() {
103 JNIEnv* env = base::android::AttachCurrentThread();
104 Java_NetworkChangeNotifier_forceConnectivityState(env, true);
105 }
106
107 void NetworkChangeNotifierDelegateAndroid::SetOffline() {
108 JNIEnv* env = base::android::AttachCurrentThread();
109 Java_NetworkChangeNotifier_forceConnectivityState(env, false);
110 }
111
88 } // namespace net 112 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698