#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
#include "chrome/browser/autocomplete/history_url_provider.h"
-#include "chrome/browser/bookmarks/bookmark_service.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/favicon/favicon_changed_details.h"
#include "chrome/browser/history/download_row.h"
#include "chrome/browser/history/history_notifications.h"
#include "chrome/browser/history/in_memory_history_backend.h"
#include "chrome/browser/history/page_usage_data.h"
-#include "chrome/browser/history/select_favicon_frames.h"
#include "chrome/browser/history/top_sites.h"
#include "chrome/browser/history/typed_url_syncable_service.h"
#include "chrome/browser/history/visit_filter.h"
#include "chrome/common/chrome_constants.h"
#include "chrome/common/importer/imported_favicon_usage.h"
#include "chrome/common/url_constants.h"
+#include "components/bookmarks/core/browser/bookmark_service.h"
+#include "components/favicon_base/select_favicon_frames.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
!is_keyword_generated) {
const GURL& origin_url(has_redirects ?
request.redirects[0] : request.url);
- if (origin_url.SchemeIs(content::kHttpScheme) ||
- origin_url.SchemeIs(content::kHttpsScheme) ||
+ if (origin_url.SchemeIs(url::kHttpScheme) ||
+ origin_url.SchemeIs(url::kHttpsScheme) ||
origin_url.SchemeIs(content::kFtpScheme)) {
std::string host(origin_url.host());
size_t registry_length =
return;
scoped_ptr<URLsModifiedDetails> modified(new URLsModifiedDetails);
+ scoped_ptr<URLsModifiedDetails> modified_in_archive(new URLsModifiedDetails);
for (URLRows::const_iterator i = urls.begin(); i != urls.end(); ++i) {
DCHECK(!i->last_visit().is_null());
// We will add to either the archived database or the main one depending on
// the date of the added visit.
- URLDatabase* url_database;
- VisitDatabase* visit_database;
+ URLDatabase* url_database = NULL;
+ VisitDatabase* visit_database = NULL;
if (IsExpiredVisitTime(i->last_visit())) {
if (!archived_db_)
return; // No archived database to save it to, just forget this.
}
if (i->typed_count() > 0) {
- modified->changed_urls.push_back(*i);
- modified->changed_urls.back().set_id(url_id); // *i likely has |id_| 0.
+ // Collect expired URLs that belong to |archived_db_| separately; we
+ // want to fire NOTIFICATION_HISTORY_URLS_MODIFIED only for changes that
+ // take place in the main |db_|.
+ if (url_database == db_.get()) {
+ modified->changed_urls.push_back(*i);
+ modified->changed_urls.back().set_id(url_id); // i->id_ is likely 0.
+ } else {
+ modified_in_archive->changed_urls.push_back(*i);
+ modified_in_archive->changed_urls.back().set_id(url_id);
+ }
}
}
}
}
- if (typed_url_syncable_service_.get())
+ if (typed_url_syncable_service_.get()) {
+ typed_url_syncable_service_->OnUrlsModified(
+ &modified_in_archive->changed_urls);
typed_url_syncable_service_->OnUrlsModified(&modified->changed_urls);
+ }
// Broadcast a notification for typed URLs that have been modified. This
// will be picked up by the in-memory URL database on the main thread.
return;
// Get the ID for this URL.
- URLID url_id = db_->GetRowForURL(url, NULL);
- if (!url_id) {
+ URLRow row;
+ if (!db_->GetRowForURL(url, &row)) {
// There is a small possibility the url was deleted before the keyword
// was added. Ignore the request.
return;
}
- db_->SetKeywordSearchTermsForURL(url_id, keyword_id, term);
+ db_->SetKeywordSearchTermsForURL(row.id(), keyword_id, term);
BroadcastNotifications(
chrome::NOTIFICATION_HISTORY_KEYWORD_SEARCH_TERM_UPDATED,
scoped_ptr<HistoryDetails>(
- new KeywordSearchUpdatedDetails(url, keyword_id, term)));
+ new KeywordSearchUpdatedDetails(row, keyword_id, term)));
ScheduleCommit();
}
BroadcastNotifications(
chrome::NOTIFICATION_HISTORY_KEYWORD_SEARCH_TERM_DELETED,
- scoped_ptr<HistoryDetails>(new KeywordSearchDeletedDetails(url)));
+ scoped_ptr<HistoryDetails>(new KeywordSearchDeletedDetails(url_id)));
ScheduleCommit();
}
int icon_types,
int desired_size_in_dip,
const std::vector<ui::ScaleFactor>& desired_scale_factors,
- std::vector<chrome::FaviconBitmapResult>* bitmap_results) {
+ std::vector<favicon_base::FaviconBitmapResult>* bitmap_results) {
UpdateFaviconMappingsAndFetchImpl(NULL, icon_urls, icon_types,
desired_size_in_dip, desired_scale_factors,
bitmap_results);
}
void HistoryBackend::GetLargestFaviconForURL(
- const GURL& page_url,
- const std::vector<int>& icon_types,
- int minimum_size_in_pixels,
- chrome::FaviconBitmapResult* favicon_bitmap_result) {
+ const GURL& page_url,
+ const std::vector<int>& icon_types,
+ int minimum_size_in_pixels,
+ favicon_base::FaviconBitmapResult* favicon_bitmap_result) {
DCHECK(favicon_bitmap_result);
if (!db_ || !thumbnail_db_)
// Find the largest bitmap for each IconType placing in
// |largest_favicon_bitmaps|.
- std::map<chrome::IconType, FaviconBitmap> largest_favicon_bitmaps;
+ std::map<favicon_base::IconType, FaviconBitmap> largest_favicon_bitmaps;
for (std::vector<IconMapping>::const_iterator i = icon_mappings.begin();
i != icon_mappings.end(); ++i) {
if (!(i->icon_type & required_icon_types))
FaviconBitmap largest_icon;
for (std::vector<int>::const_iterator t = icon_types.begin();
t != icon_types.end(); ++t) {
- for (std::map<chrome::IconType, FaviconBitmap>::const_iterator f =
- largest_favicon_bitmaps.begin(); f != largest_favicon_bitmaps.end();
- ++f) {
+ for (std::map<favicon_base::IconType, FaviconBitmap>::const_iterator f =
+ largest_favicon_bitmaps.begin();
+ f != largest_favicon_bitmaps.end();
+ ++f) {
if (f->first & *t &&
(largest_icon.bitmap_id == 0 ||
(largest_icon.pixel_size.height() < f->second.pixel_size.height() &&
}
GURL icon_url;
- chrome::IconType icon_type;
+ favicon_base::IconType icon_type;
if (!thumbnail_db_->GetFaviconHeader(largest_icon.icon_id, &icon_url,
&icon_type)) {
return;
}
base::Time last_updated;
- chrome::FaviconBitmapResult bitmap_result;
+ favicon_base::FaviconBitmapResult bitmap_result;
bitmap_result.icon_url = icon_url;
bitmap_result.icon_type = icon_type;
if (!thumbnail_db_->GetFaviconBitmap(largest_icon.bitmap_id,
int icon_types,
int desired_size_in_dip,
const std::vector<ui::ScaleFactor>& desired_scale_factors,
- std::vector<chrome::FaviconBitmapResult>* bitmap_results) {
+ std::vector<favicon_base::FaviconBitmapResult>* bitmap_results) {
DCHECK(bitmap_results);
GetFaviconsFromDB(page_url, icon_types, desired_size_in_dip,
desired_scale_factors, bitmap_results);
}
void HistoryBackend::GetFaviconForID(
- chrome::FaviconID favicon_id,
+ favicon_base::FaviconID favicon_id,
int desired_size_in_dip,
ui::ScaleFactor desired_scale_factor,
- std::vector<chrome::FaviconBitmapResult>* bitmap_results) {
- std::vector<chrome::FaviconID> favicon_ids;
+ std::vector<favicon_base::FaviconBitmapResult>* bitmap_results) {
+ std::vector<favicon_base::FaviconID> favicon_ids;
favicon_ids.push_back(favicon_id);
std::vector<ui::ScaleFactor> desired_scale_factors;
desired_scale_factors.push_back(desired_scale_factor);
int icon_types,
int desired_size_in_dip,
const std::vector<ui::ScaleFactor>& desired_scale_factors,
- std::vector<chrome::FaviconBitmapResult>* bitmap_results) {
+ std::vector<favicon_base::FaviconBitmapResult>* bitmap_results) {
UpdateFaviconMappingsAndFetchImpl(&page_url, icon_urls, icon_types,
desired_size_in_dip, desired_scale_factors,
bitmap_results);
void HistoryBackend::MergeFavicon(
const GURL& page_url,
const GURL& icon_url,
- chrome::IconType icon_type,
+ favicon_base::IconType icon_type,
scoped_refptr<base::RefCountedMemory> bitmap_data,
const gfx::Size& pixel_size) {
if (!thumbnail_db_ || !db_)
return;
- chrome::FaviconID favicon_id =
+ favicon_base::FaviconID favicon_id =
thumbnail_db_->GetFaviconIDForFaviconURL(icon_url, icon_type, NULL);
if (!favicon_id) {
// |page_url|.
bool mapping_changed = false;
if (icon_mappings.size() != 1 || icon_mappings[0].icon_url != icon_url) {
- std::vector<chrome::FaviconID> favicon_ids;
+ std::vector<favicon_base::FaviconID> favicon_ids;
favicon_ids.push_back(favicon_id);
SetFaviconMappingsForPageAndRedirects(page_url, icon_type, favicon_ids);
mapping_changed = true;
void HistoryBackend::SetFavicons(
const GURL& page_url,
- chrome::IconType icon_type,
- const std::vector<chrome::FaviconBitmapData>& favicon_bitmap_data) {
+ favicon_base::IconType icon_type,
+ const std::vector<favicon_base::FaviconBitmapData>& favicon_bitmap_data) {
if (!thumbnail_db_ || !db_)
return;
DCHECK(ValidateSetFaviconsParams(favicon_bitmap_data));
// Build map of FaviconBitmapData for each icon url.
- typedef std::map<GURL, std::vector<chrome::FaviconBitmapData> >
+ typedef std::map<GURL, std::vector<favicon_base::FaviconBitmapData> >
BitmapDataByIconURL;
BitmapDataByIconURL grouped_by_icon_url;
for (size_t i = 0; i < favicon_bitmap_data.size(); ++i) {
// or icon mappings.
bool data_modified = false;
- std::vector<chrome::FaviconID> icon_ids;
+ std::vector<favicon_base::FaviconID> icon_ids;
for (BitmapDataByIconURL::const_iterator it = grouped_by_icon_url.begin();
it != grouped_by_icon_url.end(); ++it) {
const GURL& icon_url = it->first;
- chrome::FaviconID icon_id =
+ favicon_base::FaviconID icon_id =
thumbnail_db_->GetFaviconIDForFaviconURL(icon_url, icon_type, NULL);
if (!icon_id) {
std::set<GURL> favicons_changed;
for (size_t i = 0; i < favicon_usage.size(); i++) {
- chrome::FaviconID favicon_id = thumbnail_db_->GetFaviconIDForFaviconURL(
- favicon_usage[i].favicon_url, chrome::FAVICON, NULL);
+ favicon_base::FaviconID favicon_id =
+ thumbnail_db_->GetFaviconIDForFaviconURL(
+ favicon_usage[i].favicon_url, favicon_base::FAVICON, NULL);
if (!favicon_id) {
// This favicon doesn't exist yet, so we create it using the given data.
// TODO(pkotwicz): Pass in real pixel size.
favicon_id = thumbnail_db_->AddFavicon(
favicon_usage[i].favicon_url,
- chrome::FAVICON,
+ favicon_base::FAVICON,
new base::RefCountedBytes(favicon_usage[i].png_data),
now,
gfx::Size());
}
} else {
if (!thumbnail_db_->GetIconMappingsForPageURL(
- *url, chrome::FAVICON, NULL)) {
+ *url, favicon_base::FAVICON, NULL)) {
// URL is present in history, update the favicon *only* if it is not
// set already.
thumbnail_db_->AddIconMapping(*url, favicon_id);
int icon_types,
int desired_size_in_dip,
const std::vector<ui::ScaleFactor>& desired_scale_factors,
- std::vector<chrome::FaviconBitmapResult>* bitmap_results) {
+ std::vector<favicon_base::FaviconBitmapResult>* bitmap_results) {
// If |page_url| is specified, |icon_types| must be either a single icon
// type or icon types which are equivalent.
- DCHECK(!page_url ||
- icon_types == chrome::FAVICON ||
- icon_types == chrome::TOUCH_ICON ||
- icon_types == chrome::TOUCH_PRECOMPOSED_ICON ||
- icon_types == (chrome::TOUCH_ICON | chrome::TOUCH_PRECOMPOSED_ICON));
+ DCHECK(!page_url || icon_types == favicon_base::FAVICON ||
+ icon_types == favicon_base::TOUCH_ICON ||
+ icon_types == favicon_base::TOUCH_PRECOMPOSED_ICON ||
+ icon_types ==
+ (favicon_base::TOUCH_ICON | favicon_base::TOUCH_PRECOMPOSED_ICON));
bitmap_results->clear();
if (!thumbnail_db_) {
return;
}
- std::vector<chrome::FaviconID> favicon_ids;
+ std::vector<favicon_base::FaviconID> favicon_ids;
// The icon type for which the mappings will the updated and data will be
// returned.
- chrome::IconType selected_icon_type = chrome::INVALID_ICON;
+ favicon_base::IconType selected_icon_type = favicon_base::INVALID_ICON;
for (size_t i = 0; i < icon_urls.size(); ++i) {
const GURL& icon_url = icon_urls[i];
- chrome::IconType icon_type_out;
- const chrome::FaviconID favicon_id =
+ favicon_base::IconType icon_type_out;
+ const favicon_base::FaviconID favicon_id =
thumbnail_db_->GetFaviconIDForFaviconURL(
icon_url, icon_types, &icon_type_out);
}
void HistoryBackend::SetFaviconBitmaps(
- chrome::FaviconID icon_id,
- const std::vector<chrome::FaviconBitmapData>& favicon_bitmap_data,
+ favicon_base::FaviconID icon_id,
+ const std::vector<favicon_base::FaviconBitmapData>& favicon_bitmap_data,
bool* favicon_bitmaps_changed) {
if (favicon_bitmaps_changed)
*favicon_bitmaps_changed = false;
std::vector<FaviconBitmapIDSize> bitmap_id_sizes;
thumbnail_db_->GetFaviconBitmapIDSizes(icon_id, &bitmap_id_sizes);
- std::vector<chrome::FaviconBitmapData> to_add = favicon_bitmap_data;
+ std::vector<favicon_base::FaviconBitmapData> to_add = favicon_bitmap_data;
for (size_t i = 0; i < bitmap_id_sizes.size(); ++i) {
const gfx::Size& pixel_size = bitmap_id_sizes[i].pixel_size;
- std::vector<chrome::FaviconBitmapData>::iterator match_it = to_add.end();
- for (std::vector<chrome::FaviconBitmapData>::iterator it = to_add.begin();
- it != to_add.end(); ++it) {
+ std::vector<favicon_base::FaviconBitmapData>::iterator match_it =
+ to_add.end();
+ for (std::vector<favicon_base::FaviconBitmapData>::iterator it =
+ to_add.begin();
+ it != to_add.end();
+ ++it) {
if (it->pixel_size == pixel_size) {
match_it = it;
break;
}
}
-bool HistoryBackend::ValidateSetFaviconsParams(
- const std::vector<chrome::FaviconBitmapData>& favicon_bitmap_data) const {
+bool HistoryBackend::ValidateSetFaviconsParams(const std::vector<
+ favicon_base::FaviconBitmapData>& favicon_bitmap_data) const {
typedef std::map<GURL, size_t> BitmapsPerIconURL;
BitmapsPerIconURL num_bitmaps_per_icon_url;
for (size_t i = 0; i < favicon_bitmap_data.size(); ++i) {
int icon_types,
int desired_size_in_dip,
const std::vector<ui::ScaleFactor>& desired_scale_factors,
- std::vector<chrome::FaviconBitmapResult>* favicon_bitmap_results) {
+ std::vector<favicon_base::FaviconBitmapResult>* favicon_bitmap_results) {
DCHECK(favicon_bitmap_results);
favicon_bitmap_results->clear();
std::vector<IconMapping> icon_mappings;
thumbnail_db_->GetIconMappingsForPageURL(page_url, icon_types,
&icon_mappings);
- std::vector<chrome::FaviconID> favicon_ids;
+ std::vector<favicon_base::FaviconID> favicon_ids;
for (size_t i = 0; i < icon_mappings.size(); ++i)
favicon_ids.push_back(icon_mappings[i].icon_id);
}
bool HistoryBackend::GetFaviconBitmapResultsForBestMatch(
- const std::vector<chrome::FaviconID>& candidate_favicon_ids,
+ const std::vector<favicon_base::FaviconID>& candidate_favicon_ids,
int desired_size_in_dip,
const std::vector<ui::ScaleFactor>& desired_scale_factors,
- std::vector<chrome::FaviconBitmapResult>* favicon_bitmap_results) {
+ std::vector<favicon_base::FaviconBitmapResult>* favicon_bitmap_results) {
favicon_bitmap_results->clear();
if (candidate_favicon_ids.empty())
// |desired_size_in_dip| and |desired_scale_factors|.
// TODO(pkotwicz): Select bitmap results from multiple favicons once
// content::FaviconStatus supports multiple icon URLs.
- chrome::FaviconID best_favicon_id = 0;
+ favicon_base::FaviconID best_favicon_id = 0;
std::vector<FaviconBitmapID> best_bitmap_ids;
float highest_score = kSelectFaviconFramesInvalidScore;
for (size_t i = 0; i < candidate_favicon_ids.size(); ++i) {
// Construct FaviconBitmapResults from |best_favicon_id| and
// |best_bitmap_ids|.
GURL icon_url;
- chrome::IconType icon_type;
+ favicon_base::IconType icon_type;
if (!thumbnail_db_->GetFaviconHeader(best_favicon_id, &icon_url,
&icon_type)) {
return false;
for (size_t i = 0; i < best_bitmap_ids.size(); ++i) {
base::Time last_updated;
- chrome::FaviconBitmapResult bitmap_result;
+ favicon_base::FaviconBitmapResult bitmap_result;
bitmap_result.icon_url = icon_url;
bitmap_result.icon_type = icon_type;
if (!thumbnail_db_->GetFaviconBitmap(best_bitmap_ids[i],
bool HistoryBackend::SetFaviconMappingsForPageAndRedirects(
const GURL& page_url,
- chrome::IconType icon_type,
- const std::vector<chrome::FaviconID>& icon_ids) {
+ favicon_base::IconType icon_type,
+ const std::vector<favicon_base::FaviconID>& icon_ids) {
if (!thumbnail_db_)
return false;
bool HistoryBackend::SetFaviconMappingsForPage(
const GURL& page_url,
- chrome::IconType icon_type,
- const std::vector<chrome::FaviconID>& icon_ids) {
+ favicon_base::IconType icon_type,
+ const std::vector<favicon_base::FaviconID>& icon_ids) {
DCHECK_LE(icon_ids.size(), kMaxFaviconsPerPage);
bool mappings_changed = false;
// Remove any favicons which are orphaned as a result of the removal of the
// icon mappings.
- std::vector<chrome::FaviconID> unmapped_icon_ids = icon_ids;
+ std::vector<favicon_base::FaviconID> unmapped_icon_ids = icon_ids;
std::vector<IconMapping> icon_mappings;
thumbnail_db_->GetIconMappingsForPageURL(page_url, &icon_mappings);
for (std::vector<IconMapping>::iterator m = icon_mappings.begin();
m != icon_mappings.end(); ++m) {
- std::vector<chrome::FaviconID>::iterator icon_id_it = std::find(
+ std::vector<favicon_base::FaviconID>::iterator icon_id_it = std::find(
unmapped_icon_ids.begin(), unmapped_icon_ids.end(), m->icon_id);
// If the icon mapping already exists, avoid removing it and adding it back.
continue;
}
- if ((icon_type == chrome::TOUCH_ICON &&
- m->icon_type == chrome::TOUCH_PRECOMPOSED_ICON) ||
- (icon_type == chrome::TOUCH_PRECOMPOSED_ICON &&
- m->icon_type == chrome::TOUCH_ICON) || (icon_type == m->icon_type)) {
+ if ((icon_type == favicon_base::TOUCH_ICON &&
+ m->icon_type == favicon_base::TOUCH_PRECOMPOSED_ICON) ||
+ (icon_type == favicon_base::TOUCH_PRECOMPOSED_ICON &&
+ m->icon_type == favicon_base::TOUCH_ICON) ||
+ (icon_type == m->icon_type)) {
thumbnail_db_->DeleteIconMapping(m->mapping_id);
// Removing the icon mapping may have orphaned the associated favicon so
delegate_->BroadcastNotifications(type, details.Pass());
}
+void HistoryBackend::NotifySyncURLsModified(URLRows* rows) {
+ if (typed_url_syncable_service_.get())
+ typed_url_syncable_service_->OnUrlsModified(rows);
+}
+
void HistoryBackend::NotifySyncURLsDeleted(bool all_history,
bool archived,
URLRows* rows) {