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) { |