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

Side by Side Diff: trunk/src/chrome/browser/extensions/api/messaging/message_service.cc

Issue 16336011: Revert 203489 "Replace JSON (de)serialization of extension messa..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/browser/extensions/api/messaging/message_service.h" 5 #include "chrome/browser/extensions/api/messaging/message_service.h"
6 6
7 #include "base/atomic_sequence_num.h" 7 #include "base/atomic_sequence_num.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/bind_helpers.h"
10 #include "base/callback.h" 9 #include "base/callback.h"
11 #include "base/json/json_writer.h" 10 #include "base/json/json_writer.h"
12 #include "base/lazy_instance.h" 11 #include "base/lazy_instance.h"
13 #include "base/stl_util.h" 12 #include "base/stl_util.h"
14 #include "base/values.h" 13 #include "base/values.h"
15 #include "chrome/browser/extensions/api/messaging/extension_message_port.h" 14 #include "chrome/browser/extensions/api/messaging/extension_message_port.h"
16 #include "chrome/browser/extensions/api/messaging/native_message_port.h" 15 #include "chrome/browser/extensions/api/messaging/native_message_port.h"
17 #include "chrome/browser/extensions/extension_host.h" 16 #include "chrome/browser/extensions/extension_host.h"
18 #include "chrome/browser/extensions/extension_process_manager.h" 17 #include "chrome/browser/extensions/extension_process_manager.h"
19 #include "chrome/browser/extensions/extension_service.h" 18 #include "chrome/browser/extensions/extension_service.h"
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 422
424 // Balance the IncrementLazyKeepaliveCount() in OpenChannelImpl. 423 // Balance the IncrementLazyKeepaliveCount() in OpenChannelImpl.
425 channel->opener->DecrementLazyKeepaliveCount(); 424 channel->opener->DecrementLazyKeepaliveCount();
426 channel->receiver->DecrementLazyKeepaliveCount(); 425 channel->receiver->DecrementLazyKeepaliveCount();
427 426
428 delete channel_iter->second; 427 delete channel_iter->second;
429 channels_.erase(channel_iter); 428 channels_.erase(channel_iter);
430 } 429 }
431 430
432 void MessageService::PostMessage( 431 void MessageService::PostMessage(
433 int source_port_id, scoped_ptr<base::ListValue> message) { 432 int source_port_id, const std::string& message) {
434 int channel_id = GET_CHANNEL_ID(source_port_id); 433 int channel_id = GET_CHANNEL_ID(source_port_id);
435 MessageChannelMap::iterator iter = channels_.find(channel_id); 434 MessageChannelMap::iterator iter = channels_.find(channel_id);
436 if (iter == channels_.end()) { 435 if (iter == channels_.end()) {
437 // If this channel is pending, queue up the PostMessage to run once 436 // If this channel is pending, queue up the PostMessage to run once
438 // the channel opens. 437 // the channel opens.
439 PendingChannelMap::iterator pending = pending_channels_.find(channel_id); 438 PendingChannelMap::iterator pending = pending_channels_.find(channel_id);
440 if (pending != pending_channels_.end()) { 439 if (pending != pending_channels_.end()) {
441 lazy_background_task_queue_->AddPendingTask( 440 lazy_background_task_queue_->AddPendingTask(
442 pending->second.first, pending->second.second, 441 pending->second.first, pending->second.second,
443 base::Bind(&MessageService::PendingPostMessage, 442 base::Bind(&MessageService::PendingPostMessage,
444 weak_factory_.GetWeakPtr(), 443 weak_factory_.GetWeakPtr(), source_port_id, message));
445 source_port_id,
446 base::Passed(&message)));
447 } 444 }
448 return; 445 return;
449 } 446 }
450 447
451 // Figure out which port the ID corresponds to. 448 // Figure out which port the ID corresponds to.
452 int dest_port_id = GET_OPPOSITE_PORT_ID(source_port_id); 449 int dest_port_id = GET_OPPOSITE_PORT_ID(source_port_id);
453 MessagePort* port = IS_OPENER_PORT_ID(dest_port_id) ? 450 MessagePort* port = IS_OPENER_PORT_ID(dest_port_id) ?
454 iter->second->opener.get() : iter->second->receiver.get(); 451 iter->second->opener.get() : iter->second->receiver.get();
455 452
456 port->DispatchOnMessage(message.Pass(), dest_port_id); 453 port->DispatchOnMessage(message, dest_port_id);
457 } 454 }
458 455
459 void MessageService::PostMessageFromNativeProcess( 456 void MessageService::PostMessageFromNativeProcess(int port_id,
460 int port_id, 457 const std::string& message) {
461 scoped_ptr<base::ListValue> message) { 458 PostMessage(port_id, message);
462 PostMessage(port_id, message.Pass());
463 } 459 }
464 460
465 void MessageService::Observe(int type, 461 void MessageService::Observe(int type,
466 const content::NotificationSource& source, 462 const content::NotificationSource& source,
467 const content::NotificationDetails& details) { 463 const content::NotificationDetails& details) {
468 switch (type) { 464 switch (type) {
469 case content::NOTIFICATION_RENDERER_PROCESS_TERMINATED: 465 case content::NOTIFICATION_RENDERER_PROCESS_TERMINATED:
470 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: { 466 case content::NOTIFICATION_RENDERER_PROCESS_CLOSED: {
471 content::RenderProcessHost* renderer = 467 content::RenderProcessHost* renderer =
472 content::Source<content::RenderProcessHost>(source).ptr(); 468 content::Source<content::RenderProcessHost>(source).ptr();
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 return; 540 return;
545 541
546 params->source = source; 542 params->source = source;
547 params->receiver.reset(new ExtensionMessagePort(host->render_process_host(), 543 params->receiver.reset(new ExtensionMessagePort(host->render_process_host(),
548 MSG_ROUTING_CONTROL, 544 MSG_ROUTING_CONTROL,
549 params->target_extension_id)); 545 params->target_extension_id));
550 OpenChannelImpl(params.Pass()); 546 OpenChannelImpl(params.Pass());
551 } 547 }
552 548
553 } // namespace extensions 549 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698