65 Commits

Author SHA1 Message Date
Dave Borowitz
e2206e547a Move ba-linkify.js to lib
This is code not authored by the PG authors, so move it out of the main
polygerrit-ui directory.

Change-Id: Ie711a9db22d718d60fa62767b97ac180bca719a8
2018-03-26 14:14:57 -04:00
Dave Borowitz
a7f0e62938 Remove highlight.js js_component
As indicated in the comment in the bower_component_bundle, this is not
required to be part of the bundle, and is copied directly into the
output zip. Unlike other bower components, this one is intended to be
served from a separate file and loaded on demand, to decrease initial
page load time.

Change-Id: I97a7fbbb7755a10250abf2610c33ed9bcdf73167
2018-03-26 14:14:57 -04:00
Becky Siegel
00534c1f64 Add paper-tabs dependency
This will be used for tabbing between the new comment thread view and
the current message list.

Change-Id: Ib18024a747bc9f647f5588651e4959dcdcae8b5c
2018-02-23 22:03:04 +00:00
Becky Siegel
4c767c7634 Update paper-button dependency
This also requires a small css change because in 2.0 paper-button
applies --paper-font-common-base mixin which ends up setting the font to
roboto and not roboto-medium as is currently implemented in gerrit.

Change-Id: Ie52232eb95bc2c2f21f3802bd983cbc45cf697d7
2018-01-09 16:57:11 -08:00
Becky Siegel
a2be8e437d Add paper-toggle-button dependency to PolyGerrit
Bug: Issue 8107
Change-Id: I2335ae9ae82d640033caf5af23bf3c152bebeef3
2018-01-08 22:32:43 +00:00
Kasper Nilsson
977c725e3d Add codemirror-minified to WORKSPACE
Adding this dependency to WORKSPACE allows a plugin (codemirror-editor)
to load it in a descendant change.

Bug: Issue 4437
Change-Id: I6cf5a55a21c6e749215ef91e895554444e49b657
2017-12-06 23:33:17 +00:00
David Pursehouse
a0b711fd3c Move NPM version definitions into separate .bzl file in /lib
Move the definitions of NPM_VERSIONS and NPM_SHA1S into a separate .bzl
file in the /lib folder so that upgrades to the NPM components (bower,
crisper, vulcanize) require the Library-Compliance label to be set.

Change-Id: I691bb4fbdeeba2f1b05753310a8673febbfb6786
2017-10-30 12:30:35 +00:00
Paladox none
58c803c16a Update polymer to 1.11.0
Note this includes a workaround for
"Chrome deprecation of styling main document from HTML Imports"

See:

* https://github.com/Polymer/polymer/releases/tag/v1.11.0
* https://github.com/Polymer/polymer/releases/tag/v1.10.1
* https://github.com/Polymer/polymer/releases/tag/v1.10

This also includes a fix for microsoft edge.

Change-Id: I4eef34a587de8e44343c639e8254d3473ce43966
(cherry picked from commit efc94618b86473ee29dcdc0e49bda55a7e2e7acd)
2017-10-20 23:54:12 +00:00
Becky Siegel
2823c8fad7 Add iron-icon and iron-iconset-svg dependency
Change-Id: I378b7c8ff2da699c3e44a8491da84b4f9f6a126d
(cherry picked from commit 6db720ee6e79825e2d6f4fbb748db0462369243b)
2017-10-18 19:13:23 +00:00
Becky Siegel
78b40cad2f Add paper-button dependency
Change-Id: Ic23f3afa5eb9f9aefabf1bc041c33ce3fa92739f
2017-09-27 14:49:50 -07:00
Becky Siegel
b830217d91 Add paper-input dependency to PolyGerrit
This will be used for material input elements, beginning with a
refreshed gr-editable-label

Also updates version of polymer-resin, which is required for paper-input
to not throw an error.

Change-Id: Ib17c3672e404914eaca2b97d633cc38f398bce0b
2017-09-25 16:07:50 -07:00
Becky Siegel
b5e22f9ee8 Update upstream dependencies to match googlesource
A few of the bower dependencies were outdated compared to those used by
googlesource. There was a noticable difference for the better in the
updated iron-overlay-behavior, in that the top menu scrolls with the
page when opened in the updated version, but not in the previous
version.

Change-Id: Ib7697f8a86132d667f180129d319b4f7d437ff3a
2017-09-21 09:49:05 -07:00
Becky Siegel
9053955255 Add paper-listbox and paper-item to bower dependencies
This will be used in a new dropdown element that will replace some
existing dropdown elements, including and beginning with the patch range
selector.

Change-Id: Ia5b3275b34578e27f122edb10566a41fbb2c3f4a
2017-09-19 17:26:46 -07:00
Becky Siegel
8a70455ae8 Update bower2bazel to fetch correct packages
Previously, bower2bazel tried to fetch whatever was registered in
bower with the package name. If the package author was specified it was
ignored. There was an issue with installing a new package (paper-button)
in which bower tried to fetch the wrong dependency. (paper-ripple).

This change updates the package to use the original source, so that the
bower-archives file looks like:

bower_archive(
    name = "paper-ripple",
    package = "polymerelements/paper-ripple",
    version = "1.0.10",
    sha1 = "21199db50d02b842da54bd6f4f1d1b10b474e893")

Change-Id: I4d1f797a86bd80e8b9cf119e21ee7c2f5387b77e
2017-08-29 18:21:58 +00:00
Becky Siegel
815872a353 Update iron-autogrow-textarea to v2.1.0
This version contains (at least part) of a fix for bug 6500, in which
the commit message editor resized when it shouldn't. This is already
the version that the (next version of) gerrit-review will build with,
but want to make sure upstream is in sync.

Bug: Issue 6500
Change-Id: I40e83da3cfca557309afb7faa8fec8632f18b6e7
2017-07-25 09:48:05 -07:00
Paladox none
42dfa9fa4f Update polymer to 1.9.3
See changelog here:
* https://github.com/Polymer/polymer/releases/tag/v1.9.3
* https://github.com/Polymer/polymer/releases/tag/v1.9.2

It will help with the migration to polymer 2.x.

Change-Id: I20483cf05e14836dfe12b05e0cef496445bad89d
2017-07-24 17:21:18 +00:00
Becky Siegel
10de103815 Revert "Update iron-input to 2.0"
This reverts commit 37636a62564b09df8d8e4e48828b72afdf817bb0.

Reason for revert: The googlesource.com environment is not ready for
this yet.

I didn't realize that we couldn't yet use the hybrid version of the
elements in google3 yet. They exist in the polymer2 directory, but
apparently that depends on using polymer2. This change will need to be
reverted until iron-input v1 is updated to get the polymer2 "hybrid"
version.

Change-Id: Ibeeae2458337b0a225993e12b043b1e65c3c4c04
2017-07-18 14:32:41 -07:00
Becky Siegel
37636a6256 Update iron-input to 2.0
This version is compatible with Polymer 1 and Polymer 2, but required
for Polymer 2.

Elements that were formerly
<input is="iron-input>

are now
<iron-input>
  <input>
</iron-input>

There are a few scenarios in which inputs were not using two way data
binding, which is the reason for using iron-input, and those have been
modified back to a native input.

With the updated iron-input to access the native input, there is an
'inputElement' getter function, which is used heavily in this update.

Also of note, in many tests, it is required to wrap Polymer.Base.async,
which is necessary because the mutation observer is async:

https://github.com/PolymerElements/iron-input/blob/master/test/iron-input.html

Also modifies polylint_test to explicitly ignore bower_components.

Change-Id: I75f7fa1bb0c00837f631f6e1043e15a3270b9bce
2017-07-17 10:20:08 -07:00
Mike Samuel
5ee6971a61 Integrates polymer-resin into polygerrit-ui
This is attempt 3 at rolling-forward c/106190

New Dependency
==============
This adds polymer-resin as a bower archive.
See `bower info polymer-resin\#1.2.6-beta` for details.
Polymer-resin is part of the larger polymer project so is
license compatible.

Integration
===========
The main application element, app/elements/gr-app.html, now HTML
imports polymer-resin per
github.com/Polymer/polymer-resin/blob/master/getting-started.md#loading
It uses the following configuration:
1. All dynamic IDs are allowed.
2. Policy violation reports are sent to the dev console.

test/common-test-setup.html does the same so that tests are run in the
same environment.

Testing
=======
1.  Running local tests
    gerrit $ ./polygerrit-ui/app/run_tests.sh
    With 1.2.6-beta tests run green on (Chrome, Firefox, Safari).
