#ifndef CONTENT_WEB_TEST_RENDERER_GC_CONTROLLER_H_
#define CONTENT_WEB_TEST_RENDERER_GC_CONTROLLER_H_
#include "base/memory/weak_ptr.h"
#include "gin/wrappable.h"
namespace blink {
class WebLocalFrame;
}
namespace gin {
class Arguments;
}
namespace content {
class GCController : public gin::Wrappable<GCController> {
public:
static gin::WrapperInfo kWrapperInfo;
GCController(const GCController&) = delete;
GCController& operator=(const GCController&) = delete;
static void Install(blink::WebLocalFrame* frame);
private:
static constexpr int kNumberOfGCsForFullCollection = 7;
explicit GCController(blink::WebLocalFrame* frame);
~GCController() override;
gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
v8::Isolate* isolate) override;
void Collect(const gin::Arguments& args);
void CollectAll(const gin::Arguments& args);
void AsyncCollectAll(const gin::Arguments& args);
void MinorCollect(const gin::Arguments& args);
void AsyncCollectAllWithEmptyStack(
v8::UniquePersistent<v8::Function> callback);
blink::WebLocalFrame* const frame_;
base::WeakPtrFactory<GCController> weak_ptr_factory_{this};
};
}
#endif