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

Unified Diff: chrome/renderer/extensions/extension_process_bindings.cc

Issue 7024056: Handle extension webrequest API on the IO thread. This speeds up blocking event (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix broken test Created 9 years, 6 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: chrome/renderer/extensions/extension_process_bindings.cc
diff --git a/chrome/renderer/extensions/extension_process_bindings.cc b/chrome/renderer/extensions/extension_process_bindings.cc
index 7903875777308c7a86ab9b2234fa4b63600343c9..02f799f6569305e068eac2118fffb7a3af0048b8 100644
--- a/chrome/renderer/extensions/extension_process_bindings.cc
+++ b/chrome/renderer/extensions/extension_process_bindings.cc
@@ -168,6 +168,9 @@ class ExtensionImpl : public ExtensionBase {
} else if (name->Equals(v8::String::New("StartRequest"))) {
return v8::FunctionTemplate::New(StartRequest,
v8::External::New(this));
+ } else if (name->Equals(v8::String::New("StartRequestForIOThread"))) {
+ return v8::FunctionTemplate::New(StartRequestForIOThread,
+ v8::External::New(this));
} else if (name->Equals(v8::String::New("GetRenderViewId"))) {
return v8::FunctionTemplate::New(GetRenderViewId);
} else if (name->Equals(v8::String::New("SetIconCommon"))) {
@@ -389,7 +392,7 @@ class ExtensionImpl : public ExtensionBase {
// contains the request's arguments.
// Steals value_args contents for efficiency.
static v8::Handle<v8::Value> StartRequestCommon(
- const v8::Arguments& args, ListValue* value_args) {
+ const v8::Arguments& args, ListValue* value_args, bool for_io_thread) {
ExtensionImpl* v8_extension = GetFromArguments<ExtensionImpl>(args);
// Get the current RenderView so that we can send a routed IPC message from
@@ -430,8 +433,13 @@ class ExtensionImpl : public ExtensionBase {
params.request_id = request_id;
params.has_callback = has_callback;
params.user_gesture = webframe->isProcessingUserGesture();
- renderview->Send(new ExtensionHostMsg_Request(
- renderview->routing_id(), params));
+ if (for_io_thread) {
+ renderview->Send(new ExtensionHostMsg_RequestForIOThread(
+ renderview->routing_id(), params));
+ } else {
+ renderview->Send(new ExtensionHostMsg_Request(
+ renderview->routing_id(), params));
+ }
return v8::Undefined();
}
@@ -451,7 +459,28 @@ class ExtensionImpl : public ExtensionBase {
return v8::Undefined();
}
- return StartRequestCommon(args, static_cast<ListValue*>(value_args.get()));
+ return StartRequestCommon(args, static_cast<ListValue*>(value_args.get()),
+ false);
+ }
+
+ // Starts an API request to the browser, with an optional callback. The
+ // callback will be dispatched to EventBindings::HandleResponse.
+ static v8::Handle<v8::Value> StartRequestForIOThread(
Mihai Parparita -not on Chrome 2011/06/08 01:11:59 This seems very similar to StartRequest. Can the f
Matt Perry 2011/06/08 20:47:00 Done.
+ const v8::Arguments& args) {
+ std::string str_args = *v8::String::Utf8Value(args[1]);
+ base::JSONReader reader;
+ scoped_ptr<Value> value_args;
+ value_args.reset(reader.JsonToValue(str_args, false, false));
+
+ // Since we do the serialization in the v8 extension, we should always get
+ // valid JSON.
+ if (!value_args.get() || !value_args->IsType(Value::TYPE_LIST)) {
+ NOTREACHED() << "Invalid JSON passed to StartRequest.";
Mihai Parparita -not on Chrome 2011/06/08 01:11:59 If you do keep this function, the message here sho
+ return v8::Undefined();
+ }
+
+ return StartRequestCommon(args, static_cast<ListValue*>(value_args.get()),
+ true);
}
static bool ConvertImageDataToBitmapValue(
@@ -520,7 +549,7 @@ class ExtensionImpl : public ExtensionBase {
ListValue list_value;
list_value.Append(dict);
- return StartRequestCommon(args, &list_value);
+ return StartRequestCommon(args, &list_value, false);
}
static v8::Handle<v8::Value> GetRenderViewId(const v8::Arguments& args) {

Powered by Google App Engine
This is Rietveld 408576698