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

Side by Side Diff: chrome/browser/component_updater/pnacl/pnacl_component_installer.cc

Issue 18006003: Consistently use notifications from component updater w/ on-demand PNaCl. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cleanup test a bit Created 7 years, 5 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) 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 #include "chrome/browser/component_updater/pnacl/pnacl_component_installer.h" 5 #include "chrome/browser/component_updater/pnacl/pnacl_component_installer.h"
6 6
7 #include "base/base_paths.h" 7 #include "base/base_paths.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 return false; 184 return false;
185 } 185 }
186 186
187 *version_out = version; 187 *version_out = version;
188 return true; 188 return true;
189 } 189 }
190 190
191 PnaclComponentInstaller::PnaclComponentInstaller() 191 PnaclComponentInstaller::PnaclComponentInstaller()
192 : per_user_(false), 192 : per_user_(false),
193 updates_disabled_(false), 193 updates_disabled_(false),
194 cus_(NULL), 194 cus_(NULL) {
195 callback_nums_(0) {
196 #if defined(OS_CHROMEOS) 195 #if defined(OS_CHROMEOS)
197 per_user_ = true; 196 per_user_ = true;
198 #endif 197 #endif
199 updater_observer_.reset(new PnaclUpdaterObserver(this)); 198 updater_observer_.reset(new PnaclUpdaterObserver(this));
200 } 199 }
201 200
202 PnaclComponentInstaller::~PnaclComponentInstaller() { 201 PnaclComponentInstaller::~PnaclComponentInstaller() {
203 } 202 }
204 203
205 void PnaclComponentInstaller::OnUpdateError(int error) { 204 void PnaclComponentInstaller::OnUpdateError(int error) {
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 return false; 294 return false;
296 295
297 *installed_file = GetPnaclBaseDirectory().AppendASCII( 296 *installed_file = GetPnaclBaseDirectory().AppendASCII(
298 current_version().GetString()).AppendASCII(file); 297 current_version().GetString()).AppendASCII(file);
299 return true; 298 return true;
300 } 299 }
301 300
302 void PnaclComponentInstaller::AddInstallCallback( 301 void PnaclComponentInstaller::AddInstallCallback(
303 const InstallCallback& cb) { 302 const InstallCallback& cb) {
304 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 303 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
305 int num = ++callback_nums_; 304 updater_observer_->EnsureObserving();
306 install_callbacks_.push_back(std::make_pair(cb, num)); 305 install_callbacks_.push_back(cb);
307 }
308
309 void PnaclComponentInstaller::CancelCallback(int num) {
310 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
311 for (std::list<std::pair<InstallCallback, int> >::iterator
312 i = install_callbacks_.begin(),
313 e = install_callbacks_.end(); i != e; ++i) {
314 if (i->second == num) {
315 i->first.Run(false);
316 install_callbacks_.erase(i);
317 return;
318 }
319 }
320 } 306 }
321 307
322 void PnaclComponentInstaller::NotifyAllWithResult(bool status) { 308 void PnaclComponentInstaller::NotifyAllWithResult(bool status) {
323 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 309 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
324 while (!install_callbacks_.empty()) { 310 while (!install_callbacks_.empty()) {
325 install_callbacks_.front().first.Run(status); 311 install_callbacks_.front().Run(status);
326 install_callbacks_.pop_front(); 312 install_callbacks_.pop_front();
327 } 313 }
328 } 314 }
329 315
330 void PnaclComponentInstaller::NotifyInstallError() { 316 void PnaclComponentInstaller::NotifyInstallError() {
331 if (!install_callbacks_.empty()) { 317 if (!install_callbacks_.empty()) {
332 BrowserThread::PostTask( 318 BrowserThread::PostTask(
333 BrowserThread::UI, FROM_HERE, 319 BrowserThread::UI, FROM_HERE,
334 base::Bind(&PnaclComponentInstaller::NotifyAllWithResult, 320 base::Bind(&PnaclComponentInstaller::NotifyAllWithResult,
335 // Unretained because installer lives until process shutdown. 321 // Unretained because installer lives until process shutdown.
336 base::Unretained(this), false)); 322 base::Unretained(this), false));
337 } 323 }
338 } 324 }
339 325
340 void PnaclComponentInstaller::NotifyInstallSuccess() { 326 void PnaclComponentInstaller::NotifyInstallSuccess() {
341 if (!install_callbacks_.empty()) { 327 if (!install_callbacks_.empty()) {
342 BrowserThread::PostTask( 328 BrowserThread::PostTask(
343 BrowserThread::UI, FROM_HERE, 329 BrowserThread::UI, FROM_HERE,
344 base::Bind(&PnaclComponentInstaller::NotifyAllWithResult, 330 base::Bind(&PnaclComponentInstaller::NotifyAllWithResult,
345 // Unretained because installer lives until process shutdown. 331 // Unretained because installer lives until process shutdown.
346 base::Unretained(this), true)); 332 base::Unretained(this), true));
347 } 333 }
348 } 334 }
349 335
336 CrxComponent PnaclComponentInstaller::GetCrxComponent() {
337 CrxComponent pnacl_component;
338 pnacl_component.version = current_version();
339 pnacl_component.name = "pnacl";
340 pnacl_component.installer = this;
341 SetPnaclHash(&pnacl_component);
342
343 return pnacl_component;
344 }
345
350 namespace { 346 namespace {
351 347
352 void FinishPnaclUpdateRegistration(const Version& current_version, 348 void FinishPnaclUpdateRegistration(const Version& current_version,
353 PnaclComponentInstaller* pci) { 349 PnaclComponentInstaller* pci) {
354 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 350 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
355 CrxComponent pnacl_component;
356 pnacl_component.version = current_version;
357 pnacl_component.name = "pnacl";
358 pnacl_component.installer = pci;
359 pci->set_current_version(current_version); 351 pci->set_current_version(current_version);
360 SetPnaclHash(&pnacl_component); 352 CrxComponent pnacl_component = pci->GetCrxComponent();
361 353
362 ComponentUpdateService::Status status = 354 ComponentUpdateService::Status status =
363 pci->cus()->RegisterComponent(pnacl_component); 355 pci->cus()->RegisterComponent(pnacl_component);
364 if (status != ComponentUpdateService::kOk 356 if (status != ComponentUpdateService::kOk
365 && status != ComponentUpdateService::kReplaced) { 357 && status != ComponentUpdateService::kReplaced) {
366 NOTREACHED() << "Pnacl component registration failed."; 358 NOTREACHED() << "Pnacl component registration failed.";
367 } 359 }
368 } 360 }
369 361
370 // Check if there is an existing version on disk first to know when 362 // Check if there is an existing version on disk first to know when
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 // Figure out profile information, before proceeding to look for files. 453 // Figure out profile information, before proceeding to look for files.
462 BrowserThread::PostTask( 454 BrowserThread::PostTask(
463 BrowserThread::UI, FROM_HERE, 455 BrowserThread::UI, FROM_HERE,
464 base::Bind(&GetProfileInformation, this)); 456 base::Bind(&GetProfileInformation, this));
465 } 457 }
466 458
467 void RequestFirstInstall(ComponentUpdateService* cus, 459 void RequestFirstInstall(ComponentUpdateService* cus,
468 PnaclComponentInstaller* pci, 460 PnaclComponentInstaller* pci,
469 const base::Callback<void(bool)>& installed) { 461 const base::Callback<void(bool)>& installed) {
470 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 462 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
471 Version null_version(kNullVersion); 463 pci->set_current_version(Version(kNullVersion));
472 CrxComponent pnacl_component; 464 CrxComponent pnacl_component = pci->GetCrxComponent();
473 pci->set_current_version(null_version);
474 pnacl_component.version = null_version;
475 pnacl_component.name = "pnacl";
476 pnacl_component.installer = pci;
477 SetPnaclHash(&pnacl_component);
478 ComponentUpdateService::Status status = cus->CheckForUpdateSoon( 465 ComponentUpdateService::Status status = cus->CheckForUpdateSoon(
479 pnacl_component); 466 pnacl_component);
480 if (status != ComponentUpdateService::kOk) { 467 if (status != ComponentUpdateService::kOk) {
481 installed.Run(false); 468 installed.Run(false);
482 return; 469 return;
483 } 470 }
484 pci->AddInstallCallback(installed); 471 pci->AddInstallCallback(installed);
485 } 472 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698