PolyGerrit: Make plugins CANONICAL_PATH aware
Bug: Issue 6894
Change-Id: I71e221ca9442f36fb635ca210d1aa66afb083d75
diff --git a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface.html b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface.html
index d6b2d11..f73f731 100644
--- a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface.html
+++ b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface.html
@@ -14,6 +14,7 @@
limitations under the License.
-->
<link rel="import" href="../../../bower_components/polymer/polymer.html">
+<link rel="import" href="../../../behaviors/base-url-behavior/base-url-behavior.html">
<link rel="import" href="../../../behaviors/gr-patch-set-behavior/gr-patch-set-behavior.html">
<link rel="import" href="../../core/gr-reporting/gr-reporting.html">
<link rel="import" href="../../plugins/gr-dom-hooks/gr-dom-hooks.html">
diff --git a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface_test.html b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface_test.html
index 2a2fdef..1236ca4 100644
--- a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface_test.html
+++ b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface_test.html
@@ -317,5 +317,22 @@
assert.isTrue(console.warn.calledOnce);
}
});
+
+ suite('test plugin with base url', () => {
+ setup(() => {
+ sandbox.stub(Gerrit.BaseUrlBehavior, 'getBaseUrl').returns('/r');
+
+ Gerrit._setPluginsCount(1);
+ Gerrit.install(p => { plugin = p; }, '0.1',
+ 'http://test.com/r/plugins/testplugin/static/test.js');
+ });
+
+ test('url', () => {
+ assert.notEqual(plugin.url(), 'http://test.com/plugins/testplugin/');
+ assert.equal(plugin.url(), 'http://test.com/r/plugins/testplugin/');
+ assert.equal(plugin.url('/static/test.js'),
+ 'http://test.com/r/plugins/testplugin/static/test.js');
+ });
+ });
});
</script>
diff --git a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-public-js-api.js b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-public-js-api.js
index 3b2d5c4..97b67ae 100644
--- a/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-public-js-api.js
+++ b/polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-public-js-api.js
@@ -64,13 +64,15 @@
return;
}
+ const base = Gerrit.BaseUrlBehavior.getBaseUrl();
+
this._url = new URL(opt_url);
- if (!this._url.pathname.startsWith('/plugins')) {
+ if (!this._url.pathname.startsWith(base + '/plugins')) {
console.warn('Plugin not being loaded from /plugins base path:',
this._url.href, '— Unable to determine name.');
return;
}
- this._name = this._url.pathname.split('/')[2];
+ this._name = this._url.pathname.replace(base, '').split('/')[2];
}
Plugin._sharedAPIElement = document.createElement('gr-js-api-interface');
@@ -103,7 +105,9 @@
};
Plugin.prototype.url = function(opt_path) {
- return this._url.origin + '/plugins/' + this._name + (opt_path || '/');
+ const base = Gerrit.BaseUrlBehavior.getBaseUrl();
+ return this._url.origin + base + '/plugins/' +
+ this._name + (opt_path || '/');
};
Plugin.prototype._send = function(method, url, opt_callback, opt_payload) {