Home | History | Annotate | Download | only in protocol
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Keep this file in sync with the .proto files in this directory.
      6 
      7 #include "sync/protocol/proto_enum_conversions.h"
      8 
      9 #include "base/basictypes.h"
     10 #include "base/logging.h"
     11 
     12 namespace syncer {
     13 
     14 #define ASSERT_ENUM_BOUNDS(enum_parent, enum_type, enum_min, enum_max)  \
     15   COMPILE_ASSERT(enum_parent::enum_type##_MIN == enum_parent::enum_min, \
     16                  enum_type##_MIN_not_##enum_min);                       \
     17   COMPILE_ASSERT(enum_parent::enum_type##_MAX == enum_parent::enum_max, \
     18                  enum_type##_MAX_not_##enum_max);
     19 
     20 #define ENUM_CASE(enum_parent, enum_value)              \
     21   case enum_parent::enum_value: return #enum_value
     22 
     23 const char* GetBrowserTypeString(
     24     sync_pb::SessionWindow::BrowserType browser_type) {
     25   ASSERT_ENUM_BOUNDS(sync_pb::SessionWindow, BrowserType,
     26                      TYPE_TABBED, TYPE_POPUP);
     27   switch (browser_type) {
     28     ENUM_CASE(sync_pb::SessionWindow, TYPE_TABBED);
     29     ENUM_CASE(sync_pb::SessionWindow, TYPE_POPUP);
     30   }
     31   NOTREACHED();
     32   return "";
     33 }
     34 
     35 const char* GetPageTransitionString(
     36     sync_pb::SyncEnums::PageTransition page_transition) {
     37   ASSERT_ENUM_BOUNDS(sync_pb::SyncEnums, PageTransition,
     38                      LINK, KEYWORD_GENERATED);
     39   switch (page_transition) {
     40     ENUM_CASE(sync_pb::SyncEnums, LINK);
     41     ENUM_CASE(sync_pb::SyncEnums, TYPED);
     42     ENUM_CASE(sync_pb::SyncEnums, AUTO_BOOKMARK);
     43     ENUM_CASE(sync_pb::SyncEnums, AUTO_SUBFRAME);
     44     ENUM_CASE(sync_pb::SyncEnums, MANUAL_SUBFRAME);
     45     ENUM_CASE(sync_pb::SyncEnums, GENERATED);
     46     ENUM_CASE(sync_pb::SyncEnums, AUTO_TOPLEVEL);
     47     ENUM_CASE(sync_pb::SyncEnums, FORM_SUBMIT);
     48     ENUM_CASE(sync_pb::SyncEnums, RELOAD);
     49     ENUM_CASE(sync_pb::SyncEnums, KEYWORD);
     50     ENUM_CASE(sync_pb::SyncEnums, KEYWORD_GENERATED);
     51   }
     52   NOTREACHED();
     53   return "";
     54 }
     55 
     56 const char* GetPageTransitionRedirectTypeString(
     57     sync_pb::SyncEnums::PageTransitionRedirectType
     58         page_transition_qualifier) {
     59   ASSERT_ENUM_BOUNDS(sync_pb::SyncEnums, PageTransitionRedirectType,
     60                      CLIENT_REDIRECT, SERVER_REDIRECT);
     61   switch (page_transition_qualifier) {
     62     ENUM_CASE(sync_pb::SyncEnums, CLIENT_REDIRECT);
     63     ENUM_CASE(sync_pb::SyncEnums, SERVER_REDIRECT);
     64   }
     65   NOTREACHED();
     66   return "";
     67 }
     68 
     69 const char* GetUpdatesSourceString(
     70     sync_pb::GetUpdatesCallerInfo::GetUpdatesSource updates_source) {
     71   ASSERT_ENUM_BOUNDS(sync_pb::GetUpdatesCallerInfo, GetUpdatesSource,
     72                      UNKNOWN, DATATYPE_REFRESH);
     73   switch (updates_source) {
     74     ENUM_CASE(sync_pb::GetUpdatesCallerInfo, UNKNOWN);
     75     ENUM_CASE(sync_pb::GetUpdatesCallerInfo, FIRST_UPDATE);
     76     ENUM_CASE(sync_pb::GetUpdatesCallerInfo, LOCAL);
     77     ENUM_CASE(sync_pb::GetUpdatesCallerInfo, NOTIFICATION);
     78     ENUM_CASE(sync_pb::GetUpdatesCallerInfo, PERIODIC);
     79     ENUM_CASE(sync_pb::GetUpdatesCallerInfo, SYNC_CYCLE_CONTINUATION);
     80     ENUM_CASE(sync_pb::GetUpdatesCallerInfo, NEWLY_SUPPORTED_DATATYPE);
     81     ENUM_CASE(sync_pb::GetUpdatesCallerInfo, MIGRATION);
     82     ENUM_CASE(sync_pb::GetUpdatesCallerInfo, NEW_CLIENT);
     83     ENUM_CASE(sync_pb::GetUpdatesCallerInfo, RECONFIGURATION);
     84     ENUM_CASE(sync_pb::GetUpdatesCallerInfo, DATATYPE_REFRESH);
     85   }
     86   NOTREACHED();
     87   return "";
     88 }
     89 
     90 const char* GetUpdatesOriginString(
     91     sync_pb::SyncEnums::GetUpdatesOrigin origin) {
     92   ASSERT_ENUM_BOUNDS(sync_pb::SyncEnums, GetUpdatesOrigin,
     93                      UNKNOWN_ORIGIN, GU_TRIGGER);
     94   switch (origin) {
     95     ENUM_CASE(sync_pb::SyncEnums, UNKNOWN_ORIGIN);
     96     ENUM_CASE(sync_pb::SyncEnums, PERIODIC);
     97     ENUM_CASE(sync_pb::SyncEnums, NEWLY_SUPPORTED_DATATYPE);
     98     ENUM_CASE(sync_pb::SyncEnums, MIGRATION);
     99     ENUM_CASE(sync_pb::SyncEnums, NEW_CLIENT);
    100     ENUM_CASE(sync_pb::SyncEnums, RECONFIGURATION);
    101     ENUM_CASE(sync_pb::SyncEnums, GU_TRIGGER);
    102   }
    103   NOTREACHED();
    104   return "";
    105 }
    106 
    107 const char* GetResponseTypeString(
    108     sync_pb::CommitResponse::ResponseType response_type) {
    109   ASSERT_ENUM_BOUNDS(sync_pb::CommitResponse, ResponseType, SUCCESS,
    110                      TRANSIENT_ERROR);
    111   switch (response_type) {
    112     ENUM_CASE(sync_pb::CommitResponse, SUCCESS);
    113     ENUM_CASE(sync_pb::CommitResponse, CONFLICT);
    114     ENUM_CASE(sync_pb::CommitResponse, RETRY);
    115     ENUM_CASE(sync_pb::CommitResponse, INVALID_MESSAGE);
    116     ENUM_CASE(sync_pb::CommitResponse, OVER_QUOTA);
    117     ENUM_CASE(sync_pb::CommitResponse, TRANSIENT_ERROR);
    118   }
    119   NOTREACHED();
    120   return "";
    121 }
    122 
    123 const char* GetErrorTypeString(sync_pb::SyncEnums::ErrorType error_type) {
    124   ASSERT_ENUM_BOUNDS(sync_pb::SyncEnums, ErrorType, SUCCESS, UNKNOWN);
    125   switch (error_type) {
    126     ENUM_CASE(sync_pb::SyncEnums, SUCCESS);
    127     ENUM_CASE(sync_pb::SyncEnums, ACCESS_DENIED);
    128     ENUM_CASE(sync_pb::SyncEnums, NOT_MY_BIRTHDAY);
    129     ENUM_CASE(sync_pb::SyncEnums, THROTTLED);
    130     ENUM_CASE(sync_pb::SyncEnums, AUTH_EXPIRED);
    131     ENUM_CASE(sync_pb::SyncEnums, USER_NOT_ACTIVATED);
    132     ENUM_CASE(sync_pb::SyncEnums, AUTH_INVALID);
    133     ENUM_CASE(sync_pb::SyncEnums, CLEAR_PENDING);
    134     ENUM_CASE(sync_pb::SyncEnums, TRANSIENT_ERROR);
    135     ENUM_CASE(sync_pb::SyncEnums, MIGRATION_DONE);
    136     ENUM_CASE(sync_pb::SyncEnums, DISABLED_BY_ADMIN);
    137     ENUM_CASE(sync_pb::SyncEnums, UNKNOWN);
    138   }
    139   NOTREACHED();
    140   return "";
    141 }
    142 
    143 const char* GetActionString(sync_pb::SyncEnums::Action action) {
    144   ASSERT_ENUM_BOUNDS(sync_pb::SyncEnums, Action,
    145                      UPGRADE_CLIENT, UNKNOWN_ACTION);
    146   switch (action) {
    147     ENUM_CASE(sync_pb::SyncEnums, UPGRADE_CLIENT);
    148     ENUM_CASE(sync_pb::SyncEnums, CLEAR_USER_DATA_AND_RESYNC);
    149     ENUM_CASE(sync_pb::SyncEnums, ENABLE_SYNC_ON_ACCOUNT);
    150     ENUM_CASE(sync_pb::SyncEnums, STOP_AND_RESTART_SYNC);
    151     ENUM_CASE(sync_pb::SyncEnums, DISABLE_SYNC_ON_CLIENT);
    152     ENUM_CASE(sync_pb::SyncEnums, UNKNOWN_ACTION);
    153   }
    154   NOTREACHED();
    155   return "";
    156 
    157 }
    158 
    159 const char* GetDeviceTypeString(
    160     sync_pb::SyncEnums::DeviceType device_type) {
    161   ASSERT_ENUM_BOUNDS(sync_pb::SyncEnums, DeviceType, TYPE_WIN, TYPE_TABLET);
    162   switch (device_type) {
    163     ENUM_CASE(sync_pb::SyncEnums, TYPE_WIN);
    164     ENUM_CASE(sync_pb::SyncEnums, TYPE_MAC);
    165     ENUM_CASE(sync_pb::SyncEnums, TYPE_LINUX);
    166     ENUM_CASE(sync_pb::SyncEnums, TYPE_CROS);
    167     ENUM_CASE(sync_pb::SyncEnums, TYPE_OTHER);
    168     ENUM_CASE(sync_pb::SyncEnums, TYPE_PHONE);
    169     ENUM_CASE(sync_pb::SyncEnums, TYPE_TABLET);
    170   }
    171   NOTREACHED();
    172   return "";
    173 }
    174 
    175 const char* GetFaviconTypeString(
    176     sync_pb::SessionTab::FaviconType favicon_type) {
    177   ASSERT_ENUM_BOUNDS(sync_pb::SessionTab, FaviconType, TYPE_WEB_FAVICON,
    178                      TYPE_WEB_FAVICON);
    179   switch (favicon_type) {
    180     ENUM_CASE(sync_pb::SessionTab, TYPE_WEB_FAVICON);
    181   }
    182   NOTREACHED();
    183   return "";
    184 }
    185 
    186 const char* PassphraseTypeString(
    187     sync_pb::NigoriSpecifics::PassphraseType type) {
    188   ASSERT_ENUM_BOUNDS(sync_pb::NigoriSpecifics, PassphraseType,
    189                      IMPLICIT_PASSPHRASE, CUSTOM_PASSPHRASE);
    190   switch (type) {
    191     ENUM_CASE(sync_pb::NigoriSpecifics, IMPLICIT_PASSPHRASE);
    192     ENUM_CASE(sync_pb::NigoriSpecifics, KEYSTORE_PASSPHRASE);
    193     ENUM_CASE(sync_pb::NigoriSpecifics, FROZEN_IMPLICIT_PASSPHRASE);
    194     ENUM_CASE(sync_pb::NigoriSpecifics, CUSTOM_PASSPHRASE);
    195   }
    196   NOTREACHED();
    197   return "";
    198 }
    199 
    200 const char* SingletonEventTypeString(
    201     sync_pb::DebugEventInfo::SingletonEventType type) {
    202   ASSERT_ENUM_BOUNDS(sync_pb::DebugEventInfo, SingletonEventType,
    203                      CONNECTION_STATUS_CHANGE, BOOTSTRAP_TOKEN_UPDATED);
    204   switch (type) {
    205     ENUM_CASE(sync_pb::DebugEventInfo, CONNECTION_STATUS_CHANGE);
    206     ENUM_CASE(sync_pb::DebugEventInfo, UPDATED_TOKEN);
    207     ENUM_CASE(sync_pb::DebugEventInfo, PASSPHRASE_REQUIRED);
    208     ENUM_CASE(sync_pb::DebugEventInfo, PASSPHRASE_ACCEPTED);
    209     ENUM_CASE(sync_pb::DebugEventInfo, INITIALIZATION_COMPLETE);
    210     ENUM_CASE(sync_pb::DebugEventInfo, STOP_SYNCING_PERMANENTLY);
    211     ENUM_CASE(sync_pb::DebugEventInfo, ENCRYPTION_COMPLETE);
    212     ENUM_CASE(sync_pb::DebugEventInfo, ACTIONABLE_ERROR);
    213     ENUM_CASE(sync_pb::DebugEventInfo, ENCRYPTED_TYPES_CHANGED);
    214     ENUM_CASE(sync_pb::DebugEventInfo, PASSPHRASE_TYPE_CHANGED);
    215     ENUM_CASE(sync_pb::DebugEventInfo, KEYSTORE_TOKEN_UPDATED);
    216     ENUM_CASE(sync_pb::DebugEventInfo, CONFIGURE_COMPLETE);
    217     ENUM_CASE(sync_pb::DebugEventInfo, BOOTSTRAP_TOKEN_UPDATED);
    218   }
    219   NOTREACHED();
    220   return "";
    221 }
    222 
    223 const char* GetBlockedStateString(
    224     sync_pb::TabNavigation::BlockedState state) {
    225   ASSERT_ENUM_BOUNDS(sync_pb::TabNavigation, BlockedState,
    226                      STATE_ALLOWED, STATE_BLOCKED);
    227   switch (state) {
    228     ENUM_CASE(sync_pb::TabNavigation, STATE_ALLOWED);
    229     ENUM_CASE(sync_pb::TabNavigation, STATE_BLOCKED);
    230   }
    231   NOTREACHED();
    232   return "";
    233 }
    234 
    235 #undef ASSERT_ENUM_BOUNDS
    236 #undef ENUM_CASE
    237 
    238 }  // namespace syncer
    239