1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/ref_counted.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/path_service.h" 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/strings/stringprintf.h" 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/extensions/extension_function_test_utils.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/extensions/application_launch.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/api/system_network/system_network_api.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/test_util.h" 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/test/extension_test_message_listener.h" 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using extensions::Extension; 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing extensions::core_api::SystemNetworkGetNetworkInterfacesFunction; 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing extensions::core_api::system_network::NetworkInterface; 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace utils = extension_function_test_utils; 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace { 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class SystemNetworkApiTest : public ExtensionApiTest { 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(SystemNetworkApiTest, SystemNetworkExtension) { 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(RunExtensionTest("system/network")) << message_; 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(SystemNetworkApiTest, GetNetworkInterfaces) { 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<SystemNetworkGetNetworkInterfacesFunction> socket_function( 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new SystemNetworkGetNetworkInterfacesFunction()); 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<Extension> empty_extension( 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extensions::test_util::CreateEmptyExtension()); 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) socket_function->set_extension(empty_extension.get()); 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) socket_function->set_has_callback(true); 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<base::Value> result(utils::RunFunctionAndReturnSingleResult( 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) socket_function.get(), "[]", browser(), utils::NONE)); 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_EQ(base::Value::TYPE_LIST, result->GetType()); 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // All we can confirm is that we have at least one address, but not what it 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // is. 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::ListValue *value = static_cast<base::ListValue*>(result.get()); 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(value->GetSize() > 0); 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (base::ListValue::const_iterator it = value->begin(); 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) it != value->end(); ++it) { 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Value* network_interface_value = *it; 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) NetworkInterface network_interface; 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(NetworkInterface::Populate(*network_interface_value, 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &network_interface)); 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) LOG(INFO) << "Network interface: address=" << network_interface.address 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) << ", name=" << network_interface.name 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) << ", prefix length=" << network_interface.prefix_length; 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NE(std::string(), network_interface.address); 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_NE(std::string(), network_interface.name); 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_LE(0, network_interface.prefix_length); 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 70