Index: components/rlz/rlz_tracker.cc |
diff --git a/components/rlz/rlz_tracker.cc b/components/rlz/rlz_tracker.cc |
index 4a1abea602c943e19f2eae90865317410a6aa05f..4efb733dfc390a84af410be1198dca7d2249585f 100644 |
--- a/components/rlz/rlz_tracker.cc |
+++ b/components/rlz/rlz_tracker.cc |
@@ -13,9 +13,12 @@ |
#include "base/bind.h" |
#include "base/message_loop/message_loop.h" |
+#include "base/sequenced_task_runner.h" |
#include "base/strings/string_util.h" |
#include "base/strings/stringprintf.h" |
#include "base/strings/utf_string_conversions.h" |
+#include "base/task_scheduler/post_task.h" |
+#include "base/task_scheduler/task_traits.h" |
#include "base/trace_event/trace_event.h" |
#include "build/build_config.h" |
#include "components/rlz/rlz_tracker_delegate.h" |
@@ -165,7 +168,11 @@ RLZTracker::RLZTracker() |
omnibox_used_(false), |
homepage_used_(false), |
app_list_used_(false), |
- min_init_delay_(kMinInitDelay) { |
+ min_init_delay_(kMinInitDelay), |
+ background_task_runner_(base::CreateSequencedTaskRunnerWithTraits( |
+ {base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN, |
+ base::WithBaseSyncPrimitives(), base::TaskPriority::BACKGROUND})) { |
+ DETACH_FROM_SEQUENCE(sequence_checker_); |
} |
RLZTracker::~RLZTracker() { |
@@ -186,7 +193,6 @@ void RLZTracker::SetDelegate(std::unique_ptr<RLZTrackerDelegate> delegate) { |
DCHECK(delegate); |
DCHECK(!delegate_); |
delegate_ = std::move(delegate); |
- worker_pool_token_ = delegate_->GetBlockingPool()->GetSequenceToken(); |
} |
// static |
@@ -264,12 +270,13 @@ void RLZTracker::ScheduleDelayedInit(base::TimeDelta delay) { |
DCHECK(delegate_) << "RLZTracker used before initialization"; |
// The RLZTracker is a singleton object that outlives any runnable tasks |
// that will be queued up. |
- delegate_->GetBlockingPool()->PostDelayedSequencedWorkerTask( |
- worker_pool_token_, FROM_HERE, |
- base::Bind(&RLZTracker::DelayedInit, base::Unretained(this)), delay); |
+ background_task_runner_->PostDelayedTask( |
+ FROM_HERE, base::Bind(&RLZTracker::DelayedInit, base::Unretained(this)), |
+ delay); |
} |
void RLZTracker::DelayedInit() { |
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
DCHECK(delegate_) << "RLZTracker used before initialization"; |
bool schedule_ping = false; |
@@ -302,13 +309,12 @@ void RLZTracker::DelayedInit() { |
void RLZTracker::ScheduleFinancialPing() { |
DCHECK(delegate_) << "RLZTracker used before initialization"; |
- delegate_->GetBlockingPool()->PostSequencedWorkerTaskWithShutdownBehavior( |
- worker_pool_token_, FROM_HERE, |
- base::Bind(&RLZTracker::PingNowImpl, base::Unretained(this)), |
- base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); |
+ background_task_runner_->PostTask( |
+ FROM_HERE, base::Bind(&RLZTracker::PingNowImpl, base::Unretained(this))); |
} |
void RLZTracker::PingNowImpl() { |
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
DCHECK(delegate_) << "RLZTracker used before initialization"; |
TRACE_EVENT0("RLZ", "RLZTracker::PingNowImpl"); |
base::string16 lang; |
@@ -368,6 +374,8 @@ bool RLZTracker::RecordProductEventImpl(rlz_lib::Product product, |
if (ScheduleRecordProductEvent(product, point, event_id)) |
return true; |
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
+ |
bool ret = rlz_lib::RecordProductEvent(product, point, event_id); |
// If chrome has been reactivated, record the event for this brand as well. |
@@ -386,12 +394,9 @@ bool RLZTracker::ScheduleRecordProductEvent(rlz_lib::Product product, |
if (!delegate_->IsOnUIThread()) |
return false; |
- delegate_->GetBlockingPool()->PostSequencedWorkerTaskWithShutdownBehavior( |
- worker_pool_token_, FROM_HERE, |
- base::Bind(base::IgnoreResult(&RLZTracker::RecordProductEvent), product, |
- point, event_id), |
- base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); |
- |
+ background_task_runner_->PostTask( |
+ FROM_HERE, base::Bind(base::IgnoreResult(&RLZTracker::RecordProductEvent), |
+ product, point, event_id)); |
return true; |
} |
@@ -402,24 +407,26 @@ void RLZTracker::RecordFirstSearch(rlz_lib::AccessPoint point) { |
if (ScheduleRecordFirstSearch(point)) |
return; |
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
+ |
bool* record_used = GetAccessPointRecord(point); |
// Try to record event now, else set the flag to try later when we |
// attempt the ping. |
- if (!RecordProductEvent(rlz_lib::CHROME, point, rlz_lib::FIRST_SEARCH)) |
+ if (!RecordProductEvent(rlz_lib::CHROME, point, rlz_lib::FIRST_SEARCH)) { |
*record_used = true; |
- else if (send_ping_immediately_ && point == ChromeOmnibox()) |
+ } else if (send_ping_immediately_ && point == ChromeOmnibox()) { |
ScheduleDelayedInit(base::TimeDelta()); |
+ } |
} |
bool RLZTracker::ScheduleRecordFirstSearch(rlz_lib::AccessPoint point) { |
DCHECK(delegate_) << "RLZTracker used before initialization"; |
if (!delegate_->IsOnUIThread()) |
return false; |
- delegate_->GetBlockingPool()->PostSequencedWorkerTaskWithShutdownBehavior( |
- worker_pool_token_, FROM_HERE, |
- base::Bind(&RLZTracker::RecordFirstSearch, base::Unretained(this), point), |
- base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); |
+ background_task_runner_->PostTask(FROM_HERE, |
+ base::Bind(&RLZTracker::RecordFirstSearch, |
+ base::Unretained(this), point)); |
return true; |
} |
@@ -489,6 +496,8 @@ bool RLZTracker::GetAccessPointRlzImpl(rlz_lib::AccessPoint point, |
if (!rlz_lib::GetAccessPointRlz(point, str_rlz, rlz_lib::kMaxRlzLength)) |
return false; |
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
+ |
base::string16 rlz_local(base::ASCIIToUTF16(str_rlz)); |
if (rlz) |
*rlz = rlz_local; |
@@ -504,11 +513,9 @@ bool RLZTracker::ScheduleGetAccessPointRlz(rlz_lib::AccessPoint point) { |
return false; |
base::string16* not_used = nullptr; |
- delegate_->GetBlockingPool()->PostSequencedWorkerTaskWithShutdownBehavior( |
- worker_pool_token_, FROM_HERE, |
- base::Bind(base::IgnoreResult(&RLZTracker::GetAccessPointRlz), point, |
- not_used), |
- base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); |
+ background_task_runner_->PostTask( |
+ FROM_HERE, base::Bind(base::IgnoreResult(&RLZTracker::GetAccessPointRlz), |
+ point, not_used)); |
return true; |
} |
@@ -524,6 +531,8 @@ void RLZTracker::ClearRlzStateImpl() { |
DCHECK(delegate_) << "RLZTracker used before initialization"; |
if (ScheduleClearRlzState()) |
return; |
+ |
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); |
rlz_lib::ClearAllProductEvents(rlz_lib::CHROME); |
} |
@@ -532,10 +541,9 @@ bool RLZTracker::ScheduleClearRlzState() { |
if (!delegate_->IsOnUIThread()) |
return false; |
- delegate_->GetBlockingPool()->PostSequencedWorkerTaskWithShutdownBehavior( |
- worker_pool_token_, FROM_HERE, |
- base::Bind(&RLZTracker::ClearRlzStateImpl, base::Unretained(this)), |
- base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); |
+ background_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::Bind(&RLZTracker::ClearRlzStateImpl, base::Unretained(this))); |
return true; |
} |
#endif |