1424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// found in the LICENSE file.
4424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
5424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
6424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/prefs/pref_service.h"
7424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/prefs/testing_pref_store.h"
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager.h"
9424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/browser/sync/profile_sync_service_factory.h"
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/common/extensions/api/signed_in_devices.h"
11424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/common/pref_names.h"
12424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/test/base/testing_profile.h"
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/event_router.h"
14424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
15424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
16424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
17424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)namespace extensions {
18424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
19424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)namespace {
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)KeyedService* CreateProfileSyncServiceMock(content::BrowserContext* profile) {
21424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  return NULL;
22424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
23424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}  // namespace
24424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
25424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Adds a listener and removes it.
26424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)TEST(SignedInDevicesManager, UpdateListener) {
27424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  scoped_ptr<TestingProfile> profile(new TestingProfile());
28424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  profile->GetPrefs()->SetString(prefs::kGoogleServicesUsername, "foo");
29424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ProfileSyncServiceFactory::GetInstance()->SetTestingFactory(
30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      profile.get(), CreateProfileSyncServiceMock);
31424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  SignedInDevicesManager manager(profile.get());
32424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EventListenerInfo info(api::signed_in_devices::OnDeviceInfoChange::kEventName,
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                         "extension1",
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                         GURL(),
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                         profile.get());
37424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
38424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Add a listener.
39424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  manager.OnListenerAdded(info);
40424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  EXPECT_EQ(manager.change_observers_.size(), 1U);
41424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  EXPECT_EQ(manager.change_observers_[0]->extension_id(), info.extension_id);
42424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
43424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // Remove the listener.
44424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  manager.OnListenerRemoved(info);
45424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  EXPECT_TRUE(manager.change_observers_.empty());
46424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
47424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}  // namespace extensions
48