Commit 59f994ca authored by rogerta@chromium.org's avatar rogerta@chromium.org

After a successful ping of the RLZ server, make sure to update the cached

RLZ strings for the omnibox and home page access points instead of just
invalidating, so that the first time the code tries to use the strings after
the ping they are valid.

BUG=None
TEST=Install chrome.  Chrome will start automatically, do not stop it.
Wait for the RLZ ping to be sent.  Perform a search with the omnibox
and make sure an rlz= CGI parameter is present.  Visit the home page and
make the request contains an X-Rlz-String HTTP header.
To perform these tests, install an official chrome build with a non-organic
brand code.

Review URL: http://codereview.chromium.org/7980013

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@102321 0039d316-1c4b-4281-b951-d872f2087c98
parent fab6ffba
...@@ -246,7 +246,7 @@ void _cdecl RLZTracker::PingNow(void* arg) { ...@@ -246,7 +246,7 @@ void _cdecl RLZTracker::PingNow(void* arg) {
} }
void RLZTracker::PingNowImpl() { void RLZTracker::PingNowImpl() {
// Needs to be evaluated. See http://crbug.com/62328. // This is the entry point of a background thread, so I/O is allowed.
base::ThreadRestrictions::ScopedAllowIO allow_io; base::ThreadRestrictions::ScopedAllowIO allow_io;
std::wstring lang; std::wstring lang;
...@@ -259,8 +259,15 @@ void RLZTracker::PingNowImpl() { ...@@ -259,8 +259,15 @@ void RLZTracker::PingNowImpl() {
GoogleUpdateSettings::GetReferral(&referral); GoogleUpdateSettings::GetReferral(&referral);
if (SendFinancialPing(brand, lang, referral, is_organic(brand))) { if (SendFinancialPing(brand, lang, referral, is_organic(brand))) {
GoogleUpdateSettings::ClearReferral(); GoogleUpdateSettings::ClearReferral();
base::AutoLock lock(cache_lock_);
rlz_cache_.clear(); {
base::AutoLock lock(cache_lock_);
rlz_cache_.clear();
}
// Prime the RLZ cache for the access points we are interested in.
GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, NULL);
GetAccessPointRlz(rlz_lib::CHROME_HOME_PAGE, NULL);
} }
} }
...@@ -378,7 +385,7 @@ bool RLZTracker::GetAccessPointRlzImpl(rlz_lib::AccessPoint point, ...@@ -378,7 +385,7 @@ bool RLZTracker::GetAccessPointRlzImpl(rlz_lib::AccessPoint point,
} }
bool RLZTracker::ScheduleGetAccessPointRlz(rlz_lib::AccessPoint point) { bool RLZTracker::ScheduleGetAccessPointRlz(rlz_lib::AccessPoint point) {
if (BrowserThread::CurrentlyOn(BrowserThread::FILE)) if (!BrowserThread::CurrentlyOn(BrowserThread::UI))
return false; return false;
std::wstring* not_used = NULL; std::wstring* not_used = NULL;
......
...@@ -37,6 +37,8 @@ const wchar_t kRlzTempHklm[] = L"rlz_hklm"; ...@@ -37,6 +37,8 @@ const wchar_t kRlzTempHklm[] = L"rlz_hklm";
// Dummy RLZ string for the access points. // Dummy RLZ string for the access points.
const char kOmniboxRlzString[] = "test_omnibox"; const char kOmniboxRlzString[] = "test_omnibox";
const char kHomepageRlzString[] = "test_homepage"; const char kHomepageRlzString[] = "test_homepage";
const char kNewOmniboxRlzString[] = "new_omnibox";
const char kNewHomepageRlzString[] = "new_homepage";
// Some helper macros to test it a string contains/does not contain a substring. // Some helper macros to test it a string contains/does not contain a substring.
...@@ -81,7 +83,7 @@ class TestRLZTracker : public RLZTracker { ...@@ -81,7 +83,7 @@ class TestRLZTracker : public RLZTracker {
using RLZTracker::DelayedInit; using RLZTracker::DelayedInit;
using RLZTracker::Observe; using RLZTracker::Observe;
TestRLZTracker() : pingnow_called_(false), assume_io_thread_(false) { TestRLZTracker() : pingnow_called_(false), assume_not_ui_thread_(false) {
set_tracker(this); set_tracker(this);
} }
...@@ -93,12 +95,8 @@ class TestRLZTracker : public RLZTracker { ...@@ -93,12 +95,8 @@ class TestRLZTracker : public RLZTracker {
return pingnow_called_; return pingnow_called_;
} }
bool assume_io_thread() const { void set_assume_not_ui_thread(bool assume_not_ui_thread) {
return assume_io_thread_; assume_not_ui_thread_ = assume_not_ui_thread;
}
void set_assume_io_thread(bool assume_io_thread) {
assume_io_thread_ = assume_io_thread;
} }
private: private:
...@@ -114,7 +112,7 @@ class TestRLZTracker : public RLZTracker { ...@@ -114,7 +112,7 @@ class TestRLZTracker : public RLZTracker {
} }
virtual bool ScheduleGetAccessPointRlz(rlz_lib::AccessPoint point) OVERRIDE { virtual bool ScheduleGetAccessPointRlz(rlz_lib::AccessPoint point) OVERRIDE {
return !assume_io_thread_; return !assume_not_ui_thread_;
} }
virtual bool SendFinancialPing(const std::wstring& brand, virtual bool SendFinancialPing(const std::wstring& brand,
...@@ -123,11 +121,17 @@ class TestRLZTracker : public RLZTracker { ...@@ -123,11 +121,17 @@ class TestRLZTracker : public RLZTracker {
bool exclude_id) OVERRIDE { bool exclude_id) OVERRIDE {
// Don't ping the server during tests. // Don't ping the server during tests.
pingnow_called_ = true; pingnow_called_ = true;
// Set new access points RLZ string, like the actual server ping would have
// done.
rlz_lib::SetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, kNewOmniboxRlzString);
rlz_lib::SetAccessPointRlz(rlz_lib::CHROME_HOME_PAGE,
kNewHomepageRlzString);
return true; return true;
} }
bool pingnow_called_; bool pingnow_called_;
bool assume_io_thread_; bool assume_not_ui_thread_;
DISALLOW_COPY_AND_ASSIGN(TestRLZTracker); DISALLOW_COPY_AND_ASSIGN(TestRLZTracker);
}; };
...@@ -465,7 +469,7 @@ TEST_F(RlzLibTest, GetAccessPointRlzOnIoThread) { ...@@ -465,7 +469,7 @@ TEST_F(RlzLibTest, GetAccessPointRlzOnIoThread) {
std::wstring rlz; std::wstring rlz;
tracker_.set_assume_io_thread(true); tracker_.set_assume_not_ui_thread(true);
EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz));
EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str()); EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str());
} }
...@@ -476,7 +480,7 @@ TEST_F(RlzLibTest, GetAccessPointRlzNotOnIoThread) { ...@@ -476,7 +480,7 @@ TEST_F(RlzLibTest, GetAccessPointRlzNotOnIoThread) {
std::wstring rlz; std::wstring rlz;
tracker_.set_assume_io_thread(false); tracker_.set_assume_not_ui_thread(false);
EXPECT_FALSE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); EXPECT_FALSE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz));
} }
...@@ -486,41 +490,54 @@ TEST_F(RlzLibTest, GetAccessPointRlzIsCached) { ...@@ -486,41 +490,54 @@ TEST_F(RlzLibTest, GetAccessPointRlzIsCached) {
std::wstring rlz; std::wstring rlz;
tracker_.set_assume_io_thread(false); tracker_.set_assume_not_ui_thread(false);
EXPECT_FALSE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); EXPECT_FALSE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz));
tracker_.set_assume_io_thread(true); tracker_.set_assume_not_ui_thread(true);
EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz));
EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str()); EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str());
tracker_.set_assume_io_thread(false); tracker_.set_assume_not_ui_thread(false);
EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz));
EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str()); EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str());
} }
TEST_F(RlzLibTest, PingInvalidatesRlzCache) { TEST_F(RlzLibTest, PingUpdatesRlzCache) {
// Set dummy RLZ string. // Set dummy RLZ string.
rlz_lib::SetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, kOmniboxRlzString); rlz_lib::SetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, kOmniboxRlzString);
rlz_lib::SetAccessPointRlz(rlz_lib::CHROME_HOME_PAGE, kHomepageRlzString);
std::wstring rlz; std::wstring rlz;
// Prime the cache. // Prime the cache.
tracker_.set_assume_io_thread(true); tracker_.set_assume_not_ui_thread(true);
EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz));
EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str()); EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str());
EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_HOME_PAGE, &rlz));
EXPECT_STREQ(kHomepageRlzString, WideToUTF8(rlz).c_str());
// Make sure cache is valid. // Make sure cache is valid.
tracker_.set_assume_io_thread(false); tracker_.set_assume_not_ui_thread(false);
EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz));
EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str()); EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str());
EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_HOME_PAGE, &rlz));
EXPECT_STREQ(kHomepageRlzString, WideToUTF8(rlz).c_str());
// Perform ping. // Perform ping.
tracker_.set_assume_not_ui_thread(true);
RLZTracker::InitRlzDelayed(true, 20, true, true); RLZTracker::InitRlzDelayed(true, 20, true, true);
InvokeDelayedInit(); InvokeDelayedInit();
ExpectRlzPingSent(true); ExpectRlzPingSent(true);
// Make sure cache is now invalid. // Make sure cache is now updated.
EXPECT_FALSE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); tracker_.set_assume_not_ui_thread(false);
EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz));
EXPECT_STREQ(kNewOmniboxRlzString, WideToUTF8(rlz).c_str());
EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_HOME_PAGE, &rlz));
EXPECT_STREQ(kNewHomepageRlzString, WideToUTF8(rlz).c_str());
} }
TEST_F(RlzLibTest, ObserveHandlesBadArgs) { TEST_F(RlzLibTest, ObserveHandlesBadArgs) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment