summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/rlz/rlz.cc53
-rw-r--r--chrome/browser/rlz/rlz.h15
-rw-r--r--chrome/browser/rlz/rlz_unittest.cc42
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;