summaryrefslogtreecommitdiffstats
path: root/content/shell/renderer/gc_controller.cc
diff options
context:
space:
mode:
authorjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-16 18:19:42 +0000
committerjochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-16 18:19:42 +0000
commit41fba0e6af7d9108cf120bc36d69ea875bfed831 (patch)
tree5c2f3e8c1eee0d930c9bef0542c9955ec55c284d /content/shell/renderer/gc_controller.cc
parent73907d5539367bd173068e9e7cf5aad9fbc9bc1f (diff)
downloadchromium_src-41fba0e6af7d9108cf120bc36d69ea875bfed831.zip
chromium_src-41fba0e6af7d9108cf120bc36d69ea875bfed831.tar.gz
chromium_src-41fba0e6af7d9108cf120bc36d69ea875bfed831.tar.bz2
Replace the gc extension in content shell with a gin::Wrappable class
BUG=334679 R=dcarney@chromium.org Review URL: https://codereview.chromium.org/139413003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@245258 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/shell/renderer/gc_controller.cc')
-rw-r--r--content/shell/renderer/gc_controller.cc55
1 files changed, 55 insertions, 0 deletions
diff --git a/content/shell/renderer/gc_controller.cc b/content/shell/renderer/gc_controller.cc
new file mode 100644
index 0000000..ad4fa04
--- /dev/null
+++ b/content/shell/renderer/gc_controller.cc
@@ -0,0 +1,55 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/shell/renderer/gc_controller.h"
+
+#include "gin/arguments.h"
+#include "gin/handle.h"
+#include "gin/object_template_builder.h"
+#include "third_party/WebKit/public/web/WebFrame.h"
+#include "third_party/WebKit/public/web/WebKit.h"
+#include "v8/include/v8.h"
+
+namespace content {
+
+gin::WrapperInfo GCController::kWrapperInfo = {gin::kEmbedderNativeGin};
+
+// static
+void GCController::Install(blink::WebFrame* frame) {
+ v8::Isolate* isolate = blink::mainThreadIsolate();
+ v8::HandleScope handle_scope(isolate);
+ v8::Handle<v8::Context> context = frame->mainWorldScriptContext();
+ if (context.IsEmpty())
+ return;
+
+ v8::Context::Scope context_scope(context);
+
+ gin::Handle<GCController> controller =
+ gin::CreateHandle(isolate, new GCController());
+ v8::Handle<v8::Object> global = context->Global();
+ global->Set(gin::StringToV8(isolate, "GCController"), controller.ToV8());
+}
+
+GCController::GCController() {}
+
+GCController::~GCController() {}
+
+gin::ObjectTemplateBuilder GCController::GetObjectTemplateBuilder(
+ v8::Isolate* isolate) {
+ return gin::Wrappable<GCController>::GetObjectTemplateBuilder(isolate)
+ .SetMethod("collect", &GCController::Collect)
+ .SetMethod("minorCollect", &GCController::MinorCollect);
+}
+
+void GCController::Collect(const gin::Arguments& args) {
+ args.isolate()->RequestGarbageCollectionForTesting(
+ v8::Isolate::kFullGarbageCollection);
+}
+
+void GCController::MinorCollect(const gin::Arguments& args) {
+ args.isolate()->RequestGarbageCollectionForTesting(
+ v8::Isolate::kMinorGarbageCollection);
+}
+
+} // namespace content