| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/extensions/api/system_network/system_network_api.h" |
| |
| namespace { |
| const char kNetworkListError[] = "Network lookup failed or unsupported"; |
| } // namespace |
| |
| namespace extensions { |
| namespace api { |
| |
| SystemNetworkGetNetworkInterfacesFunction:: |
| SystemNetworkGetNetworkInterfacesFunction() {} |
| |
| SystemNetworkGetNetworkInterfacesFunction:: |
| ~SystemNetworkGetNetworkInterfacesFunction() {} |
| |
| bool SystemNetworkGetNetworkInterfacesFunction::RunImpl() { |
| content::BrowserThread::PostTask(content::BrowserThread::FILE, FROM_HERE, |
| base::Bind(&SystemNetworkGetNetworkInterfacesFunction:: |
| GetListOnFileThread, |
| this)); |
| return true; |
| } |
| |
| void SystemNetworkGetNetworkInterfacesFunction::GetListOnFileThread() { |
| net::NetworkInterfaceList interface_list; |
| if (net::GetNetworkList(&interface_list)) { |
| content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, |
| base::Bind(&SystemNetworkGetNetworkInterfacesFunction:: |
| SendResponseOnUIThread, |
| this, interface_list)); |
| return; |
| } |
| |
| content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, |
| base::Bind(&SystemNetworkGetNetworkInterfacesFunction:: |
| HandleGetListError, |
| this)); |
| } |
| |
| void SystemNetworkGetNetworkInterfacesFunction::HandleGetListError() { |
| DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| error_ = kNetworkListError; |
| SendResponse(false); |
| } |
| |
| void SystemNetworkGetNetworkInterfacesFunction::SendResponseOnUIThread( |
| const net::NetworkInterfaceList& interface_list) { |
| DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| |
| std::vector<linked_ptr<api::system_network::NetworkInterface> > |
| create_arg; |
| create_arg.reserve(interface_list.size()); |
| for (net::NetworkInterfaceList::const_iterator i = interface_list.begin(); |
| i != interface_list.end(); ++i) { |
| linked_ptr<api::system_network::NetworkInterface> info = |
| make_linked_ptr(new api::system_network::NetworkInterface); |
| info->name = i->name; |
| info->address = net::IPAddressToString(i->address); |
| info->prefix_length = i->network_prefix; |
| create_arg.push_back(info); |
| } |
| |
| results_ = api::system_network::GetNetworkInterfaces::Results::Create( |
| create_arg); |
| SendResponse(true); |
| } |
| |
| } // namespace api |
| } // namespace extensions |