2.  Testing for false positives
    I ran two servers.
    a. polygerrit-ui/run_server.sh
    b. gerrit.war per https://git.eclipse.org/r/Documentation/dev-readme.html
    I noticed that in both the dev console showed 'initResin' early and
    paging around showed no violation reports.
3.  Testing for true negatives
    I patched in the diff at the end of this description, and reran
    both server environments.
    I noted that browsing to localhost:8081/#javascript:alert(1)
    and localhost:8080/#javascript:alert(1) both showed a
    violation report about javascript:alert(1) being rejected.
    Clicking Changes / XSS did not result in a popup.

Differences
===========
This loads the non-debug version but configured with a console reporter
so should minimize code size and speed overhead.
This loads via gr-app so the input is automatically vulcanized.

--- a/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.js
+++ b/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.js
@@ -56,6 +56,11 @@
         url: '/q/status:abandoned',
         name: 'Abandoned',
       },
+      {  // HACK DO NOT SUBMIT
+        url: (location.hash && location.hash.replace(/^#/, ''))
+            || '/echoes_hash',
+        name: 'XSS',
+      },
     ],
   }];
--- a/polygerrit-ui/app/elements/shared/gr-dropdown/gr-dropdown.js
+++ b/polygerrit-ui/app/elements/shared/gr-dropdown/gr-dropdown.js
@@ -93,6 +93,7 @@
     },

     _computeRelativeURL(path) {
+if (path && /^\w+\:/.test(path)) { return path; }  // HACK DO NOT SUBMIT
       const host = window.location.host;
       return this._computeURLHelper(host, path);
     },

Change-Id: I38bfa124abd4fb35972833f29fc1664ec2404e34
2017-06-26 10:45:10 -07:00
Wyatt Allen
395bab078d Partial revert of I3cf5f9c823d74da58a8b1326153a672959fa3f13
Reason: Issue 6498
Change-Id: Id38c3f06aa9815f46bb6384adebdd84a73b9b3cf
2017-06-14 11:12:48 -07:00
Mike Samuel
1a49df26b4 Bazel plumbing to add bazel_components/polymer-resin
This is a partial roll-forward of c/106190.

It adds a dependency on the latest version of polymer-resin.
Later CLs will actually use this dependency.

Change-Id: I3cf5f9c823d74da58a8b1326153a672959fa3f13
2017-06-07 10:57:56 -04:00
Wyatt Allen
c601abccc3 Revert "Polygerrit now loads polymer-resin"
This reverts commit 0895052c01ac5ac657a9763d2ad9967d9ae55c18.

Reason for revert: issue 6387

Change-Id: I14e00addeab53606952aa3ea2d45a74eac7a9d8a
2017-06-02 09:37:37 -07:00
Mike Samuel
0895052c01 Polygerrit now loads polymer-resin
polymer-resin intercepts polymer property assignments
before they reach XSS-vulnerable sinks like `href="..."`
and text nodes in `<script>` elements.

This follows the instructions in WORKSPACE for adding a new bower
dependency with kaspern's tweak to use the dependency in a rule so
that it's found.  //lib/js/bower_components.bzl has already been
rolled-back per those instructions.

The license is the polymer license as can be seen at
https://github.com/Polymer/polymer-resin/blob/master/LICENSE though
I'm not sure that //tools/js/bower2bazel.py recognizes it as such.

Docs for the added component are available at
https://github.com/Polymer/polymer-resin/blob/master/README.md
https://github.com/Polymer/polymer-resin/blob/master/getting-started.md

With this change, when I introduce an XSS vulnerability as below,
polymer-resin intercepts and stops it.

Patch that introduces a strawman vulnerability.

--- a/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.js
+++ b/polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.js
@@ -55,6 +55,10 @@
         url: '/q/status:abandoned',
         name: 'Abandoned',
       },
+      {
+        url: location.hash.replace(/^#/, '') || 'http://example.com/#fragment_echoed_here',
+        name: 'XSS Me',
+      },
     ],
   }];

---

Address kaspern's and paladox's comments.

---

Undo version bumps for bower dependencies.

---

Change Soy index template to parallel app/index.html.

---

update polymer-resin to version 1.1.1-beta

----

