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

Unified Diff: chrome/browser/component_updater/pnacl/pnacl_component_installer.cc

Issue 12054003: Add an API to component_updater that asks to do an update check "now". (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: move commandline check Created 7 years, 10 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/pnacl/pnacl_component_installer.cc
diff --git a/chrome/browser/component_updater/pnacl/pnacl_component_installer.cc b/chrome/browser/component_updater/pnacl/pnacl_component_installer.cc
index f9cf2dad38a50780cf32dcc6528f733f3084f56f..c4448e4236791d580c14a36e044f3dd526895a99 100644
--- a/chrome/browser/component_updater/pnacl/pnacl_component_installer.cc
+++ b/chrome/browser/component_updater/pnacl/pnacl_component_installer.cc
@@ -6,6 +6,7 @@
#include "base/base_paths.h"
#include "base/bind.h"
+#include "base/command_line.h"
#include "base/compiler_specific.h"
#include "base/file_path.h"
#include "base/file_util.h"
@@ -19,12 +20,18 @@
#include "build/build_config.h"
#include "chrome/browser/component_updater/component_updater_service.h"
#include "chrome/common/chrome_paths.h"
+#include "chrome/common/chrome_switches.h"
#include "content/public/browser/browser_thread.h"
using content::BrowserThread;
namespace {
+// If PNaCl isn't installed yet, but a user is running chrome with
+// --enable-pnacl, this is the amount of time to wait before starting
+// a background install.
+const int kInitialDelaySeconds = 10;
+
// One of the Pnacl component files, for checking that expected files exist.
// TODO(jvoung): perhaps replace this with a list of the expected files in the
// manifest.json. Use that to check that everything is unpacked.
@@ -127,10 +134,6 @@ void SetPnaclHash(CrxComponent* component) {
// If we don't have Pnacl installed, this is the version we claim.
-// TODO(jvoung): Is there a way to trick the configurator to ping the server
-// earlier if there are components that are not yet installed (version 0.0.0.0),
-// So that they will be available ASAP? Be careful not to hurt startup speed.
-// Make kNullVersion part of ComponentUpdater in that case, to avoid skew?
const char kNullVersion[] = "0.0.0.0";
// Pnacl components have the version encoded in the path itself:
@@ -315,6 +318,13 @@ bool PnaclComponentInstaller::Install(base::DictionaryValue* manifest,
namespace {
+void DoCheckForUpdate(ComponentUpdateService* cus,
+ const CrxComponent& pnacl) {
+ if (cus->CheckForUpdateSoon(pnacl) != ComponentUpdateService::kOk) {
+ LOG(WARNING) << "Pnacl check for update failed.";
+ }
+}
+
// Finally, do the registration with the right version number.
void FinishPnaclUpdateRegistration(ComponentUpdateService* cus,
const Version& current_version) {
@@ -329,6 +339,17 @@ void FinishPnaclUpdateRegistration(ComponentUpdateService* cus,
if (cus->RegisterComponent(pnacl) != ComponentUpdateService::kOk) {
NOTREACHED() << "Pnacl component registration failed.";
}
+
+ // If PNaCl is not yet installed but it is requested by --enable-pnacl,
+ // we want it to be available "soon", so kick off an update check
+ // earlier than usual.
+ Version null_version(kNullVersion);
+ if (current_version.Equals(null_version)) {
+ BrowserThread::PostDelayedTask(
+ BrowserThread::UI, FROM_HERE,
+ base::Bind(DoCheckForUpdate, cus, pnacl),
+ base::TimeDelta::FromSeconds(kInitialDelaySeconds));
+ }
}
// Check if there is an existing version on disk first to know when
@@ -366,8 +387,13 @@ void StartPnaclUpdateRegistration(ComponentUpdateService* cus) {
} // namespace
-void RegisterPnaclComponent(ComponentUpdateService* cus) {
- BrowserThread::PostTask(
- BrowserThread::FILE, FROM_HERE,
- base::Bind(&StartPnaclUpdateRegistration, cus));
+void RegisterPnaclComponent(ComponentUpdateService* cus,
+ const CommandLine& command_line) {
+ // Only register when given the right flag. This is important since
+ // we do an early component updater check above (in DoCheckForUpdate).
+ if (command_line.HasSwitch(switches::kEnablePnacl)) {
+ BrowserThread::PostTask(
+ BrowserThread::FILE, FROM_HERE,
+ base::Bind(&StartPnaclUpdateRegistration, cus));
+ }
}

Powered by Google App Engine
This is Rietveld 408576698