| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/extension_message_service.h" | 5 #include "chrome/browser/extensions/extension_message_service.h" |
| 6 | 6 |
| 7 #include "base/json/json_writer.h" | 7 #include "base/json/json_writer.h" |
| 8 #include "base/singleton.h" | 8 #include "base/singleton.h" |
| 9 #include "base/stl_util-inl.h" | 9 #include "base/stl_util-inl.h" |
| 10 #include "base/values.h" | 10 #include "base/values.h" |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 | 107 |
| 108 const char ExtensionMessageService::kDispatchOnConnect[] = | 108 const char ExtensionMessageService::kDispatchOnConnect[] = |
| 109 "Port.dispatchOnConnect"; | 109 "Port.dispatchOnConnect"; |
| 110 const char ExtensionMessageService::kDispatchOnDisconnect[] = | 110 const char ExtensionMessageService::kDispatchOnDisconnect[] = |
| 111 "Port.dispatchOnDisconnect"; | 111 "Port.dispatchOnDisconnect"; |
| 112 const char ExtensionMessageService::kDispatchOnMessage[] = | 112 const char ExtensionMessageService::kDispatchOnMessage[] = |
| 113 "Port.dispatchOnMessage"; | 113 "Port.dispatchOnMessage"; |
| 114 const char ExtensionMessageService::kDispatchEvent[] = | 114 const char ExtensionMessageService::kDispatchEvent[] = |
| 115 "Event.dispatchJSON"; | 115 "Event.dispatchJSON"; |
| 116 | 116 |
| 117 // static |
| 118 std::string ExtensionMessageService::GetPerExtensionEventName( |
| 119 const std::string& event_name, const std::string& extension_id) { |
| 120 // This should match the method we use in extension_process_binding.js when |
| 121 // setting up the corresponding chrome.Event object. |
| 122 return event_name + "/" + extension_id; |
| 123 } |
| 124 |
| 117 ExtensionMessageService::ExtensionMessageService(Profile* profile) | 125 ExtensionMessageService::ExtensionMessageService(Profile* profile) |
| 118 : profile_(profile), | 126 : profile_(profile), |
| 119 extension_devtools_manager_(NULL), | 127 extension_devtools_manager_(NULL), |
| 120 next_port_id_(0) { | 128 next_port_id_(0) { |
| 121 registrar_.Add(this, NotificationType::RENDERER_PROCESS_TERMINATED, | 129 registrar_.Add(this, NotificationType::RENDERER_PROCESS_TERMINATED, |
| 122 NotificationService::AllSources()); | 130 NotificationService::AllSources()); |
| 123 registrar_.Add(this, NotificationType::RENDERER_PROCESS_CLOSED, | 131 registrar_.Add(this, NotificationType::RENDERER_PROCESS_CLOSED, |
| 124 NotificationService::AllSources()); | 132 NotificationService::AllSources()); |
| 125 registrar_.Add(this, NotificationType::RENDER_VIEW_HOST_DELETED, | 133 registrar_.Add(this, NotificationType::RENDER_VIEW_HOST_DELETED, |
| 126 NotificationService::AllSources()); | 134 NotificationService::AllSources()); |
| (...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 478 HasExtensionBindings(*pid)) { | 486 HasExtensionBindings(*pid)) { |
| 479 // Don't send browser-level events to unprivileged processes. | 487 // Don't send browser-level events to unprivileged processes. |
| 480 continue; | 488 continue; |
| 481 } | 489 } |
| 482 | 490 |
| 483 DispatchEvent( | 491 DispatchEvent( |
| 484 renderer, event_name, event_args, has_incognito_data, event_url); | 492 renderer, event_name, event_args, has_incognito_data, event_url); |
| 485 } | 493 } |
| 486 } | 494 } |
| 487 | 495 |
| 496 void ExtensionMessageService::DispatchEventToExtension( |
| 497 const std::string& extension_id, |
| 498 const std::string& event_name, const std::string& event_args, |
| 499 bool has_incognito_data, const GURL& event_url) { |
| 500 DispatchEventToRenderers(GetPerExtensionEventName(event_name, extension_id), |
| 501 event_args, has_incognito_data, event_url); |
| 502 } |
| 503 |
| 488 void ExtensionMessageService::Observe(NotificationType type, | 504 void ExtensionMessageService::Observe(NotificationType type, |
| 489 const NotificationSource& source, | 505 const NotificationSource& source, |
| 490 const NotificationDetails& details) { | 506 const NotificationDetails& details) { |
| 491 DCHECK_EQ(MessageLoop::current()->type(), MessageLoop::TYPE_UI); | 507 DCHECK_EQ(MessageLoop::current()->type(), MessageLoop::TYPE_UI); |
| 492 | 508 |
| 493 switch (type.value) { | 509 switch (type.value) { |
| 494 case NotificationType::RENDERER_PROCESS_TERMINATED: | 510 case NotificationType::RENDERER_PROCESS_TERMINATED: |
| 495 case NotificationType::RENDERER_PROCESS_CLOSED: { | 511 case NotificationType::RENDERER_PROCESS_CLOSED: { |
| 496 RenderProcessHost* renderer = Source<RenderProcessHost>(source).ptr(); | 512 RenderProcessHost* renderer = Source<RenderProcessHost>(source).ptr(); |
| 497 OnSenderClosed(renderer); | 513 OnSenderClosed(renderer); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 550 | 566 |
| 551 if (current->second->opener.sender == sender) { | 567 if (current->second->opener.sender == sender) { |
| 552 CloseChannelImpl(current, GET_CHANNEL_OPENER_ID(current->first), | 568 CloseChannelImpl(current, GET_CHANNEL_OPENER_ID(current->first), |
| 553 notify_other_port); | 569 notify_other_port); |
| 554 } else if (current->second->receiver.sender == sender) { | 570 } else if (current->second->receiver.sender == sender) { |
| 555 CloseChannelImpl(current, GET_CHANNEL_RECEIVERS_ID(current->first), | 571 CloseChannelImpl(current, GET_CHANNEL_RECEIVERS_ID(current->first), |
| 556 notify_other_port); | 572 notify_other_port); |
| 557 } | 573 } |
| 558 } | 574 } |
| 559 } | 575 } |
| OLD | NEW |