OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/history/in_memory_history_backend.h" | 5 #include "chrome/browser/history/in_memory_history_backend.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
11 #include "base/time.h" | 11 #include "base/time.h" |
12 #include "base/utf_string_conversions.h" | 12 #include "base/utf_string_conversions.h" |
13 #include "chrome/browser/browser_process.h" | 13 #include "chrome/browser/browser_process.h" |
14 #include "chrome/browser/history/history_notifications.h" | 14 #include "chrome/browser/history/history_notifications.h" |
15 #include "chrome/browser/history/in_memory_database.h" | 15 #include "chrome/browser/history/in_memory_database.h" |
16 #include "chrome/browser/history/in_memory_url_index.h" | |
17 #include "chrome/browser/history/url_database.h" | 16 #include "chrome/browser/history/url_database.h" |
18 #include "chrome/browser/profiles/profile.h" | 17 #include "chrome/browser/profiles/profile.h" |
19 #include "chrome/common/chrome_notification_types.h" | 18 #include "chrome/common/chrome_notification_types.h" |
20 #include "chrome/common/chrome_switches.h" | 19 #include "content/public/browser/notification_service.h" |
21 #include "content/public/browser/notification_details.h" | |
22 #include "content/public/browser/notification_source.h" | |
23 | 20 |
24 namespace history { | 21 namespace history { |
25 | 22 |
26 InMemoryHistoryBackend::InMemoryHistoryBackend() | 23 InMemoryHistoryBackend::InMemoryHistoryBackend() |
27 : profile_(NULL) { | 24 : profile_(NULL) {} |
28 } | |
29 | 25 |
30 InMemoryHistoryBackend::~InMemoryHistoryBackend() { | 26 InMemoryHistoryBackend::~InMemoryHistoryBackend() {} |
31 if (index_.get()) | |
32 index_->ShutDown(); | |
33 } | |
34 | 27 |
35 bool InMemoryHistoryBackend::Init(const FilePath& history_filename, | 28 bool InMemoryHistoryBackend::Init(const FilePath& history_filename, |
36 const FilePath& history_dir, | 29 const FilePath& history_dir, |
37 URLDatabase* db, | 30 URLDatabase* db, |
38 const std::string& languages) { | 31 const std::string& languages) { |
39 db_.reset(new InMemoryDatabase); | 32 db_.reset(new InMemoryDatabase); |
40 bool success = db_->InitFromDisk(history_filename); | 33 return db_->InitFromDisk(history_filename); |
41 if (!CommandLine::ForCurrentProcess()->HasSwitch( | |
42 switches::kDisableHistoryQuickProvider)) { | |
43 index_.reset(new InMemoryURLIndex(history_dir)); | |
44 index_->Init(db, languages); | |
45 } | |
46 return success; | |
47 } | 34 } |
48 | 35 |
49 void InMemoryHistoryBackend::AttachToHistoryService(Profile* profile) { | 36 void InMemoryHistoryBackend::AttachToHistoryService(Profile* profile) { |
50 if (!db_.get()) { | 37 if (!db_.get()) { |
51 NOTREACHED(); | 38 NOTREACHED(); |
52 return; | 39 return; |
53 } | 40 } |
54 | 41 |
55 profile_ = profile; | 42 profile_ = profile; |
56 | 43 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 // IDs in the main database. This sucks. Instead of Add and Remove, we should | 111 // IDs in the main database. This sucks. Instead of Add and Remove, we should |
125 // have Sync(), which would take the ID if it's given and add it. | 112 // have Sync(), which would take the ID if it's given and add it. |
126 std::vector<history::URLRow>::const_iterator i; | 113 std::vector<history::URLRow>::const_iterator i; |
127 for (i = details.changed_urls.begin(); | 114 for (i = details.changed_urls.begin(); |
128 i != details.changed_urls.end(); i++) { | 115 i != details.changed_urls.end(); i++) { |
129 URLID id = db_->GetRowForURL(i->url(), NULL); | 116 URLID id = db_->GetRowForURL(i->url(), NULL); |
130 if (id) | 117 if (id) |
131 db_->UpdateURLRow(id, *i); | 118 db_->UpdateURLRow(id, *i); |
132 else | 119 else |
133 id = db_->AddURL(*i); | 120 id = db_->AddURL(*i); |
134 if (index_.get()) | |
135 index_->UpdateURL(id, *i); | |
136 } | 121 } |
137 } | 122 } |
138 | 123 |
139 void InMemoryHistoryBackend::OnURLsDeleted(const URLsDeletedDetails& details) { | 124 void InMemoryHistoryBackend::OnURLsDeleted(const URLsDeletedDetails& details) { |
140 DCHECK(db_.get()); | 125 DCHECK(db_.get()); |
141 | |
142 if (details.all_history) { | 126 if (details.all_history) { |
143 // When all history is deleted, the individual URLs won't be listed. Just | 127 // When all history is deleted, the individual URLs won't be listed. Just |
144 // create a new database to quickly clear everything out. | 128 // create a new database to quickly clear everything out. |
145 db_.reset(new InMemoryDatabase); | 129 db_.reset(new InMemoryDatabase); |
146 if (!db_->InitFromScratch()) | 130 if (!db_->InitFromScratch()) |
147 db_.reset(); | 131 db_.reset(); |
148 if (index_.get()) | |
149 index_->ReloadFromHistory(db_.get(), true); | |
150 return; | 132 return; |
151 } | 133 } |
152 | 134 |
153 // Delete all matching URLs in our database. | 135 // Delete all matching URLs in our database. |
154 for (std::set<GURL>::const_iterator i = details.urls.begin(); | 136 for (std::vector<URLRow>::const_iterator row = details.rows.begin(); |
155 i != details.urls.end(); ++i) { | 137 row != details.rows.end(); ++row) { |
156 URLID id = db_->GetRowForURL(*i, NULL); | 138 // We typically won't have most of them since we only have a subset of |
157 if (id) { | 139 // history, so ignore errors. |
158 // We typically won't have most of them since we only have a subset of | 140 db_->DeleteURLRow(row->id()); |
159 // history, so ignore errors. | |
160 db_->DeleteURLRow(id); | |
161 if (index_.get()) | |
162 index_->DeleteURL(id); | |
163 } | |
164 } | 141 } |
165 } | 142 } |
166 | 143 |
167 void InMemoryHistoryBackend::OnKeywordSearchTermUpdated( | 144 void InMemoryHistoryBackend::OnKeywordSearchTermUpdated( |
168 const KeywordSearchTermDetails& details) { | 145 const KeywordSearchTermDetails& details) { |
169 // The url won't exist for new search terms (as the user hasn't typed it), so | 146 // The url won't exist for new search terms (as the user hasn't typed it), so |
170 // we force it to be added. If we end up adding a URL it won't be | 147 // we force it to be added. If we end up adding a URL it won't be |
171 // autocompleted as the typed count is 0. | 148 // autocompleted as the typed count is 0. |
172 URLRow url_row; | 149 URLRow url_row; |
173 URLID url_id; | 150 URLID url_id; |
(...skipping 15 matching lines...) Expand all Loading... |
189 | 166 |
190 bool InMemoryHistoryBackend::HasKeyword(const GURL& url) { | 167 bool InMemoryHistoryBackend::HasKeyword(const GURL& url) { |
191 URLID id = db_->GetRowForURL(url, NULL); | 168 URLID id = db_->GetRowForURL(url, NULL); |
192 if (!id) | 169 if (!id) |
193 return false; | 170 return false; |
194 | 171 |
195 return db_->GetKeywordSearchTermRow(id, NULL); | 172 return db_->GetKeywordSearchTermRow(id, NULL); |
196 } | 173 } |
197 | 174 |
198 } // namespace history | 175 } // namespace history |
OLD | NEW |