refactor: use new extensions Messaging API IPC (#40511)
* refactor: use new extensions Messaging API IPC Refs CRBUG:993189 Incorporates changes from: * Bind ServiceWorker associated interfaces on Worker Thread (CL:4929154) * [extensions] Move WakeEventPage to mojom::RendererHost (CL:4902564) * [extensions] Convert Extension Messaging APIs over to mojo (CL:4947890) * [extensions] Port GetMessageBundle over to mojom (CL:4956841) * 5008635: [extensions] Bind the mojo interfaces to the frame instance https://chromium-review.googlesource.com/c/chromium/src/+/5008635
This commit is contained in:
parent
088affd4a4
commit
371bca69b6
7 changed files with 25 additions and 259 deletions
|
@ -60,8 +60,3 @@ enable_dangling_raw_ptr_checks = false
|
||||||
# This flag speeds up the performance of fork/execve on linux systems.
|
# This flag speeds up the performance of fork/execve on linux systems.
|
||||||
# Ref: https://chromium-review.googlesource.com/c/v8/v8/+/4602858
|
# Ref: https://chromium-review.googlesource.com/c/v8/v8/+/4602858
|
||||||
v8_enable_private_mapping_fork_optimization = true
|
v8_enable_private_mapping_fork_optimization = true
|
||||||
|
|
||||||
# https://chromium-review.googlesource.com/c/chromium/src/+/4995136
|
|
||||||
# TODO(jkleinsc): convert legacy IPC calls in extensions to use mojo
|
|
||||||
# https://github.com/electron/electron/issues/40439
|
|
||||||
enable_extensions_legacy_ipc = true
|
|
||||||
|
|
|
@ -733,8 +733,6 @@ filenames = {
|
||||||
"shell/browser/extensions/electron_extension_host_delegate.h",
|
"shell/browser/extensions/electron_extension_host_delegate.h",
|
||||||
"shell/browser/extensions/electron_extension_loader.cc",
|
"shell/browser/extensions/electron_extension_loader.cc",
|
||||||
"shell/browser/extensions/electron_extension_loader.h",
|
"shell/browser/extensions/electron_extension_loader.h",
|
||||||
"shell/browser/extensions/electron_extension_message_filter.cc",
|
|
||||||
"shell/browser/extensions/electron_extension_message_filter.h",
|
|
||||||
"shell/browser/extensions/electron_extension_system_factory.cc",
|
"shell/browser/extensions/electron_extension_system_factory.cc",
|
||||||
"shell/browser/extensions/electron_extension_system_factory.h",
|
"shell/browser/extensions/electron_extension_system_factory.h",
|
||||||
"shell/browser/extensions/electron_extension_system.cc",
|
"shell/browser/extensions/electron_extension_system.cc",
|
||||||
|
|
|
@ -151,13 +151,11 @@
|
||||||
#include "content/public/browser/child_process_security_policy.h"
|
#include "content/public/browser/child_process_security_policy.h"
|
||||||
#include "content/public/browser/file_url_loader.h"
|
#include "content/public/browser/file_url_loader.h"
|
||||||
#include "content/public/browser/web_ui_url_loader_factory.h"
|
#include "content/public/browser/web_ui_url_loader_factory.h"
|
||||||
#include "extensions/browser/api/messaging/messaging_api_message_filter.h"
|
|
||||||
#include "extensions/browser/api/mime_handler_private/mime_handler_private.h"
|
#include "extensions/browser/api/mime_handler_private/mime_handler_private.h"
|
||||||
#include "extensions/browser/api/web_request/web_request_api.h"
|
#include "extensions/browser/api/web_request/web_request_api.h"
|
||||||
#include "extensions/browser/browser_context_keyed_api_factory.h"
|
#include "extensions/browser/browser_context_keyed_api_factory.h"
|
||||||
#include "extensions/browser/event_router.h"
|
#include "extensions/browser/event_router.h"
|
||||||
#include "extensions/browser/extension_host.h"
|
#include "extensions/browser/extension_host.h"
|
||||||
#include "extensions/browser/extension_message_filter.h"
|
|
||||||
#include "extensions/browser/extension_navigation_throttle.h"
|
#include "extensions/browser/extension_navigation_throttle.h"
|
||||||
#include "extensions/browser/extension_prefs.h"
|
#include "extensions/browser/extension_prefs.h"
|
||||||
#include "extensions/browser/extension_protocols.h"
|
#include "extensions/browser/extension_protocols.h"
|
||||||
|
@ -177,7 +175,6 @@
|
||||||
#include "extensions/common/mojom/guest_view.mojom.h"
|
#include "extensions/common/mojom/guest_view.mojom.h"
|
||||||
#include "extensions/common/mojom/renderer_host.mojom.h"
|
#include "extensions/common/mojom/renderer_host.mojom.h"
|
||||||
#include "extensions/common/switches.h"
|
#include "extensions/common/switches.h"
|
||||||
#include "shell/browser/extensions/electron_extension_message_filter.h"
|
|
||||||
#include "shell/browser/extensions/electron_extension_system.h"
|
#include "shell/browser/extensions/electron_extension_system.h"
|
||||||
#include "shell/browser/extensions/electron_extension_web_contents_observer.h"
|
#include "shell/browser/extensions/electron_extension_web_contents_observer.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -385,20 +382,6 @@ bool ElectronBrowserClient::IsRendererSubFrame(int process_id) const {
|
||||||
|
|
||||||
void ElectronBrowserClient::RenderProcessWillLaunch(
|
void ElectronBrowserClient::RenderProcessWillLaunch(
|
||||||
content::RenderProcessHost* host) {
|
content::RenderProcessHost* host) {
|
||||||
// When a render process is crashed, it might be reused.
|
|
||||||
#if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
|
|
||||||
int process_id = host->GetID();
|
|
||||||
|
|
||||||
auto* browser_context = host->GetBrowserContext();
|
|
||||||
|
|
||||||
host->AddFilter(
|
|
||||||
new extensions::ExtensionMessageFilter(process_id, browser_context));
|
|
||||||
host->AddFilter(
|
|
||||||
new ElectronExtensionMessageFilter(process_id, browser_context));
|
|
||||||
host->AddFilter(
|
|
||||||
new extensions::MessagingAPIMessageFilter(process_id, browser_context));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Remove in case the host is reused after a crash, otherwise noop.
|
// Remove in case the host is reused after a crash, otherwise noop.
|
||||||
host->RemoveObserver(this);
|
host->RemoveObserver(this);
|
||||||
|
|
||||||
|
@ -1429,6 +1412,19 @@ void ElectronBrowserClient::OverrideURLLoaderFactoryParams(
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ElectronBrowserClient::RegisterAssociatedInterfaceBindersForServiceWorker(
|
||||||
|
const content::ServiceWorkerVersionBaseInfo& service_worker_version_info,
|
||||||
|
blink::AssociatedInterfaceRegistry& associated_registry) {
|
||||||
|
#if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
|
||||||
|
associated_registry.AddInterface<extensions::mojom::RendererHost>(
|
||||||
|
base::BindRepeating(&extensions::RendererStartupHelper::BindForRenderer,
|
||||||
|
service_worker_version_info.process_id));
|
||||||
|
associated_registry.AddInterface<extensions::mojom::ServiceWorkerHost>(
|
||||||
|
base::BindRepeating(&extensions::ServiceWorkerHost::BindReceiver,
|
||||||
|
service_worker_version_info.process_id));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void ElectronBrowserClient::
|
void ElectronBrowserClient::
|
||||||
RegisterAssociatedInterfaceBindersForRenderFrameHost(
|
RegisterAssociatedInterfaceBindersForRenderFrameHost(
|
||||||
content::RenderFrameHost&
|
content::RenderFrameHost&
|
||||||
|
@ -1485,6 +1481,13 @@ void ElectronBrowserClient::
|
||||||
&render_frame_host));
|
&render_frame_host));
|
||||||
#endif
|
#endif
|
||||||
#if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
|
#if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
|
||||||
|
int render_process_id = render_frame_host.GetProcess()->GetID();
|
||||||
|
associated_registry.AddInterface<extensions::mojom::EventRouter>(
|
||||||
|
base::BindRepeating(&extensions::EventRouter::BindForRenderer,
|
||||||
|
render_process_id));
|
||||||
|
associated_registry.AddInterface<extensions::mojom::RendererHost>(
|
||||||
|
base::BindRepeating(&extensions::RendererStartupHelper::BindForRenderer,
|
||||||
|
render_process_id));
|
||||||
associated_registry.AddInterface<extensions::mojom::LocalFrameHost>(
|
associated_registry.AddInterface<extensions::mojom::LocalFrameHost>(
|
||||||
base::BindRepeating(
|
base::BindRepeating(
|
||||||
[](content::RenderFrameHost* render_frame_host,
|
[](content::RenderFrameHost* render_frame_host,
|
||||||
|
@ -1572,15 +1575,9 @@ void ElectronBrowserClient::ExposeInterfacesToRenderer(
|
||||||
blink::AssociatedInterfaceRegistry* associated_registry,
|
blink::AssociatedInterfaceRegistry* associated_registry,
|
||||||
content::RenderProcessHost* render_process_host) {
|
content::RenderProcessHost* render_process_host) {
|
||||||
#if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
|
#if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
|
||||||
associated_registry->AddInterface<extensions::mojom::EventRouter>(
|
|
||||||
base::BindRepeating(&extensions::EventRouter::BindForRenderer,
|
|
||||||
render_process_host->GetID()));
|
|
||||||
associated_registry->AddInterface<extensions::mojom::RendererHost>(
|
associated_registry->AddInterface<extensions::mojom::RendererHost>(
|
||||||
base::BindRepeating(&extensions::RendererStartupHelper::BindForRenderer,
|
base::BindRepeating(&extensions::RendererStartupHelper::BindForRenderer,
|
||||||
render_process_host->GetID()));
|
render_process_host->GetID()));
|
||||||
associated_registry->AddInterface<extensions::mojom::ServiceWorkerHost>(
|
|
||||||
base::BindRepeating(&extensions::ServiceWorkerHost::BindReceiver,
|
|
||||||
render_process_host->GetID()));
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -250,6 +250,9 @@ class ElectronBrowserClient : public content::ContentBrowserClient,
|
||||||
void RegisterAssociatedInterfaceBindersForRenderFrameHost(
|
void RegisterAssociatedInterfaceBindersForRenderFrameHost(
|
||||||
content::RenderFrameHost& render_frame_host,
|
content::RenderFrameHost& render_frame_host,
|
||||||
blink::AssociatedInterfaceRegistry& associated_registry) override;
|
blink::AssociatedInterfaceRegistry& associated_registry) override;
|
||||||
|
void RegisterAssociatedInterfaceBindersForServiceWorker(
|
||||||
|
const content::ServiceWorkerVersionBaseInfo& service_worker_version_info,
|
||||||
|
blink::AssociatedInterfaceRegistry& associated_registry) override;
|
||||||
|
|
||||||
bool HandleExternalProtocol(
|
bool HandleExternalProtocol(
|
||||||
const GURL& url,
|
const GURL& url,
|
||||||
|
|
|
@ -64,6 +64,7 @@
|
||||||
#include "extensions/browser/extension_pref_store.h"
|
#include "extensions/browser/extension_pref_store.h"
|
||||||
#include "extensions/browser/extension_pref_value_map_factory.h"
|
#include "extensions/browser/extension_pref_value_map_factory.h"
|
||||||
#include "extensions/browser/extension_prefs.h"
|
#include "extensions/browser/extension_prefs.h"
|
||||||
|
#include "extensions/browser/permissions_manager.h"
|
||||||
#include "extensions/browser/pref_names.h"
|
#include "extensions/browser/pref_names.h"
|
||||||
#include "extensions/common/extension_api.h"
|
#include "extensions/common/extension_api.h"
|
||||||
#include "shell/browser/extensions/electron_browser_context_keyed_service_factories.h"
|
#include "shell/browser/extensions/electron_browser_context_keyed_service_factories.h"
|
||||||
|
@ -313,6 +314,7 @@ void ElectronBrowserContext::InitPrefs() {
|
||||||
#if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
|
#if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
|
||||||
if (!in_memory_)
|
if (!in_memory_)
|
||||||
extensions::ExtensionPrefs::RegisterProfilePrefs(registry.get());
|
extensions::ExtensionPrefs::RegisterProfilePrefs(registry.get());
|
||||||
|
extensions::PermissionsManager::RegisterProfilePrefs(registry.get());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
|
#if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
|
||||||
|
|
|
@ -1,157 +0,0 @@
|
||||||
// Copyright (c) 2020 Samuel Maddock <sam@samuelmaddock.com>.
|
|
||||||
// Use of this source code is governed by the MIT license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
#include "shell/browser/extensions/electron_extension_message_filter.h"
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
#include "base/files/file_path.h"
|
|
||||||
#include "base/functional/bind.h"
|
|
||||||
#include "base/functional/callback_helpers.h"
|
|
||||||
#include "base/logging.h"
|
|
||||||
#include "base/memory/ptr_util.h"
|
|
||||||
#include "base/stl_util.h"
|
|
||||||
#include "base/strings/utf_string_conversions.h"
|
|
||||||
#include "base/task/thread_pool.h"
|
|
||||||
#include "content/public/browser/browser_context.h"
|
|
||||||
#include "content/public/browser/browser_task_traits.h"
|
|
||||||
#include "content/public/browser/render_process_host.h"
|
|
||||||
#include "extensions/browser/extension_registry.h"
|
|
||||||
#include "extensions/browser/extension_system.h"
|
|
||||||
#include "extensions/browser/l10n_file_util.h"
|
|
||||||
#include "extensions/common/extension_messages.h"
|
|
||||||
#include "extensions/common/extension_set.h"
|
|
||||||
#include "extensions/common/manifest_handlers/default_locale_handler.h"
|
|
||||||
#include "extensions/common/manifest_handlers/shared_module_info.h"
|
|
||||||
#include "extensions/common/message_bundle.h"
|
|
||||||
|
|
||||||
using content::BrowserThread;
|
|
||||||
|
|
||||||
namespace electron {
|
|
||||||
|
|
||||||
const uint32_t kExtensionFilteredMessageClasses[] = {
|
|
||||||
ExtensionMsgStart,
|
|
||||||
};
|
|
||||||
|
|
||||||
ElectronExtensionMessageFilter::ElectronExtensionMessageFilter(
|
|
||||||
int render_process_id,
|
|
||||||
content::BrowserContext* browser_context)
|
|
||||||
: BrowserMessageFilter(kExtensionFilteredMessageClasses,
|
|
||||||
std::size(kExtensionFilteredMessageClasses)),
|
|
||||||
render_process_id_(render_process_id),
|
|
||||||
browser_context_(browser_context) {
|
|
||||||
DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
|
||||||
}
|
|
||||||
|
|
||||||
ElectronExtensionMessageFilter::~ElectronExtensionMessageFilter() {
|
|
||||||
DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ElectronExtensionMessageFilter::OnMessageReceived(
|
|
||||||
const IPC::Message& message) {
|
|
||||||
bool handled = true;
|
|
||||||
IPC_BEGIN_MESSAGE_MAP(ElectronExtensionMessageFilter, message)
|
|
||||||
IPC_MESSAGE_HANDLER_DELAY_REPLY(ExtensionHostMsg_GetMessageBundle,
|
|
||||||
OnGetExtMessageBundle)
|
|
||||||
IPC_MESSAGE_UNHANDLED(handled = false)
|
|
||||||
IPC_END_MESSAGE_MAP()
|
|
||||||
|
|
||||||
return handled;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ElectronExtensionMessageFilter::OverrideThreadForMessage(
|
|
||||||
const IPC::Message& message,
|
|
||||||
BrowserThread::ID* thread) {
|
|
||||||
switch (message.type()) {
|
|
||||||
case ExtensionHostMsg_GetMessageBundle::ID:
|
|
||||||
*thread = BrowserThread::UI;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ElectronExtensionMessageFilter::OnDestruct() const {
|
|
||||||
if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
|
|
||||||
delete this;
|
|
||||||
} else {
|
|
||||||
content::GetUIThreadTaskRunner({})->DeleteSoon(FROM_HERE, this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ElectronExtensionMessageFilter::OnGetExtMessageBundle(
|
|
||||||
const std::string& extension_id,
|
|
||||||
IPC::Message* reply_msg) {
|
|
||||||
DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
|
||||||
|
|
||||||
const extensions::ExtensionSet& extension_set =
|
|
||||||
extensions::ExtensionRegistry::Get(browser_context_)
|
|
||||||
->enabled_extensions();
|
|
||||||
const extensions::Extension* extension = extension_set.GetByID(extension_id);
|
|
||||||
|
|
||||||
if (!extension) { // The extension has gone.
|
|
||||||
ExtensionHostMsg_GetMessageBundle::WriteReplyParams(
|
|
||||||
reply_msg, extensions::MessageBundle::SubstitutionMap());
|
|
||||||
Send(reply_msg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::string& default_locale =
|
|
||||||
extensions::LocaleInfo::GetDefaultLocale(extension);
|
|
||||||
if (default_locale.empty()) {
|
|
||||||
// A little optimization: send the answer here to avoid an extra thread hop.
|
|
||||||
std::unique_ptr<extensions::MessageBundle::SubstitutionMap> dictionary_map(
|
|
||||||
extensions::l10n_file_util::
|
|
||||||
LoadNonLocalizedMessageBundleSubstitutionMap(extension_id));
|
|
||||||
ExtensionHostMsg_GetMessageBundle::WriteReplyParams(reply_msg,
|
|
||||||
*dictionary_map);
|
|
||||||
Send(reply_msg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<base::FilePath> paths_to_load;
|
|
||||||
paths_to_load.push_back(extension->path());
|
|
||||||
|
|
||||||
auto imports = extensions::SharedModuleInfo::GetImports(extension);
|
|
||||||
// Iterate through the imports in reverse. This will allow later imported
|
|
||||||
// modules to override earlier imported modules, as the list order is
|
|
||||||
// maintained from the definition in manifest.json of the imports.
|
|
||||||
for (auto it = imports.rbegin(); it != imports.rend(); ++it) {
|
|
||||||
const extensions::Extension* imported_extension =
|
|
||||||
extension_set.GetByID(it->extension_id);
|
|
||||||
if (!imported_extension) {
|
|
||||||
NOTREACHED() << "Missing shared module " << it->extension_id;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
paths_to_load.push_back(imported_extension->path());
|
|
||||||
}
|
|
||||||
|
|
||||||
// This blocks tab loading. Priority is inherited from the calling context.
|
|
||||||
base::ThreadPool::PostTask(
|
|
||||||
FROM_HERE, {base::MayBlock()},
|
|
||||||
base::BindOnce(
|
|
||||||
&ElectronExtensionMessageFilter::OnGetExtMessageBundleAsync, this,
|
|
||||||
paths_to_load, extension_id, default_locale,
|
|
||||||
extension_l10n_util::GetGzippedMessagesPermissionForExtension(
|
|
||||||
extension),
|
|
||||||
reply_msg));
|
|
||||||
}
|
|
||||||
|
|
||||||
void ElectronExtensionMessageFilter::OnGetExtMessageBundleAsync(
|
|
||||||
const std::vector<base::FilePath>& extension_paths,
|
|
||||||
const std::string& main_extension_id,
|
|
||||||
const std::string& default_locale,
|
|
||||||
extension_l10n_util::GzippedMessagesPermission gzip_permission,
|
|
||||||
IPC::Message* reply_msg) {
|
|
||||||
std::unique_ptr<extensions::MessageBundle::SubstitutionMap> dictionary_map(
|
|
||||||
extensions::l10n_file_util::LoadMessageBundleSubstitutionMapFromPaths(
|
|
||||||
extension_paths, main_extension_id, default_locale, gzip_permission));
|
|
||||||
|
|
||||||
ExtensionHostMsg_GetMessageBundle::WriteReplyParams(reply_msg,
|
|
||||||
*dictionary_map);
|
|
||||||
Send(reply_msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace electron
|
|
|
@ -1,72 +0,0 @@
|
||||||
// Copyright (c) 2020 Samuel Maddock <sam@samuelmaddock.com>.
|
|
||||||
// Use of this source code is governed by the MIT license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
#ifndef ELECTRON_SHELL_BROWSER_EXTENSIONS_ELECTRON_EXTENSION_MESSAGE_FILTER_H_
|
|
||||||
#define ELECTRON_SHELL_BROWSER_EXTENSIONS_ELECTRON_EXTENSION_MESSAGE_FILTER_H_
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#include "base/memory/raw_ptr.h"
|
|
||||||
#include "base/task/sequenced_task_runner_helpers.h"
|
|
||||||
#include "content/public/browser/browser_message_filter.h"
|
|
||||||
#include "content/public/browser/browser_thread.h"
|
|
||||||
#include "extensions/common/extension_l10n_util.h"
|
|
||||||
|
|
||||||
namespace content {
|
|
||||||
class BrowserContext;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace extensions {
|
|
||||||
struct Message;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace electron {
|
|
||||||
|
|
||||||
// This class filters out incoming Electron-specific IPC messages from the
|
|
||||||
// extension process on the IPC thread.
|
|
||||||
class ElectronExtensionMessageFilter : public content::BrowserMessageFilter {
|
|
||||||
public:
|
|
||||||
ElectronExtensionMessageFilter(int render_process_id,
|
|
||||||
content::BrowserContext* browser_context);
|
|
||||||
|
|
||||||
// disable copy
|
|
||||||
ElectronExtensionMessageFilter(const ElectronExtensionMessageFilter&) =
|
|
||||||
delete;
|
|
||||||
ElectronExtensionMessageFilter& operator=(
|
|
||||||
const ElectronExtensionMessageFilter&) = delete;
|
|
||||||
|
|
||||||
// content::BrowserMessageFilter methods:
|
|
||||||
bool OnMessageReceived(const IPC::Message& message) override;
|
|
||||||
void OverrideThreadForMessage(const IPC::Message& message,
|
|
||||||
content::BrowserThread::ID* thread) override;
|
|
||||||
void OnDestruct() const override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
friend class content::BrowserThread;
|
|
||||||
friend class base::DeleteHelper<ElectronExtensionMessageFilter>;
|
|
||||||
|
|
||||||
~ElectronExtensionMessageFilter() override;
|
|
||||||
|
|
||||||
void OnGetExtMessageBundle(const std::string& extension_id,
|
|
||||||
IPC::Message* reply_msg);
|
|
||||||
void OnGetExtMessageBundleAsync(
|
|
||||||
const std::vector<base::FilePath>& extension_paths,
|
|
||||||
const std::string& main_extension_id,
|
|
||||||
const std::string& default_locale,
|
|
||||||
extension_l10n_util::GzippedMessagesPermission gzip_permission,
|
|
||||||
IPC::Message* reply_msg);
|
|
||||||
|
|
||||||
const int render_process_id_;
|
|
||||||
|
|
||||||
// The BrowserContext associated with our renderer process. This should only
|
|
||||||
// be accessed on the UI thread! Furthermore since this class is refcounted it
|
|
||||||
// may outlive |browser_context_|, so make sure to nullptr check if in doubt;
|
|
||||||
// async calls and the like.
|
|
||||||
raw_ptr<content::BrowserContext> browser_context_;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace electron
|
|
||||||
|
|
||||||
#endif // ELECTRON_SHELL_BROWSER_EXTENSIONS_ELECTRON_EXTENSION_MESSAGE_FILTER_H_
|
|
Loading…
Add table
Reference in a new issue