Remove gr-ajax/gr-request from gr-diff-view

Bug: Issue 3988
Change-Id: Ia34d881e7eb12904971c3cc47cac5aa1dbe08a3f
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.html b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.html
index 7bfa3154..137162f 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.html
+++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.html
@@ -17,10 +17,7 @@
 <link rel="import" href="../../../bower_components/polymer/polymer.html">
 <link rel="import" href="../../../bower_components/iron-dropdown/iron-dropdown.html">
 <link rel="import" href="../../../behaviors/keyboard-shortcut-behavior.html">
-<link rel="import" href="../../../behaviors/rest-client-behavior.html">
-<link rel="import" href="../../shared/gr-ajax/gr-ajax.html">
 <link rel="import" href="../../shared/gr-button/gr-button.html">
-<link rel="import" href="../../shared/gr-request/gr-request.html">
 <link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
 <link rel="import" href="../gr-diff/gr-diff.html">
 
@@ -108,19 +105,6 @@
         }
       }
     </style>
-    <gr-ajax id="changeDetailXHR"
-        auto
-        url="[[_computeChangeDetailPath(_changeNum)]]"
-        params="[[_computeChangeDetailQueryParams()]]"
-        last-response="{{_change}}"></gr-ajax>
-    <gr-ajax id="filesXHR"
-        auto
-        url="[[_computeFilesPath(_changeNum, _patchRange.patchNum)]]"
-        on-response="_handleFilesResponse"></gr-ajax>
-    <gr-ajax id="configXHR"
-        auto
-        url="[[_computeProjectConfigPath(_change.project)]]"
-        last-response="{{_projectConfig}}"></gr-ajax>
     <h3>
       <a href$="[[_computeChangePath(_changeNum, _patchRange.patchNum, _change.revisions)]]">
         [[_changeNum]]</a><span>:</span>
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.js b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.js
index 456e983..c4f2a83 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.js
@@ -59,12 +59,16 @@
         type: Boolean,
         value: false,
       },
-      _xhrPromise: Object,  // Used for testing.
     },
 
     behaviors: [
       Gerrit.KeyboardShortcutBehavior,
-      Gerrit.RESTClientBehavior,
+    ],
+
+    observers: [
+      '_getChangeDetail(_changeNum)',
+      '_getProjectConfig(_change.project)',
+      '_getFiles(_changeNum, _patchRange.patchNum)',
     ],
 
     attached: function() {
@@ -90,23 +94,45 @@
       return this.$.restAPI.getLoggedIn();
     },
 
+    _getProjectConfig: function(project) {
+      return this.$.restAPI.getProjectConfig(project).then(
+          function(config) {
+            this._projectConfig = config;
+          }.bind(this));
+    },
+
+    _getChangeDetail: function(changeNum) {
+      return this.$.restAPI.getDiffChangeDetail(changeNum).then(
+          function(change) {
+            this._change = change;
+          }.bind(this));
+    },
+
+    _getFiles: function(changeNum, patchNum) {
+      return this.$.restAPI.getChangeFiles(changeNum, patchNum).then(
+          function(files) {
+            this._fileList = Object.keys(files).sort();
+          }.bind(this));
+    },
+
     _handleReviewedChange: function(e) {
       this._setReviewed(Polymer.dom(e).rootTarget.checked);
     },
 
     _setReviewed: function(reviewed) {
       this.$.reviewed.checked = reviewed;
-      var method = reviewed ? 'PUT' : 'DELETE';
-      var url = this.changeBaseURL(this._changeNum,
-          this._patchRange.patchNum) + '/files/' +
-          encodeURIComponent(this._path) + '/reviewed';
-      this._send(method, url).catch(function(err) {
+      this._saveReviewedState(reviewed).catch(function(err) {
         alert('Couldn’t change file review status. Check the console ' +
             'and contact the PolyGerrit team for assistance.');
         throw err;
       }.bind(this));
     },
 
+    _saveReviewedState: function(reviewed) {
+      return this.$.restAPI.saveFileReviewed(this._changeNum,
+          this._patchRange.patchNum, this._path, reviewed);
+    },
+
     _handleKey: function(e) {
       if (this.shouldSupressKeyboardShortcut(e)) { return; }
 
@@ -253,24 +279,6 @@
       return path == COMMIT_MESSAGE_PATH ? 'Commit message' : path;
     },
 
-    _computeChangeDetailPath: function(changeNum) {
-      return '/changes/' + changeNum + '/detail';
-    },
-
-    _computeChangeDetailQueryParams: function() {
-      return {O: this.listChangesOptionsToHex(
-          this.ListChangesOption.ALL_REVISIONS
-      )};
-    },
-
-    _computeFilesPath: function(changeNum, patchNum) {
-      return this.changeBaseURL(changeNum, patchNum) + '/files';
-    },
-
-    _computeProjectConfigPath: function(project) {
-      return '/projects/' + encodeURIComponent(project) + '/config';
-    },
-
     _computeFileSelected: function(path, currentPath) {
       return path == currentPath;
     },
@@ -296,21 +304,8 @@
           this._computeDiffURL(this._changeNum, this._patchRange, path));
     },
 
