Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / components / webdata / common / web_data_results.h
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:
44   virtual ~WDTypedResult() {
45   }
46
47   // Return the result type.
48   WDResultType GetType() const {
49     return type_;
50   }
51
52   virtual void Destroy() {
53   }
54
55  protected:
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:
68   WDResult(WDResultType type, const T& v)
69       : WDTypedResult(type), value_(v) {
70   }
71
72   virtual ~WDResult() {
73   }
74
75   // Return a single value result.
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:
88   WDDestroyableResult(
89       WDResultType type,
90       const T& v,
91       const DestroyCallback& callback)
92       : WDTypedResult(type),
93         value_(v),
94         callback_(callback) {
95   }
96
97   virtual ~WDDestroyableResult() {
98   }
99
100
101   virtual void Destroy()  override {
102     if (!callback_.is_null()) {
103       callback_.Run(this);
104     }
105   }
106
107   // Return a single value result.
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:
121   explicit WDObjectResult(WDResultType type)
122     : WDTypedResult(type) {
123   }
124
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_