| 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
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b0c4afc7abcb47b54a495c1b637c0e18ec0f3f15
|
| --- /dev/null
|
| +++ b/chrome/browser/extensions/api/messaging/extension_message_port.cc
|
| @@ -0,0 +1,76 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/extensions/api/messaging/extension_message_port.h"
|
| +
|
| +#include "chrome/browser/extensions/extension_host.h"
|
| +#include "chrome/browser/extensions/extension_process_manager.h"
|
| +#include "chrome/browser/extensions/extension_system.h"
|
| +#include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/common/extensions/extension_messages.h"
|
| +#include "content/public/browser/render_process_host.h"
|
| +
|
| +namespace extensions {
|
| +
|
| +ExtensionMessagePort::ExtensionMessagePort(content::RenderProcessHost* process,
|
| + int routing_id,
|
| + const std::string& extension_id)
|
| + : process_(process),
|
| + routing_id_(routing_id),
|
| + extension_id_(extension_id),
|
| + background_host_ptr_(NULL) {
|
| +}
|
| +
|
| +void ExtensionMessagePort::DispatchOnConnect(
|
| + int dest_port_id,
|
| + const std::string& channel_name,
|
| + const std::string& tab_json,
|
| + const std::string& source_extension_id,
|
| + const std::string& target_extension_id) {
|
| + process_->Send(new ExtensionMsg_DispatchOnConnect(
|
| + routing_id_, dest_port_id, channel_name,
|
| + tab_json, source_extension_id, target_extension_id));
|
| +}
|
| +
|
| +void ExtensionMessagePort::DispatchOnDisconnect(int source_port_id,
|
| + bool connection_error) {
|
| + process_->Send(new ExtensionMsg_DispatchOnDisconnect(
|
| + routing_id_, source_port_id, connection_error));
|
| +}
|
| +
|
| +void ExtensionMessagePort::DispatchOnMessage(const std::string& message,
|
| + int target_port_id) {
|
| + process_->Send(new ExtensionMsg_DeliverMessage(
|
| + routing_id_, target_port_id, message));
|
| +}
|
| +
|
| +void ExtensionMessagePort::IncrementLazyKeepaliveCount() {
|
| + Profile* profile =
|
| + Profile::FromBrowserContext(process_->GetBrowserContext());
|
| + ExtensionProcessManager* pm =
|
| + ExtensionSystem::Get(profile)->process_manager();
|
| + ExtensionHost* host = pm->GetBackgroundHostForExtension(extension_id_);
|
| + if (host && host->extension()->has_lazy_background_page())
|
| + pm->IncrementLazyKeepaliveCount(host->extension());
|
| +
|
| + // Keep track of the background host, so when we decrement, we only do so if
|
| + // the host hasn't reloaded.
|
| + background_host_ptr_ = host;
|
| +}
|
| +
|
| +void ExtensionMessagePort::DecrementLazyKeepaliveCount() {
|
| + Profile* profile =
|
| + Profile::FromBrowserContext(process_->GetBrowserContext());
|
| + ExtensionProcessManager* pm =
|
| + ExtensionSystem::Get(profile)->process_manager();
|
| + ExtensionHost* host = pm->GetBackgroundHostForExtension(extension_id_);
|
| + if (host && host == background_host_ptr_)
|
| + pm->DecrementLazyKeepaliveCount(host->extension());
|
| +}
|
| +
|
| +content::RenderProcessHost* ExtensionMessagePort::GetRenderProcessHost() {
|
| + return process_;
|
| +}
|
| +
|
| +} // namespace extensions
|
|
|