Index: ppapi/thunk/enter.h |
diff --git a/ppapi/thunk/enter.h b/ppapi/thunk/enter.h |
index 86d60229311f557e76f2416378805d47950b59f2..5fa610c3bcbfd91ee670d0babbc5bc6329bfc322 100644 |
--- a/ppapi/thunk/enter.h |
+++ b/ppapi/thunk/enter.h |
@@ -108,6 +108,11 @@ class PPAPI_THUNK_EXPORT EnterBase { |
void* object, |
bool report_error); |
+ // Same as SetStateForResourceError except for function API. |
+ void SetStateForFunctionError(PP_Instance pp_instance, |
+ void* object, |
+ bool report_error); |
+ |
private: |
// Holds the callback. The function will only be non-NULL when the |
// callback is requried. Optional callbacks don't require any special |
@@ -119,17 +124,21 @@ class PPAPI_THUNK_EXPORT EnterBase { |
} // namespace subtle |
+// EnterFunction -------------------------------------------------------------- |
template<typename FunctionsT, bool lock_on_entry = true> |
class EnterFunction : public subtle::EnterBase, |
public subtle::LockOnEntry<lock_on_entry> { |
public: |
EnterFunction(PP_Instance instance, bool report_error) |
- : functions_(NULL) { |
- FunctionGroupBase* base = GetFunctions(instance, FunctionsT::kApiID); |
- if (base) |
- functions_ = base->GetAs<FunctionsT>(); |
- // TODO(brettw) check error and if report_error is set, do something. |
+ : EnterBase() { |
+ Init(instance, report_error); |
+ } |
+ EnterFunction(PP_Instance instance, |
+ const PP_CompletionCallback& callback, |
+ bool report_error) |
+ : EnterBase(callback) { |
+ Init(instance, report_error); |
} |
~EnterFunction() {} |
@@ -140,6 +149,15 @@ class EnterFunction : public subtle::EnterBase, |
FunctionsT* functions() { return functions_; } |
private: |
+ void Init(PP_Instance instance, bool report_error) { |
+ FunctionGroupBase* base = GetFunctions(instance, FunctionsT::kApiID); |
+ if (base) |
+ functions_ = base->GetAs<FunctionsT>(); |
+ else |
+ functions_ = NULL; |
+ SetStateForFunctionError(instance, functions_, report_error); |
+ } |
+ |
FunctionsT* functions_; |
DISALLOW_COPY_AND_ASSIGN(EnterFunction); |
@@ -212,6 +230,8 @@ class EnterResource : public subtle::EnterBase, |
DISALLOW_COPY_AND_ASSIGN(EnterResource); |
}; |
+// ---------------------------------------------------------------------------- |
+ |
// Like EnterResource but assumes the lock is already held. |
template<typename ResourceT> |
class EnterResourceNoLock : public EnterResource<ResourceT, false> { |
@@ -235,9 +255,10 @@ class PPAPI_THUNK_EXPORT EnterResourceCreation |
// many interfaces so we have this helper function to save template |
// instantiations and typing. |
class PPAPI_THUNK_EXPORT EnterInstance |
- : public EnterFunctionNoLock<PPB_Instance_FunctionAPI> { |
+ : public EnterFunction<PPB_Instance_FunctionAPI> { |
public: |
EnterInstance(PP_Instance instance); |
+ EnterInstance(PP_Instance instance, const PP_CompletionCallback& callback); |
~EnterInstance(); |
}; |