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

Unified Diff: chrome/browser/extensions/api/messaging/extension_message_port.cc

Issue 1966283002: Remove port lifetime management from renderer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Simplify: Assume that opener port is open, only send reply if closed Created 4 years, 7 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 side-by-side diff with in-line comments
Download patch
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 3225143c9fb01729dbd1af9d8defaa5e6e2189de..bdb95669eaf0034fcf72c82a2fe39ace6cf5f77f 100644
--- a/chrome/browser/extensions/api/messaging/extension_message_port.cc
+++ b/chrome/browser/extensions/api/messaging/extension_message_port.cc
@@ -99,6 +99,7 @@ ExtensionMessagePort::ExtensionMessagePort(
extension_id_(extension_id),
browser_context_(extension_process->GetBrowserContext()),
extension_process_(extension_process),
+ opener_tab_id_(-1),
did_create_port_(false),
background_host_ptr_(nullptr),
frame_tracker_(new FrameTracker(this)) {
@@ -121,6 +122,7 @@ ExtensionMessagePort::ExtensionMessagePort(
extension_id_(extension_id),
browser_context_(rfh->GetProcess()->GetBrowserContext()),
extension_process_(nullptr),
+ opener_tab_id_(-1),
did_create_port_(false),
background_host_ptr_(nullptr),
frame_tracker_(new FrameTracker(this)) {
@@ -158,6 +160,16 @@ ExtensionMessagePort::ExtensionMessagePort(
ExtensionMessagePort::~ExtensionMessagePort() {}
+void ExtensionMessagePort::RevalidatePort() {
+ // Only opener ports need to be revalidated, because these are created in the
+ // renderer before the browser knows about them.
+ DCHECK(!extension_process_);
+ DCHECK_LE(frames_.size(), 1U);
+
+ SendToPort(base::WrapUnique(
+ new ExtensionMsg_CheckHasMessagePort(MSG_ROUTING_NONE, port_id_)));
+}
+
void ExtensionMessagePort::RemoveCommonFrames(const MessagePort& port) {
// Avoid overlap in the set of frames to make sure that it does not matter
// when UnregisterFrame is called.
@@ -190,8 +202,10 @@ void ExtensionMessagePort::DispatchOnConnect(
const GURL& source_url,
const std::string& tls_channel_id) {
ExtensionMsg_TabConnectionInfo source;
- if (source_tab)
+ if (source_tab) {
source.tab.Swap(source_tab.get());
+ source.tab.GetInteger("id", &opener_tab_id_);
+ }
source.frame_id = source_frame_id;
ExtensionMsg_ExternalConnectionInfo info;
@@ -212,8 +226,8 @@ void ExtensionMessagePort::DispatchOnDisconnect(
}
void ExtensionMessagePort::DispatchOnMessage(const Message& message) {
- SendToPort(base::WrapUnique(
- new ExtensionMsg_DeliverMessage(MSG_ROUTING_NONE, port_id_, message)));
+ SendToPort(base::WrapUnique(new ExtensionMsg_DeliverMessage(
+ MSG_ROUTING_NONE, port_id_, opener_tab_id_, message)));
}
void ExtensionMessagePort::IncrementLazyKeepaliveCount() {

Powered by Google App Engine
This is Rietveld 408576698