chore: bump chromium to e836cbe709f3cd703f233de8eb6cc6ec99b72c9d (#27475)
Co-authored-by: deepak1556 <hop2deep@gmail.com> Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
This commit is contained in:
parent
44460e84c0
commit
e46446e7e4
93 changed files with 705 additions and 896 deletions
|
@ -104,21 +104,42 @@ ElectronApiServiceImpl::ElectronApiServiceImpl(
|
|||
content::RenderFrame* render_frame,
|
||||
RendererClientBase* renderer_client)
|
||||
: content::RenderFrameObserver(render_frame),
|
||||
renderer_client_(renderer_client) {}
|
||||
renderer_client_(renderer_client) {
|
||||
registry_.AddInterface(base::BindRepeating(&ElectronApiServiceImpl::BindTo,
|
||||
base::Unretained(this)));
|
||||
}
|
||||
|
||||
void ElectronApiServiceImpl::BindTo(
|
||||
mojo::PendingAssociatedReceiver<mojom::ElectronRenderer> receiver) {
|
||||
// Note: BindTo might be called for multiple times.
|
||||
if (receiver_.is_bound())
|
||||
receiver_.reset();
|
||||
mojo::PendingReceiver<mojom::ElectronRenderer> receiver) {
|
||||
if (document_created_) {
|
||||
if (receiver_.is_bound())
|
||||
receiver_.reset();
|
||||
|
||||
receiver_.Bind(std::move(receiver));
|
||||
receiver_.set_disconnect_handler(
|
||||
base::BindOnce(&ElectronApiServiceImpl::OnConnectionError, GetWeakPtr()));
|
||||
receiver_.Bind(std::move(receiver));
|
||||
receiver_.set_disconnect_handler(base::BindOnce(
|
||||
&ElectronApiServiceImpl::OnConnectionError, GetWeakPtr()));
|
||||
} else {
|
||||
pending_receiver_ = std::move(receiver);
|
||||
}
|
||||
}
|
||||
|
||||
void ElectronApiServiceImpl::OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) {
|
||||
registry_.TryBindInterface(interface_name, interface_pipe);
|
||||
}
|
||||
|
||||
void ElectronApiServiceImpl::DidCreateDocumentElement() {
|
||||
document_created_ = true;
|
||||
|
||||
if (pending_receiver_) {
|
||||
if (receiver_.is_bound())
|
||||
receiver_.reset();
|
||||
|
||||
receiver_.Bind(std::move(pending_receiver_));
|
||||
receiver_.set_disconnect_handler(base::BindOnce(
|
||||
&ElectronApiServiceImpl::OnConnectionError, GetWeakPtr()));
|
||||
}
|
||||
}
|
||||
|
||||
void ElectronApiServiceImpl::OnDestruct() {
|
||||
|
@ -134,25 +155,6 @@ void ElectronApiServiceImpl::Message(bool internal,
|
|||
const std::string& channel,
|
||||
blink::CloneableMessage arguments,
|
||||
int32_t sender_id) {
|
||||
// Don't handle browser messages before document element is created.
|
||||
//
|
||||
// Note: It is probably better to save the message and then replay it after
|
||||
// document is ready, but current behavior has been there since the first
|
||||
// day of Electron, and no one has complained so far.
|
||||
//
|
||||
// Reason 1:
|
||||
// When we receive a message from the browser, we try to transfer it
|
||||
// to a web page, and when we do that Blink creates an empty
|
||||
// document element if it hasn't been created yet, and it makes our init
|
||||
// script to run while `window.location` is still "about:blank".
|
||||
// (See https://github.com/electron/electron/pull/1044.)
|
||||
//
|
||||
// Reason 2:
|
||||
// The libuv message loop integration would be broken for unkown reasons.
|
||||
// (See https://github.com/electron/electron/issues/19368.)
|
||||
if (!document_created_)
|
||||
return;
|
||||
|
||||
blink::WebLocalFrame* frame = render_frame()->GetWebFrame();
|
||||
if (!frame)
|
||||
return;
|
||||
|
@ -196,13 +198,6 @@ void ElectronApiServiceImpl::ReceivePostMessage(
|
|||
0);
|
||||
}
|
||||
|
||||
void ElectronApiServiceImpl::NotifyUserActivation() {
|
||||
blink::WebLocalFrame* frame = render_frame()->GetWebFrame();
|
||||
if (frame)
|
||||
frame->NotifyUserActivation(
|
||||
blink::mojom::UserActivationNotificationType::kInteraction);
|
||||
}
|
||||
|
||||
void ElectronApiServiceImpl::TakeHeapSnapshot(
|
||||
mojo::ScopedHandle file,
|
||||
TakeHeapSnapshotCallback callback) {
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#ifndef SHELL_RENDERER_ELECTRON_API_SERVICE_IMPL_H_
|
||||
#define SHELL_RENDERER_ELECTRON_API_SERVICE_IMPL_H_
|
||||
|
||||
#include <queue>
|
||||
#include <string>
|
||||
|
||||
#include "base/memory/weak_ptr.h"
|
||||
|
@ -12,8 +13,8 @@
|
|||
#include "content/public/renderer/render_frame_observer.h"
|
||||
#include "electron/buildflags/buildflags.h"
|
||||
#include "electron/shell/common/api/api.mojom.h"
|
||||
#include "mojo/public/cpp/bindings/associated_receiver.h"
|
||||
#include "mojo/public/cpp/bindings/pending_associated_receiver.h"
|
||||
#include "mojo/public/cpp/bindings/pending_receiver.h"
|
||||
#include "mojo/public/cpp/bindings/receiver.h"
|
||||
|
||||
namespace electron {
|
||||
|
||||
|
@ -24,9 +25,9 @@ class ElectronApiServiceImpl : public mojom::ElectronRenderer,
|
|||
public:
|
||||
ElectronApiServiceImpl(content::RenderFrame* render_frame,
|
||||
RendererClientBase* renderer_client);
|
||||
~ElectronApiServiceImpl() override;
|
||||
|
||||
void BindTo(
|
||||
mojo::PendingAssociatedReceiver<mojom::ElectronRenderer> receiver);
|
||||
void BindTo(mojo::PendingReceiver<mojom::ElectronRenderer> receiver);
|
||||
|
||||
void Message(bool internal,
|
||||
const std::string& channel,
|
||||
|
@ -34,17 +35,19 @@ class ElectronApiServiceImpl : public mojom::ElectronRenderer,
|
|||
int32_t sender_id) override;
|
||||
void ReceivePostMessage(const std::string& channel,
|
||||
blink::TransferableMessage message) override;
|
||||
void NotifyUserActivation() override;
|
||||
void TakeHeapSnapshot(mojo::ScopedHandle file,
|
||||
TakeHeapSnapshotCallback callback) override;
|
||||
void ProcessPendingMessages();
|
||||
|
||||
base::WeakPtr<ElectronApiServiceImpl> GetWeakPtr() {
|
||||
return weak_factory_.GetWeakPtr();
|
||||
}
|
||||
|
||||
private:
|
||||
~ElectronApiServiceImpl() override;
|
||||
void OnInterfaceRequestForFrame(
|
||||
const std::string& interface_name,
|
||||
mojo::ScopedMessagePipeHandle* interface_pipe) override;
|
||||
|
||||
private:
|
||||
// RenderFrameObserver implementation.
|
||||
void DidCreateDocumentElement() override;
|
||||
void OnDestruct() override;
|
||||
|
@ -53,8 +56,10 @@ class ElectronApiServiceImpl : public mojom::ElectronRenderer,
|
|||
|
||||
// Whether the DOM document element has been created.
|
||||
bool document_created_ = false;
|
||||
service_manager::BinderRegistry registry_;
|
||||
|
||||
mojo::AssociatedReceiver<mojom::ElectronRenderer> receiver_{this};
|
||||
mojo::PendingReceiver<mojom::ElectronRenderer> pending_receiver_;
|
||||
mojo::Receiver<mojom::ElectronRenderer> receiver_{this};
|
||||
|
||||
RendererClientBase* renderer_client_;
|
||||
base::WeakPtrFactory<ElectronApiServiceImpl> weak_factory_{this};
|
||||
|
|
|
@ -75,9 +75,7 @@
|
|||
#include "extensions/common/extensions_client.h"
|
||||
#include "extensions/renderer/dispatcher.h"
|
||||
#include "extensions/renderer/extension_frame_helper.h"
|
||||
#include "extensions/renderer/guest_view/extensions_guest_view_container.h"
|
||||
#include "extensions/renderer/guest_view/extensions_guest_view_container_dispatcher.h"
|
||||
#include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.h"
|
||||
#include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container_manager.h"
|
||||
#include "shell/common/extensions/electron_extensions_client.h"
|
||||
#include "shell/renderer/extensions/electron_extensions_renderer_client.h"
|
||||
|
@ -256,10 +254,7 @@ void RendererClientBase::RenderFrameCreated(
|
|||
|
||||
// Note: ElectronApiServiceImpl has to be created now to capture the
|
||||
// DidCreateDocumentElement event.
|
||||
auto* service = new ElectronApiServiceImpl(render_frame, this);
|
||||
render_frame->GetAssociatedInterfaceRegistry()->AddInterface(
|
||||
base::BindRepeating(&ElectronApiServiceImpl::BindTo,
|
||||
service->GetWeakPtr()));
|
||||
new ElectronApiServiceImpl(render_frame, this);
|
||||
|
||||
content::RenderView* render_view = render_frame->GetRenderView();
|
||||
if (render_frame->IsMainFrame() && render_view) {
|
||||
|
@ -352,20 +347,6 @@ void RendererClientBase::DidSetUserAgent(const std::string& user_agent) {
|
|||
#endif
|
||||
}
|
||||
|
||||
guest_view::GuestViewContainer* RendererClientBase::CreateBrowserPluginDelegate(
|
||||
content::RenderFrame* render_frame,
|
||||
const content::WebPluginInfo& info,
|
||||
const std::string& mime_type,
|
||||
const GURL& original_url) {
|
||||
#if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
|
||||
// TODO(nornagon): check the mime type isn't content::kBrowserPluginMimeType?
|
||||
return new extensions::MimeHandlerViewContainer(render_frame, info, mime_type,
|
||||
original_url);
|
||||
#else
|
||||
return nullptr;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool RendererClientBase::IsPluginHandledExternally(
|
||||
content::RenderFrame* render_frame,
|
||||
const blink::WebElement& plugin_element,
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
#include <vector>
|
||||
|
||||
#include "content/public/renderer/content_renderer_client.h"
|
||||
|
@ -40,12 +41,10 @@ struct WebPluginInfo;
|
|||
}
|
||||
#endif
|
||||
|
||||
namespace guest_view {
|
||||
class GuestViewContainer;
|
||||
}
|
||||
|
||||
namespace electron {
|
||||
|
||||
class ElectronApiServiceImpl;
|
||||
|
||||
#if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
|
||||
class ElectronExtensionsRendererClient;
|
||||
#endif
|
||||
|
@ -108,11 +107,6 @@ class RendererClientBase : public content::ContentRendererClient
|
|||
override;
|
||||
bool IsKeySystemsUpdateNeeded() override;
|
||||
void DidSetUserAgent(const std::string& user_agent) override;
|
||||
guest_view::GuestViewContainer* CreateBrowserPluginDelegate(
|
||||
content::RenderFrame* render_frame,
|
||||
const content::WebPluginInfo& info,
|
||||
const std::string& mime_type,
|
||||
const GURL& original_url);
|
||||
bool IsPluginHandledExternally(content::RenderFrame* render_frame,
|
||||
const blink::WebElement& plugin_element,
|
||||
const GURL& original_url,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue