// 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 KEYWORDS_RESULT, // WDResult INT64_RESULT, // WDResult #if defined(OS_WIN) PASSWORD_IE7_RESULT, // WDResult #endif WEB_APP_IMAGES, // WDResult TOKEN_RESULT, // WDResult> AUTOFILL_VALUE_RESULT, // WDResult> AUTOFILL_CHANGES, // WDResult> AUTOFILL_PROFILE_RESULT, // WDResult AUTOFILL_PROFILES_RESULT, // WDResult> AUTOFILL_CREDITCARD_RESULT, // WDResult AUTOFILL_CREDITCARDS_RESULT, // WDResult> WEB_INTENTS_RESULT, // WDResult> WEB_INTENTS_DEFAULTS_RESULT, // WDResult> } WDResultType; typedef base::Callback 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 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 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 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_