OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // MediaFileSystemRegistry unit tests. | 5 // MediaFileSystemRegistry unit tests. |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <set> | 8 #include <set> |
9 | 9 |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 using storage_monitor::StorageInfo; | 58 using storage_monitor::StorageInfo; |
59 using storage_monitor::StorageMonitor; | 59 using storage_monitor::StorageMonitor; |
60 using storage_monitor::TestStorageMonitor; | 60 using storage_monitor::TestStorageMonitor; |
61 | 61 |
62 // Not anonymous so it can be friends with MediaFileSystemRegistry. | 62 // Not anonymous so it can be friends with MediaFileSystemRegistry. |
63 class TestMediaFileSystemContext : public MediaFileSystemContext { | 63 class TestMediaFileSystemContext : public MediaFileSystemContext { |
64 public: | 64 public: |
65 struct FSInfo { | 65 struct FSInfo { |
66 FSInfo() {} | 66 FSInfo() {} |
67 FSInfo(const std::string& device_id, const base::FilePath& path, | 67 FSInfo(const std::string& device_id, const base::FilePath& path, |
68 const std::string& fsid); | 68 const std::string& fs_name); |
69 | 69 |
70 bool operator<(const FSInfo& other) const; | 70 bool operator<(const FSInfo& other) const; |
71 | 71 |
72 std::string device_id; | 72 std::string device_id; |
73 base::FilePath path; | 73 base::FilePath path; |
74 std::string fsid; | 74 std::string fs_name; |
75 }; | 75 }; |
76 | 76 |
77 explicit TestMediaFileSystemContext(MediaFileSystemRegistry* registry); | 77 explicit TestMediaFileSystemContext(MediaFileSystemRegistry* registry); |
78 virtual ~TestMediaFileSystemContext() {} | 78 virtual ~TestMediaFileSystemContext() {} |
79 | 79 |
80 // MediaFileSystemContext implementation. | 80 // MediaFileSystemContext implementation. |
81 virtual std::string RegisterFileSystem( | 81 virtual bool RegisterFileSystem(const std::string& device_id, |
82 const std::string& device_id, const base::FilePath& path) OVERRIDE; | 82 const std::string& fs_name, |
| 83 const base::FilePath& path) OVERRIDE; |
83 | 84 |
84 virtual void RevokeFileSystem(const std::string& fsid) OVERRIDE; | 85 virtual void RevokeFileSystem(const std::string& fs_name) OVERRIDE; |
85 | 86 |
86 base::FilePath GetPathForId(const std::string& fsid) const; | 87 virtual base::FilePath GetRegisteredPath( |
| 88 const std::string& fs_name) const OVERRIDE; |
87 | 89 |
88 MediaFileSystemRegistry* registry() { return registry_; } | 90 MediaFileSystemRegistry* registry() { return registry_; } |
89 | 91 |
90 private: | 92 private: |
91 std::string AddFSEntry(const std::string& device_id, | 93 void AddFSEntry(const std::string& device_id, |
92 const base::FilePath& path); | 94 const base::FilePath& path, |
| 95 const std::string& fs_name); |
93 | 96 |
94 MediaFileSystemRegistry* registry_; | 97 MediaFileSystemRegistry* registry_; |
95 | 98 |
96 // A counter used to construct mock FSIDs. | |
97 int fsid_; | |
98 | |
99 // The currently allocated mock file systems. | 99 // The currently allocated mock file systems. |
100 std::map<std::string /*fsid*/, FSInfo> file_systems_by_id_; | 100 std::map<std::string /*fs_name*/, FSInfo> file_systems_by_name_; |
101 }; | 101 }; |
102 | 102 |
103 TestMediaFileSystemContext::FSInfo::FSInfo(const std::string& device_id, | 103 TestMediaFileSystemContext::FSInfo::FSInfo(const std::string& device_id, |
104 const base::FilePath& path, | 104 const base::FilePath& path, |
105 const std::string& fsid) | 105 const std::string& fs_name) |
106 : device_id(device_id), | 106 : device_id(device_id), |
107 path(path), | 107 path(path), |
108 fsid(fsid) { | 108 fs_name(fs_name) { |
109 } | 109 } |
110 | 110 |
111 bool TestMediaFileSystemContext::FSInfo::operator<(const FSInfo& other) const { | 111 bool TestMediaFileSystemContext::FSInfo::operator<(const FSInfo& other) const { |
112 if (device_id != other.device_id) | 112 if (device_id != other.device_id) |
113 return device_id < other.device_id; | 113 return device_id < other.device_id; |
114 if (path.value() != other.path.value()) | 114 if (path.value() != other.path.value()) |
115 return path.value() < other.path.value(); | 115 return path.value() < other.path.value(); |
116 return fsid < other.fsid; | 116 return fs_name < other.fs_name; |
117 } | 117 } |
118 | 118 |
119 TestMediaFileSystemContext::TestMediaFileSystemContext( | 119 TestMediaFileSystemContext::TestMediaFileSystemContext( |
120 MediaFileSystemRegistry* registry) | 120 MediaFileSystemRegistry* registry) |
121 : registry_(registry), | 121 : registry_(registry) { |
122 fsid_(0) { | |
123 registry_->file_system_context_.reset(this); | 122 registry_->file_system_context_.reset(this); |
124 } | 123 } |
125 | 124 |
126 std::string TestMediaFileSystemContext::RegisterFileSystem( | 125 bool TestMediaFileSystemContext::RegisterFileSystem( |
127 const std::string& device_id, const base::FilePath& path) { | 126 const std::string& device_id, |
128 std::string fsid = AddFSEntry(device_id, path); | 127 const std::string& fs_name, |
129 return fsid; | 128 const base::FilePath& path) { |
| 129 AddFSEntry(device_id, path, fs_name); |
| 130 return true; |
130 } | 131 } |
131 | 132 |
132 void TestMediaFileSystemContext::RevokeFileSystem(const std::string& fsid) { | 133 void TestMediaFileSystemContext::RevokeFileSystem(const std::string& fs_name) { |
133 if (!ContainsKey(file_systems_by_id_, fsid)) | 134 if (!ContainsKey(file_systems_by_name_, fs_name)) |
134 return; | 135 return; |
135 EXPECT_EQ(1U, file_systems_by_id_.erase(fsid)); | 136 EXPECT_EQ(1U, file_systems_by_name_.erase(fs_name)); |
136 } | 137 } |
137 | 138 |
138 base::FilePath TestMediaFileSystemContext::GetPathForId( | 139 base::FilePath TestMediaFileSystemContext::GetRegisteredPath( |
139 const std::string& fsid) const { | 140 const std::string& fs_name) const { |
140 std::map<std::string /*fsid*/, FSInfo>::const_iterator it = | 141 std::map<std::string /*fs_name*/, FSInfo>::const_iterator it = |
141 file_systems_by_id_.find(fsid); | 142 file_systems_by_name_.find(fs_name); |
142 if (it == file_systems_by_id_.end()) | 143 if (it == file_systems_by_name_.end()) |
143 return base::FilePath(); | 144 return base::FilePath(); |
144 return it->second.path; | 145 return it->second.path; |
145 } | 146 } |
146 | 147 |
147 std::string TestMediaFileSystemContext::AddFSEntry(const std::string& device_id, | 148 void TestMediaFileSystemContext::AddFSEntry(const std::string& device_id, |
148 const base::FilePath& path) { | 149 const base::FilePath& path, |
| 150 const std::string& fs_name) { |
149 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 151 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
150 DCHECK(path.IsAbsolute()); | 152 DCHECK(path.IsAbsolute()); |
151 DCHECK(!path.ReferencesParent()); | 153 DCHECK(!path.ReferencesParent()); |
152 | 154 |
153 std::string fsid = base::StringPrintf("FSID:%d", ++fsid_); | 155 FSInfo info(device_id, path, fs_name); |
154 FSInfo info(device_id, path, fsid); | 156 file_systems_by_name_[fs_name] = info; |
155 file_systems_by_id_[fsid] = info; | |
156 return fsid; | |
157 } | 157 } |
158 | 158 |
159 namespace { | 159 namespace { |
160 | 160 |
161 typedef std::map<MediaGalleryPrefId, MediaFileSystemInfo> FSInfoMap; | 161 typedef std::map<MediaGalleryPrefId, MediaFileSystemInfo> FSInfoMap; |
162 | 162 |
163 void GetGalleryInfoCallback( | 163 void GetGalleryInfoCallback( |
164 FSInfoMap* results, | 164 FSInfoMap* results, |
165 const std::vector<MediaFileSystemInfo>& file_systems) { | 165 const std::vector<MediaFileSystemInfo>& file_systems) { |
166 for (size_t i = 0; i < file_systems.size(); ++i) { | 166 for (size_t i = 0; i < file_systems.size(); ++i) { |
(...skipping 10 matching lines...) Expand all Loading... |
177 EXPECT_EQ(path, info.path); | 177 EXPECT_EQ(path, info.path); |
178 EXPECT_EQ(removable, info.removable); | 178 EXPECT_EQ(removable, info.removable); |
179 EXPECT_EQ(media_device, info.media_device); | 179 EXPECT_EQ(media_device, info.media_device); |
180 EXPECT_NE(0UL, info.pref_id); | 180 EXPECT_NE(0UL, info.pref_id); |
181 | 181 |
182 if (removable) | 182 if (removable) |
183 EXPECT_NE(0UL, info.transient_device_id.size()); | 183 EXPECT_NE(0UL, info.transient_device_id.size()); |
184 else | 184 else |
185 EXPECT_EQ(0UL, info.transient_device_id.size()); | 185 EXPECT_EQ(0UL, info.transient_device_id.size()); |
186 | 186 |
187 base::FilePath fsid_path = fs_context->GetPathForId(info.fsid); | 187 base::FilePath fsid_path = fs_context->GetRegisteredPath(info.fsid); |
188 EXPECT_EQ(path, fsid_path); | 188 EXPECT_EQ(path, fsid_path); |
189 } | 189 } |
190 | 190 |
191 class MockProfileSharedRenderProcessHostFactory | 191 class MockProfileSharedRenderProcessHostFactory |
192 : public content::RenderProcessHostFactory { | 192 : public content::RenderProcessHostFactory { |
193 public: | 193 public: |
194 MockProfileSharedRenderProcessHostFactory() {} | 194 MockProfileSharedRenderProcessHostFactory() {} |
195 virtual ~MockProfileSharedRenderProcessHostFactory(); | 195 virtual ~MockProfileSharedRenderProcessHostFactory(); |
196 | 196 |
197 // RPH created with this factory are owned by it. If the RPH is destroyed | 197 // RPH created with this factory are owned by it. If the RPH is destroyed |
(...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1060 empty_dir()); | 1060 empty_dir()); |
1061 ProfileState* profile_state = GetProfileState(0); | 1061 ProfileState* profile_state = GetProfileState(0); |
1062 SetGalleryPermission(profile_state, | 1062 SetGalleryPermission(profile_state, |
1063 profile_state->regular_permission_extension(), | 1063 profile_state->regular_permission_extension(), |
1064 device_id, | 1064 device_id, |
1065 true /*has access*/); | 1065 true /*has access*/); |
1066 | 1066 |
1067 FSInfoMap fs_info = profile_state->GetGalleriesInfo( | 1067 FSInfoMap fs_info = profile_state->GetGalleriesInfo( |
1068 profile_state->regular_permission_extension()); | 1068 profile_state->regular_permission_extension()); |
1069 ASSERT_EQ(1U, fs_info.size()); | 1069 ASSERT_EQ(1U, fs_info.size()); |
1070 EXPECT_FALSE(test_file_system_context()->GetPathForId( | 1070 EXPECT_FALSE(test_file_system_context()->GetRegisteredPath( |
1071 fs_info.begin()->second.fsid).empty()); | 1071 fs_info.begin()->second.fsid).empty()); |
1072 | 1072 |
1073 // Revoke permission and ensure that the file system is revoked. | 1073 // Revoke permission and ensure that the file system is revoked. |
1074 SetGalleryPermission(profile_state, | 1074 SetGalleryPermission(profile_state, |
1075 profile_state->regular_permission_extension(), | 1075 profile_state->regular_permission_extension(), |
1076 device_id, | 1076 device_id, |
1077 false /*has access*/); | 1077 false /*has access*/); |
1078 EXPECT_TRUE(test_file_system_context()->GetPathForId( | 1078 EXPECT_TRUE(test_file_system_context()->GetRegisteredPath( |
1079 fs_info.begin()->second.fsid).empty()); | 1079 fs_info.begin()->second.fsid).empty()); |
1080 } | 1080 } |
OLD | NEW |