-    _handleFilesResponse: function(e, req) {
-      this._fileList = Object.keys(e.detail.response).sort();
-    },
-
     _showDropdownTapHandler: function(e) {
       this.$.dropdown.open();
     },
-
-    _send: function(method, url) {
-      var xhr = document.createElement('gr-request');
-      this._xhrPromise = xhr.send({
-        method: method,
-        url: url,
-      });
-      return this._xhrPromise;
-    },
   });
 })();
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.html b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.html
index 1b102cc..aaeced2 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.html
+++ b/polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view_test.html
@@ -35,42 +35,16 @@
 <script>
   suite('gr-diff-view tests', function() {
     var element;
-    var server;
 
     setup(function() {
       stub('gr-rest-api-interface', {
         getLoggedIn: function() { return Promise.resolve(false); },
+        getProjectConfig: function() { return Promise.resolve({}); },
+        getDiffChangeDetail: function() { return Promise.resolve(null); },
+        getChangeFiles: function() { return Promise.resolve({}); },
+        saveFileReviewed: function() { return Promise.resolve(); },
       });
       element = fixture('basic');
-      element.$.changeDetailXHR.auto = false;
-      element.$.filesXHR.auto = false;
-      element.$.configXHR.auto = false;
-      element.$.diff.auto = false;
-
-      server = sinon.fakeServer.create();
-      server.respondWith(
-        'PUT',
-        '/changes/42/revisions/2/files/%2FCOMMIT_MSG/reviewed',
-        [
-          201,
-          {'Content-Type': 'application/json'},
-          ')]}\'\n' +
-          '""',
-        ]
-      );
-      server.respondWith(
-        'DELETE',
-        '/changes/42/revisions/2/files/%2FCOMMIT_MSG/reviewed',
-        [
-          204,
-          {'Content-Type': 'application/json'},
-          '',
-        ]
-      );
-    });
-
-    teardown(function() {
-      server.restore();
     });
 
     test('keyboard shortcuts', function() {
@@ -362,35 +336,24 @@
       };
       element._fileList = ['/COMMIT_MSG'];
       element._path = '/COMMIT_MSG';
-
-      server.respond();
+      var saveReviewedStub = sinon.stub(element, '_saveReviewedState',
+          function() { return Promise.resolve(); });
 
       flush(function() {
         var commitMsg = Polymer.dom(element.root).querySelector(
             'input[type="checkbox"]');
 
         assert.isTrue(commitMsg.checked);
+        MockInteractions.tap(commitMsg);
+        assert.isFalse(commitMsg.checked);
+        assert.isTrue(saveReviewedStub.lastCall.calledWithExactly(false));
 
         MockInteractions.tap(commitMsg);
-        server.respond();
-        element._xhrPromise.then(function(req) {
-          assert.isFalse(commitMsg.checked);
-          assert.equal(req.status, 204);
-          assert.equal(req.url,
-              '/changes/42/revisions/2/files/%2FCOMMIT_MSG/reviewed');
+        assert.isTrue(commitMsg.checked);
+        assert.isTrue(saveReviewedStub.lastCall.calledWithExactly(true));
 
-          MockInteractions.tap(commitMsg);
-          server.respond();
-        }).then(function() {
-          element._xhrPromise.then(function(req) {
-            assert.isTrue(commitMsg.checked);
-            assert.equal(req.status, 201);
-            assert.equal(req.url,
-                '/changes/42/revisions/2/files/%2FCOMMIT_MSG/reviewed');
-
-            done();
-          });
-        });
+        saveReviewedStub.restore();
+        done();
       });
     });
   });