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

Side by Side Diff: components/offline_pages/offline_page_metadata_store_sql.cc

Issue 2331343007: [Offline pages] OPMStoreSQL implementation of Add disabling updates (Closed)
Patch Set: Created 4 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
« no previous file with comments | « components/offline_pages/offline_page_metadata_store_impl_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/offline_pages/offline_page_metadata_store_sql.h" 5 #include "components/offline_pages/offline_page_metadata_store_sql.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/files/file_util.h" 9 #include "base/files/file_util.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 base::string16 title = statement->ColumnString16(10); 175 base::string16 title = statement->ColumnString16(10);
176 176
177 OfflinePageItem item(url, id, client_id, path, file_size, creation_time); 177 OfflinePageItem item(url, id, client_id, path, file_size, creation_time);
178 item.last_access_time = last_access_time; 178 item.last_access_time = last_access_time;
179 item.access_count = access_count; 179 item.access_count = access_count;
180 item.expiration_time = expiration_time; 180 item.expiration_time = expiration_time;
181 item.title = title; 181 item.title = title;
182 return item; 182 return item;
183 } 183 }
184 184
185 bool Insert(sql::Connection* db, const OfflinePageItem& item) {
186 // Using 'INSERT OR FAIL' or 'INSERT OR ABORT' in the query below causes debug
187 // builds to DLOG.
188 const char kSql[] =
189 "INSERT OR IGNORE INTO " OFFLINE_PAGES_TABLE_NAME
190 " (offline_id, online_url, client_namespace, client_id, file_path, "
dewittj 2016/09/15 14:58:26 Can we parametrize this so that there's no chance
fgorski 2016/09/15 16:53:47 No, and you will see why in the patch that follows
191 "file_size, creation_time, last_access_time, access_count, "
192 "expiration_time, title)"
193 " VALUES "
194 " (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
195
196 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql));
197 statement.BindInt64(0, item.offline_id);
198 statement.BindString(1, item.url.spec());
199 statement.BindString(2, item.client_id.name_space);
200 statement.BindString(3, item.client_id.id);
201 statement.BindString(4, GetUTF8StringFromPath(item.file_path));
202 statement.BindInt64(5, item.file_size);
203 statement.BindInt64(6, item.creation_time.ToInternalValue());
204 statement.BindInt64(7, item.last_access_time.ToInternalValue());
205 statement.BindInt(8, item.access_count);
206 statement.BindInt64(9, item.expiration_time.ToInternalValue());
207 statement.BindString16(10, item.title);
208 return statement.Run() && db->GetLastChangeCount() > 0;
dewittj 2016/09/15 14:58:26 This function should return ItemActionStatus, so t
fgorski 2016/09/15 16:53:47 Done.
209 }
210
185 bool InsertOrReplace(sql::Connection* db, const OfflinePageItem& item) { 211 bool InsertOrReplace(sql::Connection* db, const OfflinePageItem& item) {
186 const char kSql[] = 212 const char kSql[] =
187 "INSERT OR REPLACE INTO " OFFLINE_PAGES_TABLE_NAME 213 "INSERT OR REPLACE INTO " OFFLINE_PAGES_TABLE_NAME
188 " (offline_id, online_url, client_namespace, client_id, file_path, " 214 " (offline_id, online_url, client_namespace, client_id, file_path, "
189 "file_size, creation_time, last_access_time, access_count, " 215 "file_size, creation_time, last_access_time, access_count, "
190 "expiration_time, title)" 216 "expiration_time, title)"
191 " VALUES " 217 " VALUES "
192 " (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; 218 " (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
193 219
194 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql)); 220 sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE, kSql));
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 NotifyLoadResult(runner, callback, 299 NotifyLoadResult(runner, callback,
274 OfflinePageMetadataStore::STORE_LOAD_FAILED, result); 300 OfflinePageMetadataStore::STORE_LOAD_FAILED, result);
275 } 301 }
276 } 302 }
277 303
278 void AddOfflinePageSync(sql::Connection* db, 304 void AddOfflinePageSync(sql::Connection* db,
279 scoped_refptr<base::SingleThreadTaskRunner> runner, 305 scoped_refptr<base::SingleThreadTaskRunner> runner,
280 const OfflinePageItem& offline_page, 306 const OfflinePageItem& offline_page,
281 const OfflinePageMetadataStore::AddCallback& callback) { 307 const OfflinePageMetadataStore::AddCallback& callback) {
282 // TODO(fgorski): Only insert should happen here. 308 // TODO(fgorski): Only insert should happen here.
283 InsertOrReplace(db, offline_page); 309 bool success = Insert(db, offline_page);
284 runner->PostTask(FROM_HERE, 310 runner->PostTask(
285 base::Bind(callback, OfflinePageMetadataStore::SUCCESS)); 311 FROM_HERE,
312 base::Bind(callback, success ? OfflinePageMetadataStore::SUCCESS
313 : OfflinePageMetadataStore::ALREADY_EXISTS));
286 } 314 }
287 315
288 void UpdateOfflinePagesSync( 316 void UpdateOfflinePagesSync(
289 sql::Connection* db, 317 sql::Connection* db,
290 scoped_refptr<base::SingleThreadTaskRunner> runner, 318 scoped_refptr<base::SingleThreadTaskRunner> runner,
291 const std::vector<OfflinePageItem>& pages, 319 const std::vector<OfflinePageItem>& pages,
292 const OfflinePageMetadataStore::UpdateCallback& callback) { 320 const OfflinePageMetadataStore::UpdateCallback& callback) {
293 // TODO(fgorski): Update the callback to provide information about all items 321 // TODO(fgorski): Update the callback to provide information about all items
294 // and not just a high level boolean. 322 // and not just a high level boolean.
295 sql::Transaction transaction(db); 323 sql::Transaction transaction(db);
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 DCHECK(db_.get()); 496 DCHECK(db_.get());
469 if (!db_.get()) { 497 if (!db_.get()) {
470 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 498 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
471 base::Bind(callback)); 499 base::Bind(callback));
472 return false; 500 return false;
473 } 501 }
474 return true; 502 return true;
475 } 503 }
476 504
477 } // namespace offline_pages 505 } // namespace offline_pages
OLDNEW
« no previous file with comments | « components/offline_pages/offline_page_metadata_store_impl_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698