diff options
Diffstat (limited to 'extensions/browser/extension_function.h')
-rw-r--r-- | extensions/browser/extension_function.h | 122 |
1 files changed, 72 insertions, 50 deletions
diff --git a/extensions/browser/extension_function.h b/extensions/browser/extension_function.h index ee5f97a..259b86a 100644 --- a/extensions/browser/extension_function.h +++ b/extensions/browser/extension_function.h @@ -118,13 +118,41 @@ class ExtensionFunction // This will be run after the function has been set up but before Run(). virtual bool HasPermission(); - // Execute the API. Clients should initialize the ExtensionFunction using - // SetArgs(), set_request_id(), and the other setters before calling this - // method. + // The result of a function call. + // + // Use NoArguments(), SingleArgument(), MultipleArguments(), or Error() + // rather than this class directly. + class ResponseValueObject { + public: + virtual ~ResponseValueObject() {} + + // Returns true for success, false for failure. + virtual bool Apply() = 0; + }; + typedef scoped_ptr<ResponseValueObject> ResponseValue; + + // The action to use when returning from RunAsync. + // + // Use RespondNow() or RespondLater() rather than this class directly. + class ResponseActionObject { + public: + virtual ~ResponseActionObject() {} + + virtual void Execute() = 0; + }; + typedef scoped_ptr<ResponseActionObject> ResponseAction; + + // Runs the function and returns the action to take when the caller is ready + // to respond. + // + // Callers must call Execute() on the return ResponseAction at some point, + // exactly once. // - // Note that once Run() returns, dispatcher() can be NULL, so be sure to - // NULL-check. - void Run(); + // SyncExtensionFunction and AsyncExtensionFunction implement this in terms + // of SyncExtensionFunction::RunSync and AsyncExtensionFunction::RunAsync, + // but this is deprecated. ExtensionFunction implementations are encouraged + // to just implement Run. + virtual ResponseAction Run() WARN_UNUSED_RESULT = 0; // Gets whether quota should be applied to this individual function // invocation. This is different to GetQuotaLimitHeuristics which is only @@ -208,30 +236,6 @@ class ExtensionFunction void set_source_tab_id(int source_tab_id) { source_tab_id_ = source_tab_id; } int source_tab_id() const { return source_tab_id_; } - // The result of a function call. - // - // Use NoArguments(), SingleArgument(), MultipleArguments(), or Error() - // rather than this class directly. - class ResponseValueObject { - public: - virtual ~ResponseValueObject() {} - - // Returns true for success, false for failure. - virtual bool Apply() = 0; - }; - typedef scoped_ptr<ResponseValueObject> ResponseValue; - - // The action to use when returning from RunImpl. - // - // Use RespondNow() or RespondLater() rather than this class directly. - class ResponseActionObject { - public: - virtual ~ResponseActionObject() {} - - virtual void Execute() = 0; - }; - typedef scoped_ptr<ResponseActionObject> ResponseAction; - protected: friend struct ExtensionFunctionDeleteTraits; @@ -252,28 +256,23 @@ class ExtensionFunction // // Respond to the extension immediately with |result|. ResponseAction RespondNow(ResponseValue result); - // Don't respond now, but promise to call SendResponse later. + // Don't respond now, but promise to call Respond() later. ResponseAction RespondLater(); + // If RespondLater() was used, functions must at some point call Respond() + // with |result| as their result. + void Respond(ResponseValue result); + virtual ~ExtensionFunction(); // Helper method for ExtensionFunctionDeleteTraits. Deletes this object. virtual void Destruct() const = 0; - // Derived classes should implement one of these methods to do their work. - // - // Returns the action to take. DO NOT USE WITH SyncExtensionFunction. - virtual ResponseAction RunImplTypesafe(); - // Deprecated. Returns true on success. SendResponse() must be called later. - // Return false to indicate an error and respond immediately. - virtual bool RunImpl(); - - // Sends the result back to the extension. + // Do not call this function directly, return the appropriate ResponseAction + // from Run() instead. If using RespondLater then call Respond(). // - // Responds with |response|. - void SendResponseTypesafe(ResponseValue response); - // Deprecated. Call with true to indicate success, false to indicate failure, - // in which case please set |error_|. + // Call with true to indicate success, false to indicate failure, in which + // case please set |error_|. virtual void SendResponse(bool success) = 0; // Common implementation for SendResponse. @@ -337,6 +336,8 @@ class ExtensionFunction int source_tab_id_; private: + void OnRespondingLater(ResponseValue response); + DISALLOW_COPY_AND_ASSIGN(ExtensionFunction); }; @@ -489,6 +490,16 @@ class AsyncExtensionFunction : public UIThreadExtensionFunction { protected: virtual ~AsyncExtensionFunction(); + + // Deprecated: Override UIThreadExtensionFunction and implement Run() instead. + // + // AsyncExtensionFunctions implement this method. Return true to indicate that + // nothing has gone wrong yet; SendResponse must be called later. Return true + // to respond immediately with an error. + virtual bool RunAsync() = 0; + + private: + virtual ResponseAction Run() OVERRIDE; }; // A SyncExtensionFunction is an ExtensionFunction that runs synchronously @@ -502,24 +513,35 @@ class SyncExtensionFunction : public UIThreadExtensionFunction { public: SyncExtensionFunction(); - virtual bool RunImpl() OVERRIDE; - protected: + virtual ~SyncExtensionFunction(); + + // Deprecated: Override UIThreadExtensionFunction and implement Run() instead. + // + // SyncExtensionFunctions implement this method. Return true to respond + // immediately with success, false to respond immediately with an error. virtual bool RunSync() = 0; - virtual ~SyncExtensionFunction(); + private: + virtual ResponseAction Run() OVERRIDE; }; class SyncIOThreadExtensionFunction : public IOThreadExtensionFunction { public: SyncIOThreadExtensionFunction(); - virtual bool RunImpl() OVERRIDE; - protected: + virtual ~SyncIOThreadExtensionFunction(); + + // Deprecated: Override IOThreadExtensionFunction and implement Run() instead. + // + // SyncIOThreadExtensionFunctions implement this method. Return true to + // respond immediately with success, false to respond immediately with an + // error. virtual bool RunSync() = 0; - virtual ~SyncIOThreadExtensionFunction(); + private: + virtual ResponseAction Run() OVERRIDE; }; #endif // EXTENSIONS_BROWSER_EXTENSION_FUNCTION_H_ |