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

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

Issue 8375039: Create a content::UrlFetcher interface that lives in content/public/common and convert users to i... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: review comments Created 9 years, 2 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 (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 <vector> 8 #include <vector>
9 9
10 #include "base/at_exit.h" 10 #include "base/at_exit.h"
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 95
96 // Helper template class that allows our main class to have separate 96 // Helper template class that allows our main class to have separate
97 // OnURLFetchComplete() callbacks for diffent types of url requests 97 // OnURLFetchComplete() callbacks for diffent types of url requests
98 // they are differentiated by the |Ctx| type. 98 // they are differentiated by the |Ctx| type.
99 template <typename Del, typename Ctx> 99 template <typename Del, typename Ctx>
100 class DelegateWithContext : public content::URLFetcherDelegate { 100 class DelegateWithContext : public content::URLFetcherDelegate {
101 public: 101 public:
102 DelegateWithContext(Del* delegate, Ctx* context) 102 DelegateWithContext(Del* delegate, Ctx* context)
103 : delegate_(delegate), context_(context) {} 103 : delegate_(delegate), context_(context) {}
104 104
105 virtual void OnURLFetchComplete(const URLFetcher* source) OVERRIDE { 105 virtual void OnURLFetchComplete(const content::URLFetcher* source) OVERRIDE {
106 delegate_->OnURLFetchComplete(source, context_); 106 delegate_->OnURLFetchComplete(source, context_);
107 delete this; 107 delete this;
108 } 108 }
109 109
110 private: 110 private:
111 ~DelegateWithContext() {} 111 ~DelegateWithContext() {}
112 112
113 Del* delegate_; 113 Del* delegate_;
114 Ctx* context_; 114 Ctx* context_;
115 }; 115 };
116 // This function creates the right DelegateWithContext using template inference. 116 // This function creates the right DelegateWithContext using template inference.
117 template <typename Del, typename Ctx> 117 template <typename Del, typename Ctx>
118 content::URLFetcherDelegate* MakeContextDelegate(Del* delegate, Ctx* context) { 118 content::URLFetcherDelegate* MakeContextDelegate(Del* delegate, Ctx* context) {
119 return new DelegateWithContext<Del, Ctx>(delegate, context); 119 return new DelegateWithContext<Del, Ctx>(delegate, context);
120 } 120 }
121 121
122 // Helper to start a url request using |fetcher| with the common flags. 122 // Helper to start a url request using |fetcher| with the common flags.
123 void StartFetch(URLFetcher* fetcher, 123 void StartFetch(content::URLFetcher* fetcher,
124 net::URLRequestContextGetter* context_getter, 124 net::URLRequestContextGetter* context_getter,
125 bool save_to_file) { 125 bool save_to_file) {
126 fetcher->set_request_context(context_getter); 126 fetcher->SetRequestContext(context_getter);
127 fetcher->set_load_flags(net::LOAD_DO_NOT_SEND_COOKIES | 127 fetcher->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
128 net::LOAD_DO_NOT_SAVE_COOKIES | 128 net::LOAD_DO_NOT_SAVE_COOKIES |
129 net::LOAD_DISABLE_CACHE); 129 net::LOAD_DISABLE_CACHE);
130 // TODO(cpu): Define our retry and backoff policy. 130 // TODO(cpu): Define our retry and backoff policy.
131 fetcher->set_automatically_retry_on_5xx(false); 131 fetcher->SetAutomaticallyRetryOn5xx(false);
132 if (save_to_file) { 132 if (save_to_file) {
133 fetcher->SaveResponseToTemporaryFile( 133 fetcher->SaveResponseToTemporaryFile(
134 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)); 134 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE));
135 } 135 }
136 fetcher->Start(); 136 fetcher->Start();
137 } 137 }
138 138
139 // Returs true if the url request of |fetcher| was succesful. 139 // Returs true if the url request of |fetcher| was succesful.
140 bool FetchSuccess(const URLFetcher& fetcher) { 140 bool FetchSuccess(const content::URLFetcher& fetcher) {
141 return (fetcher.status().status() == net::URLRequestStatus::SUCCESS) && 141 return (fetcher.GetStatus().status() == net::URLRequestStatus::SUCCESS) &&
142 (fetcher.response_code() == 200); 142 (fetcher.GetResponseCode() == 200);
143 } 143 }
144 144
145 // This is the one and only per-item state structure. Designed to be hosted 145 // This is the one and only per-item state structure. Designed to be hosted
146 // in a std::vector or a std::list. The two main members are |component| 146 // in a std::vector or a std::list. The two main members are |component|
147 // which is supplied by the the component updater client and |status| which 147 // which is supplied by the the component updater client and |status| which
148 // is modified as the item is processed by the update pipeline. The expected 148 // is modified as the item is processed by the update pipeline. The expected
149 // transition graph is: 149 // transition graph is:
150 // error error error 150 // error error error
151 // +--kNoUpdate<------<-------+------<------+------<------+ 151 // +--kNoUpdate<------<-------+------<------+------<------+
152 // | | | | 152 // | | | |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 }; 265 };
266 266
267 // Context for a crx download url request. See DelegateWithContext above. 267 // Context for a crx download url request. See DelegateWithContext above.
268 struct CRXContext { 268 struct CRXContext {
269 ComponentInstaller* installer; 269 ComponentInstaller* installer;
270 std::vector<uint8> pk_hash; 270 std::vector<uint8> pk_hash;
271 std::string id; 271 std::string id;
272 CRXContext() : installer(NULL) {} 272 CRXContext() : installer(NULL) {}
273 }; 273 };
274 274
275 void OnURLFetchComplete(const URLFetcher* source, UpdateContext* context); 275 void OnURLFetchComplete(const content::URLFetcher* source,
276 UpdateContext* context);
276 277
277 void OnURLFetchComplete(const URLFetcher* source, CRXContext* context); 278 void OnURLFetchComplete(const content::URLFetcher* source,
279 CRXContext* context);
278 280
279 private: 281 private:
280 // See ManifestParserBridge. 282 // See ManifestParserBridge.
281 void OnParseUpdateManifestSucceeded( 283 void OnParseUpdateManifestSucceeded(
282 const UpdateManifest::Results& results); 284 const UpdateManifest::Results& results);
283 285
284 // See ManifestParserBridge. 286 // See ManifestParserBridge.
285 void OnParseUpdateManifestFailed( 287 void OnParseUpdateManifestFailed(
286 const std::string& error_message); 288 const std::string& error_message);
287 289
(...skipping 10 matching lines...) Expand all
298 void DoneInstalling(const std::string& component_id, 300 void DoneInstalling(const std::string& component_id,
299 ComponentUnpacker::Error error); 301 ComponentUnpacker::Error error);
300 302
301 size_t ChangeItemStatus(CrxUpdateItem::Status from, 303 size_t ChangeItemStatus(CrxUpdateItem::Status from,
302 CrxUpdateItem::Status to); 304 CrxUpdateItem::Status to);
303 305
304 CrxUpdateItem* FindUpdateItemById(const std::string& id); 306 CrxUpdateItem* FindUpdateItemById(const std::string& id);
305 307
306 scoped_ptr<Config> config_; 308 scoped_ptr<Config> config_;
307 309
308 scoped_ptr<URLFetcher> url_fetcher_; 310 scoped_ptr<content::URLFetcher> url_fetcher_;
309 311
310 typedef std::vector<CrxUpdateItem*> UpdateItems; 312 typedef std::vector<CrxUpdateItem*> UpdateItems;
311 UpdateItems work_items_; 313 UpdateItems work_items_;
312 314
313 base::OneShotTimer<CrxUpdateService> timer_; 315 base::OneShotTimer<CrxUpdateService> timer_;
314 316
315 Version chrome_version_; 317 Version chrome_version_;
316 318
317 bool running_; 319 bool running_;
318 320
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 const std::string full_query = MakeFinalQuery(config_->UpdateUrl().spec(), 552 const std::string full_query = MakeFinalQuery(config_->UpdateUrl().spec(),
551 query, 553 query,
552 config_->ExtraRequestParams()); 554 config_->ExtraRequestParams());
553 url_fetcher_.reset(URLFetcher::Create(0, GURL(full_query), URLFetcher::GET, 555 url_fetcher_.reset(URLFetcher::Create(0, GURL(full_query), URLFetcher::GET,
554 MakeContextDelegate(this, new UpdateContext()))); 556 MakeContextDelegate(this, new UpdateContext())));
555 StartFetch(url_fetcher_.get(), config_->RequestContext(), false); 557 StartFetch(url_fetcher_.get(), config_->RequestContext(), false);
556 } 558 }
557 559
558 // Caled when we got a response from the update server. It consists of an xml 560 // Caled when we got a response from the update server. It consists of an xml
559 // document following the omaha update scheme. 561 // document following the omaha update scheme.
560 void CrxUpdateService::OnURLFetchComplete(const URLFetcher* source, 562 void CrxUpdateService::OnURLFetchComplete(const content::URLFetcher* source,
561 UpdateContext* context) { 563 UpdateContext* context) {
562 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 564 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
563 if (FetchSuccess(*source)) { 565 if (FetchSuccess(*source)) {
564 std::string xml; 566 std::string xml;
565 source->GetResponseAsString(&xml); 567 source->GetResponseAsString(&xml);
566 url_fetcher_.reset(); 568 url_fetcher_.reset();
567 ParseManifest(xml); 569 ParseManifest(xml);
568 } else { 570 } else {
569 url_fetcher_.reset(); 571 url_fetcher_.reset();
570 CrxUpdateService::OnParseUpdateManifestFailed("network error"); 572 CrxUpdateService::OnParseUpdateManifestFailed("network error");
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
655 size_t count = ChangeItemStatus(CrxUpdateItem::kChecking, 657 size_t count = ChangeItemStatus(CrxUpdateItem::kChecking,
656 CrxUpdateItem::kNoUpdate); 658 CrxUpdateItem::kNoUpdate);
657 config_->OnEvent(Configurator::kManifestError, static_cast<int>(count)); 659 config_->OnEvent(Configurator::kManifestError, static_cast<int>(count));
658 DCHECK_GT(count, 0ul); 660 DCHECK_GT(count, 0ul);
659 ScheduleNextRun(false); 661 ScheduleNextRun(false);
660 } 662 }
661 663
662 // Called when the CRX package has been downloaded to a temporary location. 664 // Called when the CRX package has been downloaded to a temporary location.
663 // Here we fire the notifications and schedule the component-specific installer 665 // Here we fire the notifications and schedule the component-specific installer
664 // to be called in the file thread. 666 // to be called in the file thread.
665 void CrxUpdateService::OnURLFetchComplete(const URLFetcher* source, 667 void CrxUpdateService::OnURLFetchComplete(const content::URLFetcher* source,
666 CRXContext* context) { 668 CRXContext* context) {
667 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 669 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
668 base::PlatformFileError error_code; 670 base::PlatformFileError error_code;
669 671
670 if (source->FileErrorOccurred(&error_code) || !FetchSuccess(*source)) { 672 if (source->FileErrorOccurred(&error_code) || !FetchSuccess(*source)) {
671 size_t count = ChangeItemStatus(CrxUpdateItem::kDownloading, 673 size_t count = ChangeItemStatus(CrxUpdateItem::kDownloading,
672 CrxUpdateItem::kNoUpdate); 674 CrxUpdateItem::kNoUpdate);
673 DCHECK_EQ(count, 1ul); 675 DCHECK_EQ(count, 1ul);
674 config_->OnEvent(Configurator::kNetworkError, CrxIdtoUMAId(context->id)); 676 config_->OnEvent(Configurator::kNetworkError, CrxIdtoUMAId(context->id));
675 url_fetcher_.reset(); 677 url_fetcher_.reset();
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
744 ScheduleNextRun(false); 746 ScheduleNextRun(false);
745 } 747 }
746 748
747 // The component update factory. Using the component updater as a singleton 749 // The component update factory. Using the component updater as a singleton
748 // is the job of the browser process. 750 // is the job of the browser process.
749 ComponentUpdateService* ComponentUpdateServiceFactory( 751 ComponentUpdateService* ComponentUpdateServiceFactory(
750 ComponentUpdateService::Configurator* config) { 752 ComponentUpdateService::Configurator* config) {
751 DCHECK(config); 753 DCHECK(config);
752 return new CrxUpdateService(config); 754 return new CrxUpdateService(config);
753 } 755 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698