Index: chrome/browser/extensions/api/messaging/extension_message_port.cc |
diff --git a/chrome/browser/extensions/api/messaging/extension_message_port.cc b/chrome/browser/extensions/api/messaging/extension_message_port.cc |
index 2e7f595275062100631e5b98fd508baff4370863..71caf4e71e912d5de596ef0aedf57ab175c109fe 100644 |
--- a/chrome/browser/extensions/api/messaging/extension_message_port.cc |
+++ b/chrome/browser/extensions/api/messaging/extension_message_port.cc |
@@ -13,6 +13,7 @@ |
#include "content/public/browser/render_process_host.h" |
#include "content/public/browser/web_contents.h" |
#include "content/public/browser/web_contents_observer.h" |
+#include "content/public/common/child_process_host.h" |
#include "extensions/browser/extension_host.h" |
#include "extensions/browser/process_manager.h" |
#include "extensions/browser/process_manager_observer.h" |
@@ -196,8 +197,9 @@ void ExtensionMessagePort::DispatchOnConnect( |
const std::string& channel_name, |
std::unique_ptr<base::DictionaryValue> source_tab, |
int source_frame_id, |
- int guest_process_id, |
- int guest_render_frame_routing_id, |
+ bool include_guest_process_info, |
+ int source_process_id, |
+ int source_render_frame_routing_id, |
const std::string& source_extension_id, |
const std::string& target_extension_id, |
const GURL& source_url, |
@@ -213,8 +215,17 @@ void ExtensionMessagePort::DispatchOnConnect( |
info.target_id = target_extension_id; |
info.source_id = source_extension_id; |
info.source_url = source_url; |
- info.guest_process_id = guest_process_id; |
- info.guest_render_frame_routing_id = guest_render_frame_routing_id; |
+ info.guest_process_id = include_guest_process_info |
dcheng
2016/11/27 01:08:18
I thought we try not to plumb process ID informati
|
+ ? source_process_id |
+ : content::ChildProcessHost::kInvalidUniqueID; |
+ info.source_render_frame_routing_id = source_render_frame_routing_id; |
+ // As an optimization, SendToPort will broadcast messages targeting extensions |
+ // to the extension process instead of its individual frames. As a result, if |
+ // the sender is also in the extension process, it will also be notified. This |
+ // flag (together with |source_render_frame_routing_id|) is used to avoid |
+ // unnecessarily dispatching onConnect to the sending frame in this case. |
+ info.source_is_in_same_process = |
+ extension_process_ && extension_process_->GetID() == source_process_id; |
SendToPort(base::MakeUnique<ExtensionMsg_DispatchOnConnect>( |
MSG_ROUTING_NONE, port_id_, channel_name, source, info, tls_channel_id)); |