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

Side by Side Diff: chrome/browser/component_updater/component_updater_service.cc

Issue 334783002: Componentize component_updater: Move some paths/constants to component. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge origin/master Created 6 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 10 matching lines...) Expand all
21 #include "base/threading/sequenced_worker_pool.h" 21 #include "base/threading/sequenced_worker_pool.h"
22 #include "base/timer/timer.h" 22 #include "base/timer/timer.h"
23 #include "chrome/browser/browser_process.h" 23 #include "chrome/browser/browser_process.h"
24 #include "chrome/browser/component_updater/component_unpacker.h" 24 #include "chrome/browser/component_updater/component_unpacker.h"
25 #include "chrome/browser/component_updater/component_updater_ping_manager.h" 25 #include "chrome/browser/component_updater/component_updater_ping_manager.h"
26 #include "chrome/browser/component_updater/component_updater_utils.h" 26 #include "chrome/browser/component_updater/component_updater_utils.h"
27 #include "chrome/browser/component_updater/crx_downloader.h" 27 #include "chrome/browser/component_updater/crx_downloader.h"
28 #include "chrome/browser/component_updater/crx_update_item.h" 28 #include "chrome/browser/component_updater/crx_update_item.h"
29 #include "chrome/browser/component_updater/update_checker.h" 29 #include "chrome/browser/component_updater/update_checker.h"
30 #include "chrome/browser/component_updater/update_response.h" 30 #include "chrome/browser/component_updater/update_response.h"
31 #include "chrome/common/chrome_version_info.h"
32 #include "content/public/browser/browser_thread.h" 31 #include "content/public/browser/browser_thread.h"
33 #include "content/public/browser/resource_controller.h" 32 #include "content/public/browser/resource_controller.h"
34 #include "content/public/browser/resource_throttle.h" 33 #include "content/public/browser/resource_throttle.h"
35 #include "url/gurl.h" 34 #include "url/gurl.h"
36 35
37 using content::BrowserThread; 36 using content::BrowserThread;
38 37
39 namespace component_updater { 38 namespace component_updater {
40 39
41 // The component updater is designed to live until process shutdown, so 40 // The component updater is designed to live until process shutdown, so
42 // base::Bind() calls are not refcounted. 41 // base::Bind() calls are not refcounted.
43 42
44 namespace { 43 namespace {
45 44
46 // Returns true if the |proposed| version is newer than |current| version. 45 // Returns true if the |proposed| version is newer than |current| version.
47 bool IsVersionNewer(const Version& current, const std::string& proposed) { 46 bool IsVersionNewer(const base::Version& current, const std::string& proposed) {
48 Version proposed_ver(proposed); 47 base::Version proposed_ver(proposed);
49 return proposed_ver.IsValid() && current.CompareTo(proposed_ver) < 0; 48 return proposed_ver.IsValid() && current.CompareTo(proposed_ver) < 0;
50 } 49 }
51 50
52 // Returns true if a differential update is available, it has not failed yet, 51 // Returns true if a differential update is available, it has not failed yet,
53 // and the configuration allows it. 52 // and the configuration allows it.
54 bool CanTryDiffUpdate(const CrxUpdateItem* update_item, 53 bool CanTryDiffUpdate(const CrxUpdateItem* update_item,
55 const ComponentUpdateService::Configurator& config) { 54 const ComponentUpdateService::Configurator& config) {
56 return HasDiffUpdate(update_item) && !update_item->diff_update_failed && 55 return HasDiffUpdate(update_item) && !update_item->diff_update_failed &&
57 config.DeltasEnabled(); 56 config.DeltasEnabled();
58 } 57 }
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 // rest of the browser, so even if we have many components registered and 136 // rest of the browser, so even if we have many components registered and
138 // eligible for update, we only do one thing at a time with pauses in between 137 // eligible for update, we only do one thing at a time with pauses in between
139 // the tasks. Also when we do network requests there is only one |url_fetcher_| 138 // the tasks. Also when we do network requests there is only one |url_fetcher_|
140 // in flight at a time. 139 // in flight at a time.
141 // There are no locks in this code, the main structure |work_items_| is mutated 140 // There are no locks in this code, the main structure |work_items_| is mutated
142 // only from the UI thread. The unpack and installation is done in a blocking 141 // only from the UI thread. The unpack and installation is done in a blocking
143 // pool thread. The network requests are done in the IO thread or in the file 142 // pool thread. The network requests are done in the IO thread or in the file
144 // thread. 143 // thread.
145 class CrxUpdateService : public ComponentUpdateService, public OnDemandUpdater { 144 class CrxUpdateService : public ComponentUpdateService, public OnDemandUpdater {
146 public: 145 public:
147 explicit CrxUpdateService(ComponentUpdateService::Configurator* config); 146 explicit CrxUpdateService(ComponentUpdateService::Configurator* config,
147 const std::string& application_version,
Sorin Jianu 2014/06/19 00:48:22 same Configurator deal.
148 const std::string& platform_name);
148 virtual ~CrxUpdateService(); 149 virtual ~CrxUpdateService();
149 150
150 // Overrides for ComponentUpdateService. 151 // Overrides for ComponentUpdateService.
151 virtual void AddObserver(Observer* observer) OVERRIDE; 152 virtual void AddObserver(Observer* observer) OVERRIDE;
152 virtual void RemoveObserver(Observer* observer) OVERRIDE; 153 virtual void RemoveObserver(Observer* observer) OVERRIDE;
153 virtual Status Start() OVERRIDE; 154 virtual Status Start() OVERRIDE;
154 virtual Status Stop() OVERRIDE; 155 virtual Status Stop() OVERRIDE;
155 virtual Status RegisterComponent(const CrxComponent& component) OVERRIDE; 156 virtual Status RegisterComponent(const CrxComponent& component) OVERRIDE;
156 virtual std::vector<std::string> GetComponentIDs() const OVERRIDE; 157 virtual std::vector<std::string> GetComponentIDs() const OVERRIDE;
157 virtual bool GetComponentDetails(const std::string& component_id, 158 virtual bool GetComponentDetails(const std::string& component_id,
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 scoped_ptr<CrxDownloader> crx_downloader_; 256 scoped_ptr<CrxDownloader> crx_downloader_;
256 257
257 // A collection of every work item. 258 // A collection of every work item.
258 typedef std::vector<CrxUpdateItem*> UpdateItems; 259 typedef std::vector<CrxUpdateItem*> UpdateItems;
259 UpdateItems work_items_; 260 UpdateItems work_items_;
260 261
261 base::OneShotTimer<CrxUpdateService> timer_; 262 base::OneShotTimer<CrxUpdateService> timer_;
262 263
263 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_; 264 scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
264 265
265 const Version chrome_version_; 266 const base::Version application_version_;
267 const std::string platform_name_;
266 268
267 bool running_; 269 bool running_;
268 270
269 ObserverList<Observer> observer_list_; 271 ObserverList<Observer> observer_list_;
270 272
271 DISALLOW_COPY_AND_ASSIGN(CrxUpdateService); 273 DISALLOW_COPY_AND_ASSIGN(CrxUpdateService);
272 }; 274 };
273 275
274 ////////////////////////////////////////////////////////////////////////////// 276 //////////////////////////////////////////////////////////////////////////////
275 277
276 CrxUpdateService::CrxUpdateService(ComponentUpdateService::Configurator* config) 278 CrxUpdateService::CrxUpdateService(ComponentUpdateService::Configurator* config,
279 const std::string& application_version,
280 const std::string& platform_name)
277 : config_(config), 281 : config_(config),
278 ping_manager_( 282 ping_manager_(new PingManager(application_version,
Sorin Jianu 2014/06/19 00:48:22 Seems ok to introduce a dependency on Configurator
279 new PingManager(config->PingUrl(), config->RequestContext())), 283 platform_name,
284 config->PingUrl(),
285 config->RequestContext())),
280 blocking_task_runner_( 286 blocking_task_runner_(
281 BrowserThread::GetBlockingPool()-> 287 BrowserThread::GetBlockingPool()
282 GetSequencedTaskRunnerWithShutdownBehavior( 288 ->GetSequencedTaskRunnerWithShutdownBehavior(
283 BrowserThread::GetBlockingPool()->GetSequenceToken(), 289 BrowserThread::GetBlockingPool()->GetSequenceToken(),
284 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)), 290 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)),
285 chrome_version_(chrome::VersionInfo().Version()), 291 application_version_(application_version),
292 platform_name_(platform_name),
286 running_(false) { 293 running_(false) {
287 } 294 }
288 295
289 CrxUpdateService::~CrxUpdateService() { 296 CrxUpdateService::~CrxUpdateService() {
290 // Because we are a singleton, at this point only the UI thread should be 297 // Because we are a singleton, at this point only the UI thread should be
291 // alive, this simplifies the management of the work that could be in 298 // alive, this simplifies the management of the work that could be in
292 // flight in other threads. 299 // flight in other threads.
293 Stop(); 300 Stop();
294 STLDeleteElements(&work_items_); 301 STLDeleteElements(&work_items_);
295 } 302 }
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 VLOG(1) << "Scheduling update check for component id=" << item->id 609 VLOG(1) << "Scheduling update check for component id=" << item->id
603 << ", time_since_last_checked=" 610 << ", time_since_last_checked="
604 << time_since_last_checked.InSeconds() << " seconds"; 611 << time_since_last_checked.InSeconds() << " seconds";
605 612
606 ChangeItemState(item, CrxUpdateItem::kChecking); 613 ChangeItemState(item, CrxUpdateItem::kChecking);
607 614
608 item->last_check = now; 615 item->last_check = now;
609 item->crx_urls.clear(); 616 item->crx_urls.clear();
610 item->crx_diffurls.clear(); 617 item->crx_diffurls.clear();
611 item->previous_version = item->component.version; 618 item->previous_version = item->component.version;
612 item->next_version = Version(); 619 item->next_version = base::Version();
613 item->previous_fp = item->component.fingerprint; 620 item->previous_fp = item->component.fingerprint;
614 item->next_fp.clear(); 621 item->next_fp.clear();
615 item->diff_update_failed = false; 622 item->diff_update_failed = false;
616 item->error_category = 0; 623 item->error_category = 0;
617 item->error_code = 0; 624 item->error_code = 0;
618 item->extra_code1 = 0; 625 item->extra_code1 = 0;
619 item->diff_error_category = 0; 626 item->diff_error_category = 0;
620 item->diff_error_code = 0; 627 item->diff_error_code = 0;
621 item->diff_extra_code1 = 0; 628 item->diff_extra_code1 = 0;
622 item->download_metrics.clear(); 629 item->download_metrics.clear();
623 630
624 items_to_check.push_back(item); 631 items_to_check.push_back(item);
625 } 632 }
626 633
627 if (items_to_check.empty()) 634 if (items_to_check.empty())
628 return false; 635 return false;
629 636
630 update_checker_ = 637 update_checker_ =
631 UpdateChecker::Create(config_->UpdateUrl(), 638 UpdateChecker::Create(config_->UpdateUrl(),
632 config_->RequestContext(), 639 config_->RequestContext(),
633 base::Bind(&CrxUpdateService::UpdateCheckComplete, 640 base::Bind(&CrxUpdateService::UpdateCheckComplete,
634 base::Unretained(this))).Pass(); 641 base::Unretained(this))).Pass();
635 return update_checker_->CheckForUpdates(items_to_check, 642 return update_checker_->CheckForUpdates(application_version_.GetString(),
643 platform_name_,
644 items_to_check,
636 config_->ExtraRequestParams()); 645 config_->ExtraRequestParams());
637 } 646 }
638 647
639 void CrxUpdateService::UpdateComponent(CrxUpdateItem* workitem) { 648 void CrxUpdateService::UpdateComponent(CrxUpdateItem* workitem) {
640 scoped_ptr<CRXContext> crx_context(new CRXContext); 649 scoped_ptr<CRXContext> crx_context(new CRXContext);
641 crx_context->pk_hash = workitem->component.pk_hash; 650 crx_context->pk_hash = workitem->component.pk_hash;
642 crx_context->id = workitem->id; 651 crx_context->id = workitem->id;
643 crx_context->installer = workitem->component.installer; 652 crx_context->installer = workitem->component.installer;
644 crx_context->fingerprint = workitem->next_fp; 653 crx_context->fingerprint = workitem->next_fp;
645 const std::vector<GURL>* urls = NULL; 654 const std::vector<GURL>* urls = NULL;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
714 } 723 }
715 724
716 if (!IsVersionNewer(crx->component.version, it->manifest.version)) { 725 if (!IsVersionNewer(crx->component.version, it->manifest.version)) {
717 // The component is up to date. 726 // The component is up to date.
718 ChangeItemState(crx, CrxUpdateItem::kUpToDate); 727 ChangeItemState(crx, CrxUpdateItem::kUpToDate);
719 VLOG(1) << "Component already up-to-date: " << crx->id; 728 VLOG(1) << "Component already up-to-date: " << crx->id;
720 continue; 729 continue;
721 } 730 }
722 731
723 if (!it->manifest.browser_min_version.empty()) { 732 if (!it->manifest.browser_min_version.empty()) {
724 if (IsVersionNewer(chrome_version_, it->manifest.browser_min_version)) { 733 if (IsVersionNewer(application_version_,
734 it->manifest.browser_min_version)) {
725 // The component is not compatible with this Chrome version. 735 // The component is not compatible with this Chrome version.
726 VLOG(1) << "Ignoring incompatible component: " << crx->id; 736 VLOG(1) << "Ignoring incompatible component: " << crx->id;
727 ChangeItemState(crx, CrxUpdateItem::kNoUpdate); 737 ChangeItemState(crx, CrxUpdateItem::kNoUpdate);
728 continue; 738 continue;
729 } 739 }
730 } 740 }
731 741
732 if (it->manifest.packages.size() != 1) { 742 if (it->manifest.packages.size() != 1) {
733 // Assume one and only one package per component. 743 // Assume one and only one package per component.
734 VLOG(1) << "Ignoring multiple packages for component: " << crx->id; 744 VLOG(1) << "Ignoring multiple packages for component: " << crx->id;
735 ChangeItemState(crx, CrxUpdateItem::kNoUpdate); 745 ChangeItemState(crx, CrxUpdateItem::kNoUpdate);
736 continue; 746 continue;
737 } 747 }
738 748
739 // Parse the members of the result and queue an upgrade for this component. 749 // Parse the members of the result and queue an upgrade for this component.
740 crx->next_version = Version(it->manifest.version); 750 crx->next_version = base::Version(it->manifest.version);
741 751
742 VLOG(1) << "Update found for component: " << crx->id; 752 VLOG(1) << "Update found for component: " << crx->id;
743 753
744 typedef UpdateResponse::Result::Manifest::Package Package; 754 typedef UpdateResponse::Result::Manifest::Package Package;
745 const Package& package(it->manifest.packages[0]); 755 const Package& package(it->manifest.packages[0]);
746 crx->next_fp = package.fingerprint; 756 crx->next_fp = package.fingerprint;
747 757
748 // Resolve the urls by combining the base urls with the package names. 758 // Resolve the urls by combining the base urls with the package names.
749 for (size_t i = 0; i != it->crx_urls.size(); ++i) { 759 for (size_t i = 0; i != it->crx_urls.size(); ++i) {
750 const GURL url(it->crx_urls[i].Resolve(package.name)); 760 const GURL url(it->crx_urls[i].Resolve(package.name));
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
1082 void CUResourceThrottle::Unblock() { 1092 void CUResourceThrottle::Unblock() {
1083 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 1093 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
1084 if (state_ == BLOCKED) 1094 if (state_ == BLOCKED)
1085 controller()->Resume(); 1095 controller()->Resume();
1086 state_ = UNBLOCKED; 1096 state_ = UNBLOCKED;
1087 } 1097 }
1088 1098
1089 // The component update factory. Using the component updater as a singleton 1099 // The component update factory. Using the component updater as a singleton
1090 // is the job of the browser process. 1100 // is the job of the browser process.
1091 ComponentUpdateService* ComponentUpdateServiceFactory( 1101 ComponentUpdateService* ComponentUpdateServiceFactory(
1092 ComponentUpdateService::Configurator* config) { 1102 ComponentUpdateService::Configurator* config,
1103 const std::string& application_version,
1104 const std::string& platform_name) {
1093 DCHECK(config); 1105 DCHECK(config);
1094 return new CrxUpdateService(config); 1106 return new CrxUpdateService(config, application_version, platform_name);
1095 } 1107 }
1096 1108
1097 } // namespace component_updater 1109 } // namespace component_updater
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698