| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 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_PREDICTORS_RESOURCE_PREFETCH_PREDICTOR_TABLES_H_ | |
| 6 #define CHROME_BROWSER_PREDICTORS_RESOURCE_PREFETCH_PREDICTOR_TABLES_H_ | |
| 7 | |
| 8 | |
| 9 #include <map> | |
| 10 #include <string> | |
| 11 #include <vector> | |
| 12 | |
| 13 #include "base/time/time.h" | |
| 14 #include "chrome/browser/predictors/predictor_table_base.h" | |
| 15 #include "chrome/browser/predictors/resource_prefetch_common.h" | |
| 16 #include "content/public/common/resource_type.h" | |
| 17 #include "url/gurl.h" | |
| 18 | |
| 19 namespace sql { | |
| 20 class Statement; | |
| 21 } | |
| 22 | |
| 23 namespace predictors { | |
| 24 | |
| 25 // Interface for database tables used by the ResourcePrefetchPredictor. | |
| 26 // All methods except the constructor and destructor need to be called on the DB | |
| 27 // thread. | |
| 28 // | |
| 29 // Currently manages: | |
| 30 // - UrlResourceTable - resources per Urls. | |
| 31 // - UrlMetadataTable - misc data for Urls (like last visit time). | |
| 32 // - HostResourceTable - resources per host. | |
| 33 // - HostMetadataTable - misc data for hosts. | |
| 34 class ResourcePrefetchPredictorTables : public PredictorTableBase { | |
| 35 public: | |
| 36 // Used in the UrlResourceTable and HostResourceTable to store resources | |
| 37 // required for the page or host. | |
| 38 struct ResourceRow { | |
| 39 ResourceRow(); | |
| 40 ResourceRow(const ResourceRow& other); | |
| 41 ResourceRow(const std::string& main_frame_url, | |
| 42 const std::string& resource_url, | |
| 43 content::ResourceType resource_type, | |
| 44 int number_of_hits, | |
| 45 int number_of_misses, | |
| 46 int consecutive_misses, | |
| 47 double average_position); | |
| 48 void UpdateScore(); | |
| 49 bool operator==(const ResourceRow& rhs) const; | |
| 50 | |
| 51 // Stores the host for host based data, main frame Url for the Url based | |
| 52 // data. This field is cleared for efficiency reasons and the code outside | |
| 53 // this class should not assume it is set. | |
| 54 std::string primary_key; | |
| 55 | |
| 56 GURL resource_url; | |
| 57 content::ResourceType resource_type; | |
| 58 size_t number_of_hits; | |
| 59 size_t number_of_misses; | |
| 60 size_t consecutive_misses; | |
| 61 double average_position; | |
| 62 | |
| 63 // Not stored. | |
| 64 float score; | |
| 65 }; | |
| 66 typedef std::vector<ResourceRow> ResourceRows; | |
| 67 | |
| 68 // Sorts the ResourceRows by score, descending. | |
| 69 struct ResourceRowSorter { | |
| 70 bool operator()(const ResourceRow& x, const ResourceRow& y) const; | |
| 71 }; | |
| 72 | |
| 73 // Aggregated data for a Url or Host. Although the data differs slightly, we | |
| 74 // store them in the same structure, because most of the fields are common and | |
| 75 // it allows us to use the same functions. | |
| 76 struct PrefetchData { | |
| 77 PrefetchData(PrefetchKeyType key_type, const std::string& primary_key); | |
| 78 PrefetchData(const PrefetchData& other); | |
| 79 ~PrefetchData(); | |
| 80 bool operator==(const PrefetchData& rhs) const; | |
| 81 | |
| 82 bool is_host() const { return key_type == PREFETCH_KEY_TYPE_HOST; } | |
| 83 | |
| 84 // Is the data a host as opposed to a Url? | |
| 85 PrefetchKeyType key_type; // Not const to be able to assign. | |
| 86 std::string primary_key; // is_host() ? main frame url : host. | |
| 87 | |
| 88 base::Time last_visit; | |
| 89 ResourceRows resources; | |
| 90 }; | |
| 91 // Map from primary key to PrefetchData for the key. | |
| 92 typedef std::map<std::string, PrefetchData> PrefetchDataMap; | |
| 93 | |
| 94 // Returns data for all Urls and Hosts. | |
| 95 virtual void GetAllData(PrefetchDataMap* url_data_map, | |
| 96 PrefetchDataMap* host_data_map); | |
| 97 | |
| 98 // Updates data for a Url and a host. If either of the |url_data| or | |
| 99 // |host_data| has an empty primary key, it will be ignored. | |
| 100 // Note that the Urls and primary key in |url_data| and |host_data| should be | |
| 101 // less than |kMaxStringLength| in length. | |
| 102 virtual void UpdateData(const PrefetchData& url_data, | |
| 103 const PrefetchData& host_data); | |
| 104 | |
| 105 // Delete data for the input |urls| and |hosts|. | |
| 106 virtual void DeleteData(const std::vector<std::string>& urls, | |
| 107 const std::vector<std::string>& hosts); | |
| 108 | |
| 109 // Wrapper over DeleteData for convenience. | |
| 110 virtual void DeleteSingleDataPoint(const std::string& key, | |
| 111 PrefetchKeyType key_type); | |
| 112 | |
| 113 // Deletes all data in all the tables. | |
| 114 virtual void DeleteAllData(); | |
| 115 | |
| 116 // The maximum length of the string that can be stored in the DB. | |
| 117 static const size_t kMaxStringLength; | |
| 118 | |
| 119 private: | |
| 120 friend class PredictorDatabaseInternal; | |
| 121 friend class MockResourcePrefetchPredictorTables; | |
| 122 | |
| 123 ResourcePrefetchPredictorTables(); | |
| 124 virtual ~ResourcePrefetchPredictorTables(); | |
| 125 | |
| 126 // Helper functions below help perform functions on the Url and host table | |
| 127 // using the same code. | |
| 128 void GetAllDataHelper(PrefetchKeyType key_type, | |
| 129 PrefetchDataMap* data_map, | |
| 130 std::vector<std::string>* to_delete); | |
| 131 bool UpdateDataHelper(const PrefetchData& data); | |
| 132 void DeleteDataHelper(PrefetchKeyType key_type, | |
| 133 const std::vector<std::string>& keys); | |
| 134 | |
| 135 // Returns true if the strings in the |data| are less than |kMaxStringLength| | |
| 136 // in length. | |
| 137 bool StringsAreSmallerThanDBLimit(const PrefetchData& data) const; | |
| 138 | |
| 139 // PredictorTableBase methods. | |
| 140 virtual void CreateTableIfNonExistent() OVERRIDE; | |
| 141 virtual void LogDatabaseStats() OVERRIDE; | |
| 142 | |
| 143 // Helpers to return Statements for cached Statements. The caller must take | |
| 144 // ownership of the return Statements. | |
| 145 sql::Statement* GetUrlResourceDeleteStatement(); | |
| 146 sql::Statement* GetUrlResourceUpdateStatement(); | |
| 147 sql::Statement* GetUrlMetadataDeleteStatement(); | |
| 148 sql::Statement* GetUrlMetadataUpdateStatement(); | |
| 149 | |
| 150 sql::Statement* GetHostResourceDeleteStatement(); | |
| 151 sql::Statement* GetHostResourceUpdateStatement(); | |
| 152 sql::Statement* GetHostMetadataDeleteStatement(); | |
| 153 sql::Statement* GetHostMetadataUpdateStatement(); | |
| 154 | |
| 155 DISALLOW_COPY_AND_ASSIGN(ResourcePrefetchPredictorTables); | |
| 156 }; | |
| 157 | |
| 158 } // namespace predictors | |
| 159 | |
| 160 #endif // CHROME_BROWSER_PREDICTORS_RESOURCE_PREFETCH_PREDICTOR_TABLES_H_ | |
| OLD | NEW |