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

Unified Diff: content/renderer/dom_automation_controller.cc

Issue 131573003: Convert DomAutomationController from CppBoundClass to gin::Wrappable (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: updates Created 6 years, 11 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: content/renderer/dom_automation_controller.cc
diff --git a/content/renderer/dom_automation_controller.cc b/content/renderer/dom_automation_controller.cc
index b1f0d60b6a7d21df25f200a662c04831df594cfa..805426c86bbd5a6ad8dfc5e708f703164bd9a380 100644
--- a/content/renderer/dom_automation_controller.cc
+++ b/content/renderer/dom_automation_controller.cc
@@ -4,52 +4,57 @@
#include "content/renderer/dom_automation_controller.h"
-#include "base/bind.h"
-#include "base/bind_helpers.h"
#include "base/json/json_string_value_serializer.h"
-#include "base/metrics/histogram.h"
-#include "base/metrics/statistics_recorder.h"
#include "base/strings/string_util.h"
#include "content/common/child_process_messages.h"
#include "content/common/view_messages.h"
-
-using webkit_glue::CppArgumentList;
-using webkit_glue::CppVariant;
+#include "content/renderer/render_view_impl.h"
+#include "content/renderer/v8_value_converter_impl.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"
namespace content {
-DomAutomationController::DomAutomationController()
- : sender_(NULL),
- routing_id_(MSG_ROUTING_NONE),
- automation_id_(MSG_ROUTING_NONE) {
- BindCallback("send", base::Bind(&DomAutomationController::Send,
- base::Unretained(this)));
- BindCallback("setAutomationId",
- base::Bind(&DomAutomationController::SetAutomationId,
- base::Unretained(this)));
- BindCallback("sendJSON", base::Bind(&DomAutomationController::SendJSON,
- base::Unretained(this)));
- BindCallback("sendWithId", base::Bind(&DomAutomationController::SendWithId,
- base::Unretained(this)));
-}
+gin::WrapperInfo DomAutomationController::kWrapperInfo = {
+ gin::kEmbedderNativeGin};
-void DomAutomationController::Send(const CppArgumentList& args,
- CppVariant* result) {
- if (args.size() != 1) {
- result->SetNull();
+// static
+void DomAutomationController::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;
- }
- if (automation_id_ == MSG_ROUTING_NONE) {
- result->SetNull();
- return;
- }
+ v8::Context::Scope context_scope(context);
- if (!sender_) {
- NOTREACHED();
- result->SetNull();
- return;
- }
+ gin::Handle<DomAutomationController> controller =
+ gin::CreateHandle(isolate, new DomAutomationController(frame));
+ v8::Handle<v8::Object> global = context->Global();
+ global->Set(gin::StringToV8(isolate, "domAutomationController"),
+ controller.ToV8());
+}
+
+DomAutomationController::DomAutomationController(blink::WebFrame* frame)
+ : frame_(frame), automation_id_(MSG_ROUTING_NONE) {}
+
+DomAutomationController::~DomAutomationController() {}
+
+gin::ObjectTemplateBuilder DomAutomationController::GetObjectTemplateBuilder(
+ v8::Isolate* isolate) {
+ return gin::Wrappable<DomAutomationController>::GetObjectTemplateBuilder(
+ isolate)
+ .SetMethod("send", &DomAutomationController::Send)
+ .SetMethod("setAutomationId", &DomAutomationController::SetAutomationId)
+ .SetMethod("sendJSON", &DomAutomationController::SendJSON)
+ .SetMethod("sendWithId", &DomAutomationController::SendWithId);
+}
+
+bool DomAutomationController::Send(const gin::Arguments& args) {
+ if (automation_id_ == MSG_ROUTING_NONE)
+ return false;
std::string json;
JSONStringValueSerializer serializer(&json);
@@ -61,114 +66,47 @@ void DomAutomationController::Send(const CppArgumentList& args,
// writer is lenient, and (b) on the receiving side we wrap the JSON string
// in square brackets, converting it to an array, then parsing it and
// grabbing the 0th element to get the value out.
- switch (args[0].type) {
- case NPVariantType_String: {
- value.reset(new base::StringValue(args[0].ToString()));
- break;
- }
- case NPVariantType_Bool: {
- value.reset(new base::FundamentalValue(args[0].ToBoolean()));
- break;
- }
- case NPVariantType_Int32: {
- value.reset(new base::FundamentalValue(args[0].ToInt32()));
- break;
- }
- case NPVariantType_Double: {
- // The value that is sent back is an integer while it is treated
- // as a double in this binding. The reason being that KJS treats
- // any number value as a double. Refer for more details,
- // chrome/third_party/webkit/src/JavaScriptCore/bindings/c/c_utility.cpp
- value.reset(new base::FundamentalValue(args[0].ToInt32()));
- break;
- }
- default: {
- result->SetNull();
- return;
- }
+ if (args.PeekNext()->IsString() || args.PeekNext()->IsBoolean() ||
+ args.PeekNext()->IsNumber()) {
+ V8ValueConverterImpl conv;
+ value.reset(
+ conv.FromV8Value(args.PeekNext(), args.isolate()->GetCurrentContext()));
+ } else {
+ return false;
}
- if (!serializer.Serialize(*value)) {
- result->SetNull();
- return;
- }
+ if (!serializer.Serialize(*value))
+ return false;
- bool succeeded = sender_->Send(
- new ViewHostMsg_DomOperationResponse(routing_id_, json, automation_id_));
- result->Set(succeeded);
+ RenderViewImpl* render_view = RenderViewImpl::FromWebView(frame_->view());
+ bool succeeded = render_view->Send(new ViewHostMsg_DomOperationResponse(
+ render_view->GetRoutingID(), json, automation_id_));
automation_id_ = MSG_ROUTING_NONE;
+ return succeeded;
}
-void DomAutomationController::SendJSON(const CppArgumentList& args,
- CppVariant* result) {
- if (args.size() != 1) {
- result->SetNull();
- return;
- }
-
- if (automation_id_ == MSG_ROUTING_NONE) {
- result->SetNull();
- return;
- }
-
- if (!sender_) {
- NOTREACHED();
- result->SetNull();
- return;
- }
-
- if (args[0].type != NPVariantType_String) {
- result->SetNull();
- return;
- }
-
- std::string json = args[0].ToString();
- result->Set(sender_->Send(
- new ViewHostMsg_DomOperationResponse(routing_id_, json, automation_id_)));
+bool DomAutomationController::SendJSON(const std::string& json) {
+ if (automation_id_ == MSG_ROUTING_NONE)
+ return false;
+ RenderViewImpl* render_view = RenderViewImpl::FromWebView(frame_->view());
+ bool result = render_view->Send(new ViewHostMsg_DomOperationResponse(
+ render_view->GetRoutingID(), json, automation_id_));
automation_id_ = MSG_ROUTING_NONE;
+ return result;
}
-void DomAutomationController::SendWithId(const CppArgumentList& args,
- CppVariant* result) {
- if (args.size() != 2) {
- result->SetNull();
- return;
- }
-
- if (!sender_) {
- NOTREACHED();
- result->SetNull();
- return;
- }
-
- if (!args[0].isNumber() || args[1].type != NPVariantType_String) {
- result->SetNull();
- return;
- }
-
- result->Set(sender_->Send(
- new ViewHostMsg_DomOperationResponse(routing_id_, args[1].ToString(),
- args[0].ToInt32())));
+bool DomAutomationController::SendWithId(int automation_id,
+ const std::string& str) {
+ RenderViewImpl* render_view = RenderViewImpl::FromWebView(frame_->view());
+ return render_view->Send(new ViewHostMsg_DomOperationResponse(
+ render_view->GetRoutingID(), str, automation_id));
}
-void DomAutomationController::SetAutomationId(
- const CppArgumentList& args, CppVariant* result) {
- if (args.size() != 1) {
- result->SetNull();
- return;
- }
-
- // The check here is for NumberType and not Int32 as
- // KJS::JSType only defines a NumberType (no Int32)
- if (!args[0].isNumber()) {
- result->SetNull();
- return;
- }
-
- automation_id_ = args[0].ToInt32();
- result->Set(true);
+bool DomAutomationController::SetAutomationId(int automation_id) {
+ automation_id_ = automation_id;
+ return true;
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698