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

Unified Diff: chrome/browser/renderer_host/chrome_extension_message_filter.cc

Issue 2547753002: [Extensions] Extension Port Ids and Initialization 2.0 (Closed)
Patch Set: Rob's test Created 4 years 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/renderer_host/chrome_extension_message_filter.cc
diff --git a/chrome/browser/renderer_host/chrome_extension_message_filter.cc b/chrome/browser/renderer_host/chrome_extension_message_filter.cc
index 3b1ef45bc0bb4594811b9f068d4d4814e19db217..74542bff22210b2b2cc4aba467a5f79844bc4ad8 100644
--- a/chrome/browser/renderer_host/chrome_extension_message_filter.cc
+++ b/chrome/browser/renderer_host/chrome_extension_message_filter.cc
@@ -9,6 +9,8 @@
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/files/file_path.h"
+#include "base/guid.h"
+#include "base/logging.h"
#include "base/macros.h"
#include "base/memory/ptr_util.h"
#include "base/strings/utf_string_conversions.h"
@@ -33,6 +35,12 @@
using content::BrowserThread;
+#define VALIDATE_PORT_ID(port_id) \
+ if (!base::IsValidGUID(port_id.context_id)) { \
+ NOTREACHED(); \
+ return; \
+ }
+
namespace {
const uint32_t kFilteredMessageClasses[] = {
@@ -80,8 +88,6 @@ bool ChromeExtensionMessageFilter::OnMessageReceived(
IPC_BEGIN_MESSAGE_MAP(ChromeExtensionMessageFilter, message)
IPC_MESSAGE_HANDLER(ExtensionHostMsg_OpenChannelToExtension,
OnOpenChannelToExtension)
- IPC_MESSAGE_HANDLER(ExtensionHostMsg_OpenChannelToExtensionSync,
- OnOpenChannelToExtensionSync)
IPC_MESSAGE_HANDLER(ExtensionHostMsg_OpenChannelToTab, OnOpenChannelToTab)
IPC_MESSAGE_HANDLER(ExtensionHostMsg_OpenChannelToNativeApp,
OnOpenChannelToNativeApp)
@@ -105,6 +111,9 @@ bool ChromeExtensionMessageFilter::OnMessageReceived(
void ChromeExtensionMessageFilter::OverrideThreadForMessage(
const IPC::Message& message, BrowserThread::ID* thread) {
switch (message.type()) {
+ case ExtensionHostMsg_OpenChannelToExtension::ID:
+ case ExtensionHostMsg_OpenChannelToTab::ID:
+ case ExtensionHostMsg_OpenChannelToNativeApp::ID:
case ExtensionHostMsg_OpenMessagePort::ID:
case ExtensionHostMsg_CloseMessagePort::ID:
case ExtensionHostMsg_PostMessage::ID:
@@ -131,84 +140,25 @@ void ChromeExtensionMessageFilter::OnOpenChannelToExtension(
const ExtensionMsg_ExternalConnectionInfo& info,
const std::string& channel_name,
bool include_tls_channel_id,
- int request_id) {
- int port1_id = 0;
- int port2_id = 0;
- extensions::MessageService::AllocatePortIdPair(&port1_id, &port2_id);
- Send(new ExtensionMsg_AssignPortId(routing_id, port1_id, request_id));
-
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(
- &ChromeExtensionMessageFilter::OpenChannelToExtensionOnUIThread, this,
- render_process_id_, routing_id, port2_id, info, channel_name,
- include_tls_channel_id));
-}
-
-void ChromeExtensionMessageFilter::OnOpenChannelToExtensionSync(
- int routing_id,
- const ExtensionMsg_ExternalConnectionInfo& info,
- const std::string& channel_name,
- bool include_tls_channel_id,
- int* port_id) {
- int port2_id = 0;
- extensions::MessageService::AllocatePortIdPair(port_id, &port2_id);
-
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(
- &ChromeExtensionMessageFilter::OpenChannelToExtensionOnUIThread, this,
- render_process_id_, routing_id, port2_id, info, channel_name,
- include_tls_channel_id));
-}
-
-void ChromeExtensionMessageFilter::OpenChannelToExtensionOnUIThread(
- int source_process_id, int source_routing_id,
- int receiver_port_id,
- const ExtensionMsg_ExternalConnectionInfo& info,
- const std::string& channel_name,
- bool include_tls_channel_id) {
+ const extensions::PortId& port_id) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ VALIDATE_PORT_ID(port_id);
if (profile_) {
- extensions::MessageService::Get(profile_)
- ->OpenChannelToExtension(source_process_id,
- source_routing_id,
- receiver_port_id,
- info.source_id,
- info.target_id,
- info.source_url,
- channel_name,
- include_tls_channel_id);
+ extensions::MessageService::Get(profile_)->OpenChannelToExtension(
+ render_process_id_, routing_id, port_id, info.source_id,
+ info.target_id, info.source_url, channel_name, include_tls_channel_id);
}
}
void ChromeExtensionMessageFilter::OnOpenChannelToNativeApp(
int routing_id,
const std::string& native_app_name,
- int request_id) {
- int port1_id = 0;
- int port2_id = 0;
- extensions::MessageService::AllocatePortIdPair(&port1_id, &port2_id);
- Send(new ExtensionMsg_AssignPortId(routing_id, port1_id, request_id));
-
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(
- &ChromeExtensionMessageFilter::OpenChannelToNativeAppOnUIThread,
- this, routing_id, port2_id, native_app_name));
-}
-
-void ChromeExtensionMessageFilter::OpenChannelToNativeAppOnUIThread(
- int source_routing_id,
- int receiver_port_id,
- const std::string& native_app_name) {
+ const extensions::PortId& port_id) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ VALIDATE_PORT_ID(port_id);
if (profile_) {
- extensions::MessageService::Get(profile_)
- ->OpenChannelToNativeApp(render_process_id_,
- source_routing_id,
- receiver_port_id,
- native_app_name);
+ extensions::MessageService::Get(profile_)->OpenChannelToNativeApp(
+ render_process_id_, routing_id, port_id, native_app_name);
}
}
@@ -217,41 +167,20 @@ void ChromeExtensionMessageFilter::OnOpenChannelToTab(
const ExtensionMsg_TabTargetConnectionInfo& info,
const std::string& extension_id,
const std::string& channel_name,
- int request_id) {
- int port1_id = 0;
- int port2_id = 0;
- extensions::MessageService::AllocatePortIdPair(&port1_id, &port2_id);
- Send(new ExtensionMsg_AssignPortId(routing_id, port1_id, request_id));
-
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- base::Bind(&ChromeExtensionMessageFilter::OpenChannelToTabOnUIThread,
- this, render_process_id_, routing_id, port2_id, info,
- extension_id, channel_name));
-}
-
-void ChromeExtensionMessageFilter::OpenChannelToTabOnUIThread(
- int source_process_id,
- int source_routing_id,
- int receiver_port_id,
- const ExtensionMsg_TabTargetConnectionInfo& info,
- const std::string& extension_id,
- const std::string& channel_name) {
+ const extensions::PortId& port_id) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
+ VALIDATE_PORT_ID(port_id);
if (profile_) {
- extensions::MessageService::Get(profile_)
- ->OpenChannelToTab(source_process_id,
- source_routing_id,
- receiver_port_id,
- info.tab_id,
- info.frame_id,
- extension_id,
- channel_name);
+ extensions::MessageService::Get(profile_)->OpenChannelToTab(
+ render_process_id_, routing_id, port_id, info.tab_id,
+ info.frame_id, extension_id, channel_name);
}
}
-void ChromeExtensionMessageFilter::OnOpenMessagePort(int routing_id,
- int port_id) {
+void ChromeExtensionMessageFilter::OnOpenMessagePort(
+ int routing_id,
+ const extensions::PortId& port_id) {
+ VALIDATE_PORT_ID(port_id);
if (!profile_)
return;
@@ -259,9 +188,11 @@ void ChromeExtensionMessageFilter::OnOpenMessagePort(int routing_id,
port_id, render_process_id_, routing_id);
}
-void ChromeExtensionMessageFilter::OnCloseMessagePort(int routing_id,
- int port_id,
- bool force_close) {
+void ChromeExtensionMessageFilter::OnCloseMessagePort(
+ int routing_id,
+ const extensions::PortId& port_id,
+ bool force_close) {
+ VALIDATE_PORT_ID(port_id);
if (!profile_)
return;
@@ -270,8 +201,9 @@ void ChromeExtensionMessageFilter::OnCloseMessagePort(int routing_id,
}
void ChromeExtensionMessageFilter::OnPostMessage(
- int port_id,
+ const extensions::PortId& port_id,
const extensions::Message& message) {
+ VALIDATE_PORT_ID(port_id);
if (!profile_)
return;
@@ -374,3 +306,5 @@ bool ChromeExtensionMessageFilter::ShouldLogExtensionAction(
g_browser_process->profile_manager()->IsValidProfile(profile_) &&
activity_log_ && activity_log_->ShouldLog(extension_id);
}
+
+#undef VALIDATE_PORT_ID

Powered by Google App Engine
This is Rietveld 408576698