OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <string> | 10 #include <string> |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 void* object, | 141 void* object, |
142 bool report_error); | 142 bool report_error); |
143 | 143 |
144 // Same as SetStateForResourceError except for function API. | 144 // Same as SetStateForResourceError except for function API. |
145 void SetStateForFunctionError(PP_Instance pp_instance, | 145 void SetStateForFunctionError(PP_Instance pp_instance, |
146 void* object, | 146 void* object, |
147 bool report_error); | 147 bool report_error); |
148 | 148 |
149 // For Enter objects that need a resource, we'll store a pointer to the | 149 // For Enter objects that need a resource, we'll store a pointer to the |
150 // Resource object so that we don't need to look it up more than once. For | 150 // Resource object so that we don't need to look it up more than once. For |
151 // Enter objects with no resource, this will be NULL. | 151 // Enter objects with no resource, this will be null. |
152 Resource* resource_; | 152 Resource* resource_ = nullptr; |
153 | 153 |
154 private: | 154 private: |
155 bool CallbackIsValid() const; | 155 bool CallbackIsValid() const; |
156 | 156 |
157 // Checks whether the callback is valid (i.e., if it is either non-blocking, | 157 // Checks whether the callback is valid (i.e., if it is either non-blocking, |
158 // or blocking and we're on a background thread). If the callback is invalid, | 158 // or blocking and we're on a background thread). If the callback is invalid, |
159 // this will set retval_ = PP_ERROR_BLOCKS_MAIN_THREAD, and if report_error is | 159 // this will set retval_ = PP_ERROR_BLOCKS_MAIN_THREAD, and if report_error is |
160 // set, it will log a message to the programmer. | 160 // set, it will log a message to the programmer. |
161 void SetStateForCallbackError(bool report_error); | 161 void SetStateForCallbackError(bool report_error); |
162 | 162 |
163 // Holds the callback. For Enter objects that aren't given a callback, this | 163 // Holds the callback. For Enter objects that aren't given a callback, this |
164 // will be NULL. | 164 // will be null. |
165 scoped_refptr<TrackedCallback> callback_; | 165 scoped_refptr<TrackedCallback> callback_; |
166 | 166 |
167 int32_t retval_; | 167 int32_t retval_ = PP_OK; |
168 }; | 168 }; |
169 | 169 |
170 } // namespace subtle | 170 } // namespace subtle |
171 | 171 |
172 // EnterResource --------------------------------------------------------------- | 172 // EnterResource --------------------------------------------------------------- |
173 | 173 |
174 template<typename ResourceT, bool lock_on_entry = true> | 174 template<typename ResourceT, bool lock_on_entry = true> |
175 class EnterResource | 175 class EnterResource |
176 : public subtle::LockOnEntry<lock_on_entry>, // Must be first; see above. | 176 : public subtle::LockOnEntry<lock_on_entry>, // Must be first; see above. |
177 public subtle::EnterBase { | 177 public subtle::EnterBase { |
(...skipping 10 matching lines...) Expand all Loading... |
188 ~EnterResource() {} | 188 ~EnterResource() {} |
189 | 189 |
190 ResourceT* object() { return object_; } | 190 ResourceT* object() { return object_; } |
191 Resource* resource() { return resource_; } | 191 Resource* resource() { return resource_; } |
192 | 192 |
193 private: | 193 private: |
194 void Init(PP_Resource resource, bool report_error) { | 194 void Init(PP_Resource resource, bool report_error) { |
195 if (resource_) | 195 if (resource_) |
196 object_ = resource_->GetAs<ResourceT>(); | 196 object_ = resource_->GetAs<ResourceT>(); |
197 else | 197 else |
198 object_ = NULL; | 198 object_ = nullptr; |
199 // Validate the resource (note, if both are wrong, we will return | 199 // Validate the resource (note, if both are wrong, we will return |
200 // PP_ERROR_BADRESOURCE; last in wins). | 200 // PP_ERROR_BADRESOURCE; last in wins). |
201 SetStateForResourceError(resource, resource_, object_, report_error); | 201 SetStateForResourceError(resource, resource_, object_, report_error); |
202 } | 202 } |
203 | 203 |
204 ResourceT* object_; | 204 ResourceT* object_; |
205 | 205 |
206 DISALLOW_COPY_AND_ASSIGN(EnterResource); | 206 DISALLOW_COPY_AND_ASSIGN(EnterResource); |
207 }; | 207 }; |
208 | 208 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
258 }; | 258 }; |
259 | 259 |
260 // EnterInstanceAPI ------------------------------------------------------------ | 260 // EnterInstanceAPI ------------------------------------------------------------ |
261 | 261 |
262 template<typename ApiT, bool lock_on_entry = true> | 262 template<typename ApiT, bool lock_on_entry = true> |
263 class EnterInstanceAPI | 263 class EnterInstanceAPI |
264 : public subtle::LockOnEntry<lock_on_entry>, // Must be first; see above | 264 : public subtle::LockOnEntry<lock_on_entry>, // Must be first; see above |
265 public subtle::EnterBase { | 265 public subtle::EnterBase { |
266 public: | 266 public: |
267 explicit EnterInstanceAPI(PP_Instance instance) | 267 explicit EnterInstanceAPI(PP_Instance instance) |
268 : EnterBase(instance, ApiT::kSingletonResourceID), | 268 : EnterBase(instance, ApiT::kSingletonResourceID) { |
269 functions_(NULL) { | |
270 if (resource_) | 269 if (resource_) |
271 functions_ = resource_->GetAs<ApiT>(); | 270 functions_ = resource_->GetAs<ApiT>(); |
272 SetStateForFunctionError(instance, functions_, true); | 271 SetStateForFunctionError(instance, functions_, true); |
273 } | 272 } |
274 EnterInstanceAPI(PP_Instance instance, | 273 EnterInstanceAPI(PP_Instance instance, const PP_CompletionCallback& callback) |
275 const PP_CompletionCallback& callback) | 274 : EnterBase(instance, ApiT::kSingletonResourceID, callback) { |
276 : EnterBase(instance, ApiT::kSingletonResourceID, callback), | |
277 functions_(NULL) { | |
278 if (resource_) | 275 if (resource_) |
279 functions_ = resource_->GetAs<ApiT>(); | 276 functions_ = resource_->GetAs<ApiT>(); |
280 SetStateForFunctionError(instance, functions_, true); | 277 SetStateForFunctionError(instance, functions_, true); |
281 } | 278 } |
282 ~EnterInstanceAPI() {} | 279 ~EnterInstanceAPI() {} |
283 | 280 |
284 bool succeeded() const { return !!functions_; } | 281 bool succeeded() const { return !!functions_; } |
285 bool failed() const { return !functions_; } | 282 bool failed() const { return !functions_; } |
286 | 283 |
287 ApiT* functions() const { return functions_; } | 284 ApiT* functions() const { return functions_; } |
288 | 285 |
289 private: | 286 private: |
290 ApiT* functions_; | 287 ApiT* functions_ = nullptr; |
291 }; | 288 }; |
292 | 289 |
293 template<typename ApiT> | 290 template<typename ApiT> |
294 class EnterInstanceAPINoLock : public EnterInstanceAPI<ApiT, false> { | 291 class EnterInstanceAPINoLock : public EnterInstanceAPI<ApiT, false> { |
295 public: | 292 public: |
296 explicit EnterInstanceAPINoLock(PP_Instance instance) | 293 explicit EnterInstanceAPINoLock(PP_Instance instance) |
297 : EnterInstanceAPI<ApiT, false>(instance) { | 294 : EnterInstanceAPI<ApiT, false>(instance) { |
298 } | 295 } |
299 }; | 296 }; |
300 | 297 |
(...skipping 22 matching lines...) Expand all Loading... |
323 ResourceCreationAPI* functions() { return functions_; } | 320 ResourceCreationAPI* functions() { return functions_; } |
324 | 321 |
325 private: | 322 private: |
326 ResourceCreationAPI* functions_; | 323 ResourceCreationAPI* functions_; |
327 }; | 324 }; |
328 | 325 |
329 } // namespace thunk | 326 } // namespace thunk |
330 } // namespace ppapi | 327 } // namespace ppapi |
331 | 328 |
332 #endif // PPAPI_THUNK_ENTER_H_ | 329 #endif // PPAPI_THUNK_ENTER_H_ |
OLD | NEW |