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/signedin_devices/signedin_devices_api.h" | 5 #include "chrome/browser/extensions/api/signedin_devices/signedin_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/signedin_devices/id_mapping_helper.h" | 10 #include "chrome/browser/extensions/api/signedin_devices/id_mapping_helper.h" |
11 #include "chrome/browser/extensions/extension_prefs.h" | 11 #include "chrome/browser/extensions/extension_prefs.h" |
12 #include "chrome/browser/profiles/profile.h" | 12 #include "chrome/browser/profiles/profile.h" |
13 #include "chrome/browser/sync/glue/device_info.h" | 13 #include "chrome/browser/sync/glue/device_info.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/signedin_devices.h" |
16 | 17 |
17 using base::DictionaryValue; | 18 using base::DictionaryValue; |
18 using browser_sync::DeviceInfo; | 19 using browser_sync::DeviceInfo; |
19 | 20 |
20 namespace extensions { | 21 namespace extensions { |
21 | 22 |
22 static const char kPrefStringForIdMapping[] = "id_mapping_dictioanry"; | 23 static const char kPrefStringForIdMapping[] = "id_mapping_dictioanry"; |
23 | 24 |
24 // Gets the dictionary that stores the id mapping. The dictionary is stored | 25 // Gets the dictionary that stores the id mapping. The dictionary is stored |
25 // in the |ExtensionPrefs|. | 26 // in the |ExtensionPrefs|. |
(...skipping 14 matching lines...) Expand all Loading... |
40 kPrefStringForIdMapping, | 41 kPrefStringForIdMapping, |
41 dictionary.release()); | 42 dictionary.release()); |
42 } | 43 } |
43 | 44 |
44 return out_value; | 45 return out_value; |
45 } | 46 } |
46 | 47 |
47 // Helper routine to get all signed in devices. The helper takes in | 48 // Helper routine to get all signed in devices. The helper takes in |
48 // the pointers for |ProfileSyncService| and |Extensionprefs|. This | 49 // the pointers for |ProfileSyncService| and |Extensionprefs|. This |
49 // makes it easier to test by passing mock values for these pointers. | 50 // makes it easier to test by passing mock values for these pointers. |
50 ScopedVector<DeviceInfo> GetAllSignedInDevices( | 51 ScopedVector<DeviceInfo> GetAllSignedinDevices( |
51 const std::string& extension_id, | 52 const std::string& extension_id, |
52 ProfileSyncService* pss, | 53 ProfileSyncService* pss, |
53 ExtensionPrefs* extension_prefs) { | 54 ExtensionPrefs* extension_prefs) { |
54 ScopedVector<DeviceInfo> devices = pss->GetAllSignedInDevices(); | 55 ScopedVector<DeviceInfo> devices = pss->GetAllSignedinDevices(); |
55 const DictionaryValue* mapping_dictionary = GetIdMappingDictionary( | 56 const DictionaryValue* mapping_dictionary = GetIdMappingDictionary( |
56 extension_prefs, | 57 extension_prefs, |
57 extension_id); | 58 extension_id); |
58 | 59 |
59 CHECK(mapping_dictionary); | 60 CHECK(mapping_dictionary); |
60 | 61 |
61 // |mapping_dictionary| is const. So make an editable copy. | 62 // |mapping_dictionary| is const. So make an editable copy. |
62 scoped_ptr<DictionaryValue> editable_mapping_dictionary( | 63 scoped_ptr<DictionaryValue> editable_mapping_dictionary( |
63 mapping_dictionary->DeepCopy()); | 64 mapping_dictionary->DeepCopy()); |
64 | 65 |
65 CreateMappingForUnmappedDevices(&(devices.get()), | 66 CreateMappingForUnmappedDevices(&(devices.get()), |
66 editable_mapping_dictionary.get()); | 67 editable_mapping_dictionary.get()); |
67 | 68 |
68 // Write into |ExtensionPrefs| which will get persisted in disk. | 69 // Write into |ExtensionPrefs| which will get persisted in disk. |
69 extension_prefs->UpdateExtensionPref(extension_id, | 70 extension_prefs->UpdateExtensionPref(extension_id, |
70 kPrefStringForIdMapping, | 71 kPrefStringForIdMapping, |
71 editable_mapping_dictionary.release()); | 72 editable_mapping_dictionary.release()); |
72 return devices.Pass(); | 73 return devices.Pass(); |
73 } | 74 } |
74 | 75 |
75 ScopedVector<DeviceInfo> GetAllSignedInDevices( | 76 ScopedVector<DeviceInfo> GetAllSignedinDevices( |
76 const std::string& extension_id, | 77 const std::string& extension_id, |
77 Profile* profile) { | 78 Profile* profile) { |
78 // Get the profile sync service and extension prefs pointers | 79 // Get the profile sync service and extension prefs pointers |
79 // and call the helper. | 80 // and call the helper. |
80 ProfileSyncService* pss = ProfileSyncServiceFactory::GetForProfile(profile); | 81 ProfileSyncService* pss = ProfileSyncServiceFactory::GetForProfile(profile); |
81 ExtensionPrefs* extension_prefs = ExtensionPrefs::Get(profile); | 82 ExtensionPrefs* extension_prefs = ExtensionPrefs::Get(profile); |
82 | 83 |
83 return GetAllSignedInDevices(extension_id, | 84 return GetAllSignedinDevices(extension_id, |
84 pss, | 85 pss, |
85 extension_prefs); | 86 extension_prefs); |
86 } | 87 } |
87 | 88 |
| 89 bool SignedinDevicesGetFunction::RunImpl() { |
| 90 scoped_ptr<api::signedin_devices::Get::Params> params( |
| 91 api::signedin_devices::Get::Params::Create(*args_)); |
| 92 EXTENSION_FUNCTION_VALIDATE(params.get()); |
| 93 |
| 94 bool is_local = params->is_local.get() ? *params->is_local : false; |
| 95 |
| 96 if (is_local) { |
| 97 // TODO(lipalani): Set the device info for local device. |
| 98 base::ListValue* result = new base::ListValue(); |
| 99 SetResult(result); |
| 100 return true; |
| 101 } |
| 102 |
| 103 ScopedVector<DeviceInfo> devices = GetAllSignedinDevices(extension_id(), |
| 104 profile()); |
| 105 |
| 106 scoped_ptr<base::ListValue> result(new base::ListValue()); |
| 107 |
| 108 for (ScopedVector<DeviceInfo>::const_iterator it = devices.begin(); |
| 109 it != devices.end(); |
| 110 ++it) { |
| 111 result->Append((*it)->ToValue()); |
| 112 } |
| 113 |
| 114 SetResult(result.release()); |
| 115 return true; |
| 116 } |
| 117 |
88 } // namespace extensions | 118 } // namespace extensions |
89 | 119 |
OLD | NEW |