Index: chrome/browser/extensions/api/messaging/message_service.cc |
diff --git a/chrome/browser/extensions/api/messaging/message_service.cc b/chrome/browser/extensions/api/messaging/message_service.cc |
index 9c54e78cffa0f698ccdefc7489a8bf87d344e0ec..df2742c3ff67a8ab23fdd6a3d261c4316fd5b9d0 100644 |
--- a/chrome/browser/extensions/api/messaging/message_service.cc |
+++ b/chrome/browser/extensions/api/messaging/message_service.cc |
@@ -33,6 +33,7 @@ |
#include "content/public/browser/site_instance.h" |
#include "content/public/browser/web_contents.h" |
#include "extensions/browser/extension_system.h" |
+#include "extensions/browser/extensions_browser_client.h" |
#include "extensions/browser/lazy_background_task_queue.h" |
#include "extensions/browser/process_manager.h" |
#include "extensions/common/extension.h" |
@@ -42,6 +43,7 @@ |
#include "net/base/completion_callback.h" |
#include "url/gurl.h" |
+using content::BrowserContext; |
using content::SiteInstance; |
using content::WebContents; |
@@ -118,9 +120,10 @@ static base::StaticAtomicSequenceNumber g_next_channel_id; |
static base::StaticAtomicSequenceNumber g_channel_id_overflow_count; |
static content::RenderProcessHost* GetExtensionProcess( |
- Profile* profile, const std::string& extension_id) { |
+ BrowserContext* context, |
+ const std::string& extension_id) { |
SiteInstance* site_instance = |
- ExtensionSystem::Get(profile)->process_manager()->GetSiteInstanceForURL( |
+ ExtensionSystem::Get(context)->process_manager()->GetSiteInstanceForURL( |
Extension::GetBaseURLFromExtensionId(extension_id)); |
return site_instance->HasProcess() ? site_instance->GetProcess() : NULL; |
} |
@@ -159,9 +162,9 @@ void MessageService::AllocatePortIdPair(int* port1, int* port2) { |
*port2 = port2_id; |
} |
-MessageService::MessageService(Profile* profile) |
+MessageService::MessageService(BrowserContext* context) |
: lazy_background_task_queue_( |
- ExtensionSystem::Get(profile)->lazy_background_task_queue()), |
+ ExtensionSystem::Get(context)->lazy_background_task_queue()), |
weak_factory_(this) { |
registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, |
content::NotificationService::AllBrowserContextsAndSources()); |
@@ -183,9 +186,8 @@ ProfileKeyedAPIFactory<MessageService>* MessageService::GetFactoryInstance() { |
} |
// static |
-MessageService* MessageService::Get(content::BrowserContext* context) { |
- Profile* profile = Profile::FromBrowserContext(context); |
- return ProfileKeyedAPIFactory<MessageService>::GetForProfile(profile); |
+MessageService* MessageService::Get(BrowserContext* context) { |
+ return ProfileKeyedAPIFactory<MessageService>::GetForProfile(context); |
} |
void MessageService::OpenChannelToExtension( |
@@ -199,9 +201,9 @@ void MessageService::OpenChannelToExtension( |
content::RenderProcessHost::FromID(source_process_id); |
if (!source) |
return; |
- Profile* profile = Profile::FromBrowserContext(source->GetBrowserContext()); |
+ BrowserContext* context = source->GetBrowserContext(); |
- ExtensionSystem* extension_system = ExtensionSystem::Get(profile); |
+ ExtensionSystem* extension_system = ExtensionSystem::Get(context); |
DCHECK(extension_system); |
const Extension* target_extension = extension_system->extension_service()-> |
extensions()->GetByID(target_extension_id); |
@@ -214,7 +216,7 @@ void MessageService::OpenChannelToExtension( |
// Only running ephemeral apps can receive messages. Idle cached ephemeral |
// apps are invisible and should not be connectable. |
if (target_extension->is_ephemeral() && |
- util::IsExtensionIdle(target_extension_id, profile)) { |
+ util::IsExtensionIdle(target_extension_id, context)) { |
DispatchOnDisconnect( |
source, receiver_port_id, kReceivingEndDoesntExistError); |
return; |
@@ -267,17 +269,15 @@ void MessageService::OpenChannelToExtension( |
WebContents* source_contents = tab_util::GetWebContentsByID( |
source_process_id, source_routing_id); |
- if (profile->IsOffTheRecord() && |
- !util::IsIncognitoEnabled(target_extension_id, profile)) { |
+ if (context->IsOffTheRecord() && |
+ !util::IsIncognitoEnabled(target_extension_id, context)) { |
// Give the user a chance to accept an incognito connection if they haven't |
// already - but only for spanning-mode incognito. We don't want the |
// complication of spinning up an additional process here which might need |
// to do some setup that we're not expecting. |
- if (!is_web_connection || |
- IncognitoInfo::IsSplitMode(target_extension) || |
- !IncognitoConnectability::Get(profile)->Query(target_extension, |
- source_contents, |
- source_url)) { |
+ if (!is_web_connection || IncognitoInfo::IsSplitMode(target_extension) || |
+ !IncognitoConnectability::Get(context) |
+ ->Query(target_extension, source_contents, source_url)) { |
DispatchOnDisconnect( |
source, receiver_port_id, kReceivingEndDoesntExistError); |
return; |
@@ -288,7 +288,8 @@ void MessageService::OpenChannelToExtension( |
// process, we will use the incognito EPM to find the right extension process, |
// which depends on whether the extension uses spanning or split mode. |
MessagePort* receiver = new ExtensionMessagePort( |
- GetExtensionProcess(profile, target_extension_id), MSG_ROUTING_CONTROL, |
+ GetExtensionProcess(context, target_extension_id), |
+ MSG_ROUTING_CONTROL, |
target_extension_id); |
// Include info about the opener's tab (if it was a tab). |
@@ -321,7 +322,7 @@ void MessageService::OpenChannelToExtension( |
pending_tls_channel_id_channels_[GET_CHANNEL_ID(params->receiver_port_id)] |
= PendingMessagesQueue(); |
property_provider_.GetDomainBoundCert( |
- profile, |
+ Profile::FromBrowserContext(context), |
source_url, |
base::Bind(&MessageService::GotDomainBoundCert, |
weak_factory_.GetWeakPtr(), |
@@ -332,9 +333,8 @@ void MessageService::OpenChannelToExtension( |
// The target might be a lazy background page. In that case, we have to check |
// if it is loaded and ready, and if not, queue up the task and load the |
// page. |
- if (MaybeAddPendingLazyBackgroundPageOpenChannelTask(profile, |
- target_extension, |
- params)) { |
+ if (MaybeAddPendingLazyBackgroundPageOpenChannelTask( |
+ context, target_extension, params)) { |
return; |
} |
@@ -654,7 +654,7 @@ void MessageService::DispatchMessage(int source_port_id, |
} |
bool MessageService::MaybeAddPendingLazyBackgroundPageOpenChannelTask( |
- Profile* profile, |
+ BrowserContext* context, |
const Extension* extension, |
OpenChannelParams* params) { |
if (!BackgroundInfo::HasLazyBackgroundPage(extension)) |
@@ -664,18 +664,21 @@ bool MessageService::MaybeAddPendingLazyBackgroundPageOpenChannelTask( |
// using the original profile since that is what the extension process |
// will use. |
if (!IncognitoInfo::IsSplitMode(extension)) |
- profile = profile->GetOriginalProfile(); |
+ context = ExtensionsBrowserClient::Get()->GetOriginalContext(context); |
- if (!lazy_background_task_queue_->ShouldEnqueueTask(profile, extension)) |
+ if (!lazy_background_task_queue_->ShouldEnqueueTask(context, extension)) |
return false; |
- pending_lazy_background_page_channels_[ |
- GET_CHANNEL_ID(params->receiver_port_id)] = |
- PendingLazyBackgroundPageChannel(profile, extension->id()); |
+ pending_lazy_background_page_channels_ |
+ [GET_CHANNEL_ID(params->receiver_port_id)] = |
+ PendingLazyBackgroundPageChannel(context, extension->id()); |
scoped_ptr<OpenChannelParams> scoped_params(params); |
- lazy_background_task_queue_->AddPendingTask(profile, extension->id(), |
+ lazy_background_task_queue_->AddPendingTask( |
+ context, |
+ extension->id(), |
base::Bind(&MessageService::PendingLazyBackgroundPageOpenChannel, |
- weak_factory_.GetWeakPtr(), base::Passed(&scoped_params), |
+ weak_factory_.GetWeakPtr(), |
+ base::Passed(&scoped_params), |
params->source->GetID())); |
return true; |
} |
@@ -692,11 +695,11 @@ void MessageService::GotDomainBoundCert(scoped_ptr<OpenChannelParams> params, |
return; |
} |
- Profile* profile = Profile::FromBrowserContext( |
- params->source->GetBrowserContext()); |
+ BrowserContext* context = params->source->GetBrowserContext(); |
- const Extension* target_extension = ExtensionSystem::Get(profile)-> |
- extension_service()->extensions()->GetByID(params->target_extension_id); |
+ const Extension* target_extension = |
+ ExtensionSystem::Get(context)->extension_service()->extensions()->GetByID( |
+ params->target_extension_id); |
if (!target_extension) { |
pending_tls_channel_id_channels_.erase(channel_id); |
DispatchOnDisconnect( |
@@ -705,9 +708,8 @@ void MessageService::GotDomainBoundCert(scoped_ptr<OpenChannelParams> params, |
return; |
} |
PendingMessagesQueue& pending_messages = pending_for_tls_channel_id->second; |
- if (MaybeAddPendingLazyBackgroundPageOpenChannelTask(profile, |
- target_extension, |
- params.get())) { |
+ if (MaybeAddPendingLazyBackgroundPageOpenChannelTask( |
+ context, target_extension, params.get())) { |
// Lazy background queue took ownership. Release ours. |
ignore_result(params.release()); |
// Messages queued up waiting for the TLS channel ID now need to be queued |