diff options
author | thakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-26 22:29:17 +0000 |
---|---|---|
committer | thakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-26 22:29:17 +0000 |
commit | 81d9b72d22a4fc9c8569cffe49018b67b2fb7844 (patch) | |
tree | 42c661f18f0a96431269656f701bbb9d745946df /chrome/browser/rlz/rlz_unittest.cc | |
parent | c127ae44a93140bc63dd2a423f3571e651474bef (diff) | |
download | chromium_src-81d9b72d22a4fc9c8569cffe49018b67b2fb7844.zip chromium_src-81d9b72d22a4fc9c8569cffe49018b67b2fb7844.tar.gz chromium_src-81d9b72d22a4fc9c8569cffe49018b67b2fb7844.tar.bz2 |
rlz: Hook up on mac, switch to chrome's network stack on win.
This CL conceptually does several things (most of them just one line).
1. Roll RLZ 105:118
106: Fix "expression result unused" warning caused by VERIFY() use.
107: rlz: Add an implementation of PingServer() that uses chrome's net stack.
108: Implement RlzValueStoreMac.
109: Move GetMachineId() to its own file. No intended behavior change.
110: Implement GetSystemTimeAsInt64() on mac.
111: Minor cleanups.
112: Don't pay a static initializer for expected_assertion_ when it's not used.
113: Rename rlz_lib2.cc and win/lib/rlz_lib.cc to win/lib/rlz_lib_win.cc
114: mac: Implement GetMachineId().
115: mac: Implement the locking part of ScopedRlzValueStoreLock.
116: Tweaks to make the use of chrome's net stack forceable through gyp.
117: Push RLZ_NETWORK_IMPLEMENTATION_ define to dependent targets.
118: Use base::mac::ScopedNSAutorleasePool only on mac.
2. Change rlz.cpp to use the blocking pool instead of the file thread.
3. Enable on mac.
4. Switch to chrome's network stack on windows
5. Switch RlzSendFinancialPingFunction to be an AsyncExtensionFunction
that calls SendFinancialPing on a worker thread. This is required because
extension functions run with a MessageLoop, so the MessageLoop in
SendFinancialPing in rlz would trigger an assert (and making that inner
loop nestable seems like a very bad idea). This change also removes
one instance of ScopedAllowIO and fixes a TODO.
BUG=46579
TEST=
1.) Do an official chrome build
2.) Add gratuitous logging in rlz.cc and other places and check that by default:
* The channel is reported as "stable"
* The brand code is the empty string
* This brand code counts as organic install
* RLZ exits early.
3.) Create ~/Library/Google/Google\ Chrome\ Brand.plist and add e.g. the string "BRAND" for key KSBrandID, restart chrome.
* Brand code is now "BRAND" (this depends on Chrome's Info.plist not having a KSBrandID key, which has precedence. Currently our Chromes seem to never have this key.)
* A ping is scheduled, but nothing is sent.
* Use the omnibox a little, which causes product events to be recorded.
4.) Restart chrome yet again, wait a bit.
* Logging in "SendFinancialPing()" should print:
pinging http://clients1.google.com:80/tools/pso/ping?as=chrome&brand=BRAND&pid=&hl=en&events=C1F,C1S&rep=2&rlz=C1:1C1_____enUS476,C2:1C2_____enUS476&id=0926C138C2EA77A791CB450D322D0183E5A8079300000001B5
ping completed!
TBR=sky
Review URL: https://chromiumcodereview.appspot.com/9699054
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@129028 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/rlz/rlz_unittest.cc')
-rw-r--r-- | chrome/browser/rlz/rlz_unittest.cc | 69 |
1 files changed, 53 insertions, 16 deletions
diff --git a/chrome/browser/rlz/rlz_unittest.cc b/chrome/browser/rlz/rlz_unittest.cc index 33f04e3..cc19aa1 100644 --- a/chrome/browser/rlz/rlz_unittest.cc +++ b/chrome/browser/rlz/rlz_unittest.cc @@ -7,9 +7,8 @@ #include "base/memory/scoped_ptr.h" #include "base/stringprintf.h" #include "base/path_service.h" -#include "base/test/test_reg_util_win.h" +#include "base/scoped_temp_dir.h" #include "base/utf_string_conversions.h" -#include "base/win/registry.h" #include "chrome/browser/autocomplete/autocomplete.h" #include "chrome/browser/google/google_util.h" #include "chrome/browser/profiles/profile.h" @@ -21,21 +20,33 @@ #include "content/public/browser/notification_service.h" #include "content/public/browser/notification_details.h" #include "content/public/browser/notification_source.h" -#include "rlz/win/lib/rlz_lib.h" // InitializeTempHivesForTesting #include "testing/gtest/include/gtest/gtest.h" -using base::win::RegKey; +#if defined(OS_WIN) +#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) +#include "rlz/lib/rlz_value_store.h" // SetRlzStoreDirectory +#endif + using content::NavigationEntry; -using registry_util::RegistryOverrideManager; using testing::AssertionResult; using testing::AssertionSuccess; using testing::AssertionFailure; +#if defined(OS_WIN) +using base::win::RegKey; +using registry_util::RegistryOverrideManager; +#endif + namespace { +#if defined(OS_WIN) // Registry path to overridden hive. const wchar_t kRlzTempHkcu[] = L"rlz_hkcu"; const wchar_t kRlzTempHklm[] = L"rlz_hklm"; +#endif // Dummy RLZ string for the access points. const char kOmniboxRlzString[] = "test_omnibox"; @@ -146,7 +157,9 @@ class RlzLibTest : public testing::Test { protected: void SetMainBrand(const char* brand); void SetReactivationBrand(const char* brand); +#if defined(OS_WIN) void SetRegistryBrandValue(const wchar_t* name, const char* brand); +#endif void SimulateOmniboxUsage(); void SimulateHomepageUsage(); @@ -157,12 +170,18 @@ class RlzLibTest : public testing::Test { void ExpectReactivationRlzPingSent(bool expected); TestRLZTracker tracker_; +#if defined(OS_WIN) RegistryOverrideManager override_manager_; +#elif defined(OS_MACOSX) + ScopedTempDir temp_dir_; + scoped_ptr<google_util::BrandForTesting> brand_override_; +#endif }; void RlzLibTest::SetUp() { testing::Test::SetUp(); +#if defined(OS_WIN) // Before overriding HKLM for the tests, we need to set it up correctly // so that the rlz_lib calls work. This needs to be done before we do the // override. @@ -193,6 +212,10 @@ void RlzLibTest::SetUp() { // initialization performed above. override_manager_.OverrideRegistry(HKEY_LOCAL_MACHINE, kRlzTempHklm); override_manager_.OverrideRegistry(HKEY_CURRENT_USER, kRlzTempHkcu); +#elif defined(OS_MACOSX) + ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); + rlz_lib::testing::SetRlzStoreDirectory(temp_dir_.path()); +#endif // Make sure a non-organic brand code is set in the registry or the RLZTracker // is pretty much a no-op. @@ -201,23 +224,34 @@ void RlzLibTest::SetUp() { } void RlzLibTest::TearDown() { +#if defined(OS_MACOSX) + rlz_lib::testing::SetRlzStoreDirectory(FilePath()); +#endif testing::Test::TearDown(); } void RlzLibTest::SetMainBrand(const char* brand) { +#if defined(OS_WIN) SetRegistryBrandValue(google_update::kRegRLZBrandField, brand); +#elif defined(OS_MACOSX) + brand_override_.reset(new google_util::BrandForTesting(brand)); +#endif std::string check_brand; google_util::GetBrand(&check_brand); EXPECT_EQ(brand, check_brand); } void RlzLibTest::SetReactivationBrand(const char* brand) { + // TODO(thakis): Reactivation doesn't exist on Mac yet. +#if defined(OS_WIN) SetRegistryBrandValue(google_update::kRegRLZReactivationBrandField, brand); std::string check_brand; google_util::GetReactivationBrand(&check_brand); EXPECT_EQ(brand, check_brand); +#endif } +#if defined(OS_WIN) void RlzLibTest::SetRegistryBrandValue(const wchar_t* name, const char* brand) { BrowserDistribution* dist = BrowserDistribution::GetDistribution(); @@ -227,10 +261,11 @@ void RlzLibTest::SetRegistryBrandValue(const wchar_t* name, LONG result = key.DeleteValue(name); ASSERT_TRUE(ERROR_SUCCESS == result || ERROR_FILE_NOT_FOUND == result); } else { - string16 brand16 = ASCIIToWide(brand); + string16 brand16 = ASCIIToUTF16(brand); ASSERT_EQ(ERROR_SUCCESS, key.WriteValue(name, brand16.c_str())); } } +#endif void RlzLibTest::SimulateOmniboxUsage() { tracker_.Observe(chrome::NOTIFICATION_OMNIBOX_OPENED_URL, @@ -513,7 +548,7 @@ TEST_F(RlzLibTest, GetAccessPointRlzOnIoThread) { tracker_.set_assume_not_ui_thread(true); EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); - EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str()); + EXPECT_STREQ(kOmniboxRlzString, UTF16ToUTF8(rlz).c_str()); } TEST_F(RlzLibTest, GetAccessPointRlzNotOnIoThread) { @@ -537,11 +572,11 @@ TEST_F(RlzLibTest, GetAccessPointRlzIsCached) { tracker_.set_assume_not_ui_thread(true); EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); - EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str()); + EXPECT_STREQ(kOmniboxRlzString, UTF16ToUTF8(rlz).c_str()); tracker_.set_assume_not_ui_thread(false); EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); - EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str()); + EXPECT_STREQ(kOmniboxRlzString, UTF16ToUTF8(rlz).c_str()); } TEST_F(RlzLibTest, PingUpdatesRlzCache) { @@ -555,17 +590,17 @@ TEST_F(RlzLibTest, PingUpdatesRlzCache) { tracker_.set_assume_not_ui_thread(true); EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); - EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str()); + EXPECT_STREQ(kOmniboxRlzString, UTF16ToUTF8(rlz).c_str()); EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_HOME_PAGE, &rlz)); - EXPECT_STREQ(kHomepageRlzString, WideToUTF8(rlz).c_str()); + EXPECT_STREQ(kHomepageRlzString, UTF16ToUTF8(rlz).c_str()); // Make sure cache is valid. tracker_.set_assume_not_ui_thread(false); EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); - EXPECT_STREQ(kOmniboxRlzString, WideToUTF8(rlz).c_str()); + EXPECT_STREQ(kOmniboxRlzString, UTF16ToUTF8(rlz).c_str()); EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_HOME_PAGE, &rlz)); - EXPECT_STREQ(kHomepageRlzString, WideToUTF8(rlz).c_str()); + EXPECT_STREQ(kHomepageRlzString, UTF16ToUTF8(rlz).c_str()); // Perform ping. tracker_.set_assume_not_ui_thread(true); @@ -577,9 +612,9 @@ TEST_F(RlzLibTest, PingUpdatesRlzCache) { tracker_.set_assume_not_ui_thread(false); EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz)); - EXPECT_STREQ(kNewOmniboxRlzString, WideToUTF8(rlz).c_str()); + EXPECT_STREQ(kNewOmniboxRlzString, UTF16ToUTF8(rlz).c_str()); EXPECT_TRUE(RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_HOME_PAGE, &rlz)); - EXPECT_STREQ(kNewHomepageRlzString, WideToUTF8(rlz).c_str()); + EXPECT_STREQ(kNewHomepageRlzString, UTF16ToUTF8(rlz).c_str()); } TEST_F(RlzLibTest, ObserveHandlesBadArgs) { @@ -594,6 +629,8 @@ TEST_F(RlzLibTest, ObserveHandlesBadArgs) { content::Details<NavigationEntry>(entry.get())); } +// TODO(thakis): Reactivation doesn't exist on Mac yet. +#if defined(OS_WIN) TEST_F(RlzLibTest, ReactivationNonOrganicNonOrganic) { SetReactivationBrand("REAC"); @@ -636,4 +673,4 @@ TEST_F(RlzLibTest, ReactivationOrganicOrganic) { ExpectRlzPingSent(false); ExpectReactivationRlzPingSent(false); } - +#endif // defined(OS_WIN) |