Double-encode file path for diff view

When navigating to diff view from change view, double-encode file path
to work around known pagejs library issue (see Issue 4255).

Bug: Issue 4474
Change-Id: I81bafcc86c4b2c450c92380eea52f315f5652b61
This commit is contained in:
Viktar Donich
2016-08-31 15:09:11 -07:00
parent b19a28cc07
commit d172a3f151
3 changed files with 18 additions and 2 deletions

View File

@@ -378,12 +378,13 @@
},
_computeDiffURL: function(changeNum, patchRange, path) {
// @see Issue 4255 regarding double-encoding.
return '/c/' +
encodeURIComponent(changeNum) +
'/' +
encodeURIComponent(this._patchRangeStr(patchRange)) +
'/' +
path;
encodeURIComponent(encodeURIComponent(path));
},
_patchRangeStr: function(patchRange) {

View File

@@ -296,5 +296,19 @@ limitations under the License.
assert.isFalse(element.diffs[0].hidden);
diffStub.restore();
});
test('file name should be double-escaped', function() {
element._files = [
{__path: 'my+file.txt'},
];
element.changeNum = '42';
element.patchRange = {
basePatchNum: 'PARENT',
patchNum: '2',
};
flushAsynchronousOperations();
assert.equal(
element.$$('a').getAttribute('href'), '/c/42/2/my%252Bfile.txt');
});
});
</script>

View File

@@ -134,12 +134,13 @@
};
// Don't allow diffing the same patch number against itself.
if (params.basePatchNum === params.patchNum) {
// @see Issue 4255 regarding double-encoding.
page.redirect('/c/' +
encodeURIComponent(params.changeNum) +
'/' +
encodeURIComponent(params.patchNum) +
'/' +
encodeURIComponent(params.path));
encodeURIComponent(encodeURIComponent(params.path)));
return;
}
normalizePatchRangeParams(params);