Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Unified Diff: extensions/browser/extension_function.h

Issue 257333002: Drive extension functions from ExtensionFunction::Run. The (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: appshell Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: extensions/browser/extension_function.h
diff --git a/extensions/browser/extension_function.h b/extensions/browser/extension_function.h
index ee5f97a7c9dbe2f2ddde7e9849cb81b05e002b27..57bdc67c69eb8a0dcf9b176ef962620568bddc0b 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 Done() later.
ResponseAction RespondLater();
+ // If RespondLater() was used, functions must at some point call Done() with
+ // |result| as their result.
+ void Done(ResponseValue result);
Ken Rockot(use gerrit already) 2014/04/30 22:37:16 nice
+
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 Done().
//
- // 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_

Powered by Google App Engine
This is Rietveld 408576698