OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 "sql/connection.h" | 5 #include "sql/connection.h" |
6 | 6 |
7 #include <limits.h> | 7 #include <limits.h> |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 #include <string.h> | 10 #include <string.h> |
| 11 |
11 #include <utility> | 12 #include <utility> |
12 | 13 |
13 #include "base/bind.h" | 14 #include "base/bind.h" |
14 #include "base/debug/dump_without_crashing.h" | 15 #include "base/debug/dump_without_crashing.h" |
15 #include "base/files/file_path.h" | 16 #include "base/files/file_path.h" |
16 #include "base/files/file_util.h" | 17 #include "base/files/file_util.h" |
17 #include "base/format_macros.h" | 18 #include "base/format_macros.h" |
18 #include "base/json/json_file_value_serializer.h" | 19 #include "base/json/json_file_value_serializer.h" |
19 #include "base/lazy_instance.h" | 20 #include "base/lazy_instance.h" |
20 #include "base/logging.h" | 21 #include "base/logging.h" |
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
535 sqlite3_file* file = NULL; | 536 sqlite3_file* file = NULL; |
536 sqlite3_int64 file_size = 0; | 537 sqlite3_int64 file_size = 0; |
537 int rc = GetSqlite3FileAndSize(db_, &file, &file_size); | 538 int rc = GetSqlite3FileAndSize(db_, &file, &file_size); |
538 if (rc != SQLITE_OK) | 539 if (rc != SQLITE_OK) |
539 return; | 540 return; |
540 | 541 |
541 // Don't preload more than the file contains. | 542 // Don't preload more than the file contains. |
542 if (preload_size > file_size) | 543 if (preload_size > file_size) |
543 preload_size = file_size; | 544 preload_size = file_size; |
544 | 545 |
545 scoped_ptr<char[]> buf(new char[page_size]); | 546 std::unique_ptr<char[]> buf(new char[page_size]); |
546 for (sqlite3_int64 pos = 0; pos < preload_size; pos += page_size) { | 547 for (sqlite3_int64 pos = 0; pos < preload_size; pos += page_size) { |
547 rc = file->pMethods->xRead(file, buf.get(), page_size, pos); | 548 rc = file->pMethods->xRead(file, buf.get(), page_size, pos); |
548 | 549 |
549 // TODO(shess): Consider calling OnSqliteError(). | 550 // TODO(shess): Consider calling OnSqliteError(). |
550 if (rc != SQLITE_OK) | 551 if (rc != SQLITE_OK) |
551 return; | 552 return; |
552 } | 553 } |
553 } | 554 } |
554 | 555 |
555 // SQLite keeps unused pages associated with a connection in a cache. It asks | 556 // SQLite keeps unused pages associated with a connection in a cache. It asks |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
672 db_path.DirName().Append(FILE_PATH_LITERAL("sqlite-diag"))); | 673 db_path.DirName().Append(FILE_PATH_LITERAL("sqlite-diag"))); |
673 | 674 |
674 // Lock against multiple updates to the diagnostics file. This code should | 675 // Lock against multiple updates to the diagnostics file. This code should |
675 // seldom be called in the first place, and when called it should seldom be | 676 // seldom be called in the first place, and when called it should seldom be |
676 // called for multiple databases, and when called for multiple databases there | 677 // called for multiple databases, and when called for multiple databases there |
677 // is _probably_ something systemic wrong with the user's system. So the lock | 678 // is _probably_ something systemic wrong with the user's system. So the lock |
678 // should never be contended, but when it is the database experience is | 679 // should never be contended, but when it is the database experience is |
679 // already bad. | 680 // already bad. |
680 base::AutoLock lock(g_sqlite_init_lock.Get()); | 681 base::AutoLock lock(g_sqlite_init_lock.Get()); |
681 | 682 |
682 scoped_ptr<base::Value> root; | 683 std::unique_ptr<base::Value> root; |
683 if (!base::PathExists(breadcrumb_path)) { | 684 if (!base::PathExists(breadcrumb_path)) { |
684 scoped_ptr<base::DictionaryValue> root_dict(new base::DictionaryValue()); | 685 std::unique_ptr<base::DictionaryValue> root_dict( |
| 686 new base::DictionaryValue()); |
685 root_dict->SetInteger(kVersionKey, kVersion); | 687 root_dict->SetInteger(kVersionKey, kVersion); |
686 | 688 |
687 scoped_ptr<base::ListValue> dumps(new base::ListValue); | 689 std::unique_ptr<base::ListValue> dumps(new base::ListValue); |
688 dumps->AppendString(histogram_tag_); | 690 dumps->AppendString(histogram_tag_); |
689 root_dict->Set(kDiagnosticDumpsKey, std::move(dumps)); | 691 root_dict->Set(kDiagnosticDumpsKey, std::move(dumps)); |
690 | 692 |
691 root = std::move(root_dict); | 693 root = std::move(root_dict); |
692 } else { | 694 } else { |
693 // Failure to read a valid dictionary implies that something is going wrong | 695 // Failure to read a valid dictionary implies that something is going wrong |
694 // on the system. | 696 // on the system. |
695 JSONFileValueDeserializer deserializer(breadcrumb_path); | 697 JSONFileValueDeserializer deserializer(breadcrumb_path); |
696 scoped_ptr<base::Value> read_root( | 698 std::unique_ptr<base::Value> read_root( |
697 deserializer.Deserialize(nullptr, nullptr)); | 699 deserializer.Deserialize(nullptr, nullptr)); |
698 if (!read_root.get()) | 700 if (!read_root.get()) |
699 return false; | 701 return false; |
700 scoped_ptr<base::DictionaryValue> root_dict = | 702 std::unique_ptr<base::DictionaryValue> root_dict = |
701 base::DictionaryValue::From(std::move(read_root)); | 703 base::DictionaryValue::From(std::move(read_root)); |
702 if (!root_dict) | 704 if (!root_dict) |
703 return false; | 705 return false; |
704 | 706 |
705 // Don't upload if the version is missing or newer. | 707 // Don't upload if the version is missing or newer. |
706 int version = 0; | 708 int version = 0; |
707 if (!root_dict->GetInteger(kVersionKey, &version) || version > kVersion) | 709 if (!root_dict->GetInteger(kVersionKey, &version) || version > kVersion) |
708 return false; | 710 return false; |
709 | 711 |
710 base::ListValue* dumps = nullptr; | 712 base::ListValue* dumps = nullptr; |
(...skipping 1269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1980 ignore_result(Execute(kNoWritableSchema)); | 1982 ignore_result(Execute(kNoWritableSchema)); |
1981 | 1983 |
1982 return ret; | 1984 return ret; |
1983 } | 1985 } |
1984 | 1986 |
1985 base::TimeTicks TimeSource::Now() { | 1987 base::TimeTicks TimeSource::Now() { |
1986 return base::TimeTicks::Now(); | 1988 return base::TimeTicks::Now(); |
1987 } | 1989 } |
1988 | 1990 |
1989 } // namespace sql | 1991 } // namespace sql |
OLD | NEW |