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