| 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_model.h" | 5 #include "components/offline_pages/offline_page_model_impl.h" | 
| 6 | 6 | 
| 7 #include <stdint.h> | 7 #include <stdint.h> | 
| 8 #include <algorithm> | 8 #include <algorithm> | 
| 9 #include <utility> | 9 #include <utility> | 
| 10 | 10 | 
| 11 #include "base/bind.h" | 11 #include "base/bind.h" | 
| 12 #include "base/command_line.h" | 12 #include "base/command_line.h" | 
| 13 #include "base/feature_list.h" | 13 #include "base/feature_list.h" | 
| 14 #include "base/files/file_util.h" | 14 #include "base/files/file_util.h" | 
| 15 #include "base/files/scoped_temp_dir.h" | 15 #include "base/files/scoped_temp_dir.h" | 
| (...skipping 29 matching lines...) Expand all  Loading... | 
| 45 const ClientId kTestClientId3(kTestClientNamespace, "42"); | 45 const ClientId kTestClientId3(kTestClientNamespace, "42"); | 
| 46 const int64_t kTestFileSize = 876543LL; | 46 const int64_t kTestFileSize = 876543LL; | 
| 47 | 47 | 
| 48 bool URLSpecContains(std::string contains_value, const GURL& url) { | 48 bool URLSpecContains(std::string contains_value, const GURL& url) { | 
| 49   std::string spec = url.spec(); | 49   std::string spec = url.spec(); | 
| 50   return spec.find(contains_value) != std::string::npos; | 50   return spec.find(contains_value) != std::string::npos; | 
| 51 } | 51 } | 
| 52 | 52 | 
| 53 }  // namespace | 53 }  // namespace | 
| 54 | 54 | 
| 55 class OfflinePageModelTest | 55 class OfflinePageModelImplTest | 
| 56     : public testing::Test, | 56     : public testing::Test, | 
| 57       public OfflinePageModel::Observer, | 57       public OfflinePageModel::Observer, | 
| 58       public OfflinePageTestArchiver::Observer, | 58       public OfflinePageTestArchiver::Observer, | 
| 59       public base::SupportsWeakPtr<OfflinePageModelTest> { | 59       public base::SupportsWeakPtr<OfflinePageModelImplTest> { | 
| 60  public: | 60  public: | 
| 61   OfflinePageModelTest(); | 61   OfflinePageModelImplTest(); | 
| 62   ~OfflinePageModelTest() override; | 62   ~OfflinePageModelImplTest() override; | 
| 63 | 63 | 
| 64   void SetUp() override; | 64   void SetUp() override; | 
| 65   void TearDown() override; | 65   void TearDown() override; | 
| 66 | 66 | 
| 67   // OfflinePageModel::Observer implementation. | 67   // OfflinePageModel::Observer implementation. | 
| 68   void OfflinePageModelLoaded(OfflinePageModel* model) override; | 68   void OfflinePageModelLoaded(OfflinePageModel* model) override; | 
| 69   void OfflinePageModelChanged(OfflinePageModel* model) override; | 69   void OfflinePageModelChanged(OfflinePageModel* model) override; | 
| 70   void OfflinePageDeleted(int64_t offline_id, | 70   void OfflinePageDeleted(int64_t offline_id, | 
| 71                           const ClientId& client_id) override; | 71                           const ClientId& client_id) override; | 
| 72 | 72 | 
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 113   MultipleOfflinePageItemResult GetAllPages(); | 113   MultipleOfflinePageItemResult GetAllPages(); | 
| 114 | 114 | 
| 115   // Returns the offline ID of the saved page. | 115   // Returns the offline ID of the saved page. | 
| 116   std::pair<SavePageResult, int64_t> SavePage(const GURL& url, | 116   std::pair<SavePageResult, int64_t> SavePage(const GURL& url, | 
| 117                                               ClientId client_id); | 117                                               ClientId client_id); | 
| 118 | 118 | 
| 119   void SavePageWithArchiverResult(const GURL& url, | 119   void SavePageWithArchiverResult(const GURL& url, | 
| 120                                   ClientId client_id, | 120                                   ClientId client_id, | 
| 121                                   OfflinePageArchiver::ArchiverResult result); | 121                                   OfflinePageArchiver::ArchiverResult result); | 
| 122 | 122 | 
| 123   void DeletePage(int64_t offline_id, | 123   void DeletePage(int64_t offline_id, const DeletePageCallback& callback) { | 
| 124                   const DeletePageCallback& callback) { |  | 
| 125     std::vector<int64_t> offline_ids; | 124     std::vector<int64_t> offline_ids; | 
| 126     offline_ids.push_back(offline_id); | 125     offline_ids.push_back(offline_id); | 
| 127     model()->DeletePagesByOfflineId(offline_ids, callback); | 126     model()->DeletePagesByOfflineId(offline_ids, callback); | 
| 128   } | 127   } | 
| 129 | 128 | 
| 130   bool HasPages(std::string name_space); | 129   bool HasPages(std::string name_space); | 
| 131 | 130 | 
| 132   CheckPagesExistOfflineResult CheckPagesExistOffline(std::set<GURL>); | 131   CheckPagesExistOfflineResult CheckPagesExistOffline(std::set<GURL>); | 
| 133 | 132 | 
| 134   MultipleOfflineIdResult GetOfflineIdsForClientId(const ClientId& client_id); | 133   MultipleOfflineIdResult GetOfflineIdsForClientId(const ClientId& client_id); | 
| 135 | 134 | 
| 136   SingleOfflinePageItemResult GetPageByOfflineId(int64_t offline_id); | 135   SingleOfflinePageItemResult GetPageByOfflineId(int64_t offline_id); | 
| 137 | 136 | 
| 138   base::Optional<OfflinePageItem> GetPagesByOnlineURL(const GURL& offline_url); | 137   base::Optional<OfflinePageItem> GetPagesByOnlineURL(const GURL& offline_url); | 
| 139 | 138 | 
| 140   SingleOfflinePageItemResult GetPageByOfflineURL(const GURL& offline_url); | 139   SingleOfflinePageItemResult GetPageByOfflineURL(const GURL& offline_url); | 
| 141 | 140 | 
| 142   OfflinePageModel* model() { return model_.get(); } | 141   OfflinePageModel* model() { return model_.get(); } | 
| 143 | 142 | 
| 144   int64_t last_save_offline_id() const { return last_save_offline_id_; } | 143   int64_t last_save_offline_id() const { return last_save_offline_id_; } | 
| 145 | 144 | 
| 146   SavePageResult last_save_result() const { | 145   SavePageResult last_save_result() const { return last_save_result_; } | 
| 147     return last_save_result_; |  | 
| 148   } |  | 
| 149 | 146 | 
| 150   DeletePageResult last_delete_result() const { | 147   DeletePageResult last_delete_result() const { return last_delete_result_; } | 
| 151     return last_delete_result_; |  | 
| 152   } |  | 
| 153 | 148 | 
| 154   int64_t last_deleted_offline_id() const { return last_deleted_offline_id_; } | 149   int64_t last_deleted_offline_id() const { return last_deleted_offline_id_; } | 
| 155 | 150 | 
| 156   ClientId last_deleted_client_id() const { return last_deleted_client_id_; } | 151   ClientId last_deleted_client_id() const { return last_deleted_client_id_; } | 
| 157 | 152 | 
| 158   const base::FilePath& last_archiver_path() { return last_archiver_path_; } | 153   const base::FilePath& last_archiver_path() { return last_archiver_path_; } | 
| 159 | 154 | 
| 160   int last_cleared_pages_count() const { return last_cleared_pages_count_; } | 155   int last_cleared_pages_count() const { return last_cleared_pages_count_; } | 
| 161 | 156 | 
| 162   DeletePageResult last_clear_page_result() const { | 157   DeletePageResult last_clear_page_result() const { | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 174   DeletePageResult last_delete_result_; | 169   DeletePageResult last_delete_result_; | 
| 175   base::FilePath last_archiver_path_; | 170   base::FilePath last_archiver_path_; | 
| 176   int64_t last_deleted_offline_id_; | 171   int64_t last_deleted_offline_id_; | 
| 177   ClientId last_deleted_client_id_; | 172   ClientId last_deleted_client_id_; | 
| 178   bool last_has_pages_result_; | 173   bool last_has_pages_result_; | 
| 179   CheckPagesExistOfflineResult last_pages_exist_result_; | 174   CheckPagesExistOfflineResult last_pages_exist_result_; | 
| 180   int last_cleared_pages_count_; | 175   int last_cleared_pages_count_; | 
| 181   DeletePageResult last_clear_page_result_; | 176   DeletePageResult last_clear_page_result_; | 
| 182 }; | 177 }; | 
| 183 | 178 | 
| 184 OfflinePageModelTest::OfflinePageModelTest() | 179 OfflinePageModelImplTest::OfflinePageModelImplTest() | 
| 185     : task_runner_(new base::TestMockTimeTaskRunner), | 180     : task_runner_(new base::TestMockTimeTaskRunner), | 
| 186       task_runner_handle_(task_runner_), | 181       task_runner_handle_(task_runner_), | 
| 187       last_save_result_(SavePageResult::CANCELLED), | 182       last_save_result_(SavePageResult::CANCELLED), | 
| 188       last_save_offline_id_(-1), | 183       last_save_offline_id_(-1), | 
| 189       last_delete_result_(DeletePageResult::CANCELLED), | 184       last_delete_result_(DeletePageResult::CANCELLED), | 
| 190       last_deleted_offline_id_(-1) {} | 185       last_deleted_offline_id_(-1) {} | 
| 191 | 186 | 
| 192 OfflinePageModelTest::~OfflinePageModelTest() { | 187 OfflinePageModelImplTest::~OfflinePageModelImplTest() {} | 
| 193 } |  | 
| 194 | 188 | 
| 195 void OfflinePageModelTest::SetUp() { | 189 void OfflinePageModelImplTest::SetUp() { | 
| 196   ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 190   ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 
| 197   model_ = BuildModel(BuildStore()); | 191   model_ = BuildModel(BuildStore()); | 
| 198   model_->AddObserver(this); | 192   model_->AddObserver(this); | 
| 199   PumpLoop(); | 193   PumpLoop(); | 
| 200 } | 194 } | 
| 201 | 195 | 
| 202 void OfflinePageModelTest::TearDown() { | 196 void OfflinePageModelImplTest::TearDown() { | 
| 203   model_->RemoveObserver(this); | 197   model_->RemoveObserver(this); | 
| 204   model_.reset(); | 198   model_.reset(); | 
| 205   PumpLoop(); | 199   PumpLoop(); | 
| 206 } | 200 } | 
| 207 | 201 | 
| 208 void OfflinePageModelTest::OfflinePageModelLoaded(OfflinePageModel* model) { | 202 void OfflinePageModelImplTest::OfflinePageModelLoaded(OfflinePageModel* model) { | 
| 209   ASSERT_EQ(model_.get(), model); | 203   ASSERT_EQ(model_.get(), model); | 
| 210 } | 204 } | 
| 211 | 205 | 
| 212 void OfflinePageModelTest::OfflinePageModelChanged(OfflinePageModel* model) { | 206 void OfflinePageModelImplTest::OfflinePageModelChanged( | 
|  | 207     OfflinePageModel* model) { | 
| 213   ASSERT_EQ(model_.get(), model); | 208   ASSERT_EQ(model_.get(), model); | 
| 214 } | 209 } | 
| 215 | 210 | 
| 216 void OfflinePageModelTest::OfflinePageDeleted(int64_t offline_id, | 211 void OfflinePageModelImplTest::OfflinePageDeleted(int64_t offline_id, | 
| 217                                               const ClientId& client_id) { | 212                                                   const ClientId& client_id) { | 
| 218   last_deleted_offline_id_ = offline_id; | 213   last_deleted_offline_id_ = offline_id; | 
| 219   last_deleted_client_id_ = client_id; | 214   last_deleted_client_id_ = client_id; | 
| 220 } | 215 } | 
| 221 | 216 | 
| 222 void OfflinePageModelTest::SetLastPathCreatedByArchiver( | 217 void OfflinePageModelImplTest::SetLastPathCreatedByArchiver( | 
| 223     const base::FilePath& file_path) { | 218     const base::FilePath& file_path) { | 
| 224   last_archiver_path_ = file_path; | 219   last_archiver_path_ = file_path; | 
| 225 } | 220 } | 
| 226 | 221 | 
| 227 void OfflinePageModelTest::OnSavePageDone(SavePageResult result, | 222 void OfflinePageModelImplTest::OnSavePageDone(SavePageResult result, | 
| 228                                           int64_t offline_id) { | 223                                               int64_t offline_id) { | 
| 229   last_save_result_ = result; | 224   last_save_result_ = result; | 
| 230   last_save_offline_id_ = offline_id; | 225   last_save_offline_id_ = offline_id; | 
| 231 } | 226 } | 
| 232 | 227 | 
| 233 void OfflinePageModelTest::OnDeletePageDone(DeletePageResult result) { | 228 void OfflinePageModelImplTest::OnDeletePageDone(DeletePageResult result) { | 
| 234   last_delete_result_ = result; | 229   last_delete_result_ = result; | 
| 235 } | 230 } | 
| 236 | 231 | 
| 237 void OfflinePageModelTest::OnHasPagesDone(bool result) { | 232 void OfflinePageModelImplTest::OnHasPagesDone(bool result) { | 
| 238   last_has_pages_result_ = result; | 233   last_has_pages_result_ = result; | 
| 239 } | 234 } | 
| 240 | 235 | 
| 241 void OfflinePageModelTest::OnCheckPagesExistOfflineDone( | 236 void OfflinePageModelImplTest::OnCheckPagesExistOfflineDone( | 
| 242     const CheckPagesExistOfflineResult& result) { | 237     const CheckPagesExistOfflineResult& result) { | 
| 243   last_pages_exist_result_ = result; | 238   last_pages_exist_result_ = result; | 
| 244 } | 239 } | 
| 245 | 240 | 
| 246 void OfflinePageModelTest::OnClearAllDone() { | 241 void OfflinePageModelImplTest::OnClearAllDone() { | 
| 247   PumpLoop(); | 242   PumpLoop(); | 
| 248 } | 243 } | 
| 249 | 244 | 
| 250 void OfflinePageModelTest::OnStoreUpdateDone(bool /* success - ignored */) { | 245 void OfflinePageModelImplTest::OnStoreUpdateDone(bool /* success - ignored */) { | 
| 251 } | 246 } | 
| 252 | 247 | 
| 253 std::unique_ptr<OfflinePageTestArchiver> OfflinePageModelTest::BuildArchiver( | 248 std::unique_ptr<OfflinePageTestArchiver> | 
|  | 249 OfflinePageModelImplTest::BuildArchiver( | 
| 254     const GURL& url, | 250     const GURL& url, | 
| 255     OfflinePageArchiver::ArchiverResult result) { | 251     OfflinePageArchiver::ArchiverResult result) { | 
| 256   return std::unique_ptr<OfflinePageTestArchiver>(new OfflinePageTestArchiver( | 252   return std::unique_ptr<OfflinePageTestArchiver>(new OfflinePageTestArchiver( | 
| 257       this, url, result, kTestFileSize, base::ThreadTaskRunnerHandle::Get())); | 253       this, url, result, kTestFileSize, base::ThreadTaskRunnerHandle::Get())); | 
| 258 } | 254 } | 
| 259 | 255 | 
| 260 std::unique_ptr<OfflinePageMetadataStore> OfflinePageModelTest::BuildStore() { | 256 std::unique_ptr<OfflinePageMetadataStore> | 
|  | 257 OfflinePageModelImplTest::BuildStore() { | 
| 261   return std::unique_ptr<OfflinePageMetadataStore>( | 258   return std::unique_ptr<OfflinePageMetadataStore>( | 
| 262       new OfflinePageTestStore(base::ThreadTaskRunnerHandle::Get())); | 259       new OfflinePageTestStore(base::ThreadTaskRunnerHandle::Get())); | 
| 263 } | 260 } | 
| 264 | 261 | 
| 265 std::unique_ptr<OfflinePageModel> OfflinePageModelTest::BuildModel( | 262 std::unique_ptr<OfflinePageModel> OfflinePageModelImplTest::BuildModel( | 
| 266     std::unique_ptr<OfflinePageMetadataStore> store) { | 263     std::unique_ptr<OfflinePageMetadataStore> store) { | 
| 267   return std::unique_ptr<OfflinePageModel>(new OfflinePageModel( | 264   return std::unique_ptr<OfflinePageModel>(new OfflinePageModelImpl( | 
| 268       std::move(store), temp_dir_.path(), base::ThreadTaskRunnerHandle::Get())); | 265       std::move(store), temp_dir_.path(), base::ThreadTaskRunnerHandle::Get())); | 
| 269 } | 266 } | 
| 270 | 267 | 
| 271 void OfflinePageModelTest::ResetModel() { | 268 void OfflinePageModelImplTest::ResetModel() { | 
| 272   model_->RemoveObserver(this); | 269   model_->RemoveObserver(this); | 
| 273   OfflinePageTestStore* old_store = GetStore(); | 270   OfflinePageTestStore* old_store = GetStore(); | 
| 274   std::unique_ptr<OfflinePageMetadataStore> new_store( | 271   std::unique_ptr<OfflinePageMetadataStore> new_store( | 
| 275       new OfflinePageTestStore(*old_store)); | 272       new OfflinePageTestStore(*old_store)); | 
| 276   model_ = BuildModel(std::move(new_store)); | 273   model_ = BuildModel(std::move(new_store)); | 
| 277   model_->AddObserver(this); | 274   model_->AddObserver(this); | 
| 278   PumpLoop(); | 275   PumpLoop(); | 
| 279 } | 276 } | 
| 280 | 277 | 
| 281 void OfflinePageModelTest::PumpLoop() { | 278 void OfflinePageModelImplTest::PumpLoop() { | 
| 282   task_runner_->RunUntilIdle(); | 279   task_runner_->RunUntilIdle(); | 
| 283 } | 280 } | 
| 284 | 281 | 
| 285 void OfflinePageModelTest::FastForwardBy(base::TimeDelta delta) { | 282 void OfflinePageModelImplTest::FastForwardBy(base::TimeDelta delta) { | 
| 286   task_runner_->FastForwardBy(delta); | 283   task_runner_->FastForwardBy(delta); | 
| 287 } | 284 } | 
| 288 | 285 | 
| 289 void OfflinePageModelTest::ResetResults() { | 286 void OfflinePageModelImplTest::ResetResults() { | 
| 290   last_save_result_ = SavePageResult::CANCELLED; | 287   last_save_result_ = SavePageResult::CANCELLED; | 
| 291   last_delete_result_ = DeletePageResult::CANCELLED; | 288   last_delete_result_ = DeletePageResult::CANCELLED; | 
| 292   last_archiver_path_.clear(); | 289   last_archiver_path_.clear(); | 
| 293   last_pages_exist_result_.clear(); | 290   last_pages_exist_result_.clear(); | 
| 294   last_cleared_pages_count_ = 0; | 291   last_cleared_pages_count_ = 0; | 
| 295 } | 292 } | 
| 296 | 293 | 
| 297 OfflinePageTestStore* OfflinePageModelTest::GetStore() { | 294 OfflinePageTestStore* OfflinePageModelImplTest::GetStore() { | 
| 298   return static_cast<OfflinePageTestStore*>(model()->GetStoreForTesting()); | 295   return static_cast<OfflinePageTestStore*>(model()->GetStoreForTesting()); | 
| 299 } | 296 } | 
| 300 | 297 | 
| 301 std::pair<SavePageResult, int64_t> OfflinePageModelTest::SavePage( | 298 std::pair<SavePageResult, int64_t> OfflinePageModelImplTest::SavePage( | 
| 302     const GURL& url, | 299     const GURL& url, | 
| 303     ClientId client_id) { | 300     ClientId client_id) { | 
| 304   SavePageWithArchiverResult( | 301   SavePageWithArchiverResult( | 
| 305       url, client_id, | 302       url, client_id, | 
| 306       OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED); | 303       OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED); | 
| 307   return std::make_pair(last_save_result_, last_save_offline_id_); | 304   return std::make_pair(last_save_result_, last_save_offline_id_); | 
| 308 } | 305 } | 
| 309 | 306 | 
| 310 void OfflinePageModelTest::SavePageWithArchiverResult( | 307 void OfflinePageModelImplTest::SavePageWithArchiverResult( | 
| 311     const GURL& url, | 308     const GURL& url, | 
| 312     ClientId client_id, | 309     ClientId client_id, | 
| 313     OfflinePageArchiver::ArchiverResult result) { | 310     OfflinePageArchiver::ArchiverResult result) { | 
| 314   std::unique_ptr<OfflinePageTestArchiver> archiver(BuildArchiver(url, result)); | 311   std::unique_ptr<OfflinePageTestArchiver> archiver(BuildArchiver(url, result)); | 
| 315   model()->SavePage( | 312   model()->SavePage( | 
| 316       url, client_id, std::move(archiver), | 313       url, client_id, std::move(archiver), | 
| 317       base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); | 314       base::Bind(&OfflinePageModelImplTest::OnSavePageDone, AsWeakPtr())); | 
| 318   PumpLoop(); | 315   PumpLoop(); | 
| 319 } | 316 } | 
| 320 | 317 | 
| 321 MultipleOfflinePageItemResult OfflinePageModelTest::GetAllPages() { | 318 MultipleOfflinePageItemResult OfflinePageModelImplTest::GetAllPages() { | 
| 322   MultipleOfflinePageItemResult result; | 319   MultipleOfflinePageItemResult result; | 
| 323   model()->GetAllPages( | 320   model()->GetAllPages( | 
| 324       base::Bind(&OfflinePageModelTest::OnGetMultipleOfflinePageItemsResult, | 321       base::Bind(&OfflinePageModelImplTest::OnGetMultipleOfflinePageItemsResult, | 
| 325                  AsWeakPtr(), base::Unretained(&result))); | 322                  AsWeakPtr(), base::Unretained(&result))); | 
| 326   PumpLoop(); | 323   PumpLoop(); | 
| 327   return result; | 324   return result; | 
| 328 } | 325 } | 
| 329 | 326 | 
| 330 CheckPagesExistOfflineResult OfflinePageModelTest::CheckPagesExistOffline( | 327 CheckPagesExistOfflineResult OfflinePageModelImplTest::CheckPagesExistOffline( | 
| 331     std::set<GURL> pages) { | 328     std::set<GURL> pages) { | 
| 332   model()->CheckPagesExistOffline( | 329   model()->CheckPagesExistOffline( | 
| 333       pages, base::Bind(&OfflinePageModelTest::OnCheckPagesExistOfflineDone, | 330       pages, base::Bind(&OfflinePageModelImplTest::OnCheckPagesExistOfflineDone, | 
| 334                         AsWeakPtr())); | 331                         AsWeakPtr())); | 
| 335   PumpLoop(); | 332   PumpLoop(); | 
| 336   return last_pages_exist_result_; | 333   return last_pages_exist_result_; | 
| 337 } | 334 } | 
| 338 | 335 | 
| 339 MultipleOfflineIdResult OfflinePageModelTest::GetOfflineIdsForClientId( | 336 MultipleOfflineIdResult OfflinePageModelImplTest::GetOfflineIdsForClientId( | 
| 340     const ClientId& client_id) { | 337     const ClientId& client_id) { | 
| 341   MultipleOfflineIdResult result; | 338   MultipleOfflineIdResult result; | 
| 342   model()->GetOfflineIdsForClientId( | 339   model()->GetOfflineIdsForClientId( | 
| 343       client_id, | 340       client_id, | 
| 344       base::Bind(&OfflinePageModelTest::OnGetOfflineIdsForClientIdDone, | 341       base::Bind(&OfflinePageModelImplTest::OnGetOfflineIdsForClientIdDone, | 
| 345                  AsWeakPtr(), base::Unretained(&result))); | 342                  AsWeakPtr(), base::Unretained(&result))); | 
| 346   PumpLoop(); | 343   PumpLoop(); | 
| 347   return result; | 344   return result; | 
| 348 } | 345 } | 
| 349 | 346 | 
| 350 void OfflinePageModelTest::OnGetOfflineIdsForClientIdDone( | 347 void OfflinePageModelImplTest::OnGetOfflineIdsForClientIdDone( | 
| 351     MultipleOfflineIdResult* storage, | 348     MultipleOfflineIdResult* storage, | 
| 352     const MultipleOfflineIdResult& result) { | 349     const MultipleOfflineIdResult& result) { | 
| 353   *storage = result; | 350   *storage = result; | 
| 354 } | 351 } | 
| 355 | 352 | 
| 356 SingleOfflinePageItemResult OfflinePageModelTest::GetPageByOfflineId( | 353 SingleOfflinePageItemResult OfflinePageModelImplTest::GetPageByOfflineId( | 
| 357     int64_t offline_id) { | 354     int64_t offline_id) { | 
| 358   SingleOfflinePageItemResult result; | 355   SingleOfflinePageItemResult result; | 
| 359   model()->GetPageByOfflineId( | 356   model()->GetPageByOfflineId( | 
| 360       offline_id, | 357       offline_id, | 
| 361       base::Bind(&OfflinePageModelTest::OnGetSingleOfflinePageItemResult, | 358       base::Bind(&OfflinePageModelImplTest::OnGetSingleOfflinePageItemResult, | 
| 362                  AsWeakPtr(), base::Unretained(&result))); | 359                  AsWeakPtr(), base::Unretained(&result))); | 
| 363   PumpLoop(); | 360   PumpLoop(); | 
| 364   return result; | 361   return result; | 
| 365 } | 362 } | 
| 366 | 363 | 
| 367 SingleOfflinePageItemResult OfflinePageModelTest::GetPageByOfflineURL( | 364 SingleOfflinePageItemResult OfflinePageModelImplTest::GetPageByOfflineURL( | 
| 368     const GURL& offline_url) { | 365     const GURL& offline_url) { | 
| 369   SingleOfflinePageItemResult result; | 366   SingleOfflinePageItemResult result; | 
| 370   model()->GetPageByOfflineURL( | 367   model()->GetPageByOfflineURL( | 
| 371       offline_url, | 368       offline_url, | 
| 372       base::Bind(&OfflinePageModelTest::OnGetSingleOfflinePageItemResult, | 369       base::Bind(&OfflinePageModelImplTest::OnGetSingleOfflinePageItemResult, | 
| 373                  AsWeakPtr(), base::Unretained(&result))); | 370                  AsWeakPtr(), base::Unretained(&result))); | 
| 374   PumpLoop(); | 371   PumpLoop(); | 
| 375   return result; | 372   return result; | 
| 376 } | 373 } | 
| 377 | 374 | 
| 378 void OfflinePageModelTest::OnGetSingleOfflinePageItemResult( | 375 void OfflinePageModelImplTest::OnGetSingleOfflinePageItemResult( | 
| 379     SingleOfflinePageItemResult* storage, | 376     SingleOfflinePageItemResult* storage, | 
| 380     const SingleOfflinePageItemResult& result) { | 377     const SingleOfflinePageItemResult& result) { | 
| 381   *storage = result; | 378   *storage = result; | 
| 382 } | 379 } | 
| 383 | 380 | 
| 384 void OfflinePageModelTest::OnGetMultipleOfflinePageItemsResult( | 381 void OfflinePageModelImplTest::OnGetMultipleOfflinePageItemsResult( | 
| 385     MultipleOfflinePageItemResult* storage, | 382     MultipleOfflinePageItemResult* storage, | 
| 386     const MultipleOfflinePageItemResult& result) { | 383     const MultipleOfflinePageItemResult& result) { | 
| 387   *storage = result; | 384   *storage = result; | 
| 388 } | 385 } | 
| 389 | 386 | 
| 390 base::Optional<OfflinePageItem> OfflinePageModelTest::GetPagesByOnlineURL( | 387 base::Optional<OfflinePageItem> OfflinePageModelImplTest::GetPagesByOnlineURL( | 
| 391     const GURL& online_url) { | 388     const GURL& online_url) { | 
| 392   MultipleOfflinePageItemResult result; | 389   MultipleOfflinePageItemResult result; | 
| 393   model()->GetPagesByOnlineURL( | 390   model()->GetPagesByOnlineURL( | 
| 394       online_url, | 391       online_url, | 
| 395       base::Bind(&OfflinePageModelTest::OnGetMultipleOfflinePageItemsResult, | 392       base::Bind(&OfflinePageModelImplTest::OnGetMultipleOfflinePageItemsResult, | 
| 396                  AsWeakPtr(), base::Unretained(&result))); | 393                  AsWeakPtr(), base::Unretained(&result))); | 
| 397   PumpLoop(); | 394   PumpLoop(); | 
| 398   if (result.size() > 0) | 395   if (result.size() > 0) | 
| 399     return base::make_optional(result[0]); | 396     return base::make_optional(result[0]); | 
| 400   return base::nullopt; | 397   return base::nullopt; | 
| 401 } | 398 } | 
| 402 | 399 | 
| 403 bool OfflinePageModelTest::HasPages(std::string name_space) { | 400 bool OfflinePageModelImplTest::HasPages(std::string name_space) { | 
| 404   model()->HasPages( | 401   model()->HasPages( | 
| 405       name_space, | 402       name_space, | 
| 406       base::Bind(&OfflinePageModelTest::OnHasPagesDone, AsWeakPtr())); | 403       base::Bind(&OfflinePageModelImplTest::OnHasPagesDone, AsWeakPtr())); | 
| 407   PumpLoop(); | 404   PumpLoop(); | 
| 408   return last_has_pages_result_; | 405   return last_has_pages_result_; | 
| 409 } | 406 } | 
| 410 | 407 | 
| 411 TEST_F(OfflinePageModelTest, SavePageSuccessful) { | 408 TEST_F(OfflinePageModelImplTest, SavePageSuccessful) { | 
| 412   EXPECT_FALSE(HasPages(kTestClientNamespace)); | 409   EXPECT_FALSE(HasPages(kTestClientNamespace)); | 
| 413   SavePage(kTestUrl, kTestClientId1); | 410   SavePage(kTestUrl, kTestClientId1); | 
| 414   EXPECT_TRUE(HasPages(kTestClientNamespace)); | 411   EXPECT_TRUE(HasPages(kTestClientNamespace)); | 
| 415 | 412 | 
| 416   OfflinePageTestStore* store = GetStore(); | 413   OfflinePageTestStore* store = GetStore(); | 
| 417   EXPECT_EQ(kTestUrl, store->last_saved_page().url); | 414   EXPECT_EQ(kTestUrl, store->last_saved_page().url); | 
| 418   EXPECT_EQ(kTestClientId1.id, store->last_saved_page().client_id.id); | 415   EXPECT_EQ(kTestClientId1.id, store->last_saved_page().client_id.id); | 
| 419   EXPECT_EQ(kTestClientId1.name_space, | 416   EXPECT_EQ(kTestClientId1.name_space, | 
| 420             store->last_saved_page().client_id.name_space); | 417             store->last_saved_page().client_id.name_space); | 
| 421   // Save last_archiver_path since it will be referred to later. | 418   // Save last_archiver_path since it will be referred to later. | 
| 422   base::FilePath archiver_path = last_archiver_path(); | 419   base::FilePath archiver_path = last_archiver_path(); | 
| 423   EXPECT_EQ(archiver_path, store->last_saved_page().file_path); | 420   EXPECT_EQ(archiver_path, store->last_saved_page().file_path); | 
| 424   EXPECT_EQ(kTestFileSize, store->last_saved_page().file_size); | 421   EXPECT_EQ(kTestFileSize, store->last_saved_page().file_size); | 
| 425   EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); | 422   EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); | 
| 426   ResetResults(); | 423   ResetResults(); | 
| 427 | 424 | 
| 428   const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); | 425   const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); | 
| 429 | 426 | 
| 430   EXPECT_EQ(1UL, offline_pages.size()); | 427   EXPECT_EQ(1UL, offline_pages.size()); | 
| 431   EXPECT_EQ(kTestUrl, offline_pages[0].url); | 428   EXPECT_EQ(kTestUrl, offline_pages[0].url); | 
| 432   EXPECT_EQ(kTestClientId1.id, offline_pages[0].client_id.id); | 429   EXPECT_EQ(kTestClientId1.id, offline_pages[0].client_id.id); | 
| 433   EXPECT_EQ(kTestClientId1.name_space, offline_pages[0].client_id.name_space); | 430   EXPECT_EQ(kTestClientId1.name_space, offline_pages[0].client_id.name_space); | 
| 434   EXPECT_EQ(archiver_path, offline_pages[0].file_path); | 431   EXPECT_EQ(archiver_path, offline_pages[0].file_path); | 
| 435   EXPECT_EQ(kTestFileSize, offline_pages[0].file_size); | 432   EXPECT_EQ(kTestFileSize, offline_pages[0].file_size); | 
| 436   EXPECT_EQ(0, offline_pages[0].access_count); | 433   EXPECT_EQ(0, offline_pages[0].access_count); | 
| 437   EXPECT_EQ(0, offline_pages[0].flags); | 434   EXPECT_EQ(0, offline_pages[0].flags); | 
| 438 } | 435 } | 
| 439 | 436 | 
| 440 TEST_F(OfflinePageModelTest, SavePageOfflineArchiverCancelled) { | 437 TEST_F(OfflinePageModelImplTest, SavePageOfflineArchiverCancelled) { | 
| 441   SavePageWithArchiverResult( | 438   SavePageWithArchiverResult( | 
| 442       kTestUrl, kTestClientId1, | 439       kTestUrl, kTestClientId1, | 
| 443       OfflinePageArchiver::ArchiverResult::ERROR_CANCELED); | 440       OfflinePageArchiver::ArchiverResult::ERROR_CANCELED); | 
| 444   EXPECT_EQ(SavePageResult::CANCELLED, last_save_result()); | 441   EXPECT_EQ(SavePageResult::CANCELLED, last_save_result()); | 
| 445 } | 442 } | 
| 446 | 443 | 
| 447 TEST_F(OfflinePageModelTest, SavePageOfflineArchiverDeviceFull) { | 444 TEST_F(OfflinePageModelImplTest, SavePageOfflineArchiverDeviceFull) { | 
| 448   SavePageWithArchiverResult( | 445   SavePageWithArchiverResult( | 
| 449       kTestUrl, kTestClientId1, | 446       kTestUrl, kTestClientId1, | 
| 450       OfflinePageArchiver::ArchiverResult::ERROR_DEVICE_FULL); | 447       OfflinePageArchiver::ArchiverResult::ERROR_DEVICE_FULL); | 
| 451   EXPECT_EQ(SavePageResult::DEVICE_FULL, last_save_result()); | 448   EXPECT_EQ(SavePageResult::DEVICE_FULL, last_save_result()); | 
| 452 } | 449 } | 
| 453 | 450 | 
| 454 TEST_F(OfflinePageModelTest, SavePageOfflineArchiverContentUnavailable) { | 451 TEST_F(OfflinePageModelImplTest, SavePageOfflineArchiverContentUnavailable) { | 
| 455   SavePageWithArchiverResult( | 452   SavePageWithArchiverResult( | 
| 456       kTestUrl, kTestClientId1, | 453       kTestUrl, kTestClientId1, | 
| 457       OfflinePageArchiver::ArchiverResult::ERROR_CONTENT_UNAVAILABLE); | 454       OfflinePageArchiver::ArchiverResult::ERROR_CONTENT_UNAVAILABLE); | 
| 458   EXPECT_EQ(SavePageResult::CONTENT_UNAVAILABLE, last_save_result()); | 455   EXPECT_EQ(SavePageResult::CONTENT_UNAVAILABLE, last_save_result()); | 
| 459 } | 456 } | 
| 460 | 457 | 
| 461 TEST_F(OfflinePageModelTest, SavePageOfflineCreationFailed) { | 458 TEST_F(OfflinePageModelImplTest, SavePageOfflineCreationFailed) { | 
| 462   SavePageWithArchiverResult( | 459   SavePageWithArchiverResult( | 
| 463       kTestUrl, kTestClientId1, | 460       kTestUrl, kTestClientId1, | 
| 464       OfflinePageArchiver::ArchiverResult::ERROR_ARCHIVE_CREATION_FAILED); | 461       OfflinePageArchiver::ArchiverResult::ERROR_ARCHIVE_CREATION_FAILED); | 
| 465   EXPECT_EQ(SavePageResult::ARCHIVE_CREATION_FAILED, last_save_result()); | 462   EXPECT_EQ(SavePageResult::ARCHIVE_CREATION_FAILED, last_save_result()); | 
| 466 } | 463 } | 
| 467 | 464 | 
| 468 TEST_F(OfflinePageModelTest, SavePageOfflineArchiverReturnedWrongUrl) { | 465 TEST_F(OfflinePageModelImplTest, SavePageOfflineArchiverReturnedWrongUrl) { | 
| 469   std::unique_ptr<OfflinePageTestArchiver> archiver( | 466   std::unique_ptr<OfflinePageTestArchiver> archiver( | 
| 470       BuildArchiver(GURL("http://other.random.url.com"), | 467       BuildArchiver(GURL("http://other.random.url.com"), | 
| 471                     OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); | 468                     OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); | 
| 472   model()->SavePage( | 469   model()->SavePage( | 
| 473       kTestUrl, kTestClientId1, std::move(archiver), | 470       kTestUrl, kTestClientId1, std::move(archiver), | 
| 474       base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); | 471       base::Bind(&OfflinePageModelImplTest::OnSavePageDone, AsWeakPtr())); | 
| 475   PumpLoop(); | 472   PumpLoop(); | 
| 476   EXPECT_EQ(SavePageResult::ARCHIVE_CREATION_FAILED, last_save_result()); | 473   EXPECT_EQ(SavePageResult::ARCHIVE_CREATION_FAILED, last_save_result()); | 
| 477 } | 474 } | 
| 478 | 475 | 
| 479 TEST_F(OfflinePageModelTest, SavePageOfflineCreationStoreWriteFailure) { | 476 TEST_F(OfflinePageModelImplTest, SavePageOfflineCreationStoreWriteFailure) { | 
| 480   GetStore()->set_test_scenario( | 477   GetStore()->set_test_scenario( | 
| 481       OfflinePageTestStore::TestScenario::WRITE_FAILED); | 478       OfflinePageTestStore::TestScenario::WRITE_FAILED); | 
| 482   SavePage(kTestUrl, kTestClientId1); | 479   SavePage(kTestUrl, kTestClientId1); | 
| 483   EXPECT_EQ(SavePageResult::STORE_FAILURE, last_save_result()); | 480   EXPECT_EQ(SavePageResult::STORE_FAILURE, last_save_result()); | 
| 484 } | 481 } | 
| 485 | 482 | 
| 486 TEST_F(OfflinePageModelTest, SavePageLocalFileFailed) { | 483 TEST_F(OfflinePageModelImplTest, SavePageLocalFileFailed) { | 
| 487   // Don't create archiver since it will not be needed for pages that are not | 484   // Don't create archiver since it will not be needed for pages that are not | 
| 488   // going to be saved. | 485   // going to be saved. | 
| 489   model()->SavePage( | 486   model()->SavePage( | 
| 490       kFileUrl, kTestClientId1, std::unique_ptr<OfflinePageTestArchiver>(), | 487       kFileUrl, kTestClientId1, std::unique_ptr<OfflinePageTestArchiver>(), | 
| 491       base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); | 488       base::Bind(&OfflinePageModelImplTest::OnSavePageDone, AsWeakPtr())); | 
| 492   PumpLoop(); | 489   PumpLoop(); | 
| 493   EXPECT_EQ(SavePageResult::SKIPPED, last_save_result()); | 490   EXPECT_EQ(SavePageResult::SKIPPED, last_save_result()); | 
| 494 } | 491 } | 
| 495 | 492 | 
| 496 TEST_F(OfflinePageModelTest, SavePageOfflineArchiverTwoPages) { | 493 TEST_F(OfflinePageModelImplTest, SavePageOfflineArchiverTwoPages) { | 
| 497   std::unique_ptr<OfflinePageTestArchiver> archiver(BuildArchiver( | 494   std::unique_ptr<OfflinePageTestArchiver> archiver(BuildArchiver( | 
| 498       kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); | 495       kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); | 
| 499   // archiver_ptr will be valid until after first PumpLoop() call after | 496   // archiver_ptr will be valid until after first PumpLoop() call after | 
| 500   // CompleteCreateArchive() is called. | 497   // CompleteCreateArchive() is called. | 
| 501   OfflinePageTestArchiver* archiver_ptr = archiver.get(); | 498   OfflinePageTestArchiver* archiver_ptr = archiver.get(); | 
| 502   archiver_ptr->set_delayed(true); | 499   archiver_ptr->set_delayed(true); | 
| 503   model()->SavePage( | 500   model()->SavePage( | 
| 504       kTestUrl, kTestClientId1, std::move(archiver), | 501       kTestUrl, kTestClientId1, std::move(archiver), | 
| 505       base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); | 502       base::Bind(&OfflinePageModelImplTest::OnSavePageDone, AsWeakPtr())); | 
| 506   EXPECT_TRUE(archiver_ptr->create_archive_called()); | 503   EXPECT_TRUE(archiver_ptr->create_archive_called()); | 
| 507 | 504 | 
| 508   // Request to save another page. | 505   // Request to save another page. | 
| 509   SavePage(kTestUrl2, kTestClientId2); | 506   SavePage(kTestUrl2, kTestClientId2); | 
| 510 | 507 | 
| 511   OfflinePageTestStore* store = GetStore(); | 508   OfflinePageTestStore* store = GetStore(); | 
| 512 | 509 | 
| 513   EXPECT_EQ(kTestUrl2, store->last_saved_page().url); | 510   EXPECT_EQ(kTestUrl2, store->last_saved_page().url); | 
| 514   EXPECT_EQ(kTestClientId2, store->last_saved_page().client_id); | 511   EXPECT_EQ(kTestClientId2, store->last_saved_page().client_id); | 
| 515   base::FilePath archiver_path2 = last_archiver_path(); | 512   base::FilePath archiver_path2 = last_archiver_path(); | 
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 554   EXPECT_EQ(0, page1->access_count); | 551   EXPECT_EQ(0, page1->access_count); | 
| 555   EXPECT_EQ(0, page1->flags); | 552   EXPECT_EQ(0, page1->flags); | 
| 556   EXPECT_EQ(kTestUrl2, page2->url); | 553   EXPECT_EQ(kTestUrl2, page2->url); | 
| 557   EXPECT_EQ(kTestClientId2, page2->client_id); | 554   EXPECT_EQ(kTestClientId2, page2->client_id); | 
| 558   EXPECT_EQ(archiver_path2, page2->file_path); | 555   EXPECT_EQ(archiver_path2, page2->file_path); | 
| 559   EXPECT_EQ(kTestFileSize, page2->file_size); | 556   EXPECT_EQ(kTestFileSize, page2->file_size); | 
| 560   EXPECT_EQ(0, page2->access_count); | 557   EXPECT_EQ(0, page2->access_count); | 
| 561   EXPECT_EQ(0, page2->flags); | 558   EXPECT_EQ(0, page2->flags); | 
| 562 } | 559 } | 
| 563 | 560 | 
| 564 TEST_F(OfflinePageModelTest, MarkPageAccessed) { | 561 TEST_F(OfflinePageModelImplTest, MarkPageAccessed) { | 
| 565   SavePage(kTestUrl, kTestClientId1); | 562   SavePage(kTestUrl, kTestClientId1); | 
| 566 | 563 | 
| 567   // This will increase access_count by one. | 564   // This will increase access_count by one. | 
| 568   model()->MarkPageAccessed(last_save_offline_id()); | 565   model()->MarkPageAccessed(last_save_offline_id()); | 
| 569   PumpLoop(); | 566   PumpLoop(); | 
| 570 | 567 | 
| 571   const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); | 568   const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); | 
| 572 | 569 | 
| 573   EXPECT_EQ(1UL, offline_pages.size()); | 570   EXPECT_EQ(1UL, offline_pages.size()); | 
| 574   EXPECT_EQ(kTestUrl, offline_pages[0].url); | 571   EXPECT_EQ(kTestUrl, offline_pages[0].url); | 
| 575   EXPECT_EQ(kTestClientId1, offline_pages[0].client_id); | 572   EXPECT_EQ(kTestClientId1, offline_pages[0].client_id); | 
| 576   EXPECT_EQ(kTestFileSize, offline_pages[0].file_size); | 573   EXPECT_EQ(kTestFileSize, offline_pages[0].file_size); | 
| 577   EXPECT_EQ(1, offline_pages[0].access_count); | 574   EXPECT_EQ(1, offline_pages[0].access_count); | 
| 578 } | 575 } | 
| 579 | 576 | 
| 580 TEST_F(OfflinePageModelTest, GetAllPagesStoreEmpty) { | 577 TEST_F(OfflinePageModelImplTest, GetAllPagesStoreEmpty) { | 
| 581   const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); | 578   const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); | 
| 582 | 579 | 
| 583   EXPECT_EQ(0UL, offline_pages.size()); | 580   EXPECT_EQ(0UL, offline_pages.size()); | 
| 584 } | 581 } | 
| 585 | 582 | 
| 586 TEST_F(OfflinePageModelTest, GetAllPagesStoreFailure) { | 583 TEST_F(OfflinePageModelImplTest, GetAllPagesStoreFailure) { | 
| 587   GetStore()->set_test_scenario( | 584   GetStore()->set_test_scenario( | 
| 588       OfflinePageTestStore::TestScenario::LOAD_FAILED); | 585       OfflinePageTestStore::TestScenario::LOAD_FAILED); | 
| 589   const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); | 586   const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); | 
| 590 | 587 | 
| 591   EXPECT_EQ(0UL, offline_pages.size()); | 588   EXPECT_EQ(0UL, offline_pages.size()); | 
| 592 } | 589 } | 
| 593 | 590 | 
| 594 TEST_F(OfflinePageModelTest, DeletePageSuccessful) { | 591 TEST_F(OfflinePageModelImplTest, DeletePageSuccessful) { | 
| 595   OfflinePageTestStore* store = GetStore(); | 592   OfflinePageTestStore* store = GetStore(); | 
| 596 | 593 | 
| 597   // Save one page. | 594   // Save one page. | 
| 598   SavePage(kTestUrl, kTestClientId1); | 595   SavePage(kTestUrl, kTestClientId1); | 
| 599   int64_t offline1 = last_save_offline_id(); | 596   int64_t offline1 = last_save_offline_id(); | 
| 600   EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); | 597   EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); | 
| 601   EXPECT_EQ(1u, store->GetAllPages().size()); | 598   EXPECT_EQ(1u, store->GetAllPages().size()); | 
| 602 | 599 | 
| 603   ResetResults(); | 600   ResetResults(); | 
| 604 | 601 | 
| 605   // Save another page. | 602   // Save another page. | 
| 606   SavePage(kTestUrl2, kTestClientId2); | 603   SavePage(kTestUrl2, kTestClientId2); | 
| 607   int64_t offline2 = last_save_offline_id(); | 604   int64_t offline2 = last_save_offline_id(); | 
| 608   EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); | 605   EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); | 
| 609   EXPECT_EQ(2u, store->GetAllPages().size()); | 606   EXPECT_EQ(2u, store->GetAllPages().size()); | 
| 610 | 607 | 
| 611   ResetResults(); | 608   ResetResults(); | 
| 612 | 609 | 
| 613   // Delete one page. | 610   // Delete one page. | 
| 614   DeletePage(offline1, | 611   DeletePage(offline1, base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, | 
| 615              base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr())); | 612                                   AsWeakPtr())); | 
| 616 | 613 | 
| 617   PumpLoop(); | 614   PumpLoop(); | 
| 618 | 615 | 
| 619   EXPECT_EQ(last_deleted_offline_id(), offline1); | 616   EXPECT_EQ(last_deleted_offline_id(), offline1); | 
| 620   EXPECT_EQ(last_deleted_client_id(), kTestClientId1); | 617   EXPECT_EQ(last_deleted_client_id(), kTestClientId1); | 
| 621   EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); | 618   EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); | 
| 622   ASSERT_EQ(1u, store->GetAllPages().size()); | 619   ASSERT_EQ(1u, store->GetAllPages().size()); | 
| 623   EXPECT_EQ(kTestUrl2, store->GetAllPages()[0].url); | 620   EXPECT_EQ(kTestUrl2, store->GetAllPages()[0].url); | 
| 624 | 621 | 
| 625   // Delete another page. | 622   // Delete another page. | 
| 626   DeletePage(offline2, | 623   DeletePage(offline2, base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, | 
| 627              base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr())); | 624                                   AsWeakPtr())); | 
| 628 | 625 | 
| 629   ResetResults(); | 626   ResetResults(); | 
| 630 | 627 | 
| 631   PumpLoop(); | 628   PumpLoop(); | 
| 632 | 629 | 
| 633   EXPECT_EQ(last_deleted_offline_id(), offline2); | 630   EXPECT_EQ(last_deleted_offline_id(), offline2); | 
| 634   EXPECT_EQ(last_deleted_client_id(), kTestClientId2); | 631   EXPECT_EQ(last_deleted_client_id(), kTestClientId2); | 
| 635   EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); | 632   EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); | 
| 636   EXPECT_EQ(0u, store->GetAllPages().size()); | 633   EXPECT_EQ(0u, store->GetAllPages().size()); | 
| 637 } | 634 } | 
| 638 | 635 | 
| 639 TEST_F(OfflinePageModelTest, DeletePageByPredicate) { | 636 TEST_F(OfflinePageModelImplTest, DeletePageByPredicate) { | 
| 640   OfflinePageTestStore* store = GetStore(); | 637   OfflinePageTestStore* store = GetStore(); | 
| 641 | 638 | 
| 642   // Save one page. | 639   // Save one page. | 
| 643   SavePage(kTestUrl, kTestClientId1); | 640   SavePage(kTestUrl, kTestClientId1); | 
| 644   int64_t offline1 = last_save_offline_id(); | 641   int64_t offline1 = last_save_offline_id(); | 
| 645   EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); | 642   EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); | 
| 646   EXPECT_EQ(1u, store->GetAllPages().size()); | 643   EXPECT_EQ(1u, store->GetAllPages().size()); | 
| 647 | 644 | 
| 648   ResetResults(); | 645   ResetResults(); | 
| 649 | 646 | 
| 650   // Save another page. | 647   // Save another page. | 
| 651   SavePage(kTestUrl2, kTestClientId2); | 648   SavePage(kTestUrl2, kTestClientId2); | 
| 652   int64_t offline2 = last_save_offline_id(); | 649   int64_t offline2 = last_save_offline_id(); | 
| 653   EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); | 650   EXPECT_EQ(SavePageResult::SUCCESS, last_save_result()); | 
| 654   EXPECT_EQ(2u, store->GetAllPages().size()); | 651   EXPECT_EQ(2u, store->GetAllPages().size()); | 
| 655 | 652 | 
| 656   ResetResults(); | 653   ResetResults(); | 
| 657 | 654 | 
| 658   // Delete the second page. | 655   // Delete the second page. | 
| 659   model()->DeletePagesByURLPredicate( | 656   model()->DeletePagesByURLPredicate( | 
| 660       base::Bind(&URLSpecContains, "page.com"), | 657       base::Bind(&URLSpecContains, "page.com"), | 
| 661       base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr())); | 658       base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, AsWeakPtr())); | 
| 662 | 659 | 
| 663   PumpLoop(); | 660   PumpLoop(); | 
| 664 | 661 | 
| 665   EXPECT_EQ(last_deleted_offline_id(), offline2); | 662   EXPECT_EQ(last_deleted_offline_id(), offline2); | 
| 666   EXPECT_EQ(last_deleted_client_id(), kTestClientId2); | 663   EXPECT_EQ(last_deleted_client_id(), kTestClientId2); | 
| 667   EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); | 664   EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); | 
| 668   ASSERT_EQ(1u, store->GetAllPages().size()); | 665   ASSERT_EQ(1u, store->GetAllPages().size()); | 
| 669   EXPECT_EQ(kTestUrl, store->GetAllPages()[0].url); | 666   EXPECT_EQ(kTestUrl, store->GetAllPages()[0].url); | 
| 670 | 667 | 
| 671   ResetResults(); | 668   ResetResults(); | 
| 672 | 669 | 
| 673   // Delete the first page. | 670   // Delete the first page. | 
| 674   model()->DeletePagesByURLPredicate( | 671   model()->DeletePagesByURLPredicate( | 
| 675       base::Bind(&URLSpecContains, "example.com"), | 672       base::Bind(&URLSpecContains, "example.com"), | 
| 676       base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr())); | 673       base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, AsWeakPtr())); | 
| 677 | 674 | 
| 678   PumpLoop(); | 675   PumpLoop(); | 
| 679 | 676 | 
| 680   EXPECT_EQ(last_deleted_offline_id(), offline1); | 677   EXPECT_EQ(last_deleted_offline_id(), offline1); | 
| 681   EXPECT_EQ(last_deleted_client_id(), kTestClientId1); | 678   EXPECT_EQ(last_deleted_client_id(), kTestClientId1); | 
| 682   EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); | 679   EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); | 
| 683   EXPECT_EQ(0u, store->GetAllPages().size()); | 680   EXPECT_EQ(0u, store->GetAllPages().size()); | 
| 684 } | 681 } | 
| 685 | 682 | 
| 686 TEST_F(OfflinePageModelTest, DeletePageNotFound) { | 683 TEST_F(OfflinePageModelImplTest, DeletePageNotFound) { | 
| 687   DeletePage(1234LL, | 684   DeletePage(1234LL, base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, | 
| 688              base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr())); | 685                                 AsWeakPtr())); | 
| 689   EXPECT_EQ(DeletePageResult::NOT_FOUND, last_delete_result()); | 686   EXPECT_EQ(DeletePageResult::NOT_FOUND, last_delete_result()); | 
| 690 | 687 | 
| 691   ResetResults(); | 688   ResetResults(); | 
| 692 | 689 | 
| 693   model()->DeletePagesByURLPredicate( | 690   model()->DeletePagesByURLPredicate( | 
| 694       base::Bind(&URLSpecContains, "page.com"), | 691       base::Bind(&URLSpecContains, "page.com"), | 
| 695       base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr())); | 692       base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, AsWeakPtr())); | 
| 696   EXPECT_EQ(DeletePageResult::NOT_FOUND, last_delete_result()); | 693   EXPECT_EQ(DeletePageResult::NOT_FOUND, last_delete_result()); | 
| 697 } | 694 } | 
| 698 | 695 | 
| 699 TEST_F(OfflinePageModelTest, DeletePageStoreFailureOnRemove) { | 696 TEST_F(OfflinePageModelImplTest, DeletePageStoreFailureOnRemove) { | 
| 700   // Save a page. | 697   // Save a page. | 
| 701   SavePage(kTestUrl, kTestClientId1); | 698   SavePage(kTestUrl, kTestClientId1); | 
| 702   int64_t offline_id = last_save_offline_id(); | 699   int64_t offline_id = last_save_offline_id(); | 
| 703   ResetResults(); | 700   ResetResults(); | 
| 704 | 701 | 
| 705   // Try to delete this page. | 702   // Try to delete this page. | 
| 706   GetStore()->set_test_scenario( | 703   GetStore()->set_test_scenario( | 
| 707       OfflinePageTestStore::TestScenario::REMOVE_FAILED); | 704       OfflinePageTestStore::TestScenario::REMOVE_FAILED); | 
| 708   DeletePage(offline_id, | 705   DeletePage(offline_id, base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, | 
| 709              base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr())); | 706                                     AsWeakPtr())); | 
| 710   PumpLoop(); | 707   PumpLoop(); | 
| 711   EXPECT_EQ(DeletePageResult::STORE_FAILURE, last_delete_result()); | 708   EXPECT_EQ(DeletePageResult::STORE_FAILURE, last_delete_result()); | 
| 712 } | 709 } | 
| 713 | 710 | 
| 714 TEST_F(OfflinePageModelTest, DetectThatOfflineCopyIsMissing) { | 711 TEST_F(OfflinePageModelImplTest, DetectThatOfflineCopyIsMissing) { | 
| 715   // Save a page. | 712   // Save a page. | 
| 716   SavePage(kTestUrl, kTestClientId1); | 713   SavePage(kTestUrl, kTestClientId1); | 
| 717   int64_t offline_id = last_save_offline_id(); | 714   int64_t offline_id = last_save_offline_id(); | 
| 718 | 715 | 
| 719   ResetResults(); | 716   ResetResults(); | 
| 720 | 717 | 
| 721   base::Optional<OfflinePageItem> page = GetPageByOfflineId(offline_id); | 718   base::Optional<OfflinePageItem> page = GetPageByOfflineId(offline_id); | 
| 722 | 719 | 
| 723   // Delete the offline copy of the page and check the metadata. | 720   // Delete the offline copy of the page and check the metadata. | 
| 724   base::DeleteFile(page->file_path, false); | 721   base::DeleteFile(page->file_path, false); | 
| 725   model()->CheckForExternalFileDeletion(); | 722   model()->CheckForExternalFileDeletion(); | 
| 726   PumpLoop(); | 723   PumpLoop(); | 
| 727 | 724 | 
| 728   EXPECT_EQ(last_deleted_offline_id(), offline_id); | 725   EXPECT_EQ(last_deleted_offline_id(), offline_id); | 
| 729   EXPECT_EQ(0UL, GetAllPages().size()); | 726   EXPECT_EQ(0UL, GetAllPages().size()); | 
| 730 } | 727 } | 
| 731 | 728 | 
| 732 TEST_F(OfflinePageModelTest, DetectThatOfflineCopyIsMissingAfterLoad) { | 729 TEST_F(OfflinePageModelImplTest, DetectThatOfflineCopyIsMissingAfterLoad) { | 
| 733   // Save a page. | 730   // Save a page. | 
| 734   SavePage(kTestUrl, kTestClientId1); | 731   SavePage(kTestUrl, kTestClientId1); | 
| 735   PumpLoop(); | 732   PumpLoop(); | 
| 736   int64_t offline_id = last_save_offline_id(); | 733   int64_t offline_id = last_save_offline_id(); | 
| 737 | 734 | 
| 738   ResetResults(); | 735   ResetResults(); | 
| 739 | 736 | 
| 740   base::Optional<OfflinePageItem> page = GetPageByOfflineId(offline_id); | 737   base::Optional<OfflinePageItem> page = GetPageByOfflineId(offline_id); | 
| 741   // Delete the offline copy of the page and check the metadata. | 738   // Delete the offline copy of the page and check the metadata. | 
| 742   base::DeleteFile(page->file_path, false); | 739   base::DeleteFile(page->file_path, false); | 
| 743   // Reseting the model should trigger the metadata consistency check as well. | 740   // Reseting the model should trigger the metadata consistency check as well. | 
| 744   ResetModel(); | 741   ResetModel(); | 
| 745   PumpLoop(); | 742   PumpLoop(); | 
| 746 | 743 | 
| 747   EXPECT_EQ(last_deleted_offline_id(), offline_id); | 744   EXPECT_EQ(last_deleted_offline_id(), offline_id); | 
| 748   EXPECT_EQ(0UL, GetAllPages().size()); | 745   EXPECT_EQ(0UL, GetAllPages().size()); | 
| 749 } | 746 } | 
| 750 | 747 | 
| 751 TEST_F(OfflinePageModelTest, DeleteMultiplePages) { | 748 TEST_F(OfflinePageModelImplTest, DeleteMultiplePages) { | 
| 752   OfflinePageTestStore* store = GetStore(); | 749   OfflinePageTestStore* store = GetStore(); | 
| 753 | 750 | 
| 754   // Save 3 pages. | 751   // Save 3 pages. | 
| 755   std::unique_ptr<OfflinePageTestArchiver> archiver(BuildArchiver( | 752   std::unique_ptr<OfflinePageTestArchiver> archiver(BuildArchiver( | 
| 756       kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); | 753       kTestUrl, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); | 
| 757   model()->SavePage( | 754   model()->SavePage( | 
| 758       kTestUrl, kTestClientId1, std::move(archiver), | 755       kTestUrl, kTestClientId1, std::move(archiver), | 
| 759       base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); | 756       base::Bind(&OfflinePageModelImplTest::OnSavePageDone, AsWeakPtr())); | 
| 760   PumpLoop(); | 757   PumpLoop(); | 
| 761   int64_t offline1 = last_save_offline_id(); | 758   int64_t offline1 = last_save_offline_id(); | 
| 762 | 759 | 
| 763   std::unique_ptr<OfflinePageTestArchiver> archiver2(BuildArchiver( | 760   std::unique_ptr<OfflinePageTestArchiver> archiver2(BuildArchiver( | 
| 764       kTestUrl2, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); | 761       kTestUrl2, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); | 
| 765   model()->SavePage( | 762   model()->SavePage( | 
| 766       kTestUrl2, kTestClientId2, std::move(archiver2), | 763       kTestUrl2, kTestClientId2, std::move(archiver2), | 
| 767       base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); | 764       base::Bind(&OfflinePageModelImplTest::OnSavePageDone, AsWeakPtr())); | 
| 768   PumpLoop(); | 765   PumpLoop(); | 
| 769   int64_t offline2 = last_save_offline_id(); | 766   int64_t offline2 = last_save_offline_id(); | 
| 770 | 767 | 
| 771   std::unique_ptr<OfflinePageTestArchiver> archiver3(BuildArchiver( | 768   std::unique_ptr<OfflinePageTestArchiver> archiver3(BuildArchiver( | 
| 772       kTestUrl3, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); | 769       kTestUrl3, OfflinePageArchiver::ArchiverResult::SUCCESSFULLY_CREATED)); | 
| 773   model()->SavePage( | 770   model()->SavePage( | 
| 774       kTestUrl3, kTestClientId3, std::move(archiver3), | 771       kTestUrl3, kTestClientId3, std::move(archiver3), | 
| 775       base::Bind(&OfflinePageModelTest::OnSavePageDone, AsWeakPtr())); | 772       base::Bind(&OfflinePageModelImplTest::OnSavePageDone, AsWeakPtr())); | 
| 776   PumpLoop(); | 773   PumpLoop(); | 
| 777 | 774 | 
| 778   EXPECT_EQ(3u, store->GetAllPages().size()); | 775   EXPECT_EQ(3u, store->GetAllPages().size()); | 
| 779 | 776 | 
| 780   // Delete multiple pages. | 777   // Delete multiple pages. | 
| 781   std::vector<int64_t> ids_to_delete; | 778   std::vector<int64_t> ids_to_delete; | 
| 782   ids_to_delete.push_back(offline2); | 779   ids_to_delete.push_back(offline2); | 
| 783   ids_to_delete.push_back(offline1); | 780   ids_to_delete.push_back(offline1); | 
| 784   ids_to_delete.push_back(23434LL);  // Non-existent ID. | 781   ids_to_delete.push_back(23434LL);  // Non-existent ID. | 
| 785   model()->DeletePagesByOfflineId( | 782   model()->DeletePagesByOfflineId( | 
| 786       ids_to_delete, | 783       ids_to_delete, | 
| 787       base::Bind(&OfflinePageModelTest::OnDeletePageDone, AsWeakPtr())); | 784       base::Bind(&OfflinePageModelImplTest::OnDeletePageDone, AsWeakPtr())); | 
| 788   PumpLoop(); | 785   PumpLoop(); | 
| 789 | 786 | 
| 790   // Success is expected if at least one page is deleted successfully. | 787   // Success is expected if at least one page is deleted successfully. | 
| 791   EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); | 788   EXPECT_EQ(DeletePageResult::SUCCESS, last_delete_result()); | 
| 792   EXPECT_EQ(1u, store->GetAllPages().size()); | 789   EXPECT_EQ(1u, store->GetAllPages().size()); | 
| 793 } | 790 } | 
| 794 | 791 | 
| 795 TEST_F(OfflinePageModelTest, GetPageByOfflineId) { | 792 TEST_F(OfflinePageModelImplTest, GetPageByOfflineId) { | 
| 796   SavePage(kTestUrl, kTestClientId1); | 793   SavePage(kTestUrl, kTestClientId1); | 
| 797   int64_t offline1 = last_save_offline_id(); | 794   int64_t offline1 = last_save_offline_id(); | 
| 798   SavePage(kTestUrl2, kTestClientId2); | 795   SavePage(kTestUrl2, kTestClientId2); | 
| 799   int64_t offline2 = last_save_offline_id(); | 796   int64_t offline2 = last_save_offline_id(); | 
| 800 | 797 | 
| 801   base::Optional<OfflinePageItem> page = GetPageByOfflineId(offline1); | 798   base::Optional<OfflinePageItem> page = GetPageByOfflineId(offline1); | 
| 802   bool page_exists = page != base::nullopt; | 799   bool page_exists = page != base::nullopt; | 
| 803   EXPECT_TRUE(page_exists); | 800   EXPECT_TRUE(page_exists); | 
| 804   EXPECT_EQ(kTestUrl, page->url); | 801   EXPECT_EQ(kTestUrl, page->url); | 
| 805   EXPECT_EQ(kTestClientId1, page->client_id); | 802   EXPECT_EQ(kTestClientId1, page->client_id); | 
| 806   EXPECT_EQ(kTestFileSize, page->file_size); | 803   EXPECT_EQ(kTestFileSize, page->file_size); | 
| 807 | 804 | 
| 808   page = GetPageByOfflineId(offline2); | 805   page = GetPageByOfflineId(offline2); | 
| 809   page_exists = page != base::nullopt; | 806   page_exists = page != base::nullopt; | 
| 810   EXPECT_TRUE(page_exists); | 807   EXPECT_TRUE(page_exists); | 
| 811   EXPECT_EQ(kTestUrl2, page->url); | 808   EXPECT_EQ(kTestUrl2, page->url); | 
| 812   EXPECT_EQ(kTestClientId2, page->client_id); | 809   EXPECT_EQ(kTestClientId2, page->client_id); | 
| 813   EXPECT_EQ(kTestFileSize, page->file_size); | 810   EXPECT_EQ(kTestFileSize, page->file_size); | 
| 814 | 811 | 
| 815   page = GetPageByOfflineId(-42); | 812   page = GetPageByOfflineId(-42); | 
| 816   page_exists = page != base::nullopt; | 813   page_exists = page != base::nullopt; | 
| 817   EXPECT_FALSE(page_exists); | 814   EXPECT_FALSE(page_exists); | 
| 818 } | 815 } | 
| 819 | 816 | 
| 820 TEST_F(OfflinePageModelTest, GetPageByOfflineURL) { | 817 TEST_F(OfflinePageModelImplTest, GetPageByOfflineURL) { | 
| 821   SavePage(kTestUrl, kTestClientId1); | 818   SavePage(kTestUrl, kTestClientId1); | 
| 822   int64_t offline1 = last_save_offline_id(); | 819   int64_t offline1 = last_save_offline_id(); | 
| 823 | 820 | 
| 824   OfflinePageTestStore* store = GetStore(); | 821   OfflinePageTestStore* store = GetStore(); | 
| 825   GURL offline_url = store->last_saved_page().GetOfflineURL(); | 822   GURL offline_url = store->last_saved_page().GetOfflineURL(); | 
| 826 | 823 | 
| 827   SavePage(kTestUrl2, kTestClientId2); | 824   SavePage(kTestUrl2, kTestClientId2); | 
| 828 | 825 | 
| 829   GURL offline_url2 = store->last_saved_page().GetOfflineURL(); | 826   GURL offline_url2 = store->last_saved_page().GetOfflineURL(); | 
| 830   int64_t offline2 = last_save_offline_id(); | 827   int64_t offline2 = last_save_offline_id(); | 
| 831 | 828 | 
| 832   SingleOfflinePageItemResult page = GetPageByOfflineURL(offline_url2); | 829   SingleOfflinePageItemResult page = GetPageByOfflineURL(offline_url2); | 
| 833   EXPECT_TRUE(page != base::nullopt); | 830   EXPECT_TRUE(page != base::nullopt); | 
| 834   EXPECT_EQ(kTestUrl2, page->url); | 831   EXPECT_EQ(kTestUrl2, page->url); | 
| 835   EXPECT_EQ(kTestClientId2, page->client_id); | 832   EXPECT_EQ(kTestClientId2, page->client_id); | 
| 836   EXPECT_EQ(offline2, page->offline_id); | 833   EXPECT_EQ(offline2, page->offline_id); | 
| 837 | 834 | 
| 838   page = GetPageByOfflineURL(offline_url); | 835   page = GetPageByOfflineURL(offline_url); | 
| 839   EXPECT_TRUE(page != base::nullopt); | 836   EXPECT_TRUE(page != base::nullopt); | 
| 840   EXPECT_EQ(kTestUrl, page->url); | 837   EXPECT_EQ(kTestUrl, page->url); | 
| 841   EXPECT_EQ(kTestClientId1, page->client_id); | 838   EXPECT_EQ(kTestClientId1, page->client_id); | 
| 842   EXPECT_EQ(offline1, page->offline_id); | 839   EXPECT_EQ(offline1, page->offline_id); | 
| 843 | 840 | 
| 844   page = GetPageByOfflineURL(GURL("http://foo")); | 841   page = GetPageByOfflineURL(GURL("http://foo")); | 
| 845   EXPECT_TRUE(page == base::nullopt); | 842   EXPECT_TRUE(page == base::nullopt); | 
| 846 } | 843 } | 
| 847 | 844 | 
| 848 TEST_F(OfflinePageModelTest, GetPagesByOnlineURL) { | 845 TEST_F(OfflinePageModelImplTest, GetPagesByOnlineURL) { | 
| 849   SavePage(kTestUrl, kTestClientId1); | 846   SavePage(kTestUrl, kTestClientId1); | 
| 850   SavePage(kTestUrl2, kTestClientId2); | 847   SavePage(kTestUrl2, kTestClientId2); | 
| 851 | 848 | 
| 852   base::Optional<OfflinePageItem> page = GetPagesByOnlineURL(kTestUrl2); | 849   base::Optional<OfflinePageItem> page = GetPagesByOnlineURL(kTestUrl2); | 
| 853   EXPECT_EQ(kTestUrl2, page->url); | 850   EXPECT_EQ(kTestUrl2, page->url); | 
| 854   EXPECT_EQ(kTestClientId2, page->client_id); | 851   EXPECT_EQ(kTestClientId2, page->client_id); | 
| 855 | 852 | 
| 856   page = GetPagesByOnlineURL(kTestUrl); | 853   page = GetPagesByOnlineURL(kTestUrl); | 
| 857   EXPECT_EQ(kTestUrl, page->url); | 854   EXPECT_EQ(kTestUrl, page->url); | 
| 858   EXPECT_EQ(kTestClientId1, page->client_id); | 855   EXPECT_EQ(kTestClientId1, page->client_id); | 
| 859 | 856 | 
| 860   page = GetPagesByOnlineURL(GURL("http://foo")); | 857   page = GetPagesByOnlineURL(GURL("http://foo")); | 
| 861   EXPECT_TRUE(base::nullopt == page); | 858   EXPECT_TRUE(base::nullopt == page); | 
| 862 } | 859 } | 
| 863 | 860 | 
| 864 TEST_F(OfflinePageModelTest, CheckPagesExistOffline) { | 861 TEST_F(OfflinePageModelImplTest, CheckPagesExistOffline) { | 
| 865   SavePage(kTestUrl, kTestClientId1); | 862   SavePage(kTestUrl, kTestClientId1); | 
| 866   SavePage(kTestUrl2, kTestClientId2); | 863   SavePage(kTestUrl2, kTestClientId2); | 
| 867 | 864 | 
| 868   std::set<GURL> input; | 865   std::set<GURL> input; | 
| 869   input.insert(kTestUrl); | 866   input.insert(kTestUrl); | 
| 870   input.insert(kTestUrl2); | 867   input.insert(kTestUrl2); | 
| 871   input.insert(kTestUrl3); | 868   input.insert(kTestUrl3); | 
| 872 | 869 | 
| 873   CheckPagesExistOfflineResult existing_pages = CheckPagesExistOffline(input); | 870   CheckPagesExistOfflineResult existing_pages = CheckPagesExistOffline(input); | 
| 874   EXPECT_EQ(2U, existing_pages.size()); | 871   EXPECT_EQ(2U, existing_pages.size()); | 
| 875   EXPECT_NE(existing_pages.end(), existing_pages.find(kTestUrl)); | 872   EXPECT_NE(existing_pages.end(), existing_pages.find(kTestUrl)); | 
| 876   EXPECT_NE(existing_pages.end(), existing_pages.find(kTestUrl2)); | 873   EXPECT_NE(existing_pages.end(), existing_pages.find(kTestUrl2)); | 
| 877   EXPECT_EQ(existing_pages.end(), existing_pages.find(kTestUrl3)); | 874   EXPECT_EQ(existing_pages.end(), existing_pages.find(kTestUrl3)); | 
| 878 } | 875 } | 
| 879 | 876 | 
| 880 TEST_F(OfflinePageModelTest, CanSavePage) { | 877 TEST_F(OfflinePageModelImplTest, CanSavePage) { | 
| 881   EXPECT_TRUE(OfflinePageModel::CanSavePage(GURL("http://foo"))); | 878   EXPECT_TRUE(OfflinePageModel::CanSavePage(GURL("http://foo"))); | 
| 882   EXPECT_TRUE(OfflinePageModel::CanSavePage(GURL("https://foo"))); | 879   EXPECT_TRUE(OfflinePageModel::CanSavePage(GURL("https://foo"))); | 
| 883   EXPECT_FALSE(OfflinePageModel::CanSavePage(GURL("file:///foo"))); | 880   EXPECT_FALSE(OfflinePageModel::CanSavePage(GURL("file:///foo"))); | 
| 884   EXPECT_FALSE(OfflinePageModel::CanSavePage(GURL("data:image/png;base64,ab"))); | 881   EXPECT_FALSE(OfflinePageModel::CanSavePage(GURL("data:image/png;base64,ab"))); | 
| 885   EXPECT_FALSE(OfflinePageModel::CanSavePage(GURL("chrome://version"))); | 882   EXPECT_FALSE(OfflinePageModel::CanSavePage(GURL("chrome://version"))); | 
| 886   EXPECT_FALSE(OfflinePageModel::CanSavePage(GURL("chrome-native://newtab/"))); | 883   EXPECT_FALSE(OfflinePageModel::CanSavePage(GURL("chrome-native://newtab/"))); | 
| 887 } | 884 } | 
| 888 | 885 | 
| 889 TEST_F(OfflinePageModelTest, ClearAll) { | 886 TEST_F(OfflinePageModelImplTest, ClearAll) { | 
| 890   SavePage(kTestUrl, kTestClientId1); | 887   SavePage(kTestUrl, kTestClientId1); | 
| 891   SavePage(kTestUrl2, kTestClientId2); | 888   SavePage(kTestUrl2, kTestClientId2); | 
| 892 | 889 | 
| 893   const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); | 890   const std::vector<OfflinePageItem>& offline_pages = GetAllPages(); | 
| 894   EXPECT_EQ(2UL, offline_pages.size()); | 891   EXPECT_EQ(2UL, offline_pages.size()); | 
| 895   EXPECT_EQ(2UL, GetStore()->GetAllPages().size()); | 892   EXPECT_EQ(2UL, GetStore()->GetAllPages().size()); | 
| 896   base::FilePath archiver_path = offline_pages[0].file_path; | 893   base::FilePath archiver_path = offline_pages[0].file_path; | 
| 897   EXPECT_TRUE(base::PathExists(archiver_path)); | 894   EXPECT_TRUE(base::PathExists(archiver_path)); | 
| 898 | 895 | 
| 899   // ClearAll should delete all the files and wipe out both cache and store. | 896   // ClearAll should delete all the files and wipe out both cache and store. | 
| 900   model()->ClearAll( | 897   model()->ClearAll( | 
| 901       base::Bind(&OfflinePageModelTest::OnClearAllDone, AsWeakPtr())); | 898       base::Bind(&OfflinePageModelImplTest::OnClearAllDone, AsWeakPtr())); | 
| 902   PumpLoop(); | 899   PumpLoop(); | 
| 903   EXPECT_EQ(0UL, GetAllPages().size()); | 900   EXPECT_EQ(0UL, GetAllPages().size()); | 
| 904   EXPECT_EQ(0UL, GetStore()->GetAllPages().size()); | 901   EXPECT_EQ(0UL, GetStore()->GetAllPages().size()); | 
| 905   EXPECT_FALSE(base::PathExists(archiver_path)); | 902   EXPECT_FALSE(base::PathExists(archiver_path)); | 
| 906 | 903 | 
| 907   // The model should reload the store after the reset. All model operations | 904   // The model should reload the store after the reset. All model operations | 
| 908   // should continue to work. | 905   // should continue to work. | 
| 909   SavePage(kTestUrl2, kTestClientId2); | 906   SavePage(kTestUrl2, kTestClientId2); | 
| 910   EXPECT_EQ(1UL, GetAllPages().size()); | 907   EXPECT_EQ(1UL, GetAllPages().size()); | 
| 911   EXPECT_EQ(1UL, GetStore()->GetAllPages().size()); | 908   EXPECT_EQ(1UL, GetStore()->GetAllPages().size()); | 
| 912 } | 909 } | 
| 913 | 910 | 
| 914 TEST_F(OfflinePageModelTest, SaveRetrieveMultipleClientIds) { | 911 TEST_F(OfflinePageModelImplTest, SaveRetrieveMultipleClientIds) { | 
| 915   EXPECT_FALSE(HasPages(kTestClientNamespace)); | 912   EXPECT_FALSE(HasPages(kTestClientNamespace)); | 
| 916   SavePage(kTestUrl, kTestClientId1); | 913   SavePage(kTestUrl, kTestClientId1); | 
| 917   int64_t offline1 = last_save_offline_id(); | 914   int64_t offline1 = last_save_offline_id(); | 
| 918   EXPECT_TRUE(HasPages(kTestClientNamespace)); | 915   EXPECT_TRUE(HasPages(kTestClientNamespace)); | 
| 919 | 916 | 
| 920   SavePage(kTestUrl, kTestClientId1); | 917   SavePage(kTestUrl, kTestClientId1); | 
| 921   int64_t offline2 = last_save_offline_id(); | 918   int64_t offline2 = last_save_offline_id(); | 
| 922 | 919 | 
| 923   EXPECT_NE(offline1, offline2); | 920   EXPECT_NE(offline1, offline2); | 
| 924 | 921 | 
| 925   const std::vector<int64_t> ids = GetOfflineIdsForClientId(kTestClientId1); | 922   const std::vector<int64_t> ids = GetOfflineIdsForClientId(kTestClientId1); | 
| 926 | 923 | 
| 927   EXPECT_EQ(2UL, ids.size()); | 924   EXPECT_EQ(2UL, ids.size()); | 
| 928 | 925 | 
| 929   std::set<int64_t> id_set; | 926   std::set<int64_t> id_set; | 
| 930   for (size_t i = 0; i < ids.size(); i++) { | 927   for (size_t i = 0; i < ids.size(); i++) { | 
| 931     id_set.insert(ids[i]); | 928     id_set.insert(ids[i]); | 
| 932   } | 929   } | 
| 933 | 930 | 
| 934   EXPECT_TRUE(id_set.find(offline1) != id_set.end()); | 931   EXPECT_TRUE(id_set.find(offline1) != id_set.end()); | 
| 935   EXPECT_TRUE(id_set.find(offline2) != id_set.end()); | 932   EXPECT_TRUE(id_set.find(offline2) != id_set.end()); | 
| 936 } | 933 } | 
| 937 | 934 | 
| 938 TEST_F(OfflinePageModelTest, GetBestPage) { | 935 TEST_F(OfflinePageModelImplTest, GetBestPage) { | 
| 939   // We will save 3 pages - two for the same URL, and one for a different URL. | 936   // We will save 3 pages - two for the same URL, and one for a different URL. | 
| 940   // Correct behavior will pick the most recently saved page for the correct | 937   // Correct behavior will pick the most recently saved page for the correct | 
| 941   // URL. | 938   // URL. | 
| 942   std::pair<SavePageResult, int64_t> saved_pages[3]; | 939   std::pair<SavePageResult, int64_t> saved_pages[3]; | 
| 943   saved_pages[0] = SavePage(kTestUrl, kTestClientId1); | 940   saved_pages[0] = SavePage(kTestUrl, kTestClientId1); | 
| 944   saved_pages[1] = SavePage(kTestUrl, kTestClientId1); | 941   saved_pages[1] = SavePage(kTestUrl, kTestClientId1); | 
| 945   saved_pages[2] = SavePage(kTestUrl2, kTestClientId2); | 942   saved_pages[2] = SavePage(kTestUrl2, kTestClientId2); | 
| 946 | 943 | 
| 947   for (const auto& save_result : saved_pages) { | 944   for (const auto& save_result : saved_pages) { | 
| 948     ASSERT_EQ(OfflinePageModel::SavePageResult::SUCCESS, | 945     ASSERT_EQ(OfflinePageModel::SavePageResult::SUCCESS, | 
| 949               std::get<0>(save_result)); | 946               std::get<0>(save_result)); | 
| 950   } | 947   } | 
| 951 | 948 | 
| 952   const OfflinePageItem* offline_page = | 949   const OfflinePageItem* offline_page = | 
| 953       model()->MaybeGetBestPageForOnlineURL(kTestUrl); | 950       model()->MaybeGetBestPageForOnlineURL(kTestUrl); | 
| 954   ASSERT_TRUE(nullptr != offline_page); | 951   ASSERT_TRUE(nullptr != offline_page); | 
| 955 | 952 | 
| 956   EXPECT_EQ(std::get<1>(saved_pages[1]), offline_page->offline_id); | 953   EXPECT_EQ(std::get<1>(saved_pages[1]), offline_page->offline_id); | 
| 957 } | 954 } | 
| 958 | 955 | 
| 959 TEST_F(OfflinePageModelTest, ExpirePages) { | 956 TEST_F(OfflinePageModelImplTest, ExpirePages) { | 
| 960   // We will save 3 pages and then expire 2 of them. | 957   // We will save 3 pages and then expire 2 of them. | 
| 961   std::pair<SavePageResult, int64_t> saved_pages[3]; | 958   std::pair<SavePageResult, int64_t> saved_pages[3]; | 
| 962   saved_pages[0] = SavePage(kTestUrl, kTestClientId1); | 959   saved_pages[0] = SavePage(kTestUrl, kTestClientId1); | 
| 963   saved_pages[1] = SavePage(kTestUrl2, kTestClientId2); | 960   saved_pages[1] = SavePage(kTestUrl2, kTestClientId2); | 
| 964   saved_pages[2] = SavePage(kTestUrl3, kTestClientId3); | 961   saved_pages[2] = SavePage(kTestUrl3, kTestClientId3); | 
| 965 | 962 | 
| 966   for (const auto& save_result : saved_pages) { | 963   for (const auto& save_result : saved_pages) { | 
| 967     ASSERT_EQ(OfflinePageModel::SavePageResult::SUCCESS, | 964     ASSERT_EQ(OfflinePageModel::SavePageResult::SUCCESS, | 
| 968               std::get<0>(save_result)); | 965               std::get<0>(save_result)); | 
| 969   } | 966   } | 
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1044   std::unique_ptr<base::FeatureList> feature_list2(new base::FeatureList); | 1041   std::unique_ptr<base::FeatureList> feature_list2(new base::FeatureList); | 
| 1045   feature_list2->InitializeFromCommandLine( | 1042   feature_list2->InitializeFromCommandLine( | 
| 1046       std::string(offline_pages::kOfflineBookmarksFeature.name) + "," + | 1043       std::string(offline_pages::kOfflineBookmarksFeature.name) + "," + | 
| 1047           offline_pages::kOfflinePagesBackgroundLoadingFeature.name, | 1044           offline_pages::kOfflinePagesBackgroundLoadingFeature.name, | 
| 1048       ""); | 1045       ""); | 
| 1049   base::FeatureList::SetInstance(std::move(feature_list2)); | 1046   base::FeatureList::SetInstance(std::move(feature_list2)); | 
| 1050   EXPECT_TRUE(offline_pages::IsOfflinePagesBackgroundLoadingEnabled()); | 1047   EXPECT_TRUE(offline_pages::IsOfflinePagesBackgroundLoadingEnabled()); | 
| 1051 } | 1048 } | 
| 1052 | 1049 | 
| 1053 }  // namespace offline_pages | 1050 }  // namespace offline_pages | 
| OLD | NEW | 
|---|