summaryrefslogtreecommitdiffstats
path: root/extensions/browser/extension_function.h
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/browser/extension_function.h')
-rw-r--r--extensions/browser/extension_function.h122
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_