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

Unified Diff: components/policy/core/common/cloud/cloud_policy_validator.h

Issue 2817643002: Make CloudPolicyValidator memory management clearer (Closed)
Patch Set: Cleaner memory management in CloudPolicyValidator Created 3 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: components/policy/core/common/cloud/cloud_policy_validator.h
diff --git a/components/policy/core/common/cloud/cloud_policy_validator.h b/components/policy/core/common/cloud/cloud_policy_validator.h
index b56af8959d3b82b3d0eac20894493dc92fd7f267..bef6e39b63434ec67548e2835b9f1f343457daf9 100644
--- a/components/policy/core/common/cloud/cloud_policy_validator.h
+++ b/components/policy/core/common/cloud/cloud_policy_validator.h
@@ -15,6 +15,7 @@
#include "base/bind.h"
#include "base/callback.h"
#include "base/macros.h"
+#include "base/memory/ptr_util.h"
#include "base/memory/ref_counted.h"
#include "base/sequenced_task_runner.h"
#include "base/time/time.h"
@@ -128,7 +129,7 @@ class POLICY_EXPORT CloudPolicyValidatorBase {
Status status() const { return status_; }
bool success() const { return status_ == VALIDATION_OK; }
- // The policy objects owned by the validator. These are scoped_ptr
+ // The policy objects owned by the validator. These are unique_ptr
// references, so ownership can be passed on once validation is complete.
std::unique_ptr<enterprise_management::PolicyFetchResponse>& policy() {
return policy_;
@@ -233,9 +234,11 @@ class POLICY_EXPORT CloudPolicyValidatorBase {
google::protobuf::MessageLite* payload,
scoped_refptr<base::SequencedTaskRunner> background_task_runner);
- // Posts an asynchronous calls to PerformValidation, which will eventually
- // report its result via |completion_callback|.
- void PostValidationTask(const base::Closure& completion_callback);
+ // Posts an asynchronous call to PerformValidation of the passed |validator|,
+ // which will eventually report its result via |completion_callback|.
+ static void PostValidationTask(
+ std::unique_ptr<CloudPolicyValidatorBase> validator,
+ const base::Closure& completion_callback);
private:
// Internal flags indicating what to check.
@@ -344,32 +347,32 @@ class POLICY_EXPORT CloudPolicyValidatorBase {
template<typename PayloadProto>
class POLICY_EXPORT CloudPolicyValidator : public CloudPolicyValidatorBase {
public:
- typedef base::Callback<void(CloudPolicyValidator<PayloadProto>*)>
- CompletionCallback;
+ using CompletionCallback = base::Callback<void(CloudPolicyValidator*)>;
Thiemo Nagel 2017/04/19 12:21:43 Nit: Could this be moved to the base class because
emaxx 2017/04/19 12:42:49 This definition is actually depending on the templ
virtual ~CloudPolicyValidator() {}
// Creates a new validator.
// |background_task_runner| is optional; if RunValidation() is used directly
// and StartValidation() is not used then it can be nullptr.
- static CloudPolicyValidator<PayloadProto>* Create(
+ static std::unique_ptr<CloudPolicyValidator> Create(
std::unique_ptr<enterprise_management::PolicyFetchResponse>
policy_response,
scoped_refptr<base::SequencedTaskRunner> background_task_runner) {
- return new CloudPolicyValidator(
- std::move(policy_response),
- std::unique_ptr<PayloadProto>(new PayloadProto()),
- background_task_runner);
+ return base::WrapUnique<CloudPolicyValidator>(new CloudPolicyValidator(
+ std::move(policy_response), base::MakeUnique<PayloadProto>(),
+ background_task_runner));
}
std::unique_ptr<PayloadProto>& payload() { return payload_; }
- // Kicks off asynchronous validation. |completion_callback| is invoked when
- // done. From this point on, the validator manages its own lifetime - this
- // allows callers to provide a WeakPtr in the callback without leaking the
- // validator.
- void StartValidation(const CompletionCallback& completion_callback) {
- PostValidationTask(base::Bind(completion_callback, this));
+ // Kicks off asynchronous validation through |validator|.
+ // |completion_callback| is invoked when done.
+ static void StartValidation(std::unique_ptr<CloudPolicyValidator> validator,
Thiemo Nagel 2017/04/19 12:21:43 Nit: Could this be moved to the base class because
emaxx 2017/04/19 12:42:49 Same as above: it's actually templatized due to Co
+ const CompletionCallback& completion_callback) {
+ CloudPolicyValidator* const validator_ptr = validator.release();
+ PostValidationTask(
+ base::WrapUnique<CloudPolicyValidatorBase>(validator_ptr),
+ base::Bind(completion_callback, validator_ptr));
}
private:
@@ -388,12 +391,12 @@ class POLICY_EXPORT CloudPolicyValidator : public CloudPolicyValidatorBase {
DISALLOW_COPY_AND_ASSIGN(CloudPolicyValidator);
};
-typedef CloudPolicyValidator<enterprise_management::CloudPolicySettings>
- UserCloudPolicyValidator;
+using UserCloudPolicyValidator =
+ CloudPolicyValidator<enterprise_management::CloudPolicySettings>;
#if !defined(OS_ANDROID) && !defined(OS_IOS)
-typedef CloudPolicyValidator<enterprise_management::ExternalPolicyData>
- ComponentCloudPolicyValidator;
+using ComponentCloudPolicyValidator =
+ CloudPolicyValidator<enterprise_management::ExternalPolicyData>;
#endif
} // namespace policy

Powered by Google App Engine
This is Rietveld 408576698