summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--content/content_shell.gypi5
-rw-r--r--content/shell/renderer/DEPS3
-rw-r--r--content/shell/renderer/gc_controller.cc55
-rw-r--r--content/shell/renderer/gc_controller.h42
-rw-r--r--content/shell/renderer/gc_extension.cc29
-rw-r--r--content/shell/renderer/gc_extension.h23
-rw-r--r--content/shell/renderer/shell_render_process_observer.cc2
-rw-r--r--content/shell/renderer/webkit_test_runner.cc3
8 files changed, 106 insertions, 56 deletions
diff --git a/content/content_shell.gypi b/content/content_shell.gypi
index 403e15d..9edeacc 100644
--- a/content/content_shell.gypi
+++ b/content/content_shell.gypi
@@ -41,6 +41,7 @@
'../base/base.gyp:base',
'../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
'../components/components.gyp:breakpad_component',
+ '../gin/gin.gyp:gin',
'../ipc/ipc.gyp:ipc',
'../media/media.gyp:media',
'../net/net.gyp:net',
@@ -159,8 +160,8 @@
'shell/common/webkit_test_helpers.h',
'shell/geolocation/shell_access_token_store.cc',
'shell/geolocation/shell_access_token_store.h',
- 'shell/renderer/gc_extension.cc',
- 'shell/renderer/gc_extension.h',
+ 'shell/renderer/gc_controller.cc',
+ 'shell/renderer/gc_controller.h',
'shell/renderer/shell_content_renderer_client.cc',
'shell/renderer/shell_content_renderer_client.h',
'shell/renderer/shell_render_frame_observer.cc',
diff --git a/content/shell/renderer/DEPS b/content/shell/renderer/DEPS
new file mode 100644
index 0000000..b462077
--- /dev/null
+++ b/content/shell/renderer/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+ "+gin",
+]
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
diff --git a/content/shell/renderer/gc_controller.h b/content/shell/renderer/gc_controller.h
new file mode 100644
index 0000000..c2409e5
--- /dev/null
+++ b/content/shell/renderer/gc_controller.h
@@ -0,0 +1,42 @@
+// 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.
+
+#ifndef CONTENT_SHELL_RENDERER_GC_CONTROLLER_H_
+#define CONTENT_SHELL_RENDERER_GC_CONTROLLER_H_
+
+#include "base/basictypes.h"
+#include "gin/wrappable.h"
+
+namespace blink {
+class WebFrame;
+}
+
+namespace gin {
+class Arguments;
+}
+
+namespace content {
+
+class GCController : public gin::Wrappable<GCController> {
+ public:
+ static gin::WrapperInfo kWrapperInfo;
+ static void Install(blink::WebFrame* frame);
+
+ private:
+ GCController();
+ virtual ~GCController();
+
+ // gin::Wrappable.
+ virtual gin::ObjectTemplateBuilder GetObjectTemplateBuilder(
+ v8::Isolate* isolate) OVERRIDE;
+
+ void Collect(const gin::Arguments& args);
+ void MinorCollect(const gin::Arguments& args);
+
+ DISALLOW_COPY_AND_ASSIGN(GCController);
+};
+
+} // namespace content
+
+#endif // CONTENT_SHELL_RENDERER_GC_CONTROLLER_H_
diff --git a/content/shell/renderer/gc_extension.cc b/content/shell/renderer/gc_extension.cc
deleted file mode 100644
index 86afa2f..0000000
--- a/content/shell/renderer/gc_extension.cc
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2013 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_extension.h"
-
-#include "v8/include/v8.h"
-
-const char kGCExtensionName[] = "v8/GCController";
-
-namespace extensions_v8 {
-
-// static
-v8::Extension* GCExtension::Get() {
- v8::Extension* extension = new v8::Extension(
- kGCExtensionName,
- "(function () {"
- " var v8_gc;"
- " if (gc) v8_gc = gc;"
- " GCController = new Object();"
- " GCController.collect ="
- " function() {if (v8_gc) v8_gc(); };"
- " GCController.minorCollect ="
- " function() {if (v8_gc) v8_gc(true); };"
- " })();");
- return extension;
-}
-
-} // namespace extensions_v8
diff --git a/content/shell/renderer/gc_extension.h b/content/shell/renderer/gc_extension.h
deleted file mode 100644
index 4970a1c..0000000
--- a/content/shell/renderer/gc_extension.h
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2013 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.
-
-#ifndef CONTENT_SHELL_RENDERER_GC_EXTENSION_H_
-#define CONTENT_SHELL_RENDERER_GC_EXTENSION_H_
-
-namespace v8 {
-class Extension;
-}
-
-namespace extensions_v8 {
-
-// GCExtension is a v8 extension to expose a method into JS for triggering
-// garbage collection. This should only be used for debugging.
-class GCExtension {
- public:
- static v8::Extension* Get();
-};
-
-} // namespace extensions_v8
-
-#endif // CONTENT_SHELL_RENDERER_GC_EXTENSION_H_
diff --git a/content/shell/renderer/shell_render_process_observer.cc b/content/shell/renderer/shell_render_process_observer.cc
index 457ccc4..7c332a7 100644
--- a/content/shell/renderer/shell_render_process_observer.cc
+++ b/content/shell/renderer/shell_render_process_observer.cc
@@ -11,7 +11,6 @@
#include "content/public/test/layouttest_support.h"
#include "content/shell/common/shell_messages.h"
#include "content/shell/common/shell_switches.h"
-#include "content/shell/renderer/gc_extension.h"
#include "content/shell/renderer/shell_content_renderer_client.h"
#include "content/shell/renderer/test_runner/WebTestInterfaces.h"
#include "content/shell/renderer/webkit_test_runner.h"
@@ -68,7 +67,6 @@ void ShellRenderProcessObserver::WebKitInitialized() {
// We always expose GC to layout tests.
webkit_glue::SetJavaScriptFlags(" --expose-gc");
- RenderThread::Get()->RegisterExtension(extensions_v8::GCExtension::Get());
if (!CommandLine::ForCurrentProcess()->HasSwitch(
switches::kStableReleaseMode)) {
diff --git a/content/shell/renderer/webkit_test_runner.cc b/content/shell/renderer/webkit_test_runner.cc
index d733556..0f9f7e6 100644
--- a/content/shell/renderer/webkit_test_runner.cc
+++ b/content/shell/renderer/webkit_test_runner.cc
@@ -28,6 +28,7 @@
#include "content/public/test/layouttest_support.h"
#include "content/shell/common/shell_messages.h"
#include "content/shell/common/webkit_test_helpers.h"
+#include "content/shell/renderer/gc_controller.h"
#include "content/shell/renderer/shell_render_process_observer.h"
#include "content/shell/renderer/test_runner/WebTask.h"
#include "content/shell/renderer/test_runner/WebTestInterfaces.h"
@@ -545,6 +546,8 @@ void WebKitTestRunner::captureHistoryForWindow(
void WebKitTestRunner::DidClearWindowObject(WebFrame* frame, int world_id) {
WebTestingSupport::injectInternalsObject(frame);
ShellRenderProcessObserver::GetInstance()->test_interfaces()->bindTo(frame);
+ if (world_id == 0)
+ GCController::Install(frame);
}
bool WebKitTestRunner::OnMessageReceived(const IPC::Message& message) {