Chromium Code Reviews| 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 "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 Loading... | |
| 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) { | |
|
brettw
2014/09/02 23:23:10
Put space in >> (still no C++11 in codebase). Same
sdefresne
2014/09/03 10:00:01
Done.
| |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |