Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/renderer/extensions/extension_process_bindings.h" | 5 #include "chrome/renderer/extensions/extension_process_bindings.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 161 } else if (name->Equals(v8::String::New("OpenChannelToTab"))) { | 161 } else if (name->Equals(v8::String::New("OpenChannelToTab"))) { |
| 162 return v8::FunctionTemplate::New(OpenChannelToTab); | 162 return v8::FunctionTemplate::New(OpenChannelToTab); |
| 163 } else if (name->Equals(v8::String::New("GetNextContextMenuId"))) { | 163 } else if (name->Equals(v8::String::New("GetNextContextMenuId"))) { |
| 164 return v8::FunctionTemplate::New(GetNextContextMenuId); | 164 return v8::FunctionTemplate::New(GetNextContextMenuId); |
| 165 } else if (name->Equals(v8::String::New("GetCurrentPageActions"))) { | 165 } else if (name->Equals(v8::String::New("GetCurrentPageActions"))) { |
| 166 return v8::FunctionTemplate::New(GetCurrentPageActions, | 166 return v8::FunctionTemplate::New(GetCurrentPageActions, |
| 167 v8::External::New(this)); | 167 v8::External::New(this)); |
| 168 } else if (name->Equals(v8::String::New("StartRequest"))) { | 168 } else if (name->Equals(v8::String::New("StartRequest"))) { |
| 169 return v8::FunctionTemplate::New(StartRequest, | 169 return v8::FunctionTemplate::New(StartRequest, |
| 170 v8::External::New(this)); | 170 v8::External::New(this)); |
| 171 } else if (name->Equals(v8::String::New("StartRequestForIOThread"))) { | |
| 172 return v8::FunctionTemplate::New(StartRequestForIOThread, | |
| 173 v8::External::New(this)); | |
| 171 } else if (name->Equals(v8::String::New("GetRenderViewId"))) { | 174 } else if (name->Equals(v8::String::New("GetRenderViewId"))) { |
| 172 return v8::FunctionTemplate::New(GetRenderViewId); | 175 return v8::FunctionTemplate::New(GetRenderViewId); |
| 173 } else if (name->Equals(v8::String::New("SetIconCommon"))) { | 176 } else if (name->Equals(v8::String::New("SetIconCommon"))) { |
| 174 return v8::FunctionTemplate::New(SetIconCommon, | 177 return v8::FunctionTemplate::New(SetIconCommon, |
| 175 v8::External::New(this)); | 178 v8::External::New(this)); |
| 176 } else if (name->Equals(v8::String::New("IsExtensionProcess"))) { | 179 } else if (name->Equals(v8::String::New("IsExtensionProcess"))) { |
| 177 return v8::FunctionTemplate::New(IsExtensionProcess, | 180 return v8::FunctionTemplate::New(IsExtensionProcess, |
| 178 v8::External::New(this)); | 181 v8::External::New(this)); |
| 179 } else if (name->Equals(v8::String::New("IsIncognitoProcess"))) { | 182 } else if (name->Equals(v8::String::New("IsIncognitoProcess"))) { |
| 180 return v8::FunctionTemplate::New(IsIncognitoProcess); | 183 return v8::FunctionTemplate::New(IsIncognitoProcess); |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 382 v8::String::New(id.c_str(), id.size())); | 385 v8::String::New(id.c_str(), id.size())); |
| 383 } | 386 } |
| 384 | 387 |
| 385 return page_action_vector; | 388 return page_action_vector; |
| 386 } | 389 } |
| 387 | 390 |
| 388 // Common code for starting an API request to the browser. |value_args| | 391 // Common code for starting an API request to the browser. |value_args| |
| 389 // contains the request's arguments. | 392 // contains the request's arguments. |
| 390 // Steals value_args contents for efficiency. | 393 // Steals value_args contents for efficiency. |
| 391 static v8::Handle<v8::Value> StartRequestCommon( | 394 static v8::Handle<v8::Value> StartRequestCommon( |
| 392 const v8::Arguments& args, ListValue* value_args) { | 395 const v8::Arguments& args, ListValue* value_args, bool for_io_thread) { |
| 393 ExtensionImpl* v8_extension = GetFromArguments<ExtensionImpl>(args); | 396 ExtensionImpl* v8_extension = GetFromArguments<ExtensionImpl>(args); |
| 394 | 397 |
| 395 // Get the current RenderView so that we can send a routed IPC message from | 398 // Get the current RenderView so that we can send a routed IPC message from |
| 396 // the correct source. | 399 // the correct source. |
| 397 RenderView* renderview = bindings_utils::GetRenderViewForCurrentContext(); | 400 RenderView* renderview = bindings_utils::GetRenderViewForCurrentContext(); |
| 398 if (!renderview) | 401 if (!renderview) |
| 399 return v8::Undefined(); | 402 return v8::Undefined(); |
| 400 | 403 |
| 401 std::string name = *v8::String::AsciiValue(args[0]); | 404 std::string name = *v8::String::AsciiValue(args[0]); |
| 402 const std::set<std::string>& function_names = | 405 const std::set<std::string>& function_names = |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 423 GetPendingRequestMap()[request_id].reset(new PendingRequest( | 426 GetPendingRequestMap()[request_id].reset(new PendingRequest( |
| 424 current_context, name)); | 427 current_context, name)); |
| 425 | 428 |
| 426 ExtensionHostMsg_Request_Params params; | 429 ExtensionHostMsg_Request_Params params; |
| 427 params.name = name; | 430 params.name = name; |
| 428 params.arguments.Swap(value_args); | 431 params.arguments.Swap(value_args); |
| 429 params.source_url = source_url; | 432 params.source_url = source_url; |
| 430 params.request_id = request_id; | 433 params.request_id = request_id; |
| 431 params.has_callback = has_callback; | 434 params.has_callback = has_callback; |
| 432 params.user_gesture = webframe->isProcessingUserGesture(); | 435 params.user_gesture = webframe->isProcessingUserGesture(); |
| 433 renderview->Send(new ExtensionHostMsg_Request( | 436 if (for_io_thread) { |
| 434 renderview->routing_id(), params)); | 437 renderview->Send(new ExtensionHostMsg_RequestForIOThread( |
| 438 renderview->routing_id(), params)); | |
| 439 } else { | |
| 440 renderview->Send(new ExtensionHostMsg_Request( | |
| 441 renderview->routing_id(), params)); | |
| 442 } | |
| 435 | 443 |
| 436 return v8::Undefined(); | 444 return v8::Undefined(); |
| 437 } | 445 } |
| 438 | 446 |
| 439 // Starts an API request to the browser, with an optional callback. The | 447 // Starts an API request to the browser, with an optional callback. The |
| 440 // callback will be dispatched to EventBindings::HandleResponse. | 448 // callback will be dispatched to EventBindings::HandleResponse. |
| 441 static v8::Handle<v8::Value> StartRequest(const v8::Arguments& args) { | 449 static v8::Handle<v8::Value> StartRequest(const v8::Arguments& args) { |
| 442 std::string str_args = *v8::String::Utf8Value(args[1]); | 450 std::string str_args = *v8::String::Utf8Value(args[1]); |
| 443 base::JSONReader reader; | 451 base::JSONReader reader; |
| 444 scoped_ptr<Value> value_args; | 452 scoped_ptr<Value> value_args; |
| 445 value_args.reset(reader.JsonToValue(str_args, false, false)); | 453 value_args.reset(reader.JsonToValue(str_args, false, false)); |
| 446 | 454 |
| 447 // Since we do the serialization in the v8 extension, we should always get | 455 // Since we do the serialization in the v8 extension, we should always get |
| 448 // valid JSON. | 456 // valid JSON. |
| 449 if (!value_args.get() || !value_args->IsType(Value::TYPE_LIST)) { | 457 if (!value_args.get() || !value_args->IsType(Value::TYPE_LIST)) { |
| 450 NOTREACHED() << "Invalid JSON passed to StartRequest."; | 458 NOTREACHED() << "Invalid JSON passed to StartRequest."; |
| 451 return v8::Undefined(); | 459 return v8::Undefined(); |
| 452 } | 460 } |
| 453 | 461 |
| 454 return StartRequestCommon(args, static_cast<ListValue*>(value_args.get())); | 462 return StartRequestCommon(args, static_cast<ListValue*>(value_args.get()), |
| 463 false); | |
| 464 } | |
| 465 | |
| 466 // Starts an API request to the browser, with an optional callback. The | |
| 467 // callback will be dispatched to EventBindings::HandleResponse. | |
| 468 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.
| |
| 469 const v8::Arguments& args) { | |
| 470 std::string str_args = *v8::String::Utf8Value(args[1]); | |
| 471 base::JSONReader reader; | |
| 472 scoped_ptr<Value> value_args; | |
| 473 value_args.reset(reader.JsonToValue(str_args, false, false)); | |
| 474 | |
| 475 // Since we do the serialization in the v8 extension, we should always get | |
| 476 // valid JSON. | |
| 477 if (!value_args.get() || !value_args->IsType(Value::TYPE_LIST)) { | |
| 478 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
| |
| 479 return v8::Undefined(); | |
| 480 } | |
| 481 | |
| 482 return StartRequestCommon(args, static_cast<ListValue*>(value_args.get()), | |
| 483 true); | |
| 455 } | 484 } |
| 456 | 485 |
| 457 static bool ConvertImageDataToBitmapValue( | 486 static bool ConvertImageDataToBitmapValue( |
| 458 const v8::Arguments& args, Value** bitmap_value) { | 487 const v8::Arguments& args, Value** bitmap_value) { |
| 459 v8::Local<v8::Object> extension_args = args[1]->ToObject(); | 488 v8::Local<v8::Object> extension_args = args[1]->ToObject(); |
| 460 v8::Local<v8::Object> details = | 489 v8::Local<v8::Object> details = |
| 461 extension_args->Get(v8::String::New("0"))->ToObject(); | 490 extension_args->Get(v8::String::New("0"))->ToObject(); |
| 462 v8::Local<v8::Object> image_data = | 491 v8::Local<v8::Object> image_data = |
| 463 details->Get(v8::String::New("imageData"))->ToObject(); | 492 details->Get(v8::String::New("imageData"))->ToObject(); |
| 464 v8::Local<v8::Object> data = | 493 v8::Local<v8::Object> data = |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 513 dict->Set("imageData", bitmap_value); | 542 dict->Set("imageData", bitmap_value); |
| 514 | 543 |
| 515 if (details->Has(v8::String::New("tabId"))) { | 544 if (details->Has(v8::String::New("tabId"))) { |
| 516 dict->SetInteger("tabId", | 545 dict->SetInteger("tabId", |
| 517 details->Get(v8::String::New("tabId"))->Int32Value()); | 546 details->Get(v8::String::New("tabId"))->Int32Value()); |
| 518 } | 547 } |
| 519 | 548 |
| 520 ListValue list_value; | 549 ListValue list_value; |
| 521 list_value.Append(dict); | 550 list_value.Append(dict); |
| 522 | 551 |
| 523 return StartRequestCommon(args, &list_value); | 552 return StartRequestCommon(args, &list_value, false); |
| 524 } | 553 } |
| 525 | 554 |
| 526 static v8::Handle<v8::Value> GetRenderViewId(const v8::Arguments& args) { | 555 static v8::Handle<v8::Value> GetRenderViewId(const v8::Arguments& args) { |
| 527 RenderView* renderview = bindings_utils::GetRenderViewForCurrentContext(); | 556 RenderView* renderview = bindings_utils::GetRenderViewForCurrentContext(); |
| 528 if (!renderview) | 557 if (!renderview) |
| 529 return v8::Undefined(); | 558 return v8::Undefined(); |
| 530 return v8::Integer::New(renderview->routing_id()); | 559 return v8::Integer::New(renderview->routing_id()); |
| 531 } | 560 } |
| 532 | 561 |
| 533 static v8::Handle<v8::Value> IsExtensionProcess(const v8::Arguments& args) { | 562 static v8::Handle<v8::Value> IsExtensionProcess(const v8::Arguments& args) { |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 574 if (!retval.IsEmpty() && !retval->IsUndefined()) { | 603 if (!retval.IsEmpty() && !retval->IsUndefined()) { |
| 575 std::string error = *v8::String::AsciiValue(retval); | 604 std::string error = *v8::String::AsciiValue(retval); |
| 576 DCHECK(false) << error; | 605 DCHECK(false) << error; |
| 577 } | 606 } |
| 578 #endif | 607 #endif |
| 579 | 608 |
| 580 request->second->context.Dispose(); | 609 request->second->context.Dispose(); |
| 581 request->second->context.Clear(); | 610 request->second->context.Clear(); |
| 582 pending_requests.erase(request); | 611 pending_requests.erase(request); |
| 583 } | 612 } |
| OLD | NEW |