Add optional version parameter to JS API
If a user provides a version that is different than the current
one, a warning will be printed to the console and the plugin
callback won’t be called.
A string version is used for now since comparing versions (to check
for backward compatibility) is not a goal at this time. Plus a
version may have a tag associated like 0.1-beta or be a date.
Also adds a check for when the optional URL parameter was not
passed to the Plugin object and handles it accordingly.
Feature: Bug 3915
Change-Id: I1bbdda5a822e362db459e451595f67709a78aa07
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 3be232e..76fa91b 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
@@ -40,7 +40,7 @@
setup(function() {
element = fixture('basic');
errorStub = sinon.stub(console, 'error');
- Gerrit.install(function(p) { plugin = p; },
+ Gerrit.install(function(p) { plugin = p; }, '0.1',
'http://test.com/plugins/testplugin/static/test.js');
});
@@ -108,5 +108,11 @@
assert.isTrue(errorStub.calledTwice);
});
+ test('versioning', function() {
+ var callback = sinon.spy();
+ Gerrit.install(callback, '0.0pre-alpha');
+ assert(callback.notCalled);
+ });
+
});
</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 578f44d..c63221d 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
@@ -14,11 +14,19 @@
(function(window) {
'use strict';
+ var API_VERSION = '0.1';
+
// GWT JSNI uses $wnd to refer to window.
// http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html
window.$wnd = window;
function Plugin(opt_url) {
+ if (!opt_url) {
+ console.warn('Plugin not being loaded from /plugins base path.',
+ 'Unable to determine name.');
+ return;
+ }
+
this._url = new URL(opt_url);
if (this._url.pathname.indexOf('/plugins') !== 0) {
console.warn('Plugin not being loaded from /plugins base path:',
@@ -68,7 +76,13 @@
return name;
};
- Gerrit.install = function(callback, opt_src) {
+ Gerrit.install = function(callback, opt_version, opt_src) {
+ if (opt_version && opt_version !== API_VERSION) {
+ console.warn('Only version ' + API_VERSION +
+ ' is supported in PolyGerrit. ' + opt_version + ' was given.');
+ return;
+ }
+
// TODO(andybons): Polyfill currentScript for IE10/11 (edge supports it).
var src = opt_src || (document.currentScript && document.currentScript.src);
callback(new Plugin(src));