• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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