Merge "Revert "Add mechanism for plugins to modify rest api calls""
This commit is contained in:
		@@ -185,30 +185,6 @@ See list of supported link:pg-plugin-endpoints.html[endpoints].
 | 
			
		||||
 | 
			
		||||
Note: TODO
 | 
			
		||||
 | 
			
		||||
=== registerApiHook
 | 
			
		||||
`plugin.registerApiHook(apiEndpointName, addParameterFunction)`
 | 
			
		||||
 | 
			
		||||
Registers a rest api hook to add plugin params to core rest api calls.
 | 
			
		||||
The addParameterFunction only needs to return plugin specific params, not the
 | 
			
		||||
entire params object.
 | 
			
		||||
 | 
			
		||||
Supported endpoints are `changes` and `change`.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
Gerrit.install('my-plugin-name', plugin => {
 | 
			
		||||
  plugin.restApiHooks().registerRestApiParams('changes', params => {
 | 
			
		||||
    return 'my-plugin-option';
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// will update the changes query params to be:
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  // existing changes params
 | 
			
		||||
  'my-plugin-name': 'my-plugin-option',
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
=== registerStyleModule
 | 
			
		||||
`plugin.registerStyleModule(endpointName, moduleName)`
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -38,6 +38,5 @@ limitations under the License.
 | 
			
		||||
  <script src="gr-plugin-endpoints.js"></script>
 | 
			
		||||
  <script src="gr-plugin-action-context.js"></script>
 | 
			
		||||
  <script src="gr-plugin-rest-api.js"></script>
 | 
			
		||||
  <script src="gr-rest-api-hooks.js"></script>
 | 
			
		||||
  <script src="gr-public-js-api.js"></script>
 | 
			
		||||
</dom-module>
 | 
			
		||||
 
 | 
			
		||||
@@ -319,10 +319,6 @@
 | 
			
		||||
    return new GrSettingsApi(this);
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  Plugin.prototype.restApiHooks = function() {
 | 
			
		||||
    return new GrRestApiHooks(this);
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * To make REST requests for plugin-provided endpoints, use
 | 
			
		||||
   * @example
 | 
			
		||||
@@ -630,12 +626,6 @@
 | 
			
		||||
    return _allPluginsPromise;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  // TODO: Remove this. This is a hack to get the tests to pass.
 | 
			
		||||
  // It would be much better to call GrRestApiHooks.pluginParams directly.
 | 
			
		||||
  Gerrit._pluginParams = function(endpointName, initialParams) {
 | 
			
		||||
    return GrRestApiHooks.pluginParams(endpointName, initialParams);
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  Gerrit._pluginLoadingTimeout = function() {
 | 
			
		||||
    console.error(`Failed to load plugins: ${Object.keys(_pluginsPending)}`);
 | 
			
		||||
    Gerrit._setPluginsPending([]);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,92 +0,0 @@
 | 
			
		||||
/**
 | 
			
		||||
 * @license
 | 
			
		||||
 * Copyright (C) 2019 The Android Open Source Project
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 * http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
(function() {
 | 
			
		||||
  'use strict';
 | 
			
		||||
 | 
			
		||||
  // Prevent redefinition.
 | 
			
		||||
  if (window.GrRestApiHooks) { return; }
 | 
			
		||||
 | 
			
		||||
  // Stores a map of endpointNames and api instances to add parameters to
 | 
			
		||||
  // REST API calls.
 | 
			
		||||
  const _apiInstances = {};
 | 
			
		||||
 | 
			
		||||
  function GrRestApiHooks(plugin) {
 | 
			
		||||
    this.plugin = plugin;
 | 
			
		||||
    // Stores a map of endpointNames and functions to add parameters to REST API
 | 
			
		||||
    // calls.
 | 
			
		||||
    this._addParameterFunctions = {};
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Registers an api hook for a particular api endpoint.
 | 
			
		||||
   * This is called by a plugin.
 | 
			
		||||
   *
 | 
			
		||||
   * @param {string} endpointName the name of the endpoint.
 | 
			
		||||
   * @param {Function} addParameterFunction the function that returns params
 | 
			
		||||
   * for the plugin. Takes in current params.
 | 
			
		||||
   */
 | 
			
		||||
  GrRestApiHooks.prototype.registerRestApiParams = function(endpointName,
 | 
			
		||||
      addParameterFunction) {
 | 
			
		||||
    if (this._addParameterFunctions[endpointName]) {
 | 
			
		||||
      console.warn(`Rewriting rest api parameter function for
 | 
			
		||||
        ${this.plugin.getPluginName()}`);
 | 
			
		||||
    }
 | 
			
		||||
    this._addParameterFunctions[endpointName] = addParameterFunction;
 | 
			
		||||
    if (!_apiInstances[endpointName]) {
 | 
			
		||||
      _apiInstances[endpointName] = [];
 | 
			
		||||
    }
 | 
			
		||||
    _apiInstances[endpointName].push(this);
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Returns params for a registered api hook for a particular api endpoint or
 | 
			
		||||
   * null.
 | 
			
		||||
   * This is called by the application, not the plugin.
 | 
			
		||||
   * It will either return params or null if there are no params.
 | 
			
		||||
   * @param {string} endpointName the name of the endpoint.
 | 
			
		||||
   * @param {!Object} initialParams the params of the rest api call.
 | 
			
		||||
   */
 | 
			
		||||
  GrRestApiHooks.prototype._getRestApiParams = function(endpointName,
 | 
			
		||||
      initialParams) {
 | 
			
		||||
    const addParameterFunction = this._addParameterFunctions[endpointName];
 | 
			
		||||
    if (!addParameterFunction) return null;
 | 
			
		||||
    return addParameterFunction(initialParams);
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Gets the params for a particular mutation endpoint.
 | 
			
		||||
   *
 | 
			
		||||
   * This is called by the application and should not be called by plugins.
 | 
			
		||||
   *
 | 
			
		||||
   * @param {string} endpointName the name of the endpoint.
 | 
			
		||||
   * @param {!Object} initialParams the params of the rest api call.
 | 
			
		||||
   * @return new parameters to add to a REST API call.
 | 
			
		||||
   */
 | 
			
		||||
  GrRestApiHooks.pluginParams = function(endpointName, initialParams) {
 | 
			
		||||
    return (_apiInstances[endpointName] || []).reduce((accum, apiInstance) => {
 | 
			
		||||
      const pluginParams = apiInstance._getRestApiParams(
 | 
			
		||||
          endpointName, initialParams);
 | 
			
		||||
      if (pluginParams) {
 | 
			
		||||
        accum[apiInstance.plugin.getPluginName()] =
 | 
			
		||||
          JSON.stringify(pluginParams);
 | 
			
		||||
      }
 | 
			
		||||
      return accum;
 | 
			
		||||
    }, {});
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  window.GrRestApiHooks = GrRestApiHooks;
 | 
			
		||||
})(window);
 | 
			
		||||
@@ -30,8 +30,5 @@ limitations under the License.
 | 
			
		||||
  <!-- NB: Order is important, because of namespaced classes. -->
 | 
			
		||||
  <script src="gr-auth.js"></script>
 | 
			
		||||
  <script src="gr-reviewer-updates-parser.js"></script>
 | 
			
		||||
  <script src="../gr-js-api-interface/gr-plugin-endpoints.js"></script>
 | 
			
		||||
  <script src="../gr-js-api-interface/gr-rest-api-hooks.js"></script>
 | 
			
		||||
  <script src="../gr-js-api-interface/gr-public-js-api.js"></script>
 | 
			
		||||
  <script src="gr-rest-api-interface.js"></script>
 | 
			
		||||
</dom-module>
 | 
			
		||||
 
 | 
			
		||||
@@ -1246,7 +1246,6 @@
 | 
			
		||||
     *     changeInfos.
 | 
			
		||||
     */
 | 
			
		||||
    getChanges(opt_changesPerPage, opt_query, opt_offset, opt_options) {
 | 
			
		||||
      return Gerrit.awaitPluginsLoaded().then(() => {
 | 
			
		||||
      const options = opt_options || this.listChangesOptionsToHex(
 | 
			
		||||
          this.ListChangesOption.LABELS,
 | 
			
		||||
          this.ListChangesOption.DETAILED_ACCOUNTS
 | 
			
		||||
@@ -1268,7 +1267,6 @@
 | 
			
		||||
          this._maybeInsertInLookup(change);
 | 
			
		||||
        }
 | 
			
		||||
      };
 | 
			
		||||
        Object.assign(params, Gerrit._pluginParams('changes', params));
 | 
			
		||||
      const req = {
 | 
			
		||||
        url: '/changes/',
 | 
			
		||||
        params,
 | 
			
		||||
@@ -1291,7 +1289,6 @@
 | 
			
		||||
        }
 | 
			
		||||
        return response;
 | 
			
		||||
      });
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -1371,15 +1368,9 @@
 | 
			
		||||
     * @param {function()=} opt_cancelCondition
 | 
			
		||||
     */
 | 
			
		||||
    _getChangeDetail(changeNum, optionsHex, opt_errFn, opt_cancelCondition) {
 | 
			
		||||
      return Promise.all([
 | 
			
		||||
        Gerrit.awaitPluginsLoaded(),
 | 
			
		||||
        this.getChangeActionURL(changeNum, null, '/detail'),
 | 
			
		||||
      ]).then(([_, url]) => {
 | 
			
		||||
      return this.getChangeActionURL(changeNum, null, '/detail').then(url => {
 | 
			
		||||
        const urlWithParams = this._urlWithParams(url, optionsHex);
 | 
			
		||||
 | 
			
		||||
        const params = {O: optionsHex};
 | 
			
		||||
        Object.assign(params, Gerrit._pluginParams('change', params));
 | 
			
		||||
 | 
			
		||||
        const req = {
 | 
			
		||||
          url,
 | 
			
		||||
          errFn: opt_errFn,
 | 
			
		||||
 
 | 
			
		||||
@@ -55,8 +55,6 @@ limitations under the License.
 | 
			
		||||
          return Promise.resolve(testJSON);
 | 
			
		||||
        },
 | 
			
		||||
      }));
 | 
			
		||||
      sandbox.stub(Gerrit, 'awaitPluginsLoaded').returns(
 | 
			
		||||
          Promise.resolve(true));
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    teardown(() => {
 | 
			
		||||
@@ -524,13 +522,11 @@ limitations under the License.
 | 
			
		||||
          });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('legacy n,z key in change url is replaced', done => {
 | 
			
		||||
    test('legacy n,z key in change url is replaced', () => {
 | 
			
		||||
      const stub = sandbox.stub(element, '_fetchJSON')
 | 
			
		||||
          .returns(Promise.resolve([]));
 | 
			
		||||
      element.getChanges(1, null, 'n,z').then(() => {
 | 
			
		||||
      element.getChanges(1, null, 'n,z');
 | 
			
		||||
      assert.equal(stub.lastCall.args[0].params.S, 0);
 | 
			
		||||
        done();
 | 
			
		||||
      }, done);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    test('saveDiffPreferences invalidates cache line', () => {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user