Skip to content

Commit

Permalink
fix: make devtools extensions load correctly (#17614)
Browse files Browse the repository at this point in the history
  • Loading branch information
MarshallOfSound committed Mar 31, 2019
1 parent d597a0e commit 75442b7
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 8 deletions.
23 changes: 17 additions & 6 deletions atom/browser/api/atom_api_web_contents.cc
Expand Up @@ -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,
Expand Down
1 change: 1 addition & 0 deletions atom/renderer/atom_render_frame_observer.cc
Expand Up @@ -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())
Expand Down
2 changes: 1 addition & 1 deletion lib/browser/chrome-extension.js
Expand Up @@ -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) {
Expand Down
8 changes: 7 additions & 1 deletion lib/renderer/chrome-api.ts
Expand Up @@ -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)
},

Expand Down Expand Up @@ -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 () {}
}
}

0 comments on commit 75442b7

Please sign in to comment.