Skip to content

Commit

Permalink
fix manifest and loading
Browse files Browse the repository at this point in the history
  • Loading branch information
patricklx committed Oct 10, 2023
1 parent be8a7d4 commit d41b662
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 72 deletions.
82 changes: 21 additions & 61 deletions app/services/adapters/web-extension.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ export default class WebExtension extends BasicAdapter {
this._connect();
this._handleReload();
this._setThemeColors();
this._sendEmberDebug();

Promise.resolve().then(() => this._sendEmberDebug());

return super.init(...arguments);
}
Expand All @@ -31,25 +32,25 @@ export default class WebExtension extends BasicAdapter {
}

_sendEmberDebug() {
loadEmberDebug().then((emberDebug) => {
// first send to all frames in current tab
this.sendMessage({
from: 'devtools',
tabId: chrome.devtools.inspectedWindow.tabId,
type: 'inject-ember-debug',
value: emberDebug,
});
this.onMessageReceived((message, sender) => {
if (message === 'ember-content-script-ready') {
this.sendMessage({
from: 'devtools',
type: 'inject-ember-debug',
value: emberDebug,
tabId: chrome.devtools.inspectedWindow.tabId,
frameId: sender.frameId,
});
}
});
let minimumVersion = config.emberVersionsSupported[0].replace(/\./g, '-');
let url = chrome.runtime.getURL(`/panes-${minimumVersion}/ember_debug.js`);
// first send to all frames in current tab
this.sendMessage({
from: 'devtools',
tabId: chrome.devtools.inspectedWindow.tabId,
type: 'inject-ember-debug',
value: url,
});
this.onMessageReceived((message, sender) => {
if (message === 'ember-content-script-ready') {
this.sendMessage({
from: 'devtools',
type: 'inject-ember-debug',
value: url,
tabId: chrome.devtools.inspectedWindow.tabId,
frameId: sender.frameId,
});
}
});
}

Expand Down Expand Up @@ -141,37 +142,6 @@ function loadEmberDebug() {
let minimumVersion = config.emberVersionsSupported[0].replace(/\./g, '-');
let xhr;

/* istanbul ignore next */
function loadEmberDebugInWebpage() {
const waitForEmberLoad = new Promise((resolve) => {
if (window.requireModule) {
const has =
window.requireModule.has ||
function has(id) {
return !!(
window.requireModule.entries[id] ||
window.requireModule.entries[id + '/index']
);
};
if (has('ember')) {
return resolve();
}
}

/**
* NOTE: if the above (for some reason) fails and the consuming app has
* deprecation-workflow's throwOnUnhandled: true
* or set `ember-global`'s handler to 'throw'
* and is using at least `ember-source@3.27`
*
* this will throw an exception in the consuming project
*/
if (window.Ember) return resolve();

window.addEventListener('Ember', resolve, { once: true });
});
waitForEmberLoad.then(() => 'replace-with-ember-debug');
}
return new Promise((resolve) => {
if (!emberDebug) {
xhr = new XMLHttpRequest();
Expand All @@ -183,16 +153,6 @@ function loadEmberDebug() {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
emberDebug = xhr.responseText;
// prepare for usage in replace, dollar signs are part of special replacement patterns...
// wrap in curly braces to be usable in arrow function
emberDebug = '{' + emberDebug.replace(/\$/g, '$$$$') + '}';
emberDebug =
'(' +
loadEmberDebugInWebpage
.toString()
// Use regex to support different cases in dev and prod builds
.replace(/['"]replace-with-ember-debug['"];*/, emberDebug) +
')()';
resolve(emberDebug);
}
}
Expand Down
38 changes: 37 additions & 1 deletion ember-cli-build.js
Original file line number Diff line number Diff line change
Expand Up @@ -172,12 +172,48 @@ module.exports = function (defaults) {
sourceMapConfig: { enabled: false },
});

function wrapWithLoader(content) {
return `(function loadEmberDebugInWebpage() {
const waitForEmberLoad = new Promise((resolve) => {
if (window.requireModule) {
const has =
window.requireModule.has ||
function has(id) {
return !!(
window.requireModule.entries[id] ||
window.requireModule.entries[id + '/index']
);
};
if (has('ember')) {
return resolve();
}
}
/**
* NOTE: if the above (for some reason) fails and the consuming app has
* deprecation-workflow's throwOnUnhandled: true
* or set \`ember-global\`'s handler to 'throw'
* and is using at least \`ember-source@3.27\`
*
* this will throw an exception in the consuming project
*/
if (window.Ember) return resolve();
window.addEventListener('Ember', resolve, { once: true });
});
waitForEmberLoad.then(() => ${content});
})()
`;
}

const emberDebugs = [];
['basic', 'chrome', 'firefox', 'bookmarklet', 'websocket'].forEach(function (
dist
) {
emberDebugs[dist] = map(emberDebug, '**/*.js', function (content) {
return `(function(adapter, env) {\n${content}\n}('${dist}', '${env}'));`;
return wrapWithLoader(
`(function(adapter, env) {\n${content}\n}('${dist}', '${env}'))`
);
});
});

Expand Down
9 changes: 1 addition & 8 deletions skeletons/web-extension/boot.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,9 @@
// TODO: make this conditional, only do it when requested.
// only inject boot script when on an HTML page
if (document.contentType === 'text/html') {
let id = `ember-inspector-boot-${(Math.random() * 100000000).toFixed(0)}`;

let script = document.createElement('script');

script.setAttribute('id', id);

script.appendChild(document.createTextNode(`
window.EmberENV = { _DEBUG_RENDER_TREE: true };
document.getElementById(${JSON.stringify(id)}).remove();
`));
script.src = chrome.runtime.getURL('scripts/boot.js');

document.documentElement.appendChild(script);
}
2 changes: 1 addition & 1 deletion skeletons/web-extension/content-script.js
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@
if (!injected) {
// cannot use eval here, as the context is limited to the content script-
const elem = document.createElement('script') ;
elem.textContent = message.value;
elem.src = message.value;
document.head.appendChild(elem) ;
injected = true;
}
Expand Down
9 changes: 8 additions & 1 deletion skeletons/web-extension/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,14 @@

"web_accessible_resources": [
{
"resources": ["scripts/in-page-script.js"]
"resources": [
"scripts/in-page-script.js",
"scripts/boot.js",
"panes-*/ember_debug.js"
],
"matches": [
"*://*/*"
]
}
]
}
2 changes: 2 additions & 0 deletions skeletons/web-extension/scripts/init.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
window.EmberENV = { _DEBUG_RENDER_TREE: true };
document.currentScript.remove();

0 comments on commit d41b662

Please sign in to comment.