1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_WEBDATA_COMMON_WEB_DATA_RESULTS_H_
#define COMPONENTS_WEBDATA_COMMON_WEB_DATA_RESULTS_H_
#include "base/basictypes.h"
#include "base/callback.h"
#include "components/webdata/common/webdata_export.h"
class WDTypedResult;
//
// Result types for WebDataService.
//
typedef enum {
BOOL_RESULT = 1, // WDResult<bool>
KEYWORDS_RESULT, // WDResult<WDKeywordsResult>
INT64_RESULT, // WDResult<int64>
#if defined(OS_WIN)
PASSWORD_IE7_RESULT, // WDResult<IE7PasswordInfo>
#endif
WEB_APP_IMAGES, // WDResult<WDAppImagesResult>
TOKEN_RESULT, // WDResult<std::vector<std::string>>
AUTOFILL_VALUE_RESULT, // WDResult<std::vector<base::string16>>
AUTOFILL_CHANGES, // WDResult<std::vector<AutofillChange>>
AUTOFILL_PROFILE_RESULT, // WDResult<AutofillProfile>
AUTOFILL_PROFILES_RESULT, // WDResult<std::vector<AutofillProfile*>>
AUTOFILL_CREDITCARD_RESULT, // WDResult<CreditCard>
AUTOFILL_CREDITCARDS_RESULT, // WDResult<std::vector<CreditCard*>>
} WDResultType;
typedef base::Callback<void(const WDTypedResult*)> DestroyCallback;
//
// The top level class for a result.
//
class WEBDATA_EXPORT WDTypedResult {
public:
virtual ~WDTypedResult() {
}
// Return the result type.
WDResultType GetType() const {
return type_;
}
virtual void Destroy() {
}
protected:
explicit WDTypedResult(WDResultType type)
: type_(type) {
}
private:
WDResultType type_;
DISALLOW_COPY_AND_ASSIGN(WDTypedResult);
};
// A result containing one specific pointer or literal value.
template <class T> class WDResult : public WDTypedResult {
public:
WDResult(WDResultType type, const T& v)
: WDTypedResult(type), value_(v) {
}
virtual ~WDResult() {
}
// Return a single value result.
T GetValue() const {
return value_;
}
private:
T value_;
DISALLOW_COPY_AND_ASSIGN(WDResult);
};
template <class T> class WDDestroyableResult : public WDTypedResult {
public:
WDDestroyableResult(
WDResultType type,
const T& v,
const DestroyCallback& callback)
: WDTypedResult(type),
value_(v),
callback_(callback) {
}
virtual ~WDDestroyableResult() {
}
virtual void Destroy() override {
if (!callback_.is_null()) {
callback_.Run(this);
}
}
// Return a single value result.
T GetValue() const {
return value_;
}
private:
T value_;
DestroyCallback callback_;
DISALLOW_COPY_AND_ASSIGN(WDDestroyableResult);
};
template <class T> class WDObjectResult : public WDTypedResult {
public:
explicit WDObjectResult(WDResultType type)
: WDTypedResult(type) {
}
T* GetValue() const {
return &value_;
}
private:
// mutable to keep GetValue() const.
mutable T value_;
DISALLOW_COPY_AND_ASSIGN(WDObjectResult);
};
#endif // COMPONENTS_WEBDATA_COMMON_WEB_DATA_RESULTS_H_
|