15f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// Copyright 2013 The Chromium Authors. All rights reserved.
25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// Use of this source code is governed by a BSD-style license that can be
35f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// found in the LICENSE file.
45f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner#include "base/bind.h"
60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner#include "base/callback.h"
75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "base/command_line.h"
85f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "base/macros.h"
92f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett#include "chrome/browser/browser_process.h"
102f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett#include "chrome/browser/extensions/extension_apitest.h"
112f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett#include "chrome/test/base/ui_test_utils.h"
122f7f5b1f5ff023cb8c4008ae53a12b09e3ea2622James Dennett#include "components/user_manager/user.h"
135f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "components/user_manager/user_manager.h"
145f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "extensions/common/switches.h"
155f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "testing/gmock/include/gmock/gmock.h"
165f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
175f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#if defined(OS_CHROMEOS)
18686775deca8b8685eb90801495880e3abdd844c2Chris Lattner#include "chrome/browser/chromeos/login/helper.h"
190ee7d94ece918f22e67d0f09fcbc631c91091adcArgyrios Kyrtzidis#include "chrome/browser/chromeos/net/network_portal_detector_test_impl.h"
2030a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth#include "chromeos/chromeos_switches.h"
21ae50fa0a9e7217b043ed4ffe175af4b26dc90f34Chris Lattner#include "chromeos/dbus/cryptohome_client.h"
2230a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth#include "chromeos/dbus/dbus_thread_manager.h"
23b328ee55d86acaafd55ebf0e0c84766b29459530Chad Rosier#include "chromeos/dbus/shill_device_client.h"
2430a2e16f6c27f888dd11eba6bbbae1e980078fcbChandler Carruth#include "chromeos/dbus/shill_ipconfig_client.h"
259dc1f530c086d2c16f8cba758b0f59a5bf41323aChris Lattner#include "chromeos/dbus/shill_manager_client.h"
269c728dc4d8da89c73fcae74c9e72d7a83ffd7b6dTed Kremenek#include "chromeos/dbus/shill_profile_client.h"
272b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner#include "chromeos/dbus/shill_service_client.h"
282b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner#include "chromeos/login/user_names.h"
2906159e878569e5f39bf0e8f11b84ac3ad0970597Chris Lattner#include "chromeos/network/onc/onc_utils.h"
309c728dc4d8da89c73fcae74c9e72d7a83ffd7b6dTed Kremenek#include "chromeos/network/portal_detector/network_portal_detector.h"
319c728dc4d8da89c73fcae74c9e72d7a83ffd7b6dTed Kremenek#include "components/onc/onc_constants.h"
325f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#include "components/policy/core/browser/browser_policy_connector.h"
331eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump#include "components/policy/core/common/external_data_fetcher.h"
34a9793ed6a77946c988ee38035baf4cde6ff2e864Ted Kremenek#include "components/policy/core/common/mock_configuration_policy_provider.h"
351eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump#include "components/policy/core/common/policy_map.h"
364bd495c2a4fc742dde435115f66c722217975bd2James Dennett#include "components/policy/core/common/policy_types.h"
374bd495c2a4fc742dde435115f66c722217975bd2James Dennett#include "content/public/browser/notification_observer.h"
382b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner#include "content/public/browser/notification_registrar.h"
392b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner#include "content/public/browser/notification_service.h"
40af50aab0c317462129d73ae8000c6394c718598dJames Dennett#include "content/public/browser/notification_source.h"
41af50aab0c317462129d73ae8000c6394c718598dJames Dennett#include "extensions/browser/notification_types.h"
42f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor#include "policy/policy_constants.h"
432b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner#include "third_party/cros_system_api/dbus/service_constants.h"
442b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner#else  // !defined(OS_CHROMEOS)
451eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump#include "chrome/browser/extensions/api/networking_private/networking_private_credentials_getter.h"
462b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner#include "chrome/browser/extensions/api/networking_private/networking_private_service_client.h"
471eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump#include "chrome/browser/extensions/api/networking_private/networking_private_service_client_factory.h"
482b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner#include "components/wifi/fake_wifi_service.h"
492b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner#endif  // defined(OS_CHROMEOS)
502b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner
512b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner// TODO(stevenjb/mef): Clean these tests up. crbug.com/371442
522b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner
532b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattnerusing testing::Return;
541eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpusing testing::_;
55f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor
56f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor#if defined(OS_CHROMEOS)
571eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpusing chromeos::CryptohomeClient;
582b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattnerusing chromeos::DBUS_METHOD_CALL_SUCCESS;
592b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattnerusing chromeos::DBusMethodCallStatus;
6031d375f056447d4e2418275d4913661d3bfedb3eDouglas Gregorusing chromeos::DBusThreadManager;
6131d375f056447d4e2418275d4913661d3bfedb3eDouglas Gregorusing chromeos::NetworkPortalDetector;
6231d375f056447d4e2418275d4913661d3bfedb3eDouglas Gregorusing chromeos::NetworkPortalDetectorTestImpl;
63f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregorusing chromeos::ShillDeviceClient;
642b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattnerusing chromeos::ShillIPConfigClient;
652b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattnerusing chromeos::ShillManagerClient;
662b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattnerusing chromeos::ShillProfileClient;
672b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattnerusing chromeos::ShillServiceClient;
68f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor#else  // !defined(OS_CHROMEOS)
692b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattnerusing extensions::NetworkingPrivateServiceClientFactory;
701eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump#endif  // defined(OS_CHROMEOS)
711eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
72f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregornamespace {
73f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor
74f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor#if defined(OS_CHROMEOS)
75f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregorconst char kUser1ProfilePath[] = "/profile/user1/shill";
76f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregorconst char kWifiDevicePath[] = "/device/stub_wifi_device1";
773201f382956ed9beee9fb31229c2835c1208889cChandler Carruthconst char kCellularDevicePath[] = "/device/stub_cellular_device1";
783201f382956ed9beee9fb31229c2835c1208889cChandler Carruthconst char kIPConfigPath[] = "/ipconfig/ipconfig1";
793201f382956ed9beee9fb31229c2835c1208889cChandler Carruth
80f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregorclass TestListener : public content::NotificationObserver {
81f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor public:
82f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor  TestListener(const std::string& message, const base::Closure& callback)
83f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor      : message_(message), callback_(callback) {
843201f382956ed9beee9fb31229c2835c1208889cChandler Carruth    registrar_.Add(this,
85f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor                   extensions::NOTIFICATION_EXTENSION_TEST_MESSAGE,
86f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor                   content::NotificationService::AllSources());
875f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  }
885f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
89bcc2a67e5180612417727cbdd8afd0f79fdf726dChris Lattner  virtual void Observe(int type,
905a4374812c56aa60672e291b07e14d3696bbb5a6Argyrios Kyrtzidis                       const content::NotificationSource& /* source */,
915a4374812c56aa60672e291b07e14d3696bbb5a6Argyrios Kyrtzidis                       const content::NotificationDetails& details) OVERRIDE {
92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    const std::string& message = *content::Details<std::string>(details).ptr();
93de7aeefc5573d669ed476d7bda7a8940d3bcadb7Chris Lattner    if (message == message_)
945f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer      callback_.Run();
959ebac5e0dab6f99717e3ff169c45048966146b2eChris Lattner  }
965f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
97f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor private:
981eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  std::string message_;
99de7aeefc5573d669ed476d7bda7a8940d3bcadb7Chris Lattner  base::Closure callback_;
100de7aeefc5573d669ed476d7bda7a8940d3bcadb7Chris Lattner
1011eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  content::NotificationRegistrar registrar_;
102f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor
103b7489d8129136437953d412e2a6cf0ef87f4a461Chris Lattner  DISALLOW_COPY_AND_ASSIGN(TestListener);
104f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor};
105f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor#else  // !defined(OS_CHROMEOS)
106f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor
107b7489d8129136437953d412e2a6cf0ef87f4a461Chris Lattner// Stub Verify* methods implementation to satisfy expectations of
108b7489d8129136437953d412e2a6cf0ef87f4a461Chris Lattner// networking_private_apitest.
1091eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump// TODO(mef): Fix ChromeOS implementation to use NetworkingPrivateCrypto,
1106fda54c19321673965536b0a8f7236f635cf9730Chris Lattner// and update networking_private_apitest to use and expect valid data.
111f62d43d2afe1960755a1b5813cae1e5983bcac1bDouglas Gregor// That will eliminate the need for mock implementation.
112de7aeefc5573d669ed476d7bda7a8940d3bcadb7Chris Lattnerclass CryptoVerifyStub
113de7aeefc5573d669ed476d7bda7a8940d3bcadb7Chris Lattner    : public extensions::NetworkingPrivateServiceClient::CryptoVerify {
1144d10ef18c32eae35be07e0d8d18b5ff485b4c5f9Chris Lattner  virtual void VerifyDestination(const Credentials& verification_properties,
1156fda54c19321673965536b0a8f7236f635cf9730Chris Lattner                                 bool* verified,
116de7aeefc5573d669ed476d7bda7a8940d3bcadb7Chris Lattner                                 std::string* error) OVERRIDE {
117de7aeefc5573d669ed476d7bda7a8940d3bcadb7Chris Lattner    *verified = true;
1189dc1f530c086d2c16f8cba758b0f59a5bf41323aChris Lattner  }
119de7aeefc5573d669ed476d7bda7a8940d3bcadb7Chris Lattner
1209dc1f530c086d2c16f8cba758b0f59a5bf41323aChris Lattner  virtual void VerifyAndEncryptCredentials(
1215f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer      const std::string& network_guid,
1221eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump      const Credentials& credentials,
123de7aeefc5573d669ed476d7bda7a8940d3bcadb7Chris Lattner      const VerifyAndEncryptCredentialsCallback& callback) OVERRIDE {
124de7aeefc5573d669ed476d7bda7a8940d3bcadb7Chris Lattner    callback.Run("encrypted_credentials", "");
125d1623a81992a24abbfcd5520b32a0dd90857b8a8Chris Lattner  }
126de7aeefc5573d669ed476d7bda7a8940d3bcadb7Chris Lattner
1279dc1f530c086d2c16f8cba758b0f59a5bf41323aChris Lattner  virtual void VerifyAndEncryptData(const Credentials& verification_properties,
1289dc1f530c086d2c16f8cba758b0f59a5bf41323aChris Lattner                                    const std::string& data,
1294d10ef18c32eae35be07e0d8d18b5ff485b4c5f9Chris Lattner                                    std::string* base64_encoded_ciphertext,
1301eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                                    std::string* error) OVERRIDE {
131a64ccefdf0ea4e03ec88805d71b0af74950c7472Argyrios Kyrtzidis    *base64_encoded_ciphertext = "encrypted_data";
132a64ccefdf0ea4e03ec88805d71b0af74950c7472Argyrios Kyrtzidis  }
133a64ccefdf0ea4e03ec88805d71b0af74950c7472Argyrios Kyrtzidis};
134a64ccefdf0ea4e03ec88805d71b0af74950c7472Argyrios Kyrtzidis#endif  // defined(OS_CHROMEOS)
135de7aeefc5573d669ed476d7bda7a8940d3bcadb7Chris Lattner
136de7aeefc5573d669ed476d7bda7a8940d3bcadb7Chris Lattnerclass ExtensionNetworkingPrivateApiTest
137de7aeefc5573d669ed476d7bda7a8940d3bcadb7Chris Lattner    : public ExtensionApiTest {
1389dc1f530c086d2c16f8cba758b0f59a5bf41323aChris Lattner public:
1391eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  ExtensionNetworkingPrivateApiTest()
1404bd495c2a4fc742dde435115f66c722217975bd2James Dennett#if defined(OS_CHROMEOS)
1414bd495c2a4fc742dde435115f66c722217975bd2James Dennett      : detector_(NULL),
1424bd495c2a4fc742dde435115f66c722217975bd2James Dennett        service_test_(NULL),
1434bd495c2a4fc742dde435115f66c722217975bd2James Dennett        manager_test_(NULL),
1444bd495c2a4fc742dde435115f66c722217975bd2James Dennett        device_test_(NULL)
1455f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer#endif
1461eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  {
1474bd495c2a4fc742dde435115f66c722217975bd2James Dennett  }
1485f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
1494bd495c2a4fc742dde435115f66c722217975bd2James Dennett  bool RunNetworkingSubtest(const std::string& subtest) {
1504bd495c2a4fc742dde435115f66c722217975bd2James Dennett    return RunExtensionSubtest(
1515f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        "networking", "main.html?" + subtest,
1525f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        kFlagEnableFileAccess | kFlagLoadAsComponent);
1535f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  }
1545f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
1555f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
1561eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump#if defined(OS_CHROMEOS)
1574bd495c2a4fc742dde435115f66c722217975bd2James Dennett    EXPECT_CALL(provider_, IsInitializationComplete(_))
1584bd495c2a4fc742dde435115f66c722217975bd2James Dennett        .WillRepeatedly(Return(true));
1594bd495c2a4fc742dde435115f66c722217975bd2James Dennett    policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
1604bd495c2a4fc742dde435115f66c722217975bd2James Dennett#endif
1614bd495c2a4fc742dde435115f66c722217975bd2James Dennett
162dec0984fce504a39a7f085774fb67cfd9957be58Jeffrey Yasskin    ExtensionApiTest::SetUpInProcessBrowserTestFixture();
163dec0984fce504a39a7f085774fb67cfd9957be58Jeffrey Yasskin  }
164dec0984fce504a39a7f085774fb67cfd9957be58Jeffrey Yasskin
165dec0984fce504a39a7f085774fb67cfd9957be58Jeffrey Yasskin#if defined(OS_CHROMEOS)
166dec0984fce504a39a7f085774fb67cfd9957be58Jeffrey Yasskin  static void AssignString(std::string* out,
167dec0984fce504a39a7f085774fb67cfd9957be58Jeffrey Yasskin                           DBusMethodCallStatus call_status,
1681216015de0a958860082a7fa8b504547197686c3James Dennett                           const std::string& result) {
169dec0984fce504a39a7f085774fb67cfd9957be58Jeffrey Yasskin    CHECK_EQ(call_status, DBUS_METHOD_CALL_SUCCESS);
1704a0beb20655ae9f28d519e088c6ec8dceec59eddJordan Rose    *out = result;
171dec0984fce504a39a7f085774fb67cfd9957be58Jeffrey Yasskin  }
172dec0984fce504a39a7f085774fb67cfd9957be58Jeffrey Yasskin
173dec0984fce504a39a7f085774fb67cfd9957be58Jeffrey Yasskin  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
1748cc488fefb2fb04bc8d5398da29f0182f97934cfChris Lattner    ExtensionApiTest::SetUpCommandLine(command_line);
175651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    // Whitelist the extension ID of the test extension.
176b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner    command_line->AppendSwitchASCII(
1775f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        extensions::switches::kWhitelistedExtensionID,
1785f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        "epcifkihnkjgphfkloaaleeakhpmgdmn");
1795f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
1805f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    // TODO(pneubeck): Remove the following hack, once the NetworkingPrivateAPI
1815f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    // uses the ProfileHelper to obtain the userhash crbug/238623.
1825f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    const std::string login_user = chromeos::login::CanonicalizeUserID(
1835f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        command_line->GetSwitchValueNative(chromeos::switches::kLoginUser));
1845f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    const std::string sanitized_user =
1855f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        CryptohomeClient::GetStubSanitizedUsername(login_user);
1861eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    command_line->AppendSwitchASCII(chromeos::switches::kLoginProfile,
1876fda54c19321673965536b0a8f7236f635cf9730Chris Lattner                                    sanitized_user);
1886fda54c19321673965536b0a8f7236f635cf9730Chris Lattner  }
1896fda54c19321673965536b0a8f7236f635cf9730Chris Lattner
1905f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer  void InitializeSanitizedUsername() {
191651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    user_manager::UserManager* user_manager = user_manager::UserManager::Get();
1925f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    user_manager::User* user = user_manager->GetActiveUser();
1935f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    CHECK(user);
1945f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    std::string userhash;
1955f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    DBusThreadManager::Get()->GetCryptohomeClient()->GetSanitizedUsername(
1965f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        user->email(),
1975f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer        base::Bind(&AssignString, &userhash_));
1985f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    content::RunAllPendingInMessageLoop();
1991eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    CHECK(!userhash_.empty());
200311ff02fae0392bee6abe7723cdf5a69b2899a47Chris Lattner  }
201311ff02fae0392bee6abe7723cdf5a69b2899a47Chris Lattner
2021eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  void SetupCellular() {
203e80a59cc41d42a970466cb020b6f44c5b8831d70Chris Lattner    // Add a Cellular Device and set a couple of properties.
204e80a59cc41d42a970466cb020b6f44c5b8831d70Chris Lattner    device_test_->AddDevice(
2051eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump        kCellularDevicePath, shill::kTypeCellular, "stub_cellular_device1");
2065f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer    device_test_->SetDeviceProperty(kCellularDevicePath,
207782f2f52b78d8ca785110398a7f7b56b830b9ac7Ted Kremenek                                    shill::kCarrierProperty,
2081eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                                    base::StringValue("Cellular1_Carrier"));
209a898283deb689b2454f3a966ef1cbf81bcb3e3e4Ted Kremenek    base::DictionaryValue home_provider;
210a898283deb689b2454f3a966ef1cbf81bcb3e3e4Ted Kremenek    home_provider.SetString("name", "Cellular1_Provider");
211a898283deb689b2454f3a966ef1cbf81bcb3e3e4Ted Kremenek    home_provider.SetString("country", "us");
2121eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    device_test_->SetDeviceProperty(kCellularDevicePath,
213a898283deb689b2454f3a966ef1cbf81bcb3e3e4Ted Kremenek                                    shill::kHomeProviderProperty,
214a898283deb689b2454f3a966ef1cbf81bcb3e3e4Ted Kremenek                                    home_provider);
215a898283deb689b2454f3a966ef1cbf81bcb3e3e4Ted Kremenek    AddService("stub_cellular1", "cellular1",
21619a95bcf3561ed977c48d5f2a2793b60a8c8e573Ted Kremenek               shill::kTypeCellular, shill::kStateIdle);
2170a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner    // Note: These properties will show up in a "Cellular" object in ONC.
218af50aab0c317462129d73ae8000c6394c718598dJames Dennett    service_test_->SetServiceProperty(
219af50aab0c317462129d73ae8000c6394c718598dJames Dennett        "stub_cellular1",
2200a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner        shill::kAutoConnectProperty,
2211f19c76253ae95153d84355c80342e8eaab81fe1Michael Han        base::FundamentalValue(true));
2220a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner    service_test_->SetServiceProperty(
2230a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner        "stub_cellular1",
2240a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner        shill::kNetworkTechnologyProperty,
2250a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner        base::StringValue(shill::kNetworkTechnologyGsm));
2260a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner    service_test_->SetServiceProperty(
2270a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner        "stub_cellular1",
2280a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner        shill::kActivationStateProperty,
2290a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner        base::StringValue(shill::kActivationStateNotActivated));
2304a2ef80d896c1bac38ce113ec19a8d509a619288Nico Weber    service_test_->SetServiceProperty(
2310a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner        "stub_cellular1",
2320a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner        shill::kRoamingStateProperty,
2334a2ef80d896c1bac38ce113ec19a8d509a619288Nico Weber        base::StringValue(shill::kRoamingStateHome));
2340a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner    content::RunAllPendingInMessageLoop();
2350a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner  }
2360a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner
2374a2ef80d896c1bac38ce113ec19a8d509a619288Nico Weber  void AddService(const std::string& service_path,
2380a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner                  const std::string& name,
2390a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner                  const std::string& type,
2400a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner                  const std::string& state) {
2410a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner    service_test_->AddService(
2420a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner        service_path, service_path + "_guid", name,
2430a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner        type, state, true /* add_to_visible */);
2440a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner  }
2450a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner
2460a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner  virtual void SetUpOnMainThread() OVERRIDE {
247af50aab0c317462129d73ae8000c6394c718598dJames Dennett    detector_ = new NetworkPortalDetectorTestImpl();
2480a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner    NetworkPortalDetector::InitializeForTesting(detector_);
2490a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner
2500a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner    ExtensionApiTest::SetUpOnMainThread();
251a83f4d2315dbeb3914868f1ccb8e74fb2ccdbb0cArgyrios Kyrtzidis    content::RunAllPendingInMessageLoop();
2520a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner
2530a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner    InitializeSanitizedUsername();
2540a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner
2550a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner    DBusThreadManager* dbus_manager = DBusThreadManager::Get();
2560a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner    manager_test_ = dbus_manager->GetShillManagerClient()->GetTestInterface();
2570a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner    service_test_ = dbus_manager->GetShillServiceClient()->GetTestInterface();
2580a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner    device_test_ = dbus_manager->GetShillDeviceClient()->GetTestInterface();
2590a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner
2600a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner    ShillIPConfigClient::TestInterface* ip_config_test =
2610a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner        dbus_manager->GetShillIPConfigClient()->GetTestInterface();
2620a76aae8c03cb7dd7bdbe683485560afaf695959Chris Lattner    ShillProfileClient::TestInterface* profile_test =
2631eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump        dbus_manager->GetShillProfileClient()->GetTestInterface();
264af50aab0c317462129d73ae8000c6394c718598dJames Dennett
265af50aab0c317462129d73ae8000c6394c718598dJames Dennett    device_test_->ClearDevices();
266af50aab0c317462129d73ae8000c6394c718598dJames Dennett    service_test_->ClearServices();
267a50bd54164393ca3cd08016e7099bdeb531b5014Chris Lattner
2685c5db4e94bd1243ba92563acba51ba66afa94917Chris Lattner    // Sends a notification about the added profile.
269a9793ed6a77946c988ee38035baf4cde6ff2e864Ted Kremenek    profile_test->AddProfile(kUser1ProfilePath, userhash_);
270af50aab0c317462129d73ae8000c6394c718598dJames Dennett
2715c5db4e94bd1243ba92563acba51ba66afa94917Chris Lattner    // Enable technologies.
272a9793ed6a77946c988ee38035baf4cde6ff2e864Ted Kremenek    manager_test_->AddTechnology("wimax", true);
2735c5db4e94bd1243ba92563acba51ba66afa94917Chris Lattner
274a50bd54164393ca3cd08016e7099bdeb531b5014Chris Lattner    // Add IPConfigs
2751eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    base::DictionaryValue ipconfig;
276af50aab0c317462129d73ae8000c6394c718598dJames Dennett    ipconfig.SetStringWithoutPathExpansion(shill::kAddressProperty, "0.0.0.0");
277b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner    ipconfig.SetStringWithoutPathExpansion(shill::kGatewayProperty, "0.0.0.1");
278b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner    ipconfig.SetIntegerWithoutPathExpansion(shill::kPrefixlenProperty, 0);
279a9793ed6a77946c988ee38035baf4cde6ff2e864Ted Kremenek    ipconfig.SetStringWithoutPathExpansion(shill::kMethodProperty,
280a9793ed6a77946c988ee38035baf4cde6ff2e864Ted Kremenek                                           shill::kTypeIPv4);
2811eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    ip_config_test->AddIPConfig(kIPConfigPath, ipconfig);
2823b4d5e955e819dd3a4bed37ea2e47d6e4cb05274Chris Lattner
2831eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    // Add Devices
284402785357ab053dd53f4fdd858b9630a5e0f8badChandler Carruth    device_test_->AddDevice(
285df7c17a8d02fe09a3466786bae3e40fc3252687aChris Lattner        kWifiDevicePath, shill::kTypeWifi, "stub_wifi_device1");
2869c728dc4d8da89c73fcae74c9e72d7a83ffd7b6dTed Kremenek    base::ListValue wifi_ip_configs;
287642116259e8df6286063a17361c20e95b5017a0aChandler Carruth    wifi_ip_configs.AppendString(kIPConfigPath);
288a77c031cb66f75d22672070052cc6e0205289ff8Chandler Carruth    device_test_->SetDeviceProperty(
2899c728dc4d8da89c73fcae74c9e72d7a83ffd7b6dTed Kremenek        kWifiDevicePath, shill::kIPConfigsProperty, wifi_ip_configs);
29064e462dff03492c586be0349ec6aa3ad5cd92720Douglas Gregor    device_test_->SetDeviceProperty(kWifiDevicePath,
29164e462dff03492c586be0349ec6aa3ad5cd92720Douglas Gregor                                    shill::kAddressProperty,
2925c38b6388dc44dcb8467a9e0f22d93db7221717eChris Lattner                                    base::StringValue("001122aabbcc"));
293a543016fe07030f695d6d56fd22c8c8da617e0d7Douglas Gregor
2941eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    // Add Services
295aae58b0c3efb5fa9f97a3e4b1c1a2d31077efe5bDouglas Gregor    AddService("stub_ethernet", "eth0",
2961eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump               shill::kTypeEthernet, shill::kStateOnline);
297af50aab0c317462129d73ae8000c6394c718598dJames Dennett    service_test_->SetServiceProperty(
298ceafc4b63599d14f0b5b10ff92e22bf242682dceBenjamin Kramer        "stub_ethernet",
299686775deca8b8685eb90801495880e3abdd844c2Chris Lattner        shill::kProfileProperty,
3001eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump        base::StringValue(ShillProfileClient::GetSharedProfilePath()));
301af50aab0c317462129d73ae8000c6394c718598dJames Dennett    profile_test->AddService(ShillProfileClient::GetSharedProfilePath(),
302af50aab0c317462129d73ae8000c6394c718598dJames Dennett                             "stub_ethernet");
303af50aab0c317462129d73ae8000c6394c718598dJames Dennett
304af50aab0c317462129d73ae8000c6394c718598dJames Dennett    AddService("stub_wifi1", "wifi1", shill::kTypeWifi, shill::kStateOnline);
305321abd4583dc02a254489132c5ccbe125d18ce4fTed Kremenek    service_test_->SetServiceProperty("stub_wifi1",
306321abd4583dc02a254489132c5ccbe125d18ce4fTed Kremenek                                      shill::kSecurityProperty,
3077bfaaaecb3113f955db31e8d8a51acffd1bc0c27Nico Weber                                      base::StringValue(shill::kSecurityWep));
3081eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    service_test_->SetServiceProperty("stub_wifi1",
3090827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis                                      shill::kSignalStrengthProperty,
3100827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis                                      base::FundamentalValue(40));
3110827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis    service_test_->SetServiceProperty("stub_wifi1",
3120827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis                                      shill::kProfileProperty,
3130827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis                                      base::StringValue(kUser1ProfilePath));
3140827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis    service_test_->SetServiceProperty("stub_wifi1",
3150827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis                                      shill::kConnectableProperty,
3160827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis                                      base::FundamentalValue(true));
3170827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis    service_test_->SetServiceProperty("stub_wifi1",
3180827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis                                      shill::kDeviceProperty,
3190827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis                                      base::StringValue(kWifiDevicePath));
3200827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis    profile_test->AddService(kUser1ProfilePath, "stub_wifi1");
3210827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis    base::ListValue frequencies1;
3220827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis    frequencies1.AppendInteger(2400);
3238f89652be7bb85bdac83c37fec85f20cdd2dfc83Argyrios Kyrtzidis    service_test_->SetServiceProperty("stub_wifi1",
3248f89652be7bb85bdac83c37fec85f20cdd2dfc83Argyrios Kyrtzidis                                      shill::kWifiFrequencyListProperty,
3258f89652be7bb85bdac83c37fec85f20cdd2dfc83Argyrios Kyrtzidis                                      frequencies1);
3268f89652be7bb85bdac83c37fec85f20cdd2dfc83Argyrios Kyrtzidis    service_test_->SetServiceProperty("stub_wifi1",
3278f89652be7bb85bdac83c37fec85f20cdd2dfc83Argyrios Kyrtzidis                                      shill::kWifiFrequency,
3288f89652be7bb85bdac83c37fec85f20cdd2dfc83Argyrios Kyrtzidis                                      base::FundamentalValue(2400));
3298f89652be7bb85bdac83c37fec85f20cdd2dfc83Argyrios Kyrtzidis
3308f89652be7bb85bdac83c37fec85f20cdd2dfc83Argyrios Kyrtzidis    AddService("stub_wifi2", "wifi2_PSK", shill::kTypeWifi, shill::kStateIdle);
331af50aab0c317462129d73ae8000c6394c718598dJames Dennett    service_test_->SetServiceProperty("stub_wifi2",
332af50aab0c317462129d73ae8000c6394c718598dJames Dennett                                      shill::kSecurityProperty,
333af50aab0c317462129d73ae8000c6394c718598dJames Dennett                                      base::StringValue(shill::kSecurityPsk));
334651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines    service_test_->SetServiceProperty("stub_wifi2",
335a9793ed6a77946c988ee38035baf4cde6ff2e864Ted Kremenek                                      shill::kSignalStrengthProperty,
3361eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                                      base::FundamentalValue(80));
3370b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor    service_test_->SetServiceProperty("stub_wifi2",
3380b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor                                      shill::kConnectableProperty,
3390b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor                                      base::FundamentalValue(true));
3400b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor
341a50bd54164393ca3cd08016e7099bdeb531b5014Chris Lattner    AddService("stub_wimax", "wimax", shill::kTypeWimax, shill::kStateOnline);
3421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    service_test_->SetServiceProperty("stub_wimax",
3430b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor                                      shill::kSignalStrengthProperty,
3440b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor                                      base::FundamentalValue(40));
3450b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor    service_test_->SetServiceProperty("stub_wimax",
3460b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor                                      shill::kProfileProperty,
3470b7a158d120ac8d78c114a823e17eedfec6b6658Douglas Gregor                                      base::StringValue(kUser1ProfilePath));
3481eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    service_test_->SetServiceProperty("stub_wimax",
349af50aab0c317462129d73ae8000c6394c718598dJames Dennett                                      shill::kConnectableProperty,
350af50aab0c317462129d73ae8000c6394c718598dJames Dennett                                      base::FundamentalValue(true));
351af50aab0c317462129d73ae8000c6394c718598dJames Dennett    profile_test->AddService(kUser1ProfilePath, "stub_wimax");
352af50aab0c317462129d73ae8000c6394c718598dJames Dennett
353af50aab0c317462129d73ae8000c6394c718598dJames Dennett    base::ListValue frequencies2;
354b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner    frequencies2.AppendInteger(2400);
355b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner    frequencies2.AppendInteger(5000);
356b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner    service_test_->SetServiceProperty("stub_wifi2",
357b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner                                      shill::kWifiFrequencyListProperty,
358b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner                                      frequencies2);
359b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner    service_test_->SetServiceProperty("stub_wifi2",
360b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner                                      shill::kWifiFrequency,
361b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner                                      base::FundamentalValue(5000));
362b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner    service_test_->SetServiceProperty("stub_wifi2",
363b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner                                      shill::kProfileProperty,
364b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner                                      base::StringValue(kUser1ProfilePath));
3651eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    profile_test->AddService(kUser1ProfilePath, "stub_wifi2");
366af50aab0c317462129d73ae8000c6394c718598dJames Dennett
367af50aab0c317462129d73ae8000c6394c718598dJames Dennett    AddService("stub_vpn1", "vpn1", shill::kTypeVPN, shill::kStateOnline);
368af50aab0c317462129d73ae8000c6394c718598dJames Dennett
369af50aab0c317462129d73ae8000c6394c718598dJames Dennett    content::RunAllPendingInMessageLoop();
370b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner  }
371b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner#else  // !defined(OS_CHROMEOS)
3721eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
3734bd495c2a4fc742dde435115f66c722217975bd2James Dennett    ExtensionApiTest::SetUpCommandLine(command_line);
3744bd495c2a4fc742dde435115f66c722217975bd2James Dennett    // Whitelist the extension ID of the test extension.
3754bd495c2a4fc742dde435115f66c722217975bd2James Dennett    command_line->AppendSwitchASCII(
376b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner        extensions::switches::kWhitelistedExtensionID,
377b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner        "epcifkihnkjgphfkloaaleeakhpmgdmn");
3784bd495c2a4fc742dde435115f66c722217975bd2James Dennett  }
3794bd495c2a4fc742dde435115f66c722217975bd2James Dennett
3804bd495c2a4fc742dde435115f66c722217975bd2James Dennett  static KeyedService* CreateNetworkingPrivateServiceClient(
381b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner      content::BrowserContext* profile) {
3821eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    return new extensions::NetworkingPrivateServiceClient(
3834bd495c2a4fc742dde435115f66c722217975bd2James Dennett        new wifi::FakeWiFiService(), new CryptoVerifyStub());
3844bd495c2a4fc742dde435115f66c722217975bd2James Dennett  }
3854bd495c2a4fc742dde435115f66c722217975bd2James Dennett
386b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner  virtual void SetUpOnMainThread() OVERRIDE {
387b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner    ExtensionApiTest::SetUpOnMainThread();
3884bd495c2a4fc742dde435115f66c722217975bd2James Dennett    content::RunAllPendingInMessageLoop();
3894bd495c2a4fc742dde435115f66c722217975bd2James Dennett    NetworkingPrivateServiceClientFactory::GetInstance()->SetTestingFactory(
390b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner        profile(),
391b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner        &CreateNetworkingPrivateServiceClient);
392b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner  }
393b9c3f966b103f7cfe8e5e60007c4c8b38f7298ebChris Lattner
3941eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump#endif  // OS_CHROMEOS
395beb7713c6102687f7e49e27b8228e84a69d8f6c6Ted Kremenek
39619a95bcf3561ed977c48d5f2a2793b60a8c8e573Ted Kremenek protected:
3972b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner#if defined(OS_CHROMEOS)
3982b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner  NetworkPortalDetectorTestImpl* detector() { return detector_; }
3992b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner
4002b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner  NetworkPortalDetectorTestImpl* detector_;
4012b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner  ShillServiceClient::TestInterface* service_test_;
4022b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner  ShillManagerClient::TestInterface* manager_test_;
4032b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner  ShillDeviceClient::TestInterface* device_test_;
4042b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner  policy::MockConfigurationPolicyProvider provider_;
4052b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner  std::string userhash_;
4061eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump#endif
4072b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner};
4081eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
4092b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner// Place each subtest into a separate browser test so that the stub networking
4102b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner// library state is reset for each subtest run. This way they won't affect each
4112b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner// other.
4121eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
4132b2453a7d8fe732561795431f39ceb2b2a832d84Chris LattnerIN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest, StartConnect) {
4142b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner  EXPECT_TRUE(RunNetworkingSubtest("startConnect")) << message_;
4152b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner}
4162b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner
41706159e878569e5f39bf0e8f11b84ac3ad0970597Chris LattnerIN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest, StartDisconnect) {
41806159e878569e5f39bf0e8f11b84ac3ad0970597Chris Lattner  EXPECT_TRUE(RunNetworkingSubtest("startDisconnect")) << message_;
41906159e878569e5f39bf0e8f11b84ac3ad0970597Chris Lattner}
42006159e878569e5f39bf0e8f11b84ac3ad0970597Chris Lattner
42106159e878569e5f39bf0e8f11b84ac3ad0970597Chris LattnerIN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest,
4221eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                       StartConnectNonexistent) {
4230827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis  EXPECT_TRUE(RunNetworkingSubtest("startConnectNonexistent")) << message_;
4240827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis}
4250827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis
4260827408865e32789e0ec4b8113a302ccdc531423Argyrios KyrtzidisIN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest,
4270827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis                       StartDisconnectNonexistent) {
428dec0984fce504a39a7f085774fb67cfd9957be58Jeffrey Yasskin  EXPECT_TRUE(RunNetworkingSubtest("startDisconnectNonexistent")) << message_;
4290827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis}
4300827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis
4310827408865e32789e0ec4b8113a302ccdc531423Argyrios KyrtzidisIN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest,
4320827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis                       StartGetPropertiesNonexistent) {
4330827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis  EXPECT_TRUE(RunNetworkingSubtest("startGetPropertiesNonexistent"))
4340827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis      << message_;
4350827408865e32789e0ec4b8113a302ccdc531423Argyrios Kyrtzidis}
4362b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner
4372b2453a7d8fe732561795431f39ceb2b2a832d84Chris Lattner#if defined(OS_CHROMEOS)
4385f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// TODO(stevenjb/mef): Fix these on non-Chrome OS, crbug.com/371442.
439IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest, GetNetworks) {
440  // Hide stub_wifi2.
441  service_test_->SetServiceProperty("stub_wifi2",
442                                    shill::kVisibleProperty,
443                                    base::FundamentalValue(false));
444  // Add a couple of additional networks that are not configured (saved).
445  AddService("stub_wifi3", "wifi3", shill::kTypeWifi, shill::kStateIdle);
446  AddService("stub_wifi4", "wifi4", shill::kTypeWifi, shill::kStateIdle);
447  content::RunAllPendingInMessageLoop();
448  EXPECT_TRUE(RunNetworkingSubtest("getNetworks")) << message_;
449}
450
451IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest, GetVisibleNetworks) {
452  EXPECT_TRUE(RunNetworkingSubtest("getVisibleNetworks")) << message_;
453}
454#endif
455
456IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest,
457                       GetVisibleNetworksWifi) {
458  EXPECT_TRUE(RunNetworkingSubtest("getVisibleNetworksWifi")) << message_;
459}
460
461#if defined(OS_CHROMEOS)
462// TODO(stevenjb/mef): Fix this on non-Chrome OS, crbug.com/371442.
463IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest, RequestNetworkScan) {
464  EXPECT_TRUE(RunNetworkingSubtest("requestNetworkScan")) << message_;
465}
466#endif
467
468// Properties are filtered and translated through
469// ShillToONCTranslator::TranslateWiFiWithState
470IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest, GetProperties) {
471  EXPECT_TRUE(RunNetworkingSubtest("getProperties")) << message_;
472}
473
474#if defined(OS_CHROMEOS)
475IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest,
476                       GetCellularProperties) {
477  SetupCellular();
478  EXPECT_TRUE(RunNetworkingSubtest("getPropertiesCellular")) << message_;
479}
480#endif
481
482IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest, GetState) {
483  EXPECT_TRUE(RunNetworkingSubtest("getState")) << message_;
484}
485
486IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest, GetStateNonExistent) {
487  EXPECT_TRUE(RunNetworkingSubtest("getStateNonExistent")) << message_;
488}
489
490IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest, SetProperties) {
491  EXPECT_TRUE(RunNetworkingSubtest("setProperties")) << message_;
492}
493
494IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest, CreateNetwork) {
495  EXPECT_TRUE(RunNetworkingSubtest("createNetwork")) << message_;
496}
497
498#if defined(OS_CHROMEOS)
499// TODO(stevenjb/mef): Find a maintainable way to support this on win/mac and
500// a better way to set this up on Chrome OS.
501IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest,
502                       GetManagedProperties) {
503  const std::string uidata_blob =
504      "{ \"user_settings\": {"
505      "      \"WiFi\": {"
506      "        \"Passphrase\": \"FAKE_CREDENTIAL_VPaJDV9x\" }"
507      "    }"
508      "}";
509  service_test_->SetServiceProperty("stub_wifi2",
510                                    shill::kUIDataProperty,
511                                    base::StringValue(uidata_blob));
512  service_test_->SetServiceProperty("stub_wifi2",
513                                    shill::kAutoConnectProperty,
514                                    base::FundamentalValue(false));
515
516  ShillProfileClient::TestInterface* profile_test =
517      DBusThreadManager::Get()->GetShillProfileClient()->GetTestInterface();
518  // Update the profile entry.
519  profile_test->AddService(kUser1ProfilePath, "stub_wifi2");
520
521  content::RunAllPendingInMessageLoop();
522
523  const std::string user_policy_blob =
524      "{ \"NetworkConfigurations\": ["
525      "    { \"GUID\": \"stub_wifi2\","
526      "      \"Type\": \"WiFi\","
527      "      \"Name\": \"My WiFi Network\","
528      "      \"WiFi\": {"
529      "        \"Passphrase\": \"passphrase\","
530      "        \"Recommended\": [ \"AutoConnect\", \"Passphrase\" ],"
531      "        \"SSID\": \"wifi2_PSK\","
532      "        \"Security\": \"WPA-PSK\" }"
533      "    }"
534      "  ],"
535      "  \"Certificates\": [],"
536      "  \"Type\": \"UnencryptedConfiguration\""
537      "}";
538
539  policy::PolicyMap policy;
540  policy.Set(policy::key::kOpenNetworkConfiguration,
541             policy::POLICY_LEVEL_MANDATORY,
542             policy::POLICY_SCOPE_USER,
543             new base::StringValue(user_policy_blob),
544             NULL);
545  provider_.UpdateChromePolicy(policy);
546
547  content::RunAllPendingInMessageLoop();
548
549  EXPECT_TRUE(RunNetworkingSubtest("getManagedProperties")) << message_;
550}
551#endif  // OS_CHROMEOS
552
553IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest,
554                       OnNetworksChangedEventConnect) {
555  EXPECT_TRUE(RunNetworkingSubtest("onNetworksChangedEventConnect"))
556      << message_;
557}
558
559IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest,
560                       OnNetworksChangedEventDisconnect) {
561  EXPECT_TRUE(RunNetworkingSubtest("onNetworksChangedEventDisconnect"))
562      << message_;
563}
564
565#if defined(OS_CHROMEOS)
566// TODO(stevenjb/mef): Fix this on non-Chrome OS, crbug.com/371442.
567IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest,
568                       OnNetworkListChangedEvent) {
569  EXPECT_TRUE(RunNetworkingSubtest("onNetworkListChangedEvent")) << message_;
570}
571#endif  // OS_CHROMEOS
572
573IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest,
574                       VerifyDestination) {
575  EXPECT_TRUE(RunNetworkingSubtest("verifyDestination")) << message_;
576}
577
578IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest,
579                       VerifyAndEncryptCredentials) {
580  EXPECT_TRUE(RunNetworkingSubtest("verifyAndEncryptCredentials")) << message_;
581}
582
583IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest,
584                       VerifyAndEncryptData) {
585  EXPECT_TRUE(RunNetworkingSubtest("verifyAndEncryptData")) << message_;
586}
587
588#if defined(OS_CHROMEOS)
589// Currently TDLS support is only enabled for Chrome OS.
590IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest,
591                       SetWifiTDLSEnabledState) {
592  EXPECT_TRUE(RunNetworkingSubtest("setWifiTDLSEnabledState")) << message_;
593}
594
595IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest,
596                       GetWifiTDLSStatus) {
597  EXPECT_TRUE(RunNetworkingSubtest("getWifiTDLSStatus")) << message_;
598}
599#endif
600
601// NetworkPortalDetector is only enabled for Chrome OS.
602#if defined(OS_CHROMEOS)
603IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest,
604                       GetCaptivePortalStatus) {
605  SetupCellular();
606
607  NetworkPortalDetector::CaptivePortalState state;
608  state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE;
609  detector()->SetDetectionResultsForTesting("stub_ethernet_guid", state);
610
611  state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_OFFLINE;
612  detector()->SetDetectionResultsForTesting("stub_wifi1_guid", state);
613
614  state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PORTAL;
615  detector()->SetDetectionResultsForTesting("stub_wifi2_guid", state);
616
617  state.status =
618      NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_PROXY_AUTH_REQUIRED;
619  detector()->SetDetectionResultsForTesting("stub_cellular1_guid", state);
620
621  EXPECT_TRUE(RunNetworkingSubtest("getCaptivePortalStatus")) << message_;
622}
623
624IN_PROC_BROWSER_TEST_F(ExtensionNetworkingPrivateApiTest,
625                       CaptivePortalNotification) {
626  detector()->SetDefaultNetworkForTesting("wifi_guid");
627  NetworkPortalDetector::CaptivePortalState state;
628  state.status = NetworkPortalDetector::CAPTIVE_PORTAL_STATUS_ONLINE;
629  detector()->SetDetectionResultsForTesting("wifi_guid", state);
630
631  TestListener listener(
632      "notifyPortalDetectorObservers",
633      base::Bind(&NetworkPortalDetectorTestImpl::NotifyObserversForTesting,
634                 base::Unretained(detector())));
635  EXPECT_TRUE(RunNetworkingSubtest("captivePortalNotification")) << message_;
636}
637#endif  // defined(OS_CHROMEOS)
638
639}  // namespace
640