# Chromium Code of Conduct

Google and the Chromium team are committed to preserving and fostering a
diverse, welcoming community. Below is our community code of conduct, which
applies to our repos and organizations, issue trackers, mailing lists,
blog content, and any other Chromium-supported communication group, as
well as any private communication initiated in the context of these
spaces. This code of conduct must be followed by everyone contributing to
the Chromium project, regardless of affiliation or position.

Simply put, community discussions should be

 * respectful and kind;
 * about Chromium;
 * about features and code, not the individuals involved.

## Be respectful and constructive.

Treat everyone with respect. Build on each other's ideas. Each of us has the
right to enjoy our experience and participate without fear of harassment,
discrimination, or condescension, whether blatant or subtle. Remember that
Chromium is a geographically distributed team and that you may not be
communicating with someone in their primary language. We all get frustrated
when working on hard problems, but we cannot allow that frustration to turn
into personal attacks.

## Speak up if you see or hear something.

You are empowered to politely engage when you feel that you or others are
disrespected. The person making you feel uncomfortable may not be aware of what
they are doing - politely bringing their behavior to their attention is
encouraged.

If you are uncomfortable speaking up, or feel that your concerns are not being
duly considered, you can email community@chromium.org, dpranke@chromium.org, or
groby@chromium.org to request involvement from a community manager. All
concerns shared with community managers will be kept confidential, but you may
also submit an anonymous report [here](https://docs.google.com/a/google.com/forms/d/e/1FAIpQLSe-LDjW9eIJ-TpI2poZxnGtU-SvUWkFZc8x0aiKGY1s7NKPdA/viewform?c=0&w=1).
Please note that without a way to contact you, an anonymous report may be
difficult to act on. You may also create a throwaway account to report. In
cases where a public response is deemed necessary, the identities of victims
and reporters will remain confidential unless those individuals instruct us
otherwise.

While all reports will be taken seriously, the Chromium community managers may
not act on complaints that they feel are not violations of this code of
conduct.

## We will not tolerate harassment of any kind, including but not limited to:

 * Harassing comments
 * Intimidation
 * Encouraging a person to engage in self-harm.
 * Sustained disruption or derailing of threads, channels, lists, etc.
 * Offensive or violent comments, jokes or otherwise
 * Inappropriate sexual content
 * Unwelcome sexual or otherwise aggressive attention
 * Continued one-on-one communication after requests to cease
 * Distribution or threat of distribution of people's personally identifying
   information, AKA “doxing”

## Consequences for failing to comply with this policy

Consequences for failing to comply with this policy may include, at the sole
discretion of the Chromium community managers:

 * a request for an apology;
 * a private or public warning or reprimand;
 * a temporary ban from the mailing list, blog, Chromium repository or
   organization, or other Chromium-supported communication group, including
   loss of committer status;
 * a permanent ban from any of the above, or from all current and future
   Chromium-supported or Google-supported communities, including loss of
   committer status.

Participants warned to stop any harassing behavior are expected to comply
immediately; failure to do so will result in an escalation of consequences.

## Acknowledgements

This Code of Conduct is based on the Geek Feminism Code of Conduct, the Django
Code of Conduct and the Geek Feminism Wiki "Effective codes of conduct" guide.

## License

This Code of Conduct is available for reuse under the Creative Commons Zero
(CC0) license.
