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

Unified Diff: chrome/browser/chromeos/net/wake_on_wifi_manager.cc

Issue 811973002: Enable lucid sleep (wake on wi-fi SSID) and add to Privacy options. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add function to chromeos::switches. rebase Created 6 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/chromeos/net/wake_on_wifi_manager.h ('k') | chrome/browser/chromeos/preferences.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/net/wake_on_wifi_manager.cc
diff --git a/chrome/browser/chromeos/net/wake_on_wifi_manager.cc b/chrome/browser/chromeos/net/wake_on_wifi_manager.cc
index 6233784a9e3d945c232a270325f87cee62430773..5584524f1aa66098c896412cf2315d3985cabf48 100644
--- a/chrome/browser/chromeos/net/wake_on_wifi_manager.cc
+++ b/chrome/browser/chromeos/net/wake_on_wifi_manager.cc
@@ -7,16 +7,17 @@
#include <string>
#include "base/bind.h"
-#include "base/command_line.h"
#include "base/containers/scoped_ptr_hash_map.h"
#include "base/logging.h"
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "base/sys_info.h"
+#include "base/values.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/services/gcm/gcm_profile_service.h"
#include "chrome/browser/services/gcm/gcm_profile_service_factory.h"
+#include "chromeos/chromeos_switches.h"
#include "chromeos/login/login_state.h"
#include "chromeos/network/device_state.h"
#include "chromeos/network/network_device_handler.h"
@@ -53,6 +54,9 @@ std::string WakeOnWifiFeatureToString(
return kWakeOnPacketAndSsid;
case WakeOnWifiManager::INVALID:
return std::string();
+ case WakeOnWifiManager::NOT_SUPPORTED:
+ NOTREACHED();
+ return std::string();
}
NOTREACHED() << "Unknown wake on wifi feature: " << feature;
@@ -60,8 +64,7 @@ std::string WakeOnWifiFeatureToString(
}
bool IsWakeOnPacketEnabled(WakeOnWifiManager::WakeOnWifiFeature feature) {
- return feature == WakeOnWifiManager::WAKE_ON_PACKET ||
- feature == WakeOnWifiManager::WAKE_ON_PACKET_AND_SSID;
+ return feature & WakeOnWifiManager::WAKE_ON_PACKET;
}
// Weak pointer. This class is owned by ChromeBrowserMainPartsChromeos.
@@ -137,7 +140,8 @@ WakeOnWifiManager* WakeOnWifiManager::Get() {
}
WakeOnWifiManager::WakeOnWifiManager()
- : current_feature_(WakeOnWifiManager::INVALID) {
+ : current_feature_(WakeOnWifiManager::INVALID),
+ weak_ptr_factory_(this) {
// This class must be constructed before any users are logged in, i.e., before
// any profiles are created or added to the ProfileManager. Additionally,
// IsUserLoggedIn always returns true when we are not running on a Chrome OS
@@ -161,6 +165,21 @@ WakeOnWifiManager::WakeOnWifiManager()
->RemoveAllWifiWakeOnPacketConnections(
base::Bind(&base::DoNothing),
network_handler::ErrorCallback());
+
+ if (!switches::WakeOnWifiEnabled())
+ return;
+
+ const DeviceState* device =
+ NetworkHandler::Get()->network_state_handler()->GetDeviceStateByType(
+ NetworkTypePattern::WiFi());
+ if (!device)
+ return;
+ // Get device properties to check whether wake-on-wifi is supported.
+ NetworkHandler::Get()->network_device_handler()->GetDeviceProperties(
+ device->path(),
+ base::Bind(&WakeOnWifiManager::GetDevicePropertiesCallback,
+ weak_ptr_factory_.GetWeakPtr()),
+ network_handler::ErrorCallback());
}
WakeOnWifiManager::~WakeOnWifiManager() {
@@ -172,6 +191,10 @@ WakeOnWifiManager::~WakeOnWifiManager() {
void WakeOnWifiManager::OnPreferenceChanged(
WakeOnWifiManager::WakeOnWifiFeature feature) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ if (current_feature_ == NOT_SUPPORTED)
+ return;
+ if (!switches::WakeOnWifiEnabled())
+ feature = WAKE_ON_NONE;
if (feature == current_feature_)
return;
@@ -202,6 +225,23 @@ void WakeOnWifiManager::OnPreferenceChanged(
}
}
+bool WakeOnWifiManager::WakeOnWifiSupported() {
+ return current_feature_ != NOT_SUPPORTED && current_feature_ != INVALID;
+}
+
+void WakeOnWifiManager::GetDevicePropertiesCallback(
+ const std::string& device_path,
+ const base::DictionaryValue& properties) {
+ if (!properties.HasKey(shill::kWakeOnWiFiFeaturesEnabledProperty))
+ return;
+ std::string enabled;
+ if (properties.GetString(shill::kWakeOnWiFiFeaturesEnabledProperty,
+ &enabled) &&
+ enabled == shill::kWakeOnWiFiFeaturesEnabledNotSupported) {
+ current_feature_ = NOT_SUPPORTED;
+ }
+}
+
void WakeOnWifiManager::Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) {
« no previous file with comments | « chrome/browser/chromeos/net/wake_on_wifi_manager.h ('k') | chrome/browser/chromeos/preferences.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698