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

Side by Side Diff: chrome/browser/history/android/android_provider_backend.cc

Issue 484213002: Refactor HistoryService to not send NOTIFICATION_FAVICON_CHANGED (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix android unit tests Created 6 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 | Annotate | Revision Log
OLDNEW
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 "chrome/browser/history/android/android_provider_backend.h" 5 #include "chrome/browser/history/android/android_provider_backend.h"
6 6
7 #include "base/i18n/case_conversion.h" 7 #include "base/i18n/case_conversion.h"
8 #include "chrome/browser/chrome_notification_types.h" 8 #include "chrome/browser/chrome_notification_types.h"
9 #include "chrome/browser/favicon/favicon_changed_details.h"
10 #include "chrome/browser/history/android/android_time.h" 9 #include "chrome/browser/history/android/android_time.h"
11 #include "chrome/browser/history/android/android_urls_sql_handler.h" 10 #include "chrome/browser/history/android/android_urls_sql_handler.h"
12 #include "chrome/browser/history/android/bookmark_model_sql_handler.h" 11 #include "chrome/browser/history/android/bookmark_model_sql_handler.h"
13 #include "chrome/browser/history/android/favicon_sql_handler.h" 12 #include "chrome/browser/history/android/favicon_sql_handler.h"
14 #include "chrome/browser/history/android/urls_sql_handler.h" 13 #include "chrome/browser/history/android/urls_sql_handler.h"
15 #include "chrome/browser/history/android/visit_sql_handler.h" 14 #include "chrome/browser/history/android/visit_sql_handler.h"
16 #include "chrome/browser/history/history_backend.h" 15 #include "chrome/browser/history/history_backend.h"
17 #include "chrome/browser/history/history_database.h" 16 #include "chrome/browser/history/history_database.h"
18 #include "chrome/browser/history/thumbnail_database.h" 17 #include "chrome/browser/history/thumbnail_database.h"
19 #include "components/history/core/browser/history_client.h" 18 #include "components/history/core/browser/history_client.h"
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 return false; 107 return false;
109 108
110 if (row.last_visit_time().ToInternalValue() - 109 if (row.last_visit_time().ToInternalValue() -
111 row.created().ToInternalValue() < row.visit_count()) 110 row.created().ToInternalValue() < row.visit_count())
112 return false; 111 return false;
113 } 112 }
114 } 113 }
115 return true; 114 return true;
116 } 115 }
117 116
117 void RunNotifyFaviconChanged(HistoryBackend::Delegate* delegate,
118 scoped_ptr<std::set<GURL> > changed_favicons) {
119 delegate->NotifyFaviconChanged(*changed_favicons);
120 }
121
118 } // namespace 122 } // namespace
119 123
120
121 // AndroidProviderBackend::HistoryNotifications -------------------------------
122
123 AndroidProviderBackend::HistoryNotifications::HistoryNotifications() {
124 }
125
126 AndroidProviderBackend::HistoryNotifications::~HistoryNotifications() {
127 }
128
129 void AndroidProviderBackend::HistoryNotifications::PushBack(
130 int type,
131 scoped_ptr<HistoryDetails> detail) {
132 DCHECK_EQ(types_.size(), details_.size());
133 types_.push_back(type);
134 details_.push_back(detail.release());
135 }
136
137 int AndroidProviderBackend::HistoryNotifications::PopBackType() {
138 DCHECK(!empty());
139 int type = types_.back();
140 types_.pop_back();
141 return type;
142 }
143
144 scoped_ptr<HistoryDetails>
145 AndroidProviderBackend::HistoryNotifications::PopBackDetails() {
146 DCHECK(!details_.empty());
147 scoped_ptr<HistoryDetails> detail(details_.back());
148 details_.weak_erase(details_.end() - 1);
149 return detail.Pass();
150 }
151
152
153 // AndroidProviderBackend::ScopedTransaction ---------------------------------- 124 // AndroidProviderBackend::ScopedTransaction ----------------------------------
154 125
155 AndroidProviderBackend::ScopedTransaction::ScopedTransaction( 126 AndroidProviderBackend::ScopedTransaction::ScopedTransaction(
156 HistoryDatabase* history_db, 127 HistoryDatabase* history_db,
157 ThumbnailDatabase* thumbnail_db) 128 ThumbnailDatabase* thumbnail_db)
158 : history_db_(history_db), 129 : history_db_(history_db),
159 thumbnail_db_(thumbnail_db), 130 thumbnail_db_(thumbnail_db),
160 committed_(false), 131 committed_(false),
161 history_transaction_nesting_(history_db_->transaction_nesting()), 132 history_transaction_nesting_(history_db_->transaction_nesting()),
162 thumbnail_transaction_nesting_( 133 thumbnail_transaction_nesting_(
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 for (std::vector<SQLHandler*>::iterator i = 328 for (std::vector<SQLHandler*>::iterator i =
358 sql_handlers_.begin(); i != sql_handlers_.end(); ++i) { 329 sql_handlers_.begin(); i != sql_handlers_.end(); ++i) {
359 if ((*i)->HasColumnIn(row)) { 330 if ((*i)->HasColumnIn(row)) {
360 if (!(*i)->Update(row, ids_set)) 331 if (!(*i)->Update(row, ids_set))
361 return false; 332 return false;
362 } 333 }
363 } 334 }
364 *updated_count = ids_set.size(); 335 *updated_count = ids_set.size();
365 336
366 scoped_ptr<URLsModifiedDetails> modified(new URLsModifiedDetails); 337 scoped_ptr<URLsModifiedDetails> modified(new URLsModifiedDetails);
367 scoped_ptr<FaviconChangedDetails> favicon(new FaviconChangedDetails); 338 scoped_ptr<std::set<GURL> > favicon(new std::set<GURL>);
368 339
369 for (TableIDRows::const_iterator i = ids_set.begin(); i != ids_set.end(); 340 for (TableIDRows::const_iterator i = ids_set.begin(); i != ids_set.end();
370 ++i) { 341 ++i) {
371 if (row.is_value_set_explicitly(HistoryAndBookmarkRow::TITLE) || 342 if (row.is_value_set_explicitly(HistoryAndBookmarkRow::TITLE) ||
372 row.is_value_set_explicitly(HistoryAndBookmarkRow::VISIT_COUNT) || 343 row.is_value_set_explicitly(HistoryAndBookmarkRow::VISIT_COUNT) ||
373 row.is_value_set_explicitly(HistoryAndBookmarkRow::LAST_VISIT_TIME)) { 344 row.is_value_set_explicitly(HistoryAndBookmarkRow::LAST_VISIT_TIME)) {
374 URLRow url_row; 345 URLRow url_row;
375 if (!history_db_->GetURLRow(i->url_id, &url_row)) 346 if (!history_db_->GetURLRow(i->url_id, &url_row))
376 return false; 347 return false;
377 modified->changed_urls.push_back(url_row); 348 modified->changed_urls.push_back(url_row);
378 } 349 }
379 if (thumbnail_db_ && 350 if (thumbnail_db_ &&
380 row.is_value_set_explicitly(HistoryAndBookmarkRow::FAVICON)) 351 row.is_value_set_explicitly(HistoryAndBookmarkRow::FAVICON))
381 favicon->urls.insert(i->url); 352 favicon->insert(i->url);
382 } 353 }
383 354
384 if (!modified->changed_urls.empty()) { 355 if (!modified->changed_urls.empty()) {
385 notifications->PushBack(chrome::NOTIFICATION_HISTORY_URLS_MODIFIED, 356 scoped_ptr<HistoryDetails> details = modified.PassAs<HistoryDetails>();
386 modified.PassAs<HistoryDetails>()); 357 notifications->push_back(
358 base::Bind(&HistoryBackend::Delegate::BroadcastNotifications,
359 base::Unretained(delegate_),
360 chrome::NOTIFICATION_HISTORY_URLS_MODIFIED,
361 base::Passed(&details)));
387 } 362 }
388 363
389 if (!favicon->urls.empty()) { 364 if (!favicon->empty()) {
390 notifications->PushBack(chrome::NOTIFICATION_FAVICON_CHANGED, 365 notifications->push_back(base::Bind(&RunNotifyFaviconChanged,
391 favicon.PassAs<HistoryDetails>()); 366 base::Unretained(delegate_),
367 base::Passed(&favicon)));
392 } 368 }
393 369
394 return true; 370 return true;
395 } 371 }
396 372
397 AndroidURLID AndroidProviderBackend::InsertHistoryAndBookmark( 373 AndroidURLID AndroidProviderBackend::InsertHistoryAndBookmark(
398 const HistoryAndBookmarkRow& values, 374 const HistoryAndBookmarkRow& values,
399 bool ensure_initialized_and_updated, 375 bool ensure_initialized_and_updated,
400 HistoryNotifications* notifications) { 376 HistoryNotifications* notifications) {
401 if (!IsHistoryAndBookmarkRowValid(values)) 377 if (!IsHistoryAndBookmarkRowValid(values))
402 return false; 378 return false;
403 379
404 if (ensure_initialized_and_updated && !EnsureInitializedAndUpdated()) 380 if (ensure_initialized_and_updated && !EnsureInitializedAndUpdated())
405 return 0; 381 return 0;
406 382
407 DCHECK(values.is_value_set_explicitly(HistoryAndBookmarkRow::URL)); 383 DCHECK(values.is_value_set_explicitly(HistoryAndBookmarkRow::URL));
408 // Make a copy of values as we need change it during insert. 384 // Make a copy of values as we need change it during insert.
409 HistoryAndBookmarkRow row = values; 385 HistoryAndBookmarkRow row = values;
410 for (std::vector<SQLHandler*>::iterator i = 386 for (std::vector<SQLHandler*>::iterator i =
411 sql_handlers_.begin(); i != sql_handlers_.end(); ++i) { 387 sql_handlers_.begin(); i != sql_handlers_.end(); ++i) {
412 if (!(*i)->Insert(&row)) 388 if (!(*i)->Insert(&row))
413 return 0; 389 return 0;
414 } 390 }
415 391
416 URLRow url_row; 392 URLRow url_row;
417 if (!history_db_->GetURLRow(row.url_id(), &url_row)) 393 if (!history_db_->GetURLRow(row.url_id(), &url_row))
418 return false; 394 return false;
419 395
420 scoped_ptr<URLsModifiedDetails> modified(new URLsModifiedDetails); 396 scoped_ptr<URLsModifiedDetails> modified(new URLsModifiedDetails);
421 if (!modified.get())
422 return false;
423 modified->changed_urls.push_back(url_row); 397 modified->changed_urls.push_back(url_row);
424 398
425 scoped_ptr<FaviconChangedDetails> favicon; 399 scoped_ptr<std::set<GURL> > favicon;
426 // No favicon should be changed if the thumbnail_db_ is not available. 400 // No favicon should be changed if the thumbnail_db_ is not available.
427 if (row.is_value_set_explicitly(HistoryAndBookmarkRow::FAVICON) && 401 if (row.is_value_set_explicitly(HistoryAndBookmarkRow::FAVICON) &&
428 row.favicon_valid() && thumbnail_db_) { 402 row.favicon_valid() && thumbnail_db_) {
429 favicon.reset(new FaviconChangedDetails); 403 favicon.reset(new std::set<GURL>);
430 if (!favicon.get()) 404 favicon->insert(url_row.url());
431 return false;
432 favicon->urls.insert(url_row.url());
433 } 405 }
434 406
435 notifications->PushBack(chrome::NOTIFICATION_HISTORY_URLS_MODIFIED, 407 scoped_ptr<HistoryDetails> details = modified.PassAs<HistoryDetails>();
436 modified.PassAs<HistoryDetails>()); 408 notifications->push_back(
409 base::Bind(&HistoryBackend::Delegate::BroadcastNotifications,
410 base::Unretained(delegate_),
411 chrome::NOTIFICATION_HISTORY_URLS_MODIFIED,
412 base::Passed(&details)));
413
437 if (favicon) { 414 if (favicon) {
438 notifications->PushBack(chrome::NOTIFICATION_FAVICON_CHANGED, 415 DCHECK(!favicon->empty());
439 favicon.PassAs<HistoryDetails>()); 416 notifications->push_back(base::Bind(&RunNotifyFaviconChanged,
417 base::Unretained(delegate_),
418 base::Passed(&favicon)));
440 } 419 }
441 420
442 return row.id(); 421 return row.id();
443 } 422 }
444 423
445 bool AndroidProviderBackend::DeleteHistoryAndBookmarks( 424 bool AndroidProviderBackend::DeleteHistoryAndBookmarks(
446 const std::string& selection, 425 const std::string& selection,
447 const std::vector<base::string16>& selection_args, 426 const std::vector<base::string16>& selection_args,
448 int * deleted_count, 427 int * deleted_count,
449 HistoryNotifications* notifications) { 428 HistoryNotifications* notifications) {
(...skipping 553 matching lines...) Expand 10 before | Expand all | Expand 10 after
1003 982
1004 HistoryAndBookmarkRow new_row; 983 HistoryAndBookmarkRow new_row;
1005 new_row.set_last_visit_time(FromDatabaseTime( 984 new_row.set_last_visit_time(FromDatabaseTime(
1006 statement->statement()->ColumnInt64(0))); 985 statement->statement()->ColumnInt64(0)));
1007 new_row.set_created(FromDatabaseTime( 986 new_row.set_created(FromDatabaseTime(
1008 statement->statement()->ColumnInt64(1))); 987 statement->statement()->ColumnInt64(1)));
1009 new_row.set_visit_count(statement->statement()->ColumnInt(2)); 988 new_row.set_visit_count(statement->statement()->ColumnInt(2));
1010 new_row.set_title(statement->statement()->ColumnString16(3)); 989 new_row.set_title(statement->statement()->ColumnString16(3));
1011 990
1012 scoped_ptr<URLsDeletedDetails> deleted_details(new URLsDeletedDetails); 991 scoped_ptr<URLsDeletedDetails> deleted_details(new URLsDeletedDetails);
1013 scoped_ptr<FaviconChangedDetails> favicon_details(new FaviconChangedDetails); 992 scoped_ptr<std::set<GURL> > favicons(new std::set<GURL>);
1014 scoped_ptr<URLsModifiedDetails> modified(new URLsModifiedDetails); 993 scoped_ptr<URLsModifiedDetails> modified(new URLsModifiedDetails);
1015 URLRow old_url_row; 994 URLRow old_url_row;
1016 if (!history_db_->GetURLRow(ids[0].url_id, &old_url_row)) 995 if (!history_db_->GetURLRow(ids[0].url_id, &old_url_row))
1017 return false; 996 return false;
1018 deleted_details->rows.push_back(old_url_row); 997 deleted_details->rows.push_back(old_url_row);
1019 998
1020 favicon_base::FaviconID favicon_id = statement->statement()->ColumnInt64(4); 999 favicon_base::FaviconID favicon_id = statement->statement()->ColumnInt64(4);
1021 if (favicon_id) { 1000 if (favicon_id) {
1022 std::vector<FaviconBitmap> favicon_bitmaps; 1001 std::vector<FaviconBitmap> favicon_bitmaps;
1023 if (!thumbnail_db_ || 1002 if (!thumbnail_db_ ||
1024 !thumbnail_db_->GetFaviconBitmaps(favicon_id, &favicon_bitmaps)) 1003 !thumbnail_db_->GetFaviconBitmaps(favicon_id, &favicon_bitmaps))
1025 return false; 1004 return false;
1026 scoped_refptr<base::RefCountedMemory> bitmap_data = 1005 scoped_refptr<base::RefCountedMemory> bitmap_data =
1027 favicon_bitmaps[0].bitmap_data; 1006 favicon_bitmaps[0].bitmap_data;
1028 if (bitmap_data.get() && bitmap_data->size()) 1007 if (bitmap_data.get() && bitmap_data->size())
1029 new_row.set_favicon(bitmap_data); 1008 new_row.set_favicon(bitmap_data);
1030 favicon_details->urls.insert(old_url_row.url()); 1009 favicons->insert(old_url_row.url());
1031 favicon_details->urls.insert(row.url()); 1010 favicons->insert(row.url());
1032 } 1011 }
1033 new_row.set_is_bookmark(statement->statement()->ColumnBool(5)); 1012 new_row.set_is_bookmark(statement->statement()->ColumnBool(5));
1034 1013
1035 // The SQLHandler vector is not used here because the row in android_url 1014 // The SQLHandler vector is not used here because the row in android_url
1036 // shouldn't be deleted, we need keep the AndroidUIID unchanged, so it 1015 // shouldn't be deleted, we need keep the AndroidUIID unchanged, so it
1037 // appears update to the client. 1016 // appears update to the client.
1038 if (!urls_handler_->Delete(ids)) 1017 if (!urls_handler_->Delete(ids))
1039 return false; 1018 return false;
1040 1019
1041 if (!visit_handler_->Delete(ids)) 1020 if (!visit_handler_->Delete(ids))
(...skipping 10 matching lines...) Expand all
1052 if (row.is_value_set_explicitly(HistoryAndBookmarkRow::LAST_VISIT_TIME)) 1031 if (row.is_value_set_explicitly(HistoryAndBookmarkRow::LAST_VISIT_TIME))
1053 new_row.set_last_visit_time(row.last_visit_time()); 1032 new_row.set_last_visit_time(row.last_visit_time());
1054 if (row.is_value_set_explicitly(HistoryAndBookmarkRow::CREATED)) 1033 if (row.is_value_set_explicitly(HistoryAndBookmarkRow::CREATED))
1055 new_row.set_created(row.created()); 1034 new_row.set_created(row.created());
1056 if (row.is_value_set_explicitly(HistoryAndBookmarkRow::VISIT_COUNT)) 1035 if (row.is_value_set_explicitly(HistoryAndBookmarkRow::VISIT_COUNT))
1057 new_row.set_visit_count(row.visit_count()); 1036 new_row.set_visit_count(row.visit_count());
1058 if (row.is_value_set_explicitly(HistoryAndBookmarkRow::TITLE)) 1037 if (row.is_value_set_explicitly(HistoryAndBookmarkRow::TITLE))
1059 new_row.set_title(row.title()); 1038 new_row.set_title(row.title());
1060 if (row.is_value_set_explicitly(HistoryAndBookmarkRow::FAVICON)) { 1039 if (row.is_value_set_explicitly(HistoryAndBookmarkRow::FAVICON)) {
1061 new_row.set_favicon(row.favicon()); 1040 new_row.set_favicon(row.favicon());
1062 favicon_details->urls.insert(new_row.url()); 1041 favicons->insert(new_row.url());
1063 } 1042 }
1064 if (row.is_value_set_explicitly(HistoryAndBookmarkRow::BOOKMARK)) 1043 if (row.is_value_set_explicitly(HistoryAndBookmarkRow::BOOKMARK))
1065 new_row.set_is_bookmark(row.is_bookmark()); 1044 new_row.set_is_bookmark(row.is_bookmark());
1066 1045
1067 if (!urls_handler_->Insert(&new_row)) 1046 if (!urls_handler_->Insert(&new_row))
1068 return false; 1047 return false;
1069 1048
1070 if (!visit_handler_->Insert(&new_row)) 1049 if (!visit_handler_->Insert(&new_row))
1071 return false; 1050 return false;
1072 1051
1073 // Update the current row instead of inserting a new row in android urls 1052 // Update the current row instead of inserting a new row in android urls
1074 // table. We need keep the AndroidUIID unchanged, so it appears update 1053 // table. We need keep the AndroidUIID unchanged, so it appears update
1075 // to the client. 1054 // to the client.
1076 if (!android_urls_handler_->Update(new_row, ids)) 1055 if (!android_urls_handler_->Update(new_row, ids))
1077 return false; 1056 return false;
1078 1057
1079 if (favicon_handler_ && !favicon_handler_->Insert(&new_row)) 1058 if (favicon_handler_ && !favicon_handler_->Insert(&new_row))
1080 return false; 1059 return false;
1081 1060
1082 if (!bookmark_model_handler_->Insert(&new_row)) 1061 if (!bookmark_model_handler_->Insert(&new_row))
1083 return false; 1062 return false;
1084 1063
1085 URLRow new_url_row; 1064 URLRow new_url_row;
1086 if (!history_db_->GetURLRow(new_row.url_id(), &new_url_row)) 1065 if (!history_db_->GetURLRow(new_row.url_id(), &new_url_row))
1087 return false; 1066 return false;
1088 1067
1089 modified->changed_urls.push_back(new_url_row); 1068 modified->changed_urls.push_back(new_url_row);
1090 1069
1091 notifications->PushBack(chrome::NOTIFICATION_HISTORY_URLS_DELETED, 1070 scoped_ptr<HistoryDetails> details = deleted_details.PassAs<HistoryDetails>();
1092 deleted_details.PassAs<HistoryDetails>()); 1071 notifications->push_back(
1093 if (favicon_details && !favicon_details->urls.empty()) { 1072 base::Bind(&HistoryBackend::Delegate::BroadcastNotifications,
1094 notifications->PushBack(chrome::NOTIFICATION_FAVICON_CHANGED, 1073 base::Unretained(delegate_),
1095 favicon_details.PassAs<HistoryDetails>()); 1074 chrome::NOTIFICATION_HISTORY_URLS_DELETED,
1075 base::Passed(&details)));
1076 if (favicons && !favicons->empty()) {
1077 notifications->push_back(base::Bind(&RunNotifyFaviconChanged,
1078 base::Unretained(delegate_),
1079 base::Passed(&favicons)));
1096 } 1080 }
1097 notifications->PushBack(chrome::NOTIFICATION_HISTORY_URLS_MODIFIED, 1081 scoped_ptr<HistoryDetails> other_details = modified.PassAs<HistoryDetails>();
1098 modified.PassAs<HistoryDetails>()); 1082 notifications->push_back(
1083 base::Bind(&HistoryBackend::Delegate::BroadcastNotifications,
1084 base::Unretained(delegate_),
1085 chrome::NOTIFICATION_HISTORY_URLS_MODIFIED,
1086 base::Passed(&other_details)));
1099 1087
1100 return true; 1088 return true;
1101 } 1089 }
1102 1090
1103 AndroidStatement* AndroidProviderBackend::QueryHistoryAndBookmarksInternal( 1091 AndroidStatement* AndroidProviderBackend::QueryHistoryAndBookmarksInternal(
1104 const std::vector<HistoryAndBookmarkRow::ColumnID>& projections, 1092 const std::vector<HistoryAndBookmarkRow::ColumnID>& projections,
1105 const std::string& selection, 1093 const std::string& selection,
1106 const std::vector<base::string16>& selection_args, 1094 const std::vector<base::string16>& selection_args,
1107 const std::string& sort_order) { 1095 const std::string& sort_order) {
1108 std::string sql; 1096 std::string sql;
(...skipping 23 matching lines...) Expand all
1132 } 1120 }
1133 sql::Statement* result = statement.release(); 1121 sql::Statement* result = statement.release();
1134 return new AndroidStatement(result, replaced_index); 1122 return new AndroidStatement(result, replaced_index);
1135 } 1123 }
1136 1124
1137 bool AndroidProviderBackend::DeleteHistoryInternal( 1125 bool AndroidProviderBackend::DeleteHistoryInternal(
1138 const TableIDRows& urls, 1126 const TableIDRows& urls,
1139 bool delete_bookmarks, 1127 bool delete_bookmarks,
1140 HistoryNotifications* notifications) { 1128 HistoryNotifications* notifications) {
1141 scoped_ptr<URLsDeletedDetails> deleted_details(new URLsDeletedDetails); 1129 scoped_ptr<URLsDeletedDetails> deleted_details(new URLsDeletedDetails);
1142 scoped_ptr<FaviconChangedDetails> favicon(new FaviconChangedDetails); 1130 scoped_ptr<std::set<GURL> > favicon(new std::set<GURL>);
1143 for (TableIDRows::const_iterator i = urls.begin(); i != urls.end(); ++i) { 1131 for (TableIDRows::const_iterator i = urls.begin(); i != urls.end(); ++i) {
1144 URLRow url_row; 1132 URLRow url_row;
1145 if (!history_db_->GetURLRow(i->url_id, &url_row)) 1133 if (!history_db_->GetURLRow(i->url_id, &url_row))
1146 return false; 1134 return false;
1147 deleted_details->rows.push_back(url_row); 1135 deleted_details->rows.push_back(url_row);
1148 if (thumbnail_db_ && 1136 if (thumbnail_db_ &&
1149 thumbnail_db_->GetIconMappingsForPageURL(url_row.url(), NULL)) 1137 thumbnail_db_->GetIconMappingsForPageURL(url_row.url(), NULL))
1150 favicon->urls.insert(url_row.url()); 1138 favicon->insert(url_row.url());
1151 } 1139 }
1152 1140
1153 // Only invoke Delete on the BookmarkModelHandler if we need 1141 // Only invoke Delete on the BookmarkModelHandler if we need
1154 // to delete bookmarks. 1142 // to delete bookmarks.
1155 for (std::vector<SQLHandler*>::iterator i = 1143 for (std::vector<SQLHandler*>::iterator i =
1156 sql_handlers_.begin(); i != sql_handlers_.end(); ++i) { 1144 sql_handlers_.begin(); i != sql_handlers_.end(); ++i) {
1157 if ((*i) != bookmark_model_handler_.get() || delete_bookmarks) 1145 if ((*i) != bookmark_model_handler_.get() || delete_bookmarks)
1158 if (!(*i)->Delete(urls)) 1146 if (!(*i)->Delete(urls))
1159 return false; 1147 return false;
1160 } 1148 }
1161 1149
1162 notifications->PushBack(chrome::NOTIFICATION_HISTORY_URLS_DELETED, 1150 scoped_ptr<HistoryDetails> details = deleted_details.PassAs<HistoryDetails>();
1163 deleted_details.PassAs<HistoryDetails>()); 1151 notifications->push_back(
1164 if (favicon && !favicon->urls.empty()) { 1152 base::Bind(&HistoryBackend::Delegate::BroadcastNotifications,
1165 notifications->PushBack(chrome::NOTIFICATION_FAVICON_CHANGED, 1153 base::Unretained(delegate_),
1166 favicon.PassAs<HistoryDetails>()); 1154 chrome::NOTIFICATION_HISTORY_URLS_DELETED,
1155 base::Passed(&details)));
1156 if (favicon && !favicon->empty()) {
1157 notifications->push_back(base::Bind(&RunNotifyFaviconChanged,
1158 base::Unretained(delegate_),
1159 base::Passed(&favicon)));
1167 } 1160 }
1168 return true; 1161 return true;
1169 } 1162 }
1170 1163
1171 void AndroidProviderBackend::BroadcastNotifications( 1164 void AndroidProviderBackend::BroadcastNotifications(
1172 HistoryNotifications* notifications) { 1165 HistoryNotifications* notifications) {
1173 while (!notifications->empty()) { 1166 while (!notifications->empty()) {
1174 delegate_->BroadcastNotifications(notifications->PopBackType(), 1167 notifications->back().Run();
1175 notifications->PopBackDetails()); 1168 notifications->pop_back();
1176 } 1169 }
1177 } 1170 }
1178 1171
1179 bool AndroidProviderBackend::AddSearchTerm(const SearchRow& values) { 1172 bool AndroidProviderBackend::AddSearchTerm(const SearchRow& values) {
1180 DCHECK(values.is_value_set_explicitly(SearchRow::SEARCH_TERM)); 1173 DCHECK(values.is_value_set_explicitly(SearchRow::SEARCH_TERM));
1181 DCHECK(values.is_value_set_explicitly(SearchRow::KEYWORD_ID)); 1174 DCHECK(values.is_value_set_explicitly(SearchRow::KEYWORD_ID));
1182 DCHECK(values.is_value_set_explicitly(SearchRow::URL)); 1175 DCHECK(values.is_value_set_explicitly(SearchRow::URL));
1183 1176
1184 URLRow url_row; 1177 URLRow url_row;
1185 HistoryAndBookmarkRow bookmark_row; 1178 HistoryAndBookmarkRow bookmark_row;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1221 return false; 1214 return false;
1222 1215
1223 if (!history_db_->SetKeywordSearchTermsForURL(bookmark_row.url_id(), 1216 if (!history_db_->SetKeywordSearchTermsForURL(bookmark_row.url_id(),
1224 values.keyword_id(), values.search_term())) 1217 values.keyword_id(), values.search_term()))
1225 return false; 1218 return false;
1226 } 1219 }
1227 return true; 1220 return true;
1228 } 1221 }
1229 1222
1230 } // namespace history 1223 } // namespace history
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698