| Index: chrome/browser/predictors/resource_prefetch_predictor_tables.h
|
| diff --git a/chrome/browser/predictors/resource_prefetch_predictor_tables.h b/chrome/browser/predictors/resource_prefetch_predictor_tables.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..bd266a0034749121cbe73371babe67bc9f6570d1
|
| --- /dev/null
|
| +++ b/chrome/browser/predictors/resource_prefetch_predictor_tables.h
|
| @@ -0,0 +1,160 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CHROME_BROWSER_PREDICTORS_RESOURCE_PREFETCH_PREDICTOR_TABLES_H_
|
| +#define CHROME_BROWSER_PREDICTORS_RESOURCE_PREFETCH_PREDICTOR_TABLES_H_
|
| +
|
| +
|
| +#include <map>
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| +#include "base/time/time.h"
|
| +#include "chrome/browser/predictors/predictor_table_base.h"
|
| +#include "chrome/browser/predictors/resource_prefetch_common.h"
|
| +#include "content/public/common/resource_type.h"
|
| +#include "url/gurl.h"
|
| +
|
| +namespace sql {
|
| +class Statement;
|
| +}
|
| +
|
| +namespace predictors {
|
| +
|
| +// Interface for database tables used by the ResourcePrefetchPredictor.
|
| +// All methods except the constructor and destructor need to be called on the DB
|
| +// thread.
|
| +//
|
| +// Currently manages:
|
| +// - UrlResourceTable - resources per Urls.
|
| +// - UrlMetadataTable - misc data for Urls (like last visit time).
|
| +// - HostResourceTable - resources per host.
|
| +// - HostMetadataTable - misc data for hosts.
|
| +class ResourcePrefetchPredictorTables : public PredictorTableBase {
|
| + public:
|
| + // Used in the UrlResourceTable and HostResourceTable to store resources
|
| + // required for the page or host.
|
| + struct ResourceRow {
|
| + ResourceRow();
|
| + ResourceRow(const ResourceRow& other);
|
| + ResourceRow(const std::string& main_frame_url,
|
| + const std::string& resource_url,
|
| + content::ResourceType resource_type,
|
| + int number_of_hits,
|
| + int number_of_misses,
|
| + int consecutive_misses,
|
| + double average_position);
|
| + void UpdateScore();
|
| + bool operator==(const ResourceRow& rhs) const;
|
| +
|
| + // Stores the host for host based data, main frame Url for the Url based
|
| + // data. This field is cleared for efficiency reasons and the code outside
|
| + // this class should not assume it is set.
|
| + std::string primary_key;
|
| +
|
| + GURL resource_url;
|
| + content::ResourceType resource_type;
|
| + size_t number_of_hits;
|
| + size_t number_of_misses;
|
| + size_t consecutive_misses;
|
| + double average_position;
|
| +
|
| + // Not stored.
|
| + float score;
|
| + };
|
| + typedef std::vector<ResourceRow> ResourceRows;
|
| +
|
| + // Sorts the ResourceRows by score, descending.
|
| + struct ResourceRowSorter {
|
| + bool operator()(const ResourceRow& x, const ResourceRow& y) const;
|
| + };
|
| +
|
| + // Aggregated data for a Url or Host. Although the data differs slightly, we
|
| + // store them in the same structure, because most of the fields are common and
|
| + // it allows us to use the same functions.
|
| + struct PrefetchData {
|
| + PrefetchData(PrefetchKeyType key_type, const std::string& primary_key);
|
| + PrefetchData(const PrefetchData& other);
|
| + ~PrefetchData();
|
| + bool operator==(const PrefetchData& rhs) const;
|
| +
|
| + bool is_host() const { return key_type == PREFETCH_KEY_TYPE_HOST; }
|
| +
|
| + // Is the data a host as opposed to a Url?
|
| + PrefetchKeyType key_type; // Not const to be able to assign.
|
| + std::string primary_key; // is_host() ? main frame url : host.
|
| +
|
| + base::Time last_visit;
|
| + ResourceRows resources;
|
| + };
|
| + // Map from primary key to PrefetchData for the key.
|
| + typedef std::map<std::string, PrefetchData> PrefetchDataMap;
|
| +
|
| + // Returns data for all Urls and Hosts.
|
| + virtual void GetAllData(PrefetchDataMap* url_data_map,
|
| + PrefetchDataMap* host_data_map);
|
| +
|
| + // Updates data for a Url and a host. If either of the |url_data| or
|
| + // |host_data| has an empty primary key, it will be ignored.
|
| + // Note that the Urls and primary key in |url_data| and |host_data| should be
|
| + // less than |kMaxStringLength| in length.
|
| + virtual void UpdateData(const PrefetchData& url_data,
|
| + const PrefetchData& host_data);
|
| +
|
| + // Delete data for the input |urls| and |hosts|.
|
| + virtual void DeleteData(const std::vector<std::string>& urls,
|
| + const std::vector<std::string>& hosts);
|
| +
|
| + // Wrapper over DeleteData for convenience.
|
| + virtual void DeleteSingleDataPoint(const std::string& key,
|
| + PrefetchKeyType key_type);
|
| +
|
| + // Deletes all data in all the tables.
|
| + virtual void DeleteAllData();
|
| +
|
| + // The maximum length of the string that can be stored in the DB.
|
| + static const size_t kMaxStringLength;
|
| +
|
| + private:
|
| + friend class PredictorDatabaseInternal;
|
| + friend class MockResourcePrefetchPredictorTables;
|
| +
|
| + ResourcePrefetchPredictorTables();
|
| + virtual ~ResourcePrefetchPredictorTables();
|
| +
|
| + // Helper functions below help perform functions on the Url and host table
|
| + // using the same code.
|
| + void GetAllDataHelper(PrefetchKeyType key_type,
|
| + PrefetchDataMap* data_map,
|
| + std::vector<std::string>* to_delete);
|
| + bool UpdateDataHelper(const PrefetchData& data);
|
| + void DeleteDataHelper(PrefetchKeyType key_type,
|
| + const std::vector<std::string>& keys);
|
| +
|
| + // Returns true if the strings in the |data| are less than |kMaxStringLength|
|
| + // in length.
|
| + bool StringsAreSmallerThanDBLimit(const PrefetchData& data) const;
|
| +
|
| + // PredictorTableBase methods.
|
| + virtual void CreateTableIfNonExistent() OVERRIDE;
|
| + virtual void LogDatabaseStats() OVERRIDE;
|
| +
|
| + // Helpers to return Statements for cached Statements. The caller must take
|
| + // ownership of the return Statements.
|
| + sql::Statement* GetUrlResourceDeleteStatement();
|
| + sql::Statement* GetUrlResourceUpdateStatement();
|
| + sql::Statement* GetUrlMetadataDeleteStatement();
|
| + sql::Statement* GetUrlMetadataUpdateStatement();
|
| +
|
| + sql::Statement* GetHostResourceDeleteStatement();
|
| + sql::Statement* GetHostResourceUpdateStatement();
|
| + sql::Statement* GetHostMetadataDeleteStatement();
|
| + sql::Statement* GetHostMetadataUpdateStatement();
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ResourcePrefetchPredictorTables);
|
| +};
|
| +
|
| +} // namespace predictors
|
| +
|
| +#endif // CHROME_BROWSER_PREDICTORS_RESOURCE_PREFETCH_PREDICTOR_TABLES_H_
|
|
|