Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2558)

Unified Diff: chrome/browser/component_updater/component_updater_service.cc

Issue 292203002: Define and implement an interface for on-demand component updates. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/component_updater/component_updater_service.cc
diff --git a/chrome/browser/component_updater/component_updater_service.cc b/chrome/browser/component_updater/component_updater_service.cc
index 60740e678b3186233d24ba31382d2f8659d537a3..2bf5ab68612bdc60ff89bac371936f5a46c42664 100644
--- a/chrome/browser/component_updater/component_updater_service.cc
+++ b/chrome/browser/component_updater/component_updater_service.cc
@@ -149,7 +149,7 @@ void UnblockandReapAllThrottles(CUResourceThrottle::WeakPtrVector* throttles) {
// only from the UI thread. The unpack and installation is done in a blocking
// pool thread. The network requests are done in the IO thread or in the file
// thread.
-class CrxUpdateService : public ComponentUpdateService {
+class CrxUpdateService : public ComponentUpdateService, public OnDemandUpdater {
public:
explicit CrxUpdateService(ComponentUpdateService::Configurator* config);
virtual ~CrxUpdateService();
@@ -160,12 +160,15 @@ class CrxUpdateService : public ComponentUpdateService {
virtual Status Start() OVERRIDE;
virtual Status Stop() OVERRIDE;
virtual Status RegisterComponent(const CrxComponent& component) OVERRIDE;
- virtual Status OnDemandUpdate(const std::string& component_id) OVERRIDE;
virtual void GetComponents(
std::vector<CrxComponentInfo>* components) OVERRIDE;
+ virtual OnDemandUpdater& GetOnDemandUpdater() OVERRIDE;
+
+ // Overrides for OnDemandUpdater.
virtual content::ResourceThrottle* GetOnDemandResourceThrottle(
net::URLRequest* request,
const std::string& crx_id) OVERRIDE;
+ virtual Status OnDemandUpdate(const std::string& component_id) OVERRIDE;
waffles 2014/05/20 17:15:19 I don't understand why this should be public, thou
Sorin Jianu 2014/05/20 17:39:07 I can make all these members private, since they a
// Context for a crx download url request.
struct CRXContext {
@@ -496,60 +499,6 @@ ComponentUpdateService::Status CrxUpdateService::RegisterComponent(
return kOk;
}
-// Start the process of checking for an update, for a particular component
-// that was previously registered.
-// |component_id| is a value returned from GetCrxComponentID().
-ComponentUpdateService::Status CrxUpdateService::OnDemandUpdate(
- const std::string& component_id) {
- return OnDemandUpdateInternal(FindUpdateItemById(component_id));
-}
-
-ComponentUpdateService::Status CrxUpdateService::OnDemandUpdateInternal(
- CrxUpdateItem* uit) {
- if (!uit)
- return kError;
-
- // Check if the request is too soon.
- base::TimeDelta delta = base::Time::Now() - uit->last_check;
- if (delta < base::TimeDelta::FromSeconds(config_->OnDemandDelay()))
- return kError;
-
- switch (uit->status) {
- // If the item is already in the process of being updated, there is
- // no point in this call, so return kInProgress.
- case CrxUpdateItem::kChecking:
- case CrxUpdateItem::kCanUpdate:
- case CrxUpdateItem::kDownloadingDiff:
- case CrxUpdateItem::kDownloading:
- case CrxUpdateItem::kUpdatingDiff:
- case CrxUpdateItem::kUpdating:
- return kInProgress;
- // Otherwise the item was already checked a while back (or it is new),
- // set its status to kNew to give it a slightly higher priority.
- case CrxUpdateItem::kNew:
- case CrxUpdateItem::kUpdated:
- case CrxUpdateItem::kUpToDate:
- case CrxUpdateItem::kNoUpdate:
- ChangeItemState(uit, CrxUpdateItem::kNew);
- uit->on_demand = true;
- break;
- case CrxUpdateItem::kLastStatus:
- NOTREACHED() << uit->status;
- }
-
- // In case the current delay is long, set the timer to a shorter value
- // to get the ball rolling.
- if (timer_.IsRunning()) {
- timer_.Stop();
- timer_.Start(FROM_HERE,
- base::TimeDelta::FromSeconds(config_->StepDelay()),
- this,
- &CrxUpdateService::ProcessPendingItems);
- }
-
- return kOk;
-}
-
void CrxUpdateService::GetComponents(
std::vector<CrxComponentInfo>* components) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
@@ -565,6 +514,10 @@ void CrxUpdateService::GetComponents(
}
}
+OnDemandUpdater& CrxUpdateService::GetOnDemandUpdater() {
+ return *this;
+}
+
// This is the main loop of the component updater. It updates one component
// at a time if updates are available. Otherwise, it does an update check or
// takes a long sleep until the loop runs again.
@@ -1010,6 +963,57 @@ void CrxUpdateService::OnNewResourceThrottle(
UnblockResourceThrottle(rt);
}
+ComponentUpdateService::Status CrxUpdateService::OnDemandUpdate(
+ const std::string& component_id) {
+ return OnDemandUpdateInternal(FindUpdateItemById(component_id));
+}
+
+ComponentUpdateService::Status CrxUpdateService::OnDemandUpdateInternal(
+ CrxUpdateItem* uit) {
+ if (!uit)
+ return kError;
+
+ // Check if the request is too soon.
+ base::TimeDelta delta = base::Time::Now() - uit->last_check;
+ if (delta < base::TimeDelta::FromSeconds(config_->OnDemandDelay()))
+ return kError;
+
+ switch (uit->status) {
+ // If the item is already in the process of being updated, there is
+ // no point in this call, so return kInProgress.
+ case CrxUpdateItem::kChecking:
+ case CrxUpdateItem::kCanUpdate:
+ case CrxUpdateItem::kDownloadingDiff:
+ case CrxUpdateItem::kDownloading:
+ case CrxUpdateItem::kUpdatingDiff:
+ case CrxUpdateItem::kUpdating:
+ return kInProgress;
+ // Otherwise the item was already checked a while back (or it is new),
+ // set its status to kNew to give it a slightly higher priority.
+ case CrxUpdateItem::kNew:
+ case CrxUpdateItem::kUpdated:
+ case CrxUpdateItem::kUpToDate:
+ case CrxUpdateItem::kNoUpdate:
+ ChangeItemState(uit, CrxUpdateItem::kNew);
+ uit->on_demand = true;
+ break;
+ case CrxUpdateItem::kLastStatus:
+ NOTREACHED() << uit->status;
+ }
+
+ // In case the current delay is long, set the timer to a shorter value
+ // to get the ball rolling.
+ if (timer_.IsRunning()) {
+ timer_.Stop();
+ timer_.Start(FROM_HERE,
+ base::TimeDelta::FromSeconds(config_->StepDelay()),
+ this,
+ &CrxUpdateService::ProcessPendingItems);
+ }
+
+ return kOk;
+}
+
///////////////////////////////////////////////////////////////////////////////
CUResourceThrottle::CUResourceThrottle(const net::URLRequest* request)

Powered by Google App Engine
This is Rietveld 408576698