| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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/component_updater/component_updater_service.h" | 5 #include "chrome/browser/component_updater/component_updater_service.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <set> | 8 #include <set> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 588 work_items_.begin(), work_items_.end(), Helper::IsReadyOnDemand); | 588 work_items_.begin(), work_items_.end(), Helper::IsReadyOnDemand); |
| 589 if (it != work_items_.end()) | 589 if (it != work_items_.end()) |
| 590 return *it; | 590 return *it; |
| 591 it = std::find_if(work_items_.begin(), work_items_.end(), Helper::IsReady); | 591 it = std::find_if(work_items_.begin(), work_items_.end(), Helper::IsReady); |
| 592 if (it != work_items_.end()) | 592 if (it != work_items_.end()) |
| 593 return *it; | 593 return *it; |
| 594 return NULL; | 594 return NULL; |
| 595 } | 595 } |
| 596 | 596 |
| 597 // Prepares the components for an update check and initiates the request. | 597 // Prepares the components for an update check and initiates the request. |
| 598 // On demand components are always included in the update check request. |
| 599 // Otherwise, only include components that have not been checked recently. |
| 598 bool CrxUpdateService::CheckForUpdates() { | 600 bool CrxUpdateService::CheckForUpdates() { |
| 599 // All components are selected for the update check, regardless of when they | 601 const base::TimeDelta minimum_recheck_wait_time = |
| 600 // were last checked. More selective algorithms could be implemented in the | 602 base::TimeDelta::FromSeconds(config_->MinimumReCheckWait()); |
| 601 // future. | 603 const base::Time now(base::Time::Now()); |
| 604 |
| 602 std::vector<CrxUpdateItem*> items_to_check; | 605 std::vector<CrxUpdateItem*> items_to_check; |
| 603 for (size_t i = 0; i != work_items_.size(); ++i) { | 606 for (size_t i = 0; i != work_items_.size(); ++i) { |
| 604 CrxUpdateItem* item = work_items_[i]; | 607 CrxUpdateItem* item = work_items_[i]; |
| 605 DCHECK(item->status == CrxUpdateItem::kNew || | 608 DCHECK(item->status == CrxUpdateItem::kNew || |
| 606 item->status == CrxUpdateItem::kNoUpdate || | 609 item->status == CrxUpdateItem::kNoUpdate || |
| 607 item->status == CrxUpdateItem::kUpToDate || | 610 item->status == CrxUpdateItem::kUpToDate || |
| 608 item->status == CrxUpdateItem::kUpdated); | 611 item->status == CrxUpdateItem::kUpdated); |
| 609 | 612 |
| 613 const base::TimeDelta time_since_last_checked(now - item->last_check); |
| 614 |
| 615 if (!item->on_demand && |
| 616 time_since_last_checked < minimum_recheck_wait_time) { |
| 617 continue; |
| 618 } |
| 619 |
| 610 ChangeItemState(item, CrxUpdateItem::kChecking); | 620 ChangeItemState(item, CrxUpdateItem::kChecking); |
| 611 | 621 |
| 612 item->last_check = base::Time::Now(); | 622 item->last_check = now; |
| 613 item->crx_urls.clear(); | 623 item->crx_urls.clear(); |
| 614 item->crx_diffurls.clear(); | 624 item->crx_diffurls.clear(); |
| 615 item->previous_version = item->component.version; | 625 item->previous_version = item->component.version; |
| 616 item->next_version = Version(); | 626 item->next_version = Version(); |
| 617 item->previous_fp = item->component.fingerprint; | 627 item->previous_fp = item->component.fingerprint; |
| 618 item->next_fp.clear(); | 628 item->next_fp.clear(); |
| 619 item->diff_update_failed = false; | 629 item->diff_update_failed = false; |
| 620 item->error_category = 0; | 630 item->error_category = 0; |
| 621 item->error_code = 0; | 631 item->error_code = 0; |
| 622 item->extra_code1 = 0; | 632 item->extra_code1 = 0; |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 754 ChangeItemState(crx, CrxUpdateItem::kCanUpdate); | 764 ChangeItemState(crx, CrxUpdateItem::kCanUpdate); |
| 755 ++num_updates_pending; | 765 ++num_updates_pending; |
| 756 } | 766 } |
| 757 | 767 |
| 758 // All components that are not included in the update response are | 768 // All components that are not included in the update response are |
| 759 // considered up to date. | 769 // considered up to date. |
| 760 ChangeItemStatus(CrxUpdateItem::kChecking, CrxUpdateItem::kUpToDate); | 770 ChangeItemStatus(CrxUpdateItem::kChecking, CrxUpdateItem::kUpToDate); |
| 761 | 771 |
| 762 // If there are updates pending we do a short wait, otherwise we take | 772 // If there are updates pending we do a short wait, otherwise we take |
| 763 // a longer delay until we check the components again. | 773 // a longer delay until we check the components again. |
| 764 ScheduleNextRun(num_updates_pending > 0 ? kStepDelayShort : kStepDelayMedium); | 774 ScheduleNextRun(num_updates_pending > 0 ? kStepDelayShort : kStepDelayLong); |
| 765 } | 775 } |
| 766 | 776 |
| 767 // TODO: record UMA stats. | 777 // TODO: record UMA stats. |
| 768 void CrxUpdateService::OnUpdateCheckFailed(int error, | 778 void CrxUpdateService::OnUpdateCheckFailed(int error, |
| 769 const std::string& error_message) { | 779 const std::string& error_message) { |
| 770 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 780 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 771 DCHECK(error); | 781 DCHECK(error); |
| 772 size_t count = ChangeItemStatus(CrxUpdateItem::kChecking, | 782 size_t count = ChangeItemStatus(CrxUpdateItem::kChecking, |
| 773 CrxUpdateItem::kNoUpdate); | 783 CrxUpdateItem::kNoUpdate); |
| 774 DCHECK_GT(count, 0ul); | 784 DCHECK_GT(count, 0ul); |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1001 // The component update factory. Using the component updater as a singleton | 1011 // The component update factory. Using the component updater as a singleton |
| 1002 // is the job of the browser process. | 1012 // is the job of the browser process. |
| 1003 ComponentUpdateService* ComponentUpdateServiceFactory( | 1013 ComponentUpdateService* ComponentUpdateServiceFactory( |
| 1004 ComponentUpdateService::Configurator* config) { | 1014 ComponentUpdateService::Configurator* config) { |
| 1005 DCHECK(config); | 1015 DCHECK(config); |
| 1006 return new CrxUpdateService(config); | 1016 return new CrxUpdateService(config); |
| 1007 } | 1017 } |
| 1008 | 1018 |
| 1009 } // namespace component_updater | 1019 } // namespace component_updater |
| 1010 | 1020 |
| OLD | NEW |