Chromium Code Reviews| 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) { |