Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(40)

Side by Side Diff: chrome/browser/history/history_unittest.cc

Issue 10915180: Make DownloadHistory observe manager, items (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 // History unit tests come in two flavors: 5 // History unit tests come in two flavors:
6 // 6 //
7 // 1. The more complicated style is that the unit test creates a full history 7 // 1. The more complicated style is that the unit test creates a full history
8 // service. This spawns a background thread for the history backend, and 8 // service. This spawns a background thread for the history backend, and
9 // all communication is asynchronous. This is useful for testing more 9 // all communication is asynchronous. This is useful for testing more
10 // complicated things or end-to-end behavior. 10 // complicated things or end-to-end behavior.
(...skipping 17 matching lines...) Expand all
28 #include "base/callback.h" 28 #include "base/callback.h"
29 #include "base/command_line.h" 29 #include "base/command_line.h"
30 #include "base/file_path.h" 30 #include "base/file_path.h"
31 #include "base/file_util.h" 31 #include "base/file_util.h"
32 #include "base/memory/scoped_vector.h" 32 #include "base/memory/scoped_vector.h"
33 #include "base/message_loop.h" 33 #include "base/message_loop.h"
34 #include "base/path_service.h" 34 #include "base/path_service.h"
35 #include "base/scoped_temp_dir.h" 35 #include "base/scoped_temp_dir.h"
36 #include "base/string_util.h" 36 #include "base/string_util.h"
37 #include "base/utf_string_conversions.h" 37 #include "base/utf_string_conversions.h"
38 #include "chrome/browser/history/download_persistent_store_info.h"
38 #include "chrome/browser/history/history.h" 39 #include "chrome/browser/history/history.h"
39 #include "chrome/browser/history/history_backend.h" 40 #include "chrome/browser/history/history_backend.h"
40 #include "chrome/browser/history/history_database.h" 41 #include "chrome/browser/history/history_database.h"
41 #include "chrome/browser/history/history_notifications.h" 42 #include "chrome/browser/history/history_notifications.h"
42 #include "chrome/browser/history/in_memory_database.h" 43 #include "chrome/browser/history/in_memory_database.h"
43 #include "chrome/browser/history/in_memory_history_backend.h" 44 #include "chrome/browser/history/in_memory_history_backend.h"
44 #include "chrome/browser/history/page_usage_data.h" 45 #include "chrome/browser/history/page_usage_data.h"
45 #include "chrome/common/chrome_constants.h" 46 #include "chrome/common/chrome_constants.h"
46 #include "chrome/common/chrome_paths.h" 47 #include "chrome/common/chrome_paths.h"
47 #include "chrome/common/thumbnail_score.h" 48 #include "chrome/common/thumbnail_score.h"
48 #include "chrome/tools/profiles/thumbnail-inl.h" 49 #include "chrome/tools/profiles/thumbnail-inl.h"
49 #include "content/public/browser/download_item.h" 50 #include "content/public/browser/download_item.h"
50 #include "content/public/browser/download_persistent_store_info.h"
51 #include "content/public/browser/notification_details.h" 51 #include "content/public/browser/notification_details.h"
52 #include "content/public/browser/notification_source.h" 52 #include "content/public/browser/notification_source.h"
53 #include "sql/connection.h" 53 #include "sql/connection.h"
54 #include "sql/statement.h" 54 #include "sql/statement.h"
55 #include "testing/gtest/include/gtest/gtest.h" 55 #include "testing/gtest/include/gtest/gtest.h"
56 #include "third_party/skia/include/core/SkBitmap.h" 56 #include "third_party/skia/include/core/SkBitmap.h"
57 #include "ui/gfx/codec/jpeg_codec.h" 57 #include "ui/gfx/codec/jpeg_codec.h"
58 58
59 using base::Time; 59 using base::Time;
60 using base::TimeDelta; 60 using base::TimeDelta;
61 using content::DownloadItem; 61 using content::DownloadItem;
62 using content::DownloadPersistentStoreInfo;
63 62
64 namespace history { 63 namespace history {
65 class HistoryTest; 64 class HistoryTest;
66 } 65 }
67 66
68 namespace history { 67 namespace history {
69 68
70 namespace { 69 namespace {
71 70
72 // The tracker uses RenderProcessHost pointers for scoping but never 71 // The tracker uses RenderProcessHost pointers for scoping but never
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 // Currently, just send the notifications directly to the in-memory database. 303 // Currently, just send the notifications directly to the in-memory database.
305 // We may want do do something more fancy in the future. 304 // We may want do do something more fancy in the future.
306 content::Details<HistoryDetails> det(details); 305 content::Details<HistoryDetails> det(details);
307 history_test_->in_mem_backend_->Observe(type, 306 history_test_->in_mem_backend_->Observe(type,
308 content::Source<HistoryTest>(NULL), det); 307 content::Source<HistoryTest>(NULL), det);
309 308
310 // The backend passes ownership of the details pointer to us. 309 // The backend passes ownership of the details pointer to us.
311 delete details; 310 delete details;
312 } 311 }
313 312
314 TEST_F(HistoryTest, ClearBrowsingData_Downloads) { 313 TEST_F(HistoryTest, TimeRemoveDownloads) {
315 CreateBackendAndDatabase(); 314 CreateBackendAndDatabase();
316 315
317 Time now = Time::Now();
318 TimeDelta one_day = TimeDelta::FromDays(1);
319 Time month_ago = now - TimeDelta::FromDays(30);
320
321 // Initially there should be nothing in the downloads database. 316 // Initially there should be nothing in the downloads database.
322 std::vector<DownloadPersistentStoreInfo> downloads; 317 std::vector<DownloadPersistentStoreInfo> downloads;
323 db_->QueryDownloads(&downloads); 318 db_->QueryDownloads(&downloads);
324 EXPECT_EQ(0U, downloads.size()); 319 EXPECT_EQ(0U, downloads.size());
325 320
326 // Keep track of these as we need to update them later during the test. 321 std::set<DownloadID> handles;
327 DownloadID in_progress; 322 base::Time start_adding = base::Time::Now();
323 static const int kNumDownloads = 100000;
324 for (int i = 0; i < kNumDownloads; ++i) {
325 handles.insert(AddDownload(DownloadItem::COMPLETE,
326 start_adding - base::TimeDelta::FromSeconds(i)));
327 }
328 LOG(INFO) << "occam time to add " << kNumDownloads << " records: "
329 << (base::Time::Now() - start_adding).InMillisecondsF() << " ms";
328 330
329 // Create one with a 0 time. 331 db_->QueryDownloads(&downloads);
330 EXPECT_NE(0, AddDownload(DownloadItem::COMPLETE, Time())); 332 EXPECT_EQ(static_cast<size_t>(kNumDownloads), downloads.size());
331 // Create one for now and +/- 1 day.
332 EXPECT_NE(0, AddDownload(DownloadItem::COMPLETE, now - one_day));
333 EXPECT_NE(0, AddDownload(DownloadItem::COMPLETE, now));
334 EXPECT_NE(0, AddDownload(DownloadItem::COMPLETE, now + one_day));
335 // Try the other four states.
336 EXPECT_NE(0, AddDownload(DownloadItem::COMPLETE, month_ago));
337 EXPECT_NE(0, in_progress = AddDownload(DownloadItem::IN_PROGRESS, month_ago));
338 EXPECT_NE(0, AddDownload(DownloadItem::CANCELLED, month_ago));
339 EXPECT_NE(0, AddDownload(DownloadItem::INTERRUPTED, month_ago));
340 333
341 // Test to see if inserts worked. 334 base::Time start_removing = base::Time::Now();
335 db_->RemoveDownloads(handles);
336 LOG(INFO) << "occam time to remove " << kNumDownloads << " records: "
337 << (base::Time::Now() - start_removing).InMillisecondsF() << " ms";
338
342 db_->QueryDownloads(&downloads); 339 db_->QueryDownloads(&downloads);
343 EXPECT_EQ(8U, downloads.size()); 340 EXPECT_EQ(0U, downloads.size());
341 }
344 342
345 // Try removing from current timestamp. This should delete the one in the 343 TEST_F(HistoryTest, ClearBrowsingData_Downloads) {
346 // future and one very recent one. 344 CreateBackendAndDatabase();
347 db_->RemoveDownloadsBetween(now, Time());
348 db_->QueryDownloads(&downloads);
349 EXPECT_EQ(6U, downloads.size());
350 345
351 // Try removing from two months ago. This should not delete items that are 346 // Initially there should be nothing in the downloads database.
352 // 'in progress' or in 'removing' state. 347 std::vector<DownloadPersistentStoreInfo> downloads;
353 db_->RemoveDownloadsBetween(now - TimeDelta::FromDays(60), Time());
354 db_->QueryDownloads(&downloads);
355 EXPECT_EQ(2U, downloads.size());
356
357 // Download manager converts to TimeT, which is lossy, so we do the same
358 // for comparison.
359 Time month_ago_lossy = Time::FromTimeT(month_ago.ToTimeT());
360
361 // Make sure the right values remain.
362 EXPECT_EQ(DownloadItem::COMPLETE, downloads[0].state);
363 EXPECT_EQ(0, downloads[0].start_time.ToInternalValue());
364 EXPECT_EQ(DownloadItem::IN_PROGRESS, downloads[1].state);
365 EXPECT_EQ(month_ago_lossy.ToInternalValue(),
366 downloads[1].start_time.ToInternalValue());
367
368 // Change state so we can delete the downloads.
369 DownloadPersistentStoreInfo data;
370 data.received_bytes = 512;
371 data.state = DownloadItem::COMPLETE;
372 data.end_time = base::Time::Now();
373 data.opened = false;
374 data.db_handle = in_progress;
375 EXPECT_TRUE(db_->UpdateDownload(data));
376 data.state = DownloadItem::CANCELLED;
377 EXPECT_TRUE(db_->UpdateDownload(data));
378
379 // Try removing from Time=0. This should delete all.
380 db_->RemoveDownloadsBetween(Time(), Time());
381 db_->QueryDownloads(&downloads); 348 db_->QueryDownloads(&downloads);
382 EXPECT_EQ(0U, downloads.size()); 349 EXPECT_EQ(0U, downloads.size());
383 350
384 // Check removal of downloads stuck in IN_PROGRESS state. 351 // Add a download, test that it was added, remove it, test that it was
385 EXPECT_NE(0, AddDownload(DownloadItem::COMPLETE, month_ago)); 352 // removed.
386 EXPECT_NE(0, AddDownload(DownloadItem::IN_PROGRESS, month_ago)); 353 DownloadID handle;
387 db_->QueryDownloads(&downloads); 354 EXPECT_NE(0, handle = AddDownload(DownloadItem::COMPLETE, Time()));
388 EXPECT_EQ(2U, downloads.size());
389 db_->RemoveDownloadsBetween(Time(), Time());
390 db_->QueryDownloads(&downloads);
391 // IN_PROGRESS download should remain. It it indicated as "Canceled"
392 EXPECT_EQ(1U, downloads.size());
393 db_->CleanUpInProgressEntries();
394 db_->QueryDownloads(&downloads); 355 db_->QueryDownloads(&downloads);
395 EXPECT_EQ(1U, downloads.size()); 356 EXPECT_EQ(1U, downloads.size());
396 db_->RemoveDownloadsBetween(Time(), Time()); 357 std::set<DownloadID> remove_set;
358 remove_set.insert(handle);
359 db_->RemoveDownloads(remove_set);
397 db_->QueryDownloads(&downloads); 360 db_->QueryDownloads(&downloads);
398 EXPECT_EQ(0U, downloads.size()); 361 EXPECT_EQ(0U, downloads.size());
399 } 362 }
400 363
401 TEST_F(HistoryTest, MigrateDownloadsState) { 364 TEST_F(HistoryTest, MigrateDownloadsState) {
402 // Create the db and close it so that we can reopen it directly. 365 // Create the db and close it so that we can reopen it directly.
403 CreateBackendAndDatabase(); 366 CreateBackendAndDatabase();
404 DeleteBackend(); 367 DeleteBackend();
405 { 368 {
406 // Re-open the db for manual manipulation. 369 // Re-open the db for manual manipulation.
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after
1023 history_service_ = history; 986 history_service_ = history;
1024 history->ScheduleDBTask(task.get(), &request_consumer); 987 history->ScheduleDBTask(task.get(), &request_consumer);
1025 request_consumer.CancelAllRequests(); 988 request_consumer.CancelAllRequests();
1026 CleanupHistoryService(); 989 CleanupHistoryService();
1027 // WARNING: history has now been deleted. 990 // WARNING: history has now been deleted.
1028 history = NULL; 991 history = NULL;
1029 ASSERT_FALSE(task->done_invoked); 992 ASSERT_FALSE(task->done_invoked);
1030 } 993 }
1031 994
1032 } // namespace history 995 } // namespace history
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698