Load polymer-resin into polygerrit-ui/**/*_test.html

After this, I ran the tests with
  -l chrome
  -l firefox

I ran a handful of tests with -p and observed that the
console shows "initResin" is called before test cases start
executing.

These changes were done programmaticly by running the script below
(approximately) thus:
```
gerrit/ $ cd polygerrit-ui/app
app/ $ find . -name \*test.html | xargs perl hack-tests.pl
```

```
use strict;

sub removeResin($) {
  my $s = $_[0];
  $s =~ s@<link rel="import" href="[^"]*/polymer-resin/[^"]*"[^>]*>\n?@@;
  $s =~ s@<script src="[^"]*/polymer-resin/[^"]*"></script>\n?@@;
  $s =~ s@<script>\s*security\.polymer_resin.*?</script>\n?@@s;
  return $s;
}

for my $f (@ARGV) {
  next if $f =~ m@/bower_components/|/node_modules/@;

  system('git', 'checkout', $f);
  print "$f\n";

  my @lines = ();
  open(IN, "<$f") or die "$f: $!";
  my $maxLineOfMatch = 0;
  while (<IN>) {
    push(@lines, $_);
    # Put a marker after core loading directives.
    $maxLineOfMatch = scalar(@lines)
      if m@/webcomponentsjs/|/polymer[.]html\b|/browser[.]js@;
  }
  close(IN) or die "$f: $!";

  die "$f missing loading directives" unless $maxLineOfMatch;

  # Given ./a/b/c/my_test.html, $pathToRoot is "../../.."
  # assuming no non-leading . or .. components in the path from find.
  my $pathToRoot = $f;
  $pathToRoot =~ s@^\.\/@@;
  $pathToRoot =~ s@^(.*?/)?app/@@;
  $pathToRoot =~ s@\/[^\/]*$@@;
  $pathToRoot =~ s@[^/]+@..@g;

  my $nLines = scalar(@lines);
  open(OUT, ">$f") or die "$f: $!";

  # Output the lines up to the last polymer-resin dependency
  # loaded explicitly by this test.
  my $before = join '', @lines[0..($maxLineOfMatch - 1)];
  $before = removeResin($before);
  print OUT "$before";

  # Dump out the lines that load polymer-resin and configure it for
  # polygerrit.
  if (1) {
      print OUT qq'<link rel="import" href="$pathToRoot/bower_components/polymer-resin/standalone/polymer-resin-debug.html"/>
<script>
security.polymer_resin.install({allowedIdentifierPrefixes: [\'\']});
</script>
    ';
  }

  # Emit any remaining lines.
  my $after = join '', @lines[$maxLineOfMatch..$#lines];
  $after = removeResin($after);
  $after =~ s/^\n*//;
  print OUT "$after";

  close(OUT) or die "$f: $!";
}
```

---

update polymer-resin to version 1.2.1-beta

---

update Soy index template to new style polymer-resin initialization

----

fix lint warnings

----

Load test/common-test-setup.html into *_test.html

Instead of inserting instructions to load and initialize polymer-resin into
every test file, add a common-test-setup.html that does that and also fold
iron-test-helpers loading into it.

----

imported files do not need to load webcomponentsjs

Change-Id: I71221c36ed8a0fe7f8720c1064a2fcc9555bb8df
2017-05-30 23:16:09 -04:00
Paladox none
23f18ade43 Update web-component-tester to 5.0.1
See changelog at https://github.com/Polymer/web-component-tester/blob/master/CHANGELOG.md#501 please

Change-Id: If5772b898fa7f3e796cbe11933159c73067d5bd7
2017-04-25 07:15:19 +00:00
Han-Wen Nienhuys
afdd224496 update web-component-tester to 5.0.0.
Change-Id: I8e4b409574cd0b660f290213fdec26f8d2e7411c
2017-02-01 13:33:56 +01:00
Han-Wen Nienhuys
3dede1653a bower2bazel: don't specify versions for non-seed packages.
The 'seed' packages are the ones whose versions are set by us in
WORKSPACE. We should not set the versions for the rest of the packages
in the bower input JSON, so bower can suggest the right versions to
use.

