| 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 // The history system runs on a background thread so that potentially slow | 5 // The history system runs on a background thread so that potentially slow |
| 6 // database operations don't delay the browser. This backend processing is | 6 // database operations don't delay the browser. This backend processing is |
| 7 // represented by HistoryBackend. The HistoryService's job is to dispatch to | 7 // represented by HistoryBackend. The HistoryService's job is to dispatch to |
| 8 // that thread. | 8 // that thread. |
| 9 // | 9 // |
| 10 // Main thread History thread | 10 // Main thread History thread |
| (...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 337 consumer, new history::QuerySegmentUsageRequest(callback), | 337 consumer, new history::QuerySegmentUsageRequest(callback), |
| 338 from_time, max_result_count); | 338 from_time, max_result_count); |
| 339 } | 339 } |
| 340 | 340 |
| 341 void HistoryService::SetOnBackendDestroyTask(const base::Closure& task) { | 341 void HistoryService::SetOnBackendDestroyTask(const base::Closure& task) { |
| 342 ScheduleAndForget(PRIORITY_NORMAL, &HistoryBackend::SetOnBackendDestroyTask, | 342 ScheduleAndForget(PRIORITY_NORMAL, &HistoryBackend::SetOnBackendDestroyTask, |
| 343 MessageLoop::current(), task); | 343 MessageLoop::current(), task); |
| 344 } | 344 } |
| 345 | 345 |
| 346 void HistoryService::AddPage(const GURL& url, | 346 void HistoryService::AddPage(const GURL& url, |
| 347 const void* id_scope, | |
| 348 int32 page_id, | |
| 349 const GURL& referrer, | |
| 350 content::PageTransition transition, | |
| 351 const history::RedirectList& redirects, | |
| 352 history::VisitSource visit_source, | |
| 353 bool did_replace_entry) { | |
| 354 AddPage(url, Time::Now(), id_scope, page_id, referrer, transition, redirects, | |
| 355 visit_source, did_replace_entry); | |
| 356 } | |
| 357 | |
| 358 void HistoryService::AddPage(const GURL& url, | |
| 359 Time time, | 347 Time time, |
| 360 const void* id_scope, | 348 const void* id_scope, |
| 361 int32 page_id, | 349 int32 page_id, |
| 362 const GURL& referrer, | 350 const GURL& referrer, |
| 351 const history::RedirectList& redirects, |
| 363 content::PageTransition transition, | 352 content::PageTransition transition, |
| 364 const history::RedirectList& redirects, | |
| 365 history::VisitSource visit_source, | 353 history::VisitSource visit_source, |
| 366 bool did_replace_entry) { | 354 bool did_replace_entry) { |
| 367 scoped_refptr<history::HistoryAddPageArgs> request( | 355 AddPage( |
| 368 new history::HistoryAddPageArgs(url, time, id_scope, page_id, referrer, | 356 history::HistoryAddPageArgs(url, time, id_scope, page_id, referrer, |
| 369 redirects, transition, visit_source, | 357 redirects, transition, visit_source, |
| 370 did_replace_entry)); | 358 did_replace_entry)); |
| 371 AddPage(*request); | 359 } |
| 360 |
| 361 void HistoryService::AddPage(const GURL& url, |
| 362 base::Time time, |
| 363 history::VisitSource visit_source) { |
| 364 AddPage( |
| 365 history::HistoryAddPageArgs(url, time, NULL, 0, GURL(), |
| 366 history::RedirectList(), |
| 367 content::PAGE_TRANSITION_LINK, |
| 368 visit_source, false)); |
| 372 } | 369 } |
| 373 | 370 |
| 374 void HistoryService::AddPage(const history::HistoryAddPageArgs& add_page_args) { | 371 void HistoryService::AddPage(const history::HistoryAddPageArgs& add_page_args) { |
| 375 DCHECK(thread_) << "History service being called after cleanup"; | 372 DCHECK(thread_) << "History service being called after cleanup"; |
| 376 | 373 |
| 377 // Filter out unwanted URLs. We don't add auto-subframe URLs. They are a | 374 // Filter out unwanted URLs. We don't add auto-subframe URLs. They are a |
| 378 // large part of history (think iframes for ads) and we never display them in | 375 // large part of history (think iframes for ads) and we never display them in |
| 379 // history UI. We will still add manual subframes, which are ones the user | 376 // history UI. We will still add manual subframes, which are ones the user |
| 380 // has clicked on to get. | 377 // has clicked on to get. |
| 381 if (!CanAddURL(add_page_args.url)) | 378 if (!CanAddURL(add_page_args.url)) |
| 382 return; | 379 return; |
| 383 | 380 |
| 384 // Add link & all redirects to visited link list. | 381 // Add link & all redirects to visited link list. |
| 385 VisitedLinkMaster* visited_links; | 382 VisitedLinkMaster* visited_links; |
| 386 if (profile_ && (visited_links = profile_->GetVisitedLinkMaster())) { | 383 if (profile_ && (visited_links = profile_->GetVisitedLinkMaster())) { |
| 387 visited_links->AddURL(add_page_args.url); | 384 visited_links->AddURL(add_page_args.url); |
| 388 | 385 |
| 389 if (!add_page_args.redirects.empty()) { | 386 if (!add_page_args.redirects.empty()) { |
| 390 // We should not be asked to add a page in the middle of a redirect chain. | 387 // We should not be asked to add a page in the middle of a redirect chain. |
| 391 DCHECK_EQ(add_page_args.url, | 388 DCHECK_EQ(add_page_args.url, |
| 392 add_page_args.redirects[add_page_args.redirects.size() - 1]); | 389 add_page_args.redirects[add_page_args.redirects.size() - 1]); |
| 393 | 390 |
| 394 // We need the !redirects.empty() condition above since size_t is unsigned | 391 // We need the !redirects.empty() condition above since size_t is unsigned |
| 395 // and will wrap around when we subtract one from a 0 size. | 392 // and will wrap around when we subtract one from a 0 size. |
| 396 for (size_t i = 0; i < add_page_args.redirects.size() - 1; i++) | 393 for (size_t i = 0; i < add_page_args.redirects.size() - 1; i++) |
| 397 visited_links->AddURL(add_page_args.redirects[i]); | 394 visited_links->AddURL(add_page_args.redirects[i]); |
| 398 } | 395 } |
| 399 } | 396 } |
| 400 | 397 |
| 401 ScheduleAndForget(PRIORITY_NORMAL, &HistoryBackend::AddPage, | 398 ScheduleAndForget(PRIORITY_NORMAL, &HistoryBackend::AddPage, add_page_args); |
| 402 scoped_refptr<history::HistoryAddPageArgs>( | |
| 403 add_page_args.Clone())); | |
| 404 } | 399 } |
| 405 | 400 |
| 406 void HistoryService::AddPageNoVisitForBookmark(const GURL& url, | 401 void HistoryService::AddPageNoVisitForBookmark(const GURL& url, |
| 407 const string16& title) { | 402 const string16& title) { |
| 408 if (!CanAddURL(url)) | 403 if (!CanAddURL(url)) |
| 409 return; | 404 return; |
| 410 | 405 |
| 411 ScheduleAndForget(PRIORITY_NORMAL, | 406 ScheduleAndForget(PRIORITY_NORMAL, |
| 412 &HistoryBackend::AddPageNoVisitForBookmark, url, title); | 407 &HistoryBackend::AddPageNoVisitForBookmark, url, title); |
| 413 } | 408 } |
| (...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 955 void HistoryService::RemoveVisitDatabaseObserver( | 950 void HistoryService::RemoveVisitDatabaseObserver( |
| 956 history::VisitDatabaseObserver* observer) { | 951 history::VisitDatabaseObserver* observer) { |
| 957 visit_database_observers_->RemoveObserver(observer); | 952 visit_database_observers_->RemoveObserver(observer); |
| 958 } | 953 } |
| 959 | 954 |
| 960 void HistoryService::NotifyVisitDBObserversOnAddVisit( | 955 void HistoryService::NotifyVisitDBObserversOnAddVisit( |
| 961 const history::BriefVisitInfo& info) { | 956 const history::BriefVisitInfo& info) { |
| 962 visit_database_observers_->Notify( | 957 visit_database_observers_->Notify( |
| 963 &history::VisitDatabaseObserver::OnAddVisit, info); | 958 &history::VisitDatabaseObserver::OnAddVisit, info); |
| 964 } | 959 } |
| OLD | NEW |