Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/extensions/api/signed_in_devices/signed_in_devices_api. h" | 5 #include "chrome/browser/extensions/api/signed_in_devices/signed_in_devices_api. h" |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/memory/scoped_vector.h" | 8 #include "base/memory/scoped_vector.h" |
| 9 #include "base/values.h" | 9 #include "base/values.h" |
| 10 #include "chrome/browser/extensions/api/signed_in_devices/id_mapping_helper.h" | 10 #include "chrome/browser/extensions/api/signed_in_devices/id_mapping_helper.h" |
| 11 #include "chrome/browser/profiles/profile.h" | 11 #include "chrome/browser/profiles/profile.h" |
| 12 #include "chrome/browser/sync/glue/device_info.h" | 12 #include "chrome/browser/sync/glue/device_info_tracker.h" |
| 13 #include "chrome/browser/sync/glue/local_device_info_provider.h" | 13 #include "chrome/browser/sync/glue/local_device_info_provider.h" |
| 14 #include "chrome/browser/sync/profile_sync_service.h" | 14 #include "chrome/browser/sync/profile_sync_service.h" |
| 15 #include "chrome/browser/sync/profile_sync_service_factory.h" | 15 #include "chrome/browser/sync/profile_sync_service_factory.h" |
| 16 #include "chrome/common/extensions/api/signed_in_devices.h" | 16 #include "chrome/common/extensions/api/signed_in_devices.h" |
| 17 #include "extensions/browser/extension_prefs.h" | 17 #include "extensions/browser/extension_prefs.h" |
| 18 | 18 |
| 19 using base::DictionaryValue; | 19 using base::DictionaryValue; |
| 20 using browser_sync::DeviceInfo; | 20 using browser_sync::DeviceInfo; |
| 21 using browser_sync::DeviceInfoTracker; | |
| 21 using browser_sync::LocalDeviceInfoProvider; | 22 using browser_sync::LocalDeviceInfoProvider; |
| 22 | 23 |
| 23 namespace extensions { | 24 namespace extensions { |
| 24 | 25 |
| 25 static const char kPrefStringForIdMapping[] = "id_mapping_dictioanry"; | 26 static const char kPrefStringForIdMapping[] = "id_mapping_dictioanry"; |
| 26 | 27 |
| 27 // Gets the dictionary that stores the id mapping. The dictionary is stored | 28 // Gets the dictionary that stores the id mapping. The dictionary is stored |
| 28 // in the |ExtensionPrefs|. | 29 // in the |ExtensionPrefs|. |
| 29 const base::DictionaryValue* GetIdMappingDictionary( | 30 const base::DictionaryValue* GetIdMappingDictionary( |
| 30 ExtensionPrefs* extension_prefs, | 31 ExtensionPrefs* extension_prefs, |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 41 extension_prefs->UpdateExtensionPref( | 42 extension_prefs->UpdateExtensionPref( |
| 42 extension_id, | 43 extension_id, |
| 43 kPrefStringForIdMapping, | 44 kPrefStringForIdMapping, |
| 44 dictionary.release()); | 45 dictionary.release()); |
| 45 } | 46 } |
| 46 | 47 |
| 47 return out_value; | 48 return out_value; |
| 48 } | 49 } |
| 49 | 50 |
| 50 // Helper routine to get all signed in devices. The helper takes in | 51 // Helper routine to get all signed in devices. The helper takes in |
| 51 // the pointers for |ProfileSyncService| and |Extensionprefs|. This | 52 // the pointers for |DeviceInfoTracker| and |Extensionprefs|. This |
| 52 // makes it easier to test by passing mock values for these pointers. | 53 // makes it easier to test by passing mock values for these pointers. |
| 53 ScopedVector<DeviceInfo> GetAllSignedInDevices( | 54 ScopedVector<DeviceInfo> GetAllSignedInDevices( |
| 54 const std::string& extension_id, | 55 const std::string& extension_id, |
| 55 ProfileSyncService* pss, | 56 DeviceInfoTracker* device_tracker, |
| 56 ExtensionPrefs* extension_prefs) { | 57 ExtensionPrefs* extension_prefs) { |
| 57 ScopedVector<DeviceInfo> devices = pss->GetAllSignedInDevices(); | 58 ScopedVector<DeviceInfo> devices = device_tracker->GetAllDeviceInfo(); |
| 58 const base::DictionaryValue* mapping_dictionary = GetIdMappingDictionary( | 59 const base::DictionaryValue* mapping_dictionary = GetIdMappingDictionary( |
| 59 extension_prefs, | 60 extension_prefs, |
| 60 extension_id); | 61 extension_id); |
| 61 | 62 |
| 62 CHECK(mapping_dictionary); | 63 CHECK(mapping_dictionary); |
| 63 | 64 |
| 64 // |mapping_dictionary| is const. So make an editable copy. | 65 // |mapping_dictionary| is const. So make an editable copy. |
| 65 scoped_ptr<base::DictionaryValue> editable_mapping_dictionary( | 66 scoped_ptr<base::DictionaryValue> editable_mapping_dictionary( |
| 66 mapping_dictionary->DeepCopy()); | 67 mapping_dictionary->DeepCopy()); |
| 67 | 68 |
| 68 CreateMappingForUnmappedDevices(&(devices.get()), | 69 CreateMappingForUnmappedDevices(&(devices.get()), |
| 69 editable_mapping_dictionary.get()); | 70 editable_mapping_dictionary.get()); |
| 70 | 71 |
| 71 // Write into |ExtensionPrefs| which will get persisted in disk. | 72 // Write into |ExtensionPrefs| which will get persisted in disk. |
| 72 extension_prefs->UpdateExtensionPref(extension_id, | 73 extension_prefs->UpdateExtensionPref(extension_id, |
| 73 kPrefStringForIdMapping, | 74 kPrefStringForIdMapping, |
| 74 editable_mapping_dictionary.release()); | 75 editable_mapping_dictionary.release()); |
| 75 return devices.Pass(); | 76 return devices.Pass(); |
| 76 } | 77 } |
| 77 | 78 |
| 78 ScopedVector<DeviceInfo> GetAllSignedInDevices( | 79 ScopedVector<DeviceInfo> GetAllSignedInDevices( |
| 79 const std::string& extension_id, | 80 const std::string& extension_id, |
| 80 Profile* profile) { | 81 Profile* profile) { |
| 81 // Get the profile sync service and extension prefs pointers | 82 // Get the device tracker and extension prefs pointers |
| 82 // and call the helper. | 83 // and call the helper. |
| 83 ProfileSyncService* pss = ProfileSyncServiceFactory::GetForProfile(profile); | 84 DeviceInfoTracker* device_tracker = |
| 85 ProfileSyncServiceFactory::GetForProfile(profile)->GetDeviceInfoTracker(); | |
|
pavely
2014/09/17 23:04:38
What is the condition when GetDeviceInfoTracker()
stanisc
2014/09/18 22:46:53
Good catch! It could only be null if either Sync b
| |
| 84 ExtensionPrefs* extension_prefs = ExtensionPrefs::Get(profile); | 86 ExtensionPrefs* extension_prefs = ExtensionPrefs::Get(profile); |
| 85 | 87 |
| 86 return GetAllSignedInDevices(extension_id, | 88 return GetAllSignedInDevices(extension_id, device_tracker, extension_prefs); |
| 87 pss, | |
| 88 extension_prefs); | |
| 89 } | 89 } |
| 90 | 90 |
| 91 scoped_ptr<DeviceInfo> GetLocalDeviceInfo(const std::string& extension_id, | 91 scoped_ptr<DeviceInfo> GetLocalDeviceInfo(const std::string& extension_id, |
| 92 Profile* profile) { | 92 Profile* profile) { |
| 93 ProfileSyncService* pss = ProfileSyncServiceFactory::GetForProfile(profile); | 93 ProfileSyncService* pss = ProfileSyncServiceFactory::GetForProfile(profile); |
| 94 if (!pss) { | 94 if (!pss) { |
| 95 return scoped_ptr<DeviceInfo>(); | 95 return scoped_ptr<DeviceInfo>(); |
| 96 } | 96 } |
| 97 | 97 |
| 98 LocalDeviceInfoProvider* local_device = pss->GetLocalDeviceInfoProvider(); | 98 LocalDeviceInfoProvider* local_device = pss->GetLocalDeviceInfoProvider(); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 132 ++it) { | 132 ++it) { |
| 133 result->Append((*it)->ToValue()); | 133 result->Append((*it)->ToValue()); |
| 134 } | 134 } |
| 135 | 135 |
| 136 SetResult(result.release()); | 136 SetResult(result.release()); |
| 137 return true; | 137 return true; |
| 138 } | 138 } |
| 139 | 139 |
| 140 } // namespace extensions | 140 } // namespace extensions |
| 141 | 141 |
| OLD | NEW |