net_info_browsertest.cc revision 5f1c94371a64b3196d4be9466099bb892df9b88e
1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/command_line.h" 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/run_loop.h" 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/common/content_switches.h" 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/test/browser_test_utils.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/test/content_browser_test.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/test/content_browser_test_utils.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/shell/browser/shell.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "net/base/network_change_notifier.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "net/base/network_change_notifier_factory.h" 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass NetInfoBrowserTest : public content::ContentBrowserTest { 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch protected: 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE { 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // TODO(jkarlin): Once NetInfo is enabled on all platforms remove this 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // switch. 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) command_line->AppendSwitch(switches::kEnableNetworkInformation); 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_CHROMEOS) 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SetUp() OVERRIDE { 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // ChromeOS's NetworkChangeNotifier isn't known to content and therefore 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // doesn't get created in content_browsertests. Insert a mock 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // NetworkChangeNotifier. 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch net::NetworkChangeNotifier::CreateMock(); 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::ContentBrowserTest::SetUp(); 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SetUpOnMainThread() OVERRIDE { 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch net::NetworkChangeNotifier::SetTestNotificationsOnly(true); 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static void SetConnectionType( 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch net::NetworkChangeNotifier::ConnectionType type) { 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch net::NetworkChangeNotifier::NotifyObserversOfConnectionTypeChangeForTests( 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch type); 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::RunLoop().RunUntilIdle(); 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string RunScriptExtractString(const std::string& script) { 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string data; 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE( 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExecuteScriptAndExtractString(shell()->web_contents(), script, &data)); 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return data; 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool RunScriptExtractBool(const std::string& script) { 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool data; 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE( 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExecuteScriptAndExtractBool(shell()->web_contents(), script, &data)); 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return data; 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Make sure that type changes in the browser make their way to 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// navigator.connection.type. 62116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(NetInfoBrowserTest, NetworkChangePlumbsToNavigator) { 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NavigateToURL(shell(), content::GetTestUrl("", "net_info.html")); 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetConnectionType(net::NetworkChangeNotifier::CONNECTION_WIFI); 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ("wifi", RunScriptExtractString("getType()")); 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetConnectionType(net::NetworkChangeNotifier::CONNECTION_ETHERNET); 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ("ethernet", RunScriptExtractString("getType()")); 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Make sure that type changes in the browser make their way to 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// navigator.isOnline. 72116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(NetInfoBrowserTest, IsOnline) { 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NavigateToURL(shell(), content::GetTestUrl("", "net_info.html")); 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetConnectionType(net::NetworkChangeNotifier::CONNECTION_ETHERNET); 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(RunScriptExtractBool("getOnLine()")); 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetConnectionType(net::NetworkChangeNotifier::CONNECTION_NONE); 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(RunScriptExtractBool("getOnLine()")); 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetConnectionType(net::NetworkChangeNotifier::CONNECTION_WIFI); 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(RunScriptExtractBool("getOnLine()")); 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 81