зеркало из https://github.com/electron/electron.git
fix: make devtools extensions load correctly (#17614)
This commit is contained in:
Родитель
d597a0e8b0
Коммит
75442b794f
|
@ -1649,13 +1649,24 @@ bool WebContents::SendIPCMessageWithSender(bool internal,
|
|||
const std::string& channel,
|
||||
const base::ListValue& args,
|
||||
int32_t sender_id) {
|
||||
auto* frame_host = web_contents()->GetMainFrame();
|
||||
if (frame_host) {
|
||||
return frame_host->Send(new AtomFrameMsg_Message(frame_host->GetRoutingID(),
|
||||
internal, send_to_all,
|
||||
channel, args, sender_id));
|
||||
std::vector<content::RenderFrameHost*> target_hosts;
|
||||
if (!send_to_all) {
|
||||
auto* frame_host = web_contents()->GetMainFrame();
|
||||
if (frame_host) {
|
||||
target_hosts.push_back(frame_host);
|
||||
}
|
||||
} else {
|
||||
target_hosts = web_contents()->GetAllFrames();
|
||||
}
|
||||
return false;
|
||||
|
||||
bool handled = false;
|
||||
for (auto* frame_host : target_hosts) {
|
||||
handled = frame_host->Send(
|
||||
new AtomFrameMsg_Message(frame_host->GetRoutingID(), internal,
|
||||
false, channel, args, sender_id)) ||
|
||||
handled;
|
||||
}
|
||||
return handled;
|
||||
}
|
||||
|
||||
bool WebContents::SendIPCMessageToFrame(bool internal,
|
||||
|
|
|
@ -213,6 +213,7 @@ void AtomRenderFrameObserver::OnBrowserMessage(bool internal,
|
|||
EmitIPCEvent(frame, internal, channel, args, sender_id);
|
||||
|
||||
// Also send the message to all sub-frames.
|
||||
// TODO(MarshallOfSound): Completely move this logic to the main process
|
||||
if (send_to_all) {
|
||||
for (blink::WebFrame* child = frame->FirstChild(); child;
|
||||
child = child->NextSibling())
|
||||
|
|
|
@ -397,7 +397,7 @@ const loadDevToolsExtensions = function (win, manifests) {
|
|||
extensionInfoArray.forEach((extension) => {
|
||||
win.devToolsWebContents._grantOriginAccess(extension.startPage)
|
||||
})
|
||||
win.devToolsWebContents.executeJavaScript(`DevToolsAPI.addExtensions(${JSON.stringify(extensionInfoArray)})`)
|
||||
win.devToolsWebContents.executeJavaScript(`InspectorFrontendAPI.addExtensions(${JSON.stringify(extensionInfoArray)})`)
|
||||
}
|
||||
|
||||
app.on('web-contents-created', function (event, webContents) {
|
||||
|
|
|
@ -122,7 +122,7 @@ export function injectTo (extensionId: string, context: any) {
|
|||
[targetExtensionId, connectInfo] = args
|
||||
}
|
||||
|
||||
const { tabId, portId } = ipcRendererInternal.sendSync('CHROME_RUNTIME_CONNECT', targetExtensionId, connectInfo)
|
||||
const { tabId, portId } = ipcRendererUtils.invokeSync('CHROME_RUNTIME_CONNECT', targetExtensionId, connectInfo)
|
||||
return new Port(tabId, portId, extensionId, connectInfo.name)
|
||||
},
|
||||
|
||||
|
@ -210,4 +210,10 @@ export function injectTo (extensionId: string, context: any) {
|
|||
|
||||
chrome.i18n = require('@electron/internal/renderer/extensions/i18n').setup(extensionId)
|
||||
chrome.webNavigation = require('@electron/internal/renderer/extensions/web-navigation').setup()
|
||||
|
||||
// Electron has no concept of a browserAction but we should stub these APIs for compatibility
|
||||
chrome.browserAction = {
|
||||
setIcon () {},
|
||||
setPopup () {}
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче