Index: extensions/browser/extension_function.cc |
diff --git a/extensions/browser/extension_function.cc b/extensions/browser/extension_function.cc |
index 7e9a19499b49d84a05728609387b98cad2dca407..39df603bae86546ebe8c9556e72aeb953a2c1b95 100644 |
--- a/extensions/browser/extension_function.cc |
+++ b/extensions/browser/extension_function.cc |
@@ -45,7 +45,8 @@ class MultipleArgumentsResponseValue |
class ErrorResponseValue : public ExtensionFunction::ResponseValueObject { |
public: |
ErrorResponseValue(ExtensionFunction* function, const std::string& error) { |
- DCHECK_NE("", error); |
+ // It would be nice to DCHECK(!error.empty()) but too many legacy extension |
+ // function implementations don't set error but signal failure. |
function->SetError(error); |
} |
@@ -232,24 +233,8 @@ ExtensionFunction::ResponseAction ExtensionFunction::RespondLater() { |
return scoped_ptr<ResponseActionObject>(new RespondLaterAction()); |
} |
-void ExtensionFunction::Run() { |
- if (!RunImpl()) |
- SendResponse(false); |
-} |
- |
-bool ExtensionFunction::RunImpl() { |
- RunImplTypesafe()->Execute(); |
- return true; |
-} |
- |
-ExtensionFunction::ResponseAction ExtensionFunction::RunImplTypesafe() { |
- NOTREACHED() |
- << "ExtensionFunctions must override either RunImpl or RunImplTypesafe"; |
- return RespondNow(NoArguments()); |
-} |
- |
-void ExtensionFunction::SendResponseTypesafe(ResponseValue response) { |
- SendResponse(response->Apply()); |
+void ExtensionFunction::Done(ResponseValue result) { |
+ SendResponse(result->Apply()); |
} |
bool ExtensionFunction::ShouldSkipQuotaLimiting() const { |
@@ -277,6 +262,10 @@ void ExtensionFunction::SendResponseImpl(bool success) { |
response_callback_.Run(type, *results_, GetError()); |
} |
+void ExtensionFunction::OnRespondingLater(ResponseValue value) { |
+ SendResponse(value->Apply()); |
+} |
+ |
UIThreadExtensionFunction::UIThreadExtensionFunction() |
: render_view_host_(NULL), |
render_frame_host_(NULL), |
@@ -369,15 +358,19 @@ AsyncExtensionFunction::AsyncExtensionFunction() { |
AsyncExtensionFunction::~AsyncExtensionFunction() { |
} |
+ExtensionFunction::ResponseAction AsyncExtensionFunction::Run() { |
+ return RunAsync() ? RespondLater() : RespondNow(Error(error_)); |
+} |
+ |
SyncExtensionFunction::SyncExtensionFunction() { |
} |
SyncExtensionFunction::~SyncExtensionFunction() { |
} |
-bool SyncExtensionFunction::RunImpl() { |
- SendResponse(RunSync()); |
- return true; |
+ExtensionFunction::ResponseAction SyncExtensionFunction::Run() { |
+ return RespondNow(RunSync() ? MultipleArguments(results_.get()) |
+ : Error(error_)); |
} |
SyncIOThreadExtensionFunction::SyncIOThreadExtensionFunction() { |
@@ -386,7 +379,7 @@ SyncIOThreadExtensionFunction::SyncIOThreadExtensionFunction() { |
SyncIOThreadExtensionFunction::~SyncIOThreadExtensionFunction() { |
} |
-bool SyncIOThreadExtensionFunction::RunImpl() { |
- SendResponse(RunSync()); |
- return true; |
+ExtensionFunction::ResponseAction SyncIOThreadExtensionFunction::Run() { |
+ return RespondNow(RunSync() ? MultipleArguments(results_.get()) |
+ : Error(error_)); |
} |