diff options
author | jochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-16 18:19:42 +0000 |
---|---|---|
committer | jochen@chromium.org <jochen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-16 18:19:42 +0000 |
commit | 41fba0e6af7d9108cf120bc36d69ea875bfed831 (patch) | |
tree | 5c2f3e8c1eee0d930c9bef0542c9955ec55c284d /content/shell/renderer/gc_controller.cc | |
parent | 73907d5539367bd173068e9e7cf5aad9fbc9bc1f (diff) | |
download | chromium_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.cc | 55 |
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 |