diff --git a/addons/core/addon/services/browser-object.js b/addons/core/addon/services/browser-object.js
deleted file mode 100644
index 5b236dc94..000000000
--- a/addons/core/addon/services/browser-object.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Copyright (c) HashiCorp, Inc.
- * SPDX-License-Identifier: MPL-2.0
- */
-
-import Service from '@ember/service';
-
-/**
- * A simple service that wraps around the global window and
- * document variables that allows us to mock them in testing
- */
-export default class BrowserObjectService extends Service {
- /**
- * The global window object
- * @returns {Window}
- */
- get window() {
- return window;
- }
-
- /**
- * The global document object
- * @returns {Document}
- */
- get document() {
- return this.window?.document;
- }
-
- /**
- * The hostname of the current location of the URL
- * @returns {string}
- */
- get hostname() {
- return this.window?.location?.hostname;
- }
-}
diff --git a/addons/core/app/services/browser-object.js b/addons/core/app/services/browser-object.js
deleted file mode 100644
index 7eccd85d0..000000000
--- a/addons/core/app/services/browser-object.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * Copyright (c) HashiCorp, Inc.
- * SPDX-License-Identifier: MPL-2.0
- */
-
-export { default } from 'core/services/browser-object';
diff --git a/addons/core/tests/unit/services/browser-object-test.js b/addons/core/tests/unit/services/browser-object-test.js
deleted file mode 100644
index 07a2a1156..000000000
--- a/addons/core/tests/unit/services/browser-object-test.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Copyright (c) HashiCorp, Inc.
- * SPDX-License-Identifier: MPL-2.0
- */
-
-import { module, test } from 'qunit';
-import { setupTest } from 'ember-qunit';
-
-module('Unit | Service | browser-object', function (hooks) {
- setupTest(hooks);
-
- test('it contains a window', function (assert) {
- let service = this.owner.lookup('service:browser-object');
- assert.ok(service.window, 'Service contains a window');
- });
-
- test('it contains a document', function (assert) {
- let service = this.owner.lookup('service:browser-object');
- assert.ok(service.document, 'Service contains a document');
- });
-
- test('it contains a hostname', function (assert) {
- let service = this.owner.lookup('service:browser-object');
- assert.ok(service.hostname, 'Service contains a hostname');
- });
-});
diff --git a/ui/admin/app/components/form/worker/create-worker-led/index.js b/ui/admin/app/components/form/worker/create-worker-led/index.js
index 6678cef63..1a1316648 100644
--- a/ui/admin/app/components/form/worker/create-worker-led/index.js
+++ b/ui/admin/app/components/form/worker/create-worker-led/index.js
@@ -22,7 +22,7 @@ class Tag {
export default class FormWorkerCreateWorkerLedComponent extends Component {
// =services
@service features;
- @service browserObject;
+ @service('browser/window') window;
// =attributes
@tracked generatedWorkerAuthToken;
@@ -35,7 +35,7 @@ export default class FormWorkerCreateWorkerLedComponent extends Component {
@tracked newWorkerValue;
get clusterIDFromURL() {
- const hostname = this.browserObject.hostname;
+ const hostname = this.window?.location?.hostname;
// Match against a guid with either the prod, int, or dev hcp domain
const clusterIDMatcher =
diff --git a/ui/admin/app/routes/onboarding/success.js b/ui/admin/app/routes/onboarding/success.js
index cba145eea..8847eea01 100644
--- a/ui/admin/app/routes/onboarding/success.js
+++ b/ui/admin/app/routes/onboarding/success.js
@@ -11,14 +11,14 @@ export default class OnboardingSuccessRoute extends Route {
// =services
@service router;
@service session;
- @service browserObject;
+ @service('browser/window') window;
// =methods
model() {
const model = this.modelFor('onboarding');
return {
...model,
- clusterUrl: this.browserObject.window.origin,
+ clusterUrl: this.window.origin,
};
}
diff --git a/ui/admin/tests/integration/components/form/worker/create-worker-led-test.js b/ui/admin/tests/integration/components/form/worker/create-worker-led-test.js
index dabcb637f..f374c9960 100644
--- a/ui/admin/tests/integration/components/form/worker/create-worker-led-test.js
+++ b/ui/admin/tests/integration/components/form/worker/create-worker-led-test.js
@@ -9,11 +9,13 @@ import { render } from '@ember/test-helpers';
import { hbs } from 'ember-cli-htmlbars';
import { v1 } from 'ember-uuid';
import { setupIntl } from 'ember-intl/test-support';
+import { setupBrowserFakes } from 'ember-browser-services/test-support';
module(
'Integration | Component | form/worker/create-worker-led',
function (hooks) {
setupRenderingTest(hooks);
+ setupBrowserFakes(hooks, { window: true });
setupIntl(hooks);
hooks.beforeEach(function () {
@@ -23,14 +25,13 @@ module(
});
test('it correctly populates the cluster id for an hcp dev cluster', async function (assert) {
+ const windowService = this.owner.lookup('service:browser/window');
const guid = v1();
this.model = {};
this.submit = () => {};
this.refresh = () => {};
- const service = { hostname: `${guid}.boundary.hcp.dev` };
- this.owner.register('service:browser-object', service, {
- instantiate: false,
- });
+
+ windowService.location.hostname = `${guid}.boundary.hcp.dev`;
await render(
hbs``
@@ -40,14 +41,13 @@ module(
});
test('it correctly populates the cluster id for an hcp int cluster', async function (assert) {
+ const windowService = this.owner.lookup('service:browser/window');
const guid = v1();
this.model = {};
this.submit = () => {};
this.refresh = () => {};
- const service = { hostname: `${guid}.boundary.hcp.to` };
- this.owner.register('service:browser-object', service, {
- instantiate: false,
- });
+
+ windowService.location.hostname = `${guid}.boundary.hcp.to`;
await render(
hbs``
@@ -57,14 +57,13 @@ module(
});
test('it correctly populates the cluster id for an hcp prod cluster', async function (assert) {
+ const windowService = this.owner.lookup('service:browser/window');
const guid = v1();
this.model = {};
this.submit = () => {};
this.refresh = () => {};
- const service = { hostname: `${guid}.boundary.hashicorp.cloud` };
- this.owner.register('service:browser-object', service, {
- instantiate: false,
- });
+
+ windowService.location.hostname = `${guid}.boundary.hashicorp.cloud`;
await render(
hbs``
@@ -74,13 +73,12 @@ module(
});
test('it leaves the cluster id as blank for any other url', async function (assert) {
+ const windowService = this.owner.lookup('service:browser/window');
this.model = {};
this.submit = () => {};
this.refresh = () => {};
- const service = { hostname: `personal.website.com` };
- this.owner.register('service:browser-object', service, {
- instantiate: false,
- });
+
+ windowService.location.hostname = `personal.website.com`;
await render(
hbs``
diff --git a/ui/desktop/app/routes/cluster-url.js b/ui/desktop/app/routes/cluster-url.js
index a597ee9a2..566a881ff 100644
--- a/ui/desktop/app/routes/cluster-url.js
+++ b/ui/desktop/app/routes/cluster-url.js
@@ -5,7 +5,6 @@
import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';
-import { getOwner } from '@ember/application';
import { action } from '@ember/object';
import { loading } from 'ember-loading';
import config from '../config/environment';
@@ -19,6 +18,7 @@ export default class ClusterUrlRoute extends Route {
@service intl;
@service flashMessages;
@service router;
+ @service('browser/window') window;
// =attributes
@@ -29,17 +29,6 @@ export default class ClusterUrlRoute extends Route {
return this.store.adapterFor('application');
}
- /**
- * Looks up the window object indirectly.
- * @type {Window}
- */
- get window() {
- // The Ember way of accessing globals...
- const document = getOwner(this).lookup('service:-document').documentElement;
- // defaultView === window, but without using globals directly
- return document.parentNode.defaultView;
- }
-
// =methods
/**
diff --git a/ui/desktop/tests/acceptance/cluster-url-test.js b/ui/desktop/tests/acceptance/cluster-url-test.js
index 58130dcd2..2fd574da0 100644
--- a/ui/desktop/tests/acceptance/cluster-url-test.js
+++ b/ui/desktop/tests/acceptance/cluster-url-test.js
@@ -58,6 +58,10 @@ module('Acceptance | clusterUrl', function (hooks) {
projects: null,
targets: null,
};
+ const setupMockIpc = (test) => {
+ test.owner.register('service:browser/window', WindowMockIPC);
+ mockIPC = test.owner.lookup('service:browser/window').mockIPC;
+ };
hooks.beforeEach(function () {
invalidateSession();
@@ -96,10 +100,6 @@ module('Acceptance | clusterUrl', function (hooks) {
urls.authenticate.methods.global = `${urls.authenticate.global}/${instances.authMethods.global.id}`;
urls.projects = `${urls.scopes.global}/projects`;
urls.targets = `${urls.projects}/targets`;
-
- // Mock the postMessage interface used by IPC.
- this.owner.register('service:browser/window', WindowMockIPC);
- mockIPC = this.owner.lookup('service:browser/window').mockIPC;
});
hooks.afterEach(function () {
@@ -115,6 +115,7 @@ module('Acceptance | clusterUrl', function (hooks) {
test('visiting index without a clusterUrl specified redirects to clusterUrl route', async function (assert) {
assert.expect(2);
+ setupMockIpc(this);
await visit(urls.index);
await a11yAudit();
assert.notOk(mockIPC.clusterUrl);
@@ -123,6 +124,7 @@ module('Acceptance | clusterUrl', function (hooks) {
test('can set clusterUrl', async function (assert) {
assert.expect(3);
+ setupMockIpc(this);
assert.notOk(mockIPC.clusterUrl);
await visit(urls.clusterUrl);
await fillIn('[name="host"]', currentOrigin);
@@ -133,6 +135,7 @@ module('Acceptance | clusterUrl', function (hooks) {
test('can reset clusterUrl before authentication', async function (assert) {
assert.expect(4);
+ setupMockIpc(this);
assert.notOk(mockIPC.clusterUrl);
await visit(urls.clusterUrl);
await fillIn('[name="host"]', currentOrigin);
@@ -145,6 +148,7 @@ module('Acceptance | clusterUrl', function (hooks) {
test('captures error on clusterUrl update', async function (assert) {
assert.expect(2);
+ setupMockIpc(this);
assert.notOk(mockIPC.clusterUrl);
sinon
.stub(this.owner.lookup('service:clusterUrl'), 'setClusterUrl')