Index: chrome/browser/rlz/rlz.cc |
diff --git a/chrome/browser/rlz/rlz.cc b/chrome/browser/rlz/rlz.cc |
index 4ed0f05b0a6c42164f22fe026b050d2277235136..bad1e29b0fb5a43a3fe54a83154b99ed54f14392 100644 |
--- a/chrome/browser/rlz/rlz.cc |
+++ b/chrome/browser/rlz/rlz.cc |
@@ -25,6 +25,7 @@ |
#include "chrome/browser/search_engines/template_url_service_factory.h" |
#include "chrome/browser/ui/startup/startup_browser_creator.h" |
#include "chrome/common/chrome_notification_types.h" |
+#include "chrome/common/chrome_switches.h" |
#include "chrome/common/pref_names.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/navigation_entry.h" |
@@ -59,8 +60,8 @@ namespace { |
// Maximum and minimum delay for financial ping we would allow to be set through |
// master preferences. Somewhat arbitrary, may need to be adjusted in future. |
-const int kMaxDelay = 200 * 1000; |
-const int kMinDelay = 20 * 1000; |
+const base::TimeDelta kMaxInitDelay = base::TimeDelta::FromSeconds(200); |
+const base::TimeDelta kMinInitDelay = base::TimeDelta::FromSeconds(20); |
bool IsGoogleUrl(const GURL& url) { |
return google_util::IsGoogleHomePageUrl(url.possibly_invalid_spec()); |
@@ -189,7 +190,7 @@ RLZTracker::RLZTracker() |
already_ran_(false), |
omnibox_used_(false), |
homepage_used_(false), |
- min_delay_(kMinDelay) { |
+ min_init_delay_(kMinInitDelay) { |
} |
RLZTracker::~RLZTracker() { |
@@ -197,18 +198,21 @@ RLZTracker::~RLZTracker() { |
// static |
bool RLZTracker::InitRlzDelayed(bool first_run, |
- int delay, |
+ bool send_ping_immediately, |
+ base::TimeDelta delay, |
bool is_google_default_search, |
bool is_google_homepage, |
bool is_google_in_startpages) { |
- return GetInstance()->Init(first_run, delay, is_google_default_search, |
- is_google_homepage, is_google_in_startpages); |
+ return GetInstance()->Init(first_run, send_ping_immediately, delay, |
+ is_google_default_search, is_google_homepage, |
+ is_google_in_startpages); |
} |
// static |
bool RLZTracker::InitRlzFromProfileDelayed(Profile* profile, |
bool first_run, |
- int delay) { |
+ bool send_ping_immediately, |
+ base::TimeDelta delay) { |
bool is_google_default_search = false; |
TemplateURLService* template_url_service = |
TemplateURLServiceFactory::GetForProfile(profile); |
@@ -233,7 +237,7 @@ bool RLZTracker::InitRlzFromProfileDelayed(Profile* profile, |
IsGoogleUrl) > 0; |
} |
- if (!InitRlzDelayed(first_run, delay, |
+ if (!InitRlzDelayed(first_run, send_ping_immediately, delay, |
is_google_default_search, is_google_homepage, |
is_google_in_startpages)) { |
return false; |
@@ -248,7 +252,8 @@ bool RLZTracker::InitRlzFromProfileDelayed(Profile* profile, |
} |
bool RLZTracker::Init(bool first_run, |
- int delay, |
+ bool send_ping_immediately, |
+ base::TimeDelta delay, |
bool is_google_default_search, |
bool is_google_homepage, |
bool is_google_in_startpages) { |
@@ -256,19 +261,13 @@ bool RLZTracker::Init(bool first_run, |
is_google_default_search_ = is_google_default_search; |
is_google_homepage_ = is_google_homepage; |
is_google_in_startpages_ = is_google_in_startpages; |
+ send_ping_immediately_ = send_ping_immediately; |
- // A negative delay means that a financial ping should be sent immediately |
- // after a first search is recorded, without waiting for the next restart |
- // of chrome. However, we only want this behaviour on first run. |
- send_ping_immediately_ = false; |
- if (delay < 0) { |
- send_ping_immediately_ = true; |
- delay = -delay; |
- } |
+ // Enable zero delays for testing. |
+ if (CommandLine::ForCurrentProcess()->HasSwitch(::switches::kTestType)) |
+ EnableZeroDelayForTesting(); |
- delay *= 1000; |
- delay = (delay < min_delay_) ? min_delay_ : delay; |
- delay = (delay > kMaxDelay) ? kMaxDelay : delay; |
+ delay = std::min(kMaxInitDelay, std::max(min_init_delay_, delay)); |
if (google_util::GetBrand(&brand_) && !IsBrandOrganic(brand_)) { |
// Register for notifications from the omnibox so that we can record when |
@@ -293,14 +292,14 @@ bool RLZTracker::Init(bool first_run, |
return true; |
} |
-void RLZTracker::ScheduleDelayedInit(int delay) { |
+void RLZTracker::ScheduleDelayedInit(base::TimeDelta delay) { |
// The RLZTracker is a singleton object that outlives any runnable tasks |
// that will be queued up. |
BrowserThread::GetBlockingPool()->PostDelayedSequencedWorkerTask( |
worker_pool_token_, |
FROM_HERE, |
base::Bind(&RLZTracker::DelayedInit, base::Unretained(this)), |
- base::TimeDelta::FromMilliseconds(delay)); |
+ delay); |
} |
void RLZTracker::DelayedInit() { |
@@ -457,7 +456,7 @@ void RLZTracker::RecordFirstSearch(rlz_lib::AccessPoint point) { |
if (!RecordProductEvent(rlz_lib::CHROME, point, rlz_lib::FIRST_SEARCH)) |
*record_used = true; |
else if (send_ping_immediately_ && point == CHROME_OMNIBOX) |
- ScheduleDelayedInit(0); |
+ ScheduleDelayedInit(base::TimeDelta()); |
} |
bool RLZTracker::ScheduleRecordFirstSearch(rlz_lib::AccessPoint point) { |
@@ -573,5 +572,5 @@ void RLZTracker::CleanupRlz() { |
// static |
void RLZTracker::EnableZeroDelayForTesting() { |
- GetInstance()->min_delay_ = 0; |
+ GetInstance()->min_init_delay_ = base::TimeDelta(); |
} |