| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "components/offline_pages/offline_page_metadata_store_impl.h" | 5 #include "components/offline_pages/offline_page_metadata_store_impl.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
| 9 #include "base/files/scoped_temp_dir.h" | 9 #include "base/files/scoped_temp_dir.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 EXPECT_EQ(0U, offline_pages_.size()); | 115 EXPECT_EQ(0U, offline_pages_.size()); |
| 116 } | 116 } |
| 117 | 117 |
| 118 // Adds metadata of an offline page into a store and then loads from the | 118 // Adds metadata of an offline page into a store and then loads from the |
| 119 // store to make sure the metadata is preserved. | 119 // store to make sure the metadata is preserved. |
| 120 TEST_F(OfflinePageMetadataStoreImplTest, AddOfflinePageThenLoad) { | 120 TEST_F(OfflinePageMetadataStoreImplTest, AddOfflinePageThenLoad) { |
| 121 scoped_ptr<OfflinePageMetadataStoreImpl> store(BuildStore()); | 121 scoped_ptr<OfflinePageMetadataStoreImpl> store(BuildStore()); |
| 122 | 122 |
| 123 OfflinePageItem offline_page(GURL(kTestURL), kTestBookmarkId, | 123 OfflinePageItem offline_page(GURL(kTestURL), kTestBookmarkId, |
| 124 base::FilePath(kFilePath), kFileSize); | 124 base::FilePath(kFilePath), kFileSize); |
| 125 store->AddOfflinePage( | 125 store->AddOrUpdateOfflinePage( |
| 126 offline_page, | 126 offline_page, |
| 127 base::Bind(&OfflinePageMetadataStoreImplTest::UpdateCallback, | 127 base::Bind(&OfflinePageMetadataStoreImplTest::UpdateCallback, |
| 128 base::Unretained(this), ADD)); | 128 base::Unretained(this), ADD)); |
| 129 PumpLoop(); | 129 PumpLoop(); |
| 130 EXPECT_EQ(ADD, last_called_callback_); | 130 EXPECT_EQ(ADD, last_called_callback_); |
| 131 EXPECT_EQ(STATUS_TRUE, last_status_); | 131 EXPECT_EQ(STATUS_TRUE, last_status_); |
| 132 | 132 |
| 133 ClearResults(); | 133 ClearResults(); |
| 134 store->Load(base::Bind(&OfflinePageMetadataStoreImplTest::LoadCallback, | 134 store->Load(base::Bind(&OfflinePageMetadataStoreImplTest::LoadCallback, |
| 135 base::Unretained(this))); | 135 base::Unretained(this))); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 147 EXPECT_EQ(offline_page.last_access_time, offline_pages_[0].last_access_time); | 147 EXPECT_EQ(offline_page.last_access_time, offline_pages_[0].last_access_time); |
| 148 } | 148 } |
| 149 | 149 |
| 150 // Adds metadata of an offline page into a store and then opens the store | 150 // Adds metadata of an offline page into a store and then opens the store |
| 151 // again to make sure that stored metadata survives store restarts. | 151 // again to make sure that stored metadata survives store restarts. |
| 152 TEST_F(OfflinePageMetadataStoreImplTest, AddOfflinePageRestartLoad) { | 152 TEST_F(OfflinePageMetadataStoreImplTest, AddOfflinePageRestartLoad) { |
| 153 scoped_ptr<OfflinePageMetadataStoreImpl> store(BuildStore()); | 153 scoped_ptr<OfflinePageMetadataStoreImpl> store(BuildStore()); |
| 154 | 154 |
| 155 OfflinePageItem offline_page(GURL(kTestURL), kTestBookmarkId, | 155 OfflinePageItem offline_page(GURL(kTestURL), kTestBookmarkId, |
| 156 base::FilePath(kFilePath), kFileSize); | 156 base::FilePath(kFilePath), kFileSize); |
| 157 store->AddOfflinePage( | 157 store->AddOrUpdateOfflinePage( |
| 158 offline_page, | 158 offline_page, |
| 159 base::Bind(&OfflinePageMetadataStoreImplTest::UpdateCallback, | 159 base::Bind(&OfflinePageMetadataStoreImplTest::UpdateCallback, |
| 160 base::Unretained(this), ADD)); | 160 base::Unretained(this), ADD)); |
| 161 PumpLoop(); | 161 PumpLoop(); |
| 162 EXPECT_EQ(ADD, last_called_callback_); | 162 EXPECT_EQ(ADD, last_called_callback_); |
| 163 EXPECT_EQ(STATUS_TRUE, last_status_); | 163 EXPECT_EQ(STATUS_TRUE, last_status_); |
| 164 | 164 |
| 165 // Reset the store first to ensure file lock is removed. | 165 // Reset the store first to ensure file lock is removed. |
| 166 store.reset(); | 166 store.reset(); |
| 167 store = BuildStore().Pass(); | 167 store = BuildStore().Pass(); |
| 168 ClearResults(); | 168 ClearResults(); |
| 169 store->Load(base::Bind(&OfflinePageMetadataStoreImplTest::LoadCallback, | 169 store->Load(base::Bind(&OfflinePageMetadataStoreImplTest::LoadCallback, |
| 170 base::Unretained(this))); | 170 base::Unretained(this))); |
| 171 PumpLoop(); | 171 PumpLoop(); |
| 172 | 172 |
| 173 EXPECT_EQ(LOAD, last_called_callback_); | 173 EXPECT_EQ(LOAD, last_called_callback_); |
| 174 EXPECT_EQ(STATUS_TRUE, last_status_); | 174 EXPECT_EQ(STATUS_TRUE, last_status_); |
| 175 EXPECT_EQ(1U, offline_pages_.size()); | 175 EXPECT_EQ(1U, offline_pages_.size()); |
| 176 EXPECT_EQ(offline_page.url, offline_pages_[0].url); | 176 EXPECT_EQ(offline_page.url, offline_pages_[0].url); |
| 177 EXPECT_EQ(offline_page.bookmark_id, offline_pages_[0].bookmark_id); | 177 EXPECT_EQ(offline_page.bookmark_id, offline_pages_[0].bookmark_id); |
| 178 EXPECT_EQ(offline_page.version, offline_pages_[0].version); | 178 EXPECT_EQ(offline_page.version, offline_pages_[0].version); |
| 179 EXPECT_EQ(offline_page.file_path, offline_pages_[0].file_path); | 179 EXPECT_EQ(offline_page.file_path, offline_pages_[0].file_path); |
| 180 EXPECT_EQ(offline_page.file_size, offline_pages_[0].file_size); | 180 EXPECT_EQ(offline_page.file_size, offline_pages_[0].file_size); |
| 181 EXPECT_EQ(offline_page.creation_time, offline_pages_[0].creation_time); | 181 EXPECT_EQ(offline_page.creation_time, offline_pages_[0].creation_time); |
| 182 EXPECT_EQ(offline_page.last_access_time, offline_pages_[0].last_access_time); | 182 EXPECT_EQ(offline_page.last_access_time, offline_pages_[0].last_access_time); |
| 183 EXPECT_EQ(offline_page.access_count, offline_pages_[0].access_count); |
| 183 } | 184 } |
| 184 | 185 |
| 185 // Tests removing offline page metadata from the store, for which it first adds | 186 // Tests removing offline page metadata from the store, for which it first adds |
| 186 // metadata of an offline page. | 187 // metadata of an offline page. |
| 187 TEST_F(OfflinePageMetadataStoreImplTest, RemoveOfflinePage) { | 188 TEST_F(OfflinePageMetadataStoreImplTest, RemoveOfflinePage) { |
| 188 scoped_ptr<OfflinePageMetadataStoreImpl> store(BuildStore()); | 189 scoped_ptr<OfflinePageMetadataStoreImpl> store(BuildStore()); |
| 189 | 190 |
| 190 OfflinePageItem offline_page(GURL(kTestURL), kTestBookmarkId, | 191 OfflinePageItem offline_page(GURL(kTestURL), kTestBookmarkId, |
| 191 base::FilePath(kFilePath), kFileSize); | 192 base::FilePath(kFilePath), kFileSize); |
| 192 store->AddOfflinePage( | 193 store->AddOrUpdateOfflinePage( |
| 193 offline_page, | 194 offline_page, |
| 194 base::Bind(&OfflinePageMetadataStoreImplTest::UpdateCallback, | 195 base::Bind(&OfflinePageMetadataStoreImplTest::UpdateCallback, |
| 195 base::Unretained(this), ADD)); | 196 base::Unretained(this), ADD)); |
| 196 store->Load(base::Bind(&OfflinePageMetadataStoreImplTest::LoadCallback, | 197 store->Load(base::Bind(&OfflinePageMetadataStoreImplTest::LoadCallback, |
| 197 base::Unretained(this))); | 198 base::Unretained(this))); |
| 198 std::vector<int64> ids_to_remove; | 199 std::vector<int64> ids_to_remove; |
| 199 ids_to_remove.push_back(offline_page.bookmark_id); | 200 ids_to_remove.push_back(offline_page.bookmark_id); |
| 200 store->RemoveOfflinePages( | 201 store->RemoveOfflinePages( |
| 201 ids_to_remove, | 202 ids_to_remove, |
| 202 base::Bind(&OfflinePageMetadataStoreImplTest::UpdateCallback, | 203 base::Bind(&OfflinePageMetadataStoreImplTest::UpdateCallback, |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 // Adds metadata of multiple offline pages into a store and removes some. | 246 // Adds metadata of multiple offline pages into a store and removes some. |
| 246 TEST_F(OfflinePageMetadataStoreImplTest, AddRemoveMultipleOfflinePages) { | 247 TEST_F(OfflinePageMetadataStoreImplTest, AddRemoveMultipleOfflinePages) { |
| 247 scoped_ptr<OfflinePageMetadataStoreImpl> store(BuildStore()); | 248 scoped_ptr<OfflinePageMetadataStoreImpl> store(BuildStore()); |
| 248 | 249 |
| 249 OfflinePageItem offline_page_1(GURL(kTestURL), kTestBookmarkId, | 250 OfflinePageItem offline_page_1(GURL(kTestURL), kTestBookmarkId, |
| 250 base::FilePath(kFilePath), kFileSize); | 251 base::FilePath(kFilePath), kFileSize); |
| 251 base::FilePath file_path_2 = | 252 base::FilePath file_path_2 = |
| 252 base::FilePath(FILE_PATH_LITERAL("//other.page.com.mhtml")); | 253 base::FilePath(FILE_PATH_LITERAL("//other.page.com.mhtml")); |
| 253 OfflinePageItem offline_page_2(GURL("https://other.page.com"), 5678LL, | 254 OfflinePageItem offline_page_2(GURL("https://other.page.com"), 5678LL, |
| 254 file_path_2, 12345, base::Time::Now()); | 255 file_path_2, 12345, base::Time::Now()); |
| 255 store->AddOfflinePage( | 256 store->AddOrUpdateOfflinePage( |
| 256 offline_page_1, | 257 offline_page_1, |
| 257 base::Bind(&OfflinePageMetadataStoreImplTest::UpdateCallback, | 258 base::Bind(&OfflinePageMetadataStoreImplTest::UpdateCallback, |
| 258 base::Unretained(this), ADD)); | 259 base::Unretained(this), ADD)); |
| 259 PumpLoop(); | 260 PumpLoop(); |
| 260 EXPECT_EQ(ADD, last_called_callback_); | 261 EXPECT_EQ(ADD, last_called_callback_); |
| 261 EXPECT_EQ(STATUS_TRUE, last_status_); | 262 EXPECT_EQ(STATUS_TRUE, last_status_); |
| 262 | 263 |
| 263 ClearResults(); | 264 ClearResults(); |
| 264 store->AddOfflinePage( | 265 store->AddOrUpdateOfflinePage( |
| 265 offline_page_2, | 266 offline_page_2, |
| 266 base::Bind(&OfflinePageMetadataStoreImplTest::UpdateCallback, | 267 base::Bind(&OfflinePageMetadataStoreImplTest::UpdateCallback, |
| 267 base::Unretained(this), ADD)); | 268 base::Unretained(this), ADD)); |
| 268 PumpLoop(); | 269 PumpLoop(); |
| 269 EXPECT_EQ(ADD, last_called_callback_); | 270 EXPECT_EQ(ADD, last_called_callback_); |
| 270 EXPECT_EQ(STATUS_TRUE, last_status_); | 271 EXPECT_EQ(STATUS_TRUE, last_status_); |
| 271 | 272 |
| 272 ClearResults(); | 273 ClearResults(); |
| 273 store->Load(base::Bind(&OfflinePageMetadataStoreImplTest::LoadCallback, | 274 store->Load(base::Bind(&OfflinePageMetadataStoreImplTest::LoadCallback, |
| 274 base::Unretained(this))); | 275 base::Unretained(this))); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 299 EXPECT_EQ(STATUS_TRUE, last_status_); | 300 EXPECT_EQ(STATUS_TRUE, last_status_); |
| 300 EXPECT_EQ(1U, offline_pages_.size()); | 301 EXPECT_EQ(1U, offline_pages_.size()); |
| 301 EXPECT_EQ(offline_page_2.url, offline_pages_[0].url); | 302 EXPECT_EQ(offline_page_2.url, offline_pages_[0].url); |
| 302 EXPECT_EQ(offline_page_2.bookmark_id, offline_pages_[0].bookmark_id); | 303 EXPECT_EQ(offline_page_2.bookmark_id, offline_pages_[0].bookmark_id); |
| 303 EXPECT_EQ(offline_page_2.version, offline_pages_[0].version); | 304 EXPECT_EQ(offline_page_2.version, offline_pages_[0].version); |
| 304 EXPECT_EQ(offline_page_2.file_path, offline_pages_[0].file_path); | 305 EXPECT_EQ(offline_page_2.file_path, offline_pages_[0].file_path); |
| 305 EXPECT_EQ(offline_page_2.file_size, offline_pages_[0].file_size); | 306 EXPECT_EQ(offline_page_2.file_size, offline_pages_[0].file_size); |
| 306 EXPECT_EQ(offline_page_2.creation_time, offline_pages_[0].creation_time); | 307 EXPECT_EQ(offline_page_2.creation_time, offline_pages_[0].creation_time); |
| 307 EXPECT_EQ(offline_page_2.last_access_time, | 308 EXPECT_EQ(offline_page_2.last_access_time, |
| 308 offline_pages_[0].last_access_time); | 309 offline_pages_[0].last_access_time); |
| 310 EXPECT_EQ(offline_page_2.access_count, offline_pages_[0].access_count); |
| 311 } |
| 312 |
| 313 // Tests updating offline page metadata from the store. |
| 314 TEST_F(OfflinePageMetadataStoreImplTest, UpdateOfflinePage) { |
| 315 scoped_ptr<OfflinePageMetadataStoreImpl> store(BuildStore()); |
| 316 |
| 317 // First, adds a fresh page. |
| 318 OfflinePageItem offline_page(GURL(kTestURL), kTestBookmarkId, |
| 319 base::FilePath(kFilePath), kFileSize); |
| 320 store->AddOrUpdateOfflinePage( |
| 321 offline_page, |
| 322 base::Bind(&OfflinePageMetadataStoreImplTest::UpdateCallback, |
| 323 base::Unretained(this), ADD)); |
| 324 PumpLoop(); |
| 325 EXPECT_EQ(ADD, last_called_callback_); |
| 326 EXPECT_EQ(STATUS_TRUE, last_status_); |
| 327 |
| 328 ClearResults(); |
| 329 store->Load(base::Bind(&OfflinePageMetadataStoreImplTest::LoadCallback, |
| 330 base::Unretained(this))); |
| 331 PumpLoop(); |
| 332 |
| 333 EXPECT_EQ(LOAD, last_called_callback_); |
| 334 EXPECT_EQ(STATUS_TRUE, last_status_); |
| 335 EXPECT_EQ(1U, offline_pages_.size()); |
| 336 EXPECT_EQ(offline_page.url, offline_pages_[0].url); |
| 337 EXPECT_EQ(offline_page.bookmark_id, offline_pages_[0].bookmark_id); |
| 338 EXPECT_EQ(offline_page.version, offline_pages_[0].version); |
| 339 EXPECT_EQ(offline_page.file_path, offline_pages_[0].file_path); |
| 340 EXPECT_EQ(offline_page.file_size, offline_pages_[0].file_size); |
| 341 EXPECT_EQ(offline_page.creation_time, offline_pages_[0].creation_time); |
| 342 EXPECT_EQ(offline_page.last_access_time, offline_pages_[0].last_access_time); |
| 343 EXPECT_EQ(offline_page.access_count, offline_pages_[0].access_count); |
| 344 |
| 345 // Then updates some data. |
| 346 offline_page.file_size = kFileSize + 1; |
| 347 offline_page.access_count++; |
| 348 store->AddOrUpdateOfflinePage( |
| 349 offline_page, |
| 350 base::Bind(&OfflinePageMetadataStoreImplTest::UpdateCallback, |
| 351 base::Unretained(this), ADD)); |
| 352 PumpLoop(); |
| 353 EXPECT_EQ(ADD, last_called_callback_); |
| 354 EXPECT_EQ(STATUS_TRUE, last_status_); |
| 355 |
| 356 ClearResults(); |
| 357 store->Load(base::Bind(&OfflinePageMetadataStoreImplTest::LoadCallback, |
| 358 base::Unretained(this))); |
| 359 PumpLoop(); |
| 360 |
| 361 EXPECT_EQ(LOAD, last_called_callback_); |
| 362 EXPECT_EQ(STATUS_TRUE, last_status_); |
| 363 EXPECT_EQ(1U, offline_pages_.size()); |
| 364 EXPECT_EQ(offline_page.url, offline_pages_[0].url); |
| 365 EXPECT_EQ(offline_page.bookmark_id, offline_pages_[0].bookmark_id); |
| 366 EXPECT_EQ(offline_page.version, offline_pages_[0].version); |
| 367 EXPECT_EQ(offline_page.file_path, offline_pages_[0].file_path); |
| 368 EXPECT_EQ(offline_page.file_size, offline_pages_[0].file_size); |
| 369 EXPECT_EQ(offline_page.creation_time, offline_pages_[0].creation_time); |
| 370 EXPECT_EQ(offline_page.last_access_time, offline_pages_[0].last_access_time); |
| 371 EXPECT_EQ(offline_page.access_count, offline_pages_[0].access_count); |
| 309 } | 372 } |
| 310 | 373 |
| 311 } // namespace | 374 } // namespace |
| 312 | 375 |
| 313 } // namespace offline_pages | 376 } // namespace offline_pages |
| OLD | NEW |