| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef PPAPI_THUNK_ENTER_H_ | 5 #ifndef PPAPI_THUNK_ENTER_H_ |
| 6 #define PPAPI_THUNK_ENTER_H_ | 6 #define PPAPI_THUNK_ENTER_H_ |
| 7 | 7 |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 #include "ppapi/c/pp_resource.h" | 9 #include "ppapi/c/pp_resource.h" |
| 10 #include "ppapi/shared_impl/api_id.h" | 10 #include "ppapi/shared_impl/api_id.h" |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 // passing both resource_base and object is that we can differentiate "bad | 101 // passing both resource_base and object is that we can differentiate "bad |
| 102 // resource ID" from "valid resource ID not of the currect type." | 102 // resource ID" from "valid resource ID not of the currect type." |
| 103 // | 103 // |
| 104 // This will set retval_ = PP_ERROR_BADRESOURCE if the object is invalid, and | 104 // This will set retval_ = PP_ERROR_BADRESOURCE if the object is invalid, and |
| 105 // if report_error is set, log a message to the programmer. | 105 // if report_error is set, log a message to the programmer. |
| 106 void SetStateForResourceError(PP_Resource pp_resource, | 106 void SetStateForResourceError(PP_Resource pp_resource, |
| 107 Resource* resource_base, | 107 Resource* resource_base, |
| 108 void* object, | 108 void* object, |
| 109 bool report_error); | 109 bool report_error); |
| 110 | 110 |
| 111 // Same as SetStateForResourceError except for function API. |
| 112 void SetStateForFunctionError(PP_Instance pp_instance, |
| 113 void* object, |
| 114 bool report_error); |
| 115 |
| 111 private: | 116 private: |
| 112 // Holds the callback. The function will only be non-NULL when the | 117 // Holds the callback. The function will only be non-NULL when the |
| 113 // callback is requried. Optional callbacks don't require any special | 118 // callback is requried. Optional callbacks don't require any special |
| 114 // handling from us at this layer. | 119 // handling from us at this layer. |
| 115 PP_CompletionCallback callback_; | 120 PP_CompletionCallback callback_; |
| 116 | 121 |
| 117 int32_t retval_; | 122 int32_t retval_; |
| 118 }; | 123 }; |
| 119 | 124 |
| 120 } // namespace subtle | 125 } // namespace subtle |
| 121 | 126 |
| 127 // EnterFunction -------------------------------------------------------------- |
| 122 | 128 |
| 123 template<typename FunctionsT, bool lock_on_entry = true> | 129 template<typename FunctionsT, bool lock_on_entry = true> |
| 124 class EnterFunction : public subtle::EnterBase, | 130 class EnterFunction : public subtle::EnterBase, |
| 125 public subtle::LockOnEntry<lock_on_entry> { | 131 public subtle::LockOnEntry<lock_on_entry> { |
| 126 public: | 132 public: |
| 127 EnterFunction(PP_Instance instance, bool report_error) | 133 EnterFunction(PP_Instance instance, bool report_error) |
| 128 : functions_(NULL) { | 134 : EnterBase() { |
| 129 FunctionGroupBase* base = GetFunctions(instance, FunctionsT::kApiID); | 135 Init(instance, report_error); |
| 130 if (base) | 136 } |
| 131 functions_ = base->GetAs<FunctionsT>(); | 137 EnterFunction(PP_Instance instance, |
| 132 // TODO(brettw) check error and if report_error is set, do something. | 138 const PP_CompletionCallback& callback, |
| 139 bool report_error) |
| 140 : EnterBase(callback) { |
| 141 Init(instance, report_error); |
| 133 } | 142 } |
| 134 | 143 |
| 135 ~EnterFunction() {} | 144 ~EnterFunction() {} |
| 136 | 145 |
| 137 bool succeeded() const { return !!functions_; } | 146 bool succeeded() const { return !!functions_; } |
| 138 bool failed() const { return !functions_; } | 147 bool failed() const { return !functions_; } |
| 139 | 148 |
| 140 FunctionsT* functions() { return functions_; } | 149 FunctionsT* functions() { return functions_; } |
| 141 | 150 |
| 142 private: | 151 private: |
| 152 void Init(PP_Instance instance, bool report_error) { |
| 153 FunctionGroupBase* base = GetFunctions(instance, FunctionsT::kApiID); |
| 154 if (base) |
| 155 functions_ = base->GetAs<FunctionsT>(); |
| 156 else |
| 157 functions_ = NULL; |
| 158 SetStateForFunctionError(instance, functions_, report_error); |
| 159 } |
| 160 |
| 143 FunctionsT* functions_; | 161 FunctionsT* functions_; |
| 144 | 162 |
| 145 DISALLOW_COPY_AND_ASSIGN(EnterFunction); | 163 DISALLOW_COPY_AND_ASSIGN(EnterFunction); |
| 146 }; | 164 }; |
| 147 | 165 |
| 148 // Like EnterFunction but assumes the lock is already held. | 166 // Like EnterFunction but assumes the lock is already held. |
| 149 template<typename FunctionsT> | 167 template<typename FunctionsT> |
| 150 class EnterFunctionNoLock : public EnterFunction<FunctionsT, false> { | 168 class EnterFunctionNoLock : public EnterFunction<FunctionsT, false> { |
| 151 public: | 169 public: |
| 152 EnterFunctionNoLock(PP_Instance instance, bool report_error) | 170 EnterFunctionNoLock(PP_Instance instance, bool report_error) |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 object_ = NULL; | 223 object_ = NULL; |
| 206 SetStateForResourceError(resource, resource_, object_, report_error); | 224 SetStateForResourceError(resource, resource_, object_, report_error); |
| 207 } | 225 } |
| 208 | 226 |
| 209 Resource* resource_; | 227 Resource* resource_; |
| 210 ResourceT* object_; | 228 ResourceT* object_; |
| 211 | 229 |
| 212 DISALLOW_COPY_AND_ASSIGN(EnterResource); | 230 DISALLOW_COPY_AND_ASSIGN(EnterResource); |
| 213 }; | 231 }; |
| 214 | 232 |
| 233 // ---------------------------------------------------------------------------- |
| 234 |
| 215 // Like EnterResource but assumes the lock is already held. | 235 // Like EnterResource but assumes the lock is already held. |
| 216 template<typename ResourceT> | 236 template<typename ResourceT> |
| 217 class EnterResourceNoLock : public EnterResource<ResourceT, false> { | 237 class EnterResourceNoLock : public EnterResource<ResourceT, false> { |
| 218 public: | 238 public: |
| 219 EnterResourceNoLock(PP_Resource resource, bool report_error) | 239 EnterResourceNoLock(PP_Resource resource, bool report_error) |
| 220 : EnterResource<ResourceT, false>(resource, report_error) { | 240 : EnterResource<ResourceT, false>(resource, report_error) { |
| 221 } | 241 } |
| 222 }; | 242 }; |
| 223 | 243 |
| 224 // Simpler wrapper to enter the resource creation API. This is used for every | 244 // Simpler wrapper to enter the resource creation API. This is used for every |
| 225 // class so we have this helper function to save template instantiations and | 245 // class so we have this helper function to save template instantiations and |
| 226 // typing. | 246 // typing. |
| 227 class PPAPI_THUNK_EXPORT EnterResourceCreation | 247 class PPAPI_THUNK_EXPORT EnterResourceCreation |
| 228 : public EnterFunctionNoLock<ResourceCreationAPI> { | 248 : public EnterFunctionNoLock<ResourceCreationAPI> { |
| 229 public: | 249 public: |
| 230 EnterResourceCreation(PP_Instance instance); | 250 EnterResourceCreation(PP_Instance instance); |
| 231 ~EnterResourceCreation(); | 251 ~EnterResourceCreation(); |
| 232 }; | 252 }; |
| 233 | 253 |
| 234 // Simpler wrapper to enter the instance API from proxy code. This is used for | 254 // Simpler wrapper to enter the instance API from proxy code. This is used for |
| 235 // many interfaces so we have this helper function to save template | 255 // many interfaces so we have this helper function to save template |
| 236 // instantiations and typing. | 256 // instantiations and typing. |
| 237 class PPAPI_THUNK_EXPORT EnterInstance | 257 class PPAPI_THUNK_EXPORT EnterInstance |
| 238 : public EnterFunctionNoLock<PPB_Instance_FunctionAPI> { | 258 : public EnterFunction<PPB_Instance_FunctionAPI> { |
| 239 public: | 259 public: |
| 240 EnterInstance(PP_Instance instance); | 260 EnterInstance(PP_Instance instance); |
| 261 EnterInstance(PP_Instance instance, const PP_CompletionCallback& callback); |
| 241 ~EnterInstance(); | 262 ~EnterInstance(); |
| 242 }; | 263 }; |
| 243 | 264 |
| 244 } // namespace thunk | 265 } // namespace thunk |
| 245 } // namespace ppapi | 266 } // namespace ppapi |
| 246 | 267 |
| 247 #endif // PPAPI_THUNK_ENTER_H_ | 268 #endif // PPAPI_THUNK_ENTER_H_ |
| OLD | NEW |