1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include <string> 6 7 #include <vector> 8 9 #include "base/guid.h" 10 #include "base/message_loop/message_loop.h" 11 #include "chrome/browser/extensions/api/signedin_devices/signedin_devices_api.h" 12 #include "chrome/browser/extensions/test_extension_prefs.h" 13 #include "chrome/browser/sync/glue/device_info.h" 14 #include "chrome/browser/sync/profile_sync_service_mock.h" 15 #include "chrome/common/extensions/extension.h" 16 #include "chrome/common/extensions/extension_manifest_constants.h" 17 #include "testing/gmock/include/gmock/gmock.h" 18 #include "testing/gtest/include/gtest/gtest.h" 19 20 using extensions::Extension; 21 using extensions::TestExtensionPrefs; 22 using browser_sync::DeviceInfo; 23 using testing::Return; 24 25 namespace extensions { 26 27 TEST(SignedinDevicesAPITest, GetSignedInDevices) { 28 ProfileSyncServiceMock pss_mock; 29 base::MessageLoop message_loop_; 30 TestExtensionPrefs extension_prefs( 31 message_loop_.message_loop_proxy().get()); 32 33 // Add a couple of devices and make sure we get back public ids for them. 34 std::string extension_name = "test"; 35 scoped_refptr<Extension> extension_test = 36 extension_prefs.AddExtension(extension_name); 37 38 DeviceInfo device_info1( 39 base::GenerateGUID(), 40 "abc Device", "XYZ v1", "XYZ SyncAgent v1", 41 sync_pb::SyncEnums_DeviceType_TYPE_LINUX); 42 43 DeviceInfo device_info2( 44 base::GenerateGUID(), 45 "def Device", "XYZ v2", "XYZ SyncAgent v2", 46 sync_pb::SyncEnums_DeviceType_TYPE_LINUX); 47 48 std::vector<DeviceInfo*> devices; 49 devices.push_back(&device_info1); 50 devices.push_back(&device_info2); 51 52 EXPECT_CALL(pss_mock, GetAllSignedInDevicesMock()). 53 WillOnce(Return(&devices)); 54 55 ScopedVector<DeviceInfo> output1 = GetAllSignedInDevices( 56 extension_test.get()->id(), 57 &pss_mock, 58 extension_prefs.prefs()); 59 60 std::string public_id1 = device_info1.public_id(); 61 std::string public_id2 = device_info2.public_id(); 62 63 EXPECT_FALSE(public_id1.empty()); 64 EXPECT_FALSE(public_id2.empty()); 65 EXPECT_NE(public_id1, public_id2); 66 67 // Now clear output1 so its destructor will not destroy the pointers for 68 // |device_info1| and |device_info2|. 69 output1.weak_clear(); 70 71 // Add a third device and make sure the first 2 ids are retained and a new 72 // id is generated for the third device. 73 DeviceInfo device_info3( 74 base::GenerateGUID(), 75 "def Device", "jkl v2", "XYZ SyncAgent v2", 76 sync_pb::SyncEnums_DeviceType_TYPE_LINUX); 77 78 devices.push_back(&device_info3); 79 80 EXPECT_CALL(pss_mock, GetAllSignedInDevicesMock()). 81 WillOnce(Return(&devices)); 82 83 ScopedVector<DeviceInfo> output2 = GetAllSignedInDevices( 84 extension_test.get()->id(), 85 &pss_mock, 86 extension_prefs.prefs()); 87 88 EXPECT_EQ(device_info1.public_id(), public_id1); 89 EXPECT_EQ(device_info2.public_id(), public_id2); 90 91 std::string public_id3 = device_info3.public_id(); 92 EXPECT_FALSE(public_id3.empty()); 93 EXPECT_NE(public_id3, public_id1); 94 EXPECT_NE(public_id3, public_id2); 95 96 // Now clear output2 so that its destructor does not destroy the 97 // |DeviceInfo| pointers. 98 output2.weak_clear(); 99 } 100 101 } // namespace extensions 102