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

Side by Side Diff: chrome/browser/chromeos/cros_network_library.cc

Issue 306032: Simplify threading in browser thread by making only ChromeThread deal with di... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: a few more simplifications Created 11 years, 1 month 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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 "chrome/browser/chromeos/cros_network_library.h" 5 #include "chrome/browser/chromeos/cros_network_library.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
11 #include "chrome/browser/chrome_thread.h" 11 #include "chrome/browser/chrome_thread.h"
12 #include "chrome/browser/chromeos/cros_library.h" 12 #include "chrome/browser/chromeos/cros_library.h"
13 13
14 // Allows InvokeLater without adding refcounting. This class is a Singleton and 14 // Allows InvokeLater without adding refcounting. This class is a Singleton and
15 // won't be deleted until it's last InvokeLater is run. 15 // won't be deleted until it's last InvokeLater is run.
16 template <> 16 template <>
17 struct RunnableMethodTraits<CrosNetworkLibrary> { 17 struct RunnableMethodTraits<CrosNetworkLibrary> {
18 void RetainCallee(CrosNetworkLibrary* obj) {} 18 void RetainCallee(CrosNetworkLibrary* obj) {}
19 void ReleaseCallee(CrosNetworkLibrary* obj) {} 19 void ReleaseCallee(CrosNetworkLibrary* obj) {}
20 }; 20 };
21 21
22 CrosNetworkLibrary::CrosNetworkLibrary() { 22 CrosNetworkLibrary::CrosNetworkLibrary() {
23 if (CrosLibrary::loaded()) { 23 if (!CrosLibrary::loaded())
24 MessageLoop* loop = ChromeThread::GetMessageLoop(ChromeThread::FILE); 24 return;
25 if (loop) { 25
26 loop->PostTask(FROM_HERE, NewRunnableMethod(this, 26 ChromeThread::PostTask(
27 &CrosNetworkLibrary::InitOnBackgroundThread)); 27 ChromeThread::FILE, FROM_HERE,
28 } 28 NewRunnableMethod(this, &CrosNetworkLibrary::InitOnBackgroundThread));
29 }
30 } 29 }
31 30
32 CrosNetworkLibrary::~CrosNetworkLibrary() { 31 CrosNetworkLibrary::~CrosNetworkLibrary() {
33 if (CrosLibrary::loaded()) { 32 if (CrosLibrary::loaded()) {
34 // FILE thread is already gone by the time we get to this destructor. 33 // FILE thread is already gone by the time we get to this destructor.
35 // So it's ok to just make the disconnect call on the main thread. 34 // So it's ok to just make the disconnect call on the main thread.
36 chromeos::DisconnectNetworkStatus(network_status_connection_); 35 chromeos::DisconnectNetworkStatus(network_status_connection_);
37 } 36 }
38 } 37 }
39 38
(...skipping 24 matching lines...) Expand all
64 case chromeos::WEP: 63 case chromeos::WEP:
65 return "wep"; 64 return "wep";
66 case chromeos::WPA: 65 case chromeos::WPA:
67 return "wpa"; 66 return "wpa";
68 } 67 }
69 return "none"; 68 return "none";
70 } 69 }
71 70
72 void CrosNetworkLibrary::ConnectToWifiNetwork(WifiNetwork network, 71 void CrosNetworkLibrary::ConnectToWifiNetwork(WifiNetwork network,
73 const string16& password) { 72 const string16& password) {
74 if (CrosLibrary::loaded()) { 73 if (!CrosLibrary::loaded())
75 MessageLoop* loop = ChromeThread::GetMessageLoop(ChromeThread::FILE); 74 return;
76 if (loop) 75
77 loop->PostTask(FROM_HERE, NewRunnableFunction( 76 ChromeThread::PostTask(
77 ChromeThread::FILE, FROM_HERE,
78 NewRunnableFunction(
78 &chromeos::ConnectToWifiNetwork, 79 &chromeos::ConnectToWifiNetwork,
79 network.ssid.c_str(), 80 network.ssid.c_str(),
80 password.empty() ? NULL : UTF16ToUTF8(password).c_str(), 81 password.empty() ? NULL : UTF16ToUTF8(password).c_str(),
81 GetEncryptionString(network.encryption))); 82 GetEncryptionString(network.encryption)));
82 }
83 } 83 }
84 84
85 // static 85 // static
86 void CrosNetworkLibrary::NetworkStatusChangedHandler(void* object, 86 void CrosNetworkLibrary::NetworkStatusChangedHandler(void* object,
87 const chromeos::ServiceStatus& service_status) { 87 const chromeos::ServiceStatus& service_status) {
88 CrosNetworkLibrary* network = static_cast<CrosNetworkLibrary*>(object); 88 CrosNetworkLibrary* network = static_cast<CrosNetworkLibrary*>(object);
89 WifiNetworkVector networks; 89 WifiNetworkVector networks;
90 bool ethernet_connected; 90 bool ethernet_connected;
91 ParseNetworks(service_status, &networks, &ethernet_connected); 91 ParseNetworks(service_status, &networks, &ethernet_connected);
92 network->UpdateNetworkStatus(networks, ethernet_connected); 92 network->UpdateNetworkStatus(networks, ethernet_connected);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 chromeos::FreeServiceStatus(service_status); 132 chromeos::FreeServiceStatus(service_status);
133 } 133 }
134 network_status_connection_ = chromeos::MonitorNetworkStatus( 134 network_status_connection_ = chromeos::MonitorNetworkStatus(
135 &NetworkStatusChangedHandler, this); 135 &NetworkStatusChangedHandler, this);
136 } 136 }
137 137
138 void CrosNetworkLibrary::UpdateNetworkStatus( 138 void CrosNetworkLibrary::UpdateNetworkStatus(
139 const WifiNetworkVector& networks, bool ethernet_connected) { 139 const WifiNetworkVector& networks, bool ethernet_connected) {
140 // Make sure we run on UI thread. 140 // Make sure we run on UI thread.
141 if (!ChromeThread::CurrentlyOn(ChromeThread::UI)) { 141 if (!ChromeThread::CurrentlyOn(ChromeThread::UI)) {
142 MessageLoop* loop = ChromeThread::GetMessageLoop(ChromeThread::UI); 142 ChromeThread::PostTask(
143 if (loop) 143 ChromeThread::UI, FROM_HERE,
144 loop->PostTask(FROM_HERE, NewRunnableMethod(this, 144 NewRunnableMethod(this,
145 &CrosNetworkLibrary::UpdateNetworkStatus, networks, 145 &CrosNetworkLibrary::UpdateNetworkStatus, networks,
146 ethernet_connected)); 146 ethernet_connected));
147 return; 147 return;
148 } 148 }
149 149
150 ethernet_connected_ = ethernet_connected; 150 ethernet_connected_ = ethernet_connected;
151 wifi_networks_ = networks; 151 wifi_networks_ = networks;
152 // Sort the list of wifi networks by ssid. 152 // Sort the list of wifi networks by ssid.
153 std::sort(wifi_networks_.begin(), wifi_networks_.end()); 153 std::sort(wifi_networks_.begin(), wifi_networks_.end());
154 wifi_ = WifiNetwork(); 154 wifi_ = WifiNetwork();
155 for (size_t i = 0; i < wifi_networks_.size(); i++) { 155 for (size_t i = 0; i < wifi_networks_.size(); i++) {
156 if (wifi_networks_[i].connecting || wifi_networks_[i].connected) { 156 if (wifi_networks_[i].connecting || wifi_networks_[i].connected) {
157 wifi_ = wifi_networks_[i]; 157 wifi_ = wifi_networks_[i];
158 break; // There is only one connected or connecting wifi network. 158 break; // There is only one connected or connecting wifi network.
159 } 159 }
160 } 160 }
161 FOR_EACH_OBSERVER(Observer, observers_, NetworkChanged(this)); 161 FOR_EACH_OBSERVER(Observer, observers_, NetworkChanged(this));
162 } 162 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698