| Index: components/history/core/browser/history_backend.cc
|
| diff --git a/components/history/core/browser/history_backend.cc b/components/history/core/browser/history_backend.cc
|
| index faf00c6db8293356065862bd9fdc5e72a72ba4c8..2194c27d3cadc06573fd05ce6d0f716588563335 100644
|
| --- a/components/history/core/browser/history_backend.cc
|
| +++ b/components/history/core/browser/history_backend.cc
|
| @@ -891,6 +891,58 @@ void HistoryBackend::SetPageTitle(const GURL& url,
|
| }
|
| }
|
|
|
| +void HistoryBackend::SetPageHistoryContext(const GURL& url,
|
| + HistoryContext context) {
|
| + if (!db_)
|
| + return;
|
| +
|
| + // Search for recent redirects which should get the same title. We make a
|
| + // dummy list containing the exact URL visited if there are no redirects so
|
| + // the processing below can be the same.
|
| + RedirectList dummy_list;
|
| + RedirectList* redirects;
|
| + RedirectCache::iterator iter = recent_redirects_.Get(url);
|
| + if (iter != recent_redirects_.end()) {
|
| + redirects = &iter->second;
|
| +
|
| + // This redirect chain should have the destination URL as the last item.
|
| + DCHECK(!redirects->empty());
|
| + DCHECK(redirects->back() == url);
|
| + } else {
|
| + // No redirect chain stored, make up one containing the URL we want so we
|
| + // can use the same logic below.
|
| + dummy_list.push_back(url);
|
| + redirects = &dummy_list;
|
| + }
|
| +
|
| + URLRows changed_urls;
|
| + for (size_t i = 0; i < redirects->size(); i++) {
|
| + URLRow row;
|
| + URLID row_id = db_->GetRowForURL(redirects->at(i), &row);
|
| + VisitID cur_visit = db_->GetMostRecentVisitForURL(row_id, nullptr);
|
| + if (row_id && row.context() != context) {
|
| + row.set_context(context);
|
| +
|
| + VisitRow visit_row;
|
| + if (db_->GetRowForVisit(cur_visit, &visit_row)) {
|
| + visit_row.context = context;
|
| + db_->UpdateVisitRow(visit_row);
|
| + printf("\n1 HistoryBackend::SetPageHistoryContext %d\n", static_cast<int>(context));
|
| + }
|
| + db_->UpdateURLRow(row_id, row);
|
| + printf("\n2 HistoryBackend::SetPageHistoryContext %d\n", static_cast<int>(context));
|
| + changed_urls.push_back(row);
|
| + }
|
| + }
|
| +
|
| + // Broadcast notifications for any URLs that have changed. This will
|
| + // update the in-memory database and the InMemoryURLIndex.
|
| + if (!changed_urls.empty()) {
|
| + NotifyURLsModified(changed_urls);
|
| + ScheduleCommit();
|
| + }
|
| +}
|
| +
|
| void HistoryBackend::AddPageNoVisitForBookmark(const GURL& url,
|
| const base::string16& title) {
|
| if (!db_)
|
|
|