Change-Id: I9b75f16655d049e2064726862980a339c91dd534
2017-02-01 13:33:55 +01:00
David Ostrovsky
fdbfcad77d Remove Buck based build
Bug: Issue 5302
Change-Id: I6e860446ef30ff0ad1c7c49fc0e39d39d921820b
2017-01-23 12:44:58 +00:00
Han-Wen Nienhuys
42ea853037 bazel: remove code to sniff license field in bower.json.
Instead, use a hard-coded map of licenses.

Hardcode a false dependency on diff-match-patch to avoid a diff for
the Apache2.0 license.

Tested:
  bazel build Documentation:js_licenses.txt
  buck build Documentation:js_licenses.txt
  diff -u  buck-out/gen/Documentation/js_licenses.txt/js_licenses.txt \
    bazel-genfiles/Documentation/js_licenses.txt
 diff shows only diffs for added [[header]] anchors.

Change-Id: I7886e1fadec900cf854a1b3b7c538b83d66af7a4
2016-12-20 15:44:52 +01:00
David Pursehouse
2d08500516 Format .bzl files with Bazel Buildifier
Change-Id: I3ab30565e5ac110a18cbe3d34f76307801c30373
2016-12-11 19:00:21 +09:00
David Ostrovsky
fa18907d7f Bazel: Reformat build files
Reformat the Bazel build files with the buildifier tool [1].

The style is different for Bazel files. Most notably, indentation level
is 4 spaces instead of 2, and " is used instead of '.

[1] https://github.com/bazelbuild/buildifier

Change-Id: I95c0c6f11b6d76572797853b4ebb5cee5ebd3c98
2016-12-07 11:33:07 +00:00
Han-Wen Nienhuys
246f928887 bazel: update bower packages.
Change-Id: I1672018089db8df90f52416f532436b387c242cb
2016-11-03 13:01:39 +01:00
Han-Wen Nienhuys
29cced5e29 bazel: remove 'out' attribute from genrule2, and use throughout.
This centralizes the OSX mktemp solution.

Change-Id: Iaab18450146b649245b36865bedc5d7b50d1aa07
2016-11-02 13:54:10 +01:00
Han-Wen Nienhuys
3254ec7492 bazel: generate polygerrit_ui.zip.
Tested:
  verified that polygerrit-ui/app:polygerrit_ui zip contain same files
  for bazel and buck.

Change-Id: I5fb1abbc6e68a593d6af0b7b1811608eb11f7e4c
2016-10-24 11:19:20 +02:00
ekempin
d062fc8236 Merge "bazel: add rules for vulcanize & crisper, and use them in //polygerrit-ui/app." 2016-10-11 13:05:43 +00:00
Han-Wen Nienhuys
36502628b7 bazel: add rules for vulcanize & crisper, and use them in //polygerrit-ui/app.
Change-Id: Icaa15889f9963464897742c5003bbf0b15c56ffd
2016-10-06 14:01:05 +02:00
Paladox
84b4555b11 Update polymer/polymer to 1.7.0
Release notes at https://github.com/Polymer/polymer/releases

Change-Id: I5d519a7277295f6ee22c65d7e50001c3891f4374
2016-10-05 15:30:20 +00:00
Han-Wen Nienhuys
28e7a6d3fe bazel: bower support
* npm_binary (download tarball packaged npm apps)

* bower_archive (download a zip file, to be put in WORKSPACE)

* bower_component (defining a bower library, with dependency )

* bower_component_bundle (zipping up libraries together)

* js_component (insert plain js file into bower component bundle)

* bower2bazel.py: run bower to find dependencies, generate a .bzl to
  define archives and define components

Tested:

 python tools/js/bower2bazel.py -w lib/js/bower_archives.bzl -b \
    lib/js/bower_components.bzl

 bazel build polygerrit-ui:components
 unzip -v bazel-bin/polygerrit-ui/components.zip > /tmp/baz

 buck build polygerrit-ui:polygerrit_components
 unzip -v buck-out/gen/polygerrit-ui/polygerrit_components/polygerrit_components.bower_components.zip > /tmp/buck

 diff /tmp/buck /tmp/baz

The diff corresponds to newer file versions pinned through bower2bazel.

Change-Id: I4f33914d4853bcf8afe78b4719d0e0e83b139031
2016-09-29 13:18:19 +02:00
Paladox none
f27498bd78 Update es6-promise polyfill to 3.3.0
Per https://gerrit-review.googlesource.com/#/c/86130/4/lib/js/BUCK

