| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef CHROME_BROWSER_HISTORY_DOWNLOAD_DATABASE_H_ | |
| 6 #define CHROME_BROWSER_HISTORY_DOWNLOAD_DATABASE_H_ | |
| 7 | |
| 8 #include <string> | |
| 9 #include <vector> | |
| 10 | |
| 11 #include "base/gtest_prod_util.h" | |
| 12 #include "base/threading/platform_thread.h" | |
| 13 #include "content/public/browser/download_item.h" | |
| 14 #include "sql/meta_table.h" | |
| 15 | |
| 16 namespace sql { | |
| 17 class Connection; | |
| 18 } | |
| 19 | |
| 20 namespace history { | |
| 21 | |
| 22 struct DownloadRow; | |
| 23 | |
| 24 // Maintains a table of downloads. | |
| 25 class DownloadDatabase { | |
| 26 public: | |
| 27 // Must call InitDownloadTable before using any other functions. | |
| 28 DownloadDatabase(); | |
| 29 virtual ~DownloadDatabase(); | |
| 30 | |
| 31 uint32 GetNextDownloadId(); | |
| 32 | |
| 33 // Get all the downloads from the database. | |
| 34 void QueryDownloads( | |
| 35 std::vector<DownloadRow>* results); | |
| 36 | |
| 37 // Update the state of one download. Returns true if successful. | |
| 38 // Does not update |url|, |start_time|; uses |id| only | |
| 39 // to select the row in the database table to update. | |
| 40 bool UpdateDownload(const DownloadRow& data); | |
| 41 | |
| 42 // Create a new database entry for one download and return true if the | |
| 43 // creation succeeded, false otherwise. | |
| 44 bool CreateDownload(const DownloadRow& info); | |
| 45 | |
| 46 // Remove |id| from the database. | |
| 47 void RemoveDownload(uint32 id); | |
| 48 | |
| 49 size_t CountDownloads(); | |
| 50 | |
| 51 protected: | |
| 52 // Returns the database for the functions in this interface. | |
| 53 virtual sql::Connection& GetDB() = 0; | |
| 54 | |
| 55 // Returns true if able to successfully add mime types to the downloads table. | |
| 56 bool MigrateMimeType(); | |
| 57 | |
| 58 // Returns true if able to successfully rewrite the invalid values for the | |
| 59 // |state| field from 3 to 4. Returns false if there was an error fixing the | |
| 60 // database. See http://crbug.com/140687 | |
| 61 bool MigrateDownloadsState(); | |
| 62 | |
| 63 // Returns true if able to successfully add the last interrupt reason and the | |
| 64 // two target paths to downloads. | |
| 65 bool MigrateDownloadsReasonPathsAndDangerType(); | |
| 66 | |
| 67 // Returns true if able to successfully add the referrer column to the | |
| 68 // downloads table. | |
| 69 bool MigrateReferrer(); | |
| 70 | |
| 71 // Returns true if able to successfully add the by_ext_id and by_ext_name | |
| 72 // columns to the downloads table. | |
| 73 bool MigrateDownloadedByExtension(); | |
| 74 | |
| 75 // Returns true if able to successfully add the etag and last-modified columns | |
| 76 // to the downloads table. | |
| 77 bool MigrateDownloadValidators(); | |
| 78 | |
| 79 // Creates the downloads table if needed. | |
| 80 bool InitDownloadTable(); | |
| 81 | |
| 82 // Used to quickly clear the downloads. First you would drop it, then you | |
| 83 // would re-initialize it. | |
| 84 bool DropDownloadTable(); | |
| 85 | |
| 86 private: | |
| 87 FRIEND_TEST_ALL_PREFIXES( | |
| 88 HistoryBackendDBTest, ConfirmDownloadInProgressCleanup); | |
| 89 | |
| 90 // Values used in the database for DownloadItem::State. | |
| 91 static const int kStateInvalid; | |
| 92 static const int kStateInProgress; | |
| 93 static const int kStateComplete; | |
| 94 static const int kStateCancelled; | |
| 95 static const int kStateBug140687; | |
| 96 static const int kStateInterrupted; | |
| 97 | |
| 98 // Values used in the database for DownloadItem::DangerType | |
| 99 static const int kDangerTypeInvalid; | |
| 100 static const int kDangerTypeNotDangerous; | |
| 101 static const int kDangerTypeDangerousFile; | |
| 102 static const int kDangerTypeDangerousUrl; | |
| 103 static const int kDangerTypeDangerousContent; | |
| 104 static const int kDangerTypeMaybeDangerousContent; | |
| 105 static const int kDangerTypeUncommonContent; | |
| 106 static const int kDangerTypeUserValidated; | |
| 107 static const int kDangerTypeDangerousHost; | |
| 108 static const int kDangerTypePotentiallyUnwanted; | |
| 109 | |
| 110 // Fixes state of the download entries. Sometimes entries with IN_PROGRESS | |
| 111 // state are not updated during browser shutdown (particularly when crashing). | |
| 112 // On the next start such entries are considered interrupted with | |
| 113 // interrupt reason |DOWNLOAD_INTERRUPT_REASON_CRASH|. This function | |
| 114 // fixes such entries. | |
| 115 void EnsureInProgressEntriesCleanedUp(); | |
| 116 | |
| 117 bool EnsureColumnExists(const std::string& name, const std::string& type); | |
| 118 | |
| 119 void RemoveDownloadURLs(uint32 id); | |
| 120 | |
| 121 // Utility functions for conversion between DownloadItem types | |
| 122 // and DownloadDatabase constants. | |
| 123 static int StateToInt(content::DownloadItem::DownloadState state); | |
| 124 static content::DownloadItem::DownloadState IntToState(int state); | |
| 125 static int DangerTypeToInt(content::DownloadDangerType danger_type); | |
| 126 static content::DownloadDangerType IntToDangerType(int danger_type); | |
| 127 | |
| 128 bool owning_thread_set_; | |
| 129 base::PlatformThreadId owning_thread_; | |
| 130 | |
| 131 // Initialized to false on construction, and checked in all functional | |
| 132 // routines post-migration in the database for a possible call to | |
| 133 // CleanUpInProgressEntries(). This allows us to avoid | |
| 134 // doing the cleanup until after any DB migration and unless we are | |
| 135 // actually use the downloads database. | |
| 136 bool in_progress_entry_cleanup_completed_; | |
| 137 | |
| 138 DISALLOW_COPY_AND_ASSIGN(DownloadDatabase); | |
| 139 }; | |
| 140 | |
| 141 } // namespace history | |
| 142 | |
| 143 #endif // CHROME_BROWSER_HISTORY_DOWNLOAD_DATABASE_H_ | |
| OLD | NEW |