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

Side by Side Diff: components/precache/core/precache_url_table.cc

Issue 2229983002: Send the list of used and unused resources for precache (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/precache/core/precache_url_table.h" 5 #include "components/precache/core/precache_url_table.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "sql/connection.h" 10 #include "sql/connection.h"
(...skipping 17 matching lines...) Expand all
28 PrecacheURLTable::~PrecacheURLTable() {} 28 PrecacheURLTable::~PrecacheURLTable() {}
29 29
30 bool PrecacheURLTable::Init(sql::Connection* db) { 30 bool PrecacheURLTable::Init(sql::Connection* db) {
31 DCHECK(!db_); // Init must only be called once. 31 DCHECK(!db_); // Init must only be called once.
32 DCHECK(db); // The database connection must be non-NULL. 32 DCHECK(db); // The database connection must be non-NULL.
33 db_ = db; 33 db_ = db;
34 return CreateTableIfNonExistent(); 34 return CreateTableIfNonExistent();
35 } 35 }
36 36
37 void PrecacheURLTable::AddURL(const GURL& url, 37 void PrecacheURLTable::AddURL(const GURL& url,
38 int64_t referrer_host_id,
39 bool is_precached,
38 const base::Time& precache_time) { 40 const base::Time& precache_time) {
39 Statement statement(db_->GetCachedStatement( 41 Statement statement(
40 SQL_FROM_HERE, 42 db_->GetCachedStatement(SQL_FROM_HERE,
41 "INSERT OR REPLACE INTO precache_urls (url, time) VALUES(?,?)")); 43 "INSERT OR REPLACE INTO precache_urls (url, "
44 "referrer_host_id, was_used, is_precached, time) "
45 "VALUES(?,?,0,?,?)"));
42 46
43 statement.BindString(0, GetKey(url)); 47 statement.BindString(0, GetKey(url));
44 statement.BindInt64(1, precache_time.ToInternalValue()); 48 statement.BindInt64(1, referrer_host_id);
49 statement.BindInt64(2, is_precached ? 1 : 0);
50 statement.BindInt64(3, precache_time.ToInternalValue());
45 statement.Run(); 51 statement.Run();
46 } 52 }
47 53
48 bool PrecacheURLTable::HasURL(const GURL& url) { 54 bool PrecacheURLTable::IsURLPrecached(const GURL& url) {
49 Statement statement(db_->GetCachedStatement( 55 Statement statement(db_->GetCachedStatement(
50 SQL_FROM_HERE, "SELECT time FROM precache_urls WHERE url=?")); 56 SQL_FROM_HERE,
57 "SELECT time FROM precache_urls WHERE url=? and is_precached=1"));
51 58
52 statement.BindString(0, GetKey(url)); 59 statement.BindString(0, GetKey(url));
53 return statement.Step(); 60 return statement.Step();
54 } 61 }
55 62
63 bool PrecacheURLTable::IsURLPrecachedAndUnused(const GURL& url) {
64 Statement statement(db_->GetCachedStatement(SQL_FROM_HERE,
65 "SELECT time FROM precache_urls "
66 "WHERE url=? and is_precached=1 "
67 "and was_used=0"));
68
69 statement.BindString(0, GetKey(url));
70 return statement.Step();
71 }
72
73 void PrecacheURLTable::SetPrecachedURLAsUsed(const GURL& url) {
74 Statement statement(
75 db_->GetCachedStatement(SQL_FROM_HERE,
76 "UPDATE precache_urls SET was_used=1, "
77 "is_precached=0 "
78 "WHERE url=? and was_used=0 and is_precached=1"));
79
80 statement.BindString(0, GetKey(url));
81 statement.Run();
82 }
83
84 void PrecacheURLTable::GetURLListForReferrerHost(
85 int64_t referrer_host_id,
86 std::deque<GURL>& used_urls,
87 std::deque<GURL>& unused_urls) {
88 Statement statement(db_->GetCachedStatement(
89 SQL_FROM_HERE,
90 "SELECT url, was_used from precache_urls where referrer_host_id=?"));
91 statement.BindInt64(0, referrer_host_id);
92 while (statement.Step()) {
93 GURL url(statement.ColumnString(0));
94 if (statement.ColumnInt(1))
95 used_urls.push_back(url);
96 else
97 unused_urls.push_back(url);
98 }
99 }
100
56 void PrecacheURLTable::DeleteURL(const GURL& url) { 101 void PrecacheURLTable::DeleteURL(const GURL& url) {
57 Statement statement(db_->GetCachedStatement( 102 Statement statement(db_->GetCachedStatement(
58 SQL_FROM_HERE, "DELETE FROM precache_urls WHERE url=?")); 103 SQL_FROM_HERE, "DELETE FROM precache_urls WHERE url=?"));
59 104
60 statement.BindString(0, GetKey(url)); 105 statement.BindString(0, GetKey(url));
61 statement.Run(); 106 statement.Run();
62 } 107 }
63 108
64 void PrecacheURLTable::DeleteAllPrecachedBefore(const base::Time& delete_end) { 109 void PrecacheURLTable::DeleteAllPrecachedBefore(const base::Time& delete_end) {
65 Statement statement(db_->GetCachedStatement( 110 Statement statement(db_->GetCachedStatement(
66 SQL_FROM_HERE, "DELETE FROM precache_urls WHERE time < ?")); 111 SQL_FROM_HERE, "DELETE FROM precache_urls WHERE time < ?"));
67 112
68 statement.BindInt64(0, delete_end.ToInternalValue()); 113 statement.BindInt64(0, delete_end.ToInternalValue());
69 statement.Run(); 114 statement.Run();
70 } 115 }
71 116
72 void PrecacheURLTable::DeleteAll() { 117 void PrecacheURLTable::DeleteAll() {
73 Statement statement( 118 Statement statement(
74 db_->GetCachedStatement(SQL_FROM_HERE, "DELETE FROM precache_urls")); 119 db_->GetCachedStatement(SQL_FROM_HERE, "DELETE FROM precache_urls"));
75 120
76 statement.Run(); 121 statement.Run();
77 } 122 }
78 123
79 void PrecacheURLTable::GetAllDataForTesting(std::map<GURL, base::Time>* map) { 124 void PrecacheURLTable::GetAllDataForTesting(std::map<GURL, base::Time>* map) {
80 map->clear(); 125 map->clear();
81 126
82 Statement statement(db_->GetCachedStatement( 127 Statement statement(db_->GetCachedStatement(
83 SQL_FROM_HERE, "SELECT url, time FROM precache_urls")); 128 SQL_FROM_HERE,
129 "SELECT url, time FROM precache_urls where is_precached=1"));
84 130
85 while (statement.Step()) { 131 while (statement.Step()) {
86 GURL url = GURL(statement.ColumnString(0)); 132 GURL url = GURL(statement.ColumnString(0));
87 (*map)[url] = base::Time::FromInternalValue(statement.ColumnInt64(1)); 133 (*map)[url] = base::Time::FromInternalValue(statement.ColumnInt64(1));
88 } 134 }
89 } 135 }
90 136
91 bool PrecacheURLTable::CreateTableIfNonExistent() { 137 bool PrecacheURLTable::CreateTableIfNonExistent() {
92 return db_->Execute( 138 if (!db_->DoesTableExist("precache_urls")) {
93 "CREATE TABLE IF NOT EXISTS precache_urls (url TEXT PRIMARY KEY, time " 139 return db_->Execute(
94 "INTEGER)"); 140 "CREATE TABLE precache_urls "
141 "(url TEXT PRIMARY KEY, referrer_host_id INTEGER, was_used INTEGER, "
142 "is_precached INTEGER, "
143 "time INTEGER)");
144 } else {
145 // Migrate the table by creating the missing columns.
146 if (!db_->DoesColumnExist("precache_urls", "was_used") &&
147 !db_->Execute("ALTER TABLE precache_urls ADD COLUMN was_used INTEGER"))
148 return false;
149 if (!db_->DoesColumnExist("precache_urls", "is_precached") &&
150 !db_->Execute(
151 "ALTER TABLE precache_urls ADD COLUMN is_precached INTEGER"))
152 return false;
153 if (!db_->DoesColumnExist("precache_urls", "referrer_host_id") &&
154 !db_->Execute(
155 "ALTER TABLE precache_urls ADD COLUMN referrer_host_id INTEGER"))
156 return false;
157 }
158 return true;
95 } 159 }
96 160
97 } // namespace precache 161 } // namespace precache
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698