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

Side by Side Diff: chrome/renderer/extensions/extension_process_bindings.cc

Issue 251093: Modify extension request IPC messages to pass a ListValue instead of a string. (Closed)
Patch Set: notreached messages Created 11 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 <map> 5 #include <map>
6 #include <set> 6 #include <set>
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "chrome/renderer/extensions/extension_process_bindings.h" 10 #include "chrome/renderer/extensions/extension_process_bindings.h"
11 11
12 #include "base/json_reader.h"
12 #include "base/singleton.h" 13 #include "base/singleton.h"
13 #include "chrome/common/extensions/extension.h" 14 #include "chrome/common/extensions/extension.h"
14 #include "chrome/common/extensions/extension_message_bundle.h" 15 #include "chrome/common/extensions/extension_message_bundle.h"
15 #include "chrome/common/extensions/url_pattern.h" 16 #include "chrome/common/extensions/url_pattern.h"
16 #include "chrome/common/render_messages.h" 17 #include "chrome/common/render_messages.h"
17 #include "chrome/common/url_constants.h" 18 #include "chrome/common/url_constants.h"
18 #include "chrome/renderer/extensions/bindings_utils.h" 19 #include "chrome/renderer/extensions/bindings_utils.h"
19 #include "chrome/renderer/extensions/event_bindings.h" 20 #include "chrome/renderer/extensions/event_bindings.h"
20 #include "chrome/renderer/extensions/js_only_v8_extensions.h" 21 #include "chrome/renderer/extensions/js_only_v8_extensions.h"
21 #include "chrome/renderer/extensions/renderer_extension_bindings.h" 22 #include "chrome/renderer/extensions/renderer_extension_bindings.h"
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 std::string name = *v8::String::AsciiValue(args[0]); 346 std::string name = *v8::String::AsciiValue(args[0]);
346 if (GetFunctionNameSet()->find(name) == GetFunctionNameSet()->end()) { 347 if (GetFunctionNameSet()->find(name) == GetFunctionNameSet()->end()) {
347 NOTREACHED() << "Unexpected function " << name; 348 NOTREACHED() << "Unexpected function " << name;
348 return v8::Undefined(); 349 return v8::Undefined();
349 } 350 }
350 351
351 if (!ExtensionProcessBindings::CurrentContextHasPermission(name)) { 352 if (!ExtensionProcessBindings::CurrentContextHasPermission(name)) {
352 return ExtensionProcessBindings::ThrowPermissionDeniedException(name); 353 return ExtensionProcessBindings::ThrowPermissionDeniedException(name);
353 } 354 }
354 355
355 std::string json_args = *v8::String::Utf8Value(args[1]); 356 std::string str_args = *v8::String::Utf8Value(args[1]);
356 int request_id = args[2]->Int32Value(); 357 int request_id = args[2]->Int32Value();
357 bool has_callback = args[3]->BooleanValue(); 358 bool has_callback = args[3]->BooleanValue();
358 359
360 ListValue args_holder;
361 JSONReader reader;
362 Value* json_args = reader.JsonToValue(str_args, false, false);
363
364 // Since we do the serialization in the v8 extension, we should always get
365 // valid JSON.
366 if (!json_args) {
367 NOTREACHED() << "Invalid JSON passed to StartRequest.";
368 return v8::Undefined();
369 }
370
371 // Put the args in a 1-element list for easier serialization. Maybe all
372 // requests should have a list of args?
373 args_holder.Append(json_args);
374
359 v8::Persistent<v8::Context> current_context = 375 v8::Persistent<v8::Context> current_context =
360 v8::Persistent<v8::Context>::New(v8::Context::GetCurrent()); 376 v8::Persistent<v8::Context>::New(v8::Context::GetCurrent());
361 DCHECK(!current_context.IsEmpty()); 377 DCHECK(!current_context.IsEmpty());
362 GetPendingRequestMap()[request_id].reset(new PendingRequest( 378 GetPendingRequestMap()[request_id].reset(new PendingRequest(
363 current_context, name)); 379 current_context, name));
364 380
365 renderview->SendExtensionRequest(name, json_args, request_id, has_callback); 381 renderview->SendExtensionRequest(name, args_holder,
382 request_id, has_callback);
366 383
367 return v8::Undefined(); 384 return v8::Undefined();
368 } 385 }
369 386
370 static v8::Handle<v8::Value> GetRenderViewId(const v8::Arguments& args) { 387 static v8::Handle<v8::Value> GetRenderViewId(const v8::Arguments& args) {
371 RenderView* renderview = bindings_utils::GetRenderViewForCurrentContext(); 388 RenderView* renderview = bindings_utils::GetRenderViewForCurrentContext();
372 if (!renderview) 389 if (!renderview)
373 return v8::Undefined(); 390 return v8::Undefined();
374 return v8::Integer::New(renderview->routing_id()); 391 return v8::Integer::New(renderview->routing_id());
375 } 392 }
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 return; 533 return;
517 534
518 v8::HandleScope handle_scope; 535 v8::HandleScope handle_scope;
519 WebFrame* frame = view->mainFrame(); 536 WebFrame* frame = view->mainFrame();
520 v8::Local<v8::Context> context = frame->mainWorldScriptContext(); 537 v8::Local<v8::Context> context = frame->mainWorldScriptContext();
521 v8::Handle<v8::Value> argv[1]; 538 v8::Handle<v8::Value> argv[1];
522 argv[0] = v8::String::New(type_str); 539 argv[0] = v8::String::New(type_str);
523 bindings_utils::CallFunctionInContext(context, "setViewType", 540 bindings_utils::CallFunctionInContext(context, "setViewType",
524 arraysize(argv), argv); 541 arraysize(argv), argv);
525 } 542 }
OLDNEW
« no previous file with comments | « chrome/renderer/extensions/extension_api_client_unittest.cc ('k') | chrome/renderer/render_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698