15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Key and value names of the location of the RLZ shared state.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "rlz/lib/lib_values.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "rlz/lib/assert.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace rlz_lib {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Ping information.
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// rep=2: includes the new stateful events.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kProtocolCgiArgument[] = "rep=2";
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kEventsCgiVariable[]         = "events";
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kStatefulEventsCgiVariable[] = "stateful-events";
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kEventsCgiSeparator          = ',';
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kRlzCgiVariable[]  = "rlz";
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kRlzCgiSeparator[] = ",";
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kRlzCgiIndicator[] = ":";
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kProductSignatureCgiVariable[] = "as";
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kProductBrandCgiVariable[]     = "brand";
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kProductLanguageCgiVariable[]  = "hl";
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kProductIdCgiVariable[] = "pid";
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kDccCgiVariable[] = "dcc";
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kRlsCgiVariable[] = "rls";
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kMachineIdCgiVariable[] = "id";
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSetDccResponseVariable[] = "set_dcc";
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Financial server information.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kFinancialPingPath[] = "/tools/pso/ping";
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kFinancialServer[]   = "clients1.google.com";
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kFinancialPort = 80;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Ping times in 100-nanosecond intervals.
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int64 kEventsPingInterval = 24LL * 3600LL * 10000000LL;  // 1 day
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int64 kNoEventsPingInterval = kEventsPingInterval * 7LL;  // 1 week
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kFinancialPingUserAgent[] = "Mozilla/4.0 (compatible; Win32)";
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* kFinancialPingResponseObjects[] = { "text/*", NULL };
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// AccessPoint and Event names.
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* GetAccessPointName(AccessPoint point) {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (point) {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case NO_ACCESS_POINT:               return "";
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case IE_DEFAULT_SEARCH:             return "I7";
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case IE_HOME_PAGE:                  return "W1";
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case IETB_SEARCH_BOX:               return "T4";
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case QUICK_SEARCH_BOX:              return "Q1";
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case GD_DESKBAND:                   return "D1";
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case GD_SEARCH_GADGET:              return "D2";
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case GD_WEB_SERVER:                 return "D3";
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case GD_OUTLOOK:                    return "D4";
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case CHROME_OMNIBOX:                return "C1";
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case CHROME_HOME_PAGE:              return "C2";
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case FFTB2_BOX:                     return "B2";
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case FFTB3_BOX:                     return "B3";
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PINYIN_IME_BHO:                return "N1";
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case IGOOGLE_WEBPAGE:               return "G1";
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case MOBILE_IDLE_SCREEN_BLACKBERRY: return "H1";
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case MOBILE_IDLE_SCREEN_WINMOB:     return "H2";
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case MOBILE_IDLE_SCREEN_SYMBIAN:    return "H3";
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case FF_HOME_PAGE:                  return "R0";
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case FF_SEARCH_BOX:                 return "R1";
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case IE_BROWSED_PAGE:               return "R2";
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case QSB_WIN_BOX:                   return "R3";
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case WEBAPPS_CALENDAR:              return "R4";
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case WEBAPPS_DOCS:                  return "R5";
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case WEBAPPS_GMAIL:                 return "R6";
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case IETB_LINKDOCTOR:               return "R7";
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case FFTB_LINKDOCTOR:               return "R8";
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case IETB7_SEARCH_BOX:              return "T7";
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case TB8_SEARCH_BOX:                return "T8";
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case CHROME_FRAME:                  return "C3";
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PARTNER_AP_1:                  return "V1";
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PARTNER_AP_2:                  return "V2";
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PARTNER_AP_3:                  return "V3";
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PARTNER_AP_4:                  return "V4";
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PARTNER_AP_5:                  return "V5";
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case CHROME_MAC_OMNIBOX:            return "C5";
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case CHROME_MAC_HOME_PAGE:          return "C6";
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case CHROMEOS_OMNIBOX:              return "CA";
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case CHROMEOS_HOME_PAGE:            return "CB";
100c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  case CHROMEOS_APP_LIST:             return "CC";
101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  case CHROME_IOS_OMNIBOX_TABLET:     return "C9";
102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  case CHROME_IOS_OMNIBOX_MOBILE:     return "CD";
103c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  case CHROME_APP_LIST:               return "C7";
104c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  case CHROME_MAC_APP_LIST:           return "C8";
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case UNDEFINED_AP_Q:                return "RQ";
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case UNDEFINED_AP_R:                return "RR";
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case UNDEFINED_AP_S:                return "RS";
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case UNDEFINED_AP_T:                return "RT";
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case UNDEFINED_AP_U:                return "RU";
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case UNDEFINED_AP_V:                return "RV";
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case UNDEFINED_AP_W:                return "RW";
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case UNDEFINED_AP_X:                return "RX";
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case UNDEFINED_AP_Y:                return "RY";
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case UNDEFINED_AP_Z:                return "RZ";
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PACK_AP0:                      return "U0";
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PACK_AP1:                      return "U1";
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PACK_AP2:                      return "U2";
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PACK_AP3:                      return "U3";
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PACK_AP4:                      return "U4";
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PACK_AP5:                      return "U5";
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PACK_AP6:                      return "U6";
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PACK_AP7:                      return "U7";
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PACK_AP8:                      return "U8";
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PACK_AP9:                      return "U9";
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PACK_AP10:                     return "UA";
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PACK_AP11:                     return "UB";
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PACK_AP12:                     return "UC";
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PACK_AP13:                     return "UD";
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case LAST_ACCESS_POINT:             ;  // Fall through.
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_STRING("GetAccessPointName: Unknown Access Point");
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GetAccessPointFromName(const char* name, AccessPoint* point) {
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!point) {
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_STRING("GetAccessPointFromName: point is NULL");
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  *point = NO_ACCESS_POINT;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!name)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = NO_ACCESS_POINT; i < LAST_ACCESS_POINT; i++)
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (strcmp(name, GetAccessPointName(static_cast<AccessPoint>(i))) == 0) {
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *point = static_cast<AccessPoint>(i);
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return true;
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* GetEventName(Event event) {
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (event) {
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case INVALID_EVENT: return "";
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case INSTALL:       return "I";
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case SET_TO_GOOGLE: return "S";
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case FIRST_SEARCH:  return "F";
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case REPORT_RLS:    return "R";
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case ACTIVATE:      return "A";
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case LAST_EVENT:    ;  // Fall through.
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_STRING("GetPointName: Unknown Event");
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return NULL;
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool GetEventFromName(const char* name, Event* event) {
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!event) {
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ASSERT_STRING("GetEventFromName: event is NULL");
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  *event = INVALID_EVENT;
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!name)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = INVALID_EVENT; i < LAST_EVENT; i++)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (strcmp(name, GetEventName(static_cast<Event>(i))) == 0) {
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      *event = static_cast<Event>(i);
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return true;
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* GetProductName(Product product) {
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (product) {
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case IE_TOOLBAR:       return "T";
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case TOOLBAR_NOTIFIER: return "P";
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PACK:             return "U";
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case DESKTOP:          return "D";
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case CHROME:           return "C";
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case FF_TOOLBAR:       return "B";
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case QSB_WIN:          return "K";
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case WEBAPPS:          return "W";
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PINYIN_IME:       return "N";
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case PARTNER:          return "V";
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_STRING("GetProductName: Unknown Product");
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return "";
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace rlz_lib
209