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)#include "sync/protocol/sync_protocol_error.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncer {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ENUM_CASE(x) case x: return #x; break;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* GetSyncErrorTypeString(SyncProtocolErrorType type) {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (type) {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ENUM_CASE(SYNC_SUCCESS);
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ENUM_CASE(NOT_MY_BIRTHDAY);
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ENUM_CASE(THROTTLED);
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ENUM_CASE(CLEAR_PENDING);
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ENUM_CASE(TRANSIENT_ERROR);
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ENUM_CASE(NON_RETRIABLE_ERROR);
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ENUM_CASE(MIGRATION_DONE);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ENUM_CASE(INVALID_CREDENTIAL);
25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    ENUM_CASE(DISABLED_BY_ADMIN);
260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    ENUM_CASE(USER_ROLLBACK);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ENUM_CASE(UNKNOWN_ERROR);
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTREACHED();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return "";
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char* GetClientActionString(ClientAction action) {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (action) {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ENUM_CASE(UPGRADE_CLIENT);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ENUM_CASE(CLEAR_USER_DATA_AND_RESYNC);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ENUM_CASE(ENABLE_SYNC_ON_ACCOUNT);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ENUM_CASE(STOP_AND_RESTART_SYNC);
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ENUM_CASE(DISABLE_SYNC_ON_CLIENT);
40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    ENUM_CASE(STOP_SYNC_FOR_DISABLED_ACCOUNT);
410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    ENUM_CASE(DISABLE_SYNC_AND_ROLLBACK);
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ENUM_CASE(ROLLBACK_DONE);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ENUM_CASE(UNKNOWN_ACTION);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTREACHED();
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return "";
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SyncProtocolError::SyncProtocolError()
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : error_type(UNKNOWN_ERROR),
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      action(UNKNOWN_ACTION) {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SyncProtocolError::~SyncProtocolError() {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::DictionaryValue* SyncProtocolError::ToValue() const {
58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::DictionaryValue* value = new base::DictionaryValue();
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->SetString("ErrorType",
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                   GetSyncErrorTypeString(error_type));
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->SetString("ErrorDescription", error_description);
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->SetString("url", url);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  value->SetString("action", GetClientActionString(action));
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace syncer
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
69