172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// found in the LICENSE file. 472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/automation/testing_automation_provider.h" 672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/values.h" 872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/automation/automation_provider_json.h" 972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/automation/automation_provider_observers.h" 1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/chromeos/cros/cros_library.h" 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/cros/network_library.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/cros/power_library.h" 1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/chromeos/cros/screen_lock_library.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/cros/update_library.h" 1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/chromeos/login/existing_user_controller.h" 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/login/screen_locker.h" 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/proxy_cros_settings_provider.h" 1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing chromeos::CrosLibrary; 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing chromeos::NetworkLibrary; 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing chromeos::UserManager; 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing chromeos::UpdateLibrary; 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace { 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbool EnsureCrosLibraryLoaded(AutomationProvider* provider, 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message) { 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!CrosLibrary::Get()->EnsureLoaded()) { 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(provider, reply_message).SendError( 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "Could not load cros library."); 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return false; 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return true; 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenDictionaryValue* GetNetworkInfoDict(const chromeos::Network* network) { 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* item = new DictionaryValue; 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen item->SetString("name", network->name()); 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen item->SetString("device_path", network->device_path()); 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen item->SetString("ip_address", network->ip_address()); 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen item->SetString("status", network->GetStateString()); 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return item; 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenValue* GetProxySetting(const std::string& setting_name) { 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chromeos::ProxyCrosSettingsProvider settings_provider; 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string setting_path = "cros.session.proxy."; 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen setting_path.append(setting_name); 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (setting_name == "ignorelist") { 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Value* value; 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (settings_provider.Get(setting_path, &value)) 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return value; 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Value* setting; 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (settings_provider.Get(setting_path, &setting)) { 57ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* setting_dict = static_cast<DictionaryValue*>(setting); 58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Value* value; 59ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool found = setting_dict->Remove("value", &value); 60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen delete setting; 61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (found) 62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return value; 63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return NULL; 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 67ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst char* UpdateStatusToString(chromeos::UpdateStatusOperation status) { 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen switch (status) { 70ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case chromeos::UPDATE_STATUS_IDLE: 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return "idle"; 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case chromeos::UPDATE_STATUS_CHECKING_FOR_UPDATE: 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return "checking for update"; 74ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case chromeos::UPDATE_STATUS_UPDATE_AVAILABLE: 75ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return "update available"; 76ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case chromeos::UPDATE_STATUS_DOWNLOADING: 77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return "downloading"; 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case chromeos::UPDATE_STATUS_VERIFYING: 79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return "verifying"; 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case chromeos::UPDATE_STATUS_FINALIZING: 81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return "finalizing"; 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case chromeos::UPDATE_STATUS_UPDATED_NEED_REBOOT: 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return "updated need reboot"; 84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen case chromeos::UPDATE_STATUS_REPORTING_ERROR_EVENT: 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return "reporting error event"; 86ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen default: 87ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return "unknown"; 88ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 89ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid GetReleaseTrackCallback(void* user_data, const char* track) { 92ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply* reply = static_cast<AutomationJSONReply*>(user_data); 93ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 94ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (track == NULL) { 95ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply->SendError("Unable to get release track."); 96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen delete reply; 97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->SetString("release_track", track); 102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 103ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen UpdateLibrary* update_library = CrosLibrary::Get()->GetUpdateLibrary(); 104ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const UpdateLibrary::Status& status = update_library->status(); 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chromeos::UpdateStatusOperation update_status = status.status; 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->SetString("status", UpdateStatusToString(update_status)); 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (update_status == chromeos::UPDATE_STATUS_DOWNLOADING) 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->SetDouble("download_progress", status.download_progress); 109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (status.last_checked_time > 0) 110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->SetInteger("last_checked_time", status.last_checked_time); 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (status.new_size > 0) 112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->SetInteger("new_size", status.new_size); 113ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply->SendSuccess(return_value.get()); 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen delete reply; 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid UpdateCheckCallback(void* user_data, chromeos::UpdateResult result, 119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const char* error_msg) { 120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply* reply = static_cast<AutomationJSONReply*>(user_data); 121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (result == chromeos::UPDATE_RESULT_SUCCESS) 122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply->SendSuccess(NULL); 123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen else 124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply->SendError(error_msg); 125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen delete reply; 126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace 129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::GetLoginInfo(DictionaryValue* args, 131ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message) { 132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply reply(this, reply_message); 133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const UserManager* user_manager = UserManager::Get(); 136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!user_manager) 137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendError("No user manager!"); 138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const chromeos::ScreenLocker* screen_locker = 139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chromeos::ScreenLocker::default_screen_locker(); 140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->SetBoolean("is_owner", user_manager->current_user_is_owner()); 142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->SetBoolean("is_logged_in", user_manager->user_is_logged_in()); 143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->SetBoolean("is_screen_locked", screen_locker); 144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (user_manager->user_is_logged_in()) { 145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->SetBoolean("is_guest", user_manager->IsLoggedInAsGuest()); 146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->SetString("email", user_manager->logged_in_user().email()); 147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendSuccess(return_value.get()); 150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Logging in as guest will cause session_manager to restart Chrome with new 153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// flags. If you used EnableChromeTesting, you will have to call it again. 15472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid TestingAutomationProvider::LoginAsGuest(DictionaryValue* args, 15572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen IPC::Message* reply_message) { 15672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen chromeos::ExistingUserController* controller = 15772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen chromeos::ExistingUserController::current_controller(); 15872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Set up an observer (it will delete itself). 15972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen new LoginManagerObserver(this, reply_message); 16072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen controller->LoginAsGuest(); 16172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 16272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 16372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid TestingAutomationProvider::Login(DictionaryValue* args, 16472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen IPC::Message* reply_message) { 16572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::string username, password; 16672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (!args->GetString("username", &username) || 16772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen !args->GetString("password", &password)) { 16872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen AutomationJSONReply(this, reply_message).SendError( 169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "Invalid or missing args."); 17072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return; 17172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen } 17272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 17372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen chromeos::ExistingUserController* controller = 17472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen chromeos::ExistingUserController::current_controller(); 17572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Set up an observer (it will delete itself). 17672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen new LoginManagerObserver(this, reply_message); 17772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen controller->Login(username, password); 17872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 17972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::LockScreen(DictionaryValue* args, 18172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen IPC::Message* reply_message) { 182ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!EnsureCrosLibraryLoaded(this, reply_message)) 183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 18572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen new ScreenLockUnlockObserver(this, reply_message, true); 186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CrosLibrary::Get()->GetScreenLockLibrary()-> 18772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NotifyScreenLockRequested(); 18872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 18972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::UnlockScreen(DictionaryValue* args, 19172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen IPC::Message* reply_message) { 192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!EnsureCrosLibraryLoaded(this, reply_message)) 193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 19572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen new ScreenLockUnlockObserver(this, reply_message, false); 196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CrosLibrary::Get()->GetScreenLockLibrary()-> 19772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NotifyScreenUnlockRequested(); 19872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Signing out could have undesirable side effects: session_manager is 201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// killed, so its children, including chrome and the window manager, will 202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// also be killed. Anything owned by chronos will probably be killed. 203ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::SignoutInScreenLocker( 204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* args, IPC::Message* reply_message) { 205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply reply(this, reply_message); 206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chromeos::ScreenLocker* screen_locker = 207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chromeos::ScreenLocker::default_screen_locker(); 208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!screen_locker) { 209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendError( 210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "No default screen locker. Are you sure the screen is locked?"); 211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 213ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Send success before stopping session because if we're a child of 215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // session manager then we'll die when the session is stopped. 216ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendSuccess(NULL); 217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen screen_locker->Signout(); 218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::GetBatteryInfo(DictionaryValue* args, 221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message) { 222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!EnsureCrosLibraryLoaded(this, reply_message)) 223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chromeos::PowerLibrary* power_library = CrosLibrary::Get()->GetPowerLibrary(); 226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->SetBoolean("battery_is_present", 229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen power_library->battery_is_present()); 230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->SetBoolean("line_power_on", power_library->line_power_on()); 231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (power_library->battery_is_present()) { 232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->SetBoolean("battery_fully_charged", 233ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen power_library->battery_fully_charged()); 234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->SetDouble("battery_percentage", 235ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen power_library->battery_percentage()); 236ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (power_library->line_power_on()) { 237ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int time = power_library->battery_time_to_full().InSeconds(); 238ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (time > 0 || power_library->battery_fully_charged()) 239ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->SetInteger("battery_time_to_full", time); 240ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } else { 241ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int time = power_library->battery_time_to_empty().InSeconds(); 242ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (time > 0) 243ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->SetInteger("battery_time_to_empty", time); 244ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 245ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 246ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 247ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message).SendSuccess(return_value.get()); 248ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 249ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 250ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::GetNetworkInfo(DictionaryValue* args, 251ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message) { 252ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!EnsureCrosLibraryLoaded(this, reply_message)) 253ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 254ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 255ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NetworkLibrary* network_library = CrosLibrary::Get()->GetNetworkLibrary(); 256ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 257ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 258ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // IP address. 259ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->SetString("ip_address", network_library->IPAddress()); 260ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 261ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Currently connected networks. 262ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (network_library->ethernet_network()) 263ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->SetString( 264ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "connected_ethernet", 265ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen network_library->ethernet_network()->service_path()); 266ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (network_library->wifi_network()) 267ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->SetString("connected_wifi", 268ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen network_library->wifi_network()->service_path()); 269ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (network_library->cellular_network()) 270ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->SetString( 271ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "connected_cellular", 272ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen network_library->cellular_network()->service_path()); 273ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 274ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Ethernet network. 275ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool ethernet_available = network_library->ethernet_available(); 276ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool ethernet_enabled = network_library->ethernet_enabled(); 277ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (ethernet_available && ethernet_enabled) { 278ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const chromeos::EthernetNetwork* ethernet_network = 279ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen network_library->ethernet_network(); 280ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (ethernet_network) { 281ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* items = new DictionaryValue; 282ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* item = GetNetworkInfoDict(ethernet_network); 283ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen items->Set(ethernet_network->service_path(), item); 284ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->Set("ethernet_networks", items); 285ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 286ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 287ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 288ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Wi-fi networks. 289ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool wifi_available = network_library->wifi_available(); 290ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool wifi_enabled = network_library->wifi_enabled(); 291ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (wifi_available && wifi_enabled) { 292ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const chromeos::WifiNetworkVector& wifi_networks = 293ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen network_library->wifi_networks(); 294ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* items = new DictionaryValue; 295ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (chromeos::WifiNetworkVector::const_iterator iter = 296ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen wifi_networks.begin(); iter != wifi_networks.end(); ++iter) { 297ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const chromeos::WifiNetwork* wifi = *iter; 298ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* item = GetNetworkInfoDict(wifi); 299ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen item->SetInteger("strength", wifi->strength()); 300ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen item->SetBoolean("encrypted", wifi->encrypted()); 301ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen item->SetString("encryption", wifi->GetEncryptionString()); 302ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen items->Set(wifi->service_path(), item); 303ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 304ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->Set("wifi_networks", items); 305ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 306ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 307ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Cellular networks. 308ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool cellular_available = network_library->cellular_available(); 309ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool cellular_enabled = network_library->cellular_enabled(); 310ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (cellular_available && cellular_enabled) { 311ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const chromeos::CellularNetworkVector& cellular_networks = 312ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen network_library->cellular_networks(); 313ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* items = new DictionaryValue; 314ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (size_t i = 0; i < cellular_networks.size(); ++i) { 315ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* item = GetNetworkInfoDict(cellular_networks[i]); 316ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen item->SetInteger("strength", cellular_networks[i]->strength()); 317ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen item->SetString("operator_name", cellular_networks[i]->operator_name()); 318ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen item->SetString("operator_code", cellular_networks[i]->operator_code()); 319ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen item->SetString("payment_url", cellular_networks[i]->payment_url()); 320ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen item->SetString("usage_url", cellular_networks[i]->usage_url()); 321ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen item->SetString("network_technology", 322ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen cellular_networks[i]->GetNetworkTechnologyString()); 323ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen item->SetString("connectivity_state", 324ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen cellular_networks[i]->GetConnectivityStateString()); 325ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen item->SetString("activation_state", 326ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen cellular_networks[i]->GetActivationStateString()); 327ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen item->SetString("roaming_state", 328ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen cellular_networks[i]->GetRoamingStateString()); 329ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen items->Set(cellular_networks[i]->service_path(), item); 330ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 331ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->Set("cellular_networks", items); 332ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 333ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 334ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message).SendSuccess(return_value.get()); 335ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 336ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 337ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::NetworkScan(DictionaryValue* args, 338ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message) { 339ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!EnsureCrosLibraryLoaded(this, reply_message)) 340ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 341ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 342ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NetworkLibrary* network_library = CrosLibrary::Get()->GetNetworkLibrary(); 343ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen network_library->RequestNetworkScan(); 344ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 345ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Set up an observer (it will delete itself). 346ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new NetworkScanObserver(this, reply_message); 347ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 348ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 349ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::GetProxySettings(DictionaryValue* args, 350ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message) { 351ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const char* settings[] = { "pacurl", "singlehttp", "singlehttpport", 352ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "httpurl", "httpport", "httpsurl", "httpsport", 353ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "type", "single", "ftpurl", "ftpport", 354ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "socks", "socksport", "ignorelist" }; 355ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 356ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<DictionaryValue> return_value(new DictionaryValue); 357ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chromeos::ProxyCrosSettingsProvider settings_provider; 358ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 359ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen for (size_t i = 0; i < arraysize(settings); ++i) { 360ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Value* setting = GetProxySetting(settings[i]); 361ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (setting) 362ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return_value->Set(settings[i], setting); 363ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 364ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 365ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message).SendSuccess(return_value.get()); 366ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 367ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 368ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::SetProxySettings(DictionaryValue* args, 369ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message) { 370ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply reply(this, reply_message); 371ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string key; 372ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen Value* value; 373ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!args->GetString("key", &key) || !args->Get("value", &value)) { 374ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendError("Invalid or missing args."); 375ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 376ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 377ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 378ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string setting_path = "cros.session.proxy."; 379ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen setting_path.append(key); 380ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 381ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // ProxyCrosSettingsProvider will own the Value* passed to Set(). 382ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chromeos::ProxyCrosSettingsProvider().Set(setting_path, value->DeepCopy()); 383ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendSuccess(NULL); 384ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 385ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 386ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::ConnectToWifiNetwork( 387ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* args, IPC::Message* reply_message) { 388ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!EnsureCrosLibraryLoaded(this, reply_message)) 389ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 390ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 391ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply reply(this, reply_message); 392ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string service_path, password, identity, certpath; 393ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!args->GetString("service_path", &service_path) || 394ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen !args->GetString("password", &password) || 395ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen !args->GetString("identity", &identity) || 396ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen !args->GetString("certpath", &certpath)) { 397ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendError("Invalid or missing args."); 398ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 399ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 400ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 401ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NetworkLibrary* network_library = CrosLibrary::Get()->GetNetworkLibrary(); 402ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chromeos::WifiNetwork* wifi = 403ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen network_library->FindWifiNetworkByPath(service_path); 404ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!wifi) { 405ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendError("No network found with specified service path."); 406ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 407ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 408ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!password.empty()) 409ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen wifi->SetPassphrase(password); 410ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!identity.empty()) 411ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen wifi->SetIdentity(identity); 412ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!certpath.empty()) 413ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen wifi->SetCertPath(certpath); 414ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 415ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Set up an observer (it will delete itself). 416ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new ServicePathConnectObserver(this, reply_message, service_path); 417ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 418ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen network_library->ConnectToWifiNetwork(wifi); 419ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen network_library->RequestNetworkScan(); 420ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 421ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 422ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::ConnectToHiddenWifiNetwork( 423ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* args, IPC::Message* reply_message) { 424ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!CrosLibrary::Get()->EnsureLoaded()) { 425ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message) 426ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .SendError("Could not load cros library."); 427ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 428ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 429ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 430ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string ssid, security, password, identity, certpath; 431ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!args->GetString("ssid", &ssid) || 432ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen !args->GetString("security", &security) || 433ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen !args->GetString("password", &password) || 434ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen !args->GetString("identity", &identity) || 435ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen !args->GetString("certpath", &certpath)) { 436ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message) 437ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .SendError("Invalid or missing args."); 438ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 439ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 440ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 441ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::map<std::string, chromeos::ConnectionSecurity> connection_security_map; 442ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen connection_security_map["SECURITY_NONE"] = chromeos::SECURITY_NONE; 443ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen connection_security_map["SECURITY_WEP"] = chromeos::SECURITY_WEP; 444ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen connection_security_map["SECURITY_WPA"] = chromeos::SECURITY_WPA; 445ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen connection_security_map["SECURITY_RSN"] = chromeos::SECURITY_RSN; 446ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen connection_security_map["SECURITY_8021X"] = chromeos::SECURITY_8021X; 447ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 448ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (connection_security_map.find(security) == connection_security_map.end()) { 449ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply(this, reply_message) 450ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen .SendError("Unknown security type."); 451ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 452ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 453ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen chromeos::ConnectionSecurity connection_security = 454ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen connection_security_map[security]; 455ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 456ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NetworkLibrary* network_library = CrosLibrary::Get()->GetNetworkLibrary(); 457ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 458ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Set up an observer (it will delete itself). 459ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen new SSIDConnectObserver(this, reply_message, ssid); 460ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 461ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen network_library->ConnectToWifiNetwork(connection_security, ssid, password, 462ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen identity, certpath); 463ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 464ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 465ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::DisconnectFromWifiNetwork( 466ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* args, IPC::Message* reply_message) { 467ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!EnsureCrosLibraryLoaded(this, reply_message)) 468ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 469ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 470ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply reply(this, reply_message); 471ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen NetworkLibrary* network_library = CrosLibrary::Get()->GetNetworkLibrary(); 472ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const chromeos::WifiNetwork* wifi = network_library->wifi_network(); 473ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!wifi) { 474ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendError("Not connected to any wifi network."); 475ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 476ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 477ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 478ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen network_library->DisconnectFromNetwork(wifi); 479ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendSuccess(NULL); 480ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 481ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 482ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::GetUpdateInfo(DictionaryValue* args, 483ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message) { 484ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!EnsureCrosLibraryLoaded(this, reply_message)) 485ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 486ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 487ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen UpdateLibrary* update_library = CrosLibrary::Get()->GetUpdateLibrary(); 488ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply* reply = new AutomationJSONReply(this, reply_message); 489ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen update_library->GetReleaseTrack(GetReleaseTrackCallback, reply); 490ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 491ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 492ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::UpdateCheck( 493ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* args, 494ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message) { 495ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!EnsureCrosLibraryLoaded(this, reply_message)) 496ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 497ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 498ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen UpdateLibrary* update_library = CrosLibrary::Get()->GetUpdateLibrary(); 499ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply* reply = new AutomationJSONReply(this, reply_message); 500ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen update_library->RequestUpdateCheck(UpdateCheckCallback, reply); 501ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 502ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 503ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid TestingAutomationProvider::SetReleaseTrack(DictionaryValue* args, 504ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen IPC::Message* reply_message) { 505ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!EnsureCrosLibraryLoaded(this, reply_message)) 506ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 507ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 508ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen AutomationJSONReply reply(this, reply_message); 509ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string track; 510ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (!args->GetString("track", &track)) { 511ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendError("Invalid or missing args."); 512ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return; 513ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 514ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 515ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen UpdateLibrary* update_library = CrosLibrary::Get()->GetUpdateLibrary(); 516ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen update_library->SetReleaseTrack(track); 517ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen reply.SendSuccess(NULL); 518ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 519