diff options
Diffstat (limited to 'chrome/browser')
-rw-r--r-- | chrome/browser/rlz/rlz.cc | 53 | ||||
-rw-r--r-- | chrome/browser/rlz/rlz.h | 15 | ||||
-rw-r--r-- | chrome/browser/rlz/rlz_unittest.cc | 42 |
3 files changed, 21 insertions, 89 deletions
diff --git a/chrome/browser/rlz/rlz.cc b/chrome/browser/rlz/rlz.cc index 7005e32..6032dd9 100644 --- a/chrome/browser/rlz/rlz.cc +++ b/chrome/browser/rlz/rlz.cc @@ -26,10 +26,6 @@ #include "content/public/browser/notification_service.h" #include "net/http/http_util.h" -#if defined(OS_CHROMEOS) -#include "base/threading/sequenced_worker_pool.h" -#endif - #if defined(OS_WIN) #include "chrome/installer/util/google_update_settings.h" #else @@ -56,8 +52,6 @@ using content::NavigationEntry; namespace { -const char kRlzThreadName[] = "RLZ_thread"; - bool IsBrandOrganic(const std::string& brand) { return brand.empty() || google_util::IsOrganic(brand); } @@ -177,9 +171,6 @@ RLZTracker::RLZTracker() is_google_default_search_(false), is_google_homepage_(false), is_google_in_startpages_(false), - rlz_thread_(kRlzThreadName), - blocking_task_runner_(NULL), - url_request_context_(NULL), already_ran_(false), omnibox_used_(false), homepage_used_(false) { @@ -208,9 +199,6 @@ bool RLZTracker::Init(bool first_run, is_google_homepage_ = is_google_homepage; is_google_in_startpages_ = is_google_in_startpages; - if (!InitWorkers()) - return false; - // 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. @@ -246,7 +234,7 @@ bool RLZTracker::Init(bool first_run, content::NotificationService::AllSources()); } - url_request_context_ = g_browser_process->system_request_context(); + rlz_lib::SetURLRequestContext(g_browser_process->system_request_context()); ScheduleDelayedInit(delay); return true; @@ -255,35 +243,14 @@ bool RLZTracker::Init(bool first_run, void RLZTracker::ScheduleDelayedInit(int delay) { // The RLZTracker is a singleton object that outlives any runnable tasks // that will be queued up. - blocking_task_runner_->PostDelayedTask( + BrowserThread::GetBlockingPool()->PostDelayedTask( FROM_HERE, base::Bind(&RLZTracker::DelayedInit, base::Unretained(this)), base::TimeDelta::FromMilliseconds(delay)); } -bool RLZTracker::InitWorkers() { - base::Thread::Options options; - options.message_loop_type = MessageLoop::TYPE_IO; - if (!rlz_thread_.StartWithOptions(options)) - return false; - blocking_task_runner_ = rlz_thread_.message_loop_proxy(); - -#if defined(OS_CHROMEOS) - base::SequencedWorkerPool* worker_pool = - content::BrowserThread::GetBlockingPool(); - if (!worker_pool) - return false; - rlz_lib::SetIOTaskRunner( - worker_pool->GetSequencedTaskRunnerWithShutdownBehavior( - worker_pool->GetSequenceToken(), - base::SequencedWorkerPool::BLOCK_SHUTDOWN)); -#endif - return true; -} - void RLZTracker::DelayedInit() { - if (!already_ran_) - rlz_lib::SetURLRequestContext(url_request_context_); + worker_pool_token_ = BrowserThread::GetBlockingPool()->GetSequenceToken(); bool schedule_ping = false; @@ -316,7 +283,8 @@ void RLZTracker::DelayedInit() { } void RLZTracker::ScheduleFinancialPing() { - blocking_task_runner_->PostTask( + BrowserThread::GetBlockingPool()->PostSequencedWorkerTask( + worker_pool_token_, FROM_HERE, base::Bind(&RLZTracker::PingNowImpl, base::Unretained(this))); } @@ -421,12 +389,13 @@ bool RLZTracker::ScheduleRecordProductEvent(rlz_lib::Product product, rlz_lib::Event event_id) { if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) return false; - if (!blocking_task_runner_) { + if (!already_ran_) { LOG(ERROR) << "Attempted recording RLZ event before RLZ init."; return true; } - blocking_task_runner_->PostTask( + BrowserThread::GetBlockingPool()->PostSequencedWorkerTask( + worker_pool_token_, FROM_HERE, base::Bind(base::IgnoreResult(&RLZTracker::RecordProductEvent), product, point, event_id)); @@ -454,7 +423,8 @@ void RLZTracker::RecordFirstSearch(rlz_lib::AccessPoint point) { bool RLZTracker::ScheduleRecordFirstSearch(rlz_lib::AccessPoint point) { if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) return false; - blocking_task_runner_->PostTask( + BrowserThread::GetBlockingPool()->PostSequencedWorkerTask( + worker_pool_token_, FROM_HERE, base::Bind(&RLZTracker::RecordFirstSearch, base::Unretained(this), point)); @@ -522,7 +492,8 @@ bool RLZTracker::ScheduleGetAccessPointRlz(rlz_lib::AccessPoint point) { return false; string16* not_used = NULL; - blocking_task_runner_->PostTask( + BrowserThread::GetBlockingPool()->PostSequencedWorkerTask( + worker_pool_token_, FROM_HERE, base::Bind(base::IgnoreResult(&RLZTracker::GetAccessPointRlz), point, not_used)); diff --git a/chrome/browser/rlz/rlz.h b/chrome/browser/rlz/rlz.h index 6a1d3c2..e41b5a3 100644 --- a/chrome/browser/rlz/rlz.h +++ b/chrome/browser/rlz/rlz.h @@ -15,7 +15,7 @@ #include "base/basictypes.h" #include "base/memory/singleton.h" #include "base/string16.h" -#include "base/threading/thread.h" +#include "base/threading/sequenced_worker_pool.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" #include "rlz/lib/rlz_lib.h" @@ -113,10 +113,6 @@ class RLZTracker : public content::NotificationObserver { bool google_default_homepage, bool is_google_in_startpages); - // Initializes task runners for tasks that access RlzValueStore and perform - // disk I/O. - virtual bool InitWorkers(); - // Implementation called from RecordProductEvent() static method. bool RecordProductEventImpl(rlz_lib::Product product, rlz_lib::AccessPoint point, @@ -169,12 +165,9 @@ class RLZTracker : public content::NotificationObserver { bool is_google_homepage_; bool is_google_in_startpages_; - // Dedicated RLZ thread for accessing RlzValueStore and doing I/O. - base::Thread rlz_thread_; - - // Sequenced task runner used to post blocking tasks that access - // RlzValueStore. - base::SequencedTaskRunner* blocking_task_runner_; + // Unique sequence token so that tasks posted by RLZTracker are executed + // sequentially in the blocking pool. + base::SequencedWorkerPool::SequenceToken worker_pool_token_; // URLRequestContextGetter used by RLZ library. net::URLRequestContextGetter* url_request_context_; diff --git a/chrome/browser/rlz/rlz_unittest.cc b/chrome/browser/rlz/rlz_unittest.cc index b1ccca9..165652f 100644 --- a/chrome/browser/rlz/rlz_unittest.cc +++ b/chrome/browser/rlz/rlz_unittest.cc @@ -28,12 +28,9 @@ #include "base/test/test_reg_util_win.h" #include "base/win/registry.h" #include "rlz/win/lib/rlz_lib.h" // InitializeTempHivesForTesting -#elif defined(OS_MACOSX) || defined(OS_CHROMEOS) +#elif defined(OS_POSIX) #include "rlz/lib/rlz_value_store.h" // SetRlzStoreDirectory #endif -#if defined(OS_CHROMEOS) -#include "rlz/chromeos/lib/rlz_value_store_chromeos.h" -#endif using content::NavigationEntry; using testing::AssertionResult; @@ -119,10 +116,6 @@ class TestRLZTracker : public RLZTracker { } private: - virtual bool InitWorkers() OVERRIDE { - return true; - } - virtual void ScheduleDelayedInit(int delay) OVERRIDE { // If the delay is 0, invoke the delayed init now. Otherwise, // don't schedule anything, it will be manually called during tests. @@ -172,10 +165,6 @@ class TestRLZTracker : public RLZTracker { class RlzLibTest : public testing::Test { public: -#if defined(OS_CHROMEOS) - RlzLibTest(); -#endif - virtual void SetUp() OVERRIDE; virtual void TearDown() OVERRIDE; @@ -197,22 +186,12 @@ class RlzLibTest : public testing::Test { TestRLZTracker tracker_; #if defined(OS_WIN) RegistryOverrideManager override_manager_; -#elif defined(OS_MACOSX) || defined(OS_CHROMEOS) +#elif defined(OS_POSIX) base::ScopedTempDir temp_dir_; scoped_ptr<google_util::BrandForTesting> brand_override_; #endif -#if defined(OS_CHROMEOS) - MessageLoop loop_; - base::Thread io_thread_; -#endif }; -#if defined(OS_CHROMEOS) -RlzLibTest::RlzLibTest() - : io_thread_("RlzLibTest-io") { -} -#endif - void RlzLibTest::SetUp() { testing::Test::SetUp(); @@ -247,19 +226,11 @@ void RlzLibTest::SetUp() { // initialization performed above. override_manager_.OverrideRegistry(HKEY_LOCAL_MACHINE, kRlzTempHklm); override_manager_.OverrideRegistry(HKEY_CURRENT_USER, kRlzTempHkcu); -#elif defined(OS_MACOSX) || defined(OS_CHROMEOS) +#elif defined(OS_POSIX) ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); rlz_lib::testing::SetRlzStoreDirectory(temp_dir_.path()); #endif -#if defined(OS_CHROMEOS) - base::Thread::Options options; - options.message_loop_type = MessageLoop::TYPE_IO; - ASSERT_TRUE(io_thread_.StartWithOptions(options)); - rlz_lib::SetIOTaskRunner(io_thread_.message_loop_proxy()); - rlz_lib::RlzValueStoreChromeOS::ResetForTesting(); -#endif - // Make sure a non-organic brand code is set in the registry or the RLZTracker // is pretty much a no-op. SetMainBrand("TEST"); @@ -267,19 +238,16 @@ void RlzLibTest::SetUp() { } void RlzLibTest::TearDown() { -#if defined(OS_MACOSX) || defined(OS_CHROMEOS) +#if defined(OS_POSIX) rlz_lib::testing::SetRlzStoreDirectory(FilePath()); #endif -#if defined(OS_CHROMEOS) - io_thread_.Stop(); -#endif // defined(OS_CHROMEOS) testing::Test::TearDown(); } void RlzLibTest::SetMainBrand(const char* brand) { #if defined(OS_WIN) SetRegistryBrandValue(google_update::kRegRLZBrandField, brand); -#elif defined(OS_MACOSX) || defined(OS_CHROMEOS) +#elif defined(OS_POSIX) brand_override_.reset(new google_util::BrandForTesting(brand)); #endif std::string check_brand; |