by @Andrew Bonventre

Change-Id: I6f4b6d16074ee0f2d948519cae81bed423b76db2
2016-09-13 22:19:23 +00:00
Paladox
914cf06b27 Add es6-promise for Internet Explorer
Plus it is required by the fetch polyfill, see
https://github.com/github/fetch#installation

Also see https://github.com/github/fetch/issues/114

This fixes the undefined Promise error in internet explorer 11, due to
Promises not being supported in Internet explorer and other browsers.

See http://caniuse.com/#feat=promises

Bug: Issue 4308
Change-Id: I93df9c89a9a98059292038dffe1655c3f4d503c5
2016-09-13 15:14:32 +00:00
David Pursehouse
77d19a6ef2 Update crisper to 2.0.2 and vulcanize to 1.14.8
Bug: Issue 4512
Change-Id: Ibebb2509c5e844e7a72d521a042b449343c83e7d
2016-09-07 00:53:28 +00:00
Wyatt Allen
650c529276 Syntax highlighting
Introduces the gr-syntax-layer element. This element works as an
annotation layer that is configured with the diff and asynchronously
computes/applies syntax for the diff.

Introduces a custom build of Highlight.js which gr-syntax-layer makes
use of. Building the script is documented in
scripts/vendor/highlight/building.md.

The layer is connected to the annotation pipeline in gr-diff-builder as
the lowest layer and syntax processing is triggered only after a diff
has been completely rendered.

A number of styles are added to the gr-diff element for syntax markers.
Tests added for gr-syntax-layer.

Bug: Issue 3916
Change-Id: Ic33e40f4fe39dfce1a62de133cfaf32be5e3f25a
2016-07-25 13:47:30 -07:00
Andrew Bonventre
35341cd324 Update Polymer components
Change-Id: Id24f539786f1aca596813816edb512ac94d774af
2016-05-23 16:33:40 -04:00
Andrew Bonventre
3c88e386b5 Delete iron-ajax
Bug: Issue 3988
Change-Id: I7d1bd4269437b4393d769c06199c5b2cba68b066
2016-05-04 19:09:34 +00:00
Urs Wolfer
0f537c7bbc Add support for running (single) tests with 'run-server.sh'
- include 'web-component-tester' bower dependency as test-dependency
- remove special handling for serving folder 'bower_components'
- add support for passing parameters from 'run-server.sh' to 'server.go'

Change-Id: Ia74b3013e07b6304a4df568b081254909749efc5
2016-03-30 20:01:33 +02:00
Urs Wolfer
0282f27e62 Update Polymer elements and deps to latest versions
Change-Id: I5ad9cb5e704f6526dc372a8a0eaf7cbb6b4b43da
2016-03-30 19:54:08 +02:00
Urs Wolfer
4b8a5165ec Update page.js to 1.7.1
This release contains a fix to make it work with shadow DOM.

Change-Id: I3baa356827f0ce1c014d73b14514b60313edf7c8
2016-03-20 17:19:18 +01:00
Viktar Donich
290fcb6125 Recognize time format preferences.
Bug: Issue 3779
Change-Id: I94d9e8f7a6e688d49be6c22c43b0240ca6768894
2016-03-15 15:22:39 -07:00
Andrew Bonventre
f871b59a5b Update Polymer elements and deps to latest versions
Change-Id: If22d7b610cdbffcfcc9ae74983dc14cf8649b150
2016-03-11 12:35:48 -05:00
Andrew Bonventre
724b4e1a90 Add fetch polyfill for use in all supported browsers
Additionally fix a bug in bower2buck.py where it would
bail when a license is not specified in a Bower package
info response.

[1] http://caniuse.com/#feat=fetch
[2] http://github.github.io/fetch/

Change-Id: Ibf754aab98bab6e34b7a9fb5d6c9801bb612f5d5
2016-03-03 23:49:18 -05:00
Andrew Bonventre
15f796c7a4 [Diff view] Implement n/p and shift-n/p for jumping around
+ Also update iron-test-helpers to 1.1.5 to be able to use
  modifiers in fake key events.

Bug: Issue 3925
Change-Id: I41ce2efe0b5df63a2a637e0942a97e9dafc432f9
2016-02-26 11:38:39 -05:00