Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2787)

Unified Diff: chrome/browser/rlz/rlz.cc

Issue 2755002: Link with RLZ library from open source repo.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/rlz/rlz.h ('k') | chrome/browser/rlz/rlz_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/rlz/rlz.cc
===================================================================
--- chrome/browser/rlz/rlz.cc (revision 49162)
+++ chrome/browser/rlz/rlz.cc (working copy)
@@ -34,10 +34,6 @@
// The maximum length of an access points RLZ in wide chars.
const DWORD kMaxRlzLength = 64;
-// The RLZ is a DLL that might not be present in the system. We load it
-// as needed but never unload it.
-volatile HMODULE rlz_dll = NULL;
-
enum {
ACCESS_VALUES_STALE, // Possibly new values available.
ACCESS_VALUES_FRESH // The cached values are current.
@@ -47,85 +43,20 @@
// decide if we need to refresh the some cached strings.
volatile int access_values_state = ACCESS_VALUES_STALE;
-extern "C" {
-typedef bool (*RecordProductEventFn)(RLZTracker::Product product,
- RLZTracker::AccessPoint point,
- RLZTracker::Event event_id,
- void* reserved);
+bool SendFinancialPing(const std::wstring& brand, const std::wstring& lang,
+ const std::wstring& referral, bool exclude_id) {
+ rlz_lib::AccessPoint points[] = {rlz_lib::CHROME_OMNIBOX,
+ rlz_lib::CHROME_HOME_PAGE,
+ rlz_lib::NO_ACCESS_POINT};
+ std::string brand_ascii(WideToASCII(brand));
+ std::string lang_ascii(WideToASCII(lang));
+ std::string referral_ascii(WideToASCII(referral));
-typedef bool (*GetAccessPointRlzFn)(RLZTracker::AccessPoint point,
- wchar_t* rlz,
- DWORD rlz_size,
- void* reserved);
-
-typedef bool (*ClearAllProductEventsFn)(RLZTracker::Product product,
- void* reserved);
-
-typedef bool (*SendFinancialPingNoDelayFn)(RLZTracker::Product product,
- RLZTracker::AccessPoint* access_points,
- const WCHAR* product_signature,
- const WCHAR* product_brand,
- const WCHAR* product_id,
- const WCHAR* product_lang,
- bool exclude_id,
- void* reserved);
-} // extern "C".
-
-RecordProductEventFn record_event = NULL;
-GetAccessPointRlzFn get_access_point = NULL;
-ClearAllProductEventsFn clear_all_events = NULL;
-SendFinancialPingNoDelayFn send_ping_no_delay = NULL;
-
-template <typename FuncT>
-FuncT WireExport(HMODULE module, const char* export_name) {
- if (!module)
- return NULL;
- void* entry_point = ::GetProcAddress(module, export_name);
- return reinterpret_cast<FuncT>(entry_point);
+ return rlz_lib::SendFinancialPing(rlz_lib::CHROME, points, "chrome",
+ brand_ascii.c_str(), referral_ascii.c_str(),
+ lang_ascii.c_str(), exclude_id, NULL, true);
}
-HMODULE LoadRLZLibraryInternal(int directory_key) {
- FilePath rlz_path;
- if (!PathService::Get(directory_key, &rlz_path))
- return NULL;
- rlz_path = rlz_path.AppendASCII("rlz.dll");
- return ::LoadLibraryW(rlz_path.value().c_str());
-}
-
-bool LoadRLZLibrary(int directory_key) {
- rlz_dll = LoadRLZLibraryInternal(directory_key);
- if (!rlz_dll) {
- // As a last resort we can try the EXE directory.
- if (directory_key != base::DIR_EXE)
- rlz_dll = LoadRLZLibraryInternal(base::DIR_EXE);
- }
- if (rlz_dll) {
- record_event =
- WireExport<RecordProductEventFn>(rlz_dll, "RecordProductEvent");
- get_access_point =
- WireExport<GetAccessPointRlzFn>(rlz_dll, "GetAccessPointRlz");
- clear_all_events =
- WireExport<ClearAllProductEventsFn>(rlz_dll, "ClearAllProductEvents");
- send_ping_no_delay =
- WireExport<SendFinancialPingNoDelayFn>(rlz_dll,
- "SendFinancialPingNoDelay");
- return (record_event && get_access_point && clear_all_events &&
- send_ping_no_delay);
- }
- return false;
-}
-
-bool SendFinancialPing(const wchar_t* brand, const wchar_t* lang,
- const wchar_t* referral, bool exclude_id) {
- RLZTracker::AccessPoint points[] = {RLZTracker::CHROME_OMNIBOX,
- RLZTracker::CHROME_HOME_PAGE,
- RLZTracker::NO_ACCESS_POINT};
- if (!send_ping_no_delay)
- return false;
- return send_ping_no_delay(RLZTracker::CHROME, points, L"chrome", brand,
- referral, lang, exclude_id, NULL);
-}
-
// This class leverages the AutocompleteEditModel notification to know when
// the user first interacted with the omnibox and set a global accordingly.
class OmniBoxUsageObserver : public NotificationObserver {
@@ -143,9 +74,9 @@
const NotificationDetails& details) {
// Try to record event now, else set the flag to try later when we
// attempt the ping.
- if (!RLZTracker::RecordProductEvent(RLZTracker::CHROME,
- RLZTracker::CHROME_OMNIBOX,
- RLZTracker::FIRST_SEARCH))
+ if (!RLZTracker::RecordProductEvent(rlz_lib::CHROME,
+ rlz_lib::CHROME_OMNIBOX,
+ rlz_lib::FIRST_SEARCH))
omnibox_used_ = true;
delete this;
}
@@ -202,8 +133,7 @@
GoogleUpdateSettings::GetBrand(&brand);
std::wstring referral;
GoogleUpdateSettings::GetReferral(&referral);
- if (SendFinancialPing(brand.c_str(), lang.c_str(), referral.c_str(),
- is_organic(brand))) {
+ if (SendFinancialPing(brand, lang, referral, is_organic(brand))) {
access_values_state = ACCESS_VALUES_STALE;
GoogleUpdateSettings::ClearReferral();
}
@@ -219,8 +149,8 @@
// This task needs to run on the UI thread.
class DelayedInitTask : public Task {
public:
- explicit DelayedInitTask(int directory_key, bool first_run)
- : directory_key_(directory_key), first_run_(first_run) {
+ explicit DelayedInitTask(bool first_run)
+ : first_run_(first_run) {
}
virtual ~DelayedInitTask() {
}
@@ -238,34 +168,32 @@
if (is_strict_organic(brand))
return;
- if (!LoadRLZLibrary(directory_key_))
- return;
// Do the initial event recording if is the first run or if we have an
// empty rlz which means we haven't got a chance to do it.
std::wstring omnibox_rlz;
- RLZTracker::GetAccessPointRlz(RLZTracker::CHROME_OMNIBOX, &omnibox_rlz);
+ RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &omnibox_rlz);
if (first_run_ || omnibox_rlz.empty()) {
// Record the installation of chrome.
- RLZTracker::RecordProductEvent(RLZTracker::CHROME,
- RLZTracker::CHROME_OMNIBOX,
- RLZTracker::INSTALL);
- RLZTracker::RecordProductEvent(RLZTracker::CHROME,
- RLZTracker::CHROME_HOME_PAGE,
- RLZTracker::INSTALL);
+ RLZTracker::RecordProductEvent(rlz_lib::CHROME,
+ rlz_lib::CHROME_OMNIBOX,
+ rlz_lib::INSTALL);
+ RLZTracker::RecordProductEvent(rlz_lib::CHROME,
+ rlz_lib::CHROME_HOME_PAGE,
+ rlz_lib::INSTALL);
// Record if google is the initial search provider.
if (IsGoogleDefaultSearch()) {
- RLZTracker::RecordProductEvent(RLZTracker::CHROME,
- RLZTracker::CHROME_OMNIBOX,
- RLZTracker::SET_TO_GOOGLE);
+ RLZTracker::RecordProductEvent(rlz_lib::CHROME,
+ rlz_lib::CHROME_OMNIBOX,
+ rlz_lib::SET_TO_GOOGLE);
}
}
// Record first user interaction with the omnibox. We call this all the
// time but the rlz lib should ingore all but the first one.
if (OmniBoxUsageObserver::used()) {
- RLZTracker::RecordProductEvent(RLZTracker::CHROME,
- RLZTracker::CHROME_OMNIBOX,
- RLZTracker::FIRST_SEARCH);
+ RLZTracker::RecordProductEvent(rlz_lib::CHROME,
+ rlz_lib::CHROME_OMNIBOX,
+ rlz_lib::FIRST_SEARCH);
}
// Schedule the daily RLZ ping.
base::Thread* thread = g_browser_process->file_thread();
@@ -312,18 +240,13 @@
return false;
}
- int directory_key_;
bool first_run_;
DISALLOW_IMPLICIT_CONSTRUCTORS(DelayedInitTask);
};
} // namespace
-bool RLZTracker::InitRlz(int directory_key) {
- return LoadRLZLibrary(directory_key);
-}
-
-bool RLZTracker::InitRlzDelayed(int directory_key, bool first_run, int delay) {
+bool RLZTracker::InitRlzDelayed(bool first_run, int delay) {
// Maximum and minimum delay we would allow to be set through master
// preferences. Somewhat arbitrary, may need to be adjusted in future.
const int kMaxDelay = 200 * 1000;
@@ -338,40 +261,40 @@
// Schedule the delayed init items.
MessageLoop::current()->PostDelayedTask(FROM_HERE,
- new DelayedInitTask(directory_key, first_run), delay);
+ new DelayedInitTask(first_run), delay);
return true;
}
-bool RLZTracker::RecordProductEvent(Product product, AccessPoint point,
- Event event) {
- return (record_event) ? record_event(product, point, event, NULL) : false;
+bool RLZTracker::RecordProductEvent(rlz_lib::Product product,
+ rlz_lib::AccessPoint point,
+ rlz_lib::Event event_id) {
+ return rlz_lib::RecordProductEvent(product, point, event_id);
}
-bool RLZTracker::ClearAllProductEvents(Product product) {
- return (clear_all_events) ? clear_all_events(product, NULL) : false;
+bool RLZTracker::ClearAllProductEvents(rlz_lib::Product product) {
+ return rlz_lib::ClearAllProductEvents(product);
}
// We implement caching of the answer of get_access_point() if the request
// is for CHROME_OMNIBOX. If we had a successful ping, then we update the
// cached value.
-bool RLZTracker::GetAccessPointRlz(AccessPoint point, std::wstring* rlz) {
+bool RLZTracker::GetAccessPointRlz(rlz_lib::AccessPoint point,
+ std::wstring* rlz) {
static std::wstring cached_ommibox_rlz;
- if (!get_access_point)
- return false;
- if ((CHROME_OMNIBOX == point) &&
+ if ((rlz_lib::CHROME_OMNIBOX == point) &&
(access_values_state == ACCESS_VALUES_FRESH)) {
*rlz = cached_ommibox_rlz;
return true;
}
- wchar_t str_rlz[kMaxRlzLength];
- if (!get_access_point(point, str_rlz, kMaxRlzLength, NULL))
+ char str_rlz[kMaxRlzLength + 1];
+ if (!rlz_lib::GetAccessPointRlz(point, str_rlz, rlz_lib::kMaxRlzLength, NULL))
return false;
- if (CHROME_OMNIBOX == point) {
+ *rlz = ASCIIToWide(std::string(str_rlz));
+ if (rlz_lib::CHROME_OMNIBOX == point) {
access_values_state = ACCESS_VALUES_FRESH;
- cached_ommibox_rlz.assign(str_rlz);
+ cached_ommibox_rlz.assign(*rlz);
}
- *rlz = str_rlz;
return true;
}
« no previous file with comments | « chrome/browser/rlz/rlz.h ('k') | chrome/browser/rlz/rlz_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698