0
Commit Graph

14 Commits

Author SHA1 Message Date
Gabriel Charette
e7cdc5cd07 [BrowserThread] Migration callers without full content:: namespace
Note to QA: This CL is purely mechanical and shouldn't be blamed
for future regressions on touched files.

This is a follow-up to https://chromium-review.googlesource.com/c/chromium/src/+/2211138
which already removed all usage using content::BrowserThread.

Hence this script now matches unqualified BrowserThread:: without
risking having "content::" be selected as "traits_before" by the regex
(ran on same revision as step ).

content:: is now always added if outside namespace content {}
(deleting unused using content::BrowserThread; decls)

Script @ https://crbug.com/1026641#c92

(will TBR fdoray@ post-review for mechanical change)
TBR=fdoray@hchromium.org

AX-Relnotes: n/a.
Bug: 1026641
Change-Id: I51ae2f83eb17d19b54563fd9b4fc040d2aa0c948
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2212469
Commit-Queue: Gabriel Charette <gab@chromium.org>
Reviewed-by: François Doray <fdoray@chromium.org>
Cr-Commit-Position: refs/heads/master@{#772458}
2020-05-27 23:35:05 +00:00
Patrick Monette
39a4b5abb7 Add the IdType::Generator class
This CL introduces a new class for generating IdType values and makes
use of that class where applicable.

Bug: 1040280
Change-Id: I88901a12e194def4a6894ad1ecde93549aa62924
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1988831
Commit-Queue: Patrick Monette <pmonette@chromium.org>
Reviewed-by: Fernando Serboncini <fserb@chromium.org>
Reviewed-by: John Abd-El-Malek <jam@chromium.org>
Reviewed-by: Victor Miura <vmiura@chromium.org>
Reviewed-by: Łukasz Anforowicz <lukasza@chromium.org>
Cr-Commit-Position: refs/heads/master@{#730203}
2020-01-10 17:17:59 +00:00
Ken Rockot
7296440c1b Reland "Reland "Move Audio Service off Service Manager""
This is a reland of e8d24f737e

Original change's description:
> Reland "Move Audio Service off Service Manager"
>
> This is a reland of a4d27f513e
>
> The reland moves the TestingApi binder support into a component
> library to avoid duplicate definitions that resulted in browser
> test failures in component builds.
>
> Original change's description:
> > Move Audio Service off Service Manager
> >
> > All the details around if/when a service instance is started and whether
> > it's in- or out-of-process have been centralized into the implementation
> > of a single GetAudioService() helper in Content.
> >
> > A few other helpers are added to ease the transition off the Service
> > Manager, though they aren't necessarily ideal APIs. For example,
> > client library APIs which once took a Service Manager Connector may now
> > take a RepeatingCallback to bind a specific type of interface.
> >
> > In addition to GetAudioService(), Content provides helpers for
> > AudioSystem construction and StreamFactory binding from any sequence.
> >
> > Because all timeout/lifetime management logic is now generically
> > supported within Mojo and Content and requires no service implementation
> > details to get right (and because unit tests launching service processes
> > is no longer supported outside of Content), all Audio Service test
> > coverage relevant to lifetime management is deemed superfluous and has
> > been removed.
> >
> > Bug: 977637
> > Change-Id: I4c59948eafce2322547bf2b0479961e095b3edee
> > Tbr: oshima@chromium.org
> > Tbr: guidou@chromium.org
> > Tbr: vollick@chromium.org
> > Tbr: xiaohuic@chromium.org
> > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1941280
> > Commit-Queue: Ken Rockot <rockot@google.com>
> > Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
> > Reviewed-by: Avi Drissman <avi@chromium.org>
> > Reviewed-by: Robert Sesek <rsesek@chromium.org>
> > Cr-Commit-Position: refs/heads/master@{#721832}
>
> Bug: 977637
> Change-Id: I183e79042c99458f2abf9423d8f9bbefedf5b374
> No-Presubmit: true
> Tbr: oshima@chromium.org
> Tbr: guidou@chromium.org
> Tbr: vollick@chromium.org
> Tbr: xiaohuic@chromium.org
> Tbr: avi@chromium.org
> Tbr: rsesek@chromium.org
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1952601
> Reviewed-by: Avi Drissman <avi@chromium.org>
> Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
> Commit-Queue: Ken Rockot <rockot@google.com>
> Cr-Commit-Position: refs/heads/master@{#722373}

Bug: 977637
Change-Id: I1b803e57632bd92f2b1e093c3d1c1731de8338f0
No-Presubmit: true
Tbr: oshima@chromium.org
Tbr: guidou@chromium.org
Tbr: vollick@chromium.org
Tbr: xiaohuic@chromium.org
Tbr: avi@chromium.org
Tbr: rsesek@chromium.org
Tbr: dalecurtis@chromium.org
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1954772
Reviewed-by: Ken Rockot <rockot@google.com>
Commit-Queue: Ken Rockot <rockot@google.com>
Cr-Commit-Position: refs/heads/master@{#722428}
2019-12-06 10:40:51 +00:00
Findit
89eaa883ff Revert "Reland "Move Audio Service off Service Manager""
This reverts commit e8d24f737e.

Reason for revert:

Findit (https://goo.gl/kROfz5) identified CL at revision 722373 as the
culprit for failures in the build cycles as shown on:
https://analysis.chromium.org/waterfall/culprit?key=ag9zfmZpbmRpdC1mb3ItbWVyRAsSDVdmU3VzcGVjdGVkQ0wiMWNocm9taXVtL2U4ZDI0ZjczN2UyOWYzZmJhM2U0NjU0ZWExZGMxMjU5ZTEzNzMwNTgM

Sample Failed Build: https://ci.chromium.org/b/8894850112495909312

Sample Failed Step: browser_tests

Original change's description:
> Reland "Move Audio Service off Service Manager"
> 
> This is a reland of a4d27f513e
> 
> The reland moves the TestingApi binder support into a component
> library to avoid duplicate definitions that resulted in browser
> test failures in component builds.
> 
> Original change's description:
> > Move Audio Service off Service Manager
> >
> > All the details around if/when a service instance is started and whether
> > it's in- or out-of-process have been centralized into the implementation
> > of a single GetAudioService() helper in Content.
> >
> > A few other helpers are added to ease the transition off the Service
> > Manager, though they aren't necessarily ideal APIs. For example,
> > client library APIs which once took a Service Manager Connector may now
> > take a RepeatingCallback to bind a specific type of interface.
> >
> > In addition to GetAudioService(), Content provides helpers for
> > AudioSystem construction and StreamFactory binding from any sequence.
> >
> > Because all timeout/lifetime management logic is now generically
> > supported within Mojo and Content and requires no service implementation
> > details to get right (and because unit tests launching service processes
> > is no longer supported outside of Content), all Audio Service test
> > coverage relevant to lifetime management is deemed superfluous and has
> > been removed.
> >
> > Bug: 977637
> > Change-Id: I4c59948eafce2322547bf2b0479961e095b3edee
> > Tbr: oshima@chromium.org
> > Tbr: guidou@chromium.org
> > Tbr: vollick@chromium.org
> > Tbr: xiaohuic@chromium.org
> > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1941280
> > Commit-Queue: Ken Rockot <rockot@google.com>
> > Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
> > Reviewed-by: Avi Drissman <avi@chromium.org>
> > Reviewed-by: Robert Sesek <rsesek@chromium.org>
> > Cr-Commit-Position: refs/heads/master@{#721832}
> 
> Bug: 977637
> Change-Id: I183e79042c99458f2abf9423d8f9bbefedf5b374
> No-Presubmit: true
> Tbr: oshima@chromium.org
> Tbr: guidou@chromium.org
> Tbr: vollick@chromium.org
> Tbr: xiaohuic@chromium.org
> Tbr: avi@chromium.org
> Tbr: rsesek@chromium.org
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1952601
> Reviewed-by: Avi Drissman <avi@chromium.org>
> Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
> Commit-Queue: Ken Rockot <rockot@google.com>
> Cr-Commit-Position: refs/heads/master@{#722373}


Change-Id: I39c5079ef87d681d2854314e82195ec203498929
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 977637
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1954771
Cr-Commit-Position: refs/heads/master@{#722398}
2019-12-06 07:16:19 +00:00
Ken Rockot
e8d24f737e Reland "Move Audio Service off Service Manager"
This is a reland of a4d27f513e

The reland moves the TestingApi binder support into a component
library to avoid duplicate definitions that resulted in browser
test failures in component builds.

Original change's description:
> Move Audio Service off Service Manager
>
> All the details around if/when a service instance is started and whether
> it's in- or out-of-process have been centralized into the implementation
> of a single GetAudioService() helper in Content.
>
> A few other helpers are added to ease the transition off the Service
> Manager, though they aren't necessarily ideal APIs. For example,
> client library APIs which once took a Service Manager Connector may now
> take a RepeatingCallback to bind a specific type of interface.
>
> In addition to GetAudioService(), Content provides helpers for
> AudioSystem construction and StreamFactory binding from any sequence.
>
> Because all timeout/lifetime management logic is now generically
> supported within Mojo and Content and requires no service implementation
> details to get right (and because unit tests launching service processes
> is no longer supported outside of Content), all Audio Service test
> coverage relevant to lifetime management is deemed superfluous and has
> been removed.
>
> Bug: 977637
> Change-Id: I4c59948eafce2322547bf2b0479961e095b3edee
> Tbr: oshima@chromium.org
> Tbr: guidou@chromium.org
> Tbr: vollick@chromium.org
> Tbr: xiaohuic@chromium.org
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1941280
> Commit-Queue: Ken Rockot <rockot@google.com>
> Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
> Reviewed-by: Avi Drissman <avi@chromium.org>
> Reviewed-by: Robert Sesek <rsesek@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#721832}

Bug: 977637
Change-Id: I183e79042c99458f2abf9423d8f9bbefedf5b374
No-Presubmit: true
Tbr: oshima@chromium.org
Tbr: guidou@chromium.org
Tbr: vollick@chromium.org
Tbr: xiaohuic@chromium.org
Tbr: avi@chromium.org
Tbr: rsesek@chromium.org
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1952601
Reviewed-by: Avi Drissman <avi@chromium.org>
Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
Commit-Queue: Ken Rockot <rockot@google.com>
Cr-Commit-Position: refs/heads/master@{#722373}
2019-12-06 03:58:17 +00:00
Findit
06d22377b4 Revert "Move Audio Service off Service Manager"
This reverts commit a4d27f513e.

Reason for revert:

Findit (https://goo.gl/kROfz5) identified CL at revision 721832 as the
culprit for failures in the build cycles as shown on:
https://analysis.chromium.org/waterfall/culprit?key=ag9zfmZpbmRpdC1mb3ItbWVyRAsSDVdmU3VzcGVjdGVkQ0wiMWNocm9taXVtL2E0ZDI3ZjUxM2ViNDBhODk1MDVmMDQyZDY4NjkzZWQ2NzAyNDAwZDkM

Sample Failed Build: https://ci.chromium.org/b/8894942016495385648

Sample Failed Step: browser_tests

Original change's description:
> Move Audio Service off Service Manager
> 
> All the details around if/when a service instance is started and whether
> it's in- or out-of-process have been centralized into the implementation
> of a single GetAudioService() helper in Content.
> 
> A few other helpers are added to ease the transition off the Service
> Manager, though they aren't necessarily ideal APIs. For example,
> client library APIs which once took a Service Manager Connector may now
> take a RepeatingCallback to bind a specific type of interface.
> 
> In addition to GetAudioService(), Content provides helpers for
> AudioSystem construction and StreamFactory binding from any sequence.
> 
> Because all timeout/lifetime management logic is now generically
> supported within Mojo and Content and requires no service implementation
> details to get right (and because unit tests launching service processes
> is no longer supported outside of Content), all Audio Service test
> coverage relevant to lifetime management is deemed superfluous and has
> been removed.
> 
> Bug: 977637
> Change-Id: I4c59948eafce2322547bf2b0479961e095b3edee
> Tbr: oshima@chromium.org
> Tbr: guidou@chromium.org
> Tbr: vollick@chromium.org
> Tbr: xiaohuic@chromium.org
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1941280
> Commit-Queue: Ken Rockot <rockot@google.com>
> Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
> Reviewed-by: Avi Drissman <avi@chromium.org>
> Reviewed-by: Robert Sesek <rsesek@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#721832}


Change-Id: Ic59416fc7c5f5eda2c3b8b211773f9761d2ea03d
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 977637
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1952526
Cr-Commit-Position: refs/heads/master@{#721896}
2019-12-05 06:50:40 +00:00
Ken Rockot
a4d27f513e Move Audio Service off Service Manager
All the details around if/when a service instance is started and whether
it's in- or out-of-process have been centralized into the implementation
of a single GetAudioService() helper in Content.

A few other helpers are added to ease the transition off the Service
Manager, though they aren't necessarily ideal APIs. For example,
client library APIs which once took a Service Manager Connector may now
take a RepeatingCallback to bind a specific type of interface.

In addition to GetAudioService(), Content provides helpers for
AudioSystem construction and StreamFactory binding from any sequence.

Because all timeout/lifetime management logic is now generically
supported within Mojo and Content and requires no service implementation
details to get right (and because unit tests launching service processes
is no longer supported outside of Content), all Audio Service test
coverage relevant to lifetime management is deemed superfluous and has
been removed.

Bug: 977637
Change-Id: I4c59948eafce2322547bf2b0479961e095b3edee
Tbr: oshima@chromium.org
Tbr: guidou@chromium.org
Tbr: vollick@chromium.org
Tbr: xiaohuic@chromium.org
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1941280
Commit-Queue: Ken Rockot <rockot@google.com>
Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
Reviewed-by: Avi Drissman <avi@chromium.org>
Reviewed-by: Robert Sesek <rsesek@chromium.org>
Cr-Commit-Position: refs/heads/master@{#721832}
2019-12-05 03:13:14 +00:00
Ken Rockot
fdc13f940f Fix crashes and leaks in ServiceProcessHost
On Android we can somehow observe utility process crashes without
observing process launches. This is a simple fix to avoid memory bugs in
that case.

Also fixes a related leak in the internal ServiceProcessTracker, where
we were never cleaning up ServiceProcessInfo entries after process
termination.

Bug: 1016027
Change-Id: Ia5a8df891547cb7a2f01c869d16b014a8b249423
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1894627
Reviewed-by: Avi Drissman <avi@chromium.org>
Commit-Queue: Ken Rockot <rockot@google.com>
Cr-Commit-Position: refs/heads/master@{#711829}
2019-11-01 20:08:32 +00:00
Sami Kyostila
8e4d5a915e content/browser: Always specify thread affinity when posting tasks
*** Note: There is no behavior change from this patch. ***

The PostTask APIs will shortly be changed to require all tasks to explicitly
specify their thread affinity, i.e., whether the task should run on the thread
pool or a specific named thread such as a BrowserThread. This patch updates all
call sites with thread affinity annotation. We also remove the "WithTraits"
suffix to make the call sites more readable.

Before:

    // Thread pool task.
    base::PostTaskWithTraits(FROM_HERE, {...}, ...);

    // UI thread task.
    base::PostTaskWithTraits(FROM_HERE, {BrowserThread::UI, ...}, ...);

After:

    // Thread pool task.
    base::PostTask(FROM_HERE, {base::ThreadPool(), ...}, ...);

    // UI thread task.
    base::PostTask(FROM_HERE, {BrowserThread::UI, ...}, ...);

This patch was semi-automatically prepared with these steps:

    1. Patch in https://chromium-review.googlesource.com/c/chromium/src/+/1635827
       to make thread affinity a build-time requirement.
    2. Run an initial pass with a clang rewriter:
       https://chromium-review.googlesource.com/c/chromium/src/+/1635623
    3. ninja -C out/Debug | grep 'requested here' | cut -d: -f1-3 | sort | \
           uniq > errors.txt
    4. while read line; do
         f=$(echo $line | cut -d: -f 1)
         r=$(echo $line | cut -d: -f 2)
         c=$(echo $line | cut -d: -f 3)
         sed -i "${r}s/./&base::ThreadPool(),/$c" $f
       done < errors.txt
    5. GOTO 3 until build succeeds.
    6. Remove the "WithTraits" suffix from task API call sites:

       $ tools/git/mffr.py -i <(cat <<EOF
       [
         ["PostTaskWithTraits",                            "PostTask"],
         ["PostDelayedTaskWithTraits",                     "PostDelayedTask"],
         ["PostTaskWithTraitsAndReply",                    "PostTaskAndReply"],
         ["CreateTaskRunnerWithTraits",                    "CreateTaskRunner"],
         ["CreateSequencedTaskRunnerWithTraits",           "CreateSequencedTaskRunner"],
         ["CreateUpdateableSequencedTaskRunnerWithTraits", "CreateUpdateableSequencedTaskRunner"],
         ["CreateSingleThreadTaskRunnerWithTraits",        "CreateSingleThreadTaskRunner"],
         ["CreateCOMSTATaskRunnerWithTraits",              "CreateCOMSTATaskRunner"]
       ]
       EOF
       )

This CL was uploaded by git cl split.

R=boliu@chromium.org, tsepez@chromium.org

Bug: 968047
Change-Id: I346372d16a3856186ea74d14e0dd8a12f7cacae5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1729589
Commit-Queue: Sami Kyöstilä <skyostil@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Bo <boliu@chromium.org>
Auto-Submit: Sami Kyöstilä <skyostil@chromium.org>
Cr-Commit-Position: refs/heads/master@{#683554}
2019-08-02 12:45:05 +00:00
Ken Rockot
2f8c1dd283 Move Video Capture service off Service Manager
This refactors the Video Capture service and its clients to use the
simpler service model described in
https://docs.google.com/document/d/1M0-K0gi1xXO0f_-YKSH2LFVh4RJY-xe9T9VaGFOSXb0/edit.

The DeviceFactoryProvider interface is renamed to VideoCaptureService
and previous binders for other top-level interfaces (TestingControls and
cros.mojom.CrosImageCapture) have been added to the interface.

Service lifetime is no longer managed by manual ref-count but is instead
automated using new Mojo interface idling bevhaior. The behavior should
effectively mirror the service's behavior before this change. Namely:

  - The service stays alive as long as any receivers are bound other
    than the main interface pipe (previously DeviceFactoryProvider, now
    VideoCaptureService). Once this condition is no longer met, the
    service is considered idle.
  - On non-Android platforms, when out-of-process Video Capture is
    enabled, the service process is killed after 5 seconds of continuous
    idling.
  - On Android, the service process does not tear itself down ever.
  - If out-of-process Video Capture is not enabled, all clients will use
    the same shared in-browser instance of the service, which lives
    forever.

This also ends up deleting a bunch of tests for the service which
effectively tested behavior that's no longer applicable, like lifetime
behavior built around VideoCaptureService (nee DeviceFactoryProvider)
connection.

Bug: 977637
Change-Id: I96ccf3558be7d173041de0de70251d841dd519f9
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1710051
Reviewed-by: John Abd-El-Malek <jam@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Miguel Casas <mcasas@chromium.org>
Commit-Queue: Ken Rockot <rockot@google.com>
Cr-Commit-Position: refs/heads/master@{#680168}
2019-07-23 21:56:02 +00:00
Ken Rockot
07ffb5ee8b [content] Actually use service process child flags
ServiceProcessHost::Options allows the user to set some flags to
configure the child process, but these were not being passed to the
corresponding UtilityProcessHost as intended. This fixes that.

Bug: 986183
Change-Id: I19fd3846032a23b1a6498792b0369d21738a4008
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1713294
Reviewed-by: Avi Drissman <avi@chromium.org>
Commit-Queue: Ken Rockot <rockot@google.com>
Cr-Commit-Position: refs/heads/master@{#679674}
2019-07-22 20:05:39 +00:00
Ken Rockot
666c2b657a [content] Improve ServiceProcessHost API
This change covers a few useful improvements to ServiceProcessHost.

First, there are no longer actual ServiceProcessHost object
instances for users to retain.  Instead, service process lifetime
is tied strictly to the lifetime of the relevant service pipe.
Either the service or the browser side can hang up to elicit
service process teardown.

Second, API surface has been added to allow callers to enumerate
currently running service processes as well as observe service
process lifecycle events globally.

ServiceProcessHost tests are updated to cover the new usage, as
well as to demonstrate recommended usage in conjunction with new
Mojo Remote idle timeout behavior for managing service process
lifetime.

Finally, additional documentation and clarification has been added
to ServiceProcessHost's header.

This is part of the ongoing effort to simplify Chrome services:
https://docs.google.com/document/d/1M0-K0gi1xXO0f_-YKSH2LFVh4RJY-xe9T9VaGFOSXb0/edit

Bug: 977637
Change-Id: If789159df0fcebae5161323a2a323481005c9516
Tbr: dcheng@chromium.org
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1703095
Commit-Queue: Ken Rockot <rockot@google.com>
Reviewed-by: Avi Drissman <avi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#678705}
2019-07-18 16:13:25 +00:00
Ken Rockot
62fb435e3e [content] Merge ServiceControl and ChildControl
This merges the content.mojom.ServiceControl and
content.mojom.ChildControl interfaces into a new
content.mojom.ChildProcess interface with a shared implementation
across all child process types. Only the newer service-binding
logic delegates to the ChildThreadImpl subclass via Options.

This is a precursor to further service simplification work as described by
https://docs.google.com/document/d/1M0-K0gi1xXO0f_-YKSH2LFVh4RJY-xe9T9VaGFOSXb0/edit

Bug: 977637
Change-Id: Ibeacee0b6c6e747abc6549fef7ad2392541998ef
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1703471
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Reviewed-by: Robert Sesek <rsesek@chromium.org>
Commit-Queue: Ken Rockot <rockot@google.com>
Cr-Commit-Position: refs/heads/master@{#678703}
2019-07-18 16:03:38 +00:00
Ken Rockot
53077778e7 [content] Introduce ServiceProcessHost
ServiceProcessHost allows Content and its embedders to launch a new
service process for any given mojom service interface.

This CL wires up the support and converts a single test-only service
to use ServiceProcessHost instead of integrating with Service Manager.

Bug: 977637
Change-Id: I63e846bf816c51ba2c557bfdc8b41189a92d2890
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1673922
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Avi Drissman <avi@chromium.org>
Reviewed-by: Eugene But <eugenebut@chromium.org>
Commit-Queue: Ken Rockot <rockot@google.com>
Cr-Commit-Position: refs/heads/master@{#672676}
2019-06-26 21:50:32 +00:00