--- a/AUTHORS
+++ b/AUTHORS
@@ -1,501 +1,18 @@
-# Names should be added to this file with this pattern:
-#
-# For individuals:
-#   Name <email address>
-#
-# For organizations:
-#   Organization <fnmatch pattern>
-#
-# See python fnmatch module documentation for more information.
-
-Aaron Jacobs <samusaaron3@gmail.com>
-Aaron Leventhal <aaronlevbugs@gmail.com>
-Aaron Randolph <aaron.randolph@gmail.com>
-Abhishek Agarwal <abhishek.a21@samsung.com>
-Adam Roben <adam@github.com>
-Adam Treat <adam.treat@samsung.com>
-Addanki Gandhi Kishor <kishor.ag@samsung.com>
-Adenilson Cavalcanti <a.cavalcanti@partner.samsung.com>
-Aditya Bhargava <heuristicist@gmail.com>
-Ajay Berwal <ajay.berwal@samsung.com>
-Ajith Kumar V <ajith.v@samsung.com>
-Alex Gartrell <agartrell@cmu.edu>
-Alex Henrie <alexhenrie24@gmail.com>
-Alex Scheele <alexscheele@gmail.com>
-Alexander Sulfrian <alexander@sulfrian.net>
-Alexandre Abreu <wiss1976@gmail.com>
-Alexandru Chiculita <achicu@adobe.com>
-Alexey Korepanov <alexkorep@gmail.com>
 Alexis Menard <alexis.menard@intel.com>
-Alfredo Hernandez <ahernandez.miralles@gmail.com>
-Ali Vathi <ali.akbar@gmail.com>
-Amit Sarkar <amit.srkr@samsung.com>
-Amogh Bihani <amogh.bihani@samsung.com>
-Amruth Raj <amruthraj@motorola.com>
-Amruth Raj <ckqr36@motorola.com>
-Anand Ratn <anand.ratn@samsung.com>
-Anastasios Cassiotis <tom.cassiotis@gmail.com>
-Ancil George <ancilgeorge@samsung.com>
-Andrei Parvu <andrei.prv@gmail.com>
-Andrei Parvu <parvu@adobe.com>
-Andrew Brampton <me@bramp.net>
-Andrew Tulloch <andrew@tullo.ch>
-Anish Patankar <anish.p@samsung.com>
-Ankit Kumar <ankit2.kumar@samsung.com>
-Anssi Hannula <anssi.hannula@iki.fi>
-Antonio Gomes <a1.gomes@sisa.samsung.com>
-Anuj Kumar Sharma <anujk.sharma@samsung.com>
-Arnaud Renevier <a.renevier@samsung.com>
-Arpita Bahuguna <a.bah@samsung.com>
-Arthur Lussos <developer0420@gmail.com>
-Arun Kulkarni <kulkarni.a@samsung.com>
-Arun Mankuzhi <arun.m@samsung.com>
-Arunoday Sarkar <a.sarkar.arun@gmail.com>
-Arunprasad Rajkumar <ararunprasad@gmail.com>
-Arunprasad Rajkumar <arurajku@cisco.com>
-Attila Dusnoki <dati91@gmail.com>
-Avinaash Doreswamy <avi.nitk@samsung.com>
-Balazs Kelemen <b.kelemen@samsung.com>
-Behara Mani Shyam Patro <behara.ms@samsung.com>
-Bem Jones-Bey <bemajaniman@gmail.com>
-Bem Jones-Bey <bjonesbe@adobe.com>
-Ben Karel <eschew@gmail.com>
-Benjamin Jemlich <pcgod99@gmail.com>
-Bernard Cafarelli <voyageur@gentoo.org>
-Bhanukrushana Rout <b.rout@samsung.com>
-Bobby Powers <bobbypowers@gmail.com>
-Brendan Long <self@brendanlong.com>
-Brian G. Merrell <bgmerrell@gmail.com>
-Brian Konzman, SJ <b.g.konzman@gmail.com>
-Brian Merrell, Novell Inc. <bgmerrell@gmail.com>
-Bruno Calvignac <bruno@flock.com>
-Bruno de Oliveira Abinader <bruno.d@partner.samsung.com>
-Bryan Donlan <bdonlan@gmail.com>
-Byungwoo Lee <bw80.lee@samsung.com>
-Caio Marcelo de Oliveira Filho <caio.de.oliveira.filho@intel.com>
-Caitlin Potter <caitpotter88@gmail.com>
-Catalin Badea <badea@adobe.com>
-Cem Kocagil <cem.kocagil@gmail.com>
-Chamal De Silva <chamalsl@yahoo.com>
-Chandra Shekar Vallala <brk376@motorola.com>
-Chang Shu <c.shu@samsung.com>
-ChangSeok Oh <shivamidow@gmail.com>
 Changbin Shao <changbin.shao@intel.com>
-Changjun Yang <changjun.yang@intel.com>
-Chansik Yun <chansik.yun@gmail.com>
-Chaobin Zhang <zhchbin@gmail.com>
-Chris Harrelson <chrishtr@gmail.com>
-Christophe Dumez <ch.dumez@samsung.com>
-Christopher Dale <chrelad@gmail.com>
-Clemens Fruhwirth <clemens@endorphin.org>
-Clement Scheelfeldt Skau <clementskau@gmail.com>
-Clinton Staley <clintstaley@chromium.org>
-Clinton Staley <clintstaley@gmail.com>
-Craig Schlenter <craig.schlenter@gmail.com>
-Daegyu Lee <na7jun8gi@gmail.com>
-Dai Chunyang <chunyang.dai@intel.com>
-Daniel Bomar <dbdaniel42@gmail.com>
-Daniel Johnson <danielj41@gmail.com>
-Daniel Nishi <dhnishi@gmail.com>
-Daniel Shaulov <dshaulov@ptc.com>
-Daniel Trebbien <dtrebbien@gmail.com>
-Darshini KN <kn.darshini@samsung.com>
-David Benjamin <davidben@mit.edu>
-David Erceg <erceg.david@gmail.com>
-David Futcher <david.mike.futcher@gmail.com>
-Deepak Dilip Borade <deepak.db@samsung.com>
-Deepak Mittal <deepak.m1@samsung.com>
-Deepak Singla <deepak.sa@samsung.com>
-Derek Halman <d.halman@gmail.com>
-Devlin Cronin <rdevlin.cronin@gmail.com>
-Diego Ferreiro Val <elfogris@gmail.com>
-Dillon Sellars <dill.sellars@gmail.com>
-Divya Bansal <divya.bansal@samsung.com>
-Dominic Jodoin <dominic.jodoin@gmail.com>
-Dominik Röttsches <dominik.rottsches@intel.com>
-Don Woodward <woodward@adobe.com>
-Dongjun Kim <djmix.kim@samsung.com>
+Daniel Narvaez <dwnarvaez@gmail.com>
 Dongseong Hwang <dongseong.hwang@intel.com>
-Dongwoo Joshua Im <dw.im@samsung.com>
-Douglas F. Turner <doug.turner@gmail.com>
 Eduardo Lima (Etrunko) <eduardo.lima@intel.com>
-Edward Crossman <tedoc2000@gmail.com>
-Eero Häkkinen <e.hakkinen@samsung.com>
-Egor Starkov <egor.starkov@samsung.com>
-Ehsan Akhgari <ehsan.akhgari@gmail.com>
-Elan Ruusamäe <elan.ruusamae@gmail.com>
-Eric Ahn <byungwook.ahn@gmail.com>
-Eric Rescorla <ekr@rtfm.com>
-Erik Hill <erikghill@gmail.com>
-Erik Sjölund <erik.sjolund@gmail.com>
-Eriq Augustine <eriq.augustine@gmail.com>
-Etienne Laurin <etienne@atnnn.com>
-Evan Peterson <evan.peterson.ep@gmail.com>
-Evan Wallace <evan.exe@gmail.com>
-Evangelos Foutras <evangelos@foutrelis.com>
-Evgeniy Dushistov <dushistov@gmail.com>
-Evgeny Agafonchikov <evgeny.agafonchikov@akvelon.com>
-Fabien Tassin <fta@sofaraway.org>
-Felix H. Dahlke <fhd@ubercode.de>
-Fernando Jiménez Moreno <ferjmoreno@gmail.com>
-François Beaufort <beaufort.francois@gmail.com>
-Francois Kritzinger <francoisk777@gmail.com>
-Frédéric Wang <fred.wang@free.fr>
-Gaetano Mendola <mendola@gmail.com>
-Gajendra N <gajendra.n@samsung.com>
-Gajendra Singh <wxjg68@motorola.com>
-Gao Chun <chun.gao@intel.com>
-Gao Chun <gaochun.dev@gmail.com>
-George Liaskos <geo.liaskos@gmail.com>
-Giuseppe Iuculano <giuseppe@iuculano.it>
-Glenn Adams <glenn@chromium.org>
-Gnanasekar Somanathan <gnanasekar.s@samsung.com>
-Gordana Cmiljanovic <gordana.cmiljanovic@imgtec.com>
-Goutham Jagannatha <wrm364@motorola.com>
-Gregory Davis <gpdavis.chromium@gmail.com>
-Grzegorz Czajkowski <g.czajkowski@samsung.com>
-Guangzhen Li <guangzhen.li@intel.com>
-Gurpreet Kaur <k.gurpreet@samsung.com>
-Gyuyoung Kim <gyuyoung.kim@samsung.com>
-Habib Virji <habib.virji@samsung.com>
-Haitao Feng <haitao.feng@intel.com>
-Halton Huo <halton.huo@intel.com>
-Haojian Wu <hokein.wu@gmail.com>
-Harpreet Singh Khurana <harpreet.sk@samsung.com>
-Hautio Kari <khautio@gmail.com>
-Heejin R. Chung <heejin.r.chung@samsung.com>
-Heeyoun Lee <heeyoun.lee@samsung.com>
-Himanshu Joshi <h.joshi@samsung.com>
-Hong Zheng <hong.zheng@intel.com>
-Hongbo Min <hongbo.min@intel.com>
-Horia Olaru <horia.olaru@gmail.com>
-Horia Olaru <olaru@adobe.com>
-Hosung You <hosung.you@samsung.com>
-Hwanseung Lee <rucifer1217@gmail.com>
-Hyunki Baik <hyunki.baik@samsung.com>
-Hyungwook Lee <withlhw@gmail.com>
-Ibrar Ahmed <ibrar.ahmad@gmail.com>
-Ion Rosca <rosca@adobe.com>
-J. Ryan Stinnett <jryans@chromium.org>
-Jacob Mandelson <jacob@mandelson.org>
-Jaehun Lim <ljaehun.lim@samsung.com>
-Jaekyeom Kim <btapiz@gmail.com>
-Jaime Soriano Pastor <jsorianopastor@gmail.com>
-Jake Helfert <jake@helfert.us>
-Jakob Weigert <jakob.j.w@googlemail.com>
-James Choi <jchoi42@pha.jhu.edu>
-James Vega <vega.james@gmail.com>
-James Wei <james.wei@intel.com>
-James Willcox <jwillcox@litl.com>
-Janwar Dinata <j.dinata@gmail.com>
-Jared Shumway <jaredshumway94@gmail.com>
-Jared Wein <weinjared@gmail.com>
-Jay Soffian <jaysoffian@gmail.com>
-Jeado Ko <haibane84@gmail.com>
-Jeongeun Kim <je_julie.kim@samsung.com>
-Jesse Miller <jesse@jmiller.biz>
-Jesus Sanchez-Palencia <jesus.sanchez-palencia.fernandez.fil@intel.com>
+Hongzhang Yan <hongzhang.yan@intel.com>
 Jiajia Qin <jiajia.qin@intel.com>
-Jie Chen <jie.a.chen@intel.com>
-Jihun Brent Kim <devgrapher@gmail.com>
-Jin Yang <jin.a.yang@intel.com>
-Jincheol Jo <jincheol.jo@navercorp.com>
-Jingwei Liu <kingweiliu@gmail.com>
-Jingyi Wei <wjywbs@gmail.com>
-Jinho Bang <jinho.bang@samsung.com>
-Jinwoo Song <jinwoo7.song@samsung.com>
-Jitendra Kumar Sahoo <jitendra.ks@samsung.com>
-Joe Knoll <joe.knoll@workday.com>
-Joe Thomas <mhx348@motorola.com>
-Joel Stanley <joel@jms.id.au>
-Johannes Rudolph <johannes.rudolph@googlemail.com>
-John Yani <vanuan@gmail.com>
-John Yoo <nearbyh13@gmail.com>
-Jonathan Frazer <listedegarde@gmail.com>
-Jonathan Hacker <jhacker@arcanefour.com>
-Jongsoo Lee <leejongsoo@gmail.com>
 Joone Hur <joone.hur@intel.com>
-Jorge Villatoro <jorge@tomatocannon.com>
-Joseph Gentle <josephg@gmail.com>
-Josh Triplett <josh@joshtriplett.org>
-Josh Triplett <josh.triplett@intel.com>
-Joshua Lock <joshua.lock@intel.com>
-Joshua Roesslein <jroesslein@gmail.com>
-Josué Ratelle <jorat1346@gmail.com>
-Juhui Lee <juhui24.lee@samsung.com>
-Julien Racle <jracle@logitech.com>
-Jun Jiang <jun.a.jiang@intel.com>
-JungJik Lee <jungjik.lee@samsung.com>
-Junmin Zhu <junmin.zhu@intel.com>
-Kal Conley <kcconley@gmail.com>
 Kalyan Kondapally <kalyan.kondapally@intel.com>
-Kamil Jiwa <kamil.jiwa@gmail.com>
-Kangil Han <kangil.han@samsung.com>
-Kangyuan Shu <kangyuan.shu@intel.com>
-Kaspar Brand <googlecontrib@velox.ch>
-Kaustubh Atrawalkar <kaustubh.ra@gmail.com>
-Kaustubh Atrawalkar <kaustubh.a@samsung.com>
-Keene Pan <keenepan@linpus.com>
-Kenneth Rohde Christiansen <kenneth.r.christiansen@intel.com>
-Keonho Kim <keonho07.kim@samsung.com>
-Kevin Lee Helpingstine <sig11@reprehensible.net>
-Kevin M. McCormick <mckev@amazon.com>
-Kihong Kwon <kihong.kwon@samsung.com>
-Kim Christensen <kimworking@gmail.com>
-Kingshuk Jana <kingshuk.j@samsung.com>
-Klemen Forstnerič <klemen.forstneric@gmail.com>
-Krzysztof Wolanski <k.wolanski@samsung.com>
-Kunal Thakar <kunalt@gmail.com>
-Kushal Pisavadia <kushi.p@gmail.com>
-Kwangho Shin <k_h.shin@samsung.com>
-Kyle Nahrgang <kpn24@drexel.edu>
-Kyungtae Kim <ktf.kim@samsung.com>
-Kyung Yeol Kim <chitacan@gmail.com>
-Laszlo Gombos <l.gombos@samsung.com>
-Laszlo Radanyi <bekkra@gmail.com>
-Lauren Yeun Kim <lauren.yeun.kim@gmail.com>
-Lauri Oherd <lauri.oherd@gmail.com>
-Leith Bade <leith@leithalweapon.geek.nz>
-Li Yin <li.yin@intel.com>
-Lionel Landwerlin <lionel.g.landwerlin@intel.com>
-Lorenzo Stoakes <lstoakes@gmail.com>
-Lu Guanqun <guanqun.lu@gmail.com>
-Lucie Brozkova <lucinka.brozkova@gmail.com>
-Luke Inman-Semerau <luke.semerau@gmail.com>
-Luke Zarko <lukezarko@gmail.com>
-Maarten Lankhorst <m.b.lankhorst@gmail.com>
-Magnus Danielsson <fuzzac@gmail.com>
-Mahesh Kulkarni <mahesh.kk@samsung.com>
-Malcolm Wang <malcolm.2.wang@gmail.com>
-Manish Chhajer <chhajer.m@samsung.com>
-Manuel Braun <thembrown@gmail.com>
-Mao Yujie <maojie0924@gmail.com>
-Mao Yujie <yujie.mao@intel.com>
-Marco Rodrigues <gothicx@gmail.com>
-Mario Sanchez Prada <mario.prada@samsung.com>
-Mark Hahnenberg <mhahnenb@andrew.cmu.edu>
-Mark Seaborn <mrs@mythic-beasts.com>
-Martin Bednorz <m.s.bednorz@gmail.com>
-Masahiro Yado <yado.masa@gmail.com>
-Matheus Bratfisch <matheusbrat@gmail.com>
-Mathias Bynens <mathias@qiwi.be>
-Mathieu Meisser <mmeisser@logitech.com>
-Matt Arpidone <mma.public@gmail.com>
-Matthew Robertson <matthewrobertson03@gmail.com>
-Matthew Turk <matthewturk@gmail.com>
-Matthew Willis <appamatto@gmail.com>
-Matthias Reitinger <reimarvin@gmail.com>
-Max Perepelitsyn <pph34r@gmail.com>
-Max Vujovic <mvujovic@adobe.com>
-Michael Gilbert <floppymaster@gmail.com>
-Michael Schechter <mike.schechter@gmail.com>
-Michael Zugelder <michael@zugelder.org>
-Mihai Maerean <mmaerean@adobe.com>
-Mihai Tica <mihai.o.tica@gmail.com>
-Mihai Tica <mitica@adobe.com>
-Mike Tilburg <mtilburg@adobe.com>
-Mikhail Pozdnyakov <mikhail.pozdnyakov@intel.com>
-Mingmin Xie <melvinxie@gmail.com>
-Mirela Budaes <mbudaes@gmail.com>
-Mirela Budaes <mbudaes@adobe.com>
-Mitchell Rosen <mitchellwrosen@chromium.org>
-Miyoung Shin <myid.shin@samsung.com>
-Mohamed I. Hammad <ibraaaa@gmail.com>
-Mohamed Mansour <m0.interactive@gmail.com>
-Mohammed Wajahat Ali Siddiqui <wajahat.s@samsung.com>
-Mohan Reddy <mohan.reddy@samsung.com>
-Mrunal Kapade <mrunal.kapade@intel.com>
-Myles C. Maxfield <mymax@amazon.com>
-Naiem Shaik <naiem.shaik@gmail.com>
-Naoki Takano <takano.naoki@gmail.com>
-Naveen Bobbili <naveenbobbili@motorola.com>
-Naveen Bobbili <qghc36@motorola.com>
-Naveen Kumar S G <naveensg@samsung.com>
-Nayan Kumar K <qtc746@motorola.com>
-Nedeljko Babic <nedeljko.babic@imgtec.com>
-Nikhil Bansal <n.bansal@samsung.com>
-Nikita Ofitserov <himikof@gmail.com>
-Ningxin Hu <ningxin.hu@intel.com>
-Nitish Mehrotra <nitish.m@samsung.com>
-Pan Deng <pan.deng@intel.com>
-Parag Radke <nrqv63@motorola.com>
-Patrasciuc Sorin Cristian <cristian.patrasciuc@gmail.com>
-Patrick Riordan <patrickriordan177@gmail.com>
-Paul Adolph <padolph@netflix.com>
-Paul Kehrer <paul.l.kehrer@gmail.com>
-Paul Lind <paul.lind@imgtec.com>
-Paul Nettleship <pnettleship@gmail.com>
-Paul Robinson <paulrobinson85@googlemail.com>
-Paul Roskell <blurrech@gmail.com>
-Paul Wicks <pwicks86@gmail.com>
-Pavan Kumar Emani <pavan.e@samsung.com>
-Pavel Ivanov <paivanof@gmail.com>
-Paweł Hajdan jr <phajdan.jr@gmail.com>
-Peng Jiang <leiyi.jp@gmail.com>
-Petar Jovanovic <petarj@mips.com>
-Peter Beverloo <peter@chromium.org>
-Peter Bright <drpizza@quiscalusmexicanus.org>
-Peter Brophy <pbrophy@adobe.com>
-Peter Collingbourne <peter@pcc.me.uk>
-Peter Gal <pgal.u-szeged@partner.samsung.com>
-Philippe Beauchamp <philippe.beauchamp@gmail.com>
-Philippe Beaudoin <philippe.beaudoin@gmail.com>
-Pierre-Antoine LaFayette <pierre.lafayette@gmail.com>
-Po-Chun Chang <pochang0403@gmail.com>
-Prashant Hiremath <prashhir@cisco.com>
-Prashant Nevase <prashant.n@samsung.com>
-Pritam Nikam <pritam.nikam@samsung.com>
-Puttaraju R <puttaraju.r@samsung.com>
-Qiankun Miao <qiankun.miao@intel.com>
-Qing Zhang <qing.zhang@intel.com>
-Radu Stavila <stavila@adobe.com>
-Raghavendra Ghatage <r.ghatage@samsung.com>
-Raman Tenneti <raman.tenneti@gmail.com>
-Ramkumar Gokarnesan <ramkumar.gokarnesan@gmail.com>
-Ramkumar Ramachandra <artagnon@gmail.com>
-Randy Posynick <randy.posynick@gmail.com>
+Manuel Bachmann <manuel.bachmann@open.eurogiciel.org>
+Michael Forney <mforney@mforney.org>
+Michael Spang <spang@chromium.org>
+Nicolas Guyomard <nicolas.guyomard@open.eurogiciel.org>
+Patrick Heeb <patrick.heeb@noser.com>
+Philippe Coval <philippe.coval@open.eurogiciel.org>
 Raphael Kubo da Costa <raphael.kubo.da.costa@intel.com>
-Ravi Phaneendra Kasibhatla <r.kasibhatla@samsung.com>
-Ravi Phaneendra Kasibhatla <ravi.kasibhatla@motorola.com>
-Renata Hodovan <rhodovan.u-szeged@partner.samsung.com>
-Rene Bolldorf <rb@radix.io>
-Rene Ladan <r.c.ladan@gmail.com>
-Rijubrata Bhaumik <rijubrata.bhaumik@intel.com>
-Rob Buis <rob.buis@samsung.com>
-Rob Wu <rob@robwu.nl>
-Robert Bear Travis <bear.travis@gmail.com>
-Robert Bear Travis <betravis@adobe.com>
-Robert Bradford <robert.bradford@intel.com>
-Robert Goldberg <goldberg@adobe.com>
-Robert Hogan <robhogan@gmail.com>
-Robert Nagy <robert.nagy@gmail.com>
-Robert Sesek <rsesek@bluestatic.org>
-Roland Takacs <rtakacs.u-szeged@partner.samsung.com>
-Rosen Dash <nqk836@motorola.com>
-Rosen Dash <rosen.dash@gmail.com>
-ruben <chromium@hybridsource.org>
-Ruben Terrazas <rubentopo@gmail.com>
-Ruiyi Luo <luoruiyi2008@gmail.com>
-Ryan Norton <rnorton10@gmail.com>
-Ryan Sleevi <ryan-chromium-dev@sleevi.com>
-Ryuan Choi <ryuan.choi@samsung.com>
-Saikrishna Arcot <saiarcot895@gmail.com>
-Salvatore Iovene <salvatore.iovene@intel.com>
-Sam Larison <qufighter@gmail.com>
-Sam McDonald <sam@sammcd.com>
-Sanjoy Pal <ncj674@motorola.com>
-Sanjoy Pal <sanjoy.pal@samsung.com>
-Sanne Wouda <sanne.wouda@gmail.com>
-Sarath Singapati <s.singapati@samsung.com>
-Sathish Kuppuswamy <sathish.kuppuswamy@intel.com>
-Satoshi Matsuzaki <satoshi.matsuzaki@gmail.com>
-Sayan Nayak <sayan.nayak@samsung.com>
-Scott Blomquist <sblom@microsoft.com>
-Sean Bryant <sean@cyberwang.net>
-Seo Sanghyeon <sanxiyn@gmail.com>
-Seokju Kwon <seokju.kwon@gmail.com>
-Sergey Putilin <p.sergey@samsung.com>
-Sergio Carlos Morales Angeles <carloschilazo@gmail.com>
-Sergiy Byelozyorov <rryk.ua@gmail.com>
-Seshadri Mahalingam <seshadri.mahalingam@gmail.com>
-Sevan Janiyan <venture37@geeklan.co.uk>
-ShankarGanesh K <blr.bmlab@gmail.com>
-Shez Baig <sbaig1@bloomberg.net>
-Shiliu Wang <aofdwsl@gmail.com>
-Shiliu Wang <shiliu.wang@intel.com>
-Shouqun Liu <shouqun.liu@intel.com>
-Shreeram Kushwaha <shreeram.k@samsung.com>
-Shreyas Gopal <shreyas.g@samsung.com>
-Shreyas VA <v.a.shreyas@gmail.com>
-Siba Samal <siba.samal@samsung.com>
-Simon Arlott <simon.arlott@gmail.com>
-Siva Kumar Gunturi <siva.gunturi@samsung.com>
-Sohan Jyoti Ghosh <sohan.jyoti@samsung.com>
-Song YeWen <ffmpeg@gmail.com>
-Soren Dreijer <dreijerbit@gmail.com>
-Srirama Chandra Sekhar Mogali <srirama.m@samsung.com>
-Stephen Searles <stephen.searles@gmail.com>
-Steven Pennington <spenn@engr.uvic.ca>
-Subrahmanya Praveen Munukutla <sataya.m@samsung.com>
-Suchit Agrawal <a.suchit@samsung.com>
-Sudarsana Babu Nagineni <sudarsana.nagineni@intel.com>
-Sudarshan Parthasarathy <sudarshan.p@samsung.com>
-Sungguk Lim <limasdf@gmail.com>
-Sungmann Cho <sungmann.cho@gmail.com>
-Sungmann Cho <sungmann.cho@navercorp.com>
-Suyash Sengar <suyash.s@samsung.com>
-Sunil Ratnu <sunil.ratnu@samsung.com>
-Sylvain Zimmer <sylvinus@gmail.com>
-Szymon Piechowicz <szymonpiechowicz@o2.pl>
-Takeshi Kurosawa <taken.spc@gmail.com>
-Tapu Kumar Ghose <ghose.tapu@gmail.com>
-Taylor Price <trprice@gmail.com>
-Ted Kim <neot0000@gmail.com>
-Ted Vessenes <tedvessenes@gmail.com>
-Teodora Novkovic <teodora.petrovic@gmail.com>
-Thiago Farina <thiago.farina@gmail.com>
-Thiago Marcos P. Santos <thiago.santos@intel.com>
-Thomas Butter <tbutter@gmail.com>
 Tiago Vignatti <tiago.vignatti@intel.com>
-Tim Ansell <mithro@mithis.com>
-Timo Reimann <ttr314@googlemail.com>
-Torsten Kurbad <google@tk-webart.de>
-Trevor Perrin <unsafe@trevp.net>
-Umar Hansa <umar.hansa@gmail.com>
-Vamshikrishna Yellenki <vamshi@motorola.com>
-Vani Hegde <vani.hegde@samsung.com>
-Vedran Šajatović <vedran.sajatovic@gmail.com>
-Vernon Tang <vt@foilhead.net>
-Viatcheslav Ostapenko <sl.ostapenko@samsung.com>
-Victor Costan <costan@gmail.com>
-Viet-Trung Luu <viettrungluu@gmail.com>
-Vinay Anantharaman <vinaya@adobe.com>
-Vipul Bhasin <vipul.bhasin@gmail.com>
-Visa Putkinen <v.putkinen@partner.samsung.com>
-Vivek Galatage <vivek.vg@samsung.com>
-Will Hirsch <chromium@willhirsch.co.uk>
-Xiang Long <xiang.long@intel.com>
-Xinchao He <hexinchao@gmail.com>
-Xing Zhang <xzhang@adobe.com>
-Xu Samuel <samuel.xu@intel.com>
-Xuefei Ren <xrenishere@gmail.com>
-Yael Aharon <yael.aharon@intel.com>
-Yair Yogev <progame@chromium.org>
-Yang Gu <yang.gu@intel.com>
-Yarin Kaul <yarin.kaul@gmail.com>
-Ye Liu <cbakgly@gmail.com>
-Yi Shen <yi.shen@samsung.com>
-Yoav Weiss <yoav@yoav.ws>
-Yoav Zilberberg <yoav.zilberberg@gmail.com>
-Yong Shin <sy3620@gmail.com>
-Yongsheng Zhu <yongsheng.zhu@intel.com>
-Yoshinori Sano <yoshinori.sano@gmail.com>
-YoungKi Hong <simon.hong81@gmail.com>
-Youngsun Suh <zard17@gmail.com>
-Yumikiyo Osanai <yumios.art@gmail.com>
-Yuri Gorobets <yuri.gorobets@gmail.com>
-Zeno Albisser <zeno.albisser@digia.com>
-Zhaoze Zhou <zhaoze.zhou@partner.samsung.com>
-Zheng Chuang <zhengchuangscu@gmail.com>
-Zhenyu Liang <zhenyu.liang@intel.com>
-Zhenyu Shan <zhenyu.shan@intel.com>
-Ziran Sun <ziran.sun@samsung.com>
-Yongha Lee <yongha78.lee@samsung.com>
-方觉 (Fang Jue) <fangjue23303@gmail.com>
-Yupei Wang <perryuwang@tencent.com>
-Peng Hu <penghu@tencent.com>
-WenSheng He <wensheng.he@samsung.com>
-
-BlackBerry Limited <*@blackberry.com>
-Code Aurora Forum <*@codeaurora.org>
-Comodo CA Limited
-Google Inc. <*@google.com>
-Igalia S.L. <*@igalia.com>
-NVIDIA Corporation <*@nvidia.com>
-Opera Software ASA <*@opera.com>
-The Chromium Authors <*@chromium.org>
-The MathWorks, Inc. <binod.pant@mathworks.com>
-Torchmobile Inc.
-Venture 3 Systems LLC <*@venture3systems.com>
-Yandex LLC <*@yandex-team.ru>
-ARM Holdings <*@arm.com>
+Steven Newbury <steve@snewbury.org.uk>
--- a/LICENSE
+++ b/LICENSE
@@ -1,16 +1,16 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
+// Copyright (c) 2013 Intel Corporation. All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions are
 // met:
 //
-//    * Redistributions of source code must retain the above copyright
+// * Redistributions of source code must retain the above copyright
 // notice, this list of conditions and the following disclaimer.
-//    * Redistributions in binary form must reproduce the above
+// * Redistributions in binary form must reproduce the above
 // copyright notice, this list of conditions and the following disclaimer
 // in the documentation and/or other materials provided with the
 // distribution.
-//    * Neither the name of Google Inc. nor the names of its
+// * Neither the name of Intel Corporation nor the names of its
 // contributors may be used to endorse or promote products derived from
 // this software without specific prior written permission.
 //
--- a/OWNERS
+++ b/OWNERS
@@ -1,13 +1,2 @@
-darin@chromium.org
-ben@chromium.org
-per-file .gitignore=*
-per-file .gn=brettw@chromium.org
-per-file BUILD.gn=brettw@chromium.org
-per-file DEPS=*
-per-file AUTHORS=*
-per-file WATCHLISTS=*
-per-file Android.mk=benm@chromium.org
-per-file Android.mk=torne@chromium.org
-per-file PRESUBMIT*.py=maruel@chromium.org
-per-file PRESUBMIT*.py=jochen@chromium.org
-per-file PRESUBMIT*.py=phajdan.jr@chromium.org
+kalyan.kondapally@intel.com
+tiago.vignatti@intel.com
--- /dev/null
+++ b/README.md
@@ -0,0 +1,142 @@
+# Introduction
+
+Ozone-Wayland is the implementation of Chromium's Ozone for supporting [Wayland](http://wayland.freedesktop.org/) graphics system. Different projects based on Chromium/Blink like the Chrome Browser, Chrome OS, [Crosswalk](https://crosswalk-project.org/), among others can be enabled now using Wayland.
+
+![Alt text](https://raw.github.com/tiagovignatti/misc/master/chromium-2013-06-07-small.png "Content Shell running on Weston")
+
+## Contents
+
+  - [Design](#design) - the architecture behind
+  - [Howto](#howto) - set up the system environment, build and run
+  - [Gardening](#gardening) - updating to the latest Chromium codebase
+  - [Contributing](#contributing) - help develop and send patches
+  - [License](#license)
+
+## Design
+
+Ozone-Wayland [architecture](https://docs.google.com/document/d/118Cmq_dedHOr4jfyVeE4jBhV7hXzhnaVCqegNMGano0/) can be found here.
+
+## Howto
+
+We use Ubuntu 12.04 LTS (Precise Pangolin), 32/64-bit but a kernel from Raring though. One can install it pretty easily just
+`sudo apt-get install linux-generic-lts-raring`. This version is needed for using Mesa master 9.3.0-devel, a requirement for Weston. Besides, make sure you have **at least** 25 GB of disk space to store all the sources and a few targets to be compiled (with debugging symbols).
+
+Firstly you'd need to set up the Wayland libraries (version >= 1.4.0), and the Weston reference compositor that you will be running Chromium onto. The information on Wayland's web page should be enough for doing so:
+
+http://wayland.freedesktop.org/building.html
+
+_Please note that at the moment support for Wayland's XDG Shell protocol only works with the 1.5 series._
+
+Make sure everything is alright now, setting up the environment variable `$XDG_RUNTIME_DIR` and playing a bit with the Wayland clients, connecting them on Weston.
+
+Then you'd need some distribution tools and development packages :
+
+  ```
+  $ sudo apt-get install gperf libnss3-dev libpulse-dev libdbus-1-dev libexif-dev libpci-dev libpango1.0-dev libelf-dev libcap-dev libasound2-dev libssl-dev libcups2-dev libgconf2-dev libgnome-keyring-dev
+  ```
+
+If you are running a 64-bit Ubuntu distribution, you'd additionally need :
+
+  ```
+  $ sudo apt-get install ia32-libs
+  ```
+
+Then on Chromium's side, we need to setup Chromium's tree together with the
+Ozone-Wayland implementation. For that you need to use gclient to clone
+Ozone-Wayland; but first you need to download
+[depot\_tools](http://dev.chromium.org/developers/how-tos/install-depot-tools)
+and configure it. Say your Chromium top-level will be in `~git/chromium`, you will
+need:
+
+  ```
+  $ mkdir -p ~git/chromium
+  $ cd ~git/chromium
+  $ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
+  $ export PATH=`pwd`/depot_tools:"$PATH"
+  ```
+
+We support HWA Video Decoding using Libva and VAAPI. To enable the support one needs to build
+and install these packages. Note: This is still work in progress. You can skip these dependencies if
+you don’t need this support.
+
+One needs to set the installation prefix $WLD(Below)  to be same as the one used for setting up Wayland environment.
+  ```
+  $ git clone git://anongit.freedesktop.org/libva  
+  $ cd libva/
+  $ git checkout libva-1.2.1
+  $ ./autogen.sh --prefix=$WLD  
+  $ make -j4 && make install
+  ```
+  ```
+  $ git clone git://anongit.freedesktop.org/vaapi/intel-driver
+  $ cd intel-driver/
+  $ git checkout 1.2.1
+  $ ./autogen.sh --prefix=$WLD  
+  $ make -j4 && make install
+  ```
+now we can clone Ozone-Wayland and fetch all the dependencies of it, including Chromium itself:
+
+  ```
+  $ gclient config ssh://git@github.com/01org/ozone-wayland.git --name=src/ozone --deps-file ".DEPS.git"
+  $ export GYP_DEFINES='use_ash=1 use_aura=1 chromeos=0 use_ozone=1' 
+  ```
+  If you want to enable HWA Video Decoding, you need to have the following GYP_DEFINES:
+  ```
+   $ export GYP_DEFINES='use_ash=1 use_aura=1 chromeos=0 use_ozone=1 proprietary_codecs=1 ffmpeg_branding=Chrome'
+   ```
+  ```
+   $ gclient sync 
+   ```
+It may take a considerable time for downloading the trees. If everything went
+fine, now we're able to build.
+
+For now, also apply some patches:
+
+  ```
+  ./src/ozone/patches/patch-chromium.sh
+  ```
+
+TIP: to speed up debug builds you can disable Blink debugging symbols by setting remove_webcore_debug_symbols=1 in GYP_DEFINES.
+
+Note that in Chromium, gyp uses pkg-config for checking where are Wayland libraries on the system, so double check that you are not mixing some that was already there with latest that you just got and compiled from git.
+
+TIP: if you followed Wayland's web page instructions, then you probably want to set the `PKG_CONFIG_PATH` variable as `$HOME/install` and add it in your .bashrc to be as default.
+
+Now we can conclude compiling a few targets like Content Shell (content_shell) or the Chromium browser:
+
+  ```
+  $ cd src/
+  $ ./build/gyp_chromium
+  $ ninja -C out/Debug -j16 chrome
+  ```
+(if you get any build errors, please execute "git log" and verify that the first "commit" line matches the "chromium_rev" one found in `src/ozone/.DEPS.git`. If it doesn't, run "git checkout $ID", apply the patches and compile again)
+
+That's all. At this point you should be able to connect Chromium on Weston using:
+
+  ```
+  $ ~/git/weston/src/weston &
+  $ ./out/Debug/chrome --no-sandbox
+  ```
+###Sandboxing
+If you want to enable Sandboxing provided by Chromium, please follow the instructions from here:
+https://code.google.com/p/chromium/wiki/LinuxSUIDSandbox
+
+###Working with Ozone-Wayland Release branch:
+
+Instructions can be found here: https://github.com/01org/ozone-wayland/wiki/Releasing#wiki-releasebranch
+
+## Gardening
+
+We pin chromium to a particular revision in order to keep upstream changes from
+breaking our build. Updating that revision to a newer one and fixing any
+resulting breakage is called gardening. To sync a different version of chromium,
+update chromium_rev in .DEPS.git to a newer revision then run the gclient sync
+again. Fix any build errors, and commit both changes.
+
+## Contributing
+
+Instructions can be found here: https://github.com/otcshare/ozone-wayland/wiki
+
+## License
+
+Ozone-Wayland's code uses the BSD license (check the LICENSE file in the project).
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -14770,6 +14770,14 @@ Do you accept?
     <message name="IDS_FLAGS_ENABLE_MESSAGE_CENTER_ALWAYS_SCROLL_UP_UPON_REMOVAL_DESCRIPTION" desc="Description of about:flags option for message center always scroll up experiment.">
       Enables experiment that message center always scroll up when a notification is removed.
     </message>
+
+    <!-- File-picker strings -->
+    <message name="IDS_FILE_PICKER_TITLE" desc="File picker title">
+      Save file as
+    </message>
+    <message name="IDS_FILE_PICKER_FILE_NAME" desc="File Name">
+      File name
+    </message>
   </messages>
   </release>
 </grit>
--- /dev/null
+++ b/chrome/app/generated_resources.grd.orig
@@ -0,0 +1,14775 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+This file contains definitions of resources that will be translated for each
+locale.  The variables is_win, is_macosx, is_linux, and is_posix are available
+for making strings OS specific.  Other platform defines such as use_titlecase
+are declared in build/common.gypi.
+-->
+
+<grit base_dir="." latest_public_release="0" current_release="1"
+      source_lang_id="en" enc_check="möl">
+  <outputs>
+    <output filename="grit/generated_resources.h" type="rc_header">
+      <emit emit_type='prepend'></emit>
+    </output>
+    <output filename="generated_resources_am.pak" type="data_package" lang="am" />
+    <output filename="generated_resources_ar.pak" type="data_package" lang="ar" />
+    <if expr="use_third_party_translations">
+      <output filename="generated_resources_ast.pak" type="data_package" lang="ast" />
+    </if>
+    <output filename="generated_resources_bg.pak" type="data_package" lang="bg" />
+    <output filename="generated_resources_bn.pak" type="data_package" lang="bn" />
+    <if expr="use_third_party_translations">
+      <output filename="generated_resources_bs.pak" type="data_package" lang="bs" />
+    </if>
+    <output filename="generated_resources_ca.pak" type="data_package" lang="ca" />
+    <if expr="use_third_party_translations">
+      <output filename="generated_resources_ca@valencia.pak" type="data_package" lang="ca@valencia" />
+    </if>
+    <output filename="generated_resources_cs.pak" type="data_package" lang="cs" />
+    <output filename="generated_resources_da.pak" type="data_package" lang="da" />
+    <output filename="generated_resources_de.pak" type="data_package" lang="de" />
+    <output filename="generated_resources_el.pak" type="data_package" lang="el" />
+    <if expr="use_third_party_translations">
+      <output filename="generated_resources_en-AU.pak" type="data_package" lang="en-AU" />
+    </if>
+    <output filename="generated_resources_en-GB.pak" type="data_package" lang="en-GB" />
+    <output filename="generated_resources_en-US.pak" type="data_package" lang="en" />
+    <if expr="use_third_party_translations">
+      <output filename="generated_resources_eo.pak" type="data_package" lang="eo" />
+    </if>
+    <output filename="generated_resources_es.pak" type="data_package" lang="es" />
+    <if expr="is_ios">
+      <!-- iOS uses es-MX for es-419 -->
+      <output filename="generated_resources_es-MX.pak" type="data_package" lang="es-419" />
+    </if>
+    <if expr="not is_ios">
+      <output filename="generated_resources_es-419.pak" type="data_package" lang="es-419" />
+    </if>
+    <output filename="generated_resources_et.pak" type="data_package" lang="et" />
+    <if expr="use_third_party_translations">
+      <output filename="generated_resources_eu.pak" type="data_package" lang="eu" />
+    </if>
+    <output filename="generated_resources_fa.pak" type="data_package" lang="fa" />
+    <output filename="generated_resources_fake-bidi.pak" type="data_package" lang="fake-bidi" />
+    <output filename="generated_resources_fi.pak" type="data_package" lang="fi" />
+    <output filename="generated_resources_fil.pak" type="data_package" lang="fil" />
+    <output filename="generated_resources_fr.pak" type="data_package" lang="fr" />
+    <if expr="use_third_party_translations">
+      <output filename="generated_resources_gl.pak" type="data_package" lang="gl" />
+    </if>
+    <output filename="generated_resources_gu.pak" type="data_package" lang="gu" />
+    <output filename="generated_resources_he.pak" type="data_package" lang="he" />
+    <output filename="generated_resources_hi.pak" type="data_package" lang="hi" />
+    <output filename="generated_resources_hr.pak" type="data_package" lang="hr" />
+    <output filename="generated_resources_hu.pak" type="data_package" lang="hu" />
+    <if expr="use_third_party_translations">
+      <output filename="generated_resources_hy.pak" type="data_package" lang="hy" />
+      <output filename="generated_resources_ia.pak" type="data_package" lang="ia" />
+    </if>
+    <output filename="generated_resources_id.pak" type="data_package" lang="id" />
+    <output filename="generated_resources_it.pak" type="data_package" lang="it" />
+    <output filename="generated_resources_ja.pak" type="data_package" lang="ja" />
+    <if expr="use_third_party_translations">
+      <output filename="generated_resources_ka.pak" type="data_package" lang="ka" />
+    </if>
+    <output filename="generated_resources_kn.pak" type="data_package" lang="kn" />
+    <output filename="generated_resources_ko.pak" type="data_package" lang="ko" />
+    <if expr="use_third_party_translations">
+      <output filename="generated_resources_ku.pak" type="data_package" lang="ku" />
+      <output filename="generated_resources_kw.pak" type="data_package" lang="kw" />
+    </if>
+    <output filename="generated_resources_lt.pak" type="data_package" lang="lt" />
+    <output filename="generated_resources_lv.pak" type="data_package" lang="lv" />
+    <output filename="generated_resources_ml.pak" type="data_package" lang="ml" />
+    <output filename="generated_resources_mr.pak" type="data_package" lang="mr" />
+    <output filename="generated_resources_ms.pak" type="data_package" lang="ms" />
+    <output filename="generated_resources_nl.pak" type="data_package" lang="nl" />
+    <!-- The translation console uses 'no' for Norwegian Bokmål. It should
+         be 'nb'. -->
+    <output filename="generated_resources_nb.pak" type="data_package" lang="no" />
+    <output filename="generated_resources_pl.pak" type="data_package" lang="pl" />
+    <if expr="is_ios">
+      <!-- iOS uses pt for pt-BR -->
+      <output filename="generated_resources_pt.pak" type="data_package" lang="pt-BR" />
+    </if>
+    <if expr="not is_ios">
+      <output filename="generated_resources_pt-BR.pak" type="data_package" lang="pt-BR" />
+    </if>
+    <output filename="generated_resources_pt-PT.pak" type="data_package" lang="pt-PT" />
+    <output filename="generated_resources_ro.pak" type="data_package" lang="ro" />
+    <output filename="generated_resources_ru.pak" type="data_package" lang="ru" />
+    <output filename="generated_resources_sk.pak" type="data_package" lang="sk" />
+    <output filename="generated_resources_sl.pak" type="data_package" lang="sl" />
+    <output filename="generated_resources_sr.pak" type="data_package" lang="sr" />
+    <output filename="generated_resources_sv.pak" type="data_package" lang="sv" />
+    <output filename="generated_resources_sw.pak" type="data_package" lang="sw" />
+    <output filename="generated_resources_ta.pak" type="data_package" lang="ta" />
+    <output filename="generated_resources_te.pak" type="data_package" lang="te" />
+    <output filename="generated_resources_th.pak" type="data_package" lang="th" />
+    <output filename="generated_resources_tr.pak" type="data_package" lang="tr" />
+    <if expr="use_third_party_translations">
+      <output filename="generated_resources_ug.pak" type="data_package" lang="ug" />
+    </if>
+    <output filename="generated_resources_uk.pak" type="data_package" lang="uk" />
+    <output filename="generated_resources_vi.pak" type="data_package" lang="vi" />
+    <output filename="generated_resources_zh-CN.pak" type="data_package" lang="zh-CN" />
+    <output filename="generated_resources_zh-TW.pak" type="data_package" lang="zh-TW" />
+
+    <!-- On Android, output some strings into Android's xml string format.
+         These strings are tagged with formatter_data="android_java" -->
+    <if expr="is_android">
+      <output filename="java/res/values-am/generated_resources.xml" lang="am" type="android" context="android_java" />
+      <output filename="java/res/values-ar/generated_resources.xml" lang="ar" type="android" context="android_java" />
+      <output filename="java/res/values-bg/generated_resources.xml" lang="bg" type="android" context="android_java" />
+      <output filename="java/res/values-ca/generated_resources.xml" lang="ca" type="android" context="android_java" />
+      <output filename="java/res/values-cs/generated_resources.xml" lang="cs" type="android" context="android_java" />
+      <output filename="java/res/values-da/generated_resources.xml" lang="da" type="android" context="android_java" />
+      <output filename="java/res/values-de/generated_resources.xml" lang="de" type="android" context="android_java" />
+      <output filename="java/res/values-el/generated_resources.xml" lang="el" type="android" context="android_java" />
+      <output filename="java/res/values/generated_resources.xml" lang="en" type="android" context="android_java" />
+      <output filename="java/res/values-en-rGB/generated_resources.xml" lang="en-GB" type="android" context="android_java" />
+      <output filename="java/res/values-es/generated_resources.xml" lang="es" type="android" context="android_java" />
+      <output filename="java/res/values-es-rUS/generated_resources.xml" lang="es-419" type="android" context="android_java" />
+      <output filename="java/res/values-fa/generated_resources.xml" lang="fa" type="android" context="android_java" />
+      <output filename="java/res/values-fi/generated_resources.xml" lang="fi" type="android" context="android_java" />
+      <output filename="java/res/values-tl/generated_resources.xml" lang="fil" type="android" context="android_java" />
+      <output filename="java/res/values-fr/generated_resources.xml" lang="fr" type="android" context="android_java" />
+      <output filename="java/res/values-hi/generated_resources.xml" lang="hi" type="android" context="android_java" />
+      <output filename="java/res/values-hr/generated_resources.xml" lang="hr" type="android" context="android_java" />
+      <output filename="java/res/values-hu/generated_resources.xml" lang="hu" type="android" context="android_java" />
+      <output filename="java/res/values-in/generated_resources.xml" lang="id" type="android" context="android_java" />
+      <output filename="java/res/values-it/generated_resources.xml" lang="it" type="android" context="android_java" />
+      <output filename="java/res/values-iw/generated_resources.xml" lang="he" type="android" context="android_java" />
+      <output filename="java/res/values-ja/generated_resources.xml" lang="ja" type="android" context="android_java" />
+      <output filename="java/res/values-ko/generated_resources.xml" lang="ko" type="android" context="android_java" />
+      <output filename="java/res/values-lt/generated_resources.xml" lang="lt" type="android" context="android_java" />
+      <output filename="java/res/values-lv/generated_resources.xml" lang="lv" type="android" context="android_java" />
+      <output filename="java/res/values-nl/generated_resources.xml" lang="nl" type="android" context="android_java" />
+      <output filename="java/res/values-nb/generated_resources.xml" lang="no" type="android" context="android_java" />
+      <output filename="java/res/values-pl/generated_resources.xml" lang="pl" type="android" context="android_java" />
+      <output filename="java/res/values-pt-rBR/generated_resources.xml" lang="pt-BR" type="android" context="android_java" />
+      <output filename="java/res/values-pt-rPT/generated_resources.xml" lang="pt-PT" type="android" context="android_java" />
+      <output filename="java/res/values-ro/generated_resources.xml" lang="ro" type="android" context="android_java" />
+      <output filename="java/res/values-ru/generated_resources.xml" lang="ru" type="android" context="android_java" />
+      <output filename="java/res/values-sk/generated_resources.xml" lang="sk" type="android" context="android_java" />
+      <output filename="java/res/values-sl/generated_resources.xml" lang="sl" type="android" context="android_java" />
+      <output filename="java/res/values-sr/generated_resources.xml" lang="sr" type="android" context="android_java" />
+      <output filename="java/res/values-sv/generated_resources.xml" lang="sv" type="android" context="android_java" />
+      <output filename="java/res/values-sw/generated_resources.xml" lang="sw" type="android" context="android_java" />
+      <output filename="java/res/values-th/generated_resources.xml" lang="th" type="android" context="android_java" />
+      <output filename="java/res/values-tr/generated_resources.xml" lang="tr" type="android" context="android_java" />
+      <output filename="java/res/values-uk/generated_resources.xml" lang="uk" type="android" context="android_java" />
+      <output filename="java/res/values-vi/generated_resources.xml" lang="vi" type="android" context="android_java" />
+      <output filename="java/res/values-zh-rCN/generated_resources.xml" lang="zh-CN" type="android" context="android_java" />
+      <output filename="java/res/values-zh-rTW/generated_resources.xml" lang="zh-TW" type="android" context="android_java" />
+    </if>
+  </outputs>
+  <translations>
+    <file path="resources/generated_resources_am.xtb" lang="am" />
+    <file path="resources/generated_resources_ar.xtb" lang="ar" />
+    <if expr="use_third_party_translations">
+      <file path="../../third_party/launchpad_translations/generated_resources_ast.xtb" lang="ast" />
+    </if>
+    <file path="resources/generated_resources_bg.xtb" lang="bg" />
+    <file path="resources/generated_resources_bn.xtb" lang="bn" />
+    <if expr="use_third_party_translations">
+      <file path="../../third_party/launchpad_translations/generated_resources_bs.xtb" lang="bs" />
+    </if>
+    <file path="resources/generated_resources_ca.xtb" lang="ca" />
+    <if expr="use_third_party_translations">
+      <file path="../../third_party/launchpad_translations/generated_resources_ca-valencia.xtb" lang="ca@valencia" />
+    </if>
+    <file path="resources/generated_resources_cs.xtb" lang="cs" />
+    <file path="resources/generated_resources_da.xtb" lang="da" />
+    <file path="resources/generated_resources_de.xtb" lang="de" />
+    <file path="resources/generated_resources_el.xtb" lang="el" />
+    <if expr="use_third_party_translations">
+      <file path="../../third_party/launchpad_translations/generated_resources_en-AU.xtb" lang="en-AU" />
+    </if>
+    <file path="resources/generated_resources_en-GB.xtb" lang="en-GB" />
+    <if expr="use_third_party_translations">
+      <file path="../../third_party/launchpad_translations/generated_resources_eo.xtb" lang="eo" />
+    </if>
+    <file path="resources/generated_resources_es.xtb" lang="es" />
+    <file path="resources/generated_resources_es-419.xtb" lang="es-419" />
+    <file path="resources/generated_resources_et.xtb" lang="et" />
+    <if expr="use_third_party_translations">
+      <file path="../../third_party/launchpad_translations/generated_resources_eu.xtb" lang="eu" />
+    </if>
+    <file path="resources/generated_resources_fa.xtb" lang="fa" />
+    <file path="resources/generated_resources_fi.xtb" lang="fi" />
+    <file path="resources/generated_resources_fil.xtb" lang="fil" />
+    <file path="resources/generated_resources_fr.xtb" lang="fr" />
+    <if expr="use_third_party_translations">
+      <file path="../../third_party/launchpad_translations/generated_resources_gl.xtb" lang="gl" />
+    </if>
+    <file path="resources/generated_resources_gu.xtb" lang="gu" />
+    <file path="resources/generated_resources_hi.xtb" lang="hi" />
+    <file path="resources/generated_resources_hr.xtb" lang="hr" />
+    <file path="resources/generated_resources_hu.xtb" lang="hu" />
+    <if expr="use_third_party_translations">
+      <file path="../../third_party/launchpad_translations/generated_resources_hy.xtb" lang="hy" />
+      <file path="../../third_party/launchpad_translations/generated_resources_ia.xtb" lang="ia" />
+    </if>
+    <file path="resources/generated_resources_id.xtb" lang="id" />
+    <file path="resources/generated_resources_it.xtb" lang="it" />
+    <!-- The translation console uses 'iw' for Hebrew, but we use 'he'. -->
+    <file path="resources/generated_resources_iw.xtb" lang="he" />
+    <file path="resources/generated_resources_ja.xtb" lang="ja" />
+    <if expr="use_third_party_translations">
+      <file path="../../third_party/launchpad_translations/generated_resources_ka.xtb" lang="ka" />
+    </if>
+    <file path="resources/generated_resources_kn.xtb" lang="kn" />
+    <file path="resources/generated_resources_ko.xtb" lang="ko" />
+    <if expr="use_third_party_translations">
+      <file path="../../third_party/launchpad_translations/generated_resources_ku.xtb" lang="ku" />
+      <file path="../../third_party/launchpad_translations/generated_resources_kw.xtb" lang="kw" />
+    </if>
+    <file path="resources/generated_resources_lt.xtb" lang="lt" />
+    <file path="resources/generated_resources_lv.xtb" lang="lv" />
+    <file path="resources/generated_resources_ml.xtb" lang="ml" />
+    <file path="resources/generated_resources_mr.xtb" lang="mr" />
+    <file path="resources/generated_resources_ms.xtb" lang="ms" />
+    <file path="resources/generated_resources_nl.xtb" lang="nl" />
+    <file path="resources/generated_resources_no.xtb" lang="no" />
+    <file path="resources/generated_resources_pl.xtb" lang="pl" />
+    <file path="resources/generated_resources_pt-BR.xtb" lang="pt-BR" />
+    <file path="resources/generated_resources_pt-PT.xtb" lang="pt-PT" />
+    <file path="resources/generated_resources_ro.xtb" lang="ro" />
+    <file path="resources/generated_resources_ru.xtb" lang="ru" />
+    <file path="resources/generated_resources_sk.xtb" lang="sk" />
+    <file path="resources/generated_resources_sl.xtb" lang="sl" />
+    <file path="resources/generated_resources_sr.xtb" lang="sr" />
+    <file path="resources/generated_resources_sv.xtb" lang="sv" />
+    <file path="resources/generated_resources_sw.xtb" lang="sw" />
+    <file path="resources/generated_resources_ta.xtb" lang="ta" />
+    <file path="resources/generated_resources_te.xtb" lang="te" />
+    <file path="resources/generated_resources_th.xtb" lang="th" />
+    <file path="resources/generated_resources_tr.xtb" lang="tr" />
+    <if expr="use_third_party_translations">
+      <file path="../../third_party/launchpad_translations/generated_resources_ug.xtb" lang="ug" />
+    </if>
+    <file path="resources/generated_resources_uk.xtb" lang="uk" />
+    <file path="resources/generated_resources_vi.xtb" lang="vi" />
+    <file path="resources/generated_resources_zh-CN.xtb" lang="zh-CN" />
+    <file path="resources/generated_resources_zh-TW.xtb" lang="zh-TW" />
+  </translations>
+  <release seq="1" allow_pseudo="false">
+    <messages fallback_to_english="true">
+      <!-- Bookmarks specific strings -->
+      <part file="bookmarks_strings.grdp" />
+
+      <!-- ChromeOS-specific strings -->
+      <if expr="chromeos">
+        <part file="chromeos_strings.grdp" />
+      </if>
+
+      <!-- TODO add all of your "string table" messages here.  Remember to
+      change nontranslateable parts of the messages into placeholders (using the
+      <ph> element).  You can also use the 'grit add' tool to help you identify
+      nontranslateable parts and create placeholders for them. -->
+      <if expr="is_win">
+        <message name="IDS_BACKGROUND_APP_INSTALLED_BALLOON_TITLE" desc="The title of the balloon that is displayed when a background app is installed">
+          New background app added
+        </message>
+        <message name="IDS_BACKGROUND_APP_INSTALLED_BALLOON_BODY" desc="The contents of the balloon that is displayed when a background app is installed">
+          <ph name="APP_NAME">$1<ex>Background App</ex></ph> will launch at system startup and continue to run in the background even once you've closed all other <ph name="PRODUCT_NAME">$2<ex>Google Chrome</ex></ph> windows.
+        </message>
+      </if>
+      <message name="IDS_BACKGROUND_CRASHED_APP_BALLOON_MESSAGE" desc="The contents of the balloon that is displayed when a background app crashes">
+        <ph name="APP_NAME">$1<ex>Background App</ex></ph> has crashed. Click this balloon to restart the app.
+      </message>
+      <message name="IDS_BACKGROUND_CRASHED_EXTENSION_BALLOON_MESSAGE" desc="The contents of the balloon that is displayed when an extension crashes">
+        <ph name="APP_NAME">$1<ex>Extension</ex></ph> has crashed. Click this balloon to reload the extension.
+      </message>
+      <if expr="use_titlecase">
+        <message name="IDS_BACKGROUND_APP_NOT_INSTALLED" desc="In Title Case: Label displayed in the status icon context menu when a profile does not have any background apps running.">
+          No Background Apps Running
+        </message>
+      </if>
+      <if expr="not use_titlecase">
+        <message name="IDS_BACKGROUND_APP_NOT_INSTALLED" desc="Label displayed in the status icon context menu when a profile does not have any background apps running.">
+          No background apps running
+        </message>
+      </if>
+
+      <!-- Website Settings UI -->
+      <message name="IDS_WEBSITE_SETTINGS_INFOBAR_TEXT" desc="The string shown in the infobar after the user has changed site permissions settings, reminding them to reload the page in order for the new settings to take effect.">
+        New site permissions settings will take effect after reloading the page.
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_INFOBAR_BUTTON" desc="The string used in the infobar button allowing the user to reload the page directly from the infobar.">
+        Reload
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ALLOWED_BY_POLICY" desc="The Website Settings popup contains several buttons for opening dropdown menus and changing site permissions. This is the text of such a button if the permission controlled by the button is set to allow and managed by policy.">
+        Allowed by policy
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_BUTTON_TEXT_BLOCKED_BY_POLICY" desc="The Website Settings popup contains several buttons for opening dropdown menus and changing site permissions. This is the text of such a button if the permission controlled by the button is set to block and managed by policy.">
+        Blocked by policy
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ALLOWED_BY_EXTENSION" desc="The Website Settings popup contains several buttons for opening dropdown menus and changing site permissions. This is the text of such a button if the permission controlled by the button is set to allow and managed by an extension.">
+        Allowed by extension
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_BUTTON_TEXT_BLOCKED_BY_EXTENSION" desc="The Website Settings popup contains several buttons for opening dropdown menus and changing site permissions. This is the text of such a button if the permission controlled by the button is set to block and managed by an extension.">
+        Blocked by extension
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ALLOWED_BY_USER" desc="The Website Settings popup contains several buttons for opening dropdown menus and changing site permissions. This is the text of such a button if the permission controlled by the button was explicitly set to allow by the user.">
+        Allowed by you
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_BUTTON_TEXT_BLOCKED_BY_USER" desc="The Website Settings popup contains several buttons for opening dropdown menus and changing site permissions. This is the text of such a button if the permission controlled by the button was explicitly set to block by the user.">
+        Blocked by you
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ALLOWED_BY_DEFAULT" desc="The Website Settings popup contains several buttons for opening dropdown menus and changing site permissions. This is the text of such a button if the permission controlled by the button is set to the default setting and the default settings is allow.">
+        Allowed by default
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_BUTTON_TEXT_BLOCKED_BY_DEFAULT" desc="The Website Settings popup contains several buttons for opening dropdown menus and changing site permissions. This is the text of such a button if the permission controlled by the button is set to the default setting and the default settings is block.">
+        Blocked by default
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ASK_BY_DEFAULT" desc="The Website Settings popup contains several buttons for opening dropdown menus and changing site permissions. This is the text of such a button if the permission controlled by the button is set to the default setting and the default settings is ask.">
+        Ask by default
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_TITLE_SITE_PERMISSIONS" desc="Title of the permissions section of the website settings popup.">
+        Permissions
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_TITLE_SITE_DATA" desc="Title of the site data section of the website settings popup.">
+        Cookies and site data
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_PERMISSION_ALLOW" desc="The label used in the permissions dropdowns for the option that grants a permissions.">
+        allow
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_PERMISSION_BLOCK" desc="The label used in the permissions dropdowns for the option that denies a permissions. ">
+        block
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_PERMISSION_ASK" desc="The label used in the permissions dropdowns for the option that makes the browser asks for permission. ">
+        ask
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_TYPE_BATTERY" desc="The label used for the battery consumption type in the Manage Sites settings.">
+        Battery
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_TYPE_IMAGES" desc="The label used for images permission controls in the Website Settings popup.">
+        Images
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_TYPE_JAVASCRIPT" desc="The label used for JavaScript permission controls in the Website Settings popup.">
+        JavaScript
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_TYPE_POPUPS" desc="The label used for popups permission controls in the Website Settings popup.">
+        Popups
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_TYPE_PLUGINS" desc="The label used for plugin permissions in the Website Settings popup.">
+        Plugins
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_TYPE_LOCATION" desc="The label used for location permission controls in the Website Settings popup.">
+        Location
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_TYPE_NOTIFICATIONS" desc="The label used for notifications permission controls in the Website Settings popup.">
+        Notifications
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_TYPE_FULLSCREEN" desc="The label used for fullscreen permission controls in the Website Settings popup.">
+        Fullscreen
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_TYPE_MOUSELOCK" desc="The label used for mouse lock permission controls in the Website Settings popup.">
+        Mouse Lock
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_TYPE_MEDIASTREAM" desc="The label used for media stream permission controls in the Website Settings popup.">
+        Media
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_TYPE_MIDI_SYSEX" desc="The label used for MIDI system exclusive message permission controls in the Website Settings popup.">
+        MIDI full control
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_TYPE_STORAGE" desc="The label used for the local storage type in the Manage Sites settings.">
+        Storage
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_SHOW_SITE_DATA" desc="The label of the Show Cookies and Site Data link in the site data section of the Website Settings popup.">
+        Show cookies and site data
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_TAB_LABEL_CONNECTION" desc="The label of the connection tab of the Website Settings popup.">
+        Connection
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_TAB_LABEL_PERMISSIONS" desc="The label of the permissions tab of the Website Settings popup.">
+        Permissions
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_IDENTITY_VERIFIED" desc="Text that is displayed in the header of the Website Settings popup if the identity of a website is verified.">
+        Identity verified
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_IDENTITY_NOT_VERIFIED" desc="Text that is displayed in the header of the Website Settings popup if the identity of a website is not verified.">
+        Identity not verified
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_THIRD_PARTY_SITE_DATA" desc="The label of the counts for allowed and blocked third party cookies and site data.">
+        Others
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_SITE_DATA_STATS_LINE" desc="The label text with the number of allowed and blocked cookies and site data objects.">
+        <ph name="DATA_SOURCE">$1<ex>foo.bar.org</ex></ph> (<ph name="ALLOWED_COUNT">$2<ex>6</ex></ph> allowed / <ph name="BLOCKED_COUNT">$3<ex>0</ex></ph> blocked)
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_MENU_ITEM_DEFAULT_ALLOW" desc="The text of the menu item of a permissions menu on the Website Settings UI that resets the setting to the default setting which is allow.">
+        Use global default (Allow)
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_MENU_ITEM_DEFAULT_BLOCK" desc="The text of the menu item of a permissions menu on the Website Settings UI that resets the setting to the default setting which is block.">
+        Use global default (Block)
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_MENU_ITEM_DEFAULT_ASK" desc="The text of the menu item of a permissions menu on the Website Settings UI that reset the setting to the default setting which is ask.">
+        Use global default (Ask)
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_MENU_ITEM_ALLOW" desc="The text of the menu item of a permissions menu on the Website Settings UI that sets the setting to allow.">
+        Always allow on this site
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_MENU_ITEM_BLOCK" desc="The text of the menu item of a permissions menu on the Website Settings UI that sets the setting to allow.">
+        Always block on this site
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_PERMISSION_TYPE" desc="The label that is used to display permission types in the Website Settings popup. ">
+        <ph name="PERMISSION_TYPE_LABEL">$1<ex>Plugins</ex></ph>:
+      </message>
+
+      <message name="IDS_PERMISSIONS_BUBBLE_PROMPT" desc="The label that is used to introduce permission request details to the user in a papup.">
+        <ph name="SITE_NAME">$1<ex>google.com</ex></ph> would like to use your:
+      </message>
+      <message name="IDS_PERMISSION_ALLOW" desc="Label on button to allow a permissions request.">
+        Allow
+      </message>
+      <message name="IDS_PERMISSION_DENY" desc="Label on button to deny a permissions request.">
+        Block
+      </message>
+      <message name="IDS_PERMISSION_CUSTOMIZE" desc="Label on text button to allow the user to customize a permissions request.">
+        Customize
+      </message>
+
+      <message name="IDS_SHOWFULLHISTORY_LINK" desc="The label of the Show Full History link at the bottom of the back/forward menu.">
+        Show Full History
+      </message>
+
+      <message name="IDS_ALTERNATE_NAV_URL_VIEW_LABEL" desc="Label displayed in an infobar when a user searches for a term he may have meant to navigate to.">
+        Did you mean to go to <ph name="SITE">$1<ex>http://intranetsite/</ex></ph>?
+      </message>
+
+      <message name="IDS_HISTORY_TITLE" desc="Title for the history tab.">
+        History
+      </message>
+      <message name="IDS_DOWNLOAD_TITLE" desc="Title for the downloads tab.">
+        Downloads
+      </message>
+      <message name="IDS_DEFAULT_TAB_TITLE" desc="The default title in a tab.">
+        Untitled
+      </message>
+      <message name="IDS_TAB_LOADING_TITLE" desc="The text to be displayed in the title of a tab before a title is discovered.">
+        Loading...
+      </message>
+
+      <message name="IDS_HISTORY_REMOVE_SELECTED_ITEMS" desc="Title of the button that allows the user to remove the selected history items">
+        Remove selected items
+      </message>
+      <message name="IDS_HISTORY_FILTER_ALLOW_ITEMS" desc="Title of the button that allows the user to allow the selected history items">
+        Allow items
+      </message>
+      <message name="IDS_HISTORY_FILTER_BLOCK_ITEMS" desc="Title of the button that allows the user to block the selected history items">
+        Block items
+      </message>
+      <message name="IDS_HISTORY_OPEN_CLEAR_BROWSING_DATA_DIALOG" desc="Title of the button that will open the clear browsing data dialog.">
+        Clear browsing data...
+      </message>
+      <message name="IDS_HISTORY_DELETE_PRIOR_VISITS_CONFIRM_BUTTON" desc="Text for the button used to confirm the dialog asking if they would like to proceed with deletion.">
+        Remove
+      </message>
+      <message name="IDS_HISTORY_DELETE_PRIOR_VISITS_WARNING" desc="Warning shown before deleting">
+        Are you sure you want to delete these pages from your history?
+
+Psst! Incognito mode <ph name="SHORTCUT_KEY">$1<ex>(Ctrl+Shift+N)</ex></ph> may come in handy next time.
+      </message>
+
+      <!-- History HTML UI -->
+      <message name="IDS_HISTORY_LOADING" desc="Text shown when we're loading the user's history">
+        Loading...
+      </message>
+      <message name="IDS_HISTORY_DATE_WITH_RELATIVE_TIME" desc="In the history view, some dates are formatted as 'Today - Wednesday, Nov 7, 2007">
+        <ph name="RELATIVE_DATE">$1<ex>Today</ex></ph> - <ph name="FULL_DATE">$2<ex>Wednesday, Nov 7, 2007</ex></ph>
+      </message>
+      <message name="IDS_HISTORY_INTERVAL" desc="A history interval shown in the title. The dates are already localized strings.">
+        <ph name="START_DATE">$1<ex>Wednesday, Aug. 1, 2012</ex></ph> to <ph name="END_DATE">$2<ex>Thursday, Aug. 30, 2012</ex></ph>
+      </message>
+      <message name="IDS_HISTORY_NO_SEARCH_RESULTS" desc="Text shown when no history search results have been found">
+        No search results found.
+      </message>
+      <message name="IDS_HISTORY_NO_RESULTS" desc="Text shown when no history entries are found.">
+        No history entries found.
+      </message>
+      <message name="IDS_HISTORY_SEARCH_BUTTON" desc="Title of the button in the history page that triggers a search">
+        Search history
+      </message>
+      <message name="IDS_HISTORY_NEWEST" desc="HTML text shown as page navigation tool to take the user to the top of their history">
+        Newest
+      </message>
+      <message name="IDS_HISTORY_NEWER" desc="HTML text shown as page navigation tool to take the user back to the more recent page">
+        Newer
+      </message>
+      <message name="IDS_HISTORY_OLDER" desc="HTML text shown as page navigation tool to take the user forward to their older history">
+        Older
+      </message>
+      <message name="IDS_HISTORY_SEARCHRESULTSFOR" desc="Format string for search results">
+        Search results for '<ph name="SEARCH_STRING">$1</ph>'
+      </message>
+      <message name="IDS_HISTORY_BROWSERESULTS" desc="Title of browsing results page">
+        History
+      </message>
+      <message name="IDS_HISTORY_CONTINUED" desc="Shown after the date if the data is continued from the previous page">
+        (Cont.)
+      </message>
+      <message name="IDS_HISTORY_REMOVE_BOOKMARK" desc="Tooltip shown when hovered over a history entry's bookmark star. When clicked, removes the bookmark.">
+        Remove bookmark
+      </message>
+      <message name="IDS_HISTORY_ACTION_MENU_DESCRIPTION" desc="Text used to identify the history entry drop-down menu for screen readers">
+        Actions
+      </message>
+      <message name="IDS_HISTORY_REMOVE_PAGE" desc="Command in the history entry drop-down menu. Removes a page from the history.">
+        Remove from history
+      </message>
+      <message name="IDS_HISTORY_MORE_FROM_SITE" desc="Command in the history entry drop-down menu. Shows more history entries from the same site.">
+        More from this site
+      </message>
+      <message name="IDS_GROUP_BY_DOMAIN_LABEL" desc="Label for the checkbox that toggles the mode to group history visits by domain.">
+        Group domains
+      </message>
+      <message name="IDS_HISTORY_RANGE_LABEL" desc="Label for the combo box that selects the time range.">
+        Show
+      </message>
+      <message name="IDS_HISTORY_RANGE_ALL_TIME" desc="Option in the history range button group. Shows results a page at a time, without grouping them by domain.">
+        All
+      </message>
+      <message name="IDS_HISTORY_RANGE_WEEK" desc="Option in the history range button group. Shows results grouped by week.">
+        Week
+      </message>
+      <message name="IDS_HISTORY_RANGE_MONTH" desc="Option in the history range button group. Shows results grouped by month.">
+        Month
+      </message>
+      <message name="IDS_HISTORY_RANGE_TODAY" desc="The text on the button that sets the current time range back to today.">
+        Today
+      </message>
+      <message name="IDS_HISTORY_RANGE_NEXT" desc="The alt text on the button that moves the current time range forward.">
+        Next
+      </message>
+      <message name="IDS_HISTORY_RANGE_PREVIOUS" desc="The alt text on the button that moves the current time range backwards.">
+        Previous
+      </message>
+      <message name="IDS_HISTORY_NUMBER_VISITS" desc="Format string for the number of visits of a site.">
+        (<ph name="NUMBER_VISITS">$1<ex>3</ex></ph>)
+      </message>
+      <message name="IDS_HISTORY_FILTER_ALLOWED" desc="Text that shows that an entry is allowed.">
+        Allowed
+      </message>
+      <message name="IDS_HISTORY_FILTER_BLOCKED" desc="Text that shows that an entry is blocked.">
+        Blocked
+      </message>
+      <message name="IDS_HISTORY_IN_CONTENT_PACK" desc="Text that shows that an entry is in a content pack.">
+        In content pack
+      </message>
+      <message name="IDS_HISTORY_UNLOCK_BUTTON" desc="The text on the button that is used by a supervised user to unlock the controls.">
+        Unlock
+      </message>
+      <message name="IDS_HISTORY_LOCK_BUTTON" desc="The text on the button that is used by a supervised user to lock the controls.">
+        Lock
+      </message>
+      <message name="IDS_HISTORY_BLOCKED_VISIT_TEXT" desc="Text that describes an attempted visit.">
+        Blocked attempt <ph name="BEGIN_LINK">&lt;a target="_top" href="$1" id="$2"&gt;</ph> to visit a page on <ph name="DOMAIN">$3<ex>google.com</ex></ph><ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>.
+      </message>
+      <message name="IDS_HISTORY_HAS_SYNCED_RESULTS" desc="The notification at the top of the history page indicating that it is showing visits synced from other devices.">
+        Showing history from your signed-in devices. <ph name="BEGIN_LINK">&lt;a href="https://support.google.com/chrome/answer/2987777?hl=[GRITLANGCODE]"&gt;</ph>Learn more<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>
+      </message>
+      <message name="IDS_HISTORY_NO_SYNCED_RESULTS" desc="The notification at the top of the history page indicating that it does not include visits from other devices.">
+        Showing history from this device. <ph name="BEGIN_LINK">&lt;a href="https://support.google.com/chrome/answer/2987777?hl=[GRITLANGCODE]"&gt;</ph>Learn more<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>
+      </message>
+      <message name="IDS_HISTORY_UNKNOWN_DEVICE" desc="On the dropdown menu for a history entry, the text that is shown instead of a device name, when the device name is not known.">
+        Unknown device
+      </message>
+
+      <!-- Generic terms -->
+      <message name="IDS_OK" desc="Used for OK on buttons">
+        OK
+      </message>
+      <message name="IDS_CANCEL" desc="Used for Cancel on buttons" formatter_data="android_java">
+        Cancel
+      </message>
+      <message name="IDS_ADD" desc="Used for Add on buttons">
+        Add
+      </message>
+      <message name="IDS_UNDO_DELETE" desc="Description for a command to undo a delete command.">
+        Undo Delete
+      </message>
+      <message name="IDS_EDIT" desc="Edit menu item">
+        &amp;Edit
+      </message>
+      <message name="IDS_CLOSE" desc="A generic term for Close on buttons and menus.">
+        Close
+      </message>
+      <message name="IDS_DONE" desc="A generic term for Done on buttons and menus.">
+        Done
+      </message>
+      <if expr="is_macosx">
+        <message name="IDS_ACCNAME_TAB" desc="A generic description of a tab button's role">
+          Tab
+        </message>
+      </if>
+      <message name="IDS_SAVE" desc="Used on a button to save information you are editing.">
+        Save
+      </message>
+      <message name="IDS_DISABLE" desc="Used for Disable on buttons">
+        Disable
+      </message>
+      <message name="IDS_CONTENT_CONTEXT_WRITING_DIRECTION_MENU" desc="The name of the Writing Direction submenu in the content area context menu.  To translate, launch /Applications/TextEdit.app in an appropriately localized version of OS X, right-click on the text entry area and use the translation from there.">
+        Writing Direction
+      </message>
+      <message name="IDS_CONTENT_CONTEXT_WRITING_DIRECTION_DEFAULT" desc="The name of the 'default' item from the Writing Direction submenu in the content area context menu.  To translate, launch /Applications/TextEdit.app in an appropriately localized version of OS X, right-click on the text entry area and use the translation from there.">
+        Default
+      </message>
+      <message name="IDS_CONTENT_CONTEXT_WRITING_DIRECTION_LTR" desc="The name of the 'Left to Right' item from the Writing Direction submenu in the content area context menu.  To translate, launch /Applications/TextEdit.app in an appropriately localized version of OS X, right-click on the text entry area and use the translation from there.">
+        Left to Right
+      </message>
+      <message name="IDS_CONTENT_CONTEXT_WRITING_DIRECTION_RTL" desc="The name of the 'Right to Left' item from the Writing Direction submenu in the content area context menu.  To translate, launch /Applications/TextEdit.app in an appropriately localized version of OS X, right-click on the text entry area and use the translation from there.">
+        Right to Left
+      </message>
+
+      <!-- content area context menus. Android does not use it -->
+      <if expr="not is_android">
+        <if expr="is_macosx">
+            <message name="IDS_CONTENT_CONTEXT_LOOK_UP_IN_DICTIONARY" desc="The name of the 'Look Up in Dictionary' item in the content area context menu.  To translate, launch /Applications/TextEdit.app in an appropriately localized version of OS X, right-click on the text entry area and use the translation from there.">
+              Look Up in Dictionary
+            </message>
+        </if>
+        <if expr="not use_titlecase">
+          <message name="IDS_CONTENT_CONTEXT_BACK" desc="The name of the Back command in the content area context menu">
+            &amp;Back
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_FORWARD" desc="The name of the Forward command in the content area context menu">
+            &amp;Forward
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SAVEPAGEAS" desc="The name of the Save Page As command in the content area context menu">
+            Save &amp;as...
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_PRINT" desc="The name of the Print... command in the content area context menu. Brings a dialog to select the print options">
+            P&amp;rint...
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_VIEWPAGESOURCE" desc="The name of the View Page Source command in the content area context menu">
+            &amp;View page source
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_OPENLINKWITH" desc="The name of the Open Link With... command in the content area context menu">
+            Open link with...
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_OPENLINKWITH_CONFIGURE" desc="In Title Case: The name of the command to configure what handlers are available for the Open Link With... command">
+            Configure...
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_VIEWPAGEINFO" desc="The name of the View Page Info command in the content area context menu">
+            View page &amp;info
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_INSPECTELEMENT" desc="The name of the Inspect Element command in the content area context menu">
+            I&amp;nspect element
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE" desc="The name of the Inspect Background Page command in the packaged app content area context menu">
+            Inspect &amp;background page
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_RELOAD" desc="The name of the Reload command in the content area context menu">
+            Re&amp;load
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_RESTART_APP" desc="The name of the Restart Packaged App command in the packaged app context menu.">
+            Simulate browser restart
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_RELOAD_PACKAGED_APP" desc="The name of the Reload Packaged App command in the packaged app content area context menu">
+            Re&amp;load app
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_TRANSLATE" desc="The name of the Translate command in the content area context menu">
+            &amp;Translate to <ph name="LANGUAGE">$1<ex>English</ex></ph>
+          </message>
+
+          <message name="IDS_CONTENT_CONTEXT_RELOADFRAME" desc="The name of the Reload Frame command in the content area context menu">
+            Reload frame
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SAVEFRAMEAS" desc="The name of the Save Frame As command in the content area context menu">
+            Save &amp;frame as...
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_PRINTFRAME" desc="The name of the Print Frame command in the content area context menu">
+            P&amp;rint frame...
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_VIEWFRAMESOURCE" desc="The name of the View Frame Source command in the content area context menu">
+            &amp;View frame source
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_VIEWFRAMEINFO" desc="The name of the View Frame Info command in the content area context menu">
+            View frame &amp;info
+          </message>
+
+          <message name="IDS_CONTENT_CONTEXT_OPENLINKNEWTAB" desc="The name of the Open Link in New Tab command in the content area context menu">
+            Open link in new &amp;tab
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_OPENLINKNEWWINDOW" desc="The name of the Open Link in New Window command in the content area context menu">
+            Open link in new &amp;window
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_OPENLINKOFFTHERECORD" desc="The name of the open a link in incognito window command">
+            Open link in inco&amp;gnito window
+          </message>
+
+          <message name="IDS_CONTENT_CONTEXT_SAVELINKAS" desc="The name of the Save Link As command in the content area context menu">
+            Save lin&amp;k as...
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_COPYLINKLOCATION" desc="The name of the Copy Link Location command in the content area context menu">
+            Copy link addr&amp;ess
+          </message>
+
+          <message name="IDS_CONTENT_CONTEXT_COPYEMAILADDRESS" desc="The name of the Copy Email Address command in the content area context menu">
+            Copy &amp;email address
+          </message>
+
+          <message name="IDS_CONTENT_CONTEXT_SAVEIMAGEAS" desc="The name of the Save Image As command in the content area context menu">
+            Sa&amp;ve image as...
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_COPYIMAGELOCATION" desc="The name of the Copy Image Location command in the content area context menu">
+            C&amp;opy image URL
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_COPYIMAGE" desc="The name of the Copy Image command in the content area context menu">
+            Cop&amp;y image
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_OPENIMAGENEWTAB" desc="The name of the Open Image in New Tab command in the content area context menu">
+            Open &amp;image in new tab
+          </message>
+
+          <message name="IDS_CONTENT_CONTEXT_LOOP" desc="The name of the Loop command for audio and video playback in the content area context menu">
+            &amp;Loop
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_PLAY" desc="The name of the Play command for audio and video playback in the content area context menu">
+            &amp;Play
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_PAUSE" desc="The name of the Pause command for audio and video playback in the content area context menu">
+            &amp;Pause
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_MUTE" desc="The name of the Mute command for audio and video playback in the content area context menu">
+            &amp;Mute
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_UNMUTE" desc="The name of the Unmute command for audio and video playback in the content area context menu">
+            Un&amp;mute
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_CONTROLS" desc="The name of the Show Controls command for audio and video playback in the content area context menu">
+            Show &amp;controls
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_ROTATECW" desc="The name of the Rotate clockwise command for plugins in the content area context menu">
+            Rotate &amp;clockwise
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_ROTATECCW" desc="The name of the Rotate counterclockwise command for plugins in the content area context menu">
+            Rotate c&amp;ounterclockwise
+          </message>
+
+          <message name="IDS_CONTENT_CONTEXT_SAVEVIDEOAS" desc="The name of the Save Video As command in the content area context menu">
+            Sa&amp;ve video as...
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_COPYVIDEOLOCATION" desc="The name of the Copy Video Location command in the content area context menu">
+            C&amp;opy video URL
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_OPENVIDEONEWTAB" desc="The name of the Open Video in New Tab command in the content area context menu">
+            &amp;Open video in new tab
+          </message>
+
+          <message name="IDS_CONTENT_CONTEXT_SAVEAUDIOAS" desc="The name of the Save Audio As command in the content area context menu">
+            Sa&amp;ve audio as...
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_COPYAUDIOLOCATION" desc="The name of the Copy Audio Location command in the content area context menu">
+            C&amp;opy audio URL
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_OPENAUDIONEWTAB" desc="The name of the Open Audio in New Tab command in the content area context menu">
+            &amp;Open audio in new tab
+          </message>
+
+          <message name="IDS_CONTENT_CONTEXT_UNDO" desc="The name of the Undo command in the content area context menu">
+            &amp;Undo
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_REDO" desc="The name of the Redo command in the content area context menu">
+            &amp;Redo
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_CUT" desc="The name of the Cut command in the content area context menu">
+            Cu&amp;t
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_COPY" desc="The name of the Copy command in the content area context menu">
+            &amp;Copy
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_PASTE" desc="The name of the Paste command in the content area context menu" meaning="'Paste' menu command in sentence case">
+            &amp;Paste
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE" desc="The name of the 'Paste as plain text' command in the content area context menu">
+            Paste as plain text
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_DELETE" desc="The name of the Delete command in the content area context menu">
+            &amp;Delete
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_ADD_TO_DICTIONARY" desc="The name of the Add to dictionary command in the content area context menu">
+            &amp;Add to dictionary
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_NO_SPELLING_SUGGESTIONS" desc="The name of the No Spelling Suggestions display in the content area context menu">
+            &amp;No spelling suggestions
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SPELLING_ASK_GOOGLE" desc="The context-menu item that asks whether to integrate the spelling service of Google to Chrome. This text is also used as the title of a bubble which confirms it.">
+            Ask Google for suggestions
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SPELLING_BUBBLE_ENABLE" desc="The button text that allows integrating the spelling service of Google.">
+            Enable
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SPELLING_BUBBLE_DISABLE" desc="The button text that disallows integrating the spelling service of Google.">
+            No thanks
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SPELLING_CHECKING" desc="The place-holder message shown while the Spelling service is checking text">
+            Loading suggestion
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SPELLING_NO_SUGGESTIONS_FROM_GOOGLE" desc="The message shown when we cannot get any more suggestions from the Spelling service">
+            No more suggestions from Google
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SPELLING_AUTOCORRECT" desc="The context-menu item that asks whether to use Google to automatically correct spelling in Chrome.">
+            Automatically correct spelling
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SELECTALL" desc="The name of the Select All command in the content area context menu">
+            Select &amp;all
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SEARCHWEBFOR" desc="The name of the Search the Web for 'string' command in the content area context menu">
+            &amp;Search <ph name="SEARCH_ENGINE">$1<ex>Google</ex></ph> for '<ph name="SEARCH_TERMS">$2<ex>flowers</ex></ph>'
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SEARCHWEBFORIMAGE" desc="The name of the Search For Image command in the content area context menu">
+            &amp;Search <ph name="SEARCH_ENGINE">$1<ex>Google</ex></ph> for this image
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_GOTOURL" desc="The name of the Go to 'url' command in the content area context menu">
+            &amp;Go to <ph name="URL">$1<ex>http://www.google.com/</ex></ph>
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_ADDSEARCHENGINE" desc="The name of the Add as Search Engine command in the content area context menu">
+            Add as search en&amp;gine...
+          </message>
+        </if>
+        <if expr="use_titlecase">
+          <message name="IDS_CONTENT_CONTEXT_BACK" desc="In Title Case: The name of the Back command in the content area context menu">
+            &amp;Back
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_FORWARD" desc="In Title Case: The name of the Forward command in the content area context menu">
+            &amp;Forward
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SAVEPAGEAS" desc="In Title Case: The name of the Save Page As command in the content area context menu">
+            Save &amp;As...
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_PRINT" desc="In Title Case: The name of the Print... command in the content area context menu. Brings a dialog to select the print options">
+            P&amp;rint...
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_VIEWPAGESOURCE" desc="In Title Case: The name of the View Page Source command in the content area context menu">
+            &amp;View Page Source
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_OPENLINKWITH" desc="In Title Case: The name of the Open Link With... command in the content area context menu">
+            Open Link With...
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_OPENLINKWITH_CONFIGURE" desc="In Title Case: The name of the command to configure what handlers are available for the Open Link With... command">
+            Configure...
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_VIEWPAGEINFO" desc="In Title Case: The name of the View Page Info command in the content area context menu">
+            View Page &amp;Info
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_INSPECTELEMENT" desc="In Title Case: The name of the Inspect Element command in the content area context menu">
+            I&amp;nspect Element
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_INSPECTBACKGROUNDPAGE" desc="In Title Case: The name of the Inspect Background Page command in the packaged app content area context menu">
+            Inspect &amp;Background Page
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_RELOAD" desc="In Title Case: The name of the Reload command in the content area context menu">
+            Re&amp;load
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_RESTART_APP" desc="In Title Case: The name of the Restart Packaged App command in the packaged app context menu.">
+            Simulate Browser Restart
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_RELOAD_PACKAGED_APP" desc="In Title Case: The name of the Reload Packaged App command in the packaged app content area context menu">
+            Re&amp;load App
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_TRANSLATE" desc="In Title Case: The name of the Translate command in the content area context menu">
+            &amp;Translate to <ph name="LANGUAGE">$1<ex>English</ex></ph>
+          </message>
+
+          <message name="IDS_CONTENT_CONTEXT_RELOADFRAME" desc="In Title Case: The name of the Reload Frame command in the content area context menu">
+            Reload Frame
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SAVEFRAMEAS" desc="In Title Case: The name of the Save Frame As command in the content area context menu">
+            Save &amp;Frame As...
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_PRINTFRAME" desc="In Title Case: The name of the Print Frame command in the content area context menu">
+            P&amp;rint Frame...
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_VIEWFRAMESOURCE" desc="In Title Case: The name of the View Frame Source command in the content area context menu">
+            &amp;View Frame Source
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_VIEWFRAMEINFO" desc="In Title Case: The name of the View Frame Info command in the content area context menu">
+            View Frame &amp;Info
+          </message>
+
+          <message name="IDS_CONTENT_CONTEXT_OPENLINKNEWTAB" desc="In Title Case: The name of the Open Link in New Tab command in the content area context menu">
+            Open Link in New &amp;Tab
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_OPENLINKNEWWINDOW" desc="In Title Case: The name of the Open Link in New Window command in the content area context menu">
+            Open Link in New &amp;Window
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_OPENLINKOFFTHERECORD" desc="In Title Case: The name of the open a link in incognito window command">
+            Open Link in Inco&amp;gnito Window
+          </message>
+
+          <message name="IDS_CONTENT_CONTEXT_SAVELINKAS" desc="In Title Case: The name of the Save Link As command in the content area context menu">
+            Save Lin&amp;k As...
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_COPYLINKLOCATION" desc="In Title Case: The name of the Copy Link Location command in the content area context menu">
+            Copy Link Addr&amp;ess
+          </message>
+
+          <message name="IDS_CONTENT_CONTEXT_COPYEMAILADDRESS" desc="In Title Case: The name of the Copy Email Address command in the content area context menu">
+            Copy &amp;Email Address
+          </message>
+
+          <message name="IDS_CONTENT_CONTEXT_SAVEIMAGEAS" desc="In Title Case: The name of the Save Image As command in the content area context menu">
+            Sa&amp;ve Image As...
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_COPYIMAGELOCATION" desc="In Title Case: The name of the Copy Image Location command in the content area context menu">
+            C&amp;opy Image URL
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_COPYIMAGE" desc="In Title Case: The name of the Copy Image command in the content area context menu">
+            Cop&amp;y Image
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_OPENIMAGENEWTAB" desc="In Title Case: The name of the Open Image in New Tab command in the content area context menu">
+            Open &amp;Image in New Tab
+          </message>
+
+          <message name="IDS_CONTENT_CONTEXT_LOOP" desc="In Title Case: The name of the Loop command for audio and video playback in the content area context menu">
+            &amp;Loop
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_PLAY" desc="In Title Case: The name of the Play command for audio and video playback in the content area context menu">
+            &amp;Play
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_PAUSE" desc="In Title Case: The name of the Pause command for audio and video playback in the content area context menu">
+            &amp;Pause
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_MUTE" desc="In Title Case: The name of the Mute command for audio and video playback in the content area context menu">
+            &amp;Mute
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_UNMUTE" desc="In Title Case: The name of the Unmute command for audio and video playback in the content area context menu">
+            Un&amp;mute
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_CONTROLS" desc="In Title Case: The name of the Show Controls command for audio and video playback in the content area context menu">
+            Show &amp;Controls
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_ROTATECW" desc="In Title Case: The name of the Rotate Clockwise command for plugins in the content area context menu">
+            Rotate &amp;Clockwise
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_ROTATECCW" desc="In Title Case: The name of the Rotate Counterclockwise command for plugins in the content area context menu">
+            Rotate C&amp;ounterclockwise
+          </message>
+
+          <message name="IDS_CONTENT_CONTEXT_SAVEVIDEOAS" desc="In Title Case: The name of the Save Video As command in the content area context menu">
+           Sa&amp;ve Video As...
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_COPYVIDEOLOCATION" desc="In Title Case: The name of the Copy Video Location command in the content area context menu">
+            C&amp;opy Video URL
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_OPENVIDEONEWTAB" desc="In Title Case: The name of the Open Video in New Tab command in the content area context menu">
+            &amp;Open Video in New Tab
+          </message>
+
+          <message name="IDS_CONTENT_CONTEXT_SAVEAUDIOAS" desc="In Title Case: The name of the Save Audio As command in the content area context menu">
+            Sa&amp;ve Audio As...
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_COPYAUDIOLOCATION" desc="In Title Case: The name of the Copy Audio Location command in the content area context menu">
+            C&amp;opy Audio URL
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_OPENAUDIONEWTAB" desc="In Title Case: The name of the Open Audio in New Tab command in the content area context menu">
+            &amp;Open Audio in New Tab
+          </message>
+
+          <message name="IDS_CONTENT_CONTEXT_UNDO" desc="In Title Case: The name of the Undo command in the content area context menu">
+            &amp;Undo
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_REDO" desc="In Title Case: The name of the Redo command in the content area context menu">
+            &amp;Redo
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_CUT" desc="In Title Case: The name of the Cut command in the content area context menu">
+            Cu&amp;t
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_COPY" desc="In Title Case: The name of the Copy command in the content area context menu">
+            &amp;Copy
+          </message>
+          <!-- Paste and Match Style / Paste as Plain Text -->
+          <if expr="is_macosx">
+            <message name="IDS_CONTENT_CONTEXT_PASTE" desc="Mac/In Title Case: The name of the Paste command in the content area context menu" meaning="'Paste' menu command for Mac">
+              &amp;Paste
+            </message>
+            <message name="IDS_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE" desc="Mac/In Title Case: The name of the 'Paste and Match Style' command in the content area context menu">
+              Paste and Match Style
+            </message>
+          </if>
+          <if expr="not is_macosx">
+            <message name="IDS_CONTENT_CONTEXT_PASTE" desc="In Title Case: The name of the Paste command in the content area context menu" meaning="'Paste' menu command in title case">
+              &amp;Paste
+            </message>
+            <message name="IDS_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE" desc="In Title Case: The name of the 'Paste as plain text' command in the content area context menu">
+              Paste As Plain Text
+            </message>
+          </if>
+          <message name="IDS_CONTENT_CONTEXT_DELETE" desc="In Title Case: The name of the Delete command in the content area context menu">
+            &amp;Delete
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_ADD_TO_DICTIONARY" desc="In Title Case: The name of the Add to dictionary command in the content area context menu">
+            &amp;Add to Dictionary
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_NO_SPELLING_SUGGESTIONS" desc="In Title Case: The name of the No Spelling Suggestions display in the content area context menu">
+            &amp;No Spelling Suggestions
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SPELLING_ASK_GOOGLE" desc="In Title Case: The context-menu item that asks whether to integrate the spelling service of Google to Chrome. This text is also used as the title of a bubble which confirms it.">
+            Ask Google for Suggestions
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SPELLING_BUBBLE_ENABLE" desc="In Title Case: The button text that allows integrating the spelling service of Google.">
+            Enable
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SPELLING_BUBBLE_DISABLE" desc="In Title Case: The button text that disallows integrating the spelling service of Google.">
+            No Thanks
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SPELLING_CHECKING" desc="The place-holder message shown while the Spelling service is checking text">
+            Loading suggestion
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SPELLING_NO_SUGGESTIONS_FROM_GOOGLE" desc="The message shown when we cannot get any more suggestions from the Spelling service">
+            No more suggestions from Google
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SPELLING_AUTOCORRECT" desc="In Title Case: The context-menu item that asks whether to use Google to automatically correct spelling in Chrome.">
+            Automatically Correct Spelling
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SELECTALL" desc="In Title Case: The name of the Select All command in the content area context menu">
+            Select &amp;All
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SEARCHWEBFOR" desc="In Title Case: The name of the Search the Web for 'string' command in the content area context menu">
+            &amp;Search <ph name="SEARCH_ENGINE">$1<ex>Google</ex></ph> for '<ph name="SEARCH_TERMS">$2<ex>flowers</ex></ph>'
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_SEARCHWEBFORIMAGE" desc="In Title Case: The name of the Search For Image command in the content area context menu">
+            &amp;Search <ph name="SEARCH_ENGINE">$1<ex>Google</ex></ph> for this Image
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_GOTOURL" desc="In Title Case: The name of the Go to url for 'string' command in the content area context menu">
+            &amp;Go to <ph name="URL">$1<ex>http://www.google.com/</ex></ph>
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_ADDSEARCHENGINE" desc="In Title Case: The name of the Add as Search Engine command in the content area context menu">
+            Add As Search En&amp;gine...
+          </message>
+        </if>
+
+        <message name="IDS_CONTENT_CONTEXT_SPELLING_BUBBLE_TEXT" desc="The text of a bubble that confirms users allows integrating the spelling service of Google to Chrome.">
+          Google Chrome can provide smarter spell-checking by sending what you type in the browser to Google servers, allowing you to use the same spell-checking technology used by Google search.
+        </message>
+      </if>
+
+      <if expr="not use_titlecase">
+        <message name="IDS_CONTENT_CONTEXT_PLUGIN_RUN" desc="The name of the Run command on the blocked plugin context menu">
+          Run this plug-in
+        </message>
+        <message name="IDS_CONTENT_CONTEXT_PLUGIN_HIDE" desc="The name of the Hide command on the blocked plugin context menu">
+          Hide this plug-in
+        </message>
+      </if>
+      <if expr="use_titlecase">
+        <message name="IDS_CONTENT_CONTEXT_PLUGIN_RUN" desc="In Title Case: The name of the Run command on the blocked plugin context menu">
+          Run This Plug-in
+        </message>
+        <message name="IDS_CONTENT_CONTEXT_PLUGIN_HIDE" desc="In Title Case: The name of the Hide command on the blocked plugin context menu">
+          Hide This Plug-in
+        </message>
+      </if>
+
+      <!-- Ash multi-user warning dialog -->
+      <if expr="use_ash">
+        <message name="IDS_VISIT_DESKTOP_WARNING_TITLE" desc="The title of the dialog which warns user about oddities which can be seen when a window gets moved to another user desktop.">
+          Careful, this feature may bite
+        </message>
+        <message name="IDS_VISIT_DESKTOP_WARNING_MESSAGE" desc="The message on the dialog which warns user about oddities which can be seen when a window gets moved to another user desktop.">
+          Moving windows to another desktop may result in unexpected behaviour.
+        </message>
+        <message name="IDS_VISIT_DESKTOP_WARNING_EXPLANATION" desc="The explanation message on the dialog which warns user about oddities which can be seen when a window gets moved to another user desktop.">
+          Subsequent notifications, windows and dialogs may be split between desktops.
+        </message>
+        <message name="IDS_VISIT_DESKTOP_WARNING_SHOW_DISMISS" desc="Label for checkbox dismissing show of teleportation warning dialog.">
+          Got it, don't show me again.
+        </message>
+      </if>
+
+      <!-- Spelling submenu -->
+      <if expr="is_macosx">
+        <message name="IDS_CONTENT_CONTEXT_SPELLCHECK_MENU" desc="In Title Case: The name of the Spellcheck Options submenu in the spelling context menu">
+          Spelling and Grammar
+        </message>
+        <message name="IDS_CONTENT_CONTEXT_CHECK_SPELLING_WHILE_TYPING" desc="The name of the Check Spelling while Typing field command in the spelling context menu">
+          Check Spelling While Typing
+        </message>
+        <message name="IDS_CONTENT_CONTEXT_SHOW_SPELLING_PANEL" desc="The name of the Show Spelling Panel command in the spelling context menu">
+          Show Spelling and Grammar
+        </message>
+        <message name="IDS_CONTENT_CONTEXT_HIDE_SPELLING_PANEL" desc="The name of the Hide Spelling Panel command in the spelling context menu">
+          Hide Spelling and Grammar
+        </message>
+      </if>
+      <if expr="not is_macosx">
+        <if expr="not use_titlecase">
+          <message name="IDS_CONTENT_CONTEXT_SPELLCHECK_MENU" desc="The name of the Spellcheck Options submenu in the content area context menu">
+            &amp;Spell-checker options
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_LANGUAGE_SETTINGS" desc="The name of the Language Settings command in the content area context menu">
+            &amp;Language settings...
+          </message>
+        </if>
+        <if expr="use_titlecase">
+          <message name="IDS_CONTENT_CONTEXT_SPELLCHECK_MENU" desc="In Title Case: The name of the Spellcheck Options submenu in the content area context menu">
+            &amp;Spell-checker Options
+          </message>
+          <message name="IDS_CONTENT_CONTEXT_LANGUAGE_SETTINGS" desc="In Title Case: The name of the Language Settings command in the content area context menu">
+            &amp;Language Settings...
+          </message>
+        </if>
+        <message name="IDS_CONTENT_CONTEXT_CHECK_SPELLING_WHILE_TYPING" desc="The name of the Check Spelling while Typing field command in the spelling context menu">
+          Check the spelling of text fields
+        </message>
+      </if>
+
+      <!-- Page menu. Android has separate strings for its menu -->
+      <if expr="not is_android">
+        <if expr="not use_titlecase">
+          <message name="IDS_NEW_TAB" desc="The text label of the New Tab menu item">
+            New &amp;tab
+          </message>
+          <message name="IDS_SHOW_AS_TAB" desc="The text label for the Show As tab menu item">
+            &amp;Show as tab
+          </message>
+          <message name="IDS_NEW_WINDOW" desc="The text label of the New Window menu item">
+            &amp;New window
+          </message>
+          <message name="IDS_NEW_INCOGNITO_WINDOW" desc="The text label of the New incognito window menu item">
+            New &amp;incognito window
+          </message>
+          <message name="IDS_PIN_TO_START_SCREEN" desc="The text label of the Pin to start screen menu item">
+            Pin this page to Start screen...
+          </message>
+          <if expr="is_win">
+            <message name="IDS_UNPIN_FROM_START_SCREEN" desc="The text label of the unpin from start screen menu item">
+              Unpin this page from Start screen...
+            </message>
+          </if>
+          <message name="IDS_EDIT2" desc="The text label before the cut/copy/paste buttons in the merged menu">
+            Edit
+          </message>
+          <message name="IDS_CUT" desc="The text label of the Cut menu item">
+            Cu&amp;t
+          </message>
+          <message name="IDS_COPY" desc="The text label of the Copy menu item">
+            &amp;Copy
+          </message>
+          <message name="IDS_PASTE" desc="The text label of the Paste menu item" meaning="'Paste' menu command in sentence case">
+            &amp;Paste
+          </message>
+          <message name="IDS_DELETE" desc="The text label of the Delete menu item (which deletes selected text without copying to clipboard)">
+            &amp;Delete
+          </message>
+          <message name="IDS_FIND" desc="The text label of the Find... menu item">
+            &amp;Find...
+          </message>
+          <message name="IDS_SAVE_PAGE" desc="The text label of the Save Page As menu item">
+            Save page &amp;as...
+          </message>
+          <message name="IDS_DISTILL_PAGE" desc="The text label of the 'Distill page' menu item">
+            Distill page
+          </message>
+          <message name="IDS_PRINT" desc="The text label of the Print... menu item. Opens a dialog box to select print settings">
+            &amp;Print...
+          </message>
+          <message name="IDS_MORE_TOOLS_MENU" desc="The text label of the Tools submenu for touch">
+            More too&amp;ls
+          </message>
+          <message name="IDS_ZOOM_MENU" desc="The text label of the Zoom submenu">
+            &amp;Zoom
+          </message>
+          <message name="IDS_ZOOM_MENU2" desc="The text label of the Zoom menu in the merged menu">
+            Zoom
+          </message>
+          <message name="IDS_ZOOM_PLUS" desc="The text label of the Make Text Larger menu item">
+            &amp;Larger
+          </message>
+          <message name="IDS_ZOOM_PLUS2" desc="The text label of the Make Text Larger menu item in the merged menu">
+            +
+          </message>
+          <message name="IDS_ZOOM_NORMAL" desc="The text label of the Make Text Normal Size menu item">
+            &amp;Normal
+          </message>
+          <message name="IDS_ZOOM_MINUS" desc="The text label of the Make Text Smaller menu item">
+            &amp;Smaller
+          </message>
+          <message name="IDS_ZOOM_MINUS2" desc="The text label of the Make Text Smaller menu item in the merged menu">
+            &#8722;
+          </message>
+          <message name="IDS_ZOOM_PERCENT" desc="Current pages zoom factor; shown in merged menu">
+            <ph name="VALUE">$1<ex>100</ex></ph>%
+          </message>
+          <message name="IDS_ENCODING_MENU" desc="The text label of the Encoding submenu">
+            &amp;Encoding
+          </message>
+          <message name="IDS_ENCODING_AUTO_DETECT" desc="The text label of the Auto Detect submenu">
+            Auto detect
+          </message>
+        </if>
+        <if expr="use_titlecase">
+          <message name="IDS_NEW_TAB" desc="In Title Case: The text label of the New Tab menu item">
+            New &amp;Tab
+          </message>
+          <message name="IDS_SHOW_AS_TAB" desc="In Title Case: The text label for the Show As tab menu item">
+            &amp;Show As Tab
+          </message>
+          <message name="IDS_NEW_WINDOW" desc="In Title Case: The text label of the New Window menu item">
+            &amp;New Window
+          </message>
+          <message name="IDS_NEW_INCOGNITO_WINDOW" desc="In Title Case: The text label of the New incognito window menu item">
+            New &amp;Incognito Window
+          </message>
+          <message name="IDS_PIN_TO_START_SCREEN" desc="In Title Case: The text label of the Pin to start screen menu item">
+            Pin this Page to Start Screen...
+          </message>
+          <message name="IDS_CUT" desc="In Title Case: The text label of the Cut menu item">
+            Cu&amp;t
+          </message>
+          <message name="IDS_COPY" desc="In Title Case: The text label of the Copy menu item">
+            &amp;Copy
+          </message>
+          <message name="IDS_PASTE" desc="In Title Case: The text label of the Paste menu item" meaning="'Paste' menu command for Mac">
+            &amp;Paste
+          </message>
+          <message name="IDS_DELETE" desc="In Title Case: The text label of the Delete menu item (which deletes selected text without copying to clipboard)">
+            &amp;Delete
+          </message>
+          <message name="IDS_FIND" desc="In Title Case: The text label of the Find... menu item">
+            &amp;Find...
+          </message>
+          <message name="IDS_SAVE_PAGE" desc="In Title Case: The text label of the Save Page As menu item">
+            Save Page &amp;As...
+          </message>
+          <message name="IDS_DISTILL_PAGE" desc="The text label of the 'Distill Page' menu item">
+            Distill Page
+          </message>
+          <message name="IDS_PRINT" desc="In Title Case: The text label of the Print... menu item. Opens a dialog box to select print settings">
+            &amp;Print...
+          </message>
+          <message name="IDS_MORE_TOOLS_MENU" desc="The text label of the Tools submenu for touch">
+            More too&amp;ls
+          </message>
+          <message name="IDS_ZOOM_MENU" desc="In Title Case: The text label of the Zoom submenu">
+            &amp;Zoom
+          </message>
+          <message name="IDS_ZOOM_PLUS" desc="In Title Case: The text label of the Make Text Larger menu item">
+            &amp;Larger
+          </message>
+          <message name="IDS_ZOOM_PLUS2" desc="The text label of the Make Text Larger menu item in the merged menu">
+            +
+          </message>
+          <message name="IDS_ZOOM_NORMAL" desc="In Title Case: The text label of the Make Text Normal Size menu item">
+            &amp;Normal
+          </message>
+          <message name="IDS_ZOOM_MINUS" desc="In Title Case: The text label of the Make Text Smaller menu item">
+            &amp;Smaller
+          </message>
+          <message name="IDS_ZOOM_MINUS2" desc="The text label of the Make Text Smaller menu item in the merged menu">
+            &#8722;
+          </message>
+          <message name="IDS_ZOOM_PERCENT" desc="Current pages zoom factor; shown in merged menu">
+          <ph name="VALUE">$1<ex>100</ex></ph>%
+          </message>
+          <message name="IDS_ENCODING_MENU" desc="In Title Case: The text label of the Encoding submenu">
+            &amp;Encoding
+          </message>
+          <message name="IDS_ENCODING_AUTO_DETECT" desc="In Title Case: The text label of the Auto Detect submenu">
+            Auto Detect
+          </message>
+        </if>
+      </if>
+
+      <if expr="chromeos">
+        <message name="IDS_VISIT_DESKTOP_OF_LRU_USER" desc="The text label of the menu item which allows the user to move a window from one users desktop to another.">
+          Move window to <ph name="USER_NAME">$1<ex>User name</ex></ph> (<ph name="USER_EMAIL">$2<ex>john@google.com</ex></ph>)
+        </message>
+      </if>
+
+      <message name="IDS_ACCNAME_ZOOM_PLUS2" desc="The accessible description of the Make Text Larger menu item in the merged menu">
+        Make Text Larger
+      </message>
+      <message name="IDS_ACCNAME_ZOOM_MINUS2" desc="The accessible description of the Make Text Smaller menu item in the merged menu">
+        Make Text Smaller
+      </message>
+
+      <message name="IDS_ENCODING_DISPLAY_TEMPLATE" desc="The format of encodings in the encoding menu. Encoding categories are Unicode, Western, Turkish, Cyrillic, Chinese Simplified, Thai, Arabic, Hebrew and so forth. Encoding names are UTF-8, ISO-8859-1, Windows-1251, GB2312, etc.">
+        <ph name="ENCODING_CATEGORY">$1<ex>Japanese</ex></ph> (<ph name="ENCODING_NAME">$2<ex>Shift_JIS</ex></ph>)
+      </message>
+      <message name="IDS_ENCODING_UNICODE" desc="The text label of Unicode encodings">
+        Unicode
+      </message>
+      <message name="IDS_ENCODING_WESTERN" desc="The text label of West European character encoding">
+        Western
+      </message>
+      <message name="IDS_ENCODING_SIMP_CHINESE" desc="The text label of Simplified Chinese encodings">
+        Chinese Simplified
+      </message>
+      <message name="IDS_ENCODING_TRAD_CHINESE" desc="The text label of Traditional Chinese encodings">
+        Chinese Traditional
+      </message>
+      <message name="IDS_ENCODING_KOREAN" desc="The text label of Korean encoding">
+        Korean
+      </message>
+      <message name="IDS_ENCODING_JAPANESE" desc="The text label of Japanese encodings">
+        Japanese
+      </message>
+      <message name="IDS_ENCODING_THAI" desc="The text label of encoding thai language">
+        Thai
+      </message>
+      <message name="IDS_ENCODING_CENTRAL_EUROPEAN" desc="The text label of encoding Central European">
+        Central European
+      </message>
+      <message name="IDS_ENCODING_CYRILLIC" desc="The text label of Cyrillic encodings">
+        Cyrillic
+      </message>
+      <message name="IDS_ENCODING_GREEK" desc="The text label of Greek encodings">
+        Greek
+      </message>
+      <message name="IDS_ENCODING_BALTIC" desc="The text label of Baltic encodings">
+        Baltic
+      </message>
+      <message name="IDS_ENCODING_SOUTH_EUROPEAN" desc="The text label of South European encodings">
+        South European
+      </message>
+      <message name="IDS_ENCODING_NORDIC" desc="The text label of Nordic encoding">
+        Nordic
+      </message>
+      <message name="IDS_ENCODING_CELTIC" desc="The text label of Celtic encodings">
+        Celtic
+      </message>
+      <message name="IDS_ENCODING_ROMANIAN" desc="The text label of Romanian encoding">
+        Romanian
+      </message>
+      <message name="IDS_ENCODING_TURKISH" desc="The text label of Turkish encodings">
+        Turkish
+      </message>
+      <message name="IDS_ENCODING_ARABIC" desc="The text label of Arabic encodings">
+        Arabic
+      </message>
+      <message name="IDS_ENCODING_HEBREW" desc="The text label of Hebrew encodings">
+        Hebrew
+      </message>
+      <message name="IDS_ENCODING_VIETNAMESE" desc="The text label of Vietnamese encoding">
+        Vietnamese
+      </message>
+
+      <if expr="not use_titlecase">
+        <message name="IDS_VIEW_SOURCE" desc="The text label of the View Page Source menu item">
+          View s&amp;ource
+        </message>
+        <message name="IDS_FEEDBACK" desc="The text label of the Report Bug menu item">
+          &amp;Report an issue...
+        </message>
+        <message name="IDS_DEV_TOOLS" desc="The text label of the Developer Tools menu item">
+          &amp;Developer tools
+        </message>
+        <message name="IDS_DEV_TOOLS_CONSOLE" desc="The text label of the JavaScript console menu item">
+          &amp;JavaScript console
+        </message>
+        <message name="IDS_DEV_TOOLS_DEVICES" desc="The text label of the Inspect Devices menu item">
+          &amp;Inspect devices
+        </message>
+        <message name="IDS_TASK_MANAGER" desc="The text label of the Task Manager menu item">
+          &amp;Task manager
+        </message>
+        <message name="IDS_RESTORE_TAB" desc="The text label of the Restore Tab menu item">
+          R&amp;eopen closed tab
+        </message>
+        <message name="IDS_RESTORE_WINDOW" desc="The text label of the Restore Window menu item">
+          R&amp;eopen closed window
+        </message>
+      </if>
+      <if expr="use_titlecase">
+        <message name="IDS_VIEW_SOURCE" desc="In Title Case: The text label of the View Page Source menu item">
+          View S&amp;ource
+        </message>
+        <message name="IDS_FEEDBACK" desc="In Title Case: The text label of the Report Bug menu item">
+          &amp;Report an Issue...
+        </message>
+        <message name="IDS_DEV_TOOLS" desc="In Title Case: The text label of the Developer Tools menu item">
+          &amp;Developer Tools
+        </message>
+        <message name="IDS_DEV_TOOLS_CONSOLE" desc="In Title Case: The text label of the JavaScript console menu item">
+          &amp;JavaScript Console
+        </message>
+        <message name="IDS_DEV_TOOLS_DEVICES" desc="The text label of the Inspect Devices menu item">
+          &amp;Inspect Devices
+        </message>
+        <message name="IDS_TASK_MANAGER" desc="In Title Case: The text label of the Task Manager menu item">
+          &amp;Task Manager
+        </message>
+        <message name="IDS_RESTORE_TAB" desc="In Title Case: The text label of the Restore Tab menu item">
+          R&amp;eopen Closed Tab
+        </message>
+        <message name="IDS_RESTORE_WINDOW" desc="In Title Case: The text label of the Restore Window menu item">
+          R&amp;eopen Closed Window
+        </message>
+      </if>
+
+      <if expr="is_macosx">
+        <message name="IDS_PREFERENCES" desc="The Mac menu item to open the preferences window in the app menu.">
+          Preferences...
+        </message>
+      </if>
+      <if expr="is_posix and not is_macosx">
+        <message name="IDS_PREFERENCES" desc="The text label of the Preferences menu item.">
+          Preferences
+        </message>
+      </if>
+
+      <!-- App menu -->
+      <if expr="chromeos">
+        <message name="IDS_TOGGLE_REQUEST_TABLET_SITE" desc="The toggle to request tablet site on a touch dev.">
+          Request tablet site
+        </message>
+      </if>
+      <if expr="not use_titlecase">
+        <message name="IDS_SHOW_HISTORY" desc="The show history menu in the app menu">
+          &amp;History
+        </message>
+        <message name="IDS_IMPORT_SETTINGS_MENU_LABEL" desc="In sentence case: The app menu label to import bookmarks and settings.">
+          Import bookmarks and settings...
+        </message>
+        <message name="IDS_PROFILING_ENABLED" desc="The toggle to turn profiling on / off">
+          &amp;Profiling enabled
+        </message>
+        <message name="IDS_FULLSCREEN" desc="Switches into fullscreen mode">
+          &amp;Full screen
+        </message>
+        <message name="IDS_ACCNAME_FULLSCREEN" desc="The accessible name of the fullscreen button in the new merged menu">
+          Full screen
+        </message>
+        <message name="IDS_CLEAR_BROWSING_DATA" desc="The text label for the menu item for clearing of browsing data">
+          &amp;Clear browsing data...
+        </message>
+        <message name="IDS_SHOW_DOWNLOADS" desc="The show downloads menu in the app menu">
+          &amp;Downloads
+        </message>
+        <message name="IDS_SHOW_EXTENSIONS" desc="The show extensions menu in the app menu">
+          &amp;Extensions
+        </message>
+        <message name="IDS_SETTINGS" desc="The text label of the Settings menu item">
+          &amp;Settings
+        </message>
+        <message name="IDS_OPTIONS" desc="The text label of the Options menu item">
+          &amp;Options
+        </message>
+        <message name="IDS_HELP_PAGE" desc="The text label of the Help Center menu item">
+          H&amp;elp center
+        </message>
+        <message name="IDS_GET_HELP" desc="The text label of the Get Help menu item">
+          Get H&amp;elp
+        </message>
+        <message name="IDS_HELP_MENU" desc="The text label of the Help sub-menu item">
+          H&amp;elp
+        </message>
+        <if expr="is_win">
+          <message name="IDS_VIEW_INCOMPATIBILITIES" desc="The text label of the View incompatibilities menu item">
+            Software incompatibility: Learn more
+          </message>
+        </if>
+        <message name="IDS_EXIT" desc="The text label of the Exit menu item">
+          E&amp;xit
+        </message>
+      </if>
+      <if expr="use_titlecase">
+        <message name="IDS_SHOW_HISTORY" desc="In Title Case: The show history menu in the app menu">
+          &amp;History
+        </message>
+        <message name="IDS_IMPORT_SETTINGS_MENU_LABEL" desc="In Title Case: The app menu label to import bookmarks and settings.">
+          Import Bookmarks and Settings...
+        </message>
+        <message name="IDS_PROFILING_ENABLED" desc="In Title Case: The toggle to turn profiling on / off">
+          &amp;Profiling Enabled
+        </message>
+        <message name="IDS_FULLSCREEN" desc="In Title Case: Switches into fullscreen mode">
+          &amp;Full Screen
+        </message>
+        <message name="IDS_CLEAR_BROWSING_DATA" desc="In Title Case: The text label for the menu item for clearing of browsing data">
+          &amp;Clear Browsing Data...
+        </message>
+        <message name="IDS_SHOW_DOWNLOADS" desc="In Title Case: The show downloads menu in the app menu">
+          &amp;Downloads
+        </message>
+        <message name="IDS_SHOW_EXTENSIONS" desc="In Title Case: The show extensions menu in the app menu">
+          &amp;Extensions
+        </message>
+        <message name="IDS_SETTINGS" desc="In Title Case: The text label of the Settings menu item">
+          &amp;Settings
+        </message>
+        <message name="IDS_OPTIONS" desc="In Title Case: The text label of the Options menu item">
+          &amp;Options
+        </message>
+        <message name="IDS_HELP_PAGE" desc="The text label of the Help Center menu item">
+          H&amp;elp Center
+        </message>
+        <message name="IDS_GET_HELP" desc="The text label of the Get Help menu item">
+          Get H&amp;elp
+        </message>
+        <message name="IDS_HELP_MENU" desc="The text label of the Help sub-menu item">
+          H&amp;elp
+        </message>
+        <message name="IDS_EXIT" desc="In Title Case: The text label of the Exit menu item">
+          E&amp;xit
+        </message>
+      </if>
+
+      <!-- Keywords -->
+      <message name="IDS_AUTOCOMPLETE_MATCH_DESCRIPTION_SEPARATOR" desc="The separator between a result in the autocomplete popup and its description.">
+        ''' - '''
+      </message>
+      <if expr="not use_titlecase">
+        <message name="IDS_EDIT_SEARCH_ENGINES"
+                 desc="Title of the popup menu item for editing search engines">
+          &amp;Edit search engines...
+        </message>
+      </if>
+      <if expr="use_titlecase">
+        <message name="IDS_EDIT_SEARCH_ENGINES"
+                 desc="In Title Case: Title of the popup menu item for editing search engines">
+          &amp;Edit Search Engines...
+        </message>
+      </if>
+
+      <!-- Search Engine Settings -->
+      <message name="IDS_SEARCH_ENGINES_EDITOR_WINDOW_TITLE"
+               desc="Title of the search engines window">
+        Search engines
+      </message>
+      <message name="IDS_SEARCH_ENGINES_EDITOR_KEYWORD_COLUMN"
+               desc="Title of the keyword column in the search engines editor">
+        Keyword
+      </message>
+      <message name="IDS_SEARCH_ENGINES_EDITOR_DESCRIPTION_COLUMN"
+               desc="Title of the description column in the search engines editor">
+        Name
+      </message>
+      <message name="IDS_SEARCH_ENGINES_EDITOR_DESCRIPTION_LABEL"
+               desc="Prefix before the search engine description text field">
+        Name:
+      </message>
+      <message name="IDS_SEARCH_ENGINES_EDITOR_KEYWORD_LABEL"
+               desc="Prefix before the search engine keyword text field">
+        Keyword:
+      </message>
+      <message name="IDS_SEARCH_ENGINES_EDITOR_URL_LABEL"
+               desc="Prefix before the URL text field">
+        URL:
+      </message>
+      <message name="IDS_SEARCH_ENGINES_EDITOR_URL_DESCRIPTION_LABEL"
+               desc="Describes how to escape the url">
+        Insert <ph name="SEARCH_TERMS_LITERAL">%s</ph> in the URL where the search terms should appear.
+      </message>
+      <message name="IDS_SEARCH_ENGINES_EDITOR_MAKE_DEFAULT_BUTTON"
+               desc="Text of the button that makes the selected endint the default search engine">
+        Make default
+      </message>
+      <message name="IDS_SEARCH_ENGINES_EDITOR_EDIT_WINDOW_TITLE"
+               desc="Text of the window title when editing a search engine">
+        Edit Search Engine
+      </message>
+      <message name="IDS_SEARCH_ENGINES_EDITOR_NEW_WINDOW_TITLE"
+               desc="Text of the window title when adding a search engine">
+        Add Search Engine
+      </message>
+      <message name="IDS_SEARCH_ENGINES_INVALID_TITLE_TT"
+               desc="Text of tooltip shown in the keyword editor when the title is invalid">
+        Title must contain at least one character
+      </message>
+      <message name="IDS_SEARCH_ENGINES_INVALID_URL_TT"
+               desc="Text of tooltip shown in the keyword editor when the url is invalid">
+        Must be a valid URL
+      </message>
+      <message name="IDS_SEARCH_ENGINES_INVALID_KEYWORD_TT"
+               desc="Text of tooltip shown in the keyword editor when the keyword is invalid">
+        Keyword must be empty or unique
+      </message>
+      <message name="IDS_SEARCH_ENGINES_EDITOR_MAIN_SEPARATOR"
+               desc="Title above the set of keywords the user has modified and or explicitly created">
+        Default search settings
+      </message>
+      <message name="IDS_SEARCH_ENGINES_EDITOR_OTHER_SEPARATOR"
+               desc="Title above the set of keywords Chrome automatically created as the user browses">
+        Other search engines
+      </message>
+      <message name="IDS_SEARCH_ENGINES_EDITOR_EXTENSIONS_SEPARATOR"
+               desc="Title above the set of keywords installed by active extensions">
+        Search engines added by extensions
+      </message>
+
+      <message name="IDS_SEARCH_ENGINES_EDITOR_DEFAULT_ENGINE"
+               desc="Engine name displayed for the engine in the list that is currently marked as default">
+        <ph name="ENGINE_NAME">$1<ex>Google</ex></ph> (Default)
+      </message>
+
+      <!-- Download Shelf-->
+      <if expr="is_macosx">
+        <message name="IDS_SHOW_ALL"
+                 desc="In Title Case: Button text on a button that opens the downloads page">
+          Show All
+        </message>
+      </if>
+      <message name="IDS_SHOW_ALL_DOWNLOADS"
+               desc="Link label shown at the corner of the download shelf">
+        Show all downloads...
+      </message>
+      <!-- Download Error Messages-->
+      <!-- *_STATUS_*: Short message in the download on the shelf.-->
+      <!-- *_DESCRIPTION_*: Corresponding more descriptive message on the download page.-->
+      <message name="IDS_DOWNLOAD_INTERRUPTED_STATUS"
+               desc="The download experienced an error and was interrupted, size downloaded/total.">
+        Download error
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_STATUS_ACCESS_DENIED"
+               desc="Cannot write to the directory/file due to insufficient permissions. Please select another directory.">
+        Insufficient permissions
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_DESCRIPTION_ACCESS_DENIED"
+               desc="Download page message: Access Denied.">
+        Cannot save due to insufficient permissions. Please save to another location.
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_STATUS_PATH_TOO_LONG"
+               desc="The file path name is too long.  Please select another location or name.">
+        Path too long
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_DESCRIPTION_PATH_TOO_LONG"
+               desc="Download page message: Path Too Long.">
+        The file path or name is too long.  Please save with a shorter name or to another location.
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_STATUS_DISK_FULL"
+               desc="There is not enough room on the disk to download this file.  Please choose another disk or delete files to make more room.">
+        Disk full
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_DESCRIPTION_DISK_FULL"
+               desc="Download page message: Disk Full.">
+        Your hard disk is full.  Please save to another location or make more room on the hard disk.
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_STATUS_FILE_TOO_LARGE"
+               desc="The file is too large for the file system.">
+        File too large
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_DESCRIPTION_FILE_TOO_LARGE"
+               desc="Download page message: File too large.">
+        The file is too large for your computer to handle. Sorry.
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_STATUS_TEMPORARY_PROBLEM"
+               desc="There was a problem saving the file.  Please try again later.">
+        System busy
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_DESCRIPTION_TEMPORARY_PROBLEM"
+               desc="Download page message: Temporary problem.">
+        Your computer is doing too many things right now.  Try again later.
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_STATUS_VIRUS"
+               desc="This file contains a virus.  We recommend not downloading it.">
+        Virus detected
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_DESCRIPTION_VIRUS"
+               desc="Download page message: Virus.">
+        Anti-virus software detected a virus.
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_STATUS_BLOCKED"
+               desc="The download was blocked due to security policy.">
+        Blocked
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_DESCRIPTION_BLOCKED"
+               desc="Download page message: The download was blocked due to security policy on this machine.">
+        Security settings on your computer blocked this file.
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_STATUS_SECURITY_CHECK_FAILED"
+               desc="The security check performed on this download failed unexpectedly">
+        Virus scan failed
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_DESCRIPTION_SECURITY_CHECK_FAILED"
+               desc="Download page message: The security check performed on this download failed unexpectedly">
+        Anti-virus software failed unexpectedly while scanning this file.
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_STATUS_FILE_TOO_SHORT"
+              desc="A download resumption was attempted, but the file didn't exist or wasn't as large as expected">
+       File truncated
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_DESCRIPTION_FILE_TOO_SHORT"
+              desc="Download page message: A download resumption was attempted, but the file didn't exist or wasn't as large as expected">
+       Destination file was truncated or removed since last download.
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_STATUS_NETWORK_TIMEOUT"
+               desc="Network Timeout.">
+        Network timeout
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_DESCRIPTION_NETWORK_TIMEOUT"
+               desc="Download page message: Network Timeout.">
+        The download was taking too long and was stopped by the network.
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_STATUS_NETWORK_DISCONNECTED"
+               desc="Network Disconnected.">
+        Network disconnected
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_DESCRIPTION_NETWORK_DISCONNECTED"
+               desc="Download page message: Network Disconnected.">
+        Internet disconnected. Please check your internet connection and try again.
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_STATUS_SERVER_DOWN"
+               desc="The server is down.">
+        Server unavailable
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_DESCRIPTION_SERVER_DOWN"
+               desc="Download page message: The server is down.">
+        Server unavailable.
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_STATUS_NETWORK_ERROR"
+               desc="Network error.">
+        Network error
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_DESCRIPTION_NETWORK_ERROR"
+               desc="Download page message: Network error.">
+        Unknown network error.
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_STATUS_NO_FILE"
+               desc="File not found on server.">
+        No file
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_DESCRIPTION_NO_FILE"
+               desc="Download page message: File not found on server.">
+        The server could not find the file.
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_STATUS_SERVER_PROBLEM"
+               desc="Server problem.">
+        Server problem
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_DESCRIPTION_SERVER_PROBLEM"
+               desc="Download page message: Server problem.">
+        Unknown server error. Please try again, or contact the server administrator.
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_STATUS_SHUTDOWN"
+               desc="Shutdown.">
+        Shutdown
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_DESCRIPTION_SHUTDOWN"
+               desc="Download page message: Shutdown.">
+        The browser was shut down before the download completed.
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_STATUS_CRASH"
+               desc="Browser Crash.">
+        Crash
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_DESCRIPTION_CRASH"
+               desc="Download page message: Browser Crash.">
+        The browser crashed before the download completed.
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_STATUS_UNAUTHORIZED"
+               desc="Not authorized.">
+        Needs authorization
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_DESCRIPTION_UNAUTHORIZED"
+               desc="Download page message: Not authorized.">
+        Server did not authorize you to access this resource.
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_STATUS_SERVER_CERT_PROBLEM"
+               desc="Server certificate problem.">
+        Bad certificate
+      </message>
+      <message name="IDS_DOWNLOAD_INTERRUPTED_DESCRIPTION_SERVER_CERT_PROBLEM"
+               desc="Download page message: Server certificate problem.">
+        There was a problem with server's certificate.
+      </message>
+
+      <!-- Download Shelf Items -->
+      <message name="IDS_DOWNLOAD_STATUS_STARTING"
+               desc="When starting a download, let the user know we're starting the download.">
+        Starting...
+      </message>
+      <message name="IDS_DOWNLOAD_STATUS_IN_PROGRESS"
+               desc="Size and units downloaded, time remaining.">
+        <ph name="DOWNLOAD_RECEIVED">$1<ex>54/154 MB</ex></ph>, <ph name="TIME_LEFT">$2<ex>5s</ex></ph>
+      </message>
+      <message name="IDS_DOWNLOAD_STATUS_SIZES"
+               desc="Size and units downloaded.">
+        <ph name="DOWNLOAD_RECEIVED">$1<ex>54kB</ex></ph>/<ph name="DOWNLOAD_TOTAL">$2<ex>154MB</ex></ph>
+      </message>
+      <message name="IDS_DOWNLOAD_STATUS_OPEN_IN"
+               desc="Time left until the file download completes and the file is opened.">
+        Opening in <ph name="TIME_REMAINING">$1<ex>5 sec</ex></ph>...
+      </message>
+      <message name="IDS_DOWNLOAD_STATUS_OPEN_WHEN_COMPLETE"
+         desc="Status that the file download will be opened when the download completes.">
+        Opening when complete
+      </message>
+      <message name="IDS_DOWNLOAD_STATUS_OPENING"
+               desc="Temporary status shown when a user has clicked to open a downloaded file.">
+        Opening <ph name="FILE">$1<ex>image.jpg</ex></ph>...
+      </message>
+      <message name="IDS_DOWNLOAD_STATUS_CANCELLED" desc="Text that appears under the downloaded files that have been cancelled.">
+        Cancelled
+      </message>
+      <message name="IDS_DOWNLOAD_STATUS_REMOVED" desc="Text that appears under the downloaded files that have been removed.">
+        Removed
+      </message>
+      <message name="IDS_DOWNLOAD_STATUS_INTERRUPTED" desc="Status text for a download item that was interrupted.">
+        Failed - <ph name="INTERRUPT_REASON">$1<ex>Disk full</ex></ph>
+      </message>
+      <message name="IDS_DOWNLOAD_UNCONFIRMED_PREFIX" desc="The prefix used in the unconfirmed download file.">
+        Unconfirmed
+      </message>
+      <if expr="is_android">
+        <message name="IDS_PROMPT_DANGEROUS_DOWNLOAD"
+                 desc="Mobile: Message shown to the user to validate the download of a dangerous file.">
+          This type of file can harm your device. Do you want to keep <ph name="FILE_NAME">$1<ex>malware.exe</ex></ph> anyway?
+        </message>
+        <message name="IDS_PROMPT_DANGEROUS_DOWNLOAD_EXTENSION"
+           desc="Mobile: Message shown to the user to validate the download of an extension file.">
+          Extensions, apps, and themes can harm your device. Are you sure you want to continue?
+        </message>
+      </if>
+      <if expr="not is_android">
+        <message name="IDS_PROMPT_DANGEROUS_DOWNLOAD"
+                 desc="Message shown to the user to validate the download of a dangerous file.">
+          This type of file can harm your computer. Do you want to keep <ph name="FILE_NAME">$1<ex>malware.exe</ex></ph> anyway?
+        </message>
+        <message name="IDS_PROMPT_DANGEROUS_DOWNLOAD_EXTENSION"
+           desc="Message shown to the user to validate the download of an extension file.">
+          Extensions, apps, and themes can harm your computer. Are you sure you want to continue?
+        </message>
+      </if>
+      <message name="IDS_PROMPT_UNCOMMON_DOWNLOAD_CONTENT"
+         desc="Message shown to the user to validate the download when the download content is classified as uncommon by safebrowsing.">
+        <ph name="FILE_NAME">$1<ex>bla.exe</ex></ph> is not commonly downloaded and could be dangerous.
+      </message>
+      <message name="IDS_CONFIRM_KEEP_DANGEROUS_DOWNLOAD_TITLE"
+               desc="Title for the confirmation dialog asking whether the user really meant to keep a dangerous download">
+        Confirm Download
+      </message>
+      <message name="IDS_RESTORE_KEEP_DANGEROUS_DOWNLOAD_TITLE"
+               desc="Title for the confirmation dialog asking whether the user really meant to keep a dangerous download">
+        Recover malware?
+      </message>
+      <message name="IDS_PROMPT_CONFIRM_KEEP_DANGEROUS_DOWNLOAD"
+               desc="Prompt text for the confirmation dialog asking whether the user really meant to keep a dangerous download">
+        This might hurt. Don't say we didn't warn you...
+      </message>
+      <message name="IDS_PROMPT_CONFIRM_KEEP_MALICIOUS_DOWNLOAD_LEAD"
+               desc="Lead prompt text for the confirmation dialog asking whether the user really meant to keep a malicious download">
+        This file will harm your computer.
+      </message>
+      <message name="IDS_PROMPT_CONFIRM_KEEP_MALICIOUS_DOWNLOAD_BODY"
+               desc="Body prompt text for the confirmation dialog asking whether the user really meant to keep a malicious download">
+Even if you have downloaded files from this website before, the website might have been hacked. Instead of recovering this file, you can retry the download later.
+      </message>
+      <message name="IDS_CONFIRM_DOWNLOAD_AGAIN"
+               desc="Text for the button used to confirm the dialog asking whether the user really meant to keep dangerous download.">
+        Keep anyway
+      </message>
+      <message name="IDS_CONFIRM_DOWNLOAD_AGAIN_MALICIOUS"
+               desc="The text for the button used to confirm that the user DOES want to keep malware. Don't translate the English string literally; for translations, translate 'Recover anyway'">
+        Hurt me plenty
+      </message>
+      <message name="IDS_CONFIRM_CANCEL_AGAIN_MALICIOUS"
+               desc="Text for the button used to indicate that the user does NOT want to restore a malicious download.">
+        Be safe
+      </message>
+      <message name="IDS_CONFIRM_DOWNLOAD"
+               desc="Text for the button used to validate the downloading of a dangerous download.">
+        Keep
+      </message>
+      <message name="IDS_CONFIRM_DOWNLOAD_RESTORE"
+               desc="Text for the button used to validate the downloading of a dangerous download.">
+        Recover malicious file
+      </message>
+      <message name="IDS_CONTINUE_EXTENSION_DOWNLOAD"
+               desc="Text for the button used to validate the installation of an extension.">
+        Continue
+      </message>
+      <message name="IDS_DISCARD_DOWNLOAD"
+               desc="Text for the button used to stop a dangerous download.">
+        Discard
+      </message>
+      <message name="IDS_DISMISS_DOWNLOAD"
+               desc="Text for the button used to dismiss a malicious download notification.">
+        Dismiss
+      </message>
+
+      <!-- Download Tab Items -->
+      <message name="IDS_DOWNLOAD_LINK_PAUSE"
+               desc="In the download view, 'Pause' link text">
+        Pause
+      </message>
+      <message name="IDS_DOWNLOAD_SEARCH_BUTTON" desc="Title of the button in the download page that triggers a search">
+        Search downloads
+      </message>
+      <message name="IDS_DOWNLOAD_SEARCHRESULTSFOR" desc="Format string for search results">
+        Search results for '<ph name="SEARCH_STRING">$1</ph>'
+      </message>
+      <message name="IDS_DOWNLOAD_LINK_RESUME"
+               desc="In the download view, 'Resume' link text">
+        Resume
+      </message>
+      <message name="IDS_DOWNLOAD_LINK_REMOVE"
+               desc="In the download view, 'Remove from list' link text">
+        Remove from list
+      </message>
+      <message name="IDS_DOWNLOAD_LINK_CANCEL"
+               desc="In the download view, 'Cancel' link text">
+        Cancel
+      </message>
+      <message name="IDS_DOWNLOAD_LINK_RETRY"
+               desc="In the download view, 'Retry download' link text">
+        Retry download
+      </message>
+      <if expr="not is_macosx">
+        <message name="IDS_DOWNLOAD_LINK_SHOW"
+                 desc="In the download view, 'Show in folder' link text">
+          Show in folder
+        </message>
+      </if>
+      <if expr="is_macosx">
+        <message name="IDS_DOWNLOAD_LINK_SHOW"
+                 desc="Mac: In the download view, 'Show in Finder' link text">
+          Show in Finder
+        </message>
+      </if>
+      <message name="IDS_DOWNLOAD_TAB_CANCELLED"
+               desc="Text that appears next to the downloaded files that have been cancelled">
+        Cancelled
+      </message>
+      <message name="IDS_DOWNLOAD_FILE_REMOVED"
+               desc="Text that appears next to the downloaded files that have been removed">
+        Removed
+      </message>
+      <message name="IDS_DOWNLOAD_TAB_PROGRESS_STATUS_TIME_UNKNOWN"
+               desc="The status text for a download in progress in the download manager. This includes information such as speed and received byte counts and is used when we do not know the remaining time">
+        <ph name="SPEED">$1<ex>10kB/s</ex></ph> - <ph name="RECEIVED_AMOUNT">$2<ex>40kB</ex></ph>
+      </message>
+      <message name="IDS_DOWNLOAD_TAB_PROGRESS_STATUS"
+               desc="The status text for a download in progress in the download manager. This includes information such as speed, received byte counts as well as remaining time">
+        <ph name="SPEED">$1<ex>10kB/s</ex></ph> - <ph name="RECEIVED_AMOUNT">$2<ex>40kB</ex></ph>, <ph name="TIME_REMAINING">$3<ex>42 mins left</ex></ph>
+      </message>
+      <message name="IDS_DOWNLOAD_TAB_PROGRESS_SIZE"
+               desc="Speed and received byte counts (with total)">
+        <ph name="RECEIVED_AMOUNT">$1<ex>40kB</ex></ph> of <ph name="TOTAL_SIZE">$2<ex>250kB</ex></ph>
+      </message>
+      <message name="IDS_DOWNLOAD_PROGRESS_PAUSED"
+               desc="Indicate the download is in progress but paused">
+        Paused
+      </message>
+      <message name="IDS_DOWNLOAD_LINK_CLEAR_ALL"
+         desc="Clear all downloads link">
+        Clear all
+      </message>
+      <message name="IDS_DOWNLOAD_LINK_OPEN_DOWNLOADS_FOLDER"
+               desc="Open downloads folder link">
+        Open downloads folder
+      </message>
+      <message name="IDS_DOWNLOAD_BY_EXTENSION"
+               desc="Indicates which extension downloaded this file.">
+        Downloaded by <ph name="EXTENSION">$1<ex>The Best Chrome Extension Ever</ex></ph>
+      </message>
+
+      <!-- Download Context Menu Items -->
+      <if expr="not is_android">
+        <if expr="not use_titlecase">
+          <if expr="is_macosx">
+            <message name="IDS_DOWNLOAD_MENU_SHOW"
+                  desc="Mac: Show the file in the Finder, 'Show in Finder' item"
+                  meaning="'show in Finder' on Mac in Sentence case">
+              &amp;Show in Finder
+            </message>
+          </if>
+          <if expr="not is_macosx">
+            <message name="IDS_DOWNLOAD_MENU_SHOW"
+                     desc="Show the file in file explorer, 'Show in folder' item"
+                  meaning="'show in folder' on non Mac in Sentence case">
+              &amp;Show in folder
+            </message>
+          </if>
+          <message name="IDS_DOWNLOAD_MENU_OPEN_WHEN_COMPLETE"
+                   desc="Download context menu: Open when download is finished">
+            Open when &amp;done
+          </message>
+          <message name="IDS_DOWNLOAD_MENU_OPEN"
+                   desc="Download context menu: Open download">
+            &amp;Open
+          </message>
+          <message name="IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE"
+                   desc="Download context menu: Open when download is finished">
+            &amp;Always open files of this type
+          </message>
+          <message name="IDS_DOWNLOAD_MENU_PLATFORM_OPEN"
+          desc="Download context menu: Open the download using the default handler for the platform.">
+            Open with system viewer
+          </message>
+          <message name="IDS_DOWNLOAD_MENU_CANCEL"
+                   desc="Download context menu: Cancel">
+            &amp;Cancel
+          </message>
+          <message name="IDS_DOWNLOAD_MENU_PAUSE_ITEM"
+                   desc="Download context menu: Pause download">
+            &amp;Pause
+          </message>
+          <message name="IDS_DOWNLOAD_MENU_RESUME_ITEM"
+                   desc="Download context menu: Resume download">
+            &amp;Resume
+          </message>
+          <message name="IDS_DOWNLOAD_MENU_DISCARD"
+                   desc="Download context menu: Discard malicious download">
+            &amp;Discard
+          </message>
+          <message name="IDS_DOWNLOAD_MENU_KEEP"
+                   desc="Download context menu: Keep malicious download">
+            &amp;Keep
+          </message>
+          <message name="IDS_DOWNLOAD_MENU_LEARN_MORE_SCANNING"
+                   desc="Download context menu: Show information about download scanning">
+            &amp;Learn more
+          </message>
+          <message name="IDS_DOWNLOAD_MENU_LEARN_MORE_INTERRUPTED"
+                   desc="Download context menu: Show information about interrupted downloads">
+            &amp;More information
+          </message>
+        </if>
+        <if expr="use_titlecase">
+           <if expr="is_macosx">
+            <message name="IDS_DOWNLOAD_MENU_SHOW"
+                     desc="In Title Case: Mac: Show the file in the Finder, 'Show in Finder' item"
+                  meaning="'show in Finder' on Mac in Title Case">
+              &amp;Show in Finder
+            </message>
+          </if>
+           <if expr="not is_macosx">
+            <message name="IDS_DOWNLOAD_MENU_SHOW"
+                     desc="In Title Case: Show the file in file explorer, 'Show in folder' item"
+                  meaning="'show in folder' on non Mac in Title Case">
+              &amp;Show in Folder
+            </message>
+          </if>
+          <message name="IDS_DOWNLOAD_MENU_OPEN_WHEN_COMPLETE"
+                   desc="In Title Case: Download context menu: Open when download is finished">
+            Open When &amp;Done
+          </message>
+          <message name="IDS_DOWNLOAD_MENU_OPEN"
+                   desc="In Title Case: Download context menu: Open download">
+            &amp;Open
+          </message>
+          <message name="IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE"
+                   desc="In Title Case: Download context menu: Open when download is finished">
+            &amp;Always Open Files of This Type
+          </message>
+          <message name="IDS_DOWNLOAD_MENU_PLATFORM_OPEN"
+                   desc="In Title Case: Download context menu: Open the download using the default handler for the platform.">
+            Open With System Viewer
+          </message>
+          <message name="IDS_DOWNLOAD_MENU_CANCEL"
+                   desc="In Title Case: Download context menu: Cancel">
+            &amp;Cancel
+          </message>
+          <message name="IDS_DOWNLOAD_MENU_PAUSE_ITEM"
+                   desc="In Title Case: Download context menu: Pause download">
+            &amp;Pause
+          </message>
+          <message name="IDS_DOWNLOAD_MENU_RESUME_ITEM"
+                   desc="In Title Case: Download context menu: Resume download">
+            &amp;Resume
+          </message>
+          <message name="IDS_DOWNLOAD_MENU_DISCARD"
+                   desc="In Title Case: Download context menu: Discard malicious download">
+            &amp;Discard
+          </message>
+          <message name="IDS_DOWNLOAD_MENU_KEEP"
+                   desc="In Title Case: Download context menu: Keep malicious download">
+            &amp;Keep
+          </message>
+          <message name="IDS_DOWNLOAD_MENU_LEARN_MORE_SCANNING"
+                   desc="In Title Case: Download context menu: Show information about download scanning">
+            &amp;Learn More
+          </message>
+          <message name="IDS_DOWNLOAD_MENU_LEARN_MORE_INTERRUPTED"
+                   desc="In Title Case: Download context menu: Show information about interrupted downloads">
+            &amp;More Information
+          </message>
+        </if>  <!-- not use_titlecase -->
+        <if expr="is_win">
+          <message name="IDS_DOWNLOAD_MENU_ALWAYS_OPEN_PDF_IN_READER"
+                   desc="Download context menu: Open when download using Adobe Reader">
+            Always open in Adobe Reader
+          </message>
+        </if>
+      </if>
+
+      <!-- Remove in-progress downloads confirmation dialog -->
+      <message name="IDS_SINGLE_DOWNLOAD_REMOVE_CONFIRM_TITLE" desc="Title of the dialog asking for user confirmation to close the browser when one download is in progress.">
+        Download in progress
+      </message>
+      <message name="IDS_MULTIPLE_DOWNLOADS_REMOVE_CONFIRM_TITLE" desc="Title of the dialog asking for user confirmation to close the browser when multiple downloads are in progress.">
+        Downloads in progress
+      </message>
+      <message name="IDS_SINGLE_INCOGNITO_DOWNLOAD_REMOVE_CONFIRM_TITLE" desc="Title of the dialog asking for user confirmation to close the last incognito window when one incognito download is in progress.">
+        Incognito download in progress
+      </message>
+      <message name="IDS_MULTIPLE_INCOGNITO_DOWNLOADS_REMOVE_CONFIRM_TITLE" desc="Title of the dialog asking for user confirmation to close the last incognito window when multiple incognito downloads are in progress.">
+        Incognito downloads in progress
+      </message>
+      <message name="IDS_SINGLE_INCOGNITO_DOWNLOAD_REMOVE_CONFIRM_EXPLANATION" desc="Explanation of the dialog asking for user confirmation to close the last incognito window when one incognito download is in progress.">
+        An incognito download is currently in progress. Do you want to exit incognito mode and cancel the download?
+      </message>
+      <message name="IDS_MULTIPLE_INCOGNITO_DOWNLOADS_REMOVE_CONFIRM_EXPLANATION" desc="Explanation of the dialog asking for user confirmation to close the last incognito window when multiple incognito downloads are in progress.">
+        Incognito downloads are currently in progress. Do you want to exit incognito mode and cancel the downloads?
+      </message>
+      <message name="IDS_INCOGNITO_DOWNLOAD_REMOVE_CONFIRM_OK_BUTTON_LABEL" desc="Button text for OKing to close the last incognito window when one or more incognito downloads are in progress.">
+        Yes, exit incognito mode
+      </message>
+      <message name="IDS_DOWNLOAD_REMOVE_CONFIRM_CANCEL_BUTTON_LABEL" desc="Button text for canceling the closing of the browser or the last incognito window when one or more downloads are in progress.">
+        No
+      </message>
+
+      <!-- Dialog that asks whether user wants to participate in Safe Browsing Extended Reporting -->
+      <message name="IDS_FEEDBACK_SERVICE_DIALOG_OK_BUTTON_LABEL" desc="Button that elects to upload suspected malicious files for analysis">
+        Yes, I want to help
+      </message>
+      <message name="IDS_FEEDBACK_SERVICE_DIALOG_CANCEL_BUTTON_LABEL" desc="Button that elects not to upload suspected malicious files for analysis (default button)">
+        No, thanks
+      </message>
+
+      <!-- Bookmark app bubble -->
+      <message name="IDS_BOOKMARK_APP_BUBBLE_TITLE" desc="Title of the bubble to add a bookmark app.">
+        Add shortcut?
+      </message>
+
+      <message name="IDS_BOOKMARK_APP_BUBBLE_OPEN_AS_TAB" desc="Checkbox text for opening the bookmark app as a tab.">
+        Open as tab
+      </message>
+
+      <!-- Quit all apps confirmation dialog -->
+      <if expr="is_macosx">
+        <message name="IDS_QUIT_WITH_APPS_NOTIFICATION_DISPLAY_SOURCE" desc="Display source for the notification when quitting with apps open.">
+          Quit
+        </message>
+        <message name="IDS_QUIT_WITH_APPS_EXPLANATION" desc="Text displayed in a notification explaining that Chrome will continue running in the background as long as there are Chrome Apps open.">
+          Chrome will keep running while Chrome Apps are open.
+        </message>
+        <message name="IDS_QUIT_WITH_APPS_QUIT_LABEL" desc="Button text to quit all running Chrome apps.">
+          Quit all Chrome Apps
+        </message>
+        <message name="IDS_QUIT_WITH_APPS_SUPPRESSION_LABEL" desc="Button text to prevent a notification from showing in future.">
+          Don't show this again
+        </message>
+      </if>
+
+      <!-- "Create application shortcuts" menu item -->
+      <if expr="not use_titlecase">
+        <message name="IDS_CREATE_SHORTCUTS" desc="Default installation menu label">
+          Create application &amp;shortcuts...
+        </message>
+        <message name="IDS_CREATE_HOSTED_APP" desc="Button text for creating a hosted app from the current website">
+          Add shortcut to this website...
+        </message>
+      </if>
+      <if expr="use_titlecase">
+        <message name="IDS_CREATE_SHORTCUTS" desc="In Title Case: Default installation menu label">
+          Create Application &amp;Shortcuts...
+        </message>
+        <message name="IDS_CREATE_HOSTED_APP" desc="In Title Case: Button text for creating a hosted app from the current website">
+          Add Shortcut to this Website...
+        </message>
+      </if>
+
+      <!-- "Application Information" dialog -->
+      <if expr="not use_titlecase">
+        <message name="IDS_APPLICATION_INFO_WEB_STORE_LINK" desc="Text for the link that opens the app in the Web Store..">
+          View in store
+        </message>
+        <message name="IDS_APPLICATION_INFO_UNINSTALL_BUTTON_TEXT" desc="Text for the button that removes (uninstalls) the app.">
+          Remove
+        </message>
+        <message name="IDS_APPLICATION_INFO_LICENSES_BUTTON_TEXT" desc="Text for the button that displays the licenses for the app.">
+          Licenses
+        </message>
+        <message name="IDS_APPLICATION_INFO_DESCRIPTION_TITLE" desc="Title of the first section in the dialog, which displays a high-level overview of the app (the app's description).">
+          Overview
+        </message>
+        <message name="IDS_APPLICATION_INFO_DETAILS_TITLE" desc="Title of the section in the dialog which displays the app's details (such as the version, size, etc).">
+          Details
+        </message>
+        <message name="IDS_APPLICATION_INFO_SIZE_LABEL" desc="Text displayed before the app's size on disk in the details section of the dialog.">
+          Size:
+        </message>
+        <message name="IDS_APPLICATION_INFO_SIZE_LOADING_LABEL" desc="Text displayed instead of the app's size on disk in the details section of the dialog while the size is being calculated.">
+          Calculating...
+        </message>
+        <message name="IDS_APPLICATION_INFO_VERSION_LABEL" desc="Text displayed before the app's version in the details section of the dialog.">
+          Version:
+        </message>
+        <message name="IDS_APPLICATION_INFO_VERSION_BUILT_IN_LABEL" desc="Text displayed in the app's version field to show that it is a built-in app (such as the Chrome Web Store, or the Files app).">
+          Built-in
+        </message>
+        <message name="IDS_APPLICATION_INFO_INSTALLED_LABEL" desc="Text displayed before the app's installed date in the details section of the dialog.">
+          Installed:
+        </message>
+        <message name="IDS_APPLICATION_INFO_LAST_RUN_LABEL" desc="Text displayed before the day the app was last run in the details section of the dialog.">
+          Last run:
+        </message>
+        <message name="IDS_APPLICATION_INFO_LAST_RUN_NEVER_LABEL" desc="Text displayed in the 'Last Run' field of the details section of the dialog to indicate that the app has never been run.">
+          Never
+        </message>
+        <message name="IDS_APPLICATION_INFO_ACTIVE_PERMISSIONS_TEXT" desc="Heading above the current permissions for the app (the permissions that the user has granted the app upon installation).">
+          Permissions
+        </message>
+        <message name="IDS_APPLICATION_INFO_RETAINED_FILE_PERMISSIONS_TEXT" desc="Heading above the current retained files for the app, which are files the app has permanent access to (the app can read and write to these files).">
+          Files
+        </message>
+        <message name="IDS_APPLICATION_INFO_REVOKE_RETAINED_FILE_PERMISSIONS_BUTTON_TEXT" desc="Text displayed in the button to remove the app's file permissions. After pressing this button, the app no longer has access to the files.">
+          Revoke file access
+        </message>
+        <message name="IDS_APPLICATION_INFO_CREATE_SHORTCUTS_BUTTON_TEXT" desc="Text for the button that opens the dialog to create shortcuts for the app.">
+          Create shortcuts
+        </message>
+      </if>
+      <if expr="use_titlecase">
+        <message name="IDS_APPLICATION_INFO_WEB_STORE_LINK" desc="In Title Case: Text for the link that opens the app in the Web Store..">
+          View in Store
+        </message>
+        <message name="IDS_APPLICATION_INFO_UNINSTALL_BUTTON_TEXT" desc="In Title Case: Text for the button that removes (uninstalls) the app.">
+          Remove
+        </message>
+        <message name="IDS_APPLICATION_INFO_LICENSES_BUTTON_TEXT" desc="In Title Case: Text for the button that displays the licenses for the app.">
+          Licenses
+        </message>
+        <message name="IDS_APPLICATION_INFO_DESCRIPTION_TITLE" desc="In Title Case: Title of the first section in the dialog, which displays a high-level overview of the app (the app's description).">
+          Overview
+        </message>
+        <message name="IDS_APPLICATION_INFO_DETAILS_TITLE" desc="In Title Case: Title of the section in the dialog which displays the app's details (such as the version, size, etc).">
+          Details
+        </message>
+        <message name="IDS_APPLICATION_INFO_SIZE_LABEL" desc="In Title Case: Text displayed before the app's size on disk in the details section of the dialog.">
+          Size:
+        </message>
+        <message name="IDS_APPLICATION_INFO_SIZE_LOADING_LABEL" desc="Text displayed instead of the app's size on disk in the details section of the dialog while the size is being calculated.">
+          Calculating...
+        </message>
+        <message name="IDS_APPLICATION_INFO_VERSION_LABEL" desc="In Title Case: Text displayed before the app's version in the details section of the dialog.">
+          Version:
+        </message>
+        <message name="IDS_APPLICATION_INFO_VERSION_BUILT_IN_LABEL" desc="In Title Case: Text displayed in the app's version field to show that it is a built-in app (such as the Chrome Web Store, or the Files app).">
+          Built-In
+        </message>
+        <message name="IDS_APPLICATION_INFO_INSTALLED_LABEL" desc="In Title Case: Text displayed before the app's installed date in the details section of the dialog.">
+          Installed:
+        </message>
+        <message name="IDS_APPLICATION_INFO_LAST_RUN_LABEL" desc="In Title Case: Text displayed before the day the app was last run in the details section of the dialog.">
+          Last Run:
+        </message>
+        <message name="IDS_APPLICATION_INFO_LAST_RUN_NEVER_LABEL" desc="In Title Case: Text displayed in the 'Last Run' field of the details section of the dialog to indicate that the app has never been run.">
+          Never
+        </message>
+        <message name="IDS_APPLICATION_INFO_ACTIVE_PERMISSIONS_TEXT" desc="In Title Case: Heading above the current permissions for the app (the permissions that the user has granted the app upon installation).">
+          Permissions
+        </message>
+        <message name="IDS_APPLICATION_INFO_RETAINED_FILE_PERMISSIONS_TEXT" desc="In Title Case: Heading above the current retained files for the app, which are files the app has permanent access to (the app can read and write to these files).">
+          Files
+        </message>
+        <message name="IDS_APPLICATION_INFO_REVOKE_RETAINED_FILE_PERMISSIONS_BUTTON_TEXT" desc="In Title Case: Text displayed in the button to remove the app's file permissions. After pressing this button, the app no longer has access to the files.">
+          Revoke File Access
+        </message>
+        <message name="IDS_APPLICATION_INFO_CREATE_SHORTCUTS_BUTTON_TEXT" desc="In Title Case: Text for the button that opens the dialog to create shortcuts for the app.">
+          Create Shortcuts
+        </message>
+      </if>
+      <message name="IDS_APPLICATION_INFO_NO_PERMISSIONS_TEXT" desc="Text displayed in the Permissions area of the dialog if the app has no permissions.">
+        This app requires no special permissions.
+      </message>
+
+      <!-- "Create application shortcuts" dialog -->
+      <if expr="not use_titlecase">
+        <message name="IDS_CREATE_SHORTCUTS_TITLE" desc="Title of the dialog to create application shortcuts for current page.">
+          Create application shortcuts
+        </message>
+      </if>
+      <if expr="use_titlecase">
+        <message name="IDS_CREATE_SHORTCUTS_TITLE" desc="In Title Case: title of the dialog to create application shortcuts for current page.">
+          Create Application Shortcuts
+        </message>
+      </if>
+      <message name="IDS_CREATE_SHORTCUTS_LABEL" desc="Contents of the main label in the create application shortcuts dialog explaining the dialog.">
+        Create application shortcuts in the following places:
+      </message>
+      <message name="IDS_CREATE_SHORTCUTS_DESKTOP_CHKBOX" desc="Label of the checkbox to create an application shortcut on the desktop.">
+        Desktop
+      </message>
+      <message name="IDS_CREATE_SHORTCUTS_MENU_CHKBOX" desc="Label of the checkbox to create an application shortcut in the system's applications menu.">
+        Applications menu
+      </message>
+      <if expr="is_macosx">
+        <message name="IDS_CREATE_SHORTCUTS_APP_FOLDER_CHKBOX" desc="Label of the checkbox to create an application shortcut in the system's applications folder.">
+          Applications folder
+        </message>
+      </if>
+      <if expr="is_win">
+        <message name="IDS_CREATE_SHORTCUTS_START_MENU_CHKBOX" desc="Label of the checkbox to create an application shortcut in the start menu.">
+          Start menu
+        </message>
+        <message name="IDS_CREATE_SHORTCUTS_QUICK_LAUNCH_BAR_CHKBOX" desc="Label of the checkbox to create an application shortcut in quick launch bar.">
+          Quick launch bar
+        </message>
+        <message name="IDS_PIN_TO_TASKBAR_CHKBOX" desc="Label of the checkbox to pin an application shortcut to taskbar.">
+          Pin to Taskbar
+        </message>
+      </if>
+      <message name="IDS_CREATE_SHORTCUTS_COMMIT" desc="Title of the button to actually create the shortcuts.">
+        Create
+      </message>
+
+      <!-- Content blocking strings -->
+      <message name="IDS_AUTOMATIC_DOWNLOADS_TAB_LABEL" desc="Header for multiple automatic downloads page on Content Settings dialog">
+        Automatic Downloads
+      </message>
+      <message name="IDS_AUTOMATIC_DOWNLOADS_ALLOW_RADIO" desc="A radio button in Content Settings dialog to allow all sites to download multiple files automatically.">
+        Allow all sites to download multiple files automatically
+      </message>
+      <message name="IDS_AUTOMATIC_DOWNLOADS_ASK_RADIO" desc="A radio button in Content Settings dialog to configure multiple automatic downloads per-site.">
+        Ask when a site tries to download files automatically after the first file (recommended)
+      </message>
+      <message name="IDS_AUTOMATIC_DOWNLOADS_BLOCK_RADIO" desc="A radio button in Content Settings dialog to deny all sites to download multiple files automatically.">
+        Do not allow any site to download multiple files automatically
+      </message>
+      <message name="IDS_BLOCKED_DOWNLOAD_NO_ACTION" desc="Radio button to keep blocking automatic downloads">
+        Continue blocking automatic downloads of multiple files
+      </message>
+      <message name="IDS_BLOCKED_DOWNLOAD_UNBLOCK" desc="Radio button to unblock automatic downloads">
+        Always allow <ph name="HOST">$1<ex>example.com</ex></ph> to download multiple files
+      </message>
+      <message name="IDS_BLOCKED_DOWNLOADS_LINK" desc="Link to downloads section of content blocking management dialog, displayed in bubble when a page tries to download files automatically.">
+        Manage download settings...
+      </message>
+      <message name="IDS_BLOCKED_DOWNLOAD_TITLE" desc="Title for the page action when an automatic download was blocked">
+        This site attempted to download multiple files automatically.
+      </message>
+      <message name="IDS_BLOCKED_DOWNLOADS_EXPLANATION" desc="Explanatory animated text that appears (and then disappears) in the address line when a download is blocked">
+        Download blocked
+      </message>
+      <message name="IDS_ALLOWED_DOWNLOAD_TITLE" desc="Title for the page action when automatic downloads were allowed">
+        This site downloaded multiple files automatically.
+      </message>
+      <message name="IDS_ALLOWED_DOWNLOAD_NO_ACTION" desc="Radio button to keep allowing automatic downloads">
+        Continue allowing automatic downloads of multiple files
+      </message>
+      <message name="IDS_ALLOWED_DOWNLOAD_BLOCK" desc="Radio button to block automatic downloads">
+        Always block multiple automatic downloads on <ph name="HOST">$1<ex>example.com</ex></ph>
+      </message>
+
+      <message name="IDS_BLOCKED_COOKIES_TITLE" desc="Tooltip and bubble info header text when a page is not allowed to write cookies or other site data.">
+        This page was prevented from setting cookies.
+      </message>
+      <message name="IDS_ACCESSED_COOKIES_TITLE" desc="Tooltip and bubble info header text when a page wrote cookies or other site data.">
+        This page set cookies.
+      </message>
+      <message name="IDS_BLOCKED_COOKIES_LINK" desc="Link to cookie section of content blocking management dialog, displayed in bubble when a page tries to write cookies or other site data.">
+        Manage cookie blocking...
+      </message>
+      <message name="IDS_BLOCKED_COOKIES_INFO" desc="Info link to a dialog showing the blocked/allowed cookies, displayed in bubble when a page tries to write cookies or other site data.">
+        Show cookies and other site data...
+      </message>
+      <message name="IDS_BLOCKED_IMAGES_TITLE" desc="Tooltip and bubble info header text when a page is not allowed to display images.">
+        Images were blocked on this page.
+      </message>
+      <message name="IDS_BLOCKED_COOKIES_UNBLOCK" desc="Radio button choice to unblock a site from setting cookies, displayed in bubble when a page tries to set cookies.">
+        Always allow <ph name="HOST">$1<ex>mail.google.com</ex></ph> to set cookies
+      </message>
+      <message name="IDS_BLOCKED_IMAGES_UNBLOCK" desc="Radio button choice to unblock a site from showing images, displayed in bubble when a page tries to display images.">
+        Always allow <ph name="HOST">$1<ex>mail.google.com</ex></ph> to show images
+      </message>
+      <message name="IDS_BLOCKED_COOKIES_NO_ACTION" desc="Radio button choice to continue blocking a site from setting cookies, displayed in bubble when a page tries to set cookies.">
+        Continue blocking cookies
+      </message>
+      <message name="IDS_BLOCKED_IMAGES_NO_ACTION" desc="Radio button choice to continue blocking a site from showing images, displayed in bubble when a page tries to display images.">
+        Continue blocking images
+      </message>
+      <message name="IDS_BLOCKED_IMAGES_LINK" desc="Link to images section of content blocking management dialog, displayed in bubble when a page tries to display images.">
+        Manage image blocking...
+      </message>
+      <message name="IDS_BLOCKED_POPUPS_TOOLTIP" desc="Tooltip text when a page is not allowed to display popups.">
+        Pop-ups were blocked on this page.
+      </message>
+      <message name="IDS_BLOCKED_POPUPS_TITLE" desc="Bubble info header text when a page is not allowed to display popups.  This appears above a list of popup titles.">
+        The following pop-ups were blocked on this page:
+      </message>
+      <message name="IDS_BLOCKED_POPUPS_UNBLOCK" desc="Radio button choice to unblock a site from showing popups, displayed in bubble when a page tries to display popups.">
+        Always allow pop-ups from <ph name="HOST">$1<ex>mail.google.com</ex></ph>
+      </message>
+      <message name="IDS_BLOCKED_POPUPS_NO_ACTION" desc="Radio button choice to continue blocking a site from showing popups, displayed in bubble when a page tries to display popups.">
+        Continue blocking pop-ups
+      </message>
+      <message name="IDS_BLOCKED_POPUPS_LINK" desc="Link to popups section of content blocking management dialog, displayed in bubble when a page tries to display popups.">
+        Manage pop-up blocking...
+      </message>
+      <message name="IDS_BLOCKED_MEDIASTREAM_MIC_AND_CAMERA_ALLOW" desc="Radio button choice to allow a site to access microphone and camera, displayed in bubble when a page tries to access microphone and camera.">
+        Always allow <ph name="HOST">$1<ex>mail.google.com</ex></ph> to access your camera and microphone
+      </message>
+      <message name="IDS_BLOCKED_MEDIASTREAM_MIC_ALLOW" desc="Radio button choice to allow a site to access microphone, displayed in bubble when a page tries to access microphone.">
+        Always allow <ph name="HOST">$1<ex>mail.google.com</ex></ph> to access your microphone
+      </message>
+      <message name="IDS_BLOCKED_MEDIASTREAM_CAMERA_ALLOW" desc="Radio button choice to allow a site to access camera, displayed in bubble when a page tries to access camera.">
+        Always allow <ph name="HOST">$1<ex>mail.google.com</ex></ph> to access your camera
+      </message>
+      <message name="IDS_BLOCKED_MEDIASTREAM_MIC_AND_CAMERA_ASK" desc="Radio button choice to ask the user for permission when a site tries to access microphone and camera, displayed in bubble when a page was blocked from accessing microphone and camera.">
+        Ask if <ph name="HOST">$1<ex>mail.google.com</ex></ph> wants to access your camera and microphone
+      </message>
+      <message name="IDS_BLOCKED_MEDIASTREAM_MIC_ASK" desc="Radio button choice to ask the user for permission when a site tries to access microphone, displayed in bubble when a page was blocked from accessing microphone.">
+        Ask if <ph name="HOST">$1<ex>mail.google.com</ex></ph> wants to access your microphone
+      </message>
+      <message name="IDS_BLOCKED_MEDIASTREAM_CAMERA_ASK" desc="Radio button choice to ask the user for permission when a site tries to access camera, displayed in bubble when a page was blocked from accessing camera.">
+        Ask if <ph name="HOST">$1<ex>mail.google.com</ex></ph> wants to access your camera
+      </message>
+      <message name="IDS_ALLOWED_MEDIASTREAM_MIC_AND_CAMERA_BLOCK" desc="Radio button choice to block a site to access microphone and camera, displayed in bubble when a page is accessing microphone and camera.">
+        Always block camera and microphone access
+      </message>
+      <message name="IDS_ALLOWED_MEDIASTREAM_MIC_BLOCK" desc="Radio button choice to block a site to access microphone, displayed in bubble when a page is accessing microphone.">
+        Always block microphone access
+      </message>
+      <message name="IDS_ALLOWED_MEDIASTREAM_CAMERA_BLOCK" desc="Radio button choice to block a site to access camera, displayed in bubble when a page is accessing camera.">
+        Always block camera access
+      </message>
+      <message name="IDS_BLOCKED_MEDIASTREAM_MIC_AND_CAMERA_NO_ACTION" desc="Radio button choice to block a site to access microphone and camera, displayed in bubble when a page was blocked from accesssing microphone and camera.">
+        Continue blocking camera and microphone access
+      </message>
+      <message name="IDS_BLOCKED_MEDIASTREAM_MIC_NO_ACTION" desc="Radio button choice to block a site to access microphone, displayed in bubble when a page was blocked from accesssing microphone.">
+        Continue blocking microphone access
+      </message>
+      <message name="IDS_BLOCKED_MEDIASTREAM_CAMERA_NO_ACTION" desc="Radio button choice to block a site to access camera, displayed in bubble when a page was blocked from accesssing camera.">
+        Continue blocking camera access
+      </message>
+      <message name="IDS_ALLOWED_MEDIASTREAM_MIC_AND_CAMERA_NO_ACTION" desc="Radio button choice to allow a site to access microphone and camera, displayed in bubble when a page is accessing microphone and camera.">
+        Continue allowing <ph name="HOST">$1<ex>mail.google.com</ex></ph> to access your camera and microphone
+      </message>
+      <message name="IDS_ALLOWED_MEDIASTREAM_MIC_NO_ACTION" desc="Radio button choice to allow a site to access microphone, displayed in bubble when a page is accessing microphone.">
+        Continue allowing <ph name="HOST">$1<ex>mail.google.com</ex></ph> to access your microphone
+      </message>
+      <message name="IDS_ALLOWED_MEDIASTREAM_CAMERA_NO_ACTION" desc="Radio button choice to allow a site to access camera, displayed in bubble when a page is accessing camera.">
+        Continue allowing <ph name="HOST">$1<ex>mail.google.com</ex></ph> to access your camera
+      </message>
+      <message name="IDS_BLOCKED_POPUPS_EXPLANATORY_TEXT" desc="Explanatory animated text that appears (and then disappears) in the address line when popup is blocked">
+        Pop-up blocked
+      </message>
+      <message name="IDS_BLOCKED_PLUGIN_EXPLANATORY_TEXT" desc="Explanatory animated text that appears (and then disappears) in the address line when plugin is blocked">
+        Plug-in blocked
+      </message>
+      <message name="IDS_BLOCKED_JAVASCRIPT_TITLE" desc="Tooltip and bubble info header text when a page is not allowed to run JavaScript.">
+        JavaScript was blocked on this page.
+      </message>
+      <message name="IDS_BLOCKED_JAVASCRIPT_UNBLOCK" desc="Radio button choice to unblock a site from running JavaScript, displayed in bubble when a page tries to run JavaScript.">
+        Always allow JavaScript on <ph name="HOST">$1<ex>mail.google.com</ex></ph>
+      </message>
+      <message name="IDS_BLOCKED_JAVASCRIPT_NO_ACTION" desc="Radio button choice to continue blocking a site from running JavaScript, displayed in bubble when a page tries to run JavaScript.">
+        Continue blocking JavaScript
+      </message>
+      <message name="IDS_BLOCKED_JAVASCRIPT_LINK" desc="Link to JavaScript section of content blocking management dialog, displayed in bubble when a page tries to run JavaScript.">
+        Manage JavaScript blocking...
+      </message>
+      <if expr="is_macosx">
+        <message name="IDS_BLOCKED_PLUGINS_TITLE" desc="Bubble info header text when a page is not allowed to display plug-ins.">
+          The following plug-ins were blocked on this page:
+        </message>
+      </if>
+      <message name="IDS_BLOCKED_PLUGINS_MESSAGE" desc="Tooltip and message when a page is not allowed to display plug-ins.">
+        Plug-ins were blocked on this page.
+      </message>
+      <message name="IDS_BLOCKED_PLUGINS_UNBLOCK_ALL" desc="Radio button choice to unblock a site from using plug-ins, displayed in bubble when a page tries to use plug-ins.">
+        Always allow plug-ins on <ph name="HOST">$1<ex>mail.google.com</ex></ph>
+      </message>
+      <if expr="is_macosx">
+        <message name="IDS_BLOCKED_PLUGINS_UNBLOCK" desc="Radio button choice to unblock a site from using *a specific set* of plug-ins, displayed in bubble when a page tries to use plug-ins.">
+          Always allow these plug-ins on <ph name="HOST">$1<ex>mail.google.com</ex></ph>
+        </message>
+      </if>
+      <message name="IDS_BLOCKED_PLUGINS_NO_ACTION" desc="Radio button choice to continue blocking a site from using plug-ins, displayed in bubble when a page tries to use plug-ins.">
+        Continue blocking plug-ins
+      </message>
+      <message name="IDS_BLOCKED_PLUGINS_LINK" desc="Link to plug-ins section of content blocking management dialog, displayed in bubble when a page tries to display plug-ins.">
+        Manage plug-in blocking...
+      </message>
+      <message name="IDS_BLOCKED_PLUGINS_LOAD_ALL" desc="Button to load all blocked plugins on a page, displayed in bubble when a page tries to display plug-ins.">
+        Run all plug-ins this time
+      </message>
+
+      <!-- Certificate error strings -->
+      <message name="IDS_CERT_ERROR_COMMON_NAME_INVALID_DETAILS" desc="Details for an unsafe common name in an X509 certificate">
+        This server could not prove that it is <ph name="DOMAIN">&lt;strong&gt;$1<ex>paypal.com</ex>&lt;/strong&gt;</ph>; its security certificate is from <ph name="DOMAIN2">&lt;strong&gt;$2<ex>fakepaypal.com</ex>&lt;/strong&gt;</ph>. This may be caused by a misconfiguration or an attacker intercepting your connection.
+      </message>
+      <message name="IDS_CERT_ERROR_COMMON_NAME_INVALID_DESCRIPTION" desc="Description for an unsafe common name in an X509 certificate">
+        Server's certificate does not match the URL.
+      </message>
+
+      <message name="IDS_CERT_ERROR_EXPIRED_DETAILS" desc="Details for an expired X509 certificate">
+        This server could not prove that it is <ph name="DOMAIN">&lt;strong&gt;$1<ex>paypal.com</ex>&lt;/strong&gt;</ph>; its security certificate expired <ph name="DAYS">$2<ex>3</ex></ph> day(s) ago. This may be caused by a misconfiguration or an attacker intercepting your connection. Your computer's clock is currently set to <ph name="CURRENT_TIME">$3<ex>July 18, 2012</ex></ph>. Does that look right? If not, you should correct your system's clock and then refresh this page.
+      </message>
+      <message name="IDS_CERT_ERROR_EXPIRED_DESCRIPTION" desc="Description for an expired X509 certificate">
+        Server's certificate has expired.
+      </message>
+
+      <message name="IDS_CERT_ERROR_NOT_YET_VALID_DETAILS" desc="Details for an X509 certificate that is not yet valid">
+        This server could not prove that it is <ph name="DOMAIN">&lt;strong&gt;$1<ex>paypal.com</ex>&lt;/strong&gt;</ph>; its security certificate is supposedly from <ph name="DAYS">$2<ex>3</ex></ph> day(s) in the future. This may be caused by a misconfiguration or an attacker intercepting your connection.
+      </message>
+      <message name="IDS_CERT_ERROR_NOT_YET_VALID_DESCRIPTION" desc="Description for an X509 certificate that is not yet valid">
+        Server's certificate is not yet valid.
+      </message>
+
+      <message name="IDS_CERT_ERROR_CHAIN_EXPIRED_DETAILS" desc="Details for an expired root or intermediate cert in chain">
+        This server could not prove that it is <ph name="DOMAIN">&lt;strong&gt;$1<ex>paypal.com</ex>&lt;/strong&gt;</ph>; its security certificate expired. This may be caused by a misconfiguration or an attacker intercepting your connection. Your computer's clock is currently set to <ph name="CURRENT_TIME">$3<ex>July 18, 2012</ex></ph>. Does that look right? If not, you should correct your system's clock and then refresh this page.
+      </message>
+      <message name="IDS_CERT_ERROR_CHAIN_EXPIRED_DESCRIPTION" desc="Description for an expired intermediate/root certificate in chain">
+        A root or intermediate certificate has expired.
+      </message>
+
+      <message name="IDS_CERT_ERROR_AUTHORITY_INVALID_DESCRIPTION" desc="Description for an X509 certificate with an invalid authority">
+        Server's certificate is not trusted.
+      </message>
+
+      <message name="IDS_CERT_ERROR_CONTAINS_ERRORS_DETAILS" desc="Details of the error page for an X509 certificate that contains errors">
+        This server could not prove that it is <ph name="DOMAIN">&lt;strong&gt;$1<ex>paypal.com</ex>&lt;/strong&gt;</ph>; its security certificate contains errors. This may be caused by a misconfiguration or an attacker intercepting your connection.
+      </message>
+      <message name="IDS_CERT_ERROR_CONTAINS_ERRORS_DESCRIPTION" desc="Description of the error page for an X509 certificate that contains errors">
+        Server's certificate contains errors.
+      </message>
+
+      <message name="IDS_CERT_ERROR_NO_REVOCATION_MECHANISM_DETAILS" desc="Details for not finding a revocation mechanism in an X509 certificate">
+        This server could not prove that it is <ph name="DOMAIN">&lt;strong&gt;$1<ex>paypal.com</ex>&lt;/strong&gt;</ph>; its security certificate might be revoked. This may be caused by a misconfiguration or an attacker intercepting your connection.
+      </message>
+      <message name="IDS_CERT_ERROR_NO_REVOCATION_MECHANISM_DESCRIPTION" desc="Description for not finding a revocation mechanism in an X509 certificate">
+        No revocation mechanism found.
+      </message>
+
+      <message name="IDS_CERT_ERROR_REVOKED_CERT_DETAILS" desc="Details of the error page for a revoked certificate">
+        You attempted to reach <ph name="DOMAIN">&lt;strong&gt;$1<ex>paypal.com</ex>&lt;/strong&gt;</ph>, but the certificate that the server presented has been revoked by its issuer. This means that the security credentials the server presented absolutely should not be trusted. You may be communicating with an attacker.
+      </message>
+      <message name="IDS_CERT_ERROR_REVOKED_CERT_DESCRIPTION" desc="Description of the error page for a revoked certificate">
+        Server's certificate has been revoked.
+      </message>
+
+      <message name="IDS_CERT_ERROR_INVALID_CERT_DETAILS" desc="Details of the error page for an X509 certificate that is invalid">
+        You attempted to reach <ph name="DOMAIN">&lt;strong&gt;$1<ex>paypal.com</ex>&lt;/strong&gt;</ph>, but the server presented an invalid certificate.
+      </message>
+      <message name="IDS_CERT_ERROR_INVALID_CERT_DESCRIPTION" desc="Description of the error page for an X509 certificate that is invalid">
+        Server's certificate is invalid.
+      </message>
+
+      <message name="IDS_CERT_ERROR_WEAK_SIGNATURE_ALGORITHM_DETAILS" desc="Details of the error page for a certificate signed using a weak signature algorithm">
+        You attempted to reach <ph name="DOMAIN">&lt;strong&gt;$1<ex>paypal.com</ex>&lt;/strong&gt;</ph>, but the server presented a certificate signed using a weak signature algorithm. This means that the security credentials the server presented could have been forged, and the server may not be the server you expected (you may be communicating with an attacker).
+      </message>
+      <message name="IDS_CERT_ERROR_WEAK_SIGNATURE_ALGORITHM_DESCRIPTION" desc="Description of the error page for a certificate signed using a weak signature algorithm">
+        Server's certificate is signed using a weak signature algorithm.
+      </message>
+
+      <message name="IDS_CERT_ERROR_WEAK_KEY_DETAILS" desc="Details of the error page for a certificate containing a weak key">
+        You attempted to reach <ph name="DOMAIN">&lt;strong&gt;$1<ex>paypal.com</ex>&lt;/strong&gt;</ph>, but the server presented a certificate containing a weak key. An attacker could have broken the private key, and the server may not be the server you expected (you may be communicating with an attacker).
+      </message>
+      <message name="IDS_CERT_ERROR_WEAK_KEY_DESCRIPTION" desc="Description of the error page for a certificate containing a weak key">
+        The server certificate contains a weak cryptographic key.
+      </message>
+
+      <message name="IDS_CERT_ERROR_NAME_CONSTRAINT_VIOLATION_DETAILS" desc="Details of the error page for a certificate that contains a name outside of its scope">
+        This server could not prove that it is <ph name="DOMAIN">&lt;strong&gt;$1<ex>paypal.com</ex>&lt;/strong&gt;</ph>; its security certificate might have been issued fraudulently. This may be caused by a misconfiguration or an attacker intercepting your connection.
+      </message>
+      <message name="IDS_CERT_ERROR_NAME_CONSTRAINT_VIOLATION_DESCRIPTION" desc="Description of the error page for a certificate that contains a name outside of its scope">
+        Server's certificate violates name constraints.
+      </message>
+
+      <message name="IDS_CERT_ERROR_UNKNOWN_ERROR_DETAILS" desc="Details of the error page for an unknown ssl error">
+        An unknown error has occurred.
+      </message>
+      <message name="IDS_CERT_ERROR_UNKNOWN_ERROR_DESCRIPTION" desc="Description of the error page for an unknown ssl error">
+        Unknown server certificate error.
+      </message>
+
+      <!-- Administrator-provided certificate notifications -->
+      <message name="IDS_CERT_POLICY_PROVIDED_CERT_HEADER" desc="Text that is displayed in the header of the Website Settings popup when using an administrator-provided certificate">
+        Using an administrator-provided certificate
+      </message>
+      <message name="IDS_CERT_POLICY_PROVIDED_CERT_MESSAGE" desc="Text that is displayed in the Website Settings popup when using an administrator-provided certificate">
+        You have accessed content using an administrator-provided certificate. Data you provide to <ph name="DOMAIN">$1<ex>www.google.com</ex></ph> can be intercepted by your administrator.
+      </message>
+
+      <!-- Win certificate selector dialog strings.  -->
+      <if expr="toolkit_views">
+        <message name="IDS_CERT_SELECTOR_TABLE_CERT_FORMAT" desc="Format for a certificate row in the certificate selector table.">
+          <ph name="SUBJECT">$1<ex>FOAF ME Cert http://foaf.me/test</ex></ph> (<ph name="ISSUER">$2<ex>FOAF.ME</ex></ph>)
+        </message>
+      </if>
+
+      <!-- Certificate viewer dialog strings that are shared across all the platforms -->
+      <message name="IDS_CERT_INFO_SUBJECT_GROUP" desc="The label of the Issued To group in the general page of the certificate info dialog">
+        Issued To
+      </message>
+      <message name="IDS_CERT_INFO_ISSUER_GROUP" desc="The label of the Issued By group in the general page of the certificate info dialog">
+        Issued By
+      </message>
+      <message name="IDS_CERT_INFO_COMMON_NAME_LABEL" desc="The label of the Common Name field in the general page of the certificate info dialog.  (CN) is the name of this field in the standard">
+        Common Name (CN)
+      </message>
+      <message name="IDS_CERT_INFO_ORGANIZATION_LABEL" desc="The label of the Organization field in the general page of the certificate info dialog.  (O) is the name of this field in the standard">
+        Organization (O)
+      </message>
+      <message name="IDS_CERT_INFO_ORGANIZATIONAL_UNIT_LABEL" desc="The label of the Organizational Unit field in the general page of the certificate info dialog.  (OU) is the name of this field in the standard">
+        Organizational Unit (OU)
+      </message>
+      <message name="IDS_CERT_INFO_SERIAL_NUMBER_LABEL" desc="The label of the Serial Number field in the general page of the certificate info dialog.">
+        Serial Number
+      </message>
+      <message name="IDS_CERT_INFO_VALIDITY_GROUP" desc="The label of the group showing the validity (issued and expired dates) in the general page of the certificate info dialog">
+        Validity Period
+      </message>
+      <message name="IDS_CERT_INFO_ISSUED_ON_LABEL" desc="The label of the Issued On field in the general page of the certificate info dialog">
+        Issued On
+      </message>
+      <message name="IDS_CERT_INFO_EXPIRES_ON_LABEL" desc="The label of the Issued On field in the general page of the certificate info dialog">
+        Expires On
+      </message>
+      <message name="IDS_CERT_INFO_FINGERPRINTS_GROUP" desc="The label of the group showing the certificate fingerprints in the general page of the certificate info dialog">
+        Fingerprints
+      </message>
+      <message name="IDS_CERT_INFO_SHA256_FINGERPRINT_LABEL" desc="The label of the SHA-256 Fingerprint field in the general page of the certificate info dialog">
+        SHA-256 Fingerprint
+      </message>
+      <message name="IDS_CERT_INFO_SHA1_FINGERPRINT_LABEL" desc="The label of the SHA-1 Fingerprint field in the general page of the certificate info dialog">
+        SHA-1 Fingerprint
+      </message>
+      <message name="IDS_CERT_EXPORT_TYPE_BASE64" desc="The description of saving a single certificate in base64 encoding.">
+        Base64-encoded ASCII, single certificate
+      </message>
+      <message name="IDS_CERT_EXPORT_TYPE_BASE64_CHAIN" desc="The description of saving a certificate chain in base64 encoding.">
+        Base64-encoded ASCII, certificate chain
+      </message>
+      <message name="IDS_CERT_EXPORT_TYPE_DER" desc="The description of saving a single certificate in DER encoding.">
+        DER-encoded binary, single certificate
+      </message>
+      <message name="IDS_CERT_EXPORT_TYPE_PKCS7" desc="The description of saving a single certificate in PKCS #7 encoding.">
+        PKCS #7, single certificate
+      </message>
+      <message name="IDS_CERT_EXPORT_TYPE_PKCS7_CHAIN" desc="The description of saving a single certificate in PKCS #7 encoding.">
+        PKCS #7, certificate chain
+      </message>
+
+      <!-- WebUI Certificate viewer dialog strings. Android uses an OS-level certificate manager. -->
+      <if expr="not is_android">
+        <message name="IDS_CERT_INFO_DIALOG_TITLE" desc="Title of dialog displaying info about a certificate">
+          Certificate Viewer: <ph name="CERTIFICATE_NAME">$1<ex>www.google.com</ex></ph>
+        </message>
+        <message name="IDS_CERT_INFO_GENERAL_TAB_LABEL" desc="Title of the notebook page displaying the basic info about the certificate">
+          &amp;General
+        </message>
+        <message name="IDS_CERT_INFO_DETAILS_TAB_LABEL" desc="Title of the notebook page displaying the details about the certificate">
+          &amp;Details
+        </message>
+        <message name="IDS_CERT_INFO_VERIFIED_USAGES_GROUP" desc="The label of the group in the general page of the certificate info dialog which lists the usages that the certificate is verified for">
+          This certificate has been verified for the following usages:
+        </message>
+        <message name="IDS_CERT_USAGE_SSL_CLIENT" desc="The description of a certificate that is verified for use as an SSL client">
+          SSL Client Certificate
+        </message>
+        <message name="IDS_CERT_USAGE_SSL_SERVER" desc="The description of a certificate that is verified for use as an SSL server">
+          SSL Server Certificate
+        </message>
+        <message name="IDS_CERT_USAGE_SSL_SERVER_WITH_STEPUP" desc="The description of a certificate that is verified for use as an SSL server with step up">
+          SSL Server with Step-up
+        </message>
+        <message name="IDS_CERT_USAGE_EMAIL_SIGNER" desc="The description of a certificate that is verified for signing emails">
+          Email Signer Certificate
+        </message>
+        <message name="IDS_CERT_USAGE_EMAIL_RECEIVER" desc="The description of a
+          certificate that is verified for encrypting email">
+          Email Encryption Certificate
+        </message>
+        <message name="IDS_CERT_USAGE_OBJECT_SIGNER" desc="The description of a certificate that is verified for signing executable code">
+          Code Signer
+        </message>
+        <message name="IDS_CERT_USAGE_SSL_CA" desc="The description of a certificate that is verified for use by an SSL certification authority">
+          SSL Certification Authority
+        </message>
+        <message name="IDS_CERT_USAGE_STATUS_RESPONDER" desc="The description of a certificate that is verified for use as a status responder">
+          Status Responder Certificate
+        </message>
+        <message name="IDS_CERT_INFO_IDN_VALUE_FORMAT" desc="The format of values for Common Name and SubjectAltName fields in the certificate info dialog when a name is an Internationalized Domain Name (eg, παράδειγμα.δοκιμή).">
+          <ph name="ASCII_NAME">$1<ex>xn--hxajbheg2az3al.xn--jxalpdlp</ex></ph> (<ph name="UNICODE_NAME">$2<ex>see desc; only ASCII allowed in ph.</ex></ph>)
+        </message>
+        <message name="IDS_CERT_INFO_FIELD_NOT_PRESENT" desc="The text displayed in the certificate info dialog for a given field when the certificate does not contain that field">
+          &lt;Not Part Of Certificate&gt;
+        </message>
+        <message name="IDS_CERT_DETAILS_CERTIFICATE_HIERARCHY_LABEL" desc="The label of the Certificate Hierarchy tree in the details page of the certificate info dialog.">
+          Certificate Hierarchy
+        </message>
+        <message name="IDS_CERT_DETAILS_CERTIFICATE_FIELDS_LABEL" desc="The label of the Certificate Fields tree in the details page of the certificate info dialog.">
+          Certificate Fields
+        </message>
+        <message name="IDS_CERT_DETAILS_CERTIFICATE_FIELD_VALUE_LABEL" desc="The label of the Certificate Field Value text in the details page of the certificate info dialog.">
+          Field Value
+        </message>
+        <message name="IDS_CERT_DETAILS_CERTIFICATE" desc="The label of the Certificate element in the details page of the certificate info dialog.">
+          Certificate
+        </message>
+        <message name="IDS_CERT_DETAILS_VERSION" desc="The label of the Version element in the details page of the certificate info dialog.">
+          Version
+        </message>
+        <message name="IDS_CERT_DETAILS_VERSION_FORMAT" desc="The format of the Version field value in the details page of the certificate info dialog.">
+          Version <ph name="NUMBER">$1<ex>3</ex></ph>
+        </message>
+        <message name="IDS_CERT_DETAILS_SERIAL_NUMBER" desc="The label of the Serial Number element in the details page of the certificate info dialog.">
+          Serial Number
+        </message>
+        <message name="IDS_CERT_DETAILS_CERTIFICATE_SIG_ALG" desc="The label of the Certificate Signature Algorithm element in the details page of the certificate info dialog.">
+          Certificate Signature Algorithm
+        </message>
+        <message name="IDS_CERT_DETAILS_ISSUER" desc="The label of the Issuer element in the details page of the certificate info dialog.">
+          Issuer
+        </message>
+        <message name="IDS_CERT_DETAILS_VALIDITY" desc="The label of the Validity element in the details page of the certificate info dialog.">
+          Validity
+        </message>
+        <message name="IDS_CERT_DETAILS_NOT_BEFORE" desc="The label of the Validity->Not Before element in the details page of the certificate info dialog.">
+          Not Before
+        </message>
+        <message name="IDS_CERT_DETAILS_NOT_AFTER" desc="The label of the Validity->Not After element in the details page of the certificate info dialog.">
+          Not After
+        </message>
+        <message name="IDS_CERT_DETAILS_UTC_TIMEZONE" desc="The string specifying the timezone in the Validity->Not Before and Validity->Not After elements in the details page of the certificate info dialog.">
+          (UTC)
+        </message>
+        <message name="IDS_CERT_DETAILS_SUBJECT" desc="The label of the Subject element in the details page of the certificate info dialog. (In this case, subject refers to the entity the certificate was issued to.)">
+          Subject
+        </message>
+        <message name="IDS_CERT_DETAILS_SUBJECT_KEY_INFO" desc="The label of the Subject Public Key Info element in the details page of the certificate info dialog. (In this case, subject refers to the entity the certificate was issued to.)">
+          Subject Public Key Info
+        </message>
+        <message name="IDS_CERT_DETAILS_SUBJECT_KEY_ALG" desc="The label of the Subject Public Key Algorithm element in the details page of the certificate info dialog. (In this case, subject refers to the entity the certificate was issued to.)">
+          Subject Public Key Algorithm
+        </message>
+        <message name="IDS_CERT_DETAILS_SUBJECT_KEY" desc="The label of the Subject's Public Key element in the details page of the certificate info dialog. (In this case, subject refers to the entity the certificate was issued to.)">
+          Subject's Public Key
+        </message>
+        <message name="IDS_CERT_RSA_PUBLIC_KEY_DUMP_FORMAT" desc="Format for displaying a textual dump of an RSA public key.">
+  Modulus (<ph name="MODULUS_NUM_BITS">$1<ex>1024</ex></ph> bits):
+  <ph name="MODULUS_HEX_DUMP">$2<ex>00 0A 38 CF ...</ex></ph>
+
+  Public Exponent (<ph name="PUBLIC_EXPONENT_NUM_BITS">$3<ex>24</ex></ph> bits):
+  <ph name="EXPONENT_HEX_DUMP">$4<ex>01 00 01</ex></ph>
+        </message>
+        <message name="IDS_CERT_DETAILS_EXTENSIONS" desc="The label of the Extensions element in the details page of the certificate info dialog.">
+          Extensions
+        </message>
+        <message name="IDS_CERT_DETAILS_CERTIFICATE_SIG_VALUE" desc="The label of the Certificate Signature Value element in the details page of the certificate info dialog.">
+          Certificate Signature Value
+        </message>
+        <message name="IDS_CERT_DETAILS_EXPORT_CERTIFICATE" desc="The label of the button to export the selected certificate">
+          E&amp;xport...
+        </message>
+
+        <message translateable="false" name="IDS_CERT_OID_AVA_COMMON_NAME" desc="">
+          CN
+        </message>
+        <message translateable="false" name="IDS_CERT_OID_AVA_STATE_OR_PROVINCE" desc="">
+          ST
+        </message>
+        <message translateable="false" name="IDS_CERT_OID_AVA_ORGANIZATION_NAME" desc="">
+          O
+        </message>
+        <message translateable="false" name="IDS_CERT_OID_AVA_ORGANIZATIONAL_UNIT_NAME" desc="">
+          OU
+        </message>
+        <message translateable="false" name="IDS_CERT_OID_AVA_DN_QUALIFIER" desc="">
+          dnQualifier
+        </message>
+        <message translateable="false" name="IDS_CERT_OID_AVA_COUNTRY_NAME" desc="">
+          C
+        </message>
+        <message translateable="false" name="IDS_CERT_OID_AVA_SERIAL_NUMBER" desc="">
+          serialNumber
+        </message>
+        <message translateable="false" name="IDS_CERT_OID_AVA_LOCALITY" desc="">
+          L
+        </message>
+        <message translateable="false" name="IDS_CERT_OID_AVA_DC" desc="">
+          DC
+        </message>
+        <message translateable="false" name="IDS_CERT_OID_RFC1274_MAIL" desc="">
+          MAIL
+        </message>
+        <message translateable="false" name="IDS_CERT_OID_RFC1274_UID" desc="">
+          UID
+        </message>
+        <message translateable="false" name="IDS_CERT_OID_PKCS9_EMAIL_ADDRESS" desc="">
+          E
+        </message>
+        <message translateable="false" name="IDS_CERT_OID_BUSINESS_CATEGORY" desc="">
+          businessCategory
+        </message>
+        <message translateable="false" name="IDS_CERT_OID_EV_INCORPORATION_COUNTRY" desc="">
+          incorporationCountry
+        </message>
+
+        <message name="IDS_CERT_OID_PKCS1_RSA_ENCRYPTION" desc="description of public key algorithm SEC_OID_PKCS1_RSA_ENCRYPTION">
+          PKCS #1 RSA Encryption
+        </message>
+        <message name="IDS_CERT_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION" desc="description of public key algorithm SEC_OID_PKCS1_MD2_WITH_RSA_ENCRYPTION">
+          PKCS #1 MD2 With RSA Encryption
+        </message>
+        <message name="IDS_CERT_OID_PKCS1_MD4_WITH_RSA_ENCRYPTION" desc="description of public key algorithm SEC_OID_PKCS1_MD4_WITH_RSA_ENCRYPTION">
+          PKCS #1 MD4 With RSA Encryption
+        </message>
+        <message name="IDS_CERT_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION" desc="description of public key algorithm SEC_OID_PKCS1_MD5_WITH_RSA_ENCRYPTION">
+          PKCS #1 MD5 With RSA Encryption
+        </message>
+        <message name="IDS_CERT_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION" desc="description of public key algorithm SEC_OID_PKCS1_SHA1_WITH_RSA_ENCRYPTION">
+          PKCS #1 SHA-1 With RSA Encryption
+        </message>
+        <message name="IDS_CERT_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION" desc="description of public key algorithm SEC_OID_PKCS1_SHA256_WITH_RSA_ENCRYPTION">
+          PKCS #1 SHA-256 With RSA Encryption
+        </message>
+        <message name="IDS_CERT_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION" desc="description of public key algorithm SEC_OID_PKCS1_SHA384_WITH_RSA_ENCRYPTION">
+          PKCS #1 SHA-384 With RSA Encryption
+        </message>
+        <message name="IDS_CERT_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION" desc="description of public key algorithm SEC_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION">
+          PKCS #1 SHA-512 With RSA Encryption
+        </message>
+
+        <message name="IDS_CERT_EXT_NS_CERT_TYPE" desc="description of extension Netscape Certificate Type">
+          Netscape Certificate Type
+        </message>
+        <message name="IDS_CERT_EXT_NS_CERT_TYPE_EMAIL" desc="description of a certificate type for email">
+          Email Certificate
+        </message>
+        <message name="IDS_CERT_EXT_NS_CERT_TYPE_EMAIL_CA" desc="description of a certificate type for email certification authority">
+          Email Certification Authority
+        </message>
+        <message name="IDS_CERT_EXT_NS_CERT_BASE_URL" desc="description of extension Netscape Certificate Base URL">
+          Netscape Certificate Base URL
+        </message>
+        <message name="IDS_CERT_EXT_NS_CERT_REVOCATION_URL" desc="description of extension Netscape Certificate Revocation URL">
+          Netscape Certificate Revocation URL
+        </message>
+        <message name="IDS_CERT_EXT_NS_CA_REVOCATION_URL" desc="description of extension Netscape Certification Authority Revocation URL">
+          Netscape Certification Authority Revocation URL
+        </message>
+        <message name="IDS_CERT_EXT_NS_CERT_RENEWAL_URL" desc="description of extension Netscape Certificate Renewal URL">
+          Netscape Certificate Renewal URL
+        </message>
+        <message name="IDS_CERT_EXT_NS_CA_POLICY_URL" desc="description of extension Netscape Certification Authority Policy URL">
+          Netscape Certification Authority Policy URL
+        </message>
+        <message name="IDS_CERT_EXT_NS_SSL_SERVER_NAME" desc="description of extension Netscape Certificate SSL Server Name">
+          Netscape Certificate SSL Server Name
+        </message>
+        <message name="IDS_CERT_EXT_NS_COMMENT" desc="description of extension Netscape Certificate Comment">
+          Netscape Certificate Comment
+        </message>
+        <message name="IDS_CERT_EXT_NS_LOST_PASSWORD_URL" desc="description of extension Netscape Lost Password URL">
+          Netscape Lost Password URL
+        </message>
+        <message name="IDS_CERT_EXT_NS_CERT_RENEWAL_TIME" desc="description of extension Netscape Certificate Renewal Time">
+          Netscape Certificate Renewal Time
+        </message>
+        <message name="IDS_CERT_X509_SUBJECT_DIRECTORY_ATTR" desc="description of extension Certificate Subject Directory Attributes">
+          Certificate Subject Directory Attributes
+        </message>
+        <message name="IDS_CERT_X509_SUBJECT_KEYID" desc="description of extension Certificate Subject Key ID">
+          Certificate Subject Key ID
+        </message>
+        <message name="IDS_CERT_KEYID_FORMAT" desc="format for key id in certificate extensions details">
+          Key ID: <ph name="KEY_ID">$1<ex>19 EB 8E 93</ex></ph>
+        </message>
+        <message name="IDS_CERT_ISSUER_FORMAT" desc="format for issuer in certificate extensions details">
+          Issuer: <ph name="CERTIFICATE_AUTHORITY">$1<ex>VeriSign</ex></ph>
+        </message>
+        <message name="IDS_CERT_SERIAL_NUMBER_FORMAT" desc="format for serial number in certificate extensions details">
+          Serial Number: <ph name="SERIAL_NUMBER">$1<ex>19 EB 8E 93</ex></ph>
+        </message>
+        <message name="IDS_CERT_X509_KEY_USAGE" desc="description of extension Certificate Key Usage">
+          Certificate Key Usage
+        </message>
+        <message name="IDS_CERT_X509_SUBJECT_ALT_NAME" desc="description of extension Certificate Subject Alternative Name">
+          Certificate Subject Alternative Name
+        </message>
+        <message name="IDS_CERT_X509_ISSUER_ALT_NAME" desc="description of extension Certificate Issuer Alternative Name">
+          Certificate Issuer Alternative Name
+        </message>
+        <message name="IDS_CERT_X509_BASIC_CONSTRAINTS" desc="description of extension Certificate Basic Constraints">
+          Certificate Basic Constraints
+        </message>
+        <message name="IDS_CERT_X509_NAME_CONSTRAINTS" desc="description of extension Certificate Name Constraints">
+          Certificate Name Constraints
+        </message>
+        <message name="IDS_CERT_X509_CRL_DIST_POINTS" desc="description of extension CRL Distribution Points">
+          CRL Distribution Points
+        </message>
+        <message name="IDS_CERT_X509_CERT_POLICIES" desc="description of extension Certificate Policies">
+          Certificate Policies
+        </message>
+        <message name="IDS_CERT_X509_POLICY_MAPPINGS" desc="description of extension Certificate Policy Mappings">
+          Certificate Policy Mappings
+        </message>
+        <message name="IDS_CERT_X509_POLICY_CONSTRAINTS" desc="description of extension Certificate Policy Constraints">
+          Certificate Policy Constraints
+        </message>
+        <message name="IDS_CERT_X509_AUTH_KEYID" desc="description of extension Certification Authority Key Identifier">
+          Certification Authority Key ID
+        </message>
+        <message name="IDS_CERT_X509_EXT_KEY_USAGE" desc="description of extension Extended Key Usage">
+          Extended Key Usage
+        </message>
+        <message name="IDS_CERT_X509_AUTH_INFO_ACCESS" desc="description of extension Authority Information Access">
+          Authority Information Access
+        </message>
+        <message name="IDS_CERT_X509_KEY_USAGE_SIGNING" desc="description of certificate usage Signing">
+          Signing
+        </message>
+        <message name="IDS_CERT_X509_KEY_USAGE_NONREP" desc="description of certificate usage Non-repudiation">
+          Non-repudiation
+        </message>
+        <message name="IDS_CERT_X509_KEY_USAGE_ENCIPHERMENT" desc="description of certificate usage Key Encipherment">
+          Key Encipherment
+        </message>
+        <message name="IDS_CERT_X509_KEY_USAGE_DATA_ENCIPHERMENT" desc="description of certificate usage Data Encipherment">
+          Data Encipherment
+        </message>
+        <message name="IDS_CERT_X509_KEY_USAGE_KEY_AGREEMENT" desc="description of certificate usage Key Agreement">
+          Key Agreement
+        </message>
+        <message name="IDS_CERT_X509_KEY_USAGE_CERT_SIGNER" desc="description of certificate usage Certificate Signer">
+          Certificate Signer
+        </message>
+        <message name="IDS_CERT_X509_KEY_USAGE_CRL_SIGNER" desc="description of certificate usage CRL Signer">
+          CRL Signer
+        </message>
+        <message name="IDS_CERT_X509_KEY_USAGE_ENCIPHER_ONLY" desc="description of certificate usage Encipher Only">
+          Encipher Only
+        </message>
+        <message name="IDS_CERT_X509_KEY_USAGE_DECIPHER_ONLY" desc="description of certificate usage Decipher Only">
+          Decipher Only
+        </message>
+        <message name="IDS_CERT_X509_BASIC_CONSTRAINT_IS_CA" desc="description of certificate constraint Is a Certification Authority">
+          Is a Certification Authority
+        </message>
+        <message name="IDS_CERT_X509_BASIC_CONSTRAINT_IS_NOT_CA" desc="description of certificate constraint Is not a Certification Authority">
+          Is not a Certification Authority
+        </message>
+        <message name="IDS_CERT_X509_BASIC_CONSTRAINT_PATH_LEN" desc="description of certificate constraint Maximum number of intermediate CAs: %S">
+          Maximum number of intermediate CAs: <ph name="NUM_INTERMEDIATE_CA">$1<ex>5</ex></ph>
+        </message>
+        <message name="IDS_CERT_X509_BASIC_CONSTRAINT_PATH_LEN_UNLIMITED" desc="value NUM_INTERMEDIATE_CA when there is no limit">
+          unlimited
+        </message>
+        <message name="IDS_CERT_PKIX_CPS_POINTER_QUALIFIER" desc="description of pointer (URI) to Certification Practice Statement published by Certification Authority">
+          Certification Practice Statement Pointer
+        </message>
+        <message name="IDS_CERT_PKIX_USER_NOTICE_QUALIFIER" desc="description of User Notice certificate policy qualifier">
+          User Notice
+        </message>
+        <message name="IDS_CERT_REVOCATION_REASON_UNUSED" desc="description of certificate revocation for reason Unused">
+          Unused
+        </message>
+        <message name="IDS_CERT_REVOCATION_REASON_KEY_COMPROMISE" desc="description of certificate revocation for reason Key Compromise">
+          Key Compromise
+        </message>
+        <message name="IDS_CERT_REVOCATION_REASON_CA_COMPROMISE" desc="description of certificate revocation for reason CA Compromise">
+          CA Compromise
+        </message>
+        <message name="IDS_CERT_REVOCATION_REASON_AFFILIATION_CHANGED" desc="description of certificate revocation for reason Affiliation Changed">
+          Affiliation Changed
+        </message>
+        <message name="IDS_CERT_REVOCATION_REASON_SUPERSEDED" desc="description of certificate revocation for reason Superseded">
+          Superseded
+        </message>
+        <message name="IDS_CERT_REVOCATION_REASON_CESSATION_OF_OPERATION" desc="description of certificate revocation for reason Cessation of Operation">
+          Cessation of Operation
+        </message>
+        <message name="IDS_CERT_REVOCATION_REASON_CERTIFICATE_HOLD" desc="description of certificate revocation for reason Certificate Hold">
+          Certificate on Hold
+        </message>
+        <message name="IDS_CERT_REVOCATION_REASON_PRIVILEGE_WITHDRAWN" desc="description of certificate revocation for reason Privilege Withdrawn">
+          Privilege Withdrawn
+        </message>
+        <message name="IDS_CERT_REVOCATION_REASON_AA_COMPROMISE" desc="description of certificate revocation for reason AA Compromise">
+          AA Compromise
+        </message>
+        <message name="IDS_CERT_OCSP_RESPONDER_FORMAT" desc="format for info about OCSP responder">
+          OCSP Responder: <ph name="LOCATION">$1<ex>Foo</ex></ph>
+        </message>
+        <message name="IDS_CERT_CA_ISSUERS_FORMAT" desc="format for info about CA Issuers">
+          CA Issuers: <ph name="LOCATION">$1<ex>Foo</ex></ph>
+        </message>
+        <message name="IDS_CERT_UNKNOWN_OID_INFO_FORMAT" desc="format for info about an OID we don't have a specific format for">
+          <ph name="OID">$1<ex>OID.1.23.45.6</ex></ph>: <ph name="INFO">$2<ex>Foo</ex></ph>
+        </message>
+        <message name="IDS_CERT_EXT_KEY_USAGE_FORMAT" desc="format for description of an extended key usage, with its object identifier (OID).">
+          <ph name="USAGE">$1<ex>TLS Web Server Authentication</ex></ph> (<ph name="OID">$2<ex>OID.1.3.6.1.5.5.7.3.1</ex></ph>)
+        </message>
+        <message name="IDS_CERT_MULTILINE_INFO_START_FORMAT" desc="format for header line where further info will appear on the following lines">
+          <ph name="OID">$1<ex>OID.1.23.45.6</ex></ph>:
+        </message>
+        <message name="IDS_CERT_GENERAL_NAME_RFC822_NAME" desc="label for the certRFC822Name general name type">
+          Email Address
+        </message>
+        <message name="IDS_CERT_GENERAL_NAME_DNS_NAME" desc="label for the certDNSName general name type">
+          DNS Name
+        </message>
+        <message name="IDS_CERT_GENERAL_NAME_X400_ADDRESS" desc="label for the certX400Address general name type">
+          X.400 Address
+        </message>
+        <message name="IDS_CERT_GENERAL_NAME_DIRECTORY_NAME" desc="label for the certDirectoryName general name type">
+          X.500 Name
+        </message>
+        <message name="IDS_CERT_GENERAL_NAME_EDI_PARTY_NAME" desc="label for the certEDIPartyName general name type">
+          EDI Party Name
+        </message>
+        <message name="IDS_CERT_GENERAL_NAME_URI" desc="label for the certURI general name type">
+          URI
+        </message>
+        <message name="IDS_CERT_GENERAL_NAME_IP_ADDRESS" desc="label for the certIPAddress general name type">
+          IP Address
+        </message>
+        <message name="IDS_CERT_GENERAL_NAME_REGISTERED_ID" desc="label for the certRegisteredID general name type">
+          Registered OID
+        </message>
+        <message name="IDS_CERT_EDI_PARTY_NAME" desc="format for Electronic Data Identifier (EDI) Party Name">
+          Party Name: <ph name="PARTY_NAME">$1<ex>Foo</ex></ph>
+        </message>
+        <message name="IDS_CERT_EDI_NAME_ASSIGNER" desc="format for Electronic Data Identifier (EDI) Name Assigner">
+          Name Assigner: <ph name="NAME_ASSIGNER">$1<ex>Foo</ex></ph>
+        </message>
+        <message name="IDS_CERT_EXT_MS_CERT_TYPE" desc="description of extension Microsoft Certificate Template Name">
+          Microsoft Certificate Template Name
+        </message>
+        <message name="IDS_CERT_EXT_MS_CA_VERSION" desc="description of extension Microsoft CA Version">
+          Microsoft CA Version
+        </message>
+        <message name="IDS_CERT_EXT_MS_NT_PRINCIPAL_NAME" desc="description of extension Microsoft Principal Name">
+          Microsoft Principal Name
+        </message>
+        <message name="IDS_CERT_EXT_MS_NTDS_REPLICATION" desc="description of extension Microsoft Domain GUID">
+          Microsoft Domain GUID
+        </message>
+        <message name="IDS_CERT_EKU_TLS_WEB_SERVER_AUTHENTICATION" desc="description of extended key usage TLS WWW Server Authentication">
+          TLS WWW Server Authentication
+        </message>
+        <message name="IDS_CERT_EKU_TLS_WEB_CLIENT_AUTHENTICATION" desc="description of extended key usage TLS WWW Client Authentication">
+          TLS WWW Client Authentication
+        </message>
+        <message name="IDS_CERT_EKU_CODE_SIGNING" desc="description of extended key usage Code Signing">
+          Code Signing
+        </message>
+        <message name="IDS_CERT_EKU_EMAIL_PROTECTION" desc="description of extended key usage E-mail Protection">
+          Email Protection
+        </message>
+        <message name="IDS_CERT_EKU_TIME_STAMPING" desc="description of extended key usage Time Stamping">
+          Time Stamping
+        </message>
+        <message name="IDS_CERT_EKU_OCSP_SIGNING" desc="description of extended key usage Signing OCSP Responses">
+          Signing OCSP Responses
+        </message>
+        <message name="IDS_CERT_EKU_MS_INDIVIDUAL_CODE_SIGNING" desc="description of extended key usage Microsoft Individual Code Signing">
+          Microsoft Individual Code Signing
+        </message>
+        <message name="IDS_CERT_EKU_MS_COMMERCIAL_CODE_SIGNING" desc="description of extended key usage Microsoft Commercial Code Signing">
+          Microsoft Commercial Code Signing
+        </message>
+        <message name="IDS_CERT_EKU_MS_TRUST_LIST_SIGNING" desc="description of extended key usage Microsoft Trust List Signing">
+          Microsoft Trust List Signing
+        </message>
+        <message name="IDS_CERT_EKU_MS_TIME_STAMPING" desc="description of extended key usage Microsoft Time Stamping">
+          Microsoft Time Stamping
+        </message>
+        <message name="IDS_CERT_EKU_MS_SERVER_GATED_CRYPTO" desc="description of extended key usage Microsoft Server Gated Crypto">
+          Microsoft Server Gated Cryptography
+        </message>
+        <message name="IDS_CERT_EKU_MS_ENCRYPTING_FILE_SYSTEM" desc="description of extended key usage Microsoft Encrypting File System">
+          Microsoft Encrypting File System
+        </message>
+        <message name="IDS_CERT_EKU_MS_FILE_RECOVERY" desc="description of extended key usage Microsoft File Recovery">
+          Microsoft File Recovery
+        </message>
+        <message name="IDS_CERT_EKU_MS_WINDOWS_HARDWARE_DRIVER_VERIFICATION" desc="description of extended key usage Microsoft Windows Hardware Driver Verification">
+          Microsoft Windows Hardware Driver Verification
+        </message>
+        <message name="IDS_CERT_EKU_MS_QUALIFIED_SUBORDINATION" desc="description of extended key usage Microsoft Qualified Subordination">
+          Microsoft Qualified Subordination
+        </message>
+        <message name="IDS_CERT_EKU_MS_KEY_RECOVERY" desc="description of extended key usage Microsoft Key Recovery">
+          Microsoft Key Recovery
+        </message>
+        <message name="IDS_CERT_EKU_MS_DOCUMENT_SIGNING" desc="description of extended key usage Microsoft Document Signing">
+          Microsoft Document Signing
+        </message>
+        <message name="IDS_CERT_EKU_MS_LIFETIME_SIGNING" desc="description of extended key usage Microsoft Lifetime Signing">
+          Microsoft Lifetime Signing
+        </message>
+        <message name="IDS_CERT_EKU_MS_SMART_CARD_LOGON" desc="description of extended key usage Microsoft Smart Card Logon">
+          Microsoft Smart Card Logon
+        </message>
+        <message name="IDS_CERT_EKU_MS_KEY_RECOVERY_AGENT" desc="description of extended key usage Microsoft Key Recovery Agent">
+          Microsoft Key Recovery Agent
+        </message>
+        <message name="IDS_CERT_EKU_NETSCAPE_INTERNATIONAL_STEP_UP" desc="description of extended key usage Netscape International Step-Up">
+          Netscape International Step-Up
+        </message>
+        <message name="IDS_CERT_EXTENSION_CRITICAL" desc="The text displayed in the certificate details dialog for a given extension which is critical">
+          Critical
+        </message>
+        <message name="IDS_CERT_EXTENSION_NON_CRITICAL" desc="The text displayed in the certificate details dialog for a given extension which is not critical">
+          Not Critical
+        </message>
+        <message name="IDS_CERT_EXTENSION_DUMP_ERROR" desc="The text displayed in the certificate details dialog for a given extension which could not be decoded">
+          Error: Unable to decode extension
+        </message>
+
+        <!-- Certificate manager dialog strings.  These are only used on platforms that don't have a native certificate manager dialog, such as Linux. -->
+        <message name="IDS_CERTIFICATE_MANAGER_TITLE" desc="String to be displayed in the title bar of the certificate manager dialog">
+          Certificate manager
+        </message>
+        <message name="IDS_CERT_MANAGER_PERSONAL_CERTS_TAB_LABEL" desc="Title of the notebook page displaying the user's own certificates">
+          Your Certificates
+        </message>
+        <message name="IDS_CERT_MANAGER_SERVER_CERTS_TAB_LABEL" desc="Title of the notebook page displaying server certificates">
+          Servers
+        </message>
+        <message name="IDS_CERT_MANAGER_CERT_AUTHORITIES_TAB_LABEL" desc="Title of the notebook page displaying certificate authorities">
+          Authorities
+        </message>
+        <message name="IDS_CERT_MANAGER_OTHER_TAB_LABEL" desc="Title of the notebook page displaying certificates that don't fall under any of the other categories">
+          Others
+        </message>
+        <message name="IDS_CERT_MANAGER_USER_TREE_DESCRIPTION" desc="Description label above the tree showing the user's own certificates">
+          You have certificates from these organizations that identify you:
+        </message>
+        <message name="IDS_CERT_MANAGER_SERVER_TREE_DESCRIPTION" desc="Description label above the tree showing server certificates">
+          You have certificates on file that identify these servers:
+        </message>
+        <message name="IDS_CERT_MANAGER_AUTHORITIES_TREE_DESCRIPTION" desc="Description label above the Certificate Authorities tree">
+          You have certificates on file that identify these certificate authorities:
+        </message>
+        <message name="IDS_CERT_MANAGER_OTHER_TREE_DESCRIPTION" desc="Description label above the tree showing certificates that don't fall under any of the other categories">
+          You have certificates on file that do not fit in any of the other categories:
+        </message>
+        <message name="IDS_CERT_MANAGER_VIEW_CERT_BUTTON" desc="Label for the button in the certificate manager which launches the certificate viewer for the selected certificate">
+          View...
+        </message>
+        <message name="IDS_CERT_MANAGER_IMPORT_BUTTON" desc="Label for the button in the certificate manager which allows you to import certificates">
+          Import...
+        </message>
+        <message name="IDS_CERT_MANAGER_EXPORT_BUTTON" desc="Label for the button in the certificate manager which allows you to export certificates">
+          Export...
+        </message>
+        <message name="IDS_CERT_MANAGER_EDIT_BUTTON" desc="Label for the button in the certificate manager which allows you to edit certificate trust">
+          Edit...
+        </message>
+        <message name="IDS_CERT_MANAGER_DELETE_BUTTON" desc="Label for the button in the certificate manager which allows you to delete certificates">
+          Delete...
+        </message>
+        <message name="IDS_CERT_MANAGER_DELETE_USER_FORMAT" desc="Confirmation in certificate manager dialog for deleting a user certificate">
+          Delete certificate "<ph name="CERTIFICATE_NAME">$1<ex>VeriSign Browser Certificate</ex></ph>"?
+        </message>
+        <message name="IDS_CERT_MANAGER_DELETE_USER_DESCRIPTION" desc="Description of impact of deleting a user certificate">
+          If you delete one of your own certificates, you can no longer use it to identify yourself.
+        </message>
+        <message name="IDS_CERT_MANAGER_DELETE_SERVER_FORMAT" desc="Confirmation in certificate manager dialog for deleting a server certificate">
+          Delete server certificate "<ph name="CERTIFICATE_NAME">$1<ex>www.example.com</ex></ph>"?
+        </message>
+        <message name="IDS_CERT_MANAGER_DELETE_SERVER_DESCRIPTION" desc="Description of impact of deleting a server certificate">
+          If you delete a server certificate, you restore the usual security checks for that server and require it uses a valid certificate.
+        </message>
+        <message name="IDS_CERT_MANAGER_DELETE_CA_FORMAT" desc="Confirmation in certificate manager dialog for deleting a certification authority certificate">
+          Delete CA certificate "<ph name="CERTIFICATE_NAME">$1<ex>Verisign Class 1 Public Primary Certification Authority</ex></ph>"?
+        </message>
+        <message name="IDS_CERT_MANAGER_DELETE_CA_DESCRIPTION" desc="Description of impact of deleting a certification authority certificate">
+          If you delete a Certification Authority (CA) certificate, your browser will no longer trust any certificates issued by that CA.
+        </message>
+        <message name="IDS_CERT_MANAGER_DELETE_OTHER_FORMAT" desc="Confirmation in certificate manager dialog for deleting a certificate of other type">
+          Delete certificate "<ph name="CERTIFICATE_NAME">$1<ex>Example Certificate</ex></ph>"?
+        </message>
+        <message name="IDS_CERT_MANAGER_EXPORT_PASSWORD_DESC" desc="Description of password prompt in certificate manager for exporting a personal certificate">
+          Please enter a password to encrypt this certificate file.
+        </message>
+        <message name="IDS_CERT_MANAGER_EXPORT_PASSWORD_HELP" desc="Text in password prompt of certificate manager for exporting a personal certificate, reminding user that if they forget the password they're screwed.">
+          The password you choose will be required to restore this file later.  Please record it in a safe location.
+        </message>
+        <message name="IDS_CERT_MANAGER_RESTORE_PASSWORD_DESC" desc="Description of password prompt in certificate manager for restoring a personal certificate">
+          Please enter the password that was used to encrypt this certificate file.
+        </message>
+        <message name="IDS_CERT_MANAGER_PASSWORD_LABEL" desc="The label of the password field in the certificate manager for restoring or exporting a personal certificate">
+          Password:
+        </message>
+        <message name="IDS_CERT_MANAGER_CONFIRM_PASSWORD_LABEL" desc="The label of the field in the certificate manager for re-entering the password when creating a export.">
+          Confirm Password:
+        </message>
+        <message name="IDS_CERT_MANAGER_PKCS12_FILES" desc="The label in the file selector dialog for PKCS #12 file type.">
+          PKCS #12 Files
+        </message>
+        <message name="IDS_CERT_MANAGER_PKCS12_EXPORT_ERROR_TITLE" desc="The title in the error dialog for PKCS #12 file export errors.">
+          PKCS #12 Export Error
+        </message>
+        <message name="IDS_CERT_MANAGER_WRITE_ERROR_FORMAT" desc="The text in the error dialog for PKCS #12 file write errors.">
+          There was an error while trying to write the file: <ph name="ERROR_TEXT">$1<ex>Permission denied.</ex></ph>.
+        </message>
+        <message name="IDS_CERT_MANAGER_UNTRUSTED" desc="This text is displayed next to untrusted certificates in a red box. Untrusted certificates are sometimes added in order to explicitly distrust them. Thus, they will be listed but it's important that the user note that they serve a different purpose from the rest.">
+          Untrusted
+        </message>
+        <message name="IDS_CERT_MANAGER_POLICY_INSTALLED" desc="The text of the popup bubble shown when the user clicks the controlled setting indicator next to a certificate entry.">
+          This certificate has been installed by your system administrator.
+        </message>
+        <message name="IDS_CERT_MANAGER_PKCS12_IMPORT_ERROR_TITLE" desc="The title in the error dialog for PKCS #12 file import errors.">
+          PKCS #12 Import Error
+        </message>
+        <message name="IDS_CERT_MANAGER_PKCS12_IMPORT_INVALID_MAC" desc="The message in the error dialog for PKCS #12 files with invalid MAC.">
+          Incorrect password or corrupt file.
+        </message>
+        <message name="IDS_CERT_MANAGER_PKCS12_IMPORT_INVALID_FILE" desc="The message in the error dialog for corrupt PKCS #12 files.">
+          Invalid or corrupt file.
+        </message>
+        <message name="IDS_CERT_MANAGER_PKCS12_IMPORT_UNSUPPORTED" desc="The message in the error dialog for unsupported PKCS #12 files.">
+          File uses unsupported features.
+        </message>
+        <message name="IDS_CERT_MANAGER_READ_ERROR_FORMAT" desc="The text in the error dialog for PKCS #12 file read errors.">
+          There was an error while trying to read the file: <ph name="ERROR_TEXT">$1<ex>File not found.</ex></ph>.
+        </message>
+        <message name="IDS_CERT_MANAGER_BAD_PASSWORD" desc="The text in the error dialog for entering an incorrect password when importing an encrypted certificate file.">
+          Incorrect password.
+        </message>
+        <message name="IDS_CERT_MANAGER_CERT_PARSE_ERROR" desc="The message in the certificate manager error dialog for importing invalid certificate files.">
+          Unable to parse file.
+        </message>
+        <message name="IDS_CERT_MANAGER_UNKNOWN_ERROR" desc="The text in the error dialog when an unknown error occurs during an operation on the certificate database.">
+          Unknown error.
+        </message>
+        <message name="IDS_CERT_MANAGER_ERROR_NOT_CA" desc="The error message when trying to import certificate authorities and a certificate is not a certification authority">
+          Not a Certification Authority.
+        </message>
+        <message name="IDS_CERT_MANAGER_ERROR_CERT_ALREADY_EXISTS" desc="The error message when trying to import certificate which already exists.">
+          Certificate already exists.
+        </message>
+        <message name="IDS_CERT_MANAGER_DELETE_CERT_ERROR_TITLE" desc="The title in the error dialog for certificate delete errors.">
+          Certificate Deletion Error
+        </message>
+        <message name="IDS_CERT_MANAGER_EDIT_CA_TITLE" desc="Title of the certificate manager edit trust dialog">
+          Certificate authority
+        </message>
+        <message name="IDS_CERT_MANAGER_EDIT_TRUST_LABEL" desc="Line displayed in certificate manager edit trust dialog before the checkboxes for setting certificate trust flags">
+          Edit trust settings:
+        </message>
+        <message name="IDS_CERT_MANAGER_EDIT_CA_TRUST_DESCRIPTION_FORMAT" desc="Description in dialog for editing Certification Authority trust flags">
+          The certificate "<ph name="CERTIFICATE_NAME">$1<ex>Verisign Class 1 Public Primary Certification Authority</ex></ph>" represents a Certification Authority.
+        </message>
+        <message name="IDS_CERT_MANAGER_EDIT_CA_TRUST_SSL_LABEL" desc="Description in Certification Authority trust dialog for the SSL trust checkbox.">
+          Trust this certificate for identifying websites.
+        </message>
+        <message name="IDS_CERT_MANAGER_EDIT_CA_TRUST_EMAIL_LABEL" desc="Description in Certification Authority trust dialog for the Email trust checkbox.">
+          Trust this certificate for identifying email users.
+        </message>
+        <message name="IDS_CERT_MANAGER_EDIT_CA_TRUST_OBJSIGN_LABEL" desc="Description in Certification Authority trust dialog for the Code Signing trust checkbox.">
+          Trust this certificate for identifying software makers.
+        </message>
+        <message name="IDS_CERT_MANAGER_SET_TRUST_ERROR_TITLE" desc="The title in the error dialog for certificate trust editing errors.">
+          Error Setting Certificate Trust
+        </message>
+        <message name="IDS_CERT_MANAGER_IMPORT_CA_DESCRIPTION_FORMAT" desc="Description in dialog for importing a Certification Authority and setting its trust flags">
+          Do you want to trust "<ph name="CERTIFICATE_NAME">$1<ex>Verisign Class 1 Public Primary Certification Authority</ex></ph>" as a Certification Authority?
+        </message>
+        <message name="IDS_CERT_MANAGER_CA_IMPORT_ERROR_TITLE" desc="The title in the error dialog for Certification Authority file import errors.">
+          Certification Authority Import Error
+        </message>
+        <message name="IDS_CERT_MANAGER_IMPORT_ERROR_FORMAT" desc="The format of per-certificate error messages in import failure dialog">
+          <ph name="CERTIFICATE_NAME">$1<ex>www.example.com</ex></ph>: <ph name="ERROR">$2<ex>Not a Certification Authority</ex></ph>
+        </message>
+        <message name="IDS_CERT_MANAGER_IMPORT_SINGLE_NOT_IMPORTED" desc="The header in certificate manager error dialog for single certificates that could not be imported.">
+          The file contained one certificate, which was not imported:
+        </message>
+        <message name="IDS_CERT_MANAGER_IMPORT_ALL_NOT_IMPORTED" desc="The header in certificate manager error dialog for list of certificates that could not be imported, when none were successfully imported.">
+          The file contained multiple certificates, none of which were imported:
+        </message>
+        <message name="IDS_CERT_MANAGER_IMPORT_SOME_NOT_IMPORTED" desc="The header in certificate manager error dialog for list of certificates that could not be imported, even though others were.">
+          The file contained multiple certificates, some of which were not imported:
+        </message>
+        <message name="IDS_CERT_MANAGER_SERVER_IMPORT_ERROR_TITLE" desc="The title in the error dialog for Certification Authority file import errors.">
+          Server Certificate Import Error
+        </message>
+        <message name="IDS_CERT_MANAGER_HARDWARE_BACKED_KEY_FORMAT" desc="A format used to create label for hardware-backed keys.">
+          <ph name="KEY_NAME">$1<ex>John Doe</ex></ph> (<ph name="DEVICE">$2<ex>hardware-backed</ex></ph>)
+        </message>
+        <message name="IDS_CERT_MANAGER_HARDWARE_BACKED" desc="A device name to be used for hardware-backed keys.">
+          hardware-backed
+        </message>
+      </if>
+
+      <!-- Signed Certificate Timestamps (SCTs) viewer. Only used in Views -->
+      <if expr="toolkit_views">
+        <message name="IDS_SCT_VIEWER_TITLE" desc="Title of Signed Certificate Timestamps viewer window">
+          Signed Certificate Timestamps viewer
+        </message>
+        <message name="IDS_SCT_LOG_DESCRIPTION" desc="Name of the Certificate Transparency Log that issued this signed certificate timestamp">
+          Log name
+        </message>
+        <message name="IDS_SCT_VALIDATION_INFO" desc="Signed Certificate Timestamp validation status">
+          Validation status
+        </message>
+        <message name="IDS_SCT_STATUS_NONE" desc="SCT validation status: No SCT present">
+          Not present
+        </message>
+        <message name="IDS_SCT_STATUS_LOG_UNKNOWN" desc="SCT validation status: SCT from unknown log">
+          From an unknown log
+        </message>
+        <message name="IDS_SCT_STATUS_INVALID" desc="SCT validation status: Invalid">
+          Validation failed
+        </message>
+        <message name="IDS_SCT_STATUS_OK" desc="SCT validation status: Verified OK">
+          Verified
+        </message>
+        <message name="IDS_SCT_ORIGIN" desc="SCT Origin label">
+          Origin
+        </message>
+        <message name="IDS_SCT_ORIGIN_EMBEDDED" desc="SCT is embedded in the certificate">
+          Embedded
+        </message>
+        <message name="IDS_SCT_ORIGIN_TLS_EXTENSION" desc="SCT was provided during the TLS handshake">
+          TLS Extension
+        </message>
+        <message name="IDS_SCT_ORIGIN_OCSP" desc="SCT was extracted from the OCSP response">
+          OCSP response
+        </message>
+        <message name="IDS_SCT_ORIGIN_UNKNOWN" desc="SCT came from an unknown origin">
+          Unknown
+        </message>
+        <message name="IDS_SCT_VERSION_V1" desc="SCT Version 1">
+          V1
+        </message>
+        <message name="IDS_SCT_VERSION_UNKNOWN" desc="SCT with unknown version">
+          Unknown
+        </message>
+        <message name="IDS_SCT_VERSION" desc="Version of SCT">
+          Version
+        </message>
+        <message name="IDS_SCT_TIMESTAMP" desc="Time when the SCT was issued by the log">
+          Issued at
+        </message>
+        <message name="IDS_SCT_LOGID" desc="The ID of the Certificate Transparency log issuing this SCT (hex)">
+          Log ID
+        </message>
+        <message name="IDS_SCT_HASH_ALGORITHM" desc="Hash algorithm used to hash the Precertificate that was signed">
+          Hash algorithm
+        </message>
+        <message name="IDS_SCT_HASH_ALGORITHM_NONE" desc="None / invalid hash algorithm">
+          None
+        </message>
+        <message name="IDS_SCT_HASH_ALGORITHM_MD5" desc="MD5 hash alrogithm">
+          MD5
+        </message>
+        <message name="IDS_SCT_HASH_ALGORITHM_SHA1" desc="SHA1 hash algorithm">
+          SHA-1
+        </message>
+        <message name="IDS_SCT_HASH_ALGORITHM_SHA224" desc="SHA224 hash algorithm">
+          SHA-224
+        </message>
+        <message name="IDS_SCT_HASH_ALGORITHM_SHA256" desc="SHA256 hash algorithm">
+          SHA-256
+        </message>
+        <message name="IDS_SCT_HASH_ALGORITHM_SHA384" desc="SHA384 hash algorithm">
+          SHA-384
+        </message>
+        <message name="IDS_SCT_HASH_ALGORITHM_SHA512" desc="SHA512 hash algorithm">
+          SHA-512
+        </message>
+        <message name="IDS_SCT_SIGNATURE_ALGORITHM" desc="Signature algorithm used to sign over the Precertificate's hash">
+          Signature algorithm
+        </message>
+        <message name="IDS_SCT_SIGNATURE_ALGORITHM_ANONYMOUS" desc="Unknown signature algorithm">
+          Anonymous
+        </message>
+        <message name="IDS_SCT_SIGNATURE_ALGORITHM_RSA" desc="RSA signature algorithm">
+          RSA
+        </message>
+        <message name="IDS_SCT_SIGNATURE_ALGORITHM_DSA" desc="DSA signature algorithm">
+          DSA
+        </message>
+        <message name="IDS_SCT_SIGNATURE_ALGORITHM_ECDSA" desc="ECDSA signature algorithm">
+          ECDSA
+        </message>
+        <message name="IDS_SCT_SIGNATURE_DATA" desc="The signature bytes (hex)">
+          Signature data
+        </message>
+        <message name="IDS_SCT_RAW_DATA_HELP" desc="Instructions on how to get the raw data.">
+          The raw data is available through NetLog. See help for more details.
+        </message>
+        <message name="IDS_SCT_CHOOSER_FORMAT" desc="Format of combobox information layout.">
+          <ph name="SCT_INDEX">$1<ex>1</ex></ph>: <ph name="SCT_ORIGIN">$2<ex>Embedded</ex></ph>, <ph name="SCT_STATUS">$3<ex>Verified</ex></ph>
+        </message>
+      </if>
+
+      <if expr="chromeos">
+        <message name="IDS_CERT_MANAGER_IMPORT_AND_BIND_BUTTON" desc="Label for the button in the certificate manager which allows you to import certificates and bind to your device.">
+          Import and Bind to Device...
+        </message>
+        <message name="IDS_CERT_MANAGER_KEY_FORMAT_LONG" desc="A longer format for keys in the wifi / vpn config dialogs.">
+          <ph name="ISSUED_BY">$1<ex>Google Inc</ex></ph> [<ph name="ISSUED_TO">$2<ex>John Doe</ex></ph>]
+        </message>
+        <message name="IDS_CERT_MANAGER_HARDWARE_BACKED_KEY_FORMAT_LONG" desc="A longer format for hardware-backed keys in the wifi / vpn config dialogs.">
+          <ph name="ISSUED_BY">$1<ex>Google Inc</ex></ph> [<ph name="ISSUED_TO">$2<ex>John Doe</ex></ph>] (<ph name="DEVICE">$3<ex>hardware-backed</ex></ph>)
+        </message>
+      </if>
+
+      <!-- Client certificate enrollment failure infobar -->
+      <message name="IDS_ADD_CERT_ERR_INVALID_CERT" desc="Error message when the server returns an invalid client certificate after key generation">
+        The server returned an invalid client certificate. Error <ph name="ERROR_number">$1<ex>207</ex></ph> (<ph name="ERROR_NAME">$2<ex>net::ERR_CERT_INVALID</ex></ph>).
+      </message>
+      <message name="IDS_ADD_CERT_ERR_FAILED" desc="Generic error message for a failure to add the generated certificate to the cert store/keychain">
+        There was an error while trying to store the client certificate. Error <ph name="ERROR_number">$1<ex>207</ex></ph> (<ph name="ERROR_NAME">$2<ex>net::ERR_CERT_INVALID</ex></ph>).
+      </message>
+
+      <!-- Client certificate enrollment infobar -->
+      <message name="IDS_ADD_CERT_SUCCESS_INFOBAR_LABEL" desc="Label displayed in an infobar when the browser successfully imports a certificate">
+        Successfully stored client certificate issued by <ph name="ISSUER">$1<ex>VeriSign</ex></ph>.
+      </message>
+      <message name="IDS_ADD_CERT_SUCCESS_INFOBAR_BUTTON" desc="The label of the 'view' button on the infobar after a client certificate import; clicking opens a certificate viewer for the new certificate">
+        View
+      </message>
+
+      <!-- Autolaunch infobar -->
+      <if expr="is_win">
+        <message name="IDS_AUTO_LAUNCH_OK" desc="Label for OK button on Autolaunch confirmation infobar.">
+          OK
+        </message>
+        <message name="IDS_AUTO_LAUNCH_REVERT" desc="Label for button (on Autolaunch confirmation infobar) that disables autolaunching.">
+          Cut it out!
+        </message>
+      </if>
+
+      <!-- DevTools attached infobar -->
+      <message name="IDS_DEV_TOOLS_INFOBAR_LABEL" desc="Label displayed in an infobar when external debugger is attached to the page">
+        "<ph name="CLIENT_NAME">$1<ex>Extension Foo</ex></ph>" is debugging this tab.
+      </message>
+
+      <!-- DevTools file system access -->
+      <message name="IDS_DEV_TOOLS_CONFIRM_ADD_FILE_SYSTEM_MESSAGE" desc="Message displayed in DevTools infobar when user attempts to add file system to DevTools.">
+        DevTools requests full access to <ph name="FOLDER_PATH">$1<ex>C:\Projects\foo\</ex></ph>.
+Make sure you do not expose any sensitive information.
+      </message>
+
+      <!-- DevTools confirm infobar button labels -->
+      <message name="IDS_DEV_TOOLS_CONFIRM_ALLOW_BUTTON" desc="Used as an 'Allow' button label.">
+        Allow
+      </message>
+      <message name="IDS_DEV_TOOLS_CONFIRM_DENY_BUTTON" desc="Used as an 'Deny' button label.">
+        Deny
+      </message>
+
+      <!-- Advanced reload button menu -->
+      <message name="IDS_RELOAD_MENU_NORMAL_RELOAD_ITEM" desc="Menu item displayed in the Reload dropdown menu when in dev mode">
+        Normal Reload
+      </message>
+      <message name="IDS_RELOAD_MENU_HARD_RELOAD_ITEM" desc="Menu item displayed in the Reload dropdown menu when in dev mode">
+        Hard Reload
+      </message>
+      <message name="IDS_RELOAD_MENU_EMPTY_AND_HARD_RELOAD_ITEM" desc="Menu item displayed in the Reload dropdown menu when in dev mode">
+        Empty Cache and Hard Reload
+      </message>
+
+      <!-- Basic Auth Dialog -->
+      <message name="IDS_LOGIN_DIALOG_TITLE" desc="String to be displayed in the title bar of the login prompt dialog">
+        Authentication Required
+      </message>
+      <message name="IDS_LOGIN_DIALOG_DESCRIPTION" desc="String to be displayed in the login prompt dialog to explain what the user needs to do">
+        The server <ph name="DOMAIN">$1<ex>google.com</ex></ph> requires a username and password. The server says: <ph name="REALM">$2<ex>opaque string</ex></ph>.
+      </message>
+      <message name="IDS_LOGIN_DIALOG_DESCRIPTION_NO_REALM" desc="String to be displayed in the login prompt dialog to explain what the user needs to do">
+        The server <ph name="DOMAIN">$1<ex>google.com</ex></ph> requires a username and password.
+      </message>
+      <message name="IDS_LOGIN_DIALOG_USERNAME_FIELD" desc="The label of the username field in the login prompt dialog">
+        User Name:
+      </message>
+      <message name="IDS_LOGIN_DIALOG_PASSWORD_FIELD" desc="The label of the password field in the login prompt dialog">
+        Password:
+      </message>
+      <message name="IDS_LOGIN_DIALOG_OK_BUTTON_LABEL" desc="The label of the 'Log In' button on the login prompt dialog">
+        Log In
+      </message>
+      <!-- User Image Selection Dialog -->
+      <if expr="chromeos">
+        <message name="IDS_USER_IMAGE_SCREEN_TITLE" desc="String to be displayed in the title bar of the user image selection dialog">
+          Choose your account picture
+        </message>
+      </if>
+
+      <!-- FindInPage strings -->
+      <message name="IDS_FIND_IN_PAGE_COUNT" desc="How many matches found and what item we are showing">
+        <ph name="ACTIVE_MATCH">$1<ex>1</ex></ph> of <ph name="TOTAL_MATCHCOUNT">$2<ex>5</ex></ph>
+      </message>
+      <message name="IDS_FIND_IN_PAGE_PREVIOUS_TOOLTIP" desc="The tooltip for the previous button">
+        Previous
+      </message>
+      <message name="IDS_FIND_IN_PAGE_NEXT_TOOLTIP" desc="The tooltip for the next button">
+        Next
+      </message>
+      <message name="IDS_FIND_IN_PAGE_CLOSE_TOOLTIP" desc="The tooltip for the close button">
+        Close find bar
+      </message>
+
+      <!-- Fullscreen mode -->
+      <message name="IDS_EXIT_FULLSCREEN_MODE" desc="Clickable message displayed on entering full screen mode. Clicking on the link exits full screen mode.">
+        Exit full screen
+      </message>
+      <if expr="not chromeos">
+        <message name="IDS_EXIT_FULLSCREEN_MODE_ACCELERATOR" desc="Accelerator description shown next to a link showing 'Exit full screen' e.g. 'Exit full screen (Esc)', where 'Exit full screen' is a link.">
+          (<ph name="ACCELERATOR">$1<ex>Esc</ex></ph>)
+        </message>
+      </if>
+
+      <!-- Task Manager Window -->
+      <if expr="enable_task_manager">
+        <if expr="not use_titlecase">
+          <message name="IDS_TASK_MANAGER_KILL" desc="The caption of the Task Manager kill button">
+            End process
+          </message>
+          <message name="IDS_TASK_MANAGER_PROCESS_ID_COLUMN" desc="The title for Task Manager process ID column.">
+            Process ID
+          </message>
+          <message name="IDS_TASK_MANAGER_GDI_HANDLES_COLUMN" desc="The title for Task Manager GDI handles column.">
+            GDI handles
+          </message>
+          <message name="IDS_TASK_MANAGER_USER_HANDLES_COLUMN" desc="The title for Task Manager USER handles column.">
+            USER handles
+          </message>
+          <message name="IDS_TASK_MANAGER_TASK_COLUMN" desc="The text of the task column">
+            Task
+          </message>
+          <message name="IDS_TASK_MANAGER_NACL_DEBUG_STUB_PORT_COLUMN" desc="The text of the NativeClient debug stub port column">
+            NaCl debug port
+          </message>
+          <message name="IDS_TASK_MANAGER_NET_COLUMN" desc="The text of the network usage column">
+            Network
+          </message>
+          <message name="IDS_TASK_MANAGER_CPU_COLUMN" desc="The text of the CPU usage column">
+            CPU
+          </message>
+          <message name="IDS_TASK_MANAGER_PHYSICAL_MEM_COLUMN" desc="Task manager process memory column. This is the similar to the process 'working set' reported by the Windows Task Manager">
+            Memory
+          </message>
+          <message name="IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN" desc="Task manager process private memory column. This is the allocated size that cannot be shared with other processes">
+            Private memory
+          </message>
+          <message name="IDS_TASK_MANAGER_SHARED_MEM_COLUMN" desc="Task manager process shared memory column. Shows the size of the memory used by the process which is shared with other processes">
+            Shared memory
+          </message>
+          <message name="IDS_TASK_MANAGER_PROFILE_NAME_COLUMN" desc="The name of the column with the name of the profile in which the page is running, if any.">
+            Profile
+          </message>
+          <message name="IDS_TASK_MANAGER_IDLE_WAKEUPS_COLUMN" desc="Task manager idle processor wakeups column">
+            Idle wake ups
+          </message>
+          <message name="IDS_TASK_MANAGER_WEBCORE_IMAGE_CACHE_COLUMN" desc="Task manager WebCore image cache size column.">
+            Image cache
+          </message>
+          <message name="IDS_TASK_MANAGER_WEBCORE_SCRIPTS_CACHE_COLUMN" desc="Task manager WebCore scripts cache size column.">
+            Script cache
+          </message>
+          <message name="IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN" desc="Task manager WebCore CSS cache size column.">
+            CSS cache
+          </message>
+          <message name="IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN" desc="The text of the video memory usage column">
+            GPU memory
+          </message>
+          <message name="IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN" desc="Amount of memory used by SQLite.">
+            SQLite memory
+          </message>
+          <message name="IDS_TASK_MANAGER_JAVASCRIPT_MEMORY_ALLOCATED_COLUMN" desc="Task manager JavaScript memory allocated column.  Shows the amount of memory used by JavaScript within a process">
+            JavaScript memory
+          </message>
+        </if>
+        <if expr="use_titlecase">
+          <message name="IDS_TASK_MANAGER_KILL" desc="The caption of the Task Manager kill button">
+            End Process
+          </message>
+          <message name="IDS_TASK_MANAGER_PROCESS_ID_COLUMN" desc="The title for Task Manager process ID column.">
+            Process ID
+          </message>
+          <message name="IDS_TASK_MANAGER_GDI_HANDLES_COLUMN" desc="The title for Task Manager GDI handles column.">
+            GDI Handles
+          </message>
+          <message name="IDS_TASK_MANAGER_USER_HANDLES_COLUMN" desc="The title for Task Manager USER handles column.">
+            USER Handles
+          </message>
+          <message name="IDS_TASK_MANAGER_NACL_DEBUG_STUB_PORT_COLUMN" desc="The text of the NativeClient debug stub port column">
+            NaCl Debug Port
+          </message>
+          <message name="IDS_TASK_MANAGER_TASK_COLUMN" desc="The text of the task column">
+            Task
+          </message>
+          <message name="IDS_TASK_MANAGER_NET_COLUMN" desc="The text of the network usage column">
+            Network
+          </message>
+          <message name="IDS_TASK_MANAGER_CPU_COLUMN" desc="The text of the CPU usage column">
+            CPU
+          </message>
+          <message name="IDS_TASK_MANAGER_PHYSICAL_MEM_COLUMN" desc="Task manager process memory column. This is the similar to the process 'working set' reported by the Windows Task Manager">
+            Memory
+          </message>
+          <message name="IDS_TASK_MANAGER_PRIVATE_MEM_COLUMN" desc="Task manager process private memory column. This is the allocated size that cannot be shared with other processes">
+            Private Memory
+          </message>
+          <message name="IDS_TASK_MANAGER_SHARED_MEM_COLUMN" desc="Task manager process shared memory column. Shows the size of the memory used by the process which is shared with other processes">
+            Shared Memory
+          </message>
+          <message name="IDS_TASK_MANAGER_PROFILE_NAME_COLUMN" desc="The name of the column with the name of the profile in which the page is running, if any.">
+            Profile
+          </message>
+          <message name="IDS_TASK_MANAGER_IDLE_WAKEUPS_COLUMN" desc="Task manager idle processor wakeups column">
+            Idle Wake Ups
+          </message>
+          <message name="IDS_TASK_MANAGER_WEBCORE_IMAGE_CACHE_COLUMN" desc="Task manager WebCore image cache size column.">
+            Image Cache
+          </message>
+          <message name="IDS_TASK_MANAGER_WEBCORE_SCRIPTS_CACHE_COLUMN" desc="Task manager WebCore scripts cache size column.">
+            Script Cache
+          </message>
+          <message name="IDS_TASK_MANAGER_WEBCORE_CSS_CACHE_COLUMN" desc="Task manager WebCore CSS cache size column.">
+            CSS Cache
+          </message>
+          <message name="IDS_TASK_MANAGER_VIDEO_MEMORY_COLUMN" desc="The text of the video memory usage column">
+            GPU Memory
+          </message>
+          <message name="IDS_TASK_MANAGER_SQLITE_MEMORY_USED_COLUMN" desc="Amount of memory used by SQLite.">
+            SQLite Memory
+          </message>
+          <message name="IDS_TASK_MANAGER_JAVASCRIPT_MEMORY_ALLOCATED_COLUMN" desc="Task manager JavaScript memory allocated column.  Shows the amount of memory used by JavaScript within a process">
+            JavaScript Memory
+          </message>
+        </if>
+        <message name="IDS_TASK_MANAGER_ABOUT_MEMORY_LINK" desc="The caption of the Task Manager link to about:memory">
+          Stats for nerds
+        </message>
+        <message name="IDS_TASK_MANAGER_MEM_CELL_TEXT" desc="The value displayed in the memory usage cells.">
+          <ph name="NUM_KILOBYTES">$1<ex>5,000</ex></ph>K
+        </message>
+        <message name="IDS_TASK_MANAGER_CACHE_SIZE_CELL_TEXT" desc="The value displayed in the cache size cells.">
+          <ph name="NUM_KILOBYTES">$1<ex>5,000</ex></ph>K (<ph name="NUM_KILOBYTES_LIVE">$2<ex>5,000</ex></ph>K live)
+        </message>
+        <message name="IDS_TASK_MANAGER_NA_CELL_TEXT" desc="The value displayed for network / webcache usage when the information is not available (Not Applicable).">
+          N/A
+        </message>
+        <message name="IDS_TASK_MANAGER_HANDLES_CELL_TEXT" desc="The value displayed in the user/gdi cells.">
+          <ph name="NUM_HANDLES">$1<ex>300</ex></ph> (<ph name="NUM_KILOBYTES_LIVE">$2<ex>500</ex></ph> peak)
+        </message>
+        <message name="IDS_TASK_MANAGER_WEB_BROWSER_CELL_TEXT" desc="The text of the web browser process row">
+          Browser
+        </message>
+        <message name="IDS_TASK_MANAGER_EXTENSION_PREFIX" desc="The prefix for a Task Manager extension row (always visible if the extension has a view)">
+          Extension: <ph name="EXTENSION_NAME">$1<ex>Sample Extension</ex></ph>
+        </message>
+        <message name="IDS_TASK_MANAGER_EXTENSION_INCOGNITO_PREFIX" desc="The prefix for a Task Manager incognito extension row (may not be visible if incognito is not open)">
+          Incognito Extension: <ph name="EXTENSION_NAME">$1<ex>Sample Extension</ex></ph>
+        </message>
+        <message name="IDS_TASK_MANAGER_APP_PREFIX" desc="The prefix for a Task Manager app row (always visible if the app has a view)">
+          App: <ph name="APP_NAME">$1<ex>Sample App</ex></ph>
+        </message>
+        <message name="IDS_TASK_MANAGER_APP_INCOGNITO_PREFIX" desc="The prefix for a Task Manager incognito app row (may not be visible if the app is not open in incognito)">
+          Incognito App: <ph name="APP_NAME">$1<ex>Sample App</ex></ph>
+        </message>
+        <message name="IDS_TASK_MANAGER_TAB_PREFIX" desc="The prefix for a Task Manager Tab row">
+          Tab: <ph name="TAB_NAME">$1<ex>Google</ex></ph>
+        </message>
+        <message name="IDS_TASK_MANAGER_TAB_INCOGNITO_PREFIX" desc="The prefix for a Task Manager incognito Tab row (may not be visible if incognito is not open)">
+          Incognito Tab: <ph name="TAB_NAME">$1<ex>Google</ex></ph>
+        </message>
+        <message name="IDS_TASK_MANAGER_BACKGROUND_PREFIX" desc="The prefix for a Task Manager background page row">
+          Background Page: <ph name="BACKGROUND_PAGE_URL">$1<ex>http://www.google.com</ex></ph>
+        </message>
+        <message name="IDS_TASK_MANAGER_PLUGIN_PREFIX" desc="The prefix for a Task Manager plugin row">
+          Plug-in: <ph name="PLUGIN_NAME">$1<ex>Unknown Plug-in</ex></ph>
+        </message>
+        <message name="IDS_TASK_MANAGER_PLUGIN_BROKER_PREFIX" desc="Task Manager row for PPAPI plugin broker, which provides additional access for PPAPI plugins">
+          Plug-in Broker: <ph name="PLUGIN_NAME">$1<ex>Unknown Plug-in</ex></ph>
+        </message>
+        <message name="IDS_TASK_MANAGER_PRERENDER_PREFIX" desc="The prefix for a Task Manager prerender row">
+          Prerender: <ph name="PRERENDER_CONTENTS_NAME">$1<ex>http://www.google.com</ex></ph>
+        </message>
+        <message name="IDS_TASK_MANAGER_UNKNOWN_PLUGIN_NAME" desc="The prefix for a Task Manager plugin row">
+          Unknown plug-in
+        </message>
+        <message name="IDS_TASK_MANAGER_WORKER_PREFIX" desc="The prefix for a Task Manager HTML5 Web Worker process row">
+          Web Worker: <ph name="WORKER_NAME">$1<ex>http://www.domain.com</ex></ph>
+        </message>
+        <message name="IDS_TASK_MANAGER_UTILITY_PREFIX" desc="The prefix for a utility process row">
+          Utility:
+        </message>
+        <message name="IDS_TASK_MANAGER_NACL_PREFIX" desc="The prefix for a Task Manager Native Client module row">
+          Native Client module: <ph name="NEXE_NAME">$1<ex>Unknown Native Client module</ex></ph>
+        </message>
+        <message name="IDS_TASK_MANAGER_NACL_BROKER_PREFIX" desc="Task Manager row for Native Client broker, which acts as the sanbox manager for NaCl processes">
+          Native Client security manager
+        </message>
+        <message name="IDS_TASK_MANAGER_GPU_PREFIX" desc="Task Manager row for the GPU process, which is the process doing all accelerated graphics rendering">
+          GPU Process
+        </message>
+        <message name="IDS_TASK_MANAGER_PRINT_PREFIX" desc="The prefix for a print preview process row in the Task Manager">
+          Print: <ph name="PRINT_NAME">$1<ex>Google Maps</ex></ph>
+        </message>
+        <message name="IDS_TASK_MANAGER_SUBFRAME_PREFIX" desc="The prefix for a out-of-process-iframe row in the Task Manager (these processes are created when site isolation is enabled)">
+          Subframe: <ph name="SUBFRAME_SITE">$1<ex>https://youtube.com/</ex></ph>
+        </message>
+        <message name="IDS_TASK_MANAGER_SUBFRAME_INCOGNITO_PREFIX" desc="The prefix for an Incognito out-of-process-iframe process row in the Task Manager (these processes are created when site isolation is enabled, in incognito mode)">
+          Incognito Subframe: <ph name="SUBFRAME_SITE">$1<ex>https://youtube.com/</ex></ph>
+        </message>
+      </if>
+
+      <if expr="not is_android">
+        <!-- Performance Monitor page -->
+        <message name="IDS_PERFORMANCE_MONITOR_TITLE" desc="Title for the Performance tab.">
+          Performance
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_FLAG_NOT_ENABLED_WARNING" desc="The warning which indicates that the kPerformanceMonitorGathering flag has not been enabled.">
+          Warning: You do not have the performance monitoring flag enabled! Data displayed will be limited to any data which were gathered previously.
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_ENABLE_FLAG" desc="The text displayed for the link to enable the performance monitor flag.">
+          Enable
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_NO_AGGREGATION_WARNING" desc="The warning which indicates that the page may be slow because the data are not being aggregated.">
+          Warning: The data are not being aggregated! This may cause the page to be slow!
+        </message>
+        <!-- Time Range-Related -->
+        <message name="IDS_PERFORMANCE_MONITOR_TIME_RANGE_SECTION" desc="Text displayed for the header of the section which allows the user to choose the window of time for which to display data.">
+          Time Range
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_TIME_RESOLUTION_CATEGORY" desc="Text displayed for the category of different time resolutions, allowing the user to choose the granularity of the data.">
+          Time Resolution
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_TIME_LAST_FIFTEEN_MINUTES" desc="Text displayed for the time option to display data for the most recent fifteen minutes.">
+          Last 15 Minutes
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_TIME_LAST_HOUR" desc="Text displayed for the time option to display data for the most recent hour.">
+          Last Hour
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_TIME_LAST_DAY" desc="Text displayed for the time option to display data for the most recent day.">
+          Last Day
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_TIME_LAST_WEEK" desc="Text displayed for the time option to display data for the most recent week.">
+          Last Week
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_TIME_LAST_MONTH" desc="Text displayed for the time option to display data for the most recent month.">
+          Last Month
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_TIME_LAST_QUARTER" desc="Text displayed for the time option to display data for the most recent quarter-year.">
+          Last Quarter
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_TIME_RANGE_BUTTON_HEADING" desc="Text displayed above the buttons to adjust the time range.">
+          Shift Time Window
+        </message>
+        <!-- Aggregation-Related -->
+        <message name="IDS_PERFORMANCE_MONITOR_AGGREGATION_CATEGORY" desc="Text displayed for the Aggregation category title.">
+          Aggregation Method
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_AGGREGATION_NONE_NAME" desc="Text displayed for the None aggregation strategy title.">
+          None
+        </message>
+        <message name = "IDS_PERFORMANCE_MONITOR_AGGREGATION_NONE_DESCRIPTION" desc="Text displayed on mouseover of the None aggregation strategy title.">
+          Do not aggregate the data - this may be slow!
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_AGGREGATION_MEDIAN_NAME" desc="Text displayed for the Median aggregation strategy title.">
+          Median
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_AGGREGATION_MEDIAN_DESCRIPTION" desc="Text displayed on mouseover of the Median aggregation strategy title.">
+          Use medians, minimizing outlier effect in performance data
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_AGGREGATION_MEAN_NAME" desc="Text displayed for the Mean aggregation strategy title.">
+          Mean
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_AGGREGATION_MEAN_DESCRIPTION" desc="Text displayed on mouseover of the Mean aggregation strategy title.">
+          Weight all values equally in performance data
+        </message>
+        <!-- Event-Related -->
+        <message name="IDS_PERFORMANCE_MONITOR_EVENTS_SECTION" desc="Text displayed for the header of the Events section.">
+          Events to Display
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSIONS_EVENT_CATEGORY" desc="Text displayed for the Extensions events category title.">
+          Extensions
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSIONS_EVENT_CATEGORY_DESCRIPTION" desc="Text displayed on mouseover of the Extension event category.">
+          Events that are related to any extensions that are (or have been) installed in <ph name="SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph>
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_INSTALL_EVENT" desc="Text displayed for the Extension Install event title.">
+          Installs
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_INSTALL_EVENT_DESCRIPTION" desc="Text displayed on mouseover of the Extension Install event checkbox.">
+          Occurrences when an extension was installed
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_INSTALL_EVENT_MOUSEOVER" desc="Text displayed on mouseover of an Extension Install event.">
+          Extension Installed
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_UNINSTALL_EVENT" desc="Text displayed for the Extension Uninstall event title.">
+          Uninstalls
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_UNINSTALL_EVENT_DESCRIPTION" desc="Text displayed on mouseover of the Extension Uninstall event checkbox.">
+          Occurrences when an extension was uninstalled
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_UNINSTALL_EVENT_MOUSEOVER" desc="Text displayed on mouseover of an Extension Uninstall event.">
+          Extension Uninstalled
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_UPDATE_EVENT" desc="Text displayed for the Extension Update event title.">
+          Updates
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_UPDATE_EVENT_DESCRIPTION" desc="Text displayed on mouseover of the Extension Update event checkbox.">
+          Occurrences when an extension was updated
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_UPDATE_EVENT_MOUSEOVER" desc="Text displayed on mouseover of an Extension Update event.">
+          Extension Updated
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_ENABLE_EVENT" desc="Text displayed for the Extension Enable event title.">
+          Enables
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_ENABLE_EVENT_DESCRIPTION" desc="Text displayed on mouseover of the Extension Enable event checkbox.">
+          Occurrences when an extension was enabled
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_ENABLE_EVENT_MOUSEOVER" desc="Text displayed on mouseover of an Extension Enable event.">
+          Extension Enabled
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_DISABLE_EVENT" desc="Text displayed for the Extension Disable event title.">
+          Disables
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_DISABLE_EVENT_DESCRIPTION" desc="Text displayed on mouseover of the Extension Disable event checkbox.">
+          Occurrences when an extension was disabled
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_DISABLE_EVENT_MOUSEOVER" desc="Text displayed on mouseover of an Extension Disable event.">
+          Extension Disabled
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_CHROME_EVENT_CATEGORY_DESCRIPTION" desc="Text displayed on mouseover of the Chrome event category.">
+          Events that are related to the <ph name="SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> system.
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_CHROME_UPDATE_EVENT" desc="Text displayed for the Chrome Update event title.">
+          Updates
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_CHROME_UPDATE_EVENT_DESCRIPTION" desc="Text displayed on mouseover of the Chrome Update event checkbox.">
+          Occurrences when the version of <ph name="SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> changed
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_CHROME_UPDATE_EVENT_MOUSEOVER" desc="Text displayed on mouseover of a Chrome Update event.">
+          <ph name="SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> Updated
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXCEPTIONS_EVENT_CATEGORY" desc="Text displayed for the Exceptions events' category title">
+          Exceptions
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXCEPTIONS_EVENT_CATEGORY_DESCRIPTION" desc="Text displayed on mouseover of the Exceptions event category.">
+          Events relating to <ph name="SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> crashes and failures
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_RENDERER_HANG_EVENT" desc="Text displayed for the Renderer Freeze event title.">
+          Renderer Freezes
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_RENDERER_HANG_EVENT_DESCRIPTION" desc="Text displayed on mouseover of the Renderer Freeze event checkbox.">
+          Occurrences when a tab became unresponsive
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_RENDERER_HANG_EVENT_MOUSEOVER" desc="Text displayed on mouseover of a Renderer Freeze event.">
+          Renderer Froze
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_RENDERER_CRASH_EVENT" desc="Text displayed for the Renderer Crash event title.">
+          Renderer Crashes
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_RENDERER_CRASH_EVENT_DESCRIPTION" desc="Text displayed on mouseover of the Renderer Crash event checkbox.">
+          Occurrences when a tab crashed ("<ph name="IDS_SAD_TAB_TITLE">$1<ex>Aw, Snap!</ex></ph>")
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_RENDERER_CRASH_EVENT_MOUSEOVER" desc="Text dispalyed on mouseover of a Renderer Crash event.">
+          Renderer Crashed
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_RENDERER_KILLED_EVENT" desc="Text displayed for the Killed By OS Crash event title.">
+          Process Kills
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_RENDERER_KILLED_EVENT_DESCRIPTION" desc="Text displayed on mouseover of the Killed By OS Crash event checkbox.">
+          Occurrences when the OS killed a tab's process ("<ph name="IDS_KILLED_TAB_TITLE">$1<ex>He's dead, Jim!</ex></ph>")
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_RENDERER_KILLED_EVENT_MOUSEOVER" desc="Text displayed on mouseover of a Killed By OS Crash event.">
+          Process Killed
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_UNCLEAN_EXIT_EVENT" desc="Text displayed for the Unclean Exit event title.">
+          Unclean Exits
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_UNCLEAN_EXIT_EVENT_DESCRIPTION" desc="Text displayed on mouseover of the Unclean Exit event checkbox.">
+          Occurrences when <ph name="SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> did not shut down correctly
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_UNCLEAN_EXIT_EVENT_MOUSEOVER" desc="Text displayed on mouseover of an Unclean Exit event.">
+          Unclean Exit
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EVENT_TIME_MOUSEOVER" desc="Text displayed for the Time field of an event mouseover.">
+          Time
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_ID_MOUSEOVER" desc="Text displayed for the Extension ID field of an event mouseover.">
+          Extension ID
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_NAME_MOUSEOVER" desc="Text displayed for the Extension Name field of an event mouseover.">
+          Extension Name
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_URL_MOUSEOVER" desc="Text displayed for the Extension URL field of an event mouseover.">
+          Extension URL
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_LOCATION_MOUSEOVER" desc="Text displayed for the Extension Location field of an event mouseover.">
+          Extension Location
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_VERSION_MOUSEOVER" desc="Text displayed for the Extension Version field of an event mouseover.">
+          Extension Version
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_EXTENSION_DESCRIPTION_MOUSEOVER" desc="Text displayed for the Extension Description field of an event mouseover.">
+          Extension Description
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_PREVIOUS_VERSION_MOUSEOVER" desc="Text displayed for the Previous Version field of an event mouseover.">
+          Previous Version
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_CURRENT_VERSION_MOUSEOVER" desc="Text displayed for the Current Version field of an event mouseover.">
+          Current Version
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_URL_MOUSEOVER" desc="Text displayed for the URL field of an event mouseover.">
+          URL
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_PROFILE_NAME_MOUSEOVER" desc="Text displayed for the Profile Name field of an event mouseover.">
+          Profile Name
+        </message>
+        <!--- Metric-Related -->
+        <message name="IDS_PERFORMANCE_MONITOR_METRICS_SECTION" desc="Text displayed for header of the Metrics section.">
+          Metrics to Display
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_CPU_METRIC_CATEGORY" desc="Text displayed for the CPU metrics' category title">
+          CPU
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_CPU_METRIC_CATEGORY_DESCRIPTION" desc="Text displayed on mouseover of the CPU metric category.">
+          Metrics relating to the effect of <ph name="SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> on the system's CPU
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_CPU_USAGE_METRIC" desc="Text displayed for the CPU Usage metric title.">
+          CPU Usage
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_CPU_USAGE_METRIC_DESCRIPTION" desc="Text displayed for mouseover of the CPU Usage metric.">
+          The combined CPU usage of all processes related to <ph name="SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph>
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_MEMORY_METRIC_CATEGORY" desc="Text displayed for the Memory metrics' category title">
+          Memory
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_MEMORY_METRIC_CATEGORY_DESCRIPTION" desc = "Text displayed on mouseover of the Memory metric category.">
+          Metrics relating to the effect of <ph name="SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> on the system's memory
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_PRIVATE_MEMORY_USAGE_METRIC" desc="Text displayed for the Private Memory Usage metric title.">
+          Private Memory Usage
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_PRIVATE_MEMORY_USAGE_METRIC_DESCRIPTION" desc="Text displayed on mouseover of the Private Memory Usage metric.">
+          The combined private memory usage of all processes related to <ph name="SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph>
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_SHARED_MEMORY_USAGE_METRIC" desc="Text displayed for the Shared Memory Usage metric title.">
+          Shared Memory Usage
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_SHARED_MEMORY_USAGE_METRIC_DESCRIPTION" desc="Text displayed on mouseover of the Shared Memory Usage metric.">
+          The combined shared memory usage of all processes related to <ph name="SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph>
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_TIMING_METRIC_CATEGORY" desc="Text displayed for the Timing metrics' category title">
+          Timing
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_TIMING_METRIC_CATEGORY_DESCRIPTION" desc="Text displayed on mouseover of the Timing metric category.">
+          Metrics relating to the speed with which <ph name="SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> performs requested actions
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_STARTUP_TIME_METRIC" desc="Text displayed for the Startup Time metric title.">
+          Startups
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_STARTUP_TIME_METRIC_DESCRIPTION" desc="Text displayed on mouseover of the Startup Time metric.">
+          The time it takes to fully start <ph name="SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph>
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_TEST_STARTUP_TIME_METRIC" desc="Text displayed for the Test Startup Time metric title.">
+          Test Startups
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_TEST_STARTUP_TIME_METRIC_DESCRIPTION" desc="Text displayed on mouseover of the Test Startup Time metric.">
+          The time it takes to fully start <ph name="SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> in a testing environment
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_SESSION_RESTORE_TIME_METRIC" desc="Text displayed for the Session Restore Time metric title.">
+          Session Restores
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_SESSION_RESTORE_TIME_METRIC_DESCRIPTION" desc="Text dispalyed on mouseover of the Session Restore Time metric.">
+          The time it takes to restore a previous browsing session
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_PAGE_LOAD_TIME_METRIC" desc="Text displayed for the Page Load Time metric title.">
+          Page Loads
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_PAGE_LOAD_TIME_METRIC_DESCRIPTION" desc="Text displayed on mouseover of the Page Load Time metric.">
+          The time it takes to load a web page
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_NETWORK_METRIC_CATEGORY" desc="Text displayed for the Network metrics' category title.">
+          Network
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_NETWORK_METRIC_CATEGORY_DESCRIPTION" desc="Text displayed on mouseover of the Network metric category.">
+          Metrics related to the network usage of <ph name="SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph>
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_NETWORK_BYTES_READ_METRIC" desc="Text displayed for the Network Bytes Read metric title.">
+          Bytes Read
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_NETWORK_BYTES_READ_METRIC_DESCRIPTION" desc="Text displayed on mouseover of the Network Bytes Read metric.">
+          The number of bytes read across the network
+        </message>
+        <!-- Units -->
+        <message name="IDS_PERFORMANCE_MONITOR_BYTES_UNIT" desc="Text displayed for when a unit is in bytes.">
+          Bytes
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_KILOBYTES_UNIT" desc="Text displayed for when a unit is in kilobytes.">
+          Kilobytes
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_MEGABYTES_UNIT" desc="Text displayed for when a unit is in megabytes.">
+          Megabytes
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_GIGABYTES_UNIT" desc="Text displayed for when a unit is in gigabytes.">
+          Gigabytes
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_TERABYTES_UNIT" desc="Text displayed for when a unit is in terabytes.">
+          Terabytes
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_MICROSECONDS_UNIT" desc="Text displayed for when a unit is in microseconds.">
+          Microseconds
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_MILLISECONDS_UNIT" desc="Text displayed for when a unit is in milliseconds.">
+          Milliseconds
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_SECONDS_UNIT" desc="Text displayed for when a unit is in seconds.">
+          Seconds
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_MINUTES_UNIT" desc="Text displayed for when a unit is in minutes.">
+          Minutes
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_HOURS_UNIT" desc="Text displayed for when a unit is in hours.">
+          Hours
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_DAYS_UNIT" desc="Text displayed for when a unit is in days.">
+          Days
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_WEEKS_UNIT" desc="Text displayed for when a unit is in weeks.">
+          Weeks
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_MONTHS_UNIT" desc="Text displayed for when a unit is in months.">
+          Months
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_YEARS_UNIT" desc="Text displayed for when a unit is in years.">
+          Years
+        </message>
+        <message name="IDS_PERFORMANCE_MONITOR_PERCENT_UNIT" desc="Text displayed for when a unit is in percent.">
+          Percent
+        </message>
+      </if>
+
+      <!-- Theme preview info bar -->
+      <message name="IDS_THEME_INSTALL_INFOBAR_LABEL" desc="Text displayed on an infobar when a theme has been installed.">
+        Installed theme "<ph name="THEME_NAME">$1<ex>Snowflake Theme</ex></ph>".
+      </message>
+      <message name="IDS_THEME_INSTALL_INFOBAR_UNDO_BUTTON" desc="Text displayed on the button to undo a theme installation and go back to the previous theme.">
+        Undo
+      </message>
+
+      <!-- Extension/App disabled notification -->
+      <message name="IDS_EXTENSION_DISABLED_ERROR_LABEL" desc="Text displayed when an extension was disabled due to a new upgrade requiring an explicit permission check from the user.">
+        The newest version of the extension "<ph name="EXTENSION_NAME">$1<ex>Flashblock</ex></ph>" requires more permissions, so it has been disabled.
+      </message>
+      <message name="IDS_APP_DISABLED_ERROR_LABEL" desc="Text displayed when an app was disabled due to a new upgrade requiring an explicit permission check from the user.">
+        The newest version of the app "<ph name="APP_NAME">$1<ex>Pandora</ex></ph>" requires more permissions, so it has been disabled.
+      </message>
+      <message name="IDS_EXTENSION_DISABLED_ERROR_TITLE" desc="Title of the notification that an extension or app was disabled due to a new upgrade requiring an explicit permission check from the user.">
+        <ph name="EXTENSION_NAME">$1<ex>Adblock</ex></ph> requires new permissions
+      </message>
+      <message name="IDS_EXTENSION_IS_BLACKLISTED" desc="Text displayed in an infobar when an extension is blacklisted and prevented from being installed.">
+        Google has flagged "<ph name="EXTENSION_NAME">$1<ex>Google Talk</ex></ph>" as malicious and installation has been prevented.
+      </message>
+      <message name="IDS_EXTENSION_DISABLED_REMOTE_INSTALL_ERROR_LABEL" desc="Text displayed when an extension was disabled due to it being installed server side, requiring an explicit permission check from the user.">
+        The extension "<ph name="EXTENSION_NAME">$1<ex>Flashblock</ex></ph>" was installed remotely.
+      </message>
+      <message name="IDS_APP_DISABLED_REMOTE_INSTALL_ERROR_LABEL" desc="Text displayed when an extension was disabled due to it being installed server side, requiring an explicit permission check from the user.">
+        The app "<ph name="EXTENSION_NAME">$1<ex>Flashblock</ex></ph>" was installed remotely.
+      </message>
+      <message name="IDS_EXTENSION_DISABLED_REMOTE_INSTALL_ERROR_TITLE" desc="Title of the notification that an extension or app was disabled due to it being installed server side, requiring an explicit permission check from the user.">
+        <ph name="EXTENSION_NAME">$1<ex>Adblock</ex></ph> was installed remotely
+      </message>
+
+      <!-- Extension install prompt -->
+      <message name="IDS_EXTENSION_INSTALL_PROMPT_TITLE" desc="Titlebar of the extension or app installation prompt window">
+        Confirm Installation
+      </message>
+      <message name="IDS_EXTENSION_INSTALL_APP_PROMPT_TITLE" desc="Titlebar of the app installation prompt window">
+        Confirm New App
+      </message>
+      <message name="IDS_EXTENSION_INSTALL_EXTENSION_PROMPT_TITLE" desc="Titlebar of the extension installation prompt window">
+        Confirm New Extension
+      </message>
+      <message name="IDS_EXTENSION_INSTALL_THEME_PROMPT_TITLE" desc="Titlebar of the theme installation prompt window">
+        Confirm New Theme
+      </message>
+      <message name="IDS_EXTENSION_UNINSTALL_PROMPT_TITLE" desc="Titlebar of the extension or app uninstallation prompt window">
+        Confirm Removal
+      </message>
+      <message name="IDS_EXTENSION_RE_ENABLE_PROMPT_TITLE" desc="Titlebar of the extension or app prompt window when re-enabling an extension that requires additional permissions">
+        Confirm Re-enable
+      </message>
+      <message name="IDS_EXTENSION_PERMISSIONS_PROMPT_TITLE" desc="Titlebar of the extension or app permissions prompt window">
+        Confirm Permissions
+      </message>
+      <message name="IDS_EXTENSION_POST_INSTALL_PERMISSIONS_PROMPT_TITLE" desc="Titlebar of the extension or app permissions review window">
+        Current Permissions
+      </message>
+      <message name="IDS_EXTENSION_LAUNCH_APP_PROMPT_TITLE" desc="Titlebar of the app launch prompt window">
+        Confirm Launch App
+      </message>
+      <message name="IDS_EXTENSION_REPAIR_EXTENSION_PROMPT_TITLE" desc="Titlebar of the reinstall/repair extension prompt window.">
+        Repair Extension
+      </message>
+      <message name="IDS_EXTENSION_REPAIR_APP_PROMPT_TITLE" desc="Titlebar of the reinstall/repair app prompt window.">
+        Repair App
+      </message>
+      <message name="IDS_EXTENSION_REMOTE_INSTALL_APP_PROMPT_TITLE" desc="Titlebar of the app installation prompt window when an app was installed remotely">
+        Confirm New App
+      </message>
+      <message name="IDS_EXTENSION_REMOTE_INSTALL_EXTENSION_PROMPT_TITLE" desc="Titlebar of the extension installation prompt window when an app was installed remotely">
+        Confirm New Extension
+      </message>
+      <message name="IDS_EXTENSION_INSTALL_PROMPT_HEADING" desc="First bold line in the content area of the extension or app installation prompt. Asks the user if they want to install a particular extension or app.">
+        Add "<ph name="EXTENSION_NAME">$1<ex>Gmail Checker</ex></ph>"?
+      </message>
+      <message name="IDS_EXTENSION_BUNDLE_INSTALL_PROMPT_HEADING_EXTENSIONS" desc="First bold line in the content area of the extension bundle installation prompt. Asks the user if they want to install the set of extensions.">
+        Install these extensions?
+      </message>
+      <message name="IDS_EXTENSION_BUNDLE_INSTALL_PROMPT_HEADING_APPS" desc="First bold line in the content area of the app bundle installation prompt. Asks the user if they want to install the set of apps.">
+        Install these apps?
+      </message>
+      <message name="IDS_EXTENSION_BUNDLE_INSTALL_PROMPT_HEADING_EXTENSION_APPS" desc="First bold line in the content area of the extension and app bundle installation prompt. Asks the user if they want to install the set of apps and extensions.">
+        Install these apps and extensions?
+      </message>
+      <message name="IDS_EXTENSION_UNINSTALL_PROMPT_HEADING" desc="First bold line in the content area of the extension or app uninstallation prompt. Asks the user if they want to uninstall a particular extension or app.">
+        Remove "<ph name="EXTENSION_NAME">$1<ex>Gmail Checker</ex></ph>"?
+      </message>
+      <message name="IDS_EXTENSION_PROGRAMMATIC_UNINSTALL_PROMPT_HEADING" desc="First bold line in the content area of the extension or app uninstallation prompt when the uninstallation is programmatically triggered by another extension. Asks the user if they want to uninstall a particular extension or app.">
+        "<ph name="TRIGGERING_EXTENSION_NAME">$1<ex>Extension Manager</ex></ph>" would like to remove "<ph name="EXTENSION_NAME">$2<ex>Gmail Checker</ex></ph>".
+      </message>
+      <message name="IDS_EXTENSION_RE_ENABLE_PROMPT_HEADING" desc="First bold line in the content area of the extension or app installation prompt. Asks the user if they want to re-enable a particular extension or app.">
+        The newest version of "<ph name="EXTENSION_NAME">$1<ex>Gmail Checker</ex></ph>" has been disabled because it requires more permissions.
+      </message>
+      <message name="IDS_EXTENSION_PERMISSIONS_PROMPT_HEADING" desc="First bold line in the content area of the extension or app permissions prompt. Asks the user if they want to grant the permissions to the particular extension or app.">
+        "<ph name="EXTENSION_NAME">$1<ex>Gmail Checker</ex></ph>" has requested additional permissions.
+      </message>
+      <message name="IDS_EXTENSION_POST_INSTALL_PERMISSIONS_PROMPT_HEADING" desc="First bold line in the content area of the extension or app permissions prompt. Shows the user the permissions a particular extension or app has.">
+        <ph name="EXTENSION_NAME">$1<ex>Gmail Checker</ex></ph>
+      </message>
+      <message name="IDS_EXTENSION_LAUNCH_APP_PROMPT_HEADING" desc="First bold line in the content area of the app launch prompt. Asks the user if they want to launch a particular app.">
+        Try "<ph name="EXTENSION_NAME">$1<ex>Gmail Checker</ex></ph>"?
+      </message>
+      <message name="IDS_EXTENSION_REMOTE_INSTALL_PROMPT_HEADING" desc="First bold line in the content area of the extension or app installation prompt. Asks the user if they want to enable a particular extension or app that was installed remotely.">
+        Enable "<ph name="EXTENSION_NAME">$1<ex>Gmail Checker</ex></ph>"?
+      </message>
+      <message name="IDS_EXTENSION_REPAIR_PROMPT_HEADING" desc="First bold line in the content area of the extension or app installation prompt. Asks the user if they want to update the extension/app.">
+        Repair "<ph name="EXTENSION_NAME">$1<ex>Gmail Checker</ex></ph>"?
+      </message>
+
+      <!-- Extension alerts. -->
+      <message name="IDS_EXTENSION_ALERT_TITLE" desc="Titlebar of the extension notification alert">
+        Confirm Changes
+      </message>
+      <message name="IDS_EXTENSION_ALERT_ITEM_EXTERNAL" desc="A statement that an external extension has been newly installed. End users have no idea what an 'external' extension is, so we simply call them extensions.">
+        The extension "<ph name="EXTENSION_NAME">$1<ex>Gmail Checker</ex></ph>" has been added.
+      </message>
+      <message name="IDS_EXTENSION_ALERT_ITEM_BLACKLISTED" desc="A statement that an extension has been newly blacklisted. http://www.google.com/support/chrome/bin/answer.py?hl=en&amp;answer=1210215 contains the language on which we're basing the phrasing.">
+        The extension "<ph name="EXTENSION_NAME">$1<ex>Gmail Checker</ex></ph>" was automatically removed.
+      </message>
+      <message name="IDS_APP_ALERT_ITEM_EXTERNAL" desc="A statement that an external packaged app has been newly installed. End users have no idea what an 'external' app is, so we simply call them apps.">
+        The app "<ph name="EXTENSION_NAME">$1<ex>Gmail</ex></ph>" has been added.
+      </message>
+      <message name="IDS_APP_ALERT_ITEM_BLACKLISTED" desc="A statement that a packaged app has been newly blacklisted. http://www.google.com/support/chrome/bin/answer.py?hl=en&amp;answer=1210215 contains the language on which we're basing the phrasing.">
+        The app "<ph name="EXTENSION_NAME">$1<ex>Gmail</ex></ph>" was automatically removed.
+      </message>
+      <message name="IDS_EXTENSION_ALERT_ITEM_OK" desc="The title of the default button acknowledging the information presented.">
+        OK
+      </message>
+      <message name="IDS_EXTENSION_ALERT_ITEM_DETAILS" desc="The title of the button asking for more information.">
+        Details
+      </message>
+
+      <!-- Extension/App install dialog strings -->
+      <message name="IDS_EXTENSION_PROMPT_APP_CONNECT_FROM_INCOGNITO" desc="Shown when a website tries to connect to an app from incognito mode, prompting the user to allow or deny the request.">
+        Allow <ph name="ORIGIN">$1<ex>http://www.google.com</ex></ph> to communicate with the app "<ph name="EXTENSION_NAME">$2<ex>Gmail</ex></ph>"?
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_EXTENSION_CONNECT_FROM_INCOGNITO" desc="Shown when a website tries to connect to an extension from incognito mode, prompting the user to allow or deny the request.">
+        Allow <ph name="ORIGIN">$1<ex>http://www.google.com</ex></ph> to communicate with the extension "<ph name="EXTENSION_NAME">$2<ex>Gmail Checker</ex></ph>"?
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO" desc="Second line in the content area of the extension or app installation prompt. Note that the exact wording is important. This should mean that the extension or app _can_ access the listed privileges, but not necessarily that it will or needs to.">
+        It can:
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WILL_NOW_HAVE_ACCESS_TO" desc="Second line in the content area of the extension or app re-enable prompt. Note that the exact wording is important. This should mean that the extension _can now_ access the listed privileges, but not necessarily that it will or needs to. This message appeared because the user must approve new permissions of the extension or app.">
+        It can now:
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_THESE_WILL_HAVE_ACCESS_TO" desc="Header for the permissions area of the bundled extension or app installation prompt. Note that the exact wording is important. This means that the extensions or apps _can_ access the listed privileges, but not necessarily that it will or needs to.">
+        They can:
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WANTS_ACCESS_TO" desc="Second line in the content area of the extension or app permissions prompt. Note that the exact wording is important. This should mean that the extension _wants to_ access the listed privileges, but not necessarily that it will or needs to. This message appeared because the user must approve new permissions of the extension or app.">
+        It could:
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_CAN_ACCESS" desc="Second line in the content area of the extension or app permissions view dialog. Note that the exact wording is important. This should mean that the extension _can now_ access the listed privileges, because it has already been installed. This message appeared because the user must approve new permissions of the extension or app.">
+        It can:
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WITHHELD" desc="Header for withheld permissions warning on extension install.">
+        Warning: You've enabled the --scripts-require-action flag on this computer, which limits the capabilities of this extension. However, other devices may not support this flag or have it enabled. On these devices, this extension can also:
+      </message>
+      <message name="IDS_EXTENSION_NO_SPECIAL_PERMISSIONS" desc="Shown when the app/extension requires no special permission">
+        Has no special permissions.
+      </message>
+
+      <message name="IDS_EXTENSION_PERMISSION_LINE" desc="Template for item in list of privileges that an extension or app has">
+          • <ph name="PERMISSION">$1<ex>Read and change all your data on the websites you visit</ex></ph>
+      </message>
+      <message name="IDS_EXTENSION_RATING_COUNT" desc="Number of ratings an app or extensions has (displayed after star icons)">
+        (<ph name="RATING_COUNT">$1<ex>46</ex></ph>)
+      </message>
+      <message name="IDS_EXTENSION_USER_COUNT" desc="Number of users an app or extension has">
+        <ph name="USER_COUNT">$1<ex>10,479</ex></ph> users
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_STORE_LINK" desc="Anchor text for link to Chrome Web Store in app or extension installation dialog">
+        View details
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_OAUTH_HEADER" desc="A line of explanatory text that precedes all GAIA account permissions that an extension requests. This is shown during installation.">
+        On your <ph name="ACCOUNT_EMAIL">$1<ex>user@example.com</ex></ph> account, it can:
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_OAUTH_REENABLE_HEADER" desc="A line of explanatory text that precedes all GAIA account permissions that an extension requests. This is shown when an app is being re-enabled after new permissions have been requested.">
+        On your <ph name="ACCOUNT_EMAIL">$1<ex>user@example.com</ex></ph> account, it can now:
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_OAUTH_PERMISSIONS_HEADER" desc="A line of explanatory text that precedes all GAIA account permissions that an extension might request. This is shown when an app requests permissions which are optional.">
+        On your <ph name="ACCOUNT_EMAIL">$1<ex>user@example.com</ex></ph> account, it could:
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_RETAINED_FILES_DEFAULT" desc="A line of explanatory text that precedes the list of files the app has permanent access to, showing how the number of files. This is shown when an app has persistent access to files. This is necessary for every language. This is the default for all the numbers NOT covered by special cases (singular, dual/two, few, many) some languages need. For CJK, Vietnamese, Turkish and Kannada, this is the only string necessary. For languages with singular-plural distinction, this is the generic plural. For Lithuanian, NUMBER_OF_FILES is 11 .. 19.">
+        It has permanent access to <ph name="NUMBER_OF_FILES">#<ex>5</ex></ph> files.
+      </message>
+
+      <if expr="lang not in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
+      <message name="IDS_EXTENSION_PROMPT_RETAINED_FILE_SINGULAR" desc="A line of explanatory text that precedes the list of files the app has permanent access to, showing how the number of files. This is shown when an app has persistent access to files. NUMBER_OF_FILES is one or one-like numbers : 1 (many European and most Indian languages), 1 and 0 (French, Brazilian Portuguese and Hindi), 1,21,31, .. (Russian, Ukrainian, Croatian, Serbian, Latvian, Lithuanian), or 1, 101, 201, .. (Slovenian). Do NOT translate this for CJK, Vietnamese, Turkish and Kannada">
+        It has permanent access to <ph name="NUMBER_OF_FILES">#<ex>1</ex></ph> file.
+      </message>
+      </if>
+      <if expr="lang in ['zh-CN', 'zh-TW', 'ko', 'ja', 'vi', 'tr', 'kn']">
+      <message translateable="false" name="IDS_EXTENSION_PROMPT_RETAINED_FILE_SINGULAR" desc="">
+        NA
+      </message>
+      </if>
+
+      <if expr="lang in ['ar', 'ro', 'lv']">
+      <message name="IDS_EXTENSION_PROMPT_RETAINED_FILES_ZERO" desc="A line of explanatory text that precedes the list of files the app has permanent access to, showing how the number of files. This is shown when an app has persistent access to files. NUMBER_OF_FILES is 0 (Arabic, Latvian) or 0, 2..19, 101..119, ... (Romanian). For other languages, do NOT translate.">
+        It has permanent access to <ph name="NUMBER_OF_FILES">#<ex>0</ex></ph> files.
+      </message>
+      </if>
+      <if expr="lang not in ['ar', 'ro', 'lv']">
+      <message translateable="false" name="IDS_EXTENSION_PROMPT_RETAINED_FILES_ZERO" desc="">
+        NA
+      </message>
+      </if>
+
+      <if expr="lang in ['ga', 'sl', 'ar']">
+      <message name="IDS_EXTENSION_PROMPT_RETAINED_FILES_TWO" desc="A line of explanatory text that precedes the list of files the app has permanent access to, showing how the number of files. This is shown when an app has persistent access to files. NUMBER_OF_FILES is two or two-like/dual numbers :  2 (Arabic and Irish) or  2, 102, 202 ... (Slovenian). For other languages, do NOT translated.">
+        It has permanent access to <ph name="NUMBER_OF_FILES">#<ex>2</ex></ph> files.
+      </message>
+      </if>
+      <if expr="lang not in ['ga', 'sl', 'ar']">
+      <message translateable="false" name="IDS_EXTENSION_PROMPT_RETAINED_FILES_TWO" desc="">
+        NA
+      </message>
+      </if>
+
+      <if expr="lang  in ['ru', 'lt', 'hr', 'uk', 'cs', 'sk', 'pl', 'sl', 'ar']">
+      <message name="IDS_EXTENSION_PROMPT_RETAINED_FILES_FEW" desc="A line of explanatory text that precedes the list of files the app has permanent access to, showing how the number of files. This is shown when an app has persistent access to files. NUMBER_OF_FILES is few or few-like numbers in Arabic, Russian, Polish, Croatian, Serbian, Ukrainian, Czech, Slovak, Slovenian, Latvian. For other languages, do NOT translate.">
+        It has permanent access to <ph name="NUMBER_OF_FILES">#<ex>3</ex></ph> files.
+      </message>
+      </if>
+      <if expr="lang not in ['ru', 'lt', 'hr', 'uk', 'cs', 'sk', 'pl', 'sl', 'ar']">
+      <message translateable="false" name="IDS_EXTENSION_PROMPT_RETAINED_FILES_FEW" desc="">
+        NA
+      </message>
+      </if>
+
+      <if expr="lang == 'ar'">
+      <message name="IDS_EXTENSION_PROMPT_RETAINED_FILES_MANY" desc="A line of explanatory text that precedes the list of files the app has permanent access to, showing how the number of files. This is shown when an app has persistent access to files. NUMBER_OF_FILES is 11 through 99 in Arabic. For all other languages, do NOT translate.">
+        It has permanent access to <ph name="NUMBER_OF_FILES">#<ex>23</ex></ph> files.
+      </message>
+      </if>
+      <if expr="lang != 'ar'">
+      <message translateable="false" name="IDS_EXTENSION_PROMPT_RETAINED_FILES_MANY" desc="">
+        NA
+      </message>
+      </if>
+
+      <if expr="is_android">
+        <message name="IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS" desc="Mobile: Permission string for full access to the device and all websites.">
+          Read and change all your data on your device and the websites you visit
+        </message>
+      </if>
+      <if expr="not is_android">
+        <message name="IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS" desc="Permission string for full access to the computer and all websites.">
+          Read and change all your data on your computer and the websites you visit
+        </message>
+      </if>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_ALL_HOSTS" desc="Permission string for access to data on all websites.">
+        Read and change all your data on the websites you visit
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_FAVICON" desc="Permission string for access to favicons.">
+        Read the icons of the websites you visit
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_INPUT" desc="Permission string for access to input.">
+        Read and change anything you type
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_BOOKMARKS" desc="Permission string for access to bookmarks.">
+        Read and change your bookmarks
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_COPRESENCE" desc="Permission string for access to bookmarks.">
+        Communicate with nearby devices
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_HISTORY_WRITE" desc="Permission string for access to modify browsing history.">
+        Read and change your browsing history
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_HISTORY_WRITE_AND_SESSIONS" desc="Permission string for access to modify both browsing history and signed in sessions.">
+        Read and change your browsing history on all your signed-in devices
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_GEOLOCATION" desc="Permisson string for access to geolocation.">
+        Detect your physical location
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_MANAGEMENT" desc="Permisson string for access to extension management.">
+        Manage your apps, extensions, and themes
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_TOPSITES" desc="Permission string for access to the list of most frequently visited websites.">
+        Read a list of your most frequently visited websites
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ" desc="Permission string for access to browsing history.">
+        Read your browsing history
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ_AND_SESSIONS" desc="Permission string for access to both browsing history and signed in sessions.">
+        Read your browsing history on all your signed-in devices
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_DEBUGGER" desc="Permission string for access to debugger.">
+        Access the page debugger backend
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_CLIPBOARD" desc="Permission string for access to clipboard.">
+        Read data you copy and paste
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_TTS_ENGINE" desc="Permission string for access to text-to-speech.">
+        Read all text spoken using synthesized speech
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_CONTENT_SETTINGS" desc="Permission string for access to content settings.">
+        Change your settings that control websites' access to cookies, JavaScript, and plug-ins
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_PRIVACY" desc="Permission string for access to privacy settings.">
+        Change your privacy-related settings
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_SIGNED_IN_DEVICES" desc="Permission string for access to privacy settings.">
+        Read the list of your signed-in devices
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_USB_BLUETOOTH" desc="Permission string for access to USB and Bluetooth devices.">
+        Access your USB and Bluetooth devices
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_USB_SERIAL" desc="Permission string for access to USB and serial connected devices.">
+        Access your USB and Serial devices
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH_SERIAL" desc="Permission string for access to Bluetooth and serial connected devices.">
+        Access your Bluetooth and Serial devices
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_ALL_DEVICES" desc="Permission string for access all user's connected devices.">
+        Access all your hardware devices
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_DOWNLOADS" desc="Permission string for access to downloads.">
+        Manage your downloads
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_DOWNLOADS_OPEN" desc="Permission string for access to downloads.">
+        Open downloaded files
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_IDENTITY_EMAIL" desc="Permission string for access to profile email address.">
+        Know your email address
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_WALLPAPER" desc="Permission string for access to wallpaper.">
+        Change your wallpaper
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_FILE_SYSTEM_DIRECTORY" desc="Permission string for read access to directories and their contents.">
+        Read folders that you open in the application
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_FILE_SYSTEM_WRITE_DIRECTORY" desc="Permission string for write access to directories and their contents.">
+        Write to files and folders that you open in the application
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_WRITE" desc="Permission string for access to read and write to all of the user's media galleries.">
+        Read and change photos, music, and other media from your computer
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_DELETE" desc="Permission string for access to read and delete all of the user's media galleries.">
+        Read and delete photos, music, and other media from your computer
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_MEDIA_GALLERIES_READ_WRITE_DELETE" desc="Permission string for access to read, write and delete to all of the user's media galleries.">
+        Read, change and delete photos, music, and other media from your computer
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_SYNCFILESYSTEM" desc="Permission string for synchronizing files to the user's Google Drive">
+        Store data in your Google Drive account
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_MUSIC_MANAGER_PRIVATE" desc="Permission string for accessing a unique device identifier">
+        Read a unique identifier for this computer
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_NATIVE_MESSAGING" desc="Permission string for Native Messaging API.">
+        Communicate with cooperating native applications
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_SCREENLOCK_PRIVATE" desc="Permission string for locking an unlocking the screen.">
+        Lock and unlock the screen
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_OVERRIDE_BOOKMARKS_UI" desc="Permission string for overriding elements of the bookmarks user interface.">
+        Change the bookmarks user interface
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_ACTIVITY_LOG_PRIVATE" desc="Permission string for the observing other extensions' API calls">
+        Monitor the behavior of other extensions, including visited URLs
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_NETWORKING_PRIVATE" desc="Permission string for Networking Private API.">
+        Manage network connections
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_DESKTOP_CAPTURE" desc="Permission string for Desktop Capture API.">
+        Capture content of your screen
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_DECLARATIVE_WEB_REQUEST" desc="Permission string for Declarative Web Request API.">
+        Block parts of web pages
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH_PRIVATE" desc="Permission string for Bluetooth Private API.">
+        Control Bluetooth adapter state and pairing
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_ACCESSIBILITY_FEATURES_MODIFY" desc="Permission string for modifying acccessibility settings via extension API shown when an extension utilizing the API is installed.">
+        Change your accessibility settings
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_ACCESSIBILITY_FEATURES_READ" desc="Permission string for modifying acccessibility settings via extension API shown when a extension utilizing the API is installed.">
+        Read your accessibility settings
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_ACCESSIBILITY_FEATURES_READ_MODIFY" desc="Permission string for reading and modifying acccessibility settings via extension API shown when an extension utilizing the API is installed.">
+        Read and change your accessibility settings
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_EXPERIENCE_SAMPLING_PRIVATE" desc="Permission string for Experience Sampling Private API.">
+        Monitor when you take actions in Chrome
+      </message>
+
+      <!-- Extension/App error messages -->
+      <message name="IDS_EXTENSION_CANT_GET_ABSOLUTE_PATH" desc="Warning displayed in pack dialog when the absolute path to the extension directory can not be found.">
+        Can't find the absolute path to the directory to pack.
+      </message>
+      <message name="IDS_EXTENSION_DIRECTORY_NO_EXISTS" desc="Warning displayed in pack dialog when the extension directory does not exist.">
+        Input directory must exist.
+      </message>
+      <message name="IDS_EXTENSION_DISALLOW_NON_DOWNLOADED_GALLERY_INSTALLS" desc="Error displayed when an app or extension that has an update URL used by the gallery is installed when not directly downloaded from the gallery.">
+        This can only be added from the <ph name="CHROME_WEB_STORE">$1<ex>Web Store</ex></ph>.
+      </message>
+      <message name="IDS_EXTENSION_PRIVATE_KEY_INVALID_PATH" desc="Warning displayed in pack dialog when the private key must be a valid path.">
+        Input value for private key must be a valid path.
+      </message>
+      <message name="IDS_EXTENSION_PRIVATE_KEY_EXISTS" desc="Warning displayed in pack dialog when the private key for the extension already exists.">
+        A private key for specified extension already exists. Reuse that key or delete it first.
+      </message>
+      <message name="IDS_EXTENSION_PRIVATE_KEY_NO_EXISTS" desc="Warning displayed in pack dialog when the private key for the extension does not exist.">
+        Input value for private key must exist.
+      </message>
+      <message name="IDS_EXTENSION_PACK_WARNING_TITLE" desc="Warning title message for pack extension">
+        Pack Extension Warning
+      </message>
+      <message name="IDS_EXTENSION_PACK_ERROR_TITLE" desc="Error title message for pack extension">
+        Pack Extension Error
+      </message>
+      <message name="IDS_EXTENSION_CRX_EXISTS" desc="Warning displayed in pack dialog when the crx file already exists.">
+        There is already a CRX file present with this name.
+      </message>
+      <message name="IDS_EXTENSION_PROCEED_ANYWAY" desc="Button to continue with operation in extension packing">
+        Proceed anyway
+      </message>
+      <message name="IDS_EXTENSION_PRIVATE_KEY_FAILED_TO_READ" desc="Warning displayed in pack dialog when was not possible to read the private key of the extension.">
+        Failed to read private key.
+      </message>
+      <message name="IDS_EXTENSION_PRIVATE_KEY_INVALID" desc="Warning displayed in pack dialog when the private key of extensions is invalid.">
+        Invalid private key.
+      </message>
+      <message name="IDS_EXTENSION_PRIVATE_KEY_FAILED_TO_GENERATE" desc="Warning displayed in pack dialog when generating a random RSA private key failed.">
+        Yikes! Failed to generate random RSA private key.
+      </message>
+      <message name="IDS_EXTENSION_PRIVATE_KEY_FAILED_TO_EXPORT" desc="Warning displayed in pack dialog when exporting a private key failed.">
+        Failed to export private key.
+      </message>
+      <message name="IDS_EXTENSION_PRIVATE_KEY_FAILED_TO_OUTPUT" desc="Warning displayed in pack dialog when outputing a private key failed.">
+        Failed to output private key.
+      </message>
+      <message name="IDS_EXTENSION_FAILED_DURING_PACKAGING" desc="Warning displayed in pack dialog when was not possible to create a zip file.">
+        Failed to create temporary zip file during packaging.
+      </message>
+      <message name="IDS_EXTENSION_ERROR_WHILE_SIGNING" desc="Warning displayed in pack dialog when occurred an error while signing an extension.">
+        Error while signing extension.
+      </message>
+      <message name="IDS_EXTENSION_SHARING_VIOLATION" desc="Warning displayed in pack dialog when a sharing violation is found during creation of the crx.">
+        Failed to replace crx file. Check to see if the file is in use.
+      </message>
+      <message name="IDS_EXTENSION_PUBLIC_KEY_FAILED_TO_EXPORT" desc="Warning displayed in pack dialog when exporting a public key failed.">
+        Failed to export public key.
+      </message>
+      <message name="IDS_EXTENSION_CANT_DOWNGRADE_VERSION" desc="Error message when a user tries to install an extension with a lower version than a version that it already installed.">
+        Attempted to downgrade extension.
+      </message>
+      <message name="IDS_APP_CANT_DOWNGRADE_VERSION" desc="Error message when a user tries to install an app with a lower version than a version that it already installed.">
+        Attempted to downgrade app.
+      </message>
+      <message name="IDS_EXTENSION_WEBGL_NOT_SUPPORTED" desc="Error message when an extension has a requirement for WebGL that the system does not support.">
+        WebGL is not supported.
+      </message>
+      <message name="IDS_EXTENSION_NPAPI_NOT_SUPPORTED" desc="Error message when an extension has a requirement for plugins that the system does not support.">
+        NPAPI plugins are not supported.
+      </message>
+      <if expr="not use_aura">
+        <message name="IDS_EXTENSION_WINDOW_SHAPE_NOT_SUPPORTED" desc="Error message when an extension has a requirement for shaped windows that the system does not support.">
+          Shaped windows are not supported.
+        </message>
+      </if>
+      <if expr="chromeos">
+        <message name="IDS_EXTENSION_CANT_INSTALL_IN_DEVICE_LOCAL_ACCOUNT" desc="Error message when a user tries to install or the administrator tries to force-install through policy an extension that is not allowed in a device-local account.">
+          <ph name="EXTENSION_NAME">$1<ex>Google Talk</ex></ph> (extension ID "<ph name="EXTENSION_ID">$2<ex>nckgahadagoaajjgafhacjanaoiihapd</ex></ph>") is not allowed in this type of session.
+        </message>
+      </if>
+      <message name="IDS_EXTENSION_MOVE_DIRECTORY_TO_PROFILE_FAILED" desc="">
+        Could not move extension directory into profile.
+      </message>
+      <message name="IDS_EXTENSION_INSTALL_NOT_ENABLED" desc="Error displayed during installation of apps or extensions when installation is not enabled.">
+        Installation is not enabled.
+      </message>
+      <message name="IDS_EXTENSION_INSTALL_INCORRECT_APP_CONTENT_TYPE" desc="Error displayed during installation of apps when the app is not served with the correct content-type.">
+        Apps must be served with content-type "<ph name="CONTENT_TYPE">$1<ex>application/x-chrome-extension</ex></ph>".
+      </message>
+      <message name="IDS_EXTENSION_INSTALL_INCORRECT_INSTALL_HOST" desc="Error displayed during installation of apps when the app is served from a different host than it affects.">
+        Apps must be served from the host they affect.
+      </message>
+      <message name="IDS_EXTENSION_INSTALL_UNEXPECTED_ID" desc="Error displayed during installation of a side-loaded app, extension, or theme when the ID of the referenced extension does not match the ID the developer declared during registration.">
+        Expected ID "<ph name="EXPECTED_ID">$1<ex>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb</ex></ph>", but ID was "<ph name="NEW_ID">$2<ex>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</ex></ph>".
+      </message>
+      <message name="IDS_EXTENSION_INSTALL_DISALLOWED_ON_SITE" desc="Error displayed during installation of an extension when installation is not allowed from the current site.">
+        Apps, extensions, and user scripts cannot be added from this website.
+      </message>
+      <message name="IDS_EXTENSION_INSTALL_UNEXPECTED_VERSION" desc="Error displayed during installation of a side-loaded app, extension, or theme when the version of the referenced extension does not match the version the developer declared during registration.">
+        Expected version "<ph name="EXPECTED_VERSION">$1<ex>2.0</ex></ph>", but version was "<ph name="NEW_ID">$2<ex>1.0</ex></ph>".
+      </message>
+      <message name="IDS_EXTENSION_INSTALL_DEPENDENCY_NOT_SHARED_MODULE" desc="Error displayed during installation of an extension which tries to imports resources from an extension which is not a shared module.">
+        Unable to import extension with ID "<ph name="IMPORT_ID">$1<ex>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</ex></ph>" because it is not a shared module.
+      </message>
+      <message name="IDS_EXTENSION_INSTALL_DEPENDENCY_NOT_WHITELISTED" desc="Error displayed during installation of an extension which tries to imports resources from an extension, but it is not whitelisted to do so.">
+        Unable to install "<ph name="APP_NAME">$1<ex>Google Play Movies &amp; TV</ex></ph>" because it is not allowed by "<ph name="IMPORT_NAME">$2<ex>Google Cast API</ex></ph>"
+      </message>
+      <message name="IDS_EXTENSION_INSTALL_KIOSK_MODE_ONLY" desc="Error displayed during installation of an app with 'kiosk_only' attribute but user is not in ChromeOS kiosk mode.">
+        App with 'kiosk_only' manifest attribute must be installed in ChromeOS kiosk mode.
+      </message>
+      <message name="IDS_EXTENSION_INSTALL_DISALLOW_UNTRUSTED_EXTENSION" desc="Error displayed during installation of a side-loaded extension from an untrusted source.">
+        Cannot install untrusted extension with ID "<ph name="IMPORT_ID">$1<ex>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</ex></ph>."
+      </message>
+      <message name="IDS_EXTENSION_OVERLAPPING_WEB_EXTENT" desc="Error message when a user tries to install an app with a web extent that overlaps another installed app.">
+        Could not add application because it conflicts with "<ph name="APP_NAME">$1<ex>Google Mail</ex></ph>".
+      </message>
+      <message name="IDS_EXTENSION_INVALID_IMAGE_PATH" desc="">
+        Could not load '<ph name="IMAGE_PATH">$1<ex>/path/to/file</ex></ph>' for theme.
+      </message>
+      <message name="IDS_EXTENSION_LOAD_JAVASCRIPT_FAILED" desc="">
+        Could not load javascript '<ph name="RELATIVE_PATH">$1<ex>javas.js</ex></ph>' for content script.
+      </message>
+      <message name="IDS_EXTENSION_LOAD_CSS_FAILED" desc="">
+        Could not load css '<ph name="RELATIVE_PATH">$1<ex>file.css</ex></ph>' for content script.
+      </message>
+      <message name="IDS_EXTENSION_BAD_FILE_ENCODING" desc="">
+        Could not load file '<ph name="RELATIVE_PATH">$1<ex>file.js</ex></ph>' for content script. It isn't UTF-8 encoded.
+      </message>
+      <message name="IDS_EXTENSION_LOAD_PLUGIN_PATH_FAILED" desc="">
+        Could not load '<ph name="PLUGIN_PATH">$1<ex>/path/to/file</ex></ph>' for plugin.
+      </message>
+      <message name="IDS_EXTENSION_LOAD_ICON_FOR_PAGE_ACTION_FAILED" desc="">
+        Could not load icon '<ph name="ICON">$1<ex>icon.png</ex></ph>' for page action.
+      </message>
+      <message name="IDS_EXTENSION_LOAD_ICON_FOR_BROWSER_ACTION_FAILED" desc="">
+        Could not load icon '<ph name="ICON">$1<ex>icon.png</ex></ph>' for browser action.
+      </message>
+      <message name="IDS_EXTENSION_LOAD_ABOUT_PAGE_FAILED" desc="">
+        Could not load about page '<ph name="ABOUT_PAGE">$1<ex>page.html</ex></ph>'.
+      </message>
+      <if expr="is_win">
+        <message name="IDS_EXTENSION_UNPACK_FAILED" desc="On windows, it is possible to mount a disk without the root of that disk having a drive letter.  The sandbox does not support this. See crbug/49530 .">
+          Can not unpack extension.  To safely unpack an extension, there must be a path to your profile directory that starts with a drive letter and does not contain a junction, mount point, or symlink.  No such path exists for your profile.
+        </message>
+      </if>
+      <if expr="not is_win">
+        <message name="IDS_EXTENSION_UNPACK_FAILED" desc="">
+          Can not unpack extension.  To safely unpack an extension, there must be a path to your profile directory that does not contain a symlink.  No such path exists for your profile.
+        </message>
+      </if>
+      <message name="IDS_EXTENSION_PACKAGE_ERROR_MESSAGE" desc="The cases where we get an error message string back from some other component. The message might be in English, but these are typically developer errors, and the extension SDK is English.">
+        Package is invalid. Details: '<ph name="ERROR_MESSAGE">$1<ex>error</ex></ph>'.
+      </message>
+      <message name="IDS_EXTENSION_PACKAGE_ERROR_CODE" desc="Error message in cases where we fail to install the extension because the crx file is invalid. For example, because the crx header or signature is invalid.">
+        Package is invalid: '<ph name="ERROR_CODE">$1<ex>error</ex></ph>'.
+      </message>
+      <message name="IDS_EXTENSION_PACKAGE_INSTALL_ERROR" desc="Error message in case package fails to install because of some problem with the filesystem.">
+        Could not install package: '<ph name="ERROR_CODE">$1<ex>error</ex></ph>'
+      </message>
+      <message name="IDS_EXTENSION_INSTALL_PROCESS_CRASHED" desc="Error message in case package fails to install a utility process crashed.">
+        Could not install package because a utility process crashed. Try restarting chrome and trying again.
+      </message>
+      <message name="IDS_EXTENSION_PACKAGE_DIRECTORY_ERROR" desc="Message for when an error occurs while trying to create the temporary directory needed to unzip a packaged extension or app.">
+        Could not create directory for unzipping: '<ph name="DIRECTORY_PATH">$1<ex>profile/Extensions/CRX_INSTALL</ex></ph>'
+      </message>
+      <message name="IDS_EXTENSION_PACKAGE_UNZIP_ERROR" desc="Message for when an error occurs while unzipping a packaged extension or app.">
+        Could not unzip extension
+      </message>
+      <message name="IDS_EXTENSION_PACKAGE_IMAGE_PATH_ERROR" desc="Error message for when a packaged extension or app contains a reference to an image that could be outside the package.">
+        Illegal path (absolute or relative with '..'): '<ph name="IMAGE_PATH">$1<ex>../image.png</ex></ph>'
+      </message>
+      <message name="IDS_EXTENSION_PACKAGE_IMAGE_ERROR" desc="Message for when an error occurs while trying to decode an image found within a packaged extension or app.">
+        Could not decode image: '<ph name="IMAGE_NAME">$1<ex>image.png</ex></ph>'
+      </message>
+
+      <!-- Extension installed bubble -->
+      <message name="IDS_EXTENSION_BUNDLE_INSTALLED_HEADING_EXTENSIONS" desc="First line in the content area of the extension bundle installed bubble. Instructs which extensions were installed.">
+        The following extensions are now installed:
+      </message>
+      <message name="IDS_EXTENSION_BUNDLE_INSTALLED_HEADING_APPS" desc="First line in the content area of the extension bundle installed bubble. Instructs which apps were installed.">
+        The following apps are now installed:
+      </message>
+      <message name="IDS_EXTENSION_BUNDLE_INSTALLED_HEADING_EXTENSION_APPS" desc="First line in the content area of the extension bundle installed bubble. Instructs which apps and extensions were installed.">
+        The following apps and extensions were added:
+      </message>
+      <message name="IDS_EXTENSION_BUNDLE_ERROR_HEADING" desc="Text displayed in the extension bundle installed bubble when some extensions or apps failed to install. Instructs which extensions did not install.">
+        We were unable to install:
+      </message>
+      <if expr="enable_extensions">
+        <if expr="is_macosx">
+          <message name="IDS_EXTENSION_INSTALLED_APP_INFO" desc="Text displayed inside a link when an app is installed. Clicking this link opens up the New Tab Page to show the app's icon.">
+            Show me
+          </message>
+        </if>
+        <message name="IDS_EXTENSION_INSTALLED_PAGE_ACTION_INFO" desc="Text displayed in the InfoBubble which explains that the UI of this extension is a Page Action icon which may appear for some pages.">
+          This icon will be visible when the extension can act on the current page.
+        </message>
+        <message name="IDS_EXTENSION_INSTALLED_PAGE_ACTION_INFO_WITH_SHORTCUT" desc="Text displayed in the InfoBubble which explains that the UI of this extension is a Page Action icon which may appear for some pages. Also has a sentence describing how to activate it.">
+          This icon will be visible when the extension can act on the current page. Use this extension by clicking on the icon or by pressing <ph name="EXTENSION_SHORTCUT">$1<ex>Ctrl+E</ex></ph>.
+        </message>
+        <message name="IDS_EXTENSION_INSTALLED_BROWSER_ACTION_INFO" desc="Text displayed in the InfoBubble which explains that the UI of this extension is a Browser Action icon.">
+          Use this extension by clicking on this icon.
+        </message>
+        <message name="IDS_EXTENSION_INSTALLED_BROWSER_ACTION_INFO_WITH_SHORTCUT" desc="Text displayed in the InfoBubble which explains that the UI of this extension is a Browser Action icon. Also has a sentence describing how to activate it.">
+          Use this extension by clicking on this icon or by pressing <ph name="EXTENSION_SHORTCUT">$1<ex>Ctrl+E</ex></ph>.
+        </message>
+        <message name="IDS_EXTENSION_INSTALLED_OMNIBOX_KEYWORD_INFO" desc="Text displayed in the InfoBubble which explains that this extension has an keyword that can be used with the omnibox.">
+          To use this extension, type "<ph name="EXTENSION_KEYWORD">$1<ex>search</ex></ph>", then TAB, then your command or search.
+        </message>
+
+        <if expr="not chromeos and not is_macosx">
+          <message name="IDS_EXTENSION_INSTALLED_MANAGE_INFO" desc="Text displayed in the InfoBubble with instructions on how to find the chrome://extensions/ management page">
+            Manage your extensions by clicking Extensions in the Tools menu.
+          </message>
+        </if>
+        <if expr="chromeos">
+          <message name="IDS_EXTENSION_INSTALLED_MANAGE_INFO_CHROMEOS" desc="Text displayed in the InfoBubble with instructions on how to find the chrome://extensions/ management page on ChromeOS">
+            Manage your extensions by clicking Extensions in the "More tools" menu.
+          </message>
+        </if>
+        <if expr="is_macosx">
+          <message name="IDS_EXTENSION_INSTALLED_MANAGE_INFO_MAC" desc="Text displayed in the InfoBubble with instructions on how to find the chrome://extensions/ management page on MAC OS X">
+            Manage your extensions by clicking Extensions in the Window menu.
+          </message>
+        </if>
+        <message name="IDS_EXTENSION_INSTALLED_MANAGE_SHORTCUTS" desc="Text for the link in the InfoBubble that opens the chrome://extensions page with the Configure Commands UI visible.">
+          Manage shortcuts
+        </message>
+        <message name="IDS_EXTENSION_INSTALLED_SIGNIN_PROMO" desc="The remaining text of the sign-in promo paragraph. Will be appended as a label to the string above. The triple single quotes are needed to preserve the space before the word 'to' (which is handy when the language (Chrome is being translated to) uses space as word separator).">
+          ''' to get this extension, your history, and other Chrome settings on all your devices.'''
+        </message>
+      </if>
+
+      <!-- Directory access confirmation dialog -->
+      <message name="IDS_EXTENSIONS_DIRECTORY_CONFIRMATION_DIALOG_TITLE" desc="Text of the title of the directory access confirmation dialog.">
+        Confirm Access
+      </message>
+      <message name="IDS_EXTENSIONS_DIRECTORY_CONFIRMATION_DIALOG_MESSAGE_READ_ONLY" desc="Text of the message of the directory access confirmation dialog if the app does not have write access.">
+        The folder you selected contains sensitive files. Are you sure you want to grant "$1" permanent read access to this folder?
+      </message>
+      <message name="IDS_EXTENSIONS_DIRECTORY_CONFIRMATION_DIALOG_MESSAGE_WRITABLE" desc="Text of the message of the directory access confirmation dialog if the app has write access.">
+        The folder you selected contains sensitive files. Are you sure you want to grant "$1" permanent write access to this folder?
+      </message>
+
+      <!-- chrome://settings/extensions page -->
+      <if expr="enable_extensions">
+        <message name="IDS_EXTENSIONS_DEVELOPER_MODE_LINK" desc="Text of the link for developer mode.">
+          Developer mode
+        </message>
+        <message name="IDS_EXTENSIONS_LOAD_UNPACKED_BUTTON" desc="Text of the 'Load Extension' button.">
+          Load unpacked extension...
+        </message>
+        <message name="IDS_EXTENSIONS_PACK_BUTTON" desc="Text for the 'Pack Extension' button.">
+          Pack extension...
+        </message>
+        <message name="IDS_EXTENSIONS_UPDATE_BUTTON" desc="Text for the 'Update extensions' button.">
+          Update extensions now
+        </message>
+        <message name="IDS_EXTENSIONS_APPS_DEV_TOOLS_PROMO_HTML" desc="The text encouraging users to get the Apps Developer Tools.">
+          Try the new <ph name="BEGIN_LINK">&lt;a target="_blank" href="$1"&gt;</ph>Chrome Apps &amp; Extensions Developer Tool<ph name="END_LINK">&lt;/a&gt;</ph>.
+        </message>
+        <message name="IDS_EXTENSIONS_NONE_INSTALLED" desc="Text that lets the user know that no extensions are installed.">
+          Boo... You have no extensions :-(
+        </message>
+        <message name="IDS_EXTENSIONS_NONE_INSTALLED_SUGGEST_GALLERY" desc="Text on next line after IDS_EXTENSIONS_NONE_INSTALLED that suggests the user look in the gallery for extensions to install.">
+          Want to <ph name="BEGIN_LINK">&lt;a target="_blank" href="$1"&gt;</ph>browse the gallery<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph> instead?
+        </message>
+        <message name="IDS_EXTENSIONS_INSTALL_DROP_TARGET" desc="Text on drop target for installing extensions.">
+          Drop to install
+        </message>
+        <message name="IDS_EXTENSIONS_CRASHED_EXTENSION" desc="Text that signifies that the extension process was terminated, usually because it has crashed.">
+          (Crashed)
+        </message>
+        <message name="IDS_EXTENSIONS_IN_DEVELOPMENT" desc="Text that signifies that the extension is currently in development.">
+          (Unpacked)
+        </message>
+        <message name="IDS_EXTENSIONS_VIEW_INCOGNITO" desc="Text that signifies that the extension view is in an incognito process.">
+          (Incognito)
+        </message>
+        <message name="IDS_EXTENSIONS_VIEW_INACTIVE" desc="Text that signifies that the extension view is an inactive transient page.">
+          (Inactive)
+        </message>
+        <message name="IDS_EXTENSIONS_BACKGROUND_PAGE" desc="Display name for an autogenerated background page.">
+          background page
+        </message>
+        <message name="IDS_EXTENSIONS_ID" desc="The ID label in front of the extension ID.">
+          ID:
+        </message>
+        <message name="IDS_EXTENSIONS_PATH" desc="The label in front of the extension load path.">
+          Loaded from:
+        </message>
+        <message name="IDS_EXTENSIONS_INSPECT_VIEWS" desc="The text for the label in front of the links to inspect views (some of which may not be loaded yet).">
+          Inspect views:
+        </message>
+        <message name="IDS_EXTENSIONS_INSTALL_WARNINGS" desc="The text which says that an extension has warnings when it was installed.">
+          There were warnings when trying to install this extension:
+        </message>
+        <message name="IDS_EXTENSIONS_LOAD_ERROR_HEADING" desc="The title of the section that describes an extension load error.">
+          Error Loading Extension
+        </message>
+        <message name="IDS_EXTENSIONS_LOAD_ERROR_MESSAGE" desc="The message which tells the user that an extension failed to load.">
+          Failed to load extension from:
+        </message>
+        <message name="IDS_EXTENSIONS_LOAD_ERROR_RETRY" desc="The text of the button to retry loading an extension.">
+          Retry
+        </message>
+        <message name="IDS_EXTENSIONS_LOAD_ERROR_GIVE_UP" desc="The text of the button to give up on trying to load an extension.">
+          I give up
+        </message>
+        <message name="IDS_EXTENSIONS_LOAD_COULD_NOT_LOAD_MANIFEST" desc="The text to indicate that the source of the extension's manifest failed to load.">
+          Could not load manifest.
+        </message>
+        <message name="IDS_EXTENSIONS_LOAD_ADDITIONAL_FAILURES" desc="The text displayed above additional extension load failures.">
+          Other extensions that failed to load:
+        </message>
+        <message name="IDS_EXTENSIONS_ERRORS_SHOW_MORE" desc="The text which allows the user to display more errors for a given extension.">
+          Show more...
+        </message>
+        <message name="IDS_EXTENSIONS_ERRORS_SHOW_FEWER" desc="The text which allows the user to display fewer errors for a given extension.">
+          Show fewer...
+        </message>
+        <message name="IDS_EXTENSIONS_ERROR_VIEW_DETAILS" desc="The link to view the details of an extension error.">
+          View details
+        </message>
+        <message name="IDS_EXTENSIONS_ERROR_VIEW_MANIFEST" desc="The link to view the details of an extension error.">
+          View manifest.json
+        </message>
+        <message name="IDS_EXTENSIONS_ERROR_CONTEXT" desc="The label for the context of an extension's error.">
+          Context:
+        </message>
+        <message name="IDS_EXTENSIONS_ERROR_STACK_TRACE" desc="The label for the stack trace of an extension's error.">
+          Stack Trace
+        </message>
+        <message name="IDS_EXTENSIONS_ERROR_ANONYMOUS_FUNCTION" desc="The label indicating that an error was caused within an anonymous function in the code.">
+          anonymous function
+        </message>
+        <message name="IDS_EXTENSIONS_ERROR_LAUNCH_DEVTOOLS" desc="The text for the button to view an extension error in the developer tools.">
+          View in Developer Tools
+        </message>
+        <message name="IDS_EXTENSIONS_ERROR_CONTEXT_UNKNOWN" desc="Text indicating that the context URL for an error is unknown.">
+          Unknown
+        </message>
+        <message name="IDS_EXTENSIONS_ERROR_NO_CODE_TO_DISPLAY" desc="Text indicating that there is no code to be displayed for a given error.">
+          Sorry, we can't show the code for this error.
+        </message>
+        <message name="IDS_EXTENSIONS_ENABLE" desc="The link for enabling extensions.">
+          Enable
+        </message>
+        <message name="IDS_EXTENSIONS_ENABLED" desc="The label for an enabled extension.">
+          Enabled
+        </message>
+        <message name="IDS_EXTENSIONS_REMOVE" desc="The label for uninstalling an extension.">
+          Remove
+        </message>
+        <message name="IDS_EXTENSIONS_ENABLE_INCOGNITO" desc="The checkbox for enabling an extension in incognito.">
+          Allow in incognito
+        </message>
+        <message name="IDS_EXTENSIONS_ENABLE_ERROR_COLLECTION" desc="The checkbox for enabling error collection for an extension.">
+          Collect errors
+        </message>
+        <message name="IDS_EXTENSIONS_ALLOW_ON_ALL_URLS" desc="The checkbox for allowing an extension to run scripts on all websites without explicit permission.">
+          Allow on all websites
+        </message>
+        <message name="IDS_EXTENSIONS_ALLOW_FILE_ACCESS" desc="The checkbox for allowing an extension access to run scripts on file URLs.">
+          Allow access to file URLs
+        </message>
+        <message name="IDS_EXTENSIONS_VISIT_WEBSITE" desc="The link for visiting the extension's homepage.">
+          Developer website
+        </message>
+        <message name="IDS_EXTENSIONS_VISIT_WEBSTORE" desc="The link for visiting the extension's gallery page.">
+          Details
+        </message>
+        <message name="IDS_EXTENSIONS_RELOAD_TERMINATED" desc="The link for reloading extensions.">
+          Reload
+        </message>
+        <message name="IDS_EXTENSIONS_REPAIR_CORRUPTED" desc="The link for repairing corrupted extensions.">
+          Repair
+        </message>
+        <message name="IDS_EXTENSIONS_LAUNCH" desc="The link for launching apps.">
+          Launch
+        </message>
+        <if expr="is_macosx">
+          <message name="IDS_EXTENSIONS_RELOAD_UNPACKED" desc="The link for reloading unpacked extensions.">
+            Reload (⌘R)
+          </message>
+        </if>
+        <if expr="not is_macosx">
+          <message name="IDS_EXTENSIONS_RELOAD_UNPACKED" desc="The link for reloading unpacked extensions.">
+            Reload (Ctrl+R)
+          </message>
+        </if>
+        <message name="IDS_EXTENSIONS_OPTIONS_LINK" desc="The link text for the Options link.">
+          Options
+        </message>
+        <message name="IDS_EXTENSIONS_PERMISSIONS_LINK" desc="The link text for the Permissions link.">
+          Permissions
+        </message>
+        <message name="IDS_EXTENSIONS_SHOW_BUTTON" desc="The text for the Show link.">
+          Show button
+        </message>
+        <if expr="not use_titlecase">
+          <message name="IDS_EXTENSIONS_ALWAYS_RUN" desc="The text for the 'always run' item in context menus (sentence case).">
+            Always run
+          </message>
+          <message name="IDS_EXTENSIONS_OPTIONS_MENU_ITEM" desc="The text for the options menu item in context menus (sentence case).">
+            Options
+          </message>
+          <message name="IDS_EXTENSIONS_DISABLE" desc="The link for disabling an extension (sentence case).">
+            Disable
+          </message>
+          <message name="IDS_EXTENSIONS_HIDE_BUTTON" desc="The text for the Hide context menu item (sentence case).">
+            Hide button
+          </message>
+          <message name="IDS_MANAGE_EXTENSION" desc="The 'Manage' text in the context menu for when right-clicking on extension icons (sentence case).">
+            Manage
+          </message>
+          <message name="IDS_EXTENSION_ACTION_INSPECT_POPUP" desc="The text for the right-click menu of page and browser actions which shows the popup and opens the developer tools (sentence case).">
+            Inspect popup
+          </message>
+        </if>
+        <if expr="use_titlecase">
+          <message name="IDS_EXTENSIONS_ALWAYS_RUN" desc="The text for the 'always run' item in context menus (title case).">
+            Always Run
+          </message>
+          <message name="IDS_EXTENSIONS_OPTIONS_MENU_ITEM" desc="The text for the options menu item in context menus (title case).">
+            Options
+          </message>
+          <message name="IDS_EXTENSIONS_DISABLE" desc="The link for disabling an extension (title case).">
+            Disable
+          </message>
+          <message name="IDS_EXTENSIONS_HIDE_BUTTON" desc="The text for the Hide context menu item (title case).">
+            Hide Button
+          </message>
+          <message name="IDS_MANAGE_EXTENSION" desc="The 'Manage' text in the context menu for when right-clicking on extension icons (title case).">
+            Manage
+          </message>
+          <message name="IDS_EXTENSION_ACTION_INSPECT_POPUP" desc="The text for the right-click menu of page and browser actions which shows the popup and opens the developer tools (title case).">
+            Inspect Popup
+          </message>
+        </if>
+      </if>
+
+      <message name="IDS_EXTENSIONS_POLICY_CONTROLLED" desc="The text in the extensions UI informing the user that an extension is policy controlled">
+        (This extension is managed and cannot be removed or disabled.)
+      </message>
+      <message name="IDS_EXTENSIONS_DEPENDENT_EXTENSIONS" desc="The text in the extensions UI informing the user that an extension is depended on by on other installed extensions">
+        The following extensions depend on this extension:
+      </message>
+      <message name="IDS_EXTENSIONS_LOCKED_SUPERVISED_USER" desc="The error message (either shown in the extensions UI or logged) informing a supervised user that extensions cannot be changed.">
+        Applications and extensions cannot be modified by supervised users.
+      </message>
+      <message name="IDS_GET_MORE_EXTENSIONS" desc="The text for getting more extensions. Displayed at bottom of extension management page when there is at least one extension installed.">
+        Get more extensions
+      </message>
+      <message name="IDS_EXTENSION_LOAD_FROM_DIRECTORY" desc="Title of directory browse dialog when user wants to load an extension from a directory.">
+        Select the extension directory.
+      </message>
+      <message name="IDS_EXTENSIONS_COMMANDS_CONFIGURE" desc="Text for the 'Keyboard shortcuts' link to configure extension keyboard shortcuts.">
+        Keyboard shortcuts
+      </message>
+      <message name="IDS_EXTENSION_COMMANDS_DIALOG_TITLE" desc="Title of extension commands dialog">
+        Keyboard Shortcuts for Extensions and Apps
+      </message>
+      <message name="IDS_EXTENSION_COMMANDS_EMPTY" desc="The heading of the extension commands dialog when there are no commands to show.">
+        No extensions have keyboard shortcuts assigned.
+      </message>
+      <message name="IDS_EXTENSION_COMMANDS_INACTIVE" desc="The text shown instead of the shortcut text (Ctrl+F) if the shortcut is inactive.">
+        Not set
+      </message>
+      <message name="IDS_EXTENSION_TYPE_SHORTCUT" desc="The text shown in a text box to instruct the user to start typing (to capture which shortcut to use for the extension command).">
+        Type a shortcut
+      </message>
+      <message name="IDS_EXTENSION_DELETE_SHORTCUT" desc="The text shown when you hover over the X inside the input text field.">
+        Delete shortcut
+      </message>
+      <message name="IDS_EXTENSION_COMMANDS_GENERIC_ACTIVATE" desc="The generic 'activate extension' text used as description for some commands.">
+        Activate the extension
+      </message>
+      <message name="IDS_EXTENSION_COMMANDS_GLOBAL" desc="The text in the select box for commands that are global in nature (the shortcut works when Chrome does not have focus).">
+        Global
+      </message>
+      <message name="IDS_EXTENSION_COMMANDS_NOT_GLOBAL" desc="The text in the select box for commands that are not global in nature (the shortcut works only when Chrome has focus).">
+        In Chrome
+      </message>
+
+      <message name="IDS_EXTENSION_PACK_DIALOG_TITLE" desc="Title of pack extension dialog">
+        Pack Extension
+      </message>
+      <message name="IDS_EXTENSION_PACK_BUTTON" desc="Text of the pack extension button">
+        Pack Extension
+      </message>
+      <message name="IDS_EXTENSION_PACK_DIALOG_HEADING" desc="The heading of the pack extension dialog.">
+        Select the root directory of the extension to pack. To update an extension, also select the private key file to reuse.
+      </message>
+      <message name="IDS_EXTENSION_PACK_DIALOG_ROOT_DIRECTORY_LABEL" desc="Label in the pack extension dialog for the control that lets the user select the extension to pack.">
+        Extension root directory:
+      </message>
+      <message name="IDS_EXTENSION_PACK_DIALOG_PRIVATE_KEY_LABEL" desc="Label in the pack extension dialog for the control that lets the user select the private key to use to pack the extension. The label should indicate that the input is not required to be filled in.">
+        Private key file (optional):
+      </message>
+      <message name="IDS_EXTENSION_PACK_DIALOG_BROWSE" desc="Text on buttons in the pack extension dialog that open up file browsing UI to pick the extension to pack.">
+        Browse...
+      </message>
+      <message name="IDS_EXTENSION_PACK_DIALOG_SELECT_KEY" desc="Heading in file browse dialog instructing user to select a private key.">
+        Select private key file.
+      </message>
+      <message name="IDS_EXTENSION_PACK_DIALOG_KEY_FILE_TYPE_DESCRIPTION" desc="Displayed in the file browse dialog. Associates the file extension 'pem' is for Private Keys.">
+        Private key
+      </message>
+      <message name="IDS_EXTENSION_PACK_DIALOG_ERROR_ROOT_REQUIRED" desc="Error message in pack extension dialog when the user does not specify a root directory.">
+        Extension root directory is required.
+      </message>
+      <message name="IDS_EXTENSION_PACK_DIALOG_ERROR_ROOT_INVALID" desc="Error message in pack extension dialog when the user speciifes an invalid root directory.">
+        Extension root directory is invalid.
+      </message>
+      <message name="IDS_EXTENSION_PACK_DIALOG_ERROR_KEY_INVALID" desc="Error message in pack extension dialog when the user speciifes an invalid key file.">
+        Private key file is invalid.
+      </message>
+      <message name="IDS_EXTENSION_PACK_DIALOG_SUCCESS_BODY_NEW" desc="Message shown on successful packing of a new extension.">
+        Created the following files:
+
+Extension: <ph name="EXTENSION_FILE">$1<ex>c:\users\aa\myextension.crx</ex></ph>
+Key File: <ph name="KEY_FILE">$2<ex>c:\users\aa\myextension.pem</ex></ph>
+
+Keep your key file in a safe place. You will need it to create new versions of your extension.
+      </message>
+      <message name="IDS_EXTENSION_PACK_DIALOG_SUCCESS_BODY_UPDATE" desc="Message shown on successful packing of an updated extension.">
+        Created the extension:
+
+<ph name="EXTENSION_FILE">$1<ex>c:\users\aa\myextension.crx</ex></ph>
+      </message>
+
+      <message name="IDS_EXTENSION_PROMPT_INSTALL_BUTTON" desc="Text for the install button on the extension install prompt">
+        Add
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_LAUNCH_BUTTON" desc="Text for the launch button on the extension install prompt">
+        Launch
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_UNINSTALL_BUTTON" desc="Text for the uninstall button on the extension uninstall prompt">
+        Remove
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_RE_ENABLE_BUTTON" desc="Text for the enable button on the extension re-enable prompt">
+        Re-enable
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_PERMISSIONS_BUTTON" desc="Text for the allow button on the extension permissions prompt">
+        Allow
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_PERMISSIONS_ABORT_BUTTON" desc="Text for the deny button on the extension permissions prompt">
+        Deny
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_PERMISSIONS_CLEAR_RETAINED_FILES_BUTTON" desc="Text for the Revoke File Access button on the extension permissions prompt">
+        Revoke File Access
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_REMOTE_INSTALL_BUTTON" desc="Text for the install button on the extension install prompt for a remotely installed extension">
+        Enable
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_REPAIR_BUTTON" desc="Text for the install button on the extension reinstall prompt.">
+        Repair
+      </message>
+      <message name="IDS_EXTENSION_WEB_STORE_TITLE" desc="Text for the Chrome Web Store">
+        Chrome Web Store
+      </message>
+      <message name="IDS_EXTENSION_WEB_STORE_TITLE_SHORT" desc="Text for the Chrome Web Store">
+        Web Store
+      </message>
+      <message name="IDS_EXTENSIONS_SHOW_DETAILS" desc="Tooltip for the button next to an extension that shows more details">
+        Show Details
+      </message>
+      <message name="IDS_EXTENSIONS_HIDE_DETAILS" desc="Tooltip for the button next to an extension that hides details">
+        Hide Details
+      </message>
+
+      <!-- Strings for the extensions permission dialog experiment -->
+      <!-- TODO(meacer): Remove these once the experiments are completed. -->
+      <message name="IDS_EXTENSION_PROMPT_EXPERIMENT_EXPLANATION1">
+        Do you trust this extension to use these privileges safely?
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_EXPERIMENT_EXPLANATION2">
+        Once installed, this extension could potentially use these privileges to do malicious things to your web browsing experience. Are you sure you want to install this extension?
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_EXPERIMENT_EXPLANATION3">
+        Are you sure you want to install this extension given that it requires these privileges?
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_EXPERIMENT_EXPLANATION4">
+        Make sure that these privileges make sense for what you think the extension needs to do. If they do not, click Cancel.
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_EXPERIMENT_EXPLANATION5">
+        Do you trust this extension to perform these actions?
+      </message>
+
+      <message name="IDS_EXTENSION_PROMPT_EXPERIMENT_INSTALL_BUTTON_TRUST" desc="Text for the install button on the extension install prompt (for experiment group 1)">
+        Yes, I trust this extension!
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_EXPERIMENT_INSTALL_BUTTON_YES" desc="Text for the install button on the extension install prompt (for experiment group 2)">
+        Yes, install
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_EXPERIMENT_INSTALL_BUTTON_SURE" desc="Text for the install button on the extension install prompt (for experiment group 3)">
+        Yes, I'm sure
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_EXPERIMENT_INSTALL_BUTTON_TRUST2" desc="Text for the install button on the extension install prompt (for experiment group 4)">
+        Yes, I trust it
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_EXPERIMENT_INSTALL_BUTTON_NOPE" desc="Text for the cancel button on the extension install prompt">
+        Nope, cancel
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_EXPERIMENT_SHOW_DETAILS" desc="The label of the button which displays permission info when clicked">
+        Show details
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_EXPERIMENT_SHOW_PERMISSIONS" desc="The label of the button which displays permission list when clicked">
+        Show permissions
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_EXPERIMENT_CHECKBOX_INFO" desc="Text for the label that explains that user should check all checkboxes to process for installation.">
+        Please check all boxes to proceed.
+      </message>
+
+      <message name="IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS_EXPLANATION" desc="Extra explanation text for full access permission">
+        This extension can read and change all data on your computer and all websites including Google, Facebook, Yahoo, etc.
+      </message>
+      <message name="IDS_EXTENSION_PROMPT_WARNING_ALL_HOSTS_EXPLANATION" desc="Extra explanation text for all sites permission">
+        This extension can read and change your information on all websites including Google, Facebook, Yahoo, etc.
+      </message>
+
+      <!-- chrome://extension-info bubble -->
+      <message name="IDS_EXTENSION_SCRIPT_POPUP_IS_RUNNING" desc="The label in the extension info bubble that indicates the extension is running scripts on this page">
+        <ph name="EXTENSION_NAME">$1<ex>AdBlock</ex></ph> is running on this page.
+      </message>
+      <message name="IDS_EXTENSION_SCRIPT_POPUP_LAST_UPDATED" desc="The label in the extension info bubble indicating the last time an extension was updated.">
+        Last updated:
+      </message>
+
+      <!-- Global error messages for extensions -->
+      <message name="IDS_EXTENSION_WARNINGS_WRENCH_MENU_ITEM" desc="The wrench menu item indicating that extensions caused problems.">
+        Extension error
+      </message>
+      <message name="IDS_EXTENSION_WARNINGS_TITLE" desc="The title of a section in chrome://extensions which contains the warning(s) that relates to one particular extension">
+        Warning:
+      </message>
+
+      <!-- External extension install alerts -->
+      <!-- TODO(mpcomplete): We may need to change Chrome to
+           PRODUCT_NAME. Leaving it as-is until we finalize
+           these strings. -->
+      <message name="IDS_EXTENSION_EXTERNAL_INSTALL_ALERT_EXTENSION" desc="The wrench menu item indicating that a new external extension was installed.">
+        New extension added (<ph name="EXTENSION_NAME">$1<ex>Babylon Toolbar</ex></ph>)
+      </message>
+      <message name="IDS_EXTENSION_EXTERNAL_INSTALL_ALERT_APP" desc="The wrench menu item indicating that a new external extension was installed.">
+        New app added (<ph name="EXTENSION_NAME">$1<ex>Babylon Toolbar</ex></ph>)
+      </message>
+      <message name="IDS_EXTENSION_EXTERNAL_INSTALL_ALERT_THEME" desc="The wrench menu item indicating that a new external extension was installed.">
+        New theme added (<ph name="EXTENSION_NAME">$1<ex>Babylon Toolbar</ex></ph>)
+      </message>
+      <message name="IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_TITLE" desc="Titlebar of the prompt window for an externally installed extension or app">
+        "<ph name="EXTENSION_NAME">$1<ex>Babylon Toolbar</ex></ph>" added
+      </message>
+      <message name="IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_HEADING_EXTENSION" desc="First bold line of the prompt window for an externally installed extension or app.">
+        Another program on your computer added an extension that may change the way Chrome works.
+      </message>
+      <message name="IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_HEADING_APP" desc="First bold line of the prompt window for an externally installed extension or app.">
+        Another program on your computer added an app that may change the way Chrome works.
+      </message>
+      <message name="IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_HEADING_THEME" desc="First bold line of the prompt window for an externally installed extension or app.">
+        Another program on your computer added a theme that may change the way Chrome works.
+      </message>
+      <message name="IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_ACCEPT_BUTTON_EXTENSION" desc="Button on the external install prompt to enable an extension installed by a third party.">
+        Enable extension
+      </message>
+      <message name="IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_ACCEPT_BUTTON_APP" desc="Button on the external install prompt to enable an extension installed by a third party.">
+        Enable app
+      </message>
+      <message name="IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_ACCEPT_BUTTON_THEME" desc="Button on the external install prompt to enable an extension installed by a third party.">
+        Enable theme
+      </message>
+      <message name="IDS_EXTENSION_EXTERNAL_INSTALL_PROMPT_ABORT_BUTTON" desc="Button on the external install prompt to remove an extension installed by a third party.">
+        Remove from Chrome
+      </message>
+
+      <if expr="use_titlecase">
+        <message name="IDS_EXTENSIONS_UNSUPPORTED_DISABLED_TITLE" desc="In Title Case: Title of the dialog shown when unsupported extensions have been disabled">
+          Unsupported Extensions Disabled
+        </message>
+      </if>
+      <if expr="not use_titlecase">
+        <message name="IDS_EXTENSIONS_UNSUPPORTED_DISABLED_TITLE" desc="Title of the dialog shown when unsupported extensions have been disabled">
+          Unsupported extensions disabled
+        </message>
+      </if>
+      <message name="IDS_EXTENSIONS_DISABLED_AND_N_MORE" desc="Used for a count of additional items in the IDS_EXTENSIONS_UNSUPPORTED_DISABLED_BODY dialog shown when unsupported extensions have been disabled, if we could not fit them all in the dialog">
+        and <ph name="NUMBER_ADDITIONAL_DISABLED">$1<ex>5</ex></ph> more
+      </message>
+      <message name="IDS_EXTENSIONS_UNSUPPORTED_DISABLED_BUTTON" desc="Text of the button on the dialog shown when unsupported extensions have been disabled">
+      OK, got it
+      </message>
+      <message name="IDS_EXTENSIONS_ADDED_WITHOUT_KNOWLEDGE" desc="Text shown in the extensions settings for items that might have been forcefully added to chrome without the user's knowledge">
+        This extension is not listed in the <ph name="IDS_EXTENSION_WEB_STORE_TITLE">$1<ex>Chrome Web Store</ex></ph> and may have been added without your knowledge.
+      </message>
+      <if expr="use_titlecase">
+        <message name="IDS_EXTENSIONS_DISABLE_DEVELOPER_MODE_TITLE" desc="In Title Case: Title of a dialog warning users they have development mode extensions running">
+          Disable Developer Mode Extensions
+        </message>
+      </if>
+      <if expr="not use_titlecase">
+        <message name="IDS_EXTENSIONS_DISABLE_DEVELOPER_MODE_TITLE" desc="Title of a dialog warning users they have development mode extensions running">
+          Disable developer mode extensions
+        </message>
+      </if>
+      <message name="IDS_EXTENSIONS_DISABLE_DEVELOPER_MODE_BODY" desc="Body of a dialog warning users they have development mode extensions running">
+        Extensions running in developer mode can harm your computer. If you're not a developer, you should disable these extensions running in developer mode to stay safe.
+      </message>
+      <message name="IDS_EXTENSIONS_CORRUPTED_EXTENSION" desc="The warning for the user that an extension may have been tampered with on disk.">
+        This extension may have been corrupted.
+      </message>
+      <message name="IDS_EXTENSIONS_CORRUPTED_EXTENSION_2" desc="The warning for the user that an extension may have been tampered with on disk.">
+        This extension may have been corrupted. Try re-installing.
+      </message>
+      <message name="IDS_EXTENSIONS_CORRUPTED_EXTENSION_3" desc="The warning for the user that an extension may have been tampered with on disk.">
+        This extension may have been incorrectly updated. Try re-installing.
+      </message>
+      <message name="IDS_EXTENSIONS_CORRUPTED_EXTENSION_4" desc="The warning for the user that an extension may have been tampered with on disk.">
+        Extension corrupted. Try re-installing.
+      </message>
+      <message name="IDS_EXTENSIONS_CORRUPTED_EXTENSION_5" desc="The warning for the user that an extension may have been tampered with on disk.">
+        This extension may have been corrupted. Please try uninstalling and reinstalling.
+      </message>
+
+      <!-- Settings API bubble -->
+      <if expr="use_titlecase">
+        <message name="IDS_EXTENSIONS_SETTINGS_API_TITLE_HOME_PAGE_BUBBLE" desc="In Title Case: Title of a bubble warning users that an extension has overridden their home page setting">
+         Is This the Home Page You Were Expecting?
+        </message>
+      </if>
+      <if expr="not use_titlecase">
+        <message name="IDS_EXTENSIONS_SETTINGS_API_TITLE_HOME_PAGE_BUBBLE" desc="Title of a bubble warning users that an extension has overridden their home page setting">
+          Is this the home page you were expecting?
+        </message>
+      </if>
+      <if expr="use_titlecase">
+        <message name="IDS_EXTENSIONS_SETTINGS_API_TITLE_STARTUP_PAGES_BUBBLE" desc="In Title Case: Title of a bubble warning users that an extension has overridden their startup pages setting">
+          Is This the Startup Page You Were Expecting?
+        </message>
+      </if>
+      <if expr="not use_titlecase">
+        <message name="IDS_EXTENSIONS_SETTINGS_API_TITLE_STARTUP_PAGES_BUBBLE" desc="Title of a bubble warning users that an extension has overridden their startup pages setting">
+          Is this the startup page you were expecting?
+        </message>
+      </if>
+      <if expr="use_titlecase">
+        <message name="IDS_EXTENSIONS_SETTINGS_API_TITLE_SEARCH_ENGINE_BUBBLE" desc="In Title Case: Title of a bubble warning users that an extension has overridden their default search engine setting">
+          Is This the Search Page You Were Expecting?
+        </message>
+      </if>
+      <if expr="not use_titlecase">
+        <message name="IDS_EXTENSIONS_SETTINGS_API_TITLE_SEARCH_ENGINE_BUBBLE" desc="Title of a bubble warning users that an extension has overridden their default search engine setting">
+          Is this the search page you were expecting?
+        </message>
+      </if>
+      <if expr="use_titlecase">
+        <message name="IDS_EXTENSIONS_NTP_CONTROLLED_TITLE_HOME_PAGE_BUBBLE" desc="In Title Case: Title of a bubble warning users that an extension has overridden their new tab page setting">
+         Is This the New Tab Page You Were Expecting?
+        </message>
+      </if>
+      <if expr="not use_titlecase">
+        <message name="IDS_EXTENSIONS_NTP_CONTROLLED_TITLE_HOME_PAGE_BUBBLE" desc="Title of a bubble warning users that an extension has overridden their new tab page setting">
+          Is this the new tab page you were expecting?
+        </message>
+      </if>
+      <if expr="use_titlecase">
+        <message name="IDS_EXTENSIONS_PROXY_CONTROLLED_TITLE_HOME_PAGE_BUBBLE" desc="In Title Case: Title of a bubble warning users that an extension has overridden their proxy setting">
+        Your Internet Connection is Being Controlled
+        </message>
+      </if>
+      <if expr="not use_titlecase">
+        <message name="IDS_EXTENSIONS_PROXY_CONTROLLED_TITLE_HOME_PAGE_BUBBLE" desc="Title of a bubble warning users that an extension has overridden their proxy setting">
+          Your Internet connection is being controlled
+        </message>
+      </if>
+
+      <message name="IDS_EXTENSIONS_SETTINGS_API_FIRST_LINE_SEARCH_ENGINE" desc="Text displayed as the first line in the Settings API bubble when an extension has changed the search engine.">
+        An extension has changed what page is shown when you search from the Omnibox.
+      </message>
+      <message name="IDS_EXTENSIONS_SETTINGS_API_FIRST_LINE_HOME_PAGE" desc="Text displayed in the Settings API bubble as first line when an extension has changed the home page.">
+        An extension has changed what page is shown when you click the Home button.
+      </message>
+
+      <message name="IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_SEARCH_ENGINE" desc="Second line in the Settings API bubble. Only shown if the secondary change by the extension was just the search engine. The triple single quotes are needed to preserve the space before and after the sentence which is needed when the language (Chrome is being translated to) uses space as word separator. Please preserve them, unless the language being translated to does not use space as word separator.">
+        ''' It also controls what page is shown when you search from the Omnibox.'''
+      </message>
+      <message name="IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_HOME_PAGE" desc="Second line in the Settings API bubble. Only shown if the secondary change by the extension was the just home page. See IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_SEARCH_ENGINE for reason for triple quotes.">
+        ''' It also controls what page is shown when you click the Home button. '''
+      </message>
+      <message name="IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_HOME_AND_SEARCH" desc="Second line in the Settings API bubble. Only shown if the secondary change by the extension was both the home page and the search engine. See IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_SEARCH_ENGINE for reason for triple quotes.">
+        ''' It also controls what page is shown when you click the Home button or search from the Omnibox. '''
+      </message>
+
+      <message name="IDS_EXTENSIONS_NTP_CONTROLLED_FIRST_LINE" desc="Text displayed as the first line in the NTP bubble when an extension has changed the new tab page.">
+        An extension has changed what page is shown when you open a new tab.
+      </message>
+
+      <message name="IDS_EXTENSIONS_PROXY_CONTROLLED_FIRST_LINE" desc="Text displayed as the first line in the proxy bubble when an extension has changed the proxy but we are not pointing at it's icon (because it doesn't have one).">
+        An extension has taken control of your proxy settings, which means it can change, break, or eavesdrop on anything you do online. If you aren't sure why this change happened, you probably don't want it.
+      </message>
+      <message name="IDS_EXTENSIONS_PROXY_CONTROLLED_FIRST_LINE_EXTENSION_SPECIFIC" desc="Text displayed as the first line in the proxy bubble when an extension has changed the proxy and we are pointing at that extension's icon.">
+        This extension has taken control of your proxy settings, which means it can change, break, or eavesdrop on anything you do online. If you aren't sure why this change happened, you probably don't want it.
+      </message>
+
+      <message name="IDS_EXTENSIONS_SETTINGS_API_THIRD_LINE_CONFIRMATION" desc="Third line in the Settings API bubble, always appended after the first (and optional second) line to make one paragraph. See IDS_EXTENSIONS_SETTINGS_API_SECOND_LINE_SEARCH_ENGINE for reason for triple quotes.">
+        ''' If you didn't want these changes, you can restore your previous settings.'''
+      </message>
+
+      <message name="IDS_EXTENSION_CONTROLLED_RESTORE_SETTINGS" desc="The button in the extension controlled bubbles that reverts the settings changes made by the extension and restores what the user had before.">
+        Restore settings
+      </message>
+      <message name="IDS_EXTENSION_CONTROLLED_KEEP_CHANGES" desc="The button in the extension controlled bubbles that cancels the bubble without action.">
+        Keep changes
+      </message>
+
+      <!-- chrome://settings-frame/options_settings_app.html for the App Launcher Settings App -->
+      <if expr="enable_settings_app">
+        <message name="IDS_SETTINGS_APP_LAUNCHER_PRODUCT_NAME" desc="Product name to use when referring to applications running in the App Launcher inside the non-browser Settings App">
+          App Launcher
+        </message>
+        <message name="IDS_SETTINGS_APP_PROFILES_SWITCH_BUTTON_LABEL" desc="The label that appears on the profile switch user button in the Settings App to allow a user to switch the app launcher profile to the current selection.">
+          Switch user
+        </message>
+        <message name="IDS_SETTINGS_APP_SYNC_OVERVIEW" desc="The message that appears in the non-browser Settings App when sync has not been set up by the user.">
+          Sign in with your Google Account to allow apps to synchronize settings and provide other customized services.
+        </message>
+      </if>
+
+      <!-- Packaged Apps -->
+      <message name="IDS_APP_INSTALL_TITLE" desc="Caption for installing an ephemeral app">
+        Install app
+      </message>
+
+      <!-- Components -->
+      <message name="IDS_COMPONENTS_TITLE" desc="Title for the chrome://components page.">
+        Components
+      </message>
+      <message name="IDS_COMPONENTS_VERSION" desc="The label in front of a component version number.">
+        Version:
+      </message>
+      <message name="IDS_COMPONENTS_NONE_INSTALLED" desc="Text that lets the user know that no components are installed.">
+        No components installed.
+      </message>
+      <message name="IDS_COMPONENTS_NO_COMPONENTS" desc="Text that indicates that no components are installed">
+        No components are installed
+      </message>
+      <message name="IDS_COMPONENTS_CHECK_FOR_UPDATE" desc="The button label for triggering update check.">
+        Check for update
+      </message>
+      <message name="IDS_COMPONENTS_STATUS_LABEL" desc="Status label">
+        Status
+      </message>
+      <message name="IDS_COMPONENTS_CHECKING_LABEL" desc="Checking label">
+        Checking for status...
+      </message>
+      <message name="IDS_COMPONENTS_SVC_STATUS_NEW" desc="Service Status">
+        New
+      </message>
+      <message name="IDS_COMPONENTS_SVC_STATUS_CHECKING" desc="Service Status">
+        Checking
+      </message>
+      <message name="IDS_COMPONENTS_SVC_STATUS_UPDATE" desc="Service Status">
+        Update
+      </message>
+      <message name="IDS_COMPONENTS_SVC_STATUS_DNL_DIFF" desc="Service Status">
+        Downloading diff
+      </message>
+      <message name="IDS_COMPONENTS_SVC_STATUS_DNL" desc="Service Status">
+        Downloading
+      </message>
+      <message name="IDS_COMPONENTS_SVC_STATUS_UPDT_DIFF" desc="Service Status">
+        Updating diff
+      </message>
+      <message name="IDS_COMPONENTS_SVC_STATUS_UPDATING" desc="Service Status">
+        Updating
+      </message>
+      <message name="IDS_COMPONENTS_SVC_STATUS_UPDATED" desc="Service Status">
+        Updated
+      </message>
+      <message name="IDS_COMPONENTS_SVC_STATUS_UPTODATE" desc="Service Status">
+        Up-to-date
+      </message>
+      <message name="IDS_COMPONENTS_SVC_STATUS_NOUPDATE" desc="Service Status">
+        No update
+      </message>
+      <message name="IDS_COMPONENTS_UNKNOWN" desc="Service Status">
+        Unknown
+      </message>
+      <message name="IDS_COMPONENTS_EVT_STATUS_STARTED" desc="Service Status">
+        Updater started
+      </message>
+      <message name="IDS_COMPONENTS_EVT_STATUS_SLEEPING" desc="Service Status">
+        Updater sleeping
+      </message>
+      <message name="IDS_COMPONENTS_EVT_STATUS_FOUND" desc="Service Status">
+        Update found
+      </message>
+      <message name="IDS_COMPONENTS_EVT_STATUS_READY" desc="Service Status">
+        Update ready
+      </message>
+      <message name="IDS_COMPONENTS_EVT_STATUS_UPDATED" desc="Service Status">
+        Component updated
+      </message>
+      <message name="IDS_COMPONENTS_EVT_STATUS_NOTUPDATED" desc="Service Status">
+        Component not updated
+      </message>
+      <message name="IDS_COMPONENTS_EVT_STATUS_DOWNLOADING" desc="Service Status">
+        Component downloading
+      </message>
+
+      <!-- Plugins -->
+      <if expr="enable_plugins">
+        <message name="IDS_PLUGINS_TITLE" desc="Title for the chrome://plugins page.">
+          Plug-ins
+        </message>
+        <message name="IDS_PLUGINS_DETAILS_MODE_LINK" desc="Text of the link for details mode.">
+          Details
+        </message>
+        <message name="IDS_PLUGINS_NONE_INSTALLED" desc="Text that lets the user know that no plug-ins are installed.">
+          No plug-ins installed.
+        </message>
+        <message name="IDS_PLUGINS_DISABLED_PLUGIN" desc="Text that signifies that the plug-in is currently disabled.">
+          (Disabled)
+        </message>
+        <message name="IDS_PLUGINS_DISABLED_BY_POLICY_PLUGIN" desc="Text that signifies that the plug-in is currently disabled by enterprise policy.">
+          (Disabled by enterprise policy)
+        </message>
+        <message name="IDS_PLUGINS_ENABLED_BY_POLICY_PLUGIN" desc="Text that signifies that the plug-in is currently enabled by enterprise policy.">
+          (Enabled by enterprise policy)
+        </message>
+        <message name="IDS_PLUGINS_GROUP_MANAGED_BY_POLICY" desc="Text that signifies that the plug-in group is currently managed by enterprise policy.">
+          (Managed by enterprise policy)
+        </message>
+        <message name="IDS_PLUGINS_VERSION" desc="The label in front of a plug-in version number.">
+          Version:
+        </message>
+        <message name="IDS_PLUGINS_DESCRIPTION" desc="The label in front of a plug-in description.">
+          Description:
+        </message>
+        <message name="IDS_PLUGINS_PATH" desc="The label in front of a plug-in path (file/location on disk).">
+          Location:
+        </message>
+        <message name="IDS_PLUGINS_TYPE" desc="The label in front of a plug-in type (NPAPI, PPAPI, etc.).">
+          Type:
+        </message>
+        <message name="IDS_PLUGINS_MIME_TYPES" desc="The label in front of a plug-in's MIME types table.">
+          MIME types:
+        </message>
+        <message name="IDS_PLUGINS_MIME_TYPES_MIME_TYPE" desc="The label over the MIME type column in a plug-in's MIME types table.">
+          MIME type
+        </message>
+        <message name="IDS_PLUGINS_MIME_TYPES_DESCRIPTION" desc="The label over the description column in a plug-in's MIME types table.">
+          Description
+        </message>
+        <message name="IDS_PLUGINS_MIME_TYPES_FILE_EXTENSIONS" desc="The label over the file extensions column in a plug-in's MIME types table.">
+          File extensions
+        </message>
+        <message name="IDS_PLUGINS_DISABLE" desc="The link for disabling a plug-in.">
+          Disable
+        </message>
+        <message name="IDS_PLUGINS_ENABLE" desc="The link for enabling a plug-in.">
+          Enable
+        </message>
+        <message name="IDS_PLUGINS_ALWAYS_ALLOWED" desc="The checkbox label for whitelisting a plug-in for content settings.">
+          Always allowed
+        </message>
+        <message name="IDS_PLUGINS_DOWNLOAD" desc="The link label to download the latest version of this plug-in">
+          Download Critical Security Update
+        </message>
+        <message name="IDS_PLUGINS_NAME" desc="The label for the name of this plug-in">
+          Name:
+        </message>
+        <message name="IDS_PLUGINS_NO_PLUGINS" desc="Text that indicates that no plugins are installed">
+          No plugins are installed
+        </message>
+        <message name="IDS_PLUGINS_NPAPI" desc="Text that indicates the plugin is an NPAPI plugin.">
+          NPAPI
+        </message>
+        <message name="IDS_PLUGINS_PPAPI_IN_PROCESS" desc="Text that indicates the plugin is an in-process PPAPI plugin.">
+          PPAPI (in-process)
+        </message>
+        <message name="IDS_PLUGINS_PPAPI_OUT_OF_PROCESS" desc="Text that indicates the plugin is an out-of-process PPAPI plugin.">
+          PPAPI (out-of-process)
+        </message>
+        <message name="IDS_PLUGINS_PPAPI_UNSANDBOXED" desc="Text that indicates the plugin is an unsandboxed out-of-process PPAPI plugin.">
+          PPAPI (unsandboxed)
+        </message>
+        <message name="IDS_PLUGINS_BROWSER_PLUGIN" desc="Text that indicates the plugin is a browser plugin.">
+          BROWSER PLUGIN
+        </message>
+      </if>
+
+      <!-- about:flags -->
+      <message name="IDS_FLAGS_LONG_TITLE" desc="Long version of the title for the about:flags page.">
+        Careful, these experiments may bite
+      </message>
+      <message name="IDS_FLAGS_TABLE_TITLE" desc="Title for the experiments table on the about:flags page.">
+        Experiments
+      </message>
+      <message name="IDS_FLAGS_WARNING_HEADER" desc="Text right before the warning body text.">
+        WARNING
+      </message>
+      <message name="IDS_FLAGS_WARNING_TEXT" desc="Text at the top of the about:flags page, warning users that the about:flags contents are volatile.">
+        These experimental features may change, break, or disappear at any time. We make absolutely no guarantees about what may happen if you turn one of these experiments on, and your browser may even spontaneously combust. Jokes aside, your browser may delete all your data, or your security and privacy could be compromised in unexpected ways. Any experiments you enable will be enabled for all users of this browser. Please proceed with caution.
+      </message>
+      <message name="IDS_FLAGS_PROMOTE_BETA_CHANNEL" desc="Shown on the about:flags page when we want to promote the Chrome beta channel">
+        Interested in cool new Chrome features? Try our beta channel at chrome.com/beta.
+      </message>
+      <message name="IDS_FLAGS_PROMOTE_DEV_CHANNEL" desc="Shown on the about:flags page when we want to promote the Chrome developer channel">
+        Interested in cool new Chrome features? Try our dev channel at chrome.com/dev.
+      </message>
+
+      <message name="IDS_FLAGS_NO_EXPERIMENTS_AVAILABLE" desc="Shown if no experiments are available">
+        Aww, it looks like there are currently no experiments available.
+      </message>
+      <message name="IDS_FLAGS_UNSUPPORTED_TABLE_TITLE" desc="Title for the unsupported experiments table on the about:flags page. It lists all experiments that are not available on the current platform.">
+        Unavailable Experiments
+      </message>
+      <message name="IDS_FLAGS_NO_UNSUPPORTED_EXPERIMENTS" desc="Show if there are no unavailable experiments.">
+        All experiments are available on your platform!
+      </message>
+      <message name="IDS_FLAGS_NOT_AVAILABLE" desc="Shown instead of the Enable/Disable link, to let the user know that an experiment is not available on the current platform.">
+        Sorry, this experiment is not available on your platform.
+      </message>
+      <if expr="not chromeos">
+        <message name="IDS_FLAGS_RELAUNCH_BUTTON" desc="Text on a button that relaunches chrome when clicked. ">
+          Relaunch Now
+        </message>
+      </if>
+      <if expr="chromeos">
+        <message name="IDS_FLAGS_ALTERNATE_SHELF_LAYOUT_NAME">
+          Alternative shelf layout
+        </message>
+        <message name="IDS_FLAGS_ALTERNATE_SHELF_LAYOUT_DESCRIPTION">
+          Use the alternative shelf layout.
+        </message>
+        <message name="IDS_FLAGS_RELAUNCH_BUTTON" desc="Text on a button that restarts Chrome OS when clicked. ">
+          Restart Now
+        </message>
+        <message name="IDS_SYSTEM_FLAGS_OWNER_ONLY" desc="A warning that flags that apply system-wide can only be set by the owner.">
+          Flags that apply system-wide can only be set by the owner: <ph name="OWNER_EMAIL">$1<ex>owner@example.com</ex></ph>.
+        </message>
+      </if>
+      <message name="IDS_FLAGS_RESET_ALL_BUTTON" desc="Text on a button that resets all experiments to their default state when clicked.">
+        Reset all to default
+      </message>
+      <message name="IDS_FLAGS_DISABLE" desc="The link for disabling a labs experiment.">
+        Disable
+      </message>
+      <message name="IDS_FLAGS_ENABLE" desc="The link for enabling a labs experiment.">
+        Enable
+      </message>
+      <message name="IDS_FLAGS_ENABLE_NACL_NAME" desc="Name of the 'Enable Native Client' lab.">
+        Native Client
+      </message>
+      <if expr="is_android">
+        <message name="IDS_FLAGS_ENABLE_NACL_DESCRIPTION" desc="Mobile: Description of the 'Enable Native Client' lab.">
+          Enable support for Native Client.
+        </message>
+      </if>
+      <if expr="not is_android">
+        <message name="IDS_FLAGS_ENABLE_NACL_DESCRIPTION" desc="Description of the 'Enable Native Client' lab.">
+          Enable Native Client for all web applications, even those that were not installed from the Chrome Web Store.
+        </message>
+      </if>
+      <message name="IDS_FLAGS_ENABLE_NACL_DEBUG_NAME" desc="Name of the 'NaCl GDB debug stub' lab.">
+        Native Client GDB-based debugging
+      </message>
+      <message name="IDS_FLAGS_ENABLE_NACL_DEBUG_DESCRIPTION" desc="Description of the 'NaCl GDB debug stub' lab.">
+        Enable GDB debug stub. This will stop a Native Client application on startup and wait for nacl-gdb (from the NaCl SDK) to attach to it.
+      </message>
+      <message name="IDS_FLAGS_NACL_DEBUG_MASK_NAME" desc="Name of the 'Restrict NaCl GDB debugging' lab.">
+        Restrict Native Client GDB-based debugging by pattern
+      </message>
+      <message name="IDS_FLAGS_NACL_DEBUG_MASK_DESCRIPTION" desc="Description of the 'Restrict NaCl GDB debugging' lab.">
+        Restricts Native Client application GDB-based debugging by URL of manifest file. Native Client GDB-based debugging must be enabled for this option to work.
+      </message>
+      <message name="IDS_NACL_DEBUG_MASK_CHOICE_DEBUG_ALL">
+        Debug everything.
+      </message>
+      <message name="IDS_NACL_DEBUG_MASK_CHOICE_EXCLUDE_UTILS_PNACL">
+        Debug everything except secure shell and the PNaCl translator.
+      </message>
+      <message name="IDS_NACL_DEBUG_MASK_CHOICE_INCLUDE_DEBUG">
+        Debug only if manifest URL ends with debug.nmf.
+      </message>
+      <message name="IDS_FLAGS_SAVE_PAGE_AS_MHTML_NAME" desc="Name of the 'Save Page as MHTML' lab.">
+        Save Page as MHTML
+      </message>
+      <message name="IDS_FLAGS_SAVE_PAGE_AS_MHTML_DESCRIPTION" desc="Description of the 'Save Page as MHTML' lab.">
+        Enables saving pages as MHTML: a single text file containing HTML and all sub-resources.
+      </message>
+      <message name="IDS_FLAGS_DEVICE_DISCOVERY_NOTIFICATIONS_NAME" desc="Title of the 'device discovery notificatios' flag.">
+        Device Discovery Notifications
+      </message>
+      <message name="IDS_FLAGS_DEVICE_DISCOVERY_NOTIFICATIONS_DESCRIPTION" desc="Description of the 'device discovery notifications' flag.">
+        Device discovery notifications on local network.
+      </message>
+      <if expr="is_win">
+        <message name="IDS_FLAGS_ENABLE_CLOUD_PRINT_XPS_NAME">
+          Enable XPS in Google Cloud Print
+        </message>
+        <message name="IDS_FLAGS_ENABLE_CLOUD_PRINT_XPS_DESCRIPTION">
+          XPS enables advanced options for classic printers connected to the Cloud Print with Chrome. Printers must be re-connected after changing this flag.
+        </message>
+      </if>
+      <message name="IDS_FLAGS_ENABLE_PRINT_PREVIEW_REGISTER_PROMOS_NAME">
+        Enable Print Preview Registration Promos
+      </message>
+      <message name="IDS_FLAGS_ENABLE_PRINT_PREVIEW_REGISTER_PROMOS_DESCRIPTION">
+        Enable registering unregistered cloud printers from print preview.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SAVE_PASSWORD_BUBBLE_NAME">
+        Enable Save Password Bubble UI
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SAVE_PASSWORD_BUBBLE_DESCRIPTION">
+        Enable experimental bubble-based UI for saving passwords; replaces the existing infobar.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SCROLL_PREDICTION_NAME" desc="Title of the flag which enables scroll prediction.">
+        Enable scroll prediction
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SCROLL_PREDICTION_DESCRIPTION" desc="Description of the flag to enable scroll prediction.">
+        Predicts the finger's future position during scrolls allowing time to render the frame before the finger is there.
+      </message>
+      <if expr="is_android">
+        <message name="IDS_FLAGS_ENABLE_ACCESSIBILITY_TAB_SWITCHER_NAME" desc="Name of the flag to enable the accessibility tab switcher.">
+          Enable Accessibility Tab Switcher.
+        </message>
+        <message name="IDS_FLAGS_ENABLE_ACCESSIBILITY_TAB_SWITCHER_DESCRIPTION" desc="Description of the flag to enable the accessibility tab switcher.">
+          Enable the accessibility tab switcher for Android.
+        </message>
+        <message name="IDS_FLAGS_ENABLE_ACCESSIBILITY_SCRIPT_INJECTION_NAME" desc="Name of the flag to enable script injection for accessibility.">
+          Enable Script Injection For Accessibility.
+        </message>
+        <message name="IDS_FLAGS_ENABLE_ACCESSIBILITY_SCRIPT_INJECTION_DESCRIPTION" desc="Description of the flag to enable script injection for accessibility.">
+          Enable script injection instead of native Android accessibility.
+        </message>
+        <message name="IDS_FLAGS_DISABLE_CAST_NAME" desc="Name of the flag to disable Chromecast support.">
+          Disable experimental Chromecast support
+        </message>
+        <message name="IDS_FLAGS_DISABLE_CAST_DESCRIPTION" desc="Description of the flag to disable Chromecast support.">
+          Disable experimental Chromecast support allowing to play and control videos from the Web on Chromecast devices.
+        </message>
+      </if>
+      <message name="IDS_TOUCH_EVENTS_NAME" desc="Title of the touch-events flag." >
+        Enable touch events
+      </message>
+      <message name="IDS_TOUCH_EVENTS_DESCRIPTION" desc="Description of the touch-events flag.">
+        Force touchscreen support to always be enabled or disabled, or to be enabled when a touchscreen is detected on startup (Automatic, the default).
+      </message>
+      <message name="IDS_DISABLE_TOUCH_ADJUSTMENT_NAME" desc="Title of the disable touch adjustment flag.">
+        Disable touch adjustment.
+      </message>
+      <message name="IDS_DISABLE_TOUCH_ADJUSTMENT_DESCRIPTION" desc="Description of the disable touch adjustment flag.">
+        Disables touch adjustment support.  Touch adjustment is the process of refining the position of a touch gesture in order to compensate for touches having poor resolution compared to a mouse.
+      </message>
+      <message name="IDS_FLAGS_COMPOSITED_LAYER_BORDERS" desc="Name of the 'Composited layer borders' lab.">
+        Composited render layer borders
+      </message>
+      <message name="IDS_FLAGS_COMPOSITED_LAYER_BORDERS_DESCRIPTION" desc="Description of the 'Composited layer borders' lab.">
+        Renders a border around composited Render Layers to help debug and study layer compositing.
+      </message>
+      <message name="IDS_FLAGS_SHOW_FPS_COUNTER" desc="Name of the 'Show FPS counter' lab.">
+        FPS counter
+      </message>
+      <message name="IDS_FLAGS_SHOW_FPS_COUNTER_DESCRIPTION" desc="Description of the 'Show FPS counter' lab.">
+        Shows a page's actual frame rate, in frames per second, when hardware acceleration is active.
+      </message>
+      <message name="IDS_FLAGS_DEBUG_SHORTCUTS_NAME" desc="Name of the 'Debugging keyboard shortcuts' lab.">
+        Debugging keyboard shortcuts
+      </message>
+      <message name="IDS_FLAGS_DEBUG_SHORTCUTS_DESCRIPTION" desc="Description of the 'Debugging keyboard shortcuts' lab.">
+        Enables additional keyboard shortcuts that are useful for debugging Chromium.
+      </message>
+      <message name="IDS_FLAGS_IGNORE_GPU_BLACKLIST_NAME" desc="Name of the 'Ignore GPU blacklist' lab.">
+        Override software rendering list
+      </message>
+      <message name="IDS_FLAGS_IGNORE_GPU_BLACKLIST_DESCRIPTION" desc="Description of the 'Ignore GPU blacklist' lab.">
+        Overrides the built-in software rendering list and enables GPU-acceleration on unsupported system configurations.
+      </message>
+      <message name="IDS_FLAGS_THREADED_COMPOSITING_MODE_NAME" desc="Name of the 'Threaded compositing mode' lab.">
+        Threaded compositing
+      </message>
+      <message name="IDS_FLAGS_THREADED_COMPOSITING_MODE_DESCRIPTION" desc="Description of the 'Threaded compositing mode' lab.">
+        Uses a secondary thread to perform web page compositing. This allows smooth scrolling, even when the main thread is unresponsive.
+      </message>
+      <message name="IDS_FLAGS_FORCE_ACCELERATED_OVERFLOW_SCROLL_MODE_NAME" desc="Name of the 'Accelerated overflow scroll mode' lab.">
+        Accelerated overflow scroll
+      </message>
+      <message name="IDS_FLAGS_FORCE_ACCELERATED_OVERFLOW_SCROLL_MODE_DESCRIPTION" desc="Description of the 'Accelerated overflow scroll mode' lab.">
+        When possible, puts the scrolling contents of an overflow scrolling element onto a composited layer for faster scrolling.
+      </message>
+      <message name="IDS_FLAGS_DISABLE_LAYER_SQUASHING_NAME" desc="Name of the 'Disable layer squashing' lab.">
+        Disable layer squashing
+      </message>
+      <message name="IDS_FLAGS_DISABLE_LAYER_SQUASHING_DESCRIPTION" desc="Description of the 'Disable layer squashing' lab.">
+        Prevents the automatic combining of composited layers.
+      </message>
+      <if expr="is_win">
+        <message name="IDS_FLAGS_DISABLE_DIRECT_WRITE_NAME" desc="Name of the 'Disable DirectWrite' lab.">
+          Disable DirectWrite
+        </message>
+        <message name="IDS_FLAGS_DISABLE_DIRECT_WRITE_DESCRIPTION" desc="Description of the 'Disable DirectWrite' lab.">
+          Disables the use of experimental DirectWrite font rendering system.
+        </message>
+      </if>
+      <message name="IDS_FLAGS_ENABLE_EXPERIMENTAL_CANVAS_FEATURES_NAME" desc="Name of the 'Enable experimental canvas features' lab.">
+        Enable experimental canvas features
+      </message>
+      <message name="IDS_FLAGS_ENABLE_EXPERIMENTAL_CANVAS_FEATURES_DESCRIPTION" desc="Description of the 'Enable experimental canvas features' lab.">
+        Enables the use of experimental canvas features which are still in development.
+      </message>
+      <message name="IDS_FLAGS_DISABLE_ACCELERATED_2D_CANVAS_NAME" desc="Name of the 'Disable accelerated 2D canvas' lab.">
+        Disable accelerated 2D canvas
+      </message>
+      <message name="IDS_FLAGS_DISABLE_ACCELERATED_2D_CANVAS_DESCRIPTION" desc="Description of the 'Disable accelerated 2D canvas' lab.">
+        Disables the use of the GPU to perform 2d canvas rendering and instead uses software rendering.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_DISPLAY_LIST_2D_CANVAS_NAME" desc="Name of the 'Enable display list 2D canvas' lab.">
+        Enable display list 2D canvas
+      </message>
+      <message name="IDS_FLAGS_ENABLE_DISPLAY_LIST_2D_CANVAS_DESCRIPTION" desc="Description of the 'Enable display list 2D canvas' lab.">
+        Enables the use of display lists to record 2D canvas commands. This allows 2D canvas rasterization to be performed on separate thread.
+      </message>
+      <message name="IDS_FLAGS_EXPERIMENTAL_EXTENSION_APIS_NAME" desc="Name of the 'Experimental Extension APIs' lab.">
+        Experimental Extension APIs
+      </message>
+      <message name="IDS_FLAGS_EXPERIMENTAL_EXTENSION_APIS_DESCRIPTION" desc="Description of the 'Experimental Extension APIs' lab.">
+        Enables experimental extension APIs. Note that the extension gallery doesn't allow you to upload extensions that use experimental APIs.
+      </message>
+      <message name="IDS_FLAGS_EXTENSIONS_ON_CHROME_URLS_NAME" desc="Name of the 'Extensions on chrome:// URLs' lab">
+        Extensions on chrome:// URLs
+      </message>
+      <message name="IDS_FLAGS_EXTENSIONS_ON_CHROME_URLS_DESCRIPTION" desc="Description of the 'Extensions on chrome:// URLs' lab">
+        Enables running extensions on chrome:// URLs, where extensions explicitly request this permission.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_FAST_UNLOAD_DESCRIPTION" desc="Description of the 'Fast Unload' lab.">
+        Enables fast tab/window closing - runs a tab's onunload js handler independently of the GUI.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_FAST_UNLOAD_NAME" desc="Name of the 'Extensions on chrome:// URLs' lab">
+        Enable fast tab/window close
+      </message>
+      <message name="IDS_FLAGS_ENABLE_APP_WINDOW_CONTROLS_NAME" desc="Name of the 'Enable 'window-controls' element' lab.">
+        Enable 'window-controls' element
+      </message>
+      <message name="IDS_FLAGS_ENABLE_APP_WINDOW_CONTROLS_DESCRIPTION" desc="Description of the 'Enable 'window-controls' element' lab.">
+        Enables using 'window-controls' HTML elements in packaged apps.
+      </message>
+      <message name="IDS_FLAGS_USER_CONSENT_FOR_EXTENSION_SCRIPTS_NAME" desc="Name of the 'User consent for extension scripts' lab.">
+        User consent for extension scripts
+      </message>
+      <message name="IDS_FLAGS_USER_CONSENT_FOR_EXTENSION_SCRIPTS_DESCRIPTION" desc="Description of the 'User consent for extension scripts' lab">
+        Require user consent for an extension running a script on the page, if the extension requested permission to run on all urls.
+      </message>
+      <message name="IDS_FLAGS_DISABLE_HYPERLINK_AUDITING_NAME" desc="Name of the 'Disable hyperlink auditing' lab.">
+        Disable hyperlink auditing
+      </message>
+      <message name="IDS_FLAGS_DISABLE_HYPERLINK_AUDITING_DESCRIPTION" desc="Description of the 'Disable hyperlink auditing' lab.">
+        Disable sending hyperlink auditing pings.
+      </message>
+      <if expr="is_android">
+        <message name="IDS_FLAGS_ENABLE_CONTEXTUAL_SEARCH" desc="Title for the flag to enable Contextual Search.">
+          Enable Contextual Search.
+        </message>
+        <message name="IDS_FLAGS_ENABLE_CONTEXTUAL_SEARCH_DESCRIPTION" desc="Description for the flag to enable Contextual Search.">
+          Whether or not Contextual Search is enabled.
+        </message>
+      </if>
+      <message name="IDS_FLAGS_ENABLE_GESTURE_TAP_HIGHLIGHTING_NAME" desc="Title for the flag to turn on gesture tap highlighting">
+        Gesture Tap Highlighting
+      </message>
+      <message name="IDS_FLAGS_ENABLE_GESTURE_TAP_HIGHLIGHTING_DESCRIPTION" desc="Description for the flag to turn on gesture tap highlighting">
+        Enable the experimental gesture tap highlight implementation.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SMOOTH_SCROLLING_NAME" desc="Title for the flag to turn on smooth scrolling">
+        Smooth Scrolling
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SMOOTH_SCROLLING_DESCRIPTION" desc="Description for the flag to turn on smooth scrolling">
+        Enable the experimental smooth scrolling implementation.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_OVERLAY_SCROLLBARS_NAME" desc="Title for the flag to turn on overlay scrollbars">
+        Overlay Scrollbars
+      </message>
+      <message name="IDS_FLAGS_ENABLE_OVERLAY_SCROLLBARS_DESCRIPTION" desc="Description for the flag to turn on overlay scrollbars">
+        Enable the experimental overlay scrollbars implementation. You must also enable threaded compositing to have the scrollbars animate.
+      </message>
+      <if expr="is_android">
+        <message name="IDS_AUTO_LOGIN_FAILED" desc="Message to display when auto-login fails. [CHAR-LIMIT=64]">
+          Automatic sign-in failed
+        </message>
+      </if>
+      <message name="IDS_FLAGS_SHOW_AUTOFILL_TYPE_PREDICTIONS_NAME" desc="Title for the flag to show Autofill field type predictions for all forms">
+        Show Autofill predictions
+      </message>
+      <message name="IDS_FLAGS_SHOW_AUTOFILL_TYPE_PREDICTIONS_DESCRIPTION" desc="Description for the flag to show Autofill field type predictions for all forms">
+        Annotates web forms with Autofill field type predictions as placeholder text.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_TCP_FAST_OPEN_NAME" desc="Name of the flag that enables TCP Fast Open.">
+        Enable TCP Fast Open
+      </message>
+      <message name="IDS_FLAGS_ENABLE_TCP_FAST_OPEN_DESCRIPTION" desc="Description of the flag that enables TCP Fast Open.">
+        Enable the option to send extra authentication information in the initial SYN packet for a previously connected client, allowing faster data send start.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_RENDERER_MOJO_CHANNEL_NAME" desc="Name of the flag that enables Mojo channel to renderers.">
+        Enable Mojo based IPC channel for renderers
+      </message>
+      <message name="IDS_FLAGS_ENABLE_RENDERER_MOJO_CHANNEL_DESCRIPTION" desc="Description of the flag that enables Mojo channel to renderers.">
+        Enable Mojo based IPC channel  for communication between browser process and renderer processes.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_TOUCH_DRAG_DROP_NAME" desc="Name of the flag that enables touch initiated drag drop.">
+        Enable touch initiated drag and drop
+      </message>
+      <message name="IDS_FLAGS_ENABLE_TOUCH_DRAG_DROP_DESCRIPTION" desc="Description of the flag to enable touch initiated drag drop.">
+        Touch drag and drop can be initiated through long press on a draggable element.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_TOUCH_EDITING_NAME" desc="Name of the flag that enables touch based text editing.">
+        Enable touch based text editing
+      </message>
+      <message name="IDS_FLAGS_ENABLE_TOUCH_EDITING_DESCRIPTION" desc="Description of the flag to enable touch based text editing.">
+        Touch editing can be initiated by tapping on a textfield or a selected text.
+      </message>
+      <message name="IDS_FLAGS_WALLET_SERVICE_USE_SANDBOX_NAME" desc="Title for the flag to use the Online Wallet sandbox servers (instead of production).">
+        Use Wallet sandbox servers
+      </message>
+      <message name="IDS_FLAGS_WALLET_SERVICE_USE_SANDBOX_DESCRIPTION" desc="Description of the flag to use the Online Wallet sandbox servers.">
+        For developers: use the sandbox service for Wallet API calls for requestAutocomplete().
+      </message>
+      <message name="IDS_FLAGS_OVERSCROLL_HISTORY_NAVIGATION_NAME" desc="Title for the flag for history navigation from horizontal overscroll.">
+        Overscroll history navigation
+      </message>
+      <message name="IDS_FLAGS_OVERSCROLL_HISTORY_NAVIGATION_DESCRIPTION" desc="Description for the flag to disable history navigation from horizontal overscroll.">
+        Experimental history navigation in response to horizontal overscroll.
+      </message>
+      <message name="IDS_OVERSCROLL_HISTORY_NAVIGATION_SIMPLE_UI" desc="Description for the simple UI for history navigation from horizontal overscroll.">
+        Simple
+      </message>
+      <message name="IDS_FLAGS_SCROLL_END_EFFECT_NAME" desc="Title for the flag for scroll end effect from vertical overscroll.">
+        Scroll end effect
+      </message>
+      <message name="IDS_FLAGS_SCROLL_END_EFFECT_DESCRIPTION" desc="Description for the flag that controls scroll end effect from vertical overscroll.">
+        Experimental scroll end effect in response to vertical overscroll.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_PANELS_NAME" desc="Name of the 'Enable Panels' lab.">
+        Enable Panels
+      </message>
+      <message name="IDS_FLAGS_ENABLE_PANELS_DESCRIPTION" desc="Description for the flag to enable Panel windows.">
+        Enable Panel windows that open outside of the browser frame. Attempts to open a Panel will open a popup instead if not enabled. Panels are always enabled on the dev and canary channels.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_WEBGL_DRAFT_EXTENSIONS_NAME" desc="Name of the 'Enable WebGL Draft Extensions' flag.">
+        Enable WebGL Draft Extensions
+      </message>
+      <message name="IDS_FLAGS_ENABLE_WEBGL_DRAFT_EXTENSIONS_DESCRIPTION" desc="Description for the flag to enable WebGL Draft Extensions.">
+        Enabling this option allows web applications to access the WebGL Extensions that are still in draft status.
+      </message>
+      <message name="IDS_FLAGS_DISABLE_WEBGL_NAME" desc="Name of the 'Disable WebGL' lab.">
+        Disable WebGL
+      </message>
+      <message name="IDS_FLAGS_DISABLE_WEBGL_DESCRIPTION" desc="Description for the flag to disable WebGL.">
+        Enabling this option prevents web applications from accessing the WebGL API.
+      </message>
+      <message name="IDS_FLAGS_DISABLE_WEBRTC_NAME" desc="Name of the 'Disable WebRTC' lab.">
+        Disable WebRTC
+      </message>
+      <message name="IDS_FLAGS_DISABLE_WEBRTC_DESCRIPTION" desc="Description for the flag to disable WebRTC.">
+        Enabling this option prevents web applications from accessing the WebRTC API.
+      </message>
+      <message name="IDS_FLAGS_DISABLE_WEBRTC_HW_DECODING_NAME" desc="Name of chrome:flags option to turn off WebRTC hardware video decoding support.">
+        Disable support for WebRTC hardware video decoding.
+      </message>
+      <message name="IDS_FLAGS_DISABLE_WEBRTC_HW_DECODING_DESCRIPTION" desc="Description of chrome:flags option to turn off WebRTC hardware video decoding support.">
+        This option disables support in WebRTC for decoding video streams using platform hardware.
+      </message>
+      <message name="IDS_FLAGS_DISABLE_WEBRTC_HW_ENCODING_NAME" desc="Name of chrome:flags option to turn off WebRTC hardware video encoding support.">
+        Disable support for WebRTC hardware video encoding.
+      </message>
+      <message name="IDS_FLAGS_DISABLE_WEBRTC_HW_ENCODING_DESCRIPTION" desc="Description of chrome:flags option to turn off WebRTC hardware video encoding support.">
+        This option disables support in WebRTC for encoding video streams using platform hardware.
+      </message>
+      <if expr="is_android">
+        <message name="IDS_FLAGS_DISABLE_WEBAUDIO_NAME" desc="Name of the 'Disable WebAudio' lab.">
+          Disable WebAudio
+        </message>
+        <message name="IDS_FLAGS_DISABLE_WEBAUDIO_DESCRIPTION" desc="Description for the flag to disable WebAudio.">
+          Enabling this option prevents web sites from accessing the WebAudio API.
+        </message>
+      </if>
+      <message name="IDS_FLAGS_COMPOSITING_FOR_FIXED_POSITION_NAME" desc="Name of the 'Compositing for fixed position elements' lab.">
+        Compositing for fixed position elements.
+      </message>
+      <message name="IDS_FLAGS_COMPOSITING_FOR_FIXED_POSITION_DESCRIPTION" desc="Description for the flag to make fixed position elements become composited layers.">
+        Enabling this option will make fixed position elements have their own composited layers. Note that fixed position elements must also create stacking contexts for this to work.
+      </message>
+      <message name="IDS_FLAGS_COMPOSITING_FOR_FIXED_POSITION_HIGH_DPI" desc="Description of the 'Compositing for fixed position elements on high DPI' experiment.">
+        Enabled only for high-DPI displays
+      </message>
+      <message name="IDS_FLAGS_COMPOSITING_FOR_TRANSITION_NAME" desc="Name of the 'Compositing for RenderLayers with transitions' lab.">
+        Compositing for RenderLayers with transitions.
+      </message>
+      <message name="IDS_FLAGS_COMPOSITING_FOR_TRANSITION_DESCRIPTION" desc="Description for the flag to make RenderLayers with transitions become composited layers.">
+        Enabling this option will make RenderLayers with a transition on opacity, transform, or filter have their own composited layer.
+      </message>
+      <message name="IDS_FLAGS_ACCELERATED_FIXED_ROOT_BACKGROUND_NAME" desc="Name of the 'Accelerated fixed root background' lab.">
+        Compositing for fixed root backgrounds.
+      </message>
+      <message name="IDS_FLAGS_ACCELERATED_FIXED_ROOT_BACKGROUND_DESCRIPTION" desc="Description for the flag to all fixed root backgrounds to be put in separate, composited layers.">
+        If this option is enabled, and if the body is styled with background-attachment:fixed, the background will have its own compositied layer.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_DEFERRED_IMAGE_DECODING_NAME" desc="Name of the 'Enable deferred image decoding' lab.">
+        Enable deferred image decoding.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_DEFERRED_IMAGE_DECODING_DESCRIPTION" desc="Description for the flag to defer image decoding in WebKit.">
+        Defer image decoding operations in WebKit until painting.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_QUIC_NAME" desc="Title for the flag to enable QUIC.">
+        Experimental QUIC protocol.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_QUIC_DESCRIPTION" desc="Description for the flag to enable QUIC.">
+        Enable experimental QUIC protocol support.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SPDY4_NAME" desc="Title for the flag to enable SPDY/4">
+        Enable SPDY/4
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SPDY4_DESCRIPTION" desc="Description for the flag to enable SPDY/4.">
+        Enable SPDY/4, which is the HTTP/2 standard. Currently experimental.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_ASYNC_DNS_NAME" desc="Title for the flag to enable asynchronous DNS client.">
+        Built-in Asynchronous DNS
+      </message>
+      <message name="IDS_FLAGS_ENABLE_ASYNC_DNS_DESCRIPTION" desc="Description for the flag to enable asynchronous DNS client.">
+        Enable experimental asynchronous DNS client.
+      </message>
+      <message name="IDS_FLAGS_DISABLE_MEDIA_SOURCE_NAME" desc="Title for the flag to disable the Media Source API.">
+        Disable Media Source API.
+      </message>
+      <message name="IDS_FLAGS_DISABLE_MEDIA_SOURCE_DESCRIPTION" desc="Description for the flag to disable the Media Source API.">
+        Disable the MediaSource object. This object allows JavaScript to send media data directly to a video element.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_ENCRYPTED_MEDIA_NAME" desc="Title for the flag to enable the (unprefixed) Encrypted Media Extensions APIs (e.g. MediaKeys).">
+        Enable Encrypted Media Extensions.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_ENCRYPTED_MEDIA_DESCRIPTION" desc="Description for the flag to enable the (unprefixed) Encrypted Media Extensions APIs (e.g. MediaKeys).">
+        Enable Encrypted Media Extensions on video and audio elements. This enables the latest version of the Encrypted Media Extensions.
+      </message>
+      <message name="IDS_FLAGS_DISABLE_PREFIXED_ENCRYPTED_MEDIA_NAME" desc="Title for the flag to disable the prefixed Encrypted Media Extensions APIs (e.g. webkitGenerateKeyRequest()).">
+        Disable prefixed Encrypted Media Extensions.
+      </message>
+      <message name="IDS_FLAGS_DISABLE_PREFIXED_ENCRYPTED_MEDIA_DESCRIPTION" desc="Description for the flag to disable the prefixed Encrypted Media Extensions APIs (e.g. webkitGenerateKeyRequest()).">
+        Disable the experimental version of Encrypted Media Extensions on video and audio elements.
+      </message>
+      <if expr="is_android">
+        <message name="IDS_FLAGS_DISABLE_INFOBAR_FOR_PROTECTED_MEDIA_IDENTIFIER_NAME" desc="Title for the flag to disable infobar popup for protected media identifier.">
+          Disable infobar popup for protected media.
+        </message>
+        <message name="IDS_FLAGS_DISABLE_INFOBAR_FOR_PROTECTED_MEDIA_IDENTIFIER_DESCRIPTION" desc="Description for the flag to disable infobar popup for protected media identifier.">
+          Disable infobar popup by default when accessing the protected media identifier.
+        </message>
+        <message name="IDS_FLAGS_MEDIADRM_ENABLE_NON_COMPOSITING_NAME" desc="Title for the flag to enable non-conmpositing decoding in MediaDrm for encrypted content.">
+          Enable non-compositing decoding.
+        </message>
+        <message name="IDS_FLAGS_MEDIADRM_ENABLE_NON_COMPOSITING_DESCRIPTION" desc="Description for the flag to enable non-conmpositing decoding in MediaDrm for encrypted content.">
+          Enable non-compositing decoding in MediaDrm by default for Encrypted Media Extensions.
+        </message>
+      </if>
+      <message name="IDS_FLAGS_DISABLE_GESTURE_REQUIREMENT_FOR_MEDIA_PLAYBACK_NAME" desc="Title for the flag to disable gesture requiment for media playback">
+        Disable gesture requirement for media playback.
+      </message>
+      <message name="IDS_FLAGS_DISABLE_GESTURE_REQUIREMENT_FOR_MEDIA_PLAYBACK_DESCRIPTION" desc="Description for the flag to disable gesture requiment for media playback">
+        Disable user gesture requirement for playing media elements. Activating this will allow autoplay to work.
+      </message>
+      <if expr="use_ash">
+        <message name="IDS_FLAGS_ASH_ENABLE_TOUCH_VIEW_TESTING_NAME" desc="Title for the flag which can be used to test the TouchView maximizing mode.">
+          Enable TouchView maximizing UI for testing
+        </message>
+        <message name="IDS_FLAGS_ASH_ENABLE_TOUCH_VIEW_TESTING_DESCRIPTION" desc="Description for the flag to enable the TouchView testing mode.">
+          Enable Ctrl+Alt+Shift+8 to toggle the TouchView maximizing mode.
+        </message>
+        <message name="IDS_FLAGS_ASH_ENABLE_TOUCH_VIEW_TOUCH_FEEDBACK_NAME" desc="Title for the flag to enable additional visual feedback for touch.">
+          Enable additional touch feedback on UI components.
+        </message>
+        <message name="IDS_FLAGS_ASH_ENABLE_TOUCH_VIEW_TOUCH_FEEDBACK_DESCRIPTION" desc="Description for the flag to enable additional visual feedback for touch.">
+          Certain UI components will display visual feedback upon touch interactions.
+        </message>
+        <message name="IDS_FLAGS_ASH_DISABLE_TEXT_FILTERING_IN_OVERVIEW_MODE_NAME" desc="Title for the flag to disable window filtering in overview mode by inputing text">
+          Disable text filtering in Overview Mode.
+        </message>
+        <message name="IDS_FLAGS_ASH_DISABLE_TEXT_FILTERING_IN_OVERVIEW_MODE_DESCRIPTION" desc="Description for the flag to disable window filtering in overview mode by inputing text">
+          Disables filtering the windows shown in overview mode by entering text.
+        </message>
+      </if>
+
+      <message name="IDS_GENERIC_EXPERIMENT_CHOICE_AUTOMATIC" desc="Generic 'Automatic' experiment choice option name.">
+        Automatic
+      </message>
+      <message name="IDS_GENERIC_EXPERIMENT_CHOICE_DEFAULT" desc="Generic 'Default' experiment choice option name. E.G. shown in multi value options in about:flags.">
+        Default
+      </message>
+      <message name="IDS_GENERIC_EXPERIMENT_CHOICE_ENABLED" desc="Generic 'Enabled' experiment choice option name. E.G. shown in multi value options in about:flags.">
+        Enabled
+      </message>
+      <message name="IDS_GENERIC_EXPERIMENT_CHOICE_DISABLED" desc="Generic 'Disabled' experiment choice option name. E.G. shown in multi value options in about:flags.">
+        Disabled
+      </message>
+      <message name="IDS_FLAGS_ENABLE_JAVASCRIPT_HARMONY_NAME" desc="Title for the flag to enable JavaScript Harmony features.">
+        Enable Experimental JavaScript
+      </message>
+      <message name="IDS_FLAGS_ENABLE_JAVASCRIPT_HARMONY_DESCRIPTION" desc="Description for the flag to enable JavaScript Harmony features.">
+        Enable web pages to use experimental JavaScript features.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_DOWNLOAD_RESUMPTION_NAME" desc="Title for the flag to enable the download resume feature.">
+        Enable Download Resumption
+      </message>
+      <message name="IDS_FLAGS_ENABLE_DOWNLOAD_RESUMPTION_DESCRIPTION" desc="Description for the flag to enable the download resume feature.">
+        Allow downloads that have been interrupted to be continued or restarted, using the Resume context menu item.
+      </message>
+      <message name="IDS_FLAGS_DISABLE_SOFTWARE_RASTERIZER_NAME" desc="Title for the flag to disable using a software rasterizer.">
+        Disable 3D software rasterizer
+      </message>
+      <message name="IDS_FLAGS_DISABLE_SOFTWARE_RASTERIZER_DESCRIPTION" desc="Description for the flag to disable using a software renderer.">
+        Don't fall back to a 3D software rasterizer when the GPU cannot be used.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_GPU_RASTERIZATION_NAME" desc="Title for the flag to enable GPU rasterization.">
+        Enable GPU rasterization.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_GPU_RASTERIZATION_DESCRIPTION" desc="Description for the flag to enable GPU rasterizer.">
+        Use GPU to rasterize web content. Requires impl-side painting.
+      </message>
+      <message name="IDS_FLAGS_FORCE_GPU_RASTERIZATION" desc="Description of the 'Force GPU rasterization' experiment">
+        Force-enabled for all layers
+      </message>
+      <message name="IDS_FLAGS_EXPERIMENTAL_WEB_PLATFORM_FEATURES_NAME" desc="Name for the flag to enable experimental Web Platform features.">
+        Enable experimental Web Platform features.
+      </message>
+      <message name="IDS_FLAGS_EXPERIMENTAL_WEB_PLATFORM_FEATURES_DESCRIPTION" desc="Description for the flag to enable experimental Web Platform features.">
+        Enable experimental Web Platform features that are in development.
+      </message>
+      <message name="IDS_FLAGS_NTP_OTHER_SESSIONS_MENU_NAME" desc="Name for the flag to disable the 'Other devices' menu on the NTP.">
+        Disable NTP 'Other devices' menu.
+      </message>
+      <message name="IDS_FLAGS_NTP_OTHER_SESSIONS_MENU_DESCRIPTION" desc="Description for the flag to disable the 'Other devices' menu on the NTP.">
+        Disable the new tab page menu for accessing tabs on other devices.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_DEVTOOLS_EXPERIMENTS_NAME" desc="Name for the flag to enable experiments in Developer Tools">
+        Enable Developer Tools experiments.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_DEVTOOLS_EXPERIMENTS_DESCRIPTION" desc="Description for the flag to enable experiments in Developer Tools.">
+        Enable Developer Tools experiments. Use Settings panel in Developer Tools to toggle individual experiments.
+      </message>
+      <message name="IDS_FLAGS_SILENT_DEBUGGER_EXTENSION_API_NAME" desc="Name for the flag to enable silent debugging via chrome.debugger extension API.">
+        Enable Silent Debugging.
+      </message>
+      <message name="IDS_FLAGS_SILENT_DEBUGGER_EXTENSION_API_DESCRIPTION" desc="Description for the flag to enable silent debugging via chrome.debugger extension API.">
+        Do not show the infobar when an extension attaches to a page via chrome.debugger API. This flag is required to debug extension background pages.
+      </message>
+      <message name="IDS_FLAGS_SPELLCHECK_AUTOCORRECT" desc="Title for the flag to turn on text autocorrection.">
+        Enable Automatic Spelling Correction
+      </message>
+      <message name="IDS_FLAGS_SPELLCHECK_AUTOCORRECT_DESCRIPTION" desc="Description for the flag to force synchronous spellchecking.">
+        Turn on autocorrection of text while typing. Synchronous spellchecking is not compatible with this feature.
+      </message>
+      <if expr="use_ash">
+        <message name="IDS_FLAGS_DISABLE_MINIMIZE_ON_SECOND_LAUNCHER_ITEM_CLICK_NAME" desc="Name for the flag which allows to minimize a window upon launcher item click under certain conditions.">
+          Disallow shelf to minimize-on-click.
+        </message>
+        <message name="IDS_FLAGS_DISABLE_MINIMIZE_ON_SECOND_LAUNCHER_ITEM_CLICK_DESCRIPTION" desc="Description for the flag which allows to minimize a window upon launcher item click under certain conditions.">
+          Disallow the shelf to minimize a window if a shelf item gets clicked which has only a single, already active, window associated with it.
+        </message>
+      </if>
+
+      <message name="IDS_FLAGS_SHOW_TOUCH_HUD_NAME" desc="Name for the flag to show a heads-up display for tracking touch-points.">
+        Show HUD for touch points
+      </message>
+      <message name="IDS_FLAGS_SHOW_TOUCH_HUD_DESCRIPTION" desc="Description for the flag to show a heads-up display for tracking touch-points.">
+        Enables a heads-up display at the top-left corner of the screen that lists information about the touch-points on the screen.
+      </message>
+      <message name="IDS_FLAGS_ALLOW_NACL_SOCKET_API_NAME" desc="Name for the NaCl Socket API feature.">
+        NaCl Socket API.
+      </message>
+      <message name="IDS_FLAGS_ALLOW_NACL_SOCKET_API_DESCRIPTION" desc="Description for the NaCl Socket API feature.">
+        Allows applications to use NaCl Socket API. Use only to test NaCl plugins.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_PINCH_SCALE_NAME" desc="Name of the flag to turn on experiental pinch to scale.">
+        Enable pinch scale.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_PINCH_SCALE_DESCRIPTION" desc="Description of the flag to turn on experiental pinch to scale.">
+        Enables experimental support for scale using pinch.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_PINCH_VIRTUAL_VIEWPORT_NAME" desc="Name of the flag to turn on experimental pinch virtual viewport.">
+        Enable pinch virtual viewport.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_PINCH_VIRTUAL_VIEWPORT_DESCRIPTION" desc="Description of the flag to turn on experimental pinch virtual viewport.">
+        When zoomed in, fixed-position elements and scaled scrollbars attach to this viewport.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_VIEWPORT_META_NAME" desc="Name of the flag to turn on viewport meta tag support.">
+        Enable viewport meta tag.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_VIEWPORT_META_DESCRIPTION" desc="Description of the flag to turn on viewport meta tag support.">
+        Enables handling of the viewport meta tag to allow pages to set the layout width and user zoom properties.
+      </message>
+
+      <if expr="chromeos">
+        <message name="IDS_FLAGS_ALLOW_TOUCHPAD_THREE_FINGER_CLICK_NAME" desc="Name for the flag to enable touchpad three finger click as middle button.">
+          Enable touchpad three-finger-click.
+        </message>
+        <message name="IDS_FLAGS_ALLOW_TOUCHPAD_THREE_FINGER_CLICK_DESCRIPTION" desc="Description for the flag to enable touchpad three finger click as middle button.">
+          Enables touchpad three-finger-click as middle button.
+        </message>
+        <message name="IDS_FLAGS_DISABLE_BOOT_ANIMATION" desc="Name for the flag to disable wallpaper boot animation (except for OOBE).">
+          Disable boot animation.
+        </message>
+        <message name="IDS_FLAGS_DISABLE_BOOT_ANIMATION_DESCRIPTION" desc="Description for the flag to disable wallpaper boot animation (except for OOBE).">
+          Disables wallpaper boot animation (except for OOBE case).
+        </message>
+      </if>
+      <message name="IDS_FLAGS_DISABLE_ACCELERATED_VIDEO_DECODE_NAME" desc="Name of the flag to disable accelerated video decode where available.">
+        Disable hardware-accelerated video decode.
+      </message>
+      <message name="IDS_FLAGS_DISABLE_ACCELERATED_VIDEO_DECODE_DESCRIPTION" desc="Description for the flag to disable accelerated video decode where available.">
+        Disables hardware-accelerated video decode where available.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_CARRIER_SWITCHING" desc="Name for the flag to set to enable mobile carrier switching.">
+        Enable switching between mobile carriers.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_CARRIER_SWITCHING_DESCRIPTION" desc="Description for the flag to set to enable carrier switching.">
+        Allows the user to switch between mobile carriers from the UI. Warning: The Sprint carrier will ONLY work for users with an existing Sprint plan.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_REQUEST_TABLET_SITE_NAME" desc="Name for the flag to set to enable Request Tablet Site in the wrench menu.">
+        Enables the request tablet site option in the settings menu.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_REQUEST_TABLET_SITE_DESCRIPTION" desc="Description for the flag to set to enable Request Tablet Site in the wrench menu.">
+        Allows the user to request tablet site. Web content is often optimized for tablet devices. When this option is selected the user agent string is changed to indicate a tablet device. Web content optimized for tablets is received there after for the current tab.
+      </message>
+      <message name="IDS_FLAGS_DEBUG_PACKED_APP_NAME" desc="Name of the flag to enable debugging context menu options for packed apps.">
+        Enable debugging for packed apps.
+      </message>
+      <message name="IDS_FLAGS_DEBUG_PACKED_APP_DESCRIPTION" desc="Description of the flag to enable debugging context menu options for packed apps.">
+        Enables debugging context menu options such as Inspect Element for packed applications.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_DROP_SYNC_CREDENTIAL_NAME" desc="Name of the flag to enable drop sync credential">
+        Drop sync credentials from password manager.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_DROP_SYNC_CREDENTIAL_DESCRIPTION" desc="Description of the flag to enable drop sync credential">
+        If enabled, the password manager will not offer to save the credential used to sync.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_PASSWORD_GENERATION_NAME" desc="Name of the flag to enable password generation.">
+        Enable password generation.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_PASSWORD_GENERATION_DESCRIPTION" desc="Description of flag to enable password generation.">
+        Allow the user to have Chrome generate passwords when it detects account creation pages.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_AUTOMATIC_PASSWORD_SAVING_NAME" desc="Name of the flag to automatically save password.">
+        Save passwords automatically.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_AUTOMATIC_PASSWORD_SAVING_DESCRIPTION" desc="Description of the flag to automatically save password.">
+        Skip the passwords prompt and save passwords automatically.
+      </message>
+      <message name="IDS_FLAGS_PASSWORD_MANAGER_REAUTHENTICATION_NAME" desc="Name of the flag for the password manager reauthentication option.">
+        Disable Password Manager Reauthentication
+      </message>
+      <message name="IDS_FLAGS_PASSWORD_MANAGER_REAUTHENTICATION_DESCRIPTION" desc="Description of the flag for the password manager reauthentication option.">
+        Disable prompting the user for their OS password before revealing passwords on the passwords page.
+      </message>
+      <message name="IDS_FLAGS_PASSWORD_MANAGER_ANDROID_LINK_NAME" desc="Name of the flag to enable showing a link to account central on Android password settings page">
+        Enable remote password management link
+      </message>
+      <message name="IDS_FLAGS_PASSWORD_MANAGER_ANDROID_LINK_DESCRIPTION" desc="Description of the flag to enable showing a link to account central on Android password settings page">
+        Show a link in the password manager settings page to manage your synced passwords online.
+      </message>
+      <message name="IDS_FLAGS_AUTOFILL_SYNC_CREDENTIAL_NAME" desc="Name of the flag specifying how the browser will handle autofilling the users sync credential.">
+        Autofill sync credential
+      </message>
+      <message name="IDS_FLAGS_AUTOFILL_SYNC_CREDENTIAL_DESCRIPTION" desc="Description of the flag specifying how the browser will handle autofilling the users sync credential.">
+        How the password manager handles autofill for the sync credential.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_DATA_REDUCTION_PROXY_ALTERNATIVE_NAME" desc="Name of the flag to enable using an alternative version of the data reduction proxy">
+        Alternative data reduction proxy
+      </message>
+      <message name="IDS_FLAGS_ENABLE_DATA_REDUCTION_PROXY_ALTERNATIVE_DESCRIPTION" desc="Description of the flag to enable using an alternative version of the data reduction proxy">
+        Use an experimental version of the data reduction proxy. The proxy must be enabled in settings for this flag to take effect.
+      </message>
+      <message name="IDS_FLAGS_PERFORMANCE_MONITOR_GATHERING_NAME" desc="Name for the flag to enable Performance Monitor.">
+        Enable performance monitoring
+      </message>
+      <message name="IDS_FLAGS_PERFORMANCE_MONITOR_GATHERING_DESCRIPTION" desc="Description for the flag to enable Performance Monitor.">
+        Enable passive gathering of performance-related metrics and events and provide the option to view this data in a graphical fashion. To view data, visit chrome://performance.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SUGGESTIONS_SERVICE_NAME" desc="Name of the flag to enable the suggestions service.">
+        Enable the Suggestions Service
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SUGGESTIONS_SERVICE_DESCRIPTION" desc="Description for the flag to enable suggestions service.">
+        Enable the experimental Chrome suggestions service.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SUPERVISED_USER_BLACKLIST_NAME" desc="Name of the flag to enable the supervised user host blacklist.">
+        Enable the supervised user host blacklist
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SUPERVISED_USER_BLACKLIST_DESCRIPTION" desc="Description for the flag to enable the supervised user host blacklist.">
+        Enable the host blacklist for use by supervised users.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SYNCED_NOTIFICATIONS_NAME" desc="Name of the flag to enable synced notifications.">
+        Enable Synced Notifications
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SYNCED_NOTIFICATIONS_DESCRIPTION" desc="Description for the flag to enable synced notifications.">
+        Enable experimental Synchronized Notifications.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SYNC_APP_LIST_NAME" desc="Name of the flag to enable syncing the app list.">
+        Enable App Launcher sync
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SYNC_APP_LIST_DESCRIPTION" desc="Description for the flag to enable syncing the app list.">
+        Enable App Launcher sync. This also enables Folders where available (non OSX).
+      </message>
+      <message name="IDS_FLAGS_ENABLE_MATERIAL_DESIGN_NTP_NAME" desc="Name of the flag to enable the Material Design New Tab Page (NTP).">
+        Enable Material Design NTP.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_MATERIAL_DESIGN_NTP_DESCRIPTION" desc="Description for the flag to enable the Material Design New Tab Page (NTP).">
+        Enable the Material Design New Tab Page.
+      </message>
+      <if expr="is_macosx">
+        <message name="IDS_FLAGS_ENABLE_AVFOUNDATION_NAME" desc="Name of the flag to enable Mac AVFoundation.">
+          Enable use of Mac OS X AVFoundation APIs, instead of QTKit.
+        </message>
+        <message name="IDS_FLAGS_ENABLE_AVFOUNDATION_DESCRIPTION" desc="Description of flag to enable Mac AVFoundation.">
+          Enable AVFoundation use for video capture and video device monitoring on OS X >= 10.7. QTKit will be used otherwise.
+        </message>
+      </if>
+
+      <!-- Data Reduction Proxy -->
+      <if expr="is_android">
+        <message name="IDS_FLAGS_ENABLE_SPDY_PROXY_AUTH_NAME" desc="Name of the flag to enable data compression proxy.">
+          Enable Data Compression Proxy
+        </message>
+        <message name="IDS_FLAGS_ENABLE_SPDY_PROXY_AUTH_DESCRIPTION" desc="Description of flag to enable data compression proxy.">
+          Reduce data consumption by loading optimized web pages via Google proxy servers.
+        </message>
+        <message name="IDS_FLAGS_ENABLE_DATA_REDUCTION_PROXY_DEV_NAME" desc="An about::flags experiment title to enable/disable the development version of the data reduction proxy">
+          Enable Experiment Data Reduction Proxy
+        </message>
+        <message name="IDS_FLAGS_ENABLE_DATA_REDUCTION_PROXY_DEV_DESCRIPTION" desc="Describes an about:flags experiment to enable/disable the development version of the data reduction proxy">
+         Enable or disable using the development version of the data reduction proxy.
+        </message>
+      </if>
+      <message name="IDS_FLAGS_IMPL_SIDE_PAINTING_NAME" desc="Name of about:flags option for impl-side painting.">
+        Impl-side painting
+      </message>
+      <message name="IDS_FLAGS_IMPL_SIDE_PAINTING_DESCRIPTION" desc="Description of about:flags option for impl-side painting.">
+        If enabled, painting is done on a separate thread instead of the main thread.
+      </message>
+      <message name="IDS_FLAGS_LCD_TEXT_NAME" desc="Name of about:flags option for LCD text.">
+        LCD text antialiasing
+      </message>
+      <message name="IDS_FLAGS_LCD_TEXT_DESCRIPTION" desc="Description of about:flags option for LCD text.">
+        If disabled, text is rendered with grayscale antialiasing instead of LCD (subpixel) when doing accelerated compositing.
+      </message>
+      <message name="IDS_FLAGS_DISTANCE_FIELD_TEXT_NAME" desc="Name of about:flags option for distance field text.">
+        Enable distance field text
+      </message>
+      <message name="IDS_FLAGS_DISTANCE_FIELD_TEXT_DESCRIPTION" desc="Description of about:flags option for distance field text.">
+        If enabled, text is rendered with signed distance fields rather than bitmap alpha masks.
+      </message>
+      <if expr="is_android or is_macosx">
+        <message name="IDS_FLAGS_DELEGATED_RENDERER_NAME" desc="Name of about:flags option for delegated renderer.">
+          Delegated Renderer (AKA Übercompositor).
+        </message>
+        <message name="IDS_FLAGS_DELEGATED_RENDERER_DESCRIPTION" desc="Description of about:flags option for delegated renderer.">
+          If enabled, the renderer delegates compositing to the browser, merging both compositing passes.
+        </message>
+      </if>
+      <message name="IDS_FLAGS_ONE_COPY_NAME" desc="Name of about:flags option for one-copy rasterizer.">
+        Enable one-copy rasterizer
+      </message>
+      <message name="IDS_FLAGS_ONE_COPY_DESCRIPTION" desc="Description of about:flags option for one-copy rasterizer.">
+        If enabled, raster threads write to GPU memory.
+      </message>
+      <message name="IDS_FLAGS_ZERO_COPY_NAME" desc="Name of about:flags option for zero-copy rasterizer.">
+        Enable zero-copy rasterizer
+      </message>
+      <message name="IDS_FLAGS_ZERO_COPY_DESCRIPTION" desc="Description of about:flags option for zero-copy rasterizer.">
+        If enabled, raster threads write directly to GPU memory associated with tiles.
+      </message>
+      <message name="IDS_FLAGS_MAX_TILES_FOR_INTEREST_AREA_NAME" desc="Name of about:flags option for maximum tiles for interest area.">
+        Maximum tiles for interest area
+      </message>
+      <message name="IDS_FLAGS_MAX_TILES_FOR_INTEREST_AREA_DESCRIPTION" desc="Description of about:flags option for maximum tiles for interest area.">
+        Specify the maximum tiles for interest area.
+      </message>
+      <message name="IDS_FLAGS_MAX_TILES_FOR_INTEREST_AREA_SHORT" desc="">
+        64
+      </message>
+      <message name="IDS_FLAGS_MAX_TILES_FOR_INTEREST_AREA_TALL" desc="">
+        128
+      </message>
+      <message name="IDS_FLAGS_MAX_TILES_FOR_INTEREST_AREA_GRANDE" desc="">
+        256
+      </message>
+      <message name="IDS_FLAGS_MAX_TILES_FOR_INTEREST_AREA_VENTI" desc="">
+        512
+      </message>
+      <message name="IDS_FLAGS_TAB_CAPTURE_UPSCALE_QUALITY_NAME" desc="">
+        Tab capture upscaling quality.
+      </message>
+      <message name="IDS_FLAGS_TAB_CAPTURE_UPSCALE_QUALITY_DESCRIPTION" desc="">
+        Specifies quality setting for images captured if scaling up.
+      </message>
+      <message name="IDS_FLAGS_TAB_CAPTURE_DOWNSCALE_QUALITY_NAME" desc="">
+        Tab capture downscaling quality.
+      </message>
+      <message name="IDS_FLAGS_TAB_CAPTURE_DOWNSCALE_QUALITY_DESCRIPTION" desc="">
+        Specifies quality setting for images captured if scaling down.
+      </message>
+      <message name="IDS_FLAGS_TAB_CAPTURE_SCALE_QUALITY_FAST" desc="">
+        fast
+      </message>
+      <message name="IDS_FLAGS_TAB_CAPTURE_SCALE_QUALITY_GOOD" desc="">
+        good
+      </message>
+      <message name="IDS_FLAGS_TAB_CAPTURE_SCALE_QUALITY_BEST" desc="">
+        best
+      </message>
+      <message name="IDS_FLAGS_DEFAULT_TILE_WIDTH_NAME" desc="Name of about:flags option for default tile width.">
+        Default tile width
+      </message>
+      <message name="IDS_FLAGS_DEFAULT_TILE_WIDTH_DESCRIPTION" desc="Description of about:flags option for default tile width.">
+        Specify the default tile width.
+      </message>
+      <message name="IDS_FLAGS_DEFAULT_TILE_WIDTH_SHORT" desc="">
+        128
+      </message>
+      <message name="IDS_FLAGS_DEFAULT_TILE_WIDTH_TALL" desc="">
+        256
+      </message>
+      <message name="IDS_FLAGS_DEFAULT_TILE_WIDTH_GRANDE" desc="">
+        512
+      </message>
+      <message name="IDS_FLAGS_DEFAULT_TILE_WIDTH_VENTI" desc="">
+        1024
+      </message>
+      <message name="IDS_FLAGS_DEFAULT_TILE_HEIGHT_NAME" desc="Name of about:flags option for default tile height.">
+        Default tile height
+      </message>
+      <message name="IDS_FLAGS_DEFAULT_TILE_HEIGHT_DESCRIPTION" desc="Description of about:flags option for default tile height.">
+        Specify the default tile height.
+      </message>
+      <message name="IDS_FLAGS_DEFAULT_TILE_HEIGHT_SHORT" desc="">
+        128
+      </message>
+      <message name="IDS_FLAGS_DEFAULT_TILE_HEIGHT_TALL" desc="">
+        256
+      </message>
+      <message name="IDS_FLAGS_DEFAULT_TILE_HEIGHT_GRANDE" desc="">
+        512
+      </message>
+      <message name="IDS_FLAGS_DEFAULT_TILE_HEIGHT_VENTI" desc="">
+        1024
+      </message>
+      <message name="IDS_FLAGS_NUM_RASTER_THREADS_NAME" desc="Name of about:flags option for number of raster threads.">
+        Number of raster threads
+      </message>
+      <message name="IDS_FLAGS_NUM_RASTER_THREADS_DESCRIPTION" desc="Description of about:flags option for number of raster threads.">
+        Specify the number of raster threads.
+      </message>
+      <message name="IDS_FLAGS_NUM_RASTER_THREADS_ONE" desc="">
+        1
+      </message>
+      <message name="IDS_FLAGS_NUM_RASTER_THREADS_TWO" desc="">
+        2
+      </message>
+      <message name="IDS_FLAGS_NUM_RASTER_THREADS_THREE" desc="">
+        3
+      </message>
+      <message name="IDS_FLAGS_NUM_RASTER_THREADS_FOUR" desc="">
+        4
+      </message>
+      <message name="IDS_FLAGS_RESET_APP_LIST_INSTALL_STATE_NAME" desc="Name of the flag to reset the app launcher install state.">
+        Reset the App Launcher install state on every restart.
+      </message>
+      <message name="IDS_FLAGS_RESET_APP_LIST_INSTALL_STATE_DESCRIPTION" desc="Description of the flag to reset the app launcher install state.">
+        Reset the App Launcher install state on every restart. While this flag is set, Chrome will forget the launcher has been installed each time it starts. This is used for testing the App Launcher install flow.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_APP_VIEW_NAME" desc="Name of the flag to enable the &lt;appview&gt; element.">
+        Enable the &lt;appview&gt; element in Chrome Apps.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_APP_VIEW_DESCRIPTION" desc="Description of the flag to enable the &lt;appview&gt; element.">
+        This will allow the use of the experimental &lt;appview&gt; element in Chrome Apps.
+      </message>
+      <if expr="enable_app_list">
+        <message name="IDS_FLAGS_ENABLE_APP_LIST_NAME" desc="Name of the flag to enable the app launcher.">
+          Enable the App Launcher.
+        </message>
+        <message name="IDS_FLAGS_ENABLE_APP_LIST_DESCRIPTION" desc="Description of the flag to enable app launcher.">
+          Enable the App Launcher. Upon enabling, creates operating system shortcuts to the App Launcher.
+        </message>
+        <message name="IDS_FLAGS_DISABLE_APP_LIST_VOICE_SEARCH" desc="Name of the flag to disable voice search in the app list.">
+          Disable voice search in the App Launcher.
+        </message>
+        <message name="IDS_FLAGS_DISABLE_APP_LIST_VOICE_SEARCH_DESCRIPTION" desc="Description of the flag to disable voice search in the app list.">
+          Disable voice search in the App Launcher. If disabled, the user won't be able to search by speech.
+        </message>
+        <message name="IDS_FLAGS_DISABLE_APP_INFO_IN_APP_LIST" desc="Name of the flag to disable the app info context menu option in the app list.">
+          Disable the app info dialog.
+        </message>
+        <message name="IDS_FLAGS_DISABLE_APP_INFO_IN_APP_LIST_DESCRIPTION" desc="Description of the flag to disable the app info context menu option in the app list.">
+          Disable the app info dialog. If not disabled, the user will be able to select the 'App Info' context menu in the App Launcher to show the app info dialog for the selected app.
+       </message>
+        <message name="IDS_FLAGS_ENABLE_EXPERIMENTAL_APP_LIST_NAME" desc="Name of the flag to enable the experimental app launcher.">
+          Enable the experimental App Launcher.
+        </message>
+        <message name="IDS_FLAGS_ENABLE_EXPERIMENTAL_APP_LIST_DESCRIPTION" desc="Description of the flag to enable the experimental app launcher.">
+          Enable the experimental version of the App Launcher.
+        </message>
+        <message name="IDS_FLAGS_ENABLE_CENTERED_APP_LIST_NAME" desc="Name of the flag to center the app launcher.">
+          Center the App Launcher.
+        </message>
+        <message name="IDS_FLAGS_ENABLE_CENTERED_APP_LIST_DESCRIPTION" desc="Description of the flag to center the app launcher and make it wide instead of tall.">
+          Positions the App Launcher in the center of the screen with a landscape aspect.
+        </message>
+      </if>
+      <if expr="chromeos">
+        <message name="IDS_FLAGS_ENABLE_FIRST_RUN_UI_TRANSITIONS_NAME" desc="Name of the flag to enable animated transitions for the first-run tutorial.">
+          Enable animated transitions in the first-run tutorial.
+        </message>
+        <message name="IDS_FLAGS_ENABLE_FIRST_RUN_UI_TRANSITIONS_DESCRIPTION" desc="Description for the flag to enable animated transition in the first-run tutorial.">
+          If enabled, transitions during first-run tutorial are animated.
+        </message>
+        <message name="IDS_FLAGS_DISABLE_EASY_SIGNIN_NAME" desc="Name of the disable Easy signin flag.">
+          Disable Easy sign-in
+        </message>
+        <message name="IDS_FLAGS_DISABLE_EASY_SIGNIN_DESCRIPTION" desc="Description of the Enable Easy signin flag.">
+          Do not use Easy sign-in, which allows you to sign in your Chromebook when in proximity to your phone.
+        </message>
+      </if>
+      <message name="IDS_FLAGS_ENABLE_STREAMLINED_HOSTED_APPS_NAME" desc="Name of the flag to enable streamlined hosted apps.">
+        Enable experimental streamlined hosted apps.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_STREAMLINED_HOSTED_APPS_DESCRIPTION" desc="Description for the flag to enable streamlined hosted apps.">
+        Enables an experimental, more streamlined hosted app experience.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_EPHEMERAL_APPS_NAME" desc="Name of the flag to enable ephemeral apps.">
+        Enable experimental ephemeral apps.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_EPHEMERAL_APPS_DESCRIPTION" desc="Description for the flag to enable ephemeral apps.">
+        Enables experimentation with ephemeral apps, which are launched without installing in Chrome.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_LINKABLE_EPHEMERAL_APPS_NAME" desc="Name of the flag to enable linkable ephemeral apps.">
+        Enable experimental linkable ephemeral apps.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_LINKABLE_EPHEMERAL_APPS_DESCRIPTION" desc="Description for the flag to enable linkable ephemeral apps.">
+        Enables experimentation with launching ephemeral apps from hyperlinks. For example, links to Chrome Web Store app detail pages in Google search results will launch the app rather than navigate to the detail page.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SERVICE_WORKER_SYNC_NAME" desc="Name of the flag to enable ServiceWorker background synchronization.">
+        Enable support for ServiceWorker background sync event.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SERVICE_WORKER_SYNC_DESCRIPTION" desc="Description for the flag to enable ServiceWorker background synchronization.">
+        ServiceWorker background synchronization lets ServiceWorkers send messages and update resources even when the page is in the background.
+      </message>
+      <if expr="is_android">
+        <message name="IDS_FLAGS_DISABLE_CLICK_DELAY_NAME" desc="Name of the flag to disable the click delay.">
+          Disable click delay.
+        </message>
+        <message name="IDS_FLAGS_DISABLE_CLICK_DELAY_DESCRIPTION" desc="Description of the flag to disable the click delay.">
+          Always send click events immediate upon a tap, even when it's part of a double-tap gesture.  This speeds up navigation and other tap actions by 300ms on most pages, but means links and buttons must be avoided when double tapping to zoom.
+        </message>
+      </if>
+      <if expr="is_macosx">
+        <message name="IDS_FLAGS_ENABLE_TRANSLATE_NEW_UX_NAME" desc="Name of the flag to enable the new Translate UX.">
+          Enable the new Translate UX.
+        </message>
+        <message name="IDS_FLAGS_ENABLE_TRANSLATE_NEW_UX_DESCRIPTION" desc="Description for the flag to enable the new Translate UX.">
+          Enable the new Translate bubble UX is offered instead of the infobar.
+        </message>
+      </if>
+      <message name="IDS_FLAGS_DISABLE_VIEWS_RECT_BASED_TARGETING_NAME" desc="Name of about:flags option to disable rect-based targeting in views">
+        Disable rect-based targeting in views
+      </message>
+      <message name="IDS_FLAGS_DISABLE_VIEWS_RECT_BASED_TARGETING_DESCRIPTION" desc="Description of about:flags option to disable rect-based targeting in views">
+        Disables rect-based targeting in views. Rect-based targeting uses a heuristic to determine the most probable target of a gesture, where the touch region is represented by a rectangle.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_APPS_SHOW_ON_FIRST_PAINT_NAME" desc="Name of the flag to enable show-on-first-paint for apps.">
+        Enable show-on-first-paint for apps.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_APPS_SHOW_ON_FIRST_PAINT_DESCRIPTION" desc="Description of flag to enable show-on-first-paint for apps.">
+        Show apps windows after the first paint. Windows will be shown significantly later for heavy apps loading resources synchronously but it will be insignificant for apps that load most of their resources asynchronously.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_ENHANCED_BOOKMARKS_NAME" desc="Name of about:flags option to enable Enhanced Bookmarks extension.">
+        Enable Enhanced Bookmarks
+      </message>
+      <message name="IDS_FLAGS_ENABLE_ENHANCED_BOOKMARKS_DESCRIPTION" desc="Description of about:flags option to enable Enhanced Bookmarks extension.">
+        Provides an off switch for enhanced bookmarks experiment
+      </message>
+      <message name="IDS_FLAGS_ORIGIN_CHIP_NAME" desc="Name of about:flags option to enable the display of the origin chip experiment.">
+        Origin chip
+      </message>
+      <message name="IDS_FLAGS_ORIGIN_CHIP_DESCRIPTION" desc="Description of about:flags option to enable the display of the origin chip experiment.">
+        Hides the URL in the Omnibox and instead shows the hostname in a clickable chip.
+      </message>
+      <message name="IDS_FLAGS_ORIGIN_CHIP_ALWAYS" desc="Option in a drop-down menu to enable the display of the origin chip on all pages.">
+        Enabled on all pages
+      </message>
+      <message name="IDS_FLAGS_ORIGIN_CHIP_ON_SRP" desc="Option in a drop-down menu to enable the display of the origin chip on search result pages only.">
+        Enabled on search result pages only
+      </message>
+      <message name="IDS_FLAGS_SEARCH_BUTTON_IN_OMNIBOX_NAME" desc="Name of about:flags option to enable the search button in omnibox experiment.">
+        Enable search button in Omnibox
+      </message>
+      <message name="IDS_FLAGS_SEARCH_BUTTON_IN_OMNIBOX_DESCRIPTION" desc="Description of about:flags option to enable the search button in omnibox experiment.">
+        Places a search button in the Omnibox.
+      </message>
+      <message name="IDS_FLAGS_SEARCH_BUTTON_IN_OMNIBOX_ENABLE_FOR_STR" desc="Option in a drop-down menu to enable the display of the search button in the omnibox on search result pages.">
+        Enabled on search result pages
+      </message>
+      <message name="IDS_FLAGS_SEARCH_BUTTON_IN_OMNIBOX_ENABLE_FOR_STR_OR_IIP" desc="Option in a drop-down menu to enable the display of the search button in the omnibox on search result pages or whenever input is in progress.">
+        Enabled on search result pages or when input in progress
+      </message>
+      <message name="IDS_FLAGS_SEARCH_BUTTON_IN_OMNIBOX_ENABLED" desc="Option in a drop-down menu to enable the display of the search button at all times (on all pages).">
+        Enabled on all pages
+      </message>
+      <message name="IDS_FLAGS_ENABLE_PERMISSIONS_BUBBLES_NAME" desc="Title for the flag to enable showing permissions requests in bubbles.">
+        Use Bubbles for Permission Requests
+      </message>
+      <message name="IDS_FLAGS_ENABLE_PERMISSIONS_BUBBLES_DESCRIPTION" desc="Description for the flag to enable showing permissions requests in bubbles.">
+        Show content permission requests (e.g. notifications, quota, camera use, microphone use) in bubbles instead of info bars.
+      </message>
+      <message name="IDS_FLAGS_OUT_OF_PROCESS_PDF_NAME" desc="Title for the flag to enable out of process PDF.">
+        Enable out of process PDF.
+      </message>
+      <message name="IDS_FLAGS_OUT_OF_PROCESS_PDF_DESCRIPTION" desc="Description for the flag to enable out of process PDF.">
+        Enable the out of process PDF plugin.
+      </message>
+      <message name="IDS_FLAGS_TOUCH_SCROLLING_MODE_NAME" desc="Title for the flag to change the touch scrolling mode.">
+        Touch scrolling mode.
+      </message>
+      <message name="IDS_FLAGS_TOUCH_SCROLLING_MODE_DESCRIPTION" desc="Description for the flag to control touch scrolling mode.">
+        Change the touch event behavior while scrolling.  "touchcancel" is what chrome has historically used, and "async-touchmove" is the new preferred mode.
+      </message>
+      <message name="IDS_FLAGS_TOUCH_SCROLLING_MODE_TOUCHCANCEL" desc="Name for the touchcancel scrolling mode">
+        touchcancel
+      </message>
+      <message name="IDS_FLAGS_TOUCH_SCROLLING_MODE_ASYNC_TOUCHMOVE" desc="Name for the async-touchmove scrolling mode">
+        async-touchmove
+      </message>
+      <message name="IDS_FLAGS_TOUCH_SCROLLING_MODE_SYNC_TOUCHMOVE" desc="Name for the sync-touchmove scrolling mode">
+        sync-touchmove
+      </message>
+      <message name="IDS_FLAGS_DISABLE_THREADED_SCROLLING_NAME" desc="Title for the flag to disable threaded scrolling.">
+        Disable threaded scrolling.
+      </message>
+      <message name="IDS_FLAGS_DISABLE_THREADED_SCROLLING_DESCRIPTION" desc="Description for the flag to disable threaded scrolling.">
+        Disabled threaded handling of scroll-related input events, forcing all such scroll events to be handled on the main thread. Note that this can dramatically hurt scrolling performance of most websites and is intended for testing purposes only.
+      </message>
+      <message name="IDS_FLAGS_BLEEDING_RENDERER_NAME" desc="Name of the 'Stacked Tabs' lab.">
+        Bleeding Edge Renderer Paths - LIKELY TO CRASH YOUR BROWSER
+      </message>
+      <message name="IDS_FLAGS_BLEEDING_RENDERER_DESCRIPTION" desc="Description of the 'Bleeding edge' lab.">
+        Use bleeding-edge code to make Chrome draw content faster. The changes
+        behind this path are very likely to break lots of content.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_APPS_FILE_ASSOCIATIONS_NAME" desc="Name for file associations for Chrome Apps.">
+        Apps file associations.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_APPS_FILE_ASSOCIATIONS_DESCRIPTION" desc="Description for a flag to enable file associations for Chrome Apps.">
+        Enable OS integration of file associations for Chrome Apps.
+      </message>
+      <message name="IDS_FLAGS_TEXT_INPUT_FOCUS_MANAGER_NAME" desc="Title for the flag to enable the new text input focus manager.">
+        Experimental text input focus manager.
+      </message>
+      <message name="IDS_FLAGS_TEXT_INPUT_FOCUS_MANAGER_DESCRIPTION" desc="Description for the flag to enable the new text input focus manager.">
+        Enable an experimental focus manager to track text input clients.
+      </message>
+      <message name="IDS_FLAGS_HARFBUZZ_RENDERTEXT_NAME" desc="Name of the about:flags HarfBuzz RenderText experiment.">
+        HarfBuzz for UI text.
+      </message>
+      <message name="IDS_FLAGS_HARFBUZZ_RENDERTEXT_DESCRIPTION" desc="Description of the about:flags HarfBuzz RenderText experiment.">
+        Cross-platform HarfBuzz engine for UI text. Doesn't affect web content.
+      </message>
+      <if expr="is_android">
+        <message name="IDS_FLAGS_ENABLE_ANSWERS_IN_SUGGEST_NAME" desc="Name of the about:flags Answers in Suggest experiment.">
+          Answers in Suggest
+        </message>
+        <message name="IDS_FLAGS_ENABLE_ANSWERS_IN_SUGGEST_DESCRIPTION" desc="Description of the about:flags Answers in Suggest experiment.">
+         If enabled, responses to certain types of queries will appear directly in the Omnibox suggestion list.
+        </message>
+      </if>
+      <message name="IDS_FLAGS_ENABLE_EMBEDDED_EXTENSION_OPTIONS_NAME" desc="Name of the flag that enables embedding extension options in chrome://extensions.">
+        Enable embedded extension options.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_EMBEDDED_EXTENSION_OPTIONS_DESCRIPTION" desc="Description of the flag that enables embedding extension options in chrome://extensions.">
+        Display extension options as an embedded element in chrome://extensions rather than opening a new tab.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_EXTENSION_ACTION_REDESIGN_NAME" desc="Name of the flag to enable the extension toolbar redesign">
+        Enable extension toolbar redesign.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_EXTENSION_ACTION_REDESIGN_DESCRIPTION" desc="Description for the flag to enable the extension toolbar redesign">
+        Enables the (in development) new extension toolbar toolbar design.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_WEBSITE_SETTINGS_NAME" desc="Name of the flag that enables the website settings manager in chrome://settings.">
+        Enables the website settings manager.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_WEBSITE_SETTINGS_DESCRIPTION" desc="Description of the flag that enables the website settings manager in chrome://settings.">
+        Enables the website settings manager on the settings page.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_TAB_AUDIO_MUTING_NAME" desc="Name of the flag that enables the tab audio muting UI experiment in chrome://extensions.">
+        Enable tab audio muting UI control.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_TAB_AUDIO_MUTING_DESCRIPTION" desc="Description of the flag that enables the tab audio muting UI experiment in chrome://extensions.">
+        When enabled, the audio indicators in the tab strip double as tab audio mute controls.  This also adds commands in the tab context menu for quickly muting multiple selected tabs.
+      </message>
+
+      <!-- Crashes -->
+      <message name="IDS_CRASHES_TITLE" desc="Title for the chrome://crashes page.">
+        Crashes
+      </message>
+      <message name="IDS_CRASHES_CRASH_COUNT_BANNER_FORMAT" desc="Format for crash count banner on chrome://crashes">
+        Crashes (<ph name="CRASH_COUNT">$1<ex>3</ex></ph>)
+      </message>
+      <message name="IDS_CRASHES_CRASH_HEADER_FORMAT" desc="Format for crash entry headings on chrome://crashes">
+        Crash ID <ph name="CRASH_ID">$1<ex>8fa95dbb6f2ec862</ex></ph> (<ph name="CRASH_LOCAL_ID">$2<ex>Chrome</ex></ph>)
+      </message>
+      <message name="IDS_CRASHES_CRASH_TIME_FORMAT" desc="Format for crash entry occurence time on chrome://crashes">
+        Occurred <ph name="CRASH_TIME">$1<ex>Tuesday, January 25, 2011 2:58:02 PM</ex></ph>
+      </message>
+      <message name="IDS_CRASHES_BUG_LINK_LABEL" desc="Link text for filing a crash bug on chrome://crashes">
+        File bug
+      </message>
+      <message name="IDS_CRASHES_NO_CRASHES_MESSAGE" desc="The explanatory message for chrome://crashes when there are no crashes">
+        You have no recently reported crashes.  Crashes that occurred when crash reporting was disabled will not appear here.
+      </message>
+      <message name="IDS_CRASHES_DISABLED_HEADER" desc="The header for chrome://crashes when crash reporting is disabled">
+        Crash reporting is disabled.
+      </message>
+      <message name="IDS_CRASHES_UPLOAD_MESSAGE" desc="Link text for triggering crash uploading on chrome://crashes">
+        Start uploading crashes
+      </message>
+
+      <!-- WebRTC logs -->
+      <message name="IDS_WEBRTC_LOGS_TITLE" desc="Title for the chrome://webrtc-logs page.">
+        WebRTC logs
+      </message>
+      <message name="IDS_WEBRTC_LOGS_LOG_COUNT_BANNER_FORMAT" desc="Format for WebRTC log count banner on chrome://webrtc-logs">
+        WebRTC logs (<ph name="WEBRTC_LOG_COUNT">$1<ex>3</ex></ph>)
+      </message>
+      <message name="IDS_WEBRTC_LOGS_LOG_HEADER_FORMAT" desc="Format for uploaded log entry headings on chrome://webrtc-logs">
+        WebRTC log captured <ph name="WEBRTC_LOG_CAPTURE_TIME">$1<ex>Tuesday, January 25, 2011 2:58:02 PM</ex></ph>
+      </message>
+      <message name="IDS_WEBRTC_LOGS_LOG_LOCAL_FILE_LABEL_FORMAT" desc="Format for local log entry label on chrome://webrtc-logs">
+        Local file:
+      </message>
+      <message name="IDS_WEBRTC_LOGS_LOG_LOCAL_FILE_FORMAT" desc="Format for file in local log entry on chrome://webrtc-logs">
+        <ph name="WEBRTC_LOG_LOCAL_FILE">$1<ex>/path/to/file</ex></ph>
+      </message>
+      <message name="IDS_WEBRTC_LOGS_NO_LOCAL_LOG_FILE_MESSAGE" desc="The explanatory message for chrome://webrtc-logs when there is no local log file">
+        No local log file.
+      </message>
+      <message name="IDS_WEBRTC_LOGS_LOG_UPLOAD_TIME_FORMAT" desc="Format for uploaded log entry upload time on chrome://webrtc-logs">
+        Uploaded <ph name="WEBRTC_LOG_UPLOAD_TIME">$1<ex>Tuesday, January 25, 2011 2:58:02 PM</ex></ph>
+      </message>
+      <message name="IDS_WEBRTC_LOGS_LOG_REPORT_ID_FORMAT" desc="Format for uploaded log entry report ID on chrome://webrtc-logs">
+        Report ID <ph name="WEBRTC_LOG_REPORT_ID">$1<ex>8fa95dbb6f2ec862</ex></ph>
+      </message>
+      <message name="IDS_WEBRTC_LOGS_BUG_LINK_LABEL" desc="Link text for filing a bug on chrome://webrtc-logs">
+        File bug
+      </message>
+      <message name="IDS_WEBRTC_LOGS_LOG_NOT_UPLOADED_MESSAGE" desc="The explanatory message for chrome://webrtc-logs when the log has not been uploaded">
+        Log not uploaded.
+      </message>
+      <message name="IDS_WEBRTC_LOGS_NO_LOGS_MESSAGE" desc="The explanatory message for chrome://webrtc-logs when there are no captured logs">
+        You have no recently captured WebRTC logs.
+      </message>
+
+      <!-- Custom dictionary page -->
+      <message name="IDS_LANGUAGE_DICTIONARY_OVERLAY_TITLE" desc="Title for the chrome://settings/editDictionary page, where a user can add and remove words in the dictionary used for spelling">
+        Custom spelling dictionary
+      </message>
+      <message name="IDS_LANGUAGE_DICTIONARY_OVERLAY_ADD_WORD_LABEL" desc="Label for adding a new word to the dictionary on the chrome://settings/editDictionary page">
+        Add a new word
+      </message>
+      <message name="IDS_LANGUAGE_DICTIONARY_OVERLAY_SEARCH_PLACEHOLDER" desc="Text placeholder for an empty search field on the chrome://settings/editDictionary page">
+        Search dictionary
+      </message>
+      <message name="IDS_LANGUAGE_DICTIONARY_OVERLAY_NO_MATCHES" desc="Text description of a search that has no results on the chrome://settings/editDictionary page">
+        No matches were found.
+      </message>
+
+      <!-- Search -->
+      <message name="IDS_SEARCH_PREF_EXPLANATION" desc="Description of the search engine preference">
+        Set which search engine is used when searching from the
+        <ph name="BEGIN_LINK">&lt;a target="_blank" href="$1"&gt;</ph>omnibox<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>.
+      </message>
+      <message name="IDS_HOTWORD_SEARCH_PREF_CHKBOX" desc="A checkbox on the Settings page to allow audio capture devices to initiate searches.">
+        Enable "Ok Google" to start a voice search
+      </message>
+      <message name="IDS_HOTWORD_SEARCH_PREF_DESCRIPTION" desc="Description of the hotword search preference">
+        When you say "Ok Google," Chrome will search for what you say next.
+      </message>
+      <message name="IDS_HOTWORD_ALWAYS_ON_SEARCH_PREF_CHKBOX" desc="A checkbox on the Settings page to allow audio capture devices to initiate searches from any screen.">
+        Enable "Ok Google" from any screen, when the screen is on and unlocked
+      </message>
+      <message name="IDS_HOTWORD_AUDIO_HISTORY_PREF_CHKBOX" desc="A checkbox on the Settings page that allows for sending audio of 'Ok, Google' plus a few seconds before back to Google to improve voice search.">
+        Enable audio history
+      </message>
+      <message name="IDS_HOTWORD_CONFIRM_BUBBLE_TITLE" desc="The title text for the bubble to enable the hotword voice search trigger.">
+        Ok Google
+      </message>
+      <message name="IDS_HOTWORD_CONFIRM_BUBBLE_ENABLE" desc="The button text that allows the hotword voice search trigger.">
+        OK
+      </message>
+      <message name="IDS_HOTWORD_CONFIRM_BUBBLE_DISABLE" desc="The button text that disallows the hotword voice search trigger.">
+        Cancel
+      </message>
+      <message name="IDS_HOTWORD_GENERIC_ERROR_MESSAGE" desc="The default error message text when no additional details are known.">
+        This feature is temporarily unavailable. <ph name="BEGIN_LINK">&lt;a target="_blank" href="$1"&gt;</ph>Help<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>
+      </message>
+      <message name="IDS_HOTWORD_NACL_DISABLED_ERROR_MESSAGE" desc="The error message text when hotwording fails because NaCl is disabled.">
+        <ph name="BEGIN_LINK">&lt;a target="_blank" href="chrome://plugins"&gt;</ph>Native Client plug-in<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph> needs to be enabled to use this feature.
+      </message>
+      <message name="IDS_HOTWORD_MICROPHONE_ERROR_MESSAGE" desc="The error message text when hotwording fails because the microphone isn't working.">
+        Microphone is currently unavailable. <ph name="BEGIN_LINK">&lt;a target="_blank" href="chrome://settings/content#media-stream-settings"&gt;</ph>Manage microphone<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>
+      </message>
+      <message name="IDS_HOTWORD_AUDIO_LOGGING_ENABLE" desc="A checkbox in the hotword confirm dialog that allows for sending audio of 'Ok, Google' plus a few seconds before back to Google to improve voice search.">
+        Improve voice search by sending the sound of "Ok Google," and a few seconds before, to Google.
+      </message>
+      <message name="IDS_HOTWORD_HELP_LINK" desc="Text that provides a link to the help center troubleshooting page.">
+        <ph name="BEGIN_LINK">&lt;a target="_blank" href="$1"&gt;</ph>Help<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>
+      </message>
+
+      <if expr="is_win">
+        <!-- Conflicts page -->
+        <message name="IDS_CONFLICTS_CHECK_PAGE_TABLE_TITLE_SUFFIX_ONE" desc="What gets appended after the page title if no conflicts were found.">
+          Modules (<ph name="TOTAL_COUNT">$1<ex>50</ex></ph>) - No conflicts detected
+        </message>
+        <message name="IDS_CONFLICTS_CHECK_PAGE_TABLE_TITLE_SUFFIX_TWO" desc="What gets appended after the page title (number of conflicts found).">
+          Modules (<ph name="TOTAL_COUNT">$1<ex>50</ex></ph>) - Known conflicts: <ph name="BAD_COUNT">$2<ex>3</ex></ph>, suspected: <ph name="SUSPICIOUS_COUNT">$3<ex>2</ex></ph>
+        </message>
+        <message name="IDS_CONFLICTS_EXPLANATION_TEXT" desc="The text blurb explaining what the compatibility page is.">
+          This page lists all modules loaded into the main process and modules registered to load at a later point.
+        </message>
+        <message name="IDS_CONFLICTS_CHECK_INVESTIGATING" desc="A label on the compatibility page saying we are investigating.">
+          We are currently investigating this issue.
+        </message>
+        <message name="IDS_CONFLICTS_CHECK_POSSIBLE_ACTIONS" desc="A label on the compatibility page describing possible resolutions.">
+          If you are experiencing frequent problems, you could try the following to resolve the issue with this module:
+        </message>
+        <message name="IDS_CONFLICTS_CHECK_POSSIBLE_ACTION_UNINSTALL" desc="An uninstall label. 'It' refers to 'a module'.">
+          Uninstalling
+        </message>
+        <message name="IDS_CONFLICTS_CHECK_POSSIBLE_ACTION_UPDATE" desc="An update label. 'It' refers to 'a module'.">
+          Updating
+        </message>
+        <message name="IDS_CONFLICTS_CHECK_POSSIBLE_ACTION_DISABLE" desc="A disable label. 'It' refers to 'a module'.">
+          Disabling
+        </message>
+        <message name="IDS_CONFLICTS_CHECK_POSSIBLE_ACTION_SEPARATOR" desc="The separator separating the words 'Uninstalling it', 'Updating it' and 'Disabling it'">
+          /
+        </message>
+        <message name="IDS_CONFLICTS_NO_MODULES_LOADED" desc="Error message for when no modules were found in the process">
+          Unable to detect any modules loaded.
+        </message>
+        <message name="IDS_CONFLICTS_HEADER_SOFTWARE" desc="The 'Software' header for each module item in the list">
+          Software
+        </message>
+        <message name="IDS_CONFLICTS_HEADER_SIGNED_BY" desc="The 'Signed by' header for each module item in the list">
+          Signed by
+        </message>
+        <message name="IDS_CONFLICTS_HEADER_LOCATION" desc="The 'Location' header for each module item in the list">
+          Location
+        </message>
+        <message name="IDS_CONFLICTS_HEADER_VERSION" desc="The 'Version' header for each module item in the list">
+          Version
+        </message>
+        <message name="IDS_CONFLICTS_HEADER_HELP_TIP" desc="The 'Help tip:' header for each module item in the list">
+          Help tip
+        </message>
+        <message name="IDS_CONFLICTS_LOADING_MESSAGE" desc="Shown while loading until full list of modules is retrieved">
+          Loading...
+        </message>
+        <message name="IDS_CONFLICTS_NOT_LOADED_YET" desc="Shown next to a module that has not been loaded into memory yet">
+          Not loaded yet
+        </message>
+        <message name="IDS_HELP_CENTER_VIEW_CONFLICTS" desc="The url of the Help center article for the View Conflicts page" translateable="false">
+          http://support.google.com/chrome/?p=<ph name="NAME">$1<ex>Hash</ex></ph>&amp;l=<ph name="LOCATION">$2<ex>Hash</ex></ph>&amp;d=<ph name="DESC">$3<ex>Hash</ex></ph>&amp;s=<ph name="SIGNER">$4<ex>Hash</ex></ph>
+        </message>
+        <if expr="use_titlecase">
+        <message name="IDS_CONFLICTS_LEARN_MORE" desc="The Learn More button in the conflicting module bubble">
+            Learn More
+        </message>
+        <message name="IDS_CONFLICTS_NOT_NOW" desc="The Not Now button in the conflicting module bubble">
+            Not Now
+        </message>
+        </if>
+        <if expr="not use_titlecase">
+        <message name="IDS_CONFLICTS_LEARN_MORE" desc="The Learn More button in the conflicting module bubble">
+            Learn more
+        </message>
+        <message name="IDS_CONFLICTS_NOT_NOW" desc="The Not Now button in the conflicting module bubble">
+            Not now
+        </message>
+        </if>
+      </if> <!-- is_win -->
+
+      <!-- Plug-in placeholders -->
+      <message name="IDS_PLUGIN_LOAD" desc="The link for loading a blocked plug-in, displayed in the click to play UI.">
+        Click to run <ph name="PLUGIN_NAME">$1<ex>Flash</ex></ph>.
+      </message>
+      <message name="IDS_PLUGIN_HIDE" desc="The tooltip for hiding a blocked plug-in, displayed in the click to play UI.">
+        Hide this plug-in
+      </message>
+      <message name="IDS_PLUGIN_UPDATE" desc="The link for updating an outdated plug-in.">
+        Update plug-in...
+      </message>
+      <message name="IDS_PLUGIN_NOT_SUPPORTED_METRO" desc="The placeholder text for a plug-in that can't run in Windows Metro mode.">
+        This plug-in only works on the desktop.
+      </message>
+      <message name="IDS_PLUGIN_BLOCKED" desc="The placeholder text for a blocked plug-in.">
+        <ph name="PLUGIN_NAME">$1<ex>Flash</ex></ph> is not allowed.
+      </message>
+      <if expr="chromeos">
+        <message name="IDS_NACL_PLUGIN_BLOCKED" desc="The placeholder text for a blocked plug-in.">
+          This app is not currently supported on this device but the Chrome gnomes are hard at work to make it work soon.
+        </message>
+      </if>
+      <message name="IDS_PLUGIN_OUTDATED" desc="The placeholder text for an outdated plug-in.">
+        <ph name="PLUGIN_NAME">$1<ex>Flash</ex></ph> is out of date.
+      </message>
+      <message name="IDS_PLUGIN_NOT_AUTHORIZED" desc="The placeholder text for a plug-in that requires user permission to run.">
+        <ph name="PLUGIN_NAME">$1<ex>Java</ex></ph> needs your permission to run.
+      </message>
+      <message name="IDS_PLUGIN_NOT_SUPPORTED" desc="The placeholder text for an unsupported plug-in.">
+        This plug-in is not supported.
+      </message>
+      <message name="IDS_PLUGIN_NOT_FOUND" desc="The placeholder text for an unknown plug-in that is not installed.">
+        No plug-in available to display this content.
+      </message>
+      <message name="IDS_PLUGIN_SEARCHING" desc="The placeholder text when searching for a missing plug-in.">
+        Looking for plug-in...
+      </message>
+      <message name="IDS_PLUGIN_DOWNLOADING" desc="The placeholder text when downloading a missing plug-in.">
+        Downloading <ph name="PLUGIN_NAME">$1<ex>Realplayer</ex></ph>...
+      </message>
+      <message name="IDS_PLUGIN_DOWNLOAD_ERROR" desc="The placeholder text when there was an error download a missing plug-in.">
+        There was an error (<ph name="ERROR">$1<ex>net::ERR_TOO_MANY_GOATS</ex></ph>) while downloading the plug-in.
+      </message>
+      <message name="IDS_PLUGIN_DOWNLOAD_ERROR_SHORT" desc="The placeholder text when there was an error download a missing plug-in.">
+        <ph name="PLUGIN_NAME">$1<ex>Realplayer</ex></ph> download failed.
+      </message>
+      <message name="IDS_PLUGIN_DOWNLOAD_CANCELLED" desc="The placeholder text when the user cancelled downloading the plug-in.">
+        <ph name="PLUGIN_NAME">$1<ex>Realplayer</ex></ph> download was cancelled.
+      </message>
+      <message name="IDS_PLUGIN_INSTALLING" desc="The placeholder text when installing a missing plug-in.">
+        When <ph name="PLUGIN_NAME">$1<ex>Realplayer</ex></ph> has finished installing, reload the page to activate it.
+      </message>
+      <message name="IDS_PLUGIN_UPDATING" desc="The placeholder text when updating an out-of-date plug-in.">
+        When <ph name="PLUGIN_NAME">$1<ex>Realplayer</ex></ph> has finished updating, reload the page to activate it.
+      </message>
+      <message name="IDS_PLUGIN_FOUND" desc="The placeholder text for a known plug-in that is not installed.">
+        <ph name="PLUGIN_NAME">$1<ex>Quicktime</ex></ph> is required to display this content.
+      </message>
+      <message name="IDS_PLUGIN_CONFIRM_INSTALL_DIALOG_TITLE" desc="Title of the plug-in installation confirmation dialog.">
+        Install <ph name="PLUGIN_NAME">$1<ex>Realplayer</ex></ph>
+      </message>
+      <message name="IDS_PLUGIN_CONFIRM_INSTALL_DIALOG_MSG" desc="Message of the plug-in installation confirmation dialog.">
+        Are you sure you want to install <ph name="PLUGIN_NAME">$1<ex>Realplayer</ex></ph>? You should only install plug-ins that you trust.
+      </message>
+      <message name="IDS_PLUGIN_CONFIRM_INSTALL_DIALOG_ACCEPT_BUTTON" desc="Button title to install a missing plug-in.">
+        Install
+      </message>
+      <message name="IDS_PLUGIN_DISABLED" desc="The placeholder text for a disabled plug-in.">
+        <ph name="PLUGIN_NAME">$1<ex>Flash</ex></ph> has been disabled. To re-enable it, please go to <ph name="CHROME_PLUGINS_LINK">chrome://plugins</ph>.
+      </message>
+
+      <!-- Session Crashed Info Bar/Bubble-->
+      <message name="IDS_SESSION_CRASHED_VIEW_RESTORE_BUTTON" desc="Title of the restore button in the session crashed view.">
+        Restore
+      </message>
+      <message name="IDS_SESSION_CRASHED_BUBBLE_TITLE" desc="Title of the session crashed bubble view.">
+        Restore pages?
+      </message>
+      <message name="IDS_SESSION_CRASHED_BUBBLE_UMA_LINK_TEXT" desc="The text attached to the link that explains UMA optin option">
+        usage statistics
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SESSION_CRASHED_BUBBLE_NAME" desc="Title for the flag to enable showing session restore request in bubbles.">
+        Enable session restore bubble UI.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SESSION_CRASHED_BUBBLE_DESCRIPTION" desc="Description for the flag to enable showing session restore request in bubbles.">
+        If enabled, the session restore UI will be shown in a bubble instead of an info bar.
+      </message>
+
+
+      <!-- Bad Flags Info Bar-->
+      <message name="IDS_BAD_FLAGS_WARNING_MESSAGE" desc="Message shown when an unsupported command-line flag is used. [Keep it short so it fits in the infobar.]">
+        You are using an unsupported command-line flag: <ph name="BAD_FLAG">$1<ex>--no-sandbox</ex></ph>. Stability and security will suffer.
+      </message>
+
+      <!-- Pepper Broker Info bar -->
+      <if expr="is_android">
+        <message name="IDS_PEPPER_BROKER_MESSAGE" desc="Mobile: Message shown when a pepper plugin wants to launch its broker. This message is followed by a 'Learn more' link.">
+          <ph name="PEPPER_PLUGIN_NAME">$1<ex>Shockwave Flash</ex></ph> on <ph name="PEPPER_PLUGIN_DOMAIN">$2<ex>example.com</ex></ph> wants to access your device.
+        </message>
+      </if>
+      <if expr="not is_android">
+        <message name="IDS_PEPPER_BROKER_MESSAGE" desc="Message shown when a pepper plugin wants to launch its broker. This message is followed by a 'Learn more' link.">
+          <ph name="PEPPER_PLUGIN_NAME">$1<ex>Shockwave Flash</ex></ph> on <ph name="PEPPER_PLUGIN_DOMAIN">$2<ex>example.com</ex></ph> wants to access your computer.
+        </message>
+      </if>
+      <message name="IDS_PEPPER_BROKER_ALLOW_BUTTON" desc="Text for the allow button on the pepper broker launch prompt">
+        Allow
+      </message>
+      <message name="IDS_PEPPER_BROKER_DENY_BUTTON" desc="Text for the deny button on the pepper broker launch prompt">
+        Deny
+      </message>
+      <message name="IDS_BLOCKED_PPAPI_BROKER_TITLE" desc="Title for the page action when Pepper broker access was blocked">
+        An unsandboxed plug-in was prevented from running on this page.
+      </message>
+      <message name="IDS_ALLOWED_PPAPI_BROKER_TITLE" desc="Title for the page action when Pepper broker access was allowed">
+        An unsandboxed plug-in was allowed to run running on this page.
+      </message>
+      <message name="IDS_BLOCKED_PPAPI_BROKER_UNBLOCK" desc="Radio button to unblock the Pepper broker">
+        Always allow unsandboxed plug-ins on <ph name="HOST">$1<ex>example.com</ex></ph>
+      </message>
+      <message name="IDS_BLOCKED_PPAPI_BROKER_NO_ACTION" desc="Radio button to keep blocking the Pepper broker">
+        Continue blocking unsandboxed plug-ins
+      </message>
+      <message name="IDS_ALLOWED_PPAPI_BROKER_NO_ACTION" desc="Radio button to keep allowing the Pepper broker">
+        Continue allowing unsandboxed plug-ins
+      </message>
+      <message name="IDS_ALLOWED_PPAPI_BROKER_BLOCK" desc="Radio button to block the Pepper broker">
+        Never allow unsandboxed plug-ins on <ph name="HOST">$1<ex>example.com</ex></ph>
+      </message>
+      <message name="IDS_PPAPI_BROKER_BUBBLE_MANAGE_LINK" desc="Link title to manage Pepper broker settings">
+        Manage unsandboxed plug-in blocking...
+      </message>
+
+      <!-- Blocked Displaying/Running Insecure Content info bar -->
+      <message name="IDS_BLOCKED_DISPLAYING_INSECURE_CONTENT" desc="Message shown when a website has asked chrome to display mixed content.  The message is followed by a learn more link and an allow button.">
+        This page includes script from unauthenticated sources.
+      </message>
+      <if expr="use_titlecase">
+        <message name="IDS_ALLOW_INSECURE_CONTENT_BUTTON" desc="Button to allow insecure content to be displayed">
+          Load unsafe script
+        </message>
+      </if>
+      <if expr="not use_titlecase">
+        <message name="IDS_ALLOW_INSECURE_CONTENT_BUTTON" desc="Button to allow insecure content to be displayed">
+          Load unsafe script
+        </message>
+      </if>
+      <if expr="not is_android and use_titlecase">
+        <message name="IDS_BLOCK_INSECURE_CONTENT_BUTTON" desc="Button to prevent insecure content from being displayed">
+          Don't Load (Recommended)
+        </message>
+      </if>
+      <if expr="not is_android and not use_titlecase">
+        <message name="IDS_BLOCK_INSECURE_CONTENT_BUTTON" desc="Button to prevent insecure content from being displayed">
+          Don't load (recommended)
+        </message>
+      </if>
+      <if expr="is_android">
+        <message name="IDS_BLOCK_INSECURE_CONTENT_BUTTON" desc="Mobile: Button to prevent insecure content from being displayed">
+          Don't load
+        </message>
+      </if>
+
+      <!-- about:system strings -->
+      <if expr="not is_android">
+        <message name="IDS_ABOUT_SYS_TITLE" desc="about:system page title">
+          About System
+        </message>
+        <message name="IDS_ABOUT_SYS_DESC" desc="about:system page description">
+          System diagnostic data
+        </message>
+        <message name="IDS_ABOUT_SYS_TABLE_TITLE" desc="Title of a table that contains system details">
+          Details
+        </message>
+        <message name="IDS_ABOUT_SYS_LOG_FILE_TABLE_TITLE" desc="Title of a table that contains details from an uploaded log">
+          Details: <ph name="FILE_NAME">$1<ex>Log.txt</ex></ph>
+        </message>
+        <message name="IDS_ABOUT_SYS_EXPAND_ALL" desc="name of a button that shows (expands) all system details">
+          Expand all...
+        </message>
+        <message name="IDS_ABOUT_SYS_COLLAPSE_ALL" desc="name of a button that hides (collapses) all system details">
+          Collapse all...
+        </message>
+        <message name="IDS_ABOUT_SYS_EXPAND" desc="name of a button that shows (expands) specific system details">
+          Expand...
+        </message>
+        <message name="IDS_ABOUT_SYS_COLLAPSE" desc="name of a button that hides (collapses) specific system details">
+          Collapse...
+        </message>
+        <message name="IDS_ABOUT_SYS_PARSE_ERROR" desc="error message displayed if parsing of custom uploaded log fails">
+          Unable to parse file: <ph name="FILE_NAME">$1<ex>Log.txt</ex></ph>
+        </message>
+      </if>
+
+      <!-- chrome://flash strings -->
+      <message name="IDS_FLASH_LOADING_MESSAGE" desc="Shown while loading until full list of modules is retrieved">
+      Loading...
+      </message>
+      <message name="IDS_FLASH_TITLE_MESSAGE" desc="Shown while loading until full list of modules is retrieved">
+      About Flash
+      </message>
+
+      <!-- chrome://nacl strings -->
+      <message name="IDS_NACL_LOADING_MESSAGE" desc="Shown while loading until full list of modules is retrieved">
+        Loading...
+      </message>
+      <message name="IDS_NACL_TITLE_MESSAGE" desc="Shown while loading until full list of modules is retrieved">
+        About NaCl
+      </message>
+
+      <!-- NaCl plugin strings -->
+      <message name="IDS_NACL_APP_MISSING_ARCH_MESSAGE" desc="Shown if a Native Client app does not support the current architecture">
+        This page uses a Native Client app that doesn't work on your computer.
+      </message>
+
+      <!-- about:version strings -->
+      <message name="IDS_ABOUT_VERSION_TITLE" desc="Title on the about:version page">
+        About Version
+      </message>
+      <message name="IDS_ABOUT_VERSION_OFFICIAL" desc="official build on the about:version page">
+        Official Build
+      </message>
+      <message name="IDS_ABOUT_VERSION_UNOFFICIAL" desc="unofficial build on the about:version page">
+        Developer Build
+      </message>
+      <message name="IDS_ABOUT_VERSION_REVISION" desc="label for the revision on the about:version page">
+        Revision
+      </message>
+      <message name="IDS_ABOUT_VERSION_OS" desc="label for the OS on the about:version page">
+        OS
+      </message>
+      <message name="IDS_ABOUT_VERSION_USER_AGENT" desc="label for the user agent on the about:version page">
+        User Agent
+      </message>
+      <message name="IDS_ABOUT_VERSION_COMMAND_LINE" desc="label for the command line on the about:version page">
+        Command Line
+      </message>
+      <if expr="chromeos">
+        <message name="IDS_ABOUT_VERSION_BUILD_DATE" desc="label for build date on the about:version page">
+          Build Date
+        </message>
+      </if>
+      <message name="IDS_ABOUT_VERSION_EXECUTABLE_PATH" desc="label for the executable path on the about:version page">
+        Executable Path
+      </message>
+      <message name="IDS_ABOUT_VERSION_PROFILE_PATH" desc="label for the profile path on the about:version page">
+        Profile Path
+      </message>
+      <message name="IDS_ABOUT_VERSION_PATH_NOTFOUND" desc="label for the non-existent path on the about:version page">
+        No such file or directory
+      </message>
+      <message name="IDS_ABOUT_VERSION_VARIATIONS" desc="label for the variations list on the about:version page">
+        Variations
+      </message>
+      <if expr="is_android">
+        <message name="IDS_ABOUT_VERSION_BUILD_ID" desc="label for the build identifier on the about:version page">
+          Build ID
+        </message>
+      </if>
+
+      <!-- chrome://voicesearch strings -->
+      <message name="IDS_VOICESEARCH_LOADING_MESSAGE" desc="Shown while loading until full list of modules is retrieved">
+        Loading...
+      </message>
+      <message name="IDS_VOICESEARCH_TITLE_MESSAGE" desc="Shown while loading until full list of modules is retrieved">
+        About Voice Search
+      </message>
+
+      <!-- JavaScript Dialog Box strings -->
+      <message name="IDS_JAVASCRIPT_ALERT_DEFAULT_TITLE" desc="Title for JavaScript alert originating from a webpage if there is no hostname to display">
+        JavaScript Alert
+      </message>
+      <message name="IDS_JAVASCRIPT_MESSAGEBOX_DEFAULT_TITLE" desc="Title for JavaScript prompt and confirm originating from a webpage if there is no hostname to display">
+        JavaScript
+      </message>
+      <message name="IDS_JAVASCRIPT_ALERT_TITLE" desc="Title for JavaScript alert originating from a webpage">
+        The page at <ph name="SITE">$1<ex>http://www.google.com</ex></ph> says:
+      </message>
+      <message name="IDS_JAVASCRIPT_MESSAGEBOX_TITLE" desc="Title for JavaScript prompt and confirm originating from a webpage">
+        The page at <ph name="SITE">$1<ex>http://www.google.com</ex></ph> says:
+      </message>
+      <message name="IDS_JAVASCRIPT_MESSAGEBOX_SUPPRESS_OPTION" desc="Optional UI shown on the message box, in the form of a checkbox, allowing the user to suppress additional message boxes from the page.">
+        Prevent this page from creating additional dialogs.
+      </message>
+
+      <!-- About box strings -->
+      <if expr="is_win">
+        <message name="IDS_ABOUT_BOX_ERROR_DURING_UPDATE_CHECK" desc="The error label for errors that occurred while checking for updates in the About box.">
+          An error occurred while checking for updates: <ph name="ERROR">$1<ex>Unable to contact Google Update</ex></ph>
+        </message>
+        <message name="IDS_ABOUT_BOX_ERROR_UPDATE_CHECK_FAILED" desc="The error message for the specific case when we cannot create the Google Update component">
+          Update check failed to start (error code <ph name="ERROR">$1<ex>0x80000005</ex></ph>).
+        </message>
+      </if>
+
+      <!-- "Before Unload" Dialog Box strings -->
+      <message name="IDS_BEFOREUNLOAD_MESSAGEBOX_TITLE" desc="Title for the 'before unload' dialog.">
+        Confirm Navigation
+      </message>
+      <message name="IDS_BEFOREUNLOAD_MESSAGEBOX_FOOTER" desc="Text shown at the bottom of the dialog, after the message provided by the script.">
+        Are you sure you want to leave this page?
+      </message>
+      <message name="IDS_BEFOREUNLOAD_MESSAGEBOX_OK_BUTTON_LABEL" desc="The text on the button which navigates the user away from the page.">
+        Leave this Page
+      </message>
+      <message name="IDS_BEFOREUNLOAD_MESSAGEBOX_CANCEL_BUTTON_LABEL" desc="The text on the button which cancels the navigation away from the page.">
+        Stay on this Page
+      </message>
+
+      <!-- "Before Reload" Dialog Box strings (same as "Before Unload" but when reloading rather than unloading the page -->
+      <message name="IDS_BEFORERELOAD_MESSAGEBOX_TITLE" desc="Title for the 'before reload' dialog.">
+        Confirm Reload
+      </message>
+      <message name="IDS_BEFORERELOAD_MESSAGEBOX_FOOTER" desc="Text shown at the bottom of the dialog, after the message provided by the script.">
+        Are you sure you want to reload this page?
+      </message>
+      <message name="IDS_BEFORERELOAD_MESSAGEBOX_OK_BUTTON_LABEL" desc="The text on the button which reloads the page.">
+        Reload this Page
+      </message>
+      <message name="IDS_BEFORERELOAD_MESSAGEBOX_CANCEL_BUTTON_LABEL" desc="The text on the button which cancels the page reload.">
+        Don't Reload
+      </message>
+
+      <!-- Omnibox -->
+      <if expr="not use_titlecase">
+        <message name="IDS_PASTE_AND_GO" desc="The text label of the Paste And Go menu item when the clipboard contains a URL">
+          Pa&amp;ste and go
+        </message>
+        <message name="IDS_PASTE_AND_SEARCH" desc="The text label of the Paste And Go menu item when the clipboard contains a string to search for">
+          Pa&amp;ste and search
+        </message>
+        <message name="IDS_SHOW_URL" desc="The text label of the Show URL item in the omnibox context menu, when the omnibox is showing search terms instead of the underlying search URL.">
+          Show URL
+        </message>
+      </if>
+      <if expr="use_titlecase">
+        <message name="IDS_PASTE_AND_GO" desc="In Title Case: The text label of the Paste And Go menu item when the clipboard contains a URL">
+          Pa&amp;ste and Go
+        </message>
+        <message name="IDS_PASTE_AND_SEARCH" desc="In Title Case: The text label of the Paste And Go menu item when the clipboard contains a string to search for">
+          Pa&amp;ste and Search
+        </message>
+        <message name="IDS_SHOW_URL" desc="In Title Case: The text label of the Show URL item in the omnibox context menu, when the omnibox is showing search terms instead of the underlying search URL.">
+          Show URL
+        </message>
+      </if>
+      <message name="IDS_OMNIBOX_KEYWORD_HINT" desc="Shown to the user when the url in the omnibox has a keyword associated with it. $1 is replaced with an image showing the tab key. $2 is replaced with the description of the keyword.">
+        Press <ph name="SEARCH_KEY">$1<ex>Tab</ex></ph> to search <ph name="SITE_NAME">$2<ex>google.com</ex></ph>
+      </message>
+      <message name="IDS_OMNIBOX_EXTENSION_KEYWORD_HINT" desc="Shown to the user when the word(s) in the omnibox has an extension keyword associated with it. $1 is replaced with an image showing the tab key. $2 is replaced with the description of the keyword.">
+        Press <ph name="SEARCH_KEY">$1<ex>Tab</ex></ph> to send commands to <ph name="EXTENSION_NAME">$2<ex>Google Talk</ex></ph>
+      </message>
+      <message name="IDS_OMNIBOX_KEYWORD_TEXT" desc="Text shown in the search button at the front of the omnibox when the user has selected a keyword">
+        Search <ph name="SITE_NAME">$1<ex>google.com</ex></ph>:
+      </message>
+      <message name="IDS_OMNIBOX_EMPTY_HINT_WITH_DEFAULT_SEARCH_PROVIDER" desc="The text displayed in the omnibox when it is empty, which includes the name of the default search provider.">
+        Search <ph name="ENGINE">$1<ex>Google</ex></ph> or type URL
+      </message>
+      <message name="IDS_OMNIBOX_EMPTY_HINT_NO_DEFAULT_SEARCH_PROVIDER" desc="The text displayed in the omnibox when it is empty, if the default search provider cannot be determined.">
+        Type URL
+      </message>
+      <if expr="is_ios">
+        <message name="IDS_OMNIBOX_EMPTY_HINT" desc="The text displayed in the omnibox when it is empty.">
+          Search or type URL
+        </message>
+      </if>
+
+      <!--Tooltip strings-->
+      <message name="IDS_TOOLTIP_BACK" desc="The tooltip for back button">
+        Click to go back, hold to see history
+      </message>
+      <message name="IDS_ACCNAME_TOOLTIP_BACK" desc="The tooltip for back button suited for non-mouse users">
+        Press enter to go back, context menu key to see history
+      </message>
+      <message name="IDS_TOOLTIP_FORWARD" desc="The tooltip for forward button">
+        Click to go forward, hold to see history
+      </message>
+      <message name="IDS_ACCNAME_TOOLTIP_FORWARD" desc="The tooltip for forward button  suited for non-mouse users">
+        Press enter to go forward, context menu key to see history
+      </message>
+      <message name="IDS_TOOLTIP_HOME" desc="The tooltip for the home button">
+        Open the home page
+      </message>
+      <message name="IDS_TOOLTIP_RELOAD" desc="The tooltip for reload button">
+        Reload this page
+      </message>
+      <message name="IDS_TOOLTIP_RELOAD_WITH_MENU" desc="The tooltip for reload button with menu in DevTools mode">
+        Reload this page, hold to see more options
+      </message>
+      <message name="IDS_TOOLTIP_STOP" desc="The tooltip for the stop button">
+        Stop loading this page
+      </message>
+      <if expr="is_macosx">
+        <message name="IDS_TOOLTIP_CLOSE_TAB" desc="The tooltip for the close tab button">
+          Close
+        </message>
+      </if>
+      <message name="IDS_TOOLTIP_LOCATION_ICON" desc="The tooltip for location icon in the omnibox">
+        View site information
+      </message>
+      <message name="IDS_TOOLTIP_NEW_TAB" desc="The tooltip for the new tab button">
+        New tab
+      </message>
+      <message name="IDS_TOOLTIP_MIC_SEARCH" desc="The tooltip for search-by-voice button">
+        Search by voice
+      </message>
+      <message name="IDS_TOOLTIP_TRANSLATE" desc="The tooltip for translate">
+        Translate this page
+      </message>
+      <message name="IDS_TOOLTIP_ZOOM" desc="The tooltip for the zoom bubble">
+        Zoom: <ph name="VALUE">$1<ex>100</ex></ph>%
+      </message>
+      <message name="IDS_TOOLTIP_ZOOM_EXTENSION_ICON" desc="The tooltip for the extension icon in the zoom bubble">
+        This page was zoomed by the "<ph name="NAME">$1<ex>Google Cast</ex></ph>" extension
+      </message>
+      <if expr="not use_titlecase">
+        <message name="IDS_ZOOM_SET_DEFAULT" desc="The text label of a button which, when clicked, returns the page to default zoom">
+          Reset to default
+        </message>
+      </if>
+      <if expr="use_titlecase">
+        <message name="IDS_ZOOM_SET_DEFAULT" desc="In Title Case: The text label of a button which, when clicked, returns the page to default zoom">
+          Reset to Default
+        </message>
+      </if>
+      <if expr="is_macosx">
+        <message name="IDS_ZOOM_SET_DEFAULT_SHORT" desc="In Title Case: The short text label of a button which, when clicked, returns the page to default zoom">
+          Reset
+        </message>
+      </if>
+
+      <message name="IDS_SITE_CHIP_EV_SSL_LABEL" desc="Formatting for the string displayed in the EV SSL site chip next to the omnibox.">
+        <ph name="ORGNAME">$1<ex>Google, Inc. [US]</ex></ph> <ph name="HOSTNAME">$2<ex>google.com</ex></ph>
+      </message>
+
+      <!--Accessible name/action strings-->
+      <message name="IDS_ACCESSIBLE_INCOGNITO_WINDOW_TITLE_FORMAT" desc="The format for the accessible title of an incognito window">
+        <ph name="WINDOW_TITLE">$1</ph> (Incognito)
+      </message>
+      <message name="IDS_ACCNAME_APP_UPGRADE_RECOMMENDED" desc="The accessible name for the app menu when software update is available.">
+        <ph name="ACCNAME_APP">$1<ex>Chrome</ex></ph> (Update is available)
+      </message>
+      <message name="IDS_ACCNAME_BACK" desc="The accessible name for the back button.">
+        Back
+      </message>
+      <message name="IDS_ACCNAME_FORWARD" desc="The accessible name for the forward button.">
+        Forward
+      </message>
+      <message name="IDS_ACCNAME_HOME" desc="The accessible name for the home button">
+        Home
+      </message>
+      <message name="IDS_ACCNAME_RELOAD" desc="The accessible name for the reload/stop button.">
+        Reload
+      </message>
+      <message name="IDS_ACCNAME_LOCATION" desc="The accessible name for the editable-text portion of the omnibox.">
+        Address and search bar
+      </message>
+      <message name="IDS_ACCNAME_ZOOM" desc="The accessible name for the zoom button.">
+        Zoom
+      </message>
+      <message name="IDS_ACCNAME_OPEN_PDF_IN_READER" desc="The accessible name for the Open PDF in Reader button.">
+        Open PDF in Reader
+      </message>
+      <message name="IDS_ACCNAME_FIND" desc="The accessible name for the find button.">
+        Find
+      </message>
+      <message name="IDS_ACCNAME_PREVIOUS" desc="The accessible name for the previous button.">
+        Previous
+      </message>
+      <message name="IDS_ACCNAME_NEXT" desc="The accessible name for the next button.">
+        Next
+      </message>
+      <message name="IDS_ACCNAME_BOOKMARKS" desc="The accessible name for the Bookmarks toolbar.">
+        Bookmarks
+      </message>
+      <message name="IDS_ACCNAME_BOOKMARKS_CHEVRON" desc="The accessible name for the chevron visible if not all the bookmark buttons fit.">
+        Menu containing hidden bookmarks
+      </message>
+      <message name="IDS_ACCNAME_SEPARATOR" desc="The accessible name for a separator.">
+        Separator
+      </message>
+      <message name="IDS_ACCNAME_EXTENSIONS" desc="The accessible name for the Extensions toolbar.">
+        Extensions
+      </message>
+      <message name="IDS_ACCNAME_EXTENSIONS_BROWSER_ACTION" desc="The accessible name for a browser action.">
+        Browser Action
+      </message>
+      <message name="IDS_ACCNAME_EXTENSIONS_CHEVRON" desc="The accessible name for the chevron visible if not all the extension buttons fit.">
+        Menu containing hidden extensions
+      </message>
+      <message name="IDS_ACCNAME_NEWTAB" desc="The accessible name for the New Tab (+) button.">
+        New Tab
+      </message>
+      <message name="IDS_ACCNAME_MINIMIZE" desc="The accessible name for the Minimize button.">
+        Minimize
+      </message>
+      <message name="IDS_ACCNAME_MAXIMIZE" desc="The accessible name for the Maximize button.">
+        Maximize
+      </message>
+      <message name="IDS_ACCNAME_RESTORE" desc="The accessible name for the Restore button.">
+        Restore
+      </message>
+      <message name="IDS_ACCNAME_CLOSE" desc="The accessible name for the Close button.">
+        Close
+      </message>
+      <if expr="is_ios">
+        <message name="IDS_ACCNAME_CLEAR_TEXT" desc="The accessibility label for the clear text button in the location bar [Length: unlimited].">
+          Clear Text
+        </message>
+        <message name="IDS_ACCNAME_VOICE_SEARCH" desc="The accessibility label for the voice search button in the location bar [Length: unlimited]">
+          Voice Search
+        </message>
+      </if>
+
+      <!-- Browser Hung Plugin Detector -->
+      <if expr="is_win">
+        <message name="IDS_UNKNOWN_PLUGIN_NAME" desc="Name for a plugin whose name could not be determined">
+          Unknown
+        </message>
+        <message name="IDS_BROWSER_HANGMONITOR_TITLE" desc="Title for the hung plugin message">
+          Plug-in Unresponsive
+        </message>
+        <message name="IDS_BROWSER_HANGMONITOR" desc="A plugin on a page has hung">
+  The following plug-in is unresponsive: <ph name="PLUGIN_NAME">$1
+  <ex>Shockwave
+  </ex></ph>Would you like to stop it?
+        </message>
+      </if>
+      <message name="IDS_BROWSER_HANGMONITOR_RENDERER_TITLE" desc="The title of the 'A renderer has hung' dialog">
+        Page(s) Unresponsive
+      </message>
+      <message name="IDS_BROWSER_HANGMONITOR_RENDERER" desc="A renderer has hung">
+        The following page(s) have become unresponsive. You can wait for them to become responsive or kill them.
+      </message>
+      <message name="IDS_BROWSER_HANGMONITOR_RENDERER_WAIT" desc="The label of the 'wait' button">
+        Wait
+      </message>
+      <message name="IDS_BROWSER_HANGMONITOR_RENDERER_END" desc="The label of the 'kill' button">
+        Kill pages
+      </message>
+      <message name="IDS_BROWSER_HANGMONITOR_PLUGIN_INFOBAR" desc="The text of the infobar notifying the user that a plugin has hung">
+        A plug-in (<ph name="PLUGIN_NAME">$1<ex>Flash</ex></ph>) isn't responding.
+      </message>
+      <message name="IDS_BROWSER_HANGMONITOR_PLUGIN_INFOBAR_KILLBUTTON" desc="The button on the hung plugin infobar (...PLUGIN_INFOBAR above) to terminate the plugin">
+        Stop plug-in
+      </message>
+
+      <!-- Passwords and Exceptions Dialog -->
+      <message name="IDS_PASSWORDS_EXCEPTIONS_WINDOW_TITLE" desc="Title for 'Passwords and exceptions dialog'">
+        Passwords
+      </message>
+      <message name="IDS_PASSWORDS_SHOW_PASSWORDS_TAB_TITLE" desc="Title for 'Saved passwords' tab">
+        Saved passwords
+      </message>
+      <message name="IDS_PASSWORDS_EXCEPTIONS_TAB_TITLE" desc="Title for 'Never saved' tab">
+        Never saved
+      </message>
+      <message name="IDS_PASSWORDS_PAGE_SEARCH_PASSWORDS" desc="Placeholder text shown in password table search box">
+        Search passwords
+      </message>
+      <message name="IDS_PASSWORDS_PAGE_VIEW_SHOW_BUTTON" desc="Text for passwords page view's button to show a stored password">
+        Show
+      </message>
+      <message name="IDS_PASSWORDS_PAGE_VIEW_HIDE_BUTTON" desc="Text for passwords page view's button to hide a stored password">
+        Hide
+      </message>
+      <message name="IDS_PASSWORDS_PAGE_VIEW_NO_PASSWORDS_DESCRIPTION" desc="Text for passwords page view when there are no passwords to show.">
+        Your saved passwords will appear here.
+      </message>
+      <message name="IDS_PASSWORDS_PAGE_VIEW_NO_EXCEPTIONS_DESCRIPTION" desc="Text for passwords page view when there are no password exceptions to show.">
+        Sites which never save passwords will appear here.
+      </message>
+
+      <!-- Confirm MessageBox Dialog -->
+      <message name="IDS_CONFIRM_MESSAGEBOX_YES_BUTTON_LABEL" desc="Confirm MessageBox Dialog's 'Yes' button text">
+        Yes
+      </message>
+      <message name="IDS_CONFIRM_MESSAGEBOX_NO_BUTTON_LABEL" desc="Confirm MessageBox Dialog's 'No' button text">
+        No
+      </message>
+
+      <!-- Password Manager -->
+      <if expr="not is_android">
+        <message name="IDS_PASSWORD_MANAGER_SAVE_BUTTON" desc="Save button text for password manager">
+          Save password
+        </message>
+        <message name="IDS_PASSWORD_MANAGER_UNBLACKLIST_BUTTON" desc="Buton text to re-enable the password manager after blacklisting.">
+          Undo
+        </message>
+        <message name="IDS_PASSWORD_MANAGER_BLACKLIST_BUTTON" desc="Button text for the 'Save Password' infobar's 'Never remember for this site' option">
+          Never for this site
+        </message>
+        <message name="IDS_PASSWORD_MANAGER_CANCEL_BUTTON" desc="Text for the 'Manage Passwords' bubble's 'Not now' option">
+          Nope
+        </message>
+        <message name="IDS_PASSWORD_MANAGER_TOOLTIP_SAVE" desc="Text for the 'Manage Passwords' icon's 'password to be saved' state">
+          Save your password
+        </message>
+        <message name="IDS_PASSWORD_MANAGER_TOOLTIP_MANAGE" desc="Text for the 'Manage Passwords' icon's 'saving passwords' state">
+          Manage your passwords
+        </message>
+      </if>
+      <if expr="is_android">
+        <message name="IDS_PASSWORD_MANAGER_SAVE_BUTTON" desc="Mobile: Button text for the 'Save Password' infobar's 'Remember password' option">
+          Yes
+        </message>
+        <message name="IDS_PASSWORD_MANAGER_BLACKLIST_BUTTON" desc="Mobile: Button text for the 'Save Password' infobar's 'Never remember for this site' option">
+          Never
+        </message>
+      </if>
+
+      <!-- Android uses custom UI for Bookmark importing -->
+      <if expr="not is_android">
+        <!-- Import Settings Dialog -->
+        <message name="IDS_IMPORT_SETTINGS_TITLE" desc="Dialog title for import dialog">
+          Import bookmarks and settings
+        </message>
+        <message name="IDS_IMPORT_FROM_LABEL" desc="Label before profile select combo box">
+          From:
+        </message>
+        <if expr="is_win">
+          <message name="IDS_IMPORT_FROM_IE" desc="browser combo box: Microsoft Internet Explorer">
+            Microsoft Internet Explorer
+          </message>
+        </if>
+        <message name="IDS_IMPORT_FROM_FIREFOX" desc="browser combo box: Mozilla Firefox">
+          Mozilla Firefox
+        </message>
+        <!-- TODO(thestig) Should this be Linux only? Add #ifdefs to external_process_importer_client.cc -->
+        <message name="IDS_IMPORT_FROM_ICEWEASEL" desc="browser combo box: Iceweasel">
+          Iceweasel
+        </message>
+        <!-- TODO(thestig) Should this be Mac or Win+Mac only? -->
+        <message name="IDS_IMPORT_FROM_SAFARI" desc="browser combo box: Safari">
+          Safari
+        </message>
+        <message name="IDS_IMPORT_FROM_BOOKMARKS_HTML_FILE" desc="browser combo box: Bookmarks HTML File">
+          Bookmarks HTML File
+        </message>
+        <message name="IDS_IMPORT_ITEMS_LABEL" desc="Label before item select checkboxes">
+          Select items to import:
+        </message>
+        <message name="IDS_IMPORT_HISTORY_CHKBOX" desc="Checkbox for importing browsing history">
+          Browsing history
+        </message>
+        <message name="IDS_IMPORT_FAVORITES_CHKBOX" desc="Checkbox for importing favorites">
+          Favorites/Bookmarks
+        </message>
+        <message name="IDS_IMPORT_PASSWORDS_CHKBOX" desc="Checkbox for importing saved passwords">
+          Saved passwords
+        </message>
+        <message name="IDS_IMPORT_SEARCH_ENGINES_CHKBOX" desc="Checkbox for importing search engines">
+          Search engines
+        </message>
+        <message name="IDS_IMPORT_AUTOFILL_FORM_DATA_CHKBOX" desc="Checkbox for importing form data for autofill">
+          Autofill form data
+        </message>
+        <message name="IDS_IMPORT_LOADING_PROFILES" desc="Status text to notify the user that profiles are being loaded">
+          Loading...
+        </message>
+        <message name="IDS_IMPORT_SUCCEEDED" desc="Status text to notify the user that the import succeeded">
+          Success!
+        </message>
+
+        <message name="IDS_IMPORT_COMMIT" desc="Text for OK button on dialog">
+          Import
+        </message>
+        <message name="IDS_IMPORT_CHOOSE_FILE" desc="Text for the Choose File on dialog">
+          Choose File
+        </message>
+
+        <message name="IDS_IMPORT_NO_PROFILE_FOUND" desc="Message displayed when we do not find any supported browser to import from.">
+          No supported browser found
+        </message>
+        <if expr="is_macosx">
+          <message name="IDS_IMPORT_PASSWORD_KEYCHAIN_WARNING" desc="Message displayed at the bottom of the Import Dialog for Safari on Mac OS">
+            Passwords saved in the Mac OS X Keychain will be used to help you sign in without typing.
+          </message>
+        </if>
+
+        <!-- Import progress popup -->
+        <if expr="is_macosx">
+          <message name="IDS_IMPORT_PROGRESS_TITLE" desc="Title for the importing progress dialog">
+            Importing
+          </message>
+          <message name="IDS_IMPORT_SETTINGS_MENU_MAC" desc="The text label for the Import menu item.">
+            Import Bookmarks and Settings...
+          </message>
+          <message name="IDS_IMPORT_PROGRESS_STATUS_BOOKMARKS" desc="Import status for bookmarks">
+            Favorites/Bookmarks
+          </message>
+          <message name="IDS_IMPORT_PROGRESS_STATUS_SEARCH" desc="Import status for search engines">
+            Search settings
+          </message>
+          <message name="IDS_IMPORT_PROGRESS_STATUS_PASSWORDS" desc="Import status for passwords">
+            Saved passwords
+          </message>
+          <message name="IDS_IMPORT_PROGRESS_STATUS_HISTORY" desc="Import status for history">
+            Browsing history
+          </message>
+        </if> <!-- is_macosx -->
+      </if> <!-- not is_android -->
+
+      <if expr="is_macosx">
+        <!-- Confirm to quit panel -->
+        <message name="IDS_CONFIRM_TO_QUIT_DESCRIPTION" desc="Instructions for how the user should confirm quitting.">
+          Hold <ph name="KEY_EQUIVALENT">$1<ex>⌘Q</ex></ph> to Quit.
+        </message>
+        <message name="IDS_CONFIRM_TO_QUIT_OPTION" desc="The label of the checkbox preference that enables the confirm-to-quit feature.">
+          Warn Before Quitting (<ph name="KEY_EQUIVALENT">$1<ex>⌘Q</ex></ph>)
+        </message>
+
+        <!-- Show/Hide notifications menubar extra -->
+        <message name="IDS_HIDE_NOTIFICATION_CENTER_OPTION" desc="The label of the checkbox preference that disables the notification center feature.">
+          Hide Notifications Icon
+        </message>
+      </if>
+
+      <!-- Importer Lock Dialog -->
+      <message name="IDS_IMPORTER_LOCK_TITLE" desc="Dialog title for importer lock dialog">
+        Close Firefox Before Importing
+      </message>
+      <message name="IDS_IMPORTER_LOCK_OK" desc="Text for OK button on dialog">
+        Continue
+      </message>
+      <message name="IDS_IMPORTER_LOCK_CANCEL" desc="Text for Cancel button on dialog">
+        Skip Import
+      </message>
+
+      <if expr="enable_extensions">
+        <!-- Feedback Dialog -->
+        <message name="IDS_FEEDBACK_REPORT_PAGE_TITLE" desc="Label showing the title of the page that will be reported">
+          Tell us what is happening.
+        </message>
+        <message name="IDS_FEEDBACK_REPORT_URL_LABEL" desc="Label showing the URL that will be reported">
+          URL (optional):
+        </message>
+        <message name="IDS_FEEDBACK_USER_EMAIL_LABEL" desc="Label showing the e-mail address that will be reported">
+          Email (optional):
+        </message>
+        <message name="IDS_FEEDBACK_SCREENSHOT_LABEL" desc="Label for the screenshot field if current screenshots are being shown">
+          Include this screenshot:
+        </message>
+        <message name="IDS_FEEDBACK_INCLUDE_PERFORMANCE_TRACE_CHECKBOX" desc="Checkbox for including system performance data on the bug report dialog box">
+          Send performance trace data
+        </message>
+        <if expr="not chromeos">
+          <message name="IDS_FEEDBACK_INCLUDE_SYSTEM_INFORMATION_CHKBOX" desc="Checkbox for including system information on the bug report dialog box">
+            Send <ph name="BEGIN_LINK1">&lt;a href="#" id="sys-info-url"&gt;</ph>system information<ph name="END_LINK1">&lt;/a&gt;</ph>
+          </message>
+        </if>
+        <if expr="chromeos">
+          <message name="IDS_FEEDBACK_INCLUDE_SYSTEM_INFORMATION_AND_METRICS_CHKBOX" desc="Checkbox for including system information and metrics on the bug report dialog box">
+            Send <ph name="BEGIN_LINK1">&lt;a href="#" id="sys-info-url"&gt;</ph>system information<ph name="END_LINK1">&lt;/a&gt;</ph> and <ph name="BEGIN_LINK2">&lt;a href="#" id="histograms-url"&gt;</ph>metrics<ph name="END_LINK2">&lt;/a&gt;</ph>
+          </message>
+        </if>
+        <message name="IDS_FEEDBACK_ATTACH_FILE_NOTE" desc="Text for describing the maximum size for an attached file">
+          The attached file is uploaded to Google servers for debugging.
+        </message>
+        <message name="IDS_FEEDBACK_ATTACH_FILE_LABEL" desc="Text for the label for the attached filename">
+          Attach file:
+        </message>
+        <message name="IDS_FEEDBACK_READING_FILE" desc="Text to display if reading a file when the user clicks the send report button">
+          Reading file..
+        </message>
+        <message name="IDS_FEEDBACK_ATTACH_FILE_TO_BIG" desc="Text to display if the file being attached is too big">
+          Selected file is too big (max size: 3mb).
+        </message>
+        <message name="IDS_FEEDBACK_PRIVACY_NOTE" desc="Text for the privacy note included with Chrome OS">
+          Your Chrome and operating system version will be submitted in addition
+          to any information you choose to include above. If you include your email
+          address, Google may contact you regarding your feedback report. This feedback
+          is used to diagnose problems and help improve Chrome. Any personal information
+          you submit, whether explicitly or incidentally will be protected in
+          accordance with our privacy policies.<ph name="BEGIN_BOLD">&lt;strong&gt;
+          </ph> By submitting this feedback, you agree that Google may use feedback
+          that you provide to improve any Google product or service.
+          <ph name="END_BOLD">&lt;/strong&gt;</ph>
+        </message>
+        <message name="IDS_FEEDBACK_NO_DESCRIPTION" desc="Message shown when no text is entered before hitting send feedback">
+          Please tell us what is happening before sending the feedback.
+        </message>
+        <message name="IDS_FEEDBACK_SEND_REPORT" desc="Text for OK button of the send feedback dialog">
+          Send feedback
+        </message>
+      </if>
+
+      <!-- Clear Browsing Data -->
+      <message name="IDS_CLEAR_BROWSING_DATA_TITLE" desc="Dialog title">
+        Clear browsing data
+      </message>
+      <message name="IDS_CLEAR_BROWSING_DATA_INFO_BAR_TEXT" desc="The text of the infobar that is displayed in the clear browsing data dialog. This infobar remindes users that they can use the incognito mode instead of clearing their browsing data.">
+        Psst! Incognito mode (<ph name="INCOGNITO_MODE_SHORTCUT">$1<ex>Shift+Ctrl+N</ex></ph>) may come in handy next time.
+      </message>
+      <message name="IDS_CLEAR_BROWSING_DATA_LABEL" desc="Label at the top of the client area of the dialog, preceding the period combo box">
+        Obliterate the following items from:
+      </message>
+      <message name="IDS_DEL_BROWSING_HISTORY_CHKBOX" desc="Checkbox for deleting Browsing History">
+        Browsing history
+      </message>
+      <message name="IDS_DEL_DOWNLOAD_HISTORY_CHKBOX" desc="Checkbox for deleting Download History">
+        Download history
+      </message>
+      <message name="IDS_DEL_CACHE_CHKBOX" desc="Checkbox for deleting Cache">
+        Cached images and files
+      </message>
+      <message name="IDS_DEL_COOKIES_CHKBOX" desc="Checkbox for deleting Cookies and other site data">
+        Cookies and other site data
+      </message>
+      <message name="IDS_DEL_COOKIES_FLASH_CHKBOX" desc="Checkbox for deleting Cookies and other site data">
+        Cookies and other site and plug-in data
+      </message>
+      <message name="IDS_DEL_PASSWORDS_CHKBOX" desc="Checkbox for deleting Passwords">
+        Passwords
+      </message>
+      <message name="IDS_DEL_FORM_DATA_CHKBOX" desc="Checkbox for deleting form data saved for Autofill">
+        Autofill form data
+      </message>
+      <message name="IDS_DEL_HOSTED_APPS_DATA_CHKBOX" desc="Checkbox for deleting data of hosted apps">
+        Hosted app data
+      </message>
+      <message name="IDS_DEAUTHORIZE_CONTENT_LICENSES_CHKBOX" desc="Checkbox for deauthorizing content licenses (DRM videos, etc.)">
+        Content licenses
+      </message>
+      <message name="IDS_CLEAR_BROWSING_DATA_COMMIT" desc="Title for OK button on dialog">
+        Clear browsing data
+      </message>
+      <message name="IDS_FLASH_STORAGE_SETTINGS" desc="Link for opening Adobe Flash Player storage settings">
+        Adobe Flash Player storage settings...
+      </message>
+      <message name="IDS_CLEAR_DATA_HOUR" desc="deletion period combo box: hour. In English this finishes the sentence that starts with 'Delete the following items from'.">
+        the past hour
+      </message>
+      <message name="IDS_CLEAR_DATA_DAY" desc="deletion period combo box: day. In English this finishes the sentence that starts with 'Delete the following items from'.">
+        the past day
+      </message>
+      <message name="IDS_CLEAR_DATA_WEEK" desc="deletion period combo box: week. In English this finishes the sentence that starts with 'Delete the following items from'.">
+        the past week
+      </message>
+      <message name="IDS_CLEAR_DATA_4WEEKS" desc="deletion period combo box: 4 weeks. In English this finishes the sentence that starts with 'Delete the following items from'.">
+        the last 4 weeks
+      </message>
+      <message name="IDS_CLEAR_DATA_EVERYTHING" desc="deletion period combo box: everything. In English this finishes the sentence that starts with 'Delete the following items from'.">
+        the beginning of time
+      </message>
+      <message name="IDS_CLEAR_BROWSING_DATA_SOME_STUFF_REMAINS" desc="Information that some data may remain even though the user clears their browsing history. The text in '|'s and '#'s will be turned into buttons. The translated text should contain exactly one phrase in '|'s and one in '#'s.">
+        Saved |content settings| and #search engines# will not be cleared and may reflect your browsing habits.
+      </message>
+
+      <!-- Supervised User Avatar Menu -->
+      <message name="IDS_SUPERVISED_USER_INFO" desc="Text which explains that a supervised user is managed by a custodian.">
+        Usage and history can be reviewed by the manager (<ph name="CUSTODIAN_EMAIL">$1<ex>Jane.Doe@gmail.com</ex></ph>) on chrome.com.
+      </message>
+      <message name="IDS_SUPERVISED_USER_AVATAR_LABEL" desc="A label for the supervised user which is used in the avatar menu and as a label in the titlebar.">
+        Supervised user
+      </message>
+      <message name="IDS_SUPERVISED_USER_NEW_AVATAR_LABEL" desc="Label shown in the new avatar menu for a supervised user.">
+        <ph name="PROFILE_DISPLAY_NAME">$1<ex>Markus</ex></ph> (Supervised)
+      </message>
+
+      <!-- Supervised User Block Interstitial data -->
+      <message name="IDS_BLOCK_INTERSTITIAL_TITLE" desc="A title for the supervised-user block interstitial page.">
+        Page blocked
+      </message>
+      <message name="IDS_BLOCK_INTERSTITIAL_MESSAGE" desc="A message for the supervised user when they attempt to visit a site that is not permitted by the manager.">
+        Oops, looks like you need permission from <ph name="NAME">$1<ex>John Doe</ex></ph> to access this page.
+      </message>
+      <message name="IDS_BLOCK_INTERSTITIAL_MESSAGE_ACCESS_REQUESTS_DISABLED" desc="A message for the supervised user when they attempt to visit a site that is not permitted by the manager (and they can't ask for permission).">
+        Oops, looks like you don't have permission to access this page.
+      </message>
+      <message name="IDS_BACK_BUTTON" desc="A button for going back to the last safe url after being blocked.">
+        Go back
+      </message>
+      <message name="IDS_BLOCK_INTERSTITIAL_REQUEST_ACCESS_BUTTON" desc="A button for requesting access to blocked sites.">
+        Request permission
+      </message>
+      <message name="IDS_BLOCK_INTERSTITIAL_REQUEST_SENT_MESSAGE" desc="The text that tells the supervised user that a request has been sent.">
+        Your request to access this site has been sent to <ph name="NAME">$1<ex>John Doe</ex></ph>.
+      </message>
+
+      <!-- Content Settings dialog data -->
+      <message name="IDS_CONTENT_SETTINGS_TITLE" desc="Title for content settings dialog">
+        Content settings
+      </message>
+      <message name="IDS_COOKIES_TAB_LABEL" desc="Label for Cookies tab on Content Settings dialog">
+        Cookies
+      </message>
+      <message name="IDS_COOKIES_HEADER" desc="Header for cookie exception management page on Content Settings dialog">
+        Cookie and site data exceptions
+      </message>
+      <message name="IDS_COOKIES_ALLOW_RADIO" desc="A radio button in the Content Settings dialog for allowing cookies and other site data to be stored on your computer.">
+        Allow local data to be set (recommended)
+      </message>
+      <message name="IDS_COOKIES_SESSION_ONLY_RADIO" desc="A radio button in the Content Settings dialog for allowing cookies and other site data for the current session only.">
+        Keep local data only until you quit your browser
+      </message>
+      <message name="IDS_COOKIES_BLOCK_RADIO" desc="A radio button in the Content Settings dialog for blocking cookies and other site data from being stored on your computer.">
+        Block sites from setting any data
+      </message>
+      <message name="IDS_COOKIES_BLOCK_3RDPARTY_CHKBOX" desc="A checkbox in the Content Settings dialog for blocking all 3rd party cookies.">
+        Block third-party cookies and site data
+      </message>
+      <message name="IDS_MEDIA_STREAM_TAB_LABEL" desc="Label for media device tab on Content Settings dialog">
+        Media
+      </message>
+      <message name="IDS_MEDIA_STREAM_HEADER" desc="Header for media device exception management page on Content Settings dialog">
+        Media exceptions
+      </message>
+      <message name="IDS_MEDIA_STREAM_BLOCK_RADIO" desc="A radio button in Content Settings dialog to deny all sites to access any capture device.">
+        Do not allow sites to access your camera and microphone
+      </message>
+      <message name="IDS_MEDIA_STREAM_ASK_RADIO" desc="A radio button in Content Settings dialog to allow site to query the permision to access capture devices.">
+        Ask when a site requires access to your camera and microphone (recommended)
+      </message>
+      <message name="IDS_MEDIA_STREAM_BLOCK_AUDIO_ONLY_RADIO" desc="A radio button in Content Settings dialog to deny all sites to access audio capture device.">
+        Do not allow sites to access your microphone
+      </message>
+      <message name="IDS_MEDIA_STREAM_ASK_AUDIO_ONLY_RADIO" desc="A radio button in Content Settings dialog to allow site to query the permision to access audio capture devices.">
+        Ask when a site requires access to your microphone (recommended)
+      </message>
+      <message name="IDS_MEDIA_STREAM_BLOCK_VIDEO_ONLY_RADIO" desc="A radio button in Content Settings dialog to deny all sites to access video capture device.">
+        Do not allow sites to access your camera
+      </message>
+      <message name="IDS_MEDIA_STREAM_ASK_VIDEO_ONLY_RADIO" desc="A radio button in Content Settings dialog to allow site to query the permision to access video capture devices.">
+        Ask when a site requires access to your camera (recommended)
+      </message>
+      <message name="IDS_MEDIA_STREAM_AUDIO_MANAGED" desc="A notification bubble shown if the access to audio capture devices is controlled through policy.">
+        Access to your microphone is controlled by your administrator.
+      </message>
+      <message name="IDS_MEDIA_STREAM_VIDEO_MANAGED" desc="A notification bubble shown if the access to video capture devices is controlled through policy.">
+        Access to your camera is controlled by your administrator.
+      </message>
+      <message name="IDS_MEDIA_SELECTED_MIC_LABEL" desc="The label of the 'microphone device' select menu">
+        Microphone:
+      </message>
+      <message name="IDS_MEDIA_SELECTED_CAMERA_LABEL" desc="The label of the 'camera device' select menu">
+        Camera:
+      </message>
+      <message name="IDS_MEDIA_MENU_NO_DEVICE_TITLE" desc="The title of the media select menu if there is no microphone or camera available on the machine">
+        None available
+      </message>
+      <message name="IDS_MEDIA_PEPPER_FLASH_DEFAULT_DIVERGED_LABEL" desc="The label in Content Settings dialog informing that Pepper Flash uses different default permission for camera and microphone than the default media permission.">
+        Adobe Flash Player camera and microphone settings are different.
+      </message>
+      <message name="IDS_MEDIA_PEPPER_FLASH_EXCEPTIONS_DIVERGED_LABEL" desc="The label in the media device exception management page informing that Pepper Flash uses different exceptions than the ones listed on the page.">
+        Adobe Flash Player camera and microphone exceptions are different.
+      </message>
+      <message name="IDS_MEDIA_PEPPER_FLASH_CHANGE_LINK" desc="The link to change Pepper Flash camera and microphone settings.">
+        Change
+      </message>
+      <message name="IDS_MEDIA_AUDIO_EXCEPTION_HEADER" desc="A column header for the action column of the media audio exceptions dialog">
+        Audio
+      </message>
+      <message name="IDS_MEDIA_VIDEO_EXCEPTION_HEADER" desc="A column header for the action column of the media video exceptions dialog">
+        Video
+      </message>
+      <message name="IDS_CONTENT_SETTING_CHANGED_INFOBAR_BUTTON" desc="The string used in the infobar button allowing the user to reload the page directly from the infobar.">
+        Reload
+      </message>
+
+      <!-- Desktop integration -->
+      <message name="IDS_PROMPT_INTEGRATION_ENABLE_BUTTON_LABEL" desc="The text to be displayed on the checkbox that enables desktop integration.">
+        Notify me when the website I am visiting can run as an application
+      </message>
+      <message name="IDS_DESKTOP_INTEGRATION_NOTE_DESCRIPTION" desc="The text to be displayed below the Exceptions button in the Integrated Websites section.">
+        Websites which have been installed can be removed, like any other application, using Ubuntu Software Center.
+      </message>
+      <message name="IDS_DESKTOP_INTEGRATION_SETTINGS_EXCEPTIONS_BUTTON_LABEL" desc="The text to be displayed on the button that drives integration exceptions.">
+        Exceptions...
+      </message>
+      <message name="IDS_DESKTOP_INTEGRATION_SETTINGS_OVERLAY_TITLE" desc="Title for the desktop integration overlay.">
+        Integration prompt exceptions
+      </message>
+      <message name="IDS_DESKTOP_INTEGRATION_SETTINGS_OVERLAY_DESCRIPTION" desc="Description for the desktop integration overlay.">
+        These websites won't prompt to be installed:
+      </message>
+      <message name="IDS_OPTIONS_SETTINGS_INTEGRATION_WEBSITE_ADD_BUTTON"
+               desc="The label for the add button for adding a integration websites">
+        Add
+      </message>
+      <message name="IDS_OPTIONS_SETTINGS_INTEGRATION_WEBSITE_ADD_TEXT"
+               desc="The description text for the add overlay for adding a integration websites">
+        Website host-name
+      </message>
+      <message name="IDS_OPTIONS_SETTINGS_INTEGRATION_WEBSITE_ADD_TITLE"
+               desc="Title for add overlay for adding a integration websites">
+        Add Integrated Website
+      </message>
+
+      <!-- Mac and ChromeOS users do not close their browser. Mac users quit it and ChromeOS users log out. -->
+      <if expr="not is_macosx and not chromeos">
+        <message name="IDS_COOKIES_CLEAR_WHEN_CLOSE_CHKBOX" desc="A checkbox in the Content Settings dialog for removing all cookies on when browser is closed.">
+          Clear cookies and other site data when you close your browser
+        </message>
+        <message name="IDS_COOKIES_LSO_CLEAR_WHEN_CLOSE_CHKBOX" desc="A checkbox in the Content Settings dialog for removing all cookies on when browser is closed.">
+          Clear cookies and other site and plug-in data when you close your browser
+        </message>
+      </if>
+      <if expr="is_macosx">
+        <message name="IDS_COOKIES_CLEAR_WHEN_CLOSE_CHKBOX" desc="A checkbox in the Content Settings dialog for removing all cookies on when browser is quit (Mac).">
+          Clear cookies and other site data when you quit your browser
+        </message>
+        <message name="IDS_COOKIES_LSO_CLEAR_WHEN_CLOSE_CHKBOX" desc="A checkbox in the Content Settings dialog for removing all cookies on when browser is quit (Mac).">
+          Clear cookies and other site and plug-in data when you quit your browser
+        </message>
+      </if>
+      <if expr="chromeos">
+        <message name="IDS_COOKIES_CLEAR_WHEN_CLOSE_CHKBOX" desc="A checkbox in the Content Settings dialog for removing all cookies on when browser is closed.">
+          Clear cookies and other site data when you log out
+        </message>
+        <message name="IDS_COOKIES_LSO_CLEAR_WHEN_CLOSE_CHKBOX" desc="A checkbox in the Content Settings dialog for removing all cookies on when browser is closed.">
+          Clear cookies and other site and plug-in data when you log out
+        </message>
+      </if>
+
+      <message name="IDS_IMAGES_TAB_LABEL" desc="Label for Images tab on Content Settings dialog">
+        Images
+      </message>
+      <message name="IDS_IMAGES_HEADER" desc="Header for image exception management page on Content Settings dialog">
+        Image exceptions
+      </message>
+      <message name="IDS_IMAGES_LOAD_RADIO" desc="A radio button in the Content Settings dialog for allowing all images to be loaded.">
+        Show all images (recommended)
+      </message>
+      <message name="IDS_IMAGES_NOLOAD_RADIO" desc="A radio button in the Content Settings dialog for preventing loading any image.">
+        Do not show any images
+      </message>
+      <message name="IDS_POPUP_TAB_LABEL" desc="Label for Pop-up Windows tab on Content Settings dialog">
+        Pop-ups
+      </message>
+      <message name="IDS_POPUP_HEADER" desc="Header for popup exception management page on Content Settings dialog">
+        Pop-up exceptions
+      </message>
+      <message name="IDS_POPUP_ALLOW_RADIO" desc="A radio button in the Content Settings dialog for allowing pop-up windows in the browser.">
+        Allow all sites to show pop-ups
+      </message>
+      <message name="IDS_POPUP_BLOCK_RADIO" desc="A radio button in the Content Settings dialog for preventing showing pop-up windows on any sites.">
+        Do not allow any site to show pop-ups (recommended)
+      </message>
+      <if expr="is_android">
+        <message name="IDS_POPUPS_BLOCKED_INFOBAR_BUTTON_SHOW" desc="Pop-up Blocking Show Button [CHAR-LIMIT=32]">
+          Always show
+        </message>
+        <message name="IDS_POPUPS_BLOCKED_INFOBAR_TEXT" desc="Pop-up Blocking Title [CHAR-LIMIT=32]">
+          Pop-ups blocked (<ph name="POP_UP_COUNT">$1<ex>3</ex></ph>)
+        </message>
+      </if>
+      <message name="IDS_PLUGIN_TAB_LABEL" desc="Label for Plug-ins tab on Content Settings dialog">
+        Plug-ins
+      </message>
+      <message name="IDS_PLUGIN_HEADER" desc="Header for plugin exception management page on Content Settings dialog">
+        Plug-in exceptions
+      </message>
+      <message name="IDS_PLUGIN_LOAD_RADIO" desc="A radio button in the Content Settings dialog for allowing plug-ins use on any site.">
+        Run automatically (recommended)
+      </message>
+      <message name="IDS_PLUGIN_ASK_RADIO" desc="A radio button in the Content Settings dialog for allowing plug-ins use on any site.">
+        Click to play
+      </message>
+      <message name="IDS_PLUGIN_NOLOAD_RADIO" desc="A radio button in the Content Settings dialog for preventing plug-ins use on any site.">
+        Block all
+      </message>
+      <message name="IDS_PLUGIN_SELECTIVE_DISABLE" desc="Link to selectively disable plug-ins">
+        Disable individual plug-ins...
+      </message>
+      <message name="IDS_JAVASCRIPT_TAB_LABEL" desc="Label for JavaScript tab on Content Settings dialog">
+        JavaScript
+      </message>
+      <message name="IDS_JAVASCRIPT_HEADER" desc="Label for JavaScript exception management page on Content Settings dialog">
+        JavaScript exceptions
+      </message>
+      <message name="IDS_JS_ALLOW_RADIO" desc="A radio button in the Content Settings dialog for allowing JavaScript use on any site.">
+        Allow all sites to run JavaScript (recommended)
+      </message>
+      <message name="IDS_JS_DONOTALLOW_RADIO" desc="A radio button in the Content Settings dialog for preventing JavaScript use on any site.">
+        Do not allow any site to run JavaScript
+      </message>
+      <message name="IDS_HANDLERS_TAB_LABEL" desc="Label for Handlers tab on Content Settings dialog">
+        Handlers
+      </message>
+      <message name="IDS_HANDLERS_ALLOW_RADIO" desc="A radio button in the Content Settings dialog for allowing sites to register themselves as handlers for protocols.">
+        Allow sites to ask to become default handlers for protocols (recommended)
+      </message>
+      <message name="IDS_HANDLERS_DONOTALLOW_RADIO" desc="A radio button in the Content Settings dialog for preventing sites from registering themselves as handlers for protocols.">
+        Do not allow any site to handle protocols
+      </message>
+    <message name="IDS_HANDLERS_BUBBLE_MANAGE_LINK" desc="Link on the register protocol handler bubble that opens up the Content Settings management dialog.">
+      Manage handler settings...
+    </message>
+    <message name="IDS_HANDLERS_TYPE_COLUMN_HEADER" desc="Header on the settings page for the column showing handler protocols.">
+        Type
+    </message>
+    <message name="IDS_HANDLERS_SITE_COLUMN_HEADER" desc="Header on the settings page for the column showing handler sites.">
+        Site
+    </message>
+    <message name="IDS_HANDLERS_REMOVE_HANDLER_LINK" desc="Text on the link that removes a registered protocol handler from a user's settings.">
+        remove this site
+    </message>
+    <message name="IDS_HANDLERS_NONE_HANDLER" desc="Text in the dropdown for handlers for a given protocol that indicates that the protocol shouldn't be handled.">
+        (none)
+    </message>
+    <message name="IDS_HANDLERS_ACTIVE_HEADING" desc="Header for the section of the handlers settings page that lists handlers that are active, that is, can be used to handle links.">
+        Active protocol handlers
+    </message>
+    <message name="IDS_HANDLERS_IGNORED_HEADING" desc="Header for the section of the handlers settings page that lists handlers that are ignored.">
+        Ignored protocol handlers
+    </message>
+
+    <message name="IDS_HANDLER_OPTIONS_WINDOW_TITLE" desc="The title of the window that lets a user change what handlers they have registered for various protocols / mimetypes.">
+      Protocol handlers
+    </message>
+      <message name="IDS_GEOLOCATION_TAB_LABEL" desc="Label for Geolocation tab on Content Settings dialog">
+        Location
+      </message>
+      <message name="IDS_GEOLOCATION_HEADER" desc="Label for Geolocation exception management page on Content Settings dialog">
+        Geolocation exceptions
+      </message>
+      <message name="IDS_GEOLOCATION_ALLOW_RADIO" desc="A radio button in the Content Settings dialog for allowing all sites access to geolocation data.">
+        Allow all sites to track your physical location
+      </message>
+      <message name="IDS_GEOLOCATION_ASK_RADIO" desc="A radio button in the Content Settings dialog for asking before allowing sites access to gelocation data.">
+        Ask when a site tries to track your physical location (recommended)
+      </message>
+      <message name="IDS_GEOLOCATION_BLOCK_RADIO" desc="A radio button in the Content Settings dialog for blocking sites from accessing geolocation data.">
+        Do not allow any site to track your physical location
+      </message>
+      <message name="IDS_GEOLOCATION_GOOGLE_ACCESS_ENABLE_CHKBOX" desc="The label of the 'Allow Google services to access your location' checkbox">
+        Allow Google services to access your location
+      </message>
+      <message name="IDS_GEOLOCATION_SET_BY_HOVER" desc="Hover text for URL in a list of exceptions, preceding the name of the granting hosted app.">
+        Set by app:
+      </message>
+      <message name="IDS_NOTIFICATIONS_TAB_LABEL" desc="Label for Notifications tab on Content Settings dialog">
+        Notifications
+      </message>
+      <message name="IDS_NOTIFICATIONS_HEADER" desc="Label for Notifications exception management page on Content Settings dialog">
+        Notifications exceptions
+      </message>
+      <message name="IDS_NOTIFICATIONS_ALLOW_RADIO" desc="A radio button in Content Settings dialog to allow all sites to show notifications.">
+        Allow all sites to show desktop notifications
+      </message>
+      <message name="IDS_NOTIFICATIONS_BLOCK_RADIO" desc="A radio button in Content Settings dialog to deny all sites to show notifications.">
+        Do not allow any site to show desktop notifications
+      </message>
+      <message name="IDS_NOTIFICATIONS_ASK_RADIO" desc="A radio button in Content Settings dialog to configure notifications per-site.">
+        Ask when a site wants to show desktop notifications (recommended)
+      </message>
+      <message name="IDS_FULLSCREEN_TAB_LABEL" desc="Label for Fullscreen tab on Content Settings dialog">
+        Fullscreen
+      </message>
+      <message name="IDS_FULLSCREEN_HEADER" desc="Header for fullscreen exception management page on Content Settings dialog">
+        Fullscreen exceptions
+      </message>
+      <message name="IDS_EXCEPTIONS_PATTERN_HEADER" desc="A column header for the pattern column of the cookie/image/javascript/plugins exceptions dialog">
+        Hostname pattern
+      </message>
+      <message name="IDS_EXCEPTIONS_ACTION_HEADER" desc="A column header for the action column of the cookie/image/javascript/plugins exceptions dialog">
+        Behavior
+      </message>
+      <message name="IDS_EXCEPTIONS_ZOOM_HEADER" desc="A column header for the exceptions dialog indicating the zoom level of pages (e.g. 110% magnification)">
+        Zoom
+      </message>
+      <message name="IDS_EXCEPTIONS_ALLOW_BUTTON" desc="A label to display in the exception page's action column when a site's content setting is allowed for a given domain">
+        Allow
+      </message>
+      <message name="IDS_EXCEPTIONS_ASK_BUTTON" desc="A label to display in the exception page's action column when a site's content setting is set to promt for a given domain.">
+        Ask
+      </message>
+      <message name="IDS_EXCEPTIONS_SESSION_ONLY_BUTTON" desc="A label to display in the exception page's action column when a site's content setting is allow but only for the duration of the session for a given domain.">
+        Clear on exit
+      </message>
+      <message name="IDS_EXCEPTIONS_BLOCK_BUTTON" desc="A label to display in the exception page's action column when a site's content setting is blocked for a given domain.">
+        Block
+      </message>
+      <message name="IDS_EXCEPTIONS_OTR_LABEL" desc="A label informing the user that the table below the label shows incognito-only exceptions">
+        Exceptions below only apply to the current incognito session.
+      </message>
+      <message name="IDS_EXCEPTIONS_ADD_NEW_INSTRUCTIONS" desc="Placeholder text before the user adds a new exception" >
+        [*.]example.com
+      </message>
+      <message name="IDS_EXCEPTIONS_GEOLOCATION_EMBEDDED_ON_HOST" desc="Template text for a child row in the Geolocation Exceptions page view. Controls the permission setting for the parent page when embedded on the specified site.">
+        embedded on <ph name="URL">$1<ex>www.google.com</ex></ph>
+      </message>
+      <message name="IDS_MOUSE_LOCK_TAB_LABEL" desc="Label for Mouse Lock tab on Content Settings dialog">
+        Mouse cursor
+      </message>
+      <message name="IDS_MOUSE_LOCK_HEADER" desc="Label for Mouse Lock exception management page on Content Settings dialog">
+        Mouse cursor exceptions
+      </message>
+      <message name="IDS_MOUSE_LOCK_ALLOW_RADIO" desc="A radio button in the Content Settings dialog for allowing all sites ability to disable the mouse cursor.">
+        Allow all sites to disable the mouse cursor
+      </message>
+      <message name="IDS_MOUSE_LOCK_ASK_RADIO" desc="A radio button in the Content Settings dialog for asking before allowing sites to disable the mouse cursor.">
+        Ask when a site tries to disable the mouse cursor (recommended)
+      </message>
+      <message name="IDS_MOUSE_LOCK_BLOCK_RADIO" desc="A radio button in the Content Settings dialog for blocking all sites ability to disable the mouse cursor.">
+        Do not allow any site to disable the mouse cursor
+      </message>
+      <if expr="chromeos or is_win">
+        <message name="IDS_PROTECTED_CONTENT_TAB_LABEL" desc="Label for the Protected Content tab on the Content Settings dialog.">
+          Protected content
+        </message>
+        <message name="IDS_PROTECTED_CONTENT_INFO" desc="Text that is displayed on the Protected Content tab of the Content Settings dialog. This text explains that enabling protected content may require using a uniquely identifiable machine identifier.">
+          Some content services use machine identifiers to uniquely identify you for the purposes of authorizing access to protected content.
+        </message>
+        <message name="IDS_PROTECTED_CONTENT_ENABLE" desc="The label of the checkbox for enabling protected content.">
+          Allow identifiers for protected content (computer restart may be required)
+        </message>
+        <message name="IDS_PROTECTED_CONTENT_HEADER" desc="Text label for the managing exceptions of Protected Content.">
+          Protected content exceptions
+        </message>
+      </if>
+      <message name="IDS_PPAPI_BROKER_TAB_LABEL" desc="Label for PPAPI broker tab on Content Settings dialog">
+        Unsandboxed plug-in access
+      </message>
+      <message name="IDS_PPAPI_BROKER_HEADER" desc="Label for PPAPI broker tab exception management page on Content Settings dialog">
+        Unsandboxed plug-in access exceptions
+      </message>
+      <message name="IDS_PPAPI_BROKER_ALLOW_RADIO" desc="A radio button in Content Settings dialog to allow all sites to access the PPAPI broker.">
+        Allow all sites to use a plug-in to access your computer
+      </message>
+      <message name="IDS_PPAPI_BROKER_BLOCK_RADIO" desc="A radio button in Content Settings dialog to deny all sites to access the PPAPI broker.">
+        Do not allow any sites to use a plug-in to access your computer
+      </message>
+      <message name="IDS_PPAPI_BROKER_ASK_RADIO" desc="A radio button in Content Settings dialog to allow site to query the permision to access the PPAPI broker.">
+        Ask when a site wants to use a plug-in to access your computer (recommended)
+      </message>
+
+      <message name="IDS_EXCEPTIONS_MANAGE" desc="The label on the button that launches the exceptions management page for a given content type">
+        Manage exceptions...
+      </message>
+      <message name="IDS_COOKIES_SHOW_COOKIES_BUTTON" desc="A button in the Content Settings dialog for showing cookies and other stored site data.">
+        All cookies and site data...
+      </message>
+      <message name="IDS_HANDLERS_MANAGE" desc="The label on the button that launches the exceptions management page for a given content type">
+        Manage handlers...
+      </message>
+
+      <message name="IDS_ZOOMLEVELS_HEADER_AND_TAB_LABEL" desc="Label for Zoom Level tab and a header the on Content Settings dialog (zoom levels indicate that a page should be shown for example at 110% magnification).">
+        Zoom Levels
+      </message>
+      <message name="IDS_ZOOMLEVELS_MANAGE_BUTTON" desc="Button on the Content Settings dialog that opens a dialog to manage your page zoom levels (zoom levels indicate that a page should be shown for example at 110% magnification).">
+        Manage...
+      </message>
+
+      <message name="IDS_WEBSITE_SETTINGS_TITLE" desc="Title for Website Settings dialog.">
+        Manage sites
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_EDIT_TITLE" desc="Title for Website Settings site edit dialog.">
+        Site settings
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_COOKIES_DESCRIPTION" desc="Label for granting cookies permission on the Website Settings single site view dialog.">
+        Stores data
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_DOWNLOAD_DESCRIPTION" desc="Label for granting multiple automatic downloads permission on the Website Settings single site view dialog.">
+        Automatic downloads
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_JAVASCRIPT_DESCRIPTION" desc="Label for granting scripts permission on the Website Settings single site view dialog.">
+        Runs scripts
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_IMAGES_DESCRIPTION" desc="Label for granting images permission on the Website Settings single site view dialog.">
+        Displays images
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_LOCATION_DESCRIPTION" desc="Label for granting geolocation permission on the Website Settings single site view dialog.">
+        Knows device location
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_MANAGE" desc="The label on the button that launches the Websites Settings dialog.">
+        Manage...
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_MEDIASTREAM_DESCRIPTION" desc="Label for granting mediastream permission on the Website Settings single site view dialog.">
+        Uses camera and microphone
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_NOTIFICATIONS_DESCRIPTION" desc="Label for granting notifications permission on the Website Settings single site view dialog.">
+        Shows notifications
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_PLUGINS_DESCRIPTION" desc="Label for granting plugins permission on the Website Settings single site view dialog.">
+        Uses plugins
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_POPUPS_DESCRIPTION" desc="Label for granting popup permission on the Website Settings single site view dialog.">
+        Displays popups
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_SEARCH_ORIGINS" desc="Placeholder text shown in the search box in the Website Settings dialog.">
+        Search sites
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_STORAGE_USED" desc="The status text for how much local storage a website origin is using.">
+        <ph name="USAGE">$1<ex>2.0 KB</ex></ph> stored data
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_BATTERY_USED" desc="The status text for how much power a website origin is using.">
+        <ph name="USAGE">$1<ex>16</ex></ph>% of battery
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_STORAGE_CLEAR_BUTTON" desc="The 'Clear' button in the Website Settings single site view dialog.">
+        Clear
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_BATTERY_STOP_BUTTON" desc="The 'Stop' button in the Website Settings single site view dialog.">
+        Stop
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_BATTERY_PERCENT" desc="The percent from 1 to 100 of battery consumption from a given origin or app on the Website Settings dialog.">
+        <ph name="VALUE">$1<ex>100</ex></ph>%
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_BATTERY_ZERO_PERCENT" desc="The percent shown when less than 1% of battery was consumed from a given origin or app on the Website Settings dialog.">
+        &lt;1%
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_ALLOWED_LIST_TITLE" desc="Label above the list of allowed origins for a given permission on the Website Settings dialog.">
+        Allowed
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_BLOCKED_LIST_TITLE" desc="Label above the list of blocked origins for a given permission on the Website Settings dialog.">
+        Blocked
+      </message>
+      <message name="IDS_WEBSITE_SETTINGS_CONTENT_SETTING_ENABLED" desc="Label next to the checkbox that enables/disables a content setting.">
+        On
+      </message>
+
+
+      <!-- Automatic updates -->
+      <if expr="is_macosx">
+        <message name="IDS_PROMOTE_INFOBAR_TEXT" desc="The text to show in the automatic update setup info bar.  Mac-only.">
+          <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> may not be able to keep itself updated.
+        </message>
+        <message name="IDS_PROMOTE_INFOBAR_PROMOTE_BUTTON" desc="The 'Set up automatic updates' button in the automatic update setup info bar.  Mac-only.">
+          Set up automatic updates
+        </message>
+        <message name="IDS_PROMOTE_INFOBAR_DONT_ASK_BUTTON" desc="The 'Don't ask again' button in the automatic update setup info bar.  Mac-only.">
+          Don't ask again
+        </message>
+        <message name="IDS_PROMOTE_AUTHENTICATION_PROMPT" desc="The prompt displayed in the authentication dialog when setting up automatic updates for all users.  The system will add a sentence asking for an administrator's name and password.  Mac-only.">
+          <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will set up automatic updates for all users of this computer.
+        </message>
+      </if>
+
+      <!-- About Chrome View -->
+      <if expr="is_macosx">
+        <message name="IDS_ABOUT_CHROME_PROMOTE_UPDATER" desc="The 'Set Up Automatic Updates for All Users' button in the About window.  Mac-only.">
+          Set Up Automatic Updates for All Users
+        </message>
+      </if>
+      <message name="IDS_UPGRADE_CHECK_STARTED" desc="Status label: About to start checking for updates">
+        Checking for updates...
+      </message>
+      <if expr="is_win or is_macosx">
+        <message name="IDS_UPGRADE_ERROR" desc="Status label: Error occurred during upgrade">
+          Update failed (error: <ph name="ERROR_NUMBER">$1<ex>1</ex></ph>)
+        </message>
+      </if>
+      <if expr="is_win or chromeos">
+        <message name="IDS_UPGRADE_DISABLED_BY_POLICY" desc="Status label: Upgrades disabled by policy">
+          Updates are disabled by the administrator
+        </message>
+      </if>
+      <if expr="is_win">
+        <message name="IDS_UPGRADE_DISABLED_BY_POLICY_MANUAL" desc="Status label: Manual upgrades disabled by policy, automatic upgrades ok">
+          Manual updates are disabled by the administrator.  Automatic updates are enabled.
+        </message>
+      </if>
+      <message name="IDS_REPORT_AN_ISSUE" desc="Text of the button which allows the user to report an issue with Chrome.">
+        Report an issue
+      </message>
+
+      <!-- settings reset bubble messages -->
+      <message name="IDS_RESETTING" desc="Text for the button, once the user clicked to reset settings.">
+        Resetting...
+      </message>
+      <message name="IDS_NO_THANKS" desc="Text for the button the user clicks to refuse settings reset.">
+        No thanks
+      </message>
+      <if expr="use_titlecase">
+        <message name="IDS_RESET_SETTINGS_MENU_ITEM" desc="In Title Case: Text for the Chrome menu option replacing Update required.">
+          Reset Altered <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> Settings
+        </message>
+      </if>
+      <if expr="not use_titlecase">
+        <message name="IDS_RESET_SETTINGS_MENU_ITEM" desc="Text for the Chrome menu option replacing Update required.">
+          Reset altered <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> settings
+        </message>
+      </if>
+      <message name="IDS_RESET_BUBBLE_TITLE" desc="Text for the title of the settings reset bubble view.">
+        Reset altered <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> settings?
+      </message>
+      <message name="IDS_RESET_BUBBLE_TEXT" desc="Text for the settings reset bubble view full description.">
+        <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> detected that your browser settings may have been changed without your knowledge. Would you like to reset them to their original defaults?
+      </message>
+      <message name="IDS_REPORT_BUBBLE_TEXT" desc="Text for the settings reset bubble reporting checkbox.">
+        Help make Google Chrome better by reporting the current settings
+      </message>
+
+      <!-- SRT bubble messages -->
+      <message name="IDS_SRT_BUBBLE_DOWNLOAD_BUTTON_TEXT" desc="Download button of the software removal tool bubble">
+        Get the Software Removal Tool
+      </message>
+
+      <!-- Upgrade bubble messages -->
+      <message name="IDS_REENABLE_UPDATES" desc="Text for the button the user clicks to re-enable automatic updates.">
+        Enable autoupdate
+      </message>
+      <message name="IDS_LATER" desc="Text for the button the user clicks to be reminded of reinstalling the app later.">
+        Later
+      </message>
+
+      <!-- Print -->
+      <message name="IDS_DEFAULT_PRINT_DOCUMENT_TITLE" desc="Default title for a print document">
+        Untitled Document
+      </message>
+      <message name="IDS_PRINT_SPOOL_FAILED_TITLE_TEXT" desc="Title of a message box when printing fails because of printer issues.">
+        Print Failed
+      </message>
+      <message name="IDS_PRINT_SPOOL_FAILED_ERROR_TEXT" desc="Text in a messagebox when printing fails because of printer issues.">
+        Something went wrong when trying to print.  Please check your printer and try again.
+      </message>
+
+      <!-- Cloud Print proxy strings -->
+      <message name="IDS_CLOUD_PRINT_CHROMEOS_OPTION_LABEL" desc="Label for the cloud print section of the Chrome OS advanced options dialog.">
+        Set up or manage printers in <ph name="CLOUD_PRINT_NAME">$1<ex>Google Cloud Print</ex></ph>.
+      </message>
+      <message name="IDS_CLOUD_PRINT_REGISTER_PRINTER_FAILED" desc="Status message to be sent to the server when we failed to retrieve information about a printer to register.">
+        An error occurred while retrieving printer capabilities for printer <ph name="PRINTER_NAME">$1<ex>HP Laserjet 7900</ex></ph>. This printer could not be registered with <ph name="CLOUD_PRINT_NAME">$2<ex>Google Cloud Print</ex></ph>.
+      </message>
+      <message name="IDS_CLOUD_PRINT_ZOMBIE_PRINTER" desc="Status message to be sent to the server when we get a notification for a printer that we can't find locally.">
+        Received a notification for an unknown printer.
+      </message>
+      <message name="IDS_CLOUD_PRINT_ENUM_FAILED" desc="Status message to be sent to the Cloud Print server when enumerating printers failed.">
+        There was a problem listing printers. Some of your printers may not have registered successfully with <ph name="CLOUD_PRINT_NAME">$1<ex>Google Cloud Print</ex></ph>.
+      </message>
+      <message name="IDS_SERVICE_CRASH_RECOVERY_CONTENT" desc="Text content telling the user the service process has crashed.">
+        The <ph name="CLOUD_PRINT_NAME">$1<ex>Google Cloud Print</ex></ph> connector process has crashed. Restart?
+      </message>
+
+      <!-- Print Preview -->
+      <if expr="enable_printing">
+        <message name="IDS_PRINT_INVALID_PRINTER_SETTINGS" desc="Message to display when selected printer is not reachable or its settings are invalid.">
+          The selected printer is not available or not installed correctly.  Check your printer or try selecting another printer.
+        </message>
+      </if>
+      <if expr="enable_full_printing">
+        <message name="IDS_PRINT_PREVIEW_TITLE" desc="Fallback title for print preview page.">
+          Print
+        </message>
+        <if expr="chromeos">
+          <message name="IDS_PRINT_PREVIEW_GOOGLE_CLOUD_PRINT_TITLE" desc="Fallback title for print preview page on Chrome OS.">
+            Google Cloud Print
+          </message>
+        </if>
+        <message name="IDS_PRINT_PREVIEW_LOADING" desc="Message to display while the print preview is still loading.">
+          Loading preview
+        </message>
+        <message name="IDS_PRINT_PREVIEW_FAILED" desc="Message to display when print preview fails.">
+          Print preview failed.
+        </message>
+        <message name="IDS_PRINT_PREVIEW_PRINT_BUTTON" desc="Print button.">
+          Print
+        </message>
+        <message name="IDS_PRINT_PREVIEW_SAVE_BUTTON" desc="Save button.">
+          Save
+        </message>
+        <message name="IDS_PRINT_PREVIEW_PRINTING" desc="Text shown after the user clicks on the print button and before the print preview tab is closed to let him know that printing is in progress.">
+          Printing...
+        </message>
+        <message name="IDS_PRINT_PREVIEW_PRINTING_TO_PDF_IN_PROGRESS" desc="Text shown after the user clicks on the print/save button while Save To PDF is selected, but the PDF file is not ready yet.">
+          Saving to PDF in progress
+        </message>
+        <if expr="is_macosx">
+          <message name="IDS_PRINT_PREVIEW_OPENING_PDF_IN_PREVIEW" desc="Text shown after the user clicks on the open pdf in preview button while the pdf file is not ready yet.">
+          Opening PDF in Preview
+          </message>
+        </if>
+        <message name="IDS_PRINT_PREVIEW_OPTION_ALL_PAGES" desc="Option to print all pages.">
+          All
+        </message>
+        <message name="IDS_PRINT_PREVIEW_DESTINATION_LABEL" desc="Destination option label. It is displayed right on top of the available printers list.">
+          Destination
+        </message>
+        <message name="IDS_PRINT_PREVIEW_OPTION_BW" desc="Option to print in black and white.">
+          Black and white
+        </message>
+        <message name="IDS_PRINT_PREVIEW_OPTION_COLLATE" desc="Option to collate multiple copies.">
+          Collate
+        </message>
+        <message name="IDS_PRINT_PREVIEW_OPTION_COLOR" desc="Option to print in color.">
+          Color
+        </message>
+        <message name="IDS_PRINT_PREVIEW_OPTION_LANDSCAPE" desc="Option to print in landscape mode.">
+          Landscape
+        </message>
+        <message name="IDS_PRINT_PREVIEW_OPTION_PORTRAIT" desc="Option to print in portrait mode.">
+          Portrait
+        </message>
+        <message name="IDS_PRINT_PREVIEW_OPTION_TWO_SIDED" desc="Option to do two-sided (duplex) printing.">
+          Two-sided
+        </message>
+        <message name="IDS_PRINT_PREVIEW_PAGES_LABEL" desc="Page range option label.">
+          Pages
+        </message>
+        <message name="IDS_PRINT_PREVIEW_LAYOUT_LABEL" desc="Layout option label.">
+          Layout
+        </message>
+        <message name="IDS_PRINT_PREVIEW_COPIES_LABEL" desc="Copies option label.">
+          Copies
+        </message>
+        <message name="IDS_PRINT_PREVIEW_EXAMPLE_PAGE_RANGE_TEXT" desc="Example page range text.">
+          e.g. 1-5, 8, 11-13
+        </message>
+        <message name="IDS_PRINT_PREVIEW_PAGE_RANGE_TEXT" desc="Aria-label page range text.">
+          page range text box
+        </message>
+        <message name="IDS_PRINT_PREVIEW_PAGE_RANGE_RADIO" desc="Aria-label page range radio.">
+          page range radio button
+        </message>
+        <message name="IDS_PRINT_PREVIEW_PRINT_TO_PDF"
+                 desc="Option shown on printer drop-down list for saving previewed document as a PDF.">
+          Save as PDF
+        </message>
+        <message name="IDS_PRINT_PREVIEW_PRINT_WITH_CLOUD_PRINT_WAIT"
+            desc="Message shown in the print preview page after choosing cloud print before the dialog displays">
+          Loading <ph name="CLOUD_PRINT_NAME">$1<ex>Google Cloud Print</ex></ph>
+        </message>
+        <message name="IDS_PRINT_PREVIEW_SUMMARY_FORMAT_LONG" desc="Print summary, explaining to the user how many pages will be printed.">
+          Total: <ph name="NUMBER_OF_SHEETS">$1<ex>10</ex></ph> <ph name="SHEETS_LABEL">$2<ex>sheets of paper</ex></ph> (<ph name="NUMBER_OF_PAGES">$3<ex>4</ex></ph> <ph name="PAGE_OR_PAGES_LABEL">$4<ex>Pages</ex></ph>)
+        </message>
+        <message name="IDS_PRINT_PREVIEW_SUMMARY_FORMAT_SHORT" desc="Print summary, explaining to the user how many pages will be printed.">
+          Total: <ph name="NUMBER_OF_SHEETS">$1<ex>10</ex></ph> <ph name="SHEETS_LABEL">$2<ex>sheets of paper</ex></ph>
+        </message>
+        <message name="IDS_PRINT_PREVIEW_SHEETS_LABEL_PLURAL" desc="Label shown in the print preview summary.">
+          sheets of paper
+        </message>
+        <message name="IDS_PRINT_PREVIEW_SHEETS_LABEL_SINGULAR" desc="Label shown in the print preview summary.">
+          sheet of paper
+        </message>
+        <message name="IDS_PRINT_PREVIEW_PAGE_LABEL_SINGULAR" desc="Label shown in the print preview summary.">
+          page
+        </message>
+        <message name="IDS_PRINT_PREVIEW_PAGE_LABEL_PLURAL" desc="Label shown in the print preview summary.">
+          pages
+        </message>
+        <if expr="is_macosx">
+          <message name="IDS_PRINT_PREVIEW_OPEN_PDF_IN_PREVIEW_APP" desc="Option allowing the user to open the pdf in native preview app">
+          Open PDF in Preview
+          </message>
+        </if>
+        <message name="IDS_PRINT_PREVIEW_SYSTEM_DIALOG_OPTION" desc="Option allowing the user to access advanced printer settings using the native print system dialog instead of printing through the print preview mechanism. Shortcut key is not translated">
+          Print using system dialog... <ph name="SHORTCUT_KEY">$1<ex>(Shift+Ctrl+P)</ex></ph>
+        </message>
+        <if expr="chromeos">
+          <message name="IDS_PRINT_PREVIEW_CLOUD_DIALOG_OPTION" desc="Option allowing the user to access advanced printer settings using the cloud print dialog instead of printing through the print preview mechanism.">
+            Print using <ph name="CLOUD_PRINT_NAME">$1<ex>Google Cloud Print</ex></ph> dialog... <ph name="SHORTCUT_KEY">$2<ex>(Shift+Ctrl+P)</ex></ph>
+          </message>
+        </if>
+        <message name="IDS_PRINT_PREVIEW_CLOUD_DIALOG_OPTION_NO_SHORTCUT" desc="Option allowing the user to access advanced printer settings using the cloud print dialog instead of printing through the print preview mechanism without a shortcut key.">
+          Print using <ph name="CLOUD_PRINT_NAME">$1<ex>Google Cloud Print</ex></ph> dialog...
+        </message>
+        <message name="IDS_PRINT_PREVIEW_PAGE_RANGE_INSTRUCTION" desc="Instruction shown when the user enters an invalid page range.">
+          Invalid page range, use <ph name="EXAMPLE_PAGE_RANGE">$1<ex>e.g. 1-5, 8, 11-13</ex></ph>
+        </message>
+        <message name="IDS_PRINT_PREVIEW_COPIES_INSTRUCTION" desc="Instruction shown when the user enters an invalid number of copies.">
+          Use a number to indicate how many copies to print (1 or more).
+        </message>
+        <message name="IDS_PRINT_PREVIEW_INCREMENT_TITLE" desc="Title shown when the user hovers mouse over the increment button. Also added for improved accessibility">
+          Increment
+        </message>
+        <message name="IDS_PRINT_PREVIEW_DECREMENT_TITLE" desc="Title shown when the user hovers mouse over the decrement button. Also added for improved accessibility">
+          Decrement
+        </message>
+        <message name="IDS_PRINT_PREVIEW_PRINT_PAGES_LABEL" desc="ARIA label used by screen reader to explain the purpose of the page selection textbox">
+          Print Specific Pages
+        </message>
+        <message name="IDS_PRINT_PREVIEW_OPTIONS_LABEL" desc="Options label currently providing the choice to print headers and footers.">
+          Options
+        </message>
+        <message name="IDS_PRINT_PREVIEW_OPTION_HEADER_FOOTER" desc="Checkbox label that provides a choice to print the headers and footers.">
+          Headers and footers
+        </message>
+        <message name="IDS_PRINT_PREVIEW_OPTION_FIT_TO_PAGE" desc="Checkbox label shown in print preview page to auto fit the PDF page.">
+          Fit to page
+        </message>
+        <message name="IDS_PRINT_PREVIEW_OPTION_BACKGROUND_COLORS_AND_IMAGES" desc="Checkbox label shown in print preview page to print webpage backgrounds.">
+          Background graphics
+        </message>
+        <message name="IDS_PRINT_PREVIEW_OPTION_SELECTION_ONLY" desc="Checkbox label shown in print preview page to print only selected content.">
+          Selection only
+        </message>
+        <message name="IDS_PRINT_PREVIEW_MARGINS_LABEL" desc="Margins option label. Provides user the option to change the margins of the printed page.">
+          Margins
+        </message>
+        <message name="IDS_PRINT_PREVIEW_DEFAULT_MARGINS" desc="Option that specifies the page be printed with default margins.">
+          Default
+        </message>
+        <message name="IDS_PRINT_PREVIEW_NO_MARGINS" desc="Option that specifies the page be printed with no margins.">
+          None
+        </message>
+        <message name="IDS_PRINT_PREVIEW_CUSTOM_MARGINS" desc="Option that specifies the page be printed with user-specified custom margins.">
+          Custom
+        </message>
+        <message name="IDS_PRINT_PREVIEW_MINIMUM_MARGINS" desc="Option that specifies the page be printed with the minimum allowed margins by the printer.">
+          Minimum
+        </message>
+        <message name="IDS_PRINT_PREVIEW_TOP_MARGIN_LABEL" desc="ARIA label used by screen reader to explain the purpose of the top margin textbox.">
+          Top margin
+        </message>
+        <message name="IDS_PRINT_PREVIEW_BOTTOM_MARGIN_LABEL" desc="ARIA label used by screen reader to explain the purpose of the bottom margin textbox.">
+          Bottom margin
+        </message>
+        <message name="IDS_PRINT_PREVIEW_LEFT_MARGIN_LABEL" desc="ARIA label used by screen reader to explain the purpose of the left margin textbox.">
+          Left margin
+        </message>
+        <message name="IDS_PRINT_PREVIEW_RIGHT_MARGIN_LABEL" desc="ARIA label used by screen reader to explain the purpose of the right margin textbox.">
+          Right margin
+        </message>
+        <message name="IDS_PRINT_PREVIEW_MEDIA_SIZE_LABEL" desc="Media size option label. Provides user the option to change the size of the printed page.">
+          Paper size
+        </message>
+        <message name="IDS_PRINT_PREVIEW_NATIVE_DIALOG" desc="Option offering the user to open the native print dialog, displayed when the PDF viewer is missing or when print preview fails.">
+          Print using system dialog…
+        </message>
+        <message name="IDS_PRINT_PREVIEW_DESTINATION_SEARCH_TITLE" desc="Title of the destination search UI component.">
+          Select a destination
+        </message>
+        <message name="IDS_PRINT_PREVIEW_ACCOUNT_SELECT_TITLE" desc="Title of the user's account selection control, to choose the account destinations are being shown for.">
+          Showing destinations for
+        </message>
+        <message name="IDS_PRINT_PREVIEW_ADD_ACCOUNT_TITLE" desc="Title of the selection control item to let user to sign into another account.">
+          Add account...
+        </message>
+        <message name="IDS_PRINT_PREVIEW_CLOUD_PRINT_PROMOTION" desc="Message describing features of Google Cloud Print.">
+          Print to Google Docs and other cloud destinations. <ph name="BEGIN_LINK">$1<ex>&lt;span&gt;</ex></ph>Sign in<ph name="END_LINK">$2<ex>&lt;/span&gt;</ex></ph> to print to Google Cloud Print.
+        </message>
+        <message name="IDS_PRINT_PREVIEW_SEARCH_BOX_PLACEHOLDER" desc="Text to put in a search box when user has not entered a search query.">
+          Search destinations
+        </message>
+        <message name="IDS_PRINT_PREVIEW_NO_DESTINATIONS_MESSAGE" desc="Message to show when no destinations were found.">
+          No destinations found
+        </message>
+        <message name="IDS_PRINT_PREVIEW_SHOW_ALL_BUTTON_TEXT" desc="Label on a button to show all print destinations.">
+          Show All...
+        </message>
+        <message name="IDS_PRINT_PREVIEW_DESTINATION_COUNT" desc="Message to show how many print destinations the user has.">
+          (<ph name="COUNT">$1<ex>154</ex></ph> total)
+        </message>
+        <message name="IDS_PRINT_PREVIEW_RECENT_DESTINATIONS_TITLE" desc="Title of the section of recently used print destinations.">
+          Recent Destinations
+        </message>
+        <message name="IDS_PRINT_PREVIEW_LOCAL_DESTINATIONS_TITLE" desc="Title of the section of local print destinations.">
+          Local Destinations
+        </message>
+        <message name="IDS_PRINT_PREVIEW_CLOUD_DESTINATIONS_TITLE" desc="Title of the section of cloud print destinations.">
+          Google Cloud Print
+        </message>
+        <message name="IDS_PRINT_PREVIEW_MANAGE" desc="Text of link to manage printers.">
+          Manage...
+        </message>
+        <message name="IDS_PRINT_PREVIEW_SETUP_CLOUD_PRINTERS" desc="Text of link to set up cloud printers.">
+          Set up to add printers…
+        </message>
+        <message name="IDS_PRINT_PREVIEW_CHANGE_DESTINATION" desc="Label on button to change print destination." meaning="Label text">
+          Change...
+        </message>
+        <message name="IDS_PRINT_PREVIEW_OFFLINE_FOR_YEAR" desc="Shown when printer has been offline for more than a year.">
+          Offline for more than a year
+        </message>
+        <message name="IDS_PRINT_PREVIEW_OFFLINE_FOR_MONTH" desc="Shown when printer has been offline for more than a month.">
+          Offline for more than a month
+        </message>
+        <message name="IDS_PRINT_PREVIEW_OFFLINE_FOR_WEEK" desc="Shown when printer has been offline for more than a week.">
+          Offline for more than a week
+        </message>
+        <message name="IDS_PRINT_PREVIEW_OFFLINE" desc="Shown when printer is currently offline.">
+          Currently offline
+        </message>
+        <message name="IDS_PRINT_PREVIEW_FEDEX_TOS" desc="Terms-of-service for using the FedEx Office printer.">
+          By printing to FedEx Office, you accept their <ph name="START_LINK">$1</ph>terms of use<ph name="END_LINK">$2</ph>.
+        </message>
+        <message name="IDS_PRINT_PREVIEW_TOS_CHECKBOX_LABEL" desc="Label of the terms-of-service agreement checkbox.">
+          I agree
+        </message>
+        <message name="IDS_PRINT_PREVIEW_NO_DESTS_PROMO_TITLE" desc="Title of promotion shown when user has no Google Cloud Print printers.">
+          Add Printers
+        </message>
+        <message name="IDS_PRINT_PREVIEW_NO_DESTS_PROMO_BODY" desc="Main body of promotion shown when user has no Google Cloud Print printers.">
+          You can add printers to your computer by clicking the "Add a printer"
+          button below. If you have no printers to add, you'll still be able to save
+          a PDF or save to Google Drive.
+        </message>
+        <message name="IDS_PRINT_PREVIEW_NO_DESTS_GCP_DESC" desc="A description of the Google Cloud Print service.">
+          Adding your printers to Google Cloud Print allows you to print from
+          anywhere, to anywhere. Share your printers with whoever you choose and
+          print to them from Chrome, your phone, tablet, PC, or any other
+          web-connected device.
+        </message>
+        <message name="IDS_PRINT_PREVIEW_NO_DESTS_PROMO_ADD_PRINTER_BUTTON_LABEL" desc="Label of button to setup Google Cloud Print printers.">
+          Add a printer
+        </message>
+        <message name="IDS_MORE_OPTIONS_LABEL" desc="Label of the toggle element to switch between showing more or less printing options in the Print Preview.">
+          More settings
+        </message>
+        <message name="IDS_LESS_OPTIONS_LABEL" desc="Label of the toggle element to switch between showing more or less printing options in the Print Preview.">
+          Fewer settings
+        </message>
+        <message name="IDS_PRINT_PREVIEW_NO_DESTS_PROMO_NOT_NOW_BUTTON_LABEL" desc="Label of button to cancel the Google Cloud Print promotion.">
+          Not now
+        </message>
+        <message name="IDS_PRINT_PREVIEW_COULD_NOT_PRINT" desc="Error message when printing fails in the print preview">
+          Printing failed. Please check your printer and try again.
+        </message>
+        <message name="IDS_PRINT_PREVIEW_REGISTER_PROMO_BUTTON_TEXT">
+          Register
+        </message>
+        <message name="IDS_PRINT_PREVIEW_ADVANCED_SETTINGS_SEARCH_BOX_PLACEHOLDER" desc="Text to put in a advanced settings search box when user has not entered a search query.">
+          Search settings
+        </message>
+        <message name="IDS_PRINT_PREVIEW_ADVANCED_SETTINGS_DIALOG_TITLE" desc="Title of the advanced printer settings selection dialog.">
+          Advanced settings for <ph name="PRINTING_DESTINATION">$1<ex>Office printer</ex></ph>
+        </message>
+        <message name="IDS_PRINT_PREVIEW_NO_ADVANCED_SETTINGS_MATCH_SEARCH_HINT" desc="Message to display in the printer advanced settings dialog when no settings match search string entered by the user.">
+          No matches were found.
+        </message>
+        <message name="IDS_PRINT_PREVIEW_ADVANCED_SETTINGS_DIALOG_CONFIRM" desc="In title case: The text for the accept button on the printer advanced settings dialog.">
+          Apply
+        </message>
+        <message name="IDS_PRINT_PREVIEW_ADVANCED_OPTIONS_LABEL" desc="Printer advanced options section label.">
+          Advanced
+        </message>
+        <message name="IDS_PRINT_PREVIEW_SHOW_ADVANCED_OPTIONS" desc="The text for the button to open the printer's advanced settings dialog.">
+          Change printer options...
+        </message>
+        <message name="IDS_PRINT_PREVIEW_ACCEPT_INVITE" desc="Text for the button to accept the printer-sharing invitation.">
+          Accept
+        </message>
+        <message name="IDS_PRINT_PREVIEW_ACCEPT_GROUP_INVITE" desc="Text for the button to accept the printer-sharing invitation for the group of users.">
+          Accept for group
+        </message>
+        <message name="IDS_PRINT_PREVIEW_REJECT_INVITE" desc="Text for the button to reject the printer-sharing invitation.">
+          Reject
+        </message>
+        <message name="IDS_PRINT_PREVIEW_GROUP_INVITE_TEXT" desc="Message to show when the user has pending printer-sharing invitation for the group of users he is a manager of.">
+          &lt;strong&gt;<ph name="SENDER">$1</ph>&lt;/strong&gt; wants to share a printer &lt;strong&gt;<ph name="PRINTER_NAME">$2</ph>&lt;/strong&gt; with a group you own: &lt;strong&gt;<ph name="GROUP_NAME">$3</ph>&lt;/strong&gt;. If you accept, all group members will be able to print to the printer.
+        </message>
+        <message name="IDS_PRINT_PREVIEW_INVITE_TEXT" desc="Message to show when the user has pending printer-sharing invitation.">
+          &lt;strong&gt;<ph name="SENDER">$1</ph>&lt;/strong&gt; wants to share a printer &lt;strong&gt;<ph name="PRINTER_NAME">$2</ph>&lt;/strong&gt; with you.
+        </message>
+      </if>
+
+      <!-- Load State -->
+      <message name="IDS_LOAD_STATE_WAITING_FOR_SOCKET_SLOT" desc="Status text when Chrome is at its connection limit, and is waiting for a URL request to complete to free up a connection.">
+        Waiting for available socket...
+      </message>
+      <message name="IDS_LOAD_STATE_WAITING_FOR_DELEGATE">
+        Waiting for <ph name="LOAD_STATE_PARAMETER">$1<ex>extension Adblock</ex></ph>...
+      </message>
+      <message name="IDS_LOAD_STATE_WAITING_FOR_DELEGATE_GENERIC" desc="Generic status text when network is waiting on some local processing to occur.">
+        Processing request...
+      </message>
+      <message name="IDS_LOAD_STATE_WAITING_FOR_CACHE">
+        Waiting for cache...
+      </message>
+      <message name="IDS_LOAD_STATE_WAITING_FOR_APPCACHE">
+        Waiting for AppCache...
+      </message>
+      <message name="IDS_LOAD_STATE_ESTABLISHING_PROXY_TUNNEL">
+        Waiting for proxy tunnel...
+      </message>
+      <message name="IDS_LOAD_STATE_RESOLVING_PROXY_FOR_URL">
+        Resolving proxy...
+      </message>
+      <message name="IDS_LOAD_STATE_RESOLVING_HOST_IN_PROXY_SCRIPT">
+        Resolving host in proxy script...
+      </message>
+      <message name="IDS_LOAD_STATE_DOWNLOADING_PROXY_SCRIPT">
+        Downloading proxy script...
+      </message>
+      <message name="IDS_LOAD_STATE_RESOLVING_HOST">
+        Resolving host...
+      </message>
+      <message name="IDS_LOAD_STATE_CONNECTING">
+        Connecting...
+      </message>
+      <message name="IDS_LOAD_STATE_SSL_HANDSHAKE">
+        Establishing secure connection...
+      </message>
+      <message name="IDS_LOAD_STATE_SENDING_REQUEST">
+        Sending request...
+      </message>
+      <message name="IDS_LOAD_STATE_SENDING_REQUEST_WITH_PROGRESS">
+        Uploading (<ph name="PROGRESS_PERCENT">$1<ex>27</ex></ph>%)...
+      </message>
+      <message name="IDS_LOAD_STATE_WAITING_FOR_RESPONSE">
+        Waiting for <ph name="HOST_NAME">$1<ex>www.google.com</ex></ph>...
+      </message>
+
+      <!-- Tab Context Menu -->
+      <if expr="not use_titlecase">
+        <message name="IDS_TAB_CXMENU_NEWTAB" desc="The label of the 'New Tab' Tab context menu item.">
+          New tab
+        </message>
+        <message name="IDS_TAB_CXMENU_RELOAD" desc="The label of the 'Reload' Tab context menu item.">
+          Reload
+        </message>
+        <message name="IDS_TAB_CXMENU_DUPLICATE" desc="The label of the 'Duplicate' Tab context menu item.">
+          Duplicate
+        </message>
+        <message name="IDS_TAB_CXMENU_CLOSETAB" desc="The label of the 'Close Tab' Tab context menu item. Used when closing a single tab.">
+          Close tab
+        </message>
+        <message name="IDS_TAB_CXMENU_CLOSETABS" desc="The label of the 'Close Tab' Tab context menu item. Used when closing more than one tab.">
+          Close tabs
+        </message>
+        <message name="IDS_TAB_CXMENU_CLOSEOTHERTABS" desc="The label of the 'Close Other Tabs' Tab context menu item.">
+          Close other tabs
+        </message>
+        <message name="IDS_TAB_CXMENU_CLOSETABSTORIGHT" desc="The label of the 'Close Tabs to the Right' Tab context menu item.">
+          Close tabs to the right
+        </message>
+        <message name="IDS_TAB_CXMENU_PIN_TAB" desc="The label of the tab context menu item for pinning a single tab.">
+          Pin tab
+        </message>
+        <message name="IDS_TAB_CXMENU_PIN_TABS" desc="The label of the tab context menu item for pinning more than one tab.">
+          Pin tabs
+        </message>
+        <message name="IDS_TAB_CXMENU_UNPIN_TAB" desc="The label of the tab context menu item for unpinning a single tab.">
+          Unpin tab
+        </message>
+        <message name="IDS_TAB_CXMENU_UNPIN_TABS" desc="The label of the tab context menu item for unpinning multiple tab.">
+          Unpin tabs
+        </message>
+        <message name="IDS_TAB_CXMENU_AUDIO_MUTE_TAB" desc="The label of the tab context menu item for muting a single tab.">
+          Mute tab
+        </message>
+        <message name="IDS_TAB_CXMENU_AUDIO_MUTE_TABS" desc="The label of the tab context menu item for muting more than one tab.">
+          Mute tabs
+        </message>
+        <message name="IDS_TAB_CXMENU_AUDIO_UNMUTE_TAB" desc="The label of the tab context menu item for unmuting a single tab.">
+          Unmute tab
+        </message>
+        <message name="IDS_TAB_CXMENU_AUDIO_UNMUTE_TABS" desc="The label of the tab context menu item for unmuting more than one tab.">
+          Unmute tabs
+        </message>
+        <message name="IDS_TAB_CXMENU_BOOKMARK_ALL_TABS" desc="The label of the tab context menu item for creating a bookmark folder containing an entry for each open tab.">
+          Bookmark all tabs...
+        </message>
+      </if>
+      <if expr="use_titlecase">
+        <message name="IDS_TAB_CXMENU_NEWTAB" desc="In Title Case: The label of the 'New Tab' Tab context menu item.">
+          New Tab
+        </message>
+        <message name="IDS_TAB_CXMENU_RELOAD" desc="In Title Case: The label of the 'Reload' Tab context menu item.">
+          Reload
+        </message>
+        <message name="IDS_TAB_CXMENU_DUPLICATE" desc="In Title Case: The label of the 'Duplicate' Tab context menu item.">
+          Duplicate
+        </message>
+        <message name="IDS_TAB_CXMENU_CLOSETAB" desc="In Title Case: The label of the 'Close Tab' Tab context menu item.">
+          Close Tab
+        </message>
+        <message name="IDS_TAB_CXMENU_CLOSETABS" desc="In Title Case: The label of the 'Close Tab' Tab context menu item when more than one tab is selected.">
+          Close Tabs
+        </message>
+        <message name="IDS_TAB_CXMENU_CLOSEOTHERTABS" desc="In Title Case: The label of the 'Close Other Tabs' Tab context menu item.">
+          Close Other Tabs
+        </message>
+        <message name="IDS_TAB_CXMENU_CLOSETABSTORIGHT" desc="In Title Case: The label of the 'Close Tabs to the Right' Tab context menu item.">
+          Close Tabs to the Right
+        </message>
+        <message name="IDS_TAB_CXMENU_PIN_TAB" desc="In Title Case: The label of the tab context menu item for pinning a tab.">
+          Pin Tab
+        </message>
+        <message name="IDS_TAB_CXMENU_PIN_TABS" desc="In Title Case: The label of the tab context menu item for pinning multiple tabs.">
+          Pin Tabs
+        </message>
+        <message name="IDS_TAB_CXMENU_UNPIN_TAB" desc="In Title Case: The label of the tab context menu item for unpinning a tab.">
+          Unpin Tab
+        </message>
+        <message name="IDS_TAB_CXMENU_UNPIN_TABS" desc="In Title Case: The label of the tab context menu item for unpinning multiple tabs.">
+          Unpin Tabs
+        </message>
+        <message name="IDS_TAB_CXMENU_AUDIO_MUTE_TAB" desc="In Title Case: The label of the tab context menu item for muting a single tab.">
+          Mute Tab
+        </message>
+        <message name="IDS_TAB_CXMENU_AUDIO_MUTE_TABS" desc="In Title Case: The label of the tab context menu item for muting more than one tab.">
+          Mute Tabs
+        </message>
+        <message name="IDS_TAB_CXMENU_AUDIO_UNMUTE_TAB" desc="In Title Case: The label of the tab context menu item for unmuting a single tab.">
+          Unmute Tab
+        </message>
+        <message name="IDS_TAB_CXMENU_AUDIO_UNMUTE_TABS" desc="In Title Case: The label of the tab context menu item for unmuting more than one tab.">
+          Unmute Tabs
+        </message>
+        <message name="IDS_TAB_CXMENU_BOOKMARK_ALL_TABS" desc="In Title Case: The label of the tab context menu item for creating a bookmark folder containing an entry for each open tab.">
+          Bookmark All Tabs...
+        </message>
+      </if>
+
+      <!-- Application window menu -->
+      <if expr="not use_titlecase">
+        <message name="IDS_APP_MENU_RELOAD" desc="The reload menu in application windows">
+          Reload
+        </message>
+        <message name="IDS_APP_MENU_NEW_WEB_PAGE" desc="The new webpage menu in application windows">
+          Open browser window
+        </message>
+      </if>
+      <if expr="use_titlecase">
+        <message name="IDS_APP_MENU_RELOAD" desc="In Title Case: The reload menu in application windows">
+          Reload
+        </message>
+        <message name="IDS_APP_MENU_NEW_WEB_PAGE" desc="In Title Case: The new webpage menu in application windows">
+          Open Browser Window
+        </message>
+      </if>
+
+      <!-- error page messages -->
+      <message name="IDS_ERRORPAGE_NET_BUTTON_DETAILS" desc="Label for the button that expands the details on a net error page">
+        Details
+      </message>
+      <message name="IDS_ERRORPAGE_NET_BUTTON_HIDE_DETAILS" desc="Label for the button that hides the details on a net error page">
+        Hide details
+      </message>
+      <message name="IDS_ERRORPAGES_BUTTON_MORE" desc="Label for the button that expands the details on an error page">
+        More
+      </message>
+      <message name="IDS_ERRORPAGES_BUTTON_LESS" desc="Label for the button that hides the details on an error page">
+        Less
+      </message>
+      <message name="IDS_ERRORPAGES_BUTTON_RELOAD" desc="Label for the button on an error page to reload the page">
+        Reload
+      </message>
+      <message name="IDS_ERRORPAGES_BUTTON_LOAD_STALE" desc="Label for the button on an error page to load a stale entry from the cache">
+        Show saved copy
+      </message>
+      <message name="IDS_ERRORPAGES_BUTTON_LOAD_STALE_HELP" desc="Explanation for the BUTTON_LOAD_STALE button">
+        Load a stale (i.e. known to be out of date) copy of this page.
+      </message>
+      <if expr="chromeos">
+        <message name="IDS_ERRORPAGES_BUTTON_DIAGNOSE" desc="Label for the button that invokes the connection diagnostic tool on the error page">
+          Diagnose errors...
+        </message>
+      </if>
+      <if expr="is_android">
+        <message name="IDS_ERRORPAGES_BUTTON_SETTINGS" desc="Mobile: Label for the button on an error page to launch system settings menu">
+          Settings
+        </message>
+      </if>
+
+      <message name="IDS_ERRORPAGES_SUGGESTION_RELOAD_REPOST_HEADER" desc="When a page fails to load, sometimes we suggest reloading a page.  In the case that reloading the page requires resubmitting data to a website, we use this as a header above a short set of instructions.">
+        Reload this webpage
+      </message>
+      <message name="IDS_ERRORPAGES_SUGGESTION_RELOAD_REPOST_BODY" desc="When a page fails to load, sometimes we suggest reloading a page.  In the case that reloading the page requires resubmitting data to a website, this is displayed below a short header.">
+        Press the reload button to resubmit the data needed to load the page.
+      </message>
+      <message name="IDS_ERRORPAGES_SUGGESTION_DISABLE_EXTENSION_HEADER" desc="When a page fails to load, we provide a suggestion that the user try disabling an extension that's blocking it.">
+        Disable your extensions and then reload this webpage
+      </message>
+      <message name="IDS_ERRORPAGES_SUGGESTION_CHECK_CONNECTION_HEADER" desc="When a page fails to load, sometimes we suggest checking the network connections.  This is a header above some details.">
+        Check your Internet connection
+      </message>
+      <message name="IDS_ERRORPAGES_SUGGESTION_CHECK_CONNECTION_BODY" desc="When a page fails to load, sometimes we suggest checking the network connections.  This contains details below the suggestion.">
+        Check any cables and reboot any routers, modems, or other network
+        devices you may be using.
+      </message>
+      <message name="IDS_ERRORPAGES_SUGGESTION_DNS_CONFIG_HEADER" desc="When a page fails to load, sometimes we suggest checking the DNS configuration.  This is a header above above some details.">
+        Check your DNS settings
+      </message>
+      <message name="IDS_ERRORPAGES_SUGGESTION_DNS_CONFIG_BODY" desc="When a page fails to load, sometimes we suggest checking the DNS configuration.  This contains details below the suggestion.">
+        Contact your network administrator if you're not sure what this means.
+      </message>
+      <message name="IDS_ERRORPAGES_SUGGESTION_NETWORK_PREDICTION_HEADER" desc="When a page fails to load, sometimes we suggest disabling predicting network actions.  This is a header above some details.">
+        Try disabling network prediction
+      </message>
+      <message name="IDS_ERRORPAGES_SUGGESTION_FIREWALL_CONFIG_BODY" desc="When a webpage fails to load, in some cases we suggest reconfiguring the firewall.  This contains details below the suggestion.">
+        If it is already listed as a program allowed to access the network, try
+        removing it from the list and adding it again.
+      </message>
+      <message name="IDS_ERRORPAGES_SUGGESTION_PROXY_CONFIG_HEADER" desc="When a webpage fails to load, in some cases we suggest checking the proxy server configuration, or disabling the proxy server.  This is a header above some details.">
+        If you use a proxy server...
+      </message>
+      <if expr="is_android or is_ios">
+        <message name="IDS_ERRORPAGES_SUGGESTION_PROXY_CONFIG_BODY" desc="When a webpage fails to load, in some cases we suggest checking the proxy server configuration, or disabling the proxy server.  These are instructions below a header.">
+          Check your proxy settings or contact your network administrator to
+          make sure the proxy server is working.
+          <ph name="PLATFORM_TEXT">$1<ex>Goto the wrench menu and choose Fix It.</ex></ph>
+        </message>
+      </if>
+      <if expr="not is_android and not is_ios">
+        <message name="IDS_ERRORPAGES_SUGGESTION_PROXY_CONFIG_BODY" desc="When a webpage fails to load, in some cases we suggest checking the proxy server configuration, or disabling the proxy server.  These are instructions below a header.">
+          Check your proxy settings or contact your network administrator to
+          make sure the proxy server is working. If you don't believe you should
+          be using a proxy server:
+          <ph name="PLATFORM_TEXT">$1<ex>Goto the wrench menu and choose Fix It.</ex></ph>
+        </message>
+      </if>
+      <if expr="chromeos">
+        <message name="IDS_ERRORPAGES_SUGGESTION_PROXY_DISABLE_PLATFORM" desc="ChromeOS instructions for disabling use of a proxy server.">
+          You can disable any proxies configured for a connection from the settings page.
+        </message>
+      </if>
+      <message name="IDS_ERRORPAGES_SUGGESTION_LEARNMORE_BODY" desc="When a webpage fails to load, we provide a link to the help center to learn more about the failure.">
+        <ph name="BEGIN_LINK">&lt;a jsvalues="href:learnMoreUrl"&gt;</ph>Learn more<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph> about this problem.
+      </message>
+      <message name="IDS_ERRORPAGES_SUGGESTION_VIEW_POLICIES_HEADER" desc="When a webpage fails to load, sometimes we suggest to the user to view the current policies.  This is a header above some instructions.">
+        Check your administrator's policies
+      </message>
+      <message name="IDS_ERRORPAGES_SUGGESTION_VIEW_POLICIES_BODY" desc="When a webpage fails to load, sometimes we suggest to the user to view the current policies.  These are instructions below a header.">
+        Visit &lt;strong&gt;chrome://policy&lt;/strong&gt; to see the list of blacklisted URLs and other policies enforced by your system administrator.
+      </message>
+      <message name="IDS_ERRORPAGES_SUGGESTION_CONTACT_ADMINISTRATOR_BODY" desc="When a webpage fails to load, sometimes we suggest to the user to contact his system administrator.">
+        Contact your system administrator for more information.
+      </message>
+      <message name="IDS_ERRORPAGES_SUGGESTION_VISIT_GOOGLE_CACHE" desc="When a page fails to load, sometimes we viewing a version of the page cached on Google's servers.">
+        Access a <ph name="BEGIN_LINK">&lt;a jsvalues="href:urlCorrection;.jstdata:$this" onmousedown="linkClicked(this.jstdata)"&gt;</ph>cached copy<ph name="END_LINK">&lt;/a&gt;</ph> of <ph name="URL">&lt;span jscontent="originalUrlForDisplay"&gt;&lt;/span&gt;<ex>www.hats-for-goats.com/shiny</ex></ph>
+      </message>
+      <message name="IDS_ERRORPAGES_SUGGESTION_CORRECTED_URL" desc="When a page fails to load, sometimes we suggest different URL because we think the one the user entered had a typo.">
+        Did you mean <ph name="LINK">&lt;a jsvalues="href:urlCorrection;.jstdata:$this" onmousedown="linkClicked(this.jstdata)" jscontent="urlCorrectionForDisplay"&gt;&lt;/a&gt;<ex>www.somewhere-spelled-correctly.com</ex></ph>?
+      </message>
+      <message name="IDS_ERRORPAGES_SUGGESTION_ALTERNATE_URL" desc="When a page fails to load, sometimes we suggest different URL (maybe a different page on the same site, or a site with similar content, for example).">
+        Go to <ph name="LINK">&lt;a jsvalues="href:urlCorrection;.jstdata:$this" onmousedown="linkClicked(this.jstdata)" jscontent="urlCorrectionForDisplay"&gt;&lt;/a&gt;<ex>www.somewhere.com</ex></ph>
+      </message>
+      <message name="IDS_ERRORPAGES_SUGGESTION_GOOGLE_SEARCH" desc="When a page fails to load, sometimes we suggest a specific Google search.  This appears just above a text input control.">
+        Search on Google
+      </message>
+      <message name="IDS_ERRORPAGES_TITLE_NOT_AVAILABLE" desc="Title of the error page when we can't connect to a site.">
+        <ph name="SITE">$1<ex>google.com</ex></ph> is not available
+      </message>
+      <message name="IDS_ERRORPAGES_TITLE_ACCESS_DENIED" desc="Title in the error page when a server returns a 403.  Also suitable for similar error codes.">
+        Access to <ph name="URL">$1<ex>http://www.google.com/foo/bar</ex></ph> denied.
+      </message>
+      <message name="IDS_ERRORPAGES_TITLE_NOT_FOUND" desc="Title of the error page when the server returns a 404 or 410.">
+        <ph name="URL">$1<ex>http://www.google.com/foo/bar</ex></ph> is not found
+      </message>
+      <message name="IDS_ERRORPAGES_TITLE_LOAD_FAILED" desc="Title of the error page when we can't load a page.">
+        <ph name="URL">$1<ex>http://some-unreliable-site.com/</ex></ph> failed to load
+      </message>
+      <message name="IDS_ERRORPAGES_TITLE_BLOCKED" desc="Title in the error page when a request is blocked (e.g. by an extension).">
+        <ph name="URL">$1<ex>http://www.google.com/foo/bar</ex></ph> was blocked
+      </message>
+      <message name="IDS_ERRORPAGES_HEADING_NOT_AVAILABLE" desc="Heading in the error page when we can't connect to a site.">
+        This webpage is not available
+      </message>
+      <message name="IDS_ERRORPAGES_HEADING_NETWORK_ACCESS_DENIED" desc="Heading of the error page when we're not being allowed to access the network.">
+        Unable to access the network
+      </message>
+      <message name="IDS_ERRORPAGES_HEADING_PROXY_CONNECTION_FAILED" desc="Heading in the error page when the proxy server connection failed.">
+        Unable to connect to the proxy server
+      </message>
+      <if expr="not is_android">
+        <message name="IDS_ERRORPAGES_HEADING_INTERNET_DISCONNECTED" desc="Heading of the error page when the network connection failed.">
+          Unable to connect to the Internet
+        </message>
+      </if>
+      <if expr="is_android">
+        <message name="IDS_ERRORPAGES_HEADING_INTERNET_DISCONNECTED" desc="Mobile: Heading of the error page when the network connection failed.">
+          You are offline.
+        </message>
+      </if>
+      <message name="IDS_ERRORPAGES_HEADING_CACHE_MISS" desc="Heading in the error page when we couldn't find a resource in the cache, and cannot fall back to the network.">
+        Cache miss
+      </message>
+      <message name="IDS_ERRORPAGES_HEADING_CACHE_READ_FAILURE" desc="Heading in the error page when we encountered an error reading from the cache.  Generally this happens when the disk cache is corrupted from improper shutdown.">
+        Cache read error
+      </message>
+      <message name="IDS_ERRORPAGES_HEADING_NETWORK_IO_SUSPENDED" desc="Heading in the error page when a page load failed due to the computer entering sleep/suspend mode.">
+        Network access suspended
+      </message>
+      <message name="IDS_ERRORPAGES_HEADING_NOT_FOUND" desc="Heading in the error page when the server returns a 404 or 410.">
+        This webpage is not found
+      </message>
+      <message name="IDS_ERRORPAGES_HEADING_TOO_MANY_REDIRECTS" desc="Heading in the error page when there are too many URL redirects.">
+        This webpage has a redirect loop
+      </message>
+      <message name="IDS_ERRORPAGES_HEADING_EMPTY_RESPONSE" desc="Heading in the error page when no data is received.">
+        No data received
+      </message>
+      <message name="IDS_ERRORPAGES_HEADING_DUPLICATE_HEADERS" desc="Heading in the error page when a response from the server contains duplicate headers.">
+        Duplicate headers received from server
+      </message>
+      <message name="IDS_ERRORPAGES_HEADING_WEAK_SERVER_EPHEMERAL_DH_KEY" desc="Heading of the error page when the server has a weak Diffie-Hellman public key. Diffie-Hellman is a technical term and the conjuction of two names so may be best left untranslated. 'key' here is used as the technical name for a large number with certain mathematical properties that allow it to be used to encrypt and decrypt data. 'weak' here means that the number is too small to resist an exhaustive attempt to find certain mathematical structures in it, the secrecy of which is critical.">
+        Server has a weak ephemeral Diffie-Hellman public key
+      </message>
+      <message name="IDS_ERRORPAGES_HEADING_BLOCKED" desc="Heading of the error page when a request is blocked by an extension.">
+        This webpage was blocked by an extension
+      </message>
+      <message name="IDS_ERRORPAGES_HEADING_BLOCKED_BY_ADMINISTRATOR" desc="Heading of the error page when a request is blocked by the administrator policy.">
+        Webpage Blocked
+      </message>
+      <message name="IDS_ERRORPAGES_SUMMARY_NOT_AVAILABLE" desc="Summary in the error page when we can't connect to a site.">
+        The webpage at <ph name="URL">&lt;strong jscontent="failedUrl"&gt;&lt;/strong&gt;</ph> might be temporarily down or it may have moved permanently to a new web address.
+      </message>
+      <message name="IDS_ERRORPAGES_SUMMARY_TIMED_OUT" desc="Summary in the error page when a page takes too long to load.">
+        <ph name="PRODUCT_NAME">&lt;span jscontent="productName"&gt;&lt;/span&gt;<ex>Google Chrome</ex></ph>
+        could not load the webpage because
+        <ph name="HOST_NAME">&lt;strong jscontent="hostName"&gt;&lt;/strong&gt;<ex>www.whatever.com</ex></ph>
+        took too long to respond.  The website may be down, or you may be
+        experiencing issues with your Internet connection.
+      </message>
+      <message name="IDS_ERRORPAGES_SUMMARY_CONNECTION_RESET" desc="Summary in the error page when the connection was reset.">
+        The connection to
+        <ph name="HOST_NAME">&lt;strong jscontent="hostName"&gt;&lt;/strong&gt;<ex>www.whatever.com</ex></ph>
+        was interrupted.
+      </message>
+      <message name="IDS_ERRORPAGES_SUMMARY_NETWORK_CHANGED" desc="Summary in the error page when the connection failed because the network has changed.">
+        The connection to
+        <ph name="HOST_NAME">&lt;strong jscontent="hostName"&gt;&lt;/strong&gt;<ex>www.whatever.com</ex></ph>
+        was interrupted by a change in the network connection.
+      </message>
+      <message name="IDS_ERRORPAGES_SUMMARY_CONNECTION_REFUSED" desc="Summary in the error page when we try and connect to a server, but the server doesn't let us.">
+        <ph name="PRODUCT_NAME">&lt;span jscontent="productName"&gt;&lt;/span&gt;<ex>Google Chrome</ex></ph>'s
+        connection attempt to
+        <ph name="HOST_NAME">&lt;strong jscontent="hostName"&gt;&lt;/strong&gt;<ex>www.whatever.com</ex></ph>
+        was rejected.  The website may be down, or your network may not be
+        properly configured.
+      </message>
+      <message name="IDS_ERRORPAGES_SUMMARY_NAME_NOT_RESOLVED" desc="Summary in the error page when a dns look up fails.">
+        The server at
+        <ph name="HOST_NAME">&lt;strong jscontent="hostName"&gt;&lt;/strong&gt;<ex>www.whatever.com</ex></ph>
+        can't be found, because the DNS lookup failed.  DNS is the network
+        service that translates a website's name to its Internet address.  This
+        error is most often caused by having no connection to the Internet or a
+        misconfigured network.  It can also be caused by an unresponsive DNS
+        server or a firewall preventing
+        <ph name="PRODUCT_NAME">&lt;span jscontent="productName"&gt;&lt;/span&gt;<ex>Google Chrome</ex></ph>
+        from accessing the network.
+      </message>
+      <message name="IDS_ERRORPAGES_SUMMARY_ADDRESS_UNREACHABLE" desc="Summary in the error page when we can't reach a site.  This is slightly more specific than just being unable to connect, as it means we can't find a route to the server.">
+        <ph name="PRODUCT_NAME">&lt;span jscontent="productName"&gt;&lt;/span&gt;<ex>Google Chrome</ex></ph>
+        cannot reach the website.  This is typically caused by network issues,
+        but can also be the result of a misconfigured firewall or proxy server.
+      </message>
+      <message name="IDS_ERRORPAGES_SUMMARY_FILE_ACCESS_DENIED" desc="Summary in the error page when we can't open a file.">
+        The file at <ph name="URL">&lt;strong jscontent="failedUrl"&gt;&lt;/strong&gt;<ex>http://www.google.com/</ex></ph> is not readable.  It may have been removed, moved, or file permissions may be preventing access.
+      </message>
+      <if expr="is_android or is_ios">
+        <message name="IDS_ERRORPAGES_SUMMARY_NETWORK_ACCESS_DENIED" desc="Mobile: Summary in the error page when we're not being allowed to access the network.">
+          <ph name="PRODUCT_NAME">&lt;span jscontent="productName"&gt;&lt;/span&gt;<ex>Google Chrome</ex></ph>
+          is having trouble accessing the network.
+          <ph name="LINE_BREAK">&lt;br /&gt;&lt;br /&gt;<ex>&lt;br /&gt;&lt;br /&gt;</ex></ph>
+          This may be because your firewall or antivirus software wrongly thinks
+          <ph name="PRODUCT_NAME">&lt;span jscontent="productName"&gt;&lt;/span&gt;<ex>Google Chrome</ex></ph>
+          is an intruder on your device and is blocking it from connecting to the Internet.
+        </message>
+        <message name="IDS_ERRORPAGES_SUMMARY_PROXY_CONNECTION_FAILED" desc="Mobile: Summary in the error page when the proxy server connection failed.">
+          A proxy server is a server that acts as an intermediary between your device and other servers.  Right now, your system is configured to use a proxy, but
+          <ph name="PRODUCT_NAME">&lt;span jscontent="productName"&gt;&lt;/span&gt;<ex>Google Chrome</ex></ph>
+          can't connect to it.
+        </message>
+
+        <message name="IDS_ERRORPAGES_SUMMARY_INTERNET_DISCONNECTED" desc="Mobile: Summary of the error page when the network connection failed.  May be followed by platform dependent instructions.">
+          Wi-Fi and mobile data are turned off.
+          <ph name="LINE_BREAK">&lt;br /&gt;&lt;br /&gt;<ex>&lt;br /&gt;&lt;br /&gt;</ex></ph>
+          The page can be loaded once you connect to a network.
+        </message>
+      </if>
+      <if expr="not is_android and not is_ios">
+        <message name="IDS_ERRORPAGES_SUMMARY_NETWORK_ACCESS_DENIED" desc="Summary in the error page when we're not being allowed to access the network.">
+          <ph name="PRODUCT_NAME">&lt;span jscontent="productName"&gt;&lt;/span&gt;<ex>Google Chrome</ex></ph>
+          is having trouble accessing the network.
+          <ph name="LINE_BREAK">&lt;br /&gt;&lt;br /&gt;<ex>&lt;br /&gt;&lt;br /&gt;</ex></ph>
+          This may be because your firewall or antivirus software wrongly thinks
+          <ph name="PRODUCT_NAME">&lt;span jscontent="productName"&gt;&lt;/span&gt;<ex>Google Chrome</ex></ph>
+          is an intruder on your computer and is blocking it from connecting to the Internet.
+        </message>
+        <message name="IDS_ERRORPAGES_SUMMARY_PROXY_CONNECTION_FAILED" desc="Summary in the error page when the proxy server connection failed.">
+          A proxy server is a server that acts as an intermediary between your computer and other servers.  Right now, your system is configured to use a proxy, but
+          <ph name="PRODUCT_NAME">&lt;span jscontent="productName"&gt;&lt;/span&gt;<ex>Google Chrome</ex></ph>
+          can't connect to it.
+        </message>
+        <message name="IDS_ERRORPAGES_SUMMARY_INTERNET_DISCONNECTED_INSTRUCTIONS_TEMPLATE" desc="Template for the summary of the error page when the network connection failed, on platforms with instructions.">
+          You can try to diagnose the problem by taking the following steps:
+          <ph name="LINE_BREAK">&lt;br /&gt;<ex>&lt;br /&gt;</ex></ph>
+          <ph name="PLATFORM_TEXT">
+            $1<ex>Goto the wrench menu and choose Fix It.</ex>
+          </ph>
+        </message>
+      </if>
+
+      <if expr="is_macosx">
+        <message name="IDS_ERRORPAGES_SUMMARY_INTERNET_DISCONNECTED_PLATFORM" desc="Summary (platform dependent section) in the error page when the network connection failed.  Describes how to get to the network Diagnostics screen under Mac OSX.">
+          Go to
+          <ph name="BEGIN_BOLD">&lt;strong&gt;</ph>
+          Applications &gt; System Preferences &gt; Network &gt; Assist me
+          <ph name="END_BOLD">&lt;/strong&gt;</ph>
+          to test your connection.
+        </message>
+      </if>
+      <if expr="is_win">
+        <message name="IDS_ERRORPAGES_SUMMARY_INTERNET_DISCONNECTED_PLATFORM" desc="Summary (platform dependent section) in the error page when the network connection failed.  Describes how to get to the network Diagnostics screen under Windows 7 and later.">
+          Go to
+          <ph name="BEGIN_BOLD">&lt;strong&gt;</ph>
+          Start &gt; Control Panel &gt; Network and Internet &gt; Network and Sharing Center &gt; Troubleshoot Problems (at the bottom) &gt; Internet Connections.
+          <ph name="END_BOLD">&lt;/strong&gt;</ph>
+        </message>
+        <message name="IDS_ERRORPAGES_SUMMARY_INTERNET_DISCONNECTED_PLATFORM_VISTA" desc="Summary (platform dependent section) in the error page when the network connection failed.  Describes how to get to the network Diagnostics screen under Windows Vista.">
+          Go to
+          <ph name="BEGIN_BOLD">&lt;strong&gt;</ph>
+          Start &gt; Control Panel &gt; Network Connections &gt; New Connection Wizard
+          <ph name="END_BOLD">&lt;/strong&gt;</ph>
+          to test your connection.
+        </message>
+        <message name="IDS_ERRORPAGES_SUMMARY_INTERNET_DISCONNECTED_PLATFORM_XP" desc="Summary (platform dependent section) in the error page when the network connection failed.  Describes how to get to the network Diagnostics screen under Windows XP.">
+          Click
+          <ph name="BEGIN_BOLD">&lt;strong&gt;</ph>Start<ph name="END_BOLD">&lt;/strong&gt;</ph>,
+          click
+          <ph name="BEGIN_BOLD">&lt;strong&gt;</ph>Run<ph name="END_BOLD">&lt;/strong&gt;</ph>,
+          type
+          <ph name="BEGIN_BOLD">&lt;strong&gt;</ph>%windir%\network diagnostic\xpnetdiag.exe<ph name="END_BOLD">&lt;/strong&gt;</ph>,
+          and then click
+          <ph name="BEGIN_BOLD">&lt;strong&gt;</ph>OK<ph name="END_BOLD">&lt;/strong&gt;</ph>.
+        </message>
+      </if>
+
+      <message name="IDS_ERRORPAGES_SUMMARY_CACHE_MISS" desc="Summary in the error page when we couldn't find a resource in the cache, and cannot fall back to the network.">
+        The webpage was not found in the cache.  Certain resources
+        can only be safely loaded from the cache, such as pages generated
+        from submitted data.
+        <ph name="LINE_BREAK">&lt;br /&gt;&lt;br /&gt;<ex>&lt;br /&gt;&lt;br /&gt;</ex></ph>
+        This error can also be caused by cache corruption due to
+        an improper shutdown.
+        <ph name="LINE_BREAK">&lt;br /&gt;&lt;br /&gt;<ex>&lt;br /&gt;&lt;br /&gt;</ex></ph>
+        If the problem persists, try clearing the cache.
+      </message>
+      <message name="IDS_ERRORPAGES_SUMMARY_CACHE_READ_FAILURE" desc="Summary in the error page when we encountered an error reading from the cache.  Generally this happens when the disk cache is corrupted from improper shutdown.">
+        To speed up webpages,
+        <ph name="PRODUCT_NAME">&lt;span jscontent="productName"&gt;&lt;/span&gt;<ex>Google Chrome</ex></ph>
+        temporarily saves downloaded files to disk. When
+        <ph name="PRODUCT_NAME">&lt;span jscontent="productName"&gt;&lt;/span&gt;<ex>Google Chrome</ex></ph>
+        is not shut down properly, these files can become corrupted, resulting
+        in this error.  Reloading the page should resolve this issue, and
+        shutting down properly should prevent it from happening in the future.
+        <ph name="LINE_BREAK">&lt;br /&gt;&lt;br /&gt;<ex>&lt;br /&gt;&lt;br /&gt;</ex></ph>
+        If the problem persists, try clearing the cache.  In some cases, this
+        can also be a symptom of hardware starting to fail.
+      </message>
+      <if expr="is_android or is_ios">
+        <message name="IDS_ERRORPAGES_SUMMARY_NETWORK_IO_SUSPENDED" desc="Mobile: Summary in the error page when a page load failed due to the device entering sleep/suspend mode.">
+          Unable to load the webpage because your device entered sleep or
+          hibernate mode.  When this happens, network connections are shut
+          down and new network requests fail.  Reloading the page should
+          resolve this.
+        </message>
+      </if>
+      <if expr="not is_android and not is_ios">
+        <message name="IDS_ERRORPAGES_SUMMARY_NETWORK_IO_SUSPENDED" desc="Summary in the error page when a page load failed due to the computer entering sleep/suspend mode.">
+          Unable to load the webpage because your computer entered sleep or
+          hibernate mode.  When this happens, network connections are shut
+          down and new network requests fail.  Reloading the page should
+          resolve this.
+        </message>
+      </if>
+      <message name="IDS_ERRORPAGES_SUMMARY_NOT_FOUND" desc="Summary in the error page when the server returns a 404.">
+        No webpage was found for the web address: <ph name="URL">&lt;strong jscontent="failedUrl"&gt;&lt;/strong&gt;</ph>
+      </message>
+      <if expr="is_android or is_ios">
+        <message name="IDS_ERRORPAGES_SUMMARY_TOO_MANY_REDIRECTS" desc="Mobile: Summary in the error page when there are too many URL redirects.">
+          The webpage at <ph name="URL">&lt;strong jscontent="failedUrl"&gt;&lt;/strong&gt;</ph> has resulted in
+          too many redirects.  Clearing your cookies for this site or allowing third-party cookies may fix the problem.  If
+          not, it is possibly a server configuration issue and not a problem with your
+          device.
+        </message>
+      </if>
+      <if expr="not is_android and not is_ios">
+        <message name="IDS_ERRORPAGES_SUMMARY_TOO_MANY_REDIRECTS" desc="Summary in the error page when there are too many URL redirects.">
+          The webpage at <ph name="URL">&lt;strong jscontent="failedUrl"&gt;&lt;/strong&gt;</ph> has resulted in
+          too many redirects.  Clearing your cookies for this site or allowing third-party cookies may fix the problem.  If
+          not, it is possibly a server configuration issue and not a problem with your
+          computer.
+        </message>
+      </if>
+      <message name="IDS_ERRORPAGES_SUMMARY_EMPTY_RESPONSE" desc="Summary in the error page when no data is received.">
+        Unable to load the webpage because the server sent no data.
+      </message>
+      <message name="IDS_ERRORPAGES_SUMMARY_DUPLICATE_HEADERS" desc="Summary in the error page when a response from the server contains duplicate headers.">
+        The response from the server contained duplicate headers.  This problem
+        is generally the result of a misconfigured website or proxy.  Only the
+        website or proxy administrator can fix this issue.
+      </message>
+      <message name="IDS_ERRORPAGES_SUMMARY_WEAK_SERVER_EPHEMERAL_DH_KEY" desc="Summary in the error page when the server has a weak Diffie-Hellman public key">
+        This error can occur when connecting to a secure (HTTPS) server. It
+        means that the server is trying to set up a secure connection but, due to
+        a disastrous misconfiguration, the connection wouldn't be secure at all!
+        <ph name="LINE_BREAK">&lt;br /&gt;&lt;br /&gt;<ex>&lt;br /&gt;&lt;br /&gt;</ex></ph> In this case the
+        server needs to be fixed.
+        <ph name="PRODUCT_NAME">&lt;span jscontent="productName"&gt;&lt;/span&gt;<ex>Google Chrome</ex></ph>
+        won't use insecure connections in order to protect your privacy.
+      </message>
+      <message name="IDS_ERRORPAGES_SUMMARY_DNS_PROBE_RUNNING" desc="Summary in the error page when DNS resolution failed and we are running a probe to figure out why.">
+        Unable to look up
+        <ph name="HOST_NAME">&lt;strong jscontent="hostName"&gt;&lt;/strong&gt;<ex>www.whatever.com</ex></ph>.
+        Trying to diagnose the problem...
+      </message>
+
+      <message name="IDS_ERRORPAGES_ERROR_CODE" desc="At the bottom of error pages, a non-internationalized string or numeric code is displayed for debugging purposes">
+        Error code: <ph name="ERROR_NAME">$1<ex>ERR_FILE_NOT_FOUND</ex></ph>
+      </message>
+
+      <message name="IDS_ERRORPAGES_DETAILS_TIMED_OUT" desc="The error message displayed when a page takes too long to load.">
+        The operation timed out.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_CONNECTION_CLOSED" desc="The error message displayed when the server unexpectedly closes a connection.">
+        The server unexpectedly closed the connection.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_CONNECTION_RESET" desc="The error message displayed when a connection was reset.">
+        The connection was reset.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_CONNECTION_REFUSED" desc="The error message displayed when we try and connect to a server, but the server doesn't let us.">
+        The server refused the connection.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_CONNECTION_FAILED" desc="The error message displayed when we can not reach the website.">
+        The attempt to connect to the server failed.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_NETWORK_CHANGED" desc="The error message displayed when a connection is interrupted because the network changed.">
+        A network change was detected.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_NAME_NOT_RESOLVED" desc="The error message displayed when a dns look up fails.">
+        Unable to resolve the server's DNS address.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_ADDRESS_UNREACHABLE" desc="The error message displayed when we can't reach a server.">
+        Unable to reach the server.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_NETWORK_ACCESS_DENIED" desc="The error message displayed when we're not being allowed to access the network.">
+        Unable to access the network.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_FILE_ACCESS_DENIED" desc="The error message displayed when we're not being allowed to access a file.">
+        Unable to access the file.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_PROXY_CONNECTION_FAILED" desc="The error message displayed when the proxy server connection failed.">
+        Proxy server connection failed.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_INTERNET_DISCONNECTED" desc="The error message displayed when we have no Internet access.">
+        The Internet connection has been lost.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_CACHE_READ_FAILURE" desc="The error message displayed when we encountered an error reading from the cache.  Generally this happens when the disk cache is corrupted from improper shutdown.">
+        Error reading data from cache.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_CACHE_MISS" desc="The error message displayed when we couldn't find a resource in the cache, and cannot fall back to the network.">
+        The requested entry was not found in the cache.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_NETWORK_IO_SUSPENDED" desc="The error message displayed when a page load failed due to the computer entering sleep/suspend mode.">
+        Network IO suspended.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_FILE_NOT_FOUND" desc="The error message displayed when a local file can not be found.">
+        The file or directory could not be found.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_TOO_MANY_REDIRECTS" desc="The error message displayed when there are too many redirects.">
+        There were too many redirects.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_EMPTY_RESPONSE" desc="The error message displayed when no data is received.">
+        The server closed the connection without sending any data.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH" desc="The error message displayed when we received multiple 'Content-Length' header fields in an http response.">
+        Multiple distinct Content-Length headers received.  This is disallowed
+        to protect against HTTP response splitting attacks.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION" desc="The error message displayed when we received multiple 'Content-Disposition' header fields in an http response.">
+        Multiple distinct Content-Disposition headers received.  This is disallowed to
+        protect against HTTP response splitting attacks.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_RESPONSE_HEADERS_MULTIPLE_LOCATION" desc="The error message displayed when we received multiple 'Location' header fields in an http response.">
+        Multiple distinct Location headers received.  This is disallowed to protect
+        against HTTP response splitting attacks.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_DNS_PROBE_RUNNING" desc="The error message displayed when we are waiting to see whether we will run a DNS probe.">
+        Waiting for DNS probe.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_UNKNOWN" desc="The default error message displayed if we don't have a more specific error message.">
+        Unknown error.
+      </message>
+
+      <message name="IDS_ERRORPAGES_HEADING_ACCESS_DENIED" desc="Heading in the error page when a server returns a 403.  Also suitable for similar error codes.">
+        Access to the webpage was denied
+      </message>
+      <message name="IDS_ERRORPAGES_HEADING_FILE_ACCESS_DENIED" desc="Heading in the error page when a file is denied access.">
+        Access to the file was denied
+      </message>
+      <message name="IDS_ERRORPAGES_SUMMARY_FORBIDDEN" desc="Summary in the error page when a server returns a 403.">
+        You are not authorized to access the webpage at <ph name="URL">&lt;strong jscontent="failedUrl"&gt;&lt;/strong&gt;</ph>.  You may need to sign in.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_FORBIDDEN" desc="Details in the error page when a server returns a 403.">
+        The server refused to fulfill the request.
+      </message>
+
+      <message name="IDS_ERRORPAGES_SUMMARY_GONE" desc="Summary of the error page when the server returns a 410.">
+        The webpage at <ph name="URL">&lt;strong jscontent="failedUrl"&gt;&lt;/strong&gt;</ph> no longer exists.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_GONE" desc="Details in the error page when a server returns a 410.">
+        The requested resource no longer exists, and there is no forwarding address.  This is expected to be a permanent condition.
+      </message>
+
+      <message name="IDS_ERRORPAGES_HEADING_HTTP_SERVER_ERROR" desc="Heading in the error page for HTTP 5xx errors, which are considered to be server side errors.">
+        Server error
+      </message>
+
+      <message name="IDS_ERRORPAGES_SUMMARY_INTERNAL_SERVER_ERROR" desc="Summary in the error page when the server returns a 500.">
+        The website encountered an error while retrieving <ph name="URL">&lt;strong jscontent="failedUrl"&gt;&lt;/strong&gt;</ph>.
+        It may be down for maintenance or configured incorrectly.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_INTERNAL_SERVER_ERROR" desc="The error message displayed when the server returns a 500.">
+        An unexpected condition was encountered while the server was attempting to fulfill the request.
+      </message>
+
+      <message name="IDS_ERRORPAGES_SUMMARY_WEBSITE_CANNOT_HANDLE" desc="Summary in the error page when the server returns a 501 or 505.">
+        The website is unable to handle the request for <ph name="URL">&lt;strong jscontent="failedUrl"&gt;&lt;/strong&gt;</ph>.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_NOT_IMPLEMENTED" desc="The error message displayed when the server returns a 501.">
+        The server does not support the functionality required to fulfill the request.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_HTTP_VERSION_NOT_SUPPORTED" desc="The error message displayed when the server returns a 505.">
+        The server does not support the HTTP version used in the request.
+      </message>
+
+      <message name="IDS_ERRORPAGES_SUMMARY_BAD_GATEWAY" desc="Summary in the error page when the server returns a 502.">
+        An invalid response was received while attempting to load <ph name="URL">&lt;strong jscontent="failedUrl"&gt;&lt;/strong&gt;</ph>.
+        The server may be down for maintenance or configured incorrectly.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_BAD_GATEWAY" desc="The error message displayed when the server returns a 502.">
+        The gateway or proxy server received an invalid response from an upstream server.
+      </message>
+
+      <message name="IDS_ERRORPAGES_SUMMARY_SERVICE_UNAVAILABLE" desc="Summary in the error page when the server returns a 503.">
+        The webpage at <ph name="URL">&lt;strong jscontent="failedUrl"&gt;&lt;/strong&gt;</ph> is currently unavailable.  It may be overloaded or down for maintenance.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_SERVICE_UNAVAILABLE" desc="The error message displayed when the server returns a 503.">
+        The server is currently unable to handle the request.  This code indicates this is a temporary condition, and the server will be up again after a delay.
+      </message>
+
+      <message name="IDS_ERRORPAGES_SUMMARY_GATEWAY_TIMEOUT" desc="Summary in the error page when the server returns a 504.">
+        The server for <ph name="URL">&lt;strong jscontent="failedUrl"&gt;&lt;/strong&gt;</ph> took too long to respond.  It may be overloaded.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_GATEWAY_TIMEOUT" desc="The error message displayed when the server returns a 504.">
+        The gateway or proxy server timed out while waiting for a response from an upstream server.
+      </message>
+
+      <message name="IDS_ERRORPAGES_HEADING_SSL_PROTOCOL_ERROR" desc="Heading in the error page for SSL protocol errors.">
+        SSL connection error
+      </message>
+      <message name="IDS_ERRORPAGES_SUMMARY_SSL_PROTOCOL_ERROR" desc="Summary in the error page for SSL protocol errors.">
+        Unable to make a secure connection to the server. This may be a problem with the server, or it may be requiring a client authentication certificate that you don't have.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_SSL_PROTOCOL_ERROR" desc="The error message displayed for SSL protocol errors.">
+        SSL protocol error.
+      </message>
+
+      <message name="IDS_ERRORPAGES_HEADING_PINNING_FAILURE" desc="Title of the error page for a certificate which doesn't match the built-in pins for that name">
+        Incorrect certificate for host.
+      </message>
+      <message name="IDS_ERRORPAGES_SUMMARY_PINNING_FAILURE" desc="Details of the error page for a certificate which doesn't match the built-in pins for that name">
+        The server presented a certificate that doesn't match built-in expectations. These expectations are included for certain, high-security websites in order to protect you.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_PINNING_FAILURE" desc="Description of the error page for a certificate which doesn't match the built-in pins for that name">
+        The server's certificate appears to be a forgery.
+      </message>
+
+      <message name="IDS_ERRORPAGES_DETAILS_SSL_UNSAFE_NEGOTIATION" desc="The error message displayed when the SSL renegotiation extension is missing.">
+        The SSL renegotiation extension was missing from the secure handshake. For some sites, which are known to support the renegotiation extension, Chrome requires a more secure handshake to prevent a class of known attacks. The omission of this extension suggests that your connection was intercepted and manipulated in transit.
+      </message>
+
+      <message name="IDS_ERRORPAGES_HEADING_BAD_SSL_CLIENT_AUTH_CERT" desc="Heading in the error page for SSL client certificate authentication failure.">
+        Certificate-based authentication failed
+      </message>
+      <message name="IDS_ERRORPAGES_SUMMARY_BAD_SSL_CLIENT_AUTH_CERT" desc="Summary in the error page for SSL client certificate authentication failure.">
+        This server requires a certificate for authentication, and didn't accept the one sent by the
+        browser. Your certificate may have expired, or the server may not trust its issuer.
+        You can try again with a different certificate, if you have one, or you may have to
+        obtain a valid certificate from elsewhere.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_BAD_SSL_CLIENT_AUTH_CERT" desc="The error message for SSL client certificate authentication failure.">
+        Bad SSL client authentication certificate.
+      </message>
+
+      <message name="IDS_ERRORPAGES_SUMMARY_TEMPORARILY_THROTTLED" desc="Summary in the error page when we temporarily stop sending requests to a server in order to avoid DDoS.">
+        It is likely that the server hosting the webpage has been overloaded or encountered an error.
+        In order to avoid letting extensions cause too much traffic and making the situation worse,
+        <ph name="PRODUCT_NAME">&lt;span jscontent="productName"&gt;&lt;/span&gt;<ex>Google Chrome</ex></ph>
+        has temporarily stopped allowing requests by extensions to this URL.
+        <ph name="LINE_BREAK">&lt;br /&gt;&lt;br /&gt;<ex>&lt;br /&gt;&lt;br /&gt;</ex></ph>
+        If you think this behavior is undesirable, for example, you are debugging your own website, please
+        visit <ph name="URL_FOR_MORE_INFO">&lt;strong&gt;http://dev.chromium.org/throttling&lt;/strong&gt;<ex>http://dev.chromium.org/throttling</ex></ph>,
+        where you can find more information including how to disable the feature.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_TEMPORARILY_THROTTLED" desc="The error message displayed when we temporarily stop sending requests to a server in order to avoid DDoS.">
+        Extension requests to this URL have been temporarily throttled.
+      </message>
+
+      <message name="IDS_ERRORPAGES_SUMMARY_BLOCKED" desc="Summary in the error page when an extension blocks a request.">
+        A third-party extension has blocked access to this webpage.
+      </message>
+      <message name="IDS_ERRORPAGES_SUMMARY_BLOCKED_BY_ADMINISTRATOR" desc="Summary in the error page when an administrator policy blocks a request.">
+        Your &lt;strong&gt;system administrator&lt;/strong&gt; has blocked access to this webpage.
+      </message>
+       <message name="IDS_ERRORPAGES_SUMMARY_BLOCKED_ENROLLMENT_CHECK_PENDING" desc="Summary in the error page when the user tries to browse before the forced enrollment check has finished.">
+        This device has not finished its first run steps.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_BLOCKED" desc="The error message displayed when an extension blocks a request.">
+        Requests to the server have been blocked by an extension.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_BLOCKED_BY_ADMINISTRATOR" desc="The error message displayed when a policy blocks a request.">
+        Requests to the server have been blocked by a policy.
+      </message>
+      <message name="IDS_ERRORPAGES_DETAILS_BLOCKED_ENROLLMENT_CHECK_PENDING" desc="The error message displayed when the user tries to browse before the forced enrollment check has finished.">
+        Browsing the Internet is disabled until the enterprise enrollment verification check has finished.
+        You can still use the diagnostic tool presented here to troubleshoot issues with your connectivity.
+      </message>
+
+      <message name="IDS_ERRORPAGES_HTTP_POST_WARNING" desc="The error message displayed when the user navigates back or forward to a page which would resubmit post data. They can hit reload to send POST data again and load the page.">
+        This webpage requires data that you entered earlier in order to be properly displayed. You can send this data again, but by doing so you will repeat any action this page previously performed.
+      </message>
+
+      <message name="IDS_ERRORPAGES_APP_WARNING" desc="The error message displayed when the browser can not reach the requested page from an app.">
+        The app is currently unreachable.
+      </message>
+
+      <message name="IDS_SECURE_CONNECTION_EV" desc="Short text shown in the location bar when the connection is secure with an EV cert.">
+        <ph name="ORGANIZATION">$1<ex>Paypal Inc.</ex></ph> [<ph name="COUNTRY">$2<ex>US</ex></ph>]
+      </message>
+
+      <!-- iOS specific error page messages -->
+      <if expr="is_ios">
+        <message name="IDS_ERRORPAGES_HEADING_DOWNLOAD_FILE_TYPE_ERROR" desc="A one-line title for error message to tell user that the requested type of file cannot be downloaded. [Length: 20em]">
+          Download Failed
+        </message>
+        <message name="IDS_ERRORPAGES_SUMMARY_DOWNLOAD_FILE_TYPE_ERROR" desc="A short error message to tell user that the requested type of file cannot be downloaded. [Length: 40em]">
+          Chrome cannot download this file.
+        </message>
+        <message name="IDS_ERRORPAGES_DETAILS_DOWNLOAD_FILE_TYPE_ERROR" desc="A short message to tell user that the file type is unknown. [Length: 20em]">
+          Unknown File Type.
+        </message>
+        <message name="IDS_ERRORPAGES_HEADING_UNSUPPORTED_SCHEME_ERROR" desc="Header error message to tell user that the requested URI Scheme is not supported [Length: 20em]">
+          Chrome cannot open this URL.
+        </message>
+        <message name="IDS_ERRORPAGES_SUMMARY_UNSUPPORTED_SCHEME_ERROR" desc="Summary error message to tell user that the requested URI Scheme is not supported [Length: 40em]">
+          The requested URI Scheme is not supported.
+        </message>
+        <message name="IDS_ERRORPAGES_DETAILS_UNSUPPORTED_SCHEME_ERROR" desc="Details error message to tell user that the requested URI Scheme is not supported [Length: 20em]">
+          Unsupported URL.
+        </message>
+      </if>
+
+      <!-- Page Information Window -->
+      <if expr="not use_titlecase">
+        <message name="IDS_PAGEINFO_CERT_INFO_BUTTON" desc="Text of button in the page info that shows the SSL certificate.">
+          Certificate information
+        </message>
+        <message name="IDS_PAGEINFO_CERT_TRANSPARENCY_INFO_BUTTON" desc="Text of button in the page info that shows Signed Certificate Timestamps.">
+          Transparency information
+        </message>
+        <message name="IDS_PAGEINFO_RESET_INVALID_CERTIFICATE_DECISIONS_BUTTON" desc="Text of button in the page info that resets allow/deny decisions of invalid certificates.">
+          Stop using an invalid certificate
+        </message>
+      </if>
+      <if expr="use_titlecase">
+        <message name="IDS_PAGEINFO_CERT_INFO_BUTTON" desc="In Title Case: Text of button in the page info that shows the SSL certificate.">
+          Certificate Information
+        </message>
+        <message name="IDS_PAGEINFO_CERT_TRANSPARENCY_INFO_BUTTON" desc="Text of button in the page info that shows Signed Certificate Timestamps.">
+          Transparency Information
+        </message>
+        <message name="IDS_PAGEINFO_RESET_INVALID_CERTIFICATE_DECISIONS_BUTTON" desc="Text of button in the page info that resets allow/deny decisions of invalid certificates.">
+          Stop using an invalid certificate
+        </message>
+      </if>
+      <message name="IDS_PAGE_INFO_HELP_CENTER_LINK" desc="This is the text of the link pointing to the Help Center. This appears at the bottom of the SSL dialog and 'this' refers to the sections within the bubble.">
+        What do these mean?
+      </message>
+
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_SECURE_IDENTITY_NO_CT" desc="The text of the identity section when the page is secure and no Certificate Transparency information is present.">
+        The identity of this website has been verified by <ph name="ISSUER">$1<ex>VeriSign</ex></ph> but does not have public audit records.
+      </message>
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_SECURE_IDENTITY_CT_VERIFIED" desc="The text of the identity section when the page is secure and a Signed Certificate Timestamp from a known Certificate Transparency log is present and valid.">
+        The identity of this website has been verified by <ph name="ISSUER">$1<ex>VeriSign</ex></ph> and is publicly auditable.
+      </message>
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_SECURE_IDENTITY_CT_UNVERIFIED" desc="The text of the identity section when the page is secure and contains a Signed Certificate Timestamp from an unknown Certificate Transparency log.">
+        The identity of this website has been verified by <ph name="ISSUER">$1<ex>VeriSign</ex></ph>, it claims to have public audit records, but the records cannot be verified.
+      </message>
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_SECURE_IDENTITY_CT_INVALID" desc="The text of the identity section when the page is secure, but it contains a Signed Certificate Timestamp from a known Certificate Transparency log that failed to verify.">
+        The identity of this website has been verified by <ph name="ISSUER">$1<ex>VeriSign</ex></ph>, but its public audit records failed verification.
+      </message>
+
+      <message name="IDS_PAGEINFO_ADDRESS" desc="Locality as reported in the EV identity text.">
+        <ph name="CITY">$1<ex>Mountain View</ex></ph>, <ph name="STATE">$2<ex>California</ex></ph> <ph name="COUNTRY">$3<ex>USA</ex></ph>
+      </message>
+
+      <message name="IDS_PAGEINFO_PARTIAL_ADDRESS" desc="Locality with missing state as reported in the EV identity text.">
+        <ph name="CITY">$1<ex>Mountain View</ex></ph>, <ph name="COUNTRY">$2<ex>US</ex></ph>
+      </message>
+
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_SECURE_IDENTITY_EV_NO_CT" desc="The text of the identity section when the page is secured with an EV cert and no Certificate Transparency information is present.">
+        The identity of <ph name="ORGANIZATION">$1<ex>Google</ex></ph> at <ph name="LOCALITY">$2<ex>Mountain View, CA US</ex></ph> has been verified by <ph name="ISSUER">$3<ex>VeriSign</ex></ph> but does not have public audit records.
+      </message>
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_SECURE_IDENTITY_EV_CT_VERIFIED" desc="The text of the identity section when the page is secured with an EV cert and a Signed Certificate Timestamp from a known Certificate Transparency log is present and valid.">
+        The identity of <ph name="ORGANIZATION">$1<ex>Google</ex></ph> at <ph name="LOCALITY">$2<ex>Mountain View, CA US</ex></ph> has been verified by <ph name="ISSUER">$3<ex>VeriSign</ex></ph> and is publicly auditable.
+      </message>
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_SECURE_IDENTITY_EV_CT_UNVERIFIED" desc="The text of the identity section when the page is secured with an EV cert and contains a Signed Certificate Timestamp from an unknown Certificate Transparency log.">
+        The identity of <ph name="ORGANIZATION">$1<ex>Google</ex></ph> at <ph name="LOCALITY">$2<ex>Mountain View, CA US</ex></ph> has been verified by <ph name="ISSUER">$3<ex>VeriSign</ex></ph>, it claims to have public audit records, but the records cannot be verified.
+      </message>
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_SECURE_IDENTITY_EV_CT_INVALID" desc="The text of the identity section when the page is secured with an EV cert, but it contains a Signed Certificate Timestamp from a known Certificate Transparency log that failed to verify.">
+        The identity of <ph name="ORGANIZATION">$1<ex>Google</ex></ph> at <ph name="LOCALITY">$2<ex>Mountain View, CA US</ex></ph> has been verified by <ph name="ISSUER">$3<ex>VeriSign</ex></ph>, but its public audit records failed verification.
+      </message>
+
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_UNKNOWN_PARTY" desc="The default name used when we did not find a principal name.">
+        unknown name
+      </message>
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_INSECURE_IDENTITY" desc="The text of the identity section when the page is not secure.">
+        The identity of this website has not been verified.
+      </message>
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_NON_UNIQUE_NAME" desc="The text of the identity section when the host is not unique (such as with Intranet host names).">
+        The identity of the server you are connected to cannot be fully validated. You are connected to a server using a name only valid within your network, which an external certificate authority has no way to validate ownership of. As some certificate authorities will issue certificates for these names regardless, there is no way to ensure you are connected to the intended website and not an attacker.
+      </message>
+
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_UNABLE_TO_CHECK_REVOCATION" desc="The text of the identity section when we were unable to check if the certificate has been revoked.">
+        Unable to check whether the certificate has been revoked.
+      </message>
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_NO_REVOCATION_MECHANISM" desc="The text of the identity section when there is no certificate revocation mechanism.">
+        The certificate does not specify a mechanism to check whether it has been revoked.
+      </message>
+
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_ENCRYPTED_CONNECTION_TEXT" desc="The text of the connection section when the connection is encrypted.">
+        Your connection to <ph name="DOMAIN">$1<ex>www.google.com</ex></ph> is encrypted with <ph name="BIT_COUNT">$2<ex>128</ex></ph>-bit encryption.
+      </message>
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_WEAK_ENCRYPTION_CONNECTION_TEXT" desc="The text of the connection section when the connection uses weak encryption.">
+        Your connection to <ph name="DOMAIN">$1<ex>www.google.com</ex></ph> is encrypted with weak encryption.
+      </message>
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_NOT_ENCRYPTED_CONNECTION_TEXT" desc="The text of the connection section when the connection is not encrypted.">
+        Your connection to <ph name="DOMAIN">$1<ex>www.google.com</ex></ph> is not encrypted.
+      </message>
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_ENCRYPTED_INSECURE_CONTENT_WARNING" desc="Some extra text of the connection section when the connection is encrypted and the page contains insecure content which has been displayed (e.g. images, CSS).">
+        However, this page includes other resources which are not secure. These resources can be viewed by others while in transit, and can be modified by an attacker to change the look of the page.
+      </message>
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_ENCRYPTED_INSECURE_CONTENT_ERROR" desc="Some extra text of the connection section when the connection is encrypted and the page contains insecure content which has been run (e.g. script).">
+        However, this page includes other resources which are not secure. These resources can be viewed by others while in transit, and can be modified by an attacker to change the behavior of the page.
+      </message>
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_ENCRYPTED_SENTENCE_LINK" desc="Linking 2 sentences in 1 paragraph.">
+        <ph name="SENTENCE1">$1<ex>Your connection is encrypted.</ex></ph> <ph name="SENTENCE2">$2<ex>However, this page includes resources from other pages whose identity cannot be verified.</ex></ph>
+      </message>
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_SSL_VERSION" desc="This message gives the version of the SSL protocol used to protect the HTTPS connection.">
+        The connection uses <ph name="SSL_VERSION">$1<ex>TLS 1.0</ex></ph>.
+      </message>
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_ENCRYPTION_DETAILS" desc="This message gives details of the cryptographic primitives used to protect the HTTPS connection.">
+        The connection is encrypted using <ph name="CIPHER">$1<ex>AES_128</ex></ph>, with <ph name="MAC">$2<ex>SHA1</ex></ph> for message authentication and <ph name="KX">$3<ex>RSA</ex></ph> as the key exchange mechanism.
+      </message>
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_ENCRYPTION_DETAILS_AEAD" desc="This message gives details of the cryptographic primitives used to protect the HTTPS connection. It should be translated in a similar manner as IDS_PAGE_INFO_SECURITY_TAB_ENCRYPTION_DETAILS">
+        The connection is encrypted and authenticated using <ph name="CIPHER">$1<ex>AES_128_GCM</ex></ph> and uses <ph name="KX">$2<ex>RSA</ex></ph> as the key exchange mechanism.
+      </message>
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_FALLBACK_MESSAGE" desc="This message is displayed when the first secure connection to a site failed and Chrome retried with an older protocol.">
+        The connection had to be retried using an older version of the TLS or SSL protocol. This typically means that the server is using very old software and may have other security issues.
+      </message>
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_RENEGOTIATION_MESSAGE" desc="This message is displayed when the server hasn't been updated to fix a recent security issues. TLS here is an acronym and need not be translated. 'renegotiation' is a technical term describing a process of agreeing on a new set of security parameters and secrets. 'extension' here should be taken to mean 'amendment' rather than elongation.">
+        The server does not support the TLS renegotiation extension.
+      </message>
+      <message name="IDS_PAGE_INFO_SITE_INFO_TITLE" desc="The name of the site information section.">
+        Site information
+      </message>
+      <if expr="is_ios">
+        <message name="IDS_PAGE_INFO_SECURITY_BUTTON_ACCESSIBILITY_LABEL" desc="The accessibility text for the page security info button">
+          Page Security Info
+        </message>
+      </if>
+
+      <!-- Critical Notification Bubble -->
+      <message name="IDS_CRITICAL_NOTIFICATION_HEADLINE" desc="The headline for the critical notification">
+        <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will restart in <ph name="SECONDS">$2<ex>10</ex></ph> seconds.
+      </message>
+      <message name="IDS_CRITICAL_NOTIFICATION_HEADLINE_ALTERNATE" desc="The headline for the critical notification when the countdown reaches 0 (will only be seen if an onbeforeunload handler on a web page cancels the shutdown sequence.">
+        You should restart <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> now.
+      </message>
+      <message name="IDS_CRITICAL_NOTIFICATION_TEXT" desc="The text of the critical update notification">
+        A special security update for <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> was just applied; you should restart now for it to take effect (we'll restore your tabs).
+      </message>
+      <message name="IDS_CRITICAL_NOTIFICATION_RESTART" desc="The restart button label">
+        OK - Restart now
+      </message>
+      <message name="IDS_CRITICAL_NOTIFICATION_DISMISS" desc="The dismiss button label">
+        Don't restart
+      </message>
+
+      <!-- Screen Capture strings -->
+      <message name="IDS_MEDIA_SCREEN_CAPTURE_CONFIRMATION_TITLE" desc="Title for the prompt shown when screen capturing is requrested by an app.">
+        <ph name="APP_NAME">$1<ex>html5rocks.com</ex></ph> Screen Sharing Request
+      </message>
+      <message name="IDS_MEDIA_SCREEN_CAPTURE_CONFIRMATION_TEXT" desc="Text for the prompt shown when screen capturing is requrested by an app.">
+        Do you want <ph name="APP_NAME">$1<ex>html5rocks.com</ex></ph> to share your screen?
+      </message>
+      <message name="IDS_MEDIA_SCREEN_AND_AUDIO_CAPTURE_CONFIRMATION_TEXT" desc="Text for the prompt shown when screen and audio capturing is requrested by an app.">
+        Do you want <ph name="APP_NAME">$1<ex>html5rocks.com</ex></ph> to share your screen and audio output?
+      </message>
+      <message name="IDS_MEDIA_SCREEN_CAPTURE_NOTIFICATION_TEXT" desc="label used in screen capture notification UI to show the screen sharing status when the stream is consumed by the same app initiating the window picker">
+        <ph name="APP_NAME">$1<ex>Google Cast</ex></ph> is sharing your screen.
+      </message>
+      <message name="IDS_MEDIA_SCREEN_CAPTURE_NOTIFICATION_TEXT_DELEGATED" desc="label used in screen capture notification UI to show the screen sharing status when the stream is consumed by a tab instead of the app initiating the window picker">
+        <ph name="APP_NAME">$1<ex>Google Cast</ex></ph> is sharing your screen with <ph name="TAB_NAME">$2<ex>https://google.com</ex></ph>.
+      </message>
+      <message name="IDS_MEDIA_SCREEN_CAPTURE_NOTIFICATION_STOP" desc="Text shown on the button that stops screen capture.">
+        Stop sharing
+      </message>
+
+      <!-- Safe Browsing interstitials V3 (shared phishing & malware) -->
+      <message name="IDS_SAFEBROWSING_V3_TITLE" desc="The tab title for the Safe Browsing interstitials.">
+        Security error
+      </message>
+      <message name="IDS_SAFEBROWSING_V3_OPEN_DETAILS_BUTTON" desc="The text for the button that expands the details.">
+        Details
+      </message>
+      <message name="IDS_SAFEBROWSING_V3_CLOSE_DETAILS_BUTTON" desc="The text for the button that hides the details.">
+        Hide details
+      </message>
+      <message name="IDS_SAFEBROWSING_OVERRIDABLE_SAFETY_BUTTON" desc="The text for the button that takes the user back to the previous page.">
+        Back to safety
+      </message>
+
+      <!-- Malware interstitial V3 -->
+      <message name="IDS_MALWARE_V3_HEADING" desc="The large heading at the top of the malware interstitial.">
+        The site ahead contains malware
+      </message>
+      <if expr="is_android or is_ios">
+        <message name="IDS_MALWARE_V3_PRIMARY_PARAGRAPH" desc="Mobile: The primary explanatory paragraph for the malware interstitial.">
+          Attackers currently on <ph name="BEGIN_BOLD">&lt;strong&gt;</ph><ph name="SITE">$1<ex>example.com</ex></ph><ph name="END_BOLD">&lt;/strong&gt;</ph> might attempt to install dangerous programs on your device that steal or delete your information (for example, photos, passwords, messages, and credit cards).
+        </message>
+      </if>
+      <if expr="is_macosx">
+        <message name="IDS_MALWARE_V3_PRIMARY_PARAGRAPH" desc="Mac: The primary explanatory paragraph for the malware interstitial.">
+          Attackers currently on <ph name="BEGIN_BOLD">&lt;strong&gt;</ph><ph name="SITE">$1<ex>example.com</ex></ph><ph name="END_BOLD">&lt;/strong&gt;</ph> might attempt to install dangerous programs on your Mac that steal or delete your information (for example, photos, passwords, messages, and credit cards).
+        </message>
+      </if>
+      <if expr="not is_android and not is_macosx and not is_ios">
+        <message name="IDS_MALWARE_V3_PRIMARY_PARAGRAPH" desc="The primary explanatory paragraph for the malware interstitial.">
+          Attackers currently on <ph name="BEGIN_BOLD">&lt;strong&gt;</ph><ph name="SITE">$1<ex>example.com</ex></ph><ph name="END_BOLD">&lt;/strong&gt;</ph> might attempt to install dangerous programs on your computer that steal or delete your information (for example, photos, passwords, messages, and credit cards).
+        </message>
+      </if>
+      <message name="IDS_MALWARE_V3_EXPLANATION_PARAGRAPH" desc="The explanation of why Safe Browsing has blocked the page.">
+        Google Safe Browsing recently <ph name="BEGIN_LINK">&lt;a href="#" id="help-link"&gt;</ph>detected malware<ph name="END_LINK">&lt;/a&gt;</ph> on <ph name="SITE">$1<ex>example.com</ex></ph>. Websites that are normally safe are sometimes infected with malware.
+      </message>
+      <message name="IDS_MALWARE_V3_EXPLANATION_PARAGRAPH_SUBRESOURCE" desc="The explanation of why Safe Browsing has blocked the page.">
+        Google Safe Browsing recently <ph name="BEGIN_LINK">&lt;a href="#" id="help-link"&gt;</ph>detected malware<ph name="END_LINK">&lt;/a&gt;</ph> on <ph name="SITE">$1<ex>example.com</ex></ph>. Websites that are normally safe are sometimes infected with malware. The malicious content comes from <ph name="SUBRESOURCE_HOST">$2<ex>evil.com</ex></ph>, a known malware distributor.
+      </message>
+      <message name="IDS_MALWARE_V3_ADVICE_HEADING" desc="A header for the IDS_MALWARE_V3_EXPLANATION_PARAGRAPH_ADVICE paragraph.">
+        What should you do?
+      </message>
+      <message name="IDS_MALWARE_V3_EXPLANATION_PARAGRAPH_ADVICE" desc="The explanation of why Safe Browsing has blocked the page, with additional advice.">
+        You should come back to this website in a few hours. Google Safe Browsing recently <ph name="BEGIN_LINK">&lt;a href="#" id="help-link"&gt;</ph>detected malware<ph name="END_LINK">&lt;/a&gt;</ph> on <ph name="SITE">$1<ex>example.com</ex></ph>. Websites that are normally safe are sometimes infected with malware.
+      </message>
+      <message name="IDS_MALWARE_V3_EXPLANATION_PARAGRAPH_SUBRESOURCE_ADVICE" desc="The explanation of why Safe Browsing has blocked the page, with additional advice.">
+        Google Safe Browsing recently <ph name="BEGIN_LINK">&lt;a href="#" id="help-link"&gt;</ph>detected malware<ph name="END_LINK">&lt;/a&gt;</ph> on <ph name="SITE">$1<ex>example.com</ex></ph>. Websites that are normally safe are sometimes infected with malware. The malicious content comes from <ph name="SUBRESOURCE_HOST">$2<ex>evil.com</ex></ph>, a known malware distributor. You should come back in a few hours.
+      </message>
+      <message name="IDS_MALWARE_V3_EXPLANATION_PARAGRAPH_HISTORY" desc="The explanation of why Safe Browsing has blocked the page, with additional text about history.">
+        Even if you have visited this website before, it is not safe right now. Google Safe Browsing recently <ph name="BEGIN_LINK">&lt;a href="#" id="help-link"&gt;</ph>detected malware<ph name="END_LINK">&lt;/a&gt;</ph> on <ph name="SITE">$1<ex>example.com</ex></ph>. Websites that are normally safe are sometimes infected with malware.
+      </message>
+      <message name="IDS_MALWARE_V3_EXPLANATION_PARAGRAPH_SUBRESOURCE_HISTORY" desc="The explanation of why Safe Browsing has blocked the page, with additional text about history.">
+        Even if you have visited this website before, it is not safe right now. Google Safe Browsing recently <ph name="BEGIN_LINK">&lt;a href="#" id="help-link"&gt;</ph>detected malware<ph name="END_LINK">&lt;/a&gt;</ph> on <ph name="SITE">$1<ex>example.com</ex></ph>. Websites that are normally safe are sometimes infected with malware. The malicious content comes from <ph name="SUBRESOURCE_HOST">$2<ex>evil.com</ex></ph>, a known malware distributor.
+      </message>
+      <message name="IDS_MALWARE_V3_PROCEED_PARAGRAPH" desc="The paragraph that lets the user skip the warning.">
+        If you understand the risks to your security, you may <ph name="BEGIN_LINK">&lt;a href="#" id="proceed-link"&gt;</ph>visit this unsafe site<ph name="END_LINK">&lt;/a&gt;</ph> before the dangerous programs have been removed.
+      </message>
+      <message name="IDS_MALWARE_V3_PROCEED_PARAGRAPH_NOT_RECOMMEND" desc="The paragraph that lets the user skip the warning, with the additional anti-recommendation string.">
+        If you understand the risks to your security, you may <ph name="BEGIN_LINK">&lt;a href="#" id="proceed-link"&gt;</ph>visit this unsafe site<ph name="END_LINK">&lt;/a&gt;</ph> (not recommended) before the dangerous programs have been removed.
+      </message>
+      <message name="IDS_MALWARE_V3_PROCEED_PARAGRAPH_SOCIAL" desc="The paragraph that lets the user skip the warning, with the additional anti-recommendation string.">
+        More than 80% of people who see this warning go back to safety instead of risking malware. However, if you understand the risks to your security, you may <ph name="BEGIN_LINK">&lt;a href="#" id="proceed-link"&gt;</ph>visit this unsafe site<ph name="END_LINK">&lt;/a&gt;</ph> before the dangerous programs have been removed.
+      </message>
+      <message name="IDS_SAFE_BROWSING_PRIVACY_POLICY_PAGE" desc="Label for the link to SafeBrowsing Privacy policy page">
+        Privacy policy
+      </message>
+      <message name="IDS_SAFE_BROWSING_PRIVACY_POLICY_URL" translateable="false">
+        http://www.google.com/chrome/browser/privacy/whitepaper.html#malware
+      </message>
+      <message name="IDS_SAFE_BROWSING_MALWARE_REPORTING_AGREE" desc="SafeBrowsing Malware v2 Details label next to checkbox">
+        Automatically report details of possible security incidents to Google. <ph name="PRIVACY_PAGE_LINK">$1</ph>
+      </message>
+
+      <!-- Harmful download interstitial V3 -->
+      <message name="IDS_HARMFUL_V3_HEADING" desc="The large heading at the top of the social engineering interstitial.">
+        The site ahead contains harmful programs
+      </message>
+      <message name="IDS_HARMFUL_V3_PRIMARY_PARAGRAPH" desc="Mobile: The primary explanatory paragraph for the social engineering interstitial.">
+        Attackers on <ph name="BEGIN_BOLD">&lt;strong&gt;</ph><ph name="SITE">$1<ex>example.com</ex></ph><ph name="END_BOLD">&lt;/strong&gt;</ph> might attempt to trick you into installing programs that harm your browsing experience (for example, by changing your homepage or showing extra ads on sites you visit).
+      </message>
+      <message name="IDS_HARMFUL_V3_EXPLANATION_PARAGRAPH" desc="The explanation of why Safe Browsing has blocked the page.">
+        Google Safe Browsing recently <ph name="BEGIN_LINK">&lt;a href="#" id="help-link"&gt;</ph>found harmful programs<ph name="END_LINK">&lt;/a&gt;</ph> on <ph name="SITE">$1<ex>example.com</ex></ph>.
+      </message>
+      <message name="IDS_HARMFUL_V3_PROCEED_PARAGRAPH" desc="The paragraph that lets the user skip the warning.">
+        If you understand the risks to your security, you may <ph name="BEGIN_LINK">&lt;a href="#" id="proceed-link"&gt;</ph>visit this site<ph name="END_LINK">&lt;/a&gt;</ph> before the harmful programs have been removed.
+      </message>
+
+      <!-- Phishing interstitial V3 -->
+      <message name="IDS_PHISHING_V3_HEADING" desc="The large heading at the top of the phishing interstitial.">
+        Phishing attack ahead
+      </message>
+      <message name="IDS_PHISHING_V3_PRIMARY_PARAGRAPH" desc="The primary explanatory paragraph for the malware interstitial.">
+        Attackers on <ph name="BEGIN_BOLD">&lt;strong&gt;</ph><ph name="SITE">$1<ex>example.com</ex></ph><ph name="END_BOLD">&lt;/strong&gt;</ph> might try to trick you to steal your information (for example, passwords, messages, or credit cards).
+      </message>
+      <message name="IDS_PHISHING_V3_EXPLANATION_PARAGRAPH" desc="The explanation of why Safe Browsing has blocked the page.">
+      Google Safe Browsing recently detected phishing on <ph name="SITE">$1<ex>example.com</ex></ph>. <ph name="BEGIN_LINK">&lt;a href="#" id="help-link"&gt;</ph>Phishing sites<ph name="END_LINK">&lt;/a&gt;</ph> pretend to be other websites to trick you.
+      </message>
+      <message name="IDS_PHISHING_V3_PROCEED_PARAGRAPH" desc="The paragraph that lets the user skip the warning.">
+        If you understand the risks to your security, you may <ph name="BEGIN_LINK">&lt;a href="#" id="proceed-link"&gt;</ph>visit this infected site<ph name="END_LINK">&lt;/a&gt;</ph>.
+      </message>
+
+      <!-- SSL Interstitial V2 -->
+      <message name="IDS_SSL_V2_TITLE" desc="The tab title for the SSL interstitial.">
+        Privacy error
+      </message>
+      <message name="IDS_SSL_V2_HEADING" desc="The large heading at the top of the SSL interstitial.">
+        Your connection is not private
+      </message>
+      <message name="IDS_SSL_V2_PRIMARY_PARAGRAPH" desc="The primary explanatory paragraph for the SSL interstitial.">
+        Attackers might be trying to steal your information from <ph name="BEGIN_BOLD">&lt;strong&gt;</ph><ph name="SITE">$1<ex>google.com</ex></ph><ph name="END_BOLD">&lt;/strong&gt;</ph> (for example, passwords, messages, or credit cards).
+      </message>
+      <message name="IDS_SSL_V2_OPEN_DETAILS_BUTTON" desc="The text for the button that expands the details.">
+        Advanced
+      </message>
+      <message name="IDS_SSL_V2_CLOSE_DETAILS_BUTTON" desc="The text for the button that hides the details.">
+        Hide advanced
+      </message>
+
+      <!-- SSL Interstitial V2: Overridable -->
+      <message name="IDS_SSL_OVERRIDABLE_SAFETY_BUTTON" desc="The text for the button that takes the user back to the previous page.">
+        Back to safety
+      </message>
+      <message name="IDS_SSL_OVERRIDABLE_PROCEED_PARAGRAPH" desc="The text for the paragraph at the bottom with the proceed link.">
+        <ph name="BEGIN_LINK">&lt;a href="#" id="proceed-link"&gt;</ph>Proceed to <ph name="SITE">$1<ex>example.com</ex></ph> (unsafe)<ph name="END_LINK">&lt;/a&gt;</ph>
+      </message>
+
+      <!-- SSL Interstitial V2: Non-overridable -->
+      <message name="IDS_SSL_NONOVERRIDABLE_RELOAD_BUTTON" desc="The text for the button that reloads the page.">
+        Reload
+      </message>
+      <message name="IDS_SSL_NONOVERRIDABLE_MORE" desc="Body text for the explanation shown if user clicks on the Details button.">
+        <ph name="SITE">$1<ex>google.com</ex></ph> normally uses encryption to protect your information. When Chrome tried to connect to <ph name="SITE">$1<ex>google.com</ex></ph> this time, the website sent back unusual
+and incorrect credentials. Either an attacker is trying to pretend to be <ph name="SITE">$1<ex>google.com</ex></ph>, or a Wi-Fi sign-in screen has interrupted the connection. Your information is still secure because Chrome stopped the connection before any data was exchanged.
+      </message>
+      <message name="IDS_SSL_NONOVERRIDABLE_PINNED" desc="A sentence to explain why the user can't proceed, plus a link to a help page about certificate pinning.">
+      You cannot visit <ph name="SITE">$1<ex>google.com</ex></ph> right now because the website <ph name="BEGIN_LINK">&lt;a href="#" id="help-link"&gt;</ph>uses certificate pinning<ph name="END_LINK">&lt;/a&gt;</ph>. Network errors and attacks are usually temporary, so this page will probably work later.
+      </message>
+      <message name="IDS_SSL_NONOVERRIDABLE_HSTS" desc="A sentence to explain why the user can't proceed, plus a link to a help page about HSTS.">
+      You cannot visit <ph name="SITE">$1<ex>google.com</ex></ph> right now because the website <ph name="BEGIN_LINK">&lt;a href="#" id="help-link"&gt;</ph>uses HSTS<ph name="END_LINK">&lt;/a&gt;</ph>. Network errors and attacks are usually temporary, so this page will probably work later.
+      </message>
+      <message name="IDS_SSL_NONOVERRIDABLE_REVOKED" desc="A sentence to explain why the user can't proceed, plus a link to a help page about certificate revocation.">
+      You cannot visit <ph name="SITE">$1<ex>google.com</ex></ph> right now because <ph name="BEGIN_LINK">&lt;a href="#" id="help-link"&gt;</ph>this certificate has been revoked<ph name="END_LINK">&lt;/a&gt;</ph>. Network errors and attacks are usually temporary, so this page will probably work later.
+      </message>
+      <message name="IDS_SSL_NONOVERRIDABLE_INVALID" desc="A sentence to explain why the user can't proceed.">
+      You cannot visit <ph name="SITE">$1<ex>google.com</ex></ph> right now because the website sent scrambled credentials that Chrome cannot process. Network errors and attacks are usually temporary, so this page will probably work later.
+      </message>
+
+      <!-- Misc strings for SSL UI -->
+      <message name="IDS_UNSAFE_FRAME_MESSAGE" desc="The text displayed in the content that is subsituted to an unsafe frame.">
+        This frame was blocked because it contains some insecure content.
+      </message>
+
+      <!-- SSL client authentication certificate selection dialog -->
+      <message name="IDS_CLIENT_CERT_DIALOG_TITLE" desc="The title of the dialog that prompts for a certificate when doing SSL client authentication.">
+        Select a certificate
+      </message>
+
+      <message name="IDS_CLIENT_CERT_DIALOG_TEXT" desc="The text in the dialog that prompts for a certificate when doing SSL client authentication.">
+        Select a certificate to authenticate yourself to <ph name="HOST_NAME">$1<ex>www.google.com</ex></ph>
+      </message>
+
+      <!-- NSS PKCS #11 password dialog -->
+      <message name="IDS_CRYPTO_MODULE_AUTH_DIALOG_TITLE" desc="The title in the dialog that prompts for security device password.">
+       Sign in to Security Device
+      </message>
+      <message name="IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_KEYGEN" desc="The text in the dialog that prompts for security device password for key generation.">
+       Please sign in to <ph name="TOKEN_NAME">$1<ex>Software Security Device</ex></ph> to generate a key for <ph name="HOST_NAME">$2<ex>www.google.com</ex></ph>.
+      </message>
+      <message name="IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CERT_ENROLLMENT" desc="The text in the dialog that prompts for security device password for cert enrollment.">
+       Please sign in to <ph name="TOKEN_NAME">$1<ex>Software Security Device</ex></ph> to import client certificate from <ph name="HOST_NAME">$2<ex>www.google.com</ex></ph>.
+      </message>
+      <message name="IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CLIENT_AUTH" desc="The text in the dialog that prompts for security device password when doing key generation.">
+       Please sign in to <ph name="TOKEN_NAME">$1<ex>Software Security Device</ex></ph> to authenticate to <ph name="HOST_NAME">$2<ex>www.google.com</ex></ph> with your certificate.
+      </message>
+      <message name="IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_LIST_CERTS" desc="The text in the dialog that prompts for security device password when using the certificate manager without taking a specific action (eg, just loading the cert manager).">
+       Please sign in to <ph name="TOKEN_NAME">$1<ex>Software Security Device</ex></ph>.
+      </message>
+      <message name="IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CERT_IMPORT" desc="The text in the dialog that prompts for security device password when using the certificate manager to import a client certificate.">
+       Please sign in to <ph name="TOKEN_NAME">$1<ex>Software Security Device</ex></ph> to import the client certificate.
+      </message>
+      <message name="IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CERT_EXPORT" desc="The text in the dialog that prompts for security device password when using the certificate manager to export a client certificate.">
+       Please sign in to <ph name="TOKEN_NAME">$1<ex>Software Security Device</ex></ph> to export the client certificate.
+      </message>
+      <message name="IDS_CRYPTO_MODULE_AUTH_DIALOG_PASSWORD_FIELD" desc="Label for password entry in the dialog that prompts for security device password.">
+       Password:
+      </message>
+      <message name="IDS_CRYPTO_MODULE_AUTH_DIALOG_OK_BUTTON_LABEL" desc="Label for OK button in the dialog that prompts for security device password.">
+       Unlock
+      </message>
+
+      <!-- HTTP POST Warning -->
+      <message name="IDS_HTTP_POST_WARNING_TITLE" desc="Title for dialog that warns users about a navigation that results in a repost">
+        Confirm Form Resubmission
+      </message>
+      <message name="IDS_HTTP_POST_WARNING" desc="Re-navigation to page that leads to HTTP POST" formatter_data="android_java">
+        The page that you're looking for used information that you entered. Returning to that page might cause any action you took to be repeated. Do you want to continue?
+      </message>
+      <message name="IDS_HTTP_POST_WARNING_RESEND" desc="Resend button for post warning" formatter_data="android_java">
+        Continue
+      </message>
+
+      <!-- Menus -->
+      <if expr="is_macosx">
+        <message name="IDS_MENU_EMPTY_SUBMENU" desc="Used when a submenu has no entries">
+          (empty)
+        </message>
+      </if>
+
+      <!-- Mac First-run dialog messages -->
+      <if expr="is_macosx">
+        <message name="IDS_FIRSTRUN_DLG_MAC_WINDOW_TITLE" desc="Window title of First Run Title on OS X - displayed in Window title bar">
+          Welcome to <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>
+        </message>
+        <message name="IDS_FIRSTRUN_DLG_MAC_COMPLETE_INSTALLATION_LABEL" desc="Label at top of Dialog noting what's going to happen">
+          <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> is ready to complete your installation
+        </message>
+        <message name="IDS_FIRSTRUN_DLG_MAC_OPTIONS_SEND_USAGE_STATS_LABEL" desc="Label for checkbox to ask whether to send usage stats to Google">
+          Help make <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> better by automatically sending usage statistics and crash reports to Google
+        </message>
+        <message name="IDS_FIRSTRUN_DLG_MAC_START_CHROME_BUTTON" desc="Button to Start Google Chrome">
+          Start <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>
+        </message>
+      </if>
+
+      <!-- Android First-run messages -->
+      <if expr="is_android">
+        <message name="IDS_FIRSTRUN_TAKE_TOUR" desc="Button or link to begin a product tour of Chrome">
+          Take a tour
+        </message>
+        <message name="IDS_FIRSTRUN_SETTINGS_LINK" desc="Link to take user to Chrome's settings menu.">
+          Settings
+        </message>
+        <message name="IDS_FIRSTRUN_TOS_EXPLANATION" desc="Message explaining that use of Chrome is governed by Chrome's terms of service.">
+          Your use of Chrome is subject to the Chrome <ph name="BEGIN_LINK1">&lt;a href="#" id="tos-link"&gt;</ph>Terms of Service<ph name="END_LINK1">&lt;/a&gt;</ph> and <ph name="BEGIN_LINK2">&lt;a href="$1"&gt;</ph>Privacy Notice<ph name="END_LINK2">&lt;/a&gt;</ph>.
+        </message>
+        <message name="IDS_FIRSTRUN_SIGNED_IN_TITLE" desc="Message informing the user that they are now signed in." formatter_data="android_java">
+          You're now signed in to Chrome.
+        </message>
+        <message name="IDS_FIRSTRUN_SIGNED_IN_DESCRIPTION" desc="Message informing the user what is being synced." formatter_data="android_java">
+          Your open tabs, bookmarks, history, and more are being synced with your Google Account.
+        </message>
+      </if>
+
+      <!-- First run bubble popup -->
+      <message name="IDS_FR_BUBBLE_TITLE" desc="Bubble-like popup dialog title">
+        You can search from here with <ph name="SEARCH_ENGINE">$1<ex>Google</ex></ph>
+      </message>
+      <message name="IDS_FR_BUBBLE_SUBTEXT" desc="Text under the title for the bubble">
+        Type to search or enter a URL to navigate - everything just works.
+      </message>
+      <message name="IDS_FR_BUBBLE_CHANGE" desc="Text for the change button on the bubble">
+        Change
+      </message>
+
+      <!-- Sad Tab Strings -->
+      <message name="IDS_SAD_TAB_TITLE" desc="The title of the sad tab page that is shown when a tab crashes. This is intended to be a humorous exclamation of dismay." formatter_data="android_java">
+        Aw, Snap!
+      </message>
+      <message name="IDS_SAD_TAB_MESSAGE" desc="The message displayed on the sad tab page." formatter_data="android_java">
+        Something went wrong while displaying this webpage. To continue, reload or go to another page.
+      </message>
+      <message name="IDS_SAD_TAB_HELP_MESSAGE" desc="The help message displayed on the sad tab page, with IDS_SAD_TAB_HELP_LINK embedded as a link to help.">
+        If you're seeing this frequently, try these <ph name="HELP_LINK">$1<ex>suggestions</ex></ph>.
+      </message>
+      <message name="IDS_SAD_TAB_HELP_LINK" desc="The link text displayed on the sad tab page pointing the users to a help article.">
+        suggestions
+      </message>
+      <message name="IDS_SAD_TAB_RELOAD_LABEL" desc="Button label in the sad tab page for reloading a page." formatter_data="android_java">
+        Reload
+      </message>
+
+      <!-- Killed Tab Strings -->
+      <!-- TODO(gspencer): These are temporary values until real
+           values are supplied by UI team. See http://crosbug.com/10711 -->
+      <message name="IDS_KILLED_TAB_TITLE" desc="The title of the killed tab page that is shown when a tab is killed by the OS. This is intended to be a humorous exclamation of dismay.">
+        He's dead, Jim!
+      </message>
+      <message name="IDS_KILLED_TAB_MESSAGE" desc="The message displayed on the killed tab page.">
+        Either Chrome ran out of memory or the process for the webpage was terminated for some other reason.  To continue, reload or go to another page.
+      </message>
+      <message name="IDS_KILLED_TAB_FEEDBACK_LINK" desc="The text for the feedback link on the killed tab page.">
+        Send feedback to help improve Chrome
+      </message>
+      <message name="IDS_KILLED_TAB_FEEDBACK_MESSAGE" desc="The text to auto-populate the feedback page with.">
+Chrome ran out of memory.
+'''
+      </message>
+
+      <!-- Default Browser related messages -->
+      <if expr="is_win">
+        <message name="IDS_HIDE_ICONS_NOT_SUPPORTED" desc="Message to explain we only support uninstall and not hide-icons.">
+  To hide access to this program, you need to uninstall it by using
+  <ph name="CONTROL_PANEL_APPLET_NAME">$1<ex>Add/Remove Programs</ex></ph> in Control Panel.
+
+  Would you like to start <ph name="CONTROL_PANEL_APPLET_NAME">$1<ex>Add/Remove Programs</ex></ph>?
+        </message>
+      </if>
+
+      <!-- chrome://help -->
+      <if expr="not is_android">
+        <if expr="chromeos">
+          <message name="IDS_SHOW_MORE_INFO" desc="The label of the 'More info' link.">
+            More info...
+          </message>
+          <message name="IDS_HIDE_MORE_INFO" desc="The label of the 'Hide info' link.">
+            Hide info...
+          </message>
+        </if>
+
+        <message name="IDS_ABOUT_TITLE" desc="Label used for title of the About page, chrome://help.">
+          About
+        </message>
+        <if expr="not chromeos and use_titlecase">
+          <message name="IDS_RELAUNCH_BUTTON" desc="Titlecase: The label for the relaunch button that relaunches the browser once update is complete">
+            Relaunch
+          </message>
+        </if>
+        <if expr="not chromeos and not use_titlecase">
+          <message name="IDS_RELAUNCH_BUTTON" desc="The label for the relaunch button that relaunches the browser once update is complete">
+            Relaunch
+          </message>
+        </if>
+        <if expr="chromeos and use_titlecase">
+          <message name="IDS_RELAUNCH_BUTTON" desc="Titlecase: The label for the relaunch button that relaunches the browser once update is complete">
+            Restart
+          </message>
+          <message name="IDS_RELAUNCH_AND_POWERWASH_BUTTON" desc="Titlecase: The label for the  button that relaunches and powerwashes the browser once update is complete">
+            Relaunch and Powerwash
+          </message>
+        </if>
+        <if expr="chromeos and not use_titlecase">
+          <message name="IDS_RELAUNCH_BUTTON" desc="The label for the relaunch button that relaunches the browser once update is complete">
+            Restart
+          </message>
+          <message name="IDS_RELAUNCH_AND_POWERWASH_BUTTON" desc="Titlecase: The label for the  button that relaunches and powerwashes the browser once update is complete">
+            Relaunch and Powerwash
+          </message>
+        </if>
+        <if expr="chromeos">
+          <message name="IDS_ABOUT_PRODUCT_DESCRIPTION" desc="The text label describing Chrome OS">
+            The faster, simpler, and more secure computer
+          </message>
+        </if>
+        <if expr="not chromeos">
+          <message name="IDS_ABOUT_PRODUCT_DESCRIPTION" desc="The text label describing the Chrome browser">
+            A web browser built for speed, simplicity, and security
+          </message>
+        </if>
+        <message name="IDS_ABOUT_PRODUCT_VERSION" desc="The text label describing the version of the browser">
+          Version <ph name="PRODUCT_VERSION">$1<ex>15.0.865.0</ex></ph>
+        </message>
+      </if> <!-- not is_android -->
+
+      <if expr="chromeos">
+        <message name="IDS_WEBKIT" desc="The name of the WebKit project; should not require translation.">
+          WebKit
+        </message>
+        <message name="IDS_ABOUT_PAGE_FIRMWARE" desc="Label used for Chrome OS bios firmware version.">
+          Firmware
+        </message>
+        <message name="IDS_ABOUT_PAGE_CHANNEL" desc="The channel label under _More_Info_.">
+          Channel
+        </message>
+        <message name="IDS_ABOUT_PAGE_CHANNEL_STABLE" desc="The stable option in the channel select.">
+          Stable
+        </message>
+        <message name="IDS_ABOUT_PAGE_CHANNEL_BETA" desc="The beta option in the channel select.">
+          Beta
+        </message>
+        <message name="IDS_ABOUT_PAGE_CHANNEL_DEVELOPMENT" desc="The development option in the channel select.">
+          Developer - unstable
+        </message>
+        <message name="IDS_ABOUT_PAGE_CHANNEL_CHANGED" desc="The message to confirm that channel has changed.">
+          You have switched to the <ph name="CHANNEL_NAME">$1<ex>Stable</ex></ph> channel.
+        </message>
+        <message name="IDS_ABOUT_PAGE_CURRENT_CHANNEL_STABLE" desc="The stable label in the message about current channel.">
+          stable
+        </message>
+        <message name="IDS_ABOUT_PAGE_CURRENT_CHANNEL_BETA" desc="The beta label in the message about current channel.">
+          beta
+        </message>
+        <message name="IDS_ABOUT_PAGE_CURRENT_CHANNEL_DEV" desc="The dev label in the message about current channel.">
+          dev
+        </message>
+        <message name="IDS_ABOUT_PAGE_CURRENT_CHANNEL" desc="The message about current channel.">
+          Currently on <ph name="CHANNEL_NAME">$1<ex>Stable</ex></ph> channel.
+        </message>
+        <message name="IDS_ABOUT_PAGE_CHANNEL_CHANGE_BUTTON" desc="The label for the button for channel change.">
+          Change channel...
+        </message>
+        <message name="IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_TITLE" desc="The title of the window for channel change.">
+          Change channel
+        </message>
+        <message name="IDS_ABOUT_PAGE_CHANNEL_CHANGE_DISALLOWED_MESSAGE" desc="The error message that is displayed when non-owner tries to switch channel.">
+          This setting is enforced by your administrator.
+        </message>
+        <message name="IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_POWERWASH_TITLE" desc="The title for the message that warns user about powerwash.">
+          Powerwash required on next reboot
+        </message>
+        <message name="IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_POWERWASH_MESSAGE" desc="Message that warns user about powerwash.">
+          This will remove all local users, files, data, and other settings after your next restart. All users will need to sign in again.
+        </message>
+        <message name="IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_DELAYED_CHANGE_TITLE" desc="The title for the message that notifies user that channel change will be applied later.">
+          Channel change will be applied later.
+        </message>
+        <message name="IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_DELAYED_CHANGE_MESSAGE" desc="Message that notifies user that channel change will be applied later.">
+          You are changing to a channel with an older version of <ph name="PRODUCT_NAME">$1<ex>Chrome OS</ex></ph>. The channel change will be applied when the channel version matches the version currently installed on your device.
+        </message>
+        <message name="IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_UNSTABLE_TITLE" desc="The title for the message that warns user about switching to developer (unstable) channel.">
+          Warning: you are switching to developer channel
+        </message>
+        <message name="IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_UNSTABLE_MESSAGE" desc="Message that warns user about switching to developer (unstable) channel.">
+          You are updating to an unstable version of <ph name="PRODUCT_NAME">$1<ex>Chrome OS</ex></ph> which contains features that are in progress. Crashes and unexpected bugs will occur. Please proceed with caution.
+        </message>
+        <message name="IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_POWERWASH_BUTTON" desc="The label for the button for channel switch and powerwash.">
+          Change channel and Powerwash
+        </message>
+        <message name="IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_CHANGE_BUTTON" desc="The label for the button for channel switch.">
+          Change channel
+        </message>
+        <message name="IDS_ABOUT_PAGE_CHANNEL_CHANGE_PAGE_CANCEL_BUTTON" desc="The label for the button for cancelling channel change.">
+          Cancel
+        </message>
+      </if> <!-- chromeos -->
+
+      <message name="IDS_PLATFORM_LABEL" desc="Label for Platform">
+        Platform
+      </message>
+
+      <!-- chrome://settings. Android uses native UI for settings -->
+      <if expr="not is_android">
+        <if expr="chromeos">
+          <message name="IDS_OPTIONS_INTERNET_TAB_LABEL" desc="The title of the Internet tab">
+            Internet
+          </message>
+          <message name="IDS_OPTIONS_INTERNET_OPTIONS_GROUP_LABEL" desc="The title of the 'Internet connections' group">
+            Internet connection
+          </message>
+          <message name="IDS_OPTIONS_INTERNET_OPTIONS_BUTTON_TITLE" desc="The title of the 'Manage connections...' button">
+            Manage connections...
+          </message>
+          <message name="IDS_OPTIONS_ACCOUNTS_TAB_LABEL" desc="The title of the Accounts tab">
+            Users
+          </message>
+          <message name="IDS_OPTIONS_ACCOUNTS_BUTTON_TITLE" desc="The title of the Manage Accounts button">
+            Manage other users...
+          </message>
+          <message name="IDS_OPTIONS_PROXY_TAB_LABEL" desc="The title of the proxy subtab">
+            Proxy
+          </message>
+        </if>
+        <message name="IDS_OPTIONS_TAB_EXTENSION_CONTROLLED" desc="The label in the bubble showing which extension is controlling a particular setting. Please preserve the embedded HTML (&lt;b&gt; and &lt;/b&gt;) during translation. They serve to make the name bold.">
+          An extension, &lt;b&gt;<ph name="EXTENSION_NAME">$1<ex>MyFirstExtension</ex></ph>&lt;/b&gt;, is controlling this setting.
+        </message>
+        <message name="IDS_OPTIONS_TAB_EXTENSION_CONTROLLED_DISABLE" desc="The 'Disable Extension' button label in the bubble showing which extension is controlling a particular setting.">
+          Disable extension
+        </message>
+        <message name="IDS_OPTIONS_TAB_TITLE" desc="The format of the title on the browser tab for an options subpage, e.g. Settings - Basics">
+          <ph name="OPTIONS_TITLE">$1<ex>Settings</ex></ph> - <ph name="SUBPAGE_TITLE">$2<ex>Under the Hood</ex></ph>
+        </message>
+        <message name="IDS_OPTIONS_DELETABLE_ITEM_DELETE_BUTTON" desc="The label of the button to delete an item in a list">
+          Delete this item
+        </message>
+        <message name="IDS_OPTIONS_STARTUP_GROUP_NAME" desc="The title of the startup group">
+          On startup
+        </message>
+        <message name="IDS_OPTIONS_STARTUP_SHOW_NEWTAB" desc="The label of the 'Show home page' startup option radio button">
+          Open the New Tab page
+        </message>
+        <message name="IDS_OPTIONS_STARTUP_RESTORE_LAST_SESSION" desc="The label of the 'Continue where I left off' startup option radio button">
+          Continue where you left off
+        </message>
+        <message name="IDS_OPTIONS_STARTUP_SHOW_PAGES" desc="The label of the 'Show these pages:' startup option radio button">
+          Open a specific page or set of pages.
+        </message>
+        <message name="IDS_OPTIONS_STARTUP_SET_PAGES" desc="The link that is clicked to choose the set of pages that will be shown at startup">
+          Set pages
+        </message>
+        <message name="IDS_OPTIONS_STARTUP_PAGE_TOOLTIP" desc="A tooltip to display for a page in the list of pages to open on startup">
+          <ph name="PAGE_TITLE">$1<ex>Google</ex></ph> - <ph name="PAGE_URL">$2<ex>http://www.google.com/</ex></ph>
+        </message>
+        <message name="IDS_OPTIONS_STARTUP_ADD_LABEL" desc="The text labelling the add row in the custom startup urls list">
+          Add a new page
+        </message>
+        <message name="IDS_OPTIONS_STARTUP_PAGES_DIALOG_TITLE" desc="The title of the dialog where the user chooses the set of pages that will be shown at startup">
+          Startup pages
+        </message>
+        <message name="IDS_OPTIONS_STARTUP_USE_CURRENT" desc="The label of the 'Use Current' button for the custom startup urls list">
+          Use current pages
+        </message>
+        <message name="IDS_OPTIONS_PROXY_GROUP_NAME" desc="The title of the Proxy group">
+          Proxy
+        </message>
+        <message name="IDS_OPTIONS_DEFAULTSEARCH_MANAGE_ENGINES" desc="The label of the 'Manage search engines' button">
+          Manage search engines...
+        </message>
+        <message name="IDS_OPTIONS_HOMEPAGE_NTP" desc="The value displayed on the settings page to indicate that we're using the new tab page as the homepage">
+          New Tab page
+        </message>
+        <message name="IDS_OPTIONS_HOMEPAGE_USE_NEWTAB" desc="The title of the 'Use the New Tab page' for the home page radio">
+          Use the New Tab page
+        </message>
+        <message name="IDS_OPTIONS_HOMEPAGE_USE_URL" desc="The title of the 'Use this page' for the home page radio">
+          Open this page:
+        </message>
+        <message name="IDS_OPTIONS_TOOLBAR_SHOW_HOME_BUTTON" desc="The label of the 'Show Home button' checkbox">
+          Show Home button
+        </message>
+        <message name="IDS_OPTIONS_CHANGE_HOME_PAGE" desc="The text of the button that allows the user to change her home page">
+          Change
+        </message>
+        <message name="IDS_OPTIONS_TOOLBAR_SHOW_BOOKMARKS_BAR" desc="The label of the 'Show bookmarks bar' checkbox">
+          Always show the bookmarks bar
+        </message>
+        <message name="IDS_TOOLBAR_INFORM_SET_HOME_PAGE" desc="The confirmation message when dropping a link on the Home toolbar button">
+           Your home page has been set.
+        </message>
+        <message name="IDS_OPTIONS_DEFAULTSEARCH_GROUP_NAME" desc="The title of the default search engine group">
+          Search
+        </message>
+        <message name="IDS_OPTIONS_VOICE_GROUP_NAME" desc="The title of the voice group in the settings page">
+          Voice
+        </message>
+        <message name="IDS_SEARCH_ENGINE_ADD_NEW_NAME_PLACEHOLDER" desc="Placeholder text for name before the user adds a new search engine" >
+          Add a new search engine
+        </message>
+        <message name="IDS_SEARCH_ENGINE_ADD_NEW_KEYWORD_PLACEHOLDER" desc="Placeholder text for keyword before the user adds a new search engine" >
+          Keyword
+        </message>
+        <message name="IDS_SEARCH_ENGINE_ADD_NEW_URL_PLACEHOLDER" desc="Placeholder text for URL before the user adds a new search engine" >
+          URL with %s in place of query
+        </message>
+        <message name="IDS_OPTIONS_DEFAULTBROWSER_GROUP_NAME" desc="The title of the default browser group">
+          Default browser
+        </message>
+        <message name="IDS_OPTIONS_DEFAULTBROWSER_DEFAULT" desc="The text displayed when Chrome is not the default browser">
+          The default browser is currently <ph name="BROWSER_NAME">$1<ex>Firefox</ex></ph>.
+        </message>
+        <message name="IDS_OPTIONS_DEFAULTBROWSER_NOTDEFAULT" desc="The text displayed when Chrome is not the default browser">
+          <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> is not currently your default browser.
+        </message>
+        <message name="IDS_OPTIONS_DEFAULTBROWSER_UNKNOWN" desc="The text displayed when Chrome cannot determine or set the default browser">
+          <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> cannot determine or set the default browser.
+        </message>
+        <message name="IDS_OPTIONS_DEFAULTBROWSER_SXS" desc="The text displayed when Chrome is installed in side-by-side mode, which does not support setting as the default browser.">
+          This is a secondary installation of <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>, and cannot be made your default browser.
+        </message>
+        <message name="IDS_OPTIONS_DOWNLOADLOCATION_GROUP_NAME" desc="The title of the download location group">
+          Downloads
+        </message>
+        <message name="IDS_OPTIONS_DOWNLOADLOCATION_CHANGE_BUTTON" desc="The label of the 'Change...' button">
+          Change...
+        </message>
+        <message name="IDS_OPTIONS_DOWNLOADLOCATION_BROWSE_TITLE" desc="In the 'Browse For Folder' dialog on Windows, this is the text that appears above the directory selector.">
+          Download location:
+        </message>
+        <message name="IDS_OPTIONS_DOWNLOADLOCATION_ASKFORSAVELOCATION" desc="The 'Ask for save location before downloading' checkbox label">
+          Ask where to save each file before downloading
+        </message>
+        <message name="IDS_OPTIONS_EASY_UNLOCK_SECTION_TITLE" desc="The title of the Easy Unlock section on the settings page.">
+          Smart Lock (Beta)
+        </message>
+        <message name="IDS_OPTIONS_EASY_UNLOCK_SETUP_INTRO" desc="The text to show in Easy Unlock section to introduce the feature.">
+          Keep your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> unlocked when your Android phone is unlocked and nearby – no need to type your password. Learn more
+        </message>
+        <message name="IDS_OPTIONS_EASY_UNLOCK_SETUP_BUTTON" desc="The label of the button to set up Easy Unlock section on the settings page.">
+          Set up Smart Lock
+        </message>
+        <message name="IDS_OPTIONS_EASY_UNLOCK_DESCRIPTION" desc="The text that describs what Easy Unlock does.">
+          Your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> will be unlocked when your Android phone is unlocked and nearby.
+        </message>
+        <message name="IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_BUTTON" desc="The label of the button to disable Easy unlock on the settings page and the turn off Easy unlock dialog.">
+          Turn off
+        </message>
+        <message name="IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_TITLE" desc="The title of the Easy unlock turn off dialog.">
+          Turn off Smart Lock
+        </message>
+        <message name="IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_DESCRIPTION" desc="The description text of the Easy unlock turn off dialog.">
+          If you turn off Smart Lock, you won’t be able to unlock your Chrome devices when your phone is with you. You will have to type in your password.
+        </message>
+        <message name="IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_OFFLINE_TITLE" desc="The title text on the Easy unlock turn off dialog when Easy unlock could not be turned off because the device is offline.">
+          Please connect to a network
+        </message>
+        <message name="IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_OFFLINE_MESSAGE" desc="The text on the Easy unlock turn off dialog when Easy unlock could not be turned off because the device is offline.">
+          You must be online to turn off Smart Lock because this setting is synced to your phone and other devices. Please connect to a network first.
+        </message>
+        <message name="IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_ERROR_TITLE" desc="The title text on the Easy unlock turn off dialog when Easy unlock could not be turned off because there is a server error.">
+          Smart Lock is unavailable
+        </message>
+        <message name="IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_ERROR_MESSAGE" desc="The text on the Easy unlock turn off dialog when Easy unlock could not be turned off because there is a server error.">
+          Unable to connect to Smart Lock right now. Please try again later.
+        </message>
+        <message name="IDS_OPTIONS_EASY_UNLOCK_TURN_OFF_RETRY_BUTTON" desc="The label text of the retry button on the Easy unlock turn off dialog when Easy unlock could not be turned off because there is a server error.">
+          Retry
+        </message>
+        <message name="IDS_OPTIONS_OPEN_FILE_TYPES_AUTOMATICALLY" desc="The information label for the 'Clear auto-opening settings' button">
+          You have chosen to open certain file types automatically after downloading.
+        </message>
+        <message name="IDS_OPTIONS_AUTOOPENFILETYPES_RESETTODEFAULT" desc="The label of the 'Reset always open files' button">
+          Clear auto-opening settings
+        </message>
+        <message name="IDS_OPTIONS_ADVANCED_LANGUAGE_LABEL" desc="The label for the Language section">
+          Change how <ph name="APP_NAME">$1<ex>Chrome</ex></ph> handles and displays languages.
+        </message>
+        <message name="IDS_OPTIONS_TRANSLATE_ENABLE_TRANSLATE" desc="The label of the check-box that enables page translate">
+          Offer to translate pages that aren't in a language you read.
+        </message>
+        <message name="IDS_OPTIONS_TRANSLATE_MANAGE_LANGUAGES" desc="The link that is clicked to manage languages for translate">
+          Manage languages
+        </message>
+        <message name="IDS_OPTIONS_PASSWORDS_AND_FORMS_GROUP_NAME" desc="The title of the 'Passwords and forms' group">
+          Passwords and forms
+        </message>
+        <message name="IDS_OPTIONS_PASSWORD_MANAGER_ENABLE" desc="The label of the password manager checkbox">
+          Offer to save your web passwords.
+        </message>
+        <message name="IDS_OPTIONS_PASSWORDS_AUTOLOGIN" desc="The label of the 'autologinEnabled' checkbox">
+          Offer to sign in to Google sites automatically with this account
+        </message>
+        <message name="IDS_OPTIONS_AUTOFILL_ENABLE" desc="The label of the 'Ask me to enable Autofill' radio button">
+          Enable Autofill to fill out web forms in a single click.
+        </message>
+        <message name="IDS_AUTOFILL_EDIT_PROFILE_BUTTON" desc="The label of the button that edits the currently selected Autofill profile.">
+          Edit...
+        </message>
+        <message name="IDS_OPTIONS_MANAGE_AUTOFILL_SETTINGS_LINK" desc="The label of the 'Manage Autofill settings' link">
+          Manage Autofill settings
+        </message>
+        <message name="IDS_AUTOFILL_HELP_LABEL" desc="The label of the Help link in the Autofill settings overlay.">
+          About Autofill
+        </message>
+        <message name="IDS_AUTOFILL_ADD_ADDRESS_BUTTON" desc="The label of the button that adds a new Autofill address.">
+          Add new street address...
+        </message>
+        <message name="IDS_AUTOFILL_ADD_CREDITCARD_BUTTON" desc="The label of the button that adds a new Autofill credit card.">
+          Add new credit card...
+        </message>
+        <message name="IDS_AUTOFILL_OPTIONS_TITLE" desc="The title of the Autofill dialog.">
+          Autofill settings
+        </message>
+        <if expr="is_macosx">
+          <message name="IDS_AUTOFILL_USE_MAC_ADDRESS_BOOK" desc="Checkbox label to enable access to the user's Address Book on Mac. On Mac 10.8+ the application that manages the Address Book is called Contacts.">
+            Include addresses from your Contacts card
+          </message>
+        </if>
+        <message name="IDS_AUTOFILL_ADDRESSES_GROUP_NAME" desc="The name of the Addresses group of the Autofill dialog.">
+          Addresses
+        </message>
+        <message name="IDS_AUTOFILL_CREDITCARDS_GROUP_NAME" desc="IThe name of the Credit Cards group of the Autofill dialog.">
+          Credit cards
+        </message>
+        <message name="IDS_AUTOFILL_EDIT_ADDRESS_CAPTION" desc="The caption on the edit Autofill address dialog.">
+          Edit address
+        </message>
+        <message name="IDS_AUTOFILL_ADD_ADDRESS_CAPTION" desc="The caption on the edit Autofill address dialog for the new entry.">
+          Add an address
+        </message>
+        <message name="IDS_AUTOFILL_EDIT_CREDITCARD_CAPTION" desc="The caption on the edit Autofill credit card dialog.">
+          Edit credit card
+        </message>
+        <message name="IDS_AUTOFILL_ADD_CREDITCARD_CAPTION" desc="The caption on the edit Autofill credit card dialog the new entry.">
+          Add a credit card
+        </message>
+
+        <message name="IDS_AUTOFILL_FIELD_LABEL_EMAIL" desc="The label of the Email entry.">
+          Email
+        </message>
+        <message name="IDS_AUTOFILL_FIELD_LABEL_PHONE" desc="The label of the Phone entry.">
+          Phone
+        </message>
+        <message name="IDS_AUTOFILL_FIELD_LABEL_ADD_NAME" desc="The placeholder text of the recipient or contact name field.">
+          Add name
+        </message>
+        <message name="IDS_AUTOFILL_FIELD_LABEL_ADD_PHONE" desc="The placeholder text of the phone field.">
+          Add phone number
+        </message>
+        <message name="IDS_AUTOFILL_FIELD_LABEL_ADD_EMAIL" desc="The placeholder text of the email field.">
+          Add email address
+        </message>
+        <message name="IDS_AUTOFILL_FIELD_LABEL_NAME_ON_CARD" desc="The label of the Name on card entry.">
+          Name on card
+        </message>
+        <message name="IDS_AUTOFILL_FIELD_LABEL_CREDIT_CARD_NUMBER" desc="The label of the Credit card number entry.">
+          Credit card number
+        </message>
+        <message name="IDS_AUTOFILL_FIELD_LABEL_EXPIRATION_DATE" desc="The label of the Expiration date entry.">
+          Expiration date
+        </message>
+
+        <!-- Extension settings -->
+        <message name="IDS_MANAGE_EXTENSIONS_SETTING_WINDOWS_TITLE" desc="Title that appears in the dialogue title bar for manage extensions settings">
+          Extensions
+        </message>
+
+        <!-- Font settings -->
+        <message name="IDS_FONT_LANGUAGE_SETTING_FONT_TAB_TITLE" desc="Title that appears in the Fonts and Encoding subpage">
+          Fonts and encoding
+        </message>
+        <message name="IDS_FONT_LANGUAGE_SETTING_FONT_SELECTOR_STANDARD_LABEL" desc="Label of the Standard font section of the Fonts and Encoding subpage">
+          Standard font
+        </message>
+        <message name="IDS_FONT_LANGUAGE_SETTING_FONT_SELECTOR_SERIF_LABEL" desc="Label of the Serif font section of the Fonts and Encoding subpage">
+          Serif font
+        </message>
+        <message name="IDS_FONT_LANGUAGE_SETTING_FONT_SELECTOR_SANS_SERIF_LABEL" desc="Label of the Sans-serif font section of the Fonts and Encoding subpage">
+          Sans-serif font
+        </message>
+        <message name="IDS_FONT_LANGUAGE_SETTING_FONT_SELECTOR_FIXED_WIDTH_LABEL" desc="Label of the Fixed-width font section of the Fonts and Encoding subpage">
+          Fixed-width font
+        </message>
+        <message name="IDS_FONT_LANGUAGE_SETTING_MINIMUM_FONT_SIZE_TITLE" desc="Label of the Minimum font size section of the Fonts and Encoding subpage">
+          Minimum font size
+        </message>
+        <message name="IDS_FONT_LANGUAGE_SETTING_FONT_SUB_DIALOG_ENCODING_TITLE" desc="Label of the Encoding section of the Fonts and Encoding subpage">
+          Encoding
+        </message>
+        <message name="IDS_FONT_LANGUAGE_SETTING_FONT_SIZE_TINY" desc="Label for the 'Tiny' side of the font size range selector">
+          Tiny
+        </message>
+        <message name="IDS_FONT_LANGUAGE_SETTING_FONT_SIZE_HUGE" desc="Label for the 'Huge' side of the font size range selector">
+          Huge
+        </message>
+        <message name="IDS_FONT_LANGUAGE_SETTING_LOREM_IPSUM" desc="Sample text of 'Lorem ipsum' used to show the selected font/size">
+          Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+        </message>
+        <message name="IDS_FONT_LANGUAGE_SETTING_PLACEHOLDER" desc="Placeholder string for the Fonts and Encodings select menus">
+          Loading...
+        </message>
+        <message name="IDS_FONT_LANGUAGE_SETTING_ADVANCED_FONT_SETTINGS_INSTALL"
+                 desc="Explanatory message about how to get the Advanced Font Settings extension">
+          <ph name="BEGIN_LINK">&lt;a target="_blank" href="$1"&gt;</ph>Advanced font settings<ph name="END_LINK">&lt;/a&gt;</ph> (requires extension)
+        </message>
+        <message name="IDS_FONT_LANGUAGE_SETTING_ADVANCED_FONT_SETTINGS_OPTIONS"
+                 desc="Link to the Advanced Font Settings extension's options page">
+          Advanced font settings
+        </message>
+
+        <!-- Language & spell-checker settings -->
+        <message name="IDS_OPTIONS_SETTINGS_LANGUAGES_DIALOG_TITLE">
+          Languages
+        </message>
+        <if expr="chromeos">
+          <message name="IDS_OPTIONS_SETTINGS_LANGUAGES_AND_INPUT_DIALOG_TITLE">
+            Languages and input
+          </message>
+        </if>
+        <message name="IDS_OPTIONS_SETTINGS_LANGUAGES_LANGUAGES" desc="The label for the list of languages">
+          Languages
+        </message>
+        <message name="IDS_OPTIONS_SETTINGS_LANGUAGES_ADD_BUTTON"
+                 desc="The label for the add button for adding a language">
+          Add
+        </message>
+        <message name="IDS_OPTIONS_SETTINGS_LANGUAGES_ADD_LANGUAGE_INSTRUCTIONS"
+                 desc="Explanatory message about how to add and order languages">
+          Add languages and drag to order them based on your preference.
+        </message>
+        <message name="IDS_OPTIONS_SETTINGS_LANGUAGES_CANNOT_BE_DISPLAYED_IN_THIS_LANGUAGE"
+                 desc="The label for a language that cannot be used for UI">
+          <ph name="PRODUCT_NAME">$1<ex>Chrome OS</ex></ph> cannot be displayed in this language
+        </message>
+        <message name="IDS_OPTIONS_SETTINGS_LANGUAGES_IS_DISPLAYED_IN_THIS_LANGUAGE"
+                 desc="The label for a language that is currently used for UI">
+          <ph name="PRODUCT_NAME">$1<ex>Chrome OS</ex></ph> is displayed in this language
+        </message>
+        <message name="IDS_OPTIONS_SETTINGS_LANGUAGES_DISPLAY_IN_THIS_LANGUAGE"
+                 desc="The label is used for a button that changes the UI
+                       language of Chrome OS">
+          Display <ph name="PRODUCT_NAME">$1<ex>Chrome OS</ex></ph> in this language
+        </message>
+        <if expr="not is_macosx">
+          <message name="IDS_OPTIONS_SETTINGS_USE_THIS_FOR_SPELL_CHECKING"
+                   desc="The label for a language a button that changes the spell check language of Chrome">
+            Use this language for spell checking
+          </message>
+          <message name="IDS_OPTIONS_SETTINGS_CANNOT_BE_USED_FOR_SPELL_CHECKING"
+                   desc="The label for a language that cannot be used for spell checking">
+            This language cannot be used for spell checking
+          </message>
+          <message name="IDS_OPTIONS_SETTINGS_IS_USED_FOR_SPELL_CHECKING"
+                   desc="The label for a language that is currently used for spell checking">
+            This language is used for spell checking
+          </message>
+        </if>
+        <if expr="not chromeos">
+          <message name="IDS_OPTIONS_SETTINGS_LANGUAGES_RELAUNCH_BUTTON"
+                   desc="The label for the relaunch button for changing UI language">
+            Relaunch
+          </message>
+        </if>
+        <if expr="chromeos">
+          <message name="IDS_OPTIONS_SETTINGS_LANGUAGES_RELAUNCH_BUTTON"
+                   desc="The label for the restart button for changing UI language">
+            Restart
+          </message>
+        </if>
+        <message name="IDS_OPTIONS_LANGUAGES_ADD_TITLE" desc="The title for the add language dialog.">
+          Add language
+        </message>
+        <message name="IDS_OPTIONS_LANGUAGES_ADD_SELECT_LABEL" desc="The label for the add language select control.">
+          Language:
+        </message>
+        <message name="IDS_OPTIONS_LANGUAGES_OFFER_TO_TRANSLATE_IN_THIS_LANGUAGE" desc="The label for a checkbox which indicates whether or not the language should be translated.">
+          Offer to translate pages in this language
+        </message>
+        <message name="IDS_OPTIONS_LANGUAGES_CANNOT_TRANSLATE_IN_THIS_LANGUAGE" desc="The string displayed to user when the language cannot be translated.">
+          This language cannot be translated
+        </message>
+
+        <if expr="is_android or is_ios">
+          <message name="IDS_OPTIONS_SYSTEM_PROXIES_LABEL" desc="Mobile: The info label for the 'Proxy settings' button when managed by the system.">
+            <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> is using your device's system proxy settings to connect to the network.
+          </message>
+        </if>
+        <if expr="not is_android and not is_ios">
+          <message name="IDS_OPTIONS_SYSTEM_PROXIES_LABEL" desc="The info label for the 'Proxy settings' button when managed by the system.">
+            <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> is using your computer's system proxy settings to connect to the network.
+          </message>
+        </if>
+        <message name="IDS_OPTIONS_EXTENSION_PROXIES_LABEL" desc="The info label for the 'Proxy settings' button when managed by an extension.">
+          Your network proxy settings are being managed by an extension.
+        </message>
+
+        <message name="IDS_GOOGLE_CLOUD_PRINT" desc="The name of the Google Cloud Print product.">
+          Google Cloud Print
+        </message>
+        <message name="IDS_OPTIONS_CURRENT_USER_ONLY" desc="In the multi profiles user list, the tooltip text noticing that only the current user can modify these settings.">
+          You can only edit settings for the current user. Switch to this user to edit settings for it.
+        </message>
+        <message name="IDS_OPTIONS_CLOUD_PRINT_CONNECTOR_DISABLED_BUTTON" desc="The label of the cloud connector configure button when it hasn't been set up yet.">
+          Add printers
+        </message>
+        <message name="IDS_OPTIONS_CLOUD_PRINT_CONNECTOR_ENABLED_LABEL" desc="The label of the cloud print setup button when it has been set up.">
+          You have registered your printers with <ph name="CLOUD_PRINT_NAME">$1<ex>Google Cloud Print</ex></ph> using the account <ph name="EMAIL">$2<ex>foo@bar.com</ex></ph>
+        </message>
+        <message name="IDS_OPTIONS_CLOUD_PRINT_CONNECTOR_ENABLED_BUTTON" desc="The label of the cloud print connector configure button when it has been set up.">
+          Disconnect printers
+        </message>
+        <message name="IDS_OPTIONS_CLOUD_PRINT_CONNECTOR_ENABLING_BUTTON" desc="The label of the cloud connector configure button while it is being set up.">
+          Enabling...
+        </message>
+        <message name="IDS_OPTIONS_SAFEBROWSING_ENABLEPROTECTION" desc="The label of the 'Enable phishing and malware protection' checkbox">
+          Enable phishing and malware protection
+        </message>
+        <message name="IDS_OPTIONS_SAFEBROWSING_ENABLE_EXTENDED_REPORTING" desc="Checkbox label: should Chrome upload information about suspicious downloads and websites to Safe Browsing">
+          Automatically report details of possible security incidents to Google
+        </message>
+
+        <if expr="chromeos">
+          <message name="IDS_OPTIONS_FACTORY_RESET" desc="Name of the factory reset option on the chrome settings page">
+            Powerwash
+          </message>
+          <message name="IDS_OPTIONS_FACTORY_RESET_HEADING" desc="Name of the 'Factory reset' window">
+            Restart your device
+          </message>
+          <message name="IDS_OPTIONS_FACTORY_RESET_DESCRIPTION" desc="Description of the factory reset option on the chrome settings page">
+            Remove all user accounts and reset your <ph name="IDS_SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph> device to be just like new.
+          </message>
+          <message name="IDS_OPTIONS_FACTORY_RESET_BUTTON" desc="Name of the button to activate the factory reset option on the chrome settings page">
+            Powerwash
+          </message>
+          <message name="IDS_OPTIONS_FACTORY_RESET_WARNING" desc="Warning text in the 'Factory Reset' window">
+            A restart is required before your device can be reset with Powerwash.
+          </message>
+        </if>
+
+        <message name="IDS_OPTIONS_IMPORT_DATA_BUTTON" desc="Label for the import data button.">
+          Import bookmarks and settings...
+        </message>
+
+        <message name="IDS_OPTIONS_CONTROLLED_SETTING_POLICY" desc="Text displayed in the controlled settings bubble when a setting's value is enforced by policy.">
+          This setting is enforced by your administrator.
+        </message>
+        <message name="IDS_OPTIONS_CONTROLLED_SETTING_EXTENSION" desc="Text displayed in the controlled settings bubble when a setting's value is enforced by an extension.">
+          This setting is enforced by an extension.
+        </message>
+        <message name="IDS_OPTIONS_CONTROLLED_SETTING_EXTENSION_WITH_NAME" desc="Text displayed in the controlled settings bubble when a setting's value is enforced by an extension. The name of the extension would be displayed on the following line, thus the ending with ':'.">
+          This setting is controlled by:
+        </message>
+        <message name="IDS_OPTIONS_CONTROLLED_SETTING_MANAGE_EXTENSION" desc="Text displayed for a link to manage extension from the controlled settings bubble.">
+          Manage extension
+        </message>
+        <message name="IDS_OPTIONS_CONTROLLED_SETTING_RECOMMENDED" desc="Text displayed in the controlled settings bubble when a value is recommended for a setting through policy and the user has not overridden this recommendation.">
+          You are following the administrator's recommendation for this setting.
+        </message>
+        <message name="IDS_OPTIONS_CONTROLLED_SETTING_HAS_RECOMMENDATION" desc="Text displayed in the controlled settings bubble when a value is recommended for a setting through policy but is currently overridden by a user-supplied value.">
+          Your administrator recommends a specific value for this setting.
+        </message>
+        <message name="IDS_OPTIONS_CONTROLLED_SETTING_FOLLOW_RECOMMENDATION" desc="Link text displayed in the controlled settings bubble to clear the user-supplied value and start following the recommendation.">
+          Follow recommendation
+        </message>
+        <message name="IDS_OPTIONS_CONTROLLED_SETTINGS_POLICY" desc="Text displayed in the controlled settings bubble when it is shown for a group of settings whose values are enforced by policy.">
+          These settings are enforced by your administrator.
+        </message>
+        <message name="IDS_OPTIONS_CONTROLLED_SETTINGS_EXTENSION" desc="Text displayed in the controlled settings bubble when it is shown for a group of settings whose values are enforced by an extension.">
+          These settings are enforced by an extension.
+        </message>
+        <message name="IDS_OPTIONS_CONTROLLED_SETTINGS_EXTENSION_WITH_NAME" desc="Text displayed in the controlled settings bubble when it is shown for a group of settings whose values are enforced by an extension. The name of the extension would be displayed on the following line, thus the ending with ':'.">
+          These settings are controlled by:
+        </message>
+
+        <!-- Extension install location strings -->
+        <message name="IDS_OPTIONS_INSTALL_LOCATION_UNKNOWN" desc="The text explaining the the installation location is unknown.">
+          Not from Chrome Web Store.
+        </message>
+        <message name="IDS_OPTIONS_INSTALL_LOCATION_3RD_PARTY" desc="The text explaining the the installation came from a 3rd party app.">
+          Installed by a third party.
+        </message>
+        <message name="IDS_OPTIONS_INSTALL_LOCATION_ENTERPRISE" desc="The text explaining the the installation of the extension came from an enterprise policy.">
+          Installed by enterprise policy.
+        </message>
+        <message name="IDS_OPTIONS_INSTALL_LOCATION_SHARED_MODULE" desc="The text explaining the the installation of the extension was because of extensions that depend on this shared module">
+          Installed because of dependent extension(s).
+        </message>
+
+        <!-- Extension blacklist state -->
+        <message name="IDS_OPTIONS_BLACKLISTED_SECURITY_VULNERABILITY" desc="The text explaining the reason for disabling extension or app. The extension in question has a security vulnerability.">
+          This extension contains a serious security vulnerability.
+        </message>
+        <message name="IDS_OPTIONS_BLACKLISTED_CWS_POLICY_VIOLATION" desc="The text explaining the reason for disabling extension or app. The extension in question violates Chrome Web Store policy.">
+          This extension violates the Chrome Web Store policy.
+        </message>
+        <message name="IDS_OPTIONS_BLACKLISTED_POTENTIALLY_UNWANTED" desc="The text explaining the reason for disabling extension or app. The extension in question might have been installed without user consent.">
+          This extension may have been added without your knowledge.
+        </message>
+
+        <!-- Options search page strings. -->
+        <message name="IDS_OPTIONS_SEARCH_PAGE_TITLE" desc="Title of the settings search page.">
+          Search results
+        </message>
+        <message name="IDS_OPTIONS_SEARCH_PAGE_NO_MATCHES" desc="Text description of a search that has no results.">
+          No matches were found.
+        </message>
+        <message name="IDS_OPTIONS_SEARCH_PAGE_HELP_LABEL" desc="Help text for a serach that has no results.">
+          Can't find what you're looking for?
+        </message>
+        <message name="IDS_OPTIONS_SEARCH_PAGE_HELP_TITLE" desc="Help link for a search that has no results.">
+          <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> help
+        </message>
+        <message name="IDS_OPTIONS_SEARCH_PLACEHOLDER" desc="Text placeholder for an empty search field on ChromeOS.">
+          Search settings
+        </message>
+
+        <!-- Reset Profile Settings strings -->
+        <message name="IDS_RESET_PROFILE_SETTINGS_BANNER_TEXT" desc="The text to show in a banner at the top of the chrome://settings page. The banner is displayed when Chrome detects that the settings might have been changed without the user's knowledge.">
+          Some of your settings may have been changed without your knowledge.
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_SECTION_TITLE" desc="The title of the section in chrome://settings that allows resetting some settings in a profile">
+          Reset settings
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_DESCRIPTION" desc="A label describing the purpose of the 'reset profile settings' feature">
+          Restore settings to their original defaults.
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_EXPLANATION" desc="A label describing the consequences of the 'reset profile settings' feature">
+          Your settings will be restored to their original defaults. This will reset your homepage, new tab page and search engine, disable your extensions, and unpin all tabs. It will also clear other temporary and cached data, such as cookies, content and site data.
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_BUTTON" desc="The text on the button in chrome://settings that allows resetting some settings in a profile">
+          Reset settings
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_TITLE" desc="Dialog title">
+          Reset settings
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_COMMIT_BUTTON" desc="Reset button of the Reset Profile Settings dialog">
+          Reset
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_FEEDBACK" desc="Feedback label in the Reset Profile Settings dialog">
+          Help make Google Chrome better by reporting the current settings
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_LOCALE" desc="Locale field in the feedback details of the Reset Profile Settings dialog">
+          Locale
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_USER_AGENT" desc="User Agent field in the feedback details of the Reset Profile Settings dialog">
+          User Agent
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_STARTUP_URLS" desc="Startup URLs tag in the feedback details of the Reset Profile Settings dialog">
+          Startup URLs
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_STARTUP_TYPE" desc="Startup type tag in the feedback details of the Reset Profile Settings dialog">
+          Startup type
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_HOMEPAGE" desc="Homepage tag in the feedback details of the Reset Profile Settings dialog">
+          Homepage
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_HOMEPAGE_IS_NTP" desc="Tag in the feedback details of the Reset Profile Settings dialog">
+          Homepage is the New Tab page
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_HOMEPAGE_IS_NTP_TRUE" desc="Value of HOMEPAGE_IS_NTP in the feedback details of the Reset Profile Settings dialog">
+          Yes
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_HOMEPAGE_IS_NTP_FALSE" desc="Value of HOMEPAGE_IS_NTP in the feedback details of the Reset Profile Settings dialog">
+          No
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_SHOW_HOME_BUTTON" desc="Tag in the feedback details of the Reset Profile Settings dialog">
+          Show Home button
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_SHOW_HOME_BUTTON_TRUE" desc="Value of SHOW_HOME_BUTTON in the feedback details of the Reset Profile Settings dialog">
+          Yes
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_SHOW_HOME_BUTTON_FALSE" desc="Value of SHOW_HOME_BUTTON in the feedback details of the Reset Profile Settings dialog">
+          No
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_DSE" desc="Default search engine in the feedback details of the Reset Profile Settings dialog">
+          Default search engine
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_EXTENSIONS" desc="Extensions tag in the feedback details of the Reset Profile Settings dialog">
+          Extensions
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_SHORTCUTS" desc="List of Chrome shortcuts in the feedback details of the Reset Profile Settings dialog (shortcut refers to the desktop icon on windows)">
+          Shortcut targets
+        </message>
+        <message name="IDS_RESET_PROFILE_SETTINGS_PROCESSING_SHORTCUTS" desc="A placeholder for the actual shortcuts in the Reset Profile Settings dialog (shortcut refers to the desktop icon on windows)">
+          Processing shortcuts...
+        </message>
+
+        <!-- Automatic Settings Reset strings -->
+        <message name="IDS_AUTOMATIC_SETTINGS_RESET_BANNER_TEXT" desc="The text to show in a banner at the top of the chrome://settings page. The banner is displayed when Chrome detects that some settings have been tampered with and were reset to factory defaults.">
+          Chrome detected that some of your settings were corrupted by another program and reset them to their original defaults.
+        </message>
+        <message name="IDS_AUTOMATIC_SETTINGS_RESET_BANNER_RESET_BUTTON_TEXT" desc="The text on the reset button in the Automatic Settings Reset Banner suggesting to reset ALL settings after an automatic reset of SOME settings.">
+          Reset all settings
+        </message>
+      </if>
+
+      <!-- chrome://settings strings that are used by all platforms including Android -->
+      <message name="IDS_SETTINGS_TITLE" desc="Title for the settings tab.">
+        Settings
+      </message>
+      <message name="IDS_SETTINGS_HIDE_ADVANCED_SETTINGS" desc="Title for the link to hide advanced settings.">
+        Hide advanced settings...
+      </message>
+      <message name="IDS_SETTINGS_SHOW_ADVANCED_SETTINGS" desc="Title for the link to show advanced settings.">
+        Show advanced settings...
+      </message>
+      <message name="IDS_OPTIONS_PASSWORDS_MANAGE_PASSWORDS_LINK" desc="The label of the 'Manage passwords' link">
+        Manage passwords
+      </message>
+      <message name="IDS_OPTIONS_HOMEPAGE_TITLE" desc="The title of the home page overlay"  formatter_data="android_java">
+        Home page
+      </message>
+      <message name="IDS_OPTIONS_STARTUP_PAGES_PLACEHOLDER" desc="The placeholder text in the custom startup urls dialog" formatter_data="android_java">
+        Enter URL...
+      </message>
+
+      <!-- Autofill dialog: field labels. -->
+      <message name="IDS_AUTOFILL_DIALOG_PLACEHOLDER_EMAIL" desc="The placeholder/label text for email in the requestAutocomplete dialog.">
+        Email address
+      </message>
+      <message name="IDS_AUTOFILL_DIALOG_PLACEHOLDER_CARD_NUMBER" desc="The placeholder/label text for credit card number in the requestAutocomplete dialog.">
+        Card number
+      </message>
+      <message name="IDS_AUTOFILL_DIALOG_PLACEHOLDER_EXPIRY_MONTH" desc="The placeholder/label text for credit card expiration month in the requestAutocomplete dialog.">
+        Month
+      </message>
+      <message name="IDS_AUTOFILL_DIALOG_PLACEHOLDER_EXPIRY_YEAR" desc="The placeholder/label text for credit card expiration year in the requestAutocomplete dialog.">
+        Year
+      </message>
+      <message name="IDS_AUTOFILL_DIALOG_PLACEHOLDER_CVC" desc="The placeholder/label text for credit card verification code in the requestAutocomplete dialog.">
+        CVC
+      </message>
+      <message name="IDS_AUTOFILL_DIALOG_PLACEHOLDER_PHONE_NUMBER" desc="The placeholder/label text for phone number in the requestAutocomplete dialog.">
+        Phone number
+      </message>
+      <message name="IDS_AUTOFILL_DIALOG_TOOLTIP_PHONE_NUMBER" desc="A tooltip explaining why the user must enter a phone number.">
+        Merchants often need this in case there are problems shipping your order.
+      </message>
+
+      <!-- On Android, we use Google Play Services to handle all the UI for the Autofill Dialog -->
+      <if expr="not is_android">
+        <!-- Autofill dialog: title bar -->
+        <message name="IDS_AUTOFILL_DIALOG_TITLE" desc="Title for autofill dialog which asks user to input address + payment info.">
+          Pay
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_PAY_WITHOUT_WALLET" desc="This text is shown in a payment method chooser as a way for a user to pay with local Chrome Autofill data instead of using Wallet.">
+          Disable Google Wallet
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_PAYING_WITHOUT_WALLET" desc="This text is shown as the click target for a dormant payment method chooser when using Chrome Autofill data instead of Wallet.">
+          Google Wallet disabled
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_SIGN_IN" desc="This link text is shown when the user is not signed in to a GAIA account.">
+          Sign in to pay with Google Wallet
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_ADD_ACCOUNT" desc="This text is shown to allow the user to sign in to a different GAIA account (for multi-login).">
+          Add account
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_CANCEL_SIGN_IN" desc="This link text is shown when the user is signing in to a GAIA account as a way to cancel sign in.">
+          Back
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_GOOGLE_WALLET" desc="The menu item that allows a user to select Google Wallet as their payment backend.">
+          Google Wallet
+        </message>
+
+        <!-- Autofill dialog: notification area -->
+        <message name="IDS_AUTOFILL_DIALOG_USE_WALLET" desc="Text that shows on top of the autofill dialog when using data Google Wallet already knows about the user.">
+          Protect your payment with Google Wallet.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_USE_WALLET_LINK" desc="Text that shows as a link at the top of the autofill dialog to select to use Google wallet.">
+          Use Google Wallet
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_SAVE_DETAILS_IN_WALLET" desc="Text that shows on the top of the autofill dialog promoting saving info in Google Wallet.">
+          Save and protect your details with Google Wallet.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_SAVE_IN_WALLET_TOOLTIP" desc="Tooltip text that explains how Google Wallet integration works.">
+          A Google Wallet Virtual Card will be used for this transaction. A Virtual Card is a new card number so the seller never sees your real credit card number.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_COMPLETE_WITHOUT_WALLET" desc="An error notification shown to users when Google Wallet is found to be unavailable.">
+          Oops, <ph name="WALLET_ERROR">$1<ex>Google Wallet is unavailable at this time.</ex></ph> You can complete this transaction without Google Wallet.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_SITE_WARNING" desc="Text that explains that user data will be sent to the site.">
+          The following details will be shared with <ph name="SITE">$1<ex>www.shopping.com</ex></ph>
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_VERIFY_CVV" desc="Text explaining a user must enter their CVV to continuing submitting for security purposes (while using Google Wallet).">
+          For your security, please verify your card details.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_NOT_PROD_WARNING" desc="Text warning the user that they're not using the Online Wallet production server, so their purchases probably wont succeed.">
+          Warning: You are not connected to production Wallet servers. Issued cards will be invalid.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_FAILED_TO_SAVE_WALLET_DATA" desc="Text advising the user that there was an unrecoverable validation error on the wallet server.">
+          Could not save data to Wallet.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_CHOOSE_DIFFERENT_WALLET_INSTRUMENT" desc="Text asking the user to choose a different payment method or address when using wallet.">
+          More information is needed to complete this purchase.
+        </message>
+
+        <!--- Autofill dialog: Wallet interstitials -->
+        <message name="IDS_AUTOFILL_DIALOG_LOADING" desc="A message to let the users know that Chrome is waiting on a network response. This is followed by an ellipsis, as in 'Loading...'">
+          Loading payment details
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_CARD_GENERATION_IN_PROGRESS" desc="Text the user sees while waiting for the wallet servers to respond with a generated card number.">
+          Generating Google Wallet Virtual Card...
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_CARD_GENERATION_DONE" desc="Text the user sees after the wallet servers respond with a generated card number.">
+          Your Virtual Card is ready.
+        </message>
+
+        <!--- Autofill dialog: Wallet error messages -->
+        <message name="IDS_AUTOFILL_WALLET_BUYER_ACCOUNT_ERROR" desc="Text explaining that the user's Wallet account cannot be used.">
+          There's something wrong with your Google Wallet account.
+        </message>
+        <message name="IDS_AUTOFILL_WALLET_BUYER_COUNTRY_NOT_SUPPORTED" desc="Text explaining that the user's Wallet Buyer Legal Address has a country which is unsupported. The text inside the |bars| is link text.">
+          Unfortunately, Google Wallet can only be used at this merchant by buyers with a US address. If you are a US resident, please |change your home address with Wallet| or pay without using Google Wallet.
+        </message>
+        <message name="IDS_AUTOFILL_WALLET_UNVERIFIED_KNOW_YOUR_CUSTOMER_STATUS" desc="Text explaining that Google Wallet failed/pending Know Your Customer (KYC) check. The text inside the |bars| is link text.">
+          We were unable to verify your account information. |Fix this problem|
+        </message>
+        <message name="IDS_AUTOFILL_WALLET_UNSUPPORTED_MERCHANT" desc="Text explaining that the merchant is blacklisted for Google Wallet Chrome Payments due to compliance violation.">
+          Google Wallet is not supported with this merchant.
+        </message>
+        <message name="IDS_AUTOFILL_WALLET_SERVICE_UNAVAILABLE_ERROR" desc="Text explaining that Wallet is currently unavailable.">
+          Google Wallet is currently unavailable.
+        </message>
+        <message name="IDS_AUTOFILL_WALLET_UNKNOWN_ERROR" desc="Text explaining that Wallet encountered an unknown error.">
+          Google Wallet has encountered an error.
+        </message>
+        <message name="IDS_AUTOFILL_WALLET_UNSUPPORTED_AGENT_OR_API_KEY" desc="Text explaining that Wallet encountered an error with the Chrome version or Google API key.">
+          Google Wallet doesn't support this version of Chrome or doesn't recognize your Google API key.
+        </message>
+        <message name="IDS_AUTOFILL_WALLET_BAD_TRANSACTION_AMOUNT" desc="Text explaining that the transaction amoutn is too big or otherwise unrecognized.">
+          Wallet can't handle this transaction.
+        </message>
+        <message name="IDS_AUTOFILL_WALLET_ERROR_CODE_TOOLTIP" desc="Text shown in a (?) tooltip to explain which error Chrome encountered when trying to communicate with Online Wallet.">
+          Error code: <ph name="ERROR_CODE">$1<ex>54</ex></ph>
+        </message>
+
+        <!-- Autofill dialog: detail section -->
+        <message name="IDS_AUTOFILL_DIALOG_EDIT" desc="Text of link in autofill dialog which allows user to edit address + payment info.">
+          Edit
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_SECTION_CC" desc="Label for the credit card section of the autofill dialog.">
+          Card details
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_SECTION_BILLING" desc="Label for the billing details (credit card + address) section of the autofill dialog.">
+          Billing details
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_SECTION_SHIPPING" desc="Label for the shipping details section of the autofill dialog.">
+          Shipping address
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_USING_BILLING_FOR_SHIPPING" desc="Text that is shown when the billing info will also be used for shipping.">
+          Same as billing address
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_SUBMIT_BUTTON" desc="Button text for confirmation of user details.">
+          Continue
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_VERIFY_BUTTON" desc="Button text for verifying user details.">
+          Verify
+        </message>
+
+        <!-- Autofill dialog: combobox menu items -->
+        <message name="IDS_AUTOFILL_DIALOG_ADD_CREDIT_CARD" desc="Menu item for adding a new credit card in the autofill dialog.">
+          New credit card...
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_MANAGE_CREDIT_CARD" desc="Menu item for directing the user to a different UI that can manage credit cards.">
+          Manage credit cards...
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_ADD_BILLING_ADDRESS" desc="Menu item for adding a new billing address in the autofill dialog.">
+          New billing address...
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_MANAGE_BILLING_ADDRESS" desc="Menu item for directing the user to a different UI that can manage billing addresses.">
+          Manage billing addresses...
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_ADD_BILLING_DETAILS" desc="Menu item for adding new billing details (credit card + address) in the autofill dialog.">
+          New billing details...
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_MANAGE_BILLING_DETAILS" desc="Menu item for directing the user to a different UI that can manage billing details.">
+          Manage billing details...
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_ADD_SHIPPING_ADDRESS" desc="Menu item for adding new shipping address in the autofill dialog.">
+          New shipping address...
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_MANAGE_SHIPPING_ADDRESS" desc="Menu item for directing the user to a different UI that can manage shipping addresses.">
+          Manage shipping addresses...
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_USE_BILLING_FOR_SHIPPING" desc="Menu Item label that asks whether the billing info should also be used for shipping info.">
+          Use billing address for shipping
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_ENTER_CREDIT_CARD" desc="Menu item label that allows a user to manually enter credit card information.">
+          Enter credit card...
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_ENTER_BILLING_DETAILS" desc="Menu item label that allows a user to manually enter credit card information.">
+          Enter billing details...
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_USE_DIFFERENT_SHIPPING_ADDRESS" desc="Menu Item label that allows a user to manually input a shipping address that differs from their billing address.">
+          Use different shipping address
+        </message>
+
+        <!-- Autofill dialog: legal documents -->
+        <message name="IDS_AUTOFILL_DIALOG_LOCATION_DISCLOSURE" desc="Text at the bottom of the autofill dialog which stands alone to inform the user that they'll be sharing their location with Google Wallet if they choose to proceed.">
+          By clicking Continue you agree to use Google Wallet. To protect you from fraud, information about your computer (including its location) will be shared with Google Wallet.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_LOCATION_DISCLOSURE_WITH_LEGAL_DOCS" desc="Text at the bottom of the autofill dialog which informs the user that they'll be sharing their location with Google Wallet if they choose to proceed, appended to a message about accepting other legal documents like Terms of Service.">
+          <ph name="LEGAL_DOC_AGREEMENT">$1<ex>By clicking Continue you agree to the Google Wallet Terms of Service and Privacy Policy.</ex></ph> To protect you from fraud, information about your computer (including its location) will be shared with Google Wallet.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_LEGAL_LINKS_2" desc="Label at the bottom of the autofill dialog that is shown when a user needs to accept legal documents (ex: Privacy Policy, Terms Of Service).">
+          By clicking Continue you agree to the <ph name="LEGAL_DOC_LINK_TEXT_1">$1<ex>Google Wallet Terms Of Service</ex></ph> and <ph name="LEGAL_DOC_LINK_TEXT_2">$2<ex>Privacy Policy</ex></ph>.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_LEGAL_LINKS_3" desc="Label at the bottom of the autofill dialog that is shown when a user needs to accept legal documents (ex: Privacy Policy, Terms Of Service).">
+          By clicking Continue you agree to the <ph name="LEGAL_DOC_LINK_TEXT_1">$1<ex>Google Wallet Terms Of Service</ex></ph>, <ph name="LEGAL_DOC_LINK_TEXT_2">$2<ex>Terms of Use</ex></ph>, and <ph name="LEGAL_DOC_LINK_TEXT_3">$3<ex>Privacy Policy</ex></ph>.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_LEGAL_LINKS_4" desc="Label at the bottom of the autofill dialog that is shown when a user needs to accept legal documents (ex: Privacy Policy, Terms Of Service).">
+          By clicking Continue you agree to the <ph name="LEGAL_DOC_LINK_TEXT_1">$1<ex>Google Wallet Terms Of Service</ex></ph>, <ph name="LEGAL_DOC_LINK_TEXT_2">$2<ex>Terms of Use</ex></ph>, <ph name="LEGAL_DOC_LINK_TEXT_3">$3<ex>Further Terms of Use</ex></ph>, and <ph name="LEGAL_DOC_LINK_TEXT_4">$4<ex>Privacy Policy</ex></ph>.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_LEGAL_LINKS_5" desc="Label at the bottom of the autofill dialog that is shown when a user needs to accept legal documents (ex: Privacy Policy, Terms Of Service).">
+          By clicking Continue you agree to the <ph name="LEGAL_DOC_LINK_TEXT_1">$1<ex>Google Wallet Terms Of Service</ex></ph>, <ph name="LEGAL_DOC_LINK_TEXT_2">$2<ex>Terms of Use</ex></ph>, <ph name="LEGAL_DOC_LINK_TEXT_3">$3<ex>Further Terms of Use</ex></ph>, <ph name="LEGAL_DOC_LINK_TEXT_4">$4<ex>Further Terms of Use</ex></ph>, and <ph name="LEGAL_DOC_LINK_TEXT_5">$5<ex>Privacy Policy</ex></ph>.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_LEGAL_LINKS_6" desc="Label at the bottom of the autofill dialog that is shown when a user needs to accept legal documents (ex: Privacy Policy, Terms Of Service).">
+          By clicking Continue you agree to the <ph name="LEGAL_DOC_LINK_TEXT_1">$1<ex>Google Wallet Terms Of Service</ex></ph>, <ph name="LEGAL_DOC_LINK_TEXT_2">$2<ex>Terms of Use</ex></ph>, <ph name="LEGAL_DOC_LINK_TEXT_3">$3<ex>Further Terms of Use</ex></ph>, <ph name="LEGAL_DOC_LINK_TEXT_4">$4<ex>Further Terms of Use</ex></ph>, <ph name="LEGAL_DOC_LINK_TEXT_5">$5<ex>Further Terms of Use</ex></ph>, and <ph name="LEGAL_DOC_LINK_TEXT_6">$6<ex>Privacy Policy</ex></ph>.
+        </message>
+
+        <!-- Autofill dialog: validation messages -->
+        <message name="IDS_AUTOFILL_DIALOG_VALIDATION_WALLET_REQUIRES_TWO_NAMES" desc="Message displayed to user when card holder name validation for Wallet fails.">
+          Google Wallet requires at least a first and last name.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_VALIDATION_INVALID_EMAIL_ADDRESS" desc="Message displayed to user when email address validation fails.">
+          Invalid email address. Please check and try again.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_VALIDATION_INVALID_CREDIT_CARD_NUMBER" desc="Message displayed to user when credit card number validation fails.">
+          Invalid card number. Please check and try again.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_VALIDATION_INVALID_CREDIT_CARD_SECURITY_CODE" desc="Message displayed to user when credit card security code validation fails.">
+          Invalid CVC code. Please check and try again.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_VALIDATION_INVALID_CREDIT_CARD_EXPIRATION_DATE" desc="Message displayed to user when credit card expiration date validation fails.">
+          The card is expired. Please check the date or enter a new card.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_VALIDATION_UNACCEPTED_GENERIC_CARD" desc="Message displayed to user when a site doesn't accept the credit card type they've entered.">
+          This site doesn't accept this brand of card.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_VALIDATION_UNACCEPTED_AMEX" desc="Message displayed to user when a site doesn't accept American Express.">
+          This site doesn't accept American Express.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_VALIDATION_UNACCEPTED_DISCOVER" desc="Message displayed to user when a site doesn't accept Discover.">
+          This site doesn't accept Discover.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_VALIDATION_UNACCEPTED_MASTERCARD" desc="Message displayed to user when a site doesn't accept MasterCard.">
+          This site doesn't accept MasterCard.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_VALIDATION_UNACCEPTED_VISA" desc="Message displayed to user when a site doesn't accept Visa.">
+          This site doesn't accept Visa.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_VALIDATION_INVALID_PHONE_NUMBER" desc="Message displayed to user when phone number validation fails.">
+          Invalid phone number. Please check and try again.
+        </message>
+        <message name="IDS_AUTOFILL_DIALOG_VALIDATION_WAITING_FOR_RULES" desc="Message displayed to user when validation rules are still downloading.">
+          Validating...
+        </message>
+
+        <!-- Autofill dialog post-submit bubbles -->
+        <message name="IDS_AUTOFILL_GENERATED_CREDIT_CARD_BUBBLE_TITLE" desc="Title of a bubble shown directly after a new card has been generated via Online Wallet using the Autofill dialog.">
+          Google Wallet is protecting your card
+        </message>
+        <message name="IDS_AUTOFILL_GENERATED_CREDIT_CARD_BUBBLE_CONTENTS" desc="Text in the bubble explaining that a temporary card has been generated for the user's security by Google Wallet.">
+          Your card has been protected with the Google Wallet Virtual Card (<ph name="FRONTING_CREDIT_CARD">|$1|<ex>Visa - 1234</ex></ph>) and this number will appear on your receipt. This purchase will still be charged to your <ph name="BACKING_CREDIT_CARD">|$2|<ex>Visa - 5678</ex></ph>.
+        </message>
+        <message name="IDS_AUTOFILL_NEW_CREDIT_CARD_BUBBLE_LINK" desc="The text of a link at the bottom of the autofill dialog bubble that sends users to a Google Wallet billing/card management page.">
+          Manage credit cards
+        </message>
+      </if>
+
+      <message name="IDS_APPEARANCE_GROUP_NAME" desc="The title of the appearance group">
+        Appearance
+      </message>
+      <if expr="not is_linux or chromeos">
+        <message name="IDS_THEMES_GROUP_NAME" desc="The title of the themes group">
+          Themes
+        </message>
+      </if>
+      <message name="IDS_THEMES_RESET_BUTTON" desc="The button to reset your theme">
+        Reset to default theme
+      </message>
+      <if expr="is_posix and not is_macosx and not is_ios">
+        <message name="IDS_THEMES_GTK_BUTTON" desc="The button to choose GTK colors and icons as the current theme.">
+          Use GTK+ theme
+        </message>
+        <message name="IDS_THEMES_SET_CLASSIC" desc="The button to choose the classic windows theme in GTK">
+          Use Classic theme
+        </message>
+        <message name="IDS_SHOW_WINDOW_DECORATIONS" desc="The label of a radio button in the options dialog for using the system title bar and borders.">
+          Use system title bar and borders
+        </message>
+      </if>
+      <message name="IDS_THEMES_GALLERY_BUTTON" desc="The button to get more themes">
+        Get themes
+      </message>
+
+      <!-- Misc advanced option description strings. -->
+      <message name="IDS_NETWORK_PREDICTION_ENABLED_DESCRIPTION" desc="In the advanced options tab, the text next to the checkbox that enables prediction of network actions.  Actions include DNS prefetching, TCP and SSL preconnection, and prerendering of webpages.">
+        Predict network actions to improve page load performance
+      </message>
+
+      <!-- Collected cookies window -->
+      <message name="IDS_COLLECTED_COOKIES_DIALOG_TITLE" desc="The title of the collect cookies dialog">
+        Cookies set by this page
+      </message>
+      <message name="IDS_COLLECTED_COOKIES_ALLOWED_COOKIES_LABEL" desc="The label used to describe the cookies that were allowed">
+        The following cookies were set when you viewed this page:
+      </message>
+      <message name="IDS_COLLECTED_COOKIES_BLOCKED_COOKIES_LABEL" desc="The label used to describe the cookies that were blocked">
+        The following cookies were blocked:
+      </message>
+      <message name="IDS_COLLECTED_COOKIES_BLOCKED_THIRD_PARTY_BLOCKING_ENABLED" desc="The label used to describe the cookies that were blocked include a note that third-party cookies were blocked without exception.">
+        The following cookies were blocked (third-party cookies are being blocked without exception):
+      </message>
+      <message name="IDS_COLLECTED_COOKIES_ALLOW_BUTTON" desc="A button that lets the use create a content settings exception to allow certain domains.">
+        Allow
+      </message>
+      <message name="IDS_COLLECTED_COOKIES_SESSION_ONLY_BUTTON" desc="A button that lets the use create a content settings exception to allow certain domains for a session only. Please consider that this text will be displayed as a button when translating.">
+        Clear on exit
+      </message>
+      <message name="IDS_COLLECTED_COOKIES_BLOCK_BUTTON" desc="A button that lets the use create a content settings exception to block certain domains.">
+        Block
+      </message>
+      <message name="IDS_COLLECTED_COOKIES_ALLOW_RULE_CREATED" desc="A notification that is displayed when a content exception to allow cookies was created.">
+        Cookies from <ph name="DOMAIN">$1<ex>example.com</ex></ph> allowed.
+      </message>
+      <message name="IDS_COLLECTED_COOKIES_BLOCK_RULE_CREATED" desc="A notification that is displayed when a content exception to block cookies was created.">
+        Cookies from <ph name="DOMAIN">$1<ex>example.com</ex></ph> blocked.
+      </message>
+      <message name="IDS_COLLECTED_COOKIES_SESSION_RULE_CREATED" desc="A notification that is displayed when a content exception to allow cookies for session only was created.">
+        Cookies from <ph name="DOMAIN">$1<ex>example.com</ex></ph> will be cleared on exit.
+      </message>
+      <if expr="is_macosx">
+        <message name="IDS_COLLECTED_COOKIES_MULTIPLE_ALLOW_RULES_CREATED" desc="A notification that is displayed when multiple content exceptions to allow cookies were created.">
+          Cookies from multiple sites allowed.
+        </message>
+        <message name="IDS_COLLECTED_COOKIES_MULTIPLE_BLOCK_RULES_CREATED" desc="A notification that is displayed when multiple content exceptions to block cookies were created.">
+          Cookies from multiple sites blocked.
+        </message>
+        <message name="IDS_COLLECTED_COOKIES_MULTIPLE_SESSION_RULES_CREATED" desc="A notification that is displayed when multiple content exceptions to allow cookies for session only were created.">
+          Cookies from multiple sites will be cleared on exit.
+        </message>
+      </if>
+      <message name="IDS_COLLECTED_COOKIES_ALLOWED_COOKIES_TAB_LABEL" desc="The label in a tabbed pane that holds the UI controls for the cookies allowed while loading the page.">
+        Allowed
+      </message>
+      <message name="IDS_COLLECTED_COOKIES_BLOCKED_COOKIES_TAB_LABEL" desc="The label in a tabbed pane that holds the UI controls for the cookies blocked while loading the page.">
+        Blocked
+      </message>
+      <message name="IDS_COLLECTED_COOKIES_INFOBAR_MESSAGE" desc="The string shown in the infobar after the user has changed the allowed/blocked state of a cookie, reminding them to reload the page in order for the new cookies to take effect.">
+        New cookie settings will take effect after reloading the page.
+      </message>
+      <message name="IDS_COLLECTED_COOKIES_INFOBAR_BUTTON" desc="The string used in the infobar button allowing the user to reload the page directly from the infobar.">
+        Reload
+      </message>
+
+      <!-- Accessiblility strings for Inforbars in Views -->
+      <if expr="toolkit_views">
+        <message name="IDS_ACCNAME_INFOBAR_CONTAINER" desc="The accessible name for the infobar container.">
+          Infobar Container
+        </message>
+        <message name="IDS_ACCNAME_INFOBAR_WARNING" desc="The accessible name for the warning infobar type.">
+          Warning
+        </message>
+        <message name="IDS_ACCNAME_INFOBAR_PAGE_ACTION" desc="The accessible name for page action infobar type.">
+          Page Action
+        </message>
+      </if>
+
+      <!-- Autofill infobar -->
+      <message name="IDS_AUTOFILL_CC_INFOBAR_ACCEPT" desc="Text to show for the Autofill credit card request infobar accept button.">
+        Save info
+      </message>
+      <message name="IDS_AUTOFILL_CC_INFOBAR_DENY" desc="Text to show for the Autofill credit card request infobar deny button.">
+        Don't save
+      </message>
+
+      <!-- Auto-login infobar -->
+      <if expr="is_ios">
+        <message name="IDS_AUTOLOGIN_INFOBAR_MESSAGE" desc="The string shown in the infobar explaining that they can press one button to auto-login instead of entering their user name and password. [length: 60em]">
+          Automatic sign-in is available <ph name="EMAIL_ADDRESS">$1</ph>
+        </message>
+        <message name="IDS_AUTOLOGIN_INFOBAR_OK_BUTTON" desc="The string used in the infobar button that the user presses to perform the auto-login. [length: 10em]">
+          Sign in
+        </message>
+      </if>
+      <if expr="not is_ios">
+        <message name="IDS_AUTOLOGIN_INFOBAR_MESSAGE" desc="The string shown in the infobar explaining that they can press one button to auto-login instead of entering their user name and password.">
+          Sign in to this site as: <ph name="EMAIL_ADDRESS">$1</ph>
+        </message>
+        <message name="IDS_AUTOLOGIN_INFOBAR_OK_BUTTON" desc="The string used in the infobar button that the user presses to perform the auto-login.">
+          Sign in
+        </message>
+      </if>
+      <if expr="not is_android and not is_ios">
+        <message name="IDS_AUTOLOGIN_INFOBAR_CANCEL_BUTTON" desc="The string used in the infobar button that the user presses to never see this infobar again.">
+          Never offer to sign me in
+        </message>
+      </if>
+      <if expr="is_android or is_ios">
+        <message name="IDS_AUTOLOGIN_INFOBAR_CANCEL_BUTTON" desc="Mobile: The string used in the autologin infobar button that the user presses to close the infobar without logging in.">
+          Cancel
+        </message>
+      </if>
+
+      <message name="IDS_ONE_CLICK_SIGNIN_CONFIRM_EMAIL_DIALOG_OK_BUTTON" desc="The string used in the dialog for the button that means 'create a new profile'.">
+        Create a new user
+      </message>
+      <message name="IDS_ONE_CLICK_SIGNIN_CONFIRM_EMAIL_DIALOG_CANCEL_BUTTON" desc="The string used in the dialog for the button that means 'go ahead and sign in'.">
+        Sign in anyway
+      </message>
+
+      <!-- One click sign-in bubble and dialog -->
+      <message name="IDS_ONE_CLICK_BUBBLE_UNDO" desc="The text for the undo button in the one click sign-in bubble.">
+        Undo
+      </message>
+      <message name="IDS_ONE_CLICK_SIGNIN_BUBBLE_MESSAGE" desc="The body of the sync promo NTP bubble.">
+        Your bookmarks, history, and other settings will be synced to your Google Account.
+      </message>
+      <message name="IDS_ONE_CLICK_SIGNIN_DIALOG_OK_BUTTON" desc="The text of the OK button of the one click sign-in dialog.">
+        OK, got it
+      </message>
+      <message name="IDS_ONE_CLICK_SIGNIN_DIALOG_UNDO_BUTTON" desc="The text of the undo button of the one click sign-in dialog.">
+        Undo
+      </message>
+      <message name="IDS_ONE_CLICK_SIGNIN_DIALOG_ADVANCED" desc="The advanced link in the one click sign-in dialog. Clicking the link will take the user to advanced settings.">
+        Advanced
+      </message>
+      <message name="IDS_ONE_CLICK_SIGNIN_CONFIRM_EMAIL_DIALOG_TITLE" desc="The title of the modal dialog window that opens when the user signs in with a different account.">
+        Sign in
+      </message>
+
+      <!-- Enterprise sign-in profile linking -->
+      <message name="IDS_ENTERPRISE_SIGNIN_PROFILE_LINK_LEARN_MORE" desc="The link to get more information about profile linking after signing in to an enterprise account">
+        Learn more
+      </message>
+      <message name="IDS_ENTERPRISE_SIGNIN_CREATE_NEW_PROFILE" desc="Text of the button to create a new profile after enterprise account sign-in">
+        Create a new user
+      </message>
+      <message name="IDS_ENTERPRISE_SIGNIN_CANCEL" desc="Text of the button to cancel sign-in">
+        Cancel
+      </message>
+
+      <!-- Enterprise sign-in profile linking -->
+      <!-- TODO(dconnelly): remove "new-style" once the old dialog is gone. -->
+      <message name="IDS_ENTERPRISE_SIGNIN_CREATE_NEW_PROFILE_NEW_STYLE" desc="Text of the button to create a new profile after enterprise account sign-in">
+        Create a new profile
+      </message>
+      <message name="IDS_ENTERPRISE_SIGNIN_CONTINUE_NEW_STYLE" desc="Text of the button to link the current profile with the signed-in enterprise account">
+        Link data
+      </message>
+
+      <message name="IDS_ENTERPRISE_SIGNIN_ALERT_NEW_STYLE" desc="The text of the prompt to create a new profile after signing in to an enterprise account">
+        This account is managed by <ph name="DOMAIN">$1<ex>example.com</ex></ph>
+      </message>
+
+      <!-- Cookies Window -->
+      <message name="IDS_COOKIES_WEBSITE_PERMISSIONS_WINDOW_TITLE" desc="The title of the redesigned Cookies Window that lets you manage cookies, storage quota for websites and other permissions per-website">
+        Cookies and site data
+      </message>
+      <message name="IDS_COOKIES_SEARCH_COOKIES" desc="Placeholder text shown in the search box in the Cookies Window">
+        Search cookies
+      </message>
+      <message name="IDS_COOKIES_REMOVE_LABEL" desc="The label of the 'Remove' button in the Cookies Window">
+        Remove
+      </message>
+      <message name="IDS_COOKIES_REMOVE_ALL_LABEL" desc="The label of the 'Remove All' button in the Cookies Window">
+        Remove all
+      </message>
+      <message name="IDS_COOKIES_REMOVE_ALL_SHOWN_LABEL" desc="The label of the 'Remove All Shown' button after a query search string is entered in the Cookies Window">
+        Remove all shown
+      </message>
+      <message name="IDS_COOKIES_COOKIE_NAME_LABEL" desc="The Cookie Name label">
+        Name:
+      </message>
+      <message name="IDS_COOKIES_COOKIE_CONTENT_LABEL" desc="The Cookie Content label">
+        Content:
+      </message>
+      <message name="IDS_COOKIES_COOKIE_DOMAIN_LABEL" desc="The Cookie Domain label">
+        Domain:
+      </message>
+      <message name="IDS_COOKIES_COOKIE_PATH_LABEL" desc="The Cookie Path label">
+        Path:
+      </message>
+      <message name="IDS_COOKIES_COOKIE_SENDFOR_LABEL" desc="The Cookie Send For label">
+        Send for:
+      </message>
+      <message name="IDS_COOKIES_COOKIE_ACCESSIBLE_TO_SCRIPT_LABEL" desc="The Cookie Accessible to Script label">
+        Accessible to script:
+      </message>
+      <message name="IDS_COOKIES_COOKIE_CREATED_LABEL" desc="The Cookie Created label">
+        Created:
+      </message>
+      <message name="IDS_COOKIES_COOKIE_EXPIRES_LABEL" desc="The Cookie Expires label">
+        Expires:
+      </message>
+
+      <message name="IDS_COOKIES_COOKIE_EXPIRES_SESSION" desc="The Cookie Expires field value for a session cookie">
+        When the browsing session ends
+      </message>
+
+      <message name="IDS_COOKIES_COOKIE_SENDFOR_ANY" desc="Send Cookie for any kind of connection">
+        Any kind of connection
+      </message>
+      <message name="IDS_COOKIES_COOKIE_SENDFOR_SECURE" desc="Send Cookie for any kind of connection">
+        Secure connections only
+      </message>
+      <message name="IDS_COOKIES_COOKIE_ACCESSIBLE_TO_SCRIPT_YES" desc="Accessible to Script">
+        Yes
+      </message>
+      <message name="IDS_COOKIES_COOKIE_ACCESSIBLE_TO_SCRIPT_NO" desc="Accessible to Script">
+        No (HttpOnly)
+      </message>
+      <message name="IDS_COOKIES_COOKIE_NONESELECTED" desc="Field value when no cookie is selected">
+        &lt;no cookie selected&gt;
+      </message>
+      <message name="IDS_COOKIES_DOMAIN_COLUMN_HEADER" desc="The label of the Domain header in the Cookies table">
+        Site
+      </message>
+      <message name="IDS_COOKIES_DATA_COLUMN_HEADER" desc="The label of the Locally Stored Data header in the Cookies table">
+        Locally stored data
+      </message>
+      <message name="IDS_COOKIES_SINGLE_COOKIE" desc="The text displayed when there is one cookie in the Cookies table">
+        1 cookie
+      </message>
+      <message name="IDS_COOKIES_PLURAL_COOKIES" desc="The text displayed when there are two or more cookies in the Cookies table">
+        <ph name="COOKIES">$1<ex>42</ex></ph> cookies
+      </message>
+      <message name="IDS_COOKIES_WEB_DATABASE_DESCRIPTION_LABEL" desc="The Database Description label">
+        Description:
+      </message>
+      <message name="IDS_COOKIES_WEB_DATABASE_UNNAMED_NAME" desc="The the name displayed for a Database with an empty name attribute.">
+        &lt;unnamed&gt;
+      </message>
+      <if expr="is_macosx">
+        <message name="IDS_COOKIES_LOCAL_STORAGE_KEY_LABEL" desc="The label of the Local Storage key being set">
+          Key:
+        </message>
+        <message name="IDS_COOKIES_LOCAL_STORAGE_VALUE_LABEL" desc="The label of the Local Storage value being set">
+          Value:
+        </message>
+      </if>
+      <message name="IDS_COOKIES_LOCAL_STORAGE_ORIGIN_LABEL" desc="The Local Storage Origin label">
+        Origin:
+      </message>
+      <message name="IDS_COOKIES_LOCAL_STORAGE_SIZE_ON_DISK_LABEL" desc="The Local Storage Size on disk label">
+        Size on disk:
+      </message>
+      <message name="IDS_COOKIES_LOCAL_STORAGE_LAST_MODIFIED_LABEL" desc="The Local Storage Last modified label">
+        Last modified:
+      </message>
+      <message name="IDS_COOKIES_COOKIES" desc="Label for folder under which a list of cookies appear">
+        Cookies
+      </message>
+      <message name="IDS_COOKIES_APPLICATION_CACHES" desc="Label for folder under which a list of application caches (name of an HTML standard) are stored">
+        Application caches
+      </message>
+      <message name="IDS_COOKIES_APPLICATION_CACHE" desc="The text shown when there is an Application Cache (name of an HTML standard) in the Cookies table">
+        Application cache
+      </message>
+      <message name="IDS_COOKIES_FLASH_LSO" desc="The text shown when Flash has Local Shared Objects (informally known as 'Flash cookies') stored">
+        Flash data
+      </message>
+      <message name="IDS_COOKIES_APPLICATION_CACHE_MANIFEST_LABEL" desc="The Manifest label (manifest is a URL specified by the application cache)">
+        Manifest:
+      </message>
+      <if expr="is_macosx">
+        <message name="IDS_COOKIES_SIZE_LABEL" desc="The Size label, to indicate how much space is taken by a database or application cache">
+          Size:
+        </message>
+      </if>
+      <message name="IDS_COOKIES_DATABASE_STORAGE" desc="The text shown when there is either Web Database or Indexed Database Storage (names of HTML standards) in the Cookies table">
+        Database storage
+      </message>
+      <message name="IDS_COOKIES_WEB_DATABASES" desc="Label for the folder under which a list of web databases (name of an HTML standard) are displayed">
+        Web databases
+      </message>
+      <if expr="is_macosx">
+        <message name="IDS_COOKIES_WEB_DATABASE_NAME" desc="Label for the name of an individual web databases (name of an HTML standard) are displayed">
+          Database name:
+        </message>
+      </if>
+      <message name="IDS_COOKIES_LOCAL_STORAGE" desc="Label for local storage (name of an HTML standard)">
+        Local storage
+      </message>
+      <message name="IDS_COOKIES_SESSION_STORAGE" desc="Label for session storage (name of an HTML standard)">
+        Session storage
+      </message>
+      <message name="IDS_COOKIES_INDEXED_DB" desc="The text shown when there is an Indexed Database (name of an HTML standard) in the Cookies table">
+        Indexed database
+      </message>
+      <message name="IDS_COOKIES_INDEXED_DBS" desc="Label for Indexed Databases (name of an HTML standard)">
+        Indexed databases
+      </message>
+      <message name="IDS_COOKIES_FILE_SYSTEM" desc="The text shown when there is a file system (name of an HTML standard) in the Cookies table">
+        File system
+      </message>
+      <message name="IDS_COOKIES_FILE_SYSTEMS" desc="Label for the folder under which a list of file systems (name of an HTML standard) are displayed">
+        File systems
+      </message>
+      <message name="IDS_COOKIES_FILE_SYSTEM_TEMPORARY_USAGE_LABEL" desc="Label for a temporary file system's disk usage.">
+        Temporary storage:
+      </message>
+      <message name="IDS_COOKIES_FILE_SYSTEM_PERSISTENT_USAGE_LABEL" desc="Label for a persistent file system's disk usage.">
+        Persistent storage:
+      </message>
+      <message name="IDS_COOKIES_FILE_SYSTEM_USAGE_NONE" desc="Value displayed when no file system of a particular type exists.">
+        None
+      </message>
+      <message name="IDS_COOKIES_LAST_ACCESSED_LABEL" desc="The last access date label">
+        Last accessed:
+      </message>
+      <message name="IDS_COOKIES_CHANNEL_ID" desc="The text shown when there is a channel id in the Cookies table">
+        Channel ID
+      </message>
+      <message name="IDS_COOKIES_CHANNEL_IDS" desc="Label for the folder under which a list of TLS Channel IDs (name of an internet standard) are displayed">
+        Channel IDs
+      </message>
+      <message name="IDS_COOKIES_CHANNEL_ID_ORIGIN_LABEL" desc="The channel id label for the server domain">
+        Domain:
+      </message>
+      <message name="IDS_COOKIES_CHANNEL_ID_TYPE_LABEL" desc="The channel id Type label">
+        Certificate Type:
+      </message>
+      <message name="IDS_COOKIES_CHANNEL_ID_CREATED_LABEL" desc="The channel id Created label">
+        Created:
+      </message>
+      <message name="IDS_COOKIES_CHANNEL_ID_EXPIRES_LABEL" desc="The channel id Expires label">
+        Expires:
+      </message>
+      <message name="IDS_COOKIES_SERVICE_WORKER" desc="The text shown when there is data for Service Workers within an origin (name of a Web standard) in the Cookies table">
+        Service Workers
+      </message>
+      <message name="IDS_COOKIES_SERVICE_WORKERS" desc="Label for Service Workers (name of an HTML standard)">
+        Service Workers
+      </message>
+      <message name="IDS_COOKIES_SERVICE_WORKER_SCOPES_LABEL" desc="Label for list of Service Worker (name of an HTML standard) patterns">
+        Scopes:
+      </message>
+      <message name="IDS_CLIENT_CERT_RSA_SIGN" translateable="false" desc="">
+        rsa_sign
+      </message>
+      <message name="IDS_CLIENT_CERT_DSS_SIGN" translateable="false" desc="">
+        dss_sign
+      </message>
+      <message name="IDS_CLIENT_CERT_ECDSA_SIGN" translateable="false" desc="">
+        ecdsa_sign
+      </message>
+
+      <!-- New Tab -->
+      <message name="IDS_NEW_TAB_TITLE"
+               desc="Title of the new tab page, this is only shown while loading, then the title comes from the page">
+        New Tab
+      </message>
+
+      <!-- Strings used for non-Android builds -->
+      <if expr="not is_android">
+        <message name="IDS_NEW_TAB_SUGGESTIONS"
+                 desc="The name for the 'Suggestions' navigation control on the New Tab Page.">
+          Suggested
+        </message>
+        <message name="IDS_APP_DEFAULT_PAGE_NAME"
+                 desc="Default name for the first 'Apps' page on the New Tab Page.">
+          Apps
+        </message>
+        <message name="IDS_APP_LAUNCHER_TAB_TITLE"
+                 desc="Default name for stand alone web page to serve as an App launcher when the new tab doesn't show apps.">
+          Apps
+        </message>
+        <message name="IDS_NEW_TAB_OTHER_SESSIONS_LABEL"
+                 desc="The label for the 'Other Sessions' menu on the New Tab Page, which lists tabs that are open in browsing sessions on other devices.">
+          Other devices
+        </message>
+        <message name="IDS_NEW_TAB_OTHER_SESSIONS_EMPTY"
+                 desc="The message for the 'Other Sessions' menu on the New Tab Page, when there are no other sessions.">
+          Access your open tabs on all of your devices.
+        </message>
+        <message name="IDS_NEW_TAB_OTHER_SESSIONS_LEARN_MORE_URL" desc="URL of help center page explaining what the 'Other Sessions' menu is.">
+          http://support.google.com/chrome/bin/answer.py?answer=185277&amp;hl=[GRITLANGCODE]
+        </message>
+        <message name="IDS_NEW_TAB_OTR_HEADING"
+                 desc="Heading used when a person opens an OTR window">
+          You’ve gone incognito
+        </message>
+        <message name="IDS_NEW_TAB_OTR_DESCRIPTION"
+                 desc="Used when a person opens an OTR window">
+          Pages you view in incognito tabs won’t stick around in your browser’s history, cookie store, or search history after you’ve closed <ph name="BEGIN_BOLD">&lt;strong&gt;</ph>all<ph name="END_BOLD">&lt;/strong&gt;</ph> of your incognito tabs. Any files you download or bookmarks you create will be kept.
+        </message>
+        <message name="IDS_NEW_TAB_OTR_LEARN_MORE_LINK"
+                 desc="OTR window link text to learn more">
+          Learn more about incognito browsing
+        </message>
+        <message name="IDS_NEW_TAB_OTR_MESSAGE_WARNING"
+                 desc="OTR window warning message">
+          Going incognito doesn’t hide your browsing from your employer, your internet service provider, or the websites you visit.
+        </message>
+        <message name="IDS_NEW_TAB_GUEST_SESSION_HEADING"
+              desc="Heading used when a person enters Guest Session">
+          You’re browsing as a Guest
+        </message>
+        <message name="IDS_NEW_TAB_GUEST_SESSION_LEARN_MORE_LINK"
+              desc="Guest Session link text to learn more">
+          Learn more about Guest browsing
+        </message>
+        <if expr="chromeos">
+          <message name="IDS_NEW_TAB_GUEST_SESSION_DESCRIPTION"
+              desc="Used when a person enters Guest Session">
+            Pages you view in this window won’t appear in the browser history and they won’t leave other traces, like cookies, on the computer after you sign out. Files you download and bookmarks you create won’t be preserved.
+          </message>
+        </if>
+        <if expr="not chromeos">
+          <message name="IDS_NEW_TAB_GUEST_SESSION_DESCRIPTION"
+              desc="Used when a person enters Guest Session">
+            Pages you view in this window won’t appear in the browser history and they won’t leave other traces, like cookies, on the computer after you close all open Guest windows. Any files you download will be preserved, however.
+          </message>
+        </if>
+        <message name="IDS_NEW_TAB_RECENTLY_CLOSED_WINDOW_SINGLE"
+                 desc="Title of recently closed windows in the recently closed section of the new tab page when the window has a single tab">
+          1 Tab
+        </message>
+        <message name="IDS_NEW_TAB_RECENTLY_CLOSED_WINDOW_MULTIPLE"
+                 desc="Title of recently closed windows in the recently closed section of the new tab page when the window has more than one tab. The % is replaced by the number of tabs">
+          <ph name="TAB_COUNT">$1<ex>3</ex></ph> Tabs
+        </message>
+        <message name="IDS_NEW_TAB_TILE_GRID_ACCESSIBLE_DESCRIPTION"
+                 desc="Help message for screenreader users, spoken when navigating to a tile grid for the first time.">
+          Use left and right arrow keys to navigate.
+        </message>
+        <if expr="chromeos">
+        <message name="IDS_NEW_TAB_CLOSE_MENU_EXPAND" desc="Text for the closed section menu footer that will restore the section.">
+            Expand
+          </message>
+        </if>
+        <message name="IDS_NEW_TAB_APP_INSTALL_HINT_LABEL" desc="Text for the plus icon on the NTP that links to the web store.">
+          Add more apps
+        </message>
+        <message name="IDS_NEW_TAB_MOST_VISITED"
+                 desc="The name for the 'Most Visited' navigation control on the New Tab Page.">
+          Most visited
+        </message>
+      </if>
+
+      <message name="IDS_NEW_TAB_RESTORE_THUMBNAILS_SHORT_LINK"
+               desc="The link that restores previously removed thumbnails. Context is 'Thumbnail removed. Undo | Restore all'">
+        Restore all
+      </message>
+      <message name="IDS_NEW_TAB_RECENTLY_CLOSED"
+               desc="The name for the 'Recently Closed' menu on the New Tab Page.">
+        Recently closed
+      </message>
+
+      <!-- chrome://history and chrome://ntp -->
+      <message name="IDS_NEW_TAB_OTHER_SESSIONS_OPEN_ALL"
+               desc="In the 'Other Sessions' menu on the New Tab Page, the label for the command to open all tabs and windows from a session.">
+        Open all
+      </message>
+      <message name="IDS_OTHER_DEVICES_X_MORE"
+               desc="In the 'Other Sessions' section of the history page, the label for showing that X more tabs are available for a session.">
+        <ph name="NUM_TABS_MORE">$1<ex>42</ex></ph> more...
+      </message>
+      <message name="IDS_NEW_TAB_OTHER_SESSIONS_COLLAPSE_SESSION"
+               desc="In the 'Other Sessions' menu on the New Tab Page, the label for the command to collapse (hide) the list of windows and tabs in a session.">
+        Collapse list
+      </message>
+      <message name="IDS_NEW_TAB_OTHER_SESSIONS_EXPAND_SESSION"
+               desc="In the 'Other Sessions' menu on the New Tab Page, the label for the command to expand (uncollapse) the list of windows and tabs in a session.">
+        Expand list
+      </message>
+
+      <message name="IDS_NEW_TAB_ATTRIBUTION_INTRO"
+               desc="Leading sentence above a custom logo that the theme artist has provided">
+        Theme created by
+      </message>
+      <message name="IDS_NEW_TAB_THUMBNAIL_REMOVED_NOTIFICATION"
+               desc="Notification text shown when a thumbnail has been removed from the most visited section.">
+        Thumbnail removed.
+      </message>
+      <message name="IDS_NEW_TAB_UNDO_THUMBNAIL_REMOVE"
+         desc="Action link text to undo removing a thumbnail from the most visited section.">
+        Undo
+      </message>
+      <message name="IDS_NEW_TAB_REMOVE_THUMBNAIL_TOOLTIP"
+         desc="Tooltip text for the button that removes/blacklists the thumbnail. Once removed the thumbnail will not show up on the new tab page again.">
+        Don't show on this page
+      </message>
+      <message name="IDS_NEW_TAB_PAGE_SWITCHER_CHANGE_TITLE"
+         desc="Title for accessibility of the 'page-switcher-start' or 'page-switcher-end' button when switching from one type (determined based on title) of card to another">
+        Go to <ph name="PAGE_TITLE">$1<ex>Apps</ex></ph>
+      </message>
+      <message name="IDS_NEW_TAB_PAGE_SWITCHER_SAME_TITLE"
+         desc="Title for accessibility of the 'page-switcher-start' or 'page-switcher-end' button when switching between pages which have the same title">
+        More <ph name="PAGE_TITLE">$1<ex>Apps</ex></ph>
+      </message>
+      <message name="IDS_NEW_TAB_PAGE_APPS_PROMO_TITLE"
+         desc="Title for the app launcher promo box shown on apps pages.">
+        Discover the Chrome App Launcher
+      </message>
+
+      <if expr="not use_titlecase">
+        <message name="IDS_NEW_TAB_APP_OPTIONS"
+                 desc="Text for the context menu item that takes the user to the options of an app. (In sentence case.)">
+          Options
+        </message>
+        <message name="IDS_NEW_TAB_APP_DETAILS"
+                 desc="Text for the context menu item that takes the user to the app in Web Store. (In sentence case.)">
+          View in Web Store
+        </message>
+        <if expr="is_macosx">
+          <message name="IDS_NEW_TAB_APP_CREATE_SHORTCUT"
+                   desc="Text for the context menu item that creates an app shortcut. (In sentence case.)">
+            Create shortcut
+          </message>
+        </if>
+        <if expr="not is_macosx">
+          <message name="IDS_NEW_TAB_APP_CREATE_SHORTCUT"
+                   desc="Text for the context menu item that creates an app shortcut. (In sentence case.)">
+            Create shortcuts...
+          </message>
+        </if>
+        <message name="IDS_APP_CONTEXT_MENU_SHOW_INFO"
+                 desc="Text for the context menu item that shows the application information. (In sentence case.)">
+          App info
+        </message>
+        <message name="IDS_APP_CONTEXT_MENU_OPEN_PINNED"
+                 desc="Text for the button that opens the app in a pinned tab. (In sentence case.)">
+          Open as pinned tab
+        </message>
+        <message name="IDS_APP_CONTEXT_MENU_OPEN_REGULAR"
+                 desc="Text for the button that opens the app in a regular tab. (In sentence case.)">
+          Open as regular tab
+        </message>
+        <message name="IDS_APP_CONTEXT_MENU_OPEN_WINDOW"
+                 desc="Text for the button that opens the app in an app window. (In sentence case.)">
+          Open as window
+        </message>
+        <message name="IDS_APP_CONTEXT_MENU_OPEN_FULLSCREEN"
+                 desc="Text for the button that opens the app full screen. (In sentence case.)">
+          Open full screen
+        </message>
+        <message name="IDS_APP_CONTEXT_MENU_OPEN_MAXIMIZED"
+                 desc="Text for the button that opens the app maximized. (In sentence case.)">
+          Open maximized
+        </message>
+        <message name="IDS_APP_CONTEXT_MENU_OPEN_TAB"
+                 desc="Text for the button that opens the app in a tab. (In sentence case.)">
+          Open in a tab
+        </message>
+      </if>
+
+      <if expr="use_titlecase">
+        <message name="IDS_NEW_TAB_APP_OPTIONS"
+                 desc="Text for the context menu item that takes the user to the options of an app. (In title case.)">
+          Options
+        </message>
+        <message name="IDS_NEW_TAB_APP_DETAILS"
+                 desc="Text for the context menu item that takes the user to the app in Web Store. (In title case.)">
+          View in Web Store
+        </message>
+        <if expr="is_macosx">
+          <message name="IDS_NEW_TAB_APP_CREATE_SHORTCUT"
+                   desc="Text for the context menu item that creates an app shortcut. (In title case.)">
+            Create Shortcut
+          </message>
+        </if>
+        <if expr="not is_macosx">
+          <message name="IDS_NEW_TAB_APP_CREATE_SHORTCUT"
+                   desc="Text for the context menu item that creates an app shortcut. (In title case.)">
+            Create Shortcuts...
+          </message>
+        </if>
+        <message name="IDS_APP_CONTEXT_MENU_SHOW_INFO"
+                 desc="Text for the context menu item that shows the application information. (In title case.)">
+          App Info
+        </message>
+        <message name="IDS_APP_CONTEXT_MENU_OPEN_PINNED"
+                 desc="Text for the button that opens the app in a pinned tab. (In title case.)">
+          Open as Pinned Tab
+        </message>
+        <message name="IDS_APP_CONTEXT_MENU_OPEN_REGULAR"
+                 desc="Text for the button that opens the app in a regular tab. (In title case.)">
+          Open as Regular Tab
+        </message>
+        <message name="IDS_APP_CONTEXT_MENU_OPEN_WINDOW"
+                 desc="Text for the button that opens the app in an app window. (In title case.)">
+          Open as Window
+        </message>
+        <message name="IDS_APP_CONTEXT_MENU_OPEN_FULLSCREEN"
+                 desc="Text for the button that opens the app full screen. (In title case.)">
+          Open Full Screen
+        </message>
+        <message name="IDS_APP_CONTEXT_MENU_OPEN_MAXIMIZED"
+                 desc="Text for the button that opens the app maximized. (In title case.)">
+          Open Maximized
+        </message>
+        <message name="IDS_APP_CONTEXT_MENU_OPEN_TAB"
+                 desc="Text for the button that opens the app in a tab. (In title case.)">
+          Open in a Tab
+        </message>
+      </if>
+
+      <!-- Multi-profile -->
+      <message name="IDS_PROFILES_OPTIONS_GROUP_NAME" desc="The name of the sync group in the options dialog when using the new Profiles UI.">
+        People
+      </message>
+      <if expr="is_macosx">
+        <message name="IDS_PROFILES_BUBBLE_ACCESSIBLE_NAME" desc="Title of the avatar bubble menu for accessibility">
+          Switch Users
+        </message>
+        <message name="IDS_PROFILES_BUBBLE_ACCESSIBLE_DESCRIPTION" desc="The help text for the avatar bubble.">
+          Switch to a different user.
+        </message>
+        <message name="IDS_PROFILES_NEW_AVATAR_MENU_ACCESSIBLE_NAME" desc="Title of the new avatar bubble menu for accessibility">
+          Switch Person
+        </message>
+        <message name="IDS_PROFILES_NEW_AVATAR_MENU_ACCESSIBLE_DESCRIPTION" desc="The help text for the new avatar bubble.">
+          Switch to a different person.
+        </message>
+        <message name="IDS_PROFILES_CREATE_NEW_PROFILE_OPTION" desc="In Title Case. Create new profile menu item and button title.">
+          Add Person...
+        </message>
+        <message name="IDS_PROFILES_NEW_AVATAR_BUTTON_ACCESSIBLE_NAME" desc="Title of the avatar button for accessibility">
+          <ph name="PROFILE_NAME">$1<ex>User</ex></ph> button
+        </message>
+        <message name="IDS_PROFILES_NEW_AVATAR_BUTTON_AUTH_ERROR_ACCESSIBLE_NAME" desc="Title of the avatar button for accessibility">
+          <ph name="PROFILE_NAME">$1<ex>User</ex></ph>  button: sign in error
+        </message>
+        <message name="IDS_PROFILES_ACCOUNT_BUTTON_AUTH_ERROR_ACCESSIBLE_NAME" desc="Title of the avatar button for accessibility">
+          <ph name="PROFILE_NAME">$1<ex>User</ex></ph>: sign in error
+        </message>
+        <message name="IDS_PROFILES_NEW_AVATAR_MENU_CHANGE_PHOTO_ACCESSIBLE_NAME" desc="Title of the change photo button for accessibility">
+          Change Photo
+        </message>
+        <message name="IDS_PROFILES_NEW_AVATAR_MENU_PHOTO_ACCESSIBLE_NAME" desc="Title of the change photo button for accessibility">
+          Photo
+        </message>
+      </if>
+      <if expr="not use_titlecase">
+        <message name="IDS_PROFILES_SWITCH_PROFILE_LINK" desc="Link in the supervised user bubble view to switch to a different profile.">
+          Switch users
+        </message>
+      </if>
+      <if expr="use_titlecase">
+        <message name="IDS_PROFILES_SWITCH_PROFILE_LINK" desc="In title case. Link in the supervised user bubble view to switch to a different profile.">
+          Switch Users
+        </message>
+      </if>
+      <if expr="not chromeos">
+        <message name="IDS_PROFILES_CREATE_NEW_PROFILE_LINK" desc="Link in the avatar menu bubble view to create a new profile.">
+          New user
+        </message>
+      </if>
+      <if expr="chromeos">
+        <message name="IDS_PROFILES_CREATE_NEW_PROFILE_LINK" desc="Link in the avatar menu bubble view to create a new profile.">
+          Sign in another account
+        </message>
+      </if>
+      <message name="IDS_PROFILES_MANAGE_PROFILES_BUTTON" desc="Button in the avatar menu bubble view to manage profiles.">
+        Manage
+      </message>
+      <message name="IDS_PROFILES_MANAGE_PROFILES_BUTTON_TIP" desc="Tool-tip text shown for button in the avatar menu bubble view to manage profiles.">
+        Create, change, or delete profiles.
+      </message>
+      <message name="IDS_PROFILES_PROFILE_SIGNOUT_BUTTON" desc="Button in the avatar menu bubble view to sign-out the current profile.">
+        Lock
+      </message>
+      <message name="IDS_PROFILES_PROFILE_SIGNOUT_BUTTON_TIP" desc="Tool-tip text shown for button in the avatar menu bubble view to sign-out the current profile.">
+        Sign-out user <ph name="PROFILE_USERNAME">$1<ex>user@gmail.com</ex></ph>.
+      </message>
+      <message name="IDS_PROFILES_PROFILE_SIGNOUT_BUTTON_TIP_UNAVAILABLE" desc="Tool-tip text shown for button in the avatar menu bubble view to sign-out the current profile when that button is not available because the profile has not been signed-in.">
+        Sign-out is possible only when signed in.
+      </message>
+      <message name="IDS_PROFILES_EDIT_PROFILE_LINK" desc="Link in the avatar menu bubble to edit a profile.">
+        edit
+      </message>
+      <message name="IDS_PROFILES_GAIA_SIGNIN_TITLE" desc="Title of the account removal view in the avatar menu bubble.">
+        Sign in
+      </message>
+      <message name="IDS_PROFILES_GAIA_ADD_ACCOUNT_TITLE" desc="Title of the account removal view in the avatar menu bubble.">
+        Add account
+      </message>
+      <message name="IDS_PROFILES_GAIA_REAUTH_TITLE" desc="Title of the account reauthentication view in the avatar menu bubble.">
+        Sign in again
+      </message>
+      <message name="IDS_PROFILES_ACCOUNT_REMOVAL_TITLE" desc="Title of the account removal view in the avatar menu bubble.">
+        Remove account
+      </message>
+      <message name="IDS_PROFILES_SETTINGS_LINK" desc="The link text to the Chrome settings page in the account removal view.">
+        settings
+      </message>
+      <message name="IDS_PROFILES_SYNC_SETTINGS_LINK" desc="The link text to the Chrome sync settings page in the avatar menu tutorial card.">
+        Settings
+      </message>
+      <message name="IDS_PROFILES_ACCOUNT_REMOVAL_BUTTON" desc="Text of the ok button on the account removal view in the avatar menu bubble.">
+        Remove account
+      </message>
+      <message name="IDS_PROFILES_CONFIRM_SIGNIN_TUTORIAL_CONTENT_TEXT" desc="Content of the tutorial card in the avatar menu bubble view shown when a user successfully signs in to Chrome.">
+        Your tabs, bookmarks, history, and other settings will be synced to your Google Account and available across all your devices.
+      </message>
+      <message name="IDS_PROFILES_TUTORIAL_OK_BUTTON" desc="Button in the avatar menu tutorial card for dismissing the signin confirmation bubble">
+        OK, got it
+      </message>
+      <message name="IDS_PROFILES_ERROR_TUTORIAL_TITLE" desc="Title in the tutorial card for showing signin errors">
+        Uh-oh!
+      </message>
+      <message name="IDS_PROFILES_NOT_YOU" desc="Title or link text in the avatar menu bubble for switching user">
+        Not <ph name="PROFILE_NAME">$1<ex>Claire</ex></ph>?
+      </message>
+      <message name="IDS_PROFILES_DISCONNECT_BUTTON" desc="Button in the avatar menu bubble for disconnecting the current profile">
+        Disconnect Google Account
+      </message>
+      <message name="IDS_PROFILES_ADD_PERSON_BUTTON" desc="Button in the avatar menu bubble for adding a new profile">
+        Add person
+      </message>
+      <message name="IDS_PROFILES_TUTORIAL_WHATS_NEW_BUTTON" desc="Button in the avatar menu tutorial card for seeing what is new with the new profile management UI">
+        See what's new
+      </message>
+      <message name="IDS_PROFILES_SWITCH_USERS_BUTTON" desc="Button in the avatar menu bubble view for launching the user manager.">
+        Switch person
+      </message>
+      <message name="IDS_PROFILES_GO_INCOGNITO_BUTTON" desc="Button in the avatar menu bubble view for launching an incognito browser.">
+        Go incognito
+      </message>
+      <message name="IDS_PROFILES_EXIT_GUEST" desc="Button in the avatar menu bubble view for exiting the active guest session.">
+        Exit Guest
+      </message>
+      <message name="IDS_PROFILES_SIGNIN_PROMO" desc="Text describing the benefits of signing in.">
+        Sign in to get your tabs, bookmarks, history, and other settings on all your devices.
+      </message>
+      <if expr="not use_titlecase">
+        <message name="IDS_PROFILES_PROFILE_ADD_ACCOUNT_BUTTON" desc="Button in the avatar menu bubble view used to add an account to a profile.">
+          Add account for <ph name="PROFILE_NAME">$1<ex>John</ex></ph>
+        </message>
+        <message name="IDS_PROFILES_PROFILE_MANAGE_ACCOUNTS_BUTTON" desc="Button in the avatar menu bubble view used to manage accounts for a profile.">
+          Your accounts
+        </message>
+        <message name="IDS_PROFILES_PROFILE_HIDE_MANAGE_ACCOUNTS_BUTTON" desc="Button in the avatar menu bubble view used to hide the accounts for a profile.">
+          Hide accounts
+        </message>
+        <message name="IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE" desc="The Learn More link in the avatar tutorial bubble.">
+          Learn more
+        </message>
+      </if>
+      <if expr="use_titlecase">
+        <message name="IDS_PROFILES_PROFILE_ADD_ACCOUNT_BUTTON" desc="Button in the avatar menu bubble view used to add an account to a profile.">
+          Add Account for <ph name="PROFILE_NAME">$1<ex>John</ex></ph>
+        </message>
+        <message name="IDS_PROFILES_PROFILE_MANAGE_ACCOUNTS_BUTTON" desc="Button in the avatar menu bubble view used to manage accounts for a profile.">
+          Your Accounts
+        </message>
+        <message name="IDS_PROFILES_PROFILE_HIDE_MANAGE_ACCOUNTS_BUTTON" desc="Button in the avatar menu bubble view used to hide the accounts for a profile.">
+          Hide Accounts
+        </message>
+        <message name="IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE" desc="The Learn More link in the avatar tutorial bubble.">
+          Learn More
+        </message>
+      </if>
+      <message name="IDS_PROFILES_SWITCH_TO_PROFILE_ACCESSIBLE_NAME" desc="Description of the switch to profile button. This is used for accessibility.">
+        Switch to user: <ph name="PROFILE_NAME">$1<ex>First user</ex></ph>
+      </message>
+      <message name="IDS_PROFILES_GUEST_PROFILE_NAME" desc="Name of the guest profile.">
+        Guest
+      </message>
+      <message name="IDS_DEFAULT_PROFILE_NAME" desc="The default name given to a profile. Displayed in wrench menu and settings UI.">
+        First user
+      </message>
+      <message name="IDS_LEGACY_DEFAULT_PROFILE_NAME" desc="The legacy default name given to a new profile.">
+        Default Profile
+      </message>
+      <message name="IDS_NUMBERED_PROFILE_NAME" desc="The name given to a newly created profile. Displayed in wrench menu and settings UI.">
+        User <ph name="VALUE">$1<ex>1</ex></ph>
+      </message>
+      <message name="IDS_NEW_NUMBERED_PROFILE_NAME" desc="The name given to a newly created profile. Displayed in wrench menu and settings UI using the --new-profile-management flag.">
+        Person <ph name="VALUE">$1<ex>1</ex></ph>
+      </message>
+      <message name="IDS_SINGLE_PROFILE_DISPLAY_NAME" desc="The name displayed by the avatar button if only one profile exists.">
+        You
+      </message>
+      <message name="IDS_GUEST_PROFILE_NAME" desc="The name given to the guest
+      browsing profile. Displayed in the avatar menu bubble and button UI.">
+        Guest
+      </message>
+
+      <message name="IDS_DEFAULT_AVATAR_NAME_8" desc="The default name given to a newly created profile with the female spy avatar.">
+        Agent X
+      </message>
+      <message name="IDS_DEFAULT_AVATAR_NAME_9" desc="The default name given to a newly created profile with the male hero avatar.">
+        Spandex
+      </message>
+      <message name="IDS_DEFAULT_AVATAR_NAME_10" desc="The default name given to a newly created profile with the female athlete avatar.">
+        Mia
+      </message>
+      <message name="IDS_DEFAULT_AVATAR_NAME_11" desc="The default name given to a newly created profile with the male businessman avatar.">
+        Buttondown
+      </message>
+      <message name="IDS_DEFAULT_AVATAR_NAME_12" desc="The default name given to a newly created profile with the ninja avatar.">
+        Sneaky
+      </message>
+      <message name="IDS_DEFAULT_AVATAR_NAME_13" desc="The default name given to a newly created profile with the alien avatar.">
+        Moonbeam
+      </message>
+      <message name="IDS_DEFAULT_AVATAR_NAME_14" desc="The default name given to a newly created profile with the awesome face avatar.">
+        Awesome
+      </message>
+      <message name="IDS_DEFAULT_AVATAR_NAME_15" desc="The default name given to a newly created profile with the flower avatar.">
+        Petals
+      </message>
+      <message name="IDS_DEFAULT_AVATAR_NAME_16" desc="The default name given to a newly created profile with the pizza avatar.">
+        Slice
+      </message>
+      <message name="IDS_DEFAULT_AVATAR_NAME_17" desc="The default name given to a newly created profile with the soccer ball avatar.">
+        Fritz
+      </message>
+      <message name="IDS_DEFAULT_AVATAR_NAME_18" desc="The default name given to a newly created profile with the hamburger avatar.">
+        Pickles
+      </message>
+      <message name="IDS_DEFAULT_AVATAR_NAME_19" desc="The default name given to a newly created profile with the cat avatar.">
+        Fluffy
+      </message>
+      <message name="IDS_DEFAULT_AVATAR_NAME_20" desc="The default name given to a newly created profile with the cupcake avatar.">
+        Sweetness
+      </message>
+      <message name="IDS_DEFAULT_AVATAR_NAME_21" desc="The default name given to a newly created profile with the dog avatar.">
+        Sparky
+      </message>
+      <message name="IDS_DEFAULT_AVATAR_NAME_22" desc="The default name given to a newly created profile with the horse avatar.">
+        Saratoga
+      </message>
+      <message name="IDS_DEFAULT_AVATAR_NAME_23" desc="The default name given to a newly created profile with the martini glass avatar.">
+        Lemonade
+      </message>
+      <message name="IDS_DEFAULT_AVATAR_NAME_24" desc="The default name given to a newly created profile with the musical notes avatar.">
+        Bluesy
+      </message>
+      <message name="IDS_DEFAULT_AVATAR_NAME_25" desc="The default name given to a newly created profile with the sun and cloud avatar.">
+        Shady
+      </message>
+      <message name="IDS_DEFAULT_AVATAR_NAME_26" desc="The default name given to a newly created profile with the default placeholder avatar.">
+        Shadow
+      </message>
+
+      <message name="IDS_PROFILES_LOCAL_PROFILE_STATE" desc="This is displayed underneath the profile name for profiles that are not signed in to sync.">
+        Not signed in
+      </message>
+      <message name="IDS_PROFILES_CREATE_BUTTON_LABEL" desc="The label that appears on the profile create button in the options dialog to allow a user to create a new profile.">
+        Add person...
+      </message>
+      <message name="IDS_PROFILES_MANAGE_BUTTON_LABEL" desc="The label that appears on the profile manage button in the options dialog to allow a user to manage their profile.">
+        Edit...
+      </message>
+      <message name="IDS_PROFILES_DELETE_BUTTON_LABEL" desc="The label that appears on the profile delete button in the options dialog to allow a user to delete their profile.">
+        Remove...
+      </message>
+      <message name="IDS_PROFILES_SUPERVISED_USER_DASHBOARD_TIP" desc="A message that appears below the Users section on the Settings page when the current user manages supervised users on the machine, providing a link to the external management dashboard page.">
+        Manage your supervised users via the <ph name="BEGIN_LINK">&lt;a target="_blank" href="https://chrome.com/manage"&gt;</ph>Supervised Users Dashboard<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>.
+      </message>
+      <message name="IDS_PROFILES_DELETE_SINGLE_BUTTON_LABEL" desc="The label that appears on the profile delete button in the options dialog to allow a user with only one profile to delete it.">
+        Delete this person
+      </message>
+      <message name="IDS_PROFILES_DEFAULT_NAME" desc="The name to display for a profile when the user is not signed in.">
+        Default
+      </message>
+      <message name="IDS_PROFILE_ADD_PERSON_ENABLE" desc="The text for the settings checkbox that indicates whether new profiles can be added from the user manager.">
+        Enable user creation from the profile manager
+      </message>
+      <message name="IDS_PROFILE_BROWSER_GUEST_ENABLE" desc="The text for the settings checkbox that indicates whether guest mode is available for this browser.">
+        Enable Guest browsing
+      </message>
+      <message name="IDS_SYNC_CUSTOMIZE_LINK_LABEL" desc="The text to display on the link to customize the sync settings.">
+        Advanced
+      </message>
+      <message name="IDS_SYNC_USE_DEFAULT_SETTINGS" desc="The text to display on the link to go back to the default sync settings.">
+        Use default settings
+      </message>
+      <message name="IDS_SYNC_LOGIN_NAME_PROHIBITED" desc="The error message shown when the user tries to sign in to sync using a name that is not allowed by the admin policy">
+        Signing in with this username has been disabled by your administrator.
+      </message>
+      <if expr="is_android">
+        <message name="IDS_SYNC_USER_NAME_IN_USE_ERROR" desc="Mobile: An error message shown when a user tries to sign in to sync using a user name that's already in use by another profile.">
+          This account is already being used on this device.
+        </message>
+      </if>
+      <if expr="not is_android">
+        <message name="IDS_SYNC_USER_NAME_IN_USE_ERROR" desc="An error message shown when a user tries to sign in to sync using a user name that's already in use by another profile.">
+          This account is already being used on this computer.
+        </message>
+      </if>
+
+      <message name="IDS_PLUGININSTALLER_INSTALLPLUGIN_PROMPT" desc="Info Bar message to prompt installing missing plugin">
+        <ph name="PLUGIN_NAME">$1<ex>Quicktime</ex></ph> is required to display some elements on this page.
+      </message>
+      <message name="IDS_PLUGININSTALLER_INSTALLPLUGIN_BUTTON" desc="Info Bar button to install missing plugin">
+        Install plug-in...
+      </message>
+      <message name="IDS_PLUGININSTALLER_PROBLEMSINSTALLING" desc="Infobar text for link to help center">
+        Problems installing?
+      </message>
+      <message name="IDS_PLUGININSTALLER_PROBLEMSUPDATING" desc="Infobar text for link to help center">
+        Problems updating?
+      </message>
+      <message name="IDS_PLUGIN_OUTDATED_PROMPT" desc="Info Bar message when an outdated plugin was disabled">
+        <ph name="PLUGIN_NAME">$1<ex>Flash</ex></ph> was blocked because it is out of date.
+      </message>
+      <message name="IDS_PLUGIN_ENABLE_TEMPORARILY" desc="Info Bar button to run a blocked outdated plugin">
+        Run this time
+      </message>
+      <message name="IDS_PLUGIN_ENABLE_ALWAYS" desc="Info Bar button to always run blocked plugins for this website">
+        Always run on this site
+      </message>
+      <message name="IDS_PLUGIN_CRASHED_PROMPT" desc="Info Bar message to notify about a crashed plugin">
+       <ph name="PLUGIN_NAME">$1<ex>Shockwave</ex> has crashed.</ph>
+      </message>
+      <if expr="is_win">
+        <message name="IDS_PLUGIN_DISCONNECTED_PROMPT" desc="Info Bar message to notify that the channel connecting to a plugin has encountered an error.">
+          <ph name="PLUGIN_NAME">$1<ex>Shockwave</ex> has encountered an error.</ph>
+        </message>
+      </if>
+      <message name="IDS_RELOAD_PAGE_WITH_PLUGIN" desc="Info Bar button to reload the page where a plugin crashed or disconnected.">
+        Reload
+      </message>
+      <message name="IDS_PLUGIN_INITIALIZATION_ERROR_PROMPT" desc="Info Bar message to notify that we couldn't load a plugin">
+        Could not load <ph name="PLUGIN_NAME">$1<ex>Shockwave</ex>.</ph>
+      </message>
+      <message name="IDS_WEBWORKER_CRASHED_PROMPT" desc="Info Bar message to notify about a crashed WebWorker">
+        A part of this page (HTML WebWorker) has crashed, so it might not function correctly.
+      </message>
+
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_FIRST_VISITED_TODAY"
+               desc="Message in IDS_PAGE_INFO_SECURITY_TAB_PERSONAL_HISTORY_TITLE section displayed when first visited page today">
+        You have never visited this site before today.
+      </message>
+      <message name="IDS_PAGE_INFO_SECURITY_TAB_VISITED_BEFORE_TODAY"
+               desc="Message in IDS_PAGE_INFO_SECURITY_TAB_PERSONAL_HISTORY_TITLE section displayed when user has visited page before today">
+        You first visited this site on <ph name="VISIT_DATE">$1<ex>Nov 7, 2007</ex></ph>.
+      </message>
+
+      <!-- External Protocol Dialog -->
+      <message name="IDS_EXTERNAL_PROTOCOL_TITLE" desc="External Protocol Dialog Title">
+        External Protocol Request
+      </message>
+      <if expr="not chromeos">
+        <message name="IDS_EXTERNAL_PROTOCOL_OK_BUTTON_TEXT" desc="Button in External Protocol Dialog that launches the application associated with the protocol">
+          Launch Application
+        </message>
+        <message name="IDS_EXTERNAL_PROTOCOL_CANCEL_BUTTON_TEXT" desc="Button in External Protocol Dialog that cancels the application launch">
+          Do Nothing
+        </message>
+        <message name="IDS_EXTERNAL_PROTOCOL_APPLICATION_TO_LAUNCH" desc="Information about the application being launched by the external protocol">
+The following application will be launched if you accept this request:
+
+ <ph name="APPLICATION">$1<ex>C:\Program Files\Adobe\Reader 8.0\Reader\AcroRd32.exe /u "%1"</ex></ph>
+        </message>
+        <message name="IDS_EXTERNAL_PROTOCOL_WARNING" desc="Warn user about external protocols.">
+          If you did not initiate this request, it may represent an attempted attack on your system. Unless you took an explicit action to initiate this request, you should press Do Nothing.
+        </message>
+        <message name="IDS_EXTERNAL_PROTOCOL_CHECKBOX_TEXT" desc="Checkbox to remember users decision.">
+          Remember my choice for all links of this type.
+        </message>
+      </if>
+      <if expr="chromeos">
+        <message name="IDS_EXTERNAL_PROTOCOL_OK_BUTTON_TEXT" desc="Button in External Protocol Dialog that closes the dialog">
+          Close
+        </message>
+        <message name="IDS_EXTERNAL_PROTOCOL_CHECKBOX_TEXT" desc="Checkbox to remember users decision.">
+          Never show the dialog again for all links of this type.
+        </message>
+      </if>
+
+      <!-- Strings used in local directory listings -->
+      <message name="IDS_DIRECTORY_LISTING_HEADER" desc="When viewing a local directory, this is the title of the page.">
+        Index of <ph name="LOCATION">LOCATION<ex>c:\Documents and Settings</ex></ph>
+      </message>
+      <message name="IDS_DIRECTORY_LISTING_PARENT" desc="When viewing a local directory, this is the text for a link to the parent directory.">
+        [parent directory]
+      </message>
+      <message name="IDS_DIRECTORY_LISTING_NAME" desc="When viewing a local directory, this is the text for the column above the filenames.">
+        Name
+      </message>
+      <message name="IDS_DIRECTORY_LISTING_SIZE" desc="When viewing a local directory, this is the text for the column above the file sizes.">
+        Size
+      </message>
+      <message name="IDS_DIRECTORY_LISTING_DATE_MODIFIED" desc="When viewing a local directory, this is the text for the column above the last modified dates.">
+        Date Modified
+      </message>
+      <message name="IDS_DIRECTORY_LISTING_PARSING_ERROR_BOX_TEXT" desc="Text to show in a box when we failed to parse FTP directory listing.">
+        Oh, no! This server is sending data <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> can't understand. Please <ph name="BEGIN_LINK">&lt;a href="http://code.google.com/p/chromium/issues/entry"&gt;</ph>report a bug<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>, and include the <ph name="BEGIN2_LINK">&lt;a href="LOCATION"&gt;</ph>raw listing<ph name="END2_LINK">&lt;/a&gt;</ph>.
+      </message>
+
+      <!-- Saving Page-->
+      <message name="IDS_SAVE_PAGE_DESC_HTML_ONLY" desc="In the Save Page dialog, the description of saving only the HTML of a webpage.">
+        Webpage, HTML Only
+      </message>
+      <message name="IDS_SAVE_PAGE_DESC_SINGLE_FILE" desc="In the Save Page dialog, the description of saving both the HTML and all shown resources into a single file.">
+        Webpage, Single File
+      </message>
+      <message name="IDS_SAVE_PAGE_DESC_COMPLETE" desc="In the Save Page dialog, the description of saving both the HTML and all shown resources.">
+        Webpage, Complete
+      </message>
+
+      <message name="IDS_OPTIONS_PRIVACY_CONTENT_SETTINGS_BUTTON" desc="Text for content settings button in Privacy options">
+        Content settings...
+      </message>
+      <message name="IDS_OPTIONS_PRIVACY_CLEAR_DATA_BUTTON" desc="Text for clear browsing data dialog in Privacy options">
+        Clear browsing data...
+      </message>
+      <message name="IDS_OPTIONS_FONTSETTINGS_CUSTOMIZE_FONTS_BUTTON" desc="The label of the 'Customize fonts' button">
+        Customize fonts...
+      </message>
+      <message name="IDS_OPTIONS_PROXIES_CONFIGURE_BUTTON" desc="The label of the 'Configure proxy settings' button">
+        Change proxy settings...
+      </message>
+      <message name="IDS_OPTIONS_CERTIFICATES_MANAGE_BUTTON" desc="The label of the 'Manage Certificates' button">
+        Manage certificates...
+      </message>
+
+      <if expr="chromeos">
+        <message name="IDS_OPTIONS_DISABLE_GDATA" desc="The text in the options panel describes that we can disable webdrive on ChromeOS.">
+          Disable Google Drive on this device
+        </message>
+      </if>
+
+      <message name="IDS_OPTIONS_DISABLE_WEB_SERVICES" desc="The text in the options panel describes that we can disable web services.">
+        You may optionally disable these services.
+      </message>
+      <message name="IDS_OPTIONS_LINKDOCTOR_PREF" desc="The documentation string of the 'Use Link Doctor' preference">
+        Use a web service to help resolve navigation errors
+      </message>
+
+      <message name="IDS_OPTIONS_SUGGEST_PREF" desc="The documentation string of the 'Use Suggest' preference">
+        Use a prediction service to help complete searches and URLs typed in the address bar or the app launcher search box
+      </message>
+      <message name="IDS_OPTIONS_SPELLING_PREF" desc="The documentation string of the 'Use Spelling' preference">
+        Use a web service to help resolve spelling errors
+      </message>
+      <message name="IDS_OPTIONS_ENABLE_LOGGING" desc="The label of the checkbox to enable/disable crash and user metrics logging">
+        Automatically send usage statistics and crash reports to Google
+      </message>
+      <message name="IDS_OPTIONS_ENABLE_LOGGING_RESTART" desc="The restart string after changing crash and user metrics logging. The text within the | symbols will be made into a link that should indicate to the user that clicking on it will cause Chrome to restart.">
+        (requires Chrome |restart|)
+      </message>
+      <message name="IDS_OPTIONS_ENABLE_DO_NOT_TRACK" desc="The label of the checkbox to enable/disable sending the 'Do Not track' header">
+        Send a "Do Not Track" request with your browsing traffic
+      </message>
+      <message name="IDS_OPTIONS_ENABLE_DO_NOT_TRACK_BUBBLE_TEXT" desc="The text of a confirmation dialog that confirms that the user want to send the 'Do Not Track' header">
+        Enabling "Do Not Track" means that a request will be included with your browsing traffic. Any effect depends on whether a website responds to the request, and how the request is interpreted. For example, some websites may respond to this request by showing you ads that aren't based on other websites you've visited. Many websites will still collect and use your browsing data - for example to improve security, to provide content, services, ads and recommendations on their websites, and to generate reporting statistics.
+      </message>
+      <message name="IDS_OPTIONS_ENABLE_DO_NOT_TRACK_BUBBLE_TITLE" desc="The title of a confirmation dialog that confirms that the user want to send the 'Do Not Track' header">
+        Do Not Track
+      </message>
+      <message name="IDS_OPTIONS_ENABLE_DO_NOT_TRACK_BUBBLE_ENABLE" desc="The label of a button that enables sending the 'Do Not Track' header">
+        OK
+      </message>
+      <message name="IDS_OPTIONS_ENABLE_DO_NOT_TRACK_BUBBLE_DISABLE" desc="The label of a button that disables sending the 'Do Not Track' header">
+        Cancel
+      </message>
+      <message name="IDS_OPTIONS_TABS_TO_LINKS_PREF" desc="The documentation string of the 'Tabs to Links' preference">
+        Pressing Tab on a webpage highlights links, as well as form fields
+      </message>
+
+      <message name="IDS_OPTIONS_DEFAULT_ZOOM_LEVEL_LABEL" desc="The label of the 'Default Zoom Level' select menu">
+        Page zoom:
+      </message>
+      <message name="IDS_OPTIONS_DEFAULT_FONT_SIZE_LABEL" desc="The label of the 'Default font size' select menu">
+        Font size:
+      </message>
+      <message name="IDS_OPTIONS_FONT_SIZE_LABEL_VERY_SMALL" desc="The label of the 'Very Small' option">
+        Very Small
+      </message>
+      <message name="IDS_OPTIONS_FONT_SIZE_LABEL_SMALL" desc="The label of the 'Small' option">
+        Small
+      </message>
+      <message name="IDS_OPTIONS_FONT_SIZE_LABEL_MEDIUM" desc="The label of the 'Medium' option">
+        Medium
+      </message>
+      <message name="IDS_OPTIONS_FONT_SIZE_LABEL_LARGE" desc="The label of the 'Large' option">
+        Large
+      </message>
+      <message name="IDS_OPTIONS_FONT_SIZE_LABEL_VERY_LARGE" desc="The label of the 'Very Large' option">
+        Very Large
+      </message>
+      <message name="IDS_OPTIONS_FONT_SIZE_LABEL_CUSTOM" desc="The label of the 'Custom' option">
+        Custom
+      </message>
+      <message name="IDS_OPTIONS_SETTINGS_LANGUAGE_AND_INPUT_SETTINGS" desc="Button title for invoking the 'Language and input options' panel.">
+        Language and input settings...
+      </message>
+      <if expr="not is_macosx">
+        <message name="IDS_OPTIONS_ENABLE_SPELLCHECK" desc="The documentation string of the 'Enable spellcheck' option">
+          Enable spell checking
+        </message>
+        <message name="IDS_OPTIONS_ENABLE_AUTO_SPELL_CORRECTION" desc="The documentation string of the 'Enable auto spell correction' option">
+          Enable automatic spell correction
+        </message>
+        <message name="IDS_OPTIONS_DICTIONARY_DOWNLOADING" desc="The informational message to notify that download of dictionary for spellchecking is in progress.">
+          Downloading spell check dictionary...
+        </message>
+        <message name="IDS_OPTIONS_DICTIONARY_DOWNLOAD_FAILED" desc="The error message to notify that download of dictionary for spellchecking failed.">
+          Spell check dictionary download failed.
+        </message>
+        <message name="IDS_OPTIONS_DICTIONARY_DOWNLOAD_RETRY" desc="The button label to retry downloading the dictionary for spellchecking.">
+          Retry
+        </message>
+        <message name="IDS_OPTIONS_DICTIONARY_DOWNLOAD_FAIL_HELP" desc="The help message to guide the user if download of dictionary for spellchecking failed multiple times.">
+          Please check with your network administrator to make sure that the firewall is not blocking downloads from Google servers.
+        </message>
+      </if>
+
+      <!-- General app failure messages -->
+      <message name="IDS_COULDNT_OPEN_PROFILE_ERROR" desc="Error displayed on startup when the profile can not be opened correctly due to problems reading or writing files in it">
+Your profile could not be opened correctly.
+
+Some features may be unavailable.  Please check that the profile exists and you have permission to read and write its contents.
+      </message>
+      <message name="IDS_REFUSE_TO_RUN_AS_ROOT" desc="Short error message in displayed in an error dialog on startup if the user tries to run chrome as root">
+        <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> can not be run as root.
+      </message>
+      <message name="IDS_REFUSE_TO_RUN_AS_ROOT_2" desc="Detailed message in the error dialog when the user tries to start chrome as root">
+        Please start <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> as a normal user. To run as root, you must specify an alternate --user-data-dir for storage of profile information.
+      </message>
+      <if expr="is_win">
+        <message name="IDS_PROFILE_ON_NETWORK_WARNING" desc="Warning shown to the user when she is running Chrome on Windows with a profile located on a network share.">
+          Warning: your <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> settings are stored on a network drive. This may result in slowdowns, crashes, or even loss of data.
+        </message>
+      </if>
+
+      <!-- Can't write to user data directory dialog -->
+      <message name="IDS_CANT_WRITE_USER_DIRECTORY_TITLE" desc="Title of dialog that is displayed when we can't create a directory for this user.">
+        Failed To Create Data Directory
+      </message>
+
+      <!-- Advanced Section Titles -->
+      <message name="IDS_OPTIONS_ADVANCED_SECTION_TITLE_PRIVACY">
+        Privacy
+      </message>
+      <message name="IDS_OPTIONS_ADVANCED_SECTION_TITLE_CONTENT">
+        Web content
+      </message>
+      <message name="IDS_OPTIONS_ADVANCED_SECTION_TITLE_INTEGRATION">
+        Installed Websites
+      </message>
+      <message name="IDS_OPTIONS_ADVANCED_SECTION_TITLE_CERTIFICATES">
+        HTTPS/SSL
+      </message>
+      <message name="IDS_OPTIONS_ADVANCED_SECTION_TITLE_NETWORK">
+        Network
+      </message>
+      <message name="IDS_OPTIONS_ADVANCED_SECTION_TITLE_LANGUAGES">
+        Languages
+      </message>
+      <message name="IDS_OPTIONS_ADVANCED_SECTION_TITLE_SYSTEM">
+        System
+      </message>
+
+      <!-- Accessibility options -->
+      <message name="IDS_OPTIONS_SETTINGS_SECTION_TITLE_ACCESSIBILITY">
+        Accessibility
+      </message>
+      <message name="IDS_OPTIONS_ACCESSIBILITY_FEATURES_LINK">
+        Add additional accessibility features
+      </message>
+
+      <!-- Multiple download warning-->
+      <message name="IDS_MULTI_DOWNLOAD_WARNING" desc="Warning invoked if multiple downloads are attempted without user interaction.">
+        This site is attempting to download multiple files. Do you want to allow this?
+      </message>
+      <message name="IDS_MULTI_DOWNLOAD_PERMISSION_FRAGMENT" desc="Permission request shown if multiple downloads are attempted without user interaction and there are multiple permissions requested. Follows a prompt: 'This site would like to:'">
+        download multiple files.
+      </message>
+      <message name="IDS_MULTI_DOWNLOAD_WARNING_ALLOW" desc="Text on the allow button in the IDS_MULTI_DOWNLOAD_WARNING dialog">
+        Allow
+      </message>
+      <message name="IDS_MULTI_DOWNLOAD_WARNING_DENY" desc="Text on the deny button in the IDS_MULTI_DOWNLOAD_WARNING dialog">
+        Deny
+      </message>
+
+      <message name="IDS_RECENT_TABS_MENU" desc="The title of the Recent Tabs menu in the wrench menu.">
+        Recent Tabs
+      </message>
+
+      <message name="IDS_RECENT_TABS_NO_DEVICE_TABS" desc="The label in the Recent Tabs menu in the wrench menu when there's no tabs from other devices.">
+        No tabs from other devices
+      </message>
+
+      <message name="IDS_RECENT_TABS_MORE" desc="The label in the Recent Tabs menu in the wrench menu to open the other devices and history page.">
+        More...
+      </message>
+
+      <message name="IDS_DEFAULT_DOWNLOAD_FILENAME" desc="Default name for downloaded files when we have no idea what they could be.">
+        download
+      </message>
+      <if expr="is_macosx or chromeos">
+        <message name="IDS_BROWSER_WINDOW_MAC_TAB_UNTITLED" desc="Tabs and windows on MacOS with no title use this string.">
+          Untitled
+        </message>
+      </if>
+
+      <message name="IDS_SET_AS_DEFAULT_INFOBAR_BUTTON_LABEL" desc="The label of the 'set as default' button on the default browser infobar.">
+        Set as default
+      </message>
+      <message name="IDS_DONT_ASK_AGAIN_INFOBAR_BUTTON_LABEL" desc="The label of the 'don't ask again' button on the default browser infobar.">
+        Don't ask again
+      </message>
+
+      <if expr="not use_titlecase">
+        <message name="IDS_SHOW_WINDOW_DECORATIONS_MENU" desc="The menu entry text in the tab strip context menu.  This toggles the system title bar and window borders (window decorations) on linux.">
+          Use system title bar and borders
+        </message>
+      </if>
+      <if expr="use_titlecase">
+        <message name="IDS_SHOW_WINDOW_DECORATIONS_MENU" desc="In Title Case: The menu entry text in the tab strip context menu.  This toggles the system title bar and window borders (window decorations) on linux.">
+          Use System Title Bar and Borders
+        </message>
+      </if>
+
+      <message name="IDS_USED_EXISTING_BROWSER" desc="Linux-specific message printed to console when the app is ran a second time, causing a new window to show rather than starting up a new browser.">
+        Created new window in existing browser session.
+      </message>
+
+      <!-- Sync strings -->
+
+      <!-- Shared between all the plaforms -->
+      <message name="IDS_SYNC_ENTER_GOOGLE_PASSPHRASE_BODY_WITH_DATE" desc="Instructions for the dialog where the user needs to enter their previous google passphrase.">
+        Your data was encrypted with your Google password as of <ph name="TIME">$1<ex>Sept 1, 2012</ex></ph>. Please enter it below.
+      </message>
+      <message name="IDS_SYNC_ENTER_PASSPHRASE_BODY_WITH_DATE" desc="Instructions for the dialog where the user enters the passphrase.">
+        Your data was encrypted with your sync passphrase on <ph name="TIME">$1<ex>Sept 1, 2012</ex></ph>. Please enter it below.
+      </message>
+      <message name="IDS_SYNC_ACCOUNT_SYNCING_TO_USER" desc="The message that appears in the options dialog indicating that account is syncing to a user with the given email address.">
+        Signed in as <ph name="USER_EMAIL_ADDRESS">$1<ex>foo@gmail.com</ex></ph>.
+      </message>
+      <message name="IDS_SYNC_ENTER_PASSPHRASE_BODY" desc="Instructions for the dialog where the user enters the passphrase.">
+        Your data is encrypted with your sync passphrase. Please enter it below.
+      </message>
+
+      <!-- Sync time strings -->
+      <message name="IDS_SYNC_TIME_NEVER" desc="Indicates that the first sync has never completed.">
+        Never
+      </message>
+      <message name="IDS_SYNC_TIME_JUST_NOW" desc="Indicates that a sync cycle just finished.">
+        Just now
+      </message>
+
+      <!-- Sync/sign-in error messages -->
+      <message name="IDS_SIGNIN_ERROR_BUBBLE_VIEW_TITLE" desc="Title in the sign-in error bubble view/notification.">
+        Sign-in Error
+      </message>
+      <message name="IDS_SYNC_ERROR_BUBBLE_VIEW_TITLE" desc="Title in the sync error bubble view/notification.">
+        Sync Error
+      </message>
+      <if expr="use_ash">
+        <message name="IDS_SYNC_NOTIFICATION_ACCEPT" desc="A button label shown in the sync error notification when the passphrase needs to be updated.">
+          Update sync passphrase
+        </message>
+      </if>
+
+      <if expr="not use_titlecase">
+        <message name="IDS_SYNC_PASSPHRASE_ERROR_BUBBLE_VIEW_ACCEPT" desc="The accept button in the sync error bubble view when the user needs to update the passphrase.">
+          Update...
+        </message>
+        <message name="IDS_SYNC_UNAVAILABLE_ERROR_BUBBLE_VIEW_ACCEPT" desc="The accept button in the sync error bubble view when sync is not available for their domain.">
+          OK...
+        </message>
+        <message name="IDS_SYNC_PASSPHRASE_ERROR_WRENCH_MENU_ITEM" desc="The sync error wrench menu item when the user needs to update the passphrase.">
+          Sync Error: Update Sync passphrase...
+        </message>
+        <if expr="chromeos">
+          <message name="IDS_SYNC_SIGN_IN_ERROR_BUBBLE_VIEW_ACCEPT" desc="The accept button in the sync error bubble view/notification when the user needs to sign out and sign in again to Chrome OS.">
+            Sign out then sign in again...
+          </message>
+          <message name="IDS_SYNC_SIGN_IN_ERROR_WRENCH_MENU_ITEM" desc="The sync error wrench menu item when the user needs to sign out and sign in again to Chrome OS.">
+            Sign out then sign in again...
+          </message>
+        </if>
+        <if expr="not chromeos">
+          <message name="IDS_SYNC_SIGN_IN_ERROR_BUBBLE_VIEW_ACCEPT" desc="The accept button in the sync error bubble view when the user needs to sign in again.">
+            Sign in again...
+          </message>
+          <message name="IDS_SYNC_SIGN_IN_ERROR_WRENCH_MENU_ITEM" desc="The sync error wrench menu item when the user needs to sign in again.">
+              Sign in again...
+          </message>
+        </if>
+      </if>
+      <if expr="use_titlecase">
+        <message name="IDS_SYNC_PASSPHRASE_ERROR_BUBBLE_VIEW_ACCEPT" desc="The accept button in the sync error bubble view when the user needs to update the passphrase.">
+          Update...
+        </message>
+        <message name="IDS_SYNC_UNAVAILABLE_ERROR_BUBBLE_VIEW_ACCEPT" desc="The accept button in the sync error bubble view when sync is not available for their domain.">
+          OK...
+        </message>
+        <message name="IDS_SYNC_PASSPHRASE_ERROR_WRENCH_MENU_ITEM" desc="The sync error wrench menu item when the user needs to update the passphrase.">
+          Sync Error: Update Sync Passphrase...
+        </message>
+        <message name="IDS_SYNC_SIGN_IN_ERROR_BUBBLE_VIEW_ACCEPT" desc="The accept button in the sync error bubble view when the user needs to sign in again.">
+          Sign in Again...
+        </message>
+        <message name="IDS_SYNC_SIGN_IN_ERROR_WRENCH_MENU_ITEM" desc="The sync error wrench menu item when the user needs to sign in again.">
+          Sign in Again...
+        </message>
+      </if>
+
+      <!-- Android uses native UI to handle Sync settings -->
+      <if expr="not is_android">
+        <!-- Sync options dialog strings -->
+        <message name="IDS_SYNC_OPTIONS_GROUP_NAME" desc="The name of the sync group in the options dialog.">
+          Sign in
+        </message>
+        <if expr="not chromeos">
+          <message name="IDS_SYNC_OVERVIEW" desc="The message that appears in the options dialog when sync has not been set up by the user.">
+            Sign in to <ph name="PRODUCT_NAME">$1<ex>Chrome</ex></ph> with your Google Account to save your personalized browser features to the web and access them from <ph name="PRODUCT_NAME">$1<ex>Chrome</ex></ph> on any computer. You'll also be automatically signed in to your favorite Google services.
+          </message>
+        </if>
+        <message name="IDS_SYNC_START_SYNC_BUTTON_LABEL" desc="The label that appears on the sync button in the options dialog when sync has not been set up by the user.">
+          Sign in to <ph name="PRODUCT_NAME">$1<ex>Chrome</ex></ph>
+        </message>
+        <message name="IDS_SYNC_SETUP_BUTTON_LABEL" desc="The label that appears on the sync setup button in the options dialog when sync has been disabled by the user.">
+          Set up sync...
+        </message>
+        <message name="IDS_SYNC_SETUP_ERROR" desc="The message displayed when an unspecified but unrecoverable error occurs during sync setup.">
+          An error occurred while trying to set up sync.
+        </message>
+        <message name="IDS_SYNC_SETUP_ABORTED_BY_PENDING_CLEAR" desc="The error message displayed to the user when setup was aborted because the server reported that a pending clear private data operation is in progress">
+          The sync server is busy, please try again later.
+        </message>
+        <message name="IDS_SIGNED_IN_WITH_SYNC_DISABLED" desc="The message that appears in the options dialog indicating that user is signed in with the given email address, but sync is not enabled.">
+          Signed in as <ph name="USER_EMAIL_ADDRESS">$1<ex>foo@gmail.com</ex></ph>. Sync is disabled by your administrator.
+        </message>
+        <message name="IDS_SIGNED_IN_WITH_SYNC_SUPPRESSED" desc="The message that appears in the options dialog indicating that user is signed in with the given email address, but sync has been stopped.">
+          Signed in as <ph name="USER_EMAIL_ADDRESS">$1<ex>foo@gmail.com</ex></ph>. Sync has been stopped via the Google Dashboard.
+        </message>
+        <message name="IDS_SYNC_ACCOUNT_SYNCING_TO_USER_WITH_MANAGE_LINK" desc="The message that appears in the options dialog indicating that account is syncing to a user with the given email address, together with a link to manage their data (where supported, or not possible through the application)">
+          Signed in as <ph name="USER_EMAIL_ADDRESS">$1<ex>foo@gmail.com</ex></ph>. Manage your synced data on <ph name="BEGIN_LINK">&lt;a href="$2" target=&quot;_blank&quot;&gt;<ex>&lt;a href="$2" target=&quot;_blank&quot;&gt;</ex></ph>Google Dashboard<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>.
+        </message>
+        <message name="IDS_SYNC_ACCOUNT_SYNCING_TO_USER_WITH_MANAGE_LINK_NEW" desc="The message that appears in the options dialog indicating that account is syncing to a user with the given email address, together with a link to manage their data (where supported, or not possible through the application)">
+          Signed in as <ph name="USER_EMAIL_ADDRESS">$1<ex>foo@gmail.com</ex></ph>. Manage your synced data and devices on <ph name="BEGIN_LINK">&lt;a href="$2" target=&quot;_blank&quot;&gt;<ex>&lt;a href="$2" target=&quot;_blank&quot;&gt;</ex></ph>chrome.com/sync<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>
+        </message>
+        <message name="IDS_SYNC_AUTHENTICATING_LABEL" desc="Label to display while the user is being authenticated to use sync.">
+          Authenticating...
+        </message>
+        <message name="IDS_SYNC_INVALID_USER_CREDENTIALS" desc="Error message to display when the user name or password entered by the user are invalid.">
+          Invalid user name or password.
+        </message>
+        <message name="IDS_SYNC_ERROR_SIGNING_IN" desc="An error was encountered while signing the user in.">
+          Error signing in.
+        </message>
+        <message name="IDS_SYNC_UNRECOVERABLE_ERROR" desc="Message shown when sync setup failed due to an unrecoverable error and can't continue.">
+          Oops, Sync has stopped working.
+        </message>
+        <message name="IDS_SYNC_STATUS_UNRECOVERABLE_ERROR" desc="Message shown on the personal options page when there is an unrecoverable error.">
+          Oops, Sync has stopped working. <ph name="BEGIN_LINK">&lt;a href="$1" target="_blank"&gt;<ex>&lt;a href="$1" target="_blank"&gt;</ex></ph>Learn More<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>
+        </message>
+        <message name="IDS_SYNC_CONFIGURE_ENCRYPTION" desc="Link to configure sync encryption for passwords">
+          Please update your sync passphrase.
+        </message>
+        <message name="IDS_SYNC_PASSWORD_SYNC_ATTENTION" desc="Message indicating password sync needs attention.">
+          Please update your sync passphrase.
+        </message>
+        <message name="IDS_SYNC_UPGRADE_CLIENT" desc="Message indicating client needs to be upgraded to the latest version.">
+          Sync Error:  <ph name="PRODUCT_NAME">$1<ex>Chrome</ex></ph> is out of date and needs to be updated.
+        </message>
+        <message name="IDS_SYNC_CLEAR_USER_DATA" desc="Message indicating user needs to clear user data and setup sync.">
+          Sync Error: Please reset Sync via the Google Dashboard.
+        </message>
+        <message name="IDS_SYNC_STOP_AND_RESTART_SYNC" desc="Message indicating user needs to stop and restart sync.">
+          Sync Error: Please stop and restart Sync.
+        </message>
+        <message name="IDS_SYNC_ENABLE_SYNC_ON_ACCOUNT" desc="Message indicating user needs to ask the administrator to enable sync.">
+          Sync Error: Please contact administrator to enable sync.
+        </message>
+
+        <message name="IDS_SYNC_PASSPHRASE_MSG_EXPLICIT_PREFIX" desc="Message when explicit passphrase is selected.">
+          Only someone with your passphrase can read your encrypted data. The passphrase is not sent to or stored by Google. If you forget your passphrase, you will need to
+        </message>
+        <message name="IDS_SYNC_PASSPHRASE_MSG_EXPLICIT_POSTFIX" desc="Postfix of the message show when explicit passphrase is selected.">
+          reset sync
+        </message>
+        <message name="IDS_SYNC_LOGIN_INFO_OUT_OF_DATE" desc="The login information for the user is out of date - for example, the user changed their password and therefore signing in again is required.">
+          Account sign-in details are out of date.
+        </message>
+        <message name="IDS_SYNC_SERVER_IS_UNREACHABLE" desc="The message to display in the New Tab Page sync section when the server is unreachable.">
+          <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> could not sync your data because it could not connect to the sync server. Retrying...
+        </message>
+        <if expr="not chromeos">
+          <message name="IDS_SYNC_RELOGIN_LINK_LABEL" desc="The text to display on in the hyperlink when the user needs to sign in again to use sync.">
+            Sign in again
+          </message>
+        </if>
+        <if expr="chromeos">
+          <message name="IDS_SYNC_RELOGIN_LINK_LABEL" desc="The text to display on in the hyperlink when the user needs to sign out and sign in again to use sync on Chrome OS.">
+            Sign out then sign in again
+          </message>
+        </if>
+        <message name="IDS_OPTIONS_CUSTOMIZE_SYNC_BUTTON_LABEL" desc="The text to display on the button to customize which data types the user is syncing.">
+          Advanced sync settings...
+        </message>
+        <message name="IDS_SYNC_STOP_SYNCING_BUTTON_LABEL" desc="The text to display on the button to indicate stop syncing functionality.">
+          Disconnect your Google Account...
+        </message>
+        <message name="IDS_SYNC_STOP_SYNCING_CONFIRM_BUTTON_LABEL" desc="The text to display on the button to confirm the user wishes to stop syncing.">
+          Disconnect account
+        </message>
+        <message name="IDS_SYNC_STOP_SYNCING_DIALOG_TITLE" desc="The title of the dialog that explains what 'stop syncing' means.">
+          Disconnect your Google Account
+        </message>
+        <message name="IDS_SYNC_STOP_SYNCING_EXPLANATION_LABEL" desc="The text to display below the 'Stop syncing this account' button on the options pane, explaining what the button does.">
+          By disconnecting your Google Account from <ph name="PRODUCT_NAME">$1<ex>Chrome</ex></ph>, your data will remain on this computer but changes will no longer be synced to your Google Account. Data already stored in your Google Account will remain there until you remove it using <ph name="BEGIN_LINK">&lt;a href="$2" target=&quot;_blank&quot;&gt;<ex>&lt;a href="$2" target=&quot;_blank&quot;&gt;</ex></ph>Google Dashboard<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>.
+        </message>
+        <message name="IDS_SYNC_STOP_DELETE_PROFILE_LABEL" desc="The text to display by the checkbox asking user whether to also delete profile when stopping sync.">
+          Also clear your history, bookmarks, settings, and other Chrome data stored on this device.
+        </message>
+        <message name="IDS_SYNC_ADVANCED_OPTIONS" desc="The text in the link that brings up the sync configure screen in the new tab page new data type notification.">
+          Advanced settings
+        </message>
+
+        <!-- Sync New Tab Page strings -->
+        <message name="IDS_SYNC_NTP_SYNC_SECTION_ERROR_TITLE" desc="The title to display in the New Tab Page sync status section in case of an error.">
+          Sync failed
+        </message>
+        <message name="IDS_SYNC_NTP_SYNC_SECTION_PROMO_TITLE" desc="The title to display in the New Tab Page sync status section in case of a promotion.">
+          New!
+        </message>
+        <message name="IDS_SYNC_NTP_PASSWORD_PROMO" desc="The message to display to promote passwords sync now being available.">
+          <ph name="PRODUCT_NAME">$1<ex>Chrome</ex></ph> can now sync your passwords.
+        </message>
+        <message name="IDS_SYNC_NTP_PASSWORD_ENABLE" desc="The link text to present for passwords sync.">
+          Enable
+        </message>
+        <message name="IDS_SYNC_NTP_SETUP_IN_PROGRESS" desc="The message to display in the New Tab Page sync section when the sync setup is underway.">
+          Setup in progress...
+        </message>
+        <message name="IDS_SYNC_NTP_SYNCED_TO" desc="The message to display in the New Tab Page sync section when the user is in sync.">
+          Synced as <ph name="USER_EMAIL_ADDRESS">$1<ex>foo@gmail.com</ex></ph>
+        </message>
+
+        <!-- Sync Promo New Tab Page bubble strings -->
+        <message name="IDS_SYNC_PROMO_NTP_BUBBLE_MESSAGE" desc="The body of the sync promo NTP bubble.">
+          You're now signed in to <ph name="SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph>. Your bookmarks, history, and other settings are being synced with your Google Account.
+        </message>
+        <if expr="not use_titlecase">
+          <message name="IDS_SYNC_PROMO_NTP_BUBBLE_OK" desc="The ok button in the sync promo NTP bubble. Clicking on the button will dismiss the bubble.">
+            OK
+          </message>
+          <message name="IDS_SYNC_PROMO_NTP_BUBBLE_ADVANCED" desc="The advanced link in the sync promo NTP bubble. Clicking the link will take the user to advanced settings.">
+            Advanced...
+          </message>
+        </if>
+        <if expr="use_titlecase">
+          <message name="IDS_SYNC_PROMO_NTP_BUBBLE_OK" desc="In title case. The ok button in the sync promo NTP bubble. Clicking on the button will dismiss the bubble.">
+            OK
+          </message>
+          <message name="IDS_SYNC_PROMO_NTP_BUBBLE_ADVANCED" desc="In title case. The advanced link in the sync promo NTP bubble. Clicking the link will take the user to advanced settings.">
+            Advanced...
+          </message>
+        </if>
+
+        <!-- Customize Sync dialog -->
+        <message name="IDS_SYNC_SETUP_CONFIGURE_TITLE" desc="The title of the Customize page of the sync setup dialog.">
+          Advanced sync settings
+        </message>
+        <message name="IDS_SYNC_CONFIRM_SYNC_PREFERENCES" desc="The title of the 'Confirm Sync Settings' page of the customize sync dialog.">
+          Confirm sync settings
+        </message>
+        <message name="IDS_SYNC_SYNC_EVERYTHING" desc="The text of the OK button of the 'Confirm Sync Settings' page of the customize sync dialog.">
+          OK, sync everything
+        </message>
+
+        <!-- Spinner dialog for waiting sync backend to start up -->
+        <message name="IDS_SYNC_SETUP_SPINNER_TITLE" desc="The title of the sync setup dialog showing spinner.">
+          Please wait...
+        </message>
+
+        <!-- Notify network connection goes time out -->
+        <message name="IDS_SYNC_SETUP_TIME_OUT_TITLE" desc="The title of the 'Timeout' page for sync settings.">
+          Failed to start up the sync backend
+        </message>
+        <message name="IDS_SYNC_SETUP_TIME_OUT_CONTENT" desc="Text explaining what to do if sync times out.">
+          Please make sure your network connection is working and if the problem persists, please sign out and sign in again to refresh your credentials.
+        </message>
+
+        <!-- Choose data types dialog strings -->
+        <message name="IDS_SYNC_CHOOSE_DATATYPES_INSTRUCTIONS" desc="Text explaining the 'Choose Datatypes' dialog.">
+          <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> securely syncs your data with your Google account. Keep everything synced or customize synced data types and encryption settings.
+        </message>
+        <message name="IDS_SYNC_EVERYTHING" desc="A drop-down menu item for users who want to sync all data types.">
+          Sync everything
+        </message>
+        <message name="IDS_SYNC_CHOOSE_DATATYPES" desc="A drop-down menu item for users who want to select some datatypes to sync.">
+          Choose what to sync
+        </message>
+        <message name="IDS_SYNC_NOTHING" desc="A drop-down menu item for users who want to remain signed in to Chrome, but not sync any datatypes.">
+          Sync nothing
+        </message>
+        <message name="IDS_SYNC_DATATYPE_BOOKMARKS" desc="Bookmarks, one of the data types that we allow syncing.">
+          Bookmarks
+        </message>
+        <message name="IDS_SYNC_DATATYPE_PREFERENCES" desc="Settings, one of the data types that we allow syncing.">
+          Settings
+        </message>
+        <message name="IDS_SYNC_DATATYPE_AUTOFILL" desc="Form Autofill items, one of the data types that we allow syncing.">
+          Autofill
+        </message>
+        <message name="IDS_SYNC_DATATYPE_THEMES" desc="Themes, one of the data types that we allow syncing.">
+          Themes
+        </message>
+        <message name="IDS_SYNC_DATATYPE_EXTENSIONS" desc="Extensions, one of the data types that we allow syncing.">
+          Extensions
+        </message>
+        <message name="IDS_SYNC_DATATYPE_PASSWORDS" desc="Saved passwords, one of the data types that we allow syncing.">
+          Passwords
+        </message>
+        <message name="IDS_SYNC_DATATYPE_TYPED_URLS" desc="History, one of the data types that we allow syncing.">
+          History
+        </message>
+        <message name="IDS_SYNC_DATATYPE_APPS" desc="Apps, one of the data types that we allow syncing.">
+          Apps
+        </message>
+        <message name="IDS_SYNC_DATATYPE_TABS" desc="Open Tabs, one of the data types that we allow syncing.">
+          Open Tabs
+        </message>
+
+        <!-- Encryption tab of the configure sync dialog -->
+        <message name="IDS_SYNC_ENCRYPTION_INSTRUCTIONS" desc="Instructions for the encryption settings tab.">
+          <ph name="PRODUCT_NAME">$1<ex>Chrome</ex></ph> requires you to encrypt your data using either your Google password or your own passphrase.
+        </message>
+        <message name="IDS_SYNC_PASSPHRASE_WARNING" desc="Warning message about using a passphrase for sync.">
+          You are currently using a passphrase.  If you have forgotten your passphrase, you can reset sync to clear your data from Google's servers using the Google Dashboard.
+        </message>
+        <message name="IDS_SYNC_ENCRYPTION_SECTION_TITLE" desc="Title of the section containing sync encryption preferences.">
+          Encryption options
+        </message>
+        <message name="IDS_SYNC_ENCRYPTION_SECTION_MESSAGE" desc="Message explaining that sync data can be encrypted.">
+          For added security, <ph name="PRODUCT_NAME">$1<ex>Chrome</ex></ph> will encrypt your data.
+        </message>
+        <message name="IDS_SYNC_BASIC_ENCRYPTION_DATA" desc="Text of the radio that when selected enables basic encryption.">
+          Encrypt synced passwords with your Google credentials
+        </message>
+        <message name="IDS_SYNC_FULL_ENCRYPTION_DATA" desc="Text of the radio that when selected enables full encryption.">
+          Encrypt all synced data with your own sync passphrase
+        </message>
+        <message name="IDS_SYNC_FULL_ENCRYPTION_BODY_CUSTOM" desc="Text of the radio that when selected enables full encryption.">
+          All data is encrypted with your sync passphrase
+        </message>
+        <message name="IDS_SYNC_FULL_ENCRYPTION_BODY_CUSTOM_WITH_DATE" desc="Text of the radio that when selected enables full encryption.">
+          All data was encrypted with your sync passphrase on
+          <ph name="TIME">$1<ex>Sept 1, 2012</ex></ph>
+        </message>
+        <message name="IDS_SYNC_FULL_ENCRYPTION_BODY_GOOGLE_WITH_DATE" desc="Text of the radio that when selected enables full encryption.">
+          All data was encrypted with your Google password as of
+          <ph name="TIME">$1<ex>Sept 1, 2012</ex></ph>
+        </message>
+
+        <!-- Passphrase dialog strings -->
+        <message name="IDS_SYNC_ENTER_GOOGLE_PASSPHRASE_BODY" desc="Instructions for the dialog where the user needs to enter their previous google passphrase.">
+          You already have data that is encrypted using a different version of your Google Account password. Please enter it below.
+        </message>
+        <message name="IDS_SYNC_PASSPHRASE_LABEL" desc="Label for the passphrase field.">
+          Passphrase
+        </message>
+        <message name="IDS_SYNC_CONFIRM_PASSPHRASE_LABEL" desc="Label for the confirm-passphrase field.">
+          Confirm passphrase
+        </message>
+        <message name="IDS_SYNC_EMPTY_PASSPHRASE_ERROR" desc="Error message when the passphrase is empty.">
+          Empty passphrase is not allowed.
+        </message>
+        <message name="IDS_SYNC_PASSPHRASE_MISMATCH_ERROR" desc="Error message when the passphrase and confirmation don't match.">
+          You must enter the same passphrase twice.
+        </message>
+        <message name="IDS_SYNC_INCORRECT_PASSPHRASE" desc="Message when the passphrase is incorrect.">
+          The passphrase you entered is incorrect.
+        </message>
+        <message name="IDS_SYNC_PASSPHRASE_RECOVER" desc="Message about how to recover from a lost passphrase.">
+          If you've forgotten your passphrase, stop and reset Sync via <ph name="BEGIN_LINK">&lt;a href="$1" target=&quot;_blank&quot;&gt;<ex>&lt;a href="$1" target=&quot;_blank&quot;&gt;</ex></ph>Google Dashboard<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>.
+        </message>
+        <message name="IDS_SYNC_PASSPHRASE_CANCEL_YES" desc="String for 'yes' button on passphrase cancel warning dialog.">
+          Skip
+        </message>
+        <message name="IDS_SYNC_PASSPHRASE_CANCEL_NO" desc="String for 'no' button on passphrase cancel warning dialog.">
+          Enter passphrase
+        </message>
+
+        <!-- Login dialog strings -->
+        <message name="IDS_SYNC_SETUP_TITLE" desc="The title of the Sync Setup overlay.">
+          Sign in with your Google Account
+        </message>
+        <message name="IDS_SYNC_LOGIN_SETTING_UP" desc="A progress message">
+          Setting up...
+        </message>
+        <message name="IDS_SYNC_SUCCESS" desc="Operation successful">
+          Success!
+        </message>
+        <message name="IDS_SYNC_SERVICE_UNAVAILABLE" desc="Error message to display when the user domain entered by the user has sync disabled.">
+          Sync service is not available for your domain.
+        </message>
+
+        <!-- Sync app menu item strings -->
+        <if expr="not use_titlecase">
+          <message name="IDS_SYNC_MENU_PRE_SYNCED_LABEL" desc="The text for the sync app menu item before an account is synced.">
+            Sign in to <ph name="SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph>...
+          </message>
+          <message name="IDS_SYNC_MENU_SYNCED_LABEL" desc="The text for the sync app menu item when bookmark sync has been enabled">
+            Signed in as <ph name="USER_NAME">$1<ex>pat@example.com</ex></ph>...
+          </message>
+        </if>
+        <if expr="use_titlecase">
+          <message name="IDS_SYNC_MENU_PRE_SYNCED_LABEL" desc="The text for the sync app menu item before an account is synced.">
+            Sign in to <ph name="SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph>...
+          </message>
+          <message name="IDS_SYNC_MENU_SYNCED_LABEL" desc="The text for the sync app menu item when bookmark sync has been enabled">
+            Signed in as <ph name="USER_NAME">$1<ex>pat@example.com</ex></ph>...
+          </message>
+        </if>
+
+        <!-- Sync promo page chrome://signin -->
+        <message name="IDS_SYNC_PROMO_TAB_TITLE" desc="The title of the sync promo tab.">
+          Sign in
+        </message>
+        <message name="IDS_SYNC_PROMO_MESSAGE_TITLE_SHORT" desc="A short sync promo message displayed under the title.">
+          Sign in to get your bookmarks, history, and settings on all your devices.
+        </message>
+        <message name="IDS_SYNC_PROMO_SKIP_BUTTON" desc="The link button at the bottom to let the user skip the sync promo.">
+          Skip for now
+        </message>
+        <message name="IDS_SYNC_PROMO_ADVANCED" desc="The link button at the bottom to let the user customize the sync settings.">
+          Advanced...
+        </message>
+        <message name="IDS_SYNC_PROMO_NOT_SIGNED_IN_STATUS_HEADER" desc="The first line of the of the message shown in NTP when a user is not signed into sync.">
+          Not signed in to <ph name="SHORT_PRODUCT_NAME">$1<ex>Chrome</ex></ph>
+        </message>
+        <message name="IDS_SYNC_PROMO_NOT_SIGNED_IN_STATUS_SUB_HEADER" desc="The second line of the of the message shown in NTP when a user is not signed in to sync.">
+          (You're missing out&#8212;<ph name="IDS_SYNC_PROMO_NOT_SIGNED_IN_STATUS_LINK">$1<ex>sign in</ex></ph>)
+        </message>
+        <message name="IDS_SYNC_PROMO_NOT_SIGNED_IN_STATUS_LINK" desc="The linkified portion of the sync sign in promo on the NTP. Clicking this text allows the user to sign in to sync.">
+          sign in
+        </message>
+      </if>
+
+      <if expr="chromeos">
+        <!-- The URL for the Google mailto service. -->
+        <message name="IDS_GOOGLE_MAILTO_HANDLER_URL">
+          https:////mail.google.com//mail//?extsrc=mailto&amp;url=%s
+        </message>
+
+        <!-- The URL for the Google webcal service. -->
+        <message name="IDS_GOOGLE_WEBCAL_HANDLER_URL">
+          https:////www.google.com//calendar//render?cid=%s
+        </message>
+      </if>
+
+      <!-- Translate Bubble -->
+      <if expr="toolkit_views or is_macosx">
+        <message name="IDS_TRANSLATE_BUBBLE_BEFORE_TRANSLATE" desc="Text to show for the translate bubble label when that page is in specified language and ask if should translate.">
+          Would you like to translate this page?
+        </message>
+        <message name="IDS_TRANSLATE_BUBBLE_ADVANCED" desc="Text to show for the translate bubble link label to jump to the advanced panel.">
+          Options
+        </message>
+        <message name="IDS_TRANSLATE_BUBBLE_ACCEPT" desc="Text to show for the translate bubble button to accept translation.">
+          Translate
+        </message>
+        <message name="IDS_TRANSLATE_BUBBLE_DENY" desc="Text to show for the translate bubble menu item to deny translation.">
+          Nope
+        </message>
+        <message name="IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_LANG" desc="Text to show for the translate bubble menu item to never translate the specified language">
+          Never translate <ph name="language">$1<ex>French</ex></ph>
+        </message>
+        <message name="IDS_TRANSLATE_BUBBLE_NEVER_TRANSLATE_SITE" desc="Text to show for the translate bubble menu item to never translate the current site">
+          Never translate this site
+        </message>
+        <message name="IDS_TRANSLATE_BUBBLE_TRANSLATING" desc="Text to show for the translate bubble label when page is currently being translated by servers">
+          This page is being translated ...
+        </message>
+        <message name="IDS_TRANSLATE_BUBBLE_TRANSLATED" desc="Text to show for the translate bubble label when the page has been translated from one language to another">
+          This page has been translated.
+        </message>
+        <message name="IDS_TRANSLATE_BUBBLE_REVERT" desc="Text to show for the translate bubble button to revert translation of translated page">
+          Show original
+        </message>
+        <message name="IDS_TRANSLATE_BUBBLE_TRY_AGAIN" desc="Text to show for the translate bubble button to try to translate the page again">
+          Try again
+        </message>
+        <message name="IDS_TRANSLATE_BUBBLE_ALWAYS" desc="Text to show for the translate bubble checkbox to always translate from one language to another">
+          Always translate
+        </message>
+        <message name="IDS_TRANSLATE_BUBBLE_COULD_NOT_TRANSLATE" desc="Text to show for the translate bubble label when the page could not be translated.">
+          This page could not be translated.
+        </message>
+        <message name="IDS_TRANSLATE_BUBBLE_PAGE_LANGUAGE" desc="Text to show for the translate bubble label next to the combobox of the page language">
+          Page language:
+        </message>
+        <message name="IDS_TRANSLATE_BUBBLE_TRANSLATION_LANGUAGE" desc="Text to show for the translate bubble label next to the combobox of the target language for Translate">
+          Translation language:
+        </message>
+        <message name="IDS_TRANSLATE_BUBBLE_LANGUAGE_SETTINGS" desc="Text to show for the translate bubble link label next to jump to the language setting page.">
+          Language settings
+        </message>
+      </if>
+
+      <!-- Desktop notifications -->
+      <if expr="enable_notifications">
+        <message name="IDS_NOTIFICATION_PERMISSIONS" desc="Text requesting permission for desktop notifications.">
+          Allow <ph name="site">$1<ex>mail.google.com</ex></ph> to show desktop notifications?
+        </message>
+        <message name="IDS_NOTIFICATION_PERMISSIONS_FRAGMENT" desc="Permission sentence fragment to show following the prompt 'This site would like to:' in a permissions request">
+          Desktop notifications
+        </message>
+        <message name="IDS_NOTIFICATION_PERMISSION_YES" desc="The label of the 'allow' button on the notification permission infobar.">
+          Allow
+        </message>
+        <message name="IDS_NOTIFICATION_PERMISSION_NO" desc="The label of the 'deny' button on the notification permission infobar.">
+          Deny
+        </message>
+        <message name="IDS_NOTIFICATION_WELCOME_BODY" desc="Notification body for the Welcome Notification">
+          Stay connected to what you need to know, across all devices.
+        </message>
+        <message name="IDS_NOTIFICATION_WELCOME_BUTTON_LEARN_MORE" desc="Learn more button text for the Welcome Notification">
+          Learn more
+        </message>
+        <message name="IDS_NOTIFICATION_WELCOME_DISPLAY_SOURCE" desc="Display source for the Welcome Notification">
+          Notifications
+        </message>
+        <message name="IDS_NOTIFICATION_WELCOME_TITLE" desc="Notification title for the Welcome Notification">
+          Google Now for Chrome!
+        </message>
+        <message name="IDS_MESSAGE_CENTER_FOOTER_WITH_PRODUCT_TITLE" desc="The label in the footer of the message center tray, with the product title.">
+          <ph name="product_name">$1<ex>Chrome</ex></ph> Notifications
+        </message>
+        <message name="IDS_NOTIFIER_WELCOME_BODY" desc="Notification body for when a new notifier service is introduced.">
+          Now on your desktop
+        </message>
+        <message name="IDS_NOTIFIER_WELCOME_BUTTON" desc="Notification body for when a new notifier service is introduced.">
+          Turn off these notifications
+        </message>
+      </if>
+
+      <!-- Mac AppleScript -->
+      <if expr="is_macosx">
+        <message name="IDS_GET_PROFILE_ERROR_APPLESCRIPT_MAC" desc="Error dialog title to be displayed when profile fails to load.  Mac-only.">
+        Could not get profile.
+        </message>
+        <message name="IDS_BOOKMARK_MODEL_LOAD_ERROR_APPLESCRIPT_MAC" desc="Error dialog title to be displayed when bookmark model fails to load.  Mac-only.">
+        Could not load bookmark model.
+        </message>
+        <message name="IDS_CREATE_BOOKMARK_FOLDER_ERROR_APPLESCRIPT_MAC" desc="Error dialog title to be displayed when bookmark folder cannot be created.  Mac-only.">
+        Could not create bookmark folder.
+        </message>
+        <message name="IDS_CREATE_BOOKMARK_ITEM_ERROR_APPLESCRIPT_MAC" desc="Error dialog title to be displayed when bookmark item cannot be created.  Mac-only.">
+                Could not create bookmark item.
+        </message>
+        <message name="IDS_INVALID_URL_APPLESCRIPT_MAC" desc="Error dialog title to be displayed when invalid URL is entered.  Mac-only.">
+                Invalid URL entered.
+        </message>
+        <message name="IDS_INITIATE_PRINTING_ERROR_APPLESCRIPT_MAC" desc="Error dialog title to be displayed when printing could not be initiated.  Mac-only.">
+                Could not initiate printing.
+        </message>
+        <message name="IDS_INVALID_SAVE_TYPE_ERROR_APPLESCRIPT_MAC" desc="Error dialog title to be displayed when wrong save type is entered.  Mac-only.">
+                Invalid save type entered.
+        </message>
+        <message name="IDS_INVALID_MODE_ERROR_APPLESCRIPT_MAC" desc="Error dialog title to be displayed when wrong save type is entered.  Mac-only.">
+                Invalid mode entered.
+        </message>
+        <message name="IDS_INVALID_TAB_INDEX_APPLESCRIPT_MAC" desc="Error dialog title to be displayed when invalid tab index is entered.  Mac-only.">
+                Invalid tab index entered.
+        </message>
+        <message name="IDS_SET_MODE_APPLESCRIPT_MAC" desc="Error dialog title to be displayed when mode is entered after window is created.  Mac-only.">
+                Cannot set mode after window is set.
+        </message>
+        <message name="IDS_WRONG_INDEX_ERROR_APPLESCRIPT_MAC" desc="Error dialog title to be displayed when ordered index is out of bounds.  Mac-only.">
+                Wrong index.
+        </message>
+      </if> <!-- is_macosx -->
+
+
+      <!-- Mac Menubar Menus -->
+      <if expr="is_macosx or is_ios">
+        <!-- Menubar Menu Titles -->
+        <!-- NOTE: Some of these exist in context menus with Title Case support, but we use different IDs in case we need slightly different strings in some language due to the different context. -->
+        <message name="IDS_FILE_MENU_MAC" desc="The menu title of the Mac file menu.">
+          File
+        </message>
+        <message name="IDS_EDIT_MENU_MAC" desc="The menu title of the Mac edit menu.">
+          Edit
+        </message>
+        <message name="IDS_VIEW_MENU_MAC" desc="The menu title of the Mac view menu.">
+          View
+        </message>
+        <message name="IDS_HISTORY_MENU_MAC" desc="The menu title of the Mac history menu.">
+          History
+        </message>
+        <message name="IDS_WINDOW_MENU_MAC" desc="The menu title of the Mac window menu.">
+          Window
+        </message>
+        <message name="IDS_HELP_MENU_MAC" desc="The menu title of the Mac help menu.">
+          Help
+        </message>
+        <!-- App menu -->
+        <message name="IDS_ABOUT_MAC" desc="The Mac menu item to open the about box.">
+          About <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>
+        </message>
+        <message name="IDS_SERVICES_MAC" desc="The Mac menu item for the OS X services submenu (OS fills it in) in the app menu.">
+          Services
+        </message>
+        <message name="IDS_HIDE_APP_MAC" desc="The Mac menu item to hide all browser windows in the app menu.">
+          Hide <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>
+        </message>
+        <message name="IDS_HIDE_OTHERS_MAC" desc="The Mac menu item to hide other applications' windows in the app menu.">
+          Hide Others
+        </message>
+        <message name="IDS_SHOW_ALL_MAC" desc="The Mac menu item to show all browser windows in the app menu.">
+          Show All
+        </message>
+        <message name="IDS_EXIT_MAC" desc="The Mac menu item to quit the browser in the app menu.">
+          Quit <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>
+        </message>
+        <!-- File menu -->
+        <message name="IDS_NEW_MAC" desc="The Mac menu item for creating a new file in the file menu.">
+          New
+        </message>
+        <message name="IDS_NEW_TAB_MAC" desc="The Mac menu item for opening a new tab in the file menu.">
+          New Tab
+        </message>
+        <message name="IDS_NEW_WINDOW_MAC" desc="The Mac menu item for opening a new window in the file menu.">
+          New Window
+        </message>
+        <message name="IDS_NEW_INCOGNITO_WINDOW_MAC" desc="The Mac menu item for opening a new incognito window in the file menu.">
+          New Incognito Window
+        </message>
+        <message name="IDS_BACKGROUND_APPS_MAC" desc="The Mac submenu for opening Background Apps.">
+          Background Apps
+        </message>
+        <message name="IDS_REOPEN_CLOSED_TABS_MAC" desc="The Mac menu item reopen recently closed tabs in the file menu.">
+          Reopen Closed Tab
+        </message>
+        <message name="IDS_OPEN_FILE_MAC" desc="The Mac menu item to open a file in the file menu.">
+          Open File...
+        </message>
+        <message name="IDS_OPEN_LOCATION_MAC" desc="The Mac menu item to open a location in the file menu (puts cursor in the url bar).">
+          Open Location...
+        </message>
+        <message name="IDS_CLOSE_WINDOW_MAC" desc="The Mac menu item to close a window in the file menu.">
+          Close Window
+        </message>
+        <message name="IDS_CLOSE_TAB_MAC" desc="The Mac menu item to close a browser tab in the file menu.">
+          Close Tab
+        </message>
+        <message name="IDS_SAVE_PAGE_MAC" desc="The Mac menu item to save a page in the file menu.">
+          Save Page As...
+        </message>
+        <message name="IDS_EMAIL_PAGE_LOCATION_MAC" desc="The Mac menu item to email the page location in the file menu.">
+          Email Page Location
+        </message>
+        <message name="IDS_PRINT_USING_SYSTEM_DIALOG_MAC" desc="The Mac menu item to print using system dialog in the file menu">
+          Print Using System Dialog...
+        </message>
+        <!-- Edit menu -->
+        <message name="IDS_EDIT_UNDO_MAC" desc="The Mac menu item undo in the edit menu.">
+          Undo
+        </message>
+        <message name="IDS_EDIT_REDO_MAC" desc="The Mac menu item redo in the edit menu.">
+          Redo
+        </message>
+        <message name="IDS_CUT_MAC" desc="The Mac menu item for cut in the edit menu.">
+          Cut
+        </message>
+        <message name="IDS_COPY_MAC" desc="The Mac menu item for copy in the edit menu.">
+          Copy
+        </message>
+        <message name="IDS_PASTE_MAC" desc="The Mac menu item for paste in the edit menu.">
+          Paste
+        </message>
+        <message name="IDS_PASTE_MATCH_STYLE_MAC" desc="The Mac menu item for paste and match style in the edit menu.">
+          Paste and Match Style
+        </message>
+        <message name="IDS_EDIT_DELETE_MAC" desc="The Mac menu item delete in the edit menu.">
+          Delete
+        </message>
+        <message name="IDS_EDIT_SELECT_ALL_MAC" desc="The Mac menu item select all in the edit menu.">
+          Select All
+        </message>
+        <message name="IDS_SHOW_URL_MAC" desc="The Mac menu item for Show URL in the omnibox context menu, when the omnibox is showing search terms instead of the underlying search URL.">
+          Show URL
+        </message>
+        <!-- Edit::Find submenu -->
+        <message name="IDS_EDIT_FIND_SUBMENU_MAC" desc="The Mac menu item for the find submenu in the edit menu.">
+          Find
+        </message>
+        <message name="IDS_EDIT_SEARCH_WEB_MAC" desc="The Mac menu item for search the web (using, e.g., Google or Yahoo! search) in the edit menu.">
+          Search the Web...
+        </message>
+        <message name="IDS_EDIT_FIND_MAC" desc="The Mac menu item for find in the edit menu.">
+          Find...
+        </message>
+        <message name="IDS_EDIT_FIND_NEXT_MAC" desc="The Mac menu item for find next in the edit menu.">
+          Find Next
+        </message>
+        <message name="IDS_EDIT_FIND_PREVIOUS_MAC" desc="The Mac menu item for find previous in the edit menu.">
+          Find Previous
+        </message>
+        <message name="IDS_EDIT_USE_SELECTION_MAC" desc="The Mac menu item for use selection for find in the edit menu.">
+          Use Selection for Find
+        </message>
+        <message name="IDS_EDIT_JUMP_TO_SELECTION_MAC" desc="The Mac menu item for jump to selection in the edit menu.">
+          Jump to Selection
+        </message>
+        <!-- Edit::Spelling and Grammar submenu -->
+        <message name="IDS_EDIT_SPELLING_GRAMMAR_MAC" desc="The Mac menu item for spelling and grammar submenu in the edit menu.">
+          Spelling and Grammar
+        </message>
+        <message name="IDS_EDIT_SHOW_SPELLING_GRAMMAR_MAC" desc="The Mac menu item for show spelling and grammar in the edit menu.">
+          Show Spelling and Grammar
+        </message>
+        <message name="IDS_EDIT_CHECK_DOCUMENT_MAC" desc="The Mac menu item for check document in the edit menu.">
+          Check Document Now
+        </message>
+        <message name="IDS_EDIT_CHECK_SPELLING_TYPING_MAC" desc="The Mac menu item for check spelling while typing in the edit menu.">
+          Check Spelling While Typing
+        </message>
+        <message name="IDS_EDIT_CHECK_GRAMMAR_MAC" desc="The Mac menu item for check grammar with spelling in the edit menu.">
+          Check Grammar With Spelling
+        </message>
+        <!-- Edit::Speech submenu -->
+        <message name="IDS_SPEECH_MAC" desc="The Mac menu item for the 'Speech' submenu in the edit and context menu. To translate, launch /Applications/TextEdit.app in an appropriately localized version of OS X, open the Edit menu and use the translation from there.">
+          Speech
+        </message>
+        <message name="IDS_SPEECH_START_SPEAKING_MAC" desc="The Mac menu item for the 'Start Speaking' item from the 'Speech' submenu in edit and context menu. To translate, launch /Applications/TextEdit.app in an appropriately localized version of OS X, open the Edit menu and use the translation from there.">
+          Start Speaking
+        </message>
+        <message name="IDS_SPEECH_STOP_SPEAKING_MAC" desc="The Mac menu item for the 'Stop Speaking' item from the 'Speech' submenu in edit and context menu. To translate, launch /Applications/TextEdit.app in an appropriately localized version of OS X, open the Edit menu and use the translation from there.">
+          Stop Speaking
+        </message>
+        <!-- View menu -->
+        <message name="IDS_BOOKMARK_BAR_ALWAYS_SHOW_MAC" desc="The Mac menu item for having bookmark bar always visible in the view menu.">
+          Always Show Bookmarks Bar
+        </message>
+        <message name="IDS_STOP_MENU_MAC" desc="The Mac menu item stop in the view menu.">
+          Stop
+        </message>
+        <message name="IDS_RELOAD_MENU_MAC" desc="The Mac menu item to reload the current page in the view menu.">
+          Reload This Page
+        </message>
+        <message name="IDS_RELOAD_IGNORING_CACHE_MENU_MAC" desc="The Mac menu item to force reload the current page (ignoring cache) in the view menu.">
+          Force Reload This Page
+        </message>
+        <message name="IDS_ENTER_FULLSCREEN_MAC" desc="The Mac menu item to go into fullscreen mode in the view menu and also in the app menu.">
+          Enter Full Screen
+        </message>
+        <message name="IDS_EXIT_FULLSCREEN_MAC" desc="The Mac menu item to leave fullscreen mode in the view menu and also in the app menu.">
+          Exit Full Screen
+        </message>
+        <message name="IDS_ENTER_PRESENTATION_MAC" desc="The Mac menu item to go into presentation mode in the view menu.">
+          Enter Presentation Mode
+        </message>
+        <message name="IDS_EXIT_PRESENTATION_MAC" desc="The Mac menu item to leave presentation mode in the view menu.">
+          Exit Presentation Mode
+        </message>
+        <message name="IDS_TEXT_BIGGER_MAC" desc="The Mac menu item to zoom in on the page in the view menu.">
+          Zoom In
+        </message>
+        <message name="IDS_TEXT_DEFAULT_MAC" desc="The Mac menu item to make the page actual size in the view menu.">
+          Actual Size
+        </message>
+        <message name="IDS_TEXT_SMALLER_MAC" desc="The Mac menu item to zoom out on the in the view menu.">
+          Zoom Out
+        </message>
+        <message name="IDS_DEVELOPER_MENU_MAC" desc="The Mac menu item for the developer submenu in the view menu.">
+          Developer
+        </message>
+        <!-- View->Developer menu -->
+        <message name="IDS_VIEW_SOURCE_MAC" desc="The Mac menu item for view page source in the developer submenu of the view menu.">
+          View Source
+        </message>
+        <message name="IDS_DEV_TOOLS_MAC" desc="The Mac menu item for the developer tools in the developer submenu of the view menu.">
+          Developer Tools
+        </message>
+        <message name="IDS_DEV_TOOLS_CONSOLE_MAC" desc="The Mac menu item for the JavaScript console in the developer submenu of the view menu.">
+          JavaScript Console
+        </message>
+        <message name="IDS_TASK_MANAGER_MAC" desc="The Mac menu item for task manager in the developer submenu of the view menu.">
+          Task Manager
+        </message>
+        <!-- History menu -->
+        <message name="IDS_HISTORY_HOME_MAC" desc="The Mac menu item for home in the history menu.">
+          Home
+        </message>
+        <message name="IDS_HISTORY_BACK_MAC" desc="The Mac menu item for back in the history menu.">
+          Back
+        </message>
+        <message name="IDS_HISTORY_FORWARD_MAC" desc="The Mac menu item for forward in the history menu.">
+          Forward
+        </message>
+        <message name="IDS_HISTORY_VISITED_MAC" desc="The Mac menu item for the header of visited items in the history menu.">
+          Recently Visited
+        </message>
+        <message name="IDS_HISTORY_CLOSED_MAC" desc="The Mac menu item for the header of recently closed items in the history menu.">
+          Recently Closed
+        </message>
+        <message name="IDS_HISTORY_CLOSED_RESTORE_WINDOW_MAC" desc="The Mac menu item for restoring all the tabs of a recently closed window.">
+          Restore All Tabs
+        </message>
+        <!-- Bookmarks menu -->
+        <message name="IDS_BOOKMARK_ALL_TABS_MAC" desc="The Mac menu item for bookmarking all tabs in the current window.">
+          Bookmark All Tabs...
+        </message>
+        <!-- Window menu -->
+        <message name="IDS_MINIMIZE_WINDOW_MAC"
+                 desc="The Mac menu item for minimize the window menu."
+                 meaning="Mac Menubar: The Mac menu item for minimize the window menu.">
+          Minimize
+        </message>
+        <message name="IDS_ZOOM_WINDOW_MAC"
+                 desc="The Mac menu item for zoom (maximize) in the window menu."
+                 meaning="Mac Menubar: The Mac menu item for zoom (maximize) in the window menu.">
+          Zoom
+        </message>
+        <message name="IDS_NEXT_TAB_MAC" desc="The Mac menu item for next tab in the window menu.">
+          Select Next Tab
+        </message>
+        <message name="IDS_PREV_TAB_MAC" desc="The Mac menu item for previous tab in the window menu.">
+          Select Previous Tab
+        </message>
+        <message name="IDS_SHOW_DOWNLOADS_MAC" desc="The Mac menu item to show downloads in the window menu.">
+          Downloads
+        </message>
+        <message name="IDS_SHOW_EXTENSIONS_MAC" desc="The Mac menu item to show extensions in the window menu.">
+          Extensions
+        </message>
+        <message name="IDS_ALL_WINDOWS_FRONT_MAC" desc="The Mac menu item for bring all to front the window menu.">
+          Bring All to Front
+        </message>
+        <!-- Help menu -->
+        <message name="IDS_FEEDBACK_MAC" desc="The Mac menu item to report a bug in the Help menu.">
+          Report an Issue...
+        </message>
+        <message name="IDS_HELP_MAC" desc="The Mac menu item to show help in the Help menu.">
+          <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> Help
+        </message>
+      </if> <!-- is_macosx -->
+
+      <!-- Linux Global Menubar Menus -->
+      <if expr="is_posix and not is_macosx and not is_ios">
+        <!-- Unity and some other GNOME configurations now have a permanent,
+             Mac-like menu bar that lives outside the window at the top of the
+             screen. The following strings should be in Linux style, not Mac
+             style (i.e. have ampersand accelerators, be title cased, etc.)
+
+             In general, the Linux UI will try to reuse other menu strings
+             since they are otherwise appropriate, but we do need a few
+             additional ones with different formatting. -->
+
+        <!-- Menubar Menu Titles -->
+        <message name="IDS_FILE_MENU_LINUX" desc="The menu title of the Linux file menu.">
+          &amp;File
+        </message>
+        <message name="IDS_EDIT_MENU_LINUX" desc="The menu title of the Linux edit menu.">
+          &amp;Edit
+        </message>
+        <message name="IDS_VIEW_MENU_LINUX" desc="The menu title of the Linux view menu.">
+          &amp;View
+        </message>
+        <message name="IDS_HISTORY_MENU_LINUX" desc="The menu title of the Linux history menu.">
+          Hi&amp;story
+        </message>
+        <message name="IDS_TOOLS_MENU_LINUX" desc="The menu title of the Linux tools menu.">
+          &amp;Tools
+        </message>
+        <message name="IDS_HELP_MENU_LINUX" desc="The menu title of the Linux help menu.">
+          &amp;Help
+        </message>
+
+        <!-- File menu items that we can't reuse. -->
+        <message name="IDS_REOPEN_CLOSED_TABS_LINUX" desc="The Linux menu item reopen recently closed tabs in the file menu.">
+          Reopen Closed Tab
+        </message>
+        <message name="IDS_OPEN_FILE_LINUX" desc="The Linux menu item to open a file in the file menu.">
+          Open &amp;File...
+        </message>
+        <message name="IDS_OPEN_LOCATION_LINUX" desc="The Linux menu item to open a location in the file menu (puts cursor in the url bar).">
+          Open &amp;Location...
+        </message>
+        <message name="IDS_CLOSE_WINDOW_LINUX" desc="The Linux menu item to close a window in the file menu.">
+          Close Win&amp;dow
+        </message>
+        <message name="IDS_CLOSE_TAB_LINUX" desc="The Linux menu item to close a browser tab in the file menu.">
+          &amp;Close Tab
+        </message>
+
+        <!-- View menu items that we can't reuse. -->
+        <message name="IDS_STOP_MENU_LINUX" desc="The Linux menu item stop in the view menu.">
+          &amp;Stop
+        </message>
+        <message name="IDS_RELOAD_MENU_LINUX" desc="The Linux menu item to reload the current page in the view menu.">
+          &amp;Reload This Page
+        </message>
+        <message name="IDS_TEXT_DEFAULT_LINUX" desc="The Linux menu item to make the page actual size in the view menu.">
+          A&amp;ctual Size
+        </message>
+        <message name="IDS_TEXT_BIGGER_LINUX" desc="The Linux menu item to zoom in on the page in the view menu.">
+          Zoom &amp;In
+        </message>
+        <message name="IDS_TEXT_SMALLER_LINUX" desc="The Linux menu item to zoom out on the in the view menu.">
+          Zoom &amp;Out
+        </message>
+
+        <!-- History menu -->
+        <message name="IDS_HISTORY_HOME_LINUX" desc="The Linux menu item for home in the history menu.">
+          Home
+        </message>
+        <message name="IDS_HISTORY_BACK_LINUX" desc="The Linux menu item for back in the history menu.">
+          &amp;Back
+        </message>
+        <message name="IDS_HISTORY_FORWARD_LINUX" desc="The Linux menu item for forward in the history menu.">
+          &amp;Forward
+        </message>
+        <message name="IDS_HISTORY_VISITED_LINUX" desc="The Linux menu item for the header of most visited items in the history menu.">
+          Most Visited
+        </message>
+        <message name="IDS_HISTORY_CLOSED_LINUX" desc="The Linux menu item for the header of recently closed items in the history menu.">
+          Recently Closed
+        </message>
+        <message name="IDS_HISTORY_CLOSED_RESTORE_WINDOW_LINUX" desc="The Linux menu item for restoring all the tabs of a recently closed window.">
+          Restore All Tabs
+        </message>
+
+      </if>
+
+    <!-- Geolocation messages -->
+    <if expr="not is_android">
+      <message name="IDS_GEOLOCATION_INFOBAR_QUESTION" desc="Question asked on the info bar whenever URL wants to access the user's physical location">
+        <ph name="URL">
+          $1<ex>maps.google.com</ex>
+        </ph> wants to use your computer's location.
+      </message>
+    </if>
+    <if expr="is_android">
+      <message name="IDS_GEOLOCATION_INFOBAR_QUESTION" desc="Mobile: Question asked on the info bar whenever URL wants to access the user's physical location">
+        <ph name="URL">
+          $1<ex>maps.google.com</ex>
+        </ph> wants to use your device's location.
+      </message>
+    </if>
+    <message name="IDS_GEOLOCATION_INFOBAR_PERMISSION_FRAGMENT" desc="Permission fragment used in the permission bubble, after 'This site would like to:' asking for permission to access the user's physical location.">
+      Location
+    </message>
+    <message name="IDS_GEOLOCATION_ALLOW_BUTTON" desc="A button in geolocation infobar for allowing access to geolocation for a given domain.">
+      Allow
+    </message>
+    <message name="IDS_GEOLOCATION_DENY_BUTTON" desc="A button in geolocation infobar for denying access to geolocation for a given domain.">
+      Deny
+    </message>
+    <message name="IDS_GEOLOCATION_BUBBLE_SECTION_ALLOWED" desc="Heading for a section in the geolocation bubble listing all sites which are currently tracking the user's location.">
+      This page contains elements from the following sites that are tracking your location:
+    </message>
+    <message name="IDS_GEOLOCATION_BUBBLE_SECTION_DENIED" desc="Heading for a section in the geolocation bubble listing all sites which are currently blocked from accessing the user's location.">
+      The following sites have been blocked from tracking your location on this page:
+    </message>
+    <message name="IDS_GEOLOCATION_BUBBLE_REQUIRE_RELOAD_TO_CLEAR" desc="Hint text for the geolocation bubble informing user they must reload the page for the Clear settings command to take effect.">
+      Settings will be cleared on next reload.
+    </message>
+    <message name="IDS_GEOLOCATION_BUBBLE_CLEAR_LINK" desc="Link on the geolocation bubble that resets the list of allowed and blocked sites.">
+      Clear these settings for future visits
+    </message>
+    <message name="IDS_GEOLOCATION_BUBBLE_MANAGE_LINK" desc="Link on the geolocation bubble that opens up the Content Settings management dialog.">
+      Manage location settings...
+    </message>
+    <message name="IDS_GEOLOCATION_ALLOWED_TOOLTIP" desc="Location bar icon tooltip text when a page is allowed to use geolocation.">
+      This page is tracking your location.
+    </message>
+    <message name="IDS_GEOLOCATION_BLOCKED_TOOLTIP" desc="Location bar icon tooltip text when a page is blocked from using geolocation.">
+      This page has been blocked from tracking your location.
+    </message>
+
+    <!-- Web MIDI messages -->
+    <message name="IDS_MIDI_SYSEX_TAB_LABEL" desc="Label for MIDI system exclusive message on Content Settings dialog">
+      MIDI full control
+    </message>
+    <message name="IDS_MIDI_SYSEX_ALLOW_RADIO" desc="A radio button in Content Settings dialog to allow a site to access MIDI devices with system exclusive messages.">
+      Allow all sites to use system exclusive messages to access MIDI devices
+    </message>
+    <message name="IDS_MIDI_SYSEX_BLOCK_RADIO" desc="A radio button in Content Settings dialog to deny a site to access MIDI devices with system exclusive messages.">
+      Do not allow any sites to use system exclusive messages to access MIDI devices
+    </message>
+    <message name="IDS_MIDI_SYSEX_ASK_RADIO" desc="A radio button in Content Settings dialog to allow a site to query the permision to access MIDI devices with system exclusive messages.">
+      Ask me when a site wants to use system exclusive messages to access MIDI devices (recommended)
+    </message>
+    <message name="IDS_MIDI_SYSEX_INFOBAR_QUESTION" desc="Question asked on the info bar whenever URL wants to access MIDI devices with system exclusive messages.">
+      <ph name="URL">
+        $1<ex>www.google.com</ex>
+      </ph> wants to get full control of your MIDI devices.
+    </message>
+    <message name="IDS_MIDI_SYSEX_PERMISSION_FRAGMENT" desc="Permission asked in the permission bubble when a URL wants to access MIDI devices with system exclusive messages, along with other permissions requests. Preceded by the prompt 'This site would like to:'">
+      MIDI (sound) devices
+    </message>
+    <message name="IDS_MIDI_SYSEX_ALLOW_BUTTON" desc="A button in MIDI access infobar for allowing full access to MIDI devices for a given domain.">
+      Allow
+    </message>
+    <message name="IDS_MIDI_SYSEX_DENY_BUTTON" desc="A button in MIDI access infobar for denying full access to MIDI devices for a given domain.">
+      Deny
+    </message>
+    <message name="IDS_MIDI_SYSEX_ALLOWED_TOOLTIP" desc="Location bar icon tooltip text when a page is allowed to use MIDI system exclusive messages.">
+      This page has full control of MIDI devices.
+    </message>
+    <message name="IDS_MIDI_SYSEX_BLOCKED_TOOLTIP" desc="Location bar icon tooltip text when a page is blocked from using MIDI system exclusive messages.">
+      This page has been blocked from having full control of MIDI devices.
+    </message>
+    <message name="IDS_MIDI_SYSEX_BUBBLE_ALLOWED" desc="Title of the MIDI bubble where system exclusive messages are allowed.">
+      This site has full control of MIDI devices.
+    </message>
+    <message name="IDS_MIDI_SYSEX_BUBBLE_DENIED" desc="Title of the MIDI bubble where system exclusive messages are blocked.">
+      This site has been blocked from having full control of MIDI devices.
+    </message>
+    <message name="IDS_MIDI_SYSEX_BUBBLE_REQUIRE_RELOAD_TO_CLEAR" desc="Hint text for the MIDI bubble informing user they must reload the page for the Clear settings command to take effect.">
+      Settings will be cleared on next reload.
+    </message>
+    <message name="IDS_MIDI_SYSEX_BUBBLE_CLEAR_LINK" desc="Link on the MIDI bubble that resets the list of allowed and blocked sites.">
+      Clear these settings for future visits
+    </message>
+    <message name="IDS_MIDI_SYSEX_BUBBLE_MANAGE_LINK" desc="Link on the MIDI bubble that opens up the Content Settings management dialog.">
+      Manage MIDI settings...
+    </message>
+
+    <!-- Protocol Handler -->
+    <message name="IDS_REGISTER_PROTOCOL_HANDLER_TOOLTIP" desc="Location bar icon tooltip text when a page wants to use registerProtocolHandler.">
+      This page wants to install a service handler.
+    </message>
+
+    <!-- Media Stream -->
+    <message name="IDS_MEDIASTREAM_BUBBLE_MANAGE_LINK" desc="Link on the media (camera and microphone) bubble that opens up the Content Settings management dialog for media settings.">
+      Manage media settings...
+    </message>
+    <message name="IDS_MICROPHONE_CAMERA_ALLOWED" desc="Status text that is used as location bar icon tooltip text and as media settings bubble status text when a page is allowed to use the camera and microphone.">
+      This page is accessing your camera and microphone.
+    </message>
+    <message name="IDS_MICROPHONE_CAMERA_BLOCKED" desc="Status text that is used as location bar icon tooltip text and as media settings bubble status text when a page is blocked from using the camera and microphone.">
+      This page has been blocked from accessing your camera and microphone.
+    </message>
+    <message name="IDS_MICROPHONE_ACCESSED" desc="Microphone usage status text that is used as tooltip text for the location bar icon and as status text of the media settings bubble when a page is using the microphone (but not the camera).">
+      This page is accessing your microphone.
+    </message>
+    <message name="IDS_CAMERA_ACCESSED" desc="Camera usage status text that is used as tooltip text for the location bar icon and as status text of the media settings bubble when a page is using the camera (but not the microphone).">
+      This page is accessing your camera.
+    </message>
+    <message name="IDS_MICROPHONE_BLOCKED" desc="Microphone usage status text that is used as tooltip text for the location bar icon and as status text of the media settings bubble when a page is blocked from using the microphone.">
+      This page has been blocked from accessing your microphone.
+    </message>
+    <message name="IDS_CAMERA_BLOCKED" desc="Camera usage status text that is used as tooltip text for the location bar icon and as status text of the media settings bubble when a page is blocked from using the camera.">
+      This page has been blocked from accessing your camera.
+    </message>
+    <message name="IDS_MEDIASTREAM_SETTING_CHANGED_INFOBAR_MESSAGE" desc="Infobar message for reloading when media (camera, michrophone) settings was changed by user.">
+      New camera and microphone settings will take effect after reloading the page.
+    </message>
+
+    <!-- Proteced media identifier permission infobar -->
+    <if expr="is_android">
+      <message name="IDS_PROTECTED_MEDIA_IDENTIFIER_INFOBAR_QUESTION" desc="Question asked on the infobar whenever URL wants to access protected media identifier. It shows the origin of the URL.">
+        <ph name="URL">$1<ex>https://www.youtube.com</ex></ph> needs to uniquely identify your device to play premium content.
+      </message>
+      <message name="IDS_PROTECTED_MEDIA_IDENTIFIER_ALLOW_BUTTON" desc="A button in the protected media identifier infobar for allowing access to a protected media identifier for a given origin.">
+        Allow
+      </message>
+      <message name="IDS_PROTECTED_MEDIA_IDENTIFIER_DENY_BUTTON" desc="A button in the protected media identifier infobar for denying access to a protected media identifier for a given origin.">
+        Deny
+      </message>
+      <message name="IDS_PROTECTED_MEDIA_IDENTIFIER_SETTINGS_LINK" desc="Link on in the protected media identifier infobar to open up its settings page.">
+        Settings
+      </message>
+    </if>
+
+    <message name="IDS_SAVE_PASSWORD" desc="The status text that is used as tooltip text for the save password icon and as status text of the save password bubble when a password can be saved.">
+      Would you like to save this password?
+    </message>
+    <message name="IDS_MANAGE_PASSWORDS_CONFIRM_GENERATED_TITLE" desc="The title text that is used in the manage passwords bubble when the user has generated a password.">
+      Generated password saved
+    </message>
+    <message name="IDS_MANAGE_PASSWORDS_CONFIRM_GENERATED_TEXT" desc="The text that is used in the manage passwords bubble when a generated password is saved. Text inside |bars| is link text.">
+      You can access it and all your |Google saved passwords| securely from any browser.
+    </message>
+    <message name="IDS_MANAGE_PASSWORDS_TITLE" desc="The title text that is used in the manage passwords bubble when a password is autofilled or after a user has stored a password.">
+      Saved passwords for this site:
+    </message>
+    <message name="IDS_MANAGE_PASSWORDS_BLACKLISTED" desc="The text that is used in the manage passwords bubble when the current site is blacklisted.">
+      You chose not to allow passwords to be saved on this site.
+    </message>
+    <message name="IDS_MANAGE_PASSWORDS_BLACKLISTED_TITLE" desc="The title text that is used in the manage passwords bubble when the current site is blacklisted.">
+      Passwords won't be saved
+    </message>
+    <message name="IDS_MANAGE_PASSWORDS_BLACKLIST_CONFIRMATION_TITLE" desc="The title text that is used in the manage passwords bubble when confirming blacklisting a site.">
+      Delete existing saved passwords
+    </message>
+    <message name="IDS_MANAGE_PASSWORDS_BLACKLIST_CONFIRMATION_TEXT" desc="The confirmation text that is used in the manage passwords bubble when confirming blacklisting a site.">
+      Choosing to never save passwords will delete all passwords currently saved for this site.
+    </message>
+    <message name="IDS_MANAGE_PASSWORDS_BLACKLIST_CONFIRMATION_BUTTON" desc="The confirmation button that is used in the manage passwords bubble when confirming blacklisting a site.">
+      Delete saved passwords
+    </message>
+
+    <message name="IDS_MANAGE_PASSWORDS_NO_PASSWORDS" desc="The text that is used in the manage passwords bubble when all passwords have been deleted.">
+      No passwords saved.
+    </message>
+    <message name="IDS_MANAGE_PASSWORDS_DELETED" desc="The text that is used in the manage passwords bubble when a password is de.">
+    Password deleted
+    </message>
+    <message name="IDS_MANAGE_PASSWORDS_UNDO" desc="The text that is used in the manage passwords bubble when a password is de.">
+    Undo
+    </message>
+
+    <message name="IDS_ALLOW_AUTOFILL_SYNC_CREDENTIAL" desc="The text for the choice to allow autofilling in about:flags">
+      Allow
+    </message>
+    <message name="IDS_DISALLOW_AUTOFILL_SYNC_CREDENTIAL" desc="The text for the choice to not allow autofilling in about:flags">
+      Disallow
+    </message>
+    <message name="IDS_DISALLOW_AUTOFILL_SYNC_CREDENTIAL_FOR_REAUTH" desc="The text for the choice to not allow autofilling for reauth pages in about:flags">
+      Disallow for reauth
+    </message>
+
+    <!-- Update Recommended dialog -->
+    <if expr="not chromeos">
+      <message name="IDS_UPDATE_RECOMMENDED" desc="The main text of the Update Recommended dialog.">
+        <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> is out of date because it hasn't been relaunched in a while. An update is available and will be applied as soon as you relaunch.
+      </message>
+      <message name="IDS_RELAUNCH_AND_UPDATE" desc="The button label for relaunching and updating Chrome.">
+        Relaunch
+      </message>
+    </if>
+    <if expr="chromeos">
+      <message name="IDS_UPDATE_RECOMMENDED" desc="The main text of the Update Recommended dialog.">
+        <ph name="PRODUCT_NAME">$1<ex>Google Chrome OS</ex></ph> needs to be restarted to apply the update.
+      </message>
+      <message name="IDS_RELAUNCH_AND_UPDATE" desc="The button label for restarting and updating Chrome OS.">
+        Restart
+      </message>
+    </if>
+    <if expr="not use_titlecase">
+      <message name="IDS_NOT_NOW" desc="The button label for delaying the relaunch and updating Chrome.">
+        Not now
+      </message>
+    </if>
+    <if expr="use_titlecase">
+      <message name="IDS_NOT_NOW" desc="In Tile Case: The button label for delaying the relaunch and updating Chrome.">
+        Not Now
+      </message>
+    </if>
+
+    <!-- Extra Mac UI Strings -->
+    <if expr="is_macosx">
+      <message name="IDS_PLEASE_RELAUNCH_BROWSER" desc="Title of the alert when Chrome needs to be relaunched for a change/update to take effect.">
+        Please Relaunch <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>
+      </message>
+      <message name="IDS_SAVE_PAGE_FILE_FORMAT_PROMPT_MAC" desc="The title of the File Format label for saving a page.">
+        Format:
+      </message>
+
+      <!-- Install from disk image -->
+      <message name="IDS_INSTALL_FROM_DMG_TITLE" desc="Title of the dialog asking whether to install from the disk image.  Mac-only.">
+        Do you want to install <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>?
+      </message>
+      <message name="IDS_INSTALL_FROM_DMG_PROMPT" desc="Prompt asking whether to install from the disk image.  Mac-only.">
+        You're running <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> from its disk image. Installing it on your computer lets you run it without the disk image, and ensures it will be kept up to date.
+      </message>
+      <message name="IDS_INSTALL_FROM_DMG_YES" desc="Button to approve installation from the disk image.  Mac-only.">
+        Install
+      </message>
+      <message name="IDS_INSTALL_FROM_DMG_NO" desc="Button to cancel installation from the disk image.  Mac-only.">
+        Don't Install
+      </message>
+      <message name="IDS_INSTALL_FROM_DMG_AUTHENTICATION_PROMPT" desc="The prompt to be displayed in the authentication dialog when installing from the disk image.  The system will add a sentence asking for an administrator's name and password.  Mac-only.">
+        <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> will be installed.
+      </message>
+      <message name="IDS_INSTALL_FROM_DMG_ERROR_TITLE" desc="Error dialog title to be displayed when installation from the disk image fails.  Mac-only.">
+        Installation failed.
+      </message>
+      <message name="IDS_INSTALL_FROM_DMG_ERROR" desc="Error dialog message to be displayed when installation from the disk image fails.  Mac-only.">
+        <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> couldn't complete installation, but will continue to run from its disk image.
+      </message>
+    </if>
+
+    <!-- File Selection Dialog Policy - Infobar -->
+    <if expr="is_android">
+      <message name="IDS_FILE_SELECTION_DIALOG_INFOBAR" desc="Mobile: Infobar message on disallowed file selection dialog.">
+        Access to local files on your device is disabled by your administrator.
+      </message>
+    </if>
+    <if expr="not is_android">
+      <message name="IDS_FILE_SELECTION_DIALOG_INFOBAR" desc="Infobar message on disallowed file selection dialog.">
+        Access to local files on your machine is disabled by your administrator.
+      </message>
+    </if>
+
+    <if expr="is_posix and not is_macosx and not is_ios">
+      <!-- Linux proxy configuration fallback help -->
+      <message name="IDS_ABOUT_LINUX_PROXY_CONFIG_TITLE" desc="Title of HTML page shown on systems where system proxy configuration is unsupported.">
+        Proxy Configuration Help
+      </message>
+      <message name="IDS_ABOUT_LINUX_PROXY_CONFIG_BODY" desc="HTML body of page shown on systems where system proxy configuration is unsupported.">
+        &lt;p&gt;When running <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph> under a supported desktop environment, the system proxy settings will be used.  However, either your system is not supported or there was a problem launching your system configuration.&lt;/p&gt;
+
+        &lt;p&gt;But you can still configure via the command line.  Please see &lt;code&gt;man <ph name="PRODUCT_BINARY_NAME">$2<ex>google-chrome</ex></ph>&lt;/code&gt; for more information on flags and environment variables.&lt;/p&gt;
+      </message>
+      <message name="IDS_ABOUT_SANDBOX_TITLE" desc="Title of HTML page which contains the status of the sandbox.">
+        Sandbox Status
+      </message>
+      <message name="IDS_ABOUT_SANDBOX_SUID_SANDBOX" desc="The name of a type of sandbox used by Chrome on UNIX like systems. The name 'SUID' stands for 'Set User ID', however it's a technical term and may be best left untranslated.">
+        SUID Sandbox
+      </message>
+      <message name="IDS_ABOUT_SANDBOX_PID_NAMESPACES" desc="This a technical term for an attribute of the SUID sandbox. PID stands for 'Process ID' but, as a technical term, may be best left untranslated. A namespace is another technical term which refers to set of names for objects which are disjoint from the members of all other namespaces.">
+        PID namespaces
+      </message>
+      <message name="IDS_ABOUT_SANDBOX_NET_NAMESPACES" desc="This a technical term for an attribute of the SUID sandbox. A namespace is a technical term which refers to set of names for objects which are disjoint from the members of all other namespaces.">
+        Network namespaces
+      </message>
+      <message name="IDS_ABOUT_SANDBOX_SECCOMP_BPF_SANDBOX" desc="The name of a type of sandbox used by Chrome on UNIX like systems. 'Seccomp-BPF' is a technical term which should be left untranslated.">
+        Seccomp-BPF sandbox
+      </message>
+      <message name="IDS_ABOUT_SANDBOX_YAMA_LSM" desc="The name of a Linux security module. It is a technical term that should be left untranslated.">
+        Yama LSM enforcing
+      </message>
+      <message name="IDS_ABOUT_SANDBOX_OK" desc="A message telling the user that their sandbox is sufficient.">
+        You are adequately sandboxed.
+      </message>
+      <message name="IDS_ABOUT_SANDBOX_BAD" desc="A message telling the user that their sandbox is insufficient.">
+        You are not adequately sandboxed!
+      </message>
+    </if>
+
+    <message name="IDS_IMAGE_FILES" desc="The description of the image file extensions in the select file dialog.">
+      Image Files
+    </message>
+    <message name="IDS_AUDIO_FILES" desc="The description of the audio file extensions in the select file dialog.">
+      Audio Files
+    </message>
+    <message name="IDS_VIDEO_FILES" desc="The description of the video file extensions in the select file dialog.">
+      Video Files
+    </message>
+    <message name="IDS_CUSTOM_FILES" desc="The description of the custom file extensions in the select file dialog.">
+      Custom Files
+    </message>
+
+    <!-- Fullscreen Strings -->
+    <message name="IDS_FULLSCREEN_USER_ENTERED_FULLSCREEN" desc="Message for the user telling them that they have entered fullscreen mode.">
+      You have gone full screen.
+    </message>
+    <message name="IDS_FULLSCREEN_EXTENSION_TRIGGERED_FULLSCREEN" desc="Message for the user telling them that an extension triggered fullscreen mode.">
+      "<ph name="EXTENSION_NAME">$1<ex>MyExtension</ex></ph>" triggered full screen.
+    </message>
+    <message name="IDS_FULLSCREEN_UNKNOWN_EXTENSION_TRIGGERED_FULLSCREEN" desc="Message for the user telling them that an extension whose name is unknown triggered fullscreen mode.">
+      An extension triggered full screen.
+    </message>
+    <message name="IDS_FULLSCREEN_SITE_ENTERED_FULLSCREEN" desc="Text displayed in the bubble when a page has gone fullscreen. (With a domain URL to display)">
+      <ph name="FULLSCREEN_ORIGIN">$1<ex>google.com</ex></ph> is now full screen.
+    </message>
+    <message name="IDS_FULLSCREEN_ENTERED_FULLSCREEN" desc="Text displayed in the bubble when a page has gone fullscreen. (No domain to be shown, e.g. from filesystem page)">
+      This page is now full screen.
+    </message>
+    <message name="IDS_FULLSCREEN_SITE_REQUEST_FULLSCREEN_MOUSELOCK" desc="Text displayed in the bubble that requests permission for staying in fullscreen mode and locking the mouse. (With a domain URL to display)">
+      <ph name="FULLSCREEN_ORIGIN">$1<ex>google.com</ex></ph> is now full screen and wants to disable your mouse cursor.
+    </message>
+    <message name="IDS_FULLSCREEN_REQUEST_FULLSCREEN_MOUSELOCK" desc="Text displayed in the bubble that requests permission for staying in fullscreen mode and locking the mouse. (No domain to be shown, e.g. from filesystem page)">
+      This page is now full screen and wants to disable your mouse cursor.
+    </message>
+    <message name="IDS_FULLSCREEN_SITE_REQUEST_MOUSELOCK" desc="Text displayed in the bubble that requests permission for locking the mouse. (With a domain URL to display)">
+      <ph name="FULLSCREEN_ORIGIN">$1<ex>google.com</ex></ph> wants to disable your mouse cursor.
+    </message>
+    <message name="IDS_FULLSCREEN_REQUEST_MOUSELOCK" desc="Text displayed in the bubble that requests permission for locking the mouse. (No domain to be shown, e.g. from filesystem page)">
+      This page wants to disable your mouse cursor.
+    </message>
+    <message name="IDS_FULLSCREEN_SITE_ENTERED_FULLSCREEN_MOUSELOCK" desc="Text displayed in the bubble to inform the user that the page has gone fullscreen and locked the mouse. (With a domain URL to display)">
+      <ph name="FULLSCREEN_ORIGIN">$1<ex>google.com</ex></ph> is now full screen and has disabled your mouse cursor.
+    </message>
+    <message name="IDS_FULLSCREEN_ENTERED_FULLSCREEN_MOUSELOCK" desc="Text displayed in the bubble to inform the user that the page has gone fullscreen and locked the mouse. (No domain to be shown, e.g. from filesystem page)">
+      This page is now full screen and has disabled your mouse cursor.
+    </message>
+    <message name="IDS_FULLSCREEN_SITE_ENTERED_MOUSELOCK" desc="Text displayed in the bubble to inform the user that the page has locked the mouse. (With a domain URL to display)">
+      <ph name="FULLSCREEN_ORIGIN">$1<ex>google.com</ex></ph> has disabled your mouse cursor.
+    </message>
+    <message name="IDS_FULLSCREEN_ENTERED_MOUSELOCK" desc="Text displayed in the bubble to inform the user that the page has locked the mouse. (No domain to be shown, e.g. from filesystem page)">
+      This page has disabled your mouse cursor.
+    </message>
+    <message name="IDS_FULLSCREEN_PRESS_ESC_TO_EXIT" desc="Text displayed in the bubble to tell users how to return to normal mode">
+      Press <ph name="ACCELERATOR">$1<ex>Esc</ex></ph> to exit.
+    </message>
+    <message name="IDS_FULLSCREEN_ALLOW" desc="Text in the bubble button that grants permission for a site to enter fullscreen and/or lock the mouse.">
+      Allow
+    </message>
+    <if expr="use_titlecase">
+      <message name="IDS_FULLSCREEN_EXIT_FULLSCREEN" desc="In Title Case: Text in the bubble button that forces a webpage out of fullscreen mode.">
+        Exit Full Screen
+      </message>
+    </if>
+    <if expr="not use_titlecase">
+      <message name="IDS_FULLSCREEN_EXIT_FULLSCREEN" desc="Text in the bubble button that forces a webpage out of fullscreen mode.">
+        Exit full screen
+      </message>
+    </if>
+    <message name="IDS_FULLSCREEN_EXIT" desc="Text in the bubble button that denies to lock the mouse and forces a webpage out of fullscreen mode.">
+      Exit
+    </message>
+    <message name="IDS_FULLSCREEN_DENY" desc="Text in the bubble button that denies to lock the mouse.">
+      Deny
+    </message>
+
+    <!-- Register Protocol Handler Strings -->
+    <message name="IDS_REGISTER_PROTOCOL_HANDLER_MAILTO_NAME" desc="A more user friendly way of describing mailto: links.">
+      email
+    </message>
+    <message name="IDS_REGISTER_PROTOCOL_HANDLER_WEBCAL_NAME" desc="A more user friendly way of describing webcal: links.">
+      web calendar
+    </message>
+    <message name="IDS_REGISTER_PROTOCOL_HANDLER_CONFIRM" desc="The message to display when asking a user to confirm the registration of a protocol handler.">
+      Allow <ph name="HANDLER_HOSTNAME">$1<ex>google.com</ex></ph> to open all <ph name="PROTOCOL">$2<ex>search</ex></ph> links?
+    </message>
+    <message name="IDS_REGISTER_PROTOCOL_HANDLER_CONFIRM_REPLACE" desc="The message to display when asking a user to confirm the registration of a protocol handler.">
+      Allow <ph name="HANDLER_HOSTNAME">$1<ex>google.com</ex></ph> to open all <ph name="PROTOCOL">$2<ex>search</ex></ph> links instead of <ph name="REPLACED_HANDLER_TITLE">$3<ex>Elgoog Search</ex></ph>?
+    </message>
+    <message name="IDS_REGISTER_PROTOCOL_HANDLER_CONFIRM_FRAGMENT" desc="The permission fragment to display when asking a user to confirm the registration of a protocol handler in a permission bubble. Follows a prompt 'This site would like to:'.">
+      <ph name="PROTOCOL">$3<ex>search</ex></ph> links
+    </message>
+    <message name="IDS_REGISTER_PROTOCOL_HANDLER_CONFIRM_REPLACE_FRAGMENT" desc="The permission fragment to display when asking a user to confirm the registration of a protocol handler. Follows a prompt 'This site would like to:'.">
+      <ph name="PROTOCOL">$3<ex>search</ex></ph> links instead of <ph name="REPLACED_HANDLER_TITLE">$4<ex>Elgoog Search</ex></ph>
+    </message>
+    <message name="IDS_REGISTER_PROTOCOL_HANDLER_ACCEPT" desc="Text to show for the accept button for the register protocol handler request infobar.">
+      Allow
+    </message>
+    <message name="IDS_REGISTER_PROTOCOL_HANDLER_DENY" desc="Text to show for the deny button for the register protocol handler request infobar.">
+      Deny
+    </message>
+    <message name="IDS_REGISTER_PROTOCOL_HANDLER_IGNORE" desc="Text to show for an ignore prompt for a register protocol handler registration request.">
+      Ignore
+    </message>
+
+    <!-- PDF reader related strings. Not used on Android -->
+    <if expr="not is_android">
+      <!-- PDF with unsupported feature bubble -->
+      <message name="IDS_PDF_BUBBLE_MESSAGE" desc="Message for the bubble when a user views a PDF with an unsupported feature">
+        Parts of this PDF document could not be displayed.
+      </message>
+      <message name="IDS_PDF_BUBBLE_OPEN_IN_READER_LINK" desc="Title of the link to open a PDF with an unsupported feature in Adobe Reader">
+        Open in Adobe Reader
+      </message>
+      <message name="IDS_PDF_BUBBLE_INSTALL_READER_LINK" desc="Title of the link to open a PDF with an unsupported feature in Adobe Reader">
+        Install Adobe Reader
+      </message>
+      <if expr="is_win">
+        <message name="IDS_PDF_BUBBLE_METRO_MODE_LINK" desc="Title of the link to restart Chrome on Windows 8 in metro mode when viewing a PDF with an unsupported feature.">
+          Relaunch Chrome on the desktop
+        </message>
+      </if>
+      <message name="IDS_PDF_INFOBAR_QUESTION_ALWAYS_USE_READER" desc="Question asked on the info bar when a user opens a PDF with Reader and we want to ask them if they always want to use it for viewing PDF files.">
+        Use Adobe Reader as your default PDF viewer?
+      </message>
+      <message name="IDS_PDF_INFOBAR_ALWAYS_USE_READER_BUTTON" desc="The label of the 'always' button on the infobar that asks the user if they want to set Adobe Reader as default.">
+        Always
+      </message>
+      <message name="IDS_PDF_PASSWORD_DIALOG_TITLE" desc="The title of the dialog requesting a password to open a protected PDF.">
+        Password required
+      </message>
+
+      <!-- Adobe Reader is out of date Blocking Page -->
+      <message name="IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_TITLE" desc="The title of the Adobe Reader out of date blocking page.">
+        Adobe Reader Out Of Date
+      </message>
+      <message name="IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_BODY" desc="The body of the Adobe Reader out of date blocking page.">
+        Adobe Reader is out of date and may be insecure.
+      </message>
+      <message name="IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_UPDATE" desc="The name of the radio button option to go to the Adobe Reader installer website.">
+        Update Adobe Reader now
+      </message>
+      <message name="IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_PROCEED" desc="The name of the radio button to proceed to open the PDF with the out of date Adobe Reader.">
+        Proceed without updating Adobe Reader (not recommended)
+      </message>
+      <message name="IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_OK" desc="OK button text of the Adobe Reader out of date blocking page.">
+        OK
+      </message>
+      <message name="IDS_READER_OUT_OF_DATE_BLOCKING_PAGE_CANCEL" desc="Cancel button text of the Adobe Reader out of date blocking page.">
+        Cancel
+      </message>
+    </if>
+
+    <!-- Media Capture messages -->
+    <message name="IDS_MEDIA_CAPTURE_AUDIO_AND_VIDEO" desc="Question asked on the info bar whenever a web page requests access to the computer's microphone and camera.">
+      <ph name="HOST">$1<ex>html5rocks.com</ex></ph> wants to use your camera and microphone.
+    </message>
+    <message name="IDS_MEDIA_CAPTURE_AUDIO_ONLY" desc="Question asked on the info bar whenever a web page requests access to the computer's microphone.">
+      <ph name="HOST">$1<ex>html5rocks.com</ex></ph> wants to use your microphone.
+    </message>
+    <message name="IDS_MEDIA_CAPTURE_VIDEO_ONLY" desc="Question asked on the info bar whenever a web page requests access to the computer's camera.">
+      <ph name="HOST">$1<ex>html5rocks.com</ex></ph> wants to use your camera.
+    </message>
+    <message name="IDS_MEDIA_CAPTURE_AUDIO_AND_VIDEO_PERMISSION_FRAGMENT" desc="Permission fragment shown in the permissions bubble when a web page requests access to the computer's microphone and camera.">
+      Camera and Microphone
+    </message>
+    <message name="IDS_MEDIA_CAPTURE_AUDIO_ONLY_PERMISSION_FRAGMENT" desc="Permission fragment shown in the permissions bubble when a web page requests access to the computer's microphone.">
+      Microphone
+    </message>
+    <message name="IDS_MEDIA_CAPTURE_VIDEO_ONLY_PERMISSION_FRAGMENT" desc="Permission fragment shown in the permissions bubble when a web page requests access to the computer's camera.">
+      Camera
+    </message>
+    <message name="IDS_MEDIA_CAPTURE_ALLOW" desc="Label for a button that grants access to a web page, so they can use a camera and/or a microphone.">
+      Allow
+    </message>
+    <message name="IDS_MEDIA_CAPTURE_DENY" desc="Label for a button that denies access to a web page, so they can use a camera and/or a microphone.">
+      Deny
+    </message>
+
+    <!-- Quota messages -->
+    <if expr="is_android">
+      <message name="IDS_REQUEST_QUOTA_INFOBAR_QUESTION" desc="Mobile: For Android device. Question asked on the info bar whenever webapp requests new (larger) quota to persistently store data on the device (e.g. for persistent-type filesystem).">
+        <ph name="URL">
+          $1<ex>html5rocks.com</ex>
+        </ph> wants to permanently store data on your device.
+      </message>
+      <message name="IDS_REQUEST_LARGE_QUOTA_INFOBAR_QUESTION" desc="Mobile: For Android device. Question asked on the info bar whenever webapp requests new (larger) quota to persistently store large data on the user's device (e.g. for persistent-type filesystem).">
+        <ph name="URL">
+          $1<ex>html5rocks.com</ex>
+        </ph> wants to permanently store large data on your device.
+      </message>
+    </if>
+    <if expr="not is_android">
+      <message name="IDS_REQUEST_QUOTA_INFOBAR_QUESTION" desc="Question asked on the info bar whenever webapp requests new (larger) quota to persistently store data on the user's local computer (e.g. for persistent-type filesystem).">
+        <ph name="URL">
+          $1<ex>html5rocks.com</ex>
+        </ph> wants to permanently store data on your local computer.
+      </message>
+      <message name="IDS_REQUEST_LARGE_QUOTA_INFOBAR_QUESTION" desc="Question asked on the info bar whenever webapp requests new (larger) quota to persistently store large data on the user's local computer (e.g. for persistent-type filesystem).">
+        <ph name="URL">
+          $1<ex>html5rocks.com</ex>
+        </ph> wants to permanently store large data on your local computer.
+      </message>
+    </if>
+    <message name="IDS_REQUEST_QUOTA_PERMISSION_FRAGMENT" desc="Permission fragment presented in the permission bubble when the webapp requests new larger quota to persistently store data on the device. Follows a 'This site would like to:' prompt.">
+      Local data storage
+    </message>
+
+    <!-- Android does not support multiple profiles and supervised users -->
+    <if expr="not is_android">
+      <!-- Manage Profile Dialog -->
+      <message name="IDS_PROFILES_MANAGE_TITLE" desc="Title of the manage profile dialog">
+        Edit
+      </message>
+      <message name="IDS_PROFILES_MANAGE_NAME_LABEL" desc="Label next to the profile name text field.">
+        Name:
+      </message>
+      <message name="IDS_PROFILES_MANAGE_ICON_LABEL" desc="Label above the profile avatar icon chooser.">
+        Choose a picture and name
+      </message>
+      <message name="IDS_PROFILES_MANAGE_DUPLICATE_NAME_ERROR" desc="error bubble displayed when the user is attempting to rename a profile to a name that is used.">
+        Whoops, this name is already in use!
+      </message>
+
+      <!-- Delete Profile Dialog -->
+      <message name="IDS_PROFILES_DELETE_TITLE" desc="Title of the delete profile dialog">
+        Remove person?
+      </message>
+      <message name="IDS_PROFILES_DELETE_OK_BUTTON_LABEL" desc="The text to display on the button to confirm deleting the profile.">
+        Remove
+      </message>
+      <message name="IDS_PROFILES_DELETE_MESSAGE" desc="Message explaining to the user what will happen if they delete this profile">
+        Are you sure you want to remove "<ph name="PROFILE_NAME">$1<ex>New User</ex></ph>" and all associated Chrome data from this computer? This cannot be undone.
+      </message>
+      <message name="IDS_PROFILES_DELETE_SUPERVISED_ADDENDUM" desc="Additional message shown in the same dialog following the IDS_PROFILES_DELETE_MESSAGE, explaining to the user what will happen if they delete the profile of a supervised user.">
+        Settings and browsing history for this supervised user may still be visible by the manager at <ph name="BEGIN_LINK">&lt;a target="_blank" href="https://www.chrome.com/manage"&gt;</ph>www.chrome.com/manage<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>.
+      </message>
+      <message name="IDS_PROFILES_DISCONNECT_MANAGED_PROFILE_TITLE" desc="Title of the disconnect managed profile dialog.">
+        Disconnect your Google Account
+      </message>
+      <message name="IDS_PROFILES_DISCONNECT_MANAGED_PROFILE_DOMAIN_INFORMATION" desc="The text that provides the domain information.">
+        This account is managed by <ph name="DOMAIN">$1<ex>example.com</ex></ph>
+      </message>
+      <message name="IDS_PROFILES_DISCONNECT_MANAGED_PROFILE_OK_BUTTON_LABEL" desc="The text to display on the button that clears the data and disconnect user account.">
+        Clear data and disconnect
+      </message>
+      <message name="IDS_PROFILES_LIST_ITEM_CURRENT" desc="Text to display in the multi-profiles list when this profile is the current profile">
+        <ph name="PROFILE_NAME">$1<ex>New User</ex></ph> (current)
+      </message>
+      <message name="IDS_PROFILES_LIST_SUPERVISED_USER_LABEL" desc="Text to display in the multi-profiles list next to the profile name when this profile is supervised.">
+        (Supervised)
+      </message>
+      <message name="IDS_PROFILES_SINGLE_USER_MESSAGE" desc="Text to display in the multi-profiles section when there is only one user">
+        You are currently the only <ph name="PRODUCT_NAME">$1<ex>Chrome</ex></ph> user.
+      </message>
+
+      <!-- Create Profile Dialog -->
+      <message name="IDS_PROFILES_CREATE_TITLE" desc="Title of the create profile dialog">
+        Add person
+      </message>
+      <message name="IDS_PROFILES_CREATE_INSTRUCTIONS" desc="Instructions for the create profile dialog">
+        Choose a picture and name
+      </message>
+      <message name="IDS_PROFILES_CREATE_CONFIRM" desc="Create button confirmation">
+        Create
+      </message>
+      <message name="IDS_PROFILES_CREATE_LOCAL_ERROR" desc="Message shown when a local error (for example, a disk error) occurs during profile creation.">
+        Oops! The new user couldn't be created. Please check your hard drive space and permissions and try again.
+      </message>
+      <message name="IDS_PROFILES_CREATE_REMOTE_ERROR" desc="Message shown when a remote error (for example, a network error) occurs during creation of a new supervised user.">
+        Oops! The new supervised user couldn't be created. Please check your network connection and try again later.
+      </message>
+      <message name="IDS_PROFILES_CREATE_SIGN_IN_ERROR" desc="Message shown when a sign-in error occurs during creation of a new supervised user.">
+        Oops! The new supervised user couldn't be created. Please make sure you're signed in properly and try again.
+      </message>
+      <message name="IDS_PROFILES_CREATE_EXISTING_SUPERVISED_USER_ERROR" desc="Message shown when the user enters the name of a supervised user that can be imported.">
+        Looks like you're already managing a user by that name.<ph name="LINE_BREAK">&lt;br/&gt;</ph>Did you want to <ph name="BEGIN_LINK">&lt;button id="supervised-user-import-existing" class="link-button"&gt;</ph>import <ph name="PROFILE_NAME">$1<ex>John</ex></ph> to this device<ph name="END_LINK">&lt;/button&gt;</ph>?
+      </message>
+      <message name="IDS_PROFILES_CREATE_SUPERVISED_SIGNED_IN_LABEL" desc="Label for the 'Supervised user' checkbox in the create-profile dialog when the current user is signed in.">
+        Control and view the websites this person visits from <ph name="CUSTODIAN_EMAIL">$1<ex>user@gmail.com</ex></ph>.
+      </message>
+      <message name="IDS_PROFILES_CREATE_SUPERVISED_ACCOUNT_DETAILS_OUT_OF_DATE_LABEL" desc="Label for the 'Supervised user' checkbox in the create-profile dialog when the current user is signed in, but their sign-in information is invalid. This will be followed by a 'Sign in again' link.">
+        Control and view the websites this person visits from <ph name="CUSTODIAN_EMAIL">$1<ex>user@gmail.com</ex></ph>.
+  Your account sign-in details are out of date.
+      </message>
+      <message name="IDS_PROFILES_CREATE_SUPERVISED_JUST_SIGNED_IN" desc="Warning message shown in the create-profile dialog when the custodian signed in recently, sync has not yet finished initializing, and so the creation process is likely to take extra time.">
+        Creating your supervised user. This may take a few moments.
+      </message>
+      <message name="IDS_PROFILES_CREATE_SUPERVISED_NOT_SIGNED_IN_HTML" desc="Label for the (disabled) 'Supervised user' checkbox in the create-profile dialog when the current user is not signed in, containing a link to the sign in page.">
+        <ph name="BEGIN_SIGN_IN_LINK">&lt;button id="create-profile-supervised-sign-in-link" class="link-button"&gt;</ph>Sign in<ph name="END_SIGN_IN_LINK">&lt;/button&gt;</ph> to control and view the websites this person visits.
+      </message>
+      <message name="IDS_PROFILES_CREATE_SUPERVISED_NOT_SIGNED_IN_LINK" desc="Text for the sign-in promo link, shown after the (disabled) 'Supervised user' checkbox in the create-profile dialog when the current user is not signed in.">
+        Sign in now
+      </message>
+      <message name="IDS_PROFILES_CREATE_SUPERVISED_SIGN_IN_AGAIN_LINK" desc="Text for the sign-in promo link, shown after the message telling the user that their sign-in credentials are out of date in the create supervised user dialog.">
+        Sign in again
+      </message>
+      <message name="IDS_PROFILES_CREATE_SHORTCUT_CHECKBOX" desc="Create Shortcut checkbox when creating a new profile">
+        Create a desktop shortcut for this user
+      </message>
+      <message name="IDS_PROFILES_CREATE_SHORTCUT_BUTTON" desc="Create Shortcut button when editing an existing profile">
+        Add desktop shortcut
+      </message>
+      <message name="IDS_PROFILES_REMOVE_SHORTCUT_BUTTON" desc="Remove Shortcut button when editing an existing profile">
+        Remove desktop shortcut
+      </message>
+      <message name="IDS_PROFILES_IMPORT_EXISTING_SUPERVISED_USER_LINK" desc="Label for the 'Import an exisiting supervised user' link. During supervised user creation a custodian will have an option to import an existing supervised profile during the user creation flow.">
+        Import an existing supervised user
+      </message>
+
+      <!-- Supervised-user creation wizard dialogs -->
+      <message name="IDS_SUPERVISED_USER_LEARN_MORE_TITLE" desc="Title for the 'Learn more' dialog for the supervised user feature.">
+        What is a supervised user?
+      </message>
+      <message name="IDS_SUPERVISED_USER_LEARN_MORE_TEXT" desc="Informative text describing the 'supervised user' feature in detail, shown when the 'Learn more' link is clicked in the 'Create User' dialog. The HTML entities at the starts of the lines are a non-breaking space, a bullet, and another non-breaking space.">
+        A supervised user can explore the web with your guidance. As the manager of a supervised user in Chrome, you can
+
+&#160;&#8226;&#160;allow or prohibit certain websites,
+&#160;&#8226;&#160;review websites the supervised user has visited, and
+&#160;&#8226;&#160;manage other settings.
+
+Creating a supervised user does not create a Google Account, and their bookmarks, browsing history, and other preferences will not follow them to other devices with Chrome Sync.
+
+After you create a new supervised user, you can manage their settings at any time, from any device, at www.chrome.com/manage. <ph name="BEGIN_LINK">&lt;a target="_blank" href="https://support.google.com/chrome/?p=ui_supervised_users&amp;hl=[GRITLANGCODE]"&gt;</ph>Learn more about supervised users<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>
+      </message>
+      <message name="IDS_SUPERVISED_USER_LEARN_MORE_DONE_BUTTON" desc="Text for the 'OK' button on the 'Learn more' dialog for the supervised user feature.">
+        OK, got it
+      </message>
+      <message name="IDS_SUPERVISED_USER_CREATED_TITLE" desc="Title for the confirmation dialog that appears after a supervised user has been created.">
+        <ph name="NEW_PROFILE_NAME">$1<ex>New User</ex></ph> has been created as a supervised user!
+      </message>
+      <message name="IDS_SUPERVISED_USER_CREATED_TEXT" desc="Informative text for the confirmation dialog that appears after a supervised user has been created.">
+        A supervised user named <ph name="NEW_PROFILE_NAME">$1<ex>New User</ex></ph> has been created. To set which websites this supervised user can view, you can configure restrictions and settings by visiting <ph name="BEGIN_LINK">&lt;a target="_blank" href="https://www.chrome.com/manage"&gt;</ph>www.chrome.com/manage<ph name="END_LINK">&lt;/a&gt;<ex>&lt;/a&gt;</ex></ph>. If you do not change the default settings, <ph name="NEW_PROFILE_NAME">$1<ex>New User</ex></ph> can browse all sites on the web.
+
+  Please check your email at <ph name="ACCOUNT_EMAIL">$2<ex>jane.doe@gmail.com</ex></ph> for these and further instructions.
+      </message>
+      <message name="IDS_SUPERVISED_USER_CREATED_DONE_BUTTON" desc="Text for the button that closes the dialog without making any additional changes, on the supervised user creation confirmation dialog.">
+        Got it
+      </message>
+      <message name="IDS_SUPERVISED_USER_CREATED_SWITCH_BUTTON" desc="Text for the button that opens a window for the new supervised user, on the supervised user creation confirmation dialog.">
+        Switch to <ph name="NEW_PROFILE_NAME">$1<ex>New User</ex></ph>
+      </message>
+
+      <!-- Import existing supervised user dialog -->
+      <message name="IDS_IMPORT_EXISTING_SUPERVISED_USER_TITLE" desc="Title for the dialog used to import existing supervised users. The dialog appears when the custodian clicks on 'Import existing supervised user' during the user creation flow. The dialog displays a list of existing supervised users for the custodian to choose from">
+        Import an existing supervised user
+      </message>
+      <message name="IDS_IMPORT_EXISTING_SUPERVISED_USER_TEXT" desc="Text that instructs the user to choose one of the displayed supervised users to import to this device.">
+        Choose a supervised user to add to this device.
+      </message>
+      <message name="IDS_CREATE_NEW_USER_LINK" desc="The text for the 'Create a new user' link button. The button takes the user back from the dialog for importing an existing supervised user to the user creation dialog.">
+        Create a new supervised user
+      </message>
+      <message name="IDS_IMPORT_EXISTING_SUPERVISED_USER_OK" desc="Text on the button to confirm importing an existing supervised user.">
+        Import supervised user
+      </message>
+      <message name="IDS_SUPERVISED_USER_ALREADY_ON_THIS_DEVICE" desc="Text shown in the list of supervised users beside the name of a supervised user that already exists on the current device.">
+        (already on this device)
+      </message>
+      <message name="IDS_SUPERVISED_USER_NO_EXISTING_ERROR" desc="Message shown to the custodian when he opens the 'supervised user import' overlay but he has no existing supervised users to import.">
+        Oops! Looks like you have no existing supervised users to import. Please create one or more from another device then you can import them here.
+      </message>
+      <message name="IDS_SUPERVISED_USER_IMPORT_LOCAL_ERROR" desc="Message shown when a local error (for example, a disk error) occurs during supervised user import.">
+        Oops! The supervised user couldn't be imported. Please check your hard drive space and permissions and try again.
+      </message>
+      <message name="IDS_SUPERVISED_USER_IMPORT_REMOTE_ERROR" desc="Message shown when a remote error (for example, a network error) occurs during supervised user import.">
+        Oops! The supervised user couldn't be imported. Please check your network connection and try again later.
+      </message>
+      <message name="IDS_SUPERVISED_USER_IMPORT_SIGN_IN_ERROR" desc="Message shown when a sign-in error occurs during supervised user import.">
+        Oops! Looks like there's a problem with your credentials. Please make sure you're signed in properly and try again.
+      </message>
+      <message name="IDS_SUPERVISED_USER_SELECT_AVATAR_TITLE" desc="Title for the dialog used to select an avatar for a supervised user being imported. The dialog is shown only when the supervised user being imported has no chrome synced avatar.">
+        Select an avatar for this supervised user
+      </message>
+      <message name="IDS_SUPERVISED_USER_SELECT_AVATAR_TEXT" desc="Text that instructs the user to choose an avatar for the supervised user being imported.">
+        Choose an avatar for this supervised user.
+      </message>
+      <message name="IDS_SUPERVISED_USER_SELECT_AVATAR_OK" desc="Text on the button to confirm the avatar selection for the supervised user being imported.">
+        Ok, import
+      </message>
+    </if>
+
+    <if expr="not is_android and not is_ios">
+      <!-- User manager web UI -->
+      <if expr="use_titlecase">
+        <if expr="not chromeos">
+          <message name="IDS_ADD_USER_BUTTON" desc="Text shown on an add user button on login/locker screen">
+            Add Person
+          </message>
+          <message name="IDS_LOGIN_POD_USER_REMOVE_WARNING_BUTTON" desc="Text shown on a button that confirms removal of a user.">
+            Remove This Person
+          </message>
+        </if>
+        <if expr="chromeos">
+          <message name="IDS_ADD_USER_BUTTON" desc="Text shown on an add user button on login/locker screen">
+            Add User
+          </message>
+          <message name="IDS_LOGIN_POD_USER_REMOVE_WARNING_BUTTON" desc="Text shown on a button that confirms removal of a user.">
+            Remove This User
+          </message>
+        </if>
+        <message name="IDS_SCREEN_LOCK_SIGN_OUT">
+          Sign out
+        </message>
+        <message name="IDS_LOGIN_BUTTON">
+          Sign in
+        </message>
+      </if>
+      <if expr="not use_titlecase">
+        <if expr="not chromeos">
+          <message name="IDS_ADD_USER_BUTTON" desc="Text shown on an add user button on login/locker screen">
+            Add person
+          </message>
+          <message name="IDS_LOGIN_POD_USER_REMOVE_WARNING_BUTTON" desc="Text shown on a button that confirms removal of a user.">
+            Remove this person
+          </message>
+        </if>
+        <if expr="chromeos">
+          <message name="IDS_ADD_USER_BUTTON" desc="Text shown on an add user button on login/locker screen">
+            Add user
+          </message>
+          <message name="IDS_LOGIN_POD_USER_REMOVE_WARNING_BUTTON" desc="Text shown on a button that confirms removal of a user.">
+            Remove this user
+          </message>
+        </if>
+        <message name="IDS_SCREEN_LOCK_SIGN_OUT">
+          Sign out
+        </message>
+        <message name="IDS_LOGIN_BUTTON">
+          Sign in
+        </message>
+      </if>
+      <if expr="chromeos">
+        <message name="IDS_LAUNCH_APP_BUTTON" desc="Text shown on the button that launches kiosk app from Chrome OS login UI">
+          Launch app
+        </message>
+      </if>
+      <message name="IDS_GO_INCOGNITO_BUTTON" desc="Text shown on Chrome OS sign-in screen button that launches guest session. Should be short.">
+        Browse as Guest
+      </message>
+      <message name="IDS_SCREEN_LOCK_ACTIVE_USER">
+        Currently signed in
+      </message>
+      <message name="IDS_LOGIN_ERROR_AUTHENTICATING" desc="Couldn't sign in because password is invalid">
+        Sorry, your password could not be verified. Please try again.
+      </message>
+      <message name="IDS_LOGIN_ERROR_AUTHENTICATING_OFFLINE" desc="Couldn't unlock because the password can't be validated locally and the user is offline">
+        Sorry, your password could not be verified because you are offline.
+      </message>
+      <message name="IDS_LOGIN_POD_EMPTY_PASSWORD_TEXT" desc="Text to display in the password field for user pod when no password has been entered.">
+        Enter password
+      </message>
+      <message name="IDS_LOGIN_POD_PASSWORD_FIELD_ACCESSIBLE_NAME" desc="Text to be spoken when the focus is set to the password field of a user pod on the sign-in screen.">
+        Password for <ph name="USER_EMAIL_ADDRESS">$1<ex>john.doe@example.com</ex></ph>
+      </message>
+      <message name="IDS_LOGIN_POD_MENU_BUTTON_ACCESSIBLE_NAME" desc="Text to be spoken when the focus is set to the menu button of the user pod on the login screen.">
+        Options menu for <ph name="USER_EMAIL_ADDRESS">$1<ex>john.doe@example.com</ex></ph>
+      </message>
+      <message name="IDS_LOGIN_POD_MENU_REMOVE_ITEM_ACCESSIBLE_NAME" desc="Text to be spoken when 'Remove user' item is selected on the pod menu.">
+        Remove this user
+      </message>
+      <message name="IDS_LOGIN_POD_SUPERVISED_USER_REMOVE_WARNING" desc="Text shown as a warning when attempting to remove supervised user.">
+        All files and local data associated with the supervised user will be permanently deleted once this supervised user is removed. Visited websites and settings for this supervised user may still be visible by the manager at <ph name="MANAGEMENT_URL">$1<ex>www.example.com</ex></ph>.
+      </message>
+      <if expr="not chromeos">
+        <message name="IDS_LOGIN_POD_USER_REMOVE_WARNING" desc="Text shown as a warning when attempting to remove an user.">
+          Are you sure you want to delete this user and all the data associated with it from this computer? This cannot be undone!
+        </message>
+      </if>
+
+      <!-- User manager tutorial -->
+      <message name="IDS_USER_MANAGER_TUTORIAL_NEXT" desc="Text of the button that advances the tutorial to the next slide">
+        Next
+      </message>
+      <message name="IDS_USER_MANAGER_TUTORIAL_DONE" desc="The text of the OK button on the last tutorial slide">
+        OK, got it
+      </message>
+      <message name="IDS_USER_MANAGER_TUTORIAL_SLIDE_GUEST_TITLE" desc="Title of the guest user slide">
+        Share with guests
+      </message>
+      <message name="IDS_USER_MANAGER_TUTORIAL_SLIDE_FRIENDS_TITLE" desc="Title of the friends and family slide">
+        Add family and friends
+      </message>
+      <message name="IDS_USER_MANAGER_TUTORIAL_SLIDE_OUTRO_TITLE" desc="Title of the tutorial completion slide">
+        You're almost done!
+      </message>
+      <message name="IDS_USER_MANAGER_TUTORIAL_SLIDE_OUTRO_USER_NOT_FOUND" desc="Text of the label asking the user if they see their name">
+        Don't see your name?
+      </message>
+    </if>
+
+    <!-- Aura strings -->
+    <if expr="use_ash">
+      <message name="IDS_LAUNCHER_CONTEXT_MENU_NEW_TAB" desc="Title text for the 'open new' context menu item of the launcher for apps configured to open in a tab">
+        New tab
+      </message>
+      <message name="IDS_LAUNCHER_CONTEXT_MENU_NEW_WINDOW" desc="Title text for the 'open new' context menu item of the launcher for apps configured to open windowed">
+        New window
+      </message>
+      <message name="IDS_LAUNCHER_CONTEXT_MENU_CLOSE" desc="Title text for the 'close' context menu item of the launcher">
+        Close
+      </message>
+      <message name="IDS_LAUNCHER_CONTEXT_MENU_PIN" desc="Title text for the 'pin' context menu item of the launcher">
+        Pin
+      </message>
+      <message name="IDS_LAUNCHER_CONTEXT_MENU_UNPIN" desc="Title text for the 'unpin' context menu item of the launcher">
+        Unpin
+      </message>
+      <message name="IDS_LAUNCHER_NEW_WINDOW" desc="The text label of the New Window menu item">
+        New window
+      </message>
+      <message name="IDS_LAUNCHER_NEW_INCOGNITO_WINDOW" desc="The text label of the New incognito window menu item">
+        New incognito window
+      </message>
+      <message name="IDS_GTALK_SCREEN_SHARE_DIALOG_MESSAGE" desc="Message to display in the dialog box asking user's permission to share their screen">
+        Do you want to start presenting your entire screen in this meeting?
+      </message>
+      <message name="IDS_GTALK_SCREEN_SHARE_DIALOG_TITLE" desc="Title of the dialog box asking user's permission to share their screen">
+        Google Talk Screen Sharing Request
+      </message>
+      <message name="IDS_GTALK_REMOTING_DIALOG_TITLE" desc="Title of the dialog box asking user's permission to start Hangouts Remote Desktop">
+        Google+ Hangouts
+      </message>
+      <message name="IDS_GTALK_REMOTING_DIALOG_MESSAGE" desc="Message of the dialog box asking user's permission to start Hangouts Remote Desktop">
+        A participant in this hangout has offered to help you by controlling your computer. If you accept:
+
+  &#8226; Everyone in this hangout can see your screen
+  &#8226; The person helping you will be able to control your mouse and keyboard
+  &#8226; You can end at any time
+
+Do you accept?
+      </message>
+      <message name="IDS_GTALK_REMOTING_CONTINUE_DIALOG_MESSAGE" desc="Message of the dialog box asking user's permission to continue Hangouts Remote Desktop">
+        You are being helped. Do you want to continue?
+      </message>
+    </if>
+
+    <!-- Panel windows -->
+    <message name="IDS_PANEL_CLOSE_TOOLTIP"
+             desc="Text for the tooltip on panel window close button.">
+      Close
+    </message>
+    <message name="IDS_PANEL_MINIMIZE_TOOLTIP"
+             desc="Text for the tooltip on panel window minimize button.">
+      Collapse
+    </message>
+    <message name="IDS_PANEL_RESTORE_TOOLTIP"
+           desc="Text for the tooltip on panel window restore button.">
+      Expand
+    </message>
+
+    <!-- High-contrast mode. -->
+    <message name="IDS_HIGH_CONTRAST_NOTIFICATION"
+             desc="Text that explains that the user is using Windows High-Contrast mode, so they may be interested in a high-contrast extension or a dark theme. Note to translators: this is the name of a feature in Windows, so please try to find the correct name of that feature in your region.">
+      You have High Contrast mode enabled. Would you like to install our High Contrast extension and a dark theme?
+    </message>
+    <message name="IDS_HIGH_CONTRAST_EXT"
+             desc="The title of a link that will open the Chrome Web Store with a High Contrast extension the user can install.">
+      High Contrast Extension
+    </message>
+    <message name="IDS_DARK_THEME"
+             desc="The title of a link that will open the Chrome Web Store with a dark theme the user might want to install, if they prefer light text on a dark background.">
+      Dark Theme
+    </message>
+
+    <message name="IDS_FLAGS_ENABLE_NEW_PROFILE_MANAGEMENT_NAME" desc="Title for the flag to enable the new profile management.">
+      Enable new profile management system
+    </message>
+    <message name="IDS_FLAGS_ENABLE_NEW_PROFILE_MANAGEMENT_DESCRIPTION" desc="Description for the flag to enable the new profile management.">
+      Enables the new profile management system, including profile lock and the new avatar menu UI.
+    </message>
+    <message name="IDS_FLAGS_ENABLE_ACCOUNT_CONSISTENCY_NAME" desc="Title for the flag to enable the account consistency between browser and cookie jar.">
+      Enable identity consistency between browser and cookie jar
+    </message>
+    <message name="IDS_FLAGS_ENABLE_ACCOUNT_CONSISTENCY_DESCRIPTION" desc="Description for the flag to enable the account consistency between browser and cookie jar.">
+      When enabled, the browser manages signing in and out of Google accounts.
+    </message>
+    <message name="IDS_FLAGS_ENABLE_FAST_USER_SWITCHING_NAME" desc="Title for the flag to enable fast user switching.">
+      Enable fast user switching in the avatar menu
+    </message>
+    <message name="IDS_FLAGS_ENABLE_FAST_USER_SWITCHING_DESCRIPTION" desc="Description for the flag to enable fast user switching">
+      Enables fast switching between users in the avatar menu.
+    </message>
+    <message name="IDS_FLAGS_ENABLE_NEW_AVATAR_MENU_NAME" desc="Title for the flag to enable the new avatar menu.">
+      Enable the new avatar menu
+    </message>
+    <message name="IDS_FLAGS_ENABLE_NEW_AVATAR_MENU_DESCRIPTION" desc="Description for the flag to enable the new avatar menu.">
+      Enables the new avatar menu. When combined with new-profile-management, it simply shows the new profile management avatar menu. Otherwise it shows a redesigned avatar menu with the same functionality as the old one, plus a tutorial card at the top prompting the user to try out the new profile management UI.
+    </message>
+
+    <message name="IDS_FLAGS_ENABLE_WEB_BASED_SIGNIN_NAME" desc="Title for the flag to enable web-based sign-in flows.">
+      Enable pure web-based sign-in flows
+    </message>
+    <message name="IDS_FLAGS_ENABLE_WEB_BASED_SIGNIN_DESCRIPTION" desc="Description for the flag to enable web-based sign-in flows">
+      When enabled, will use a pure web-based sign-in flow on first run/NTP/wrench menu/settings page. Otherwise use a native flow with embedded webview.
+    </message>
+    <message name="IDS_FLAGS_ENABLE_GOOGLE_PROFILE_INFO_NAME" desc="Title for the flag to enable the google profile information">
+      Enable Google profile name and icon
+    </message>
+    <message name="IDS_FLAGS_ENABLE_GOOGLE_PROFILE_INFO_DESCRIPTION" desc="Description for the flag to enable the google profile information">
+      Enables using Google information to populate the profile name and icon in the avatar menu.
+    </message>
+    <message name="IDS_FLAGS_ENABLE_OFFLINE_AUTO_RELOAD_NAME" desc="Name of the flag to make pages which failed to load while offline auto-reload">
+      Enable Offline Auto-Reload Mode
+    </message>
+    <message name="IDS_FLAGS_ENABLE_OFFLINE_AUTO_RELOAD_DESCRIPTION" desc="Description of the flag to make pages which failed to load while offline auto-reload">
+      Pages that fail to load while the browser is offline will be auto-reloaded when the browser is online again.
+    </message>
+    <message name="IDS_FLAGS_ENABLE_OFFLINE_AUTO_RELOAD_VISIBLE_ONLY_NAME" desc="Name of the flag to only enable auto-reload on visible tabs">
+      Only Auto-Reload Visible Tabs
+    </message>
+    <message name="IDS_FLAGS_ENABLE_OFFLINE_AUTO_RELOAD_VISIBLE_ONLY_DESCRIPTION" desc="Description of the flag to only auto-reload visible tabs">
+      Pages that fail to load while the browser is offline will only be auto-reloaded if their tab is visible.
+    </message>
+    <message name="IDS_FLAGS_ENABLE_OFFLINE_LOAD_STALE_NAME" desc="Name of the flag to enable offering users the option of loading a stale copy of a page when an error occurs.">
+      Enable Offline Load Stale Button
+    </message>
+    <message name="IDS_FLAGS_ENABLE_OFFLINE_LOAD_STALE_DESCRIPTION" desc="Description of the flag to enable offering users the option of loading a stale copy of a page when an error occurs.">
+      When a page fails to load, if a stale copy of the page exists in the browser, a button will be presented to allow the user to load that stale copy.
+    </message>
+
+    <if expr="chromeos">
+      <message name="IDS_FLAGS_ENABLE_VIRTUAL_KEYBOARD_NAME" desc="Name of about:flags option to turn on the virtual keyboard">
+        Virtual Keyboard
+      </message>
+      <message name="IDS_FLAGS_ENABLE_VIRTUAL_KEYBOARD_DESCRIPTION" desc="Description of about:flags option to turn on the virtual keyboard">
+        Enable virtual keyboard support.
+      </message>
+
+      <message name="IDS_FLAGS_ENABLE_VIRTUAL_KEYBOARD_OVERSCROLL_NAME" desc="Name of about:flags option to turn on the overscrolling for the virtual keyboard">
+        Virtual Keyboard Overscroll
+      </message>
+      <message name="IDS_FLAGS_ENABLE_VIRTUAL_KEYBOARD_OVERSCROLL_DESCRIPTION" desc="Description of about:flags option to turn on overscrolling for the virtual keyboard">
+        Enable virtual keyboard overscroll support.
+      </message>
+
+      <message name="IDS_FLAGS_ENABLE_SWIPE_SELECTION_NAME" desc="Name of about:flags option to turn on swipe selection for the virtual keyboard">
+        Swipe Selection
+      </message>
+      <message name="IDS_FLAGS_ENABLE_SWIPE_SELECTION_DESCRIPTION" desc="Description of about:flags option to turn on swipe selection for the virtual keyboard">
+        Enable Swipe Selection support for the virtual keyboard. Unless the virtual keyboard is also enabled, this will do nothing.
+      </message>
+
+      <message name="IDS_FLAGS_ENABLE_INPUT_VIEW_NAME" desc="Name of about::flags option to enable IME extensions to override the virtual keyboard view">
+        Enable input views.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_INPUT_VIEW_DESCRIPTION" desc="Description of about::flags option to enable IME extensions to override the virtual keyboard view">
+        Enable IME extensions to supply custom views for user input such as  virtual keyboards.
+      </message>
+
+      <message name="IDS_FLAGS_ENABLE_EXPERIMENTAL_INPUT_VIEW_FEATURES_NAME" desc="Name of about::flags option to enable experimental features for IME input-views">
+        Experimental input view features.
+      </message>
+      <message name="IDS_FLAGS_ENABLE_EXPERIMENTAL_INPUT_VIEW_FEATURES_DESCRIPTION" desc="Description of about::flags option to enable experimental features for IME input-views">
+        Enable experimental features for IME input views.
+      </message>
+    </if>
+
+    <!-- Simple Cache Backend experiment. -->
+    <message name="IDS_FLAGS_ENABLE_SIMPLE_CACHE_BACKEND_NAME" desc="Name of about:flags option to turn on the Simple Cache Backend">
+      Simple Cache for HTTP.
+    </message>
+    <message name="IDS_FLAGS_ENABLE_SIMPLE_CACHE_BACKEND_DESCRIPTION" desc="Description of about:flags option to turn on the Simple Cache Backend">
+      The Simple Cache for HTTP is a new cache. It relies on the filesystem for disk space allocation.
+    </message>
+
+    <!-- Spelling feedback field trial. -->
+    <message name="IDS_FLAGS_ENABLE_SPELLING_FEEDBACK_FIELD_TRIAL_NAME" desc="Name of about:flags option to enable the field trial for sending feedback to spelling service.">
+      Spelling Feedback Field Trial.
+    </message>
+    <message name="IDS_FLAGS_ENABLE_SPELLING_FEEDBACK_FIELD_TRIAL_DESCRIPTION" desc="Description of about:flags option to enable the field trial for sending feedback to spelling service.">
+      Enable the field trial for sending user feedback to spelling service.
+    </message>
+
+    <!-- Web MIDI API. -->
+    <message name="IDS_FLAGS_ENABLE_WEB_MIDI_NAME"
+             desc="Name of about:flag option to turn on Web MIDI API">
+      Enable Web MIDI API
+    </message>
+    <message name="IDS_FLAGS_ENABLE_WEB_MIDI_DESCRIPTION"
+             desc="Description of about:flag option to turn on Web MIDI API">
+      Enable Web MIDI API experimental support.
+    </message>
+
+    <!-- Windows 8 Metro mode. -->
+    <if expr="is_win">
+      <message name="IDS_METRO_FLOW_TAB_TITLE"
+               desc="The dialog window title.">
+        Welcome to Chrome
+      </message>
+      <message name="IDS_METRO_FLOW_TITLE_SHORT"
+               desc="The title at the top of the window guiding user through making Chrome default in Metro.">
+        Chrome is almost ready.
+      </message>
+      <message name="IDS_METRO_FLOW_DESCRIPTION"
+               desc="Wordy description of what the set-Chrome-as-Metro flow is all about.">
+        Click next to choose your default browser.
+      </message>
+      <message name="IDS_METRO_FLOW_SET_DEFAULT"
+               desc="The label of the button invoking Windows8 default app settings window.">
+        Next
+      </message>
+      <message name="IDS_METRO_FLOW_LOGO_STRING_ALT"
+               desc="Alt text for the faded chrome logo image.">
+          Chrome logo
+      </message>
+      <message name="IDS_METRO_MISSING_PLUGIN_PROMPT"
+               desc="Info Bar message to let user do something about the missing plugin">
+        <ph name="PLUGIN_NAME">$1<ex>Quicktime</ex></ph> is required to display some elements on this page.
+      </message>
+      <message name="IDS_METRO_NPAPI_PLUGIN_PROMPT"
+               desc="Infobar message when an NPAPI plugin doesn't run in Metro mode.">
+        <ph name="PLUGIN_NAME">$1<ex>Quicktime</ex></ph> only works on the desktop.
+      </message>
+      <message name="IDS_METRO_DOWNLOAD_COMPLETE_NOTIFICATION"
+              desc="Notification displayed when a download request is completed">
+        Your download has completed
+      </message>
+      <message name="IDS_METRO_DOWNLOAD_COMPLETE_NOTIFICATION_TITLE"
+              desc="Title for notification displayed when a download request is completed">
+        Download complete notification
+      </message>
+      <message name="IDS_WIN_DESKTOP_OPEN"
+               desc="Text for the infobar button to open Chrome in desktop mode.">
+        Open Chrome on the desktop
+      </message>
+      <message name="IDS_WIN_DESKTOP_RESTART"
+               desc="Text for the menu item to restart chrome in desktop mode. Aplies to Windows 8 only">
+        Relaunch Chrome on the desktop
+      </message>
+      <message name="IDS_WIN8_METRO_RESTART"
+               desc="Text for the menu item to restart chrome in metro. Aplies to Windows 8 only">
+        Relaunch Chrome in Windows 8 mode
+      </message>
+      <message name="IDS_WIN8_PROMPT_TO_CLOSE_APPS_FOR_METRO"
+               desc="Modal message box prompt shown to the user after requesting to relaunch in Windows 8 mode while packaged apps are running, which will require all packaged apps to be closed and then restarted. Dialog is shown with choices: OK, Cancel.">
+        Relaunching in Windows 8 mode will close and relaunch your Chrome apps.
+      </message>
+      <message name="IDS_WIN_CHROMEOS_RESTART"
+               desc="Text for the menu item to restart chrome in chrome os. Aplies to Windows 7 only">
+        Relaunch Chrome in Chrome OS mode
+      </message>
+      <message name="IDS_WIN_PROMPT_TO_CLOSE_APPS_FOR_CHROMEOS"
+               desc="Modal message box prompt shown to the user after requesting to relaunch in Windows chrome os mode while packaged apps are running, which will require all packaged apps to be closed and then restarted. Dialog is shown with choices: OK, Cancel.">
+        Relaunching in Chrome OS mode will close and relaunch your Chrome apps.
+      </message>
+      <message name="IDS_WIN_PROMPT_TO_CLOSE_APPS_FOR_DESKTOP"
+               desc="Modal message box prompt shown to the user after requesting to relaunch in Desktop mode while packaged apps are running, which will require all packaged apps to be closed and then restarted. Dialog is shown with choices: OK, Cancel.">
+        Relaunching in Desktop mode will close and relaunch your Chrome apps.
+      </message>
+    </if>
+
+    <!-- Media Galleries. -->
+    <if expr="not is_android">
+      <message name="IDS_MEDIA_GALLERIES_DIALOG_HEADER" desc="Header for media gallery permissions dialog.">
+        Media-File Permissions for "<ph name="EXTENSION">$1<ex>Photo Editor</ex></ph>"
+      </message>
+      <message name="IDS_MEDIA_GALLERIES_DIALOG_SUBTEXT_READ_WRITE" desc="Explanatory text for the media gallery access permission. Indicates that the specified (by name) extension has read and write access to the listed folders.">
+        "<ph name="EXTENSION">$1<ex>PhotoEditor</ex></ph>" can read and write images, video, and sound files in the checked locations.
+      </message>
+      <message name="IDS_MEDIA_GALLERIES_DIALOG_SUBTEXT_READ_DELETE" desc="Explanatory text for the media gallery access permission. Indicates that the specified (by name) extension has read and delete access to the listed folders.">
+        "<ph name="EXTENSION">$1<ex>PhotoEditor</ex></ph>" can read and delete images, video, and sound files in the checked locations.
+      </message>
+      <message name="IDS_MEDIA_GALLERIES_DIALOG_SUBTEXT_READ_ONLY" desc="Explanatory text for the media gallery access permission. Indicates that the specified (by name) extension has read-only access to the listed folders.">
+        "<ph name="EXTENSION">$1<ex>PhotoEditor</ex></ph>" can read images, video, and sound files in the checked locations.
+      </message>
+      <message name="IDS_MEDIA_GALLERIES_PERMISSION_SUGGESTIONS" desc="Header in media gallery permission dialog for locations that the app does not have permission for.">
+        Suggestions
+      </message>
+      <message name="IDS_MEDIA_GALLERIES_SCAN_RESULT_DIALOG_HEADER" desc="Header for media gallery scan result dialog.">
+        Add folders to "<ph name="EXTENSION">$1<ex>Photo Editor</ex></ph>"?
+      </message>
+      <message name="IDS_MEDIA_GALLERIES_SCAN_RESULT_DIALOG_SUBTEXT_READ_WRITE" desc="Explanatory text for the media gallery scan result dialog. Indicates that the specified (by name) extension will have read and write access to the selected folders.">
+        "<ph name="EXTENSION">$1<ex>PhotoEditor</ex></ph>" will be able to read and write images, video, and sound files in the checked folders.
+      </message>
+      <message name="IDS_MEDIA_GALLERIES_SCAN_RESULT_DIALOG_SUBTEXT_READ_DELETE" desc="Explanatory text for the media gallery scan result dialog. Indicates that the specified (by name) extension will have read and delete access to the selected folders.">
+        "<ph name="EXTENSION">$1<ex>PhotoEditor</ex></ph>" will be able to read and delete images, video, and sound files in the checked folders.
+      </message>
+      <message name="IDS_MEDIA_GALLERIES_SCAN_RESULT_DIALOG_SUBTEXT_READ_ONLY" desc="Explanatory text for the media gallery scan result dialog. Indicates that the specified (by name) extension will have read-only access to the selected folders.">
+        "<ph name="EXTENSION">$1<ex>PhotoEditor</ex></ph>" will be able to read images, video, and sound files in the checked folders.
+      </message>
+      <message name="IDS_MEDIA_GALLERIES_SCAN_RESULT_OPEN_FOLDER_VIEW_ACCESSIBILITY_NAME" desc="Accessibility name for an icon that opens the folder view of a gallery from the media galleries scan result dialog.">
+        Show in folder
+      </message>
+      <message name="IDS_MEDIA_GALLERIES_LAST_ATTACHED" desc="Explanatory text indicating to the user when a particular location was last attached, i.e. a removable device that isn't plugged in. The date presented will be a day in a localized format providing year, month, and day.">
+        last attached on <ph name="DATE">$1<ex>1/22/11</ex></ph>
+      </message>
+      <if expr="use_titlecase">
+        <message name="IDS_MEDIA_GALLERIES_DIALOG_ADD_GALLERY" desc="In title case: Button for adding a new gallery by choosing a folder.">
+          Add Location...
+        </message>
+        <message name="IDS_MEDIA_GALLERIES_DIALOG_CANCEL" desc="In title case: The text for the cancel button on the media galleries configuration dialog.">
+          Cancel
+        </message>
+        <message name="IDS_MEDIA_GALLERIES_DIALOG_CONFIRM" desc="In title case: The text for the accept button on the media galleries configuration dialog.">
+          Apply
+        </message>
+        <message name="IDS_MEDIA_GALLERIES_SCAN_RESULT_DIALOG_CONFIRM" desc="In title case: The text for the accept button on the media galleries scan result dialog. The results of the dialog are added as new galleries.">
+          Add
+        </message>
+      </if>
+      <if expr="not use_titlecase">
+        <message name="IDS_MEDIA_GALLERIES_DIALOG_ADD_GALLERY" desc="In sentence case: Button for adding a new gallery by choosing a folder."
+                 meaning="In sentence case: Button for adding a new gallery by choosing a folder.">
+          Add location...
+        </message>
+        <message name="IDS_MEDIA_GALLERIES_DIALOG_CANCEL" desc="In sentence case: The text for the cancel button on the media galleries configuration dialog.">
+          Cancel
+        </message>
+        <message name="IDS_MEDIA_GALLERIES_DIALOG_CONFIRM" desc="In sentence case: The text for the accept button on the media galleries configuration dialog."
+                 meaning="In sentence case: The text for the accept button on the media galleries configuration dialog.">
+          Apply
+        </message>
+        <message name="IDS_MEDIA_GALLERIES_SCAN_RESULT_DIALOG_CONFIRM" desc="In sentence case: The text for the accept button on the media galleries scan result dialog. The results of the dialog are added as new galleries.">
+          Add
+        </message>
+      </if>
+      <message name="IDS_MEDIA_GALLERIES_DIALOG_ADD_GALLERY_TITLE" desc="The title of the folder selection dialog for adding a new media gallery.">
+        Add Media Gallery by Directory
+      </message>
+      <message name="IDS_MEDIA_GALLERIES_DIALOG_DEVICE_ATTACHED" desc="Label text to indicate a removable storage device is attached.">
+        attached
+      </message>
+      <message name="IDS_MEDIA_GALLERIES_DIALOG_DEVICE_NOT_ATTACHED" desc="Label text to indicate a removable storage device is not attached.">
+        not attached
+      </message>
+      <message name="IDS_MEDIA_GALLERIES_DIALOG_DELETE" desc="Text label of the menu item which removes selected media gallery access for all apps.">
+        Permanently remove access for all apps
+      </message>
+    </if>
+
+    <!-- App List. -->
+    <if expr="enable_app_list">
+      <message name="IDS_APP_LIST_START_SPEECH_RECOGNITION" desc="Tooltip text for the button to start the speech recognition.">
+        Click to start voice search
+      </message>
+      <message name="IDS_APP_LIST_HOTWORD_LISTENING" desc="Tooltip text for the mic button when it waits for the hotword.">
+        Click or say "Ok, Google" to start voice search
+      </message>
+      <if expr="not use_titlecase">
+        <message name="IDS_APP_LIST_CONTEXT_MENU_NEW_TAB" desc="Title text for the 'open new' context menu item of an app list item configured to open in a tab">
+          New tab
+        </message>
+        <message name="IDS_APP_LIST_CONTEXT_MENU_NEW_WINDOW" desc="Title text for the 'open new' context menu item of an app list item configured to open windowed">
+          New window
+        </message>
+        <message name="IDS_APP_LIST_CONTEXT_MENU_PIN" desc="Title text for the 'pin' context menu item of an app list item.">
+          Pin to shelf
+        </message>
+        <message name="IDS_APP_LIST_CONTEXT_MENU_UNPIN" desc="Title text for the 'unpin' context menu item of an app list item.">
+          Unpin from shelf
+        </message>
+        <if expr="is_macosx">
+          <message name="IDS_APP_LIST_UNINSTALL_ITEM"
+                   desc="Title text for the 'uninstall' context menu item of an app list item.">
+            Uninstall
+          </message>
+        </if>
+        <if expr="not is_macosx">
+          <message name="IDS_APP_LIST_UNINSTALL_ITEM"
+                   desc="Title text for the 'uninstall' context menu item of an app list item.">
+            Uninstall...
+          </message>
+        </if>
+        <message name="IDS_SEARCH_BOX_HINT" desc="Hint text for the search box in app list window.">
+          Search
+        </message>
+        <message name="IDS_SEARCH_BOX_HOTWORD_HINT" desc="Hint text for the search box in app list window when the hotword is enabled.">
+          Search, or say "Ok Google"
+        </message>
+        <message name="IDS_APP_LIST_SIGNIN_BUTTON" desc="App launcher sign-in button text.">
+          Sign in
+        </message>
+        <message name="IDS_APP_LIST_SIGNIN_LEARN_MORE_TEXT" desc="App launcher sign-in learn more link text.">
+          Learn more
+        </message>
+        <message name="IDS_APP_LIST_NEW_WINDOW" desc="The text label of the New Window menu item">
+          New window
+        </message>
+        <message name="IDS_APP_LIST_NEW_INCOGNITO_WINDOW" desc="The text label of the New incognito window menu item">
+          New incognito window
+        </message>
+        <message name="IDS_APP_LIST_OEM_DEFAULT_FOLDER_NAME" desc="The default name for OEM folders in the App Launcher">
+          OEM folder
+        </message>
+      </if>
+      <message name="IDS_ADD_TO_APP_LIST_NOTIFICATION_TEXT" desc="Text explaining that the current site can be added to the App Launcher.">
+        This page can be added to the App Launcher
+      </message>
+      <message name="IDS_ADD_TO_APP_LIST_HINT" desc="Hint text for the button allowing the current site to be added to the App Launcher.">
+        Add to the App Launcher
+      </message>
+      <if expr="use_titlecase">
+        <message name="IDS_APP_LIST_CONTEXT_MENU_NEW_TAB" desc="Title text for the 'open new' context menu item of an app list item configured to open in a tab">
+          New Tab
+        </message>
+        <message name="IDS_APP_LIST_CONTEXT_MENU_NEW_WINDOW" desc="Title text for the 'open new' context menu item of an app list item configured to open windowed">
+          New Window
+        </message>
+        <message name="IDS_APP_LIST_CONTEXT_MENU_PIN" desc="Title text for the 'pin' context menu item of an app list item.">
+          Pin to Shelf
+        </message>
+        <message name="IDS_APP_LIST_CONTEXT_MENU_UNPIN" desc="Title text for the 'unpin' context menu item of an app list item.">
+          Unpin from Shelf
+        </message>
+        <if expr="is_macosx">
+          <message name="IDS_APP_LIST_UNINSTALL_ITEM"
+                   desc="Title text for the 'uninstall' context menu item of an app list item.">
+            Uninstall
+          </message>
+        </if>
+        <if expr="not is_macosx">
+          <message name="IDS_APP_LIST_UNINSTALL_ITEM"
+                   desc="Title text for the 'uninstall' context menu item of an app list item.">
+            Uninstall...
+          </message>
+        </if>
+        <message name="IDS_SEARCH_BOX_HINT" desc="Hint text for the search box in app list window.">
+          Search
+        </message>
+        <message name="IDS_SEARCH_BOX_HOTWORD_HINT" desc="Hint text for the search box in app list window when the hotword is enabled.">
+          Search or say "Ok, Google"
+        </message>
+        <message name="IDS_APP_LIST_SIGNIN_BUTTON" desc="App launcher sign-in button text.">
+          Sign in
+        </message>
+        <message name="IDS_APP_LIST_SIGNIN_LEARN_MORE_TEXT" desc="App launcher sign-in learn more link text.">
+          Learn More
+        </message>
+        <message name="IDS_APP_LIST_NEW_WINDOW" desc="The text label of the New Window menu item">
+          New Window
+        </message>
+        <message name="IDS_APP_LIST_NEW_INCOGNITO_WINDOW" desc="The text label of the New incognito window menu item">
+          New Incognito Window
+        </message>
+        <message name="IDS_APP_LIST_OEM_DEFAULT_FOLDER_NAME" desc="The default name for OEM folders in the App Launcher">
+          OEM Folder
+        </message>
+      </if>
+      <message name="IDS_APP_LIST_SIGNIN_LEARN_MORE_LINK" desc="App launcher sign-in learn more URL.">
+        https://support.google.com/chrome/bin/answer.py?hl=[GRITLANGCODE]&amp;answer=165139&amp;p=settings_sign_in
+      </message>
+      <message name="IDS_APP_LIST_SIGNIN_SETTINGS_TEXT" desc="App launcher sign-in settings link text.">
+        App Launcher Settings
+      </message>
+    </if>
+
+    <!-- iOS Chrome to Device strings-->
+    <if expr="is_ios">
+      <message name="IDS_CHROME_TO_DEVICE_PRINT_TO_PHONE" desc="The message indicating print-to-phone jobs are now available. [Length: 30em]">
+        Your document is ready to view.
+      </message>
+      <message name="IDS_CHROME_TO_DEVICE_SNAPSHOTS" desc="The message indicating snapshot jobs are now available. [Length: 30em]">
+        Your page is available to view.
+      </message>
+    </if>
+
+    <!-- iOS Net-Export strings -->
+    <if expr="is_ios">
+      <message name="IDS_NET_EXPORT_NO_EMAIL_ACCOUNTS_ALERT_MESSAGE" desc="The message of the alert informing a user with no email accounts that he or she needs to configure an email account to send net-export data. [Length: 70em]">
+        To send net-export data, please configure your email account in the Settings app.
+      </message>
+      <message name="IDS_NET_EXPORT_NO_EMAIL_ACCOUNTS_ALERT_TITLE" desc="The title of the alert informing a user with no email accounts that he or she needs to configure an email account to send net-export data. [Length: 20em]">
+        No Email Accounts
+      </message>
+    </if>
+
+    <!-- Pepper 3D and WebGL (client 3D APIs) infobar strings -->
+    <message name="IDS_3D_APIS_BLOCKED_TEXT" desc="Infobar message when 3D graphics APIs are blocked because the graphics processor was reset recently. NOTE that 'rats' here is being used like 'darn'.">
+      Rats! <ph name="API_NAME">$1<ex>WebGL</ex></ph> hit a snag.
+    </message>
+    <message name="IDS_3D_APIS_WEBGL_NAME" desc="Name of the WebGL API.">
+      WebGL
+    </message>
+    <message name="IDS_3D_APIS_PEPPER_3D_NAME" desc="Name of the Pepper 3D API.">
+      Pepper 3D
+    </message>
+    <message name="IDS_3D_APIS_BLOCKED_OK_BUTTON_LABEL" desc="Label for the 'ok' button on the infobar indicating that 3D APIs were blocked. Clicking this button dismisses the infobar with no other action.">
+      Ignore
+    </message>
+    <message name="IDS_3D_APIS_BLOCKED_TRY_AGAIN_BUTTON_LABEL" desc="Label for the 'cancel' button on the infobar indicating that 3D APIs were blocked. Clicking this button unblocks the APIs and reloads the page.">
+      Reload
+    </message>
+
+    <!-- Supervised User Warning Infobar -->
+    <message name="IDS_SUPERVISED_USER_WARN_INFOBAR_MESSAGE" desc="Infobar message when browsing a site that is not explicitly permitted by a whitelist or manual exception.">
+      You're browsing on a site that may not be something you really want to see.
+    </message>
+    <message name="IDS_SUPERVISED_USER_WARN_INFOBAR_GO_BACK" desc="Label for the button that goes back to a 'safe' page.">
+      Take me back!
+    </message>
+
+    <!-- Password generation strings -->
+    <message name="IDS_PASSWORD_GENERATION_BUBBLE_TITLE" desc="The title of the bubble asking users if they would like Chrome to generate a password for them on an account creation page.">
+      Password Suggestion
+    </message>
+    <message name="IDS_PASSWORD_GENERATION_BUTTON_TEXT" desc="The text on the button that users click to accept the generated password">
+      Try it
+    </message>
+
+    <!-- Identity internals strings -->
+    <message name="IDS_IDENTITY_INTERNALS_TOKEN_CACHE_TEXT" desc="The title of the token cache of the Identity API.">
+      Identity API Token Cache
+    </message>
+    <message name="IDS_IDENTITY_INTERNALS_ACCESS_TOKEN" desc="Label of the row containing the access token.">
+      Access Token
+    </message>
+    <message name="IDS_IDENTITY_INTERNALS_EXTENSION_NAME" desc="Label of the row containing a name of an extension related to the identity token.">
+      Extension Name
+    </message>
+    <message name="IDS_IDENTITY_INTERNALS_EXTENSION_ID" desc="Label of the row containing an id of an extension related to the identity token.">
+      Extension Id
+    </message>
+    <message name="IDS_IDENTITY_INTERNALS_TOKEN_STATUS" desc="Label of the row containing a status of identity token.">
+      Token Status
+    </message>
+    <message name="IDS_IDENTITY_INTERNALS_TOKEN_NOT_FOUND" desc="Label of the token status when token is not found.">
+      Not Found
+    </message>
+    <message name="IDS_IDENTITY_INTERNALS_TOKEN_PRESENT" desc="Label of the token status when token is present and valid for use.">
+      Token Present
+    </message>
+    <message name="IDS_IDENTITY_INTERNALS_EXPIRATION_TIME" desc="Label of the row containing expiration time of identity token.">
+      Expiration Time
+    </message>
+    <message name="IDS_IDENTITY_INTERNALS_SCOPES" desc="Label of the row listing scopes of identity token.">
+      Scopes
+    </message>
+    <message name="IDS_IDENTITY_INTERNALS_REVOKE" desc="Label on a revoke token button.">
+      Revoke
+    </message>
+
+    <!-- Translated apps strings -->
+    <message name="IDS_CHROME_SHORTCUT_DESCRIPTION" desc="Description for the Chrome app shortcut in the app launcher.">
+      A fast, simple, and secure web browser, built for the modern web.
+    </message>
+    <message name="IDS_WEBSTORE_NAME_STORE" desc="Name for the WebStore app in the app launcher.">
+      Web Store
+    </message>
+    <message name="IDS_WEBSTORE_APP_DESCRIPTION" desc="Description for the WebStore app.">
+      Discover great apps, games, extensions and themes for Google Chrome.
+    </message>
+
+    <!-- WebStore search results -->
+    <message name="IDS_WEBSTORE_RESULT_INSTALL" desc="Text of button on WebStore search result for installing an extension/app.">
+      Add
+    </message>
+    <message name="IDS_WEBSTORE_RESULT_LAUNCH" desc="Text of button on WebStore search result for launching an ephemeral app.">
+      Try
+    </message>
+    <message name="IDS_WEBSTORE_RESULT_LAUNCH_APP_TOOLTIP" desc="Tooltip of button on WebStore search result for launching an ephemeral app.">
+      Try app without installing
+    </message>
+
+    <!-- Extension Storage Monitor notification strings -->
+    <message name="IDS_EXTENSION_STORAGE_MONITOR_TITLE" desc="The title of the notification when high disk usage is detected for an app or extension.">
+      High disk usage detected
+    </message>
+    <message name="IDS_EXTENSION_STORAGE_MONITOR_TEXT" desc="The message of the notification when high disk usage is detected for an app or extension.">
+      <ph name="NAME">$1<ex>Google Docs</ex></ph> is using <ph name="USAGE">$2<ex>500</ex></ph> MB of disk space.
+    </message>
+    <message name="IDS_EXTENSION_STORAGE_MONITOR_BUTTON_DISMISS_APP" desc="Caption for the button to suppress high disk usage notifications for an app.">
+      Don't warn again for this app
+    </message>
+    <message name="IDS_EXTENSION_STORAGE_MONITOR_BUTTON_DISMISS_EXTENSION" desc="Caption for the button to suppress high disk usage notifications for an extension.">
+      Don't warn again for this extension
+    </message>
+    <message name="IDS_EXTENSION_STORAGE_MONITOR_BUTTON_UNINSTALL_APP" desc="Caption for the button to uninstall an app when high disk usage is detected.">
+      Remove app
+    </message>
+    <message name="IDS_EXTENSION_STORAGE_MONITOR_BUTTON_UNINSTALL_EXTENSION" desc="Caption for the button to uninstall an extension when high disk usage is detected.">
+      Remove extension
+    </message>
+
+    <!-- Desktop media picker UI for Desktop Capture API -->
+    <message name="IDS_DESKTOP_MEDIA_PICKER_TITLE" desc="Title for the window picker dialog shown when desktop capture is requested by an app.">
+      Share your screen - <ph name="APP_NAME">$1<ex>Google Hangouts</ex></ph>
+    </message>
+    <message name="IDS_DESKTOP_MEDIA_PICKER_TEXT" desc="Text for the window picker dialog shown when desktop capture is requested by an app to be used by the app itself.">
+      <ph name="APP_NAME">$1<ex>Google Hangouts</ex></ph> would like to share the contents of your screen. Choose what you'd like to share.
+    </message>
+    <message name="IDS_DESKTOP_MEDIA_PICKER_TEXT_DELEGATED" desc="Text for the window picker dialog shown when desktop capture is requested by an app to be used by a tab.">
+      <ph name="APP_NAME">$1<ex>Google Hangouts</ex></ph> would like to share the content of your screen with <ph name="TARGET_NAME">$2<ex>https://google.com</ex></ph>. Choose what you'd like to share.
+    </message>
+    <message name="IDS_DESKTOP_MEDIA_PICKER_SINGLE_SCREEN_NAME" desc="Name for screens in the desktop media picker UI when there is only one monitor.">
+      Entire screen
+    </message>
+    <message name="IDS_DESKTOP_MEDIA_PICKER_MULTIPLE_SCREEN_NAME" desc="Name for screens in the desktop media picker UI when there are multiple monitors.">
+      Screen <ph name="SCREEN_INDEX">$1<ex>1</ex></ph>
+    </message>
+
+    <!-- Local Device Discovery display strings -->
+    <if expr="enable_service_discovery">
+      <message name="IDS_FLAGS_ENABLE_CLOUD_DEVICES_NAME" desc="Name of the 'Enable Cloud Devices' lab.">
+        Enable Google Cloud Devices
+      </message>
+      <message name="IDS_FLAGS_ENABLE_CLOUD_DEVICES_DESCRIPTION" desc="Description of the 'Enable Cloud Devices' lab.">
+        Enabled Google Cloud Devices features.
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_SERVICE_REGISTER" desc="Name for button to register device in the Cloud">
+        Register
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_MANAGE_DEVICE" desc="Name for button to manage registered device">
+        Manage
+      </message>
+      <message name="IDS_LOCAL_DISOCVERY_NOTIFICATION_TITLE_PRINTER" desc="Title of notification for a new printer showing up on your network">
+        New printer on your network
+      </message>
+      <message name="IDS_LOCAL_DISOCVERY_NOTIFICATION_CONTENTS_PRINTER" desc="Contents of notification for a new printer showing up on your network">
+        Add the printer to Google Cloud Print so you can print from anywhere.
+      </message>
+      <message name="IDS_LOCAL_DISOCVERY_NOTIFICATION_TITLE_PRINTER_MULTIPLE" desc="Title of notification for a new printer showing up on your network">
+      New printers on your network
+      </message>
+      <message name="IDS_LOCAL_DISOCVERY_NOTIFICATION_CONTENTS_PRINTER_MULTIPLE" desc="Contents of notification for a new printer showing up on your network">
+        Add the printers to Google Cloud Print so you can print from anywhere.
+      </message>
+      <message name="IDS_LOCAL_DISOCVERY_SERVICE_NAME_PRINTER" desc="Display name for notification for a new printer showing up on your network">
+        Google Cloud Print
+      </message>
+      <message name="IDS_LOCAL_DISOCVERY_NOTIFICATION_BUTTON_PRINTER" desc="Message on registration button for printer">
+        Add to Cloud Print
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_DEVICES_PAGE_TITLE" desc="Title for devices page">
+        Devices
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_REGISTER_PRINTER_CONFIRMATION" desc="Confirmation for registering a printer to Google Cloud Print">
+        Do you wish to register the printer <ph name="PRINTER_NAME">$1</ph> to Google Cloud Print?
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_REGISTER_DEVICE_CONFIRMATION" desc="Confirmation for registering a device to Google Cloud Devices">
+        Do you wish to register <ph name="DEVICE_NAME">$1</ph> to Google Cloud Devices?
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_REGISTER_USER" desc="Label for user picker in registration dialog">
+        User:
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_CONFIRM_REGISTRATION" desc="Title for 'confirm registration' page">
+        Confirm registration
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_ADDING_PRINTER" desc="Title for 'adding printer' page">
+        Adding printer...
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_ADDING_DEVICE" desc="Title for 'adding device' page">
+        Adding device...
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_ERROR_OCURRED" desc="Title for error page">
+        Could not complete registration
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_ADDING_PRINTER_MESSAGE1" desc="Message for adding printer number 1">
+        You must confirm registration on your printer to finish this process - check it now.
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_ADDING_PRINTER_MESSAGE2" desc="Message for adding printer number 2">
+        Adding the printer to your account - this may take a moment...
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_ADDING_DEVICE_MESSAGE1" desc="Message for adding device number 1">
+        Adding the device to your account - this may take a moment...
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_CONFIRM_CODE_MESSAGE" desc="Message for confirming device security code">
+        Make sure the device is showing the same code.
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_CONFIRM_CODE" desc="button name to confirming security code">
+        Confirm
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_ERROR_OCURRED_MESSAGE" desc="Message for error page">
+        An error has occured. Please check your printer and try again.
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_NO_DESCRIPTION_PRINTER" desc="Description for printer with an empty description">
+        Printer on Google Cloud Print
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_NO_DESCRIPTION_DEVICE" desc="Description for device with an empty description">
+        Device on Google Cloud Devices
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_PRINTERS_ON_NETWORK_ZERO" desc="'Zero' case for number indicator for locally discoverable printers">
+        No other available devices.
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_PRINTERS_ON_NETWORK_ONE" desc="'One' case for number indicator for locally discoverable printers">
+        One other available device.
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_PRINTERS_ON_NETWORK_MULTIPLE" desc="General case for number indicator for locally discoverable printers">
+        <ph name="NUM_PRINTERS">$1</ph> other available devices.
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_LOADING" desc="Loading for local discovery screens">
+        Loading
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_ADD_PRINTERS" desc="Text on button to add printers to cloud print">
+        Add Devices
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_NO_PRINTERS_ON_NETWORK_EXPLANATION" desc="Explanatory text in case there are no printers to register on the network">
+        Looks like there are no devices available to register on the network. If your device is on and connected to the internet, try registering it using instructions in its instruction manual.
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_CLOUD_DEVICES_UNAVAILABLE" desc="Explanatory text in case the list of cloud devices can't be retrieved">
+        Could not load devices.
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_RETRY_LOAD_CLOUD_DEVICES" desc="Text on button to retry loading cloud devices">
+        Try again
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_CLOUD_DEVICES_NEED_LOGIN" desc="Text on login promo for local discovery page">
+        You need to sign in to Chrome to see your devices
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_REGISTER_NEED_LOGIN" desc="Text on login promo for local discovery registration">
+        You need to sign in to Chrome to register new devices
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_CLOUD_DEVICES_LOGIN" desc="Text on login button for local discovery page">
+        sign in
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_DEVICES_PAGE_BUTTON" desc="Text on button to take user to devices page">
+        Manage
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_AVAILABLE_DEVICES" desc="Title for 'available devices' section in devices page">
+        New devices
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_MY_DEVICES" desc="Title for 'my devices' section in devices page">
+        My devices
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_CLOUD_PRINT_CONNECTOR_DISABLED_LABEL" desc="In local discovery page: The label of the cloud print setup button when it hasn't been set up yet.">
+        You can add classic printers connected to your computer to <ph name="CLOUD_PRINT_NAME">$1<ex>Google Cloud Print</ex></ph>.
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_CONNECTOR_SECTION" desc="In local discovery page: Title of cloud print connector section.">
+        Classic printers
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_NOTIFICATIONS_ENABLE_CHECKBOX_LABEL" desc="Label for notificatiosn-enable checkbox">
+        Show notifications when new printers are detected on the network
+      </message>
+      <message name="IDS_LOCAL_DISCOVERY_NOTIFICATIONS_DISABLE_BUTTON_LABEL" desc="Label for button disabling local device notifications">
+        Don't show this again
+      </message>
+    </if>
+    <!-- People search strings -->
+    <message name="IDS_PEOPLE_SEARCH_ACTION_EMAIL_TOOLTIP" desc="Tooltip text for sending an email to the person in the result">
+      Email this person
+    </message>
+    <message name="IDS_PEOPLE_SEARCH_ACTION_CHAT_TOOLTIP" desc="Tooltip text for starting a chat with the person in the result">
+      Chat with this person
+    </message>
+    <message name="IDS_LOCAL_DISCOVERY_REGISTER_CANCELED_ON_PRINTER" desc="Label for when registration is canceled on the printer side">
+      Printer registration has been canceled.
+    </message>
+    <message name="IDS_LOCAL_DISCOVERY_REGISTER_TIMEOUT_ON_PRINTER" desc="Label for when registration has timed out on the printer side">
+      Printer registration has timed out. In order to register a printer, you must confirm registration on the printer.
+    </message>
+
+    <!--Tab media indicator tooltip strings-->
+    <message name="IDS_TOOLTIP_TAB_MEDIA_STATE_RECORDING" desc="Extra tool tip text, when the tab is recording media.">
+      This tab is using your camera or microphone.
+    </message>
+    <message name="IDS_TOOLTIP_TAB_MEDIA_STATE_CAPTURING" desc="Extra tool tip text, when the tab content is being captured.">
+      This tab's content is being shared.
+    </message>
+    <message name="IDS_TOOLTIP_TAB_MEDIA_STATE_AUDIO_PLAYING" desc="Extra tool tip text, when the tab is playing audio.">
+      This tab is playing audio.
+    </message>
+    <message name="IDS_TOOLTIP_TAB_MEDIA_STATE_AUDIO_MUTING" desc="Extra tool tip text, when all tab audio output is muted.">
+      This tab's audio is being muted.
+    </message>
+
+    <!-- ProcessSingleton -->
+    <message name="IDS_PROFILE_IN_USE_LINUX_QUIT" desc="Text of button in profile in use dialog to quit without doing anything.">
+      Quit
+    </message>
+    <message name="IDS_PROFILE_IN_USE_LINUX_RELAUNCH" desc="Text of button in dialog to delete the profile lock file.">
+      Unlock Profile and Relaunch
+    </message>
+
+    <!-- Accessibility alerts -->
+    <if expr="chromeos">
+      <message name="IDS_A11Y_ALERT_WINDOW_NEEDED" desc="Alert sent to the accessibility api when the user attempts a keyboard command that requires a window to work.">
+        Command unavailable. Press control-N to open a new window.
+      </message>
+      <message name="IDS_A11Y_ALERT_WINDOW_OVERVIEW_MODE_ENTERED" desc="The accessible text read when the user enters window overview mode in Ash.">
+        Entered window overview mode
+      </message>
+    </if>
+
+    <message name="IDS_DESKTOP_MEDIA_PICKER_SHARE" desc="Used for Share on buttons">
+      Share
+    </message>
+
+    <message name="IDS_REMEMBER_CERTIFICATE_ERROR_DECISION_CHOICE_ONE_DAY">
+      Remember for one day
+    </message>
+    <message name="IDS_REMEMBER_CERTIFICATE_ERROR_DECISION_CHOICE_THREE_DAYS">
+      Remember for three days
+    </message>
+    <message name="IDS_REMEMBER_CERTIFICATE_ERROR_DECISION_CHOICE_ONE_WEEK">
+      Remember for one week
+    </message>
+    <message name="IDS_REMEMBER_CERTIFICATE_ERROR_DECISION_CHOICE_ONE_MONTH">
+      Remember for one month
+    </message>
+    <message name="IDS_REMEMBER_CERTIFICATE_ERROR_DECISION_CHOICE_THREE_MONTHS">
+      Remember for three months
+    </message>
+
+    <!-- Zero suggest experiment flags -->
+    <if expr="is_android">
+      <message name="IDS_FLAGS_ZERO_SUGGEST_EXPERIMENT_NAME" desc="An about:flags experiment for zero suggest">
+        Zero Suggest
+      </message>
+      <message name="IDS_FLAGS_ZERO_SUGGEST_EXPERIMENT_DESCRIPTION" desc="Describes about:flags experiment options for zero suggest">
+        NOTE: Only works dev and canary channels. Turns on suggestions in the omnibox that are shown on focus before typing.
+      </message>
+      <message name="IDS_FLAGS_ZERO_SUGGEST_MOST_VISITED" desc="A choice in dropdown dialog on about:flags page for the most visited sites option">
+        Most visited
+      </message>
+      <message name="IDS_FLAGS_ZERO_SUGGEST_ETHER_SERP" desc="A choice in dropdown dialog on about:flags page to show zero suggest on http pages and Google.com">
+        Related URLs and Google.com searches
+      </message>
+      <message name="IDS_FLAGS_ZERO_SUGGEST_ETHER_NO_SERP" desc="A choice in dropdown dialog on about:flags page to show zero suggest on http pages only">
+        Related URLs only
+      </message>
+      <message name="IDS_FLAGS_ZERO_SUGGEST_PERSONALIZED" desc="A choice in dropdown dialog on about:flags page to show personalized zero-prefix suggestions">
+        Personalized
+      </message>
+    </if>
+    <message name="IDS_FLAGS_DISABLE_IGNORE_AUTOCOMPLETE_OFF_NAME" desc="Name of the disable ignore autocomplete='off' lab">
+      Disable ignore autocomplete='off'
+    </message>
+    <message name="IDS_FLAGS_DISABLE_IGNORE_AUTOCOMPLETE_OFF_DESCRIPTION" desc="Description of the disable ignore autocomplete='off' lab">
+      Disable ignore autocomplete='off' for password forms in the password manager.
+    </message>
+
+    <!-- Reader mode experiment flags -->
+    <if expr="is_android">
+      <message name="IDS_FLAGS_READER_MODE_EXPERIMENT_NAME" desc="An about:flags experiment for reading mode UI">
+        Enable Reader Mode Toolbar Icon
+      </message>
+      <message name="IDS_FLAGS_READER_MODE_EXPERIMENT_DESCRIPTION" desc="Describes about:flags experiment options for reading mode UI">
+        Adds a button to the toolbar for viewing a more readable version of the current page.
+      </message>
+    </if>
+    <!-- Prefetch search results experiment flags -->
+    <message name="IDS_FLAGS_PREFETCH_SEARCH_RESULTS_NAME" desc="An about::flags experiment title to prefetch search results">
+      Prefetch search results
+    </message>
+    <message name="IDS_FLAGS_PREFETCH_SEARCH_RESULTS_DESCRIPTION" desc="Describes an about:flags experiment for prefetching search results">
+      If enabled, prefetch search results for the typed omnibox query and reuse prerendered search base page to commit any search query (not just prefetch query).
+    </message>
+
+    <!-- Settings window flags -->
+    <message name="IDS_FLAGS_ENABLE_SETTINGS_WINDOW_NAME" desc="An about::flags experiment title to show settings in a separate window">
+      Show settings in a window
+    </message>
+    <message name="IDS_FLAGS_ENABLE_SETTINGS_WINDOW_DESCRIPTION" desc="Describes an about:flags experiment to show settings in a separate window">
+      If enabled, Settings will be shown in a dedicated window instead of as a browser tab.
+    </message>
+
+    <!-- Instant search clicks experiment flags -->
+    <if expr="is_android">
+      <message name="IDS_FLAGS_ENABLE_INSTANT_SEARCH_CLICKS_NAME" desc="Title for the flag to enable instant search clicks">
+        Prefetch search results
+      </message>
+      <message name="IDS_FLAGS_ENABLE_INSTANT_SEARCH_CLICKS_DESCRIPTION" desc="Description to enable instant search clicks">
+        If enabled, prefetch previews for search results and swap them with original page when is downloaded and rendered.
+      </message>
+    </if>
+
+    <!-- Mixed content issue workaround flags -->
+    <message name="IDS_FLAGS_ALLOW_INSECURE_WEBSOCKET_FROM_HTTPS_ORIGIN_NAME" desc="Title for the flag to allow insecure WebSocket from https origin">
+      Allow insecure WebSocket from https origin
+    </message>
+    <message name="IDS_FLAGS_ALLOW_INSECURE_WEBSOCKET_FROM_HTTPS_ORIGIN_DESCRIPTION" desc="Description to allow insecure WebSocket from https origin">
+      This flag makes Chrome unsafe. Use this only if you understand what this does. Note that this flag may be removed without any notice. If enabled, frames with an https origin can use WebSockets with an insecure URL (ws://).
+    </message>
+
+    <if expr="is_android">
+      <!-- Experiment flags to enable EmbeddedSearch API in the search results page -->
+      <message name="IDS_FLAGS_ENABLE_EMBEDDEDSEARCH_API_NAME" desc="An about::flags experiment title to enable EmbeddedSearch API in the search results page">
+        Enable EmbeddedSearch API
+      </message>
+      <message name="IDS_FLAGS_ENABLE_EMBEDDEDSEARCH_API_DESCRIPTION" desc="Describes an about:flags experiment for enabling EmbeddedSearch API in the search results page">
+       If enabled, EmbeddedSearch API will be used to submit search queries in the search results page.
+      </message>
+
+      <!-- App install alerts flags -->
+      <message name="IDS_FLAGS_ENABLE_APP_INSTALL_ALERTS_NAME" desc="Title for the flag to allow app install alerts">
+        Enable app install alerts
+      </message>
+      <message name="IDS_FLAGS_ENABLE_APP_INSTALL_ALERTS_DESCRIPTION" desc="Description to allow app install alerts">
+        If enabled, websites will be parsed for app install alert meta tags.
+      </message>
+    </if>
+
+   <!-- Extension Content Verification -->
+    <message name="IDS_FLAGS_EXTENSION_CONTENT_VERIFICATION_NAME" desc="Name of the 'Extension Content Verification' flag">
+      Extension Content Verification
+    </message>
+    <message name="IDS_FLAGS_EXTENSION_CONTENT_VERIFICATION_DESCRIPTION" desc="Title for the flag to turn on verification of the contents of extensions from the webstore">
+      This flag can be used to turn on verification that the contents of the files on disk for extensions from the webstore match what they're expected to be. This can be used to turn on this feature if it would not otherwise have been turned on, but cannot be used to turn it off (because this setting can be tampered with by malware).
+    </message>
+
+    <message name="IDS_FLAGS_EXTENSION_CONTENT_VERIFICATION_BOOTSTRAP" desc="Description of the 'Extension Content Verification' bootstrap mode">
+      Bootstrap (get expected hashes, but do not enforce them)
+    </message>
+
+    <message name="IDS_FLAGS_EXTENSION_CONTENT_VERIFICATION_ENFORCE" desc="Description of the 'Extension Content Verification' enforce mode">
+      Enforce (try to get hashes, and enforce them if successful)
+    </message>
+
+    <message name="IDS_FLAGS_EXTENSION_CONTENT_VERIFICATION_ENFORCE_STRICT" desc="Description of the 'Extension Content Verification' enforce strict mode">
+      Enforce strict (hard fail if we can't get hashes)
+    </message>
+
+    <!-- Push messaging strings -->
+    <message name="IDS_PUSH_MESSAGES_PERMISSION_QUESTION" desc="Question asked on the info bar whenever a domain wants to send push messages">
+        <ph name="URL">
+          $1<ex>push.google.com</ex>
+        </ph> wants to send you notifications.
+    </message>
+    <message name="IDS_PUSH_MESSAGES_TAB_LABEL" desc="Label for the push messages section on Content Settings dialog">
+      Push Messages
+    </message>
+    <message name="IDS_PUSH_MESSSAGING_ALLOW_RADIO" desc="A radio button in Content Settings dialog to allow a site to send push messages.">
+      Allow all sites to send background push messages
+    </message>
+    <message name="IDS_PUSH_MESSSAGING_ASK_RADIO" desc="A radio button in Content Settings dialog to allow a site to query the permision send push messages.">
+      Ask me when a site wants to send me push messages (recommended)
+    </message>
+    <message name="IDS_PUSH_MESSSAGING_BLOCK_RADIO" desc="A radio button in Content Settings dialog to deny a site to send push messages.">
+      Do not allow any sites to send push messages
+    </message>
+    <message name="IDS_PUSH_MESSAGES_BUBBLE_FRAGMENT" desc="Question asked on the info bar whenever a domain wants to send push messages">
+        push notifications
+    </message>
+
+    <!-- Easy Unlock strings -->
+    <!-- Strings for the Easy Unlock promo notification -->
+    <message name="IDS_EASY_UNLOCK_SETUP_NOTIFICATION_TITLE" desc="Title for the notification inviting the user to use the Easy Unlock feature.">
+      Chrome Smart Lock
+    </message>
+    <message name="IDS_EASY_UNLOCK_SETUP_NOTIFICATION_MESSAGE" desc="The body text for the notification inviting the user to use the Easy Unlock feature.">
+      Use your Android phone to unlock this <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>. No need to type your password again.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SETUP_NOTIFICATION_BUTTON_TITLE" desc="The text to show on the button in the notification inviting the user to use the Easy Unlock feature.">
+      1-minute setup
+    </message>
+    <!-- Strings for the Easy Unlock success notification -->
+    <message name="IDS_EASY_UNLOCK_SUCCESS_NOTIFICATION_TITLE" desc="Title for the notification informing the user that Easy Unlock has been successfully set up.">
+      All set!
+    </message>
+    <message name="IDS_EASY_UNLOCK_SUCCESS_NOTIFICATION_MESSAGE" desc="The body text for the notification informing the user that Easy Unlock has been successfully set up.">
+      You can unlock this <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> when you and your Android phone are nearby.
+    </message>
+    <!-- Strings for notification shown when the Chromebook is added to Easy Unlock -->
+    <message name="IDS_EASY_UNLOCK_CHROMEBOOK_ADDED_NOTIFICATION_TITLE" desc="Title for notification shown when this Chromebook is added to Easy Unlock as an additional Easy Unlock device.">
+      Smart Lock is almost ready
+    </message>
+    <message name="IDS_EASY_UNLOCK_CHROMEBOOK_ADDED_NOTIFICATION_MESSAGE" desc="Message for the notification shown when this Chromebook is added to Easy Unlock as an additional Easy Unlock device.">
+      It will be activated next time you unlock this <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>. With Smart Lock, your phone will unlock this device&#8212;without a password. Bluetooth will be turned on to enable Smart Lock.
+    </message>
+    <message name="IDS_EASY_UNLOCK_CHROMEBOOK_ADDED_NOTIFICATION_ABOUT_BUTTON" desc="Label of a button on the new chrome notification to bring user to smart lock settings.">
+      About Smart Lock
+    </message>
+    <!-- Strings for the phone changed (aka old Chromebook setup) notification -->
+    <message name="IDS_EASY_UNLOCK_PAIRING_CHANGED_NOTIFICATION_TITLE" desc="Title for notification shown when the paired phone is changed.">
+      Smart Lock phone changed
+    </message>
+    <message name="IDS_EASY_UNLOCK_PAIRING_CHANGED_NOTIFICATION_MESSAGE" desc="Message for notification shown when the paired phone is changed.">
+      Next time you unlock this <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>, Smart Lock will update and you can just click your picture to enter.
+    </message>
+    <message name="IDS_EASY_UNLOCK_PAIRING_CHANGED_NOTIFICATION_UPDATE_BUTTON" desc="Label of a button on the notification shown when the paired phone is changed to update Smart lock now.">
+      Update now
+    </message>
+    <message name="IDS_EASY_UNLOCK_NOTIFICATION_LEARN_MORE_BUTTON" desc="Label of a button on the notification to show Smart lock settings.">
+      Learn more
+    </message>
+    <!-- Strings for the phone change applied notification -->
+    <message name="IDS_EASY_UNLOCK_PAIRING_CHANGE_APPLIED_NOTIFICATION_TITLE" desc="Title for notification shown when the pairing change is applied.">
+      Phone change updated
+    </message>
+    <message name="IDS_EASY_UNLOCK_PAIRING_CHANGE_APPLIED_NOTIFICATION_MESSAGE" desc="Message for notification shown when the pairing change is applied.">
+      Your <ph name="PHONE_NAME">$1<ex>Moto X</ex></ph> can now unlock this <ph name="DEVICE_TYPE">$2<ex>Chromebook</ex></ph> too.
+    </message>
+
+    <!-- Strings for the Easy Unlock setup dialog -->
+    <!-- Step 1: Intro -->
+    <message name="IDS_EASY_UNLOCK_SETUP_INTRO_HEADER_TITLE" desc="The text to show as the header title of the Easy Unlock dialog during the first, introductory step.">
+      Let’s get started
+    </message>
+    <message name="IDS_EASY_UNLOCK_SETUP_INTRO_HEADER_TEXT" desc="The text to show as the header body text of the Easy Unlock dialog during the first, introductory step. Note that the &lt;a&gt; element surrounds a link; these HTML elements should be preserved in the translation.">
+      Keep your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> unlocked when your phone is unlocked and nearby.
+      Note that Bluetooth will be turned on for all <ph name="USER_DISPLAY_EMAIL">$2<ex>user@gmail.com</ex></ph>'s compatible devices, and some hardware information will be sent to Google. &lt;a&gt;Learn more&lt;/a&gt;
+    </message>
+    <message name="IDS_EASY_UNLOCK_SETUP_INTRO_FIND_PHONE_BUTTON_LABEL" desc="The text to show as the 'Find phone' button label in the Easy Unlock dialog. This button is visible during the first, introductory step.">
+      Find your phone
+    </message>
+    <message name="IDS_EASY_UNLOCK_SETUP_INTRO_FINDING_PHONE_BUTTON_LABEL" desc="The text to show as the 'Finding phone...' button label in the Easy Unlock dialog. This button is visible during the first, introductory step.">
+      Finding your phone
+    </message>
+    <message name="IDS_EASY_UNLOCK_SETUP_INTRO_RETRY_FIND_PHONE_BUTTON_LABEL" desc="The text to show as a label for the button in Easy Unlock setup dialog when the setup app fails to find any phones to be used. Finding a phone is the first setup step. Clicking the button restarts the setup flow.">
+      Retry
+    </message>
+    <message name="IDS_EASY_UNLOCK_SETUP_INTRO_HOW_IS_THIS_SECURE_LINK_TEXT" desc="The text to show as the 'How is it secure?' link text in the Easy Unlock dialog. This link is visible during the first, introductory step.">
+      How is it secure?
+    </message>
+    <!-- Step 2: Phone Found -->
+    <message name="IDS_EASY_UNLOCK_SETUP_FOUND_PHONE_HEADER_TITLE" desc="The text to show as the header title of the Easy Unlock dialog during the second step, after a suitable phone has been found.">
+      Use this phone to unlock your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>?
+    </message>
+    <message name="IDS_EASY_UNLOCK_SETUP_FOUND_PHONE_HEADER_TEXT" desc="The text to show as the header body text of the Easy Unlock dialog during the second step, after a suitable phone has been found. Note that the &lt;a&gt; element surrounds a link; these HTML elements should be preserved in the translation.">
+      Google sent a notification to this phone. Note that with Bluetooth, your phone may keep your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> unlocked from over 100 feet away. In cases where this could be a problem, you can &lt;a&gt;temporarily disable this feature&lt;/a&gt;.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SETUP_FOUND_PHONE_USE_THIS_PHONE_BUTTON_LABEL" desc="The text to show as the 'Use this phone' button label in the Easy Unlock dialog. This button is visible during the second step, after a suitable phone is found.">
+      Use this phone
+    </message>
+    <message name="IDS_EASY_UNLOCK_SETUP_PAIRING_PHONE_FAILED_BUTTON_LABEL" desc="Text to show as a label for the button in Easy Unlock setup dialog when pairing Chrome with the phone detected during setup fails. Pairing is the second step in the setup. Clicking the button restarts the whole setup flow.">
+      Restart
+    </message>
+    <!-- Step 3: "You're all set" -->
+    <message name="IDS_EASY_UNLOCK_SETUP_COMPLETE_HEADER_TITLE" desc="The text to show as the header title of the Easy Unlock dialog during the final step, confirming success.">
+      You’re all set!
+    </message>
+    <message name="IDS_EASY_UNLOCK_SETUP_COMPLETE_HEADER_TEXT" desc="The text to show as the header body text of the Easy Unlock dialog during the final step, confirming success.">
+      If you have other Chrome devices, they’ll be synced automatically, so your Android phone can unlock them, too.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SETUP_COMPLETE_TRY_IT_OUT_BUTTON_LABEL" desc="The text to show as the 'Try it out' button label in the Easy Unlock dialog. This button is visible during the final step, once the Easy Unlock setup succeeds.">
+      Try it out
+    </message>
+    <message name="IDS_EASY_UNLOCK_SETUP_COMPLETE_SETTINGS_LINK_TEXT" desc="The text to show as the link text to access Easy Unlock settings. This button is visible during the final step, once the Easy Unlock setup succeeds.">
+      Smart Lock settings
+    </message>
+    <!-- Error strings for the Easy Unlock setup dialog -->
+    <message name="IDS_EASY_UNLOCK_LEARN_MORE_LINK_TITLE" desc="Text to use for links that point to more information about Easy Unlock in the easy unlock setup dialog.">
+      Learn more
+   </message>
+    <message name="IDS_EASY_UNLOCK_SETUP_ERROR_BLUETOOTH_UNAVAILBLE" desc="The error message to display when the user's Chromebook might not have Bluetooth functionality during Easy Unlock setup.">
+      Can’t find your Android phone. Make sure your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> has Bluetooth turned on.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SETUP_ERROR_OFFLINE" desc="The error message to display when the user's Chromebook appears to be offline during Easy Unlock setup.">
+      Can’t find your Android phone. Make sure your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> is online.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SETUP_ERROR_FINDING_PHONE" desc="A generic catch-all error message to display when something goes wrong after the user clicks 'Find my phone' during Easy Unlock setup.">
+      Can’t find your Android phone. Make sure that it’s with you and online.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SETUP_ERROR_BLUETOOTH_CONNECTION_FAILED" desc="The error message to display when the Bluetooth connection between the phone and the Chromebook is disconnected during Easy Unlock setup.">
+      Couldn’t connect your Android phone and <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>. Make sure Bluetooth is turned on for both of your devices.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SETUP_ERROR_CONNECT_TO_PHONE_TIMEOUT" desc="The error message to display when the Chromebook is unable to establish connection to the phone within a reasonable amount of time.">
+      Couldn’t connect your Android phone and <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>. Make sure you’re using a compatible Android phone that is with you and online.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SETUP_ERROR_SYNC_PHONE_STATE_FAILED" desc="The error message to display when the Chromebook fails to sync the phone's state.">
+      Sorry, the service is currently unavailable. Please try again later.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SETUP_ERROR_CONNECTING_TO_PHONE" desc="A generic catch-all error message to display when something goes wrong after the user clicks 'Use this phone' during Easy Unlock setup.">
+      Couldn’t connect your Android phone and <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>. Make sure your Android phone is with you and online.
+    </message>
+    <!-- Easy Unlock strings shown on the lock screen -->
+    <message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_NO_BLUETOOTH" desc="Tooltip for an icon on a user's lock screen pod shown by Easy Unlock when the Chromebook doesn't have Bluetooth enabled.">
+      Bluetooth is off on this <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>. Type in your password to enter, and turn on Bluetooth.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_NO_PHONE" desc="Tooltip for an icon on a user's lock screen pod shown by Easy Unlock when a phone eligible to unlock the Chromebook cannot be found.">
+      Can’t find your Android phone. Make sure it’s with you and Bluetooth is turned on.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_PHONE_NOT_AUTHENTICATED" desc="Tooltip for an icon on a user's lock screen pod shown by Easy Unlock when no phones eligible to unlock the Chromebook can be authenticated.">
+      Unable to unlock. Enter your password.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_PHONE_NOT_NEARBY" desc="Tooltip for an icon on a user's lock screen pod shown by Easy Unlock when a phone eligible to unlock the Chromebook is detected, but it's not in the Chromebook's proximity.">
+      Can’t find your Android phone. Make sure it’s nearby.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_PHONE_LOCKED" desc="Tooltip for an icon on a user's lock screen pod shown by Easy Unlock when a phone eligible to unlock the Chromebook is detected, but it's locked and thus not allowed to unlock the Chromebook.">
+      Your Android phone is locked. Unlock it to enter.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_PHONE_UNLOCKABLE" desc="Tooltip for an icon on a user's lock screen pod shown by Easy Unlock when a phone eligible to unlock the Chromebook is detected, but it does not have lock screen enabled, in which case it is not allowed to unlock Chromebooks.">
+      Your Android phone must have a lock screen enabled before it can unlock this <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>. Otherwise, you will need to type in your password.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_INITIAL_AUTHENTICATED" desc="Tooltip text shown on lock screen when a phone eligible to unlock the Chromebook via Easy Unlock is detected and authenticated for the first time.">
+      When your phone is unlocked and nearby, you can just click to enter. Otherwise, you'll see a locked icon and need to type your password.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_HARDLOCK_INSTRUCTIONS" desc="Tooltip for an icon on user's lock screen pod shown by Easy Unlock when a phone eligible to unlock the Chromebook is detected and authenticated. The tooltip shows instructions for hard-locking the Chromebook.">
+      If you click this icon, you can manually lock this <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>. Next time, you’ll need to enter your password to unlock it.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_UNSUPPORTED_ANDROID_VERSION" desc="Tooltip for the icon on user's lock screen pod shown by Easy Unlock when a phone set up to unlock the Chromebook is detected, but has an unsupported Android version. The user is asked to update the phone.">
+      Please update your phone to a newer version of Android to unlock this <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph>.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_TUTORIAL" desc="Tooltip text shown on lock screen when Easy Unlock is first setup.">
+      This open lock indicates that your phone is unlocked and nearby. Just click your profile picture to enter. If your phone is locked or away, a locked icon will show, and you’ll need to type your password.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_HARDLOCK_USER" desc="Tooltip text shown on a user's lock screen pod when Easy Unlock feature is enabled for the user, but the user hard locked the device. Hard lock is done by clicking the Easy Unlock icon on the user's pod. When a device is hard locked by a user, the Easy Unlock cannot be used to unlock the device as that user. A password has to be entered to unlock the device.">
+      Your <ph name="DEVICE_TYPE">$1<ex>Chromebook</ex></ph> has been manually locked. You'll need to enter your password to unlock it.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_HARDLOCK_PAIRING_CHANGED" desc="Tooltip text shown on a user's lock screen pod when Easy Unlock feature is enabled for the user, but the pairing data is changed. A password has to be entered to unlock the device.">
+      Your phone for Smart Lock changed. Type your password to update Smart Lock on this device. Next time, you can just click your picture to enter.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SCREENLOCK_TOOLTIP_HARDLOCK_PAIRING_ADDED" desc="Tooltip text shown on a user's lock screen pod when Easy Unlock pairing data is synced on a new Chromebook.">
+      One-time activation: Type your password to activate Smart Lock. With Smart Lock, your phone will unlock this Chromebook&#8212;without a password. To change or disable this feature, visit your Chromebook's settings.
+    </message>
+    <message name="IDS_SMART_LOCK_SCREENLOCK_TOOLTIP_HARDLOCK_REAUTH_USER" desc="Tooltip text shown on a user's lock screen pod to reauthenticate the user before setting up Smart Lock. A password has to be entered to unlock the device.">
+      To set up Chrome Smart Lock, Google needs to make sure it's you--type your password to get started.
+    </message>
+    <message name="IDS_EASY_UNLOCK_SCREENLOCK_USER_POD_AUTH_VALUE" desc="Message on lock screen user pod shown in place of password field when Easy Unlock is enabled and a phone that can unlock the Chromebook is detected in proximity.">
+      Click to enter
+    </message>
+    <message name="IDS_SMART_LOCK_SPINNER_ACCESSIBILITY_LABEL" desc="Label for the spinner icon used for accessibility purposes. This label is needed because this state does not have a tooltip.">
+      Finding your phone
+    </message>
+    <!-- Device types -->
+    <message name="IDS_EASY_UNLOCK_GENERIC_DEVICE_TYPE" desc="String for an unknown device type. Currently used to cover all non-ChromeOS devices.">
+      Chrome device
+    </message>
+
+    <!-- Invalid SSL certificate memory strategy strings -->
+    <message name="IDS_FLAGS_REMEMBER_CERTIFICATE_ERROR_DECISIONS_NAME" desc="Name of the remember certificate error decisions lab">
+      Remember decisions to proceed through SSL errors for a specified length of time.
+    </message>
+    <message name="IDS_FLAGS_REMEMBER_CERTIFICATE_ERROR_DECISIONS_DESCRIPTION" desc="Description of the remember certificate error decisions lab">
+      Remember decisions to proceed through SSL errors for a specified length of time.
+    </message>
+
+    <!-- Built-in hotword detection display strings -->
+    <message name="IDS_FLAGS_ENABLE_EXPERIMENTAL_HOTWORDING_NAME" desc="Name of about:flags option for hotword detection.">
+      Enable experimental 'Ok Google' hotword detection features.
+    </message>
+    <message name="IDS_FLAGS_ENABLE_EXPERIMENTAL_HOTWORDING_DESCRIPTION" desc="Description of about:flags option for hotword detection.">
+      Enables experimental 'Ok Google' hotword detection features, such as using the built-in extension. The hotword extension from the Chrome Web Store will no longer be used.
+    </message>
+
+    <!-- Message center strings -->
+    <message name="IDS_FLAGS_ENABLE_MESSAGE_CENTER_ALWAYS_SCROLL_UP_UPON_REMOVAL_NAME" desc="Name of about:flags option for message center always scroll up experiment.">
+      Enable experiments that message center always scroll up upon notification removal.
+    </message>
+    <message name="IDS_FLAGS_ENABLE_MESSAGE_CENTER_ALWAYS_SCROLL_UP_UPON_REMOVAL_DESCRIPTION" desc="Description of about:flags option for message center always scroll up experiment.">
+      Enables experiment that message center always scroll up when a notification is removed.
+    </message>
+  </messages>
+  </release>
+</grit>
--- a/chrome/browser/browser_resources.grd
+++ b/chrome/browser/browser_resources.grd
@@ -447,6 +447,9 @@
         <include name="IDR_BRAILLE_MANIFEST" file="resources\chromeos\braille_ime\manifest.json" type="BINDATA" />
       </if>
       <include name="IDR_WHISPERNET_PROXY_MANIFEST" file="resources\whispernet_proxy\manifest.json" type="BINDATA" />
+      <include name="IDR_FILE_PICKER_HTML" file="resources\file_picker\file_picker.html" type="BINDATA" />
+      <include name="IDR_FILE_PICKER_JS" file="resources\file_picker\file_picker.js" type="BINDATA" />
+      <include name="IDR_FILE_PICKER_CSS" file="resources\file_picker\file_picker.css" type="BINDATA" />
     </includes>
   </release>
 </grit>
--- /dev/null
+++ b/chrome/browser/browser_resources.grd.orig
@@ -0,0 +1,452 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grit latest_public_release="0" current_release="1">
+  <outputs>
+    <output filename="grit/browser_resources.h" type="rc_header">
+      <emit emit_type='prepend'></emit>
+    </output>
+    <output filename="browser_resources.pak" type="data_package" />
+  </outputs>
+  <release seq="1">
+    <structures>
+      <if expr="not is_win and not is_macosx and not is_ios">
+        <structure name="IDR_ABOUT_MEMORY_HTML" file="resources\about_memory_linux.html" flattenhtml="true" type="chrome_html" />
+      </if>
+      <if expr="is_macosx or is_ios">
+        <structure name="IDR_ABOUT_MEMORY_HTML" file="resources\about_memory_mac.html" flattenhtml="true" type="chrome_html" />
+      </if>
+      <if expr="is_win">
+        <structure name="IDR_ABOUT_MEMORY_HTML" file="resources\about_memory.html" flattenhtml="true" type="chrome_html" />
+      </if>
+      <structure name="IDR_ABOUT_MEMORY_CSS" file="resources\about_memory.css" type="chrome_html" />
+      <structure name="IDR_ABOUT_VERSION_HTML" file="resources\about_version.html" flattenhtml="true" allowexternalscript="true" type="chrome_html" />
+      <if expr="is_android">
+        <structure name="IDR_ABOUT_WELCOME_HTML" file="resources\about_welcome_android\about_welcome_android.html" flattenhtml="true" type="chrome_html" />
+      </if>
+      <if expr="enable_app_list">
+        <structure name="IDR_APP_LIST_START_PAGE_CSS" file="resources\app_list\start_page.css" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_APP_LIST_START_PAGE_HTML" file="resources\app_list\start_page.html" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_APP_LIST_START_PAGE_JS" file="resources\app_list\start_page.js" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_APP_LIST_HOTWORD_NACL_NMF" file="resources\app_list\hotword_nacl.nmf" flattenhtml="true" type="chrome_html" />
+      </if>
+      <if expr="is_android">
+        <structure name="IDR_CONTEXTUAL_SEARCH_PROMO_CSS" file="resources\contextual_search\promo.css" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_CONTEXTUAL_SEARCH_PROMO_HTML" file="resources\contextual_search\promo.html" flattenhtml="true" type="chrome_html" />
+      </if>
+      <if expr="chromeos">
+        <structure name="IDR_DEMO_USER_LOGIN_HTML" file="resources\chromeos\login\demo_user_login.html" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_DEMO_USER_LOGIN_JS" file="resources\chromeos\login\demo_user_login.js" flattenhtml="true" type="chrome_html" />
+      </if>
+      <if expr="not is_android">
+        <structure name="IDR_DOWNLOADS_CSS" file="resources\downloads\downloads.css" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_DOWNLOADS_HTML" file="resources\downloads\downloads.html" flattenhtml="true" allowexternalscript="true" type="chrome_html" />
+      </if>
+      <if expr="enable_extensions">
+        <structure name="IDR_EXTENSIONS_HTML" file="resources\extensions\extensions.html" flattenhtml="true" type="chrome_html" />
+      </if>
+      <if expr="chromeos">
+        <structure name="IDR_FIRST_RUN_HTML" file="resources\chromeos\first_run\first_run.html" flattenhtml="true" type="chrome_html"/>
+        <structure name="IDR_FIRST_RUN_JS" file="resources\chromeos\first_run\first_run.js" flattenhtml="true" type="chrome_html" />
+      </if>
+      <if expr="not is_android">
+        <structure name="IDR_HELP_CSS" file="resources\help\help.css" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_HELP_HTML" file="resources\help\help.html" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_HELP_CONTENT_CSS" file="resources\help\help_content.css" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_HELP_CONTENT_HTML" file="resources\help\help_content.html" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_HELP_PAGE_HTML" file="resources\help\help_page.html" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_HELP_CHANNEL_CHANGE_PAGE_CSS" file="resources\help\channel_change_page.css" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_HELP_CHANNEL_CHANGE_PAGE_HTML" file="resources\help\channel_change_page.html" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_INCOGNITO_TAB_HTML" file="resources\ntp4\incognito_tab.html" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_GUEST_TAB_HTML" file="resources\ntp4\guest_tab.html" flattenhtml="true" type="chrome_html" />
+      </if>
+      <if expr="chromeos">
+        <structure name="IDR_LOGIN_HTML" file="resources\chromeos\login\login.html" flattenhtml="true" type="chrome_html" variables="OOBE=login" expand_variables="true"/>
+        <structure name="IDR_LOGIN_JS" file="resources\chromeos\login\login.js" flattenhtml="true" type="chrome_html" />
+      </if>
+      <if expr="not is_android">
+        <structure name="IDR_NEW_INCOGNITO_TAB_THEME_CSS" file="resources\ntp4\new_incognito_tab_theme.css" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_NEW_GUEST_TAB_THEME_CSS" file="resources\ntp4\new_guest_tab_theme.css" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_NEW_TAB_4_HTML" file="resources\ntp4\new_tab.html" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_NEW_TAB_4_THEME_CSS" file="resources\ntp4\new_tab_theme.css" flattenhtml="true" type="chrome_html" />
+      </if>
+      <if expr="chromeos">
+        <structure name="IDR_OOBE_HTML" file="resources\chromeos\login\oobe.html" flattenhtml="true" type="chrome_html" variables="OOBE=oobe" expand_variables="true"/>
+        <structure name="IDR_OOBE_JS" file="resources\chromeos\login\oobe.js" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_OOBE_ENROLLMENT_HTML" file="resources\chromeos\login\oobe_screen_oauth_enrollment.html" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_OOBE_ENROLLMENT_CSS" file="resources\chromeos\login\oobe_screen_oauth_enrollment.css" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_OOBE_ENROLLMENT_JS" file="resources\chromeos\login\oobe_screen_oauth_enrollment.js" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_KEYBOARD_UTILS_JS" file="resources\chromeos\keyboard\keyboard_utils.js" flattenhtml="true" type="chrome_html" />
+        <structure name="IDR_NETWORK_CONFIG_JS" file="resources\chromeos\network\network_config.js" flattenhtml="true" type="chrome_html" />
+        <!-- TODO(dzhioev): move polymer to chrome://resources when
+             http://crbug.com/418199 is fixed. -->
+        <part file="polymer_resources.grdp" />
+      </if>
+      <structure name="IDR_READER_OUT_OF_DATE_HTML" file="resources\reader_out_of_date.html" flattenhtml="true" type="chrome_html" />
+      <structure name="IRD_SECURITY_INTERSTITIAL_HTML" file="resources\security_warnings\interstitial_v2.html" flattenhtml="true" type="chrome_html" />
+    </structures>
+    <includes>
+      <if expr="is_win">
+        <include name="IDR_ABOUT_CONFLICTS_HTML" file="resources\about_conflicts.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+        <include name="IDR_ABOUT_CONFLICTS_JS" file="resources\about_conflicts.js" type="BINDATA" />
+      </if>
+      <if expr="not is_android">
+        <include name="IDR_ABOUT_FLASH_HTML" file="resources\about_flash.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+        <include name="IDR_ABOUT_FLASH_JS" file="resources\about_flash.js" type="BINDATA" />
+      </if>
+      <include name="IDR_ABOUT_MEMORY_JS" file="resources\about_memory.js" flattenhtml="true" type="BINDATA" />
+      <if expr="not disable_nacl">
+        <include name="IDR_ABOUT_NACL_HTML" file="resources\about_nacl.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+        <include name="IDR_ABOUT_NACL_CSS" file="resources\about_nacl.css" flattenhtml="true" type="chrome_html" />
+        <include name="IDR_ABOUT_NACL_JS" file="resources\about_nacl.js" type="BINDATA" />
+      </if>
+      <include name="IDR_ABOUT_STATS_HTML" file="resources\about_stats.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+      <include name="IDR_ABOUT_STATS_JS" file="resources\about_stats.js" type="BINDATA" />
+      <if expr="not is_android">
+        <include name="IDR_ABOUT_SYS_HTML" file="resources\about_sys\about_sys.html" flattenhtml="true" type="BINDATA" />
+      </if>
+      <include name="IDR_ABOUT_VERSION_JS" file="resources\about_version.js" type="BINDATA" />
+      <include name="IDR_ABOUT_VERSION_CSS" file="resources\about_version.css" type="BINDATA" />
+      <include name="IDR_ABOUT_VOICESEARCH_HTML" file="resources\about_voicesearch.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+      <include name="IDR_ABOUT_VOICESEARCH_JS" file="resources\about_voicesearch.js" type="BINDATA" />
+      <include name="IDR_AD_NETWORK_HASHES" file="resources\ad_networks.dat" type="BINDATA" />
+      <include name="IDR_BOOKMARKS_MANIFEST" file="resources\bookmark_manager\manifest.json" type="BINDATA" />
+      <if expr="is_posix and not is_macosx and not is_ios">
+        <include name="IDR_CERTIFICATE_VIEWER_HTML" file="resources\certificate_viewer.html" type="BINDATA" />
+        <include name="IDR_CERTIFICATE_VIEWER_JS" file="resources\certificate_viewer.js" type="BINDATA" />
+        <include name="IDR_CERTIFICATE_VIEWER_CSS" file="resources\certificate_viewer.css" type="BINDATA" />
+      </if>
+      <if expr="enable_app_list">
+        <include name="IDR_CHROME_APP_MANIFEST" file="resources\chrome_app\manifest.json" type="BINDATA" />
+      </if>
+      <if expr="is_android">
+        <include name="IDR_CONTEXTUAL_SEARCH_PROMO_JS" file="resources\contextual_search\promo.js" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_CONTEXTUAL_SEARCH_PROMO_HEADER_SVG" file="resources\contextual_search\header.svg" type="BINDATA" />
+      </if>
+      <if expr="enable_printing">
+        <include name="IDR_CLOUDPRINT_MANIFEST" file="resources\cloud_print_app\manifest.json" type="BINDATA" />
+      </if>
+      <include name="IDR_CRASHES_HTML" file="resources\crashes.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+      <include name="IDR_CRASHES_JS" file="resources\crashes.js" type="BINDATA" />
+      <include name="IDR_CREDITS_HTML" file="${about_credits_file}" use_base_dir="false" type="BINDATA" />
+      <include name="IDR_CREDITS_JS" file="resources\about_credits.js" type="BINDATA" />
+      <if expr="not is_ios">
+        <include name="IDR_DEVTOOLS_DISCOVERY_PAGE_HTML" file="devtools\frontend\devtools_discovery_page.html" type="BINDATA"/>
+      </if>
+      <include name="IDR_DOMAIN_RELIABILITY_INTERNALS_HTML" file="resources\domain_reliability_internals.html" type="BINDATA" />
+      <include name="IDR_DOMAIN_RELIABILITY_INTERNALS_CSS" file="resources\domain_reliability_internals.css" type="BINDATA" />
+      <include name="IDR_DOMAIN_RELIABILITY_INTERNALS_JS" file="resources\domain_reliability_internals.js" type="BINDATA" />
+      <if expr="not is_android">
+        <include name="IDR_DOWNLOADS_JS" file="resources\downloads\downloads.js" type="BINDATA" />
+      </if>
+      <if expr="enable_extensions">
+        <include name="IDR_EXTENSION_COMMAND_LIST_JS" file="resources\extensions\extension_command_list.js" flattenhtml="true" type="BINDATA" />
+        <if expr="is_macosx">
+          <include name="IDR_EXTENSIONS_INFOBAR_CSS" file="resources\extensions_infobar_mac.css" flattenhtml="true" type="BINDATA" />
+        </if>
+        <if expr="not is_macosx">
+          <include name="IDR_EXTENSIONS_INFOBAR_CSS" file="resources\extensions_infobar.css" flattenhtml="true" type="BINDATA" />
+        </if>
+        <include name="IDR_EXTENSION_LIST_JS" file="resources\extensions\extension_list.js" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_EXTENSION_INFO_CSS" file="resources\extensions\extension_info.css" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_EXTENSION_INFO_HTML" file="resources\extensions\extension_info.html" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_EXTENSION_INFO_JS" file="resources\extensions\extension_info.js" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_EXTENSIONS_JS" file="resources\extensions\extensions.js" flattenhtml="true" type="BINDATA" />
+      </if>
+      <include name="IDR_FEEDBACK_MANIFEST" file="resources\feedback\manifest.json" type="BINDATA" />
+      <include name="IDR_FLAGS_HTML" file="resources\flags.html" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_FLAGS_JS" file="resources\flags.js" type="BINDATA" />
+      <if expr="_google_chrome or enable_hangout_services_extension">
+        <!-- Hangout Services extension, included in Google Chrome builds only. -->
+        <include name="IDR_HANGOUT_SERVICES_MANIFEST" file="resources\hangout_services\manifest.json" type="BINDATA" />
+      </if>
+      <include name="IDR_HOTWORD_HELPER_MANIFEST" file="resources\hotword_helper\manifest.json" type="BINDATA" />
+      <include name="IDR_HOTWORD_MANIFEST" file="resources\hotword\manifest.json" type="BINDATA" />
+      <include name="IDR_HOTWORD_AUDIO_VERIFICATION_MANIFEST" file="resources\hotword_audio_verification\manifest.json" type="BINDATA" />
+      <if expr="not is_android">
+        <include name="IDR_HELP_JS" file="resources\help\help.js" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_HELP_PAGE_JS" file="resources\help\help_page.js" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_CHANNEL_CHANGE_PAGE_JS" file="resources\help\channel_change_page.js" flattenhtml="true" type="BINDATA" />
+      </if>
+      <include name="IDR_HISTORY_HTML" file="resources\history\history.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+      <include name="IDR_HISTORY_JS" file="resources\history\history.js" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_OTHER_DEVICES_JS" file="resources\history\other_devices.js" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_IDENTITY_API_SCOPE_APPROVAL_MANIFEST" file="resources\identity_scope_approval_dialog\manifest.json" type="BINDATA" />
+      <include name="IDR_INLINE_LOGIN_HTML" file="resources\inline_login\inline_login.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+      <include name="IDR_INLINE_LOGIN_CSS" file="resources\inline_login\inline_login.css" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_INLINE_LOGIN_JS" file="resources\inline_login\inline_login.js" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_INSPECT_CSS" file="resources\inspect\inspect.css" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_INSPECT_HTML" file="resources\inspect\inspect.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+      <include name="IDR_INSPECT_JS" file="resources\inspect\inspect.js" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_INSTANT_CSS" file="resources\instant\instant.css" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_INSTANT_HTML" file="resources\instant\instant.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+      <include name="IDR_INSTANT_JS" file="resources\instant\instant.js" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_NET_EXPORT_HTML" file="resources\net_export\net_export.html" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_NET_EXPORT_JS" file="resources\net_export\net_export.js" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_NETWORK_SPEECH_SYNTHESIS_MANIFEST" file="resources\network_speech_synthesis\manifest.json" type="BINDATA" />
+      <include name="IDR_PREDICTORS_HTML" file="resources\predictors\predictors.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+      <include name="IDR_PREDICTORS_JS" file="resources\predictors\predictors.js" flattenhtml="true" type="BINDATA" />
+      <if expr="not is_android">
+        <include name="IDR_NOTIFICATION_1LINE_HTML" file="resources\notification_1line.html" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_NOTIFICATION_2LINE_HTML" file="resources\notification_2line.html" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_NOTIFICATION_ICON_HTML" file="resources\notification_icon.html" type="BINDATA" />
+      </if>
+
+      <if expr="enable_service_discovery">
+        <include name="IDR_LOCAL_DISCOVERY_HTML" file="resources\local_discovery\local_discovery.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+        <include name="IDR_LOCAL_DISCOVERY_CSS" file="resources\local_discovery\local_discovery.css" type="BINDATA" />
+        <include name="IDR_LOCAL_DISCOVERY_JS" file="resources\local_discovery\local_discovery.js" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_LOCAL_DISCOVERY_DEVICE_PNG" file="resources\local_discovery\device.png" type="BINDATA" />
+        <include name="IDR_LOCAL_DISCOVERY_PRINTER_PNG" file="resources\local_discovery\printer.png" type="BINDATA" />
+      </if>
+
+      <include name="IDR_INSTANT_IFRAME_VALIDATION_JS" file="resources\local_ntp\instant_iframe_validation.js" type="BINDATA" />
+      <include name="IDR_LOCAL_NTP_HTML" file="resources\local_ntp\local_ntp.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+      <include name="IDR_LOCAL_NTP_CSS" file="resources\local_ntp\local_ntp.css" type="BINDATA" />
+      <include name="IDR_LOCAL_NTP_JS" file="resources\local_ntp\local_ntp.js" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_LOCAL_NTP_UTIL_JS" file="resources\local_ntp\local_ntp_util.js" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_LOCAL_NTP_DESIGN_JS" file="resources\local_ntp\local_ntp_design.js" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_MOST_VISITED_IFRAME_CSS" file="resources\local_ntp\most_visited_iframe.css" type="BINDATA" />
+      <include name="IDR_MOST_VISITED_TITLE_HTML" file="resources\local_ntp\most_visited_title.html" type="BINDATA" />
+      <include name="IDR_MOST_VISITED_TITLE_CSS" file="resources\local_ntp\most_visited_title.css" type="BINDATA" />
+      <include name="IDR_MOST_VISITED_TITLE_JS" file="resources\local_ntp\most_visited_title.js" type="BINDATA" />
+      <include name="IDR_MOST_VISITED_THUMBNAIL_HTML" file="resources\local_ntp\most_visited_thumbnail.html" type="BINDATA" />
+      <include name="IDR_MOST_VISITED_THUMBNAIL_CSS" file="resources\local_ntp\most_visited_thumbnail.css" type="BINDATA" />
+      <include name="IDR_MOST_VISITED_THUMBNAIL_JS" file="resources\local_ntp\most_visited_thumbnail.js" type="BINDATA" />
+      <include name="IDR_MOST_VISITED_UTIL_JS" file="resources\local_ntp\most_visited_util.js" type="BINDATA" flattenhtml="true" />
+      <include name="IDR_MOST_VISITED_WINDOW_DISPOSITION_UTIL_JS" file="resources\local_ntp\window_disposition_util.js" type="BINDATA" />
+      <if expr="is_android">
+        <include name="IDR_ROBOTO_WOFF" file="resources\roboto\roboto.woff" type="BINDATA" />
+        <include name="IDR_ROBOTO_WOFF2" file="resources\roboto\roboto.woff2" type="BINDATA" />
+      </if>
+      <include name="IDR_OMNIBOX_HTML" file="resources\omnibox\omnibox.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+      <include name="IDR_OMNIBOX_CSS" file="resources\omnibox\omnibox.css" type="BINDATA" />
+      <include name="IDR_OMNIBOX_JS" file="resources\omnibox\omnibox.js" type="BINDATA" />
+      <include name="IDR_OMNIBOX_MOJO_JS" file="${omnibox_mojom_file}" use_base_dir="false" type="BINDATA"/>
+      <if expr="not is_android">
+        <include name="IDR_PLUGINS_HTML" file="resources\plugins.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+        <include name="IDR_PLUGINS_JS" file="resources\plugins.js" type="BINDATA" />
+      </if>
+      <include name="IDR_COMPONENTS_HTML" file="resources\components.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+      <include name="IDR_COMPONENTS_JS" file="resources\components.js" type="BINDATA" />
+      <if expr="enable_plugins">
+        <include name="IDR_PDF_MANIFEST" file="resources\pdf\manifest.json" type="BINDATA" />
+      </if>
+      <if expr="is_win">
+        <include name="IDR_PLUGIN_DB_JSON" file="resources\plugin_metadata\plugins_win.json" type="BINDATA" />
+      </if>
+      <if expr="is_macosx">
+        <include name="IDR_PLUGIN_DB_JSON" file="resources\plugin_metadata\plugins_mac.json" type="BINDATA" />
+      </if>
+      <if expr="chromeos">
+        <include name="IDR_PLUGIN_DB_JSON" file="resources\plugin_metadata\plugins_chromeos.json" type="BINDATA" />
+      </if>
+      <if expr="desktop_linux or (is_android and enable_plugins)">
+        <include name="IDR_PLUGIN_DB_JSON" file="resources\plugin_metadata\plugins_linux.json" type="BINDATA" />
+        <include name="IDR_PLATFORM_PLUGIN_DB_JSON" file="resources\plugin_metadata\plugins_ubuntu_linux.json" type="BINDATA" />
+      </if>
+      <if expr="is_android">
+        <include name="IDR_POLICY_CSS" file="resources\policy_android.css" type="BINDATA"/>
+      </if>
+      <if expr="not is_android">
+        <include name="IDR_POLICY_CSS" file="resources\policy.css" type="BINDATA"/>
+      </if>
+      <include name="IDR_POLICY_HTML" file="resources\policy.html" flattenhtml="true" allowexternalscript="true" type="BINDATA"/>
+      <include name="IDR_POLICY_JS" file="resources\policy.js" type="BINDATA"/>
+      <include name="IDR_PRERENDER_URL_WHITELIST" file="resources\prerender_url_whitelist.dat" type="BINDATA"/>
+      <if expr="enable_full_printing">
+        <include name="IDR_PRINT_PREVIEW_HTML" file="resources\print_preview\print_preview.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+        <include name="IDR_PRINT_PREVIEW_PAGE" file="resources\print_preview\print_preview_page.html" flattenhtml="true" allowexternalscript="false" type="BINDATA" />
+        <include name="IDR_PRINT_PREVIEW_JS" file="resources\print_preview\print_preview.js" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_PRINT_PREVIEW_IMAGES_PRINTER"
+                 file="resources\print_preview\images\printer.png" type="BINDATA" />
+        <include name="IDR_PRINT_PREVIEW_IMAGES_PRINTER_SHARED"
+                 file="resources\print_preview\images\printer_shared.png" type="BINDATA" />
+        <include name="IDR_PRINT_PREVIEW_IMAGES_GOOGLE_DOC"
+                 file="resources\print_preview\images\google_doc.png" type="BINDATA" />
+        <include name="IDR_PRINT_PREVIEW_IMAGES_PDF"
+                 file="resources\print_preview\images\pdf.png" type="BINDATA" />
+        <include name="IDR_PRINT_PREVIEW_IMAGES_THIRD_PARTY"
+                 file="resources\print_preview\images\third_party.png" type="BINDATA" />
+        <include name="IDR_PRINT_PREVIEW_IMAGES_THIRD_PARTY_FEDEX"
+                 file="resources\print_preview\images\third_party_fedex.png" type="BINDATA" />
+        <include name="IDR_PRINT_PREVIEW_IMAGES_MOBILE"
+                 file="resources\print_preview\images\mobile.png" type="BINDATA" />
+        <include name="IDR_PRINT_PREVIEW_IMAGES_MOBILE_SHARED"
+                 file="resources\print_preview\images\mobile_shared.png" type="BINDATA" />
+      </if>
+      <include name="IDR_PROFILER_HTML" file="resources\profiler\profiler.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+      <include name="IDR_PROFILER_JS" file="resources\profiler\profiler.js" flattenhtml="true" type="BINDATA" />
+      <if expr="enable_settings_app">
+        <include name="IDR_SETTINGS_APP_MANIFEST" file="resources\settings_app\manifest.json" type="BINDATA" />
+      </if>
+      <if expr="enable_google_now">
+        <include name="IDR_GOOGLE_NOW_MANIFEST" file="resources\google_now\manifest.json" type="BINDATA" />
+      </if>
+      <if expr="not is_android">
+        <include name="IDR_SUGGESTIONS_INTERNALS_HTML" file="resources\suggestions_internals\suggestions_internals.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+        <include name="IDR_SUGGESTIONS_INTERNALS_CSS" file="resources\suggestions_internals\suggestions_internals.css" type="BINDATA" />
+        <include name="IDR_SUGGESTIONS_INTERNALS_JS" file="resources\suggestions_internals\suggestions_internals.js" type="BINDATA" />
+        <include name="IDR_SUGGESTIONS_PAGE_CSS" file="resources\ntp4\suggestions_page.css" type="BINDATA" />
+        <include name="IDR_SUGGESTIONS_PAGE_JS" file="resources\ntp4\suggestions_page.js" type="BINDATA" />
+      </if>
+      <include name="IDR_UBER_HTML" file="resources\uber\uber.html" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_UBER_JS" file="resources\uber\uber.js" type="BINDATA" />
+      <include name="IDR_UBER_FRAME_HTML" file="resources\uber\uber_frame.html" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_UBER_FRAME_JS" file="resources\uber\uber_frame.js" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_UBER_UTILS_JS" file="resources\uber\uber_utils.js" type="BINDATA" />
+      <include name="IDR_USER_ACTIONS_HTML" file="resources\user_actions\user_actions.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+      <include name="IDR_USER_ACTIONS_CSS" file="resources\user_actions\user_actions.css" type="BINDATA" />
+      <include name="IDR_USER_ACTIONS_JS" file="resources\user_actions\user_actions.js" type="BINDATA" />
+      <if expr="enable_webrtc">
+        <include name="IDR_WEBRTC_LOGS_HTML" file="resources\media\webrtc_logs.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+        <include name="IDR_WEBRTC_LOGS_JS" file="resources\media\webrtc_logs.js" type="BINDATA" />
+      </if>
+      <include name="IDR_WEBSTORE_MANIFEST" file="resources\webstore_app\manifest.json" type="BINDATA" />
+      <include name="IDR_CRYPTOTOKEN_MANIFEST" file="resources\cryptotoken\manifest.json" type="BINDATA" />
+      <include name="IDR_GAIA_AUTH_MANIFEST" file="resources\gaia_auth\manifest.json" type="BINDATA" />
+      <include name="IDR_GAIA_AUTH_KEYBOARD_MANIFEST" file="resources\gaia_auth\manifest_keyboard.json" type="BINDATA" />
+      <if expr="chromeos">
+        <include name="IDR_CHOOSE_MOBILE_NETWORK_HTML" file="resources\chromeos\choose_mobile_network.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+        <include name="IDR_CHOOSE_MOBILE_NETWORK_JS" file="resources\chromeos\choose_mobile_network.js" type="BINDATA" />
+        <include name="IDR_CROSH_BUILTIN_MANIFEST" file="resources\chromeos\crosh_builtin\manifest.json" type="BINDATA" />
+        <include name="IDR_CRYPTOHOME_HTML" file="resources\chromeos\cryptohome.html" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_CRYPTOHOME_JS" file="resources\chromeos\cryptohome.js" type="BINDATA" />
+        <!-- manifest file of Connectivity Diagnostics app -->
+        <include name="IDR_CONNECTIVITY_DIAGNOSTICS_MANIFEST" file="resources\chromeos\connectivity_diagnostics\manifest.json" type="BINDATA" />
+        <include name="IDR_CONNECTIVITY_DIAGNOSTICS_LAUNCHER_MANIFEST" file="resources\chromeos\connectivity_diagnostics_launcher\manifest.json" type="BINDATA" />
+        <!-- manifest file of built-in speech synthesis extension -->
+        <include name="IDR_SPEECH_SYNTHESIS_MANIFEST" file="resources\chromeos\speech_synthesis\manifest.json" type="BINDATA" />
+        <include name="IDR_SPEECH_SYNTHESIS_GUEST_MANIFEST" file="resources\chromeos\speech_synthesis\manifest_guest.json" type="BINDATA" />
+        <include name="IDR_DRIVE_INTERNALS_CSS" file="resources\chromeos\drive_internals.css" type="BINDATA" />
+        <include name="IDR_DRIVE_INTERNALS_HTML" file="resources\chromeos\drive_internals.html" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_DRIVE_INTERNALS_JS" file="resources\chromeos\drive_internals.js" type="BINDATA" />
+        <include name="IDR_PROVIDED_FILE_SYSTEMS_CSS" file="resources\chromeos\provided_file_systems.css" type="BINDATA" />
+        <include name="IDR_PROVIDED_FILE_SYSTEMS_HTML" file="resources\chromeos\provided_file_systems.html" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_PROVIDED_FILE_SYSTEMS_JS" file="resources\chromeos\provided_file_systems.js" flattenhtml="true" type="BINDATA" />
+         <include name="IDR_GUEST_SESSION_TAB_HTML" file="resources\chromeos\guest_session_tab.html" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_IMAGEBURNER_HTML" file="resources\chromeos\image_burner.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+        <include name="IDR_IMAGEBURNER_JS" file="resources\chromeos\image_burner.js" type="BINDATA" />
+        <include name="IDR_KEYBOARD_OVERLAY_CSS" file="resources\chromeos\keyboard_overlay.css" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_KEYBOARD_OVERLAY_HTML" file="resources\chromeos\keyboard_overlay.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+        <include name="IDR_KEYBOARD_OVERLAY_JS" file="resources\chromeos\keyboard_overlay.js" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_MOBILE_MANIFEST" file="resources\chromeos\mobile_app\manifest.json" type="BINDATA" />
+        <include name="IDR_MOBILE_SETUP_PAGE_HTML" file="resources\chromeos\mobile_setup.html" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_MOBILE_SETUP_PORTAL_PAGE_HTML" file="resources\chromeos\mobile_setup_portal.html" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_NFC_DEBUG_HTML" file="resources\chromeos\nfc_debug.html" type="BINDATA" />
+        <include name="IDR_NFC_DEBUG_CSS" file="resources\chromeos\nfc_debug.css" type="BINDATA" />
+        <include name="IDR_NFC_DEBUG_JS" file="resources\chromeos\nfc_debug.js" type="BINDATA" />
+        <include name="IDR_ECHO_MANIFEST" file="resources\chromeos\echo\manifest.json" type="BINDATA" />
+        <include name="IDR_OFFLINE_APP_LOAD_HTML" file="resources\chromeos\offline_app_load.html" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_OFFLINE_NET_LOAD_HTML" file="resources\chromeos\offline_net_load.html" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_MERGE_SESSION_LOAD_HTML" file="resources\chromeos\merge_session_load.html" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_OS_CREDITS_HTML" file="resources\chromeos\about_os_credits.html" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_PROXY_SETTINGS_HTML" file="resources\chromeos\proxy_settings.html" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_CERT_MANAGER_DIALOG_HTML" file="resources\chromeos\certificate_manager_dialog.html" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_BLUETOOTH_PAIR_DEVICE_HTML" file="resources\chromeos\bluetooth_pair_device.html" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_SIM_UNLOCK_HTML" file="resources\chromeos\sim_unlock.html" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_SLOW_HTML" file="resources\chromeos\slow.html" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_SLOW_JS" file="resources\chromeos\slow.js" type="BINDATA" />
+        <include name="IDR_CHARGER_REPLACEMENT_HTML" file="resources\chromeos\charger_replacement.html" flattenhtml="true" type="BINDATA" />
+      </if>
+      <if expr="chromeos">
+        <include name="IDR_DEMO_APP_MANIFEST" file="resources\chromeos\demo_app\manifest.json" type="BINDATA" />
+        <include name="IDR_WALLPAPERMANAGER_MANIFEST" file="resources\chromeos\wallpaper_manager\manifest.json" type="BINDATA" />
+        <include name="IDR_FIRST_RUN_DIALOG_MANIFEST" file="resources\chromeos\first_run\app/manifest.json" type="BINDATA" />
+      </if>
+      <if expr="chromeos">
+        <include name="IDR_NETWORK_CONFIGURATION_MANIFEST" file="resources\chromeos\network_configuration\manifest.json" type="BINDATA" />
+      </if>
+      <if expr="chromeos and _google_chrome">
+        <include name="IDR_GENIUS_APP_MANIFEST" file="resources\chromeos\genius_app\manifest.json" type="BINDATA" />
+        <include name="IDR_HELP_MANIFEST" file="resources\help_app\manifest.json" type="BINDATA" />
+        <include name="IDR_QUICKOFFICE_MANIFEST" file="resources\chromeos\quickoffice\manifest.json" type="BINDATA" />
+      </if>
+      <if expr="chromeos">
+        <include name="IDR_SALSA_CSS" file="resources\chromeos\salsa.css" type="BINDATA" />
+        <include name="IDR_SALSA_HTML" file="resources\chromeos\salsa.html" type="BINDATA" />
+        <include name="IDR_SALSA_JS" file="resources\chromeos\salsa.js" type="BINDATA" />
+      </if>
+      <if expr="use_ash">
+        <include name="IDR_GESTURE_CONFIG_CSS" file="resources\gesture_config.css" type="BINDATA" />
+        <include name="IDR_GESTURE_CONFIG_HTML" file="resources\gesture_config.html" type="BINDATA" />
+        <include name="IDR_GESTURE_CONFIG_JS" file="resources\gesture_config.js" type="BINDATA" />
+      </if>
+      <if expr="is_win">
+        <include name="IDR_SET_AS_DEFAULT_BROWSER_JS" file="resources\set_as_default_browser.js" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_SET_AS_DEFAULT_BROWSER_HTML" file="resources\set_as_default_browser.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+      </if>
+      <if expr="not is_android and not is_ios and not chromeos">
+        <include name="IDR_USER_MANAGER_JS" file="resources\user_manager\user_manager.js" flattenhtml="true" type="BINDATA" />
+        <include name="IDR_USER_MANAGER_HTML" file="resources\user_manager\user_manager.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" />
+      </if>
+      <include name="IDR_SUPERVISED_USER_BLOCK_INTERSTITIAL_HTML" file="resources\supervised_user_block_interstitial.html" flattenhtml="true" type="BINDATA" />
+      <include name="IDR_PROFILE_SIGNIN_CONFIRMATION_HTML" file="resources\profile_signin_confirmation.html" type="BINDATA" />
+      <include name="IDR_PROFILE_SIGNIN_CONFIRMATION_JS" file="resources\profile_signin_confirmation.js" type="BINDATA" />
+      <include name="IDR_PROFILE_SIGNIN_CONFIRMATION_CSS" file="resources\profile_signin_confirmation.css" type="BINDATA" />
+      <include name="IDR_RECENTLY_CLOSED_WINDOW" file="resources\ntp4\images\closed_window.png" type="BINDATA" />
+      <if expr="not is_android">
+        <include name="IDR_IDENTITY_INTERNALS_HTML" file="resources\identity_internals.html" type="BINDATA" />
+        <include name="IDR_IDENTITY_INTERNALS_CSS" file="resources\identity_internals.css" type="BINDATA" />
+        <include name="IDR_IDENTITY_INTERNALS_JS" file="resources\identity_internals.js" type="BINDATA" />
+      </if>
+      <if expr="chromeos">
+        <include name="IDR_NETWORK_UI_HTML" file="resources\chromeos\network_ui\network_ui.html" type="BINDATA" />
+        <include name="IDR_NETWORK_UI_JS" file="resources\chromeos\network_ui\network_ui.js" type="BINDATA" />
+        <include name="IDR_NETWORK_UI_CSS" file="resources\chromeos\network_ui\network_ui.css" type="BINDATA" />
+      </if>
+      <if expr="_google_chrome">
+        <include name="IDR_PREF_HASH_SEED_BIN" file="resources\settings_internal\pref_hash_seed.bin" type="BINDATA" />
+        <include name="IDR_AUTOMATIC_PROFILE_RESET_RULES" file="internal\resources\profile_reset\automatic_profile_reset_rules.dat" type="BINDATA" />
+        <include name="IDR_AUTOMATIC_PROFILE_RESET_RULES_DRY" file="internal\resources\profile_reset\automatic_profile_reset_rules_dry.dat" type="BINDATA" />
+        <include name="IDR_AUTOMATIC_PROFILE_RESET_HASH_SEED" file="internal\resources\profile_reset\automatic_profile_reset_rules.seed" type="BINDATA" />
+        <include name="IDR_AUTOMATIC_PROFILE_RESET_HASH_SEED_DRY" file="internal\resources\profile_reset\automatic_profile_reset_rules_dry.seed" type="BINDATA" />
+        <include name="IDR_ADDITIONAL_MODULE_IDS" file="${additional_modules_list_file}" use_base_dir="false" type="BINDATA" />
+      </if>
+      <if expr="chromeos">
+        <include name="IDR_SOUND_STARTUP_WAV" file="resources\chromeos\sounds\startup.wav" type="BINDATA" />
+        <include name="IDR_SOUND_STARTUP2_WAV" file="resources\chromeos\sounds\startup2.wav" type="BINDATA" />
+        <include name="IDR_SOUND_LOCK_WAV" file="resources\chromeos\sounds\lock.wav" type="BINDATA" />
+        <include name="IDR_SOUND_UNLOCK_WAV" file="resources\chromeos\sounds\unlock.wav" type="BINDATA" />
+        <include name="IDR_SOUND_SHUTDOWN_WAV" file="resources\chromeos\sounds\shutdown.wav" type="BINDATA" />
+        <include name="IDR_SOUND_SPOKEN_FEEDBACK_ENABLED_WAV" file="resources\chromeos\sounds\spoken_feedback_enabled.wav" type="BINDATA" />
+        <include name="IDR_SOUND_SPOKEN_FEEDBACK_DISABLED_WAV" file="resources\chromeos\sounds\spoken_feedback_disabled.wav" type="BINDATA" />
+        <include name="IDR_SOUND_VOLUME_ADJUST_WAV" file="resources\chromeos\sounds\volume_adjust.wav" type="BINDATA" />
+        <include name="IDR_SOUND_CAMERA_SNAP_WAV" file="resources\chromeos\sounds\camera_snap.wav" type="BINDATA" />
+        <include name="IDR_SOUND_OBJECT_DELETE_WAV" file="resources\chromeos\sounds\object_delete.wav" type="BINDATA" />
+        <include name="IDR_SOUND_PASSTHROUGH_WAV" file="resources\chromeos\sounds\earcons\passthrough.wav" type="BINDATA" />
+        <include name="IDR_SOUND_EXIT_SCREEN_WAV" file="resources\chromeos\sounds\earcons\exit_screen.wav" type="BINDATA" />
+        <include name="IDR_SOUND_ENTER_SCREEN_WAV" file="resources\chromeos\sounds\earcons\enter_screen.wav" type="BINDATA" />
+      </if>
+      <if expr="chromeos">
+        <include name="IDR_ABOUT_POWER_HTML" file="resources\chromeos\power.html" type="BINDATA" />
+        <include name="IDR_ABOUT_POWER_JS" file="resources\chromeos\power.js" type="BINDATA" />
+        <include name="IDR_ABOUT_POWER_CSS" file="resources\chromeos\power.css" type="BINDATA" />
+      </if>
+      <include name="IDR_GCM_INTERNALS_HTML" file="resources\gcm_internals.html" type="BINDATA" />
+      <include name="IDR_GCM_INTERNALS_CSS" file="resources\gcm_internals.css" type="BINDATA" />
+      <include name="IDR_GCM_INTERNALS_JS" file="resources\gcm_internals.js" type="BINDATA" />
+      <include name="IDR_EASY_UNLOCK_MANIFEST" file="resources\easy_unlock\manifest.json" type="BINDATA" />
+      <if expr="chromeos">
+        <include name="IDR_SET_TIME_HTML" file="resources\chromeos\set_time.html" type="BINDATA" />
+        <include name="IDR_SET_TIME_CSS" file="resources\chromeos\set_time.css" type="BINDATA" />
+        <include name="IDR_SET_TIME_JS" file="resources\chromeos\set_time.js" type="BINDATA" />
+      </if>
+      <if expr="chromeos">
+        <if expr="_google_chrome">
+          <include name="IDR_GOOGLE_XKB_MANIFEST" file="resources\chromeos\input_method\google_xkb_manifest.json" type="BINDATA" />
+          <include name="IDR_GOOGLE_INPUT_TOOLS_MANIFEST" file="resources\chromeos\input_method\google_input_tools_manifest.json" type="BINDATA" />
+        </if>
+        <if expr="not _google_chrome">
+          <include name="IDR_XKB_MANIFEST" file="resources\chromeos\input_method\xkb_manifest.json" type="BINDATA" />
+          <include name="IDR_M17N_MANIFEST" file="resources\chromeos\input_method\m17n_manifest.json" type="BINDATA" />
+          <include name="IDR_PINYIN_MANIFEST" file="resources\chromeos\input_method\pinyin_manifest.json" type="BINDATA" />
+          <include name="IDR_ZHUYIN_MANIFEST" file="resources\chromeos\input_method\zhuyin_manifest.json" type="BINDATA" />
+          <include name="IDR_CANGJIE_MANIFEST" file="resources\chromeos\input_method\cangjie_manifest.json" type="BINDATA" />
+          <include name="IDR_MOZC_MANIFEST" file="resources\chromeos\input_method\mozc_manifest.json" type="BINDATA" />
+        </if>
+        <include name="IDR_HANGUL_MANIFEST" file="resources\chromeos\input_method\hangul_manifest.json" type="BINDATA" />
+        <include name="IDR_BRAILLE_MANIFEST" file="resources\chromeos\braille_ime\manifest.json" type="BINDATA" />
+      </if>
+      <include name="IDR_WHISPERNET_PROXY_MANIFEST" file="resources\whispernet_proxy\manifest.json" type="BINDATA" />
+    </includes>
+  </release>
+</grit>
--- /dev/null
+++ b/chrome/browser/resources/file_picker/file_picker.css
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2014 The Chromium Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#main-table {
+  border-collapse: collapse;
+  border-width: 0;
+  margin-left: auto;
+  margin-right: auto;
+  table-layout: fixed;
+  width: 1000px;
+}
+
+tr.section-row {
+  border-bottom-width: 2px;
+  border-color: #000;
+  border-left-width: 0;
+  border-right-width: 0;
+  border-style: solid;
+  border-top-width: 2px;
+  width: 100%;
+}
+
+td.title-cell {
+  border-width: 0;
+  text-align: right;
+  vertical-align: top;
+  width: 15%;
+}
+
+p.title-text {
+  font-weight: bold;
+  margin-right: 10px;
+}
+
+td.show-button-cell {
+  border-bottom-width: 0;
+  border-color: #aaa;
+  border-left-width: 1px;
+  border-right-width: 1px;
+  border-style: solid;
+  border-top-width: 0;
+  text-align: center;
+  vertical-align: top;
+  width: 10%;
+}
+
+td.plots-cell {
+  border-width: 0;
+  padding: 10px;
+  text-align: left;
+  width: 75%;
+}
+
+div.section-div {
+  width: 100%;
+}
+
+div.plots-div {
+  width: 100%;
+}
+
+button.show-button {
+  margin: 10px;
+}
+
+button.reload-button {
+  margin-bottom: 10px;
+  margin-top: 10px;
+}
--- /dev/null
+++ b/chrome/browser/resources/file_picker/file_picker.html
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML>
+<html i18n-values="dir:textdirection">
+<head>
+  <meta charset="utf-8">
+  <title i18n-content="dialogTitle"></title>
+  <script src="chrome://resources/js/cr.js"></script>
+  <script src="chrome://resources/js/load_time_data.js"></script>
+  <script src="chrome://resources/js/util.js"></script>
+  <script src="strings.js"></script>
+  <script src="file_picker.js"></script>
+  <link rel="stylesheet" href="file_picker.css">
+</head>
+<body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize">
+
+<p>Input a file name</p>
+<table>
+<tr>
+<td><div id="file-picker-file-name" i18n-content="filePickerFileNameLabel"></div>
+</td>
+<td>
+<input id="file-name-inputbox" type="text" name="FileName">
+</td>
+</tr>
+<tr>
+<td>
+  <div id="button-row">
+    <button id="save-button" i18n-content="saveButtonText"></button>
+    <button id="open-button" i18n-content="openButtonText"></button>
+    <button id="cancel-button" i18n-content="cancelButtonText"></button>
+  </div>
+</td>
+</tr>
+</table>
+  <!-- Must be last in the DOM: processes elements and inserts i18n strings -->
+  <script src="chrome://resources/js/i18n_template2.js"></script>
+</body>
+</html>
--- /dev/null
+++ b/chrome/browser/resources/file_picker/file_picker.js
@@ -0,0 +1,51 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+cr.define('filePicker', function() {
+  'use strict';
+
+  function initialize() {
+
+    var args = JSON.parse(chrome.getVariableValue('dialogArguments'));
+
+    var input_box = document.getElementById("file-name-inputbox");
+    input_box.value = args.filePath;
+
+    $('cancel-button').addEventListener('click', function() {
+        chrome.send('cancel');
+        self.close();
+    });
+    $('cancel-button').innerText =
+        loadTimeData.getStringF('cancelButtonText');
+
+    if (args.promptForOpenFile) {
+      $('open-button').addEventListener('click', function() {
+            var file_path = document.getElementById("file-name-inputbox").value;
+            chrome.send('done', [file_path]);
+            self.close();
+      });
+      $('open-button').innerText =
+        loadTimeData.getStringF('openButtonText');
+      $('save-button').style.display = 'none';
+    } else {
+      $('save-button').addEventListener('click', function() {
+          var file_path = document.getElementById("file-name-inputbox").value;
+          chrome.send('done', [file_path]);
+          self.close();
+      });
+      $('save-button').innerText =
+        loadTimeData.getStringF('saveButtonText');
+      $('open-button').style.display = 'none';
+   }
+
+    $('button-row').style['text-align'] = 'end';
+  }
+
+  return {
+    initialize: initialize
+  };
+});
+
+document.addEventListener('DOMContentLoaded',
+                          filePicker.initialize);
--- a/chrome/browser/ui/aura/active_desktop_monitor.cc
+++ b/chrome/browser/ui/aura/active_desktop_monitor.cc
@@ -11,6 +11,8 @@
 #include "ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h"
 #elif defined(OS_WIN)
 #include "ui/views/widget/desktop_aura/desktop_window_tree_host_win.h"
+#elif defined(USE_OZONE)
+#include "ui/desktop_aura/desktop_window_tree_host_ozone.h"
 #endif
 
 // static
@@ -48,6 +50,10 @@ bool ActiveDesktopMonitor::IsDesktopWind
 #elif defined(USE_X11)
   return views::DesktopWindowTreeHostX11::GetContentWindowForXID(
       host->GetAcceleratedWidget()) != NULL;
+#elif defined(USE_OZONE)
+  return views::DesktopWindowTreeHostOzone::
+      GetContentWindowForAcceleratedWidget(
+          host->GetAcceleratedWidget()) != NULL;
 #else
   NOTREACHED();
   return true;
--- a/chrome/browser/ui/aura/chrome_browser_main_extra_parts_aura.cc
+++ b/chrome/browser/ui/aura/chrome_browser_main_extra_parts_aura.cc
@@ -19,17 +19,21 @@
 #include "ui/gfx/screen.h"
 #include "ui/views/widget/native_widget_aura.h"
 
-#if defined(USE_X11) && !defined(OS_CHROMEOS)
+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
 #include "base/prefs/pref_service.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/ui/libgtk2ui/gtk2_ui.h"
 #include "chrome/common/pref_names.h"
+#include "ui/webui/ozone_webui.h"
 #include "ui/aura/window.h"
 #include "ui/base/ime/input_method_initializer.h"
 #include "ui/native_theme/native_theme_aura.h"
 #include "ui/views/linux_ui/linux_ui.h"
 #endif
 
+#if defined(USE_X11)
+#include "chrome/browser/ui/libgtk2ui/gtk2_ui.h"
+#endif
+
 #if defined(USE_ASH)
 #include "chrome/browser/ui/ash/ash_init.h"
 #endif  // defined(USE_ASH)
@@ -99,6 +103,10 @@ void ChromeBrowserMainExtraPartsAura::Pr
     ui::InitializeInputMethodForTesting();
   }
 #endif
+
+#if defined(OS_LINUX) && defined(USE_OZONE)
+  views::LinuxUI::SetInstance(BuildWebUI());
+#endif
 }
 
 void ChromeBrowserMainExtraPartsAura::ToolkitInitialized() {
--- /dev/null
+++ b/chrome/browser/ui/aura/chrome_browser_main_extra_parts_aura.cc.orig
@@ -0,0 +1,171 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/aura/chrome_browser_main_extra_parts_aura.h"
+
+#include "base/command_line.h"
+#include "base/run_loop.h"
+#include "chrome/browser/chrome_browser_main.h"
+#include "chrome/browser/ui/aura/active_desktop_monitor.h"
+#include "chrome/browser/ui/host_desktop.h"
+#include "chrome/browser/ui/simple_message_box.h"
+#include "chrome/common/chrome_switches.h"
+#include "chrome/grit/chromium_strings.h"
+#include "chrome/grit/generated_resources.h"
+#include "ui/aura/env.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/ui_base_switches.h"
+#include "ui/gfx/screen.h"
+#include "ui/views/widget/native_widget_aura.h"
+
+#if defined(USE_X11) && !defined(OS_CHROMEOS)
+#include "base/prefs/pref_service.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/libgtk2ui/gtk2_ui.h"
+#include "chrome/common/pref_names.h"
+#include "ui/aura/window.h"
+#include "ui/base/ime/input_method_initializer.h"
+#include "ui/native_theme/native_theme_aura.h"
+#include "ui/views/linux_ui/linux_ui.h"
+#endif
+
+#if defined(USE_ASH)
+#include "chrome/browser/ui/ash/ash_init.h"
+#endif  // defined(USE_ASH)
+
+#if !defined(OS_CHROMEOS)
+#include "ui/views/widget/desktop_aura/desktop_screen.h"
+#endif
+
+namespace {
+
+#if defined(USE_X11) && !defined(OS_CHROMEOS)
+ui::NativeTheme* GetNativeThemeForWindow(aura::Window* window) {
+  if (!window)
+    return NULL;
+
+  Profile* profile = NULL;
+  if (window->type() == ui::wm::WINDOW_TYPE_NORMAL ||
+      window->type() == ui::wm::WINDOW_TYPE_POPUP) {
+    profile = reinterpret_cast<Profile*>(
+        window->GetNativeWindowProperty(Profile::kProfileKey));
+  }
+
+  if (profile && !profile->GetPrefs()->GetBoolean(prefs::kUsesSystemTheme))
+    return ui::NativeThemeAura::instance();
+
+  return NULL;
+}
+#endif
+
+#if !defined(OS_CHROMEOS) && defined(USE_ASH)
+// Returns the desktop this process was initially launched in.
+chrome::HostDesktopType GetInitialDesktop() {
+#if defined(OS_WIN) && defined(USE_ASH)
+  const CommandLine* command_line = CommandLine::ForCurrentProcess();
+  if (command_line->HasSwitch(switches::kViewerConnect) ||
+      command_line->HasSwitch(switches::kViewerLaunchViaAppId)) {
+    return chrome::HOST_DESKTOP_TYPE_ASH;
+  }
+#elif defined(OS_LINUX)
+  const CommandLine* command_line = CommandLine::ForCurrentProcess();
+  if (command_line->HasSwitch(switches::kOpenAsh))
+    return chrome::HOST_DESKTOP_TYPE_ASH;
+#endif
+
+  return chrome::HOST_DESKTOP_TYPE_NATIVE;
+}
+#endif  // !defined(OS_CHROMEOS) && defined(USE_ASH)
+
+}  // namespace
+
+ChromeBrowserMainExtraPartsAura::ChromeBrowserMainExtraPartsAura() {
+}
+
+ChromeBrowserMainExtraPartsAura::~ChromeBrowserMainExtraPartsAura() {
+}
+
+void ChromeBrowserMainExtraPartsAura::PreEarlyInitialization() {
+#if defined(USE_X11) && !defined(OS_CHROMEOS)
+  if (GetInitialDesktop() != chrome::HOST_DESKTOP_TYPE_ASH) {
+    // TODO(erg): Refactor this into a dlopen call when we add a GTK3 port.
+    views::LinuxUI* gtk2_ui = BuildGtk2UI();
+    gtk2_ui->SetNativeThemeOverride(base::Bind(&GetNativeThemeForWindow));
+    views::LinuxUI::SetInstance(gtk2_ui);
+  } else {
+    // TODO(erg): Eventually, we'll need to somehow support IMEs in ash on
+    // Linux.
+    ui::InitializeInputMethodForTesting();
+  }
+#endif
+}
+
+void ChromeBrowserMainExtraPartsAura::ToolkitInitialized() {
+#if !defined(OS_CHROMEOS)
+#if defined(USE_ASH)
+  CHECK(aura::Env::GetInstance());
+  active_desktop_monitor_.reset(new ActiveDesktopMonitor(GetInitialDesktop()));
+#endif
+#endif
+
+#if defined(USE_X11) && !defined(OS_CHROMEOS)
+  if (GetInitialDesktop() != chrome::HOST_DESKTOP_TYPE_ASH)
+    views::LinuxUI::instance()->Initialize();
+#endif
+}
+
+void ChromeBrowserMainExtraPartsAura::PreCreateThreads() {
+#if !defined(OS_CHROMEOS)
+#if defined(USE_ASH)
+  if (!chrome::ShouldOpenAshOnStartup())
+#endif
+  {
+    gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE,
+                                   views::CreateDesktopScreen());
+  }
+#endif
+}
+
+void ChromeBrowserMainExtraPartsAura::PreProfileInit() {
+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
+  // Now that we have some minimal ui initialized, check to see if we're
+  // running as root and bail if we are.
+  DetectRunningAsRoot();
+#endif
+}
+
+void ChromeBrowserMainExtraPartsAura::PostMainMessageLoopRun() {
+  active_desktop_monitor_.reset();
+
+  // aura::Env instance is deleted in BrowserProcessImpl::StartTearDown
+  // after the metrics service is deleted.
+}
+
+#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
+void ChromeBrowserMainExtraPartsAura::DetectRunningAsRoot() {
+  if (getuid() == 0) {
+    const CommandLine& command_line = *CommandLine::ForCurrentProcess();
+    if (command_line.HasSwitch(switches::kUserDataDir))
+      return;
+
+    base::string16 title = l10n_util::GetStringFUTF16(
+        IDS_REFUSE_TO_RUN_AS_ROOT,
+        l10n_util::GetStringUTF16(IDS_PRODUCT_NAME));
+    base::string16 message = l10n_util::GetStringFUTF16(
+        IDS_REFUSE_TO_RUN_AS_ROOT_2,
+        l10n_util::GetStringUTF16(IDS_PRODUCT_NAME));
+
+    chrome::ShowMessageBox(NULL,
+                           title,
+                           message,
+                           chrome::MESSAGE_BOX_TYPE_WARNING);
+
+    // Avoids gpu_process_transport_factory.cc(153)] Check failed:
+    // per_compositor_data_.empty() when quit is chosen.
+    base::RunLoop().RunUntilIdle();
+
+    exit(EXIT_FAILURE);
+  }
+}
+#endif
--- /dev/null
+++ b/chrome/browser/ui/views/frame/browser_desktop_root_window_host_ozone.cc
@@ -0,0 +1,134 @@
+// Copyright (c) 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/views/frame/browser_desktop_root_window_host_ozone.h"
+
+#include "chrome/browser/themes/theme_service.h"
+#include "chrome/browser/themes/theme_service_factory.h"
+#include "chrome/browser/ui/views/frame/browser_frame.h"
+#include "chrome/browser/ui/views/frame/browser_view.h"
+#include "chrome/browser/ui/views/theme_image_mapper.h"
+
+namespace {
+
+// DesktopThemeProvider maps resource ids using MapThemeImage(). This is
+// necessary for BrowserDesktopWindowTreeHostWin so that it uses the windows
+// theme images rather than the ash theme images.
+//
+// This differs from the version in browser_desktop_window_tree_host_win.cc
+// because we need to also look up whether we're using the native theme.
+class DesktopThemeProvider : public ui::ThemeProvider {
+ public:
+  explicit DesktopThemeProvider(ThemeService* delegate)
+      : delegate_(delegate) {
+  }
+
+  bool UsingSystemTheme() const override {
+    return delegate_->UsingSystemTheme();
+  }
+  gfx::ImageSkia* GetImageSkiaNamed(int id) const override {
+    if (delegate_->UsingSystemTheme())
+      return delegate_->GetImageSkiaNamed(id);
+
+    return delegate_->GetImageSkiaNamed(
+        chrome::MapThemeImage(chrome::HOST_DESKTOP_TYPE_NATIVE, id));
+  }
+  SkColor GetColor(int id) const override { return delegate_->GetColor(id); }
+  int GetDisplayProperty(int id) const override {
+    return delegate_->GetDisplayProperty(id);
+  }
+  bool ShouldUseNativeFrame() const override {
+    return delegate_->ShouldUseNativeFrame();
+  }
+  bool HasCustomImage(int id) const override {
+    return delegate_->HasCustomImage(
+        chrome::MapThemeImage(chrome::HOST_DESKTOP_TYPE_NATIVE, id));
+  }
+  base::RefCountedMemory* GetRawData(int id, ui::ScaleFactor scale_factor)
+      const override {
+    return delegate_->GetRawData(id, scale_factor);
+  }
+
+ private:
+  ThemeService* delegate_;
+
+  DISALLOW_COPY_AND_ASSIGN(DesktopThemeProvider);
+};
+
+} // namespace
+
+////////////////////////////////////////////////////////////////////////////////
+// BrowserDesktopWindowTreeHostOzone, public:
+
+BrowserDesktopWindowTreeHostOzone::BrowserDesktopWindowTreeHostOzone(
+    views::internal::NativeWidgetDelegate* native_widget_delegate,
+    views::DesktopNativeWidgetAura* desktop_native_widget_aura,
+    BrowserView* browser_view,
+    BrowserFrame* browser_frame)
+    : DesktopWindowTreeHostOzone(native_widget_delegate,
+                                   desktop_native_widget_aura),
+      browser_view_(browser_view) {
+  scoped_ptr<ui::ThemeProvider> theme_provider(
+      new DesktopThemeProvider(ThemeServiceFactory::GetForProfile(
+                                   browser_view->browser()->profile())));
+  browser_frame->SetThemeProvider(theme_provider.Pass());
+}
+
+
+BrowserDesktopWindowTreeHostOzone::~BrowserDesktopWindowTreeHostOzone() {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// BrowserDesktopWindowTreeHostOzone,
+//     BrowserDesktopWindowTreeHost implementation:
+
+views::DesktopWindowTreeHost*
+    BrowserDesktopWindowTreeHostOzone::AsDesktopWindowTreeHost() {
+  return this;
+}
+
+int BrowserDesktopWindowTreeHostOzone::GetMinimizeButtonOffset() const {
+  return 0;
+}
+
+bool BrowserDesktopWindowTreeHostOzone::UsesNativeSystemMenu() const {
+  return false;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// BrowserDesktopWindowTreeHostOzone,
+//     views::DesktopWindowTreeHostOzone implementation:
+
+void BrowserDesktopWindowTreeHostOzone::Init(
+    aura::Window* content_window,
+    const views::Widget::InitParams& params) {
+  views::DesktopWindowTreeHostOzone::Init(content_window, params);
+
+  // TODO(kalyan): Support for Global Menu.
+}
+
+void BrowserDesktopWindowTreeHostOzone::CloseNow() {
+  views::DesktopWindowTreeHostOzone::CloseNow();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// BrowserDesktopWindowTreeHost, public:
+
+// static
+BrowserDesktopWindowTreeHost*
+    BrowserDesktopWindowTreeHost::CreateBrowserDesktopWindowTreeHost(
+        views::internal::NativeWidgetDelegate* native_widget_delegate,
+        views::DesktopNativeWidgetAura* desktop_native_widget_aura,
+        BrowserView* browser_view,
+        BrowserFrame* browser_frame) {
+  return new BrowserDesktopWindowTreeHostOzone(native_widget_delegate,
+                                               desktop_native_widget_aura,
+                                               browser_view,
+                                               browser_frame);
+}
+
+void BrowserDesktopWindowTreeHostOzone::PostNativeEvent(const base::NativeEvent& native_event) { }
+
+void BrowserDesktopWindowTreeHostOzone::SetSessionID(uint32 sessionid) { }
+
--- /dev/null
+++ b/chrome/browser/ui/views/frame/browser_desktop_root_window_host_ozone.h
@@ -0,0 +1,50 @@
+// Copyright (c) 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_ROOT_WINDOW_HOST_OZONE_H_
+#define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_ROOT_WINDOW_HOST_OZONE_H_
+
+#include "ui/desktop_aura/desktop_window_tree_host_ozone.h"
+#include "chrome/browser/ui/views/frame/browser_desktop_window_tree_host.h"
+
+class BrowserFrame;
+class BrowserView;
+
+namespace views {
+class DesktopNativeWidgetAura;
+}
+
+class BrowserDesktopWindowTreeHostOzone
+    : public BrowserDesktopWindowTreeHost,
+      public views::DesktopWindowTreeHostOzone {
+ public:
+  BrowserDesktopWindowTreeHostOzone(
+      views::internal::NativeWidgetDelegate* native_widget_delegate,
+      views::DesktopNativeWidgetAura* desktop_native_widget_aura,
+      BrowserView* browser_view,
+      BrowserFrame* browser_frame);
+  ~BrowserDesktopWindowTreeHostOzone() override;
+
+  void PostNativeEvent(const base::NativeEvent& native_event) override;
+
+  void SetSessionID(uint32 sessionid) override;
+
+
+ private:
+  // Overridden from BrowserDesktopWindowTreeHost:
+  DesktopWindowTreeHost* AsDesktopWindowTreeHost() override;
+  int GetMinimizeButtonOffset() const override;
+  bool UsesNativeSystemMenu() const override;
+
+  // Overridden from views::DesktopWindowTreeHostOzone:
+  void Init(aura::Window* content_window,
+            const views::Widget::InitParams& params) override;
+  void CloseNow() override;
+
+  BrowserView* browser_view_;
+
+  DISALLOW_COPY_AND_ASSIGN(BrowserDesktopWindowTreeHostOzone);
+};
+
+#endif  // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_ROOT_WINDOW_HOST_OZONE_H_
--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -26,6 +26,7 @@
 #include "chrome/browser/ui/webui/devtools_ui.h"
 #include "chrome/browser/ui/webui/domain_reliability_internals_ui.h"
 #include "chrome/browser/ui/webui/downloads_ui.h"
+#include "chrome/browser/ui/webui/file_picker/file_picker_ui.h"
 #include "chrome/browser/ui/webui/flags_ui.h"
 #include "chrome/browser/ui/webui/flash_ui.h"
 #include "chrome/browser/ui/webui/gcm_internals_ui.h"
@@ -284,6 +285,8 @@ WebUIFactoryFunction GetWebUIFactoryFunc
     return &NewWebUI<DomainReliabilityInternalsUI>;
   if (url.host() == chrome::kChromeUIFlagsHost)
     return &NewWebUI<FlagsUI>;
+  if (url.host() == chrome::kChromeUIFilePickerHost)
+    return &NewWebUI<ui::FilePickerUI>;
   if (url.host() == chrome::kChromeUIHistoryFrameHost)
     return &NewWebUI<HistoryUI>;
   if (url.host() == chrome::kChromeUIInstantHost)
--- /dev/null
+++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc.orig
@@ -0,0 +1,732 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h"
+
+#include <vector>
+
+#include "base/bind.h"
+#include "base/command_line.h"
+#include "base/location.h"
+#include "base/message_loop/message_loop_proxy.h"
+#include "base/prefs/pref_service.h"
+#include "chrome/browser/about_flags.h"
+#include "chrome/browser/bookmarks/enhanced_bookmarks_features.h"
+#include "chrome/browser/dom_distiller/dom_distiller_service_factory.h"
+#include "chrome/browser/favicon/favicon_service.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/ui/webui/about_ui.h"
+#include "chrome/browser/ui/webui/app_launcher_page_ui.h"
+#include "chrome/browser/ui/webui/bookmarks_ui.h"
+#include "chrome/browser/ui/webui/components_ui.h"
+#include "chrome/browser/ui/webui/constrained_web_dialog_ui.h"
+#include "chrome/browser/ui/webui/crashes_ui.h"
+#include "chrome/browser/ui/webui/devtools_ui.h"
+#include "chrome/browser/ui/webui/domain_reliability_internals_ui.h"
+#include "chrome/browser/ui/webui/downloads_ui.h"
+#include "chrome/browser/ui/webui/flags_ui.h"
+#include "chrome/browser/ui/webui/flash_ui.h"
+#include "chrome/browser/ui/webui/gcm_internals_ui.h"
+#include "chrome/browser/ui/webui/help/help_ui.h"
+#include "chrome/browser/ui/webui/history_ui.h"
+#include "chrome/browser/ui/webui/identity_internals_ui.h"
+#include "chrome/browser/ui/webui/inspect_ui.h"
+#include "chrome/browser/ui/webui/instant_ui.h"
+#include "chrome/browser/ui/webui/interstitials/interstitial_ui.h"
+#include "chrome/browser/ui/webui/invalidations_ui.h"
+#include "chrome/browser/ui/webui/memory_internals/memory_internals_ui.h"
+#include "chrome/browser/ui/webui/net_internals/net_internals_ui.h"
+#include "chrome/browser/ui/webui/omnibox/omnibox_ui.h"
+#include "chrome/browser/ui/webui/options/options_ui.h"
+#include "chrome/browser/ui/webui/password_manager_internals/password_manager_internals_ui.h"
+#include "chrome/browser/ui/webui/plugins_ui.h"
+#include "chrome/browser/ui/webui/predictors/predictors_ui.h"
+#include "chrome/browser/ui/webui/profiler_ui.h"
+#include "chrome/browser/ui/webui/signin/inline_login_ui.h"
+#include "chrome/browser/ui/webui/signin/profile_signin_confirmation_ui.h"
+#include "chrome/browser/ui/webui/signin/user_manager_ui.h"
+#include "chrome/browser/ui/webui/signin_internals_ui.h"
+#include "chrome/browser/ui/webui/sync_internals_ui.h"
+#include "chrome/browser/ui/webui/translate_internals/translate_internals_ui.h"
+#include "chrome/browser/ui/webui/user_actions/user_actions_ui.h"
+#include "chrome/browser/ui/webui/version_ui.h"
+#include "chrome/common/chrome_switches.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/common/url_constants.h"
+#include "components/dom_distiller/core/dom_distiller_constants.h"
+#include "components/dom_distiller/core/dom_distiller_service.h"
+#include "components/dom_distiller/core/url_constants.h"
+#include "components/dom_distiller/webui/dom_distiller_ui.h"
+#include "components/favicon_base/favicon_util.h"
+#include "components/favicon_base/select_favicon_frames.h"
+#include "components/history/core/browser/history_types.h"
+#include "components/password_manager/core/common/password_manager_switches.h"
+#include "components/signin/core/common/profile_management_switches.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_ui.h"
+#include "content/public/common/content_client.h"
+#include "content/public/common/url_utils.h"
+#include "ui/gfx/favicon_size.h"
+#include "ui/web_dialogs/web_dialog_ui.h"
+#include "url/gurl.h"
+
+#if !defined(DISABLE_NACL)
+#include "chrome/browser/ui/webui/nacl_ui.h"
+#endif
+
+#if defined(ENABLE_CONFIGURATION_POLICY)
+#include "chrome/browser/ui/webui/policy_ui.h"
+#endif
+
+#if defined(ENABLE_WEBRTC)
+#include "chrome/browser/ui/webui/media/webrtc_logs_ui.h"
+#endif
+
+#if defined(ENABLE_FULL_PRINTING)
+#include "chrome/browser/ui/webui/print_preview/print_preview_ui.h"
+#endif
+
+#if defined(OS_ANDROID)
+#include "chrome/browser/ui/webui/welcome_ui_android.h"
+#else
+#include "chrome/browser/ui/webui/ntp/new_tab_ui.h"
+#include "chrome/browser/ui/webui/quota_internals/quota_internals_ui.h"
+#include "chrome/browser/ui/webui/suggestions_internals/suggestions_internals_ui.h"
+#include "chrome/browser/ui/webui/sync_file_system_internals/sync_file_system_internals_ui.h"
+#include "chrome/browser/ui/webui/system_info_ui.h"
+#include "chrome/browser/ui/webui/uber/uber_ui.h"
+#endif
+
+#if defined(OS_ANDROID) || defined(OS_IOS)
+#include "chrome/browser/ui/webui/net_export_ui.h"
+#endif
+
+#if defined(OS_CHROMEOS)
+#include "chrome/browser/ui/webui/chromeos/bluetooth_pairing_ui.h"
+#include "chrome/browser/ui/webui/chromeos/certificate_manager_dialog_ui.h"
+#include "chrome/browser/ui/webui/chromeos/charger_replacement_ui.h"
+#include "chrome/browser/ui/webui/chromeos/choose_mobile_network_ui.h"
+#include "chrome/browser/ui/webui/chromeos/cryptohome_ui.h"
+#include "chrome/browser/ui/webui/chromeos/drive_internals_ui.h"
+#include "chrome/browser/ui/webui/chromeos/first_run/first_run_ui.h"
+#include "chrome/browser/ui/webui/chromeos/imageburner/imageburner_ui.h"
+#include "chrome/browser/ui/webui/chromeos/keyboard_overlay_ui.h"
+#include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h"
+#include "chrome/browser/ui/webui/chromeos/mobile_setup_ui.h"
+#include "chrome/browser/ui/webui/chromeos/network_ui.h"
+#include "chrome/browser/ui/webui/chromeos/nfc_debug_ui.h"
+#include "chrome/browser/ui/webui/chromeos/power_ui.h"
+#include "chrome/browser/ui/webui/chromeos/provided_file_systems_ui.h"
+#include "chrome/browser/ui/webui/chromeos/proxy_settings_ui.h"
+#include "chrome/browser/ui/webui/chromeos/salsa_ui.h"
+#include "chrome/browser/ui/webui/chromeos/set_time_ui.h"
+#include "chrome/browser/ui/webui/chromeos/sim_unlock_ui.h"
+#include "chrome/browser/ui/webui/chromeos/slow_trace_ui.h"
+#include "chrome/browser/ui/webui/chromeos/slow_ui.h"
+#endif
+
+#if defined(USE_AURA)
+#include "chrome/browser/ui/webui/gesture_config_ui.h"
+#endif
+
+#if !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
+#include "chrome/browser/ui/sync/sync_promo_ui.h"
+#endif
+
+#if defined(OS_WIN)
+#include "chrome/browser/ui/webui/conflicts_ui.h"
+#include "chrome/browser/ui/webui/set_as_default_browser_ui.h"
+#endif
+
+#if (defined(USE_NSS) || defined(USE_OPENSSL)) && defined(USE_AURA)
+#include "chrome/browser/ui/webui/certificate_viewer_ui.h"
+#endif
+
+#if defined(ENABLE_SERVICE_DISCOVERY)
+#include "chrome/browser/ui/webui/local_discovery/local_discovery_ui.h"
+#endif
+
+#if defined(ENABLE_APP_LIST)
+#include "chrome/browser/ui/webui/app_list/start_page_ui.h"
+#endif
+
+#if defined(ENABLE_EXTENSIONS)
+#include "chrome/browser/extensions/extension_web_ui.h"
+#include "chrome/browser/ui/webui/extensions/extension_info_ui.h"
+#include "chrome/browser/ui/webui/extensions/extensions_ui.h"
+#include "chrome/browser/ui/webui/voicesearch_ui.h"
+#include "chrome/common/extensions/extension_constants.h"
+#include "extensions/browser/extension_registry.h"
+#include "extensions/browser/extension_system.h"
+#include "extensions/common/constants.h"
+#include "extensions/common/extension.h"
+#include "extensions/common/feature_switch.h"
+#include "extensions/common/manifest.h"
+#endif
+
+using content::WebUI;
+using content::WebUIController;
+using ui::ExternalWebDialogUI;
+using ui::WebDialogUI;
+
+namespace {
+
+// A function for creating a new WebUI. The caller owns the return value, which
+// may be NULL (for example, if the URL refers to an non-existent extension).
+typedef WebUIController* (*WebUIFactoryFunction)(WebUI* web_ui,
+                                                 const GURL& url);
+
+// Template for defining WebUIFactoryFunction.
+template<class T>
+WebUIController* NewWebUI(WebUI* web_ui, const GURL& url) {
+  return new T(web_ui);
+}
+
+#if defined(ENABLE_EXTENSIONS)
+// Special cases for extensions.
+template<>
+WebUIController* NewWebUI<ExtensionWebUI>(WebUI* web_ui,
+                                          const GURL& url) {
+  return new ExtensionWebUI(web_ui, url);
+}
+#endif  // defined(ENABLE_EXTENSIONS)
+
+// Special case for older about: handlers.
+template<>
+WebUIController* NewWebUI<AboutUI>(WebUI* web_ui, const GURL& url) {
+  return new AboutUI(web_ui, url.host());
+}
+
+#if defined(OS_CHROMEOS)
+template<>
+WebUIController* NewWebUI<chromeos::OobeUI>(WebUI* web_ui, const GURL& url) {
+  return new chromeos::OobeUI(web_ui, url);
+}
+#endif
+
+// Special cases for DOM distiller.
+template<>
+WebUIController* NewWebUI<dom_distiller::DomDistillerUi>(WebUI* web_ui,
+                                                         const GURL& url) {
+  // The DomDistillerUi can not depend on components/dom_distiller/content,
+  // so inject the correct DomDistillerService from chrome/.
+  content::BrowserContext* browser_context =
+      web_ui->GetWebContents()->GetBrowserContext();
+  dom_distiller::DomDistillerService* service =
+      dom_distiller::DomDistillerServiceFactory::GetForBrowserContext(
+          browser_context);
+  return new dom_distiller::DomDistillerUi(
+      web_ui, service, dom_distiller::kDomDistillerScheme);
+}
+
+#if defined(ENABLE_EXTENSIONS)
+// Only create ExtensionWebUI for URLs that are allowed extension bindings,
+// hosted by actual tabs.
+bool NeedsExtensionWebUI(Profile* profile, const GURL& url) {
+  if (!profile)
+    return false;
+
+  const extensions::Extension* extension =
+      extensions::ExtensionRegistry::Get(profile)->enabled_extensions().
+          GetExtensionOrAppByURL(url);
+  // Allow bindings for all packaged extensions and component hosted apps.
+  return extension &&
+      (!extension->is_hosted_app() ||
+       extension->location() == extensions::Manifest::COMPONENT);
+}
+#endif
+
+// Returns a function that can be used to create the right type of WebUI for a
+// tab, based on its URL. Returns NULL if the URL doesn't have WebUI associated
+// with it.
+WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
+                                             Profile* profile,
+                                             const GURL& url) {
+#if defined(ENABLE_EXTENSIONS)
+  if (NeedsExtensionWebUI(profile, url))
+    return &NewWebUI<ExtensionWebUI>;
+#endif
+
+  // This will get called a lot to check all URLs, so do a quick check of other
+  // schemes to filter out most URLs.
+  if (!url.SchemeIs(content::kChromeDevToolsScheme) &&
+      !url.SchemeIs(content::kChromeUIScheme)) {
+    return NULL;
+  }
+
+  /****************************************************************************
+   * Please keep this in alphabetical order. If #ifs or special logics are
+   * required, add it below in the appropriate section.
+   ***************************************************************************/
+  // We must compare hosts only since some of the Web UIs append extra stuff
+  // after the host name.
+  // All platform builds of Chrome will need to have a cloud printing
+  // dialog as backup.  It's just that on Chrome OS, it's the only
+  // print dialog.
+  if (url.host() == chrome::kChromeUICloudPrintResourcesHost)
+    return &NewWebUI<ExternalWebDialogUI>;
+  if (url.host() == chrome::kChromeUICloudPrintSetupHost)
+    return &NewWebUI<WebDialogUI>;
+  if (url.host() == chrome::kChromeUIComponentsHost)
+    return &NewWebUI<ComponentsUI>;
+  if (url.spec() == chrome::kChromeUIConstrainedHTMLTestURL)
+    return &NewWebUI<ConstrainedWebDialogUI>;
+  if (url.host() == chrome::kChromeUICrashesHost)
+    return &NewWebUI<CrashesUI>;
+#if defined(ENABLE_SERVICE_DISCOVERY)
+  if (url.host() == chrome::kChromeUIDevicesHost) {
+    return &NewWebUI<LocalDiscoveryUI>;
+  }
+#endif
+  if (url.host() == chrome::kChromeUIDomainReliabilityInternalsHost)
+    return &NewWebUI<DomainReliabilityInternalsUI>;
+  if (url.host() == chrome::kChromeUIFlagsHost)
+    return &NewWebUI<FlagsUI>;
+  if (url.host() == chrome::kChromeUIHistoryFrameHost)
+    return &NewWebUI<HistoryUI>;
+  if (url.host() == chrome::kChromeUIInstantHost)
+    return &NewWebUI<InstantUI>;
+  if (url.host() == chrome::kChromeUIInterstitialHost)
+    return &NewWebUI<InterstitialUI>;
+  if (url.host() == chrome::kChromeUIInvalidationsHost)
+    return &NewWebUI<InvalidationsUI>;
+  if (url.host() == chrome::kChromeUISupervisedUserPassphrasePageHost)
+    return &NewWebUI<ConstrainedWebDialogUI>;
+  if (url.host() == chrome::kChromeUIMemoryInternalsHost)
+    return &NewWebUI<MemoryInternalsUI>;
+#if !defined(DISABLE_NACL)
+  if (url.host() == chrome::kChromeUINaClHost)
+    return &NewWebUI<NaClUI>;
+#endif
+#if defined(OS_ANDROID) || defined(OS_IOS)
+  if (url.host() == chrome::kChromeUINetExportHost)
+    return &NewWebUI<NetExportUI>;
+#endif
+  if (url.host() == chrome::kChromeUINetInternalsHost)
+    return &NewWebUI<NetInternalsUI>;
+#if !defined(OS_ANDROID)
+  if (url.host() == chrome::kChromeUINewTabHost)
+    return &NewWebUI<NewTabUI>;
+#endif
+  if (url.host() == chrome::kChromeUIOmniboxHost)
+    return &NewWebUI<OmniboxUI>;
+  if (url.host() == chrome::kChromeUIPasswordManagerInternalsHost)
+    return &NewWebUI<PasswordManagerInternalsUI>;
+  if (url.host() == chrome::kChromeUIPredictorsHost)
+    return &NewWebUI<PredictorsUI>;
+  if (url.host() == chrome::kChromeUIProfilerHost)
+    return &NewWebUI<ProfilerUI>;
+  if (url.host() == chrome::kChromeUISignInInternalsHost)
+    return &NewWebUI<SignInInternalsUI>;
+  if (url.host() == chrome::kChromeUISyncInternalsHost)
+    return &NewWebUI<SyncInternalsUI>;
+  if (url.host() == chrome::kChromeUISyncResourcesHost)
+    return &NewWebUI<WebDialogUI>;
+  if (url.host() == chrome::kChromeUITranslateInternalsHost)
+    return &NewWebUI<TranslateInternalsUI>;
+  if (url.host() == chrome::kChromeUIUserActionsHost)
+    return &NewWebUI<UserActionsUI>;
+  if (url.host() == chrome::kChromeUIVersionHost)
+    return &NewWebUI<VersionUI>;
+#if defined(ENABLE_EXTENSIONS)
+  if (url.host() == chrome::kChromeUIVoiceSearchHost)
+    return &NewWebUI<VoiceSearchUI>;
+#endif
+#if defined(ENABLE_WEBRTC)
+  if (url.host() == chrome::kChromeUIWebRtcLogsHost)
+    return &NewWebUI<WebRtcLogsUI>;
+#endif
+#if defined(ENABLE_APP_LIST)
+  if (url.host() == chrome::kChromeUIAppListStartPageHost)
+    return &NewWebUI<app_list::StartPageUI>;
+#endif
+
+  /****************************************************************************
+   * OS Specific #defines
+   ***************************************************************************/
+#if defined(OS_ANDROID)
+  if (url.host() == chrome::kChromeUIWelcomeHost)
+    return &NewWebUI<WelcomeUI>;
+#else
+  // AppLauncherPage is not needed on Android.
+  if (url.host() == chrome::kChromeUIAppLauncherPageHost &&
+      profile && extensions::ExtensionSystem::Get(profile)->
+          extension_service()) {
+    return &NewWebUI<AppLauncherPageUI>;
+  }
+  // Bookmarks are part of NTP on Android.
+  if (url.host() == chrome::kChromeUIBookmarksHost)
+    return &NewWebUI<BookmarksUI>;
+  if (url.SchemeIs(content::kChromeDevToolsScheme))
+    return &NewWebUI<DevToolsUI>;
+  // Downloads list on Android uses the built-in download manager.
+  if (url.host() == chrome::kChromeUIDownloadsHost)
+    return &NewWebUI<DownloadsUI>;
+  // Flash is not available on android.
+  if (url.host() == chrome::kChromeUIFlashHost)
+    return &NewWebUI<FlashUI>;
+  if (url.host() == chrome::kChromeUIGCMInternalsHost)
+    return &NewWebUI<GCMInternalsUI>;
+  // Help is implemented with native UI elements on Android.
+  if (url.host() == chrome::kChromeUIHelpFrameHost)
+    return &NewWebUI<HelpUI>;
+  // Identity API is not available on Android.
+  if (url.host() == chrome::kChromeUIIdentityInternalsHost)
+    return &NewWebUI<IdentityInternalsUI>;
+  // chrome://inspect isn't supported on Android. Page debugging is handled by a
+  // remote devtools on the host machine, and other elements (Shared Workers,
+  // extensions, etc) aren't supported.
+  if (url.host() == chrome::kChromeUIInspectHost)
+    return &NewWebUI<InspectUI>;
+  // Android does not support plugins for now.
+  if (url.host() == chrome::kChromeUIPluginsHost)
+    return &NewWebUI<PluginsUI>;
+  if (url.host() == chrome::kChromeUIQuotaInternalsHost)
+    return &NewWebUI<QuotaInternalsUI>;
+  // Settings are implemented with native UI elements on Android.
+  // Handle chrome://settings if settings in a window and about in settings
+  // are enabled.
+  if (url.host() == chrome::kChromeUISettingsFrameHost ||
+      (url.host() == chrome::kChromeUISettingsHost &&
+       ::switches::AboutInSettingsEnabled())) {
+    return &NewWebUI<options::OptionsUI>;
+  }
+  if (url.host() == chrome::kChromeUISuggestionsInternalsHost)
+    return &NewWebUI<SuggestionsInternalsUI>;
+  if (url.host() == chrome::kChromeUISyncFileSystemInternalsHost)
+    return &NewWebUI<SyncFileSystemInternalsUI>;
+  if (url.host() == chrome::kChromeUISystemInfoHost)
+    return &NewWebUI<SystemInfoUI>;
+  // Uber frame is not used on Android.
+  if (url.host() == chrome::kChromeUIUberFrameHost)
+    return &NewWebUI<UberFrameUI>;
+  // Uber page is not used on Android.
+  if (url.host() == chrome::kChromeUIUberHost)
+    return &NewWebUI<UberUI>;
+#endif
+#if defined(OS_WIN)
+  if (url.host() == chrome::kChromeUIConflictsHost)
+    return &NewWebUI<ConflictsUI>;
+  if (url.host() == chrome::kChromeUIMetroFlowHost)
+    return &NewWebUI<SetAsDefaultBrowserUI>;
+#endif
+#if (defined(USE_NSS) || defined(USE_OPENSSL)) && defined(USE_AURA)
+  if (url.host() == chrome::kChromeUICertificateViewerHost)
+    return &NewWebUI<CertificateViewerUI>;
+#if defined(OS_CHROMEOS)
+  if (url.host() == chrome::kChromeUICertificateViewerDialogHost)
+    return &NewWebUI<CertificateViewerModalDialogUI>;
+#endif
+#endif
+#if defined(OS_CHROMEOS)
+  if (url.host() == chrome::kChromeUIBluetoothPairingHost)
+    return &NewWebUI<chromeos::BluetoothPairingUI>;
+  if (url.host() == chrome::kChromeUICertificateManagerHost)
+    return &NewWebUI<chromeos::CertificateManagerDialogUI>;
+  if (url.host() == chrome::kChromeUIChargerReplacementHost)
+    return &NewWebUI<chromeos::ChargerReplacementUI>;
+  if (url.host() == chrome::kChromeUIChooseMobileNetworkHost)
+    return &NewWebUI<chromeos::ChooseMobileNetworkUI>;
+  if (url.host() == chrome::kChromeUICryptohomeHost)
+    return &NewWebUI<chromeos::CryptohomeUI>;
+  if (url.host() == chrome::kChromeUIDriveInternalsHost)
+    return &NewWebUI<chromeos::DriveInternalsUI>;
+  if (url.host() == chrome::kChromeUIFirstRunHost)
+    return &NewWebUI<chromeos::FirstRunUI>;
+  if (url.host() == chrome::kChromeUIImageBurnerHost)
+    return &NewWebUI<ImageBurnUI>;
+  if (url.host() == chrome::kChromeUIKeyboardOverlayHost)
+    return &NewWebUI<KeyboardOverlayUI>;
+  if (url.host() == chrome::kChromeUIMobileSetupHost)
+    return &NewWebUI<MobileSetupUI>;
+  if (url.host() == chrome::kChromeUINfcDebugHost)
+    return &NewWebUI<chromeos::NfcDebugUI>;
+  if (url.host() == chrome::kChromeUIOobeHost)
+    return &NewWebUI<chromeos::OobeUI>;
+  if (url.host() == chrome::kChromeUIProvidedFileSystemsHost)
+    return &NewWebUI<chromeos::ProvidedFileSystemsUI>;
+  if (url.host() == chrome::kChromeUIProxySettingsHost)
+    return &NewWebUI<chromeos::ProxySettingsUI>;
+  if (url.host() == chrome::kChromeUISalsaHost)
+    return &NewWebUI<SalsaUI>;
+  if (url.host() == chrome::kChromeUISetTimeHost)
+    return &NewWebUI<chromeos::SetTimeUI>;
+  if (url.host() == chrome::kChromeUISimUnlockHost)
+    return &NewWebUI<chromeos::SimUnlockUI>;
+  if (url.host() == chrome::kChromeUISlowHost)
+    return &NewWebUI<chromeos::SlowUI>;
+  if (url.host() == chrome::kChromeUISlowTraceHost)
+    return &NewWebUI<chromeos::SlowTraceController>;
+  if (url.host() == chrome::kChromeUINetworkHost)
+    return &NewWebUI<chromeos::NetworkUI>;
+  if (url.host() == chrome::kChromeUIPowerHost)
+    return &NewWebUI<chromeos::PowerUI>;
+#endif  // defined(OS_CHROMEOS)
+#if !defined(OS_ANDROID) && !defined(OS_IOS)
+  if (url.host() == chrome::kChromeUIChromeSigninHost)
+    return &NewWebUI<InlineLoginUI>;
+#endif
+
+  /****************************************************************************
+   * Other #defines and special logics.
+   ***************************************************************************/
+#if defined(ENABLE_CONFIGURATION_POLICY)
+  if (url.host() == chrome::kChromeUIPolicyHost)
+    return &NewWebUI<PolicyUI>;
+
+#if !defined(OS_CHROMEOS) && !defined(OS_ANDROID)
+  if (url.host() == chrome::kChromeUIProfileSigninConfirmationHost)
+    return &NewWebUI<ProfileSigninConfirmationUI>;
+#endif
+
+#endif  // defined(ENABLE_CONFIGURATION_POLICY)
+
+#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
+  if (url.host() == chrome::kChromeUITabModalConfirmDialogHost) {
+    return &NewWebUI<ConstrainedWebDialogUI>;
+  }
+#endif
+
+#if defined(USE_AURA)
+  if (url.host() == chrome::kChromeUIGestureConfigHost)
+    return &NewWebUI<GestureConfigUI>;
+#endif
+
+#if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) && !defined(OS_IOS)
+  if (url.host() == chrome::kChromeUIUserManagerHost &&
+      switches::IsNewAvatarMenu()) {
+    return &NewWebUI<UserManagerUI>;
+  }
+#endif
+
+  if (url.host() == chrome::kChromeUIChromeURLsHost ||
+      url.host() == chrome::kChromeUICreditsHost ||
+      url.host() == chrome::kChromeUIDNSHost ||
+      url.host() == chrome::kChromeUIMemoryHost ||
+      url.host() == chrome::kChromeUIMemoryRedirectHost ||
+      url.host() == chrome::kChromeUIStatsHost ||
+      url.host() == chrome::kChromeUITermsHost
+#if defined(OS_LINUX) || defined(OS_OPENBSD)
+      || url.host() == chrome::kChromeUILinuxProxyConfigHost
+      || url.host() == chrome::kChromeUISandboxHost
+#endif
+#if defined(OS_CHROMEOS)
+      || url.host() == chrome::kChromeUIDiscardsHost
+      || url.host() == chrome::kChromeUIOSCreditsHost
+#endif
+#if defined(WEBUI_TASK_MANAGER)
+      || url.host() == chrome::kChromeUITaskManagerHost
+#endif
+      ) {
+    return &NewWebUI<AboutUI>;
+  }
+
+#if defined(ENABLE_EXTENSIONS)
+  if (url.host() == chrome::kChromeUIExtensionsFrameHost)
+    return &NewWebUI<extensions::ExtensionsUI>;
+#endif
+#if defined(ENABLE_FULL_PRINTING)
+  if (url.host() == chrome::kChromeUIPrintHost &&
+      !profile->GetPrefs()->GetBoolean(prefs::kPrintPreviewDisabled)) {
+    return &NewWebUI<PrintPreviewUI>;
+  }
+#endif
+
+  if (IsEnableDomDistillerSet() &&
+      url.host() == dom_distiller::kChromeUIDomDistillerHost) {
+    return &NewWebUI<dom_distiller::DomDistillerUi>;
+  }
+
+  return NULL;
+}
+
+void RunFaviconCallbackAsync(
+    const favicon_base::FaviconResultsCallback& callback,
+    const std::vector<favicon_base::FaviconRawBitmapResult>* results) {
+  base::MessageLoopProxy::current()->PostTask(
+      FROM_HERE,
+      base::Bind(&FaviconService::FaviconResultsCallbackRunner,
+                 callback, base::Owned(results)));
+}
+
+}  // namespace
+
+WebUI::TypeID ChromeWebUIControllerFactory::GetWebUIType(
+      content::BrowserContext* browser_context, const GURL& url) const {
+  Profile* profile = Profile::FromBrowserContext(browser_context);
+  WebUIFactoryFunction function = GetWebUIFactoryFunction(NULL, profile, url);
+  return function ? reinterpret_cast<WebUI::TypeID>(function) : WebUI::kNoWebUI;
+}
+
+bool ChromeWebUIControllerFactory::UseWebUIForURL(
+    content::BrowserContext* browser_context, const GURL& url) const {
+  return GetWebUIType(browser_context, url) != WebUI::kNoWebUI;
+}
+
+bool ChromeWebUIControllerFactory::UseWebUIBindingsForURL(
+    content::BrowserContext* browser_context, const GURL& url) const {
+  bool needs_extensions_web_ui = false;
+#if defined(ENABLE_EXTENSIONS)
+  // Extensions are rendered via WebUI in tabs, but don't actually need WebUI
+  // bindings (see the ExtensionWebUI constructor).
+  needs_extensions_web_ui =
+      NeedsExtensionWebUI(Profile::FromBrowserContext(browser_context), url);
+#endif
+  return !needs_extensions_web_ui && UseWebUIForURL(browser_context, url);
+}
+
+WebUIController* ChromeWebUIControllerFactory::CreateWebUIControllerForURL(
+    WebUI* web_ui,
+    const GURL& url) const {
+  Profile* profile = Profile::FromWebUI(web_ui);
+  WebUIFactoryFunction function = GetWebUIFactoryFunction(web_ui, profile, url);
+  if (!function)
+    return NULL;
+
+  return (*function)(web_ui, url);
+}
+
+void ChromeWebUIControllerFactory::GetFaviconForURL(
+    Profile* profile,
+    const GURL& page_url,
+    const std::vector<int>& desired_sizes_in_pixel,
+    const favicon_base::FaviconResultsCallback& callback) const {
+  // Before determining whether page_url is an extension url, we must handle
+  // overrides. This changes urls in |kChromeUIScheme| to extension urls, and
+  // allows to use ExtensionWebUI::GetFaviconForURL.
+  GURL url(page_url);
+#if defined(ENABLE_EXTENSIONS)
+  ExtensionWebUI::HandleChromeURLOverride(&url, profile);
+
+  // All extensions but the bookmark manager get their favicon from the icons
+  // part of the manifest.
+  if (url.SchemeIs(extensions::kExtensionScheme) &&
+      url.host() != extension_misc::kBookmarkManagerId) {
+    ExtensionWebUI::GetFaviconForURL(profile, url, callback);
+    return;
+  }
+#endif
+
+  std::vector<favicon_base::FaviconRawBitmapResult>* favicon_bitmap_results =
+      new std::vector<favicon_base::FaviconRawBitmapResult>();
+
+  // Use ui::GetSupportedScaleFactors instead of
+  // favicon_base::GetFaviconScales() because chrome favicons comes from
+  // resources.
+  std::vector<ui::ScaleFactor> resource_scale_factors =
+      ui::GetSupportedScaleFactors();
+
+  std::vector<gfx::Size> candidate_sizes;
+  for (size_t i = 0; i < resource_scale_factors.size(); ++i) {
+    float scale = ui::GetScaleForScaleFactor(resource_scale_factors[i]);
+    // Assume that GetFaviconResourceBytes() returns favicons which are
+    // |gfx::kFaviconSize| x |gfx::kFaviconSize| DIP.
+    int candidate_edge_size =
+        static_cast<int>(gfx::kFaviconSize * scale + 0.5f);
+    candidate_sizes.push_back(
+        gfx::Size(candidate_edge_size, candidate_edge_size));
+  }
+  std::vector<size_t> selected_indices;
+  SelectFaviconFrameIndices(
+      candidate_sizes, desired_sizes_in_pixel, &selected_indices, NULL);
+  for (size_t i = 0; i < selected_indices.size(); ++i) {
+    size_t selected_index = selected_indices[i];
+    ui::ScaleFactor selected_resource_scale =
+        resource_scale_factors[selected_index];
+
+    scoped_refptr<base::RefCountedMemory> bitmap(
+        GetFaviconResourceBytes(url, selected_resource_scale));
+    if (bitmap.get() && bitmap->size()) {
+      favicon_base::FaviconRawBitmapResult bitmap_result;
+      bitmap_result.bitmap_data = bitmap;
+      // Leave |bitmap_result|'s icon URL as the default of GURL().
+      bitmap_result.icon_type = favicon_base::FAVICON;
+      favicon_bitmap_results->push_back(bitmap_result);
+
+      bitmap_result.pixel_size = candidate_sizes[selected_index];
+    }
+  }
+
+  RunFaviconCallbackAsync(callback, favicon_bitmap_results);
+}
+
+// static
+ChromeWebUIControllerFactory* ChromeWebUIControllerFactory::GetInstance() {
+  return Singleton<ChromeWebUIControllerFactory>::get();
+}
+
+ChromeWebUIControllerFactory::ChromeWebUIControllerFactory() {
+}
+
+ChromeWebUIControllerFactory::~ChromeWebUIControllerFactory() {
+}
+
+base::RefCountedMemory* ChromeWebUIControllerFactory::GetFaviconResourceBytes(
+    const GURL& page_url, ui::ScaleFactor scale_factor) const {
+#if !defined(OS_ANDROID)  // Bookmarks are part of NTP on Android.
+  // The bookmark manager is a chrome extension, so we have to check for it
+  // before we check for extension scheme.
+  if (page_url.host() == extension_misc::kBookmarkManagerId)
+    return BookmarksUI::GetFaviconResourceBytes(scale_factor);
+
+  // The extension scheme is handled in GetFaviconForURL.
+  if (page_url.SchemeIs(extensions::kExtensionScheme)) {
+    NOTREACHED();
+    return NULL;
+  }
+#endif
+
+  if (!content::HasWebUIScheme(page_url))
+    return NULL;
+
+  if (page_url.host() == chrome::kChromeUIComponentsHost)
+    return ComponentsUI::GetFaviconResourceBytes(scale_factor);
+
+#if defined(OS_WIN)
+  if (page_url.host() == chrome::kChromeUIConflictsHost)
+    return ConflictsUI::GetFaviconResourceBytes(scale_factor);
+#endif
+
+  if (page_url.host() == chrome::kChromeUICrashesHost)
+    return CrashesUI::GetFaviconResourceBytes(scale_factor);
+
+  if (page_url.host() == chrome::kChromeUIFlagsHost)
+    return FlagsUI::GetFaviconResourceBytes(scale_factor);
+
+  if (page_url.host() == chrome::kChromeUIHistoryHost)
+    return HistoryUI::GetFaviconResourceBytes(scale_factor);
+
+#if !defined(OS_ANDROID)
+  // The Apps launcher page is not available on android.
+  if (page_url.host() == chrome::kChromeUIAppLauncherPageHost)
+    return AppLauncherPageUI::GetFaviconResourceBytes(scale_factor);
+
+  // Flash is not available on android.
+  if (page_url.host() == chrome::kChromeUIFlashHost)
+    return FlashUI::GetFaviconResourceBytes(scale_factor);
+
+  // Android uses the native download manager.
+  if (page_url.host() == chrome::kChromeUIDownloadsHost)
+    return DownloadsUI::GetFaviconResourceBytes(scale_factor);
+
+  // Android doesn't use the Options pages.
+  if (page_url.host() == chrome::kChromeUISettingsHost ||
+      page_url.host() == chrome::kChromeUISettingsFrameHost)
+    return options::OptionsUI::GetFaviconResourceBytes(scale_factor);
+
+#if defined(ENABLE_EXTENSIONS)
+  if (page_url.host() == chrome::kChromeUIExtensionsHost ||
+      page_url.host() == chrome::kChromeUIExtensionsFrameHost)
+    return extensions::ExtensionsUI::GetFaviconResourceBytes(scale_factor);
+#endif
+
+  // Android doesn't use the plugins pages.
+  if (page_url.host() == chrome::kChromeUIPluginsHost)
+    return PluginsUI::GetFaviconResourceBytes(scale_factor);
+
+#endif
+
+  return NULL;
+}
--- /dev/null
+++ b/chrome/browser/ui/webui/file_picker/file_picker_ui.cc
@@ -0,0 +1,46 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/webui/file_picker/file_picker_ui.h"
+
+#include "base/values.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/url_constants.h"
+#include "chrome/grit/browser_resources.h"
+#include "chrome/grit/chromium_strings.h"
+#include "chrome/grit/generated_resources.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_ui.h"
+#include "content/public/browser/web_ui_data_source.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/resource/resource_bundle.h"
+
+namespace ui {
+FilePickerUI::FilePickerUI(content::WebUI* web_ui)
+  : WebDialogUI(web_ui) {
+  content::WebUIDataSource* html_source = content::WebUIDataSource::Create(
+      chrome::kChromeUIFilePickerHost);
+
+  html_source->AddLocalizedString(
+       "filePickerFileNameLabel",
+       IDS_FILE_PICKER_FILE_NAME);
+
+  html_source->AddLocalizedString("saveButtonText", IDS_SAVE);
+  html_source->AddLocalizedString("openButtonText", IDS_OK);
+  html_source->AddLocalizedString("cancelButtonText", IDS_CANCEL);
+
+  html_source->SetJsonPath("strings.js");
+
+  html_source->AddResourcePath("file_picker.js", IDR_FILE_PICKER_JS);
+  html_source->AddResourcePath("file_picker.css", IDR_FILE_PICKER_CSS);
+  html_source->SetDefaultResource(IDR_FILE_PICKER_HTML);
+
+  Profile* profile = Profile::FromWebUI(web_ui);
+  content::WebUIDataSource::Add(profile, html_source);
+}
+
+FilePickerUI::~FilePickerUI() {
+}
+
+}  // namespace ui
--- /dev/null
+++ b/chrome/browser/ui/webui/file_picker/file_picker_ui.h
@@ -0,0 +1,24 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_WEBUI_FILE_PICKER_UI_H_
+#define CHROME_BROWSER_UI_WEBUI_FILE_PICKER_UI_H_
+
+#include "base/basictypes.h"
+#include "ui/web_dialogs/web_dialog_ui.h"
+
+namespace ui {
+
+class FilePickerUI : public WebDialogUI {
+ public:
+  explicit FilePickerUI(content::WebUI* web_ui);
+  virtual ~FilePickerUI();
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(FilePickerUI);
+};
+
+}  // namespace ui
+
+#endif  // CHROME_BROWSER_UI_WEBUI_FILE_PICKER_UI_H_
--- /dev/null
+++ b/chrome/browser/ui/webui/file_picker/file_picker_web_dialog.cc
@@ -0,0 +1,165 @@
+// Copyright (c) 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+//#include "ozone/ui/webui/file_picker_web_dialog.h"
+#include "ui/webui/file_picker_web_dialog.h"
+
+#include "base/json/json_writer.h"
+#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/ui/browser_dialogs.h"
+#include "chrome/common/url_constants.h"
+#include "chrome/grit/browser_resources.h"
+#include "chrome/grit/chromium_strings.h"
+#include "chrome/grit/generated_resources.h"
+#include "content/public/browser/web_ui.h"
+#include "content/public/browser/web_ui_message_handler.h"
+#include "ui/strings/grit/ui_strings.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/gfx/size.h"
+
+using content::WebContents;
+using content::WebUIMessageHandler;
+
+namespace {
+
+// Default width/height of the dialog.
+const int kDefaultWidth = 350;
+const int kDefaultHeight = 225;
+}
+
+namespace ui {
+
+class FilePickerMessageHandler : public content::WebUIMessageHandler {
+ public:
+  FilePickerMessageHandler(
+      const ui::FilePickerWebDialog* dialog);
+  ~FilePickerMessageHandler();
+  void RegisterMessages() override;
+
+ private:
+  // content::WebUIMessageHandler implementation.
+  void OnCancelButtonClicked(const base::ListValue* args);
+  void OnSaveButtonClicked(const base::ListValue* args);
+
+  // Weak ptr to parent dialog.
+  const ui::FilePickerWebDialog* dialog_;
+};
+
+FilePickerMessageHandler::FilePickerMessageHandler(
+    const ui::FilePickerWebDialog* dialog)
+  : dialog_(dialog) {
+}
+
+FilePickerMessageHandler::~FilePickerMessageHandler() {
+}
+
+void FilePickerMessageHandler::RegisterMessages() {
+  web_ui()->RegisterMessageCallback(
+      "cancel",
+      base::Bind(&FilePickerMessageHandler::OnCancelButtonClicked,
+                 base::Unretained(this)));
+  web_ui()->RegisterMessageCallback(
+      "done",
+      base::Bind(&FilePickerMessageHandler::OnSaveButtonClicked,
+                 base::Unretained(this)));
+}
+
+void FilePickerMessageHandler::OnCancelButtonClicked(
+    const base::ListValue* args) {
+    std::string file_path;
+    dialog_->Close(file_path);
+}
+
+void FilePickerMessageHandler::OnSaveButtonClicked(
+    const base::ListValue* args) {
+    std::string file_path;
+    args->GetString(0, &file_path);
+    dialog_->Close(file_path);
+}
+
+}  // namespace ui
+
+namespace ui {
+
+// static
+void FilePickerWebDialog::ShowDialog(SelectFileDialog::Type type, gfx::NativeWindow owning_window,
+    content::WebContents* contents,  SelectFileDialog::Listener* listener) {
+  chrome::ShowWebDialog(owning_window,
+                        ProfileManager::GetActiveUserProfile(),
+                        new FilePickerWebDialog(type, listener));
+}
+
+void FilePickerWebDialog::Close(const std::string& file_path) const {
+  if (!file_path.empty())
+    listener_->FileSelected(base::FilePath(file_path), 0 , NULL);
+  else
+    listener_->FileSelectionCanceled(NULL);
+}
+
+FilePickerWebDialog::FilePickerWebDialog(SelectFileDialog::Type type, SelectFileDialog::Listener* listener)
+    : type_(type), listener_(listener) {
+}
+
+ui::ModalType FilePickerWebDialog::GetDialogModalType() const {
+  return ui::MODAL_TYPE_SYSTEM;
+}
+
+base::string16 FilePickerWebDialog::GetDialogTitle() const {
+
+  if (type_ == SelectFileDialog::SELECT_OPEN_FILE)
+    return l10n_util::GetStringUTF16(IDS_OPEN_FILE_DIALOG_TITLE);
+  else if (type_ == SelectFileDialog::SELECT_SAVEAS_FILE)
+    return l10n_util::GetStringUTF16(IDS_SAVE_AS_DIALOG_TITLE);
+
+  return base::string16();
+}
+
+GURL FilePickerWebDialog::GetDialogContentURL() const {
+  return GURL(chrome::kChromeUIFilePickerURL);
+}
+
+void FilePickerWebDialog::GetWebUIMessageHandlers(
+    std::vector<content::WebUIMessageHandler*>* handlers) const {
+  handlers->push_back(new FilePickerMessageHandler(this));
+}
+
+void FilePickerWebDialog::GetDialogSize(gfx::Size* size) const {
+  size->SetSize(kDefaultWidth, kDefaultHeight);
+}
+
+std::string FilePickerWebDialog::GetDialogArgs() const {
+  std::string data;
+  base::DictionaryValue file_info;
+  if (type_ == SelectFileDialog::SELECT_OPEN_FILE)
+    file_info.SetBoolean("promptForOpenFile",  true);
+  else
+    file_info.SetBoolean("promptForOpenFile",  false);
+
+  // FIXME(joone): Pass the home directory
+  file_info.SetString("filePath",  "/home/app");
+  base::JSONWriter::Write(&file_info, &data);
+  return data;
+}
+
+void FilePickerWebDialog::OnDialogClosed(const std::string& json_retval) {
+  delete this;
+}
+
+void FilePickerWebDialog::OnCloseContents(WebContents* source,
+                                                bool* out_close_dialog) {
+  if (out_close_dialog)
+    *out_close_dialog = true;
+}
+
+bool FilePickerWebDialog::ShouldShowDialogTitle() const {
+  return true;
+}
+
+bool FilePickerWebDialog::HandleContextMenu(
+    const content::ContextMenuParams& params) {
+  // Disable context menu.
+  return true;
+}
+
+}  // namespace ui
--- a/chrome/chrome_browser_ui.gypi
+++ b/chrome/chrome_browser_ui.gypi
@@ -1056,6 +1056,9 @@
       'browser/ui/webui/favicon_source.h',
       'browser/ui/webui/fileicon_source.cc',
       'browser/ui/webui/fileicon_source.h',
+      'browser/ui/webui/file_picker/file_picker_ui.cc',
+      'browser/ui/webui/file_picker/file_picker_ui.h',
+      'browser/ui/webui/file_picker/file_picker_web_dialog.cc',
       'browser/ui/webui/flags_ui.cc',
       'browser/ui/webui/flags_ui.h',
       'browser/ui/webui/gcm_internals_ui.cc',
@@ -2290,6 +2293,8 @@
       'browser/ui/views/external_protocol_dialog.h',
       'browser/ui/views/frame/desktop_browser_frame_aura.cc',
       'browser/ui/views/frame/desktop_browser_frame_aura.h',
+      'browser/ui/views/frame/browser_desktop_root_window_host_ozone.cc',
+      'browser/ui/views/frame/browser_desktop_root_window_host_ozone.h',
       'browser/ui/views/frame/opaque_browser_frame_view.cc',
       'browser/ui/views/frame/opaque_browser_frame_view.h',
       'browser/ui/views/message_center/message_center_frame_view.cc',
@@ -2917,6 +2922,7 @@
               'dependencies': [
                 '../build/linux/system.gyp:dbus',
                 '../build/linux/system.gyp:fontconfig',
+                '../build/linux/system.gyp:pangocairo',
                 '../dbus/dbus.gyp:dbus',
               ],
             }],
--- /dev/null
+++ b/chrome/chrome_browser_ui.gypi.orig
@@ -0,0 +1,2997 @@
+# Copyright 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+  'variables': {
+    'chrome_browser_ui_non_ios_sources': [
+      'browser/ui/accelerator_utils.h',
+      'browser/ui/android/android_about_app_info.cc',
+      'browser/ui/android/android_about_app_info.h',
+      'browser/ui/android/autofill/autofill_dialog_controller_android.cc',
+      'browser/ui/android/autofill/autofill_dialog_controller_android.h',
+      'browser/ui/android/autofill/autofill_dialog_result.cc',
+      'browser/ui/android/autofill/autofill_dialog_result.h',
+      'browser/ui/android/autofill/autofill_logger_android.cc',
+      'browser/ui/android/autofill/autofill_logger_android.h',
+      'browser/ui/android/autofill/autofill_popup_view_android.cc',
+      'browser/ui/android/autofill/autofill_popup_view_android.h',
+      'browser/ui/android/content_settings/popup_blocked_infobar_delegate.cc',
+      'browser/ui/android/content_settings/popup_blocked_infobar_delegate.h',
+      'browser/ui/android/infobars/auto_login_infobar_delegate_android.cc',
+      'browser/ui/android/infobars/auto_login_infobar_delegate_android.h',
+      'browser/ui/android/infobars/auto_login_prompter.cc',
+      'browser/ui/android/infobars/auto_login_prompter.h',
+      'browser/ui/android/infobars/confirm_infobar.cc',
+      'browser/ui/android/infobars/confirm_infobar.h',
+      'browser/ui/android/infobars/data_reduction_proxy_infobar.cc',
+      'browser/ui/android/infobars/data_reduction_proxy_infobar.h',
+      'browser/ui/android/infobars/infobar_android.cc',
+      'browser/ui/android/infobars/infobar_android.h',
+      'browser/ui/android/infobars/infobar_container_android.cc',
+      'browser/ui/android/infobars/infobar_container_android.h',
+      'browser/ui/android/infobars/save_password_infobar.cc',
+      'browser/ui/android/infobars/save_password_infobar.h',
+      'browser/ui/android/infobars/translate_infobar.cc',
+      'browser/ui/android/infobars/translate_infobar.h',
+      'browser/ui/android/certificate_viewer_android.cc',
+      'browser/ui/android/chrome_http_auth_handler.cc',
+      'browser/ui/android/chrome_http_auth_handler.h',
+      'browser/ui/android/color_chooser_dialog_android.cc',
+      'browser/ui/android/context_menu_helper.cc',
+      'browser/ui/android/context_menu_helper.h',
+      'browser/ui/android/external_protocol_dialog_android.cc',
+      'browser/ui/android/javascript_app_modal_dialog_android.cc',
+      'browser/ui/android/login_prompt_android.cc',
+      'browser/ui/android/navigation_popup.cc',
+      'browser/ui/android/navigation_popup.h',
+      'browser/ui/android/omnibox/omnibox_view_util.cc',
+      'browser/ui/android/omnibox/omnibox_view_util.h',
+      'browser/ui/android/simple_message_box_android.cc',
+      'browser/ui/android/ssl_client_certificate_request.cc',
+      'browser/ui/android/ssl_client_certificate_request.h',
+      'browser/ui/android/status_tray_android.cc',
+      'browser/ui/android/tab_contents/chrome_web_contents_view_delegate_android.cc',
+      'browser/ui/android/tab_contents/chrome_web_contents_view_delegate_android.h',
+      'browser/ui/android/tab_model/tab_model.cc',
+      'browser/ui/android/tab_model/tab_model.h',
+      'browser/ui/android/tab_model/tab_model_base.cc',
+      'browser/ui/android/tab_model/tab_model_base.h',
+      'browser/ui/android/tab_model/tab_model_list.cc',
+      'browser/ui/android/tab_model/tab_model_list.h',
+      'browser/ui/android/toolbar/toolbar_model_android.cc',
+      'browser/ui/android/toolbar/toolbar_model_android.h',
+      'browser/ui/android/tab_restore_service_delegate_android.cc',
+      'browser/ui/android/website_settings_popup_android.cc',
+      'browser/ui/android/website_settings_popup_android.h',
+      'browser/ui/android/window_android_helper.cc',
+      'browser/ui/android/window_android_helper.h',
+      'browser/ui/app_list/app_list_service.h',
+      'browser/ui/app_list/app_list_util.cc',
+      'browser/ui/app_list/app_list_util.h',
+      'browser/ui/app_modal_dialogs/app_modal_dialog.cc',
+      'browser/ui/app_modal_dialogs/app_modal_dialog.h',
+      'browser/ui/app_modal_dialogs/app_modal_dialog_queue.cc',
+      'browser/ui/app_modal_dialogs/app_modal_dialog_queue.h',
+      'browser/ui/app_modal_dialogs/javascript_app_modal_dialog.cc',
+      'browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h',
+      'browser/ui/app_modal_dialogs/javascript_dialog_manager.cc',
+      'browser/ui/app_modal_dialogs/javascript_dialog_manager.h',
+      'browser/ui/app_modal_dialogs/native_app_modal_dialog.h',
+      'browser/ui/apps/app_info_dialog.h',
+      'browser/ui/apps/apps_metro_handler_win.cc',
+      'browser/ui/apps/apps_metro_handler_win.h',
+      'browser/ui/apps/chrome_app_window_client.cc',
+      'browser/ui/apps/chrome_app_window_client.h',
+      'browser/ui/apps/directory_access_confirmation_dialog.cc',
+      'browser/ui/apps/directory_access_confirmation_dialog.h',
+      'browser/ui/autofill/autofill_dialog_controller.cc',
+      'browser/ui/autofill/autofill_dialog_controller.h',
+      'browser/ui/autofill/autofill_dialog_models.cc',
+      'browser/ui/autofill/autofill_dialog_models.h',
+      'browser/ui/autofill/autofill_dialog_types.cc',
+      'browser/ui/autofill/autofill_dialog_types.h',
+      'browser/ui/autofill/autofill_popup_controller.h',
+      'browser/ui/autofill/autofill_popup_controller_impl.cc',
+      'browser/ui/autofill/autofill_popup_controller_impl.h',
+      'browser/ui/autofill/autofill_popup_view.h',
+      'browser/ui/autofill/autofill_popup_view_delegate.h',
+      'browser/ui/autofill/chrome_autofill_client.cc',
+      'browser/ui/autofill/chrome_autofill_client.h',
+      'browser/ui/autofill/chrome_autofill_client_mac.mm',
+      'browser/ui/autofill/country_combobox_model.cc',
+      'browser/ui/autofill/country_combobox_model.h',
+      'browser/ui/autofill/loading_animation.cc',
+      'browser/ui/autofill/loading_animation.h',
+      'browser/ui/autofill/password_generation_popup_controller_impl.cc',
+      'browser/ui/autofill/password_generation_popup_controller_impl.h',
+      'browser/ui/autofill/password_generation_popup_controller.h',
+      'browser/ui/autofill/password_generation_popup_observer.h',
+      'browser/ui/autofill/password_generation_popup_view.cc',
+      'browser/ui/autofill/password_generation_popup_view.h',
+      'browser/ui/autofill/popup_controller_common.cc',
+      'browser/ui/autofill/popup_controller_common.h',
+      'browser/ui/blocked_content/blocked_window_params.cc',
+      'browser/ui/blocked_content/blocked_window_params.h',
+      'browser/ui/blocked_content/popup_blocker_tab_helper.cc',
+      'browser/ui/blocked_content/popup_blocker_tab_helper.h',
+      'browser/ui/bookmarks/bookmark_bar.h',
+      'browser/ui/bookmarks/bookmark_bar_constants.h',
+      'browser/ui/bookmarks/bookmark_bar_instructions_delegate.h',
+      'browser/ui/bookmarks/bookmark_bubble_delegate.h',
+      'browser/ui/bookmarks/bookmark_editor.cc',
+      'browser/ui/bookmarks/bookmark_editor.h',
+      'browser/ui/bookmarks/bookmark_tab_helper.cc',
+      'browser/ui/bookmarks/bookmark_tab_helper.h',
+      'browser/ui/bookmarks/bookmark_utils.cc',
+      'browser/ui/bookmarks/bookmark_utils.h',
+      'browser/ui/bookmarks/recently_used_folders_combo_model.cc',
+      'browser/ui/bookmarks/recently_used_folders_combo_model.h',
+      'browser/ui/browser_commands.cc',
+      'browser/ui/browser_commands.h',
+      'browser/ui/browser_commands_chromeos.cc',
+      'browser/ui/browser_commands_chromeos.h',
+      'browser/ui/browser_commands_mac.cc',
+      'browser/ui/browser_commands_mac.h',
+      'browser/ui/browser_content_translate_driver_observer.cc',
+      'browser/ui/browser_content_translate_driver_observer.h',
+      'browser/ui/browser_dialogs.h',
+      'browser/ui/browser_instant_controller.cc',
+      'browser/ui/browser_instant_controller.h',
+      'browser/ui/browser_mac.cc',
+      'browser/ui/browser_mac.h',
+      'browser/ui/browser_navigator.cc',
+      'browser/ui/browser_navigator.h',
+      'browser/ui/browser_otr_state_android.cc',
+      'browser/ui/browser_tab_restorer.cc',
+      'browser/ui/browser_ui_prefs.cc',
+      'browser/ui/browser_ui_prefs.h',
+      'browser/ui/browser_win.cc',
+      'browser/ui/browser_window.h',
+      'browser/ui/browser_window_state.cc',
+      'browser/ui/browser_window_state.h',
+      'browser/ui/browser_window_testing_views.h',
+      'browser/ui/chrome_select_file_policy.cc',
+      'browser/ui/chrome_select_file_policy.h',
+      'browser/ui/cocoa/accelerator_utils_cocoa.mm',
+      'browser/ui/cocoa/about_ipc_controller.h',
+      'browser/ui/cocoa/about_ipc_controller.mm',
+      'browser/ui/cocoa/about_ipc_dialog.h',
+      'browser/ui/cocoa/about_ipc_dialog.mm',
+      'browser/ui/cocoa/accelerators_cocoa.h',
+      'browser/ui/cocoa/accelerators_cocoa.mm',
+      'browser/ui/cocoa/animatable_image.h',
+      'browser/ui/cocoa/animatable_image.mm',
+      'browser/ui/cocoa/animatable_view.h',
+      'browser/ui/cocoa/animatable_view.mm',
+      'browser/ui/cocoa/applescript/apple_event_util.h',
+      'browser/ui/cocoa/applescript/apple_event_util.mm',
+      'browser/ui/cocoa/applescript/bookmark_folder_applescript.h',
+      'browser/ui/cocoa/applescript/bookmark_folder_applescript.mm',
+      'browser/ui/cocoa/applescript/bookmark_item_applescript.h',
+      'browser/ui/cocoa/applescript/bookmark_item_applescript.mm',
+      'browser/ui/cocoa/applescript/bookmark_node_applescript.h',
+      'browser/ui/cocoa/applescript/bookmark_node_applescript.mm',
+      'browser/ui/cocoa/applescript/browsercrapplication+applescript.h',
+      'browser/ui/cocoa/applescript/browsercrapplication+applescript.mm',
+      'browser/ui/cocoa/applescript/constants_applescript.h',
+      'browser/ui/cocoa/applescript/constants_applescript.mm',
+      'browser/ui/cocoa/applescript/element_applescript.h',
+      'browser/ui/cocoa/applescript/element_applescript.mm',
+      'browser/ui/cocoa/applescript/error_applescript.h',
+      'browser/ui/cocoa/applescript/error_applescript.mm',
+      'browser/ui/cocoa/applescript/tab_applescript.h',
+      'browser/ui/cocoa/applescript/tab_applescript.mm',
+      'browser/ui/cocoa/applescript/window_applescript.h',
+      'browser/ui/cocoa/applescript/window_applescript.mm',
+      'browser/ui/cocoa/apps/app_info_dialog_cocoa.mm',
+      'browser/ui/cocoa/apps/app_shim_menu_controller_mac.h',
+      'browser/ui/cocoa/apps/app_shim_menu_controller_mac.mm',
+      'browser/ui/cocoa/apps/chrome_app_window_client_cocoa.mm',
+      'browser/ui/cocoa/apps/native_app_window_cocoa.h',
+      'browser/ui/cocoa/apps/native_app_window_cocoa.mm',
+      'browser/ui/cocoa/apps/quit_with_apps_controller_mac.cc',
+      'browser/ui/cocoa/apps/quit_with_apps_controller_mac.h',
+      'browser/ui/cocoa/autofill/autofill_account_chooser.h',
+      'browser/ui/cocoa/autofill/autofill_account_chooser.mm',
+      'browser/ui/cocoa/autofill/autofill_details_container.h',
+      'browser/ui/cocoa/autofill/autofill_details_container.mm',
+      'browser/ui/cocoa/autofill/autofill_dialog_cocoa.h',
+      'browser/ui/cocoa/autofill/autofill_dialog_cocoa.mm',
+      'browser/ui/cocoa/autofill/autofill_dialog_constants.h',
+      'browser/ui/cocoa/autofill/autofill_bubble_controller.h',
+      'browser/ui/cocoa/autofill/autofill_bubble_controller.mm',
+      'browser/ui/cocoa/autofill/autofill_dialog_window_controller.h',
+      'browser/ui/cocoa/autofill/autofill_dialog_window_controller.mm',
+      'browser/ui/cocoa/autofill/autofill_header.h',
+      'browser/ui/cocoa/autofill/autofill_header.mm',
+      'browser/ui/cocoa/autofill/autofill_layout.h',
+      'browser/ui/cocoa/autofill/autofill_loading_shield_controller.h',
+      'browser/ui/cocoa/autofill/autofill_loading_shield_controller.mm',
+      'browser/ui/cocoa/autofill/autofill_main_container.h',
+      'browser/ui/cocoa/autofill/autofill_main_container.mm',
+      'browser/ui/cocoa/autofill/autofill_notification_container.h',
+      'browser/ui/cocoa/autofill/autofill_notification_container.mm',
+      'browser/ui/cocoa/autofill/autofill_notification_controller.h',
+      'browser/ui/cocoa/autofill/autofill_notification_controller.mm',
+      'browser/ui/cocoa/autofill/autofill_overlay_controller.h',
+      'browser/ui/cocoa/autofill/autofill_overlay_controller.mm',
+      'browser/ui/cocoa/autofill/autofill_popup_view_bridge.h',
+      'browser/ui/cocoa/autofill/autofill_popup_view_bridge.mm',
+      'browser/ui/cocoa/autofill/autofill_popup_base_view_cocoa.h',
+      'browser/ui/cocoa/autofill/autofill_popup_base_view_cocoa.mm',
+      'browser/ui/cocoa/autofill/autofill_popup_view_cocoa.h',
+      'browser/ui/cocoa/autofill/autofill_popup_view_cocoa.mm',
+      'browser/ui/cocoa/autofill/autofill_pop_up_button.h',
+      'browser/ui/cocoa/autofill/autofill_pop_up_button.mm',
+      'browser/ui/cocoa/autofill/autofill_section_container.h',
+      'browser/ui/cocoa/autofill/autofill_section_container.mm',
+      'browser/ui/cocoa/autofill/autofill_section_view.h',
+      'browser/ui/cocoa/autofill/autofill_section_view.mm',
+      'browser/ui/cocoa/autofill/autofill_sign_in_container.h',
+      'browser/ui/cocoa/autofill/autofill_sign_in_container.mm',
+      'browser/ui/cocoa/autofill/autofill_suggestion_container.h',
+      'browser/ui/cocoa/autofill/autofill_suggestion_container.mm',
+      'browser/ui/cocoa/autofill/autofill_textfield.h',
+      'browser/ui/cocoa/autofill/autofill_textfield.mm',
+      'browser/ui/cocoa/autofill/autofill_tooltip_controller.h',
+      'browser/ui/cocoa/autofill/autofill_tooltip_controller.mm',
+      'browser/ui/cocoa/autofill/down_arrow_popup_menu_cell.h',
+      'browser/ui/cocoa/autofill/down_arrow_popup_menu_cell.mm',
+      'browser/ui/cocoa/autofill/generated_credit_card_bubble_cocoa.h',
+      'browser/ui/cocoa/autofill/generated_credit_card_bubble_cocoa.mm',
+      'browser/ui/cocoa/autofill/layout_view.h',
+      'browser/ui/cocoa/autofill/layout_view.mm',
+      'browser/ui/cocoa/autofill/new_credit_card_bubble_cocoa.h',
+      'browser/ui/cocoa/autofill/new_credit_card_bubble_cocoa.mm',
+      'browser/ui/cocoa/autofill/password_generation_popup_view_bridge.h',
+      'browser/ui/cocoa/autofill/password_generation_popup_view_bridge.mm',
+      'browser/ui/cocoa/autofill/password_generation_popup_view_cocoa.h',
+      'browser/ui/cocoa/autofill/password_generation_popup_view_cocoa.mm',
+      'browser/ui/cocoa/autofill/simple_grid_layout.h',
+      'browser/ui/cocoa/autofill/simple_grid_layout.mm',
+      'browser/ui/cocoa/background_gradient_view.h',
+      'browser/ui/cocoa/background_gradient_view.mm',
+      'browser/ui/cocoa/base_bubble_controller.h',
+      'browser/ui/cocoa/base_bubble_controller.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_all_tabs_controller.h',
+      'browser/ui/cocoa/bookmarks/bookmark_all_tabs_controller.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_bar_bridge.h',
+      'browser/ui/cocoa/bookmarks/bookmark_bar_bridge.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_bar_constants.h',
+      'browser/ui/cocoa/bookmarks/bookmark_bar_controller.h',
+      'browser/ui/cocoa/bookmarks/bookmark_bar_controller.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_bar_folder_button_cell.h',
+      'browser/ui/cocoa/bookmarks/bookmark_bar_folder_button_cell.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.h',
+      'browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_bar_folder_hover_state.h',
+      'browser/ui/cocoa/bookmarks/bookmark_bar_folder_hover_state.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.h',
+      'browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_bar_folder_window.h',
+      'browser/ui/cocoa/bookmarks/bookmark_bar_folder_window.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_bar_state.h',
+      'browser/ui/cocoa/bookmarks/bookmark_bar_toolbar_view.h',
+      'browser/ui/cocoa/bookmarks/bookmark_bar_toolbar_view.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_bar_view.h',
+      'browser/ui/cocoa/bookmarks/bookmark_bar_view.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_bubble_controller.h',
+      'browser/ui/cocoa/bookmarks/bookmark_bubble_controller.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_button.h',
+      'browser/ui/cocoa/bookmarks/bookmark_button.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_button_cell.h',
+      'browser/ui/cocoa/bookmarks/bookmark_button_cell.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_context_menu_cocoa_controller.h',
+      'browser/ui/cocoa/bookmarks/bookmark_context_menu_cocoa_controller.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_drag_drop_cocoa.h',
+      'browser/ui/cocoa/bookmarks/bookmark_drag_drop_cocoa.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_editor_base_controller.h',
+      'browser/ui/cocoa/bookmarks/bookmark_editor_base_controller.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_editor_controller.h',
+      'browser/ui/cocoa/bookmarks/bookmark_editor_controller.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_folder_target.h',
+      'browser/ui/cocoa/bookmarks/bookmark_folder_target.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_menu_bridge.h',
+      'browser/ui/cocoa/bookmarks/bookmark_menu_bridge.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.h',
+      'browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_model_observer_for_cocoa.h',
+      'browser/ui/cocoa/bookmarks/bookmark_model_observer_for_cocoa.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_name_folder_controller.h',
+      'browser/ui/cocoa/bookmarks/bookmark_name_folder_controller.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_sync_promo_controller.h',
+      'browser/ui/cocoa/bookmarks/bookmark_sync_promo_controller.mm',
+      'browser/ui/cocoa/bookmarks/bookmark_tree_browser_cell.h',
+      'browser/ui/cocoa/bookmarks/bookmark_tree_browser_cell.mm',
+      'browser/ui/cocoa/browser/edit_search_engine_cocoa_controller.h',
+      'browser/ui/cocoa/browser/edit_search_engine_cocoa_controller.mm',
+      'browser/ui/cocoa/browser/zoom_bubble_controller.h',
+      'browser/ui/cocoa/browser/zoom_bubble_controller.mm',
+      'browser/ui/cocoa/browser_command_executor.h',
+      'browser/ui/cocoa/browser_window_cocoa.h',
+      'browser/ui/cocoa/browser_window_cocoa.mm',
+      'browser/ui/cocoa/browser_window_controller.h',
+      'browser/ui/cocoa/browser_window_controller.mm',
+      'browser/ui/cocoa/browser_window_layout.h',
+      'browser/ui/cocoa/browser_window_layout.mm',
+      'browser/ui/cocoa/browser_window_controller_private.h',
+      'browser/ui/cocoa/browser_window_controller_private.mm',
+      'browser/ui/cocoa/browser_window_factory.mm',
+      'browser/ui/cocoa/browser_window_utils.h',
+      'browser/ui/cocoa/browser_window_utils.mm',
+      'browser/ui/cocoa/bubble_combobox.h',
+      'browser/ui/cocoa/bubble_combobox.mm',
+      'browser/ui/cocoa/bubble_view.h',
+      'browser/ui/cocoa/bubble_view.mm',
+      'browser/ui/cocoa/certificate_viewer_mac.mm',
+      'browser/ui/cocoa/chrome_browser_window.h',
+      'browser/ui/cocoa/chrome_browser_window.mm',
+      'browser/ui/cocoa/chrome_event_processing_window.h',
+      'browser/ui/cocoa/chrome_event_processing_window.mm',
+      'browser/ui/cocoa/clickhold_button_cell.h',
+      'browser/ui/cocoa/clickhold_button_cell.mm',
+      'browser/ui/cocoa/color_chooser_mac.mm',
+      'browser/ui/cocoa/command_observer_bridge.h',
+      'browser/ui/cocoa/command_observer_bridge.mm',
+      'browser/ui/cocoa/confirm_bubble_cocoa.h',
+      'browser/ui/cocoa/confirm_bubble_cocoa.mm',
+      'browser/ui/cocoa/confirm_bubble_controller.h',
+      'browser/ui/cocoa/confirm_bubble_controller.mm',
+      'browser/ui/cocoa/confirm_quit.h',
+      'browser/ui/cocoa/confirm_quit_panel_controller.h',
+      'browser/ui/cocoa/confirm_quit_panel_controller.mm',
+      'browser/ui/cocoa/constrained_web_dialog_delegate_mac.mm',
+      'browser/ui/cocoa/constrained_window/constrained_window_alert.h',
+      'browser/ui/cocoa/constrained_window/constrained_window_alert.mm',
+      'browser/ui/cocoa/constrained_window/constrained_window_animation.h',
+      'browser/ui/cocoa/constrained_window/constrained_window_animation.mm',
+      'browser/ui/cocoa/constrained_window/constrained_window_button.h',
+      'browser/ui/cocoa/constrained_window/constrained_window_button.mm',
+      'browser/ui/cocoa/constrained_window/constrained_window_control_utils.h',
+      'browser/ui/cocoa/constrained_window/constrained_window_control_utils.mm',
+      'browser/ui/cocoa/constrained_window/constrained_window_custom_sheet.h',
+      'browser/ui/cocoa/constrained_window/constrained_window_custom_sheet.mm',
+      'browser/ui/cocoa/constrained_window/constrained_window_custom_window.h',
+      'browser/ui/cocoa/constrained_window/constrained_window_custom_window.mm',
+      'browser/ui/cocoa/constrained_window/constrained_window_mac.h',
+      'browser/ui/cocoa/constrained_window/constrained_window_mac.mm',
+      'browser/ui/cocoa/constrained_window/constrained_window_sheet.h',
+      'browser/ui/cocoa/constrained_window/constrained_window_sheet_controller.h',
+      'browser/ui/cocoa/constrained_window/constrained_window_sheet_controller.mm',
+      'browser/ui/cocoa/constrained_window/constrained_window_sheet_info.h',
+      'browser/ui/cocoa/constrained_window/constrained_window_sheet_info.mm',
+      'browser/ui/cocoa/content_settings/collected_cookies_mac.h',
+      'browser/ui/cocoa/content_settings/collected_cookies_mac.mm',
+      'browser/ui/cocoa/content_settings/content_setting_bubble_cocoa.h',
+      'browser/ui/cocoa/content_settings/content_setting_bubble_cocoa.mm',
+      'browser/ui/cocoa/content_settings/cookie_details.h',
+      'browser/ui/cocoa/content_settings/cookie_details.mm',
+      'browser/ui/cocoa/content_settings/cookie_details_view_controller.h',
+      'browser/ui/cocoa/content_settings/cookie_details_view_controller.mm',
+      'browser/ui/cocoa/content_settings/cookie_tree_node.h',
+      'browser/ui/cocoa/content_settings/cookie_tree_node.mm',
+      'browser/ui/cocoa/content_settings/cookies_tree_controller_bridge.h',
+      'browser/ui/cocoa/content_settings/cookies_tree_controller_bridge.mm',
+      'browser/ui/cocoa/custom_frame_view.h',
+      'browser/ui/cocoa/custom_frame_view.mm',
+      'browser/ui/cocoa/dev_tools_controller.h',
+      'browser/ui/cocoa/dev_tools_controller.mm',
+      'browser/ui/cocoa/dock_icon.h',
+      'browser/ui/cocoa/dock_icon.mm',
+      'browser/ui/cocoa/download/background_theme.h',
+      'browser/ui/cocoa/download/background_theme.mm',
+      'browser/ui/cocoa/download/download_item_button.h',
+      'browser/ui/cocoa/download/download_item_button.mm',
+      'browser/ui/cocoa/download/download_item_cell.h',
+      'browser/ui/cocoa/download/download_item_cell.mm',
+      'browser/ui/cocoa/download/download_item_controller.h',
+      'browser/ui/cocoa/download/download_item_controller.mm',
+      'browser/ui/cocoa/download/download_item_drag_mac.mm',
+      'browser/ui/cocoa/download/download_item_mac.h',
+      'browser/ui/cocoa/download/download_item_mac.mm',
+      'browser/ui/cocoa/download/download_shelf_context_menu_controller.h',
+      'browser/ui/cocoa/download/download_shelf_context_menu_controller.mm',
+      'browser/ui/cocoa/download/download_shelf_controller.h',
+      'browser/ui/cocoa/download/download_shelf_controller.mm',
+      'browser/ui/cocoa/download/download_shelf_mac.h',
+      'browser/ui/cocoa/download/download_shelf_mac.mm',
+      'browser/ui/cocoa/download/download_shelf_view.h',
+      'browser/ui/cocoa/download/download_shelf_view.mm',
+      'browser/ui/cocoa/download/download_show_all_button.h',
+      'browser/ui/cocoa/download/download_show_all_button.mm',
+      'browser/ui/cocoa/download/download_show_all_cell.h',
+      'browser/ui/cocoa/download/download_show_all_cell.mm',
+      'browser/ui/cocoa/download/download_started_animation_mac.mm',
+      'browser/ui/cocoa/download/download_util_mac.h',
+      'browser/ui/cocoa/download/download_util_mac.mm',
+      'browser/ui/cocoa/draggable_button.h',
+      'browser/ui/cocoa/draggable_button.mm',
+      'browser/ui/cocoa/draggable_button_mixin.h',
+      'browser/ui/cocoa/draggable_button_mixin.mm',
+      'browser/ui/cocoa/drag_util.h',
+      'browser/ui/cocoa/drag_util.mm',
+      'browser/ui/cocoa/encoding_menu_controller_delegate_mac.h',
+      'browser/ui/cocoa/encoding_menu_controller_delegate_mac.mm',
+      'browser/ui/cocoa/extensions/browser_action_button.h',
+      'browser/ui/cocoa/extensions/browser_action_button.mm',
+      'browser/ui/cocoa/extensions/browser_action_test_util_mac.mm',
+      'browser/ui/cocoa/extensions/browser_actions_container_view.h',
+      'browser/ui/cocoa/extensions/browser_actions_container_view.mm',
+      'browser/ui/cocoa/extensions/browser_actions_controller.h',
+      'browser/ui/cocoa/extensions/browser_actions_controller.mm',
+      'browser/ui/cocoa/extensions/extension_action_context_menu_controller.h',
+      'browser/ui/cocoa/extensions/extension_action_context_menu_controller.mm',
+      'browser/ui/cocoa/extensions/extension_install_dialog_controller.h',
+      'browser/ui/cocoa/extensions/extension_install_dialog_controller.mm',
+      'browser/ui/cocoa/extensions/extension_install_view_controller.h',
+      'browser/ui/cocoa/extensions/extension_install_view_controller.mm',
+      'browser/ui/cocoa/extensions/extension_installed_bubble_bridge.mm',
+      'browser/ui/cocoa/extensions/extension_installed_bubble_controller.h',
+      'browser/ui/cocoa/extensions/extension_installed_bubble_controller.mm',
+      'browser/ui/cocoa/extensions/extension_keybinding_registry_cocoa.h',
+      'browser/ui/cocoa/extensions/extension_keybinding_registry_cocoa.mm',
+      'browser/ui/cocoa/extensions/extension_popup_controller.h',
+      'browser/ui/cocoa/extensions/extension_popup_controller.mm',
+      'browser/ui/cocoa/extensions/extension_uninstall_dialog_cocoa.mm',
+      'browser/ui/cocoa/extensions/extension_view_mac.h',
+      'browser/ui/cocoa/extensions/extension_view_mac.mm',
+      'browser/ui/cocoa/extensions/media_galleries_dialog_cocoa.h',
+      'browser/ui/cocoa/extensions/media_galleries_dialog_cocoa.mm',
+      'browser/ui/cocoa/extensions/media_gallery_list_entry_view.h',
+      'browser/ui/cocoa/extensions/media_gallery_list_entry_view.mm',
+      'browser/ui/cocoa/extensions/windowed_install_dialog_controller.h',
+      'browser/ui/cocoa/extensions/windowed_install_dialog_controller.mm',
+      'browser/ui/cocoa/external_protocol_dialog.h',
+      'browser/ui/cocoa/external_protocol_dialog.mm',
+      'browser/ui/cocoa/fast_resize_view.h',
+      'browser/ui/cocoa/fast_resize_view.mm',
+      'browser/ui/cocoa/find_bar/find_bar_bridge.h',
+      'browser/ui/cocoa/find_bar/find_bar_bridge.mm',
+      'browser/ui/cocoa/find_bar/find_bar_cocoa_controller.h',
+      'browser/ui/cocoa/find_bar/find_bar_cocoa_controller.mm',
+      'browser/ui/cocoa/find_bar/find_bar_text_field.h',
+      'browser/ui/cocoa/find_bar/find_bar_text_field.mm',
+      'browser/ui/cocoa/find_bar/find_bar_text_field_cell.h',
+      'browser/ui/cocoa/find_bar/find_bar_text_field_cell.mm',
+      'browser/ui/cocoa/find_bar/find_bar_view.h',
+      'browser/ui/cocoa/find_bar/find_bar_view.mm',
+      'browser/ui/cocoa/first_run_bubble_controller.h',
+      'browser/ui/cocoa/first_run_bubble_controller.mm',
+      'browser/ui/cocoa/first_run_dialog.h',
+      'browser/ui/cocoa/first_run_dialog.mm',
+      'browser/ui/cocoa/floating_bar_backing_view.h',
+      'browser/ui/cocoa/floating_bar_backing_view.mm',
+      'browser/ui/cocoa/framed_browser_window.h',
+      'browser/ui/cocoa/framed_browser_window.mm',
+      'browser/ui/cocoa/fullscreen_exit_bubble_controller.h',
+      'browser/ui/cocoa/fullscreen_exit_bubble_controller.mm',
+      'browser/ui/cocoa/fullscreen_exit_bubble_view.h',
+      'browser/ui/cocoa/fullscreen_exit_bubble_view.mm',
+      'browser/ui/cocoa/fullscreen_window.h',
+      'browser/ui/cocoa/fullscreen_window.mm',
+      'browser/ui/cocoa/global_error_bubble_controller.h',
+      'browser/ui/cocoa/global_error_bubble_controller.mm',
+      'browser/ui/cocoa/gradient_button_cell.h',
+      'browser/ui/cocoa/gradient_button_cell.mm',
+      'browser/ui/cocoa/history_menu_bridge.h',
+      'browser/ui/cocoa/history_menu_bridge.mm',
+      'browser/ui/cocoa/history_menu_cocoa_controller.h',
+      'browser/ui/cocoa/history_menu_cocoa_controller.mm',
+      'browser/ui/cocoa/history_overlay_controller.h',
+      'browser/ui/cocoa/history_overlay_controller.mm',
+      'browser/ui/cocoa/hover_close_button.h',
+      'browser/ui/cocoa/hover_close_button.mm',
+      'browser/ui/cocoa/hung_renderer_controller.h',
+      'browser/ui/cocoa/hung_renderer_controller.mm',
+      'browser/ui/cocoa/image_button_cell.h',
+      'browser/ui/cocoa/image_button_cell.mm',
+      'browser/ui/cocoa/importer/import_lock_dialog_cocoa.mm',
+      'browser/ui/cocoa/info_bubble_view.h',
+      'browser/ui/cocoa/info_bubble_view.mm',
+      'browser/ui/cocoa/info_bubble_window.h',
+      'browser/ui/cocoa/info_bubble_window.mm',
+      'browser/ui/cocoa/infobars/after_translate_infobar_controller.h',
+      'browser/ui/cocoa/infobars/after_translate_infobar_controller.mm',
+      'browser/ui/cocoa/infobars/alternate_nav_infobar_controller.h',
+      'browser/ui/cocoa/infobars/alternate_nav_infobar_controller.mm',
+      'browser/ui/cocoa/infobars/before_translate_infobar_controller.h',
+      'browser/ui/cocoa/infobars/before_translate_infobar_controller.mm',
+      'browser/ui/cocoa/infobars/confirm_infobar_controller.h',
+      'browser/ui/cocoa/infobars/confirm_infobar_controller.mm',
+      'browser/ui/cocoa/infobars/extension_infobar_controller.h',
+      'browser/ui/cocoa/infobars/extension_infobar_controller.mm',
+      'browser/ui/cocoa/infobars/infobar_cocoa.h',
+      'browser/ui/cocoa/infobars/infobar_cocoa.mm',
+      'browser/ui/cocoa/infobars/infobar_container_cocoa.h',
+      'browser/ui/cocoa/infobars/infobar_container_cocoa.mm',
+      'browser/ui/cocoa/infobars/infobar_container_controller.h',
+      'browser/ui/cocoa/infobars/infobar_container_controller.mm',
+      'browser/ui/cocoa/infobars/infobar_controller.h',
+      'browser/ui/cocoa/infobars/infobar_controller.mm',
+      'browser/ui/cocoa/infobars/infobar_gradient_view.h',
+      'browser/ui/cocoa/infobars/infobar_gradient_view.mm',
+      'browser/ui/cocoa/infobars/infobar_utilities.h',
+      'browser/ui/cocoa/infobars/infobar_utilities.mm',
+      'browser/ui/cocoa/infobars/translate_infobar_base.h',
+      'browser/ui/cocoa/infobars/translate_infobar_base.mm',
+      'browser/ui/cocoa/infobars/translate_message_infobar_controller.h',
+      'browser/ui/cocoa/infobars/translate_message_infobar_controller.mm',
+      'browser/ui/cocoa/javascript_app_modal_dialog_cocoa.h',
+      'browser/ui/cocoa/javascript_app_modal_dialog_cocoa.mm',
+      'browser/ui/cocoa/key_equivalent_constants.h',
+      'browser/ui/cocoa/key_equivalent_constants.mm',
+      'browser/ui/cocoa/keystone_infobar_delegate.h',
+      'browser/ui/cocoa/keystone_infobar_delegate.mm',
+      'browser/ui/cocoa/l10n_util.h',
+      'browser/ui/cocoa/l10n_util.mm',
+      'browser/ui/cocoa/last_active_browser_cocoa.cc',
+      'browser/ui/cocoa/last_active_browser_cocoa.h',
+      'browser/ui/cocoa/location_bar/autocomplete_text_field.h',
+      'browser/ui/cocoa/location_bar/autocomplete_text_field.mm',
+      'browser/ui/cocoa/location_bar/autocomplete_text_field_cell.h',
+      'browser/ui/cocoa/location_bar/autocomplete_text_field_cell.mm',
+      'browser/ui/cocoa/location_bar/autocomplete_text_field_editor.h',
+      'browser/ui/cocoa/location_bar/autocomplete_text_field_editor.mm',
+      'browser/ui/cocoa/location_bar/bubble_decoration.h',
+      'browser/ui/cocoa/location_bar/bubble_decoration.mm',
+      'browser/ui/cocoa/location_bar/button_decoration.h',
+      'browser/ui/cocoa/location_bar/button_decoration.mm',
+      'browser/ui/cocoa/location_bar/content_setting_decoration.h',
+      'browser/ui/cocoa/location_bar/content_setting_decoration.mm',
+      'browser/ui/cocoa/location_bar/ev_bubble_decoration.h',
+      'browser/ui/cocoa/location_bar/ev_bubble_decoration.mm',
+      'browser/ui/cocoa/location_bar/generated_credit_card_decoration.h',
+      'browser/ui/cocoa/location_bar/generated_credit_card_decoration.mm',
+      'browser/ui/cocoa/location_bar/image_decoration.h',
+      'browser/ui/cocoa/location_bar/image_decoration.mm',
+      'browser/ui/cocoa/location_bar/keyword_hint_decoration.h',
+      'browser/ui/cocoa/location_bar/keyword_hint_decoration.mm',
+      'browser/ui/cocoa/location_bar/location_bar_decoration.h',
+      'browser/ui/cocoa/location_bar/location_bar_decoration.mm',
+      'browser/ui/cocoa/location_bar/location_bar_view_mac.h',
+      'browser/ui/cocoa/location_bar/location_bar_view_mac.mm',
+      'browser/ui/cocoa/location_bar/location_icon_decoration.h',
+      'browser/ui/cocoa/location_bar/location_icon_decoration.mm',
+      'browser/ui/cocoa/location_bar/manage_passwords_decoration.h',
+      'browser/ui/cocoa/location_bar/manage_passwords_decoration.mm',
+      'browser/ui/cocoa/location_bar/mic_search_decoration.h',
+      'browser/ui/cocoa/location_bar/mic_search_decoration.mm',
+      'browser/ui/cocoa/location_bar/origin_chip_decoration.h',
+      'browser/ui/cocoa/location_bar/origin_chip_decoration.mm',
+      'browser/ui/cocoa/location_bar/page_action_decoration.h',
+      'browser/ui/cocoa/location_bar/page_action_decoration.mm',
+      'browser/ui/cocoa/location_bar/search_button_decoration.h',
+      'browser/ui/cocoa/location_bar/search_button_decoration.mm',
+      'browser/ui/cocoa/location_bar/selected_keyword_decoration.h',
+      'browser/ui/cocoa/location_bar/selected_keyword_decoration.mm',
+      'browser/ui/cocoa/location_bar/star_decoration.h',
+      'browser/ui/cocoa/location_bar/star_decoration.mm',
+      'browser/ui/cocoa/location_bar/translate_decoration.h',
+      'browser/ui/cocoa/location_bar/translate_decoration.mm',
+      'browser/ui/cocoa/location_bar/zoom_decoration.h',
+      'browser/ui/cocoa/location_bar/zoom_decoration.mm',
+      'browser/ui/cocoa/login_prompt_cocoa.h',
+      'browser/ui/cocoa/login_prompt_cocoa.mm',
+      'browser/ui/cocoa/main_menu_item.h',
+      'browser/ui/cocoa/media_picker/desktop_media_picker_bridge.h',
+      'browser/ui/cocoa/media_picker/desktop_media_picker_bridge.mm',
+      'browser/ui/cocoa/media_picker/desktop_media_picker_cocoa.h',
+      'browser/ui/cocoa/media_picker/desktop_media_picker_cocoa.mm',
+      'browser/ui/cocoa/media_picker/desktop_media_picker_controller.h',
+      'browser/ui/cocoa/media_picker/desktop_media_picker_controller.mm',
+      'browser/ui/cocoa/media_picker/desktop_media_picker_item.h',
+      'browser/ui/cocoa/media_picker/desktop_media_picker_item.mm',
+      'browser/ui/cocoa/menu_button.h',
+      'browser/ui/cocoa/menu_button.mm',
+      'browser/ui/cocoa/multi_key_equivalent_button.h',
+      'browser/ui/cocoa/multi_key_equivalent_button.mm',
+      'browser/ui/cocoa/new_tab_button.h',
+      'browser/ui/cocoa/new_tab_button.mm',
+      'browser/ui/cocoa/notifications/message_center_tray_bridge.h',
+      'browser/ui/cocoa/notifications/message_center_tray_bridge.mm',
+      'browser/ui/cocoa/nsmenuitem_additions.h',
+      'browser/ui/cocoa/nsmenuitem_additions.mm',
+      'browser/ui/cocoa/omnibox/omnibox_popup_cell.h',
+      'browser/ui/cocoa/omnibox/omnibox_popup_cell.mm',
+      'browser/ui/cocoa/omnibox/omnibox_popup_matrix.h',
+      'browser/ui/cocoa/omnibox/omnibox_popup_matrix.mm',
+      'browser/ui/cocoa/omnibox/omnibox_popup_separator_view.h',
+      'browser/ui/cocoa/omnibox/omnibox_popup_separator_view.mm',
+      'browser/ui/cocoa/omnibox/omnibox_popup_view_mac.h',
+      'browser/ui/cocoa/omnibox/omnibox_popup_view_mac.mm',
+      'browser/ui/cocoa/omnibox/omnibox_view_mac.h',
+      'browser/ui/cocoa/omnibox/omnibox_view_mac.mm',
+      'browser/ui/cocoa/one_click_signin_dialog_controller.h',
+      'browser/ui/cocoa/one_click_signin_dialog_controller.mm',
+      'browser/ui/cocoa/one_click_signin_view_controller.h',
+      'browser/ui/cocoa/one_click_signin_view_controller.mm',
+      'browser/ui/cocoa/panels/display_settings_provider_cocoa.mm',
+      'browser/ui/cocoa/panels/mouse_drag_controller.h',
+      'browser/ui/cocoa/panels/mouse_drag_controller.mm',
+      'browser/ui/cocoa/panels/panel_cocoa.h',
+      'browser/ui/cocoa/panels/panel_cocoa.mm',
+      'browser/ui/cocoa/panels/panel_stack_window_cocoa.h',
+      'browser/ui/cocoa/panels/panel_stack_window_cocoa.mm',
+      'browser/ui/cocoa/panels/panel_titlebar_view_cocoa.h',
+      'browser/ui/cocoa/panels/panel_titlebar_view_cocoa.mm',
+      'browser/ui/cocoa/panels/panel_utils_cocoa.h',
+      'browser/ui/cocoa/panels/panel_utils_cocoa.mm',
+      'browser/ui/cocoa/panels/panel_window_controller_cocoa.h',
+      'browser/ui/cocoa/panels/panel_window_controller_cocoa.mm',
+      'browser/ui/cocoa/passwords/manage_password_item_view_controller.h',
+      'browser/ui/cocoa/passwords/manage_password_item_view_controller.mm',
+      'browser/ui/cocoa/passwords/manage_passwords_bubble_blacklist_view_controller.h',
+      'browser/ui/cocoa/passwords/manage_passwords_bubble_blacklist_view_controller.mm',
+      'browser/ui/cocoa/passwords/manage_passwords_bubble_cocoa.h',
+      'browser/ui/cocoa/passwords/manage_passwords_bubble_cocoa.mm',
+      'browser/ui/cocoa/passwords/manage_passwords_bubble_confirmation_view_controller.h',
+      'browser/ui/cocoa/passwords/manage_passwords_bubble_confirmation_view_controller.mm',
+      'browser/ui/cocoa/passwords/manage_passwords_bubble_content_view_controller.h',
+      'browser/ui/cocoa/passwords/manage_passwords_bubble_content_view_controller.mm',
+      'browser/ui/cocoa/passwords/manage_passwords_bubble_controller.h',
+      'browser/ui/cocoa/passwords/manage_passwords_bubble_controller.mm',
+      'browser/ui/cocoa/passwords/manage_passwords_bubble_manage_view_controller.h',
+      'browser/ui/cocoa/passwords/manage_passwords_bubble_manage_view_controller.mm',
+      'browser/ui/cocoa/passwords/manage_passwords_bubble_never_save_view_controller.h',
+      'browser/ui/cocoa/passwords/manage_passwords_bubble_never_save_view_controller.mm',
+      'browser/ui/cocoa/passwords/manage_passwords_bubble_pending_view_controller.h',
+      'browser/ui/cocoa/passwords/manage_passwords_bubble_pending_view_controller.mm',
+      'browser/ui/cocoa/pdf_password_dialog.mm',
+      'browser/ui/cocoa/presentation_mode_controller.h',
+      'browser/ui/cocoa/presentation_mode_controller.mm',
+      'browser/ui/cocoa/profiles/avatar_base_controller.h',
+      'browser/ui/cocoa/profiles/avatar_base_controller.mm',
+      'browser/ui/cocoa/profiles/avatar_button_controller.h',
+      'browser/ui/cocoa/profiles/avatar_button_controller.mm',
+      'browser/ui/cocoa/profiles/avatar_icon_controller.h',
+      'browser/ui/cocoa/profiles/avatar_icon_controller.mm',
+      'browser/ui/cocoa/profiles/avatar_label_button.h',
+      'browser/ui/cocoa/profiles/avatar_label_button.mm',
+      'browser/ui/cocoa/profiles/avatar_menu_bubble_controller.h',
+      'browser/ui/cocoa/profiles/avatar_menu_bubble_controller.mm',
+      'browser/ui/cocoa/profiles/profile_chooser_controller.h',
+      'browser/ui/cocoa/profiles/profile_chooser_controller.mm',
+      'browser/ui/cocoa/profiles/profile_menu_controller.h',
+      'browser/ui/cocoa/profiles/profile_menu_controller.mm',
+      'browser/ui/cocoa/profiles/profile_signin_confirmation_dialog_cocoa.h',
+      'browser/ui/cocoa/profiles/profile_signin_confirmation_dialog_cocoa.mm',
+      'browser/ui/cocoa/profiles/profile_signin_confirmation_view_controller.h',
+      'browser/ui/cocoa/profiles/profile_signin_confirmation_view_controller.mm',
+      'browser/ui/cocoa/profiles/user_manager_mac.h',
+      'browser/ui/cocoa/profiles/user_manager_mac.mm',
+      'browser/ui/cocoa/rect_path_utils.h',
+      'browser/ui/cocoa/rect_path_utils.mm',
+      'browser/ui/cocoa/restart_browser.h',
+      'browser/ui/cocoa/restart_browser.mm',
+      'browser/ui/cocoa/screen_capture_notification_ui_cocoa.h',
+      'browser/ui/cocoa/screen_capture_notification_ui_cocoa.mm',
+      'browser/ui/cocoa/simple_message_box_mac.mm',
+      'browser/ui/cocoa/sprite_view.h',
+      'browser/ui/cocoa/sprite_view.mm',
+      'browser/ui/cocoa/ssl_client_certificate_selector_cocoa.h',
+      'browser/ui/cocoa/ssl_client_certificate_selector_cocoa.mm',
+      'browser/ui/cocoa/status_bubble_mac.h',
+      'browser/ui/cocoa/status_bubble_mac.mm',
+      'browser/ui/cocoa/status_icons/status_icon_mac.h',
+      'browser/ui/cocoa/status_icons/status_icon_mac.mm',
+      'browser/ui/cocoa/status_icons/status_tray_mac.h',
+      'browser/ui/cocoa/status_icons/status_tray_mac.mm',
+      'browser/ui/cocoa/styled_text_field.h',
+      'browser/ui/cocoa/styled_text_field.mm',
+      'browser/ui/cocoa/styled_text_field_cell.h',
+      'browser/ui/cocoa/styled_text_field_cell.mm',
+      'browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.h',
+      'browser/ui/cocoa/renderer_context_menu/render_view_context_menu_mac.mm',
+      'browser/ui/cocoa/tab_contents/chrome_web_contents_view_delegate_mac.h',
+      'browser/ui/cocoa/tab_contents/chrome_web_contents_view_delegate_mac.mm',
+      'browser/ui/cocoa/tab_contents/favicon_util_mac.h',
+      'browser/ui/cocoa/tab_contents/favicon_util_mac.mm',
+      'browser/ui/cocoa/tab_contents/overlayable_contents_controller.h',
+      'browser/ui/cocoa/tab_contents/overlayable_contents_controller.mm',
+      'browser/ui/cocoa/tab_contents/sad_tab_controller.h',
+      'browser/ui/cocoa/tab_contents/sad_tab_controller.mm',
+      'browser/ui/cocoa/tab_contents/sad_tab_view.h',
+      'browser/ui/cocoa/tab_contents/sad_tab_view.mm',
+      'browser/ui/cocoa/tab_contents/tab_contents_controller.h',
+      'browser/ui/cocoa/tab_contents/tab_contents_controller.mm',
+      'browser/ui/cocoa/tab_contents/web_drag_bookmark_handler_mac.h',
+      'browser/ui/cocoa/tab_contents/web_drag_bookmark_handler_mac.mm',
+      'browser/ui/cocoa/tab_modal_confirm_dialog_mac.h',
+      'browser/ui/cocoa/tab_modal_confirm_dialog_mac.mm',
+      'browser/ui/cocoa/table_row_nsimage_cache.h',
+      'browser/ui/cocoa/table_row_nsimage_cache.mm',
+      'browser/ui/cocoa/tabs/media_indicator_view.h',
+      'browser/ui/cocoa/tabs/media_indicator_view.mm',
+      'browser/ui/cocoa/tabs/tab_controller.h',
+      'browser/ui/cocoa/tabs/tab_controller.mm',
+      'browser/ui/cocoa/tabs/tab_strip_controller.h',
+      'browser/ui/cocoa/tabs/tab_strip_controller.mm',
+      'browser/ui/cocoa/tabs/tab_strip_drag_controller.h',
+      'browser/ui/cocoa/tabs/tab_strip_drag_controller.mm',
+      'browser/ui/cocoa/tabs/tab_strip_model_observer_bridge.h',
+      'browser/ui/cocoa/tabs/tab_strip_model_observer_bridge.mm',
+      'browser/ui/cocoa/tabs/tab_strip_view.h',
+      'browser/ui/cocoa/tabs/tab_strip_view.mm',
+      'browser/ui/cocoa/tabs/tab_view.h',
+      'browser/ui/cocoa/tabs/tab_view.mm',
+      'browser/ui/cocoa/tabs/tab_window_controller.h',
+      'browser/ui/cocoa/tabs/tab_window_controller.mm',
+      'browser/ui/cocoa/themed_window.h',
+      'browser/ui/cocoa/themed_window.mm',
+      'browser/ui/cocoa/toolbar/back_forward_menu_controller.h',
+      'browser/ui/cocoa/toolbar/back_forward_menu_controller.mm',
+      'browser/ui/cocoa/toolbar/reload_button.h',
+      'browser/ui/cocoa/toolbar/reload_button.mm',
+      'browser/ui/cocoa/toolbar/toolbar_button.h',
+      'browser/ui/cocoa/toolbar/toolbar_button.mm',
+      'browser/ui/cocoa/toolbar/toolbar_controller.h',
+      'browser/ui/cocoa/toolbar/toolbar_controller.mm',
+      'browser/ui/cocoa/toolbar/toolbar_view.h',
+      'browser/ui/cocoa/toolbar/toolbar_view.mm',
+      'browser/ui/cocoa/toolbar/wrench_toolbar_button_cell.h',
+      'browser/ui/cocoa/toolbar/wrench_toolbar_button_cell.mm',
+      'browser/ui/cocoa/translate/translate_bubble_controller.h',
+      'browser/ui/cocoa/translate/translate_bubble_controller.mm',
+      'browser/ui/cocoa/ui_localizer.h',
+      'browser/ui/cocoa/ui_localizer.mm',
+      'browser/ui/cocoa/url_drop_target.h',
+      'browser/ui/cocoa/url_drop_target.mm',
+      'browser/ui/cocoa/validation_message_bubble_cocoa.mm',
+      'browser/ui/cocoa/validation_message_bubble_controller.h',
+      'browser/ui/cocoa/version_independent_window.h',
+      'browser/ui/cocoa/version_independent_window.mm',
+      'browser/ui/cocoa/vertical_gradient_view.h',
+      'browser/ui/cocoa/vertical_gradient_view.mm',
+      'browser/ui/cocoa/view_id_util.h',
+      'browser/ui/cocoa/view_id_util.mm',
+      'browser/ui/cocoa/view_resizer.h',
+      'browser/ui/cocoa/web_contents_modal_dialog_manager_cocoa.mm',
+      'browser/ui/cocoa/web_dialog_window_controller.h',
+      'browser/ui/cocoa/web_dialog_window_controller.mm',
+      'browser/ui/cocoa/website_settings/permission_bubble_cocoa.h',
+      'browser/ui/cocoa/website_settings/permission_bubble_cocoa.mm',
+      'browser/ui/cocoa/website_settings/permission_bubble_controller.h',
+      'browser/ui/cocoa/website_settings/permission_bubble_controller.mm',
+      'browser/ui/cocoa/website_settings/permission_selector_button.h',
+      'browser/ui/cocoa/website_settings/permission_selector_button.mm',
+      'browser/ui/cocoa/website_settings/split_block_button.h',
+      'browser/ui/cocoa/website_settings/split_block_button.mm',
+      'browser/ui/cocoa/website_settings/website_settings_bubble_controller.h',
+      'browser/ui/cocoa/website_settings/website_settings_bubble_controller.mm',
+      'browser/ui/cocoa/website_settings/website_settings_utils_cocoa.h',
+      'browser/ui/cocoa/website_settings/website_settings_utils_cocoa.mm',
+      'browser/ui/cocoa/window_restore_utils.h',
+      'browser/ui/cocoa/window_restore_utils.mm',
+      'browser/ui/cocoa/window_size_autosaver.h',
+      'browser/ui/cocoa/window_size_autosaver.mm',
+      'browser/ui/cocoa/wrench_menu/menu_tracked_button.h',
+      'browser/ui/cocoa/wrench_menu/menu_tracked_button.mm',
+      'browser/ui/cocoa/wrench_menu/menu_tracked_root_view.h',
+      'browser/ui/cocoa/wrench_menu/menu_tracked_root_view.mm',
+      'browser/ui/cocoa/wrench_menu/recent_tabs_menu_model_delegate.h',
+      'browser/ui/cocoa/wrench_menu/recent_tabs_menu_model_delegate.mm',
+      'browser/ui/cocoa/wrench_menu/wrench_menu_button_cell.h',
+      'browser/ui/cocoa/wrench_menu/wrench_menu_button_cell.mm',
+      'browser/ui/cocoa/wrench_menu/wrench_menu_controller.h',
+      'browser/ui/cocoa/wrench_menu/wrench_menu_controller.mm',
+      'browser/ui/confirm_bubble.h',
+      'browser/ui/crypto_module_password_dialog.h',
+      'browser/ui/find_bar/find_bar.h',
+      'browser/ui/find_bar/find_bar_state.h',
+      'browser/ui/find_bar/find_bar_state_factory.cc',
+      'browser/ui/find_bar/find_bar_state_factory.h',
+      'browser/ui/find_bar/find_notification_details.h',
+      'browser/ui/find_bar/find_tab_helper.cc',
+      'browser/ui/find_bar/find_tab_helper.h',
+      'browser/ui/global_error/global_error.cc',
+      'browser/ui/global_error/global_error.h',
+      'browser/ui/global_error/global_error_bubble_view_base.h',
+      'browser/ui/global_error/global_error_service.cc',
+      'browser/ui/global_error/global_error_service.h',
+      'browser/ui/global_error/global_error_service_factory.cc',
+      'browser/ui/global_error/global_error_service_factory.h',
+      'browser/ui/host_desktop.cc',
+      'browser/ui/host_desktop.h',
+      'browser/ui/login/login_interstitial_delegate.cc',
+      'browser/ui/login/login_interstitial_delegate.h',
+      'browser/ui/login/login_prompt.cc',
+      'browser/ui/login/login_prompt.h',
+      'browser/ui/media_utils.cc',
+      'browser/ui/media_utils.h',
+      'browser/ui/navigation_correction_tab_observer.cc',
+      'browser/ui/navigation_correction_tab_observer.h',
+      'browser/ui/metro_pin_tab_helper_win.cc',
+      'browser/ui/metro_pin_tab_helper_win.h',
+      'browser/ui/omnibox/omnibox_view.cc',
+      'browser/ui/omnibox/omnibox_view.h',
+      'browser/ui/passwords/manage_passwords_bubble.cc',
+      'browser/ui/passwords/manage_passwords_bubble.h',
+      'browser/ui/passwords/manage_passwords_bubble_model.cc',
+      'browser/ui/passwords/manage_passwords_bubble_model.h',
+      'browser/ui/passwords/manage_passwords_icon.cc',
+      'browser/ui/passwords/manage_passwords_icon.h',
+      'browser/ui/passwords/manage_passwords_ui_controller.cc',
+      'browser/ui/passwords/manage_passwords_ui_controller.h',
+      'browser/ui/passwords/password_manager_presenter.cc',
+      'browser/ui/passwords/password_manager_presenter.h',
+      'browser/ui/passwords/password_ui_view.h',
+      'browser/ui/passwords/save_password_refusal_combobox_model.cc',
+      'browser/ui/passwords/save_password_refusal_combobox_model.h',
+      'browser/ui/prefs/prefs_tab_helper.cc',
+      'browser/ui/prefs/prefs_tab_helper.h',
+      'browser/ui/process_singleton_dialog_linux.h',
+      'browser/ui/profile_chooser_constants.h',
+      'browser/ui/profile_error_dialog.cc',
+      'browser/ui/profile_error_dialog.h',
+      'browser/ui/protocol_dialog_delegate.h',
+      'browser/ui/scoped_tabbed_browser_displayer.cc',
+      'browser/ui/scoped_tabbed_browser_displayer.h',
+      'browser/ui/screen_capture_notification_ui.h',
+      'browser/ui/search/instant_controller.cc',
+      'browser/ui/search/instant_controller.h',
+      'browser/ui/search/instant_page.cc',
+      'browser/ui/search/instant_page.h',
+      'browser/ui/search/instant_search_prerenderer.cc',
+      'browser/ui/search/instant_search_prerenderer.h',
+      'browser/ui/search/instant_tab.cc',
+      'browser/ui/search/instant_tab.h',
+      'browser/ui/search/search_ipc_router.cc',
+      'browser/ui/search/search_ipc_router.h',
+      'browser/ui/search/search_ipc_router_policy_impl.cc',
+      'browser/ui/search/search_ipc_router_policy_impl.h',
+      'browser/ui/search/search_model.cc',
+      'browser/ui/search/search_model.h',
+      'browser/ui/search/search_model_observer.h',
+      'browser/ui/search/search_tab_helper.cc',
+      'browser/ui/search/search_tab_helper.h',
+      'browser/ui/search/search_tab_helper_delegate.cc',
+      'browser/ui/search/search_tab_helper_delegate.h',
+      'browser/ui/search_engines/edit_search_engine_controller.cc',
+      'browser/ui/search_engines/edit_search_engine_controller.h',
+      'browser/ui/search_engines/keyword_editor_controller.cc',
+      'browser/ui/search_engines/keyword_editor_controller.h',
+      'browser/ui/search_engines/search_engine_tab_helper.cc',
+      'browser/ui/search_engines/search_engine_tab_helper.h',
+      'browser/ui/search_engines/template_url_table_model.cc',
+      'browser/ui/search_engines/template_url_table_model.h',
+      'browser/ui/settings_window_manager.cc',
+      'browser/ui/settings_window_manager.h',
+      'browser/ui/settings_window_manager_observer.h',
+      'browser/ui/profile_reset_bubble.h',
+      'browser/ui/simple_message_box.h',
+      'browser/ui/status_bubble.h',
+      'browser/ui/sync/inline_login_dialog.cc',
+      'browser/ui/sync/inline_login_dialog.h',
+      'browser/ui/sync/one_click_signin_sync_observer.cc',
+      'browser/ui/sync/one_click_signin_sync_observer.h',
+      'browser/ui/sync/profile_signin_confirmation_helper.cc',
+      'browser/ui/sync/profile_signin_confirmation_helper.h',
+      'browser/ui/sync/signin_histogram.h',
+      'browser/ui/sync/sync_promo_ui.cc',
+      'browser/ui/sync/sync_promo_ui.h',
+      'browser/ui/sync/tab_contents_synced_tab_delegate.cc',
+      'browser/ui/sync/tab_contents_synced_tab_delegate.h',
+      'browser/ui/tab_contents/chrome_web_contents_view_delegate.h',
+      'browser/ui/tab_contents/core_tab_helper.cc',
+      'browser/ui/tab_contents/core_tab_helper.h',
+      'browser/ui/tab_contents/core_tab_helper_delegate.cc',
+      'browser/ui/tab_contents/core_tab_helper_delegate.h',
+      'browser/ui/tab_helpers.cc',
+      'browser/ui/tab_helpers.h',
+      'browser/ui/tab_modal_confirm_dialog.h',
+      'browser/ui/tabs/tab_utils.cc',
+      'browser/ui/tabs/tab_utils.h',
+      'browser/ui/toolbar/toolbar_model.cc',
+      'browser/ui/toolbar/toolbar_model.h',
+      'browser/ui/toolbar/toolbar_model_delegate.h',
+      'browser/ui/toolbar/toolbar_model_impl.cc',
+      'browser/ui/toolbar/toolbar_model_impl.h',
+      'browser/ui/toolbar/toolbar_model_security_level_list.h',
+      'browser/ui/translate/language_combobox_model.cc',
+      'browser/ui/translate/language_combobox_model.h',
+      'browser/ui/translate/translate_bubble_factory.cc',
+      'browser/ui/translate/translate_bubble_factory.h',
+      'browser/ui/translate/translate_bubble_model.h',
+      'browser/ui/translate/translate_bubble_model_impl.cc',
+      'browser/ui/translate/translate_bubble_model_impl.h',
+      'browser/ui/translate/translate_bubble_view_state_transition.cc',
+      'browser/ui/translate/translate_bubble_view_state_transition.h',
+      'browser/ui/uninstall_browser_prompt.h',
+      'browser/ui/user_manager.h',
+      'browser/ui/validation_message_bubble.h',
+      'browser/ui/view_ids.h',
+      'browser/ui/web_contents_sizer.h',
+      'browser/ui/website_settings/permission_bubble_manager.cc',
+      'browser/ui/website_settings/permission_bubble_manager.h',
+      'browser/ui/website_settings/permission_bubble_request.h',
+      'browser/ui/website_settings/permission_bubble_view.h',
+      'browser/ui/website_settings/website_settings.cc',
+      'browser/ui/website_settings/website_settings.h',
+      'browser/ui/website_settings/website_settings_infobar_delegate.cc',
+      'browser/ui/website_settings/website_settings_infobar_delegate.h',
+      'browser/ui/website_settings/website_settings_ui.cc',
+      'browser/ui/website_settings/website_settings_ui.h',
+      'browser/ui/webui/about_ui.cc',
+      'browser/ui/webui/about_ui.h',
+      'browser/ui/webui/chromeos/bluetooth_pairing_ui.cc',
+      'browser/ui/webui/chromeos/bluetooth_pairing_ui.h',
+      'browser/ui/webui/chromeos/certificate_manager_dialog_ui.cc',
+      'browser/ui/webui/chromeos/certificate_manager_dialog_ui.h',
+      'browser/ui/webui/chromeos/charger_replacement_handler.cc',
+      'browser/ui/webui/chromeos/charger_replacement_handler.h',
+      'browser/ui/webui/chromeos/charger_replacement_ui.cc',
+      'browser/ui/webui/chromeos/charger_replacement_ui.h',
+      'browser/ui/webui/chromeos/choose_mobile_network_ui.cc',
+      'browser/ui/webui/chromeos/choose_mobile_network_ui.h',
+      'browser/ui/webui/chromeos/cryptohome_ui.cc',
+      'browser/ui/webui/chromeos/cryptohome_ui.h',
+      'browser/ui/webui/chromeos/cryptohome_web_ui_handler.cc',
+      'browser/ui/webui/chromeos/cryptohome_web_ui_handler.h',
+      'browser/ui/webui/chromeos/drive_internals_ui.cc',
+      'browser/ui/webui/chromeos/drive_internals_ui.h',
+      'browser/ui/webui/chromeos/first_run/first_run_actor.cc',
+      'browser/ui/webui/chromeos/first_run/first_run_actor.h',
+      'browser/ui/webui/chromeos/first_run/first_run_handler.cc',
+      'browser/ui/webui/chromeos/first_run/first_run_handler.h',
+      'browser/ui/webui/chromeos/first_run/first_run_ui.cc',
+      'browser/ui/webui/chromeos/first_run/first_run_ui.h',
+      'browser/ui/webui/chromeos/imageburner/imageburner_ui.cc',
+      'browser/ui/webui/chromeos/imageburner/imageburner_ui.h',
+      'browser/ui/webui/chromeos/keyboard_overlay_ui.cc',
+      'browser/ui/webui/chromeos/keyboard_overlay_ui.h',
+      'browser/ui/webui/chromeos/login/app_launch_splash_screen_handler.cc',
+      'browser/ui/webui/chromeos/login/app_launch_splash_screen_handler.h',
+      'browser/ui/webui/chromeos/login/authenticated_user_email_retriever.cc',
+      'browser/ui/webui/chromeos/login/authenticated_user_email_retriever.h',
+      'browser/ui/webui/chromeos/login/auto_enrollment_check_screen_handler.cc',
+      'browser/ui/webui/chromeos/login/auto_enrollment_check_screen_handler.h',
+      'browser/ui/webui/chromeos/login/base_screen_handler.cc',
+      'browser/ui/webui/chromeos/login/base_screen_handler.h',
+      'browser/ui/webui/chromeos/login/base_screen_handler_utils.cc',
+      'browser/ui/webui/chromeos/login/base_screen_handler_utils.h',
+      'browser/ui/webui/chromeos/login/controller_pairing_screen_handler.cc',
+      'browser/ui/webui/chromeos/login/controller_pairing_screen_handler.h',
+      'browser/ui/webui/chromeos/login/core_oobe_handler.cc',
+      'browser/ui/webui/chromeos/login/core_oobe_handler.h',
+      'browser/ui/webui/chromeos/login/demo_mode_detector.cc',
+      'browser/ui/webui/chromeos/login/demo_mode_detector.h',
+      'browser/ui/webui/chromeos/login/enrollment_screen_handler.cc',
+      'browser/ui/webui/chromeos/login/enrollment_screen_handler.h',
+      'browser/ui/webui/chromeos/login/error_screen_handler.cc',
+      'browser/ui/webui/chromeos/login/error_screen_handler.h',
+      'browser/ui/webui/chromeos/login/eula_screen_handler.cc',
+      'browser/ui/webui/chromeos/login/eula_screen_handler.h',
+      'browser/ui/webui/chromeos/login/gaia_screen_handler.cc',
+      'browser/ui/webui/chromeos/login/gaia_screen_handler.h',
+      'browser/ui/webui/chromeos/login/hid_detection_screen_handler.cc',
+      'browser/ui/webui/chromeos/login/hid_detection_screen_handler.h',
+      'browser/ui/webui/chromeos/login/host_pairing_screen_handler.cc',
+      'browser/ui/webui/chromeos/login/host_pairing_screen_handler.h',
+      'browser/ui/webui/chromeos/login/inline_login_handler_chromeos.cc',
+      'browser/ui/webui/chromeos/login/inline_login_handler_chromeos.h',
+      'browser/ui/webui/chromeos/login/kiosk_app_menu_handler.cc',
+      'browser/ui/webui/chromeos/login/kiosk_app_menu_handler.h',
+      'browser/ui/webui/chromeos/login/kiosk_autolaunch_screen_handler.cc',
+      'browser/ui/webui/chromeos/login/kiosk_autolaunch_screen_handler.h',
+      'browser/ui/webui/chromeos/login/kiosk_enable_screen_handler.cc',
+      'browser/ui/webui/chromeos/login/kiosk_enable_screen_handler.h',
+      'browser/ui/webui/chromeos/login/l10n_util.cc',
+      'browser/ui/webui/chromeos/login/l10n_util.h',
+      'browser/ui/webui/chromeos/login/network_dropdown.cc',
+      'browser/ui/webui/chromeos/login/network_dropdown.h',
+      'browser/ui/webui/chromeos/login/network_dropdown_handler.cc',
+      'browser/ui/webui/chromeos/login/network_dropdown_handler.h',
+      'browser/ui/webui/chromeos/login/network_screen_handler.cc',
+      'browser/ui/webui/chromeos/login/network_screen_handler.h',
+      'browser/ui/webui/chromeos/login/network_state_informer.cc',
+      'browser/ui/webui/chromeos/login/network_state_informer.h',
+      'browser/ui/webui/chromeos/login/oobe_ui.cc',
+      'browser/ui/webui/chromeos/login/oobe_ui.h',
+      'browser/ui/webui/chromeos/login/reset_screen_handler.cc',
+      'browser/ui/webui/chromeos/login/reset_screen_handler.h',
+      'browser/ui/webui/chromeos/login/screenlock_icon_provider.cc',
+      'browser/ui/webui/chromeos/login/screenlock_icon_provider.h',
+      'browser/ui/webui/chromeos/login/screenlock_icon_source.cc',
+      'browser/ui/webui/chromeos/login/screenlock_icon_source.h',
+      'browser/ui/webui/chromeos/login/signin_screen_handler.cc',
+      'browser/ui/webui/chromeos/login/signin_screen_handler.h',
+      'browser/ui/webui/chromeos/login/supervised_user_creation_screen_handler.cc',
+      'browser/ui/webui/chromeos/login/supervised_user_creation_screen_handler.h',
+      'browser/ui/webui/chromeos/login/terms_of_service_screen_handler.cc',
+      'browser/ui/webui/chromeos/login/terms_of_service_screen_handler.h',
+      'browser/ui/webui/chromeos/login/update_screen_handler.cc',
+      'browser/ui/webui/chromeos/login/update_screen_handler.h',
+      'browser/ui/webui/chromeos/login/user_image_screen_handler.cc',
+      'browser/ui/webui/chromeos/login/user_image_screen_handler.h',
+      'browser/ui/webui/chromeos/login/wrong_hwid_screen_handler.cc',
+      'browser/ui/webui/chromeos/login/wrong_hwid_screen_handler.h',
+      'browser/ui/webui/chromeos/touch_view_controller_delegate.cc',
+      'browser/ui/webui/chromeos/touch_view_controller_delegate.h',
+      'browser/ui/webui/chromeos/mobile_setup_dialog.cc',
+      'browser/ui/webui/chromeos/mobile_setup_dialog.h',
+      'browser/ui/webui/chromeos/mobile_setup_ui.cc',
+      'browser/ui/webui/chromeos/mobile_setup_ui.h',
+      'browser/ui/webui/chromeos/network_config_message_handler.cc',
+      'browser/ui/webui/chromeos/network_config_message_handler.h',
+      'browser/ui/webui/chromeos/network_ui.cc',
+      'browser/ui/webui/chromeos/network_ui.h',
+      'browser/ui/webui/chromeos/nfc_debug_ui.cc',
+      'browser/ui/webui/chromeos/nfc_debug_ui.h',
+      'browser/ui/webui/chromeos/power_ui.cc',
+      'browser/ui/webui/chromeos/power_ui.h',
+      'browser/ui/webui/chromeos/provided_file_systems_ui.cc',
+      'browser/ui/webui/chromeos/provided_file_systems_ui.h',
+      'browser/ui/webui/chromeos/proxy_settings_ui.cc',
+      'browser/ui/webui/chromeos/proxy_settings_ui.h',
+      'browser/ui/webui/chromeos/salsa_ui.cc',
+      'browser/ui/webui/chromeos/salsa_ui.h',
+      'browser/ui/webui/chromeos/set_time_ui.cc',
+      'browser/ui/webui/chromeos/set_time_ui.h',
+      'browser/ui/webui/chromeos/sim_unlock_ui.cc',
+      'browser/ui/webui/chromeos/sim_unlock_ui.h',
+      'browser/ui/webui/chromeos/slow_trace_ui.cc',
+      'browser/ui/webui/chromeos/slow_trace_ui.h',
+      'browser/ui/webui/chromeos/slow_ui.cc',
+      'browser/ui/webui/chromeos/slow_ui.h',
+      'browser/ui/webui/chromeos/ui_account_tweaks.cc',
+      'browser/ui/webui/chromeos/ui_account_tweaks.h',
+      'browser/ui/webui/chrome_web_ui_controller_factory.cc',
+      'browser/ui/webui/chrome_web_ui_controller_factory.h',
+      'browser/ui/webui/components_ui.cc',
+      'browser/ui/webui/components_ui.h',
+      'browser/ui/webui/constrained_web_dialog_delegate_base.cc',
+      'browser/ui/webui/constrained_web_dialog_delegate_base.h',
+      'browser/ui/webui/constrained_web_dialog_ui.cc',
+      'browser/ui/webui/constrained_web_dialog_ui.h',
+      'browser/ui/webui/cookies_tree_model_util.cc',
+      'browser/ui/webui/cookies_tree_model_util.h',
+      'browser/ui/webui/crashes_ui.cc',
+      'browser/ui/webui/crashes_ui.h',
+      'browser/ui/webui/devtools_ui.cc',
+      'browser/ui/webui/devtools_ui.h',
+      'browser/ui/webui/domain_reliability_internals_ui.cc',
+      'browser/ui/webui/domain_reliability_internals_ui.h',
+      'browser/ui/webui/favicon_source.cc',
+      'browser/ui/webui/favicon_source.h',
+      'browser/ui/webui/fileicon_source.cc',
+      'browser/ui/webui/fileicon_source.h',
+      'browser/ui/webui/flags_ui.cc',
+      'browser/ui/webui/flags_ui.h',
+      'browser/ui/webui/gcm_internals_ui.cc',
+      'browser/ui/webui/gcm_internals_ui.h',
+      'browser/ui/webui/history_ui.cc',
+      'browser/ui/webui/history_ui.h',
+      'browser/ui/webui/instant_ui.cc',
+      'browser/ui/webui/instant_ui.h',
+      'browser/ui/webui/interstitials/interstitial_ui.cc',
+      'browser/ui/webui/interstitials/interstitial_ui.h',
+      'browser/ui/webui/invalidations_message_handler.cc',
+      'browser/ui/webui/invalidations_message_handler.h',
+      'browser/ui/webui/invalidations_ui.cc',
+      'browser/ui/webui/invalidations_ui.h',
+      'browser/ui/webui/memory_internals/memory_internals_handler.cc',
+      'browser/ui/webui/memory_internals/memory_internals_handler.h',
+      'browser/ui/webui/memory_internals/memory_internals_proxy.cc',
+      'browser/ui/webui/memory_internals/memory_internals_proxy.h',
+      'browser/ui/webui/memory_internals/memory_internals_ui.cc',
+      'browser/ui/webui/memory_internals/memory_internals_ui.h',
+      'browser/ui/webui/metrics_handler.cc',
+      'browser/ui/webui/metrics_handler.h',
+      'browser/ui/webui/mojo_web_ui_controller.cc',
+      'browser/ui/webui/mojo_web_ui_controller.h',
+      'browser/ui/webui/mojo_web_ui_handler.h',
+      'browser/ui/webui/net_export_ui.cc',
+      'browser/ui/webui/net_export_ui.h',
+      'browser/ui/webui/net_internals/net_internals_ui.cc',
+      'browser/ui/webui/net_internals/net_internals_ui.h',
+      'browser/ui/webui/omnibox/omnibox_ui.cc',
+      'browser/ui/webui/omnibox/omnibox_ui.h',
+      'browser/ui/webui/omnibox/omnibox_ui_handler.cc',
+      'browser/ui/webui/omnibox/omnibox_ui_handler.h',
+      'browser/ui/webui/password_manager_internals/password_manager_internals_ui.cc',
+      'browser/ui/webui/password_manager_internals/password_manager_internals_ui.h',
+      'browser/ui/webui/predictors/predictors_handler.cc',
+      'browser/ui/webui/predictors/predictors_handler.h',
+      'browser/ui/webui/predictors/predictors_ui.cc',
+      'browser/ui/webui/predictors/predictors_ui.h',
+      'browser/ui/webui/profiler_ui.cc',
+      'browser/ui/webui/profiler_ui.h',
+      'browser/ui/webui/signin_internals_ui.cc',
+      'browser/ui/webui/signin_internals_ui.h',
+      'browser/ui/webui/sync_internals_message_handler.cc',
+      'browser/ui/webui/sync_internals_message_handler.h',
+      'browser/ui/webui/sync_internals_ui.cc',
+      'browser/ui/webui/sync_internals_ui.h',
+      'browser/ui/webui/theme_source.cc',
+      'browser/ui/webui/theme_source.h',
+      'browser/ui/webui/translate_internals/translate_internals_handler.cc',
+      'browser/ui/webui/translate_internals/translate_internals_handler.h',
+      'browser/ui/webui/translate_internals/translate_internals_ui.cc',
+      'browser/ui/webui/translate_internals/translate_internals_ui.h',
+      'browser/ui/webui/user_actions/user_actions_ui.cc',
+      'browser/ui/webui/user_actions/user_actions_ui.h',
+      'browser/ui/webui/user_actions/user_actions_ui_handler.cc',
+      'browser/ui/webui/user_actions/user_actions_ui_handler.h',
+      'browser/ui/webui/version_handler.cc',
+      'browser/ui/webui/version_handler_chromeos.cc',
+      'browser/ui/webui/version_handler_chromeos.h',
+      'browser/ui/webui/version_handler.h',
+      'browser/ui/webui/version_ui.cc',
+      'browser/ui/webui/version_ui.h',
+      'browser/ui/webui/welcome_handler_android.cc',
+      'browser/ui/webui/welcome_handler_android.h',
+      'browser/ui/webui/welcome_ui_android.cc',
+      'browser/ui/webui/welcome_ui_android.h',
+      'browser/ui/window_sizer/window_sizer_mac.mm',
+      'browser/ui/zoom/zoom_controller.cc',
+      'browser/ui/zoom/zoom_controller.h',
+      'browser/ui/zoom/zoom_event_manager.cc',
+      'browser/ui/zoom/zoom_event_manager.h',
+      'browser/ui/zoom/zoom_observer.h',
+    ],
+    # Note that we assume app list is enabled on all views builds, so the
+    # views-specific app list files are in the views section.
+    'chrome_browser_ui_app_list_sources': [
+      'browser/ui/views/app_list/app_list_dialog_container.cc',
+      'browser/ui/views/app_list/app_list_dialog_container.h',
+      'browser/ui/views/app_list/win/activation_tracker_win.cc',
+      'browser/ui/views/app_list/win/activation_tracker_win.h',
+      'browser/ui/views/app_list/win/app_list_controller_delegate_win.cc',
+      'browser/ui/views/app_list/win/app_list_controller_delegate_win.h',
+      'browser/ui/views/app_list/win/app_list_service_win.cc',
+      'browser/ui/views/app_list/win/app_list_service_win.h',
+      'browser/ui/views/app_list/win/app_list_win.cc',
+      'browser/ui/views/app_list/win/app_list_win.h',
+      'browser/ui/app_list/app_context_menu.cc',
+      'browser/ui/app_list/app_context_menu.h',
+      'browser/ui/app_list/app_context_menu_delegate.h',
+      'browser/ui/app_list/app_list_controller_delegate.cc',
+      'browser/ui/app_list/app_list_controller_delegate.h',
+      'browser/ui/app_list/app_list_controller_delegate_impl.cc',
+      'browser/ui/app_list/app_list_controller_delegate_impl.h',
+      'browser/ui/app_list/app_list_icon_win.cc',
+      'browser/ui/app_list/app_list_icon_win.h',
+      'browser/ui/app_list/app_list_positioner.cc',
+      'browser/ui/app_list/app_list_positioner.h',
+      'browser/ui/app_list/app_list_service.cc',
+      'browser/ui/app_list/app_list_service_impl.cc',
+      'browser/ui/app_list/app_list_service_impl.h',
+      'browser/ui/app_list/app_list_service_mac.h',
+      'browser/ui/app_list/app_list_service_mac.mm',
+      'browser/ui/app_list/app_list_shower_delegate.h',
+      'browser/ui/app_list/app_list_syncable_service.cc',
+      'browser/ui/app_list/app_list_syncable_service.h',
+      'browser/ui/app_list/app_list_syncable_service_factory.cc',
+      'browser/ui/app_list/app_list_syncable_service_factory.h',
+      'browser/ui/app_list/app_list_view_delegate.cc',
+      'browser/ui/app_list/app_list_view_delegate.h',
+      'browser/ui/app_list/extension_app_item.cc',
+      'browser/ui/app_list/extension_app_item.h',
+      'browser/ui/app_list/extension_app_model_builder.cc',
+      'browser/ui/app_list/extension_app_model_builder.h',
+      'browser/ui/app_list/extension_uninstaller.cc',
+      'browser/ui/app_list/extension_uninstaller.h',
+      'browser/ui/app_list/fast_show_pickler.cc',
+      'browser/ui/app_list/fast_show_pickler.h',
+      'browser/ui/app_list/profile_loader.cc',
+      'browser/ui/app_list/profile_loader.h',
+      'browser/ui/app_list/profile_store.h',
+      'browser/ui/app_list/recommended_apps.cc',
+      'browser/ui/app_list/recommended_apps.h',
+      'browser/ui/app_list/recommended_apps_observer.h',
+      'browser/ui/app_list/search/app_result.cc',
+      'browser/ui/app_list/search/app_result.h',
+      'browser/ui/app_list/search/app_search_provider.cc',
+      'browser/ui/app_list/search/app_search_provider.h',
+      'browser/ui/app_list/search/chrome_search_result.h',
+      'browser/ui/app_list/search/common/dictionary_data_store.cc',
+      'browser/ui/app_list/search/common/dictionary_data_store.h',
+      'browser/ui/app_list/search/common/json_response_fetcher.cc',
+      'browser/ui/app_list/search/common/json_response_fetcher.h',
+      'browser/ui/app_list/search/common/url_icon_source.cc',
+      'browser/ui/app_list/search/common/url_icon_source.h',
+      'browser/ui/app_list/search/common/webservice_cache.cc',
+      'browser/ui/app_list/search/common/webservice_cache.h',
+      'browser/ui/app_list/search/common/webservice_cache_factory.cc',
+      'browser/ui/app_list/search/common/webservice_cache_factory.h',
+      'browser/ui/app_list/search/common/webservice_search_provider.cc',
+      'browser/ui/app_list/search/common/webservice_search_provider.h',
+      'browser/ui/app_list/search/history.cc',
+      'browser/ui/app_list/search/history.h',
+      'browser/ui/app_list/search/history_data.cc',
+      'browser/ui/app_list/search/history_data.h',
+      'browser/ui/app_list/search/history_data_store.cc',
+      'browser/ui/app_list/search/history_data_store.h',
+      'browser/ui/app_list/search/history_factory.cc',
+      'browser/ui/app_list/search/history_factory.h',
+      'browser/ui/app_list/search/history_types.h',
+      'browser/ui/app_list/search/mixer.cc',
+      'browser/ui/app_list/search/mixer.h',
+      'browser/ui/app_list/search/omnibox_provider.cc',
+      'browser/ui/app_list/search/omnibox_provider.h',
+      'browser/ui/app_list/search/people/people_provider.cc',
+      'browser/ui/app_list/search/people/people_provider.h',
+      'browser/ui/app_list/search/people/people_result.cc',
+      'browser/ui/app_list/search/people/people_result.h',
+      'browser/ui/app_list/search/people/person.cc',
+      'browser/ui/app_list/search/people/person.h',
+      'browser/ui/app_list/search/search_controller.cc',
+      'browser/ui/app_list/search/search_controller.h',
+      'browser/ui/app_list/search/search_webstore_result.cc',
+      'browser/ui/app_list/search/search_webstore_result.h',
+      'browser/ui/app_list/search/webstore/webstore_installer.cc',
+      'browser/ui/app_list/search/webstore/webstore_installer.h',
+      'browser/ui/app_list/search/webstore/webstore_provider.cc',
+      'browser/ui/app_list/search/webstore/webstore_provider.h',
+      'browser/ui/app_list/search/webstore/webstore_result.cc',
+      'browser/ui/app_list/search/webstore/webstore_result.h',
+      'browser/ui/app_list/start_page_observer.h',
+      'browser/ui/app_list/start_page_service.cc',
+      'browser/ui/app_list/start_page_service.h',
+      'browser/ui/app_list/start_page_service_factory.cc',
+      'browser/ui/app_list/start_page_service_factory.h',
+      'browser/ui/webui/app_list/start_page_handler.cc',
+      'browser/ui/webui/app_list/start_page_handler.h',
+      'browser/ui/webui/app_list/start_page_ui.cc',
+      'browser/ui/webui/app_list/start_page_ui.h',
+    ],
+    # Used when the app list is disabled.
+    'chrome_browser_ui_non_app_list_sources': [
+      'browser/ui/app_list/app_list_service_disabled.cc',
+    ],
+    # Autofill sources used everywhere autofill dialog is enabled.
+    'chrome_browser_ui_autofill_dialog_sources': [
+      'browser/ui/autofill/autofill_dialog_common.cc',
+      'browser/ui/autofill/autofill_dialog_common.h',
+    ],
+    # Autofill sources used on desktop and ChromeOS.
+    'chrome_browser_ui_autofill_dialog_non_mobile_sources': [
+      'browser/ui/autofill/autofill_dialog_controller_impl.cc',
+      'browser/ui/autofill/autofill_dialog_controller_impl.h',
+      'browser/ui/autofill/autofill_dialog_i18n_input.cc',
+      'browser/ui/autofill/autofill_dialog_i18n_input.h',
+      'browser/ui/autofill/autofill_dialog_view.h',
+      'browser/ui/autofill/autofill_dialog_view.cc',
+      'browser/ui/autofill/autofill_dialog_view_delegate.h',
+      'browser/ui/autofill/data_model_wrapper.cc',
+      'browser/ui/autofill/data_model_wrapper.h',
+    ],
+    'chrome_browser_ui_nss_sources': [
+      'browser/ui/webui/options/certificate_manager_handler.cc',
+      'browser/ui/webui/options/certificate_manager_handler.h',
+      'browser/ui/crypto_module_delegate_nss.cc',
+      'browser/ui/crypto_module_delegate_nss.h',
+      'browser/ui/crypto_module_password_dialog_nss.cc',
+      'browser/ui/crypto_module_password_dialog_nss.h',
+    ],
+    'chrome_browser_ui_google_now_non_android_sources': [
+      # These are non-Android because Android excludes all of options.
+      'browser/ui/webui/options/geolocation_options_handler.cc',
+      'browser/ui/webui/options/geolocation_options_handler.h',
+    ],
+    'chrome_browser_ui_webrtc_sources': [
+      'browser/ui/webui/media/webrtc_logs_ui.cc',
+      'browser/ui/webui/media/webrtc_logs_ui.h',
+    ],
+    # For when enable_service_discovery is set.
+    'chrome_browser_ui_service_discovery_sources': [
+      'browser/ui/webui/local_discovery/local_discovery_ui.cc',
+      'browser/ui/webui/local_discovery/local_discovery_ui.h',
+      'browser/ui/webui/local_discovery/local_discovery_ui_handler.cc',
+      'browser/ui/webui/local_discovery/local_discovery_ui_handler.h',
+    ],
+    # Windows-only. Assume ash/aura/views.
+    'chrome_browser_ui_win_sources': [
+      'browser/ui/network_profile_bubble.cc',
+      'browser/ui/network_profile_bubble.h',
+      'browser/ui/views/color_chooser_dialog.cc',
+      'browser/ui/views/color_chooser_dialog.h',
+      'browser/ui/views/frame/browser_desktop_window_tree_host.h',
+      'browser/ui/views/frame/browser_desktop_window_tree_host_win.cc',
+      'browser/ui/views/frame/browser_desktop_window_tree_host_win.h',
+      'browser/ui/views/frame/browser_frame_ashwin.cc',
+      'browser/ui/views/frame/browser_frame_ashwin.h',
+      'browser/ui/views/frame/glass_browser_frame_view.cc',
+      'browser/ui/views/frame/glass_browser_frame_view.h',
+      'browser/ui/views/frame/native_browser_frame_factory_aurawin.cc',
+      'browser/ui/views/frame/native_browser_frame_factory_desktop_ash.cc',
+      'browser/ui/views/network_profile_bubble_view.cc',
+      'browser/ui/views/network_profile_bubble_view.h',
+      'browser/ui/webui/conflicts_ui.cc',
+      'browser/ui/webui/conflicts_ui.h',
+      'browser/ui/webui/set_as_default_browser_ui.cc',
+      'browser/ui/webui/set_as_default_browser_ui.h',
+      'browser/ui/views/uninstall_view.cc',
+      'browser/ui/views/uninstall_view.h',
+    ],
+    'chrome_browser_ui_mac_sources': [
+      'browser/ui/startup/session_crashed_bubble.cc',
+      'browser/ui/startup/autolaunch_prompt.cc',
+      'browser/ui/web_contents_sizer.mm',
+    ],
+    'chrome_browser_ui_non_mac_sources': [
+      'browser/ui/web_contents_sizer.cc',
+    ],
+    # Files used only on desktop systems (not iOS, Android, ChromeOS).
+    'chrome_browser_ui_desktop_sources': [
+      'browser/ui/webui/signin/inline_login_handler_impl.cc',
+      'browser/ui/webui/signin/inline_login_handler_impl.h',
+      'browser/ui/webui/signin/user_manager_screen_handler.cc',
+      'browser/ui/webui/signin/user_manager_screen_handler.h',
+      'browser/ui/webui/signin/user_manager_ui.cc',
+      'browser/ui/webui/signin/user_manager_ui.h',
+    ],
+    # ChromeOS-only sources that don't end in _chromeos or live in a chromeos
+    # directory.
+    'chrome_browser_ui_chromeos_sources': [
+      # On chromeos, file manager extension handles the file open/save dialog.
+      'browser/ui/views/select_file_dialog_extension.cc',
+      'browser/ui/views/select_file_dialog_extension.h',
+      'browser/ui/views/select_file_dialog_extension_factory.cc',
+      'browser/ui/views/select_file_dialog_extension_factory.h',
+    ],
+    # Used everwhere but ChromeOS.
+    'chrome_browser_ui_non_chromeos_sources': [
+      'browser/ui/external_protocol_dialog_delegate.cc',
+      'browser/ui/external_protocol_dialog_delegate.h',
+      'browser/ui/startup/default_browser_prompt.cc',
+    ],
+    # Files shared between CrOS, desktop linux, and Android.
+    'chrome_browser_ui_android_linux_sources': [
+      'browser/ui/certificate_dialogs.cc',
+      'browser/ui/certificate_dialogs.h',
+    ],
+    'chrome_browser_ui_android_sources': [
+      'browser/ui/auto_login_infobar_delegate.cc',
+      'browser/ui/auto_login_infobar_delegate.h',
+      'browser/ui/screen_capture_notification_ui_stub.cc',
+    ],
+    'chrome_browser_ui_non_android_sources': [
+      'browser/ui/apps/chrome_app_delegate.cc',
+      'browser/ui/apps/chrome_app_delegate.h',
+      'browser/ui/autofill/account_chooser_model.cc',
+      'browser/ui/autofill/account_chooser_model.h',
+      'browser/ui/autofill/autofill_dialog_sign_in_delegate.cc',
+      'browser/ui/autofill/autofill_dialog_sign_in_delegate.h',
+      'browser/ui/autofill/generated_credit_card_bubble_controller.cc',
+      'browser/ui/autofill/generated_credit_card_bubble_controller.h',
+      'browser/ui/autofill/generated_credit_card_bubble_view.cc',
+      'browser/ui/autofill/generated_credit_card_bubble_view.h',
+      'browser/ui/autofill/new_credit_card_bubble_controller.cc',
+      'browser/ui/autofill/new_credit_card_bubble_controller.h',
+      'browser/ui/autofill/new_credit_card_bubble_view.cc',
+      'browser/ui/autofill/new_credit_card_bubble_view.h',
+      'browser/ui/bookmarks/bookmark_bubble_sign_in_delegate.cc',
+      'browser/ui/bookmarks/bookmark_bubble_sign_in_delegate.h',
+      'browser/ui/bookmarks/bookmark_context_menu_controller.cc',
+      'browser/ui/bookmarks/bookmark_context_menu_controller.h',
+      'browser/ui/bookmarks/bookmark_drag_drop.cc',
+      'browser/ui/bookmarks/bookmark_drag_drop.h',
+      'browser/ui/bookmarks/bookmark_tab_helper_delegate.cc',
+      'browser/ui/bookmarks/bookmark_tab_helper_delegate.h',
+      'browser/ui/browser.cc',
+      'browser/ui/browser.h',
+      'browser/ui/browser_command_controller.cc',
+      'browser/ui/browser_command_controller.h',
+      'browser/ui/browser_content_setting_bubble_model_delegate.cc',
+      'browser/ui/browser_content_setting_bubble_model_delegate.h',
+      'browser/ui/browser_finder.cc',
+      'browser/ui/browser_finder.h',
+      'browser/ui/browser_iterator.cc',
+      'browser/ui/browser_iterator.h',
+      'browser/ui/browser_list.cc',
+      'browser/ui/browser_list.h',
+      'browser/ui/browser_otr_state.cc',
+      'browser/ui/browser_otr_state.h',
+      'browser/ui/browser_tab_restore_service_delegate.cc',
+      'browser/ui/browser_tab_restore_service_delegate.h',
+      'browser/ui/browser_tab_strip_model_delegate.cc',
+      'browser/ui/browser_tab_strip_model_delegate.h',
+      'browser/ui/browser_tabrestore.cc',
+      'browser/ui/browser_tabrestore.h',
+      'browser/ui/browser_tabstrip.cc',
+      'browser/ui/browser_tabstrip.h',
+      'browser/ui/browser_toolbar_model_delegate.cc',
+      'browser/ui/browser_toolbar_model_delegate.h',
+      'browser/ui/browser_view_prefs.cc',
+      'browser/ui/browser_view_prefs.h',
+      'browser/ui/chrome_pages.cc',
+      'browser/ui/chrome_pages.h',
+      'browser/ui/chrome_style.cc',
+      'browser/ui/chrome_style.h',
+      'browser/ui/chrome_web_modal_dialog_manager_delegate.cc',
+      'browser/ui/chrome_web_modal_dialog_manager_delegate.h',
+      'browser/ui/collected_cookies_infobar_delegate.cc',
+      'browser/ui/collected_cookies_infobar_delegate.h',
+      'browser/ui/confirm_bubble_model.cc',
+      'browser/ui/confirm_bubble_model.h',
+      'browser/ui/content_settings/content_setting_bubble_model.cc',
+      'browser/ui/content_settings/content_setting_bubble_model.h',
+      'browser/ui/content_settings/content_setting_bubble_model_delegate.h',
+      'browser/ui/content_settings/content_setting_image_model.cc',
+      'browser/ui/content_settings/content_setting_image_model.h',
+      'browser/ui/content_settings/content_setting_media_menu_model.cc',
+      'browser/ui/content_settings/content_setting_media_menu_model.h',
+      'browser/ui/content_settings/media_setting_changed_infobar_delegate.cc',
+      'browser/ui/content_settings/media_setting_changed_infobar_delegate.h',
+      'browser/ui/elide_url.cc',
+      'browser/ui/elide_url.h',
+      'browser/ui/extensions/application_launch.cc',
+      'browser/ui/extensions/application_launch.h',
+      'browser/ui/extensions/extension_install_ui_default.cc',
+      'browser/ui/extensions/extension_install_ui_default.h',
+      'browser/ui/fast_unload_controller.cc',
+      'browser/ui/fast_unload_controller.h',
+      'browser/ui/find_bar/find_bar_controller.cc',
+      'browser/ui/find_bar/find_bar_controller.h',
+      'browser/ui/fullscreen/fullscreen_controller.cc',
+      'browser/ui/fullscreen/fullscreen_controller.h',
+      'browser/ui/fullscreen/fullscreen_exit_bubble.cc',
+      'browser/ui/fullscreen/fullscreen_exit_bubble.h',
+      'browser/ui/fullscreen/fullscreen_exit_bubble_type.cc',
+      'browser/ui/fullscreen/fullscreen_exit_bubble_type.h',
+      'browser/ui/fullscreen/fullscreen_within_tab_helper.cc',
+      'browser/ui/fullscreen/fullscreen_within_tab_helper.h',
+      'browser/ui/location_bar/location_bar.cc',
+      'browser/ui/location_bar/location_bar.h',
+      'browser/ui/location_bar/location_bar_util.cc',
+      'browser/ui/location_bar/location_bar_util.h',
+      'browser/ui/location_bar/origin_chip_info.cc',
+      'browser/ui/location_bar/origin_chip_info.h',
+      'browser/ui/omnibox/alternate_nav_infobar_delegate.cc',
+      'browser/ui/omnibox/alternate_nav_infobar_delegate.h',
+      'browser/ui/omnibox/omnibox_controller.cc',
+      'browser/ui/omnibox/omnibox_controller.h',
+      'browser/ui/omnibox/omnibox_current_page_delegate.h',
+      'browser/ui/omnibox/omnibox_current_page_delegate_impl.cc',
+      'browser/ui/omnibox/omnibox_current_page_delegate_impl.h',
+      'browser/ui/omnibox/omnibox_edit_controller.cc',
+      'browser/ui/omnibox/omnibox_edit_controller.h',
+      'browser/ui/omnibox/omnibox_edit_model.cc',
+      'browser/ui/omnibox/omnibox_edit_model.h',
+      'browser/ui/omnibox/omnibox_navigation_observer.cc',
+      'browser/ui/omnibox/omnibox_navigation_observer.h',
+      'browser/ui/omnibox/omnibox_popup_model.cc',
+      'browser/ui/omnibox/omnibox_popup_model.h',
+      'browser/ui/omnibox/omnibox_popup_model_observer.h',
+      'browser/ui/omnibox/omnibox_popup_view.h',
+      'browser/ui/panels/detached_panel_collection.cc',
+      'browser/ui/panels/detached_panel_collection.h',
+      'browser/ui/panels/detached_panel_drag_handler.cc',
+      'browser/ui/panels/detached_panel_drag_handler.h',
+      'browser/ui/panels/display_settings_provider.cc',
+      'browser/ui/panels/display_settings_provider.h',
+      'browser/ui/panels/docked_panel_collection.cc',
+      'browser/ui/panels/docked_panel_collection.h',
+      'browser/ui/panels/docked_panel_drag_handler.cc',
+      'browser/ui/panels/docked_panel_drag_handler.h',
+      'browser/ui/panels/native_panel.h',
+      'browser/ui/panels/native_panel_stack_window.h',
+      'browser/ui/panels/panel.cc',
+      'browser/ui/panels/panel.h',
+      'browser/ui/panels/panel_bounds_animation.cc',
+      'browser/ui/panels/panel_bounds_animation.h',
+      'browser/ui/panels/panel_collection.cc',
+      'browser/ui/panels/panel_collection.h',
+      'browser/ui/panels/panel_constants.h',
+      'browser/ui/panels/panel_drag_controller.cc',
+      'browser/ui/panels/panel_drag_controller.h',
+      'browser/ui/panels/panel_host.cc',
+      'browser/ui/panels/panel_host.h',
+      'browser/ui/panels/panel_manager.cc',
+      'browser/ui/panels/panel_manager.h',
+      'browser/ui/panels/panel_mouse_watcher.cc',
+      'browser/ui/panels/panel_mouse_watcher.h',
+      'browser/ui/panels/panel_mouse_watcher_observer.h',
+      'browser/ui/panels/panel_mouse_watcher_timer.cc',
+      'browser/ui/panels/panel_resize_controller.cc',
+      'browser/ui/panels/panel_resize_controller.h',
+      'browser/ui/panels/stacked_panel_collection.cc',
+      'browser/ui/panels/stacked_panel_collection.h',
+      'browser/ui/panels/stacked_panel_drag_handler.cc',
+      'browser/ui/panels/stacked_panel_drag_handler.h',
+      'browser/ui/pdf/adobe_reader_info_win.cc',
+      'browser/ui/pdf/adobe_reader_info_win.h',
+      'browser/ui/pdf/chrome_pdf_web_contents_helper_client.cc',
+      'browser/ui/pdf/chrome_pdf_web_contents_helper_client.h',
+      'browser/ui/pdf/pdf_unsupported_feature.cc',
+      'browser/ui/pdf/pdf_unsupported_feature.h',
+      'browser/ui/sad_tab.cc',
+      'browser/ui/sad_tab.h',
+      'browser/ui/sad_tab_helper.cc',
+      'browser/ui/sad_tab_helper.h',
+      'browser/ui/sad_tab_types.h',
+      'browser/ui/search/search_delegate.cc',
+      'browser/ui/search/search_delegate.h',
+      'browser/ui/search/search_ui.cc',
+      'browser/ui/search/search_ui.h',
+      'browser/ui/search_engines/search_engine_tab_helper_delegate.cc',
+      'browser/ui/search_engines/search_engine_tab_helper_delegate.h',
+      'browser/ui/singleton_tabs.cc',
+      'browser/ui/singleton_tabs.h',
+      'browser/ui/startup/autolaunch_prompt.h',
+      'browser/ui/startup/autolaunch_prompt_win.cc',
+      'browser/ui/startup/bad_flags_prompt.cc',
+      'browser/ui/startup/bad_flags_prompt.h',
+      'browser/ui/startup/default_browser_prompt.h',
+      'browser/ui/startup/default_browser_prompt_win.cc',
+      'browser/ui/startup/google_api_keys_infobar_delegate.cc',
+      'browser/ui/startup/google_api_keys_infobar_delegate.h',
+      'browser/ui/startup/obsolete_system_infobar_delegate.cc',
+      'browser/ui/startup/obsolete_system_infobar_delegate.h',
+      'browser/ui/startup/session_crashed_bubble.h',
+      'browser/ui/startup/session_crashed_infobar_delegate.cc',
+      'browser/ui/startup/session_crashed_infobar_delegate.h',
+      'browser/ui/startup/startup_browser_creator.cc',
+      'browser/ui/startup/startup_browser_creator.h',
+      'browser/ui/startup/startup_browser_creator_impl.cc',
+      'browser/ui/startup/startup_browser_creator_impl.h',
+      'browser/ui/startup/startup_tab.cc',
+      'browser/ui/startup/startup_tab.h',
+      'browser/ui/startup/startup_types.h',
+      'browser/ui/sync/browser_synced_window_delegate.cc',
+      'browser/ui/sync/browser_synced_window_delegate.h',
+      'browser/ui/tab_contents/tab_contents_iterator.cc',
+      'browser/ui/tab_contents/tab_contents_iterator.h',
+      'browser/ui/tab_modal_confirm_dialog_delegate.cc',
+      'browser/ui/tab_modal_confirm_dialog_delegate.h',
+      'browser/ui/tabs/hover_tab_selector.cc',
+      'browser/ui/tabs/hover_tab_selector.h',
+      'browser/ui/tabs/pinned_tab_codec.cc',
+      'browser/ui/tabs/pinned_tab_codec.h',
+      'browser/ui/tabs/pinned_tab_service.cc',
+      'browser/ui/tabs/pinned_tab_service.h',
+      'browser/ui/tabs/pinned_tab_service_factory.cc',
+      'browser/ui/tabs/pinned_tab_service_factory.h',
+      'browser/ui/tabs/tab_menu_model.cc',
+      'browser/ui/tabs/tab_menu_model.h',
+      'browser/ui/tabs/tab_resources.cc',
+      'browser/ui/tabs/tab_resources.h',
+      'browser/ui/tabs/tab_strip_model.cc',
+      'browser/ui/tabs/tab_strip_model.h',
+      'browser/ui/tabs/tab_strip_model_delegate.h',
+      'browser/ui/tabs/tab_strip_model_observer.cc',
+      'browser/ui/tabs/tab_strip_model_observer.h',
+      'browser/ui/tabs/tab_strip_model_order_controller.cc',
+      'browser/ui/tabs/tab_strip_model_order_controller.h',
+      'browser/ui/tabs/tab_strip_model_utils.cc',
+      'browser/ui/tabs/tab_strip_model_utils.h',
+      'browser/ui/toolbar/back_forward_menu_model.cc',
+      'browser/ui/toolbar/back_forward_menu_model.h',
+      'browser/ui/toolbar/bookmark_sub_menu_model.cc',
+      'browser/ui/toolbar/bookmark_sub_menu_model.h',
+      'browser/ui/toolbar/encoding_menu_controller.cc',
+      'browser/ui/toolbar/encoding_menu_controller.h',
+      'browser/ui/toolbar/recent_tabs_sub_menu_model.cc',
+      'browser/ui/toolbar/recent_tabs_sub_menu_model.h',
+      'browser/ui/toolbar/wrench_menu_badge_controller.cc',
+      'browser/ui/toolbar/wrench_menu_badge_controller.h',
+      'browser/ui/toolbar/wrench_icon_painter.cc',
+      'browser/ui/toolbar/wrench_icon_painter.h',
+      'browser/ui/toolbar/wrench_menu_model.cc',
+      'browser/ui/toolbar/wrench_menu_model.h',
+      'browser/ui/uma_browsing_activity_observer.cc',
+      'browser/ui/uma_browsing_activity_observer.h',
+      'browser/ui/unload_controller.cc',
+      'browser/ui/unload_controller.h',
+      'browser/ui/website_settings/permission_menu_model.cc',
+      'browser/ui/website_settings/permission_menu_model.h',
+      'browser/ui/website_settings/website_settings_utils.cc',
+      'browser/ui/website_settings/website_settings_utils.h',
+      'browser/ui/webui/app_launcher_page_ui.cc',
+      'browser/ui/webui/app_launcher_page_ui.h',
+      'browser/ui/webui/bookmarks_ui.cc',
+      'browser/ui/webui/bookmarks_ui.h',
+      'browser/ui/webui/chrome_web_contents_handler.cc',
+      'browser/ui/webui/chrome_web_contents_handler.h',
+      'browser/ui/webui/downloads_dom_handler.cc',
+      'browser/ui/webui/downloads_dom_handler.h',
+      'browser/ui/webui/downloads_ui.cc',
+      'browser/ui/webui/downloads_ui.h',
+      'browser/ui/webui/extensions/command_handler.cc',
+      'browser/ui/webui/extensions/command_handler.h',
+      'browser/ui/webui/extensions/extension_error_handler.cc',
+      'browser/ui/webui/extensions/extension_error_handler.h',
+      'browser/ui/webui/extensions/extension_loader_handler.cc',
+      'browser/ui/webui/extensions/extension_loader_handler.h',
+      'browser/ui/webui/extensions/extension_settings_handler.cc',
+      'browser/ui/webui/extensions/extension_settings_handler.h',
+      'browser/ui/webui/extensions/extensions_ui.cc',
+      'browser/ui/webui/extensions/extensions_ui.h',
+      'browser/ui/webui/extensions/install_extension_handler.cc',
+      'browser/ui/webui/extensions/install_extension_handler.h',
+      'browser/ui/webui/help/help_handler.cc',
+      'browser/ui/webui/help/help_handler.h',
+      'browser/ui/webui/help/help_ui.cc',
+      'browser/ui/webui/help/help_ui.h',
+      'browser/ui/webui/help/help_utils_chromeos.cc',
+      'browser/ui/webui/help/help_utils_chromeos.h',
+      'browser/ui/webui/help/version_updater.h',
+      'browser/ui/webui/help/version_updater_chromeos.cc',
+      'browser/ui/webui/help/version_updater_chromeos.h',
+      'browser/ui/webui/help/version_updater_mac.h',
+      'browser/ui/webui/help/version_updater_mac.mm',
+      'browser/ui/webui/help/version_updater_win.cc',
+      'browser/ui/webui/identity_internals_ui.cc',
+      'browser/ui/webui/identity_internals_ui.h',
+      'browser/ui/webui/inspect_ui.cc',
+      'browser/ui/webui/inspect_ui.h',
+      'browser/ui/webui/ntp/app_launcher_handler.cc',
+      'browser/ui/webui/ntp/app_launcher_handler.h',
+      'browser/ui/webui/ntp/app_resource_cache_factory.cc',
+      'browser/ui/webui/ntp/app_resource_cache_factory.h',
+      'browser/ui/webui/ntp/core_app_launcher_handler.cc',
+      'browser/ui/webui/ntp/core_app_launcher_handler.h',
+      'browser/ui/webui/ntp/favicon_webui_handler.cc',
+      'browser/ui/webui/ntp/favicon_webui_handler.h',
+      'browser/ui/webui/ntp/foreign_session_handler.cc',
+      'browser/ui/webui/ntp/foreign_session_handler.h',
+      'browser/ui/webui/ntp/most_visited_handler.cc',
+      'browser/ui/webui/ntp/most_visited_handler.h',
+      'browser/ui/webui/ntp/new_tab_page_handler.cc',
+      'browser/ui/webui/ntp/new_tab_page_handler.h',
+      'browser/ui/webui/ntp/new_tab_page_sync_handler.cc',
+      'browser/ui/webui/ntp/new_tab_page_sync_handler.h',
+      'browser/ui/webui/ntp/new_tab_ui.cc',
+      'browser/ui/webui/ntp/new_tab_ui.h',
+      'browser/ui/webui/ntp/ntp_login_handler.cc',
+      'browser/ui/webui/ntp/ntp_login_handler.h',
+      'browser/ui/webui/ntp/ntp_resource_cache.cc',
+      'browser/ui/webui/ntp/ntp_resource_cache.h',
+      'browser/ui/webui/ntp/ntp_resource_cache_factory.cc',
+      'browser/ui/webui/ntp/ntp_resource_cache_factory.h',
+      'browser/ui/webui/ntp/ntp_stats.h',
+      'browser/ui/webui/ntp/ntp_user_data_logger.cc',
+      'browser/ui/webui/ntp/ntp_user_data_logger.h',
+      'browser/ui/webui/ntp/recently_closed_tabs_handler.cc',
+      'browser/ui/webui/ntp/recently_closed_tabs_handler.h',
+      'browser/ui/webui/ntp/suggestions_combiner.cc',
+      'browser/ui/webui/ntp/suggestions_combiner.h',
+      'browser/ui/webui/ntp/suggestions_page_handler.cc',
+      'browser/ui/webui/ntp/suggestions_page_handler.h',
+      'browser/ui/webui/ntp/suggestions_source.h',
+      'browser/ui/webui/ntp/suggestions_source_top_sites.cc',
+      'browser/ui/webui/ntp/suggestions_source_top_sites.h',
+      'browser/ui/webui/ntp/thumbnail_source.cc',
+      'browser/ui/webui/ntp/thumbnail_source.h',
+      'browser/ui/webui/options/advanced_options_utils.h',
+      'browser/ui/webui/options/advanced_options_utils_linux.cc',
+      'browser/ui/webui/options/advanced_options_utils_mac.mm',
+      'browser/ui/webui/options/advanced_options_utils_win.cc',
+      'browser/ui/webui/options/autofill_options_handler.cc',
+      'browser/ui/webui/options/autofill_options_handler.h',
+      'browser/ui/webui/options/automatic_settings_reset_handler.cc',
+      'browser/ui/webui/options/automatic_settings_reset_handler.h',
+      'browser/ui/webui/options/browser_options_handler.cc',
+      'browser/ui/webui/options/browser_options_handler.h',
+      'browser/ui/webui/options/chromeos/accounts_options_handler.cc',
+      'browser/ui/webui/options/chromeos/accounts_options_handler.h',
+      'browser/ui/webui/options/chromeos/bluetooth_options_handler.cc',
+      'browser/ui/webui/options/chromeos/bluetooth_options_handler.h',
+      'browser/ui/webui/options/chromeos/change_picture_options_handler.cc',
+      'browser/ui/webui/options/chromeos/change_picture_options_handler.h',
+      'browser/ui/webui/options/chromeos/consumer_management_handler.cc',
+      'browser/ui/webui/options/chromeos/consumer_management_handler.h',
+      'browser/ui/webui/options/chromeos/core_chromeos_options_handler.cc',
+      'browser/ui/webui/options/chromeos/core_chromeos_options_handler.h',
+      'browser/ui/webui/options/chromeos/cros_language_options_handler.cc',
+      'browser/ui/webui/options/chromeos/cros_language_options_handler.h',
+      'browser/ui/webui/options/chromeos/date_time_options_handler.cc',
+      'browser/ui/webui/options/chromeos/date_time_options_handler.h',
+      'browser/ui/webui/options/chromeos/display_options_handler.cc',
+      'browser/ui/webui/options/chromeos/display_options_handler.h',
+      'browser/ui/webui/options/chromeos/display_overscan_handler.cc',
+      'browser/ui/webui/options/chromeos/display_overscan_handler.h',
+      'browser/ui/webui/options/chromeos/internet_options_handler.cc',
+      'browser/ui/webui/options/chromeos/internet_options_handler.h',
+      'browser/ui/webui/options/chromeos/internet_options_handler_strings.cc',
+      'browser/ui/webui/options/chromeos/internet_options_handler_strings.h',
+      'browser/ui/webui/options/chromeos/keyboard_handler.cc',
+      'browser/ui/webui/options/chromeos/keyboard_handler.h',
+      'browser/ui/webui/options/chromeos/pointer_handler.cc',
+      'browser/ui/webui/options/chromeos/pointer_handler.h',
+      'browser/ui/webui/options/chromeos/proxy_handler.cc',
+      'browser/ui/webui/options/chromeos/proxy_handler.h',
+      'browser/ui/webui/options/chromeos/stats_options_handler.cc',
+      'browser/ui/webui/options/chromeos/stats_options_handler.h',
+      'browser/ui/webui/options/chromeos/user_image_source.cc',
+      'browser/ui/webui/options/chromeos/user_image_source.h',
+      'browser/ui/webui/options/clear_browser_data_handler.cc',
+      'browser/ui/webui/options/clear_browser_data_handler.h',
+      'browser/ui/webui/options/content_settings_handler.cc',
+      'browser/ui/webui/options/content_settings_handler.h',
+      'browser/ui/webui/options/cookies_view_handler.cc',
+      'browser/ui/webui/options/cookies_view_handler.h',
+      'browser/ui/webui/options/core_options_handler.cc',
+      'browser/ui/webui/options/core_options_handler.h',
+      'browser/ui/webui/options/create_profile_handler.cc',
+      'browser/ui/webui/options/create_profile_handler.h',
+      'browser/ui/webui/options/desktop_integration_settings_handler.cc',
+      'browser/ui/webui/options/desktop_integration_settings_handler.h',
+      'browser/ui/webui/options/easy_unlock_handler.cc',
+      'browser/ui/webui/options/easy_unlock_handler.h',
+      'browser/ui/webui/options/font_settings_handler.cc',
+      'browser/ui/webui/options/font_settings_handler.h',
+      'browser/ui/webui/options/font_settings_utils.h',
+      'browser/ui/webui/options/font_settings_utils_linux.cc',
+      'browser/ui/webui/options/font_settings_utils_mac.mm',
+      'browser/ui/webui/options/font_settings_utils_win.cc',
+      'browser/ui/webui/options/handler_options_handler.cc',
+      'browser/ui/webui/options/handler_options_handler.h',
+      'browser/ui/webui/options/help_overlay_handler.cc',
+      'browser/ui/webui/options/help_overlay_handler.h',
+      'browser/ui/webui/options/home_page_overlay_handler.cc',
+      'browser/ui/webui/options/home_page_overlay_handler.h',
+      'browser/ui/webui/options/import_data_handler.cc',
+      'browser/ui/webui/options/import_data_handler.h',
+      'browser/ui/webui/options/language_dictionary_overlay_handler.cc',
+      'browser/ui/webui/options/language_dictionary_overlay_handler.h',
+      'browser/ui/webui/options/language_options_handler.cc',
+      'browser/ui/webui/options/language_options_handler.h',
+      'browser/ui/webui/options/language_options_handler_common.cc',
+      'browser/ui/webui/options/language_options_handler_common.h',
+      'browser/ui/webui/options/manage_profile_handler.cc',
+      'browser/ui/webui/options/manage_profile_handler.h',
+      'browser/ui/webui/options/media_devices_selection_handler.cc',
+      'browser/ui/webui/options/media_devices_selection_handler.h',
+      'browser/ui/webui/options/options_handlers_helper.cc',
+      'browser/ui/webui/options/options_handlers_helper.h',
+      'browser/ui/webui/options/options_ui.cc',
+      'browser/ui/webui/options/options_ui.h',
+      'browser/ui/webui/options/password_manager_handler.cc',
+      'browser/ui/webui/options/password_manager_handler.h',
+      'browser/ui/webui/options/pepper_flash_content_settings_utils.cc',
+      'browser/ui/webui/options/pepper_flash_content_settings_utils.h',
+      'browser/ui/webui/options/reset_profile_settings_handler.cc',
+      'browser/ui/webui/options/reset_profile_settings_handler.h',
+      'browser/ui/webui/options/search_engine_manager_handler.cc',
+      'browser/ui/webui/options/search_engine_manager_handler.h',
+      'browser/ui/webui/options/startup_pages_handler.cc',
+      'browser/ui/webui/options/startup_pages_handler.h',
+      'browser/ui/webui/options/supervised_user_create_confirm_handler.cc',
+      'browser/ui/webui/options/supervised_user_create_confirm_handler.h',
+      'browser/ui/webui/options/supervised_user_import_handler.cc',
+      'browser/ui/webui/options/supervised_user_import_handler.h',
+      'browser/ui/webui/options/supervised_user_learn_more_handler.cc',
+      'browser/ui/webui/options/supervised_user_learn_more_handler.h',
+      'browser/ui/webui/options/website_settings_handler.cc',
+      'browser/ui/webui/options/website_settings_handler.h',
+      'browser/ui/webui/plugins_ui.cc',
+      'browser/ui/webui/plugins_ui.h',
+      'browser/ui/webui/quota_internals/quota_internals_handler.cc',
+      'browser/ui/webui/quota_internals/quota_internals_handler.h',
+      'browser/ui/webui/quota_internals/quota_internals_proxy.cc',
+      'browser/ui/webui/quota_internals/quota_internals_proxy.h',
+      'browser/ui/webui/quota_internals/quota_internals_types.cc',
+      'browser/ui/webui/quota_internals/quota_internals_types.h',
+      'browser/ui/webui/quota_internals/quota_internals_ui.cc',
+      'browser/ui/webui/quota_internals/quota_internals_ui.h',
+      'browser/ui/webui/signin/inline_login_handler.cc',
+      'browser/ui/webui/signin/inline_login_handler.h',
+      'browser/ui/webui/signin/inline_login_ui.cc',
+      'browser/ui/webui/signin/inline_login_ui.h',
+      'browser/ui/webui/signin/login_ui_service.cc',
+      'browser/ui/webui/signin/login_ui_service.h',
+      'browser/ui/webui/signin/login_ui_service_factory.cc',
+      'browser/ui/webui/signin/login_ui_service_factory.h',
+      'browser/ui/webui/signin/profile_signin_confirmation_dialog.cc',
+      'browser/ui/webui/signin/profile_signin_confirmation_dialog.h',
+      'browser/ui/webui/signin/profile_signin_confirmation_ui.cc',
+      'browser/ui/webui/signin/profile_signin_confirmation_ui.h',
+      'browser/ui/webui/suggestions_internals/suggestions_internals_ui.cc',
+      'browser/ui/webui/suggestions_internals/suggestions_internals_ui.h',
+      'browser/ui/webui/suggestions_internals/suggestions_internals_ui_handler.cc',
+      'browser/ui/webui/suggestions_internals/suggestions_internals_ui_handler.h',
+      'browser/ui/webui/sync_file_system_internals/dump_database_handler.cc',
+      'browser/ui/webui/sync_file_system_internals/dump_database_handler.h',
+      'browser/ui/webui/sync_file_system_internals/extension_statuses_handler.cc',
+      'browser/ui/webui/sync_file_system_internals/extension_statuses_handler.h',
+      'browser/ui/webui/sync_file_system_internals/file_metadata_handler.cc',
+      'browser/ui/webui/sync_file_system_internals/file_metadata_handler.h',
+      'browser/ui/webui/sync_file_system_internals/sync_file_system_internals_handler.cc',
+      'browser/ui/webui/sync_file_system_internals/sync_file_system_internals_handler.h',
+      'browser/ui/webui/sync_file_system_internals/sync_file_system_internals_ui.cc',
+      'browser/ui/webui/sync_file_system_internals/sync_file_system_internals_ui.h',
+      'browser/ui/webui/sync_setup_handler.cc',
+      'browser/ui/webui/sync_setup_handler.h',
+      'browser/ui/webui/system_info_ui.cc',
+      'browser/ui/webui/system_info_ui.h',
+      'browser/ui/webui/theme_handler.cc',
+      'browser/ui/webui/theme_handler.h',
+      'browser/ui/webui/uber/uber_ui.cc',
+      'browser/ui/webui/uber/uber_ui.h',
+      'browser/ui/window_sizer/window_sizer.cc',
+      'browser/ui/window_sizer/window_sizer.h',
+    ],
+    'chrome_browser_ui_print_preview_sources': [
+      'browser/ui/webui/print_preview/print_preview_handler.cc',
+      'browser/ui/webui/print_preview/print_preview_handler.h',
+      'browser/ui/webui/print_preview/print_preview_ui.cc',
+      'browser/ui/webui/print_preview/print_preview_ui.h',
+      'browser/ui/webui/print_preview/sticky_settings.cc',
+      'browser/ui/webui/print_preview/sticky_settings.h',
+    ],
+    'chrome_browser_ui_one_click_signin_sources': [
+      'browser/ui/cocoa/one_click_signin_bubble_controller.h',
+      'browser/ui/cocoa/one_click_signin_bubble_controller.mm',
+      'browser/ui/sync/one_click_signin_bubble_delegate.h',
+      'browser/ui/sync/one_click_signin_bubble_links_delegate.cc',
+      'browser/ui/sync/one_click_signin_bubble_links_delegate.h',
+      'browser/ui/sync/one_click_signin_helper.cc',
+      'browser/ui/sync/one_click_signin_helper.h',
+      'browser/ui/sync/one_click_signin_histogram.h',
+      'browser/ui/sync/one_click_signin_sync_starter.cc',
+      'browser/ui/sync/one_click_signin_sync_starter.h',
+      'browser/ui/views/sync/one_click_signin_bubble_view.cc',
+      'browser/ui/views/sync/one_click_signin_bubble_view.h',
+    ],
+    'chrome_browser_ui_task_manager_sources': [
+      'browser/ui/cocoa/task_manager_mac.h',
+      'browser/ui/cocoa/task_manager_mac.mm',
+      'browser/ui/views/task_manager_view.cc',
+    ],
+    'chrome_browser_ui_nacl_sources': [
+      'browser/ui/webui/nacl_ui.cc',
+      'browser/ui/webui/nacl_ui.h',
+    ],
+    'chrome_browser_ui_plugin_sources': [
+      'browser/ui/hung_plugin_tab_helper.cc',
+      'browser/ui/hung_plugin_tab_helper.h',
+      'browser/ui/webui/flash_ui.cc',
+      'browser/ui/webui/flash_ui.h',
+    ],
+    'chrome_browser_ui_policy_sources': [
+      'browser/ui/webui/policy_ui.cc',
+      'browser/ui/webui/policy_ui.h',
+    ],
+    # Cross-platform (except Mac) views sources. We assume app list is enabled.
+    'chrome_browser_ui_views_non_mac_sources': [
+      'browser/ui/views/accelerator_utils_aura.cc',
+      'browser/ui/views/accessibility/invert_bubble_view.cc',
+      'browser/ui/views/accessibility/invert_bubble_view.h',
+      'browser/ui/views/apps/app_info_dialog/app_info_dialog_views.cc',
+      'browser/ui/views/apps/app_info_dialog/app_info_dialog_views.h',
+      'browser/ui/views/apps/app_info_dialog/app_info_footer_panel.cc',
+      'browser/ui/views/apps/app_info_dialog/app_info_footer_panel.h',
+      'browser/ui/views/apps/app_info_dialog/app_info_header_panel.cc',
+      'browser/ui/views/apps/app_info_dialog/app_info_header_panel.h',
+      'browser/ui/views/apps/app_info_dialog/app_info_panel.cc',
+      'browser/ui/views/apps/app_info_dialog/app_info_panel.h',
+      'browser/ui/views/apps/app_info_dialog/app_info_permissions_panel.cc',
+      'browser/ui/views/apps/app_info_dialog/app_info_permissions_panel.h',
+      'browser/ui/views/apps/app_info_dialog/app_info_summary_panel.cc',
+      'browser/ui/views/apps/app_info_dialog/app_info_summary_panel.h',
+      'browser/ui/views/apps/app_window_desktop_native_widget_aura_win.cc',
+      'browser/ui/views/apps/app_window_desktop_native_widget_aura_win.h',
+      'browser/ui/views/apps/app_window_desktop_window_tree_host_win.cc',
+      'browser/ui/views/apps/app_window_desktop_window_tree_host_win.h',
+      'browser/ui/views/apps/chrome_apps_client_views_win.cc',
+      'browser/ui/views/apps/chrome_native_app_window_views.cc',
+      'browser/ui/views/apps/chrome_native_app_window_views.h',
+      'browser/ui/views/apps/chrome_native_app_window_views_win.cc',
+      'browser/ui/views/apps/chrome_native_app_window_views_win.h',
+      'browser/ui/views/apps/glass_app_window_frame_view_win.cc',
+      'browser/ui/views/apps/glass_app_window_frame_view_win.h',
+      'browser/ui/views/apps/shaped_app_window_targeter.cc',
+      'browser/ui/views/apps/shaped_app_window_targeter.h',
+      'browser/ui/views/ash/chrome_browser_main_extra_parts_ash.cc',
+      'browser/ui/views/ash/chrome_browser_main_extra_parts_ash.h',
+      'browser/ui/views/ash/tab_scrubber.cc',
+      'browser/ui/views/ash/tab_scrubber.h',
+      'browser/ui/views/autofill/autofill_dialog_views.cc',
+      'browser/ui/views/autofill/autofill_dialog_views.h',
+      'browser/ui/views/autofill/autofill_popup_base_view.cc',
+      'browser/ui/views/autofill/autofill_popup_base_view.h',
+      'browser/ui/views/autofill/autofill_popup_view_views.cc',
+      'browser/ui/views/autofill/autofill_popup_view_views.h',
+      'browser/ui/views/autofill/decorated_textfield.cc',
+      'browser/ui/views/autofill/decorated_textfield.h',
+      'browser/ui/views/autofill/expanding_textfield.cc',
+      'browser/ui/views/autofill/expanding_textfield.h',
+      'browser/ui/views/autofill/generated_credit_card_bubble_views.cc',
+      'browser/ui/views/autofill/generated_credit_card_bubble_views.h',
+      'browser/ui/views/autofill/info_bubble.cc',
+      'browser/ui/views/autofill/info_bubble.h',
+      'browser/ui/views/autofill/new_credit_card_bubble_views.cc',
+      'browser/ui/views/autofill/new_credit_card_bubble_views.h',
+      'browser/ui/views/autofill/password_generation_popup_view_views.cc',
+      'browser/ui/views/autofill/password_generation_popup_view_views.h',
+      'browser/ui/views/autofill/tooltip_icon.cc',
+      'browser/ui/views/autofill/tooltip_icon.h',
+      'browser/ui/views/auto_keep_alive.cc',
+      'browser/ui/views/auto_keep_alive.h',
+      'browser/ui/views/bookmarks/bookmark_bar_instructions_view.cc',
+      'browser/ui/views/bookmarks/bookmark_bar_instructions_view.h',
+      'browser/ui/views/bookmarks/bookmark_bar_view.cc',
+      'browser/ui/views/bookmarks/bookmark_bar_view.h',
+      'browser/ui/views/bookmarks/bookmark_bar_view_observer.h',
+      'browser/ui/views/bookmarks/bookmark_bubble_view.cc',
+      'browser/ui/views/bookmarks/bookmark_bubble_view.h',
+      'browser/ui/views/bookmarks/bookmark_bubble_view_observer.h',
+      'browser/ui/views/bookmarks/bookmark_context_menu.cc',
+      'browser/ui/views/bookmarks/bookmark_context_menu.h',
+      'browser/ui/views/bookmarks/bookmark_drag_drop_views.cc',
+      'browser/ui/views/bookmarks/bookmark_drag_drop_views.h',
+      'browser/ui/views/bookmarks/bookmark_editor_view.cc',
+      'browser/ui/views/bookmarks/bookmark_editor_view.h',
+      'browser/ui/views/bookmarks/bookmark_menu_controller_observer.h',
+      'browser/ui/views/bookmarks/bookmark_menu_controller_views.cc',
+      'browser/ui/views/bookmarks/bookmark_menu_controller_views.h',
+      'browser/ui/views/bookmarks/bookmark_menu_delegate.cc',
+      'browser/ui/views/bookmarks/bookmark_menu_delegate.h',
+      'browser/ui/views/bookmarks/bookmark_sync_promo_view.cc',
+      'browser/ui/views/bookmarks/bookmark_sync_promo_view.h',
+      'browser/ui/views/certificate_viewer_win.cc',
+      'browser/ui/views/chrome_views_delegate_chromeos.cc',
+      'browser/ui/views/chrome_web_dialog_view.cc',
+      'browser/ui/views/collected_cookies_views.cc',
+      'browser/ui/views/collected_cookies_views.h',
+      'browser/ui/views/color_chooser_aura.cc',
+      'browser/ui/views/color_chooser_aura.h',
+      'browser/ui/views/color_chooser_win.cc',
+      'browser/ui/views/confirm_bubble_views.cc',
+      'browser/ui/views/confirm_bubble_views.h',
+      'browser/ui/views/conflicting_module_view_win.cc',
+      'browser/ui/views/conflicting_module_view_win.h',
+      'browser/ui/views/constrained_web_dialog_delegate_views.cc',
+      'browser/ui/views/constrained_window_views.cc',
+      'browser/ui/views/constrained_window_views.h',
+      'browser/ui/views/content_setting_bubble_contents.cc',
+      'browser/ui/views/content_setting_bubble_contents.h',
+      'browser/ui/views/cookie_info_view.cc',
+      'browser/ui/views/cookie_info_view.h',
+      'browser/ui/views/create_application_shortcut_view.cc',
+      'browser/ui/views/create_application_shortcut_view.h',
+      'browser/ui/views/critical_notification_bubble_view.cc',
+      'browser/ui/views/critical_notification_bubble_view.h',
+      'browser/ui/views/crypto_module_password_dialog_view.cc',
+      'browser/ui/views/crypto_module_password_dialog_view.h',
+      'browser/ui/views/desktop_media_picker_views.cc',
+      'browser/ui/views/desktop_media_picker_views.h',
+      'browser/ui/views/detachable_toolbar_view.cc',
+      'browser/ui/views/detachable_toolbar_view.h',
+      'browser/ui/views/download/download_danger_prompt_views.cc',
+      'browser/ui/views/download/download_feedback_dialog_view.cc',
+      'browser/ui/views/download/download_feedback_dialog_view.h',
+      'browser/ui/views/download/download_in_progress_dialog_view.cc',
+      'browser/ui/views/download/download_in_progress_dialog_view.h',
+      'browser/ui/views/download/download_item_view.cc',
+      'browser/ui/views/download/download_item_view.h',
+      'browser/ui/views/download/download_shelf_context_menu_view.cc',
+      'browser/ui/views/download/download_shelf_context_menu_view.h',
+      'browser/ui/views/download/download_shelf_view.cc',
+      'browser/ui/views/download/download_shelf_view.h',
+      'browser/ui/views/download/download_started_animation_views.cc',
+      'browser/ui/views/dropdown_bar_host_aura.cc',
+      'browser/ui/views/dropdown_bar_host.cc',
+      'browser/ui/views/dropdown_bar_host_delegate.h',
+      'browser/ui/views/dropdown_bar_host.h',
+      'browser/ui/views/dropdown_bar_view.cc',
+      'browser/ui/views/dropdown_bar_view.h',
+      'browser/ui/views/edit_search_engine_dialog.cc',
+      'browser/ui/views/edit_search_engine_dialog.h',
+      'browser/ui/views/elevation_icon_setter.cc',
+      'browser/ui/views/elevation_icon_setter.h',
+      'browser/ui/views/extensions/bookmark_app_bubble_view.cc',
+      'browser/ui/views/extensions/bookmark_app_bubble_view.h',
+      'browser/ui/views/extensions/browser_action_drag_data.cc',
+      'browser/ui/views/extensions/browser_action_drag_data.h',
+      'browser/ui/views/extensions/browser_action_overflow_menu_controller.cc',
+      'browser/ui/views/extensions/browser_action_overflow_menu_controller.h',
+      'browser/ui/views/extensions/bundle_installed_bubble.cc',
+      'browser/ui/views/extensions/extension_action_view_controller.cc',
+      'browser/ui/views/extensions/extension_action_view_controller.h',
+      'browser/ui/views/extensions/extension_action_view_delegate.h',
+      'browser/ui/views/extensions/extension_dialog.cc',
+      'browser/ui/views/extensions/extension_dialog.h',
+      'browser/ui/views/extensions/extension_dialog_observer.cc',
+      'browser/ui/views/extensions/extension_dialog_observer.h',
+      'browser/ui/views/extensions/extension_install_dialog_view.cc',
+      'browser/ui/views/extensions/extension_installed_bubble_view.cc',
+      'browser/ui/views/extensions/extension_installed_bubble_view.h',
+      'browser/ui/views/extensions/extension_keybinding_registry_views.cc',
+      'browser/ui/views/extensions/extension_keybinding_registry_views.h',
+      'browser/ui/views/extensions/extension_message_bubble_view.cc',
+      'browser/ui/views/extensions/extension_message_bubble_view.h',
+      'browser/ui/views/extensions/extension_popup.cc',
+      'browser/ui/views/extensions/extension_popup.h',
+      'browser/ui/views/extensions/extension_uninstall_dialog_view.cc',
+      'browser/ui/views/extensions/extension_view_views.cc',
+      'browser/ui/views/extensions/extension_view_views.h',
+      'browser/ui/views/extensions/media_galleries_dialog_views.cc',
+      'browser/ui/views/extensions/media_galleries_dialog_views.h',
+      'browser/ui/views/extensions/media_gallery_checkbox_view.cc',
+      'browser/ui/views/extensions/media_gallery_checkbox_view.h',
+      'browser/ui/views/find_bar_host_aura.cc',
+      'browser/ui/views/find_bar_host.cc',
+      'browser/ui/views/find_bar_host.h',
+      'browser/ui/views/find_bar_view.cc',
+      'browser/ui/views/find_bar_view.h',
+      'browser/ui/views/first_run_bubble.cc',
+      'browser/ui/views/first_run_bubble.h',
+      'browser/ui/views/frame/browser_frame.cc',
+      'browser/ui/views/frame/browser_frame_common_win.cc',
+      'browser/ui/views/frame/browser_frame_common_win.h',
+      'browser/ui/views/frame/browser_frame.h',
+      'browser/ui/views/frame/browser_non_client_frame_view.cc',
+      'browser/ui/views/frame/browser_non_client_frame_view_factory_aura.cc',
+      'browser/ui/views/frame/browser_non_client_frame_view.h',
+      'browser/ui/views/frame/browser_root_view.cc',
+      'browser/ui/views/frame/browser_root_view.h',
+      'browser/ui/views/frame/browser_shutdown.cc',
+      'browser/ui/views/frame/browser_shutdown.h',
+      'browser/ui/views/frame/browser_view.cc',
+      'browser/ui/views/frame/browser_view.h',
+      'browser/ui/views/frame/browser_view_layout.cc',
+      'browser/ui/views/frame/browser_view_layout_delegate.h',
+      'browser/ui/views/frame/browser_view_layout.h',
+      'browser/ui/views/frame/browser_window_property_manager_win.cc',
+      'browser/ui/views/frame/browser_window_property_manager_win.h',
+      'browser/ui/views/frame/contents_layout_manager.cc',
+      'browser/ui/views/frame/contents_layout_manager.h',
+      'browser/ui/views/frame/contents_web_view.cc',
+      'browser/ui/views/frame/contents_web_view.h',
+      'browser/ui/views/frame/immersive_mode_controller.cc',
+      'browser/ui/views/frame/immersive_mode_controller_factory.cc',
+      'browser/ui/views/frame/immersive_mode_controller.h',
+      'browser/ui/views/frame/immersive_mode_controller_stub.cc',
+      'browser/ui/views/frame/immersive_mode_controller_stub.h',
+      'browser/ui/views/frame/minimize_button_metrics_win.cc',
+      'browser/ui/views/frame/minimize_button_metrics_win.h',
+      'browser/ui/views/frame/native_browser_frame_factory.cc',
+      'browser/ui/views/frame/native_browser_frame_factory.h',
+      'browser/ui/views/frame/native_browser_frame_factory_chromeos.cc',
+      'browser/ui/views/frame/native_browser_frame.h',
+      'browser/ui/views/frame/opaque_browser_frame_view_layout.cc',
+      'browser/ui/views/frame/opaque_browser_frame_view_layout_delegate.h',
+      'browser/ui/views/frame/opaque_browser_frame_view_layout.h',
+      'browser/ui/views/frame/opaque_browser_frame_view_linux.cc',
+      'browser/ui/views/frame/opaque_browser_frame_view_linux.h',
+      'browser/ui/views/frame/opaque_browser_frame_view_platform_specific.cc',
+      'browser/ui/views/frame/opaque_browser_frame_view_platform_specific.h',
+      'browser/ui/views/frame/scroll_end_effect_controller.h',
+      'browser/ui/views/frame/system_menu_insertion_delegate_win.cc',
+      'browser/ui/views/frame/system_menu_insertion_delegate_win.h',
+      'browser/ui/views/frame/system_menu_model_builder.cc',
+      'browser/ui/views/frame/system_menu_model_builder.h',
+      'browser/ui/views/frame/system_menu_model_delegate.cc',
+      'browser/ui/views/frame/system_menu_model_delegate.h',
+      'browser/ui/views/frame/taskbar_decorator.h',
+      'browser/ui/views/frame/taskbar_decorator_win.cc',
+      'browser/ui/views/frame/top_container_view.cc',
+      'browser/ui/views/frame/top_container_view.h',
+      'browser/ui/views/frame/web_contents_close_handler.cc',
+      'browser/ui/views/frame/web_contents_close_handler_delegate.h',
+      'browser/ui/views/frame/web_contents_close_handler.h',
+      'browser/ui/views/fullscreen_exit_bubble_views.cc',
+      'browser/ui/views/fullscreen_exit_bubble_views.h',
+      'browser/ui/views/global_error_bubble_view.cc',
+      'browser/ui/views/global_error_bubble_view.h',
+      'browser/ui/views/hung_renderer_view.cc',
+      'browser/ui/views/hung_renderer_view.h',
+      'browser/ui/views/importer/import_lock_dialog_view.cc',
+      'browser/ui/views/importer/import_lock_dialog_view.h',
+      'browser/ui/views/infobars/alternate_nav_infobar_view.cc',
+      'browser/ui/views/infobars/alternate_nav_infobar_view.h',
+      'browser/ui/views/infobars/confirm_infobar.cc',
+      'browser/ui/views/infobars/confirm_infobar.h',
+      'browser/ui/views/infobars/extension_infobar.cc',
+      'browser/ui/views/infobars/extension_infobar.h',
+      'browser/ui/views/infobars/infobar_background.cc',
+      'browser/ui/views/infobars/infobar_background.h',
+      'browser/ui/views/infobars/infobar_container_view.cc',
+      'browser/ui/views/infobars/infobar_container_view.h',
+      'browser/ui/views/infobars/infobar_view.cc',
+      'browser/ui/views/infobars/infobar_view.h',
+      'browser/ui/views/javascript_app_modal_dialog_views.cc',
+      'browser/ui/views/javascript_app_modal_dialog_views.h',
+      'browser/ui/views/load_complete_listener.cc',
+      'browser/ui/views/load_complete_listener.h',
+      'browser/ui/views/location_bar/bubble_icon_view.cc',
+      'browser/ui/views/location_bar/bubble_icon_view.h',
+      'browser/ui/views/location_bar/content_setting_image_view.cc',
+      'browser/ui/views/location_bar/content_setting_image_view.h',
+      'browser/ui/views/location_bar/ev_bubble_view.cc',
+      'browser/ui/views/location_bar/ev_bubble_view.h',
+      'browser/ui/views/location_bar/generated_credit_card_view.cc',
+      'browser/ui/views/location_bar/generated_credit_card_view.h',
+      'browser/ui/views/location_bar/icon_label_bubble_view.cc',
+      'browser/ui/views/location_bar/icon_label_bubble_view.h',
+      'browser/ui/views/location_bar/keyword_hint_view.cc',
+      'browser/ui/views/location_bar/keyword_hint_view.h',
+      'browser/ui/views/location_bar/location_bar_decoration_view.cc',
+      'browser/ui/views/location_bar/location_bar_decoration_view.h',
+      'browser/ui/views/location_bar/location_bar_layout.cc',
+      'browser/ui/views/location_bar/location_bar_layout.h',
+      'browser/ui/views/location_bar/location_bar_view.cc',
+      'browser/ui/views/location_bar/location_bar_view.h',
+      'browser/ui/views/location_bar/location_icon_view.cc',
+      'browser/ui/views/location_bar/location_icon_view.h',
+      'browser/ui/views/location_bar/open_pdf_in_reader_view.cc',
+      'browser/ui/views/location_bar/open_pdf_in_reader_view.h',
+      'browser/ui/views/location_bar/origin_chip_view.cc',
+      'browser/ui/views/location_bar/origin_chip_view.h',
+      'browser/ui/views/location_bar/page_action_image_view.cc',
+      'browser/ui/views/location_bar/page_action_image_view.h',
+      'browser/ui/views/location_bar/page_action_with_badge_view.cc',
+      'browser/ui/views/location_bar/page_action_with_badge_view.h',
+      'browser/ui/views/location_bar/page_info_helper.cc',
+      'browser/ui/views/location_bar/page_info_helper.h',
+      'browser/ui/views/location_bar/search_button.cc',
+      'browser/ui/views/location_bar/search_button.h',
+      'browser/ui/views/location_bar/selected_keyword_view.cc',
+      'browser/ui/views/location_bar/selected_keyword_view.h',
+      'browser/ui/views/location_bar/star_view.cc',
+      'browser/ui/views/location_bar/star_view.h',
+      'browser/ui/views/location_bar/translate_icon_view.cc',
+      'browser/ui/views/location_bar/translate_icon_view.h',
+      'browser/ui/views/location_bar/zoom_bubble_view.cc',
+      'browser/ui/views/location_bar/zoom_bubble_view.h',
+      'browser/ui/views/location_bar/zoom_view.cc',
+      'browser/ui/views/location_bar/zoom_view.h',
+      'browser/ui/views/login_prompt_views.cc',
+      'browser/ui/views/login_view.cc',
+      'browser/ui/views/login_view.h',
+      'browser/ui/views/omnibox/omnibox_popup_contents_view.cc',
+      'browser/ui/views/omnibox/omnibox_popup_contents_view.h',
+      'browser/ui/views/omnibox/omnibox_result_view.cc',
+      'browser/ui/views/omnibox/omnibox_result_view.h',
+      'browser/ui/views/omnibox/omnibox_view_views.cc',
+      'browser/ui/views/omnibox/omnibox_view_views.h',
+      'browser/ui/views/open_pdf_in_reader_bubble_view.cc',
+      'browser/ui/views/open_pdf_in_reader_bubble_view.h',
+      'browser/ui/views/outdated_upgrade_bubble_view.cc',
+      'browser/ui/views/outdated_upgrade_bubble_view.h',
+      'browser/ui/views/panels/panel_frame_view.cc',
+      'browser/ui/views/panels/panel_frame_view.h',
+      'browser/ui/views/panels/panel_stack_view.cc',
+      'browser/ui/views/panels/panel_stack_view.h',
+      'browser/ui/views/panels/panel_view.cc',
+      'browser/ui/views/panels/panel_view.h',
+      'browser/ui/views/panels/taskbar_window_thumbnailer_win.cc',
+      'browser/ui/views/panels/taskbar_window_thumbnailer_win.h',
+      'browser/ui/views/panels/x11_panel_resizer.cc',
+      'browser/ui/views/panels/x11_panel_resizer.h',
+      'browser/ui/views/passwords/manage_password_item_view.cc',
+      'browser/ui/views/passwords/manage_password_item_view.h',
+      'browser/ui/views/passwords/manage_passwords_bubble_view.cc',
+      'browser/ui/views/passwords/manage_passwords_bubble_view.h',
+      'browser/ui/views/passwords/manage_passwords_icon_view.cc',
+      'browser/ui/views/passwords/manage_passwords_icon_view.h',
+      'browser/ui/views/pdf_password_dialog.cc',
+      'browser/ui/views/process_singleton_dialog_linux.cc',
+      'browser/ui/views/profiles/avatar_label.cc',
+      'browser/ui/views/profiles/avatar_label.h',
+      'browser/ui/views/profiles/avatar_menu_bubble_view.cc',
+      'browser/ui/views/profiles/avatar_menu_bubble_view.h',
+      'browser/ui/views/profiles/avatar_menu_button.cc',
+      'browser/ui/views/profiles/avatar_menu_button.h',
+      'browser/ui/views/profiles/new_avatar_button.cc',
+      'browser/ui/views/profiles/new_avatar_button.h',
+      'browser/ui/views/profiles/profile_chooser_view.cc',
+      'browser/ui/views/profiles/profile_chooser_view.h',
+      'browser/ui/views/profiles/profile_reset_bubble_view.cc',
+      'browser/ui/views/profiles/profile_reset_bubble_view.h',
+      'browser/ui/views/profiles/user_manager_view.cc',
+      'browser/ui/views/profiles/user_manager_view.h',
+      'browser/ui/views/renderer_context_menu/render_view_context_menu_views.cc',
+      'browser/ui/views/renderer_context_menu/render_view_context_menu_views.h',
+      'browser/ui/views/sad_tab_view.cc',
+      'browser/ui/views/sad_tab_view.h',
+      'browser/ui/views/session_crashed_bubble_view.cc',
+      'browser/ui/views/session_crashed_bubble_view.h',
+      'browser/ui/views/settings_api_bubble_helper_views.cc',
+      'browser/ui/views/settings_api_bubble_helper_views.h',
+      'browser/ui/views/signed_certificate_timestamp_info_view.cc',
+      'browser/ui/views/signed_certificate_timestamp_info_view.h',
+      'browser/ui/views/signed_certificate_timestamps_views.cc',
+      'browser/ui/views/signed_certificate_timestamps_views.h',
+      'browser/ui/views/simple_message_box_views.cc',
+      'browser/ui/views/ssl_client_certificate_selector.cc',
+      'browser/ui/views/ssl_client_certificate_selector.h',
+      'browser/ui/views/status_bubble_views.cc',
+      'browser/ui/views/status_bubble_views.h',
+      'browser/ui/views/status_icons/status_icon_win.cc',
+      'browser/ui/views/status_icons/status_icon_win.h',
+      'browser/ui/views/status_icons/status_tray_linux.cc',
+      'browser/ui/views/status_icons/status_tray_linux.h',
+      'browser/ui/views/status_icons/status_tray_state_changer_win.cc',
+      'browser/ui/views/status_icons/status_tray_state_changer_win.h',
+      'browser/ui/views/status_icons/status_tray_win.cc',
+      'browser/ui/views/status_icons/status_tray_win.h',
+      'browser/ui/views/stubs_aura.cc',
+      'browser/ui/views/sync/profile_signin_confirmation_dialog_views.cc',
+      'browser/ui/views/sync/profile_signin_confirmation_dialog_views.h',
+      'browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views.cc',
+      'browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views.h',
+      'browser/ui/views/tab_icon_view.cc',
+      'browser/ui/views/tab_icon_view.h',
+      'browser/ui/views/tab_modal_confirm_dialog_views.cc',
+      'browser/ui/views/tab_modal_confirm_dialog_views.h',
+      'browser/ui/views/tabs/browser_tab_strip_controller.cc',
+      'browser/ui/views/tabs/browser_tab_strip_controller.h',
+      'browser/ui/views/tabs/media_indicator_button.cc',
+      'browser/ui/views/tabs/media_indicator_button.h',
+      'browser/ui/views/tabs/stacked_tab_strip_layout.cc',
+      'browser/ui/views/tabs/stacked_tab_strip_layout.h',
+      'browser/ui/views/tabs/tab.cc',
+      'browser/ui/views/tabs/tab_controller.h',
+      'browser/ui/views/tabs/tab_drag_controller.cc',
+      'browser/ui/views/tabs/tab_drag_controller.h',
+      'browser/ui/views/tabs/tab.h',
+      'browser/ui/views/tabs/tab_strip.cc',
+      'browser/ui/views/tabs/tab_strip_controller.h',
+      'browser/ui/views/tabs/tab_strip.h',
+      'browser/ui/views/tabs/window_finder_chromeos.cc',
+      'browser/ui/views/tabs/window_finder.h',
+      'browser/ui/views/tabs/window_finder_win.cc',
+      'browser/ui/views/theme_image_mapper.cc',
+      'browser/ui/views/theme_image_mapper.h',
+      'browser/ui/views/toolbar/back_button.cc',
+      'browser/ui/views/toolbar/back_button.h',
+      'browser/ui/views/toolbar/browser_actions_container.cc',
+      'browser/ui/views/toolbar/browser_actions_container.h',
+      'browser/ui/views/toolbar/browser_actions_container_observer.h',
+      'browser/ui/views/toolbar/browser_action_test_util_views.cc',
+      'browser/ui/views/toolbar/browser_action_view.cc',
+      'browser/ui/views/toolbar/browser_action_view.h',
+      'browser/ui/views/toolbar/extension_toolbar_menu_view.cc',
+      'browser/ui/views/toolbar/extension_toolbar_menu_view.h',
+      'browser/ui/views/toolbar/home_button.cc',
+      'browser/ui/views/toolbar/home_button.h',
+      'browser/ui/views/toolbar/reload_button.cc',
+      'browser/ui/views/toolbar/reload_button.h',
+      'browser/ui/views/toolbar/toolbar_button.cc',
+      'browser/ui/views/toolbar/toolbar_button.h',
+      'browser/ui/views/toolbar/toolbar_view.cc',
+      'browser/ui/views/toolbar/toolbar_view.h',
+      'browser/ui/views/toolbar/wrench_menu.cc',
+      'browser/ui/views/toolbar/wrench_menu.h',
+      'browser/ui/views/toolbar/wrench_menu_observer.h',
+      'browser/ui/views/toolbar/wrench_toolbar_button.cc',
+      'browser/ui/views/toolbar/wrench_toolbar_button.h',
+      'browser/ui/views/touch_uma/touch_uma.h',
+      'browser/ui/views/translate/translate_bubble_view.cc',
+      'browser/ui/views/translate/translate_bubble_view.h',
+      'browser/ui/views/update_recommended_message_box.cc',
+      'browser/ui/views/update_recommended_message_box.h',
+      'browser/ui/views/validation_message_bubble_delegate.cc',
+      'browser/ui/views/validation_message_bubble_delegate.h',
+      'browser/ui/views/validation_message_bubble_view.cc',
+      'browser/ui/views/web_contents_modal_dialog_manager_views.cc',
+      'browser/ui/views/website_settings/permissions_bubble_view.cc',
+      'browser/ui/views/website_settings/permissions_bubble_view.h',
+      'browser/ui/views/website_settings/permission_selector_view.cc',
+      'browser/ui/views/website_settings/permission_selector_view.h',
+      'browser/ui/views/website_settings/permission_selector_view_observer.h',
+      'browser/ui/views/website_settings/website_settings_popup_view.cc',
+      'browser/ui/views/website_settings/website_settings_popup_view.h',
+    ],
+    # Cross-platform views sources also ready for toolkit-views on Mac.
+    'chrome_browser_ui_views_sources': [
+      'browser/ui/app_list/app_list_controller_delegate_views.cc',
+      'browser/ui/app_list/app_list_controller_delegate_views.h',
+      'browser/ui/app_list/app_list_service_views.cc',
+      'browser/ui/app_list/app_list_service_views.h',
+      'browser/ui/app_list/app_list_shower_views.cc',
+      'browser/ui/app_list/app_list_shower_views.h',
+      'browser/ui/views/accessibility/accessibility_event_router_views.cc',
+      'browser/ui/views/accessibility/accessibility_event_router_views.h',
+      'browser/ui/views/chrome_browser_main_extra_parts_views.cc',
+      'browser/ui/views/chrome_browser_main_extra_parts_views.h',
+      'browser/ui/views/chrome_views_delegate.cc',
+      'browser/ui/views/chrome_views_delegate.h',
+    ],
+    # Views files for everwhere but ChromeOS.
+    'chrome_browser_ui_views_non_chromeos_sources': [
+      'browser/ui/views/chrome_views_delegate_aura.cc',
+      'browser/ui/views/external_protocol_dialog.cc',
+      'browser/ui/views/external_protocol_dialog.h',
+      'browser/ui/views/frame/desktop_browser_frame_aura.cc',
+      'browser/ui/views/frame/desktop_browser_frame_aura.h',
+      'browser/ui/views/frame/browser_desktop_root_window_host_ozone.cc',
+      'browser/ui/views/frame/browser_desktop_root_window_host_ozone.h',
+      'browser/ui/views/frame/opaque_browser_frame_view.cc',
+      'browser/ui/views/frame/opaque_browser_frame_view.h',
+      'browser/ui/views/message_center/message_center_frame_view.cc',
+      'browser/ui/views/message_center/message_center_frame_view.h',
+      'browser/ui/views/message_center/message_center_widget_delegate.h',
+      'browser/ui/views/message_center/message_center_widget_delegate.cc',
+      'browser/ui/views/message_center/web_notification_tray.h',
+      'browser/ui/views/message_center/web_notification_tray.cc',
+      'browser/ui/views/message_center/web_notification_tray_win.cc',
+      'browser/ui/views/screen_capture_notification_ui_views.cc',
+    ],
+    # Cross-platform aura sources.
+    'chrome_browser_ui_aura_sources': [
+      'browser/ui/aura/chrome_browser_main_extra_parts_aura.cc',
+      'browser/ui/aura/chrome_browser_main_extra_parts_aura.h',
+      'browser/ui/aura/tab_contents/web_drag_bookmark_handler_aura.cc',
+      'browser/ui/aura/tab_contents/web_drag_bookmark_handler_aura.h',
+      'browser/ui/gesture_prefs_observer_factory_aura.cc',
+      'browser/ui/gesture_prefs_observer_factory_aura.h',
+      'browser/ui/views/link_disambiguation/link_disambiguation_popup.cc',
+      'browser/ui/views/link_disambiguation/link_disambiguation_popup.h',
+      'browser/ui/webui/gesture_config_ui.cc',
+      'browser/ui/webui/gesture_config_ui.h',
+      'browser/ui/window_sizer/window_sizer_aura.cc',
+    ],
+    'chrome_browser_ui_non_aura_sources': [
+      'browser/ui/profile_reset_bubble_stub.cc',
+    ],
+    # Aura but not ChromeOS.
+    'chrome_browser_ui_aura_non_chromeos': [
+      'browser/ui/aura/active_desktop_monitor.cc',
+      'browser/ui/aura/active_desktop_monitor.h',
+    ],
+    # Cross-platform ash sources.
+    'chrome_browser_ui_ash_sources': [
+      'browser/ui/ash/accessibility/automation_manager_ash.cc',
+      'browser/ui/ash/accessibility/automation_manager_ash.h',
+      'browser/ui/ash/accessibility/ax_root_obj_wrapper.cc',
+      'browser/ui/ash/accessibility/ax_root_obj_wrapper.h',
+      'browser/ui/ash/accessibility/ax_tree_source_ash.cc',
+      'browser/ui/ash/accessibility/ax_tree_source_ash.h',
+      'browser/ui/ash/ash_keyboard_controller_proxy.cc',
+      'browser/ui/ash/ash_keyboard_controller_proxy.h',
+      'browser/ui/ash/app_list/app_list_controller_ash.cc',
+      'browser/ui/ash/app_list/app_list_controller_ash.h',
+      'browser/ui/ash/app_list/app_list_service_ash.cc',
+      'browser/ui/ash/app_list/app_list_service_ash.h',
+      'browser/ui/ash/app_list/app_sync_ui_state_watcher.cc',
+      'browser/ui/ash/app_list/app_sync_ui_state_watcher.h',
+      'browser/ui/ash/app_sync_ui_state.cc',
+      'browser/ui/ash/app_sync_ui_state.h',
+      'browser/ui/ash/app_sync_ui_state_observer.h',
+      'browser/ui/ash/app_sync_ui_state_factory.cc',
+      'browser/ui/ash/app_sync_ui_state_factory.h',
+      'browser/ui/ash/ash_init.cc',
+      'browser/ui/ash/ash_init.h',
+      'browser/ui/ash/ash_util.cc',
+      'browser/ui/ash/ash_util.h',
+      'browser/ui/ash/chrome_launcher_prefs.cc',
+      'browser/ui/ash/chrome_launcher_prefs.h',
+      'browser/ui/ash/chrome_new_window_delegate.cc',
+      'browser/ui/ash/chrome_new_window_delegate.h',
+      'browser/ui/ash/chrome_new_window_delegate_chromeos.cc',
+      'browser/ui/ash/chrome_new_window_delegate_chromeos.h',
+      'browser/ui/ash/chrome_shell_delegate.cc',
+      'browser/ui/ash/chrome_shell_delegate.h',
+      'browser/ui/ash/chrome_shell_delegate_chromeos.cc',
+      'browser/ui/ash/ime_controller_chromeos.cc',
+      'browser/ui/ash/ime_controller_chromeos.h',
+      'browser/ui/ash/launcher/app_shortcut_launcher_item_controller.cc',
+      'browser/ui/ash/launcher/app_shortcut_launcher_item_controller.h',
+      'browser/ui/ash/launcher/app_window_launcher_item_controller.cc',
+      'browser/ui/ash/launcher/app_window_launcher_item_controller.h',
+      'browser/ui/ash/launcher/app_window_launcher_controller.cc',
+      'browser/ui/ash/launcher/app_window_launcher_controller.h',
+      'browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.cc',
+      'browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.h',
+      'browser/ui/ash/launcher/browser_status_monitor.cc',
+      'browser/ui/ash/launcher/browser_status_monitor.h',
+      'browser/ui/ash/launcher/chrome_launcher_app_menu_item.cc',
+      'browser/ui/ash/launcher/chrome_launcher_app_menu_item.h',
+      'browser/ui/ash/launcher/chrome_launcher_app_menu_item_browser.cc',
+      'browser/ui/ash/launcher/chrome_launcher_app_menu_item_browser.h',
+      'browser/ui/ash/launcher/chrome_launcher_app_menu_item_tab.cc',
+      'browser/ui/ash/launcher/chrome_launcher_app_menu_item_tab.h',
+      'browser/ui/ash/launcher/chrome_launcher_app_menu_item_v2app.cc',
+      'browser/ui/ash/launcher/chrome_launcher_app_menu_item_v2app.h',
+      'browser/ui/ash/launcher/chrome_launcher_controller.cc',
+      'browser/ui/ash/launcher/chrome_launcher_controller.h',
+      'browser/ui/ash/launcher/chrome_launcher_controller_chromeos.cc',
+      'browser/ui/ash/launcher/chrome_launcher_controller_win.cc',
+      'browser/ui/ash/launcher/launcher_application_menu_item_model.cc',
+      'browser/ui/ash/launcher/launcher_application_menu_item_model.h',
+      'browser/ui/ash/launcher/launcher_app_tab_helper.cc',
+      'browser/ui/ash/launcher/launcher_app_tab_helper.h',
+      'browser/ui/ash/launcher/launcher_context_menu.cc',
+      'browser/ui/ash/launcher/launcher_context_menu.h',
+      'browser/ui/ash/launcher/launcher_favicon_loader.cc',
+      'browser/ui/ash/launcher/launcher_favicon_loader.h',
+      'browser/ui/ash/launcher/launcher_item_controller.cc',
+      'browser/ui/ash/launcher/launcher_item_controller.h',
+      'browser/ui/ash/launcher/multi_profile_app_window_launcher_controller.cc',
+      'browser/ui/ash/launcher/multi_profile_app_window_launcher_controller.h',
+      'browser/ui/ash/launcher/multi_profile_browser_status_monitor.cc',
+      'browser/ui/ash/launcher/multi_profile_browser_status_monitor.h',
+      'browser/ui/ash/media_delegate_chromeos.cc',
+      'browser/ui/ash/media_delegate_chromeos.h',
+      'browser/ui/ash/multi_user/multi_user_context_menu_chromeos.cc',
+      'browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.cc',
+      'browser/ui/ash/multi_user/multi_user_notification_blocker_chromeos.h',
+      'browser/ui/ash/multi_user/multi_user_util.cc',
+      'browser/ui/ash/multi_user/multi_user_util.h',
+      'browser/ui/ash/multi_user/multi_user_warning_dialog.cc',
+      'browser/ui/ash/multi_user/multi_user_warning_dialog.h',
+      'browser/ui/ash/multi_user/multi_user_window_manager.cc',
+      'browser/ui/ash/multi_user/multi_user_window_manager.h',
+      'browser/ui/ash/multi_user/multi_user_window_manager_chromeos.cc',
+      'browser/ui/ash/multi_user/multi_user_window_manager_chromeos.h',
+      'browser/ui/ash/multi_user/multi_user_window_manager_stub.cc',
+      'browser/ui/ash/multi_user/multi_user_window_manager_stub.h',
+      'browser/ui/ash/multi_user/user_switch_animator_chromeos.cc',
+      'browser/ui/ash/multi_user/user_switch_animator_chromeos.h',
+      'browser/ui/ash/screenshot_taker.cc',
+      'browser/ui/ash/screenshot_taker.h',
+      'browser/ui/ash/session_state_delegate_chromeos.cc',
+      'browser/ui/ash/session_state_delegate_chromeos.h',
+      'browser/ui/ash/solid_color_user_wallpaper_delegate.cc',
+      'browser/ui/ash/solid_color_user_wallpaper_delegate.h',
+      'browser/ui/ash/stub_user_accounts_delegate.cc',
+      'browser/ui/ash/stub_user_accounts_delegate.h',
+      'browser/ui/ash/system_tray_delegate_chromeos.cc',
+      'browser/ui/ash/system_tray_delegate_chromeos.h',
+      'browser/ui/ash/system_tray_delegate_linux.cc',
+      'browser/ui/ash/system_tray_delegate_linux.h',
+      'browser/ui/ash/system_tray_delegate_win.cc',
+      'browser/ui/ash/system_tray_delegate_win.h',
+      'browser/ui/ash/user_accounts_delegate_chromeos.cc',
+      'browser/ui/ash/user_accounts_delegate_chromeos.h',
+      'browser/ui/ash/volume_controller_chromeos.cc',
+      'browser/ui/ash/volume_controller_chromeos.h',
+      'browser/ui/views/touch_uma/touch_uma_ash.cc',
+      'browser/ui/window_sizer/window_sizer_ash.cc',
+    ],
+    # Used when ash is disabled.
+    'chrome_browser_ui_non_ash_sources': [
+      'browser/ui/views/touch_uma/touch_uma.cc',
+    ],
+    # Ash + Views.
+    'chrome_browser_ui_ash_views_sources': [
+      'browser/ui/views/frame/browser_frame_ash.cc',
+      'browser/ui/views/frame/browser_frame_ash.h',
+      'browser/ui/views/frame/browser_header_painter_ash.cc',
+      'browser/ui/views/frame/browser_header_painter_ash.h',
+      'browser/ui/views/frame/browser_non_client_frame_view_ash.cc',
+      'browser/ui/views/frame/browser_non_client_frame_view_ash.h',
+      'browser/ui/views/frame/immersive_mode_controller_ash.cc',
+      'browser/ui/views/frame/immersive_mode_controller_ash.h',
+      'browser/ui/views/frame/scroll_end_effect_controller_ash.cc',
+      'browser/ui/views/frame/scroll_end_effect_controller_ash.h',
+      'browser/ui/views/tabs/window_finder_ash.cc',
+    ],
+    # Used when Ash is enabled but not ChromeOS.
+    'chrome_browser_ui_ash_non_chromeos': [
+      'browser/ui/ash/chrome_shell_delegate_views.cc',
+      'browser/ui/ash/multi_user/multi_user_context_menu.cc',
+      'browser/ui/ash/multi_user/multi_user_context_menu.h',
+      'browser/ui/ash/session_state_delegate_views.cc',
+      'browser/ui/ash/session_state_delegate_views.h',
+    ],
+    # Used when athena is enabled.
+    'chrome_browser_ui_athena_sources': [
+      'browser/ui/views/athena/athena_util.cc',
+      'browser/ui/views/athena/athena_util.h',
+      'browser/ui/views/athena/chrome_browser_main_extra_parts_athena.cc',
+      'browser/ui/views/athena/chrome_browser_main_extra_parts_athena.h',
+    ],
+    # Counts desktop Linux and ChromeOS.
+    'chrome_browser_ui_linux_sources': [
+      'browser/ui/startup/autolaunch_prompt.cc',
+      'browser/ui/views/apps/chrome_apps_client_views.cc',
+      'browser/ui/views/frame/taskbar_decorator.cc',
+      'browser/ui/webui/certificate_viewer_ui.cc',
+      'browser/ui/webui/certificate_viewer_ui.h',
+      'browser/ui/webui/certificate_viewer_webui.cc',
+      'browser/ui/webui/certificate_viewer_webui.h',
+    ],
+    # Desktop Linux. Assume aura/ash/views.
+    'chrome_browser_ui_desktop_linux_sources': [
+      'browser/ui/views/app_list/linux/app_list_linux.cc',
+      'browser/ui/views/app_list/linux/app_list_linux.h',
+      'browser/ui/views/app_list/linux/app_list_service_linux.cc',
+      'browser/ui/views/app_list/linux/app_list_service_linux.h',
+      'browser/ui/views/first_run_dialog.cc',
+      'browser/ui/views/first_run_dialog.h',
+      'browser/ui/views/frame/browser_desktop_window_tree_host.h',
+      'browser/ui/views/frame/browser_desktop_window_tree_host_x11.cc',
+      'browser/ui/views/frame/browser_desktop_window_tree_host_x11.h',
+      'browser/ui/views/frame/native_browser_frame_factory_auralinux.cc',
+      'browser/ui/views/frame/native_browser_frame_factory_desktop_ash.cc',
+      'browser/ui/views/status_icons/status_icon_linux_wrapper.cc',
+      'browser/ui/views/status_icons/status_icon_linux_wrapper.h',
+      'browser/ui/webui/help/version_updater_basic.cc',
+      'browser/ui/webui/help/version_updater_basic.h',
+    ],
+    # Compiled for X11: desktop Linux and ChromeOS. We assume aura/views/ash.
+    'chrome_browser_ui_x11_sources': [
+      'browser/ui/views/frame/browser_command_handler_x11.cc',
+      'browser/ui/views/frame/browser_command_handler_x11.h',
+      'browser/ui/views/frame/global_menu_bar_registrar_x11.cc',
+      'browser/ui/views/frame/global_menu_bar_registrar_x11.h',
+      'browser/ui/views/frame/global_menu_bar_x11.cc',
+      'browser/ui/views/frame/global_menu_bar_x11.h',
+      'browser/ui/views/javascript_app_modal_event_blocker_x11.cc',
+      'browser/ui/views/javascript_app_modal_event_blocker_x11.h',
+      'browser/ui/views/tabs/window_finder_x11.cc',
+    ],
+    # Files used on iOS. iOS uses only these files and does not share other
+    # lists, so a file may appear here and in the non_ios_sources also.
+    'chrome_browser_ui_ios_sources': [
+      'browser/ui/profile_error_dialog.cc',
+      'browser/ui/profile_error_dialog.h',
+    ],
+    'chrome_browser_ui_extensions_sources': [
+      'browser/ui/extensions/accelerator_priority.cc',
+      'browser/ui/extensions/accelerator_priority.h',
+      'browser/ui/extensions/extension_installed_bubble.cc',
+      'browser/ui/extensions/extension_installed_bubble.h',
+      'browser/ui/extensions/extension_enable_flow.cc',
+      'browser/ui/extensions/extension_enable_flow.h',
+      'browser/ui/extensions/extension_enable_flow_delegate.h',
+      'browser/ui/webui/extensions/chromeos/kiosk_apps_handler.cc',
+      'browser/ui/webui/extensions/chromeos/kiosk_apps_handler.h',
+      'browser/ui/webui/extensions/extension_basic_info.cc',
+      'browser/ui/webui/extensions/extension_basic_info.h',
+      'browser/ui/webui/extensions/extension_error_ui_util.cc',
+      'browser/ui/webui/extensions/extension_error_ui_util.h',
+      'browser/ui/webui/extensions/extension_icon_source.cc',
+      'browser/ui/webui/extensions/extension_icon_source.h',
+      'browser/ui/webui/extensions/extension_info_ui.cc',
+      'browser/ui/webui/extensions/extension_info_ui.h',
+      'browser/ui/webui/extensions/pack_extension_handler.cc',
+      'browser/ui/webui/extensions/pack_extension_handler.h',
+      'browser/ui/webui/voicesearch_ui.cc',
+      'browser/ui/webui/voicesearch_ui.h',
+    ],
+  },
+  'targets': [
+    {
+      'target_name': 'browser_ui',
+      'type': 'static_library',
+      'variables': { 'enable_wexit_time_destructors': 1, },
+      # Since browser and browser_ui actually depend on each other,
+      # we must omit the dependency from browser_ui to browser.
+      # However, this means browser_ui and browser should more or less
+      # have the same dependencies. Once browser_ui is untangled from
+      # browser, then we can clean up these dependencies.
+      'dependencies': [
+        # NOTE: New dependencies should generally be added in the OS!="ios"
+        # dependencies block below, rather than here.
+        'cert_logger_proto',
+        'chrome_browser_ui_views.gyp:browser_ui_views',
+        'chrome_resources.gyp:chrome_extra_resources',
+        'chrome_resources.gyp:chrome_resources',
+        'chrome_resources.gyp:chrome_strings',
+        'chrome_resources.gyp:platform_locale_settings',
+        'chrome_resources.gyp:theme_resources',
+        'common',
+        'common_net',
+        'in_memory_url_index_cache_proto',
+        '../components/components.gyp:auto_login_parser',
+        '../components/components.gyp:dom_distiller_core',
+        '../components/components.gyp:dom_distiller_webui',
+        '../components/components.gyp:feedback_proto',
+        '../components/components.gyp:invalidation',
+        '../components/components.gyp:omaha_query_params',
+        '../components/components.gyp:onc_component',
+        '../components/components.gyp:password_manager_core_browser',
+        '../components/components_resources.gyp:components_resources',
+        '../components/components_strings.gyp:components_strings',
+        '../content/content.gyp:content_browser',
+        '../content/content.gyp:content_common',
+        '../crypto/crypto.gyp:crypto',
+        '../skia/skia.gyp:skia',
+        '../sync/sync.gyp:sync',
+        '../third_party/cacheinvalidation/cacheinvalidation.gyp:cacheinvalidation',
+        '../third_party/cacheinvalidation/cacheinvalidation.gyp:cacheinvalidation_proto_cpp',
+        '../third_party/icu/icu.gyp:icui18n',
+        '../third_party/icu/icu.gyp:icuuc',
+        '../third_party/libusb/libusb.gyp:libusb',
+        '../third_party/libxml/libxml.gyp:libxml',
+        '../third_party/zlib/zlib.gyp:zlib',
+        '../ui/accessibility/accessibility.gyp:accessibility',
+        '../ui/base/ui_base.gyp:ui_base',
+        '../ui/events/events.gyp:events',
+        '../ui/gfx/gfx.gyp:gfx',
+        '../ui/gfx/gfx.gyp:gfx_geometry',
+        '../ui/message_center/message_center.gyp:message_center',
+        '../ui/native_theme/native_theme.gyp:native_theme',
+        '../ui/resources/ui_resources.gyp:ui_resources',
+        '../ui/snapshot/snapshot.gyp:snapshot',
+        '../ui/strings/ui_strings.gyp:ui_strings',
+      ],
+      'include_dirs': [
+        '..',
+        '<(INTERMEDIATE_DIR)',
+        # Needed by pepper_flash_component_installer.cc.
+        '<(SHARED_INTERMEDIATE_DIR)',
+      ],
+      'export_dependent_settings': [
+        '../components/components.gyp:dom_distiller_core',
+        '../sync/sync.gyp:sync',
+      ],
+      'conditions': [
+        ['OS != "ios"', {
+          'sources': [
+            '<@(chrome_browser_ui_non_ios_sources)',
+            '<(SHARED_INTERMEDIATE_DIR)/chrome/browser/ui/webui/omnibox/omnibox.mojom.cc',
+          ],
+          'dependencies': [
+            'chrome_web_ui_mojo_bindings.gyp:web_ui_mojo_bindings',
+            'debugger',
+            'installer_util',
+            '../components/components.gyp:autofill_content_risk_proto',
+            '../components/components.gyp:translate_content_common',
+            '../content/app/resources/content_resources.gyp:content_resources',
+            '../media/media.gyp:media',
+            '../mojo/mojo_base.gyp:mojo_system_impl',
+            '../net/net.gyp:net_with_v8',
+            '../storage/storage_browser.gyp:storage',
+            '../storage/storage_common.gyp:storage_common',
+            '../third_party/expat/expat.gyp:expat',
+            '../third_party/leveldatabase/leveldatabase.gyp:leveldatabase',
+            '../third_party/libjingle/libjingle.gyp:libjingle',
+            '../third_party/npapi/npapi.gyp:npapi',
+            '../third_party/re2/re2.gyp:re2',
+            '../ui/compositor/compositor.gyp:compositor',
+            '../ui/surface/surface.gyp:surface',
+            '../ui/web_dialogs/web_dialogs.gyp:web_dialogs',
+            '../v8/tools/gyp/v8.gyp:v8',
+          ],
+          'defines': [
+            '<@(nacl_defines)',
+          ],
+          'direct_dependent_settings': {
+            'defines': [
+              '<@(nacl_defines)',
+            ],
+          },
+        }, {  # OS == "ios"
+          'sources': [ '<@(chrome_browser_ui_ios_sources)' ],
+          'dependencies': [
+            '../net/net.gyp:net',
+          ],
+        }],
+        ['enable_printing!=0', {
+          'dependencies': [
+            '../printing/printing.gyp:printing',
+          ],
+        }],
+        ['enable_one_click_signin==1', {
+          'sources': [ '<@(chrome_browser_ui_one_click_signin_sources)' ]
+        }],
+        ['enable_task_manager==1', {
+          'sources': [ '<@(chrome_browser_ui_task_manager_sources)' ],
+        }],
+        ['disable_nacl==0', {
+          'sources': [ '<@(chrome_browser_ui_nacl_sources)' ],
+          'dependencies': [
+            '../native_client/src/trusted/service_runtime/service_runtime.gyp:sel',
+          ],
+        }],
+        ['debug_devtools==1', {
+          'defines': [
+            'DEBUG_DEVTOOLS=1',
+          ],
+        }],
+        ['configuration_policy==1', {
+          'sources': [ '<@(chrome_browser_ui_policy_sources)' ],
+          'dependencies': [
+            '../components/components.gyp:policy',
+          ],
+        }],
+        ['enable_plugins==1', {
+          'sources': [ '<@(chrome_browser_ui_plugin_sources)' ],
+          'dependencies': [
+            '../ppapi/ppapi_internal.gyp:ppapi_ipc',
+            '../third_party/adobe/flash/flash_player.gyp:flapper_version_h',
+          ],
+        }],
+        ['safe_browsing==1', {
+          'defines': [
+            'FULL_SAFE_BROWSING',
+          ],
+          'dependencies': [
+            'safe_browsing_chunk_proto',
+            'safe_browsing_proto',
+            'safe_browsing_report_proto',
+          ],
+        }],
+        ['chromeos==1', {
+          'sources': [ '<@(chrome_browser_ui_chromeos_sources)' ],
+          'dependencies': [
+            'browser_chromeos',
+            '../device/nfc/nfc.gyp:device_nfc',
+            '../ui/chromeos/ui_chromeos.gyp:ui_chromeos',
+            '../ui/chromeos/ui_chromeos.gyp:ui_chromeos_resources',
+          ],
+        }, {
+          'sources': [ '<@(chrome_browser_ui_non_chromeos_sources)' ],
+        }],
+        ['use_cups==1', {
+          'dependencies': [
+            '../printing/printing.gyp:cups',
+          ],
+        }],
+        ['use_ash==1', {
+          'sources': [ '<@(chrome_browser_ui_ash_sources)' ],
+          'dependencies': [
+            '../ash/ash.gyp:ash',
+            '../ash/ash.gyp:ash_with_content',
+            '../ash/ash_strings.gyp:ash_strings',
+            '../components/components.gyp:user_manager',
+          ],
+          'conditions': [
+            ['chromeos == 0', {
+              'sources': [ '<@(chrome_browser_ui_ash_non_chromeos)' ],
+            }],
+          ],
+        }, { # use_ash==0
+          'sources': [ '<@(chrome_browser_ui_non_ash_sources)' ],
+        }],
+        ['use_athena==1', {
+          'defines': ['USE_ATHENA=1'],
+          'sources': [ '<@(chrome_browser_ui_athena_sources)' ],
+          'dependencies': [
+            '<(DEPTH)/athena/athena.gyp:athena_lib',
+            '<(DEPTH)/athena/athena.gyp:athena_chrome_lib',
+            '<(DEPTH)/athena/athena.gyp:athena_content_lib',
+            '<(DEPTH)/athena/main/athena_main.gyp:athena_main_lib',
+          ],
+        }],
+        ['toolkit_views==1', {
+          'sources': [ '<@(chrome_browser_ui_views_sources)' ],
+          'conditions': [
+            ['chromeos == 0 and OS!="mac"', {
+              'sources': [ '<@(chrome_browser_ui_views_non_chromeos_sources)' ],
+            }],
+            ['use_ash == 1', {
+              'sources': [ '<@(chrome_browser_ui_ash_views_sources)' ],
+            }],
+            ['OS!="mac"', {
+              'sources': [ '<@(chrome_browser_ui_views_non_mac_sources)' ],
+            }],
+          ],
+        }],
+        ['use_aura==1 and chromeos==0 and use_ozone==0 and OS=="linux"', {
+          'cflags': [ '<!@(pkg-config --cflags glib-2.0)', ],
+          'dependencies': [
+            # gtk2 is the only component that can interact with gtk2 in our new
+            # world.
+            'browser/ui/libgtk2ui/libgtk2ui.gyp:gtk2ui',
+            '../build/linux/system.gyp:gio',
+          ],
+        }],
+        ['OS=="win" or OS=="mac" or desktop_linux==1', {
+          'sources': [ '<@(chrome_browser_ui_desktop_sources)' ],
+        }],
+        ['use_aura==1', {
+          'sources': [ '<@(chrome_browser_ui_aura_sources)'] ,
+          'dependencies': [
+            # aura uses some of ash resources.
+            '../ash/ash_resources.gyp:ash_resources',
+            '../ui/aura/aura.gyp:aura',
+            '../ui/keyboard/keyboard.gyp:keyboard',
+            '../ui/keyboard/keyboard.gyp:keyboard_resources',
+            '../ui/wm/wm.gyp:wm',
+          ],
+          'conditions': [
+            ['chromeos == 0', {
+              'sources': [ '<@(chrome_browser_ui_aura_non_chromeos)' ],
+            }],
+          ],
+        }, { # else: use_aura==0
+          'sources': [ '<@(chrome_browser_ui_non_aura_sources)' ],
+        }],
+        ['ui_compositor_image_transport==1', {
+          'dependencies': [
+            '../ui/gl/gl.gyp:gl',
+          ],
+        }],
+        ['use_nss==1', {
+          'sources': [ '<@(chrome_browser_ui_nss_sources)' ],
+        }],
+        ['enable_themes==0', {
+          'sources!': [
+            'browser/ui/webui/theme_source.cc',
+          ],
+        }],
+        ['enable_printing==1', {
+          'sources': [ '<@(chrome_browser_ui_print_preview_sources)' ],
+        }],
+        ['OS=="linux" or OS=="android"', {
+          'sources': [ '<@(chrome_browser_ui_android_linux_sources)' ],
+        }],
+        ['OS=="android"', {
+          'dependencies': [
+            '../components/components.gyp:web_contents_delegate_android',
+            '../third_party/boringssl/boringssl.gyp:boringssl',
+            'chrome_browser_jni_headers',
+          ],
+          'dependencies!': [
+             '../components/components.gyp:feedback_proto',
+             '../third_party/libusb/libusb.gyp:libusb',
+             '../ui/events/events.gyp:events',
+             'chrome_browser_ui_views.gyp:browser_ui_views',
+          ],
+          'sources': [ '<@(chrome_browser_ui_android_sources)' ],
+        }, {  # Non-Android
+          'sources': [ '<@(chrome_browser_ui_non_android_sources)' ],
+        }],
+        ['OS=="mac"', {
+          'sources': [ '<@(chrome_browser_ui_mac_sources)' ],
+          'sources!': [
+            # Mac has its own way of drawing tabs.
+            'browser/ui/tabs/tab_resources.cc',
+            'browser/ui/tabs/tab_resources.h',
+            'browser/ui/views/extensions/extension_view_views.cc',
+            'browser/ui/views/extensions/extension_view_views.h',
+            # Task manager has its own sources list. Leave out the views one.
+            'browser/ui/views/task_manager_view.cc',
+          ],
+          'dependencies': [
+            '../third_party/apple_sample_code/apple_sample_code.gyp:apple_sample_code',
+            '../third_party/google_toolbox_for_mac/google_toolbox_for_mac.gyp:google_toolbox_for_mac',
+            '../third_party/molokocacao/molokocacao.gyp:molokocacao',
+            '../third_party/mozilla/mozilla.gyp:mozilla',
+          ],
+          'link_settings': {
+            'libraries': [
+              '$(SDKROOT)/System/Library/Frameworks/Quartz.framework',
+            ],
+          },
+          'actions': [
+            {
+              # This action is used to extract the localization data from xib
+              # files and generate table for the ui localizer from it.
+              'variables': {
+                'xib_localizer_tool_path':
+                    'tools/build/mac/generate_localizer',
+              },
+              'includes': [
+                'chrome_nibs.gypi',
+              ],
+              'action_name': 'Process xibs for localization',
+              'inputs': [
+                '<(xib_localizer_tool_path)',
+                '<@(mac_translated_xibs)',
+              ],
+              'outputs': [
+                '<(INTERMEDIATE_DIR)/ui_localizer_table.h',
+              ],
+              'action': ['<(xib_localizer_tool_path)',
+                          '<@(_outputs)',
+                          '<@(mac_translated_xibs)'],
+            },
+          ],
+        }, {  # non-Mac.
+          'sources': [ '<@(chrome_browser_ui_non_mac_sources)' ],
+          'sources/': [
+            ['exclude', '^browser/ui/cocoa/'],
+          ],
+        }],
+        ['OS=="win"', {
+          'include_dirs': [
+            '<(DEPTH)/third_party/wtl/include',
+          ],
+          'dependencies': [
+            'installer_util_strings',
+            'metro_utils',
+            '../google_update/google_update.gyp:google_update',
+            '../third_party/iaccessible2/iaccessible2.gyp:iaccessible2',
+            '../third_party/isimpledom/isimpledom.gyp:isimpledom',
+            '../ui/app_list/app_list.gyp:app_list',
+            '../ui/views/controls/webview/webview.gyp:webview',
+            '../ui/views/views.gyp:views',
+          ],
+          'export_dependent_settings': [
+            '../ui/views/controls/webview/webview.gyp:webview',
+            '../ui/views/views.gyp:views',
+          ],
+          'sources': [ '<@(chrome_browser_ui_win_sources)' ],
+          'conditions': [
+            ['win_use_allocator_shim==1', {
+              'dependencies': [
+                '<(allocator_target)',
+              ],
+            }],
+          ],
+        }, {  # 'OS!="win"
+          'conditions': [
+            ['toolkit_views==1', {
+              'dependencies': [
+                '../ui/views/controls/webview/webview.gyp:webview',
+                '../ui/views/views.gyp:views',
+              ],
+              'include_dirs': [
+                '<(INTERMEDIATE_DIR)',
+                '<(INTERMEDIATE_DIR)/chrome',
+              ],
+            }, { # else: toolkit_views==0
+              'sources/': [
+                # Exclude all of views.
+                ['exclude', '^browser/ui/views/'],
+              ]
+            }],
+          ],
+        }],
+        ['desktop_linux==1', {
+          'sources': [ '<@(chrome_browser_ui_desktop_linux_sources)' ],
+        }],
+        ['OS=="linux"', {  # Both desktop Linux and ChromeOS.
+          'sources': [ '<@(chrome_browser_ui_linux_sources)' ],
+          'conditions': [
+            ['use_aura==1', {
+              'dependencies': [
+                '../build/linux/system.gyp:dbus',
+                '../build/linux/system.gyp:fontconfig',
+                '../dbus/dbus.gyp:dbus',
+              ],
+            }],
+            # x11 build
+            ['use_x11==1', {
+              'sources': [ '<@(chrome_browser_ui_x11_sources)' ],
+              'dependencies': [
+                '../build/linux/system.gyp:x11',
+                '../build/linux/system.gyp:gio',
+              ],
+            }],
+            ['use_udev==1', {
+              'dependencies': [
+                '../build/linux/system.gyp:udev',
+              ],
+            }],
+          ],
+        }],
+        ['enable_app_list==1', {
+          'sources': [ '<@(chrome_browser_ui_app_list_sources)' ],
+          'dependencies': [
+            '../ui/app_list/app_list.gyp:app_list',
+          ],
+        }, {
+          'sources': [ '<@(chrome_browser_ui_non_app_list_sources)' ],
+        }],
+        ['enable_autofill_dialog==1', {
+          'sources': [ '<@(chrome_browser_ui_autofill_dialog_sources)' ],
+          'conditions': [
+            ['OS!="android" and OS!="ios"', {
+              'sources': [
+                '<@(chrome_browser_ui_autofill_dialog_non_mobile_sources)',
+              ],
+              'dependencies': [
+                '../third_party/libaddressinput/libaddressinput.gyp:libaddressinput',
+                '../third_party/libaddressinput/libaddressinput.gyp:libaddressinput_strings',
+              ],
+            }],
+          ],
+        }],
+        ['enable_extensions==1', {
+          'dependencies': [
+            'browser_extensions',
+            'browser/extensions/api/api_registration.gyp:chrome_api_registration',
+            'common/extensions/api/api.gyp:chrome_api',
+          ],
+          'sources': [ '<@(chrome_browser_ui_extensions_sources)' ],
+        }],
+        ['enable_google_now==1 and OS!="android"', {
+          'sources': [ '<@(chrome_browser_ui_google_now_non_android_sources)' ],
+        }],
+        ['enable_webrtc==1', {
+          'sources': [ '<@(chrome_browser_ui_webrtc_sources)' ],
+        }],
+        ['enable_service_discovery==1', {
+          'sources': [ '<@(chrome_browser_ui_service_discovery_sources)' ],
+        }],
+        ['enable_spellcheck==1', {
+          'dependencies': [
+            '../third_party/hunspell/hunspell.gyp:hunspell',
+          ],
+        }],
+        # Temporary fix to break the browser_ui target into smaller chunks so it
+        # will link with SyzyASan builds.
+        ['OS=="win" and syzyasan==1', {
+          'msvs_shard': 4,
+        }],
+        ['OS!="android" and OS!="ios"', {
+          'dependencies': [
+            '../device/bluetooth/bluetooth.gyp:device_bluetooth',
+          ],
+        }],
+      ],
+    },
+  ],
+}
--- a/chrome/common/url_constants.cc
+++ b/chrome/common/url_constants.cc
@@ -49,6 +49,7 @@ const char kChromeUIExtensionsFrameURL[]
 const char kChromeUIExtensionsURL[] = "chrome://extensions/";
 const char kChromeUIFaviconURL[] = "chrome://favicon/";
 const char kChromeUIFeedbackURL[] = "chrome://feedback/";
+const char kChromeUIFilePickerURL[] = "chrome://file-picker/";
 const char kChromeUIFlagsURL[] = "chrome://flags/";
 const char kChromeUIFlashURL[] = "chrome://flash/";
 const char kChromeUIGCMInternalsURL[] = "chrome://gcm-internals/";
@@ -186,6 +187,7 @@ const char kChromeUIExtensionsFrameHost[
 const char kChromeUIExtensionsHost[] = "extensions";
 const char kChromeUIFaviconHost[] = "favicon";
 const char kChromeUIFeedbackHost[] = "feedback";
+const char kChromeUIFilePickerHost[] = "file-picker";
 const char kChromeUIFlagsHost[] = "flags";
 const char kChromeUIFlashHost[] = "flash";
 const char kChromeUIGCMInternalsHost[] = "gcm-internals";
@@ -572,6 +574,7 @@ const char* const kChromeHostURLs[] = {
   kChromeUICrashesHost,
   kChromeUICreditsHost,
   kChromeUIDNSHost,
+  kChromeUIFilePickerHost,
   kChromeUIFlagsHost,
   kChromeUIHistoryHost,
   kChromeUIInvalidationsHost,
--- /dev/null
+++ b/chrome/common/url_constants.cc.orig
@@ -0,0 +1,726 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/common/url_constants.h"
+
+#include <algorithm>
+
+#include "base/basictypes.h"
+#include "content/public/common/url_constants.h"
+#include "url/url_util.h"
+
+namespace chrome {
+
+#if defined(OS_CHROMEOS)
+const char kCrosScheme[] = "cros";
+const char kExternalFileScheme[] = "externalfile";
+#endif
+
+// Add Chrome UI URLs as necessary, in alphabetical order.
+// Be sure to add the corresponding kChromeUI*Host constant below.
+// This is a WebUI page that lists other WebUI pages.
+const char kChromeUIAboutURL[] = "chrome://about/";
+const char kChromeUIAppsURL[] = "chrome://apps/";
+const char kChromeUIAppListStartPageURL[] = "chrome://app-list/";
+const char kChromeUIBookmarksURL[] = "chrome://bookmarks/";
+const char kChromeUICertificateViewerURL[] = "chrome://view-cert/";
+const char kChromeUICertificateViewerDialogURL[] = "chrome://view-cert-dialog/";
+const char kChromeUIChromeSigninURL[] = "chrome://chrome-signin/";
+const char kChromeUIChromeURLsURL[] = "chrome://chrome-urls/";
+const char kChromeUICloudPrintResourcesURL[] = "chrome://cloudprintresources/";
+const char kChromeUIComponentsURL[] = "chrome://components/";
+const char kChromeUIConflictsURL[] = "chrome://conflicts/";
+const char kChromeUIConstrainedHTMLTestURL[] = "chrome://constrained-test/";
+const char kChromeUIContextualSearchPromoURL[] =
+    "chrome://contextual-search-promo";
+const char kChromeUICrashesURL[] = "chrome://crashes/";
+const char kChromeUICreditsURL[] = "chrome://credits/";
+const char kChromeUIDevicesURL[] = "chrome://devices/";
+const char kChromeUIDevToolsURL[] =
+    "chrome-devtools://devtools/bundled/devtools.html";
+const char kChromeUIDomainReliabilityInternalsURL[] =
+    "chrome://domain-reliability-internals/";
+const char kChromeUIDownloadsURL[] = "chrome://downloads/";
+const char kChromeUIEditSearchEngineDialogURL[] = "chrome://editsearchengine/";
+const char kChromeUIExtensionIconURL[] = "chrome://extension-icon/";
+const char kChromeUIExtensionInfoURL[] = "chrome://extension-info/";
+const char kChromeUIExtensionsFrameURL[] = "chrome://extensions-frame/";
+const char kChromeUIExtensionsURL[] = "chrome://extensions/";
+const char kChromeUIFaviconURL[] = "chrome://favicon/";
+const char kChromeUIFeedbackURL[] = "chrome://feedback/";
+const char kChromeUIFlagsURL[] = "chrome://flags/";
+const char kChromeUIFlashURL[] = "chrome://flash/";
+const char kChromeUIGCMInternalsURL[] = "chrome://gcm-internals/";
+const char kChromeUIHelpFrameURL[] = "chrome://help-frame/";
+const char kChromeUIHistoryURL[] = "chrome://history/";
+const char kChromeUIHistoryFrameURL[] = "chrome://history-frame/";
+const char kChromeUIIdentityInternalsURL[] = "chrome://identity-internals/";
+const char kChromeUIInspectURL[] = "chrome://inspect/";
+const char kChromeUIInstantURL[] = "chrome://instant/";
+const char kChromeUIInterstitialURL[] = "chrome://interstitials/";
+const char kChromeUIInvalidationsURL[] = "chrome://invalidations/";
+const char kChromeUIIPCURL[] = "chrome://ipc/";
+const char kChromeUIMemoryRedirectURL[] = "chrome://memory-redirect/";
+const char kChromeUIMemoryURL[] = "chrome://memory/";
+const char kChromeUIMetroFlowURL[] = "chrome://make-metro/";
+const char kChromeUINaClURL[] = "chrome://nacl/";
+const char kChromeUINetInternalsURL[] = "chrome://net-internals/";
+const char kChromeUINewProfile[] = "chrome://newprofile/";
+const char kChromeUINewTabURL[] = "chrome://newtab/";
+const char kChromeUIOmniboxURL[] = "chrome://omnibox/";
+const char kChromeUIPluginsURL[] = "chrome://plugins/";
+const char kChromeUIPolicyURL[] = "chrome://policy/";
+const char kChromeUIProfileSigninConfirmationURL[] =
+    "chrome://profile-signin-confirmation/";
+const char kChromeUIUserManagerURL[] = "chrome://user-manager/";
+const char kChromeUIPrintURL[] = "chrome://print/";
+const char kChromeUIQuitURL[] = "chrome://quit/";
+const char kChromeUIRestartURL[] = "chrome://restart/";
+const char kChromeUISettingsURL[] = "chrome://settings/";
+const char kChromeUISettingsFrameURL[] = "chrome://settings-frame/";
+const char kChromeUISSLClientCertificateSelectorURL[] = "chrome://select-cert/";
+const char kChromeUISuggestions[] = "chrome://suggestions/";
+const char kChromeUISuggestionsInternalsURL[] =
+    "chrome://suggestions-internals/";
+const char kChromeUISupervisedUserPassphrasePageURL[] =
+    "chrome://managed-user-passphrase/";
+const char kChromeUITermsURL[] = "chrome://terms/";
+const char kChromeUIThemeURL[] = "chrome://theme/";
+const char kChromeUIThumbnailURL[] = "chrome://thumb/";
+const char kChromeUIThumbnailListURL[] = "chrome://thumbnails/";
+const char kChromeUIUberURL[] = "chrome://chrome/";
+const char kChromeUIUberFrameURL[] = "chrome://uber-frame/";
+const char kChromeUIUserActionsURL[] = "chrome://user-actions/";
+const char kChromeUIVersionURL[] = "chrome://version/";
+const char kChromeUIVoiceSearchURL[] = "chrome://voicesearch/";
+
+#if defined(OS_ANDROID)
+const char kChromeUINativeNewTabURL[] = "chrome-native://newtab/";
+const char kChromeUINativeBookmarksURL[] = "chrome-native://bookmarks/";
+const char kChromeUINativeRecentTabsURL[] = "chrome-native://recent-tabs/";
+const char kChromeUIWelcomeURL[] = "chrome://welcome/";
+#endif
+
+#if defined(OS_CHROMEOS)
+const char kChromeUIActivationMessage[] = "chrome://activationmessage/";
+const char kChromeUIBluetoothPairingURL[] = "chrome://bluetooth-pairing/";
+const char kChromeUICertificateManagerDialogURL[] =
+    "chrome://certificate-manager/";
+const char kChromeUIChargerReplacementURL[] = "chrome://charger-replacement/";
+const char kChromeUIChooseMobileNetworkURL[] =
+    "chrome://choose-mobile-network/";
+const char kChromeUIDiscardsURL[] = "chrome://discards/";
+const char kChromeUIFirstRunURL[] = "chrome://first-run/";
+const char kChromeUIIdleLogoutDialogURL[] = "chrome://idle-logout/";
+const char kChromeUIImageBurnerURL[] = "chrome://imageburner/";
+const char kChromeUIKeyboardOverlayURL[] = "chrome://keyboardoverlay/";
+const char kChromeUILockScreenURL[] = "chrome://lock/";
+const char kChromeUIMediaplayerURL[] = "chrome://mediaplayer/";
+const char kChromeUIMobileSetupURL[] = "chrome://mobilesetup/";
+const char kChromeUINfcDebugURL[] = "chrome://nfc-debug/";
+const char kChromeUIOobeURL[] = "chrome://oobe/";
+const char kChromeUIOSCreditsURL[] = "chrome://os-credits/";
+const char kChromeUIProxySettingsURL[] = "chrome://proxy-settings/";
+const char kChromeUIScreenlockIconURL[] = "chrome://screenlock-icon/";
+const char kChromeUISetTimeURL[] = "chrome://set-time/";
+const char kChromeUISimUnlockURL[] = "chrome://sim-unlock/";
+const char kChromeUISlideshowURL[] = "chrome://slideshow/";
+const char kChromeUISlowURL[] = "chrome://slow/";
+const char kChromeUISystemInfoURL[] = "chrome://system/";
+const char kChromeUITermsOemURL[] = "chrome://terms/oem";
+const char kChromeUIUserImageURL[] = "chrome://userimage/";
+#endif
+
+#if defined(USE_AURA)
+const char kChromeUIGestureConfigURL[] = "chrome://gesture/";
+const char kChromeUIGestureConfigHost[] = "gesture";
+const char kChromeUISalsaURL[] = "chrome://salsa/";
+const char kChromeUISalsaHost[] = "salsa";
+#endif
+
+#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
+const char kChromeUITabModalConfirmDialogURL[] =
+    "chrome://tab-modal-confirm-dialog/";
+#endif
+
+#if defined(ENABLE_WEBRTC)
+const char kChromeUIWebRtcLogsURL[] = "chrome://webrtc-logs/";
+#endif
+
+// Add Chrome UI hosts here, in alphabetical order.
+// Add hosts to kChromePaths in browser_about_handler.cc to be listed by
+// chrome://chrome-urls (about:about) and the built-in AutocompleteProvider.
+const char kChromeUIAboutHost[] = "about";
+const char kChromeUIBlankHost[] = "blank";
+const char kChromeUIAppLauncherPageHost[] = "apps";
+const char kChromeUIAppListStartPageHost[] = "app-list";
+const char kChromeUIBookmarksHost[] = "bookmarks";
+const char kChromeUICacheHost[] = "cache";
+const char kChromeUICertificateViewerHost[] = "view-cert";
+const char kChromeUICertificateViewerDialogHost[] = "view-cert-dialog";
+const char kChromeUIChromeSigninHost[] = "chrome-signin";
+const char kChromeUIChromeURLsHost[] = "chrome-urls";
+const char kChromeUICloudPrintResourcesHost[] = "cloudprintresources";
+const char kChromeUICloudPrintSetupHost[] = "cloudprintsetup";
+const char kChromeUIConflictsHost[] = "conflicts";
+const char kChromeUIConstrainedHTMLTestHost[] = "constrained-test";
+const char kChromeUIContextualSearchPromoHost[] = "contextual-search-promo";
+const char kChromeUICrashesHost[] = "crashes";
+const char kChromeUICrashHost[] = "crash";
+const char kChromeUICreditsHost[] = "credits";
+const char kChromeUIDefaultHost[] = "version";
+const char kChromeUIDevicesHost[] = "devices";
+const char kChromeUIDevToolsHost[] = "devtools";
+const char kChromeUIDevToolsBundledPath[] = "bundled";
+const char kChromeUIDevToolsRemotePath[] = "remote";
+const char kChromeUIDNSHost[] = "dns";
+const char kChromeUIDomainReliabilityInternalsHost[] =
+    "domain-reliability-internals";
+const char kChromeUIDownloadsHost[] = "downloads";
+const char kChromeUIDriveInternalsHost[] = "drive-internals";
+const char kChromeUIEditSearchEngineDialogHost[] = "editsearchengine";
+const char kChromeUIExtensionIconHost[] = "extension-icon";
+const char kChromeUIExtensionInfoHost[] = "extension-info";
+const char kChromeUIExtensionsFrameHost[] = "extensions-frame";
+const char kChromeUIExtensionsHost[] = "extensions";
+const char kChromeUIFaviconHost[] = "favicon";
+const char kChromeUIFeedbackHost[] = "feedback";
+const char kChromeUIFlagsHost[] = "flags";
+const char kChromeUIFlashHost[] = "flash";
+const char kChromeUIGCMInternalsHost[] = "gcm-internals";
+const char kChromeUIHangHost[] = "hang";
+const char kChromeUIHelpFrameHost[] = "help-frame";
+const char kChromeUIHelpHost[] = "help";
+const char kChromeUIHistoryHost[] = "history";
+const char kChromeUIHistoryFrameHost[] = "history-frame";
+const char kChromeUIIdentityInternalsHost[] = "identity-internals";
+const char kChromeUIInspectHost[] = "inspect";
+const char kChromeUIInstantHost[] = "instant";
+const char kChromeUIInterstitialHost[] = "interstitials";
+const char kChromeUIInvalidationsHost[] = "invalidations";
+const char kChromeUIIPCHost[] = "ipc";
+const char kChromeUIKillHost[] = "kill";
+const char kChromeUIMemoryHost[] = "memory";
+const char kChromeUIMemoryInternalsHost[] = "memory-internals";
+const char kChromeUIMemoryRedirectHost[] = "memory-redirect";
+const char kChromeUIMetroFlowHost[] = "make-metro";
+const char kChromeUINaClHost[] = "nacl";
+const char kChromeUINetExportHost[] = "net-export";
+const char kChromeUINetInternalsHost[] = "net-internals";
+const char kChromeUINewTabHost[] = "newtab";
+const char kChromeUIOmniboxHost[] = "omnibox";
+const char kChromeUIPasswordManagerInternalsHost[] =
+    "password-manager-internals";
+const char kChromeUIPluginsHost[] = "plugins";
+const char kChromeUIComponentsHost[] = "components";
+const char kChromeUIPolicyHost[] = "policy";
+const char kChromeUIProfileSigninConfirmationHost[] =
+    "profile-signin-confirmation";
+const char kChromeUIUserManagerHost[] = "user-manager";
+const char kChromeUIPredictorsHost[] = "predictors";
+const char kChromeUIProfilerHost[] = "profiler";
+const char kChromeUIQuotaInternalsHost[] = "quota-internals";
+const char kChromeUIQuitHost[] = "quit";
+const char kChromeUIRestartHost[] = "restart";
+const char kChromeUISettingsHost[] = "settings";
+const char kChromeUISettingsFrameHost[] = "settings-frame";
+const char kChromeUIShorthangHost[] = "shorthang";
+const char kChromeUISignInInternalsHost[] = "signin-internals";
+const char kChromeUISSLClientCertificateSelectorHost[] = "select-cert";
+const char kChromeUIStatsHost[] = "stats";
+const char kChromeUISuggestionsHost[] = "suggestions";
+const char kChromeUISuggestionsInternalsHost[] = "suggestions-internals";
+const char kChromeUISupervisedUserPassphrasePageHost[] =
+    "managed-user-passphrase";
+const char kChromeUISyncHost[] = "sync";
+const char kChromeUISyncFileSystemInternalsHost[] = "syncfs-internals";
+const char kChromeUISyncInternalsHost[] = "sync-internals";
+const char kChromeUISyncResourcesHost[] = "syncresources";
+const char kChromeUISystemInfoHost[] = "system";
+const char kChromeUITaskManagerHost[] = "tasks";
+const char kChromeUITermsHost[] = "terms";
+const char kChromeUIThemeHost[] = "theme";
+const char kChromeUIThumbnailHost[] = "thumb";
+const char kChromeUIThumbnailHost2[] = "thumb2";
+const char kChromeUIThumbnailListHost[] = "thumbnails";
+const char kChromeUITouchIconHost[] = "touch-icon";
+const char kChromeUITranslateInternalsHost[] = "translate-internals";
+const char kChromeUIUberFrameHost[] = "uber-frame";
+const char kChromeUIUberHost[] = "chrome";
+const char kChromeUIUserActionsHost[] = "user-actions";
+const char kChromeUIVersionHost[] = "version";
+const char kChromeUIVoiceSearchHost[] = "voicesearch";
+const char kChromeUIWorkersHost[] = "workers";
+
+const char kChromeUIScreenshotPath[] = "screenshots";
+const char kChromeUIThemePath[] = "theme";
+
+#if defined(ENABLE_FULL_PRINTING)
+const char kChromeUIPrintHost[] = "print";
+#endif  // ENABLE_FULL_PRINTING
+
+#if defined(OS_ANDROID)
+const char kChromeUIWelcomeHost[] = "welcome";
+#endif
+
+#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
+const char kChromeUILinuxProxyConfigHost[] = "linux-proxy-config";
+const char kChromeUISandboxHost[] = "sandbox";
+#endif
+
+#if defined(OS_CHROMEOS)
+const char kChromeUIActivationMessageHost[] = "activationmessage";
+const char kChromeUIAppLaunchHost[] = "app-launch";
+const char kChromeUIBluetoothPairingHost[] = "bluetooth-pairing";
+const char kChromeUICertificateManagerHost[] = "certificate-manager";
+const char kChromeUIChargerReplacementHost[] = "charger-replacement";
+const char kChromeUIChooseMobileNetworkHost[] = "choose-mobile-network";
+const char kChromeUICryptohomeHost[] = "cryptohome";
+const char kChromeUIDiscardsHost[] = "discards";
+const char kChromeUIFirstRunHost[] = "first-run";
+const char kChromeUIIdleLogoutDialogHost[] = "idle-logout";
+const char kChromeUIImageBurnerHost[] = "imageburner";
+const char kChromeUIKeyboardOverlayHost[] = "keyboardoverlay";
+const char kChromeUILockScreenHost[] = "lock";
+const char kChromeUILoginContainerHost[] = "login-container";
+const char kChromeUILoginHost[] = "login";
+const char kChromeUIMediaplayerHost[] = "mediaplayer";
+const char kChromeUIMobileSetupHost[] = "mobilesetup";
+const char kChromeUINfcDebugHost[] = "nfc-debug";
+const char kChromeUINetworkHost[] = "network";
+const char kChromeUIOobeHost[] = "oobe";
+const char kChromeUIOSCreditsHost[] = "os-credits";
+const char kChromeUIPowerHost[] = "power";
+const char kChromeUIProvidedFileSystemsHost[] = "provided-file-systems";
+const char kChromeUIProxySettingsHost[] = "proxy-settings";
+const char kChromeUIRotateHost[] = "rotate";
+const char kChromeUIScreenlockIconHost[] = "screenlock-icon";
+const char kChromeUISetTimeHost[] = "set-time";
+const char kChromeUISimUnlockHost[] = "sim-unlock";
+const char kChromeUISlideshowHost[] = "slideshow";
+const char kChromeUISlowHost[] = "slow";
+const char kChromeUISlowTraceHost[] = "slow_trace";
+const char kChromeUIUserImageHost[] = "userimage";
+
+const char kChromeUIMenu[] = "menu";
+const char kChromeUINetworkMenu[] = "network-menu";
+const char kChromeUIWrenchMenu[] = "wrench-menu";
+
+const char kEULAPathFormat[] = "/usr/share/chromeos-assets/eula/%s/eula.html";
+const char kOemEulaURLPath[] = "oem";
+const char kOnlineEulaURLPath[] =
+    "https://www.google.com/intl/%s/chrome/eula_text.html";
+#endif
+
+#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
+const char kChromeUITabModalConfirmDialogHost[] = "tab-modal-confirm-dialog";
+#endif
+
+#if defined(ENABLE_WEBRTC)
+const char kChromeUIWebRtcLogsHost[] = "webrtc-logs";
+#endif
+
+// Option sub pages.
+// Add sub page paths to kChromeSettingsSubPages in builtin_provider.cc to be
+// listed by the built-in AutocompleteProvider.
+const char kAutofillSubPage[] = "autofill";
+const char kClearBrowserDataSubPage[] = "clearBrowserData";
+const char kContentSettingsExceptionsSubPage[] = "contentExceptions";
+const char kContentSettingsSubPage[] = "content";
+const char kCreateProfileSubPage[] = "createProfile";
+const char kExtensionsSubPage[] = "extensions";
+const char kHandlerSettingsSubPage[] = "handlers";
+const char kImportDataSubPage[] = "importData";
+const char kLanguageOptionsSubPage[] = "languages";
+const char kManageProfileSubPage[] = "manageProfile";
+const char kPasswordManagerSubPage[] = "passwords";
+const char kResetProfileSettingsSubPage[] = "resetProfileSettings";
+const char kSearchEnginesSubPage[] = "searchEngines";
+const char kSearchSubPage[] = "search";
+const char kSearchUsersSubPage[] = "search#Users";
+const char kSupervisedUserSettingsSubPage[] = "managedUser";
+const char kSyncSetupSubPage[] = "syncSetup";
+#if defined(OS_CHROMEOS)
+const char kInternetOptionsSubPage[] = "internet";
+const char kBluetoothAddDeviceSubPage[] = "bluetooth";
+const char kChangeProfilePictureSubPage[] = "changePicture";
+#endif
+
+// Extension sub pages.
+const char kExtensionConfigureCommandsSubPage[] = "configureCommands";
+
+const char kExtensionInvalidRequestURL[] = "chrome-extension://invalid/";
+const char kExtensionResourceInvalidRequestURL[] =
+    "chrome-extension-resource://invalid/";
+
+const char kSyncGoogleDashboardURL[] =
+    "https://www.google.com/settings/chrome/sync/";
+
+const char kAutoPasswordGenerationLearnMoreURL[] =
+    "https://support.google.com/chrome/?p=ui_generate_password";
+
+const char kPasswordManagerLearnMoreURL[] =
+#if defined(OS_CHROMEOS)
+    "https://support.google.com/chromeos/?p=settings_password";
+#else
+    "https://support.google.com/chrome/?p=settings_password";
+#endif
+
+const char kPasswordManagerAccountDashboardURL[] =
+    "https://passwords.google.com/settings/passwords";
+
+const char kExtensionControlledSettingLearnMoreURL[] =
+    "https://support.google.com/chrome/?p=ui_settings_api_extension";
+
+const char kChromeHelpViaKeyboardURL[] =
+#if defined(OS_CHROMEOS)
+#if defined(OFFICIAL_BUILD)
+    "chrome-extension://honijodknafkokifofgiaalefdiedpko/main.html";
+#else
+    "https://support.google.com/chromeos/?p=help&ctx=keyboard";
+#endif  // defined(OFFICIAL_BUILD
+#else
+    "https://support.google.com/chrome/?p=help&ctx=keyboard";
+#endif  // defined(OS_CHROMEOS)
+
+const char kChromeHelpViaMenuURL[] =
+#if defined(OS_CHROMEOS)
+#if defined(OFFICIAL_BUILD)
+    "chrome-extension://honijodknafkokifofgiaalefdiedpko/main.html";
+#else
+    "https://support.google.com/chromeos/?p=help&ctx=menu";
+#endif  // defined(OFFICIAL_BUILD
+#else
+    "https://support.google.com/chrome/?p=help&ctx=menu";
+#endif  // defined(OS_CHROMEOS)
+
+const char kChromeHelpViaWebUIURL[] =
+#if defined(OS_CHROMEOS)
+#if defined(OFFICIAL_BUILD)
+    "chrome-extension://honijodknafkokifofgiaalefdiedpko/main.html";
+#else
+    "https://support.google.com/chromeos/?p=help&ctx=settings";
+#endif  // defined(OFFICIAL_BUILD
+#else
+    "https://support.google.com/chrome/?p=help&ctx=settings";
+#endif  // defined(OS_CHROMEOS)
+
+#if defined(OS_CHROMEOS)
+const char kChromeAccessibilityHelpURL[] =
+    "https://support.google.com/chromeos/?p=accessibility_menu";
+const char kChromeAccessibilitySettingsURL[] =
+    "/chromevox/background/options.html";
+#endif  // defined(OS_CHROMEOS)
+
+#if defined(ENABLE_ONE_CLICK_SIGNIN)
+const char kChromeSyncLearnMoreURL[] =
+    "http://support.google.com/chrome/bin/answer.py?answer=165139";
+
+const char kChromeSyncMergeTroubleshootingURL[] =
+    "https://support.google.com/chrome/answer/1181420#merge";
+#endif  // defined(ENABLE_ONE_CLICK_SIGNIN)
+
+const char kChromeEnterpriseSignInLearnMoreURL[] =
+  "http://support.google.com/chromeos/bin/answer.py?hl=en&answer=1331549";
+
+const char kResetProfileSettingsLearnMoreURL[] =
+    "https://support.google.com/chrome/?p=ui_reset_settings";
+
+const char kAutomaticSettingsResetLearnMoreURL[] =
+    "https://support.google.com/chrome/?p=ui_automatic_settings_reset";
+
+const char kSupervisedUserManagementURL[] = "https://www.chrome.com/manage";
+
+const char kSupervisedUserManagementDisplayURL[] = "www.chrome.com/manage";
+
+const char kSettingsSearchHelpURL[] =
+#if defined(OS_CHROMEOS)
+    "https://support.google.com/chromeos/?p=settings_search_help";
+#else
+    "https://support.google.com/chrome/?p=settings_search_help";
+#endif
+
+const char kOmniboxLearnMoreURL[] =
+#if defined(OS_CHROMEOS)
+    "https://support.google.com/chromeos/?p=settings_omnibox";
+#else
+    "https://support.google.com/chrome/?p=settings_omnibox";
+#endif
+
+const char kPageInfoHelpCenterURL[] =
+#if defined(OS_CHROMEOS)
+    "https://support.google.com/chromeos/?p=ui_security_indicator";
+#else
+    "https://support.google.com/chrome/?p=ui_security_indicator";
+#endif
+
+const char kCrashReasonURL[] =
+#if defined(OS_CHROMEOS)
+    "https://support.google.com/chromeos/?p=e_awsnap";
+#else
+    "https://support.google.com/chrome/?p=e_awsnap";
+#endif
+
+const char kKillReasonURL[] =
+#if defined(OS_CHROMEOS)
+    "https://support.google.com/chromeos/?p=e_deadjim";
+#else
+    "https://support.google.com/chrome/?p=e_deadjim";
+#endif
+
+const char kPrivacyLearnMoreURL[] =
+#if defined(OS_CHROMEOS)
+    "https://support.google.com/chromeos/?p=settings_privacy";
+#else
+    "https://support.google.com/chrome/?p=settings_privacy";
+#endif
+
+const char kDoNotTrackLearnMoreURL[] =
+#if defined(OS_CHROMEOS)
+    "https://support.google.com/chromeos/?p=settings_do_not_track";
+#else
+    "https://support.google.com/chrome/?p=settings_do_not_track";
+#endif
+
+#if defined(OS_CHROMEOS)
+const char kAttestationForContentProtectionLearnMoreURL[] =
+    "https://support.google.com/chromebook/?p=verified_access";
+
+const char kEnhancedPlaybackNotificationLearnMoreURL[] =
+    "https://support.google.com/chromebook/?p=enhanced_playback";
+#endif
+
+const char kChromiumProjectURL[] = "http://www.chromium.org/";
+
+const char kLearnMoreReportingURL[] =
+    "https://support.google.com/chrome/?p=ui_usagestat";
+
+const char kOutdatedPluginLearnMoreURL[] =
+    "https://support.google.com/chrome/?p=ib_outdated_plugin";
+
+const char kBlockedPluginLearnMoreURL[] =
+    "https://support.google.com/chrome/?p=ib_blocked_plugin";
+
+const char kHotwordLearnMoreURL[] =
+    "https://support.google.com/chrome/?p=ui_hotword_search";
+
+const char kLearnMoreRegisterProtocolHandlerURL[] =
+    "https://support.google.com/chrome/?p=ib_protocol_handler";
+
+const char kSyncLearnMoreURL[] =
+    "https://support.google.com/chrome/?p=settings_sign_in";
+
+const char kDownloadScanningLearnMoreURL[] =
+    "https://support.google.com/chrome/?p=ib_download_blocked";
+
+const char kDownloadInterruptedLearnMoreURL[] =
+    "https://support.google.com/chrome/?p=ui_download_errors";
+
+const char kSyncEverythingLearnMoreURL[] =
+    "https://support.google.com/chrome/?p=settings_sync_all";
+
+const char kCloudPrintLearnMoreURL[] =
+#if defined(OS_CHROMEOS)
+    "https://support.google.com/chromeos/?p=settings_cloud_print";
+#else
+    "https://support.google.com/chrome/?p=settings_cloud_print";
+#endif
+
+const char kCloudPrintNoDestinationsLearnMoreURL[] =
+    "https://www.google.com/cloudprint/learn/";
+
+const char kAppLauncherHelpURL[] =
+    "https://support.google.com/chrome_webstore/?p=cws_app_launcher";
+
+const char kSyncEncryptionHelpURL[] =
+#if defined(OS_CHROMEOS)
+    "https://support.google.com/chromeos/?p=settings_encryption";
+#else
+    "https://support.google.com/chrome/?p=settings_encryption";
+#endif
+
+const char kSyncErrorsHelpURL[] =
+    "https://support.google.com/chrome/?p=settings_sync_error";
+
+#if defined(OS_CHROMEOS)
+const char kNaturalScrollHelpURL[] =
+    "https://support.google.com/chromeos/?p=simple_scrolling";
+#endif
+
+#if defined(OS_CHROMEOS)
+const char kLearnMoreEnterpriseURL[] =
+    "https://support.google.com/chromeos/bin/answer.py?answer=2535613";
+#endif
+
+const char kRemoveNonCWSExtensionURL[] =
+    "https://support.google.com/chrome/answer/2811969?"
+    "p=ui_remove_non_cws_extensions&rd=1";
+
+const char kNotificationsHelpURL[] =
+    "https://support.google.com/chrome/?p=ui_notifications";
+
+const char kNotificationWelcomeLearnMoreURL[] =
+    "https://support.google.com/chrome/?p=ib_google_now_welcome";
+
+// Add hosts here to be included in chrome://chrome-urls (about:about).
+// These hosts will also be suggested by BuiltinProvider.
+const char* const kChromeHostURLs[] = {
+  kChromeUICacheHost,
+  kChromeUIChromeURLsHost,
+  kChromeUIComponentsHost,
+  kChromeUICrashesHost,
+  kChromeUICreditsHost,
+  kChromeUIDNSHost,
+  kChromeUIFlagsHost,
+  kChromeUIHistoryHost,
+  kChromeUIInvalidationsHost,
+  kChromeUIMemoryHost,
+  kChromeUIMemoryInternalsHost,
+  kChromeUINetInternalsHost,
+  kChromeUINewTabHost,
+  kChromeUIOmniboxHost,
+  kChromeUIPasswordManagerInternalsHost,
+  kChromeUIPredictorsHost,
+  kChromeUIProfilerHost,
+  kChromeUISignInInternalsHost,
+  kChromeUIStatsHost,
+  kChromeUISuggestionsHost,
+  kChromeUISyncInternalsHost,
+  kChromeUITermsHost,
+  kChromeUIThumbnailListHost,
+  kChromeUITranslateInternalsHost,
+  kChromeUIUserActionsHost,
+  kChromeUIVersionHost,
+  kChromeUIVoiceSearchHost,
+  content::kChromeUIAccessibilityHost,
+  content::kChromeUIAppCacheInternalsHost,
+  content::kChromeUIBlobInternalsHost,
+  content::kChromeUIGpuHost,
+  content::kChromeUIHistogramHost,
+  content::kChromeUIIndexedDBInternalsHost,
+  content::kChromeUIMediaInternalsHost,
+  content::kChromeUINetworkViewCacheHost,
+  content::kChromeUIServiceWorkerInternalsHost,
+  content::kChromeUITracingHost,
+  content::kChromeUIWebRTCInternalsHost,
+#if defined(OS_ANDROID)
+  kChromeUIWelcomeHost,
+#else
+  kChromeUIAppLauncherPageHost,
+  kChromeUIBookmarksHost,
+  kChromeUIDownloadsHost,
+  kChromeUIFlashHost,
+  kChromeUIGCMInternalsHost,
+  kChromeUIHelpHost,
+  kChromeUIInspectHost,
+  kChromeUIIPCHost,
+  kChromeUIPluginsHost,
+  kChromeUIQuotaInternalsHost,
+  kChromeUISettingsHost,
+  kChromeUISystemInfoHost,
+  kChromeUIUberHost,
+#endif
+#if defined(OS_ANDROID) || defined(OS_IOS)
+  kChromeUINetExportHost,
+#endif
+#if defined(OS_CHROMEOS)
+  kChromeUICertificateManagerHost,
+  kChromeUIChooseMobileNetworkHost,
+  kChromeUICryptohomeHost,
+  kChromeUIDiscardsHost,
+  kChromeUIDriveInternalsHost,
+  kChromeUIFirstRunHost,
+  kChromeUIImageBurnerHost,
+  kChromeUIKeyboardOverlayHost,
+  kChromeUILoginHost,
+  kChromeUINetworkHost,
+  kChromeUIOobeHost,
+  kChromeUIOSCreditsHost,
+  kChromeUIPowerHost,
+  kChromeUIProxySettingsHost,
+  kChromeUITaskManagerHost,
+#endif
+#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
+  kChromeUILinuxProxyConfigHost,
+  kChromeUISandboxHost,
+#endif
+#if defined(OS_WIN)
+  kChromeUIConflictsHost,
+#endif
+#if !defined(DISABLE_NACL)
+  kChromeUINaClHost,
+#endif
+#if defined(ENABLE_CONFIGURATION_POLICY)
+  kChromeUIPolicyHost,
+#endif
+#if defined(ENABLE_EXTENSIONS)
+  kChromeUIExtensionsHost,
+#endif
+#if defined(ENABLE_FULL_PRINTING)
+  kChromeUIPrintHost,
+#endif
+#if defined(ENABLE_SERVICE_DISCOVERY)
+  kChromeUIDevicesHost,
+#endif
+#if defined(ENABLE_WEBRTC)
+  kChromeUIWebRtcLogsHost,
+#endif
+};
+const size_t kNumberOfChromeHostURLs = arraysize(kChromeHostURLs);
+
+const char* const kChromeDebugURLs[] = {
+  content::kChromeUICrashURL,
+  content::kChromeUIDumpURL,
+  content::kChromeUIKillURL,
+  content::kChromeUIHangURL,
+  content::kChromeUIShorthangURL,
+  content::kChromeUIGpuCleanURL,
+  content::kChromeUIGpuCrashURL,
+  content::kChromeUIGpuHangURL,
+  content::kChromeUIPpapiFlashCrashURL,
+  content::kChromeUIPpapiFlashHangURL,
+  chrome::kChromeUIQuitURL,
+  chrome::kChromeUIRestartURL
+};
+const int kNumberOfChromeDebugURLs =
+    static_cast<int>(arraysize(kChromeDebugURLs));
+
+const char kChromeNativeScheme[] = "chrome-native";
+
+const char kChromeSearchScheme[] = "chrome-search";
+const char kChromeSearchLocalNtpHost[] = "local-ntp";
+const char kChromeSearchLocalNtpUrl[] =
+    "chrome-search://local-ntp/local-ntp.html";
+const char kChromeSearchRemoteNtpHost[] = "remote-ntp";
+
+const char kChromeSearchMostVisitedHost[] = "most-visited";
+const char kChromeSearchMostVisitedUrl[] = "chrome-search://most-visited/";
+
+// Google SafeSearch query parameters.
+const char kSafeSearchSafeParameter[] = "safe=active";
+const char kSafeSearchSsuiParameter[] = "ssui=on";
+
+const char kMediaAccessLearnMoreUrl[] =
+    "https://support.google.com/chrome/?p=ib_access_cam_mic";
+
+const char kLanguageSettingsLearnMoreUrl[] =
+#if defined(OS_CHROMEOS)
+    "https://support.google.com/chromebook/answer/1059490";
+#else
+    "https://support.google.com/chrome/topic/1678461";
+#endif
+
+#if defined(OS_MACOSX)
+const char kMac32BitDeprecationURL[] =
+#if !defined(ARCH_CPU_64_BITS)
+    "https://support.google.com/chrome/?p=ui_mac_32bit_support";
+#else
+    "";
+#endif
+#endif
+
+const char kEasyUnlockLearnMoreUrl[] =
+    "https://support.google.com/chromebook/answer/6070209";
+
+}  // namespace chrome
--- a/chrome/common/url_constants.h
+++ b/chrome/common/url_constants.h
@@ -43,6 +43,7 @@ extern const char kChromeUIExtensionsFra
 extern const char kChromeUIExtensionsURL[];
 extern const char kChromeUIFaviconURL[];
 extern const char kChromeUIFeedbackURL[];
+extern const char kChromeUIFilePickerURL[];
 extern const char kChromeUIFlagsURL[];
 extern const char kChromeUIFlashURL[];
 extern const char kChromeUIGCMInternalsURL[];
@@ -175,6 +176,7 @@ extern const char kChromeUIExtensionsFra
 extern const char kChromeUIExtensionsHost[];
 extern const char kChromeUIFaviconHost[];
 extern const char kChromeUIFeedbackHost[];
+extern const char kChromeUIFilePickerHost[];
 extern const char kChromeUIFlagsHost[];
 extern const char kChromeUIFlashHost[];
 extern const char kChromeUIGCMInternalsHost[];
--- /dev/null
+++ b/chrome/common/url_constants.h.orig
@@ -0,0 +1,549 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Contains constants for known URLs and portions thereof.
+
+#ifndef CHROME_COMMON_URL_CONSTANTS_H_
+#define CHROME_COMMON_URL_CONSTANTS_H_
+
+#include <string>
+#include <vector>
+
+#include "build/build_config.h"
+#include "content/public/common/url_constants.h"
+
+namespace chrome {
+
+// chrome: URLs (including schemes). Should be kept in sync with the
+// components below.
+extern const char kChromeUIAboutURL[];
+extern const char kChromeUIAppsURL[];
+extern const char kChromeUIAppListStartPageURL[];
+extern const char kChromeUIBookmarksURL[];
+extern const char kChromeUICertificateViewerURL[];
+extern const char kChromeUICertificateViewerDialogURL[];
+extern const char kChromeUIChromeSigninURL[];
+extern const char kChromeUIChromeURLsURL[];
+extern const char kChromeUICloudPrintResourcesURL[];
+extern const char kChromeUIComponentsURL[];
+extern const char kChromeUIConflictsURL[];
+extern const char kChromeUIConstrainedHTMLTestURL[];
+extern const char kChromeUIContextualSearchPromoURL[];
+extern const char kChromeUICrashesURL[];
+extern const char kChromeUICreditsURL[];
+extern const char kChromeUIDevicesURL[];
+extern const char kChromeUIDevToolsURL[];
+extern const char kChromeUIDomainReliabilityInternalsURL[];
+extern const char kChromeUIDownloadsURL[];
+extern const char kChromeUIEditSearchEngineDialogURL[];
+extern const char kChromeUIExtensionIconURL[];
+extern const char kChromeUIExtensionInfoURL[];
+extern const char kChromeUIExtensionsFrameURL[];
+extern const char kChromeUIExtensionsURL[];
+extern const char kChromeUIFaviconURL[];
+extern const char kChromeUIFeedbackURL[];
+extern const char kChromeUIFlagsURL[];
+extern const char kChromeUIFlashURL[];
+extern const char kChromeUIGCMInternalsURL[];
+extern const char kChromeUIHelpFrameURL[];
+extern const char kChromeUIHistoryURL[];
+extern const char kChromeUIHistoryFrameURL[];
+extern const char kChromeUIIdentityInternalsURL[];
+extern const char kChromeUIInspectURL[];
+extern const char kChromeUIInstantURL[];
+extern const char kChromeUIInterstitialURL[];
+extern const char kChromeUIInvalidationsURL[];
+extern const char kChromeUIIPCURL[];
+extern const char kChromeUIMemoryRedirectURL[];
+extern const char kChromeUIMemoryURL[];
+extern const char kChromeUIMetroFlowURL[];
+extern const char kChromeUINaClURL[];
+extern const char kChromeUINetInternalsURL[];
+extern const char kChromeUINewProfile[];
+extern const char kChromeUINewTabURL[];
+extern const char kChromeUIOmniboxURL[];
+extern const char kChromeUIPasswordManagerInternalsHost[];
+extern const char kChromeUIPluginsURL[];
+extern const char kChromeUIPolicyURL[];
+extern const char kChromeUIProfileSigninConfirmationURL[];
+extern const char kChromeUIUserManagerURL[];
+extern const char kChromeUIPrintURL[];
+extern const char kChromeUIQuitURL[];
+extern const char kChromeUIRestartURL[];
+extern const char kChromeUISessionFaviconURL[];
+extern const char kChromeUISettingsURL[];
+extern const char kChromeUISettingsFrameURL[];
+extern const char kChromeUISuggestions[];
+extern const char kChromeUISuggestionsInternalsURL[];
+extern const char kChromeUISupervisedUserPassphrasePageURL[];
+extern const char kChromeUISSLClientCertificateSelectorURL[];
+extern const char kChromeUITermsURL[];
+extern const char kChromeUIThemeURL[];
+extern const char kChromeUIThumbnailURL[];
+extern const char kChromeUIThumbnailListURL[];
+extern const char kChromeUIUberURL[];
+extern const char kChromeUIUberFrameURL[];
+extern const char kChromeUIUserActionsURL[];
+extern const char kChromeUIVersionURL[];
+extern const char kChromeUIVoiceSearchURL[];
+
+#if defined(OS_ANDROID)
+extern const char kChromeUINativeNewTabURL[];
+extern const char kChromeUINativeBookmarksURL[];
+extern const char kChromeUINativeRecentTabsURL[];
+extern const char kChromeUIWelcomeURL[];
+#endif
+
+#if defined(OS_CHROMEOS)
+extern const char kChromeUIActivationMessage[];
+extern const char kChromeUIBluetoothPairingURL[];
+extern const char kChromeUICertificateManagerDialogURL[];
+extern const char kChromeUIChargerReplacementURL[];
+extern const char kChromeUIChooseMobileNetworkURL[];
+extern const char kChromeUIDiagnosticsURL[];
+extern const char kChromeUIDiscardsURL[];
+extern const char kChromeUIFirstRunURL[];
+extern const char kChromeUIIdleLogoutDialogURL[];
+extern const char kChromeUIImageBurnerURL[];
+extern const char kChromeUIKeyboardOverlayURL[];
+extern const char kChromeUILockScreenURL[];
+extern const char kChromeUIMediaplayerURL[];
+extern const char kChromeUIMobileSetupURL[];
+extern const char kChromeUINfcDebugURL[];
+extern const char kChromeUIOobeURL[];
+extern const char kChromeUIOSCreditsURL[];
+extern const char kChromeUIProxySettingsURL[];
+extern const char kChromeUIScreenlockIconURL[];
+extern const char kChromeUISetTimeURL[];
+extern const char kChromeUISimUnlockURL[];
+extern const char kChromeUISlideshowURL[];
+extern const char kChromeUISlowURL[];
+extern const char kChromeUISystemInfoURL[];
+extern const char kChromeUITermsOemURL[];
+extern const char kChromeUIUserImageURL[];
+#endif
+
+#if defined(USE_AURA)
+extern const char kChromeUIGestureConfigURL[];
+extern const char kChromeUIGestureConfigHost[];
+extern const char kChromeUISalsaURL[];
+extern const char kChromeUISalsaHost[];
+#endif
+
+#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
+extern const char kChromeUITabModalConfirmDialogURL[];
+#endif
+
+#if defined(ENABLE_WEBRTC)
+extern const char kChromeUIWebRtcLogsURL[];
+#endif
+
+// chrome components of URLs. Should be kept in sync with the full URLs above.
+extern const char kChromeUIAboutHost[];
+extern const char kChromeUIAboutPageFrameHost[];
+extern const char kChromeUIBlankHost[];
+extern const char kChromeUIAppLauncherPageHost[];
+extern const char kChromeUIAppListStartPageHost[];
+extern const char kChromeUIBookmarksHost[];
+extern const char kChromeUICacheHost[];
+extern const char kChromeUICertificateViewerHost[];
+extern const char kChromeUICertificateViewerDialogHost[];
+extern const char kChromeUIChromeSigninHost[];
+extern const char kChromeUIChromeURLsHost[];
+extern const char kChromeUICloudPrintResourcesHost[];
+extern const char kChromeUICloudPrintSetupHost[];
+extern const char kChromeUIConflictsHost[];
+extern const char kChromeUIConstrainedHTMLTestHost[];
+extern const char kChromeUIContextualSearchPromoHost[];
+extern const char kChromeUICrashesHost[];
+extern const char kChromeUICrashHost[];
+extern const char kChromeUICreditsHost[];
+extern const char kChromeUIDefaultHost[];
+extern const char kChromeUIDevicesHost[];
+extern const char kChromeUIDevToolsHost[];
+extern const char kChromeUIDevToolsBundledPath[];
+extern const char kChromeUIDevToolsRemotePath[];
+extern const char kChromeUIDNSHost[];
+extern const char kChromeUIDomainReliabilityInternalsHost[];
+extern const char kChromeUIDownloadsHost[];
+extern const char kChromeUIDriveInternalsHost[];
+extern const char kChromeUIEditSearchEngineDialogHost[];
+extern const char kChromeUIExtensionIconHost[];
+extern const char kChromeUIExtensionInfoHost[];
+extern const char kChromeUIExtensionsFrameHost[];
+extern const char kChromeUIExtensionsHost[];
+extern const char kChromeUIFaviconHost[];
+extern const char kChromeUIFeedbackHost[];
+extern const char kChromeUIFlagsHost[];
+extern const char kChromeUIFlashHost[];
+extern const char kChromeUIGCMInternalsHost[];
+extern const char kChromeUIHelpFrameHost[];
+extern const char kChromeUIHelpHost[];
+extern const char kChromeUIHangHost[];
+extern const char kChromeUIHistoryHost[];
+extern const char kChromeUIHistoryFrameHost[];
+extern const char kChromeUIIdentityInternalsHost[];
+extern const char kChromeUIInspectHost[];
+extern const char kChromeUIInstantHost[];
+extern const char kChromeUIInterstitialHost[];
+extern const char kChromeUIInvalidationsHost[];
+extern const char kChromeUIIPCHost[];
+extern const char kChromeUIKillHost[];
+extern const char kChromeUIMemoryHost[];
+extern const char kChromeUIMemoryInternalsHost[];
+extern const char kChromeUIMemoryRedirectHost[];
+extern const char kChromeUIMetroFlowHost[];
+extern const char kChromeUINaClHost[];
+extern const char kChromeUINetExportHost[];
+extern const char kChromeUINetInternalsHost[];
+extern const char kChromeUINewTabHost[];
+extern const char kChromeUIOmniboxHost[];
+extern const char kChromeUIPluginsHost[];
+extern const char kChromeUIComponentsHost[];
+extern const char kChromeUIPolicyHost[];
+extern const char kChromeUIProfileSigninConfirmationHost[];
+extern const char kChromeUIProvidedFileSystemsHost[];
+extern const char kChromeUIUserManagerHost[];
+extern const char kChromeUIPredictorsHost[];
+extern const char kChromeUIProfilerHost[];
+extern const char kChromeUIQuotaInternalsHost[];
+extern const char kChromeUIQuitHost[];
+extern const char kChromeUIRestartHost[];
+extern const char kChromeUISessionFaviconHost[];
+extern const char kChromeUISettingsHost[];
+extern const char kChromeUISettingsFrameHost[];
+extern const char kChromeUIShorthangHost[];
+extern const char kChromeUISignInInternalsHost[];
+extern const char kChromeUISuggestionsHost[];
+extern const char kChromeUISuggestionsInternalsHost[];
+extern const char kChromeUISSLClientCertificateSelectorHost[];
+extern const char kChromeUIStatsHost[];
+extern const char kChromeUISupervisedUserPassphrasePageHost[];
+extern const char kChromeUISyncHost[];
+extern const char kChromeUISyncFileSystemInternalsHost[];
+extern const char kChromeUISyncInternalsHost[];
+extern const char kChromeUISyncResourcesHost[];
+extern const char kChromeUISystemInfoHost[];
+extern const char kChromeUITaskManagerHost[];
+extern const char kChromeUITermsHost[];
+extern const char kChromeUIThemeHost[];
+extern const char kChromeUIThumbnailHost[];
+extern const char kChromeUIThumbnailHost2[];
+extern const char kChromeUIThumbnailListHost[];
+extern const char kChromeUITouchIconHost[];
+extern const char kChromeUITranslateInternalsHost[];
+extern const char kChromeUIUberFrameHost[];
+extern const char kChromeUIUberHost[];
+extern const char kChromeUIUserActionsHost[];
+extern const char kChromeUIVersionHost[];
+extern const char kChromeUIVoiceSearchHost[];
+extern const char kChromeUIWorkersHost[];
+
+extern const char kChromeUIScreenshotPath[];
+extern const char kChromeUIThemePath[];
+
+#if defined(ENABLE_FULL_PRINTING)
+extern const char kChromeUIPrintHost[];
+#endif  // ENABLE_FULL_PRINTING
+
+#if defined(OS_ANDROID)
+extern const char kChromeUIWelcomeHost[];
+#endif
+
+#if defined(OS_POSIX) && !defined(OS_MACOSX) && !defined(OS_ANDROID)
+extern const char kChromeUILinuxProxyConfigHost[];
+extern const char kChromeUISandboxHost[];
+#endif
+
+#if defined(OS_CHROMEOS)
+extern const char kChromeUIActivationMessageHost[];
+extern const char kChromeUIAppLaunchHost[];
+extern const char kChromeUIBluetoothPairingHost[];
+extern const char kChromeUICertificateManagerHost[];
+extern const char kChromeUIChargerReplacementHost[];
+extern const char kChromeUIChooseMobileNetworkHost[];
+extern const char kChromeUICryptohomeHost[];
+extern const char kChromeUIDiagnosticsHost[];
+extern const char kChromeUIDiscardsHost[];
+extern const char kChromeUIFirstRunHost[];
+extern const char kChromeUIIdleLogoutDialogHost[];
+extern const char kChromeUIImageBurnerHost[];
+extern const char kChromeUIKeyboardOverlayHost[];
+extern const char kChromeUILockScreenHost[];
+extern const char kChromeUILoginContainerHost[];
+extern const char kChromeUILoginHost[];
+extern const char kChromeUIMediaplayerHost[];
+extern const char kChromeUIMobileSetupHost[];
+extern const char kChromeUINetworkHost[];
+extern const char kChromeUINfcDebugHost[];
+extern const char kChromeUIOobeHost[];
+extern const char kChromeUIOSCreditsHost[];
+extern const char kChromeUIPowerHost[];
+extern const char kChromeUIProxySettingsHost[];
+extern const char kChromeUIRotateHost[];
+extern const char kChromeUIScreenlockIconHost[];
+extern const char kChromeUISetTimeHost[];
+extern const char kChromeUISimUnlockHost[];
+extern const char kChromeUISlideshowHost[];
+extern const char kChromeUISlowHost[];
+extern const char kChromeUISlowTraceHost[];
+extern const char kChromeUIUserImageHost[];
+
+extern const char kChromeUIMenu[];
+extern const char kChromeUINetworkMenu[];
+extern const char kChromeUIWrenchMenu[];
+
+extern const char kEULAPathFormat[];
+extern const char kOemEulaURLPath[];
+extern const char kOnlineEulaURLPath[];
+#endif
+
+#if (defined(OS_LINUX) && defined(TOOLKIT_VIEWS)) || defined(USE_AURA)
+extern const char kChromeUITabModalConfirmDialogHost[];
+#endif
+
+#if defined(ENABLE_WEBRTC)
+extern const char kChromeUIWebRtcLogsHost[];
+#endif
+
+// Options sub-pages.
+extern const char kAutofillSubPage[];
+extern const char kClearBrowserDataSubPage[];
+extern const char kContentSettingsExceptionsSubPage[];
+extern const char kContentSettingsSubPage[];
+extern const char kCreateProfileSubPage[];
+extern const char kExtensionsSubPage[];
+extern const char kHandlerSettingsSubPage[];
+extern const char kImportDataSubPage[];
+extern const char kLanguageOptionsSubPage[];
+extern const char kManageProfileSubPage[];
+extern const char kPasswordManagerSubPage[];
+extern const char kResetProfileSettingsSubPage[];
+extern const char kSearchEnginesSubPage[];
+extern const char kSearchSubPage[];
+extern const char kSearchUsersSubPage[];
+extern const char kSupervisedUserSettingsSubPage[];
+extern const char kSyncSetupSubPage[];
+#if defined(OS_CHROMEOS)
+extern const char kInternetOptionsSubPage[];
+extern const char kBluetoothAddDeviceSubPage[];
+extern const char kChangeProfilePictureSubPage[];
+#endif
+
+// Extensions sub pages.
+extern const char kExtensionConfigureCommandsSubPage[];
+
+// URLs used to indicate that an extension resource load request
+// was invalid.
+extern const char kExtensionInvalidRequestURL[];
+extern const char kExtensionResourceInvalidRequestURL[];
+
+extern const char kSyncGoogleDashboardURL[];
+
+// "Learn more" URL for the auto password generation.
+extern const char kAutoPasswordGenerationLearnMoreURL[];
+
+extern const char kPasswordManagerLearnMoreURL[];
+extern const char kPasswordManagerAccountDashboardURL[];
+
+// "Learn more" URL for the Settings API, NTP bubble and other settings bubbles
+// showing which extension is controlling them.
+extern const char kExtensionControlledSettingLearnMoreURL[];
+
+// General help links for Chrome, opened using various actions.
+extern const char kChromeHelpViaKeyboardURL[];
+extern const char kChromeHelpViaMenuURL[];
+extern const char kChromeHelpViaWebUIURL[];
+
+#if defined(OS_CHROMEOS)
+// Accessibility help link for Chrome.
+extern const char kChromeAccessibilityHelpURL[];
+// Accessibility settings link for Chrome.
+extern const char kChromeAccessibilitySettingsURL[];
+#endif
+
+#if defined (ENABLE_ONE_CLICK_SIGNIN)
+// "Learn more" URL for the one click signin infobar.
+extern const char kChromeSyncLearnMoreURL[];
+
+// "Learn more" URL for the "Sign in with a different account" confirmation
+// dialog.
+extern const char kChromeSyncMergeTroubleshootingURL[];
+#endif
+
+// "Learn more" URL for the enterprise sign-in confirmation dialog.
+extern const char kChromeEnterpriseSignInLearnMoreURL[];
+
+// "Learn more" URL for resetting profile preferences.
+extern const char kResetProfileSettingsLearnMoreURL[];
+
+// "Learn more" URL for when profile settings are automatically reset.
+extern const char kAutomaticSettingsResetLearnMoreURL[];
+
+// Management URL for the supervised users.
+extern const char kSupervisedUserManagementURL[];
+
+// Management URL for the supervised users - version without scheme, used
+// for display.
+extern const char kSupervisedUserManagementDisplayURL[];
+
+// Help URL for the settings page's search feature.
+extern const char kSettingsSearchHelpURL[];
+
+// Help URL for the Omnibox setting.
+extern const char kOmniboxLearnMoreURL[];
+
+// "What do these mean?" URL for the Page Info bubble.
+extern const char kPageInfoHelpCenterURL[];
+
+// "Learn more" URL for "Aw snap" page.
+extern const char kCrashReasonURL[];
+
+// "Learn more" URL for killed tab page.
+extern const char kKillReasonURL[];
+
+// "Learn more" URL for the Privacy section under Options.
+extern const char kPrivacyLearnMoreURL[];
+
+// "Learn more" URL for the "Do not track" setting in the privacy section.
+extern const char kDoNotTrackLearnMoreURL[];
+
+#if defined(OS_CHROMEOS)
+// These URLs are currently ChromeOS only.
+
+// "Learn more" URL for the attestation of content protection setting.
+extern const char kAttestationForContentProtectionLearnMoreURL[];
+
+// "Learn more" URL for the enhanced playback notification dialog.
+extern const char kEnhancedPlaybackNotificationLearnMoreURL[];
+#endif
+
+// The URL for the Chromium project used in the About dialog.
+extern const char kChromiumProjectURL[];
+
+// The URL for the "Learn more" page for the usage/crash reporting option in the
+// first run dialog.
+extern const char kLearnMoreReportingURL[];
+
+// The URL for the "Learn more" page for the outdated plugin infobar.
+extern const char kOutdatedPluginLearnMoreURL[];
+
+// The URL for the "Learn more" page for the blocked plugin infobar.
+extern const char kBlockedPluginLearnMoreURL[];
+
+// The URL for the "Learn more" page for hotword search voice trigger.
+extern const char kHotwordLearnMoreURL[];
+
+// The URL for the "Learn more" page for register protocol handler infobars.
+extern const char kLearnMoreRegisterProtocolHandlerURL[];
+
+// The URL for the "Learn more" page for sync setup on the personal stuff page.
+extern const char kSyncLearnMoreURL[];
+
+// The URL for the "Learn more" page for download scanning.
+extern const char kDownloadScanningLearnMoreURL[];
+
+// The URL for the "Learn more" page for interrupted downloads.
+extern const char kDownloadInterruptedLearnMoreURL[];
+
+// The URL for the "Learn more" page on the sync setup dialog, when syncing
+// everything.
+extern const char kSyncEverythingLearnMoreURL[];
+
+// The URL for information on how to use the app launcher.
+extern const char kAppLauncherHelpURL[];
+
+// The URL for the "Learn more" page on sync encryption.
+extern const char kSyncEncryptionHelpURL[];
+
+// The URL for the "Learn more" link when there is a sync error.
+extern const char kSyncErrorsHelpURL[];
+
+#if defined(OS_CHROMEOS)
+// The URL for the "Learn more" link for natural scrolling on ChromeOS.
+extern const char kNaturalScrollHelpURL[];
+
+// The URL for the Learn More page about enterprise enrolled devices.
+extern const char kLearnMoreEnterpriseURL[];
+#endif
+
+// The URL for the Learn More link of the non-CWS bubble.
+extern const char kRemoveNonCWSExtensionURL[];
+
+extern const char kNotificationsHelpURL[];
+
+// The Welcome Notification More Info URL.
+extern const char kNotificationWelcomeLearnMoreURL[];
+
+// Gets the hosts/domains that are shown in chrome://chrome-urls.
+extern const char* const kChromeHostURLs[];
+extern const size_t kNumberOfChromeHostURLs;
+
+// "Debug" pages which are dangerous and not for general consumption.
+extern const char* const kChromeDebugURLs[];
+extern const int kNumberOfChromeDebugURLs;
+
+// The chrome-native: scheme is used show pages rendered with platform specific
+// widgets instead of using HTML.
+extern const char kChromeNativeScheme[];
+
+// The chrome-search: scheme is served by the same backend as chrome:.  However,
+// only specific URLDataSources are enabled to serve requests via the
+// chrome-search: scheme.  See |InstantIOContext::ShouldServiceRequest| and its
+// callers for details.  Note that WebUIBindings should never be granted to
+// chrome-search: pages.  chrome-search: pages are displayable but not readable
+// by external search providers (that are rendered by Instant renderer
+// processes), and neither displayable nor readable by normal (non-Instant) web
+// pages.  To summarize, a non-Instant process, when trying to access
+// 'chrome-search://something', will bump up against the following:
+//
+//  1. Renderer: The display-isolated check in WebKit will deny the request,
+//  2. Browser: Assuming they got by #1, the scheme checks in
+//     URLDataSource::ShouldServiceRequest will deny the request,
+//  3. Browser: for specific sub-classes of URLDataSource, like ThemeSource
+//     there are additional Instant-PID checks that make sure the request is
+//     coming from a blessed Instant process, and deny the request.
+extern const char kChromeSearchScheme[];
+
+// Pages under chrome-search.
+extern const char kChromeSearchLocalNtpHost[];
+extern const char kChromeSearchLocalNtpUrl[];
+extern const char kChromeSearchRemoteNtpHost[];
+
+// Host and URL for most visited iframes used on the Instant Extended NTP.
+extern const char kChromeSearchMostVisitedHost[];
+extern const char kChromeSearchMostVisitedUrl[];
+
+#if defined(OS_CHROMEOS)
+extern const char kCrosScheme[];
+extern const char kExternalFileScheme[];
+#endif
+
+// "Learn more" URL for the Cloud Print section under Options.
+extern const char kCloudPrintLearnMoreURL[];
+
+// "Learn more" URL for the Cloud Print Preview No Destinations Promotion.
+extern const char kCloudPrintNoDestinationsLearnMoreURL[];
+
+// Parameters that get appended to force SafeSearch.
+extern const char kSafeSearchSafeParameter[];
+extern const char kSafeSearchSsuiParameter[];
+
+// The URL for the "Learn more" link in the media access infobar.
+extern const char kMediaAccessLearnMoreUrl[];
+
+// The URL for the "Learn more" link in the language settings.
+extern const char kLanguageSettingsLearnMoreUrl[];
+
+#if defined(OS_MACOSX)
+// The URL for the 32-bit Mac deprecation help center article
+extern const char kMac32BitDeprecationURL[];
+#endif
+
+// The URL for the "Learn more" link the the Easy Unlock settings.
+extern const char kEasyUnlockLearnMoreUrl[];
+
+}  // namespace chrome
+
+#endif  // CHROME_COMMON_URL_CONSTANTS_H_
--- a/media/DEPS
+++ b/media/DEPS
@@ -1,15 +1,5 @@
-# Do NOT add net/ or ui/base without a great reason, they're huge!
 include_rules = [
-  "+gpu",
-  "+jni",
-  "+third_party/ffmpeg",
-  "+third_party/libvpx",
-  "+third_party/libyuv",
-  "+third_party/opus",
-  "+third_party/skia",
-  "+ui/events",
-  "+ui/gfx",
-  "+ui/gl",
-  "+ui/ozone",
-  "-media/blink",
+  "+media",
+  "+media/ozone",
+  "+third_party/libva",
 ]
--- a/media/OWNERS
+++ b/media/OWNERS
@@ -1,9 +1,2 @@
-dalecurtis@chromium.org
-ddorwin@chromium.org
-scherkus@chromium.org
-vrk@chromium.org
-wolenetz@chromium.org
-xhwang@chromium.org
-
-per-file *.isolate=csharp@chromium.org
-per-file *.isolate=maruel@chromium.org
+kalyan.kondapally@intel.com
+tiago.vignatti@intel.com
--- /dev/null
+++ b/media/h264_dpb.cc
@@ -0,0 +1,124 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <algorithm>
+
+#include "base/logging.h"
+#include "base/stl_util.h"
+#include "h264_dpb.h"
+
+namespace media {
+
+H264DPB::H264DPB() : max_num_pics_(0) {}
+H264DPB::~H264DPB() {}
+
+void H264DPB::Clear() {
+  pics_.clear();
+}
+
+void H264DPB::set_max_num_pics(size_t max_num_pics) {
+  DCHECK_LE(max_num_pics, kDPBMaxSize);
+  max_num_pics_ = max_num_pics;
+  if (pics_.size() > max_num_pics_)
+    pics_.resize(max_num_pics_);
+}
+
+void H264DPB::DeleteByPOC(int poc) {
+  for (Pictures::iterator it = pics_.begin(); it != pics_.end(); ++it) {
+    if ((*it)->pic_order_cnt == poc) {
+      pics_.erase(it);
+      return;
+    }
+  }
+  NOTREACHED() << "Missing POC: " << poc;
+}
+
+void H264DPB::DeleteUnused() {
+  for (Pictures::iterator it = pics_.begin(); it != pics_.end(); ) {
+    if ((*it)->outputted && !(*it)->ref)
+      it = pics_.erase(it);
+    else
+      ++it;
+  }
+}
+
+void H264DPB::StorePic(H264Picture* pic) {
+  DCHECK_LT(pics_.size(), max_num_pics_);
+  DVLOG(3) << "Adding PicNum: " << pic->pic_num << " ref: " << (int)pic->ref
+           << " longterm: " << (int)pic->long_term << " to DPB";
+  pics_.push_back(pic);
+}
+
+int H264DPB::CountRefPics() {
+  int ret = 0;
+  for (size_t i = 0; i < pics_.size(); ++i) {
+    if (pics_[i]->ref)
+      ++ret;
+  }
+  return ret;
+}
+
+void H264DPB::MarkAllUnusedForRef() {
+  for (size_t i = 0; i < pics_.size(); ++i)
+    pics_[i]->ref = false;
+}
+
+H264Picture* H264DPB::GetShortRefPicByPicNum(int pic_num) {
+  for (size_t i = 0; i < pics_.size(); ++i) {
+    H264Picture* pic = pics_[i];
+    if (pic->ref && !pic->long_term && pic->pic_num == pic_num)
+      return pic;
+  }
+
+  DVLOG(1) << "Missing short ref pic num: " << pic_num;
+  return NULL;
+}
+
+H264Picture* H264DPB::GetLongRefPicByLongTermPicNum(int pic_num) {
+  for (size_t i = 0; i < pics_.size(); ++i) {
+    H264Picture* pic = pics_[i];
+    if (pic->ref && pic->long_term && pic->long_term_pic_num == pic_num)
+      return pic;
+  }
+
+  DVLOG(1) << "Missing long term pic num: " << pic_num;
+  return NULL;
+}
+
+H264Picture* H264DPB::GetLowestFrameNumWrapShortRefPic() {
+  H264Picture* ret = NULL;
+  for (size_t i = 0; i < pics_.size(); ++i) {
+    H264Picture* pic = pics_[i];
+    if (pic->ref && !pic->long_term &&
+        (!ret || pic->frame_num_wrap < ret->frame_num_wrap))
+      ret = pic;
+  }
+  return ret;
+}
+
+void H264DPB::GetNotOutputtedPicsAppending(H264Picture::PtrVector& out) {
+  for (size_t i = 0; i < pics_.size(); ++i) {
+    H264Picture* pic = pics_[i];
+    if (!pic->outputted)
+      out.push_back(pic);
+  }
+}
+
+void H264DPB::GetShortTermRefPicsAppending(H264Picture::PtrVector& out) {
+  for (size_t i = 0; i < pics_.size(); ++i) {
+    H264Picture* pic = pics_[i];
+    if (pic->ref && !pic->long_term)
+      out.push_back(pic);
+  }
+}
+
+void H264DPB::GetLongTermRefPicsAppending(H264Picture::PtrVector& out) {
+  for (size_t i = 0; i < pics_.size(); ++i) {
+    H264Picture* pic = pics_[i];
+    if (pic->ref && pic->long_term)
+      out.push_back(pic);
+  }
+}
+
+}  // namespace media
--- /dev/null
+++ b/media/h264_dpb.h
@@ -0,0 +1,137 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// This file contains an implementation of an H.264 Decoded Picture Buffer
+// used in H264 decoders.
+
+#ifndef OZONE_MEDIA_H264_DPB_H_
+#define OZONE_MEDIA_H264_DPB_H_
+
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/memory/scoped_vector.h"
+#include "media/filters/h264_parser.h"
+
+namespace media {
+
+// A picture (a frame or a field) in the H.264 spec sense.
+// See spec at http://www.itu.int/rec/T-REC-H.264
+struct H264Picture {
+  enum Field {
+    FIELD_NONE,
+    FIELD_TOP,
+    FIELD_BOTTOM,
+  };
+
+  // Values calculated per H.264 specification or taken from slice header.
+  // See spec for more details on each (some names have been converted from
+  // CamelCase in spec to Chromium-style names).
+  int top_field_order_cnt;
+  int bottom_field_order_cnt;
+  int pic_order_cnt;
+  int pic_order_cnt_msb;
+  int pic_order_cnt_lsb;
+
+  int pic_num;
+  int long_term_pic_num;
+  int frame_num;  // from slice header
+  int frame_num_offset;
+  int frame_num_wrap;
+  int long_term_frame_idx;
+
+  bool idr;  // IDR picture?
+  bool ref;  // reference picture?
+  bool long_term;  // long term reference picture?
+  bool outputted;
+  // Does memory management op 5 needs to be executed after this
+  // picture has finished decoding?
+  bool mem_mgmt_5;
+
+  Field field;
+
+  // Values from slice_hdr to be used during reference marking and
+  // memory management after finishing this picture.
+  bool long_term_reference_flag;
+  bool adaptive_ref_pic_marking_mode_flag;
+  media::H264DecRefPicMarking
+      ref_pic_marking[media::H264SliceHeader::kRefListSize];
+
+  typedef std::vector<H264Picture*> PtrVector;
+};
+
+// DPB - Decoded Picture Buffer.
+// Stores decoded pictures that will be used for future display
+// and/or reference.
+class H264DPB {
+ public:
+  H264DPB();
+  ~H264DPB();
+
+  void set_max_num_pics(size_t max_num_pics);
+  size_t max_num_pics() { return max_num_pics_; }
+
+  // Remove unused (not reference and already outputted) pictures from DPB
+  // and free it.
+  void DeleteUnused();
+
+  // Remove a picture by its pic_order_cnt and free it.
+  void DeleteByPOC(int poc);
+
+  // Clear DPB.
+  void Clear();
+
+  // Store picture in DPB. DPB takes ownership of its resources.
+  void StorePic(H264Picture* pic);
+
+  // Return the number of reference pictures in DPB.
+  int CountRefPics();
+
+  // Mark all pictures in DPB as unused for reference.
+  void MarkAllUnusedForRef();
+
+  // Return a short-term reference picture by its pic_num.
+  H264Picture* GetShortRefPicByPicNum(int pic_num);
+
+  // Return a long-term reference picture by its long_term_pic_num.
+  H264Picture* GetLongRefPicByLongTermPicNum(int pic_num);
+
+  // Return the short reference picture with lowest frame_num. Used for sliding
+  // window memory management.
+  H264Picture* GetLowestFrameNumWrapShortRefPic();
+
+  // Append all pictures that have not been outputted yet to the passed |out|
+  // vector, sorted by lowest pic_order_cnt (in output order).
+  void GetNotOutputtedPicsAppending(H264Picture::PtrVector& out);
+
+  // Append all short term reference pictures to the passed |out| vector.
+  void GetShortTermRefPicsAppending(H264Picture::PtrVector& out);
+
+  // Append all long term reference pictures to the passed |out| vector.
+  void GetLongTermRefPicsAppending(H264Picture::PtrVector& out);
+
+  // Iterators for direct access to DPB contents.
+  // Will be invalidated after any of Remove* calls.
+  typedef ScopedVector<H264Picture> Pictures;
+  Pictures::iterator begin() { return pics_.begin(); }
+  Pictures::iterator end() { return pics_.end(); }
+  Pictures::reverse_iterator rbegin() { return pics_.rbegin(); }
+  Pictures::reverse_iterator rend() { return pics_.rend(); }
+
+  size_t size() const { return pics_.size(); }
+  bool IsFull() const { return pics_.size() == max_num_pics_; }
+
+  // Per H264 spec, increase to 32 if interlaced video is supported.
+  enum { kDPBMaxSize = 16, };
+
+ private:
+  Pictures pics_;
+  size_t max_num_pics_;
+
+  DISALLOW_COPY_AND_ASSIGN(H264DPB);
+};
+
+}  // namespace media
+
+#endif  // OZONE_MEDIA_H264_DPB_H_
--- /dev/null
+++ b/media/media_ozone_platform_wayland.cc
@@ -0,0 +1,35 @@
+// Copyright (c) 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/media/media_ozone_platform_wayland.h"
+
+#include "media/video/video_decode_accelerator.h"
+#include "media/ozone/media_ozone_platform.h"
+#include "ozone/media/vaapi_video_decode_accelerator.h"
+
+namespace media {
+
+namespace {
+
+class MediaOzonePlatformWayland : public MediaOzonePlatform {
+ public:
+  MediaOzonePlatformWayland() {}
+
+  virtual ~MediaOzonePlatformWayland() {}
+
+  // MediaOzonePlatform:
+  media::VideoDecodeAccelerator* CreateVideoDecodeAccelerator(
+      const base::Callback<bool(void)>& make_context_current) override {
+    return new VaapiVideoDecodeAccelerator(make_context_current);
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MediaOzonePlatformWayland);
+};
+
+}  // namespace
+
+MediaOzonePlatform* CreateMediaOzonePlatformWayland() { return new MediaOzonePlatformWayland; }
+
+}  // namespace media
--- /dev/null
+++ b/media/media_ozone_platform_wayland.h
@@ -0,0 +1,18 @@
+// Copyright (c) 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_MEDIA_MEDIA_OZONE_PLATFORM_WAYLAND_H_
+#define OZONE_MEDIA_MEDIA_OZONE_PLATFORM_WAYLAND_H_
+
+#include "ozone/platform/ozone_export_wayland.h"
+
+namespace media {
+
+class MediaOzonePlatform;
+
+OZONE_WAYLAND_EXPORT MediaOzonePlatform* CreateMediaOzonePlatformWayland();
+
+}  // namespace media
+
+#endif  // OZONE_MEDIA_MEDIA_OZONE_PLATFORM_WAYLAND_H_
--- /dev/null
+++ b/media/va_surface.h
@@ -0,0 +1,105 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// This file contains the definition of VASurface class, used for decoding by
+// VaapiVideoDecodeAccelerator and VaapiH264Decoder.
+
+#ifndef OZONE_MEDIA_VA_SURFACE_H_
+#define OZONE_MEDIA_VA_SURFACE_H_
+
+#include "third_party/libva/va/va.h"
+
+namespace media {
+
+// A VA-API-specific decode surface used by VaapiH264Decoder to decode into
+// and use as reference for decoding other surfaces. It is also handed by the
+// decoder to VaapiVideoDecodeAccelerator when the contents of the surface are
+// ready and should be displayed. VAVDA converts the surface contents into an
+// X Pixmap bound to a texture for display and releases its reference to it.
+// Decoder releases its references to the surface when it's done decoding and
+// using it as reference. Note that a surface may still be used for reference
+// after it's been sent to output and also after it is no longer used by VAVDA.
+// Thus, the surface can be in use by both VAVDA and the Decoder at the same
+// time, or by either of them, with the restriction that VAVDA will never get
+// the surface until the contents are ready, and it is guaranteed that the
+// contents will not change after that.
+// When both the decoder and VAVDA release their references to the surface,
+// it is freed and the release callback is executed to put the surface back
+// into available surfaces pool, which is managed externally.
+//
+//   VASurfaceID is allocated in VaapiWrapper.
+//        |
+// +----->|
+// |      v
+// | VASurfaceID is put onto VaapiVideoDecodeAccelerator::available_va_surfaces_
+// |      |      list.
+// |      v
+// | VASurfaceID is taken off of the VVDA:available_va_surfaces_ when
+// |      |      VaapiH264Decoder requests more output surfaces, is wrapped into
+// |      |      a VASurface and passed to VaapiH264Decoder.
+// |      v
+// | VASurface is put onto VaapiH264Decoder::available_va_surfaces_, keeping
+// |      |      the only reference to it until it's needed for decoding.
+// |      v
+// | VaapiH264Decoder starts decoding a new frame. It takes a VASurface off of
+// |      |      VHD::available_va_surfaces_ and assigns it to a DecodeSurface,
+// |      |      which now keeps the only reference.
+// |      v
+// | DecodeSurface is used for decoding, putting data into associated VASurface.
+// |      |
+// |      |--------------------------------------------------+
+// |      |                                                  |
+// |      v                                                  v
+// | DecodeSurface is to be output.              VaapiH264Decoder uses the
+// | VaapiH264Decoder passes the associated      DecodeSurface and associated
+// | VASurface to VaapiVideoDecodeAccelerator,   VASurface as reference for
+// | which stores it (taking a ref) on           decoding more frames.
+// | pending_output_cbs_ queue until an output               |
+// | TFPPicture becomes available.                           v
+// |                 |                           Once the DecodeSurface is not
+// |                 |                           needed as reference anymore,
+// |                 v                           it is released, releasing the
+// | A TFPPicture becomes available after        associated VASurface reference.
+// | the client of VVDA returns                              |
+// | a PictureBuffer associated with it. VVDA                |
+// | puts the contents of the VASurface into                 |
+// | it and releases the reference to VASurface.             |
+// |                 |                                       |
+// |                 '---------------------------------------'
+// |                                     |
+// |                                     v
+// | Neither VVDA nor VHD hold a reference to VASurface. VASurface is released,
+// | ReleaseCB gets called in its destructor, which puts the associated
+// | VASurfaceID back onto VVDA::available_va_surfaces_.
+// |                                     |
+// '-------------------------------------|
+//                                       |
+//                                       v
+//                       VaapiWrapper frees VASurfaceID.
+//
+class CONTENT_EXPORT VASurface : public base::RefCountedThreadSafe<VASurface> {
+ public:
+  // Provided by user, will be called when all references to the surface
+  // are released.
+  typedef base::Callback<void(VASurfaceID)> ReleaseCB;
+
+  VASurface(VASurfaceID va_surface_id, const ReleaseCB& release_cb);
+
+  VASurfaceID id() {
+    return va_surface_id_;
+  }
+
+ private:
+  friend class base::RefCountedThreadSafe<VASurface>;
+  ~VASurface();
+
+  const VASurfaceID va_surface_id_;
+  ReleaseCB release_cb_;
+
+  DISALLOW_COPY_AND_ASSIGN(VASurface);
+};
+
+}  // namespace media
+
+#endif  // OZONE_MEDIA_VA_SURFACE_H_
--- /dev/null
+++ b/media/va_wayland.sigs
@@ -0,0 +1,41 @@
+# Copyright (c) 2014 The Intel Corporation. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+#------------------------------------------------
+# Functions from libva used in chromium code.
+#------------------------------------------------
+VAStatus vaBeginPicture(VADisplay dpy, VAContextID context, VASurfaceID render_target);
+VAStatus vaCreateBuffer(VADisplay dpy, VAContextID context, VABufferType type, unsigned int size, unsigned int num_elements, void *data, VABufferID *buf_id);
+VAStatus vaCreateConfig(VADisplay dpy, VAProfile profile, VAEntrypoint entrypoint, VAConfigAttrib *attrib_list, int num_attribs, VAConfigID *config_id);
+VAStatus vaCreateContext(VADisplay dpy, VAConfigID config_id, int picture_width, int picture_height, int flag, VASurfaceID *render_targets, int num_render_targets, VAContextID *context);
+VAStatus vaCreateImage(VADisplay dpy, VAImageFormat *format, int width, int height, VAImage *image);
+VAStatus vaCreateSurfaces(VADisplay dpy, unsigned int format, unsigned int width, unsigned int height, VASurfaceID *surfaces, unsigned int num_surfaces, VASurfaceAttrib *attrib_list, unsigned int num_attribs);
+VAStatus vaDeriveImage(VADisplay dpy, VASurfaceID surface, VAImage *image);
+VAStatus vaDestroyBuffer(VADisplay dpy, VABufferID buffer_id);
+VAStatus vaDestroyConfig(VADisplay dpy, VAConfigID config_id);
+VAStatus vaDestroyContext(VADisplay dpy, VAContextID context);
+VAStatus vaDestroyImage(VADisplay dpy, VAImageID image);
+VAStatus vaDestroySurfaces(VADisplay dpy, VASurfaceID *surfaces, int num_surfaces);
+int vaDisplayIsValid(VADisplay dpy);
+VAStatus vaEndPicture(VADisplay dpy, VAContextID context);
+const char *vaErrorStr(VAStatus error_status);
+VAStatus vaGetConfigAttributes(VADisplay dpy, VAProfile profile, VAEntrypoint entrypoint, VAConfigAttrib *attrib_list, int num_attribs);
+VAStatus vaGetImage(VADisplay dpy, VASurfaceID surface, int x, int y, unsigned int width, unsigned int height, VAImageID image);
+VAStatus vaInitialize(VADisplay dpy, int *major_version, int *minor_version);
+VAStatus vaMapBuffer(VADisplay dpy, VABufferID buf_id, void **pbuf);
+int vaMaxNumProfiles(VADisplay dpy);
+VAStatus vaQueryConfigProfiles(VADisplay dpy, VAProfile *profile_list, int *num_profiles);
+VAStatus vaQueryImageFormats(VADisplay dpy, VAImageFormat *format_list, int *num_formats);
+VAStatus vaRenderPicture(VADisplay dpy, VAContextID context, VABufferID *buffers, int num_buffers);
+VAStatus vaSetDisplayAttributes(VADisplay dpy, VADisplayAttribute *attr_list, int num_attributes);
+VAStatus vaSyncSurface(VADisplay dpy, VASurfaceID render_target);
+VAStatus vaTerminate(VADisplay dpy);
+VAStatus vaUnmapBuffer(VADisplay dpy, VABufferID buf_id);
+VAStatus vaLockBuffer(VADisplay dpy, VABufferID buf_id, VABufferInfo *buf_info_ptr);
+VAStatus vaUnlockBuffer(VADisplay dpy, VABufferID buf_id, VABufferInfo *buf_info_ptr);
+
+#------------------------------------------------
+# Functions from libva-wayland used in chromium code.
+#------------------------------------------------
+VADisplay vaGetDisplayWl(struct wl_display *display);
--- /dev/null
+++ b/media/va_wayland_stub_header.fragment
@@ -0,0 +1,9 @@
+// The extra include header needed in the generated stub file for defining
+// various libva types.
+
+extern "C" {
+
+#include "third_party/libva/va/va.h"
+#include "third_party/libva/va/wayland/va_wayland.h"
+
+}
--- /dev/null
+++ b/media/vaapi_h264_decoder.cc
@@ -0,0 +1,1690 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <algorithm>
+#include <limits>
+
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/numerics/safe_conversions.h"
+#include "base/stl_util.h"
+#include "vaapi_h264_decoder.h"
+
+namespace media {
+
+// Decode surface, used for decoding and reference. input_id comes from client
+// and is associated with the surface that was produced as the result
+// of decoding a bitstream buffer with that id.
+class VaapiH264Decoder::DecodeSurface {
+ public:
+  DecodeSurface(int poc,
+                int32 input_id,
+                const scoped_refptr<VASurface>& va_surface);
+  DecodeSurface(int poc, const scoped_refptr<DecodeSurface>& dec_surface);
+  ~DecodeSurface();
+
+  int poc() {
+    return poc_;
+  }
+
+  scoped_refptr<VASurface> va_surface() {
+    return va_surface_;
+  }
+
+  int32 input_id() {
+    return input_id_;
+  }
+
+ private:
+  int poc_;
+  int32 input_id_;
+  scoped_refptr<VASurface> va_surface_;
+};
+
+VaapiH264Decoder::DecodeSurface::DecodeSurface(
+    int poc,
+    int32 input_id,
+    const scoped_refptr<VASurface>& va_surface)
+    : poc_(poc),
+      input_id_(input_id),
+      va_surface_(va_surface) {
+  DCHECK(va_surface_.get());
+}
+
+VaapiH264Decoder::DecodeSurface::~DecodeSurface() {
+}
+
+VaapiH264Decoder::VaapiH264Decoder(
+    VaapiWrapper* vaapi_wrapper,
+    const OutputPicCB& output_pic_cb,
+    const ReportErrorToUmaCB& report_error_to_uma_cb)
+    : max_pic_order_cnt_lsb_(0),
+      max_frame_num_(0),
+      max_pic_num_(0),
+      max_long_term_frame_idx_(0),
+      max_num_reorder_frames_(0),
+      curr_sps_id_(-1),
+      curr_pps_id_(-1),
+      vaapi_wrapper_(vaapi_wrapper),
+      output_pic_cb_(output_pic_cb),
+      report_error_to_uma_cb_(report_error_to_uma_cb) {
+  Reset();
+  state_ = kNeedStreamMetadata;
+}
+
+VaapiH264Decoder::~VaapiH264Decoder() {
+}
+
+void VaapiH264Decoder::Reset() {
+  curr_pic_.reset();
+
+  curr_input_id_ = -1;
+  frame_num_ = 0;
+  prev_frame_num_ = -1;
+  prev_frame_num_offset_ = -1;
+
+  prev_ref_has_memmgmnt5_ = false;
+  prev_ref_top_field_order_cnt_ = -1;
+  prev_ref_pic_order_cnt_msb_ = -1;
+  prev_ref_pic_order_cnt_lsb_ = -1;
+  prev_ref_field_ = H264Picture::FIELD_NONE;
+
+  vaapi_wrapper_->DestroyPendingBuffers();
+
+  ref_pic_list0_.clear();
+  ref_pic_list1_.clear();
+
+  for (DecSurfacesInUse::iterator it = decode_surfaces_in_use_.begin();
+       it != decode_surfaces_in_use_.end(); ) {
+    int poc = it->second->poc();
+    // Must be incremented before UnassignSurfaceFromPoC as this call
+    // invalidates |it|.
+    ++it;
+    UnassignSurfaceFromPoC(poc);
+  }
+  DCHECK(decode_surfaces_in_use_.empty());
+
+  dpb_.Clear();
+  parser_.Reset();
+  last_output_poc_ = std::numeric_limits<int>::min();
+
+  // If we are in kDecoding, we can resume without processing an SPS.
+  if (state_ == kDecoding)
+    state_ = kAfterReset;
+}
+
+void VaapiH264Decoder::ReuseSurface(
+    const scoped_refptr<VASurface>& va_surface) {
+  available_va_surfaces_.push_back(va_surface);
+}
+
+// Fill |va_pic| with default/neutral values.
+static void InitVAPicture(VAPictureH264* va_pic) {
+  memset(va_pic, 0, sizeof(*va_pic));
+  va_pic->picture_id = VA_INVALID_ID;
+  va_pic->flags = VA_PICTURE_H264_INVALID;
+}
+
+void VaapiH264Decoder::FillVAPicture(VAPictureH264 *va_pic, H264Picture* pic) {
+  DCHECK(pic);
+
+  DecodeSurface* dec_surface = DecodeSurfaceByPoC(pic->pic_order_cnt);
+  if (!dec_surface) {
+    // Cannot provide a ref picture, will corrupt output, but may be able
+    // to recover.
+    InitVAPicture(va_pic);
+    return;
+  }
+
+  va_pic->picture_id = dec_surface->va_surface()->id();
+  va_pic->frame_idx = pic->frame_num;
+  va_pic->flags = 0;
+
+  switch (pic->field) {
+    case H264Picture::FIELD_NONE:
+      break;
+    case H264Picture::FIELD_TOP:
+      va_pic->flags |= VA_PICTURE_H264_TOP_FIELD;
+      break;
+    case H264Picture::FIELD_BOTTOM:
+      va_pic->flags |= VA_PICTURE_H264_BOTTOM_FIELD;
+      break;
+  }
+
+  if (pic->ref) {
+    va_pic->flags |= pic->long_term ? VA_PICTURE_H264_LONG_TERM_REFERENCE
+                                    : VA_PICTURE_H264_SHORT_TERM_REFERENCE;
+  }
+
+  va_pic->TopFieldOrderCnt = pic->top_field_order_cnt;
+  va_pic->BottomFieldOrderCnt = pic->bottom_field_order_cnt;
+}
+
+int VaapiH264Decoder::FillVARefFramesFromDPB(VAPictureH264 *va_pics,
+                                             int num_pics) {
+  H264DPB::Pictures::reverse_iterator rit;
+  int i;
+
+  // Return reference frames in reverse order of insertion.
+  // Libva does not document this, but other implementations (e.g. mplayer)
+  // do it this way as well.
+  for (rit = dpb_.rbegin(), i = 0; rit != dpb_.rend() && i < num_pics; ++rit) {
+    if ((*rit)->ref)
+      FillVAPicture(&va_pics[i++], *rit);
+  }
+
+  return i;
+}
+
+VaapiH264Decoder::DecodeSurface* VaapiH264Decoder::DecodeSurfaceByPoC(int poc) {
+  DecSurfacesInUse::iterator iter = decode_surfaces_in_use_.find(poc);
+  if (iter == decode_surfaces_in_use_.end()) {
+    DVLOG(1) << "Could not find surface assigned to POC: " << poc;
+    return NULL;
+  }
+
+  return iter->second.get();
+}
+
+bool VaapiH264Decoder::AssignSurfaceToPoC(int32 input_id, int poc) {
+  if (available_va_surfaces_.empty()) {
+    DVLOG(1) << "No VA Surfaces available";
+    return false;
+  }
+
+  linked_ptr<DecodeSurface> dec_surface(new DecodeSurface(
+      poc, input_id, available_va_surfaces_.back()));
+  available_va_surfaces_.pop_back();
+
+  DVLOG(4) << "POC " << poc
+           << " will use surface " << dec_surface->va_surface()->id();
+
+  bool inserted = decode_surfaces_in_use_.insert(
+      std::make_pair(poc, dec_surface)).second;
+  DCHECK(inserted);
+
+  return true;
+}
+
+void VaapiH264Decoder::UnassignSurfaceFromPoC(int poc) {
+  DecSurfacesInUse::iterator it = decode_surfaces_in_use_.find(poc);
+  if (it == decode_surfaces_in_use_.end()) {
+    DVLOG(1) << "Asked to unassign an unassigned POC " << poc;
+    return;
+  }
+
+  DVLOG(4) << "POC " << poc << " no longer using VA surface "
+           << it->second->va_surface()->id();
+
+  decode_surfaces_in_use_.erase(it);
+}
+
+bool VaapiH264Decoder::SendPPS() {
+  const media::H264PPS* pps = parser_.GetPPS(curr_pps_id_);
+  DCHECK(pps);
+
+  const media::H264SPS* sps = parser_.GetSPS(pps->seq_parameter_set_id);
+  DCHECK(sps);
+
+  DCHECK(curr_pic_.get());
+
+  VAPictureParameterBufferH264 pic_param;
+  memset(&pic_param, 0, sizeof(VAPictureParameterBufferH264));
+
+#define FROM_SPS_TO_PP(a) pic_param.a = sps->a;
+#define FROM_SPS_TO_PP2(a, b) pic_param.b = sps->a;
+  FROM_SPS_TO_PP2(pic_width_in_mbs_minus1, picture_width_in_mbs_minus1);
+  // This assumes non-interlaced video
+  FROM_SPS_TO_PP2(pic_height_in_map_units_minus1,
+                  picture_height_in_mbs_minus1);
+  FROM_SPS_TO_PP(bit_depth_luma_minus8);
+  FROM_SPS_TO_PP(bit_depth_chroma_minus8);
+#undef FROM_SPS_TO_PP
+#undef FROM_SPS_TO_PP2
+
+#define FROM_SPS_TO_PP_SF(a) pic_param.seq_fields.bits.a = sps->a;
+#define FROM_SPS_TO_PP_SF2(a, b) pic_param.seq_fields.bits.b = sps->a;
+  FROM_SPS_TO_PP_SF(chroma_format_idc);
+  FROM_SPS_TO_PP_SF2(separate_colour_plane_flag,
+                     residual_colour_transform_flag);
+  FROM_SPS_TO_PP_SF(gaps_in_frame_num_value_allowed_flag);
+  FROM_SPS_TO_PP_SF(frame_mbs_only_flag);
+  FROM_SPS_TO_PP_SF(mb_adaptive_frame_field_flag);
+  FROM_SPS_TO_PP_SF(direct_8x8_inference_flag);
+  pic_param.seq_fields.bits.MinLumaBiPredSize8x8 = (sps->level_idc >= 31);
+  FROM_SPS_TO_PP_SF(log2_max_frame_num_minus4);
+  FROM_SPS_TO_PP_SF(pic_order_cnt_type);
+  FROM_SPS_TO_PP_SF(log2_max_pic_order_cnt_lsb_minus4);
+  FROM_SPS_TO_PP_SF(delta_pic_order_always_zero_flag);
+#undef FROM_SPS_TO_PP_SF
+#undef FROM_SPS_TO_PP_SF2
+
+#define FROM_PPS_TO_PP(a) pic_param.a = pps->a;
+  FROM_PPS_TO_PP(num_slice_groups_minus1);
+  pic_param.slice_group_map_type = 0;
+  pic_param.slice_group_change_rate_minus1 = 0;
+  FROM_PPS_TO_PP(pic_init_qp_minus26);
+  FROM_PPS_TO_PP(pic_init_qs_minus26);
+  FROM_PPS_TO_PP(chroma_qp_index_offset);
+  FROM_PPS_TO_PP(second_chroma_qp_index_offset);
+#undef FROM_PPS_TO_PP
+
+#define FROM_PPS_TO_PP_PF(a) pic_param.pic_fields.bits.a = pps->a;
+#define FROM_PPS_TO_PP_PF2(a, b) pic_param.pic_fields.bits.b = pps->a;
+  FROM_PPS_TO_PP_PF(entropy_coding_mode_flag);
+  FROM_PPS_TO_PP_PF(weighted_pred_flag);
+  FROM_PPS_TO_PP_PF(weighted_bipred_idc);
+  FROM_PPS_TO_PP_PF(transform_8x8_mode_flag);
+
+  pic_param.pic_fields.bits.field_pic_flag = 0;
+  FROM_PPS_TO_PP_PF(constrained_intra_pred_flag);
+  FROM_PPS_TO_PP_PF2(bottom_field_pic_order_in_frame_present_flag,
+                pic_order_present_flag);
+  FROM_PPS_TO_PP_PF(deblocking_filter_control_present_flag);
+  FROM_PPS_TO_PP_PF(redundant_pic_cnt_present_flag);
+  pic_param.pic_fields.bits.reference_pic_flag = curr_pic_->ref;
+#undef FROM_PPS_TO_PP_PF
+#undef FROM_PPS_TO_PP_PF2
+
+  pic_param.frame_num = curr_pic_->frame_num;
+
+  InitVAPicture(&pic_param.CurrPic);
+  FillVAPicture(&pic_param.CurrPic, curr_pic_.get());
+
+  // Init reference pictures' array.
+  for (int i = 0; i < 16; ++i)
+    InitVAPicture(&pic_param.ReferenceFrames[i]);
+
+  // And fill it with picture info from DPB.
+  FillVARefFramesFromDPB(pic_param.ReferenceFrames,
+                         arraysize(pic_param.ReferenceFrames));
+
+  pic_param.num_ref_frames = sps->max_num_ref_frames;
+
+  return vaapi_wrapper_->SubmitBuffer(VAPictureParameterBufferType,
+                                      sizeof(VAPictureParameterBufferH264),
+                                      &pic_param);
+}
+
+bool VaapiH264Decoder::SendIQMatrix() {
+  const media::H264PPS* pps = parser_.GetPPS(curr_pps_id_);
+  DCHECK(pps);
+
+  VAIQMatrixBufferH264 iq_matrix_buf;
+  memset(&iq_matrix_buf, 0, sizeof(VAIQMatrixBufferH264));
+
+  if (pps->pic_scaling_matrix_present_flag) {
+    for (int i = 0; i < 6; ++i) {
+      for (int j = 0; j < 16; ++j)
+        iq_matrix_buf.ScalingList4x4[i][j] = pps->scaling_list4x4[i][j];
+    }
+
+    for (int i = 0; i < 2; ++i) {
+      for (int j = 0; j < 64; ++j)
+        iq_matrix_buf.ScalingList8x8[i][j] = pps->scaling_list8x8[i][j];
+    }
+  } else {
+    const media::H264SPS* sps = parser_.GetSPS(pps->seq_parameter_set_id);
+    DCHECK(sps);
+    for (int i = 0; i < 6; ++i) {
+      for (int j = 0; j < 16; ++j)
+        iq_matrix_buf.ScalingList4x4[i][j] = sps->scaling_list4x4[i][j];
+    }
+
+    for (int i = 0; i < 2; ++i) {
+      for (int j = 0; j < 64; ++j)
+        iq_matrix_buf.ScalingList8x8[i][j] = sps->scaling_list8x8[i][j];
+    }
+  }
+
+  return vaapi_wrapper_->SubmitBuffer(VAIQMatrixBufferType,
+                                      sizeof(VAIQMatrixBufferH264),
+                                      &iq_matrix_buf);
+}
+
+bool VaapiH264Decoder::SendVASliceParam(media::H264SliceHeader* slice_hdr) {
+  const media::H264PPS* pps = parser_.GetPPS(slice_hdr->pic_parameter_set_id);
+  DCHECK(pps);
+
+  const media::H264SPS* sps = parser_.GetSPS(pps->seq_parameter_set_id);
+  DCHECK(sps);
+
+  VASliceParameterBufferH264 slice_param;
+  memset(&slice_param, 0, sizeof(VASliceParameterBufferH264));
+
+  slice_param.slice_data_size = slice_hdr->nalu_size;
+  slice_param.slice_data_offset = 0;
+  slice_param.slice_data_flag = VA_SLICE_DATA_FLAG_ALL;
+  slice_param.slice_data_bit_offset = slice_hdr->header_bit_size;
+
+#define SHDRToSP(a) slice_param.a = slice_hdr->a;
+  SHDRToSP(first_mb_in_slice);
+  slice_param.slice_type = slice_hdr->slice_type % 5;
+  SHDRToSP(direct_spatial_mv_pred_flag);
+
+  // TODO posciak: make sure parser sets those even when override flags
+  // in slice header is off.
+  SHDRToSP(num_ref_idx_l0_active_minus1);
+  SHDRToSP(num_ref_idx_l1_active_minus1);
+  SHDRToSP(cabac_init_idc);
+  SHDRToSP(slice_qp_delta);
+  SHDRToSP(disable_deblocking_filter_idc);
+  SHDRToSP(slice_alpha_c0_offset_div2);
+  SHDRToSP(slice_beta_offset_div2);
+
+  if (((slice_hdr->IsPSlice() || slice_hdr->IsSPSlice()) &&
+       pps->weighted_pred_flag) ||
+      (slice_hdr->IsBSlice() && pps->weighted_bipred_idc == 1)) {
+    SHDRToSP(luma_log2_weight_denom);
+    SHDRToSP(chroma_log2_weight_denom);
+
+    SHDRToSP(luma_weight_l0_flag);
+    SHDRToSP(luma_weight_l1_flag);
+
+    SHDRToSP(chroma_weight_l0_flag);
+    SHDRToSP(chroma_weight_l1_flag);
+
+    for (int i = 0; i <= slice_param.num_ref_idx_l0_active_minus1; ++i) {
+      slice_param.luma_weight_l0[i] =
+          slice_hdr->pred_weight_table_l0.luma_weight[i];
+      slice_param.luma_offset_l0[i] =
+          slice_hdr->pred_weight_table_l0.luma_offset[i];
+
+      for (int j = 0; j < 2; ++j) {
+        slice_param.chroma_weight_l0[i][j] =
+            slice_hdr->pred_weight_table_l0.chroma_weight[i][j];
+        slice_param.chroma_offset_l0[i][j] =
+            slice_hdr->pred_weight_table_l0.chroma_offset[i][j];
+      }
+    }
+
+    if (slice_hdr->IsBSlice()) {
+      for (int i = 0; i <= slice_param.num_ref_idx_l1_active_minus1; ++i) {
+        slice_param.luma_weight_l1[i] =
+            slice_hdr->pred_weight_table_l1.luma_weight[i];
+        slice_param.luma_offset_l1[i] =
+            slice_hdr->pred_weight_table_l1.luma_offset[i];
+
+        for (int j = 0; j < 2; ++j) {
+          slice_param.chroma_weight_l1[i][j] =
+              slice_hdr->pred_weight_table_l1.chroma_weight[i][j];
+          slice_param.chroma_offset_l1[i][j] =
+              slice_hdr->pred_weight_table_l1.chroma_offset[i][j];
+        }
+      }
+    }
+  }
+
+  for (int i = 0; i < 32; ++i) {
+    InitVAPicture(&slice_param.RefPicList0[i]);
+    InitVAPicture(&slice_param.RefPicList1[i]);
+  }
+
+  int i;
+  H264Picture::PtrVector::iterator it;
+  for (it = ref_pic_list0_.begin(), i = 0; it != ref_pic_list0_.end() && *it;
+       ++it, ++i)
+    FillVAPicture(&slice_param.RefPicList0[i], *it);
+  for (it = ref_pic_list1_.begin(), i = 0; it != ref_pic_list1_.end() && *it;
+       ++it, ++i)
+    FillVAPicture(&slice_param.RefPicList1[i], *it);
+
+  return vaapi_wrapper_->SubmitBuffer(VASliceParameterBufferType,
+                                      sizeof(VASliceParameterBufferH264),
+                                      &slice_param);
+}
+
+bool VaapiH264Decoder::SendSliceData(const uint8* ptr, size_t size) {
+  // Can't help it, blame libva...
+  void* non_const_ptr = const_cast<uint8*>(ptr);
+  return vaapi_wrapper_->SubmitBuffer(VASliceDataBufferType, size,
+                                      non_const_ptr);
+}
+
+bool VaapiH264Decoder::PrepareRefPicLists(media::H264SliceHeader* slice_hdr) {
+  ref_pic_list0_.clear();
+  ref_pic_list1_.clear();
+
+  // Fill reference picture lists for B and S/SP slices.
+  if (slice_hdr->IsPSlice() || slice_hdr->IsSPSlice()) {
+    ConstructReferencePicListsP(slice_hdr);
+    return ModifyReferencePicList(slice_hdr, 0);
+  }
+
+  if (slice_hdr->IsBSlice()) {
+    ConstructReferencePicListsB(slice_hdr);
+    return ModifyReferencePicList(slice_hdr, 0) &&
+        ModifyReferencePicList(slice_hdr, 1);
+  }
+
+  return true;
+}
+
+bool VaapiH264Decoder::QueueSlice(media::H264SliceHeader* slice_hdr) {
+  DCHECK(curr_pic_.get());
+
+  if (!PrepareRefPicLists(slice_hdr))
+    return false;
+
+  if (!SendVASliceParam(slice_hdr))
+    return false;
+
+  if (!SendSliceData(slice_hdr->nalu_data, slice_hdr->nalu_size))
+    return false;
+
+  return true;
+}
+
+// TODO(posciak) start using vaMapBuffer instead of vaCreateBuffer wherever
+// possible.
+bool VaapiH264Decoder::DecodePicture() {
+  DCHECK(curr_pic_.get());
+
+  DVLOG(4) << "Decoding POC " << curr_pic_->pic_order_cnt;
+  DecodeSurface* dec_surface = DecodeSurfaceByPoC(curr_pic_->pic_order_cnt);
+  if (!dec_surface) {
+    DVLOG(1) << "Asked to decode an invalid POC " << curr_pic_->pic_order_cnt;
+    return false;
+  }
+
+  if (!vaapi_wrapper_->DecodeAndDestroyPendingBuffers(
+      dec_surface->va_surface()->id())) {
+    DVLOG(1) << "Failed decoding picture";
+    return false;
+  }
+
+  return true;
+}
+
+bool VaapiH264Decoder::InitCurrPicture(media::H264SliceHeader* slice_hdr) {
+  DCHECK(curr_pic_.get());
+
+  memset(curr_pic_.get(), 0, sizeof(H264Picture));
+
+  curr_pic_->idr = slice_hdr->idr_pic_flag;
+
+  if (slice_hdr->field_pic_flag) {
+    curr_pic_->field = slice_hdr->bottom_field_flag ? H264Picture::FIELD_BOTTOM
+                                                    : H264Picture::FIELD_TOP;
+  } else {
+    curr_pic_->field = H264Picture::FIELD_NONE;
+  }
+
+  curr_pic_->ref = slice_hdr->nal_ref_idc != 0;
+  // This assumes non-interlaced stream.
+  curr_pic_->frame_num = curr_pic_->pic_num = slice_hdr->frame_num;
+
+  if (!CalculatePicOrderCounts(slice_hdr))
+    return false;
+
+  // Try to get an empty surface to decode this picture to.
+  if (!AssignSurfaceToPoC(curr_input_id_, curr_pic_->pic_order_cnt)) {
+    DVLOG(1) << "Failed getting a free surface for a picture";
+    return false;
+  }
+
+  curr_pic_->long_term_reference_flag = slice_hdr->long_term_reference_flag;
+  curr_pic_->adaptive_ref_pic_marking_mode_flag =
+      slice_hdr->adaptive_ref_pic_marking_mode_flag;
+
+  // If the slice header indicates we will have to perform reference marking
+  // process after this picture is decoded, store required data for that
+  // purpose.
+  if (slice_hdr->adaptive_ref_pic_marking_mode_flag) {
+    COMPILE_ASSERT(sizeof(curr_pic_->ref_pic_marking) ==
+                   sizeof(slice_hdr->ref_pic_marking),
+                   ref_pic_marking_array_sizes_do_not_match);
+    memcpy(curr_pic_->ref_pic_marking, slice_hdr->ref_pic_marking,
+           sizeof(curr_pic_->ref_pic_marking));
+  }
+
+  return true;
+}
+
+bool VaapiH264Decoder::CalculatePicOrderCounts(
+    media::H264SliceHeader* slice_hdr) {
+  DCHECK_NE(curr_sps_id_, -1);
+  const media::H264SPS* sps = parser_.GetSPS(curr_sps_id_);
+
+  int pic_order_cnt_lsb = slice_hdr->pic_order_cnt_lsb;
+  curr_pic_->pic_order_cnt_lsb = pic_order_cnt_lsb;
+
+  switch (sps->pic_order_cnt_type) {
+    case 0:
+      // See spec 8.2.1.1.
+      int prev_pic_order_cnt_msb, prev_pic_order_cnt_lsb;
+      if (slice_hdr->idr_pic_flag) {
+        prev_pic_order_cnt_msb = prev_pic_order_cnt_lsb = 0;
+      } else {
+        if (prev_ref_has_memmgmnt5_) {
+          if (prev_ref_field_ != H264Picture::FIELD_BOTTOM) {
+            prev_pic_order_cnt_msb = 0;
+            prev_pic_order_cnt_lsb = prev_ref_top_field_order_cnt_;
+          } else {
+            prev_pic_order_cnt_msb = 0;
+            prev_pic_order_cnt_lsb = 0;
+          }
+        } else {
+          prev_pic_order_cnt_msb = prev_ref_pic_order_cnt_msb_;
+          prev_pic_order_cnt_lsb = prev_ref_pic_order_cnt_lsb_;
+        }
+      }
+
+      DCHECK_NE(max_pic_order_cnt_lsb_, 0);
+      if ((pic_order_cnt_lsb < prev_pic_order_cnt_lsb) &&
+          (prev_pic_order_cnt_lsb - pic_order_cnt_lsb >=
+           max_pic_order_cnt_lsb_ / 2)) {
+        curr_pic_->pic_order_cnt_msb = prev_pic_order_cnt_msb +
+          max_pic_order_cnt_lsb_;
+      } else if ((pic_order_cnt_lsb > prev_pic_order_cnt_lsb) &&
+          (pic_order_cnt_lsb - prev_pic_order_cnt_lsb >
+           max_pic_order_cnt_lsb_ / 2)) {
+        curr_pic_->pic_order_cnt_msb = prev_pic_order_cnt_msb -
+          max_pic_order_cnt_lsb_;
+      } else {
+        curr_pic_->pic_order_cnt_msb = prev_pic_order_cnt_msb;
+      }
+
+      if (curr_pic_->field != H264Picture::FIELD_BOTTOM) {
+        curr_pic_->top_field_order_cnt = curr_pic_->pic_order_cnt_msb +
+          pic_order_cnt_lsb;
+      }
+
+      if (curr_pic_->field != H264Picture::FIELD_TOP) {
+        // TODO posciak: perhaps replace with pic->field?
+        if (!slice_hdr->field_pic_flag) {
+          curr_pic_->bottom_field_order_cnt = curr_pic_->top_field_order_cnt +
+            slice_hdr->delta_pic_order_cnt_bottom;
+        } else {
+          curr_pic_->bottom_field_order_cnt = curr_pic_->pic_order_cnt_msb +
+            pic_order_cnt_lsb;
+        }
+      }
+      break;
+
+    case 1: {
+      // See spec 8.2.1.2.
+      if (prev_has_memmgmnt5_)
+        prev_frame_num_offset_ = 0;
+
+      if (slice_hdr->idr_pic_flag)
+        curr_pic_->frame_num_offset = 0;
+      else if (prev_frame_num_ > slice_hdr->frame_num)
+        curr_pic_->frame_num_offset = prev_frame_num_offset_ + max_frame_num_;
+      else
+        curr_pic_->frame_num_offset = prev_frame_num_offset_;
+
+      int abs_frame_num = 0;
+      if (sps->num_ref_frames_in_pic_order_cnt_cycle != 0)
+        abs_frame_num = curr_pic_->frame_num_offset + slice_hdr->frame_num;
+      else
+        abs_frame_num = 0;
+
+      if (slice_hdr->nal_ref_idc == 0 && abs_frame_num > 0)
+        --abs_frame_num;
+
+      int expected_pic_order_cnt = 0;
+      if (abs_frame_num > 0) {
+        if (sps->num_ref_frames_in_pic_order_cnt_cycle == 0) {
+          DVLOG(1) << "Invalid num_ref_frames_in_pic_order_cnt_cycle "
+                   << "in stream";
+          return false;
+        }
+
+        int pic_order_cnt_cycle_cnt = (abs_frame_num - 1) /
+            sps->num_ref_frames_in_pic_order_cnt_cycle;
+        int frame_num_in_pic_order_cnt_cycle = (abs_frame_num - 1) %
+            sps->num_ref_frames_in_pic_order_cnt_cycle;
+
+        expected_pic_order_cnt = pic_order_cnt_cycle_cnt *
+            sps->expected_delta_per_pic_order_cnt_cycle;
+        // frame_num_in_pic_order_cnt_cycle is verified < 255 in parser
+        for (int i = 0; i <= frame_num_in_pic_order_cnt_cycle; ++i)
+          expected_pic_order_cnt += sps->offset_for_ref_frame[i];
+      }
+
+      if (!slice_hdr->nal_ref_idc)
+        expected_pic_order_cnt += sps->offset_for_non_ref_pic;
+
+      if (!slice_hdr->field_pic_flag) {
+        curr_pic_->top_field_order_cnt = expected_pic_order_cnt +
+            slice_hdr->delta_pic_order_cnt[0];
+        curr_pic_->bottom_field_order_cnt = curr_pic_->top_field_order_cnt +
+            sps->offset_for_top_to_bottom_field +
+            slice_hdr->delta_pic_order_cnt[1];
+      } else if (!slice_hdr->bottom_field_flag) {
+        curr_pic_->top_field_order_cnt = expected_pic_order_cnt +
+            slice_hdr->delta_pic_order_cnt[0];
+      } else {
+        curr_pic_->bottom_field_order_cnt = expected_pic_order_cnt +
+            sps->offset_for_top_to_bottom_field +
+            slice_hdr->delta_pic_order_cnt[0];
+      }
+      break;
+    }
+
+    case 2:
+      // See spec 8.2.1.3.
+      if (prev_has_memmgmnt5_)
+        prev_frame_num_offset_ = 0;
+
+      if (slice_hdr->idr_pic_flag)
+        curr_pic_->frame_num_offset = 0;
+      else if (prev_frame_num_ > slice_hdr->frame_num)
+        curr_pic_->frame_num_offset = prev_frame_num_offset_ + max_frame_num_;
+      else
+        curr_pic_->frame_num_offset = prev_frame_num_offset_;
+
+      int temp_pic_order_cnt;
+      if (slice_hdr->idr_pic_flag) {
+        temp_pic_order_cnt = 0;
+      } else if (!slice_hdr->nal_ref_idc) {
+        temp_pic_order_cnt =
+            2 * (curr_pic_->frame_num_offset + slice_hdr->frame_num) - 1;
+      } else {
+        temp_pic_order_cnt = 2 * (curr_pic_->frame_num_offset +
+            slice_hdr->frame_num);
+      }
+
+      if (!slice_hdr->field_pic_flag) {
+        curr_pic_->top_field_order_cnt = temp_pic_order_cnt;
+        curr_pic_->bottom_field_order_cnt = temp_pic_order_cnt;
+      } else if (slice_hdr->bottom_field_flag) {
+        curr_pic_->bottom_field_order_cnt = temp_pic_order_cnt;
+      } else {
+        curr_pic_->top_field_order_cnt = temp_pic_order_cnt;
+      }
+      break;
+
+    default:
+      DVLOG(1) << "Invalid pic_order_cnt_type: " << sps->pic_order_cnt_type;
+      return false;
+  }
+
+  switch (curr_pic_->field) {
+    case H264Picture::FIELD_NONE:
+      curr_pic_->pic_order_cnt = std::min(curr_pic_->top_field_order_cnt,
+                                          curr_pic_->bottom_field_order_cnt);
+      break;
+    case H264Picture::FIELD_TOP:
+      curr_pic_->pic_order_cnt = curr_pic_->top_field_order_cnt;
+      break;
+    case H264Picture::FIELD_BOTTOM:
+      curr_pic_->pic_order_cnt = curr_pic_->bottom_field_order_cnt;
+      break;
+  }
+
+  return true;
+}
+
+void VaapiH264Decoder::UpdatePicNums() {
+  for (H264DPB::Pictures::iterator it = dpb_.begin(); it != dpb_.end(); ++it) {
+    H264Picture* pic = *it;
+    DCHECK(pic);
+    if (!pic->ref)
+      continue;
+
+    // Below assumes non-interlaced stream.
+    DCHECK_EQ(pic->field, H264Picture::FIELD_NONE);
+    if (pic->long_term) {
+      pic->long_term_pic_num = pic->long_term_frame_idx;
+    } else {
+      if (pic->frame_num > frame_num_)
+        pic->frame_num_wrap = pic->frame_num - max_frame_num_;
+      else
+        pic->frame_num_wrap = pic->frame_num;
+
+      pic->pic_num = pic->frame_num_wrap;
+    }
+  }
+}
+
+struct PicNumDescCompare {
+  bool operator()(const H264Picture* a, const H264Picture* b) const {
+    return a->pic_num > b->pic_num;
+  }
+};
+
+struct LongTermPicNumAscCompare {
+  bool operator()(const H264Picture* a, const H264Picture* b) const {
+    return a->long_term_pic_num < b->long_term_pic_num;
+  }
+};
+
+void VaapiH264Decoder::ConstructReferencePicListsP(
+    media::H264SliceHeader* slice_hdr) {
+  // RefPicList0 (8.2.4.2.1) [[1] [2]], where:
+  // [1] shortterm ref pics sorted by descending pic_num,
+  // [2] longterm ref pics by ascending long_term_pic_num.
+  DCHECK(ref_pic_list0_.empty() && ref_pic_list1_.empty());
+  // First get the short ref pics...
+  dpb_.GetShortTermRefPicsAppending(ref_pic_list0_);
+  size_t num_short_refs = ref_pic_list0_.size();
+
+  // and sort them to get [1].
+  std::sort(ref_pic_list0_.begin(), ref_pic_list0_.end(), PicNumDescCompare());
+
+  // Now get long term pics and sort them by long_term_pic_num to get [2].
+  dpb_.GetLongTermRefPicsAppending(ref_pic_list0_);
+  std::sort(ref_pic_list0_.begin() + num_short_refs, ref_pic_list0_.end(),
+            LongTermPicNumAscCompare());
+
+  // Cut off if we have more than requested in slice header.
+  ref_pic_list0_.resize(slice_hdr->num_ref_idx_l0_active_minus1 + 1);
+}
+
+struct POCAscCompare {
+  bool operator()(const H264Picture* a, const H264Picture* b) const {
+    return a->pic_order_cnt < b->pic_order_cnt;
+  }
+};
+
+struct POCDescCompare {
+  bool operator()(const H264Picture* a, const H264Picture* b) const {
+    return a->pic_order_cnt > b->pic_order_cnt;
+  }
+};
+
+void VaapiH264Decoder::ConstructReferencePicListsB(
+    media::H264SliceHeader* slice_hdr) {
+  // RefPicList0 (8.2.4.2.3) [[1] [2] [3]], where:
+  // [1] shortterm ref pics with POC < curr_pic's POC sorted by descending POC,
+  // [2] shortterm ref pics with POC > curr_pic's POC by ascending POC,
+  // [3] longterm ref pics by ascending long_term_pic_num.
+  DCHECK(ref_pic_list0_.empty() && ref_pic_list1_.empty());
+  dpb_.GetShortTermRefPicsAppending(ref_pic_list0_);
+  size_t num_short_refs = ref_pic_list0_.size();
+
+  // First sort ascending, this will put [1] in right place and finish [2].
+  std::sort(ref_pic_list0_.begin(), ref_pic_list0_.end(), POCAscCompare());
+
+  // Find first with POC > curr_pic's POC to get first element in [2]...
+  H264Picture::PtrVector::iterator iter;
+  iter = std::upper_bound(ref_pic_list0_.begin(), ref_pic_list0_.end(),
+                          curr_pic_.get(), POCAscCompare());
+
+  // and sort [1] descending, thus finishing sequence [1] [2].
+  std::sort(ref_pic_list0_.begin(), iter, POCDescCompare());
+
+  // Now add [3] and sort by ascending long_term_pic_num.
+  dpb_.GetLongTermRefPicsAppending(ref_pic_list0_);
+  std::sort(ref_pic_list0_.begin() + num_short_refs, ref_pic_list0_.end(),
+            LongTermPicNumAscCompare());
+
+  // RefPicList1 (8.2.4.2.4) [[1] [2] [3]], where:
+  // [1] shortterm ref pics with POC > curr_pic's POC sorted by ascending POC,
+  // [2] shortterm ref pics with POC < curr_pic's POC by descending POC,
+  // [3] longterm ref pics by ascending long_term_pic_num.
+
+  dpb_.GetShortTermRefPicsAppending(ref_pic_list1_);
+  num_short_refs = ref_pic_list1_.size();
+
+  // First sort by descending POC.
+  std::sort(ref_pic_list1_.begin(), ref_pic_list1_.end(), POCDescCompare());
+
+  // Find first with POC < curr_pic's POC to get first element in [2]...
+  iter = std::upper_bound(ref_pic_list1_.begin(), ref_pic_list1_.end(),
+                          curr_pic_.get(), POCDescCompare());
+
+  // and sort [1] ascending.
+  std::sort(ref_pic_list1_.begin(), iter, POCAscCompare());
+
+  // Now add [3] and sort by ascending long_term_pic_num
+  dpb_.GetShortTermRefPicsAppending(ref_pic_list1_);
+  std::sort(ref_pic_list1_.begin() + num_short_refs, ref_pic_list1_.end(),
+            LongTermPicNumAscCompare());
+
+  // If lists identical, swap first two entries in RefPicList1 (spec 8.2.4.2.3)
+  if (ref_pic_list1_.size() > 1 &&
+      std::equal(ref_pic_list0_.begin(), ref_pic_list0_.end(),
+                 ref_pic_list1_.begin()))
+    std::swap(ref_pic_list1_[0], ref_pic_list1_[1]);
+
+  // Per 8.2.4.2 it's possible for num_ref_idx_lX_active_minus1 to indicate
+  // there should be more ref pics on list than we constructed.
+  // Those superfluous ones should be treated as non-reference.
+  ref_pic_list0_.resize(slice_hdr->num_ref_idx_l0_active_minus1 + 1);
+  ref_pic_list1_.resize(slice_hdr->num_ref_idx_l1_active_minus1 + 1);
+}
+
+// See 8.2.4
+int VaapiH264Decoder::PicNumF(H264Picture *pic) {
+  if (!pic)
+      return -1;
+
+  if (!pic->long_term)
+      return pic->pic_num;
+  else
+      return max_pic_num_;
+}
+
+// See 8.2.4
+int VaapiH264Decoder::LongTermPicNumF(H264Picture *pic) {
+  if (pic->ref && pic->long_term)
+    return pic->long_term_pic_num;
+  else
+    return 2 * (max_long_term_frame_idx_ + 1);
+}
+
+// Shift elements on the |v| starting from |from| to |to|, inclusive,
+// one position to the right and insert pic at |from|.
+static void ShiftRightAndInsert(H264Picture::PtrVector *v,
+                                int from,
+                                int to,
+                                H264Picture* pic) {
+  // Security checks, do not disable in Debug mode.
+  CHECK(from <= to);
+  CHECK(to <= std::numeric_limits<int>::max() - 2);
+  // Additional checks. Debug mode ok.
+  DCHECK(v);
+  DCHECK(pic);
+  DCHECK((to + 1 == static_cast<int>(v->size())) ||
+         (to + 2 == static_cast<int>(v->size())));
+
+  v->resize(to + 2);
+
+  for (int i = to + 1; i > from; --i)
+    (*v)[i] = (*v)[i - 1];
+
+  (*v)[from] = pic;
+}
+
+bool VaapiH264Decoder::ModifyReferencePicList(media::H264SliceHeader* slice_hdr,
+                                              int list) {
+  int num_ref_idx_lX_active_minus1;
+  H264Picture::PtrVector* ref_pic_listx;
+  media::H264ModificationOfPicNum* list_mod;
+
+  // This can process either ref_pic_list0 or ref_pic_list1, depending on
+  // the list argument. Set up pointers to proper list to be processed here.
+  if (list == 0) {
+    if (!slice_hdr->ref_pic_list_modification_flag_l0)
+      return true;
+
+    list_mod = slice_hdr->ref_list_l0_modifications;
+    num_ref_idx_lX_active_minus1 = ref_pic_list0_.size() - 1;
+
+    ref_pic_listx = &ref_pic_list0_;
+  } else {
+    if (!slice_hdr->ref_pic_list_modification_flag_l1)
+      return true;
+
+    list_mod = slice_hdr->ref_list_l1_modifications;
+    num_ref_idx_lX_active_minus1 = ref_pic_list1_.size() - 1;
+
+    ref_pic_listx = &ref_pic_list1_;
+  }
+
+  DCHECK_GE(num_ref_idx_lX_active_minus1, 0);
+
+  // Spec 8.2.4.3:
+  // Reorder pictures on the list in a way specified in the stream.
+  int pic_num_lx_pred = curr_pic_->pic_num;
+  int ref_idx_lx = 0;
+  int pic_num_lx_no_wrap;
+  int pic_num_lx;
+  bool done = false;
+  H264Picture* pic;
+  for (int i = 0; i < media::H264SliceHeader::kRefListModSize && !done; ++i) {
+    switch (list_mod->modification_of_pic_nums_idc) {
+      case 0:
+      case 1:
+        // Modify short reference picture position.
+        if (list_mod->modification_of_pic_nums_idc == 0) {
+          // Subtract given value from predicted PicNum.
+          pic_num_lx_no_wrap = pic_num_lx_pred -
+              (static_cast<int>(list_mod->abs_diff_pic_num_minus1) + 1);
+          // Wrap around max_pic_num_ if it becomes < 0 as result
+          // of subtraction.
+          if (pic_num_lx_no_wrap < 0)
+            pic_num_lx_no_wrap += max_pic_num_;
+        } else {
+          // Add given value to predicted PicNum.
+          pic_num_lx_no_wrap = pic_num_lx_pred +
+              (static_cast<int>(list_mod->abs_diff_pic_num_minus1) + 1);
+          // Wrap around max_pic_num_ if it becomes >= max_pic_num_ as result
+          // of the addition.
+          if (pic_num_lx_no_wrap >= max_pic_num_)
+            pic_num_lx_no_wrap -= max_pic_num_;
+        }
+
+        // For use in next iteration.
+        pic_num_lx_pred = pic_num_lx_no_wrap;
+
+        if (pic_num_lx_no_wrap > curr_pic_->pic_num)
+          pic_num_lx = pic_num_lx_no_wrap - max_pic_num_;
+        else
+          pic_num_lx = pic_num_lx_no_wrap;
+
+        DCHECK_LT(num_ref_idx_lX_active_minus1 + 1,
+                  media::H264SliceHeader::kRefListModSize);
+        pic = dpb_.GetShortRefPicByPicNum(pic_num_lx);
+        if (!pic) {
+          DVLOG(1) << "Malformed stream, no pic num " << pic_num_lx;
+          return false;
+        }
+        ShiftRightAndInsert(ref_pic_listx, ref_idx_lx,
+                            num_ref_idx_lX_active_minus1, pic);
+        ref_idx_lx++;
+
+        for (int src = ref_idx_lx, dst = ref_idx_lx;
+             src <= num_ref_idx_lX_active_minus1 + 1; ++src) {
+          if (PicNumF((*ref_pic_listx)[src]) != pic_num_lx)
+            (*ref_pic_listx)[dst++] = (*ref_pic_listx)[src];
+        }
+        break;
+
+      case 2:
+        // Modify long term reference picture position.
+        DCHECK_LT(num_ref_idx_lX_active_minus1 + 1,
+                  media::H264SliceHeader::kRefListModSize);
+        pic = dpb_.GetLongRefPicByLongTermPicNum(list_mod->long_term_pic_num);
+        if (!pic) {
+          DVLOG(1) << "Malformed stream, no pic num "
+                   << list_mod->long_term_pic_num;
+          return false;
+        }
+        ShiftRightAndInsert(ref_pic_listx, ref_idx_lx,
+                            num_ref_idx_lX_active_minus1, pic);
+        ref_idx_lx++;
+
+        for (int src = ref_idx_lx, dst = ref_idx_lx;
+             src <= num_ref_idx_lX_active_minus1 + 1; ++src) {
+          if (LongTermPicNumF((*ref_pic_listx)[src])
+              != static_cast<int>(list_mod->long_term_pic_num))
+            (*ref_pic_listx)[dst++] = (*ref_pic_listx)[src];
+        }
+        break;
+
+      case 3:
+        // End of modification list.
+        done = true;
+        break;
+
+      default:
+        // May be recoverable.
+        DVLOG(1) << "Invalid modification_of_pic_nums_idc="
+                 << list_mod->modification_of_pic_nums_idc
+                 << " in position " << i;
+        break;
+    }
+
+    ++list_mod;
+  }
+
+  // Per NOTE 2 in 8.2.4.3.2, the ref_pic_listx size in the above loop is
+  // temporarily made one element longer than the required final list.
+  // Resize the list back to its required size.
+  ref_pic_listx->resize(num_ref_idx_lX_active_minus1 + 1);
+
+  return true;
+}
+
+bool VaapiH264Decoder::OutputPic(H264Picture* pic) {
+  DCHECK(!pic->outputted);
+  pic->outputted = true;
+  last_output_poc_ = pic->pic_order_cnt;
+
+  DecodeSurface* dec_surface = DecodeSurfaceByPoC(pic->pic_order_cnt);
+  if (!dec_surface)
+    return false;
+
+  DCHECK_GE(dec_surface->input_id(), 0);
+  DVLOG(4) << "Posting output task for POC: " << pic->pic_order_cnt
+           << " input_id: " << dec_surface->input_id();
+  output_pic_cb_.Run(dec_surface->input_id(), dec_surface->va_surface());
+
+  return true;
+}
+
+void VaapiH264Decoder::ClearDPB() {
+  // Clear DPB contents, marking the pictures as unused first.
+  for (H264DPB::Pictures::iterator it = dpb_.begin(); it != dpb_.end(); ++it)
+    UnassignSurfaceFromPoC((*it)->pic_order_cnt);
+
+  dpb_.Clear();
+  last_output_poc_ = std::numeric_limits<int>::min();
+}
+
+bool VaapiH264Decoder::OutputAllRemainingPics() {
+  // Output all pictures that are waiting to be outputted.
+  FinishPrevFrameIfPresent();
+  H264Picture::PtrVector to_output;
+  dpb_.GetNotOutputtedPicsAppending(to_output);
+  // Sort them by ascending POC to output in order.
+  std::sort(to_output.begin(), to_output.end(), POCAscCompare());
+
+  H264Picture::PtrVector::iterator it;
+  for (it = to_output.begin(); it != to_output.end(); ++it) {
+    if (!OutputPic(*it)) {
+      DVLOG(1) << "Failed to output pic POC: " << (*it)->pic_order_cnt;
+      return false;
+    }
+  }
+
+  return true;
+}
+
+bool VaapiH264Decoder::Flush() {
+  DVLOG(2) << "Decoder flush";
+
+  if (!OutputAllRemainingPics())
+    return false;
+
+  ClearDPB();
+
+  DCHECK(decode_surfaces_in_use_.empty());
+  return true;
+}
+
+bool VaapiH264Decoder::StartNewFrame(media::H264SliceHeader* slice_hdr) {
+  // TODO posciak: add handling of max_num_ref_frames per spec.
+
+  // If the new frame is an IDR, output what's left to output and clear DPB
+  if (slice_hdr->idr_pic_flag) {
+    // (unless we are explicitly instructed not to do so).
+    if (!slice_hdr->no_output_of_prior_pics_flag) {
+      // Output DPB contents.
+      if (!Flush())
+        return false;
+    }
+    dpb_.Clear();
+    last_output_poc_ = std::numeric_limits<int>::min();
+  }
+
+  // curr_pic_ should have either been added to DPB or discarded when finishing
+  // the last frame. DPB is responsible for releasing that memory once it's
+  // not needed anymore.
+  DCHECK(!curr_pic_.get());
+  curr_pic_.reset(new H264Picture);
+  CHECK(curr_pic_.get());
+
+  if (!InitCurrPicture(slice_hdr))
+    return false;
+
+  DCHECK_GT(max_frame_num_, 0);
+
+  UpdatePicNums();
+
+  // Send parameter buffers before each new picture, before the first slice.
+  if (!SendPPS())
+    return false;
+
+  if (!SendIQMatrix())
+    return false;
+
+  if (!QueueSlice(slice_hdr))
+    return false;
+
+  return true;
+}
+
+bool VaapiH264Decoder::HandleMemoryManagementOps() {
+  // 8.2.5.4
+  for (unsigned int i = 0; i < arraysize(curr_pic_->ref_pic_marking); ++i) {
+    // Code below does not support interlaced stream (per-field pictures).
+    media::H264DecRefPicMarking* ref_pic_marking =
+        &curr_pic_->ref_pic_marking[i];
+    H264Picture* to_mark;
+    int pic_num_x;
+
+    switch (ref_pic_marking->memory_mgmnt_control_operation) {
+      case 0:
+        // Normal end of operations' specification.
+        return true;
+
+      case 1:
+        // Mark a short term reference picture as unused so it can be removed
+        // if outputted.
+        pic_num_x = curr_pic_->pic_num -
+            (ref_pic_marking->difference_of_pic_nums_minus1 + 1);
+        to_mark = dpb_.GetShortRefPicByPicNum(pic_num_x);
+        if (to_mark) {
+          to_mark->ref = false;
+        } else {
+          DVLOG(1) << "Invalid short ref pic num to unmark";
+          return false;
+        }
+        break;
+
+      case 2:
+        // Mark a long term reference picture as unused so it can be removed
+        // if outputted.
+        to_mark = dpb_.GetLongRefPicByLongTermPicNum(
+            ref_pic_marking->long_term_pic_num);
+        if (to_mark) {
+          to_mark->ref = false;
+        } else {
+          DVLOG(1) << "Invalid long term ref pic num to unmark";
+          return false;
+        }
+        break;
+
+      case 3:
+        // Mark a short term reference picture as long term reference.
+        pic_num_x = curr_pic_->pic_num -
+            (ref_pic_marking->difference_of_pic_nums_minus1 + 1);
+        to_mark = dpb_.GetShortRefPicByPicNum(pic_num_x);
+        if (to_mark) {
+          DCHECK(to_mark->ref && !to_mark->long_term);
+          to_mark->long_term = true;
+          to_mark->long_term_frame_idx = ref_pic_marking->long_term_frame_idx;
+        } else {
+          DVLOG(1) << "Invalid short term ref pic num to mark as long ref";
+          return false;
+        }
+        break;
+
+      case 4: {
+        // Unmark all reference pictures with long_term_frame_idx over new max.
+        max_long_term_frame_idx_
+            = ref_pic_marking->max_long_term_frame_idx_plus1 - 1;
+        H264Picture::PtrVector long_terms;
+        dpb_.GetLongTermRefPicsAppending(long_terms);
+        for (size_t i = 0; i < long_terms.size(); ++i) {
+          H264Picture* pic = long_terms[i];
+          DCHECK(pic->ref && pic->long_term);
+          // Ok to cast, max_long_term_frame_idx is much smaller than 16bit.
+          if (pic->long_term_frame_idx >
+              static_cast<int>(max_long_term_frame_idx_))
+            pic->ref = false;
+        }
+        break;
+      }
+
+      case 5:
+        // Unmark all reference pictures.
+        dpb_.MarkAllUnusedForRef();
+        max_long_term_frame_idx_ = -1;
+        curr_pic_->mem_mgmt_5 = true;
+        break;
+
+      case 6: {
+        // Replace long term reference pictures with current picture.
+        // First unmark if any existing with this long_term_frame_idx...
+        H264Picture::PtrVector long_terms;
+        dpb_.GetLongTermRefPicsAppending(long_terms);
+        for (size_t i = 0; i < long_terms.size(); ++i) {
+          H264Picture* pic = long_terms[i];
+          DCHECK(pic->ref && pic->long_term);
+          // Ok to cast, long_term_frame_idx is much smaller than 16bit.
+          if (pic->long_term_frame_idx ==
+              static_cast<int>(ref_pic_marking->long_term_frame_idx))
+            pic->ref = false;
+        }
+
+        // and mark the current one instead.
+        curr_pic_->ref = true;
+        curr_pic_->long_term = true;
+        curr_pic_->long_term_frame_idx = ref_pic_marking->long_term_frame_idx;
+        break;
+      }
+
+      default:
+        // Would indicate a bug in parser.
+        NOTREACHED();
+    }
+  }
+
+  return true;
+}
+
+// This method ensures that DPB does not overflow, either by removing
+// reference pictures as specified in the stream, or using a sliding window
+// procedure to remove the oldest one.
+// It also performs marking and unmarking pictures as reference.
+// See spac 8.2.5.1.
+void VaapiH264Decoder::ReferencePictureMarking() {
+  if (curr_pic_->idr) {
+    // If current picture is an IDR, all reference pictures are unmarked.
+    dpb_.MarkAllUnusedForRef();
+
+    if (curr_pic_->long_term_reference_flag) {
+      curr_pic_->long_term = true;
+      curr_pic_->long_term_frame_idx = 0;
+      max_long_term_frame_idx_ = 0;
+    } else {
+      curr_pic_->long_term = false;
+      max_long_term_frame_idx_ = -1;
+    }
+  } else {
+    if (!curr_pic_->adaptive_ref_pic_marking_mode_flag) {
+      // If non-IDR, and the stream does not indicate what we should do to
+      // ensure DPB doesn't overflow, discard oldest picture.
+      // See spec 8.2.5.3.
+      if (curr_pic_->field == H264Picture::FIELD_NONE) {
+        DCHECK_LE(dpb_.CountRefPics(),
+            std::max<int>(parser_.GetSPS(curr_sps_id_)->max_num_ref_frames,
+                          1));
+        if (dpb_.CountRefPics() ==
+            std::max<int>(parser_.GetSPS(curr_sps_id_)->max_num_ref_frames,
+                          1)) {
+          // Max number of reference pics reached,
+          // need to remove one of the short term ones.
+          // Find smallest frame_num_wrap short reference picture and mark
+          // it as unused.
+          H264Picture* to_unmark = dpb_.GetLowestFrameNumWrapShortRefPic();
+          if (to_unmark == NULL) {
+            DVLOG(1) << "Couldn't find a short ref picture to unmark";
+            return;
+          }
+          to_unmark->ref = false;
+        }
+      } else {
+        // Shouldn't get here.
+        DVLOG(1) << "Interlaced video not supported.";
+        report_error_to_uma_cb_.Run(INTERLACED_STREAM);
+      }
+    } else {
+      // Stream has instructions how to discard pictures from DPB and how
+      // to mark/unmark existing reference pictures. Do it.
+      // Spec 8.2.5.4.
+      if (curr_pic_->field == H264Picture::FIELD_NONE) {
+        HandleMemoryManagementOps();
+      } else {
+        // Shouldn't get here.
+        DVLOG(1) << "Interlaced video not supported.";
+        report_error_to_uma_cb_.Run(INTERLACED_STREAM);
+      }
+    }
+  }
+}
+
+bool VaapiH264Decoder::FinishPicture() {
+  DCHECK(curr_pic_.get());
+
+  // Finish processing previous picture.
+  // Start by storing previous reference picture data for later use,
+  // if picture being finished is a reference picture.
+  if (curr_pic_->ref) {
+    ReferencePictureMarking();
+    prev_ref_has_memmgmnt5_ = curr_pic_->mem_mgmt_5;
+    prev_ref_top_field_order_cnt_ = curr_pic_->top_field_order_cnt;
+    prev_ref_pic_order_cnt_msb_ = curr_pic_->pic_order_cnt_msb;
+    prev_ref_pic_order_cnt_lsb_ = curr_pic_->pic_order_cnt_lsb;
+    prev_ref_field_ = curr_pic_->field;
+  }
+  prev_has_memmgmnt5_ = curr_pic_->mem_mgmt_5;
+  prev_frame_num_offset_ = curr_pic_->frame_num_offset;
+
+  // Remove unused (for reference or later output) pictures from DPB, marking
+  // them as such.
+  for (H264DPB::Pictures::iterator it = dpb_.begin(); it != dpb_.end(); ++it) {
+    if ((*it)->outputted && !(*it)->ref)
+      UnassignSurfaceFromPoC((*it)->pic_order_cnt);
+  }
+  dpb_.DeleteUnused();
+
+  DVLOG(4) << "Finishing picture, entries in DPB: " << dpb_.size();
+
+  // Whatever happens below, curr_pic_ will stop managing the pointer to the
+  // picture after this function returns. The ownership will either be
+  // transferred to DPB, if the image is still needed (for output and/or
+  // reference), or the memory will be released if we manage to output it here
+  // without having to store it for future reference.
+  scoped_ptr<H264Picture> pic(curr_pic_.release());
+
+  // Get all pictures that haven't been outputted yet.
+  H264Picture::PtrVector not_outputted;
+  // TODO(posciak): pass as pointer, not reference (violates coding style).
+  dpb_.GetNotOutputtedPicsAppending(not_outputted);
+  // Include the one we've just decoded.
+  not_outputted.push_back(pic.get());
+
+  // Sort in output order.
+  std::sort(not_outputted.begin(), not_outputted.end(), POCAscCompare());
+
+  // Try to output as many pictures as we can. A picture can be output,
+  // if the number of decoded and not yet outputted pictures that would remain
+  // in DPB afterwards would at least be equal to max_num_reorder_frames.
+  // If the outputted picture is not a reference picture, it doesn't have
+  // to remain in the DPB and can be removed.
+  H264Picture::PtrVector::iterator output_candidate = not_outputted.begin();
+  size_t num_remaining = not_outputted.size();
+  while (num_remaining > max_num_reorder_frames_) {
+    int poc = (*output_candidate)->pic_order_cnt;
+    DCHECK_GE(poc, last_output_poc_);
+    if (!OutputPic(*output_candidate))
+      return false;
+
+    if (!(*output_candidate)->ref) {
+      // Current picture hasn't been inserted into DPB yet, so don't remove it
+      // if we managed to output it immediately.
+      if (*output_candidate != pic)
+        dpb_.DeleteByPOC(poc);
+      // Mark as unused.
+      UnassignSurfaceFromPoC(poc);
+    }
+
+    ++output_candidate;
+    --num_remaining;
+  }
+
+  // If we haven't managed to output the picture that we just decoded, or if
+  // it's a reference picture, we have to store it in DPB.
+  if (!pic->outputted || pic->ref) {
+    if (dpb_.IsFull()) {
+      // If we haven't managed to output anything to free up space in DPB
+      // to store this picture, it's an error in the stream.
+      DVLOG(1) << "Could not free up space in DPB!";
+      return false;
+    }
+
+    dpb_.StorePic(pic.release());
+  }
+
+  return true;
+}
+
+static int LevelToMaxDpbMbs(int level) {
+  // See table A-1 in spec.
+  switch (level) {
+    case 10: return 396;
+    case 11: return 900;
+    case 12: //  fallthrough
+    case 13: //  fallthrough
+    case 20: return 2376;
+    case 21: return 4752;
+    case 22: //  fallthrough
+    case 30: return 8100;
+    case 31: return 18000;
+    case 32: return 20480;
+    case 40: //  fallthrough
+    case 41: return 32768;
+    case 42: return 34816;
+    case 50: return 110400;
+    case 51: //  fallthrough
+    case 52: return 184320;
+    default:
+      DVLOG(1) << "Invalid codec level (" << level << ")";
+      return 0;
+  }
+}
+
+bool VaapiH264Decoder::UpdateMaxNumReorderFrames(const media::H264SPS* sps) {
+  if (sps->vui_parameters_present_flag && sps->bitstream_restriction_flag) {
+    max_num_reorder_frames_ =
+        base::checked_cast<size_t>(sps->max_num_reorder_frames);
+    if (max_num_reorder_frames_ > dpb_.max_num_pics()) {
+      DVLOG(1)
+          << "max_num_reorder_frames present, but larger than MaxDpbFrames ("
+          << max_num_reorder_frames_ << " > " << dpb_.max_num_pics() << ")";
+      max_num_reorder_frames_ = 0;
+      return false;
+    }
+    return true;
+  }
+
+  // max_num_reorder_frames not present, infer from profile/constraints
+  // (see VUI semantics in spec).
+  if (sps->constraint_set3_flag) {
+    switch (sps->profile_idc) {
+      case 44:
+      case 86:
+      case 100:
+      case 110:
+      case 122:
+      case 244:
+        max_num_reorder_frames_ = 0;
+        break;
+      default:
+        max_num_reorder_frames_ = dpb_.max_num_pics();
+        break;
+    }
+  } else {
+    max_num_reorder_frames_ = dpb_.max_num_pics();
+  }
+
+  return true;
+}
+
+bool VaapiH264Decoder::ProcessSPS(int sps_id, bool* need_new_buffers) {
+  const media::H264SPS* sps = parser_.GetSPS(sps_id);
+  DCHECK(sps);
+  DVLOG(4) << "Processing SPS";
+
+  *need_new_buffers = false;
+
+  if (sps->frame_mbs_only_flag == 0) {
+    DVLOG(1) << "frame_mbs_only_flag != 1 not supported";
+    report_error_to_uma_cb_.Run(FRAME_MBS_ONLY_FLAG_NOT_ONE);
+    return false;
+  }
+
+  if (sps->gaps_in_frame_num_value_allowed_flag) {
+    DVLOG(1) << "Gaps in frame numbers not supported";
+    report_error_to_uma_cb_.Run(GAPS_IN_FRAME_NUM);
+    return false;
+  }
+
+  curr_sps_id_ = sps->seq_parameter_set_id;
+
+  // Calculate picture height/width in macroblocks and pixels
+  // (spec 7.4.2.1.1, 7.4.3).
+  int width_mb = sps->pic_width_in_mbs_minus1 + 1;
+  int height_mb = (2 - sps->frame_mbs_only_flag) *
+      (sps->pic_height_in_map_units_minus1 + 1);
+
+  gfx::Size new_pic_size(16 * width_mb, 16 * height_mb);
+  if (new_pic_size.IsEmpty()) {
+    DVLOG(1) << "Invalid picture size: " << new_pic_size.ToString();
+    return false;
+  }
+
+  if (!pic_size_.IsEmpty() && new_pic_size == pic_size_) {
+    // Already have surfaces and this SPS keeps the same resolution,
+    // no need to request a new set.
+    return true;
+  }
+
+  pic_size_ = new_pic_size;
+  DVLOG(1) << "New picture size: " << pic_size_.ToString();
+
+  max_pic_order_cnt_lsb_ = 1 << (sps->log2_max_pic_order_cnt_lsb_minus4 + 4);
+  max_frame_num_ = 1 << (sps->log2_max_frame_num_minus4 + 4);
+
+  int level = sps->level_idc;
+  int max_dpb_mbs = LevelToMaxDpbMbs(level);
+  if (max_dpb_mbs == 0)
+    return false;
+
+  size_t max_dpb_size = std::min(max_dpb_mbs / (width_mb * height_mb),
+                                 static_cast<int>(H264DPB::kDPBMaxSize));
+  DVLOG(1) << "Codec level: " << level << ", DPB size: " << max_dpb_size;
+  if (max_dpb_size == 0) {
+    DVLOG(1) << "Invalid DPB Size";
+    return false;
+  }
+
+  dpb_.set_max_num_pics(max_dpb_size);
+
+  if (!UpdateMaxNumReorderFrames(sps))
+    return false;
+  DVLOG(1) << "max_num_reorder_frames: " << max_num_reorder_frames_;
+
+  *need_new_buffers = true;
+  return true;
+}
+
+bool VaapiH264Decoder::ProcessPPS(int pps_id) {
+  const media::H264PPS* pps = parser_.GetPPS(pps_id);
+  DCHECK(pps);
+
+  curr_pps_id_ = pps->pic_parameter_set_id;
+
+  return true;
+}
+
+bool VaapiH264Decoder::FinishPrevFrameIfPresent() {
+  // If we already have a frame waiting to be decoded, decode it and finish.
+  if (curr_pic_ != NULL) {
+    if (!DecodePicture())
+      return false;
+    return FinishPicture();
+  }
+
+  return true;
+}
+
+bool VaapiH264Decoder::ProcessSlice(media::H264SliceHeader* slice_hdr) {
+  prev_frame_num_ = frame_num_;
+  frame_num_ = slice_hdr->frame_num;
+
+  if (prev_frame_num_ > 0 && prev_frame_num_ < frame_num_ - 1) {
+    DVLOG(1) << "Gap in frame_num!";
+    report_error_to_uma_cb_.Run(GAPS_IN_FRAME_NUM);
+    return false;
+  }
+
+  if (slice_hdr->field_pic_flag == 0)
+    max_pic_num_ = max_frame_num_;
+  else
+    max_pic_num_ = 2 * max_frame_num_;
+
+  // TODO posciak: switch to new picture detection per 7.4.1.2.4.
+  if (curr_pic_ != NULL && slice_hdr->first_mb_in_slice != 0) {
+    // This is just some more slice data of the current picture, so
+    // just queue it and return.
+    QueueSlice(slice_hdr);
+    return true;
+  } else {
+    // A new frame, so first finish the previous one before processing it...
+    if (!FinishPrevFrameIfPresent())
+      return false;
+
+    // and then start a new one.
+    return StartNewFrame(slice_hdr);
+  }
+}
+
+#define SET_ERROR_AND_RETURN()             \
+  do {                                     \
+    DVLOG(1) << "Error during decode";     \
+    state_ = kError;                       \
+    return VaapiH264Decoder::kDecodeError; \
+  } while (0)
+
+void VaapiH264Decoder::SetStream(const uint8* ptr,
+                                 size_t size,
+                                 int32 input_id) {
+  DCHECK(ptr);
+  DCHECK(size);
+
+  // Got new input stream data from the client.
+  DVLOG(4) << "New input stream id: " << input_id << " at: " << (void*) ptr
+           << " size:  " << size;
+  parser_.SetStream(ptr, size);
+  curr_input_id_ = input_id;
+}
+
+VaapiH264Decoder::DecResult VaapiH264Decoder::Decode() {
+  media::H264Parser::Result par_res;
+  media::H264NALU nalu;
+  DCHECK_NE(state_, kError);
+
+  while (1) {
+    // If we've already decoded some of the stream (after reset, i.e. we are
+    // not in kNeedStreamMetadata state), we may be able to go back into
+    // decoding state not only starting at/resuming from an SPS, but also from
+    // other resume points, such as IDRs. In the latter case we need an output
+    // surface, because we will end up decoding that IDR in the process.
+    // Otherwise we just look for an SPS and don't produce any output frames.
+    if (state_ != kNeedStreamMetadata && available_va_surfaces_.empty()) {
+      DVLOG(4) << "No output surfaces available";
+      return kRanOutOfSurfaces;
+    }
+
+    par_res = parser_.AdvanceToNextNALU(&nalu);
+    if (par_res == media::H264Parser::kEOStream)
+      return kRanOutOfStreamData;
+    else if (par_res != media::H264Parser::kOk)
+      SET_ERROR_AND_RETURN();
+
+    DVLOG(4) << "NALU found: " << static_cast<int>(nalu.nal_unit_type);
+
+    switch (nalu.nal_unit_type) {
+      case media::H264NALU::kNonIDRSlice:
+        // We can't resume from a non-IDR slice.
+        if (state_ != kDecoding)
+          break;
+        // else fallthrough
+      case media::H264NALU::kIDRSlice: {
+        // TODO(posciak): the IDR may require an SPS that we don't have
+        // available. For now we'd fail if that happens, but ideally we'd like
+        // to keep going until the next SPS in the stream.
+        if (state_ == kNeedStreamMetadata) {
+          // We need an SPS, skip this IDR and keep looking.
+          break;
+        }
+
+        // If after reset, we should be able to recover from an IDR.
+        media::H264SliceHeader slice_hdr;
+
+        par_res = parser_.ParseSliceHeader(nalu, &slice_hdr);
+        if (par_res != media::H264Parser::kOk)
+          SET_ERROR_AND_RETURN();
+
+        if (!ProcessSlice(&slice_hdr))
+          SET_ERROR_AND_RETURN();
+
+        state_ = kDecoding;
+        break;
+      }
+
+      case media::H264NALU::kSPS: {
+        int sps_id;
+
+        if (!FinishPrevFrameIfPresent())
+          SET_ERROR_AND_RETURN();
+
+        par_res = parser_.ParseSPS(&sps_id);
+        if (par_res != media::H264Parser::kOk)
+          SET_ERROR_AND_RETURN();
+
+        bool need_new_buffers = false;
+        if (!ProcessSPS(sps_id, &need_new_buffers))
+          SET_ERROR_AND_RETURN();
+
+        state_ = kDecoding;
+
+        if (need_new_buffers) {
+          if (!Flush())
+            return kDecodeError;
+
+          available_va_surfaces_.clear();
+          return kAllocateNewSurfaces;
+        }
+        break;
+      }
+
+      case media::H264NALU::kPPS: {
+        if (state_ != kDecoding)
+          break;
+
+        int pps_id;
+
+        if (!FinishPrevFrameIfPresent())
+          SET_ERROR_AND_RETURN();
+
+        par_res = parser_.ParsePPS(&pps_id);
+        if (par_res != media::H264Parser::kOk)
+          SET_ERROR_AND_RETURN();
+
+        if (!ProcessPPS(pps_id))
+          SET_ERROR_AND_RETURN();
+        break;
+      }
+
+      default:
+        DVLOG(4) << "Skipping NALU type: " << nalu.nal_unit_type;
+        break;
+    }
+  }
+}
+
+size_t VaapiH264Decoder::GetRequiredNumOfPictures() {
+  return dpb_.max_num_pics() + kPicsInPipeline;
+}
+
+}  // namespace media
--- /dev/null
+++ b/media/vaapi_h264_decoder.h
@@ -0,0 +1,295 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// This file contains an implementation of a class that provides H264 decode
+// support for use with VAAPI hardware video decode acceleration on Intel
+// systems.
+
+#ifndef OZONE_MEDIA_VAAPI_H264_DECODER_H_
+#define OZONE_MEDIA_VAAPI_H264_DECODER_H_
+
+#include <vector>
+
+#include "base/callback_forward.h"
+#include "base/memory/linked_ptr.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "h264_dpb.h"
+#include "media/base/limits.h"
+#include "media/filters/h264_parser.h"
+#include "vaapi_wrapper.h"
+
+namespace media {
+
+// An H264 decoder that utilizes VA-API. Provides features not supported by
+// the VA-API userspace library (libva), including stream parsing, reference
+// picture management and other operations not supported by the HW codec.
+//
+// Provides functionality to allow plugging VAAPI HW acceleration into the
+// VDA framework.
+//
+// Clients of this class are expected to pass H264 Annex-B byte stream and
+// will receive decoded surfaces via client-provided |OutputPicCB|.
+//
+// This class must be created, called and destroyed on a single thread, and
+// does nothing internally on any other thread.
+class VaapiH264Decoder {
+ public:
+  // Callback invoked on the client when a surface is to be displayed.
+  // Arguments: input buffer id provided at the time of Decode()
+  // and VASurface to output.
+  typedef base::Callback<
+      void(int32, const scoped_refptr<VASurface>&)> OutputPicCB;
+
+  enum VAVDAH264DecoderFailure {
+    FRAME_MBS_ONLY_FLAG_NOT_ONE = 0,
+    GAPS_IN_FRAME_NUM = 1,
+    MID_STREAM_RESOLUTION_CHANGE = 2,
+    INTERLACED_STREAM = 3,
+    VAAPI_ERROR = 4,
+    VAVDA_H264_DECODER_FAILURES_MAX,
+  };
+
+  // Callback to report errors for UMA purposes, not used to return errors
+  // to clients.
+  typedef base::Callback<void(VAVDAH264DecoderFailure error)>
+      ReportErrorToUmaCB;
+
+  // Decode result codes.
+  enum DecResult {
+    kDecodeError,  // Error while decoding.
+    // TODO posciak: unsupported streams are currently treated as error
+    // in decoding; in future it could perhaps be possible to fall back
+    // to software decoding instead.
+    // kStreamError,  // Error in stream.
+    kAllocateNewSurfaces,  // Need a new set of surfaces to be allocated.
+    kRanOutOfStreamData,  // Need more stream data to proceed.
+    kRanOutOfSurfaces,  // Waiting for the client to free up output surfaces.
+  };
+
+  // |vaapi_wrapper| should be initialized.
+  // |output_pic_cb| notifies the client a surface is to be displayed.
+  // |report_error_to_uma_cb| called on errors for UMA purposes, not used
+  // to report errors to clients.
+  VaapiH264Decoder(VaapiWrapper* vaapi_wrapper,
+                   const OutputPicCB& output_pic_cb,
+                   const ReportErrorToUmaCB& report_error_to_uma_cb);
+
+  ~VaapiH264Decoder();
+
+  // Have the decoder flush its state and trigger output of all previously
+  // decoded surfaces via OutputPicCB. Return false on failure.
+  bool Flush() WARN_UNUSED_RESULT;
+
+  // To be called during decoding.
+  // Stop (pause) decoding, discarding all remaining inputs and outputs,
+  // but do not flush decoder state, so that the playback can be resumed later,
+  // possibly from a different location.
+  void Reset();
+
+  // Set current stream data pointer to |ptr| and |size|. Output surfaces
+  // that are decoded from data in this stream chunk are to be returned along
+  // with the given |input_id|.
+  void SetStream(const uint8* ptr, size_t size, int32 input_id);
+
+  // Try to decode more of the stream, returning decoded frames asynchronously
+  // via output_pic_cb_. Return when more stream is needed, when we run out
+  // of free surfaces, when we need a new set of them, or when an error occurs.
+  DecResult Decode() WARN_UNUSED_RESULT;
+
+  // Return dimensions/required number of output surfaces that client should
+  // be ready to provide for the decoder to function properly.
+  // To be used after Decode() returns kNeedNewSurfaces.
+  gfx::Size GetPicSize() { return pic_size_; }
+  size_t GetRequiredNumOfPictures();
+
+  // To be used by the client to feed decoder with output surfaces.
+  void ReuseSurface(const scoped_refptr<VASurface>& va_surface);
+
+ private:
+  // We need to keep at most kDPBMaxSize pictures in DPB for
+  // reference/to display later and an additional one for the one currently
+  // being decoded. We also ask for some additional ones since VDA needs
+  // to accumulate a few ready-to-output pictures before it actually starts
+  // displaying and giving them back. +2 instead of +1 because of subjective
+  // smoothness improvement during testing.
+  enum {
+    kPicsInPipeline = media::limits::kMaxVideoFrames + 2,
+    kMaxNumReqPictures = H264DPB::kDPBMaxSize + kPicsInPipeline,
+  };
+
+  // Internal state of the decoder.
+  enum State {
+    kNeedStreamMetadata,  // After initialization, need an SPS.
+    kDecoding,  // Ready to decode from any point.
+    kAfterReset, // After Reset(), need a resume point.
+    kError,  // Error in decode, can't continue.
+  };
+
+  // Process H264 stream structures.
+  bool ProcessSPS(int sps_id, bool* need_new_buffers);
+  bool ProcessPPS(int pps_id);
+  bool ProcessSlice(media::H264SliceHeader* slice_hdr);
+
+  // Initialize the current picture according to data in |slice_hdr|.
+  bool InitCurrPicture(media::H264SliceHeader* slice_hdr);
+
+  // Calculate picture order counts for the new picture
+  // on initialization of a new frame (see spec).
+  bool CalculatePicOrderCounts(media::H264SliceHeader* slice_hdr);
+
+  // Update PicNum values in pictures stored in DPB on creation of new
+  // frame (see spec).
+  void UpdatePicNums();
+
+  bool UpdateMaxNumReorderFrames(const media::H264SPS* sps);
+
+  // Prepare reference picture lists (ref_pic_list[01]_).
+  bool PrepareRefPicLists(media::H264SliceHeader* slice_hdr);
+
+  // Construct initial reference picture lists for use in decoding of
+  // P and B pictures (see 8.2.4 in spec).
+  void ConstructReferencePicListsP(media::H264SliceHeader* slice_hdr);
+  void ConstructReferencePicListsB(media::H264SliceHeader* slice_hdr);
+
+  // Helper functions for reference list construction, per spec.
+  int PicNumF(H264Picture *pic);
+  int LongTermPicNumF(H264Picture *pic);
+
+  // Perform the reference picture lists' modification (reordering), as
+  // specified in spec (8.2.4).
+  //
+  // |list| indicates list number and should be either 0 or 1.
+  bool ModifyReferencePicList(media::H264SliceHeader* slice_hdr, int list);
+
+  // Perform reference picture memory management operations (marking/unmarking
+  // of reference pictures, long term picture management, discarding, etc.).
+  // See 8.2.5 in spec.
+  bool HandleMemoryManagementOps();
+  void ReferencePictureMarking();
+
+  // Start processing a new frame.
+  bool StartNewFrame(media::H264SliceHeader* slice_hdr);
+
+  // All data for a frame received, process it and decode.
+  bool FinishPrevFrameIfPresent();
+
+  // Called after decoding, performs all operations to be done after decoding,
+  // including DPB management, reference picture marking and memory management
+  // operations.
+  // This will also output a picture if one is ready for output.
+  bool FinishPicture();
+
+  // Clear DPB contents and remove all surfaces in DPB from *in_use_ list.
+  // Cleared pictures will be made available for decode, unless they are
+  // at client waiting to be displayed.
+  void ClearDPB();
+
+  // These queue up data for HW decoder to be committed on running HW decode.
+  bool SendPPS();
+  bool SendIQMatrix();
+  bool SendVASliceParam(media::H264SliceHeader* slice_hdr);
+  bool SendSliceData(const uint8* ptr, size_t size);
+  bool QueueSlice(media::H264SliceHeader* slice_hdr);
+
+  // Helper methods for filling HW structures.
+  void FillVAPicture(VAPictureH264 *va_pic, H264Picture* pic);
+  int FillVARefFramesFromDPB(VAPictureH264 *va_pics, int num_pics);
+
+  // Commits all pending data for HW decoder and starts HW decoder.
+  bool DecodePicture();
+
+  // Notifies client that a picture is ready for output.
+  bool OutputPic(H264Picture* pic);
+
+  // Output all pictures in DPB that have not been outputted yet.
+  bool OutputAllRemainingPics();
+
+  // Represents a frame being decoded. Will always have a VASurface
+  // assigned to it, which will eventually contain decoded picture data.
+  class DecodeSurface;
+
+  // Assign an available surface to the given PicOrderCnt |poc|,
+  // removing it from the available surfaces pool. Return true if a surface
+  // has been found, false otherwise.
+  bool AssignSurfaceToPoC(int32 input_id, int poc);
+
+  // Indicate that a surface is no longer needed by decoder.
+  void UnassignSurfaceFromPoC(int poc);
+
+  // Return DecodeSurface assigned to |poc|.
+  DecodeSurface* DecodeSurfaceByPoC(int poc);
+
+  // Decoder state.
+  State state_;
+
+  // Parser in use.
+  media::H264Parser parser_;
+
+  // DPB in use.
+  H264DPB dpb_;
+
+  // Picture currently being processed/decoded.
+  scoped_ptr<H264Picture> curr_pic_;
+
+  // Reference picture lists, constructed for each picture before decoding.
+  // Those lists are not owners of the pointers (DPB is).
+  H264Picture::PtrVector ref_pic_list0_;
+  H264Picture::PtrVector ref_pic_list1_;
+
+  // Global state values, needed in decoding. See spec.
+  int max_pic_order_cnt_lsb_;
+  int max_frame_num_;
+  int max_pic_num_;
+  int max_long_term_frame_idx_;
+  size_t max_num_reorder_frames_;
+
+  int frame_num_;
+  int prev_frame_num_;
+  int prev_frame_num_offset_;
+  bool prev_has_memmgmnt5_;
+
+  // Values related to previously decoded reference picture.
+  bool prev_ref_has_memmgmnt5_;
+  int prev_ref_top_field_order_cnt_;
+  int prev_ref_pic_order_cnt_msb_;
+  int prev_ref_pic_order_cnt_lsb_;
+  H264Picture::Field prev_ref_field_;
+
+  // Currently active SPS and PPS.
+  int curr_sps_id_;
+  int curr_pps_id_;
+
+  // Output picture size.
+  gfx::Size pic_size_;
+
+  // Maps H.264 PicOrderCount to currently used DecodeSurfaces;
+  typedef std::map<int, linked_ptr<DecodeSurface> > DecSurfacesInUse;
+  DecSurfacesInUse decode_surfaces_in_use_;
+
+  // Unused VA surfaces returned by client, ready to be reused.
+  std::vector<scoped_refptr<VASurface> > available_va_surfaces_;
+
+  // The id of current input buffer, which will be associated with an
+  // output surface when a frame is successfully decoded.
+  int32 curr_input_id_;
+
+  VaapiWrapper* vaapi_wrapper_;
+
+  // Called by decoder when a surface should be outputted.
+  OutputPicCB output_pic_cb_;
+
+  // Called to report decoding error to UMA, not used to indicate errors
+  // to clients.
+  ReportErrorToUmaCB report_error_to_uma_cb_;
+
+  // PicOrderCount of the previously outputted frame.
+  int last_output_poc_;
+
+  DISALLOW_COPY_AND_ASSIGN(VaapiH264Decoder);
+};
+
+}  // namespace media
+
+#endif  // OZONE_MEDIA_VAAPI_H264_DECODER_H_
--- /dev/null
+++ b/media/vaapi_video_decode_accelerator.cc
@@ -0,0 +1,1011 @@
+// Copyright (c) 2014 The Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/media/vaapi_video_decode_accelerator.h"
+
+#include <string>
+
+#include "base/bind.h"
+#include "base/debug/trace_event.h"
+#include "base/logging.h"
+#include "base/metrics/histogram.h"
+#include "base/stl_util.h"
+#include "base/strings/string_util.h"
+#include "base/synchronization/waitable_event.h"
+#include "base/threading/non_thread_safe.h"
+#include "content/common/gpu/gpu_channel.h"
+#include "media/base/bind_to_current_loop.h"
+#include "media/video/picture.h"
+#include "ui/gl/gl_bindings.h"
+#include "ui/gl/gl_surface_egl.h"
+#include "ui/gl/scoped_binders.h"
+
+static void ReportToUMA(
+    media::VaapiH264Decoder::VAVDAH264DecoderFailure failure) {
+  UMA_HISTOGRAM_ENUMERATION(
+      "Media.VAVDAH264.DecoderFailure",
+      failure,
+      media::VaapiH264Decoder::VAVDA_H264_DECODER_FAILURES_MAX);
+}
+
+namespace media {
+
+#define RETURN_AND_NOTIFY_ON_FAILURE(result, log, error_code, ret)  \
+  do {                                                              \
+    if (!(result)) {                                                \
+      DVLOG(1) << log;                                              \
+      NotifyError(error_code);                                      \
+      return ret;                                                   \
+    }                                                               \
+  } while (0)
+
+VaapiVideoDecodeAccelerator::InputBuffer::InputBuffer() : id(0), size(0) {
+}
+
+VaapiVideoDecodeAccelerator::InputBuffer::~InputBuffer() {
+}
+
+void VaapiVideoDecodeAccelerator::NotifyError(Error error) {
+  if (message_loop_ != base::MessageLoop::current()) {
+    DCHECK(decoder_thread_proxy_->BelongsToCurrentThread());
+    message_loop_->PostTask(FROM_HERE, base::Bind(
+        &VaapiVideoDecodeAccelerator::NotifyError, weak_this_, error));
+    return;
+  }
+
+  // Post Cleanup() as a task so we don't recursively acquire lock_.
+  message_loop_->PostTask(FROM_HERE, base::Bind(
+      &VaapiVideoDecodeAccelerator::Cleanup, weak_this_));
+
+  DVLOG(1) << "Notifying of error " << error;
+  if (client_) {
+    client_->NotifyError(error);
+    client_ptr_factory_.reset();
+  }
+}
+
+// TFPPicture allocates VAImage and binds them to textures passed
+// in PictureBuffers from clients to them. TFPPictures are created as
+// a consequence of receiving a set of PictureBuffers from clients and released
+// at the end of decode (or when a new set of PictureBuffers is required).
+//
+// TFPPictures are used for output, contents of VASurfaces passed from decoder
+// are put into the associated vaimage memory and upload to client.
+class VaapiVideoDecodeAccelerator::TFPPicture : public base::NonThreadSafe {
+ public:
+  ~TFPPicture();
+
+  static linked_ptr<TFPPicture> Create(
+      const base::Callback<bool(void)>& make_context_current, //NOLINT
+      VaapiWrapper* va_wrapper,
+      int32 picture_buffer_id,
+      uint32 texture_id,
+      gfx::Size size);
+
+  int32 picture_buffer_id() {
+    return picture_buffer_id_;
+  }
+
+  gfx::Size size() {
+    return size_;
+  }
+
+  VAImage* va_image() {
+    return va_image_.get();
+  }
+
+  // Upload vaimage data to texture. Needs to be called every frame.
+  bool Upload(VASurfaceID id);
+
+  // Bind EGL image to texture. Needs to be called every frame.
+  bool Bind();
+  bool UpdateEGLImage(VASurfaceID id);
+
+ private:
+  TFPPicture(const base::Callback<bool(void)>& make_context_current, //NOLINT
+             VaapiWrapper* va_wrapper,
+             int32 picture_buffer_id,
+             uint32 texture_id,
+             gfx::Size size);
+
+  bool Initialize();
+
+  EGLImageKHR CreateEGLImage(
+      EGLDisplay egl_display, VASurfaceID surface, VAImage* va_image);
+  bool DestroyEGLImage(EGLDisplay egl_display, EGLImageKHR egl_image);
+
+  base::Callback<bool(void)> make_context_current_; //NOLINT
+
+  VaapiWrapper* va_wrapper_;
+
+  // Output id for the client.
+  int32 picture_buffer_id_;
+  uint32 texture_id_;
+
+  gfx::Size size_;
+  scoped_ptr<VAImage> va_image_;
+  EGLImageKHR egl_image_;
+  EGLDisplay egl_display_;
+
+  DISALLOW_COPY_AND_ASSIGN(TFPPicture);
+};
+
+VaapiVideoDecodeAccelerator::TFPPicture::TFPPicture(
+    const base::Callback<bool(void)>& make_context_current, //NOLINT
+    VaapiWrapper* va_wrapper,
+    int32 picture_buffer_id,
+    uint32 texture_id,
+    gfx::Size size)
+    : make_context_current_(make_context_current),
+      va_wrapper_(va_wrapper),
+      picture_buffer_id_(picture_buffer_id),
+      texture_id_(texture_id),
+      size_(size),
+      va_image_(new VAImage()),
+      egl_display_(gfx::GLSurfaceEGL::GetHardwareDisplay()) {
+  DCHECK(!make_context_current_.is_null());
+  DCHECK(va_image_);
+}
+
+linked_ptr<VaapiVideoDecodeAccelerator::TFPPicture>
+VaapiVideoDecodeAccelerator::TFPPicture::Create(
+    const base::Callback<bool(void)>& make_context_current, //NOLINT
+    VaapiWrapper* va_wrapper,
+    int32 picture_buffer_id,
+    uint32 texture_id,
+    gfx::Size size) {
+  linked_ptr<TFPPicture> tfp_picture(
+      new TFPPicture(make_context_current, va_wrapper,
+                     picture_buffer_id, texture_id, size));
+
+  if (!tfp_picture->Initialize())
+    tfp_picture.reset();
+
+  return tfp_picture;
+}
+
+bool VaapiVideoDecodeAccelerator::TFPPicture::Initialize() {
+  DCHECK(CalledOnValidThread());
+  if (!make_context_current_.Run())
+    return false;
+
+  if (!va_wrapper_->CreateRGBImage(size_, va_image_.get())) {
+    DVLOG(1) << "Failed to create VAImage";
+    return false;
+  }
+
+  return true;
+}
+
+VaapiVideoDecodeAccelerator::TFPPicture::~TFPPicture() {
+  DCHECK(CalledOnValidThread());
+
+  if (egl_image_ != EGL_NO_IMAGE_KHR)
+    DestroyEGLImage(egl_display_, egl_image_);
+
+  if (va_wrapper_) {
+    va_wrapper_->DestroyImage(va_image_.get());
+  }
+}
+
+bool VaapiVideoDecodeAccelerator::TFPPicture::UpdateEGLImage(
+    VASurfaceID surface) {
+  DCHECK(CalledOnValidThread());
+
+  if (!make_context_current_.Run())
+    return false;
+
+  if (egl_image_ != EGL_NO_IMAGE_KHR)
+    DestroyEGLImage(egl_display_, egl_image_);
+
+  egl_image_ = CreateEGLImage(egl_display_, surface, va_image_.get());
+  if (egl_image_ == EGL_NO_IMAGE_KHR) {
+    DVLOG(1) << "Failed to create EGL image";
+    return false;
+  }
+
+  return true;
+}
+
+bool VaapiVideoDecodeAccelerator::TFPPicture::Upload(VASurfaceID surface) {
+  DCHECK(CalledOnValidThread());
+
+  if (!make_context_current_.Run())
+    return false;
+
+  if (!va_wrapper_->PutSurfaceIntoImage(surface, va_image_.get())) {
+    DVLOG(1) << "Failed to put va surface to image";
+    return false;
+  }
+
+  void* buffer = NULL;
+  if (!va_wrapper_->MapImage(va_image_.get(), &buffer)) {
+    DVLOG(1) << "Failed to map VAImage";
+    return false;
+  }
+
+  gfx::ScopedTextureBinder texture_binder(GL_TEXTURE_2D, texture_id_);
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+
+  // See bug https://crosswalk-project.org/jira/browse/XWALK-2265.
+  // The following small piece of code is a workaround for the current VDA
+  // texture output implementation. It can be removed when zero buffer copy
+  // is implemented.
+  unsigned int al = 4 * size_.width();
+  if (al != va_image_->pitches[0]) {
+    // Not aligned phenomenon occurs only in special size video in None-X11.
+    // So re-check RGBA data alignment and realign filled video frame in need.
+    unsigned char* bhandle = static_cast<unsigned char*>(buffer);
+    for (int i = 0; i < size_.height(); i++) {
+      memcpy(bhandle + (i * al), bhandle + (i * (va_image_->pitches[0])), al);
+    }
+  }
+
+  glTexImage2D(GL_TEXTURE_2D,
+               0,
+               GL_BGRA,
+               size_.width(),
+               size_.height(),
+               0,
+               GL_BGRA,
+               GL_UNSIGNED_BYTE,
+               buffer);
+
+  va_wrapper_->UnmapImage(va_image_.get());
+
+  return true;
+}
+
+bool VaapiVideoDecodeAccelerator::TFPPicture::Bind() {
+  DCHECK(CalledOnValidThread());
+  if (!make_context_current_.Run())
+    return false;
+
+  gfx::ScopedTextureBinder texture_binder(GL_TEXTURE_2D, texture_id_);
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+  glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, egl_image_);
+  return true;
+}
+
+EGLImageKHR VaapiVideoDecodeAccelerator::TFPPicture::CreateEGLImage(
+    EGLDisplay egl_display, VASurfaceID va_surface, VAImage* va_image) {
+  DCHECK(CalledOnValidThread());
+  DCHECK(va_image);
+
+  VABufferInfo buffer_info;
+  if (!va_wrapper_->LockBuffer(va_surface, va_image->buf, &buffer_info)) {
+    DVLOG(1) << "Failed to lock Buffer";
+    return EGL_NO_IMAGE_KHR;
+  }
+
+  EGLint attribs[] = {
+      EGL_WIDTH, 0,
+      EGL_HEIGHT, 0,
+      EGL_DRM_BUFFER_STRIDE_MESA, 0,
+      EGL_DRM_BUFFER_FORMAT_MESA,
+      EGL_DRM_BUFFER_FORMAT_ARGB32_MESA,
+      EGL_DRM_BUFFER_USE_MESA,
+      EGL_DRM_BUFFER_USE_SHARE_MESA,
+      EGL_NONE };
+  attribs[1] = va_image->width;
+  attribs[3] = va_image->height;
+  attribs[5] = va_image->pitches[0] / 4;
+
+  EGLImageKHR egl_image =  eglCreateImageKHR(
+       egl_display,
+       EGL_NO_CONTEXT,
+       EGL_DRM_BUFFER_MESA,
+       (EGLClientBuffer) buffer_info.handle,
+       attribs);
+
+  if (va_wrapper_) {
+    va_wrapper_->UnlockBuffer(va_surface, va_image->buf, &buffer_info);
+  }
+
+  return egl_image;
+}
+
+bool VaapiVideoDecodeAccelerator::TFPPicture::DestroyEGLImage(
+    EGLDisplay egl_display, EGLImageKHR egl_image) {
+  return eglDestroyImageKHR(egl_display, egl_image);
+}
+
+VaapiVideoDecodeAccelerator::TFPPicture*
+    VaapiVideoDecodeAccelerator::TFPPictureById(int32 picture_buffer_id) {
+  TFPPictures::iterator it = tfp_pictures_.find(picture_buffer_id);
+  if (it == tfp_pictures_.end()) {
+    DVLOG(1) << "Picture id " << picture_buffer_id << " does not exist";
+    return NULL;
+  }
+
+  return it->second.get();
+}
+
+VaapiVideoDecodeAccelerator::VaapiVideoDecodeAccelerator(
+    const base::Callback<bool(void)>& make_context_current) //NOLINT
+    : make_context_current_(make_context_current),
+      state_(kUninitialized),
+      input_ready_(&lock_),
+      surfaces_available_(&lock_),
+      message_loop_(base::MessageLoop::current()),
+      decoder_thread_("VaapiDecoderThread"),
+      num_frames_at_client_(0),
+      num_stream_bufs_at_decoder_(0),
+      finish_flush_pending_(false),
+      awaiting_va_surfaces_recycle_(false),
+      requested_num_pics_(0),
+      weak_this_factory_(this) {
+  weak_this_ = weak_this_factory_.GetWeakPtr();
+  va_surface_release_cb_ = media::BindToCurrentLoop(base::Bind(
+      &VaapiVideoDecodeAccelerator::RecycleVASurfaceID, weak_this_));
+}
+
+VaapiVideoDecodeAccelerator::~VaapiVideoDecodeAccelerator() {
+  DCHECK_EQ(message_loop_, base::MessageLoop::current());
+}
+
+bool VaapiVideoDecodeAccelerator::Initialize(media::VideoCodecProfile profile,
+                                             Client* client) {
+  DCHECK_EQ(message_loop_, base::MessageLoop::current());
+
+  client_ptr_factory_.reset(new base::WeakPtrFactory<Client>(client));
+  client_ = client_ptr_factory_->GetWeakPtr();
+
+  base::AutoLock auto_lock(lock_);
+  DCHECK_EQ(state_, kUninitialized);
+  DVLOG(2) << "Initializing VAVDA, profile: " << profile;
+
+  if (!make_context_current_.Run())
+    return false;
+
+  vaapi_wrapper_ = VaapiWrapper::Create(
+      profile,
+      reinterpret_cast<void*>(gfx::GLSurfaceEGL::GetNativeDisplay()),
+      base::Bind(&ReportToUMA, VaapiH264Decoder::VAAPI_ERROR));
+
+  if (!vaapi_wrapper_.get()) {
+    DVLOG(1) << "Failed initializing VAAPI";
+    return false;
+  }
+
+  supports_valockBuffer_apis_ = vaapi_wrapper_->SupportsVaLockBufferApis();
+  std::string query =
+      supports_valockBuffer_apis_ ? "supports" : "doesn't support";
+  LOG(INFO) << "VAAPI " << query << " vaLockBuffer apis";
+
+  decoder_.reset(
+      new VaapiH264Decoder(
+          vaapi_wrapper_.get(),
+          media::BindToCurrentLoop(base::Bind(
+              &VaapiVideoDecodeAccelerator::SurfaceReady, weak_this_)),
+          base::Bind(&ReportToUMA)));
+
+  CHECK(decoder_thread_.Start());
+  decoder_thread_proxy_ = decoder_thread_.message_loop_proxy();
+
+  state_ = kIdle;
+
+  return true;
+}
+
+void VaapiVideoDecodeAccelerator::SurfaceReady(
+    int32 input_id,
+    const scoped_refptr<VASurface>& va_surface) {
+  DCHECK_EQ(message_loop_, base::MessageLoop::current());
+  DCHECK(!awaiting_va_surfaces_recycle_);
+
+  // Drop any requests to output if we are resetting or being destroyed.
+  if (state_ == kResetting || state_ == kDestroying)
+    return;
+
+  pending_output_cbs_.push(
+      base::Bind(&VaapiVideoDecodeAccelerator::OutputPicture,
+                 weak_this_, va_surface, input_id));
+
+  TryOutputSurface();
+}
+
+void VaapiVideoDecodeAccelerator::OutputPicture(
+    const scoped_refptr<VASurface>& va_surface,
+    int32 input_id,
+    TFPPicture* tfp_picture) {
+  DCHECK_EQ(message_loop_, base::MessageLoop::current());
+
+  int32 output_id  = tfp_picture->picture_buffer_id();
+
+  TRACE_EVENT2("Video Decoder", "VAVDA::OutputSurface",
+               "input_id", input_id,
+               "output_id", output_id);
+
+  DVLOG(3) << "Outputting VASurface " << va_surface->id()
+           << " into texture bound to picture buffer id " << output_id;
+
+  if (supports_valockBuffer_apis_) {
+    RETURN_AND_NOTIFY_ON_FAILURE(
+        vaapi_wrapper_->PutSurfaceIntoImage(
+            va_surface->id(),
+            tfp_picture->va_image()),
+        "Failed putting surface into vaimage",
+        PLATFORM_FAILURE, );  //NOLINT
+
+    RETURN_AND_NOTIFY_ON_FAILURE(
+        tfp_picture->UpdateEGLImage(va_surface->id()),
+        "Failed to update egl image per vaimage info",
+        PLATFORM_FAILURE, );  //NOLINT
+
+    RETURN_AND_NOTIFY_ON_FAILURE(
+        tfp_picture->Bind(),
+        "Failed to bind egl image to texture",
+        PLATFORM_FAILURE, ); //NOLINT
+  } else {
+    RETURN_AND_NOTIFY_ON_FAILURE(
+        tfp_picture->Upload(va_surface->id()),
+        "Failed to upload VASurface to texture",
+        PLATFORM_FAILURE, ); //NOLINT
+  }
+
+  // Notify the client a picture is ready to be displayed.
+  ++num_frames_at_client_;
+  TRACE_COUNTER1("Video Decoder", "Textures at client", num_frames_at_client_);
+  DVLOG(4) << "Notifying output picture id " << output_id
+           << " for input "<< input_id << " is ready";
+  // TODO(posciak): Use visible size from decoder here instead
+  // (crbug.com/402760).
+  if (client_)
+    client_->PictureReady(
+        media::Picture(output_id, input_id, gfx::Rect(tfp_picture->size())));
+}
+
+void VaapiVideoDecodeAccelerator::TryOutputSurface() {
+  DCHECK_EQ(message_loop_, base::MessageLoop::current());
+
+  // Handle Destroy() arriving while pictures are queued for output.
+  if (!client_)
+    return;
+
+  if (pending_output_cbs_.empty() || output_buffers_.empty())
+    return;
+
+  OutputCB output_cb = pending_output_cbs_.front();
+  pending_output_cbs_.pop();
+
+  TFPPicture* tfp_picture = TFPPictureById(output_buffers_.front());
+  DCHECK(tfp_picture);
+  output_buffers_.pop();
+
+  output_cb.Run(tfp_picture);
+
+  if (finish_flush_pending_ && pending_output_cbs_.empty())
+    FinishFlush();
+}
+
+void VaapiVideoDecodeAccelerator::MapAndQueueNewInputBuffer(
+    const media::BitstreamBuffer& bitstream_buffer) {
+  DCHECK_EQ(message_loop_, base::MessageLoop::current());
+  TRACE_EVENT1("Video Decoder", "MapAndQueueNewInputBuffer", "input_id",
+      bitstream_buffer.id());
+
+  DVLOG(4) << "Mapping new input buffer id: " << bitstream_buffer.id()
+           << " size: " << static_cast<int>(bitstream_buffer.size());
+
+  scoped_ptr<base::SharedMemory> shm(
+      new base::SharedMemory(bitstream_buffer.handle(), true));
+  RETURN_AND_NOTIFY_ON_FAILURE(shm->Map(bitstream_buffer.size()),
+      "Failed to map input buffer", UNREADABLE_INPUT,); //NOLINT
+
+  base::AutoLock auto_lock(lock_);
+
+  // Set up a new input buffer and queue it for later.
+  linked_ptr<InputBuffer> input_buffer(new InputBuffer());
+  input_buffer->shm.reset(shm.release());
+  input_buffer->id = bitstream_buffer.id();
+  input_buffer->size = bitstream_buffer.size();
+
+  ++num_stream_bufs_at_decoder_;
+  TRACE_COUNTER1("Video Decoder", "Stream buffers at decoder",
+                 num_stream_bufs_at_decoder_);
+
+  input_buffers_.push(input_buffer);
+  input_ready_.Signal();
+}
+
+bool VaapiVideoDecodeAccelerator::GetInputBuffer_Locked() {
+  DCHECK(decoder_thread_proxy_->BelongsToCurrentThread());
+  lock_.AssertAcquired();
+
+  if (curr_input_buffer_.get())
+    return true;
+
+  // Will only wait if it is expected that in current state new buffers will
+  // be queued from the client via Decode(). The state can change during wait.
+  while (input_buffers_.empty() && (state_ == kDecoding || state_ == kIdle)) {
+    input_ready_.Wait();
+  }
+
+  // We could have got woken up in a different state or never got to sleep
+  // due to current state; check for that.
+  switch (state_) {
+    case kFlushing:
+      // Here we are only interested in finishing up decoding buffers that are
+      // already queued up. Otherwise will stop decoding.
+      if (input_buffers_.empty())
+        return false;
+      // else fallthrough
+    case kDecoding:
+    case kIdle:
+      DCHECK(!input_buffers_.empty());
+
+      curr_input_buffer_ = input_buffers_.front();
+      input_buffers_.pop();
+
+      DVLOG(4) << "New current bitstream buffer, id: "
+               << curr_input_buffer_->id
+               << " size: " << curr_input_buffer_->size;
+
+      decoder_->SetStream(
+          static_cast<uint8*>(curr_input_buffer_->shm->memory()),
+          curr_input_buffer_->size, curr_input_buffer_->id);
+      return true;
+
+    default:
+      // We got woken up due to being destroyed/reset, ignore any already
+      // queued inputs.
+      return false;
+  }
+}
+
+void VaapiVideoDecodeAccelerator::ReturnCurrInputBuffer_Locked() {
+  lock_.AssertAcquired();
+  DCHECK(decoder_thread_proxy_->BelongsToCurrentThread());
+  DCHECK(curr_input_buffer_.get());
+
+  int32 id = curr_input_buffer_->id;
+  curr_input_buffer_.reset();
+  DVLOG(4) << "End of input buffer " << id;
+  message_loop_->PostTask(FROM_HERE, base::Bind(
+      &Client::NotifyEndOfBitstreamBuffer, client_, id));
+
+  --num_stream_bufs_at_decoder_;
+  TRACE_COUNTER1("Video Decoder", "Stream buffers at decoder",
+                 num_stream_bufs_at_decoder_);
+}
+
+bool VaapiVideoDecodeAccelerator::FeedDecoderWithOutputSurfaces_Locked() {
+  lock_.AssertAcquired();
+  DCHECK(decoder_thread_proxy_->BelongsToCurrentThread());
+
+  while (available_va_surfaces_.empty() &&
+        (state_ == kDecoding || state_ == kFlushing || state_ == kIdle)) {
+    surfaces_available_.Wait();
+  }
+
+  if (state_ != kDecoding && state_ != kFlushing && state_ != kIdle)
+    return false;
+
+  while (!available_va_surfaces_.empty()) {
+    scoped_refptr<VASurface> va_surface(
+        new VASurface(available_va_surfaces_.front(), va_surface_release_cb_));
+    available_va_surfaces_.pop_front();
+    decoder_->ReuseSurface(va_surface);
+  }
+
+  return true;
+}
+
+void VaapiVideoDecodeAccelerator::DecodeTask() {
+  DCHECK(decoder_thread_proxy_->BelongsToCurrentThread());
+  TRACE_EVENT0("Video Decoder", "VAVDA::DecodeTask");
+  base::AutoLock auto_lock(lock_);
+
+  if (state_ != kDecoding)
+    return;
+
+  // Main decode task.
+  DVLOG(4) << "Decode task";
+
+  // Try to decode what stream data is (still) in the decoder until we run out
+  // of it.
+  while (GetInputBuffer_Locked()) {
+    DCHECK(curr_input_buffer_.get());
+
+    VaapiH264Decoder::DecResult res;
+    {
+      // We are OK releasing the lock here, as decoder never calls our methods
+      // directly and we will reacquire the lock before looking at state again.
+      // This is the main decode function of the decoder and while keeping
+      // the lock for its duration would be fine, it would defeat the purpose
+      // of having a separate decoder thread.
+      base::AutoUnlock auto_unlock(lock_);
+      res = decoder_->Decode();
+    }
+
+    switch (res) {
+      case VaapiH264Decoder::kAllocateNewSurfaces:
+        DVLOG(1) << "Decoder requesting a new set of surfaces";
+        message_loop_->PostTask(FROM_HERE, base::Bind(
+            &VaapiVideoDecodeAccelerator::InitiateSurfaceSetChange, weak_this_,
+                decoder_->GetRequiredNumOfPictures(),
+                decoder_->GetPicSize()));
+        // We'll get rescheduled once ProvidePictureBuffers() finishes.
+        return;
+
+      case VaapiH264Decoder::kRanOutOfStreamData:
+        ReturnCurrInputBuffer_Locked();
+        break;
+
+      case VaapiH264Decoder::kRanOutOfSurfaces:
+        // No more output buffers in the decoder, try getting more or go to
+        // sleep waiting for them.
+        if (!FeedDecoderWithOutputSurfaces_Locked())
+          return;
+
+        break;
+
+      case VaapiH264Decoder::kDecodeError:
+        RETURN_AND_NOTIFY_ON_FAILURE(false, "Error decoding stream",
+                                     PLATFORM_FAILURE,); //NOLINT
+        return;
+    }
+  }
+}
+
+void VaapiVideoDecodeAccelerator::InitiateSurfaceSetChange(size_t num_pics,
+                                                           gfx::Size size) {
+  DCHECK_EQ(message_loop_, base::MessageLoop::current());
+  DCHECK(!awaiting_va_surfaces_recycle_);
+
+  // At this point decoder has stopped running and has already posted onto our
+  // loop any remaining output request callbacks, which executed before we got
+  // here. Some of them might have been pended though, because we might not
+  // have had enough TFPictures to output surfaces to. Initiate a wait cycle,
+  // which will wait for client to return enough PictureBuffers to us, so that
+  // we can finish all pending output callbacks, releasing associated surfaces.
+  DVLOG(1) << "Initiating surface set change";
+  awaiting_va_surfaces_recycle_ = true;
+
+  requested_num_pics_ = num_pics;
+  requested_pic_size_ = size;
+
+  TryFinishSurfaceSetChange();
+}
+
+void VaapiVideoDecodeAccelerator::TryFinishSurfaceSetChange() {
+  DCHECK_EQ(message_loop_, base::MessageLoop::current());
+
+  if (!awaiting_va_surfaces_recycle_)
+    return;
+
+  if (!pending_output_cbs_.empty() ||
+      tfp_pictures_.size() != available_va_surfaces_.size()) {
+    // Either:
+    // 1. Not all pending pending output callbacks have been executed yet.
+    // Wait for the client to return enough pictures and retry later.
+    // 2. The above happened and all surface release callbacks have been posted
+    // as the result, but not all have executed yet. Post ourselves after them
+    // to let them release surfaces.
+    DVLOG(2) << "Awaiting pending output/surface release callbacks to finish";
+    message_loop_->PostTask(FROM_HERE, base::Bind(
+        &VaapiVideoDecodeAccelerator::TryFinishSurfaceSetChange, weak_this_));
+    return;
+  }
+
+  // All surfaces released, destroy them and dismiss all PictureBuffers.
+  awaiting_va_surfaces_recycle_ = false;
+  available_va_surfaces_.clear();
+  vaapi_wrapper_->DestroySurfaces();
+
+  for (TFPPictures::iterator iter = tfp_pictures_.begin();
+       iter != tfp_pictures_.end(); ++iter) {
+    DVLOG(2) << "Dismissing picture id: " << iter->first;
+    if (client_)
+      client_->DismissPictureBuffer(iter->first);
+  }
+  tfp_pictures_.clear();
+
+  // And ask for a new set as requested.
+  DVLOG(1) << "Requesting " << requested_num_pics_ << " pictures of size: "
+           << requested_pic_size_.ToString();
+
+  message_loop_->PostTask(FROM_HERE, base::Bind(
+      &Client::ProvidePictureBuffers, client_,
+      requested_num_pics_, requested_pic_size_, GL_TEXTURE_2D));
+}
+
+void VaapiVideoDecodeAccelerator::Decode(
+    const media::BitstreamBuffer& bitstream_buffer) {
+  DCHECK_EQ(message_loop_, base::MessageLoop::current());
+
+  TRACE_EVENT1("Video Decoder", "VAVDA::Decode", "Buffer id",
+               bitstream_buffer.id());
+
+  // We got a new input buffer from the client, map it and queue for later use.
+  MapAndQueueNewInputBuffer(bitstream_buffer);
+
+  base::AutoLock auto_lock(lock_);
+  switch (state_) {
+    case kIdle:
+      state_ = kDecoding;
+      decoder_thread_proxy_->PostTask(FROM_HERE, base::Bind(
+          &VaapiVideoDecodeAccelerator::DecodeTask,
+          base::Unretained(this)));
+      break;
+
+    case kDecoding:
+      // Decoder already running, fallthrough.
+    case kResetting:
+      // When resetting, allow accumulating bitstream buffers, so that
+      // the client can queue after-seek-buffers while we are finishing with
+      // the before-seek one.
+      break;
+
+    default:
+      RETURN_AND_NOTIFY_ON_FAILURE(false,
+          "Decode request from client in invalid state: " << state_,
+          PLATFORM_FAILURE,); //NOLINT
+      break;
+  }
+}
+
+void VaapiVideoDecodeAccelerator::RecycleVASurfaceID(
+    VASurfaceID va_surface_id) {
+  DCHECK_EQ(message_loop_, base::MessageLoop::current());
+  base::AutoLock auto_lock(lock_);
+
+  available_va_surfaces_.push_back(va_surface_id);
+  surfaces_available_.Signal();
+}
+
+void VaapiVideoDecodeAccelerator::AssignPictureBuffers(
+    const std::vector<media::PictureBuffer>& buffers) {
+  DCHECK_EQ(message_loop_, base::MessageLoop::current());
+
+  base::AutoLock auto_lock(lock_);
+  DCHECK(tfp_pictures_.empty());
+
+  while (!output_buffers_.empty())
+    output_buffers_.pop();
+
+  RETURN_AND_NOTIFY_ON_FAILURE(
+      buffers.size() == requested_num_pics_,
+      "Got an invalid buffers. (Got " << buffers.size() << ", requested "
+      << requested_num_pics_ << ")", INVALID_ARGUMENT,); //NOLINT
+  DCHECK(requested_pic_size_ == buffers[0].size());
+
+  std::vector<VASurfaceID> va_surface_ids;
+  RETURN_AND_NOTIFY_ON_FAILURE(
+      vaapi_wrapper_->CreateSurfaces(requested_pic_size_,
+                                     buffers.size(),
+                                     &va_surface_ids),
+      "Failed creating VA Surfaces", PLATFORM_FAILURE,); //NOLINT
+  DCHECK_EQ(va_surface_ids.size(), buffers.size());
+
+  for (size_t i = 0; i < buffers.size(); ++i) {
+    DVLOG(2) << "Assigning picture id: " << buffers[i].id()
+             << " to texture id: " << buffers[i].texture_id()
+             << " VASurfaceID: " << va_surface_ids[i];
+
+    linked_ptr<TFPPicture> tfp_picture(
+        TFPPicture::Create(make_context_current_,
+                           vaapi_wrapper_.get(),
+                           buffers[i].id(),
+                           buffers[i].texture_id(),
+                           requested_pic_size_));
+
+    RETURN_AND_NOTIFY_ON_FAILURE(
+        tfp_picture.get(), "Failed assigning picture buffer to a texture.",
+        PLATFORM_FAILURE,); //NOLINT
+
+    bool inserted = tfp_pictures_.insert(std::make_pair(
+        buffers[i].id(), tfp_picture)).second;
+    DCHECK(inserted);
+
+    output_buffers_.push(buffers[i].id());
+    available_va_surfaces_.push_back(va_surface_ids[i]);
+    surfaces_available_.Signal();
+  }
+
+  state_ = kDecoding;
+  decoder_thread_proxy_->PostTask(FROM_HERE, base::Bind(
+      &VaapiVideoDecodeAccelerator::DecodeTask, base::Unretained(this)));
+}
+
+void VaapiVideoDecodeAccelerator::ReusePictureBuffer(int32 picture_buffer_id) {
+  DCHECK_EQ(message_loop_, base::MessageLoop::current());
+  TRACE_EVENT1("Video Decoder", "VAVDA::ReusePictureBuffer", "Picture id",
+               picture_buffer_id);
+
+  --num_frames_at_client_;
+  TRACE_COUNTER1("Video Decoder", "Textures at client", num_frames_at_client_);
+
+  output_buffers_.push(picture_buffer_id);
+  TryOutputSurface();
+}
+
+void VaapiVideoDecodeAccelerator::FlushTask() {
+  DCHECK(decoder_thread_proxy_->BelongsToCurrentThread());
+  DVLOG(1) << "Flush task";
+
+  // First flush all the pictures that haven't been outputted, notifying the
+  // client to output them.
+  bool res = decoder_->Flush();
+  RETURN_AND_NOTIFY_ON_FAILURE(res, "Failed flushing the decoder.",
+                               PLATFORM_FAILURE,); //NOLINT
+
+  // Put the decoder in idle state, ready to resume.
+  decoder_->Reset();
+
+  message_loop_->PostTask(FROM_HERE, base::Bind(
+      &VaapiVideoDecodeAccelerator::FinishFlush, weak_this_));
+}
+
+void VaapiVideoDecodeAccelerator::Flush() {
+  DCHECK_EQ(message_loop_, base::MessageLoop::current());
+  DVLOG(1) << "Got flush request";
+
+  base::AutoLock auto_lock(lock_);
+  state_ = kFlushing;
+  // Queue a flush task after all existing decoding tasks to clean up.
+  decoder_thread_proxy_->PostTask(FROM_HERE, base::Bind(
+      &VaapiVideoDecodeAccelerator::FlushTask, base::Unretained(this)));
+
+  input_ready_.Signal();
+  surfaces_available_.Signal();
+}
+
+void VaapiVideoDecodeAccelerator::FinishFlush() {
+  DCHECK_EQ(message_loop_, base::MessageLoop::current());
+
+  finish_flush_pending_ = false;
+
+  base::AutoLock auto_lock(lock_);
+  if (state_ != kFlushing) {
+    DCHECK_EQ(state_, kDestroying);
+    return;  // We could've gotten destroyed already.
+  }
+
+  // Still waiting for textures from client to finish outputting all pending
+  // frames. Try again later.
+  if (!pending_output_cbs_.empty()) {
+    finish_flush_pending_ = true;
+    return;
+  }
+
+  state_ = kIdle;
+
+  message_loop_->PostTask(FROM_HERE, base::Bind(
+      &Client::NotifyFlushDone, client_));
+
+  DVLOG(1) << "Flush finished";
+}
+
+void VaapiVideoDecodeAccelerator::ResetTask() {
+  DCHECK(decoder_thread_proxy_->BelongsToCurrentThread());
+  DVLOG(1) << "ResetTask";
+
+  // All the decoding tasks from before the reset request from client are done
+  // by now, as this task was scheduled after them and client is expected not
+  // to call Decode() after Reset() and before NotifyResetDone.
+  decoder_->Reset();
+
+  base::AutoLock auto_lock(lock_);
+
+  // Return current input buffer, if present.
+  if (curr_input_buffer_.get())
+    ReturnCurrInputBuffer_Locked();
+
+  // And let client know that we are done with reset.
+  message_loop_->PostTask(FROM_HERE, base::Bind(
+      &VaapiVideoDecodeAccelerator::FinishReset, weak_this_));
+}
+
+void VaapiVideoDecodeAccelerator::Reset() {
+  DCHECK_EQ(message_loop_, base::MessageLoop::current());
+  DVLOG(1) << "Got reset request";
+
+  // This will make any new decode tasks exit early.
+  base::AutoLock auto_lock(lock_);
+  state_ = kResetting;
+  finish_flush_pending_ = false;
+
+  // Drop all remaining input buffers, if present.
+  while (!input_buffers_.empty()) {
+    message_loop_->PostTask(FROM_HERE, base::Bind(
+        &Client::NotifyEndOfBitstreamBuffer, client_,
+        input_buffers_.front()->id));
+    input_buffers_.pop();
+  }
+
+  decoder_thread_proxy_->PostTask(FROM_HERE, base::Bind(
+      &VaapiVideoDecodeAccelerator::ResetTask, base::Unretained(this)));
+
+  input_ready_.Signal();
+  surfaces_available_.Signal();
+}
+
+void VaapiVideoDecodeAccelerator::FinishReset() {
+  DCHECK_EQ(message_loop_, base::MessageLoop::current());
+  DVLOG(1) << "FinishReset";
+  base::AutoLock auto_lock(lock_);
+
+  if (state_ != kResetting) {
+    DCHECK(state_ == kDestroying || state_ == kUninitialized) << state_;
+    return;  // We could've gotten destroyed already.
+  }
+
+  // Drop pending outputs.
+  while (!pending_output_cbs_.empty())
+    pending_output_cbs_.pop();
+
+  if (awaiting_va_surfaces_recycle_) {
+    // Decoder requested a new surface set while we were waiting for it to
+    // finish the last DecodeTask, running at the time of Reset().
+    // Let the surface set change finish first before resetting.
+    message_loop_->PostTask(FROM_HERE, base::Bind(
+        &VaapiVideoDecodeAccelerator::FinishReset, weak_this_));
+    return;
+  }
+
+  num_stream_bufs_at_decoder_ = 0;
+  state_ = kIdle;
+
+  message_loop_->PostTask(FROM_HERE, base::Bind(
+      &Client::NotifyResetDone, client_));
+
+  // The client might have given us new buffers via Decode() while we were
+  // resetting and might be waiting for our move, and not call Decode() anymore
+  // until we return something. Post a DecodeTask() so that we won't
+  // sleep forever waiting for Decode() in that case. Having two of them
+  // in the pipe is harmless, the additional one will return as soon as it sees
+  // that we are back in kDecoding state.
+  if (!input_buffers_.empty()) {
+    state_ = kDecoding;
+    decoder_thread_proxy_->PostTask(FROM_HERE, base::Bind(
+      &VaapiVideoDecodeAccelerator::DecodeTask,
+      base::Unretained(this)));
+  }
+
+  DVLOG(1) << "Reset finished";
+}
+
+void VaapiVideoDecodeAccelerator::Cleanup() {
+  DCHECK_EQ(message_loop_, base::MessageLoop::current());
+
+  if (state_ == kUninitialized || state_ == kDestroying)
+    return;
+
+  DVLOG(1) << "Destroying VAVDA";
+  base::AutoLock auto_lock(lock_);
+  state_ = kDestroying;
+
+  client_ptr_factory_.reset();
+  weak_this_factory_.InvalidateWeakPtrs();
+
+  {
+    base::AutoUnlock auto_unlock(lock_);
+    // Post a dummy task to the decoder_thread_ to ensure it is drained.
+    base::WaitableEvent waiter(false, false);
+    decoder_thread_proxy_->PostTask(FROM_HERE, base::Bind(
+        &base::WaitableEvent::Signal, base::Unretained(&waiter)));
+    input_ready_.Signal();
+    surfaces_available_.Signal();
+    waiter.Wait();
+    decoder_thread_.Stop();
+  }
+
+  state_ = kUninitialized;
+}
+
+void VaapiVideoDecodeAccelerator::Destroy() {
+  DCHECK_EQ(message_loop_, base::MessageLoop::current());
+  Cleanup();
+  delete this;
+}
+
+bool VaapiVideoDecodeAccelerator::CanDecodeOnIOThread() {
+  return false;
+}
+
+}  // namespace media
--- /dev/null
+++ b/media/vaapi_video_decode_accelerator.h
@@ -0,0 +1,278 @@
+// Copyright (c) 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// This file contains an implementation of VideoDecoderAccelerator
+// that utilizes hardware video decoder present on Intel CPUs.
+
+#ifndef OZONE_MEDIA_VAAPI_VIDEO_DECODE_ACCELERATOR_H_
+#define OZONE_MEDIA_VAAPI_VIDEO_DECODE_ACCELERATOR_H_
+
+#include <list>
+#include <map>
+#include <queue>
+#include <utility>
+#include <vector>
+
+#include "base/logging.h"
+#include "base/memory/linked_ptr.h"
+#include "base/memory/shared_memory.h"
+#include "base/memory/weak_ptr.h"
+#include "base/message_loop/message_loop.h"
+#include "base/synchronization/condition_variable.h"
+#include "base/synchronization/lock.h"
+#include "base/threading/non_thread_safe.h"
+#include "base/threading/thread.h"
+#include "content/common/content_export.h"
+#include "media/base/bitstream_buffer.h"
+#include "media/video/picture.h"
+#include "media/video/video_decode_accelerator.h"
+#include "vaapi_h264_decoder.h"
+#include "vaapi_wrapper.h"
+
+namespace media {
+
+// Class to provide video decode acceleration for Intel systems with hardware
+// support for it, and on which libva is available.
+// Decoding tasks are performed in a separate decoding thread.
+//
+// Threading/life-cycle: this object is created & destroyed on the GPU
+// ChildThread.  A few methods on it are called on the decoder thread which is
+// stopped during |this->Destroy()|, so any tasks posted to the decoder thread
+// can assume |*this| is still alive.  See |weak_this_| below for more details.
+class VaapiVideoDecodeAccelerator
+    : public media::VideoDecodeAccelerator {
+ public:
+  VaapiVideoDecodeAccelerator(
+      const base::Callback<bool(void)>& make_context_current); //NOLINT
+  virtual  ~VaapiVideoDecodeAccelerator();
+
+  // media::VideoDecodeAccelerator implementation.
+   bool Initialize(media::VideoCodecProfile profile,
+                          Client* client) override;
+   void Decode(const media::BitstreamBuffer& bitstream_buffer) override;
+   void AssignPictureBuffers(
+      const std::vector<media::PictureBuffer>& buffers) override;
+   void ReusePictureBuffer(int32 picture_buffer_id) override;
+   void Flush() override;
+   void Reset() override;
+   void Destroy() override;
+   bool CanDecodeOnIOThread() override;
+
+private:
+  // Notify the client that an error has occurred and decoding cannot continue.
+  void NotifyError(Error error);
+
+  // Map the received input buffer into this process' address space and
+  // queue it for decode.
+  void MapAndQueueNewInputBuffer(
+      const media::BitstreamBuffer& bitstream_buffer);
+
+  // Get a new input buffer from the queue and set it up in decoder. This will
+  // sleep if no input buffers are available. Return true if a new buffer has
+  // been set up, false if an early exit has been requested (due to initiated
+  // reset/flush/destroy).
+  bool GetInputBuffer_Locked();
+
+  // Signal the client that the current buffer has been read and can be
+  // returned. Will also release the mapping.
+  void ReturnCurrInputBuffer_Locked();
+
+  // Pass one or more output buffers to the decoder. This will sleep
+  // if no buffers are available. Return true if buffers have been set up or
+  // false if an early exit has been requested (due to initiated
+  // reset/flush/destroy).
+  bool FeedDecoderWithOutputSurfaces_Locked();
+
+  // Continue decoding given input buffers and sleep waiting for input/output
+  // as needed. Will exit if a new set of surfaces or reset/flush/destroy
+  // is requested.
+  void DecodeTask();
+
+  // Scheduled after receiving a flush request and executed after the current
+  // decoding task finishes decoding pending inputs. Makes the decoder return
+  // all remaining output pictures and puts it in an idle state, ready
+  // to resume if needed and schedules a FinishFlush.
+  void FlushTask();
+
+  // Scheduled by the FlushTask after decoder is flushed to put VAVDA into idle
+  // state and notify the client that flushing has been finished.
+  void FinishFlush();
+
+  // Scheduled after receiving a reset request and executed after the current
+  // decoding task finishes decoding the current frame. Puts the decoder into
+  // an idle state, ready to resume if needed, discarding decoded but not yet
+  // outputted pictures (decoder keeps ownership of their associated picture
+  // buffers). Schedules a FinishReset afterwards.
+  void ResetTask();
+
+  // Scheduled by ResetTask after it's done putting VAVDA into an idle state.
+  // Drops remaining input buffers and notifies the client that reset has been
+  // finished.
+  void FinishReset();
+
+  // Helper for Destroy(), doing all the actual work except for deleting self.
+  void Cleanup();
+
+  // Get a usable framebuffer configuration for use in binding textures
+  // or return false on failure.
+  bool InitializeFBConfig();
+
+  // Callback for the decoder to execute when it wants us to output given
+  // |va_surface|.
+  void SurfaceReady(int32 input_id, const scoped_refptr<VASurface>& va_surface);
+
+  // Represents a texture bound to an X Pixmap for output purposes.
+  class TFPPicture;
+
+  // Callback to be executed once we have a |va_surface| to be output and
+  // an available |tfp_picture| to use for output.
+  // Puts contents of |va_surface| into given |tfp_picture|, releases the
+  // surface and passes the resulting picture to client for output.
+  void OutputPicture(const scoped_refptr<VASurface>& va_surface,
+                     int32 input_id,
+                     TFPPicture* tfp_picture);
+
+  // Try to OutputPicture() if we have both a ready surface and picture.
+  void TryOutputSurface();
+
+  // Called when a VASurface is no longer in use by the decoder or is not being
+  // synced/waiting to be synced to a picture. Returns it to available surfaces
+  // pool.
+  void RecycleVASurfaceID(VASurfaceID va_surface_id);
+
+  // Initiate wait cycle for surfaces to be released before we release them
+  // and allocate new ones, as requested by the decoder.
+  void InitiateSurfaceSetChange(size_t num_pics, gfx::Size size);
+  // Check if the surfaces have been released or post ourselves for later.
+  void TryFinishSurfaceSetChange();
+
+  base::Callback<bool(void)> make_context_current_; //NOLINT
+
+  // VAVDA state.
+  enum State {
+    // Initialize() not called yet or failed.
+    kUninitialized,
+    // DecodeTask running.
+    kDecoding,
+    // Resetting, waiting for decoder to finish current task and cleanup.
+    kResetting,
+    // Flushing, waiting for decoder to finish current task and cleanup.
+    kFlushing,
+    // Idle, decoder in state ready to start/resume decoding.
+    kIdle,
+    // Destroying, waiting for the decoder to finish current task.
+    kDestroying,
+  };
+
+  // Protects input buffer and surface queues and state_.
+  base::Lock lock_;
+  State state_;
+
+  // An input buffer awaiting consumption, provided by the client.
+  struct InputBuffer {
+    InputBuffer();
+    ~InputBuffer();
+
+    int32 id;
+    size_t size;
+    scoped_ptr<base::SharedMemory> shm;
+  };
+
+  // Queue for incoming input buffers.
+  typedef std::queue<linked_ptr<InputBuffer> > InputBuffers;
+  InputBuffers input_buffers_;
+  // Signalled when input buffers are queued onto the input_buffers_ queue.
+  base::ConditionVariable input_ready_;
+
+  // Current input buffer at decoder.
+  linked_ptr<InputBuffer> curr_input_buffer_;
+
+  // Queue for incoming output buffers (texture ids).
+  typedef std::queue<int32> OutputBuffers;
+  OutputBuffers output_buffers_;
+
+  typedef std::map<int32, linked_ptr<TFPPicture> > TFPPictures;
+  // All allocated TFPPictures, regardless of their current state. TFPPictures
+  // are allocated once and destroyed at the end of decode.
+  TFPPictures tfp_pictures_;
+
+  // Return a TFPPicture associated with given client-provided id.
+  TFPPicture* TFPPictureById(int32 picture_buffer_id);
+
+  // VA Surfaces no longer in use that can be passed back to the decoder for
+  // reuse, once it requests them.
+  std::list<VASurfaceID> available_va_surfaces_;
+  // Signalled when output surfaces are queued onto the available_va_surfaces_
+  // queue.
+  base::ConditionVariable surfaces_available_;
+
+  // Pending output requests from the decoder. When it indicates that we should
+  // output a surface and we have an available TFPPicture (i.e. texture) ready
+  // to use, we'll execute the callback passing the TFPPicture. The callback
+  // will put the contents of the surface into the picture and return it to
+  // the client, releasing the surface as well.
+  // If we don't have any available TFPPictures at the time when the decoder
+  // requests output, we'll store the request on pending_output_cbs_ queue for
+  // later and run it once the client gives us more textures
+  // via ReusePictureBuffer().
+  typedef base::Callback<void(TFPPicture*)> OutputCB;
+  std::queue<OutputCB> pending_output_cbs_;
+
+  // ChildThread's message loop
+  base::MessageLoop* message_loop_;
+
+  // WeakPtr<> pointing to |this| for use in posting tasks from the decoder
+  // thread back to the ChildThread.  Because the decoder thread is a member of
+  // this class, any task running on the decoder thread is guaranteed that this
+  // object is still alive.  As a result, tasks posted from ChildThread to
+  // decoder thread should use base::Unretained(this), and tasks posted from the
+  // decoder thread to the ChildThread should use |weak_this_|.
+  base::WeakPtr<VaapiVideoDecodeAccelerator> weak_this_;
+
+  // Callback used when creating VASurface objects.
+  VASurface::ReleaseCB va_surface_release_cb_;
+
+  // To expose client callbacks from VideoDecodeAccelerator.
+  // NOTE: all calls to these objects *MUST* be executed on message_loop_.
+  scoped_ptr<base::WeakPtrFactory<Client> > client_ptr_factory_;
+  base::WeakPtr<Client> client_;
+
+  scoped_ptr<VaapiWrapper> vaapi_wrapper_;
+
+  // Comes after vaapi_wrapper_ to ensure its destructor is executed before
+  // vaapi_wrapper_ is destroyed.
+  scoped_ptr<VaapiH264Decoder> decoder_;
+  base::Thread decoder_thread_;
+  // Use this to post tasks to |decoder_thread_| instead of
+  // |decoder_thread_.message_loop()| because the latter will be NULL once
+  // |decoder_thread_.Stop()| returns.
+  scoped_refptr<base::MessageLoopProxy> decoder_thread_proxy_;
+
+  int num_frames_at_client_;
+  int num_stream_bufs_at_decoder_;
+
+  // Whether we are waiting for any pending_output_cbs_ to be run before
+  // NotifyingFlushDone.
+  bool finish_flush_pending_;
+
+  // Decoder requested a new surface set and we are waiting for all the surfaces
+  // to be returned before we can free them.
+  bool awaiting_va_surfaces_recycle_;
+
+  // Last requested number/resolution of output picture buffers.
+  size_t requested_num_pics_;
+  gfx::Size requested_pic_size_;
+
+  // The WeakPtrFactory for |weak_this_|.
+  base::WeakPtrFactory<VaapiVideoDecodeAccelerator> weak_this_factory_;
+
+  // Whether VaapiWrapper supports vaLockBuffer apis.
+  bool supports_valockBuffer_apis_;
+
+  DISALLOW_COPY_AND_ASSIGN(VaapiVideoDecodeAccelerator);
+};
+
+}  // namespace media
+
+#endif  // OZONE_MEDIA_VAAPI_VIDEO_DECODE_ACCELERATOR_H_
--- /dev/null
+++ b/media/vaapi_wrapper.cc
@@ -0,0 +1,506 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "vaapi_wrapper.h"
+
+#include <dlfcn.h>
+// XXX
+#include <wayland-client.h>
+
+#include "base/bind.h"
+#include "base/logging.h"
+#include "base/numerics/safe_conversions.h"
+// Auto-generated for dlopen libva libraries
+#include "media/media/va_stubs.h"
+
+#include "third_party/libva/va/wayland/va_wayland.h"
+#include "third_party/libva/va/va_drmcommon.h"
+
+using media_media::kModuleVa_wayland;
+using media_media::InitializeStubs;
+using media_media::StubPathMap;
+
+static const base::FilePath::CharType kVaLib[] =
+    FILE_PATH_LITERAL("libva-wayland.so.1");
+
+static const char kVaLockBufferSymbol[] = "vaLockBuffer";
+static const char kVaUnlockBufferSymbol[] = "vaUnlockBuffer";
+
+#define LOG_VA_ERROR_AND_REPORT(va_error, err_msg)         \
+  do {                                                     \
+    DVLOG(1) << err_msg                                    \
+             << " VA error: " << vaErrorStr(va_error);     \
+    report_error_to_uma_cb_.Run();                         \
+  } while (0)
+
+#define VA_LOG_ON_ERROR(va_error, err_msg)                 \
+  do {                                                     \
+    if ((va_error) != VA_STATUS_SUCCESS)                   \
+      LOG_VA_ERROR_AND_REPORT(va_error, err_msg);          \
+  } while (0)
+
+#define VA_SUCCESS_OR_RETURN(va_error, err_msg, ret)       \
+  do {                                                     \
+    if ((va_error) != VA_STATUS_SUCCESS) {                 \
+      LOG_VA_ERROR_AND_REPORT(va_error, err_msg);          \
+      return (ret);                                        \
+    }                                                      \
+  } while (0)
+
+namespace media {
+
+// Maps Profile enum values to VaProfile values.
+static VAProfile ProfileToVAProfile(
+    media::VideoCodecProfile profile,
+    const std::vector<VAProfile>& supported_profiles) {
+
+  VAProfile va_profile = VAProfileNone;
+
+  switch (profile) {
+    case media::H264PROFILE_BASELINE:
+      va_profile = VAProfileH264Baseline;
+      break;
+    case media::H264PROFILE_MAIN:
+      va_profile = VAProfileH264Main;
+      break;
+    // TODO(posciak): See if we can/want support other variants
+    // of media::H264PROFILE_HIGH*.
+    case media::H264PROFILE_HIGH:
+      va_profile = VAProfileH264High;
+      break;
+    default:
+      break;
+  }
+
+  bool supported = std::find(supported_profiles.begin(),
+                             supported_profiles.end(),
+                             va_profile) != supported_profiles.end();
+
+  if (!supported && va_profile == VAProfileH264Baseline) {
+    // crbug.com/345569: media::ProfileIDToVideoCodecProfile() currently strips
+    // the information whether the profile is constrained or not, so we have no
+    // way to know here. Try for baseline first, but if it is not supported,
+    // try constrained baseline and hope this is what it actually is
+    // (which in practice is true for a great majority of cases).
+    if (std::find(supported_profiles.begin(),
+                  supported_profiles.end(),
+                  VAProfileH264ConstrainedBaseline) !=
+        supported_profiles.end()) {
+      va_profile = VAProfileH264ConstrainedBaseline;
+      DVLOG(1) << "Falling back to constrained baseline profile.";
+    }
+  }
+
+  return va_profile;
+}
+
+VASurface::VASurface(VASurfaceID va_surface_id, const ReleaseCB& release_cb)
+    : va_surface_id_(va_surface_id),
+      release_cb_(release_cb) {
+  DCHECK(!release_cb_.is_null());
+}
+
+VASurface::~VASurface() {
+  release_cb_.Run(va_surface_id_);
+}
+
+VaapiWrapper::VaapiWrapper()
+    : va_display_(NULL),
+      va_config_id_(VA_INVALID_ID),
+      va_context_id_(VA_INVALID_ID) {
+}
+
+VaapiWrapper::~VaapiWrapper() {
+  DestroyPendingBuffers();
+  DestroySurfaces();
+  Deinitialize();
+}
+
+scoped_ptr<VaapiWrapper> VaapiWrapper::Create(
+    media::VideoCodecProfile profile,
+    void* display,
+    const base::Closure& report_error_to_uma_cb) {
+  scoped_ptr<VaapiWrapper> vaapi_wrapper(new VaapiWrapper());
+
+  if (!vaapi_wrapper->Initialize(profile, display, report_error_to_uma_cb))
+    vaapi_wrapper.reset();
+
+  return vaapi_wrapper.Pass();
+}
+
+void VaapiWrapper::TryToSetVADisplayAttributeToLocalGPU() {
+  VADisplayAttribute item = {VADisplayAttribRenderMode,
+                             1,  // At least support '_LOCAL_OVERLAY'.
+                             -1,  // The maximum possible support 'ALL'.
+                             VA_RENDER_MODE_LOCAL_GPU,
+                             VA_DISPLAY_ATTRIB_SETTABLE};
+
+  VAStatus va_res = vaSetDisplayAttributes(va_display_, &item, 1);
+  if (va_res != VA_STATUS_SUCCESS)
+    DVLOG(2) << "vaSetDisplayAttributes unsupported, ignoring by default.";
+}
+
+bool VaapiWrapper::Initialize(media::VideoCodecProfile profile,
+                              void* display,
+                              const base::Closure& report_error_to_uma_cb) {
+  static bool vaapi_functions_initialized = PostSandboxInitialization();
+  if (!vaapi_functions_initialized) {
+    DVLOG(1) << "Failed to initialize VAAPI libs";
+    return false;
+  }
+
+  report_error_to_uma_cb_ = report_error_to_uma_cb;
+
+  base::AutoLock auto_lock(va_lock_);
+
+  va_display_ = vaGetDisplayWl(static_cast<wl_display *>(display));
+  if (!vaDisplayIsValid(va_display_)) {
+    DVLOG(1) << "Could not get a valid VA display";
+    return false;
+  }
+
+  VAStatus va_res = vaInitialize(va_display_, &major_version_, &minor_version_);
+  VA_SUCCESS_OR_RETURN(va_res, "vaInitialize failed", false);
+  DVLOG(1) << "VAAPI version: " << major_version_ << "." << minor_version_;
+
+  if (VAAPIVersionLessThan(0, 34)) {
+    DVLOG(1) << "VAAPI version < 0.34 is not supported.";
+    return false;
+  }
+
+  // Query the driver for supported profiles.
+  int max_profiles = vaMaxNumProfiles(va_display_);
+  std::vector<VAProfile> supported_profiles(
+      base::checked_cast<size_t>(max_profiles));
+
+  int num_supported_profiles;
+  va_res = vaQueryConfigProfiles(
+      va_display_, &supported_profiles[0], &num_supported_profiles);
+  VA_SUCCESS_OR_RETURN(va_res, "vaQueryConfigProfiles failed", false);
+  if (num_supported_profiles < 0 || num_supported_profiles > max_profiles) {
+    DVLOG(1) << "vaQueryConfigProfiles returned: " << num_supported_profiles;
+    return false;
+  }
+
+  supported_profiles.resize(base::checked_cast<size_t>(num_supported_profiles));
+
+  VAProfile va_profile = ProfileToVAProfile(profile, supported_profiles);
+  if (va_profile == VAProfileNone) {
+    DVLOG(1) << "Unsupported profile";
+    return false;
+  }
+
+  VAConfigAttrib attrib = {VAConfigAttribRTFormat, 0};
+  const VAEntrypoint kEntrypoint = VAEntrypointVLD;
+  va_res = vaGetConfigAttributes(va_display_, va_profile, kEntrypoint,
+                                 &attrib, 1);
+  VA_SUCCESS_OR_RETURN(va_res, "vaGetConfigAttributes failed", false);
+
+  if (!(attrib.value & VA_RT_FORMAT_YUV420)) {
+    DVLOG(1) << "YUV420 not supported by this VAAPI implementation";
+    return false;
+  }
+
+  TryToSetVADisplayAttributeToLocalGPU();
+
+  va_res = vaCreateConfig(va_display_, va_profile, kEntrypoint,
+                          &attrib, 1, &va_config_id_);
+  VA_SUCCESS_OR_RETURN(va_res, "vaCreateConfig failed", false);
+
+  return true;
+}
+
+void VaapiWrapper::Deinitialize() {
+  base::AutoLock auto_lock(va_lock_);
+
+  if (va_config_id_ != VA_INVALID_ID) {
+    VAStatus va_res = vaDestroyConfig(va_display_, va_config_id_);
+    VA_LOG_ON_ERROR(va_res, "vaDestroyConfig failed");
+  }
+
+  if (va_display_) {
+    VAStatus va_res = vaTerminate(va_display_);
+    VA_LOG_ON_ERROR(va_res, "vaTerminate failed");
+  }
+
+  va_config_id_ = VA_INVALID_ID;
+  va_display_ = NULL;
+}
+
+bool VaapiWrapper::VAAPIVersionLessThan(int major, int minor) {
+  return (major_version_ < major) ||
+      (major_version_ == major && minor_version_ < minor);
+}
+
+bool VaapiWrapper::CreateSurfaces(gfx::Size size,
+                                  size_t num_surfaces,
+                                  std::vector<VASurfaceID>* va_surfaces) {
+  base::AutoLock auto_lock(va_lock_);
+  DVLOG(2) << "Creating " << num_surfaces << " surfaces";
+
+  DCHECK(va_surfaces->empty());
+  DCHECK(va_surface_ids_.empty());
+  va_surface_ids_.resize(num_surfaces);
+
+  // Allocate surfaces in driver.
+  VAStatus va_res = vaCreateSurfaces(va_display_,
+                                     VA_RT_FORMAT_YUV420,
+                                     size.width(), size.height(),
+                                     &va_surface_ids_[0],
+                                     va_surface_ids_.size(),
+                                     NULL, 0);
+
+  VA_LOG_ON_ERROR(va_res, "vaCreateSurfaces failed");
+  if (va_res != VA_STATUS_SUCCESS) {
+    va_surface_ids_.clear();
+    return false;
+  }
+
+  // And create a context associated with them.
+  va_res = vaCreateContext(va_display_, va_config_id_,
+                           size.width(), size.height(), VA_PROGRESSIVE,
+                           &va_surface_ids_[0], va_surface_ids_.size(),
+                           &va_context_id_);
+
+  VA_LOG_ON_ERROR(va_res, "vaCreateContext failed");
+  if (va_res != VA_STATUS_SUCCESS) {
+    DestroySurfaces();
+    return false;
+  }
+
+  *va_surfaces = va_surface_ids_;
+  return true;
+}
+
+void VaapiWrapper::DestroySurfaces() {
+  base::AutoLock auto_lock(va_lock_);
+  DVLOG(2) << "Destroying " << va_surface_ids_.size()  << " surfaces";
+
+  if (va_context_id_ != VA_INVALID_ID) {
+    VAStatus va_res = vaDestroyContext(va_display_, va_context_id_);
+    VA_LOG_ON_ERROR(va_res, "vaDestroyContext failed");
+  }
+
+  if (!va_surface_ids_.empty()) {
+    VAStatus va_res = vaDestroySurfaces(va_display_, &va_surface_ids_[0],
+                                        va_surface_ids_.size());
+    VA_LOG_ON_ERROR(va_res, "vaDestroySurfaces failed");
+  }
+
+  va_surface_ids_.clear();
+  va_context_id_ = VA_INVALID_ID;
+}
+
+bool VaapiWrapper::SubmitBuffer(VABufferType va_buffer_type,
+                                size_t size,
+                                void* buffer) {
+  base::AutoLock auto_lock(va_lock_);
+
+  VABufferID buffer_id;
+  VAStatus va_res = vaCreateBuffer(va_display_, va_context_id_,
+                                   va_buffer_type, size,
+                                   1, buffer, &buffer_id);
+  VA_SUCCESS_OR_RETURN(va_res, "Failed to create a VA buffer", false);
+
+  switch (va_buffer_type) {
+    case VASliceParameterBufferType:
+    case VASliceDataBufferType:
+      pending_slice_bufs_.push_back(buffer_id);
+      break;
+
+    default:
+      pending_va_bufs_.push_back(buffer_id);
+      break;
+  }
+
+  return true;
+}
+
+void VaapiWrapper::DestroyPendingBuffers() {
+  base::AutoLock auto_lock(va_lock_);
+
+  for (size_t i = 0; i < pending_va_bufs_.size(); ++i) {
+    VAStatus va_res = vaDestroyBuffer(va_display_, pending_va_bufs_[i]);
+    VA_LOG_ON_ERROR(va_res, "vaDestroyBuffer failed");
+  }
+
+  for (size_t i = 0; i < pending_slice_bufs_.size(); ++i) {
+    VAStatus va_res = vaDestroyBuffer(va_display_, pending_slice_bufs_[i]);
+    VA_LOG_ON_ERROR(va_res, "vaDestroyBuffer failed");
+  }
+
+  pending_va_bufs_.clear();
+  pending_slice_bufs_.clear();
+}
+
+bool VaapiWrapper::SubmitDecode(VASurfaceID va_surface_id) {
+  base::AutoLock auto_lock(va_lock_);
+
+  DVLOG(4) << "Pending VA bufs to commit: " << pending_va_bufs_.size();
+  DVLOG(4) << "Pending slice bufs to commit: " << pending_slice_bufs_.size();
+  DVLOG(4) << "Decoding into VA surface " << va_surface_id;
+
+  // Get ready to decode into surface.
+  VAStatus va_res = vaBeginPicture(va_display_, va_context_id_,
+                                   va_surface_id);
+  VA_SUCCESS_OR_RETURN(va_res, "vaBeginPicture failed", false);
+
+  // Commit parameter and slice buffers.
+  va_res = vaRenderPicture(va_display_, va_context_id_,
+                           &pending_va_bufs_[0], pending_va_bufs_.size());
+  VA_SUCCESS_OR_RETURN(va_res, "vaRenderPicture for va_bufs failed", false);
+
+  va_res = vaRenderPicture(va_display_, va_context_id_,
+                           &pending_slice_bufs_[0],
+                           pending_slice_bufs_.size());
+  VA_SUCCESS_OR_RETURN(va_res, "vaRenderPicture for slices failed", false);
+
+  // Instruct HW decoder to start processing committed buffers (decode this
+  // picture). This does not block until the end of decode.
+  va_res = vaEndPicture(va_display_, va_context_id_);
+  VA_SUCCESS_OR_RETURN(va_res, "vaEndPicture failed", false);
+
+  return true;
+}
+
+bool VaapiWrapper::DecodeAndDestroyPendingBuffers(VASurfaceID va_surface_id) {
+  bool result = SubmitDecode(va_surface_id);
+  DestroyPendingBuffers();
+  return result;
+}
+
+bool VaapiWrapper::CreateRGBImage(gfx::Size size, VAImage* image) {
+  base::AutoLock auto_lock(va_lock_);
+  VAStatus va_res;
+  VAImageFormat format;
+  format.fourcc = VA_FOURCC_BGRX;
+  format.byte_order = VA_LSB_FIRST;
+  format.bits_per_pixel = 32;
+  format.depth = 24;
+  format.red_mask = 0x0000ff;
+  format.green_mask = 0x00ff00;
+  format.blue_mask = 0xff0000;
+  format.alpha_mask = 0;
+
+  va_res = vaCreateImage(va_display_,
+                         &format,
+                         size.width(),
+                         size.height(),
+                         image);
+  VA_SUCCESS_OR_RETURN(va_res, "Failed to create image", false);
+  return true;
+}
+
+void VaapiWrapper::DestroyImage(VAImage* image) {
+  base::AutoLock auto_lock(va_lock_);
+  vaDestroyImage(va_display_, image->image_id);
+}
+
+bool VaapiWrapper::MapImage(VAImage* image, void** buffer) {
+  base::AutoLock auto_lock(va_lock_);
+
+  VAStatus va_res = vaMapBuffer(va_display_, image->buf, buffer);
+  VA_SUCCESS_OR_RETURN(va_res, "Failed to map image", false);
+  return true;
+}
+
+void VaapiWrapper::UnmapImage(VAImage* image) {
+  base::AutoLock auto_lock(va_lock_);
+  vaUnmapBuffer(va_display_, image->buf);
+}
+
+bool VaapiWrapper::PutSurfaceIntoImage(VASurfaceID va_surface_id,
+                                       VAImage* image) {
+  base::AutoLock auto_lock(va_lock_);
+  VAStatus va_res = vaSyncSurface(va_display_, va_surface_id);
+  VA_SUCCESS_OR_RETURN(va_res, "Failed syncing surface", false);
+
+  va_res = vaGetImage(va_display_,
+                      va_surface_id,
+                      0,
+                      0,
+                      image->width,
+                      image->height,
+                      image->image_id);
+  VA_SUCCESS_OR_RETURN(va_res, "Failed to put surface into image", false);
+  return true;
+}
+
+bool VaapiWrapper::LockBuffer(VASurfaceID va_surface_id,
+                              VABufferID buf_id,
+                              VABufferInfo* buf_info) {
+  DCHECK(buf_info);
+  base::AutoLock auto_lock(va_lock_);
+
+  buf_info->mem_type = VA_SURFACE_ATTRIB_MEM_TYPE_KERNEL_DRM;
+  VAStatus va_res = vaLockBuffer(va_display_, buf_id, buf_info);
+  VA_SUCCESS_OR_RETURN(va_res, "Failed to lock vabuffer", false);
+
+  return true;
+}
+
+bool VaapiWrapper::UnlockBuffer(VASurfaceID va_surface_id,
+                                VABufferID buf_id,
+                                VABufferInfo* buf_info) {
+  DCHECK(buf_info);
+  base::AutoLock auto_lock(va_lock_);
+  VAStatus va_res = vaUnlockBuffer(va_display_, buf_id, buf_info);
+  VA_SUCCESS_OR_RETURN(va_res, "Failed to unlock vabuffer", false);
+
+  return true;
+}
+
+
+bool VaapiWrapper::GetVaImageForTesting(VASurfaceID va_surface_id,
+                                        VAImage* image,
+                                        void** mem) {
+  base::AutoLock auto_lock(va_lock_);
+
+  VAStatus va_res = vaSyncSurface(va_display_, va_surface_id);
+  VA_SUCCESS_OR_RETURN(va_res, "Failed syncing surface", false);
+
+  // Derive a VAImage from the VASurface
+  va_res = vaDeriveImage(va_display_, va_surface_id, image);
+  VA_LOG_ON_ERROR(va_res, "vaDeriveImage failed");
+  if (va_res != VA_STATUS_SUCCESS)
+    return false;
+
+  // Map the VAImage into memory
+  va_res = vaMapBuffer(va_display_, image->buf, mem);
+  VA_LOG_ON_ERROR(va_res, "vaMapBuffer failed");
+  if (va_res == VA_STATUS_SUCCESS)
+    return true;
+
+  vaDestroyImage(va_display_, image->image_id);
+  return false;
+}
+
+void VaapiWrapper::ReturnVaImageForTesting(VAImage* image) {
+  base::AutoLock auto_lock(va_lock_);
+
+  vaUnmapBuffer(va_display_, image->buf);
+  vaDestroyImage(va_display_, image->image_id);
+}
+
+// static
+bool VaapiWrapper::PostSandboxInitialization() {
+  StubPathMap paths;
+  paths[kModuleVa_wayland].push_back(kVaLib);
+  bool ret = InitializeStubs(paths);
+  if (ret == false)
+    LOG(WARNING) << "Could not open " << kVaLib;
+  return ret;
+}
+
+bool VaapiWrapper::SupportsVaLockBufferApis() {
+  void* handle = dlopen(kVaLib, RTLD_LAZY);
+  if (!handle) {
+    LOG(ERROR) << "Could not open " << kVaLib;
+    return false;
+  }
+  return dlsym(handle, kVaLockBufferSymbol) &&
+         dlsym(handle, kVaUnlockBufferSymbol);
+}
+
+}  // namespace media
--- /dev/null
+++ b/media/vaapi_wrapper.h
@@ -0,0 +1,162 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// This file contains an implementation of VaapiWrapper, used by
+// VaapiVideoDecodeAccelerator and VaapiH264Decoder to interface
+// with libva (VA-API library for hardware video decode).
+
+#ifndef OZONE_MEDIA_VAAPI_WRAPPER_H_
+#define OZONE_MEDIA_VAAPI_WRAPPER_H_
+
+#include <vector>
+#include "base/callback.h"
+#include "base/memory/ref_counted.h"
+#include "base/synchronization/lock.h"
+#include "content/common/content_export.h"
+#include "media/base/video_decoder_config.h"
+#include "media/base/video_frame.h"
+#include "third_party/libva/va/wayland/va_wayland.h"
+#include "ui/gfx/size.h"
+#include "va_surface.h"
+
+namespace media {
+
+// This class handles VA-API calls and ensures proper locking of VA-API calls
+// to libva, the userspace shim to the HW decoder driver. libva is not
+// thread-safe, so we have to perform locking ourselves. This class is fully
+// synchronous and its methods can be called from any thread and may wait on
+// the va_lock_ while other, concurrent calls run.
+//
+// This class is responsible for managing VAAPI connection, contexts and state.
+// It is also responsible for managing and freeing VABuffers (not VASurfaces),
+// which are used to queue decode parameters and slice data to the HW decoder,
+// as well as underlying memory for VASurfaces themselves.
+class CONTENT_EXPORT VaapiWrapper {
+ public:
+  // |report_error_to_uma_cb| will be called independently from reporting
+  // errors to clients via method return values.
+  static scoped_ptr<VaapiWrapper> Create(
+      media::VideoCodecProfile profile,
+      void* display,
+      const base::Closure& report_error_to_uma_cb);
+
+  ~VaapiWrapper();
+
+  // Create |num_surfaces| backing surfaces in driver for VASurfaces, each
+  // of size |size|. Returns true when successful, with the created IDs in
+  // |va_surfaces| to be managed and later wrapped in VASurfaces.
+  // The client must DestroySurfaces() each time before calling this method
+  // again to free the allocated surfaces first, but is not required to do so
+  // at destruction time, as this will be done automatically from
+  // the destructor.
+  bool CreateSurfaces(gfx::Size size,
+                      size_t num_surfaces,
+                      std::vector<VASurfaceID>* va_surfaces);
+
+  // Free all memory allocated in CreateSurfaces.
+  void DestroySurfaces();
+
+  // Submit parameters or slice data of |va_buffer_type|, copying them from
+  // |buffer| of size |size|, into HW decoder. The data in |buffer| is no
+  // longer needed and can be freed after this method returns.
+  // Data submitted via this method awaits in the HW decoder until
+  // DecodeAndDestroyPendingBuffers is called to execute or
+  // DestroyPendingBuffers is used to cancel a pending decode.
+  bool SubmitBuffer(VABufferType va_buffer_type, size_t size, void* buffer);
+
+  // Cancel and destroy all buffers queued to the HW decoder via SubmitBuffer.
+  // Useful when a pending decode is to be cancelled (on reset or error).
+  void DestroyPendingBuffers();
+
+  // Execute decode in hardware into |va_surface_id} and destroy pending
+  // buffers. Return false if SubmitDecode() fails.
+  bool DecodeAndDestroyPendingBuffers(VASurfaceID va_surface_id);
+
+  bool CreateRGBImage(gfx::Size size, VAImage* image);
+  void DestroyImage(VAImage* image);
+
+  bool MapImage(VAImage* image, void** buffer);
+  void UnmapImage(VAImage* image);
+
+  // Put data from |va_surface_id| into |va_image|, converting/scaling it.
+  bool PutSurfaceIntoImage(VASurfaceID va_surface_id,
+                           VAImage* va_image);
+
+  bool LockBuffer(VASurfaceID va_surface_id,
+                  VABufferID buf_id,
+                  VABufferInfo* buf_info);
+  bool UnlockBuffer(VASurfaceID va_surface_id,
+                    VABufferID buf_id,
+                    VABufferInfo* buf_info);
+
+  // Returns true if the VAAPI version is less than the specified version.
+  bool VAAPIVersionLessThan(int major, int minor);
+
+  // Get a VAImage from a VASurface and map it into memory. The VAImage should
+  // be released using the ReturnVaImage function. Returns true when successful.
+  // This is intended for testing only.
+  bool GetVaImageForTesting(VASurfaceID va_surface_id,
+                            VAImage* image,
+                            void** mem);
+
+  // Release the VAImage (and the associated memory mapping) obtained from
+  // GetVaImage(). This is intended for testing only.
+  void ReturnVaImageForTesting(VAImage* image);
+
+  // Return true if libva supports vaLockBuffer & vaUnlockBuffer apis.
+  bool SupportsVaLockBufferApis();
+
+ private:
+  VaapiWrapper();
+
+  bool Initialize(media::VideoCodecProfile profile,
+                  void* display,
+                  const base::Closure& report_error__to_uma_cb);
+  void Deinitialize();
+
+  // Execute decode in hardware and destroy pending buffers. Return false if
+  // vaapi driver refuses to accept parameter or slice buffers submitted
+  // by client or if decode fails in hardware.
+  bool SubmitDecode(VASurfaceID va_surface_id);
+
+  // Attempt to set render mode to "render to texture.". Failure is non-fatal.
+  void TryToSetVADisplayAttributeToLocalGPU();
+
+  // Lazily initialize static data after sandbox is enabled.  Return false on
+  // init failure.
+  static bool PostSandboxInitialization();
+
+  // Libva is not thread safe, so we have to do locking for it ourselves.
+  // This lock is to be taken for the duration of all VA-API calls and for
+  // the entire decode execution sequence in DecodeAndDestroyPendingBuffers().
+  base::Lock va_lock_;
+
+  // Allocated ids for VASurfaces.
+  std::vector<VASurfaceID> va_surface_ids_;
+
+  // The VAAPI version.
+  int major_version_, minor_version_;
+
+  // VA handles.
+  // Both valid after successful Initialize() and until Deinitialize().
+  VADisplay va_display_;
+  VAConfigID va_config_id_;
+  // Created for the current set of va_surface_ids_ in CreateSurfaces() and
+  // valid until DestroySurfaces().
+  VAContextID va_context_id_;
+
+  // Data queued up for HW decoder, to be committed on next HW decode.
+  std::vector<VABufferID> pending_slice_bufs_;
+  std::vector<VABufferID> pending_va_bufs_;
+
+  // Called to report decoding errors to UMA. Errors to clients are reported via
+  // return values from public methods.
+  base::Closure report_error_to_uma_cb_;
+
+  DISALLOW_COPY_AND_ASSIGN(VaapiWrapper);
+};
+
+}  // namespace media
+
+#endif  // OZONE_MEDIA_VAAPI_WRAPPER_H_
--- /dev/null
+++ b/media/video.gypi
@@ -0,0 +1,64 @@
+# Copyright 2014 Intel Corporation. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+  'sources': [
+    'media_ozone_platform_wayland.cc',
+    'media_ozone_platform_wayland.h',
+    'h264_dpb.cc',
+    'h264_dpb.h',
+    'va_surface.h',
+    'vaapi_h264_decoder.cc',
+    'vaapi_h264_decoder.h',
+    'vaapi_video_decode_accelerator.cc',
+    'vaapi_video_decode_accelerator.h',
+    'vaapi_wrapper.cc',
+    'vaapi_wrapper.h',
+  ],
+  'variables': {
+    'extra_header': 'media/va_wayland_stub_header.fragment',
+    'sig_files': ['va_wayland.sigs'],
+    'generate_stubs_script': '<(DEPTH)/tools/generate_stubs/generate_stubs.py',
+    'outfile_type': 'posix_stubs',
+    'stubs_filename_root': 'va_stubs',
+    'project_path': 'media',
+    'intermediate_dir': '<(INTERMEDIATE_DIR)',
+    'output_root': '<(SHARED_INTERMEDIATE_DIR)/va',
+  },
+  'dependencies': [
+    '<(DEPTH)/ui/gl/gl.gyp:gl',
+  ],
+  'include_dirs': [
+    '<(DEPTH)/third_party/libva',
+    '<(DEPTH)/third_party/mesa/src/include',
+    '<(output_root)',
+    '<(SHARED_INTERMEDIATE_DIR)/ui/gl',
+  ],
+  'actions': [
+    {
+      'action_name': 'generate_stubs',
+      'inputs': [
+        '<(generate_stubs_script)',
+        '<(extra_header)',
+        '<@(sig_files)',
+      ],
+      'outputs': [
+        '<(intermediate_dir)/<(stubs_filename_root).cc',
+        '<(output_root)/<(project_path)/<(stubs_filename_root).h',
+      ],
+      'action': ['python',
+                 '<(generate_stubs_script)',
+                 '-i', '<(intermediate_dir)',
+                 '-o', '<(output_root)/<(project_path)',
+                 '-t', '<(outfile_type)',
+                 '-e', '<(extra_header)',
+                 '-s', '<(stubs_filename_root)',
+                 '-p', '<(project_path)',
+                 '<@(_inputs)',
+      ],
+      'process_outputs_as_sources': 1,
+      'message': 'Generating libva stubs for dynamic loading',
+    },
+ ]
+}
--- /dev/null
+++ b/ozone_impl.gyp
@@ -0,0 +1,38 @@
+# Copyright 2013 The Chromium Authors. All rights reserved.
+# Copyright 2013 Intel Corporation. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+  'targets': [
+    {
+      'target_name': 'wayland',
+      'type': '<(component)',
+      'dependencies': [
+        '<(DEPTH)/skia/skia.gyp:skia',
+        '<(DEPTH)/base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
+        'wayland/wayland.gyp:wayland_toolkit'
+      ],
+      'include_dirs': [
+        '..',
+      ],
+      'includes': [
+        'ui/ui.gypi',
+        'media/video.gypi',
+      ],
+      'defines': [
+        'OZONE_WAYLAND_IMPLEMENTATION',
+      ],
+      'sources': [
+        'platform/desktop_platform_screen.h',
+        'platform/ozone_export_wayland.h',
+        'platform/ozone_platform_wayland.cc',
+        'platform/ozone_platform_wayland.h',
+        'platform/ozone_wayland_window.cc',
+        'platform/ozone_wayland_window.h',
+        'platform/window_manager_wayland.cc',
+        'platform/window_manager_wayland.h',
+      ],
+    },
+  ]
+}
--- /dev/null
+++ b/packaging/rpm/OWNERS
@@ -0,0 +1 @@
+joone.hur@intel.com
--- /dev/null
+++ b/packaging/rpm/README
@@ -0,0 +1,82 @@
+This directory contains a collection of tools and RPM-related files used to
+build Chromium browser RPMs for Tizen IVI.
+
+BUILD INSTRUCTIONS
+------------------
+
+In the simplest case, a call to `gbs build' from the ozone/ directory suffices.
+It should create a Tizen chroot and launch a build from there, requiring no
+further interaction and producing a few RPMs at the end of the process.
+
+For more information on which other parameters one is normally expected to pass
+to `gbs build' (including "-A" to specify the Tizen architecture) and also on
+gbs' configuration file, please consult gbs' documentation.
+
+A very important thing to notice is that, due to the way the integration with
+gbs is implemented, _anything_ currently present in your source tree will be
+built, regardless of whether "--include-all" is passed to `gbs build' or not.
+
+INCREMENTAL BUILDS
+------------------
+
+By default, Chromium browser is built inside src/out/Release inside the Chromium's
+directory. Also by default, each call to `gbs build' will erase the RPM build
+root in the Tizen chroot, which means your previous build will be lost.
+
+To avoid that, you need to specify a different build directory, one located
+outside the build root. The new directory should be passed as a macro called
+BUILDDIR_NAME:
+
+  $ cd /path/to/src/ozone
+  $ gbs build -A i586 --define 'BUILDDIR_NAME /var/tmp/chromium-build'
+
+  (Note `/var/tmp/chromium-build` is still a directory inside the chroot, so to
+  the host system this is actually something like
+  `/home/user/GBSROOT/local/BUILD-ROOTS/scratch.i586.0/var/tmp/chromium-build`).
+
+In case the build gets broken somehow, one can then just remove whatever is
+faulty in the build directory (or the whole directory).
+
+It is important to note that depending on what the .spec file looks like, an
+incremental build may still rebuild some files even if nothing has changed: for
+example, if patches are applied as part of the %prep stage and they modify some
+source files, these ones will always be rebuilt.
+
+This method is not completely fail-proof, though, and a full rebuild may end up
+being triggered if:
+
+- Some problem happens in the `gbs build' call and the whole chroot (not only
+  the RPM build root) ends up being erased.
+
+- You use `gbs chroot' to call `make' yourself, as a simple change in the
+  original CFLAGS or CXXFLAGS triggers a rebuild of all files.
+
+- You change your source directory name for some reason. This is why
+  the generated source tarball does not contain a version number, for
+  example.
+
+FURTHER DETAILS
+---------------
+
+gbs, the tool used to generate RPM packages for Tizen, expects a single git
+tree with all the necessary sources available so that it can run `git archive',
+produce a tarball, extract it into a chroot and build from there.
+
+Chromium, on the other hand, is made of many independent git and Subversion
+repositories put together in a single directory structure. Additionally,
+Chromium is checked out as a subdirectory of Chromium itself. This all is
+unusual and does not work with gbs by default.
+
+The whole problem is worked around by having using git-buildpackage's hooks
+mechanism: the original tarball generated by git-buildpackage's call to `git
+archive' is replaced by a new one generated with the gbp-flat-tree.sh script
+located in packaging/. This new tarball contains everything in src/, except for
+a few files we exclude by default (version control files and directories, for
+example).
+
+The gbp-flat-tree.sh script also helps us with incremental builds: since the
+new tarball is generated with `tar' itself, all the files in the archive have
+their correct mtimes (which is not the case with `git archive'). This, together
+with an external build directory, allows one to avoid rebuilding all files
+every time, since the source files with the right modification times _and_ the
+build directory are preserved across builds.
--- /dev/null
+++ b/packaging/rpm/chromium-browser-ia32.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+/usr/lib/chromium/chrome --no-sandbox
--- /dev/null
+++ b/packaging/rpm/chromium-browser-x64.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+/usr/lib64/chromium/chrome --no-sandbox
--- /dev/null
+++ b/packaging/rpm/chromium.manifest
@@ -0,0 +1,5 @@
+<manifest>
+ <request>
+    <domain name="_"/>
+ </request>
+</manifest>
--- /dev/null
+++ b/packaging/rpm/chromium.spec
@@ -0,0 +1,249 @@
+%bcond_with x
+%bcond_with wayland
+
+Name:           chromium
+Version:        40.0.2200.0
+Release:        0
+Summary:        Chromium ozone-wayland
+License:        BSD-3-Clause
+Group:          Applications
+Url:            https://01.org/ozone-wayland
+Source:         %{name}.tar
+Source1:        chromium-browser-ia32.sh
+Source2:        chromium-browser-x64.sh
+Source1001:     chromium.manifest
+
+BuildRequires:  bison
+BuildRequires:  bzip2-devel
+BuildRequires:  expat-devel
+BuildRequires:  flex
+BuildRequires:  binutils-gold
+BuildRequires:  gperf
+BuildRequires:  libcap-devel
+BuildRequires:  ninja
+BuildRequires:  python
+BuildRequires:  python-xml
+BuildRequires:  perl
+BuildRequires:  which
+BuildRequires:  pkgconfig(alsa)
+BuildRequires:  pkgconfig(aul)
+BuildRequires:  pkgconfig(audio-session-mgr)
+BuildRequires:  pkgconfig(cairo)
+BuildRequires:  pkgconfig(capi-appfw-application)
+BuildRequires:  pkgconfig(capi-location-manager)
+BuildRequires:  pkgconfig(dbus-1)
+BuildRequires:  pkgconfig(fontconfig)
+BuildRequires:  pkgconfig(freetype2)
+BuildRequires:  pkgconfig(gles20)
+BuildRequires:  pkgconfig(glib-2.0)
+BuildRequires:  pkgconfig(haptic)
+BuildRequires:  pkgconfig(icu-i18n)
+BuildRequires:  pkgconfig(libdrm)
+BuildRequires:  pkgconfig(libexif)
+BuildRequires:  pkgconfig(libssl)
+BuildRequires:  pkgconfig(libpci)
+BuildRequires:  pkgconfig(libpulse)
+BuildRequires:  pkgconfig(libudev)
+BuildRequires:  pkgconfig(libxml-2.0)
+BuildRequires:  pkgconfig(libxslt)
+BuildRequires:  pkgconfig(nss)
+BuildRequires:  pkgconfig(pango)
+BuildRequires:  pkgconfig(pkgmgr-info)
+BuildRequires:  pkgconfig(pkgmgr-parser)
+BuildRequires:  pkgconfig(nspr)
+BuildRequires:  pkgconfig(sensor)
+BuildRequires:  pkgconfig(vconf)
+
+%if %{with x}
+BuildRequires:  pkgconfig(x11)
+BuildRequires:  pkgconfig(xcomposite)
+BuildRequires:  pkgconfig(xcursor)
+BuildRequires:  pkgconfig(xdamage)
+BuildRequires:  pkgconfig(xext)
+BuildRequires:  pkgconfig(xfixes)
+BuildRequires:  pkgconfig(xi)
+BuildRequires:  pkgconfig(xrandr)
+BuildRequires:  pkgconfig(xrender)
+BuildRequires:  pkgconfig(xscrnsaver)
+BuildRequires:  pkgconfig(xt)
+BuildRequires:  pkgconfig(xtst)
+%endif
+
+%if %{with wayland}
+BuildRequires:  pkgconfig(wayland-client)
+BuildRequires:  pkgconfig(wayland-cursor)
+BuildRequires:  pkgconfig(wayland-egl)
+BuildRequires:  pkgconfig(xkbcommon)
+%endif
+
+%description
+# Ozone is a set of classes in Chromium for abstracting different window systems on Linux. It provides abstraction for the construction of accelerated surfaces underlying Aura UI framework, input devices assignment, and event handling.
+
+%prep
+%setup -q -n chromium
+
+cp %{SOURCE1001} .
+
+cp -a src/AUTHORS AUTHORS.chromium
+cp -a src/LICENSE LICENSE.chromium
+cp -a src/ozone/AUTHORS AUTHORS.ozone-wayland
+cp -a src/ozone/LICENSE LICENSE.ozone-wayland
+
+%build
+
+# For ffmpeg on ia32. The original CFLAGS set by the gyp and config files in
+# src/third_party/ffmpeg already pass -O2 -fomit-frame-pointer, but Tizen's
+# CFLAGS end up appending -fno-omit-frame-pointer. See http://crbug.com/37246
+export CFLAGS=`echo $CFLAGS | sed s,-fno-omit-frame-pointer,,g`
+
+# Remove debug symbols
+%ifarch %{ix86}
+export CFLAGS=`echo $CFLAGS | sed s,-g,,g`
+export CXXFLAGS=`echo $CXXFLAGS | sed s,-g,,g`
+%endif
+
+%ifarch %{arm}
+export CFLAGS=`echo $CFLAGS | sed s,-g2,,g`
+export CXXFLAGS=`echo $CXXFLAGS | sed s,-g2,,g`
+export CFLAGS=`echo $CFLAGS | sed s,-g,,g`
+export CXXFLAGS=`echo $CXXFLAGS | sed s,-g,,g`
+export CFLAGS=`echo $CFLAGS | sed s,-mfpu=vfpv3,-mfpu=neon,g`
+export CXXFLAGS=`echo $CXXFLAGS | sed s,-mfpu=vfpv3,-mfpu=neon,g`
+export FFLAGS=`echo $FFLAGS | sed s,-mfpu=vfpv3,-mfpu=neon,g`
+%endif
+
+# Building the RPM in the GBS chroot fails with errors such as
+#   /usr/lib/gcc/i586-tizen-linux/4.7/../../../../i586-tizen-linux/bin/ld:
+#       failed to set dynamic section sizes: Memory exhausted
+# For now, work around it by passing a GNU ld-specific flag that optimizes the
+# linker for memory usage.
+export LDFLAGS="${LDFLAGS} -Wl,--no-keep-memory"
+
+# Support building in a non-standard directory, possibly outside %{_builddir}.
+# Since the build root is erased every time a new build is performed, one way
+# to avoid losing the build directory is to specify a location outside the
+# build root to the BUILDDIR_NAME definition, such as "/var/tmp/chromium-build"
+# (remember all paths are still inside the chroot):
+#    gbs build --define 'BUILDDIR_NAME /some/path'
+#
+# The --depth and --generator-output combo is used to put all the Makefiles
+# inside the build directory, and (this is the important part) keep file lists
+# (generatedwith <|() in gyp) in the build directory as well, otherwise they
+# will be in the source directory, erased every time and trigger an almost full
+# Blink rebuild (among other smaller targets).
+# We cannot always pass those flags, though, because gyp's make generator does
+# not work if the --generator-output is the top-level source directory.
+BUILDDIR_NAME="%{?BUILDDIR_NAME}"
+if [ -z "${BUILDDIR_NAME}" ]; then
+   BUILDDIR_NAME="."
+else
+   GYP_EXTRA_FLAGS="--depth=. --generator-output=${BUILDDIR_NAME}"
+fi
+
+# Change src/ so that we can pass "." to --depth below, otherwise we would need
+# to pass "src" to it, but this confuses the gyp make generator, that expects
+# to be called from the root source directory.
+cd src
+
+# --no-parallel is added because chroot does not mount a /dev/shm, this will
+# cause python multiprocessing.SemLock error.
+#https://github.com/01org/ozone-wayland/issues/147
+
+export GYP_GENERATORS=ninja
+./build/gyp_chromium \
+--no-parallel \
+-Duse_ash=1 \
+%if %{with wayland}
+-Duse_ozone=1 \
+-Duse_x11=0 \
+%endif
+%if %{with x}
+-Duse_ozone=0 \
+-Duse_x11=1 \
+%endif
+-Dchromeos=0 \
+-Ddisable_nacl=1 \
+-Dpython_ver=2.7 \
+-Duse_aura=1 \
+-Duse_cups=0 \
+-Duse_gconf=0 \
+-Duse_kerberos=0 \
+-Duse_system_bzip2=1 \
+-Duse_system_icu=0 \
+-Duse_system_libexif=1 \
+-Duse_system_libxml=1 \
+-Duse_system_nspr=1 \
+-Denable_xi21_mt=1 \
+-Duse_xi2_mt=0 \
+%ifarch x86_64
+-Dtarget_arch=x64 \
+%endif
+%ifarch %{ix86}
+-Dtarget_arch=ia32 \
+%endif
+%ifarch %{arm}
+-Dtarget_arch=arm \
+-Dsysroot=  \
+%endif
+-Duse_alsa=0 \
+-Duse_gnome_keyring=0 \
+-Dlogging_like_official_build=1 \
+-Dtracing_like_official_build=1 \
+-Drelease_unwind_tables=0 \
+-Dlinux_dump_symbols=0 \
+-Denable_ozone_wayland_vkb=1 \
+-Dclang=0 \
+-Dlinux_use_bundled_binutils=0 \
+-Dlinux_use_bundled_gold=0
+
+ninja %{?_smp_mflags} -C out/Release chrome
+
+%install
+# Support building in a non-standard directory, possibly outside %{_builddir}.
+# Since the build root is erased every time a new build is performed, one way
+# to avoid losing the build directory is to specify a location outside the
+# build root to the BUILDDIR_NAME definition, such as "/var/tmp/chromium-build"
+# (remember all paths are still inside the chroot):
+#    gbs build --define 'BUILDDIR_NAME /some/path'
+BUILDDIR_NAME="%{?BUILDDIR_NAME}"
+if [ -z "${BUILDDIR_NAME}" ]; then
+   BUILDDIR_NAME="."
+fi
+
+# Since BUILDDIR_NAME can be either a relative path or an absolute one, we need
+# to cd into src/ so that it means the same thing in the build and install
+# stages: during the former, a relative location refers to a place inside src/,
+# whereas during the latter a relative location by default would refer to a
+# place one directory above src/. If BUILDDIR_NAME is an absolute path, this is
+# irrelevant anyway.
+cd src
+
+# Binaries.
+%ifarch x86_64
+install -p -D %{SOURCE2} %{buildroot}%{_bindir}/chromium-browser
+%else
+install -p -D %{SOURCE1} %{buildroot}%{_bindir}/chromium-browser
+%endif
+install -p -D ${BUILDDIR_NAME}/out/Release/chrome %{buildroot}%{_libdir}/chromium/chrome
+cp -R ${BUILDDIR_NAME}/out/Release/locales %{buildroot}%{_libdir}/chromium/
+
+# Workaround to avoid eu-strip error.
+strip %{buildroot}%{_libdir}/chromium/chrome
+
+# Supporting libraries and resources.
+install -p -D ${BUILDDIR_NAME}/out/Release/libffmpegsumo.so %{buildroot}%{_libdir}/chromium/libffmpegsumo.so
+strip %{buildroot}%{_libdir}/chromium/libffmpegsumo.so
+install -p -D ${BUILDDIR_NAME}/out/Release/resources.pak %{buildroot}%{_libdir}/chromium/resources.pak
+install -p -D ${BUILDDIR_NAME}/out/Release/chrome_100_percent.pak %{buildroot}%{_libdir}/chromium/chrome_100_percent.pak
+install -p -D ${BUILDDIR_NAME}/out/Release/icudtl.dat %{buildroot}%{_libdir}/chromium/icudtl.dat
+
+%files
+%manifest %{name}.manifest
+%license AUTHORS.chromium LICENSE.chromium AUTHORS.ozone-wayland LICENSE.ozone-wayland
+%{_bindir}/chromium-browser
+%{_libdir}/chromium/libffmpegsumo.so
+%{_libdir}/chromium/chrome
+%{_libdir}/chromium/resources.pak
+%{_libdir}/chromium/chrome_100_percent.pak
+%{_libdir}/chromium/icudtl.dat
+%{_libdir}/chromium/locales/*
--- /dev/null
+++ b/packaging/rpm/chromium.xml.in
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" package="chromium" version="@VERSION@" install-location="internal-only">
+	<label>Chromium Browser</label>
+	<author href="https://01.org/ozone-wayland">Ozone Wayland Authors</author>
+	<description>Chromium Browser</description>
+	<ui-application appid="chromium-browser" exec="/usr/lib/chromium/chrome" nodisplay="false" multiple="false" type="capp" taskmanage="true">
+		<label>Chromium Browser</label>
+		<icon>chromium.png</icon>
+	</ui-application>
+</manifest>
--- /dev/null
+++ b/packaging/rpm/gbp-flat-tree.sh
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+# Copyright (c) 2014 Intel Corporation. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# This script is expected to be run by `git-buildpackage' (called by `gbs
+# build') as a postexport hook. Its purpose is to remove the tar file generated
+# by `gbs export' with `git archive' and create a new archive with tar itself.
+#
+# It is helpful in two ways:
+# - It automates the generation of a proper archive for RPM builds so that one
+#   does not need to create a separate git tree with all sources for `gbs
+#   build' to work.
+# - Since tar is used, the archive's members all have their actual mtimes as
+#   opposed to the time of the git tree-ish passed to `git archive'. This is
+#   part of the solution for incremental builds in Tizen: since we use actual
+#   file mtimes, they are not rebuilt by `make'.
+#
+# As a postexport hook, there are two additional environment variables
+# available: GBP_GIT_DIR is /path/to/src/chromium/.git, and GBP_TMP_DIR is the
+# temporary directory containing everything in /path/to/src/chromium/packaging
+# that will be copied to $GBSROOT/local/sources and used by `rpmbuild' to build
+# an RPM package.
+#
+# The script is run from GBP_TMP_DIR.
+
+# Fail early to avoid bigger problems later in the process.
+set -e
+
+TAR_FILE="${GBP_TMP_DIR}/chromium.tar"
+
+if [ ! -f "${TAR_FILE}" ]; then
+    echo "${TAR_FILE} does not exist. Aborting."
+    exit 1
+fi
+
+# The top-level directory that _contains_ src/.
+BASE_SRC_DIR=`readlink -f "${GBP_GIT_DIR}/../../.."`
+if [ $? -ne 0 ]; then
+    echo "${GBP_GIT_DIR}/../../.. does not seem to be a valid path. Aborting."
+    exit 1
+fi
+
+# Erase the archive generated with `git archive'.
+rm -v "${TAR_FILE}"
+
+echo "Creating a new ${TAR_FILE} from ${BASE_SRC_DIR}/src"
+
+# The --transform parameter is used to prepend all archive members with
+# chromium/ so they all share a common root. Note it is chromium/, without
+# any version numbers, so that any build files in an external directory
+# referring to a source file does not need to be updated just because of a
+# version bump.
+tar --update --file "${TAR_FILE}" \
+    --exclude-vcs --exclude=native_client --exclude=LayoutTests \
+    --exclude=src/out --directory="${BASE_SRC_DIR}" \
+    --transform="s:^:chromium/:S" \
+    src
--- /dev/null
+++ b/patches/0001-Browser-Support-Desktop-Aura-creation-on-Ozone.patch
@@ -0,0 +1,217 @@
+From 790e9652ead077947928f3d26d94d2e1694ab9d7 Mon Sep 17 00:00:00 2001
+From: Kalyan Kondapally <kalyan.kondapally@intel.com>
+Date: Wed, 12 Nov 2014 18:27:10 -0800
+Subject: [PATCH] Browser: Support Desktop Aura creation on Ozone
+
+This CL creates BrowserDesktopRootWindowHostOzone and gives support
+for Aura Ozone implementations.
+---
+ .../browser_desktop_root_window_host_ozone.cc      | 129 +++++++++++++++++++++
+ .../frame/browser_desktop_root_window_host_ozone.h |  45 +++++++
+ chrome/chrome_browser_ui.gypi                      |   2 +
+ 3 files changed, 176 insertions(+)
+ create mode 100644 chrome/browser/ui/views/frame/browser_desktop_root_window_host_ozone.cc
+ create mode 100644 chrome/browser/ui/views/frame/browser_desktop_root_window_host_ozone.h
+
+diff --git a/chrome/browser/ui/views/frame/browser_desktop_root_window_host_ozone.cc b/chrome/browser/ui/views/frame/browser_desktop_root_window_host_ozone.cc
+new file mode 100644
+index 0000000..3324d29
+--- /dev/null
++++ b/chrome/browser/ui/views/frame/browser_desktop_root_window_host_ozone.cc
+@@ -0,0 +1,129 @@
++// Copyright (c) 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "chrome/browser/ui/views/frame/browser_desktop_root_window_host_ozone.h"
++
++#include "chrome/browser/themes/theme_service.h"
++#include "chrome/browser/themes/theme_service_factory.h"
++#include "chrome/browser/ui/views/frame/browser_frame.h"
++#include "chrome/browser/ui/views/frame/browser_view.h"
++#include "chrome/browser/ui/views/theme_image_mapper.h"
++
++namespace {
++
++// DesktopThemeProvider maps resource ids using MapThemeImage(). This is
++// necessary for BrowserDesktopWindowTreeHostWin so that it uses the windows
++// theme images rather than the ash theme images.
++//
++// This differs from the version in browser_desktop_window_tree_host_win.cc
++// because we need to also look up whether we're using the native theme.
++class DesktopThemeProvider : public ui::ThemeProvider {
++ public:
++  explicit DesktopThemeProvider(ThemeService* delegate)
++      : delegate_(delegate) {
++  }
++
++  bool UsingSystemTheme() const override {
++    return delegate_->UsingSystemTheme();
++  }
++  gfx::ImageSkia* GetImageSkiaNamed(int id) const override {
++    if (delegate_->UsingSystemTheme())
++      return delegate_->GetImageSkiaNamed(id);
++
++    return delegate_->GetImageSkiaNamed(
++        chrome::MapThemeImage(chrome::HOST_DESKTOP_TYPE_NATIVE, id));
++  }
++  SkColor GetColor(int id) const override { return delegate_->GetColor(id); }
++  int GetDisplayProperty(int id) const override {
++    return delegate_->GetDisplayProperty(id);
++  }
++  bool ShouldUseNativeFrame() const override {
++    return delegate_->ShouldUseNativeFrame();
++  }
++  bool HasCustomImage(int id) const override {
++    return delegate_->HasCustomImage(
++        chrome::MapThemeImage(chrome::HOST_DESKTOP_TYPE_NATIVE, id));
++  }
++  base::RefCountedMemory* GetRawData(int id, ui::ScaleFactor scale_factor)
++      const override {
++    return delegate_->GetRawData(id, scale_factor);
++  }
++
++ private:
++  ThemeService* delegate_;
++
++  DISALLOW_COPY_AND_ASSIGN(DesktopThemeProvider);
++};
++
++} // namespace
++
++////////////////////////////////////////////////////////////////////////////////
++// BrowserDesktopWindowTreeHostOzone, public:
++
++BrowserDesktopWindowTreeHostOzone::BrowserDesktopWindowTreeHostOzone(
++    views::internal::NativeWidgetDelegate* native_widget_delegate,
++    views::DesktopNativeWidgetAura* desktop_native_widget_aura,
++    BrowserView* browser_view,
++    BrowserFrame* browser_frame)
++    : DesktopWindowTreeHostOzone(native_widget_delegate,
++                                   desktop_native_widget_aura),
++      browser_view_(browser_view) {
++  scoped_ptr<ui::ThemeProvider> theme_provider(
++      new DesktopThemeProvider(ThemeServiceFactory::GetForProfile(
++                                   browser_view->browser()->profile())));
++  browser_frame->SetThemeProvider(theme_provider.Pass());
++}
++
++
++BrowserDesktopWindowTreeHostOzone::~BrowserDesktopWindowTreeHostOzone() {
++}
++
++////////////////////////////////////////////////////////////////////////////////
++// BrowserDesktopWindowTreeHostOzone,
++//     BrowserDesktopWindowTreeHost implementation:
++
++views::DesktopWindowTreeHost*
++    BrowserDesktopWindowTreeHostOzone::AsDesktopWindowTreeHost() {
++  return this;
++}
++
++int BrowserDesktopWindowTreeHostOzone::GetMinimizeButtonOffset() const {
++  return 0;
++}
++
++bool BrowserDesktopWindowTreeHostOzone::UsesNativeSystemMenu() const {
++  return false;
++}
++
++////////////////////////////////////////////////////////////////////////////////
++// BrowserDesktopWindowTreeHostOzone,
++//     views::DesktopWindowTreeHostOzone implementation:
++
++void BrowserDesktopWindowTreeHostOzone::Init(
++    aura::Window* content_window,
++    const views::Widget::InitParams& params) {
++  views::DesktopWindowTreeHostOzone::Init(content_window, params);
++
++  // TODO(kalyan): Support for Global Menu.
++}
++
++void BrowserDesktopWindowTreeHostOzone::CloseNow() {
++  views::DesktopWindowTreeHostOzone::CloseNow();
++}
++
++////////////////////////////////////////////////////////////////////////////////
++// BrowserDesktopWindowTreeHost, public:
++
++// static
++BrowserDesktopWindowTreeHost*
++    BrowserDesktopWindowTreeHost::CreateBrowserDesktopWindowTreeHost(
++        views::internal::NativeWidgetDelegate* native_widget_delegate,
++        views::DesktopNativeWidgetAura* desktop_native_widget_aura,
++        BrowserView* browser_view,
++        BrowserFrame* browser_frame) {
++  return new BrowserDesktopWindowTreeHostOzone(native_widget_delegate,
++                                               desktop_native_widget_aura,
++                                               browser_view,
++                                               browser_frame);
++}
+diff --git a/chrome/browser/ui/views/frame/browser_desktop_root_window_host_ozone.h b/chrome/browser/ui/views/frame/browser_desktop_root_window_host_ozone.h
+new file mode 100644
+index 0000000..fd4b354
+--- /dev/null
++++ b/chrome/browser/ui/views/frame/browser_desktop_root_window_host_ozone.h
+@@ -0,0 +1,45 @@
++// Copyright (c) 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#ifndef CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_ROOT_WINDOW_HOST_OZONE_H_
++#define CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_ROOT_WINDOW_HOST_OZONE_H_
++
++#include "ozone/ui/desktop_aura/desktop_window_tree_host_ozone.h"
++#include "chrome/browser/ui/views/frame/browser_desktop_window_tree_host.h"
++
++class BrowserFrame;
++class BrowserView;
++
++namespace views {
++class DesktopNativeWidgetAura;
++}
++
++class BrowserDesktopWindowTreeHostOzone
++    : public BrowserDesktopWindowTreeHost,
++      public views::DesktopWindowTreeHostOzone {
++ public:
++  BrowserDesktopWindowTreeHostOzone(
++      views::internal::NativeWidgetDelegate* native_widget_delegate,
++      views::DesktopNativeWidgetAura* desktop_native_widget_aura,
++      BrowserView* browser_view,
++      BrowserFrame* browser_frame);
++  ~BrowserDesktopWindowTreeHostOzone() override;
++
++ private:
++  // Overridden from BrowserDesktopWindowTreeHost:
++  DesktopWindowTreeHost* AsDesktopWindowTreeHost() override;
++  int GetMinimizeButtonOffset() const override;
++  bool UsesNativeSystemMenu() const override;
++
++  // Overridden from views::DesktopWindowTreeHostOzone:
++  void Init(aura::Window* content_window,
++            const views::Widget::InitParams& params) override;
++  void CloseNow() override;
++
++  BrowserView* browser_view_;
++
++  DISALLOW_COPY_AND_ASSIGN(BrowserDesktopWindowTreeHostOzone);
++};
++
++#endif  // CHROME_BROWSER_UI_VIEWS_FRAME_BROWSER_DESKTOP_ROOT_WINDOW_HOST_OZONE_H_
+diff --git a/chrome/chrome_browser_ui.gypi b/chrome/chrome_browser_ui.gypi
+index e5b3224..affeeeb 100644
+--- a/chrome/chrome_browser_ui.gypi
++++ b/chrome/chrome_browser_ui.gypi
+@@ -2293,6 +2293,8 @@
+       'browser/ui/views/external_protocol_dialog.h',
+       'browser/ui/views/frame/desktop_browser_frame_aura.cc',
+       'browser/ui/views/frame/desktop_browser_frame_aura.h',
++      'browser/ui/views/frame/browser_desktop_root_window_host_ozone.cc',
++      'browser/ui/views/frame/browser_desktop_root_window_host_ozone.h',
+       'browser/ui/views/frame/opaque_browser_frame_view.cc',
+       'browser/ui/views/frame/opaque_browser_frame_view.h',
+       'browser/ui/views/message_center/message_center_frame_view.cc',
+-- 
+1.9.1
+
--- /dev/null
+++ b/patches/0002-Remove-usage-of-DesktopFactory.patch
@@ -0,0 +1,188 @@
+From 4c097230740425596b1ae004cb78774401f6a642 Mon Sep 17 00:00:00 2001
+From: Kalyan Kondapally <kalyan.kondapally@intel.com>
+Date: Fri, 28 Nov 2014 17:13:57 -0800
+Subject: [PATCH] Remove usage of DesktopFactory.
+
+This is highly experimental. Eventually, the goal is to only have
+platform specific parts in Wayland and core implementation as part
+of Chromium. Once, we have more matured implementation, initiate
+discussion upstream.
+---
+ ui/views/views.gyp                                 |  9 ----
+ .../widget/desktop_aura/desktop_factory_ozone.cc   | 29 -------------
+ .../widget/desktop_aura/desktop_factory_ozone.h    | 50 ----------------------
+ .../widget/desktop_aura/desktop_screen_ozone.cc    | 15 -------
+ .../desktop_aura/desktop_window_tree_host_ozone.cc | 20 ---------
+ 5 files changed, 123 deletions(-)
+ delete mode 100644 ui/views/widget/desktop_aura/desktop_factory_ozone.cc
+ delete mode 100644 ui/views/widget/desktop_aura/desktop_factory_ozone.h
+ delete mode 100644 ui/views/widget/desktop_aura/desktop_screen_ozone.cc
+ delete mode 100644 ui/views/widget/desktop_aura/desktop_window_tree_host_ozone.cc
+
+diff --git a/ui/views/views.gyp b/ui/views/views.gyp
+index 0c64628..a40c6d7 100644
+--- a/ui/views/views.gyp
++++ b/ui/views/views.gyp
+@@ -445,12 +445,6 @@
+       'widget/desktop_aura/desktop_window_tree_host_win.cc',
+       'widget/desktop_aura/desktop_window_tree_host_win.h',
+     ],
+-    'views_desktop_aura_ozone_sources': [
+-      'widget/desktop_aura/desktop_factory_ozone.cc',
+-      'widget/desktop_aura/desktop_factory_ozone.h',
+-      'widget/desktop_aura/desktop_screen_ozone.cc',
+-      'widget/desktop_aura/desktop_window_tree_host_ozone.cc',
+-    ],
+     'views_test_support_sources': [
+       'controls/textfield/textfield_test_api.cc',
+       'controls/textfield/textfield_test_api.h',
+@@ -691,9 +685,6 @@
+             ['OS == "win"', {
+               'sources': [ '<@(views_desktop_aura_win_sources)' ],
+             }],
+-            ['use_ozone==1', {
+-              'sources': [ '<@(views_desktop_aura_ozone_sources)' ],
+-            }],
+           ],
+         }],
+       ],
+diff --git a/ui/views/widget/desktop_aura/desktop_factory_ozone.cc b/ui/views/widget/desktop_aura/desktop_factory_ozone.cc
+deleted file mode 100644
+index e0a4489..0000000
+--- a/ui/views/widget/desktop_aura/desktop_factory_ozone.cc
++++ /dev/null
+@@ -1,29 +0,0 @@
+-// Copyright 2013 The Chromium Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style license that can be
+-// found in the LICENSE file.
+-
+-#include "ui/views/widget/desktop_aura/desktop_factory_ozone.h"
+-
+-#include "base/logging.h"
+-
+-namespace views {
+-
+-// static
+-DesktopFactoryOzone* DesktopFactoryOzone::impl_ = NULL;
+-
+-DesktopFactoryOzone::DesktopFactoryOzone() {
+-}
+-
+-DesktopFactoryOzone::~DesktopFactoryOzone() {
+-}
+-
+-DesktopFactoryOzone* DesktopFactoryOzone::GetInstance() {
+-  CHECK(impl_) << "DesktopFactoryOzone accessed before constructed";
+-  return impl_;
+-}
+-
+-void DesktopFactoryOzone::SetInstance(DesktopFactoryOzone* impl) {
+-  impl_ = impl;
+-}
+-
+-} // namespace views
+diff --git a/ui/views/widget/desktop_aura/desktop_factory_ozone.h b/ui/views/widget/desktop_aura/desktop_factory_ozone.h
+deleted file mode 100644
+index 2af191b..0000000
+--- a/ui/views/widget/desktop_aura/desktop_factory_ozone.h
++++ /dev/null
+@@ -1,50 +0,0 @@
+-// Copyright 2013 The Chromium Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style license that can be
+-// found in the LICENSE file.
+-
+-#ifndef UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_FACTORY_OZONE_H_
+-#define UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_FACTORY_OZONE_H_
+-
+-#include "ui/views/views_export.h"
+-
+-namespace gfx {
+-class Rect;
+-class Screen;
+-}
+-
+-namespace views {
+-class DesktopNativeWidgetAura;
+-class DesktopWindowTreeHost;
+-
+-namespace internal {
+-class NativeWidgetDelegate;
+-}
+-
+-class VIEWS_EXPORT DesktopFactoryOzone {
+- public:
+-  DesktopFactoryOzone();
+-  virtual ~DesktopFactoryOzone();
+-
+-  // Returns the instance.
+-  static DesktopFactoryOzone* GetInstance();
+-
+-  // Sets the implementation delegate. Ownership is retained by the caller.
+-  static void SetInstance(DesktopFactoryOzone* impl);
+-
+-  // Delegates implementation of DesktopWindowTreeHost::Create externally to
+-  // Ozone implementation.
+-  virtual DesktopWindowTreeHost* CreateWindowTreeHost(
+-      internal::NativeWidgetDelegate* native_widget_delegate,
+-      DesktopNativeWidgetAura* desktop_native_widget_aura) = 0;
+-
+-  // Delegates implementation of DesktopScreen externally to
+-  // Ozone implementation.
+-  virtual gfx::Screen* CreateDesktopScreen() = 0;
+-
+- private:
+-  static DesktopFactoryOzone* impl_; // not owned
+-};
+-
+-}  // namespace views
+-
+-#endif // UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_FACTORY_OZONE_H_
+diff --git a/ui/views/widget/desktop_aura/desktop_screen_ozone.cc b/ui/views/widget/desktop_aura/desktop_screen_ozone.cc
+deleted file mode 100644
+index 9708ad8..0000000
+--- a/ui/views/widget/desktop_aura/desktop_screen_ozone.cc
++++ /dev/null
+@@ -1,15 +0,0 @@
+-// Copyright 2013 The Chromium Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style license that can be
+-// found in the LICENSE file.
+-
+-#include "ui/views/widget/desktop_aura/desktop_screen.h"
+-
+-#include "ui/views/widget/desktop_aura/desktop_factory_ozone.h"
+-
+-namespace views {
+-
+-gfx::Screen* CreateDesktopScreen() {
+-  return DesktopFactoryOzone::GetInstance()->CreateDesktopScreen();
+-}
+-
+-}  // namespace views
+diff --git a/ui/views/widget/desktop_aura/desktop_window_tree_host_ozone.cc b/ui/views/widget/desktop_aura/desktop_window_tree_host_ozone.cc
+deleted file mode 100644
+index 1a78a9a..0000000
+--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_ozone.cc
++++ /dev/null
+@@ -1,20 +0,0 @@
+-// Copyright 2013 The Chromium Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style license that can be
+-// found in the LICENSE file.
+-
+-#include "ui/aura/window_tree_host.h"
+-#include "ui/views/widget/desktop_aura/desktop_factory_ozone.h"
+-#include "ui/views/widget/desktop_aura/desktop_window_tree_host.h"
+-
+-namespace views {
+-
+-DesktopWindowTreeHost* DesktopWindowTreeHost::Create(
+-    internal::NativeWidgetDelegate* native_widget_delegate,
+-    DesktopNativeWidgetAura* desktop_native_widget_aura) {
+-  DesktopFactoryOzone* d_factory = DesktopFactoryOzone::GetInstance();
+-
+-  return d_factory->CreateWindowTreeHost(native_widget_delegate,
+-                                         desktop_native_widget_aura);
+-}
+-
+-}  // namespace views
+--
+1.9.1
--- /dev/null
+++ b/patches/0003-Add-support-to-provide-external-ozone-files-in-views.patch
@@ -0,0 +1,34 @@
+From 722d6aa6823f7a71379279c8e336a490132ef2fd Mon Sep 17 00:00:00 2001
+From: Kalyan Kondapally <kalyan.kondapally@intel.com>
+Date: Tue, 19 Aug 2014 21:08:47 -0700
+Subject: [PATCH 3/5] Add support to provide external ozone files in views.
+
+We have un-necessary dependency on views. This is a temporary patch
+to include desktop_aura/ as part of view target.
+---
+ ui/views/views.gyp |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/ui/views/views.gyp b/ui/views/views.gyp
+index 108d0e6..c1c2244 100644
+--- a/ui/views/views.gyp
++++ b/ui/views/views.gyp
+@@ -4,6 +4,7 @@
+ {
+   'variables': {
+     'chromium_code': 1,
++    'external_ozone_views_files': [],
+     # Sources lists shared with GN build.
+     'views_sources': [
+       'accessibility/native_view_accessibility.cc',
+@@ -658,6 +659,7 @@
+         }],
+         ['use_aura==1', {
+           'sources': [
++            '<@(external_ozone_views_files)',
+             '<@(views_aura_sources)',
+           ],
+           'dependencies': [
+-- 
+1.7.9.5
+
--- /dev/null
+++ b/patches/0004-Add-support-for-checking-DesktopWindow-with-Ozone-an.patch
@@ -0,0 +1,42 @@
+From c2dedcc846ca474df2f74946fdf0b22b07d565bd Mon Sep 17 00:00:00 2001
+From: Kondapally Kalyan <kalyan.kondapally@intel.com>
+Date: Tue, 17 Jun 2014 20:24:19 +0300
+Subject: [PATCH 4/5] Add support for checking DesktopWindow with Ozone and
+ Ash.
+
+Only windows hosted by a DesktopWindowTreeHost implementation can be mapped
+back to a content Window. All others, therefore, must be the root window
+for an Ash display. This check is done in ActiveDesktopMonitor. This patch
+adds the needed support for Ozone and should be upstreamed after
+https://codereview.chromium.org/36953002/ lands.
+---
+ chrome/browser/ui/aura/active_desktop_monitor.cc |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/chrome/browser/ui/aura/active_desktop_monitor.cc b/chrome/browser/ui/aura/active_desktop_monitor.cc
+index f6c5a7b..626576ba 100644
+--- a/chrome/browser/ui/aura/active_desktop_monitor.cc
++++ b/chrome/browser/ui/aura/active_desktop_monitor.cc
+@@ -11,6 +11,8 @@
+ #include "ui/views/widget/desktop_aura/desktop_window_tree_host_x11.h"
+ #elif defined(OS_WIN)
+ #include "ui/views/widget/desktop_aura/desktop_window_tree_host_win.h"
++#elif defined(USE_OZONE)
++#include "ozone/ui/desktop_aura/desktop_window_tree_host_ozone.h"
+ #endif
+ 
+ // static
+@@ -48,6 +50,10 @@ bool ActiveDesktopMonitor::IsDesktopWindow(aura::WindowTreeHost* host) {
+ #elif defined(USE_X11)
+   return views::DesktopWindowTreeHostX11::GetContentWindowForXID(
+       host->GetAcceleratedWidget()) != NULL;
++#elif defined(USE_OZONE)
++  return views::DesktopWindowTreeHostOzone::
++      GetContentWindowForAcceleratedWidget(
++          host->GetAcceleratedWidget()) != NULL;
+ #else
+   NOTREACHED();
+   return true;
+-- 
+1.7.9.5
+
--- /dev/null
+++ b/patches/0005-Temporarily-remove-ozone-dependency-for-gl.patch
@@ -0,0 +1,34 @@
+From 323a0e6c7dc7e369bd504b6459eda27cee615c74 Mon Sep 17 00:00:00 2001
+From: jiajia qin <jiajia.qin@intel.com>
+Date: Thu, 24 Jul 2014 18:37:35 +0800
+Subject: [PATCH 5/5] Temporarily remove ozone dependency for gl
+
+The old implementation will result that the third party window system can't depend on ui/gl
+because of cycling dependency. So temporarily remove ozone dependency for gl until we find
+a better method to resolve it.
+
+BUG=240
+---
+ ui/gl/gl.gyp |    6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/ui/gl/gl.gyp b/ui/gl/gl.gyp
+index 49c12f2..0833511 100644
+--- a/ui/gl/gl.gyp
++++ b/ui/gl/gl.gyp
+@@ -299,12 +299,6 @@
+         ['OS!="android"', {
+           'sources/': [ ['exclude', '^android/'] ],
+         }],
+-        ['use_ozone==1', {
+-          'dependencies': [
+-            '../ozone/ozone.gyp:ozone',
+-            '../ozone/ozone.gyp:ozone_base',
+-          ],
+-        }],
+         ['OS=="android" and android_webview_build==0', {
+           'dependencies': [
+             '../android/ui_android.gyp:ui_java',
+-- 
+1.7.9.5
+
--- /dev/null
+++ b/patches/0006-Add-file-picker-support-using-WebUI.patch
@@ -0,0 +1,643 @@
+From 3bec1b7e3f29c23c6d8f7d67a885f5181ae798ff Mon Sep 17 00:00:00 2001
+From: Joone Hur <joone.hur@intel.com>
+Date: Thu, 23 Oct 2014 19:25:14 -0700
+Subject: [PATCH 2/5] Add file picker support using WebUI
+
+File-picker has not been supported in oz-wl because Gtk+2 does not work under
+Wayland, but Chromium Linux version still uses Gtk+2 for file-picker.
+
+This implementation allows for oz-wl to show a web based file picker UI.
+Currently, the WebUI only supports basic functionality for opening a file.
+File browsing UI will be added later.
+---
+ chrome/app/generated_resources.grd                 |    8 +
+ chrome/browser/browser_resources.grd               |    3 +
+ .../browser/resources/file_picker/file_picker.css  |   72 +++++++++
+ .../browser/resources/file_picker/file_picker.html |   37 +++++
+ .../browser/resources/file_picker/file_picker.js   |   51 ++++++
+ .../aura/chrome_browser_main_extra_parts_aura.cc   |   12 +-
+ .../ui/webui/chrome_web_ui_controller_factory.cc   |    3 +
+ .../browser/ui/webui/file_picker/file_picker_ui.cc |   46 ++++++
+ .../browser/ui/webui/file_picker/file_picker_ui.h  |   24 +++
+ .../ui/webui/file_picker/file_picker_web_dialog.cc |  164 ++++++++++++++++++++
+ chrome/chrome_browser_ui.gypi                      |    4 +
+ chrome/common/url_constants.cc                     |    3 +
+ chrome/common/url_constants.h                      |    2 +
+ tools/gritsettings/resource_ids                    |    2 +-
+ 14 files changed, 428 insertions(+), 3 deletions(-)
+ create mode 100644 chrome/browser/resources/file_picker/file_picker.css
+ create mode 100644 chrome/browser/resources/file_picker/file_picker.html
+ create mode 100644 chrome/browser/resources/file_picker/file_picker.js
+ create mode 100644 chrome/browser/ui/webui/file_picker/file_picker_ui.cc
+ create mode 100644 chrome/browser/ui/webui/file_picker/file_picker_ui.h
+ create mode 100644 chrome/browser/ui/webui/file_picker/file_picker_web_dialog.cc
+
+diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
+index 7481cc5..ea7004f 100644
+--- a/chrome/app/generated_resources.grd
++++ b/chrome/app/generated_resources.grd
+@@ -15076,6 +15076,14 @@ Do you accept?
+     <message name="IDS_FLAGS_DISABLE_CAST_STREAMING_HW_ENCODING_DESCRIPTION" desc="Description of chrome:flags option to turn off Cast Streaming hardware video encoding support.">
+       This option disables support in Cast Streaming for encoding video streams using platform hardware.
+     </message>
++
++    <!-- File-picker strings -->
++    <message name="IDS_FILE_PICKER_TITLE" desc="File picker title">
++      Save file as
++    </message>
++    <message name="IDS_FILE_PICKER_FILE_NAME" desc="File Name">
++      File name
++    </message>
+   </messages>
+   </release>
+ </grit>
+diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd
+index 0c7bf23..62a26b7 100644
+--- a/chrome/browser/browser_resources.grd
++++ b/chrome/browser/browser_resources.grd
+@@ -446,6 +446,9 @@
+         <include name="IDR_BRAILLE_MANIFEST" file="resources\chromeos\braille_ime\manifest.json" type="BINDATA" />
+       </if>
+       <include name="IDR_WHISPERNET_PROXY_MANIFEST" file="resources\whispernet_proxy\manifest.json" type="BINDATA" />
++      <include name="IDR_FILE_PICKER_HTML" file="resources\file_picker\file_picker.html" type="BINDATA" />
++      <include name="IDR_FILE_PICKER_JS" file="resources\file_picker\file_picker.js" type="BINDATA" />
++      <include name="IDR_FILE_PICKER_CSS" file="resources\file_picker\file_picker.css" type="BINDATA" />
+     </includes>
+   </release>
+ </grit>
+diff --git a/chrome/browser/resources/file_picker/file_picker.css b/chrome/browser/resources/file_picker/file_picker.css
+new file mode 100644
+index 0000000..a675d89
+--- /dev/null
++++ b/chrome/browser/resources/file_picker/file_picker.css
+@@ -0,0 +1,72 @@
++/*
++ * Copyright 2014 The Chromium Authors. All rights reserved.
++ * Use of this source code is governed by a BSD-style license that can be
++ * found in the LICENSE file.
++ */
++
++#main-table {
++  border-collapse: collapse;
++  border-width: 0;
++  margin-left: auto;
++  margin-right: auto;
++  table-layout: fixed;
++  width: 1000px;
++}
++
++tr.section-row {
++  border-bottom-width: 2px;
++  border-color: #000;
++  border-left-width: 0;
++  border-right-width: 0;
++  border-style: solid;
++  border-top-width: 2px;
++  width: 100%;
++}
++
++td.title-cell {
++  border-width: 0;
++  text-align: right;
++  vertical-align: top;
++  width: 15%;
++}
++
++p.title-text {
++  font-weight: bold;
++  margin-right: 10px;
++}
++
++td.show-button-cell {
++  border-bottom-width: 0;
++  border-color: #aaa;
++  border-left-width: 1px;
++  border-right-width: 1px;
++  border-style: solid;
++  border-top-width: 0;
++  text-align: center;
++  vertical-align: top;
++  width: 10%;
++}
++
++td.plots-cell {
++  border-width: 0;
++  padding: 10px;
++  text-align: left;
++  width: 75%;
++}
++
++div.section-div {
++  width: 100%;
++}
++
++div.plots-div {
++  width: 100%;
++}
++
++button.show-button {
++  margin: 10px;
++}
++
++button.reload-button {
++  margin-bottom: 10px;
++  margin-top: 10px;
++}
+diff --git a/chrome/browser/resources/file_picker/file_picker.html b/chrome/browser/resources/file_picker/file_picker.html
+new file mode 100644
+index 0000000..7710c81
+--- /dev/null
++++ b/chrome/browser/resources/file_picker/file_picker.html
+@@ -0,0 +1,37 @@
++<!DOCTYPE HTML>
++<html i18n-values="dir:textdirection">
++<head>
++  <meta charset="utf-8">
++  <title i18n-content="dialogTitle"></title>
++  <script src="chrome://resources/js/cr.js"></script>
++  <script src="chrome://resources/js/load_time_data.js"></script>
++  <script src="chrome://resources/js/util.js"></script>
++  <script src="strings.js"></script>
++  <script src="file_picker.js"></script>
++  <link rel="stylesheet" href="file_picker.css">
++</head>
++<body i18n-values=".style.fontFamily:fontfamily;.style.fontSize:fontsize">
++
++<p>Input a file name</p>
++<table>
++<tr>
++<td><div id="file-picker-file-name" i18n-content="filePickerFileNameLabel"></div>
++</td>
++<td>
++<input id="file-name-inputbox" type="text" name="FileName">
++</td>
++</tr>
++<tr>
++<td>
++  <div id="button-row">
++    <button id="save-button" i18n-content="saveButtonText"></button>
++    <button id="open-button" i18n-content="openButtonText"></button>
++    <button id="cancel-button" i18n-content="cancelButtonText"></button>
++  </div>
++</td>
++</tr>
++</table>
++  <!-- Must be last in the DOM: processes elements and inserts i18n strings -->
++  <script src="chrome://resources/js/i18n_template2.js"></script>
++</body>
++</html>
+diff --git a/chrome/browser/resources/file_picker/file_picker.js b/chrome/browser/resources/file_picker/file_picker.js
+new file mode 100644
+index 0000000..4161330
+--- /dev/null
++++ b/chrome/browser/resources/file_picker/file_picker.js
+@@ -0,0 +1,51 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++cr.define('filePicker', function() {
++  'use strict';
++
++  function initialize() {
++
++    var args = JSON.parse(chrome.getVariableValue('dialogArguments'));
++
++    var input_box = document.getElementById("file-name-inputbox");
++    input_box.value = args.filePath;
++
++    $('cancel-button').addEventListener('click', function() {
++        chrome.send('cancel');
++        self.close();
++    });
++    $('cancel-button').innerText =
++        loadTimeData.getStringF('cancelButtonText');
++
++    if (args.promptForOpenFile) {
++      $('open-button').addEventListener('click', function() {
++            var file_path = document.getElementById("file-name-inputbox").value;
++            chrome.send('done', [file_path]);
++            self.close();
++      });
++      $('open-button').innerText =
++        loadTimeData.getStringF('openButtonText');
++      $('save-button').style.display = 'none';
++    } else {
++      $('save-button').addEventListener('click', function() {
++          var file_path = document.getElementById("file-name-inputbox").value;
++          chrome.send('done', [file_path]);
++          self.close();
++      });
++      $('save-button').innerText =
++        loadTimeData.getStringF('saveButtonText');
++      $('open-button').style.display = 'none';
++   }
++
++    $('button-row').style['text-align'] = 'end';
++  }
++
++  return {
++    initialize: initialize
++  };
++});
++
++document.addEventListener('DOMContentLoaded',
++                          filePicker.initialize);
+diff --git a/chrome/browser/ui/aura/chrome_browser_main_extra_parts_aura.cc b/chrome/browser/ui/aura/chrome_browser_main_extra_parts_aura.cc
+index b878bd1..f8c361e 100644
+--- a/chrome/browser/ui/aura/chrome_browser_main_extra_parts_aura.cc
++++ b/chrome/browser/ui/aura/chrome_browser_main_extra_parts_aura.cc
+@@ -19,17 +19,21 @@
+ #include "ui/gfx/screen.h"
+ #include "ui/views/widget/native_widget_aura.h"
+
+-#if defined(USE_X11) && !defined(OS_CHROMEOS)
++#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
+ #include "base/prefs/pref_service.h"
+ #include "chrome/browser/profiles/profile.h"
+-#include "chrome/browser/ui/libgtk2ui/gtk2_ui.h"
+ #include "chrome/common/pref_names.h"
++#include "ozone/ui/webui/ozone_webui.h"
+ #include "ui/aura/window.h"
+ #include "ui/base/ime/input_method_initializer.h"
+ #include "ui/native_theme/native_theme_aura.h"
+ #include "ui/views/linux_ui/linux_ui.h"
+ #endif
+
++#if defined(USE_X11)
++#include "chrome/browser/ui/libgtk2ui/gtk2_ui.h"
++#endif
++
+ #if defined(USE_ASH)
+ #include "chrome/browser/ui/ash/ash_util.h"
+ #endif  // defined(USE_ASH)
+@@ -99,6 +103,10 @@ void ChromeBrowserMainExtraPartsAura::PreEarlyInitialization() {
+     ui::InitializeInputMethodForTesting();
+   }
+ #endif
++
++#if defined(OS_LINUX) && defined(USE_OZONE)
++  views::LinuxUI::SetInstance(BuildWebUI());
++#endif
+ }
+
+ void ChromeBrowserMainExtraPartsAura::ToolkitInitialized() {
+diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+index 5121a05..1601af0 100644
+--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
++++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+@@ -25,6 +25,7 @@
+ #include "chrome/browser/ui/webui/crashes_ui.h"
+ #include "chrome/browser/ui/webui/domain_reliability_internals_ui.h"
+ #include "chrome/browser/ui/webui/downloads_ui.h"
++#include "chrome/browser/ui/webui/file_picker/file_picker_ui.h"
+ #include "chrome/browser/ui/webui/flags_ui.h"
+ #include "chrome/browser/ui/webui/flash_ui.h"
+ #include "chrome/browser/ui/webui/gcm_internals_ui.h"
+@@ -286,6 +287,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
+     return &NewWebUI<DomainReliabilityInternalsUI>;
+   if (url.host() == chrome::kChromeUIFlagsHost)
+     return &NewWebUI<FlagsUI>;
++  if (url.host() == chrome::kChromeUIFilePickerHost)
++    return &NewWebUI<ui::FilePickerUI>;
+   if (url.host() == chrome::kChromeUIHistoryFrameHost)
+     return &NewWebUI<HistoryUI>;
+   if (url.host() == chrome::kChromeUIInstantHost)
+diff --git a/chrome/browser/ui/webui/file_picker/file_picker_ui.cc b/chrome/browser/ui/webui/file_picker/file_picker_ui.cc
+new file mode 100644
+index 0000000..d151be1
+--- /dev/null
++++ b/chrome/browser/ui/webui/file_picker/file_picker_ui.cc
+@@ -0,0 +1,46 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "chrome/browser/ui/webui/file_picker/file_picker_ui.h"
++
++#include "base/values.h"
++#include "chrome/browser/profiles/profile.h"
++#include "chrome/common/url_constants.h"
++#include "chrome/grit/browser_resources.h"
++#include "chrome/grit/chromium_strings.h"
++#include "chrome/grit/generated_resources.h"
++#include "content/public/browser/web_contents.h"
++#include "content/public/browser/web_ui.h"
++#include "content/public/browser/web_ui_data_source.h"
++#include "ui/base/l10n/l10n_util.h"
++#include "ui/base/resource/resource_bundle.h"
++
++namespace ui {
++FilePickerUI::FilePickerUI(content::WebUI* web_ui)
++  : WebDialogUI(web_ui) {
++  content::WebUIDataSource* html_source = content::WebUIDataSource::Create(
++      chrome::kChromeUIFilePickerHost);
++
++  html_source->AddLocalizedString(
++       "filePickerFileNameLabel",
++       IDS_FILE_PICKER_FILE_NAME);
++
++  html_source->AddLocalizedString("saveButtonText", IDS_SAVE);
++  html_source->AddLocalizedString("openButtonText", IDS_OK);
++  html_source->AddLocalizedString("cancelButtonText", IDS_CANCEL);
++
++  html_source->SetJsonPath("strings.js");
++
++  html_source->AddResourcePath("file_picker.js", IDR_FILE_PICKER_JS);
++  html_source->AddResourcePath("file_picker.css", IDR_FILE_PICKER_CSS);
++  html_source->SetDefaultResource(IDR_FILE_PICKER_HTML);
++
++  Profile* profile = Profile::FromWebUI(web_ui);
++  content::WebUIDataSource::Add(profile, html_source);
++}
++
++FilePickerUI::~FilePickerUI() {
++}
++
++}  // namespace ui
+diff --git a/chrome/browser/ui/webui/file_picker/file_picker_ui.h b/chrome/browser/ui/webui/file_picker/file_picker_ui.h
+new file mode 100644
+index 0000000..908eb06
+--- /dev/null
++++ b/chrome/browser/ui/webui/file_picker/file_picker_ui.h
+@@ -0,0 +1,24 @@
++// Copyright 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#ifndef CHROME_BROWSER_UI_WEBUI_FILE_PICKER_UI_H_
++#define CHROME_BROWSER_UI_WEBUI_FILE_PICKER_UI_H_
++
++#include "base/basictypes.h"
++#include "ui/web_dialogs/web_dialog_ui.h"
++
++namespace ui {
++
++class FilePickerUI : public WebDialogUI {
++ public:
++  explicit FilePickerUI(content::WebUI* web_ui);
++  virtual ~FilePickerUI();
++
++ private:
++  DISALLOW_COPY_AND_ASSIGN(FilePickerUI);
++};
++
++}  // namespace ui
++
++#endif  // CHROME_BROWSER_UI_WEBUI_FILE_PICKER_UI_H_
+diff --git a/chrome/browser/ui/webui/file_picker/file_picker_web_dialog.cc b/chrome/browser/ui/webui/file_picker/file_picker_web_dialog.cc
+new file mode 100644
+index 0000000..f5c0fb7
+--- /dev/null
++++ b/chrome/browser/ui/webui/file_picker/file_picker_web_dialog.cc
+@@ -0,0 +1,164 @@
++// Copyright (c) 2014 The Chromium Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style license that can be
++// found in the LICENSE file.
++
++#include "ozone/ui/webui/file_picker_web_dialog.h"
++
++#include "base/json/json_writer.h"
++#include "chrome/browser/profiles/profile_manager.h"
++#include "chrome/browser/ui/browser_dialogs.h"
++#include "chrome/common/url_constants.h"
++#include "chrome/grit/browser_resources.h"
++#include "chrome/grit/chromium_strings.h"
++#include "chrome/grit/generated_resources.h"
++#include "content/public/browser/web_ui.h"
++#include "content/public/browser/web_ui_message_handler.h"
++#include "ui/strings/grit/ui_strings.h"
++#include "ui/base/l10n/l10n_util.h"
++#include "ui/gfx/size.h"
++
++using content::WebContents;
++using content::WebUIMessageHandler;
++
++namespace {
++
++// Default width/height of the dialog.
++const int kDefaultWidth = 350;
++const int kDefaultHeight = 225;
++}
++
++namespace ui {
++
++class FilePickerMessageHandler : public content::WebUIMessageHandler {
++ public:
++  FilePickerMessageHandler(
++      const ui::FilePickerWebDialog* dialog);
++  ~FilePickerMessageHandler();
++  void RegisterMessages() override;
++
++ private:
++  // content::WebUIMessageHandler implementation.
++  void OnCancelButtonClicked(const base::ListValue* args);
++  void OnSaveButtonClicked(const base::ListValue* args);
++
++  // Weak ptr to parent dialog.
++  const ui::FilePickerWebDialog* dialog_;
++};
++
++FilePickerMessageHandler::FilePickerMessageHandler(
++    const ui::FilePickerWebDialog* dialog)
++  : dialog_(dialog) {
++}
++
++FilePickerMessageHandler::~FilePickerMessageHandler() {
++}
++
++void FilePickerMessageHandler::RegisterMessages() {
++  web_ui()->RegisterMessageCallback(
++      "cancel",
++      base::Bind(&FilePickerMessageHandler::OnCancelButtonClicked,
++                 base::Unretained(this)));
++  web_ui()->RegisterMessageCallback(
++      "done",
++      base::Bind(&FilePickerMessageHandler::OnSaveButtonClicked,
++                 base::Unretained(this)));
++}
++
++void FilePickerMessageHandler::OnCancelButtonClicked(
++    const base::ListValue* args) {
++    std::string file_path;
++    dialog_->Close(file_path);
++}
++
++void FilePickerMessageHandler::OnSaveButtonClicked(
++    const base::ListValue* args) {
++    std::string file_path;
++    args->GetString(0, &file_path);
++    dialog_->Close(file_path);
++}
++
++}  // namespace ui
++
++namespace ui {
++
++// static
++void FilePickerWebDialog::ShowDialog(SelectFileDialog::Type type, gfx::NativeWindow owning_window,
++    content::WebContents* contents,  SelectFileDialog::Listener* listener) {
++  chrome::ShowWebDialog(owning_window,
++                        ProfileManager::GetActiveUserProfile(),
++                        new FilePickerWebDialog(type, listener));
++}
++
++void FilePickerWebDialog::Close(const std::string& file_path) const {
++  if (!file_path.empty())
++    listener_->FileSelected(base::FilePath(file_path), 0 , NULL);
++  else
++    listener_->FileSelectionCanceled(NULL);
++}
++
++FilePickerWebDialog::FilePickerWebDialog(SelectFileDialog::Type type, SelectFileDialog::Listener* listener)
++    : type_(type), listener_(listener) {
++}
++
++ui::ModalType FilePickerWebDialog::GetDialogModalType() const {
++  return ui::MODAL_TYPE_SYSTEM;
++}
++
++base::string16 FilePickerWebDialog::GetDialogTitle() const {
++
++  if (type_ == SelectFileDialog::SELECT_OPEN_FILE)
++    return l10n_util::GetStringUTF16(IDS_OPEN_FILE_DIALOG_TITLE);
++  else if (type_ == SelectFileDialog::SELECT_SAVEAS_FILE)
++    return l10n_util::GetStringUTF16(IDS_SAVE_AS_DIALOG_TITLE);
++
++  return base::string16();
++}
++
++GURL FilePickerWebDialog::GetDialogContentURL() const {
++  return GURL(chrome::kChromeUIFilePickerURL);
++}
++
++void FilePickerWebDialog::GetWebUIMessageHandlers(
++    std::vector<content::WebUIMessageHandler*>* handlers) const {
++  handlers->push_back(new FilePickerMessageHandler(this));
++}
++
++void FilePickerWebDialog::GetDialogSize(gfx::Size* size) const {
++  size->SetSize(kDefaultWidth, kDefaultHeight);
++}
++
++std::string FilePickerWebDialog::GetDialogArgs() const {
++  std::string data;
++  base::DictionaryValue file_info;
++  if (type_ == SelectFileDialog::SELECT_OPEN_FILE)
++    file_info.SetBoolean("promptForOpenFile",  true);
++  else
++    file_info.SetBoolean("promptForOpenFile",  false);
++
++  // FIXME(joone): Pass the home directory
++  file_info.SetString("filePath",  "/home/app");
++  base::JSONWriter::Write(&file_info, &data);
++  return data;
++}
++
++void FilePickerWebDialog::OnDialogClosed(const std::string& json_retval) {
++  delete this;
++}
++
++void FilePickerWebDialog::OnCloseContents(WebContents* source,
++                                                bool* out_close_dialog) {
++  if (out_close_dialog)
++    *out_close_dialog = true;
++}
++
++bool FilePickerWebDialog::ShouldShowDialogTitle() const {
++  return true;
++}
++
++bool FilePickerWebDialog::HandleContextMenu(
++    const content::ContextMenuParams& params) {
++  // Disable context menu.
++  return true;
++}
++
++}  // namespace ui
+diff --git a/chrome/chrome_browser_ui.gypi b/chrome/chrome_browser_ui.gypi
+index affeeeb..d9fa1c2 100644
+--- a/chrome/chrome_browser_ui.gypi
++++ b/chrome/chrome_browser_ui.gypi
+@@ -1037,6 +1037,9 @@
+       'browser/ui/webui/favicon_source.h',
+       'browser/ui/webui/fileicon_source.cc',
+       'browser/ui/webui/fileicon_source.h',
++      'browser/ui/webui/file_picker/file_picker_ui.cc',
++      'browser/ui/webui/file_picker/file_picker_ui.h',
++      'browser/ui/webui/file_picker/file_picker_web_dialog.cc',
+       'browser/ui/webui/flags_ui.cc',
+       'browser/ui/webui/flags_ui.h',
+       'browser/ui/webui/gcm_internals_ui.cc',
+@@ -2981,6 +2984,7 @@
+               'dependencies': [
+                 '../build/linux/system.gyp:dbus',
+                 '../build/linux/system.gyp:fontconfig',
++                '../build/linux/system.gyp:pangocairo',
+                 '../dbus/dbus.gyp:dbus',
+               ],
+             }],
+diff --git a/chrome/common/url_constants.cc b/chrome/common/url_constants.cc
+index 0ae5bfa..47d99ed 100644
+--- a/chrome/common/url_constants.cc
++++ b/chrome/common/url_constants.cc
+@@ -48,6 +48,7 @@ const char kChromeUIExtensionsFrameURL[] = "chrome://extensions-frame/";
+ const char kChromeUIExtensionsURL[] = "chrome://extensions/";
+ const char kChromeUIFaviconURL[] = "chrome://favicon/";
+ const char kChromeUIFeedbackURL[] = "chrome://feedback/";
++const char kChromeUIFilePickerURL[] = "chrome://file-picker/";
+ const char kChromeUIFlagsURL[] = "chrome://flags/";
+ const char kChromeUIFlashURL[] = "chrome://flash/";
+ const char kChromeUIGCMInternalsURL[] = "chrome://gcm-internals/";
+@@ -184,6 +185,7 @@ const char kChromeUIExtensionsFrameHost[] = "extensions-frame";
+ const char kChromeUIExtensionsHost[] = "extensions";
+ const char kChromeUIFaviconHost[] = "favicon";
+ const char kChromeUIFeedbackHost[] = "feedback";
++const char kChromeUIFilePickerHost[] = "file-picker";
+ const char kChromeUIFlagsHost[] = "flags";
+ const char kChromeUIFlashHost[] = "flash";
+ const char kChromeUIGCMInternalsHost[] = "gcm-internals";
+@@ -571,6 +573,7 @@ const char* const kChromeHostURLs[] = {
+   kChromeUICrashesHost,
+   kChromeUICreditsHost,
+   kChromeUIDNSHost,
++  kChromeUIFilePickerHost,
+   kChromeUIFlagsHost,
+   kChromeUIHistoryHost,
+   kChromeUIInvalidationsHost,
+diff --git a/chrome/common/url_constants.h b/chrome/common/url_constants.h
+index e095306..61925bc 100644
+--- a/chrome/common/url_constants.h
++++ b/chrome/common/url_constants.h
+@@ -43,6 +43,7 @@ extern const char kChromeUIExtensionsFrameURL[];
+ extern const char kChromeUIExtensionsURL[];
+ extern const char kChromeUIFaviconURL[];
+ extern const char kChromeUIFeedbackURL[];
++extern const char kChromeUIFilePickerURL[];
+ extern const char kChromeUIFlagsURL[];
+ extern const char kChromeUIFlashURL[];
+ extern const char kChromeUIGCMInternalsURL[];
+@@ -174,6 +175,7 @@ extern const char kChromeUIExtensionsFrameHost[];
+ extern const char kChromeUIExtensionsHost[];
+ extern const char kChromeUIFaviconHost[];
+ extern const char kChromeUIFeedbackHost[];
++extern const char kChromeUIFilePickerHost[];
+ extern const char kChromeUIFlagsHost[];
+ extern const char kChromeUIFlashHost[];
+ extern const char kChromeUIGCMInternalsHost[];
+diff --git a/tools/gritsettings/resource_ids b/tools/gritsettings/resource_ids
+index 4681b25..07fe1b4 100644
+--- a/tools/gritsettings/resource_ids
++++ b/tools/gritsettings/resource_ids
+@@ -16,7 +16,7 @@
+
+   "chrome/browser/browser_resources.grd": {
+     "includes": [400],
+-    "structures": [750],
++    "structures": [800],
+   },
+   "chrome/browser/resources/component_extension_resources.grd": {
+     "includes": [1000],
+-- 
+1.7.9.5
+
--- /dev/null
+++ b/patches/0007-Introduce-vaLockBuffer-APIs-in-libva.patch
@@ -0,0 +1,167 @@
+From e06df3445ac9a82446ddba30e2978cc693d39574 Mon Sep 17 00:00:00 2001
+From: Shao Changbin <changbin.shao@intel.com>
+Date: Thu, 4 Sep 2014 12:44:01 +0800
+Subject: [PATCH] Introduce vaLockBuffer APIs in libva.
+
+---
+ third_party/libva/va/va.h         | 111 ++++++++++++++++++++++++++++++++++++++
+ third_party/libva/va/va_backend.h |  14 +++++
+ 2 files changed, 125 insertions(+)
+
+diff --git a/third_party/libva/va/va.h b/third_party/libva/va/va.h
+index 845760c..9455023 100644
+--- a/third_party/libva/va/va.h
++++ b/third_party/libva/va/va.h
+@@ -78,6 +78,7 @@
+ #ifndef _VA_H_
+ #define _VA_H_
+
++#include <stddef.h>
+ #include <stdint.h>
+ #include <va/va_version.h>
+
+@@ -1851,6 +1852,116 @@ VAStatus vaDestroyBuffer (
+     VABufferID buffer_id
+ );
+
++/** VA buffer information */
++typedef struct {
++    /** Buffer handle */
++    uintptr_t           handle;
++    /** Buffer type (See VABufferType). */
++    uint32_t            type;
++    /**
++     * Buffer memory type (See VASurfaceAttribMemoryType).
++     *
++     * On input to vaLockBuffer(), this field can serve as a hint to
++     * specify the set of memory types the caller is interested in. On
++     * successful return from vaLockBuffer(), the field is updated
++     * with the best matching memory type.
++     */
++    uint32_t            mem_type;
++    /** Size of the underlying buffer. */
++    size_t              mem_size;
++} VABufferInfo;
++
++/**
++ * Locks buffer for external API usage.
++ *
++ * Locks the VA buffer object buf_id for external API usage like
++ * EGL or OpenCL (OCL). This function is a synchronization point. This
++ * means that any pending operation is guaranteed to be completed
++ * prior to returning from the function.
++ *
++ * If the referenced VA buffer object is the backing store of a VA
++ * surface, then this function acts as if vaSyncSurface() on the
++ * parent surface was called first.
++ *
++ * The VABufferInfo argument shall be zero'ed on input. On
++ * successful output, the data structure is filled in with all the
++ * necessary buffer level implementation details like handle, type,
++ * memory type and memory size.
++ *
++ * Note: the external API implementation, or the application, can
++ * express the memory types it is interested in by filling in the
++ * mem_type field accordingly. On successful output, the memory type
++ * that fits best the request and that was used is updated in the
++ * VABufferInfo data structure. If none of the supplied memory types
++ * is supported, then a VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE
++ * error is returned.
++ *
++ * The VABufferInfo data is valid until vaUnlockBuffer() is
++ * called. Besides, no additional operation is allowed on any of the
++ * buffer parent object until vaUnlockBuffer() is called. e.g. decoding
++ * into a VA surface backed with the supplied VA buffer object
++ * buf_id would fail with a VA_STATUS_ERROR_SURFACE_BUSY error.
++ *
++ * Possible errors:
++ * - VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation
++ *   does not support this interface
++ * - VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied
++ * - VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied
++ * - VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE: the implementation
++ *   does not support exporting buffers of the specified type
++ * - VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE: none of the requested
++ *   memory types in \ref VABufferInfo.mem_type was supported
++ *
++ * @param[in] dpy               the VA display
++ * @param[in] buf_id            the VA buffer
++ * @param[in,out] buf_info_ptr  the VA buffer information
++ * @return VA_STATUS_SUCCESS if successful
++ */
++VAStatus
++vaLockBuffer(
++    VADisplay           dpy,
++    VABufferID          buf_id,
++    VABufferInfo *      buf_info_ptr
++);
++
++/**
++ * Unlocks buffer after usage from external API.
++ *
++ * Unlocks the VA buffer object buf_id from external API usage like
++ * EGL or OpenCL (OCL). This function is a synchronization point. This
++ * means that any pending operation is guaranteed to be completed
++ * prior to returning from the function.
++ *
++ * The VABufferInfo argument shall point to the original data
++ * structure that was obtained from vaLockBuffer(), unaltered. This is
++ * necessary so that the VA driver implementation could deallocate any
++ * resources that were needed.
++ *
++ * In any case, returning from this function invalidates any contents
++ * in VABufferInfo. i.e. the underlyng buffer handle is no longer
++ * valid. Therefore, VA driver implementations are free to reset this
++ * data structure to safe defaults.
++ *
++ * Possible errors:
++ * - VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation
++ *   does not support this interface
++ * - VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied
++ * - VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied
++ * - VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE: the implementation
++ *   does not support exporting buffers of the specified type
++ *
++ * @param[in] dpy               the VA display
++ * @param[in] buf_id            the VA buffer
++ * @param[in,out] buf_info_ptr  the VA buffer information
++ * @return VA_STATUS_SUCCESS if successful
++ */
++VAStatus
++vaUnlockBuffer(
++    VADisplay           dpy,
++    VABufferID          buf_id,
++    VABufferInfo *      buf_info_ptr
++);
++
+ /*
+ Render (Decode) Pictures
+
+diff --git a/third_party/libva/va/va_backend.h b/third_party/libva/va/va_backend.h
+index bd82849..150f8ef 100644
+--- a/third_party/libva/va/va_backend.h
++++ b/third_party/libva/va/va_backend.h
+@@ -420,6 +420,20 @@ struct VADriverVTable
+             VASurfaceAttrib    *attrib_list,
+             unsigned int       *num_attribs
+         );
++
++        VAStatus
++        (*vaLockBuffer)(
++            VADriverContextP    ctx,
++            VABufferID          buf_id,
++            VABufferInfo *      buf_info_ptr
++        );
++
++        VAStatus
++        (*vaUnlockBuffer)(
++            VADriverContextP    ctx,
++            VABufferID          buf_id,
++            VABufferInfo *      buf_info_ptr
++        );
+ };
+
+ struct VADriverContext
+--
+1.9.1
+
--- /dev/null
+++ b/patches/0008-Fix-crash-when-switching-to-console-VT-mode.patch
@@ -0,0 +1,32 @@
+From 838bca36fa4872137bbdfed5cd5a0bae705e0bea Mon Sep 17 00:00:00 2001
+From: Joone Hur <joone.hur@intel.com>
+Date: Mon, 27 Oct 2014 15:22:48 -0700
+Subject: [PATCH] Fix crash when switching to console(VT) mode
+
+Buffer swapping should not be synchronized so that the GPU process
+is not blocked by waiting for a frame update from Weston.
+
+Bug: TC-341
+---
+ ui/gl/gl_context_egl.cc | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/ui/gl/gl_context_egl.cc b/ui/gl/gl_context_egl.cc
+index 2554f8c..cac515a 100644
+--- a/ui/gl/gl_context_egl.cc
++++ b/ui/gl/gl_context_egl.cc
+@@ -112,6 +112,11 @@ bool GLContextEGL::MakeCurrent(GLSurface* surface) {
+     return false;
+   }
+ 
++#if defined(USE_OZONE)
++  if (!surface->IsOffscreen())
++    eglSwapInterval(display_, 0);
++#endif
++
+   // Set this as soon as the context is current, since we might call into GL.
+   SetRealGLApi();
+ 
+-- 
+1.9.1
+
--- /dev/null
+++ b/patches/0009-PlatformWindow-Add-needed-support-in-PlatformWindow.patch
@@ -0,0 +1,40 @@
+From 1e106a503a3ffd63e37e96a8e071c16e6bf63f03 Mon Sep 17 00:00:00 2001
+From: Kalyan Kondapally <kalyan.kondapally@intel.com>
+Date: Sun, 19 Oct 2014 19:55:16 -0700
+Subject: [PATCH] PlatformWindow: Add needed support in PlatformWindow.
+
+This patch adds necessary API support in PlatformWindow. The changes
+need to be evaluated further before trying to upstream them.
+---
+ ui/platform_window/platform_window.h | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff --git a/ui/platform_window/platform_window.h b/ui/platform_window/platform_window.h
+index d5f5750..14aada4 100644
+--- a/ui/platform_window/platform_window.h
++++ b/ui/platform_window/platform_window.h
+@@ -22,8 +22,21 @@ class PlatformWindowDelegate;
+ // underlying platform windowing system (i.e. X11/Win/OSX).
+ class PlatformWindow {
+  public:
++   enum PlatformWindowType {
++     PLATFORM_WINDOW_UNKNOWN,
++     PLATFORM_WINDOW_TYPE_TOOLTIP,
++     PLATFORM_WINDOW_TYPE_POPUP,
++     PLATFORM_WINDOW_TYPE_MENU,
++     PLATFORM_WINDOW_TYPE_BUBBLE,
++     PLATFORM_WINDOW_TYPE_WINDOW,
++     PLATFORM_WINDOW_TYPE_WINDOW_FRAMELESS
++   };
++
+   virtual ~PlatformWindow() {}
+
++  virtual void InitPlatformWindow(PlatformWindowType type,
++                                  gfx::AcceleratedWidget parent_window) { }
++
+   virtual void Show() = 0;
+   virtual void Hide() = 0;
+   virtual void Close() = 0;
+--
+1.9.1
+
--- /dev/null
+++ b/patches/1001-Fix-build-warnings.patch
@@ -0,0 +1,48 @@
+From eb4e4b189a9a6ffab9e5bed55e73ee21d9bb28db Mon Sep 17 00:00:00 2001
+From: Joone Hur <joone.hur@intel.com>
+Date: Tue, 7 Oct 2014 13:31:07 -0700
+Subject: [PATCH] Fix build warnings
+
+../../third_party/webrtc/base/physicalsocketserver.cc:241:72: error: 'slevel' may be used uninitialized in this function [-Werror=maybe-uninitialized]
+      int ret = ::getsockopt(s_, slevel, sopt, (SockOptArg)value, &optlen);
+                                                                         ^
+ ../../third_party/webrtc/base/physicalsocketserver.cc:241:72: error: 'sopt' may be used uninitialized in this function [-Werror=maybe-uninitialized]
+ ../../third_party/webrtc/base/physicalsocketserver.cc: In member function 'virtual int rtc::PhysicalSocket::SetOption(rtc::Socket::Option, int)':
+ ../../third_party/webrtc/base/physicalsocketserver.cc:260:76: error: 'slevel' may be used uninitialized in this function [-Werror=maybe-uninitialized]
+      return ::setsockopt(s_, slevel, sopt, (SockOptArg)&value, sizeof(value));
+                                                                             ^
+ ../../third_party/webrtc/base/physicalsocketserver.cc:260:76: error: 'sopt' may be used uninitialized in this function [-Werror=maybe-uninitialized]
+ cc1plus: all warnings being treated as errors
+---
+ base/physicalsocketserver.cc |    8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/base/physicalsocketserver.cc b/base/physicalsocketserver.cc
+index cff5e4d..7008e73 100644
+--- a/base/physicalsocketserver.cc
++++ b/base/physicalsocketserver.cc
+@@ -233,8 +233,8 @@ class PhysicalSocket : public AsyncSocket, public sigslot::has_slots<> {
+   }
+ 
+   int GetOption(Option opt, int* value) {
+-    int slevel;
+-    int sopt;
++    int slevel = 0;
++    int sopt = 0;
+     if (TranslateOption(opt, &slevel, &sopt) == -1)
+       return -1;
+     socklen_t optlen = sizeof(*value);
+@@ -248,8 +248,8 @@ class PhysicalSocket : public AsyncSocket, public sigslot::has_slots<> {
+   }
+ 
+   int SetOption(Option opt, int value) {
+-    int slevel;
+-    int sopt;
++    int slevel = 0;
++    int sopt = 0;
+     if (TranslateOption(opt, &slevel, &sopt) == -1)
+       return -1;
+     if (opt == OPT_DONTFRAGMENT) {
+-- 
+1.7.9.5
+
--- /dev/null
+++ b/patches/patch-chromium.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+PATCH_DIR=`pwd`/src/ozone/patches/
+HACKING_BRANCH=master-ozone
+
+echo "Ozone-Wayland: patching Chromium"
+cd src/
+
+# we switch to $HACKING_BRANCH before anything
+git checkout master
+
+exists=`git show-ref refs/heads/$HACKING_BRANCH`
+if [ -n "$exists" ]; then
+  git branch -D $HACKING_BRANCH
+fi
+
+git checkout -b $HACKING_BRANCH master
+git am $PATCH_DIR/00*
+
+# jump now to WebRTC dir and apply the needed patches there
+cd third_party/webrtc/
+git reset --hard origin/master
+git am $PATCH_DIR/100*
+
+
--- /dev/null
+++ b/platform/DEPS
@@ -0,0 +1,7 @@
+include_rules = [
+  "+ozone/platform",
+  "+ozone/ui/desktop_aura/",
+  "+ozone/ui/events",
+  "+ozone/ui/gfx",
+  "+ui/ozone",
+]
--- /dev/null
+++ b/platform/OWNERS
@@ -0,0 +1,2 @@
+kalyan.kondapally@intel.com
+tiago.vignatti@intel.com
--- /dev/null
+++ b/platform/desktop_platform_screen.h
@@ -0,0 +1,22 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_PLATFORM_PLATFORM_SCREEN_H_
+#define OZONE_PLATFORM_PLATFORM_SCREEN_H_
+
+#include "ozone/platform/ozone_export_wayland.h"
+#include "ui/gfx/geometry/point.h"
+
+namespace ui {
+
+class DesktopPlatformScreen {
+ public:
+  virtual ~DesktopPlatformScreen() { }
+
+  virtual gfx::Point GetCursorScreenPoint() = 0;
+};
+
+}  // namespace ui
+
+#endif  // OZONE_PLATFORM_PLATFORM_SCREEN_H_
--- /dev/null
+++ b/platform/ozone_export_wayland.h
@@ -0,0 +1,14 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_EXPORT_H_
+#define OZONE_EXPORT_H_
+
+#if defined(COMPONENT_BUILD) && defined(OZONE_WAYLAND_IMPLEMENTATION)
+  #define OZONE_WAYLAND_EXPORT __attribute__ ((visibility ("default")))
+#else
+  #define OZONE_WAYLAND_EXPORT
+#endif
+
+#endif  // OZONE_EXPORT_H_
--- /dev/null
+++ b/platform/ozone_platform_wayland.cc
@@ -0,0 +1,109 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/platform/ozone_platform_wayland.h"
+
+#include "base/at_exit.h"
+#include "base/bind.h"
+#include "ozone/platform/ozone_wayland_window.h"
+#include "ozone/ui/cursor/cursor_factory_ozone_wayland.h"
+#include "ozone/ui/events/event_factory_ozone_wayland.h"
+#include "ozone/ui/ime/input_method_context_factory_wayland.h"
+#include "ozone/ui/public/ozone_channel.h"
+#include "ozone/ui/public/ozone_channel_host.h"
+#include "ozone/wayland/display.h"
+#include "ui/ozone/common/native_display_delegate_ozone.h"
+#include "ui/ozone/public/ozone_platform.h"
+#include "ui/platform_window/platform_window_delegate.h"
+
+
+namespace ui {
+
+namespace {
+
+// OzonePlatform for Wayland
+//
+// This platform is Linux with the Wayland display server.
+class OzonePlatformWayland : public OzonePlatform {
+ public:
+  OzonePlatformWayland() {
+    base::AtExitManager::RegisterTask(
+        base::Bind(&base::DeletePointer<OzonePlatformWayland>, this));
+  }
+
+  virtual ~OzonePlatformWayland() {
+  }
+
+  // OzonePlatform:
+  ui::SurfaceFactoryOzone* GetSurfaceFactoryOzone() override {
+    return wayland_display_.get();
+  }
+
+  CursorFactoryOzone* GetCursorFactoryOzone() override {
+    return cursor_factory_ozone_.get();
+  }
+
+  GpuPlatformSupportHost* GetGpuPlatformSupportHost() override {
+    return gpu_platform_host_.get();
+  }
+
+  GpuPlatformSupport* GetGpuPlatformSupport() override {
+    return gpu_platform_.get();
+  }
+
+  scoped_ptr<PlatformWindow> CreatePlatformWindow(
+      PlatformWindowDelegate* delegate,
+      const gfx::Rect& bounds) override {
+    return scoped_ptr<PlatformWindow>(new OzoneWaylandWindow(delegate,
+                                                             bounds));
+  }
+
+  scoped_ptr<NativeDisplayDelegate> CreateNativeDisplayDelegate() override {
+    return scoped_ptr<NativeDisplayDelegate>(new NativeDisplayDelegateOzone());
+  }
+
+  void InitializeUI() override {
+    // For tests.
+    if (wayland_display_.get())
+      return;
+
+    gpu_platform_host_.reset(new ui::OzoneChannelHost());
+    event_factory_ozone_.reset(
+        new ui::EventFactoryOzoneWayland(gpu_platform_host_.get()));
+    // Needed as Browser creates accelerated widgets through SFO.
+    wayland_display_.reset(new ozonewayland::WaylandDisplay());
+    input_method_factory_.reset(
+        new ui::InputMethodContextFactoryWayland());
+    cursor_factory_ozone_.reset(new ui::CursorFactoryOzoneWayland());
+  }
+
+  void InitializeGPU() override {
+    gpu_platform_.reset(new ui::OzoneChannel());
+    if (!event_factory_ozone_) {
+      event_factory_ozone_.reset(new ui::EventFactoryOzoneWayland());
+      gpu_platform_.get()->InitializeRemoteDispatcher();
+    }
+
+    if (!wayland_display_)
+      wayland_display_.reset(new ozonewayland::WaylandDisplay());
+
+    if (!wayland_display_->InitializeHardware())
+      LOG(FATAL) << "failed to initialize display hardware";
+  }
+
+ private:
+  scoped_ptr<ui::InputMethodContextFactoryWayland> input_method_factory_;
+  scoped_ptr<ui::EventFactoryOzoneWayland> event_factory_ozone_;
+  scoped_ptr<ui::CursorFactoryOzoneWayland> cursor_factory_ozone_;
+  scoped_ptr<ui::OzoneChannelHost> gpu_platform_host_;
+  scoped_ptr<ui::OzoneChannel> gpu_platform_;
+  scoped_ptr<ozonewayland::WaylandDisplay> wayland_display_;
+  DISALLOW_COPY_AND_ASSIGN(OzonePlatformWayland);
+};
+
+}  // namespace
+
+OzonePlatform* CreateOzonePlatformWayland() { return new OzonePlatformWayland; }
+
+}  // namespace ui
--- /dev/null
+++ b/platform/ozone_platform_wayland.h
@@ -0,0 +1,19 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_PLATFORM_OZONE_PLATFORM_WAYLAND_H_
+#define OZONE_PLATFORM_OZONE_PLATFORM_WAYLAND_H_
+
+#include "ozone/platform/ozone_export_wayland.h"
+
+namespace ui {
+
+class OzonePlatform;
+
+// Constructor hook for use in ozone_platform_list.cc
+OZONE_WAYLAND_EXPORT OzonePlatform* CreateOzonePlatformWayland();
+
+}  // namespace ui
+
+#endif  // OZONE_PLATFORM_OZONE_PLATFORM_WAYLAND_H_
--- /dev/null
+++ b/platform/ozone_wayland_window.cc
@@ -0,0 +1,148 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/platform/ozone_wayland_window.h"
+
+#include "ozone/platform/window_manager_wayland.h"
+#include "ozone/ui/events/event_factory_ozone_wayland.h"
+#include "ozone/ui/events/window_state_change_handler.h"
+#include "ui/gfx/screen.h"
+#include "ui/platform_window/platform_window_delegate.h"
+
+namespace ui {
+
+WindowManagerWayland*
+    OzoneWaylandWindow::g_delegate_ozone_wayland_ = NULL;
+
+OzoneWaylandWindow::OzoneWaylandWindow(PlatformWindowDelegate* delegate,
+                                       const gfx::Rect& bounds)
+    : delegate_(delegate), bounds_(bounds) {
+  static int opaque_handle = 0;
+  opaque_handle++;
+  handle_ = opaque_handle;
+  delegate_->OnAcceleratedWidgetAvailable(opaque_handle);
+
+  if (!g_delegate_ozone_wayland_)
+    g_delegate_ozone_wayland_ = new WindowManagerWayland();
+
+  g_delegate_ozone_wayland_->OnRootWindowCreated(this);
+}
+
+OzoneWaylandWindow::~OzoneWaylandWindow() {
+}
+
+void OzoneWaylandWindow::InitPlatformWindow(
+    PlatformWindowType type, gfx::AcceleratedWidget parent_window) {
+  WindowStateChangeHandler* state_handler =
+      EventFactoryOzoneWayland::GetInstance()->GetWindowStateChangeHandler();
+  switch (type) {
+    case PLATFORM_WINDOW_TYPE_TOOLTIP:
+    case PLATFORM_WINDOW_TYPE_POPUP:
+    case PLATFORM_WINDOW_TYPE_MENU: {
+      // Wayland surfaces don't know their position on the screen and transient
+      // surfaces always require a parent surface for relative placement. Here
+      // there's a catch because content_shell menus don't have parent and
+      // therefore we use root window to calculate their position.
+      DCHECK(parent_window);
+      OzoneWaylandWindow* active_window =
+          g_delegate_ozone_wayland_->GetWindow(parent_window);
+
+      DCHECK(active_window);
+      gfx::Rect parent_bounds = active_window->GetBounds();
+      // Don't size the window bigger than the parent, otherwise the user may
+      // not be able to close or move it.
+      // Transient type expects a position relative to the parent
+      gfx::Point transientPos(bounds_.x() - parent_bounds.x(),
+                              bounds_.y() - parent_bounds.y());
+
+      state_handler->CreateWidget(handle_,
+                                  active_window->GetHandle(),
+                                  transientPos.x(),
+                                  transientPos.y(),
+                                  ui::POPUP);
+      break;
+    }
+    case PLATFORM_WINDOW_TYPE_BUBBLE:
+    case PLATFORM_WINDOW_TYPE_WINDOW:
+      state_handler->CreateWidget(handle_,
+                                  0,
+                                  0,
+                                  0,
+                                  ui::WINDOW);
+      break;
+    case PLATFORM_WINDOW_TYPE_WINDOW_FRAMELESS:
+      NOTIMPLEMENTED();
+      break;
+    default:
+      break;
+  }
+}
+
+gfx::Rect OzoneWaylandWindow::GetBounds() {
+  return bounds_;
+}
+
+void OzoneWaylandWindow::SetBounds(const gfx::Rect& bounds) {
+  bounds_ = bounds;
+  delegate_->OnBoundsChanged(bounds_);
+}
+
+void OzoneWaylandWindow::Show() {
+  EventFactoryOzoneWayland::GetInstance()->GetWindowStateChangeHandler()->
+      SetWidgetState(handle_, ui::SHOW);
+}
+
+void OzoneWaylandWindow::Hide() {
+  EventFactoryOzoneWayland::GetInstance()->GetWindowStateChangeHandler()->
+      SetWidgetState(handle_, ui::HIDE);
+}
+
+void OzoneWaylandWindow::Close() {
+  g_delegate_ozone_wayland_->OnRootWindowClosed(this);
+  if (!g_delegate_ozone_wayland_->HasWindowsOpen()) {
+    // We have no open windows, free g_delegate_ozone_wayland_.
+    delete g_delegate_ozone_wayland_;
+    g_delegate_ozone_wayland_ = NULL;
+  }
+}
+
+void OzoneWaylandWindow::SetCapture() {
+}
+
+void OzoneWaylandWindow::ReleaseCapture() {
+}
+
+void OzoneWaylandWindow::ToggleFullscreen() {
+  gfx::Screen *screen = gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_NATIVE);
+  if (!screen)
+    NOTREACHED() << "Unable to retrieve valid gfx::Screen";
+
+  SetBounds(screen->GetPrimaryDisplay().bounds());
+  EventFactoryOzoneWayland::GetInstance()->GetWindowStateChangeHandler()->
+      SetWidgetState(handle_, ui::FULLSCREEN);
+}
+
+void OzoneWaylandWindow::Maximize() {
+  EventFactoryOzoneWayland::GetInstance()->GetWindowStateChangeHandler()->
+      SetWidgetState(handle_, ui::MAXIMIZED);
+}
+
+void OzoneWaylandWindow::Minimize() {
+  SetBounds(gfx::Rect());
+  EventFactoryOzoneWayland::GetInstance()->GetWindowStateChangeHandler()->
+      SetWidgetState(handle_, ui::MINIMIZED);
+}
+
+void OzoneWaylandWindow::Restore() {
+  EventFactoryOzoneWayland::GetInstance()->GetWindowStateChangeHandler()->
+      SetWidgetState(handle_, ui::RESTORE);
+}
+
+void OzoneWaylandWindow::SetCursor(PlatformCursor cursor) {
+}
+
+void OzoneWaylandWindow::MoveCursorTo(const gfx::Point& location) {
+}
+
+}  // namespace ui
--- /dev/null
+++ b/platform/ozone_wayland_window.h
@@ -0,0 +1,54 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_PLATFORM_OZONE_WAYLAND_WINDOW_H_
+#define OZONE_PLATFORM_OZONE_WAYLAND_WINDOW_H_
+
+#include "ui/gfx/geometry/rect.h"
+#include "ui/gfx/native_widget_types.h"
+#include "ui/platform_window/platform_window.h"
+
+namespace ui {
+
+class PlatformWindowDelegate;
+class WindowManagerWayland;
+
+class OzoneWaylandWindow : public PlatformWindow {
+ public:
+  OzoneWaylandWindow(PlatformWindowDelegate* delegate,
+                     const gfx::Rect& bounds);
+  virtual ~OzoneWaylandWindow();
+
+  unsigned GetHandle() const { return handle_; }
+  PlatformWindowDelegate* GetDelegate() const { return delegate_; }
+
+  // PlatformWindow:
+  void InitPlatformWindow(PlatformWindowType type,
+                          gfx::AcceleratedWidget parent_window) override;
+  gfx::Rect GetBounds() override;
+  void SetBounds(const gfx::Rect& bounds) override;
+  void Show() override;
+  void Hide() override;
+  void Close() override;
+  void SetCapture() override;
+  void ReleaseCapture() override;
+  void ToggleFullscreen() override;
+  void Maximize() override;
+  void Minimize() override;
+  void Restore() override;
+  void SetCursor(PlatformCursor cursor) override;
+  void MoveCursorTo(const gfx::Point& location) override;
+
+ private:
+  PlatformWindowDelegate* delegate_;
+  gfx::Rect bounds_;
+  unsigned handle_;
+
+  static WindowManagerWayland* g_delegate_ozone_wayland_;
+  DISALLOW_COPY_AND_ASSIGN(OzoneWaylandWindow);
+};
+
+}  // namespace ui
+
+#endif  // OZONE_PLATFORM_OZONE_WAYLAND_WINDOW_H_
--- /dev/null
+++ b/platform/window_manager_wayland.cc
@@ -0,0 +1,133 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/platform/window_manager_wayland.h"
+
+#include <string>
+
+#include "ozone/platform/ozone_wayland_window.h"
+#include "ozone/ui/events/event_factory_ozone_wayland.h"
+#include "ui/aura/window.h"
+#include "ui/events/event_utils.h"
+#include "ui/events/platform/platform_event_source.h"
+#include "ui/platform_window/platform_window_delegate.h"
+
+namespace ui {
+
+WindowManagerWayland::WindowManagerWayland()
+    : open_windows_(NULL) {
+  ui::EventFactoryOzoneWayland::GetInstance()->SetWindowChangeObserver(this);
+}
+
+WindowManagerWayland::~WindowManagerWayland() {
+}
+
+void WindowManagerWayland::OnRootWindowCreated(
+    ui::OzoneWaylandWindow* window) {
+  open_windows().push_back(window);
+}
+
+void WindowManagerWayland::OnRootWindowClosed(
+    ui::OzoneWaylandWindow* window) {
+  open_windows().remove(window);
+  if (open_windows().empty()) {
+    delete open_windows_;
+    open_windows_ = NULL;
+    ui::EventFactoryOzoneWayland::GetInstance()->SetWindowChangeObserver(NULL);
+    return;
+  }
+
+  // Set first top level window in the list of open windows as dispatcher.
+  // This is just a guess of the window which would eventually be focussed.
+  // We should set the correct root window as dispatcher in OnWindowFocused.
+  ui::OzoneWaylandWindow* new_window = open_windows().front();
+  new_window->GetDelegate()->OnActivationChanged(true);
+}
+
+bool WindowManagerWayland::HasWindowsOpen() const {
+  return open_windows_ ? !open_windows_->empty() : false;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// WindowManagerWayland, Private implementation:
+ui::OzoneWaylandWindow*
+WindowManagerWayland::GetWindow(unsigned handle) {
+  ui::OzoneWaylandWindow* window = NULL;
+  const std::list<ui::OzoneWaylandWindow*>& windows = open_windows();
+  std::list<ui::OzoneWaylandWindow*>::const_iterator it;
+  for (it = windows.begin(); it != windows.end(); ++it) {
+    if ((*it)->GetHandle() == handle) {
+      window = *it;
+      break;
+    }
+  }
+
+  return window;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// WindowManagerWayland, WindowChangeObserver implementation:
+void WindowManagerWayland::OnWindowFocused(unsigned handle) {
+  DCHECK(handle);
+  ui::OzoneWaylandWindow* window = GetWindow(handle);
+  if (!window)
+    return;
+
+  window->GetDelegate()->OnActivationChanged(true);
+}
+
+void WindowManagerWayland::OnWindowEnter(unsigned handle) {
+  OnWindowFocused(handle);
+}
+
+void WindowManagerWayland::OnWindowLeave(unsigned handle) {
+}
+
+void WindowManagerWayland::OnWindowClose(unsigned handle) {
+  DCHECK(handle);
+  ui::OzoneWaylandWindow* window = GetWindow(handle);
+  DCHECK(window);
+  window->GetDelegate()->OnCloseRequest();
+}
+
+void WindowManagerWayland::OnWindowResized(unsigned handle,
+                                                    unsigned width,
+                                                    unsigned height) {
+  ui::OzoneWaylandWindow* window = GetWindow(handle);
+  DCHECK(window);
+  const gfx::Rect& current_bounds = window->GetBounds();
+  window->SetBounds(gfx::Rect(current_bounds.x(),
+                              current_bounds.y(),
+                              width,
+                              height));
+}
+
+void WindowManagerWayland::OnWindowUnminimized(unsigned handle) {
+  ui::OzoneWaylandWindow* window = GetWindow(handle);
+  DCHECK(window);
+  window->GetDelegate()->OnWindowStateChanged(
+      ui::PLATFORM_WINDOW_STATE_MAXIMIZED);
+}
+
+void WindowManagerWayland::OnWindowDeActivated(unsigned windowhandle) {
+  DCHECK(windowhandle);
+  ui::OzoneWaylandWindow* window = GetWindow(windowhandle);
+  DCHECK(window);
+  window->GetDelegate()->OnActivationChanged(false);
+}
+
+void WindowManagerWayland::OnWindowActivated(unsigned windowhandle) {
+  DCHECK(windowhandle);
+  OnWindowFocused(windowhandle);
+}
+
+std::list<ui::OzoneWaylandWindow*>&
+WindowManagerWayland::open_windows() {
+  if (!open_windows_)
+    open_windows_ = new std::list<ui::OzoneWaylandWindow*>();
+
+  return *open_windows_;
+}
+
+}  // namespace ui
--- /dev/null
+++ b/platform/window_manager_wayland.h
@@ -0,0 +1,62 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_IMPL_PLATFORM_WINDOW_MANAGER_OZONE_H_
+#define OZONE_IMPL_PLATFORM_WINDOW_MANAGER_OZONE_H_
+
+#include <list>
+#include <string>
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/message_loop/message_loop.h"
+#include "ozone/ui/events/window_change_observer.h"
+#include "ui/events/event.h"
+#include "ui/events/event_source.h"
+#include "ui/events/platform/platform_event_dispatcher.h"
+#include "ui/gfx/native_widget_types.h"
+
+namespace ui {
+class OzoneWaylandWindow;
+}
+
+namespace ui {
+
+// A static class used by OzoneWaylandWindow for basic window management.
+class WindowManagerWayland
+    : public ui::WindowChangeObserver {
+ public:
+  WindowManagerWayland();
+  virtual ~WindowManagerWayland();
+
+  void OnRootWindowCreated(ui::OzoneWaylandWindow* window);
+  void OnRootWindowClosed(ui::OzoneWaylandWindow* window);
+
+  ui::OzoneWaylandWindow* GetWindow(unsigned handle);
+  bool HasWindowsOpen() const;
+
+ private:
+  // Window Change Observer.
+  void OnWindowFocused(unsigned handle) override;
+  void OnWindowEnter(unsigned handle) override;
+  void OnWindowLeave(unsigned handle) override;
+  void OnWindowClose(unsigned handle) override;
+  void OnWindowResized(unsigned windowhandle,
+                       unsigned width,
+                       unsigned height) override;
+  void OnWindowUnminimized(unsigned windowhandle) override;
+  void OnWindowDeActivated(unsigned windowhandle) override;
+  void OnWindowActivated(unsigned windowhandle) override;
+
+  // Dispatches a mouse event.
+  std::list<ui::OzoneWaylandWindow*>& open_windows();
+
+  // List of all open aura::Window.
+  std::list<ui::OzoneWaylandWindow*>* open_windows_;
+  DISALLOW_COPY_AND_ASSIGN(WindowManagerWayland);
+};
+
+}  // namespace ui
+
+#endif  // OZONE_IMPL_PLATFORM_WINDOW_MANAGER_OZONE_H_
--- /dev/null
+++ b/supplement.gypi
@@ -0,0 +1,34 @@
+# Copyright 2013 The Chromium Authors. All rights reserved.
+# Copyright 2013 Intel Corporation. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+  'variables':  {
+    'ozone_platform_wayland%': 1,
+  },
+  'conditions': [
+    ['<(ozone_platform_wayland) == 1', {
+      'variables':  {
+        'external_ozone_platform_deps': [
+          '<(DEPTH)/ozone/ozone_impl.gyp:wayland',
+        ],
+        'external_ozone_views_files': [
+          '<(DEPTH)/ozone/ui/desktop_aura/desktop_drag_drop_client_wayland.cc',
+          '<(DEPTH)/ozone/ui/desktop_aura/desktop_drag_drop_client_wayland.h',
+          '<(DEPTH)/ozone/ui/desktop_aura/desktop_platform_screen.h',
+          '<(DEPTH)/ozone/ui/desktop_aura/desktop_screen_wayland.cc',
+          '<(DEPTH)/ozone/ui/desktop_aura/desktop_screen_wayland.h',
+          '<(DEPTH)/ozone/ui/desktop_aura/desktop_window_tree_host_ozone.cc',
+          '<(DEPTH)/ozone/ui/desktop_aura/desktop_window_tree_host_ozone.h',
+          '<(DEPTH)/ozone/ui/desktop_aura/ozone_util.cc',
+          '<(DEPTH)/ozone/ui/desktop_aura/ozone_util.h',
+        ],
+        'external_ozone_platforms': [
+          'wayland'
+        ],
+        'ozone_platform%': 'wayland',
+      },
+    }],
+  ],
+}
--- a/third_party/libva/va/va.h
+++ b/third_party/libva/va/va.h
@@ -78,6 +78,7 @@
 #ifndef _VA_H_
 #define _VA_H_
 
+#include <stddef.h>
 #include <stdint.h>
 #include <va/va_version.h>
 
@@ -1851,6 +1852,116 @@ VAStatus vaDestroyBuffer (
     VABufferID buffer_id
 );
 
+/** VA buffer information */
+typedef struct {
+    /** Buffer handle */
+    uintptr_t           handle;
+    /** Buffer type (See VABufferType). */
+    uint32_t            type;
+    /**
+     * Buffer memory type (See VASurfaceAttribMemoryType).
+     *
+     * On input to vaLockBuffer(), this field can serve as a hint to
+     * specify the set of memory types the caller is interested in. On
+     * successful return from vaLockBuffer(), the field is updated
+     * with the best matching memory type.
+     */
+    uint32_t            mem_type;
+    /** Size of the underlying buffer. */
+    size_t              mem_size;
+} VABufferInfo;
+
+/**
+ * Locks buffer for external API usage.
+ *
+ * Locks the VA buffer object buf_id for external API usage like
+ * EGL or OpenCL (OCL). This function is a synchronization point. This
+ * means that any pending operation is guaranteed to be completed
+ * prior to returning from the function.
+ *
+ * If the referenced VA buffer object is the backing store of a VA
+ * surface, then this function acts as if vaSyncSurface() on the
+ * parent surface was called first.
+ *
+ * The VABufferInfo argument shall be zero'ed on input. On
+ * successful output, the data structure is filled in with all the
+ * necessary buffer level implementation details like handle, type,
+ * memory type and memory size.
+ *
+ * Note: the external API implementation, or the application, can
+ * express the memory types it is interested in by filling in the
+ * mem_type field accordingly. On successful output, the memory type
+ * that fits best the request and that was used is updated in the
+ * VABufferInfo data structure. If none of the supplied memory types
+ * is supported, then a VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE
+ * error is returned.
+ *
+ * The VABufferInfo data is valid until vaUnlockBuffer() is
+ * called. Besides, no additional operation is allowed on any of the
+ * buffer parent object until vaUnlockBuffer() is called. e.g. decoding
+ * into a VA surface backed with the supplied VA buffer object
+ * buf_id would fail with a VA_STATUS_ERROR_SURFACE_BUSY error.
+ *
+ * Possible errors:
+ * - VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation
+ *   does not support this interface
+ * - VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied
+ * - VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied
+ * - VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE: the implementation
+ *   does not support exporting buffers of the specified type
+ * - VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE: none of the requested
+ *   memory types in \ref VABufferInfo.mem_type was supported
+ *
+ * @param[in] dpy               the VA display
+ * @param[in] buf_id            the VA buffer
+ * @param[in,out] buf_info_ptr  the VA buffer information
+ * @return VA_STATUS_SUCCESS if successful
+ */
+VAStatus
+vaLockBuffer(
+    VADisplay           dpy,
+    VABufferID          buf_id,
+    VABufferInfo *      buf_info_ptr
+);
+
+/**
+ * Unlocks buffer after usage from external API.
+ *
+ * Unlocks the VA buffer object buf_id from external API usage like
+ * EGL or OpenCL (OCL). This function is a synchronization point. This
+ * means that any pending operation is guaranteed to be completed
+ * prior to returning from the function.
+ *
+ * The VABufferInfo argument shall point to the original data
+ * structure that was obtained from vaLockBuffer(), unaltered. This is
+ * necessary so that the VA driver implementation could deallocate any
+ * resources that were needed.
+ *
+ * In any case, returning from this function invalidates any contents
+ * in VABufferInfo. i.e. the underlyng buffer handle is no longer
+ * valid. Therefore, VA driver implementations are free to reset this
+ * data structure to safe defaults.
+ *
+ * Possible errors:
+ * - VA_STATUS_ERROR_UNIMPLEMENTED: the VA driver implementation
+ *   does not support this interface
+ * - VA_STATUS_ERROR_INVALID_DISPLAY: an invalid display was supplied
+ * - VA_STATUS_ERROR_INVALID_BUFFER: an invalid buffer was supplied
+ * - VA_STATUS_ERROR_UNSUPPORTED_BUFFERTYPE: the implementation
+ *   does not support exporting buffers of the specified type
+ *
+ * @param[in] dpy               the VA display
+ * @param[in] buf_id            the VA buffer
+ * @param[in,out] buf_info_ptr  the VA buffer information
+ * @return VA_STATUS_SUCCESS if successful
+ */
+VAStatus
+vaUnlockBuffer(
+    VADisplay           dpy,
+    VABufferID          buf_id,
+    VABufferInfo *      buf_info_ptr
+);
+
 /*
 Render (Decode) Pictures
 
--- a/third_party/libva/va/va_backend.h
+++ b/third_party/libva/va/va_backend.h
@@ -420,6 +420,20 @@ struct VADriverVTable
             VASurfaceAttrib    *attrib_list,
             unsigned int       *num_attribs
         );
+
+        VAStatus
+        (*vaLockBuffer)(
+            VADriverContextP    ctx,
+            VABufferID          buf_id,
+            VABufferInfo *      buf_info_ptr
+        );
+
+        VAStatus
+        (*vaUnlockBuffer)(
+            VADriverContextP    ctx,
+            VABufferID          buf_id,
+            VABufferInfo *      buf_info_ptr
+        );
 };
 
 struct VADriverContext
--- a/third_party/webrtc/base/physicalsocketserver.cc
+++ b/third_party/webrtc/base/physicalsocketserver.cc
@@ -233,8 +233,8 @@ class PhysicalSocket : public AsyncSocke
   }
 
   int GetOption(Option opt, int* value) {
-    int slevel;
-    int sopt;
+    int slevel = 0;
+    int sopt = 0;
     if (TranslateOption(opt, &slevel, &sopt) == -1)
       return -1;
     socklen_t optlen = sizeof(*value);
@@ -248,8 +248,8 @@ class PhysicalSocket : public AsyncSocke
   }
 
   int SetOption(Option opt, int value) {
-    int slevel;
-    int sopt;
+    int slevel = 0;
+    int sopt = 0;
     if (TranslateOption(opt, &slevel, &sopt) == -1)
       return -1;
     if (opt == OPT_DONTFRAGMENT) {
--- a/tools/OWNERS
+++ b/tools/OWNERS
@@ -1,3 +1,2 @@
-*
-
-per-file bisect-builds.py=rsesek@chromium.org
+kalyan.kondapally@intel.com
+tiago.vignatti@intel.com
--- /dev/null
+++ b/tools/check-coding-style.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+# Copyright (c) 2014 Intel Corporation. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+#
+# stolen from https://github.com/crosswalk-project/tizen-extensions-crosswalk
+
+if [ ! `which cpplint.py` ]; then
+   echo -en "\nPlease make sure cpplint.py is in your PATH. "
+   echo -e "It is part of depot_tools inside Chromium repository."
+   exit 1
+fi
+
+# Store current dir and change to repository root dir.
+OLD_PWD=$PWD
+SELF_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+cd $SELF_DIR/..
+
+# TODO(vignatti): maybe we should remove the OZONE_ prefix from all header
+# guards and activate
+FILTERS="+build,-build/header_guard,+whitespace,+readability,+legal,+runtime"
+
+cpplint.py --filter="$FILTERS" $(find \
+                               \( -name '*.h' -o -name '*.cc' \) | grep -v text-client-protocol.h \
+                                                                 | grep -v xdg-shell-client-protocol.h \
+                                                                 | grep -v ivi-application-client-protocol.h \
+                                                                 | grep -v vaapi_h264_decoder.cc \
+                                                                 | grep -v vaapi_h264_decoder.h \
+                                                                 | grep -v media_ozone_platform_wayland.cc \
+                                                                 | grep -v vaapi_video_decode_accelerator.h \
+                                                                 | grep -v vaapi_wrapper.cc \
+                                                                 | grep -v h264_dpb.cc \
+                                                                 | grep -v h264_dpb.h \
+                                                                 | grep -v vaapi_wrapper.h)
+
+# Return to previous dir and return the code returned by cpplint.py
+RET_VAL=$?
+cd $OLD_PWD
+exit $RET_VAL
--- /dev/null
+++ b/tools/export-chromium-browser-binary.txt
@@ -0,0 +1,23 @@
+# This file shows a very simple way to create a tarball (tar.gz) with a few
+# essential files including the Chromium binary, in which a regular user will
+# be able to play around with Chromium Wayland Browser.
+#
+# IMPORTANT: by no means this is a definitive solution for packaging Chromium
+# Wayland Browser in your distribution. Please refer to this link for more
+# information:
+#
+# https://github.com/01org/ozone-wayland/wiki/Packaging-and-Release-Process
+#
+# TODO(vignatti): build a python script and automate the instructions mentioned
+# below.
+
+first I've made sure everything inside src/out/Release/ concerns Chromium only,
+i.e. only chrome target was compiled and nothing else before.
+
+$ cd src/out/
+
+$ mkdir chromium-wayland/
+
+$ rsync -a -v --exclude=content_shell* --exclude=gen --exclude=obj Release/ chromium-wayland/
+
+$ tar czvf chromium-wayland.tar.gz chromium-wayland/
--- a/tools/gritsettings/resource_ids
+++ b/tools/gritsettings/resource_ids
@@ -16,7 +16,7 @@
 
   "chrome/browser/browser_resources.grd": {
     "includes": [400],
-    "structures": [750],
+    "structures": [800],
   },
   "chrome/browser/resources/component_extension_resources.grd": {
     "includes": [1000],
--- a/ui/OWNERS
+++ b/ui/OWNERS
@@ -1,13 +1,2 @@
-ben@chromium.org
-sky@chromium.org
-
-# Mac stuff
-avi@chromium.org
-thakis@chromium.org
-
-per-file *.isolate=csharp@chromium.org
-per-file *.isolate=maruel@chromium.org
-
-# If you're doing structural changes get a review from one of the OWNERS.
-per-file *.gyp*=*
-per-file BUILD.gn=*
+kalyan.kondapally@intel.com
+tiago.vignatti@intel.com
--- /dev/null
+++ b/ui/cursor/OWNERS
@@ -0,0 +1,2 @@
+kalyan.kondapally@intel.com
+tiago.vignatti@intel.com
--- /dev/null
+++ b/ui/cursor/cursor.gypi
@@ -0,0 +1,13 @@
+# Copyright 2014 Intel Corporation. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+  'dependencies': [
+    '<(DEPTH)/ui/base/ui_base.gyp:ui_base',
+  ],
+  'sources': [
+    'cursor_factory_ozone_wayland.h',
+    'cursor_factory_ozone_wayland.cc',
+  ],
+}
--- /dev/null
+++ b/ui/cursor/cursor_factory_ozone_wayland.cc
@@ -0,0 +1,29 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/ui/cursor/cursor_factory_ozone_wayland.h"
+
+namespace ui {
+
+CursorFactoryOzoneWayland::CursorFactoryOzoneWayland() {}
+
+CursorFactoryOzoneWayland::~CursorFactoryOzoneWayland() {}
+
+PlatformCursor CursorFactoryOzoneWayland::GetDefaultCursor(int type) {
+  return NULL;
+}
+
+PlatformCursor CursorFactoryOzoneWayland::CreateImageCursor(
+    const SkBitmap& bitmap,
+    const gfx::Point& hotspot) {
+  return NULL;
+}
+
+void CursorFactoryOzoneWayland::RefImageCursor(PlatformCursor cursor) {
+}
+
+void CursorFactoryOzoneWayland::UnrefImageCursor(PlatformCursor cursor) {
+}
+
+}  // namespace ui
--- /dev/null
+++ b/ui/cursor/cursor_factory_ozone_wayland.h
@@ -0,0 +1,26 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_UI_CURSOR_CURSOR_FACTORY_OZONE_WAYLAND_H_
+#define OZONE_UI_CURSOR_CURSOR_FACTORY_OZONE_WAYLAND_H_
+
+#include "ui/ozone/public/cursor_factory_ozone.h"
+
+namespace ui {
+
+class CursorFactoryOzoneWayland : public CursorFactoryOzone {
+ public:
+  CursorFactoryOzoneWayland();
+  virtual ~CursorFactoryOzoneWayland();
+
+  PlatformCursor GetDefaultCursor(int type) override;
+  PlatformCursor CreateImageCursor(const SkBitmap& bitmap,
+                                   const gfx::Point& hotspot) override;
+  void RefImageCursor(PlatformCursor cursor) override;
+  void UnrefImageCursor(PlatformCursor cursor) override;
+};
+
+}  // namespace ui
+
+#endif  // OZONE_UI_CURSOR_CURSOR_FACTORY_OZONE_WAYLAND_H_
--- /dev/null
+++ b/ui/desktop_aura/DEPS
@@ -0,0 +1,16 @@
+include_rules = [
+  "+grit/ui_resources.h",
+  "+grit/ui_strings.h",
+  "+skia/ext",
+  "+third_party/iaccessible2",
+  "+third_party/skia",
+  "+ui/accessibility",
+  "+ui/aura",
+  "+ui/base",
+  "+ui/compositor",
+  "+ui/events",
+  "+ui/gfx",
+  "+ui/native_theme",
+  "+ui/ozone",
+  "+ui/wm/public",
+]
--- /dev/null
+++ b/ui/desktop_aura/OWNERS
@@ -0,0 +1,2 @@
+kalyan.kondapally@intel.com
+tiago.vignatti@intel.com
--- /dev/null
+++ b/ui/desktop_aura/desktop_drag_drop_client_wayland.cc
@@ -0,0 +1,49 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/ui/desktop_aura/desktop_drag_drop_client_wayland.h"
+
+#include "ui/base/dragdrop/drag_drop_types.h"
+#include "ui/base/dragdrop/drop_target_event.h"
+
+namespace views {
+
+DesktopDragDropClientWayland::DesktopDragDropClientWayland(
+    aura::Window* root_window) {
+  NOTIMPLEMENTED();
+}
+
+DesktopDragDropClientWayland::~DesktopDragDropClientWayland() {
+}
+
+int DesktopDragDropClientWayland::StartDragAndDrop(
+    const ui::OSExchangeData& data,
+    aura::Window* root_window,
+    aura::Window* source_window,
+    const gfx::Point& root_location,
+    int operation,
+    ui::DragDropTypes::DragEventSource source) {
+  NOTIMPLEMENTED();
+  return false;
+}
+
+void DesktopDragDropClientWayland::DragUpdate(aura::Window* target,
+                                              const ui::LocatedEvent& event) {
+  NOTIMPLEMENTED();
+}
+
+void DesktopDragDropClientWayland::Drop(aura::Window* target,
+                                        const ui::LocatedEvent& event) {
+  NOTIMPLEMENTED();
+}
+
+void DesktopDragDropClientWayland::DragCancel() {
+  NOTIMPLEMENTED();
+}
+
+bool DesktopDragDropClientWayland::IsDragDropInProgress() {
+  return false;
+}
+
+}  // namespace views
--- /dev/null
+++ b/ui/desktop_aura/desktop_drag_drop_client_wayland.h
@@ -0,0 +1,40 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_IMPL_DESKTOP_AURA_DESKTOP_DRAG_DROP_CLIENT_WAYLAND_H_
+#define OZONE_IMPL_DESKTOP_AURA_DESKTOP_DRAG_DROP_CLIENT_WAYLAND_H_
+
+#include "base/compiler_specific.h"
+#include "ui/views/views_export.h"
+#include "ui/wm/public/drag_drop_client.h"
+
+namespace views {
+
+class VIEWS_EXPORT DesktopDragDropClientWayland
+    : public aura::client::DragDropClient {
+ public:
+  explicit DesktopDragDropClientWayland(aura::Window* root_window);
+  virtual ~DesktopDragDropClientWayland();
+
+  // Overridden from aura::client::DragDropClient:
+  int StartDragAndDrop(const ui::OSExchangeData& data,
+                       aura::Window* root_window,
+                       aura::Window* source_window,
+                       const gfx::Point& root_location,
+                       int operation,
+                       ui::DragDropTypes::DragEventSource source) override;
+  void DragUpdate(aura::Window* target,
+                  const ui::LocatedEvent& event) override;
+  void Drop(aura::Window* target,
+            const ui::LocatedEvent& event) override;
+  void DragCancel() override;
+  bool IsDragDropInProgress() override;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(DesktopDragDropClientWayland);
+};
+
+}  // namespace views
+
+#endif  // OZONE_IMPL_DESKTOP_AURA_DESKTOP_DRAG_DROP_CLIENT_WAYLAND_H_
--- /dev/null
+++ b/ui/desktop_aura/desktop_platform_screen.h
@@ -0,0 +1,22 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_IMPL_DESKTOP_AURA_DESKTOP_PLATFORM_SCREEN_H__
+#define OZONE_IMPL_DESKTOP_AURA_DESKTOP_PLATFORM_SCREEN_H__
+
+#include "ui/views/views_export.h"
+
+namespace ui {
+class DesktopPlatformScreen;
+}
+
+namespace views {
+
+// Creates a Native Screen. Caller owns the result. It's just here to avoid
+// custom changes in OzonePlatform.
+VIEWS_EXPORT ui::DesktopPlatformScreen* CreateDesktopPlatformScreen();
+
+}  // namespace views
+
+#endif  // OZONE_IMPL_DESKTOP_AURA_DESKTOP_PLATFORM_SCREEN_H__
--- /dev/null
+++ b/ui/desktop_aura/desktop_screen_wayland.cc
@@ -0,0 +1,161 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/ui/desktop_aura/desktop_screen_wayland.h"
+
+#include "ozone/platform/desktop_platform_screen.h"
+#include "ozone/ui/desktop_aura/desktop_platform_screen.h"
+#include "ozone/ui/desktop_aura/desktop_window_tree_host_ozone.h"
+#include "ozone/ui/events/event_factory_ozone_wayland.h"
+#include "ui/aura/window.h"
+
+namespace views {
+
+DesktopScreenWayland::DesktopScreenWayland()
+    : gfx::Screen(),
+      rect_(0, 0, 0, 0),
+      displays_() {
+  ui::EventFactoryOzoneWayland::GetInstance()->SetOutputChangeObserver(this);
+  platform_Screen_ = CreateDesktopPlatformScreen();
+}
+
+DesktopScreenWayland::~DesktopScreenWayland() {
+  delete platform_Screen_;
+}
+
+void DesktopScreenWayland::SetGeometry(const gfx::Rect& geometry) {
+  rect_ = geometry;
+  int max_area = 0;
+  const gfx::Display* matching = NULL;
+  for (std::vector<gfx::Display>::const_iterator it = displays_.begin();
+       it != displays_.end(); ++it) {
+    gfx::Rect intersect = gfx::IntersectRects(it->bounds(), rect_);
+    int area = intersect.width() * intersect.height();
+    if (area > max_area) {
+      max_area = area;
+      matching = &*it;
+    }
+  }
+
+  if (!matching) {
+    std::vector<gfx::Display> old_displays = displays_;
+    displays_.push_back(gfx::Display(displays_.size(), rect_));
+    change_notifier_.NotifyDisplaysChanged(old_displays, displays_);
+  }
+}
+
+gfx::Point DesktopScreenWayland::GetCursorScreenPoint() {
+  return platform_Screen_->GetCursorScreenPoint();
+}
+
+gfx::NativeWindow DesktopScreenWayland::GetWindowUnderCursor() {
+  return GetWindowAtScreenPoint(GetCursorScreenPoint());
+}
+
+gfx::NativeWindow DesktopScreenWayland::GetWindowAtScreenPoint(
+    const gfx::Point& point) {
+  const std::vector<aura::Window*>& windows =
+      views::DesktopWindowTreeHostOzone::GetAllOpenWindows();
+  for (std::vector<aura::Window*>::const_iterator it = windows.begin();
+         it != windows.end(); ++it) {
+    if ((*it)->GetBoundsInScreen().Contains(point))
+      return *it;
+  }
+
+  return NULL;
+}
+
+int DesktopScreenWayland::GetNumDisplays() const {
+  return displays_.size();
+}
+
+std::vector<gfx::Display> DesktopScreenWayland::GetAllDisplays() const {
+  return displays_;
+}
+
+gfx::Display DesktopScreenWayland::GetDisplayNearestWindow(
+    gfx::NativeView window) const {
+  DCHECK(!rect_.IsEmpty());
+  if (displays_.size() == 1)
+    return displays_.front();
+  // Getting screen bounds here safely is hard.
+  //
+  // You'd think we'd be able to just call window->GetBoundsInScreen(), but we
+  // can't because |window| (and the associated RootWindow*) can be partially
+  // initialized at this point; RootWindow initializations call through into
+  // GetDisplayNearestWindow(). But the wayland resources are created before we
+  // create the aura::RootWindow. So we ask what the DRWH believes the
+  // window bounds are instead of going through the aura::Window's screen
+  // bounds.
+  aura::WindowTreeHost* host = window->GetHost();
+  if (host) {
+    DesktopWindowTreeHostOzone* rwh =
+        DesktopWindowTreeHostOzone::GetHostForAcceleratedWidget(
+            host->GetAcceleratedWidget());
+    if (rwh)
+      return GetDisplayMatching(rwh->GetBoundsInScreen());
+  }
+
+  return GetPrimaryDisplay();
+}
+
+gfx::Display DesktopScreenWayland::GetDisplayNearestPoint(
+    const gfx::Point& point) const {
+  if (displays_.size() == 1)
+    return displays_.front();
+
+  for (std::vector<gfx::Display>::const_iterator it = displays_.begin();
+         it != displays_.end(); ++it) {
+    if (it->bounds().Contains(point))
+      return *it;
+  }
+
+  return GetPrimaryDisplay();
+}
+
+gfx::Display DesktopScreenWayland::GetDisplayMatching(
+    const gfx::Rect& match_rect) const {
+  if (displays_.size() == 1)
+    return displays_.front();
+
+  DCHECK(!rect_.IsEmpty());
+  int max_area = 0;
+  const gfx::Display* matching = NULL;
+  for (std::vector<gfx::Display>::const_iterator it = displays_.begin();
+       it != displays_.end(); ++it) {
+    gfx::Rect intersect = gfx::IntersectRects(it->bounds(), match_rect);
+    int area = intersect.width() * intersect.height();
+    if (area > max_area) {
+      max_area = area;
+      matching = &*it;
+    }
+  }
+
+  // Fallback to the primary display if there is no matching display.
+  return matching ? *matching : GetPrimaryDisplay();
+}
+
+gfx::Display DesktopScreenWayland::GetPrimaryDisplay() const {
+  DCHECK(!rect_.IsEmpty());
+  return displays_.front();
+}
+
+void DesktopScreenWayland::AddObserver(gfx::DisplayObserver* observer) {
+  change_notifier_.AddObserver(observer);
+}
+
+void DesktopScreenWayland::RemoveObserver(gfx::DisplayObserver* observer) {
+  change_notifier_.RemoveObserver(observer);
+}
+
+void DesktopScreenWayland::OnOutputSizeChanged(unsigned width,
+                                               unsigned height) {
+  SetGeometry(gfx::Rect(0, 0, width, height));
+}
+
+gfx::Screen* CreateDesktopScreen() {
+  return new DesktopScreenWayland();
+}
+
+}  // namespace views
--- /dev/null
+++ b/ui/desktop_aura/desktop_screen_wayland.h
@@ -0,0 +1,59 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_IMPL_DESKTOP_AURA_DESKTOP_SCREEN_WAYLAND_H__
+#define OZONE_IMPL_DESKTOP_AURA_DESKTOP_SCREEN_WAYLAND_H__
+
+#include <vector>
+
+#include "ozone/ui/events/output_change_observer.h"
+#include "ui/gfx/display_change_notifier.h"
+#include "ui/gfx/screen.h"
+
+namespace aura {
+class Window;
+}
+
+namespace ui {
+class DesktopPlatformScreen;
+}
+
+namespace views {
+
+class DesktopScreenWayland : public gfx::Screen,
+                             public ui::OutputChangeObserver {
+ public:
+  DesktopScreenWayland();
+  virtual ~DesktopScreenWayland();
+
+  // OutputChangeObserver overrides.
+  void OnOutputSizeChanged(unsigned width, unsigned height) override;
+
+ private:
+  void SetGeometry(const gfx::Rect& geometry);
+  // Overridden from gfx::Screen:
+  gfx::Point GetCursorScreenPoint() override;
+  gfx::NativeWindow GetWindowUnderCursor() override;
+  gfx::NativeWindow GetWindowAtScreenPoint(const gfx::Point& point) override;
+  int GetNumDisplays() const override;
+  std::vector<gfx::Display> GetAllDisplays() const override;
+  gfx::Display GetDisplayNearestWindow(gfx::NativeView window) const override;
+  gfx::Display GetDisplayNearestPoint(const gfx::Point& point) const override;
+  gfx::Display GetDisplayMatching(const gfx::Rect& match_rect) const override;
+  gfx::Display GetPrimaryDisplay() const override;
+  void AddObserver(gfx::DisplayObserver* observer) override;
+  void RemoveObserver(gfx::DisplayObserver* observer) override;
+
+  gfx::Rect rect_;
+  gfx::DisplayChangeNotifier change_notifier_;
+
+  // The display objects we present to chrome.
+  std::vector<gfx::Display> displays_;
+  ui::DesktopPlatformScreen* platform_Screen_;
+  DISALLOW_COPY_AND_ASSIGN(DesktopScreenWayland);
+};
+
+}  // namespace views
+
+#endif  // OZONE_IMPL_DESKTOP_AURA_DESKTOP_SCREEN_WAYLAND_H__
--- /dev/null
+++ b/ui/desktop_aura/desktop_window_tree_host_ozone.cc
@@ -0,0 +1,1043 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/ui/desktop_aura/desktop_window_tree_host_ozone.h"
+
+#include <string>
+
+#include "base/bind.h"
+#include "ozone/ui/desktop_aura/desktop_drag_drop_client_wayland.h"
+#include "ozone/ui/desktop_aura/desktop_screen_wayland.h"
+#include "ozone/ui/events/event_factory_ozone_wayland.h"
+#include "ozone/ui/events/window_state_change_handler.h"
+#include "ui/aura/client/cursor_client.h"
+#include "ui/aura/client/focus_client.h"
+#include "ui/aura/window_property.h"
+#include "ui/base/dragdrop/os_exchange_data_provider_aura.h"
+#include "ui/base/hit_test.h"
+#include "ui/base/ime/input_method.h"
+#include "ui/base/ime/input_method_auralinux.h"
+#include "ui/events/event_utils.h"
+#include "ui/events/platform/platform_event_source.h"
+#include "ui/gfx/insets.h"
+#include "ui/native_theme/native_theme.h"
+#include "ui/ozone/public/ozone_platform.h"
+#include "ui/ozone/public/surface_factory_ozone.h"
+#include "ui/platform_window/platform_window.h"
+#include "ui/platform_window/platform_window_delegate.h"
+#include "ui/views/corewm/tooltip_aura.h"
+#include "ui/views/ime/input_method.h"
+#include "ui/views/linux_ui/linux_ui.h"
+#include "ui/views/views_delegate.h"
+#include "ui/views/views_export.h"
+#include "ui/views/widget/desktop_aura/desktop_dispatcher_client.h"
+#include "ui/views/widget/desktop_aura/desktop_native_cursor_manager.h"
+#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
+#include "ui/views/widget/desktop_aura/desktop_screen_position_client.h"
+#include "ui/wm/core/input_method_event_filter.h"
+#include "ui/wm/core/window_util.h"
+#include "ui/wm/public/window_move_client.h"
+
+
+namespace views {
+
+DesktopWindowTreeHostOzone*
+    DesktopWindowTreeHostOzone::g_current_capture = NULL;
+
+DesktopWindowTreeHostOzone*
+    DesktopWindowTreeHostOzone::g_current_dispatcher = NULL;
+
+DesktopWindowTreeHostOzone*
+    DesktopWindowTreeHostOzone::g_active_window = NULL;
+
+std::list<gfx::AcceleratedWidget>*
+DesktopWindowTreeHostOzone::open_windows_ = NULL;
+
+std::vector<aura::Window*>*
+DesktopWindowTreeHostOzone::aura_windows_ = NULL;
+
+DEFINE_WINDOW_PROPERTY_KEY(
+    aura::Window*, kViewsWindowForRootWindow, NULL);
+
+DEFINE_WINDOW_PROPERTY_KEY(
+    DesktopWindowTreeHostOzone*, kHostForRootWindow, NULL);
+
+DesktopWindowTreeHostOzone::DesktopWindowTreeHostOzone(
+    internal::NativeWidgetDelegate* native_widget_delegate,
+    DesktopNativeWidgetAura* desktop_native_widget_aura)
+    : aura::WindowTreeHost(),
+      state_(Uninitialized),
+      previous_bounds_(0, 0, 0, 0),
+      previous_maximize_bounds_(0, 0, 0, 0),
+      window_(0),
+      title_(base::string16()),
+      close_widget_factory_(this),
+      drag_drop_client_(NULL),
+      native_widget_delegate_(native_widget_delegate),
+      content_window_(NULL),
+      desktop_native_widget_aura_(desktop_native_widget_aura),
+      window_parent_(NULL),
+      window_children_() {
+}
+
+DesktopWindowTreeHostOzone::~DesktopWindowTreeHostOzone() {
+  window()->ClearProperty(kHostForRootWindow);
+  aura::client::SetWindowMoveClient(window(), NULL);
+  desktop_native_widget_aura_->OnDesktopWindowTreeHostDestroyed(this);
+  DestroyDispatcher();
+}
+
+// static
+aura::Window*
+DesktopWindowTreeHostOzone::GetContentWindowForAcceleratedWidget(
+    gfx::AcceleratedWidget widget) {
+  aura::WindowTreeHost* host =
+      aura::WindowTreeHost::GetForAcceleratedWidget(widget);
+
+  return host ?
+      host->window()->GetProperty(kViewsWindowForRootWindow) : NULL;
+}
+
+// static
+DesktopWindowTreeHostOzone*
+DesktopWindowTreeHostOzone::GetHostForAcceleratedWidget(
+    gfx::AcceleratedWidget widget) {
+  aura::WindowTreeHost* host =
+      aura::WindowTreeHost::GetForAcceleratedWidget(widget);
+
+  return host ? host->window()->GetProperty(kHostForRootWindow) : NULL;
+}
+
+// static
+const std::vector<aura::Window*>&
+DesktopWindowTreeHostOzone::GetAllOpenWindows() {
+  if (!aura_windows_) {
+    const std::list<gfx::AcceleratedWidget>& windows = open_windows();
+    aura_windows_ = new std::vector<aura::Window*>(windows.size());
+    std::transform(
+        windows.begin(), windows.end(), aura_windows_->begin(),
+            DesktopWindowTreeHostOzone::GetContentWindowForAcceleratedWidget);
+    }
+
+  return *aura_windows_;
+}
+
+void DesktopWindowTreeHostOzone::CleanUpWindowList() {
+  delete open_windows_;
+  open_windows_ = NULL;
+  if (aura_windows_) {
+    aura_windows_->clear();
+    delete aura_windows_;
+    aura_windows_ = NULL;
+  }
+}
+
+gfx::Rect DesktopWindowTreeHostOzone::GetBoundsInScreen() const {
+  return platform_window_->GetBounds();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// DesktopWindowTreeHostOzone, DesktopWindowTreeHost implementation:
+
+void DesktopWindowTreeHostOzone::Init(
+    aura::Window* content_window,
+    const Widget::InitParams& params) {
+  content_window_ = content_window;
+  // In some situations, views tries to make a zero sized window, and that
+  // makes us crash. Make sure we have valid sizes.
+  Widget::InitParams sanitized_params = params;
+  if (sanitized_params.bounds.width() == 0)
+    sanitized_params.bounds.set_width(100);
+  if (sanitized_params.bounds.height() == 0)
+    sanitized_params.bounds.set_height(100);
+
+  InitOzoneWindow(sanitized_params);
+}
+
+void DesktopWindowTreeHostOzone::OnNativeWidgetCreated(
+    const Widget::InitParams& params) {
+  window()->SetProperty(kViewsWindowForRootWindow, content_window_);
+  window()->SetProperty(kHostForRootWindow, this);
+
+  // If we're given a parent, we need to mark ourselves as transient to another
+  // window. Otherwise activation gets screwy.
+  gfx::NativeView parent = params.parent;
+  if (!params.child && params.parent)
+    wm::AddTransientChild(parent, content_window_);
+
+  native_widget_delegate_->OnNativeWidgetCreated(true);
+  open_windows().push_back(window_);
+  if (aura_windows_) {
+    aura_windows_->clear();
+    delete aura_windows_;
+    aura_windows_ = NULL;
+  }
+
+  if (!params.parent) {
+    g_active_window = this;
+    g_current_dispatcher = g_active_window;
+    state_ |= Active;
+  }
+}
+
+scoped_ptr<corewm::Tooltip>
+DesktopWindowTreeHostOzone::CreateTooltip() {
+  return scoped_ptr<corewm::Tooltip>(
+             new corewm::TooltipAura(gfx::SCREEN_TYPE_NATIVE));
+}
+
+scoped_ptr<aura::client::DragDropClient>
+DesktopWindowTreeHostOzone::CreateDragDropClient(
+    DesktopNativeCursorManager* cursor_manager) {
+  drag_drop_client_ = new DesktopDragDropClientWayland(window());
+  return scoped_ptr<aura::client::DragDropClient>(drag_drop_client_).Pass();
+}
+
+void DesktopWindowTreeHostOzone::Close() {
+  if (!close_widget_factory_.HasWeakPtrs()) {
+    // And we delay the close so that if we are called from an ATL callback,
+    // we don't destroy the window before the callback returned (as the caller
+    // may delete ourselves on destroy and the ATL callback would still
+    // dereference us when the callback returns).
+    base::MessageLoop::current()->PostTask(
+        FROM_HERE,
+        base::Bind(&DesktopWindowTreeHostOzone::CloseNow,
+                   close_widget_factory_.GetWeakPtr()));
+  }
+}
+
+void DesktopWindowTreeHostOzone::CloseNow() {
+  if (!window_)
+    return;
+
+  unsigned widgetId = window_;
+  ReleaseCapture();
+  native_widget_delegate_->OnNativeWidgetDestroying();
+
+  // If we have children, close them. Use a copy for iteration because they'll
+  // remove themselves.
+  std::set<DesktopWindowTreeHostOzone*> window_children_copy =
+      window_children_;
+  for (std::set<DesktopWindowTreeHostOzone*>::iterator it =
+           window_children_copy.begin(); it != window_children_copy.end();
+       ++it) {
+    (*it)->CloseNow();
+  }
+  DCHECK(window_children_.empty());
+
+  // If we have a parent, remove ourselves from its children list.
+  if (window_parent_) {
+    window_parent_->window_children_.erase(this);
+    window_parent_ = NULL;
+  }
+
+  // Destroy the compositor before destroying the window since shutdown
+  // may try to swap, and the swap without a window causes an error, which
+  // causes a crash with in-process renderer.
+  DestroyCompositor();
+
+  open_windows().remove(widgetId);
+  if (aura_windows_) {
+    aura_windows_->clear();
+    delete aura_windows_;
+    aura_windows_ = NULL;
+  }
+
+  if (g_active_window == this)
+    g_active_window = NULL;
+
+  if (g_current_dispatcher == this)
+    g_current_dispatcher = NULL;
+
+  // Actually free our native resources.
+  platform_window_->Close();
+  window_ = 0;
+  if (open_windows().empty())
+    CleanUpWindowList();
+
+  ui::PlatformEventSource* event_source =
+      ui::PlatformEventSource::GetInstance();
+  if (event_source)
+    event_source->RemovePlatformEventDispatcher(this);
+
+  desktop_native_widget_aura_->OnHostClosed();
+}
+
+aura::WindowTreeHost* DesktopWindowTreeHostOzone::AsWindowTreeHost() {
+  return this;
+}
+
+void DesktopWindowTreeHostOzone::ShowWindowWithState(
+    ui::WindowShowState show_state) {
+  if (show_state == ui::SHOW_STATE_NORMAL ||
+      show_state == ui::SHOW_STATE_MAXIMIZED ||
+      show_state == ui::SHOW_STATE_FULLSCREEN) {
+    Activate();
+  }
+
+  state_ |= Visible;
+  native_widget_delegate_->AsWidget()->SetInitialFocus(show_state);
+}
+
+void DesktopWindowTreeHostOzone::ShowMaximizedWithBounds(
+    const gfx::Rect& restored_bounds) {
+  Maximize();
+  previous_bounds_ = restored_bounds;
+  Show();
+}
+
+bool DesktopWindowTreeHostOzone::IsVisible() const {
+  return state_ & Visible;
+}
+
+void DesktopWindowTreeHostOzone::SetSize(const gfx::Size& requested_size) {
+  gfx::Size size = AdjustSize(requested_size);
+  gfx::Rect new_bounds = platform_window_->GetBounds();
+  new_bounds.set_size(size);
+  platform_window_->SetBounds(new_bounds);
+}
+
+void DesktopWindowTreeHostOzone::StackAtTop() {
+}
+
+void DesktopWindowTreeHostOzone::CenterWindow(const gfx::Size& size) {
+  gfx::Rect parent_bounds = GetWorkAreaBoundsInScreen();
+
+  // If |window_|'s transient parent bounds are big enough to contain |size|,
+  // use them instead.
+  if (wm::GetTransientParent(content_window_)) {
+    gfx::Rect transient_parent_rect =
+        wm::GetTransientParent(content_window_)->GetBoundsInScreen();
+    if (transient_parent_rect.height() >= size.height() &&
+      transient_parent_rect.width() >= size.width()) {
+      parent_bounds = transient_parent_rect;
+    }
+  }
+
+  gfx::Rect window_bounds(
+      parent_bounds.x() + (parent_bounds.width() - size.width()) / 2,
+      parent_bounds.y() + (parent_bounds.height() - size.height()) / 2,
+      size.width(),
+      size.height());
+  // Don't size the window bigger than the parent, otherwise the user may not be
+  // able to close or move it.
+  window_bounds.AdjustToFit(parent_bounds);
+  platform_window_->SetBounds(window_bounds);
+}
+
+void DesktopWindowTreeHostOzone::GetWindowPlacement(
+    gfx::Rect* bounds,
+    ui::WindowShowState* show_state) const {
+  *bounds = GetRestoredBounds();
+
+  if (IsMinimized()) {
+    *show_state = ui::SHOW_STATE_MINIMIZED;
+  } else if (IsFullscreen()) {
+    *show_state = ui::SHOW_STATE_FULLSCREEN;
+  } else if (IsMaximized()) {
+    *show_state = ui::SHOW_STATE_MAXIMIZED;
+  } else if (!IsActive()) {
+    *show_state = ui::SHOW_STATE_INACTIVE;
+  } else {
+    *show_state = ui::SHOW_STATE_NORMAL;
+  }
+}
+
+gfx::Rect DesktopWindowTreeHostOzone::GetWindowBoundsInScreen() const {
+  return platform_window_->GetBounds();
+}
+
+gfx::Rect DesktopWindowTreeHostOzone::GetClientAreaBoundsInScreen() const {
+  // TODO(erg): The NativeWidgetAura version returns |bounds_|, claiming its
+  // needed for View::ConvertPointToScreen() to work
+  // correctly. DesktopWindowTreeHostWin::GetClientAreaBoundsInScreen() just
+  // asks windows what it thinks the client rect is.
+  //
+  // Attempts to calculate the rect by asking the NonClientFrameView what it
+  // thought its GetBoundsForClientView() were broke combobox drop down
+  // placement.
+  return platform_window_->GetBounds();
+}
+
+gfx::Rect DesktopWindowTreeHostOzone::GetRestoredBounds() const {
+  if (!previous_bounds_.IsEmpty())
+    return previous_bounds_;
+
+  return GetWindowBoundsInScreen();
+}
+
+gfx::Rect DesktopWindowTreeHostOzone::GetWorkAreaBoundsInScreen() const {
+  // TODO(kalyan): Take into account wm decorations. i.e Dock, panel etc.
+  gfx::Screen *screen = gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_NATIVE);
+  if (!screen)
+    NOTREACHED() << "Unable to retrieve valid gfx::Screen";
+
+  gfx::Display display = screen->GetPrimaryDisplay();
+  return display.bounds();
+}
+
+void DesktopWindowTreeHostOzone::SetShape(gfx::NativeRegion native_region) {
+  // TODO(erg):
+  NOTIMPLEMENTED();
+}
+
+void DesktopWindowTreeHostOzone::Activate() {
+  if (state_ & Active)
+    return;
+
+  if (state_ & Visible) {
+    OnActivationChanged(true);
+  }
+}
+
+void DesktopWindowTreeHostOzone::Deactivate() {
+  if (!(state_ & Active))
+    return;
+
+  ReleaseCapture();
+  OnActivationChanged(false);
+}
+
+bool DesktopWindowTreeHostOzone::IsActive() const {
+  return state_ & Active;
+}
+
+void DesktopWindowTreeHostOzone::Maximize() {
+  if (state_ & Maximized)
+    return;
+
+  state_ |= Maximized;
+  state_ &= ~Minimized;
+  previous_bounds_ = platform_window_->GetBounds();
+  platform_window_->Maximize();
+  if (IsMinimized())
+    ShowWindowWithState(ui::SHOW_STATE_MAXIMIZED);
+  Relayout();
+}
+
+void DesktopWindowTreeHostOzone::Minimize() {
+  if (state_ & Minimized)
+    return;
+
+  state_ |= Minimized;
+  previous_bounds_ = platform_window_->GetBounds();
+  ReleaseCapture();
+  compositor()->SetVisible(false);
+  content_window_->Hide();
+  platform_window_->Minimize();
+  Relayout();
+}
+
+void DesktopWindowTreeHostOzone::Restore() {
+  g_active_window = this;
+
+  state_ &= ~Maximized;
+  if (state_ & Minimized) {
+    content_window_->Show();
+    compositor()->SetVisible(true);
+  }
+
+  platform_window_->Restore();
+  platform_window_->SetBounds(previous_bounds_);
+  previous_bounds_ = gfx::Rect();
+  Relayout();
+  if (state_ & Minimized) {
+    state_ &= ~Minimized;
+    ShowWindow();
+  }
+}
+
+bool DesktopWindowTreeHostOzone::IsMaximized() const {
+  return !IsFullscreen() && (state_ & Maximized);
+}
+
+bool DesktopWindowTreeHostOzone::IsMinimized() const {
+  return state_ & Minimized;
+}
+
+bool DesktopWindowTreeHostOzone::HasCapture() const {
+  return g_current_capture == this;
+}
+
+void DesktopWindowTreeHostOzone::SetAlwaysOnTop(bool always_on_top) {
+  NOTIMPLEMENTED();
+}
+
+bool DesktopWindowTreeHostOzone::IsAlwaysOnTop() const {
+  NOTIMPLEMENTED();
+  return false;
+}
+
+void DesktopWindowTreeHostOzone::SetVisibleOnAllWorkspaces(
+    bool always_visible) {
+  NOTIMPLEMENTED();
+}
+
+bool DesktopWindowTreeHostOzone::SetWindowTitle(const base::string16& title) {
+  if (title.compare(title_)) {
+    ui::EventFactoryOzoneWayland::GetInstance()->GetWindowStateChangeHandler()->
+        SetWidgetTitle(window_, title);
+    title_ = title;
+    return true;
+  }
+
+  return false;
+}
+
+void DesktopWindowTreeHostOzone::ClearNativeFocus() {
+  // This method is weird and misnamed. Instead of clearing the native focus,
+  // it sets the focus to our |content_window_|, which will trigger a cascade
+  // of focus changes into views.
+  if (content_window_ && aura::client::GetFocusClient(content_window_) &&
+      content_window_->Contains(
+          aura::client::GetFocusClient(content_window_)->GetFocusedWindow())) {
+    aura::client::GetFocusClient(content_window_)->FocusWindow(content_window_);
+  }
+}
+
+Widget::MoveLoopResult DesktopWindowTreeHostOzone::RunMoveLoop(
+    const gfx::Vector2d& drag_offset,
+    Widget::MoveLoopSource source,
+    Widget::MoveLoopEscapeBehavior escape_behavior) {
+  NOTIMPLEMENTED();
+  return Widget::MOVE_LOOP_SUCCESSFUL;
+}
+
+void DesktopWindowTreeHostOzone::EndMoveLoop() {
+  NOTIMPLEMENTED();
+}
+
+void DesktopWindowTreeHostOzone::SetVisibilityChangedAnimationsEnabled(
+    bool value) {
+  // Much like the previous NativeWidgetGtk, we don't have anything to do here.
+}
+
+bool DesktopWindowTreeHostOzone::ShouldUseNativeFrame() const {
+  return false;
+}
+
+bool DesktopWindowTreeHostOzone::ShouldWindowContentsBeTransparent() const {
+  return false;
+}
+
+void DesktopWindowTreeHostOzone::FrameTypeChanged() {
+  Widget::FrameType new_type =
+    native_widget_delegate_->AsWidget()->frame_type();
+  if (new_type == Widget::FRAME_TYPE_DEFAULT) {
+    // The default is determined by Widget::InitParams::remove_standard_frame
+    // and does not change.
+    return;
+  }
+
+  // Replace the frame and layout the contents. Even though we don't have a
+  // swapable glass frame like on Windows, we still replace the frame because
+  // the button assets don't update otherwise.
+  native_widget_delegate_->AsWidget()->non_client_view()->UpdateFrame();
+}
+
+void DesktopWindowTreeHostOzone::SetFullscreen(bool fullscreen) {
+  if ((state_ & FullScreen) == fullscreen)
+    return;
+
+  if (fullscreen)
+    state_ |= FullScreen;
+  else
+    state_ &= ~FullScreen;
+
+  if (!(state_ & FullScreen)) {
+    if (state_ & Maximized) {
+      previous_bounds_ = previous_maximize_bounds_;
+      previous_maximize_bounds_ = gfx::Rect();
+      platform_window_->Maximize();
+    } else {
+      Restore();
+    }
+  } else {
+    if (state_ & Maximized)
+      previous_maximize_bounds_ = previous_bounds_;
+
+    previous_bounds_ = platform_window_->GetBounds();
+    platform_window_->ToggleFullscreen();
+  }
+
+  Relayout();
+}
+
+bool DesktopWindowTreeHostOzone::IsFullscreen() const {
+  return state_ & FullScreen;
+}
+
+void DesktopWindowTreeHostOzone::SetOpacity(unsigned char opacity) {
+  // TODO(erg):
+  NOTIMPLEMENTED();
+}
+
+void DesktopWindowTreeHostOzone::SetWindowIcons(
+    const gfx::ImageSkia& window_icon, const gfx::ImageSkia& app_icon) {
+  // TODO(erg):
+  NOTIMPLEMENTED();
+}
+
+void DesktopWindowTreeHostOzone::InitModalType(ui::ModalType modal_type) {
+  switch (modal_type) {
+    case ui::MODAL_TYPE_NONE:
+      break;
+    default:
+      // TODO(erg): Figure out under what situations |modal_type| isn't
+      // none. The comment in desktop_native_widget_aura.cc suggests that this
+      // is rare.
+      NOTIMPLEMENTED();
+  }
+}
+
+void DesktopWindowTreeHostOzone::FlashFrame(bool flash_frame) {
+  // TODO(erg):
+  NOTIMPLEMENTED();
+}
+
+void DesktopWindowTreeHostOzone::OnRootViewLayout() {
+  NOTIMPLEMENTED();
+}
+
+void DesktopWindowTreeHostOzone::OnNativeWidgetFocus() {
+  native_widget_delegate_->AsWidget()->GetInputMethod()->OnFocus();
+}
+
+void DesktopWindowTreeHostOzone::OnNativeWidgetBlur() {
+  if (window_)
+    native_widget_delegate_->AsWidget()->GetInputMethod()->OnBlur();
+}
+
+bool DesktopWindowTreeHostOzone::IsAnimatingClosed() const {
+  return false;
+}
+
+bool DesktopWindowTreeHostOzone::IsTranslucentWindowOpacitySupported() const {
+  return false;
+}
+
+void DesktopWindowTreeHostOzone::SizeConstraintsChanged() {
+  NOTIMPLEMENTED();
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+// DesktopWindowTreeHostOzone, aura::WindowTreeHost implementation:
+ui::EventSource* DesktopWindowTreeHostOzone::GetEventSource() {
+  return this;
+}
+
+gfx::AcceleratedWidget DesktopWindowTreeHostOzone::GetAcceleratedWidget() {
+  return window_;
+}
+
+void DesktopWindowTreeHostOzone::Show() {
+  if (state_ & Visible)
+    return;
+
+  platform_window_->Show();
+  ShowWindow();
+  native_widget_delegate_->OnNativeWidgetVisibilityChanged(true);
+}
+
+void DesktopWindowTreeHostOzone::Hide() {
+  if (!(state_ & Visible))
+    return;
+
+  state_ &= ~Visible;
+  platform_window_->Hide();
+  native_widget_delegate_->OnNativeWidgetVisibilityChanged(false);
+}
+
+gfx::Rect DesktopWindowTreeHostOzone::GetBounds() const {
+  return platform_window_->GetBounds();
+}
+
+void DesktopWindowTreeHostOzone::SetBounds(
+    const gfx::Rect& requested_bounds) {
+  gfx::Rect bounds(requested_bounds.origin(),
+                   AdjustSize(requested_bounds.size()));
+  platform_window_->SetBounds(bounds);
+}
+
+gfx::Point DesktopWindowTreeHostOzone::GetLocationOnNativeScreen() const {
+  return platform_window_->GetBounds().origin();
+}
+
+void DesktopWindowTreeHostOzone::SetCapture() {
+  if (HasCapture())
+    return;
+
+  DesktopWindowTreeHostOzone* old_capturer = g_current_capture;
+  g_current_capture = this;
+  if (old_capturer) {
+    old_capturer->OnHostLostWindowCapture();
+  }
+
+  g_current_dispatcher = this;
+  platform_window_->SetCapture();
+}
+
+void DesktopWindowTreeHostOzone::ReleaseCapture() {
+  if (g_current_capture != this)
+    return;
+
+  platform_window_->ReleaseCapture();
+  OnHostLostWindowCapture();
+  g_current_capture = NULL;
+  g_current_dispatcher = g_active_window;
+}
+
+void DesktopWindowTreeHostOzone::ShowWindow() {
+  ui::WindowShowState show_state = ui::SHOW_STATE_NORMAL;
+  if (IsMinimized()) {
+    show_state = ui::SHOW_STATE_MINIMIZED;
+  } else if (IsFullscreen()) {
+    show_state = ui::SHOW_STATE_FULLSCREEN;
+  } else if (IsMaximized()) {
+    show_state = ui::SHOW_STATE_MAXIMIZED;
+  } else if (!IsActive()) {
+    show_state = ui::SHOW_STATE_INACTIVE;
+  }
+
+  ShowWindowWithState(show_state);
+}
+
+void DesktopWindowTreeHostOzone::SetCursorNative(gfx::NativeCursor cursor) {
+  // TODO(kalyan): Add support for custom cursor.
+  ui::EventFactoryOzoneWayland::GetInstance()->GetWindowStateChangeHandler()->
+      SetWidgetCursor(cursor.native_type());
+}
+
+void DesktopWindowTreeHostOzone::MoveCursorToNative(
+    const gfx::Point& location) {
+  NOTIMPLEMENTED();
+}
+
+void DesktopWindowTreeHostOzone::OnCursorVisibilityChangedNative(bool show) {
+  // TODO(erg): Conditional on us enabling touch on desktop linux builds, do
+  // the same tap-to-click disabling here that chromeos does.
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// ui::PlatformWindowDelegate implementation:
+void DesktopWindowTreeHostOzone::OnBoundsChanged(
+    const gfx::Rect& new_bounds) {
+  // TODO(kalyan): Add support to check if origin has really changed.
+  native_widget_delegate_->AsWidget()->OnNativeWidgetMove();
+  OnHostResized(new_bounds.size());
+}
+
+void DesktopWindowTreeHostOzone::OnDamageRect(const gfx::Rect& damaged_rect) {
+  compositor()->ScheduleRedrawRect(damaged_rect);
+}
+
+void DesktopWindowTreeHostOzone::OnActivationChanged(bool active) {
+  if (active == (state_ & Active))
+    return;
+
+  if (active) {
+    // Make sure the stacking order is correct. The activated window should be
+    // first one in list of open windows.
+    std::list<gfx::AcceleratedWidget>& windows = open_windows();
+    DCHECK(windows.size());
+    if (windows.front() != window_) {
+      windows.remove(window_);
+      windows.insert(windows.begin(), window_);
+    }
+
+    if (g_active_window && !g_current_capture)
+      g_active_window->Deactivate();
+
+    g_active_window = this;
+    state_ |= Active;
+    g_current_dispatcher = this;
+    OnHostActivated();
+  } else {
+    state_ &= ~Active;
+    if (g_active_window == this)
+      g_active_window = NULL;
+  }
+
+  desktop_native_widget_aura_->HandleActivationChanged(active);
+  native_widget_delegate_->AsWidget()->GetRootView()->SchedulePaint();
+}
+
+void DesktopWindowTreeHostOzone::OnLostCapture() {
+  ReleaseCapture();
+}
+
+void DesktopWindowTreeHostOzone::OnAcceleratedWidgetAvailable(
+      gfx::AcceleratedWidget widget) {
+  window_ = widget;
+}
+
+void DesktopWindowTreeHostOzone::OnCloseRequest() {
+  Close();
+}
+
+void DesktopWindowTreeHostOzone::OnClosed() {
+  CloseNow();
+}
+
+void DesktopWindowTreeHostOzone::OnWindowStateChanged(
+    ui::PlatformWindowState new_state) {
+  switch (new_state) {
+    case ui::PLATFORM_WINDOW_STATE_MAXIMIZED: {
+      if (state_ & Minimized) {
+        content_window_->Show();
+        compositor()->SetVisible(true);
+        state_ &= ~Minimized;
+      }
+      platform_window_->SetBounds(previous_bounds_);
+      previous_bounds_ = gfx::Rect();
+      Relayout();
+      break;
+    }
+    default:
+      break;
+  }
+}
+
+void DesktopWindowTreeHostOzone::DispatchEvent(ui::Event* event) {
+  SendEventToProcessor(event);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// DesktopWindowTreeHostX11, ui::EventSource implementation:
+ui::EventProcessor* DesktopWindowTreeHostOzone::GetEventProcessor() {
+  return dispatcher();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// WindowTreeHostDelegateWayland, ui::PlatformEventDispatcher implementation:
+bool DesktopWindowTreeHostOzone::CanDispatchEvent(
+    const ui::PlatformEvent& ne) {
+  DCHECK(ne);
+
+  if (g_current_dispatcher && g_current_dispatcher == this)
+    return true;
+
+  return false;
+}
+
+uint32_t DesktopWindowTreeHostOzone::DispatchEvent(
+    const ui::PlatformEvent& ne) {
+  ui::EventType type = ui::EventTypeFromNative(ne);
+
+  switch (type) {
+    case ui::ET_TOUCH_RELEASED: {
+      ReleaseCaptureIfNeeded();
+      ui::TouchEvent* touchev = static_cast<ui::TouchEvent*>(ne);
+      SendEventToProcessor(touchev);
+      break;
+    }
+    case ui::ET_TOUCH_MOVED:
+    case ui::ET_TOUCH_PRESSED:
+    case ui::ET_TOUCH_CANCELLED: {
+      ui::TouchEvent* touchev = static_cast<ui::TouchEvent*>(ne);
+      SendEventToProcessor(touchev);
+      break;
+    }
+    case ui::ET_KEY_PRESSED:
+    case ui::ET_KEY_RELEASED: {
+      SendEventToProcessor(static_cast<ui::KeyEvent*>(ne));
+      break;
+    }
+    case ui::ET_MOUSEWHEEL: {
+      ui::MouseWheelEvent* wheelev = static_cast<ui::MouseWheelEvent*>(ne);
+      DispatchMouseEvent(wheelev);
+      break;
+    }
+    case ui::ET_MOUSE_RELEASED: {
+      ReleaseCaptureIfNeeded();
+      ui::MouseEvent* mouseev = static_cast<ui::MouseEvent*>(ne);
+      DispatchMouseEvent(mouseev);
+      break;
+    }
+    case ui::ET_MOUSE_MOVED:
+    case ui::ET_MOUSE_DRAGGED:
+    case ui::ET_MOUSE_PRESSED:
+    case ui::ET_MOUSE_ENTERED:
+    case ui::ET_MOUSE_EXITED: {
+      ui::MouseEvent* mouseev = static_cast<ui::MouseEvent*>(ne);
+      DispatchMouseEvent(mouseev);
+      break;
+    }
+    case ui::ET_SCROLL_FLING_START:
+    case ui::ET_SCROLL_FLING_CANCEL:
+    case ui::ET_SCROLL: {
+      SendEventToProcessor(static_cast<ui::ScrollEvent*>(ne));
+      break;
+    }
+    case ui::ET_UMA_DATA:
+      break;
+    case ui::ET_UNKNOWN:
+      break;
+    default:
+      NOTIMPLEMENTED() << "WindowTreeHostDelegateWayland: unknown event type.";
+  }
+  return ui::POST_DISPATCH_STOP_PROPAGATION;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// DesktopWindowTreeHostOzone, private:
+
+void DesktopWindowTreeHostOzone::InitOzoneWindow(
+    const Widget::InitParams& params) {
+  const gfx::Rect& bounds = gfx::Rect(params.bounds.origin(),
+                                      AdjustSize(params.bounds.size()));
+  platform_window_ =
+      ui::OzonePlatform::GetInstance()->CreatePlatformWindow(this, bounds);
+  DCHECK(window_);
+  // Maintain parent child relation as done in X11 version.
+  // If we have a parent, record the parent/child relationship. We use this
+  // data during destruction to make sure that when we try to close a parent
+  // window, we also destroy all child windows.
+  gfx::AcceleratedWidget parent_window = 0;
+  if (params.parent && params.parent->GetHost()) {
+    parent_window = params.parent->GetHost()->GetAcceleratedWidget();
+    window_parent_ = GetHostForAcceleratedWidget(parent_window);
+    DCHECK(window_parent_);
+    window_parent_->window_children_.insert(this);
+  }
+
+  ui::PlatformWindow::PlatformWindowType type =
+      ui::PlatformWindow::PLATFORM_WINDOW_UNKNOWN;
+  switch (params.type) {
+    case Widget::InitParams::TYPE_TOOLTIP: {
+      type = ui::PlatformWindow::PLATFORM_WINDOW_TYPE_TOOLTIP;
+      break;
+    }
+    case Widget::InitParams::TYPE_POPUP: {
+      type = ui::PlatformWindow::PLATFORM_WINDOW_TYPE_POPUP;
+      break;
+    }
+    case Widget::InitParams::TYPE_MENU: {
+      type = ui::PlatformWindow::PLATFORM_WINDOW_TYPE_MENU;
+      break;
+    }
+    case Widget::InitParams::TYPE_BUBBLE: {
+      type = ui::PlatformWindow::PLATFORM_WINDOW_TYPE_BUBBLE;
+      break;
+    }
+    case Widget::InitParams::TYPE_WINDOW: {
+      type = ui::PlatformWindow::PLATFORM_WINDOW_TYPE_WINDOW;
+      break;
+    }
+    case Widget::InitParams::TYPE_WINDOW_FRAMELESS: {
+      type = ui::PlatformWindow::PLATFORM_WINDOW_TYPE_WINDOW_FRAMELESS;
+      break;
+    }
+    default:
+      break;
+  }
+
+  if (!parent_window && g_active_window)
+    parent_window = g_active_window->window_;
+
+  platform_window_->InitPlatformWindow(type, parent_window);
+  // If we have a delegate which is providing a default window icon, use that
+  // icon.
+  gfx::ImageSkia* window_icon = ViewsDelegate::views_delegate ?
+      ViewsDelegate::views_delegate->GetDefaultWindowIcon() : NULL;
+  if (window_icon) {
+    SetWindowIcons(gfx::ImageSkia(), *window_icon);
+  }
+
+  CreateCompositor(GetAcceleratedWidget());
+  if (ui::PlatformEventSource::GetInstance())
+    ui::PlatformEventSource::GetInstance()->AddPlatformEventDispatcher(this);
+}
+
+void DesktopWindowTreeHostOzone::Relayout() {
+  Widget* widget = native_widget_delegate_->AsWidget();
+  NonClientView* non_client_view = widget->non_client_view();
+  // non_client_view may be NULL, especially during creation.
+  if (non_client_view) {
+    non_client_view->client_view()->InvalidateLayout();
+    non_client_view->InvalidateLayout();
+  }
+  widget->GetRootView()->Layout();
+}
+
+std::list<gfx::AcceleratedWidget>&
+DesktopWindowTreeHostOzone::open_windows() {
+  if (!open_windows_)
+    open_windows_ = new std::list<gfx::AcceleratedWidget>();
+
+  return *open_windows_;
+}
+
+gfx::Size DesktopWindowTreeHostOzone::AdjustSize(
+    const gfx::Size& requested_size) {
+  std::vector<gfx::Display> displays =
+      gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_NATIVE)->GetAllDisplays();
+  // Compare against all monitor sizes. The window manager can move the window
+  // to whichever monitor it wants.
+  for (size_t i = 0; i < displays.size(); ++i) {
+    if (requested_size == displays[i].size()) {
+      return gfx::Size(requested_size.width() - 1,
+                       requested_size.height() - 1);
+    }
+  }
+  return requested_size;
+}
+
+void DesktopWindowTreeHostOzone::DispatchMouseEvent(ui::MouseEvent* event) {
+  // In Windows, the native events sent to chrome are separated into client
+  // and non-client versions of events, which we record on our LocatedEvent
+  // structures. On Desktop Ozone, we emulate the concept of non-client. Before
+  // we pass this event to the cross platform event handling framework, we need
+  // to make sure it is appropriately marked as non-client if it's in the non
+  // client area, or otherwise, we can get into a state where the a window is
+  // set as the |mouse_pressed_handler_| in window_event_dispatcher.cc
+  // despite the mouse button being released.
+  //
+  // We can't do this later in the dispatch process because we share that
+  // with ash, and ash gets confused about event IS_NON_CLIENT-ness on
+  // events, since ash doesn't expect this bit to be set, because it's never
+  // been set before. (This works on ash on Windows because none of the mouse
+  // events on the ash desktop are clicking in what Windows considers to be a
+  // non client area.) Likewise, we won't want to do the following in any
+  // WindowTreeHost that hosts ash.
+  if (content_window_ && content_window_->delegate()) {
+    int flags = event->flags();
+    int hit_test_code =
+        content_window_->delegate()->GetNonClientComponent(event->location());
+    if (hit_test_code != HTCLIENT && hit_test_code != HTNOWHERE)
+      flags |= ui::EF_IS_NON_CLIENT;
+    event->set_flags(flags);
+  }
+
+  SendEventToProcessor(event);
+}
+
+void DesktopWindowTreeHostOzone::ReleaseCaptureIfNeeded() const {
+  if (g_current_capture && g_current_dispatcher != g_current_capture)
+    g_current_capture->ReleaseCapture();
+}
+
+// static
+VIEWS_EXPORT ui::NativeTheme*
+DesktopWindowTreeHost::GetNativeTheme(aura::Window* window) {
+  const views::LinuxUI* linux_ui = views::LinuxUI::instance();
+  if (linux_ui) {
+    ui::NativeTheme* native_theme = linux_ui->GetNativeTheme(window);
+    if (native_theme)
+      return native_theme;
+  }
+
+  return ui::NativeTheme::instance();
+}
+
+DesktopWindowTreeHost* DesktopWindowTreeHost::Create(
+    internal::NativeWidgetDelegate* native_widget_delegate,
+    DesktopNativeWidgetAura* desktop_native_widget_aura) {
+  return new DesktopWindowTreeHostOzone(native_widget_delegate,
+                                        desktop_native_widget_aura);
+}
+
+}  // namespace views
--- /dev/null
+++ b/ui/desktop_aura/desktop_window_tree_host_ozone.h
@@ -0,0 +1,219 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_WINDOW_TREE_HOST_OZONE_H_
+#define UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_WINDOW_TREE_HOST_OZONE_H_
+
+#include <list>
+#include <set>
+#include <string>
+#include <vector>
+
+#include "base/basictypes.h"
+#include "ui/aura/window_tree_host.h"
+#include "ui/events/event_source.h"
+#include "ui/events/platform/platform_event_dispatcher.h"
+#include "ui/platform_window/platform_window_delegate.h"
+#include "ui/views/widget/desktop_aura/desktop_window_tree_host.h"
+
+namespace ui {
+class PlatformWindow;
+}
+
+namespace views {
+
+namespace corewm {
+class Tooltip;
+}
+
+class DesktopDragDropClientWayland;
+
+class VIEWS_EXPORT DesktopWindowTreeHostOzone
+    : public DesktopWindowTreeHost,
+      public aura::WindowTreeHost,
+      public ui::PlatformWindowDelegate,
+      public ui::PlatformEventDispatcher,
+      public ui::EventSource {
+ public:
+  DesktopWindowTreeHostOzone(
+      internal::NativeWidgetDelegate* native_widget_delegate,
+      DesktopNativeWidgetAura* desktop_native_widget_aura);
+  virtual ~DesktopWindowTreeHostOzone();
+
+  // Accepts a opaque handle widget and returns associated aura::Window.
+  static aura::Window* GetContentWindowForAcceleratedWidget(
+      gfx::AcceleratedWidget widget);
+
+  // Accepts a opaque handle widget and returns associated
+  // DesktopWindowTreeHostOzone.
+  static DesktopWindowTreeHostOzone* GetHostForAcceleratedWidget(
+      gfx::AcceleratedWidget widget);
+
+  // Get all open top-level windows. This includes windows that may not be
+  // visible. This list is sorted in their stacking order, i.e. the first window
+  // is the topmost window.
+  static const std::vector<aura::Window*>& GetAllOpenWindows();
+
+  // Deallocates the internal list of open windows.
+  static void CleanUpWindowList();
+
+  // Returns window bounds. This is used by Screen to determine if a point
+  // belongs to a particular window.
+  gfx::Rect GetBoundsInScreen() const;
+
+ protected:
+  // Overridden from DesktopWindowTreeHost:
+  void Init(aura::Window* content_window,
+            const views::Widget::InitParams& params) override;
+  void OnNativeWidgetCreated(const views::Widget::InitParams& params) override;
+  scoped_ptr<corewm::Tooltip> CreateTooltip() override;
+  scoped_ptr<aura::client::DragDropClient> CreateDragDropClient(
+      DesktopNativeCursorManager* cursor_manager) override;
+  void Close() override;
+  void CloseNow() override;
+  aura::WindowTreeHost* AsWindowTreeHost() override;
+  void ShowWindowWithState(ui::WindowShowState show_state) override;
+  void ShowMaximizedWithBounds(const gfx::Rect& restored_bounds) override;
+  bool IsVisible() const override;
+  void SetSize(const gfx::Size& size) override;
+  void StackAtTop() override;
+  void CenterWindow(const gfx::Size& size) override;
+  void GetWindowPlacement(gfx::Rect* bounds,
+                          ui::WindowShowState* show_state) const override;
+  gfx::Rect GetWindowBoundsInScreen() const override;
+  gfx::Rect GetClientAreaBoundsInScreen() const override;
+  gfx::Rect GetRestoredBounds() const override;
+  gfx::Rect GetWorkAreaBoundsInScreen() const override;
+  void SetShape(gfx::NativeRegion native_region) override;
+  void Activate() override;
+  void Deactivate() override;
+  bool IsActive() const override;
+  void Maximize() override;
+  void Minimize() override;
+  void Restore() override;
+  bool IsMaximized() const override;
+  bool IsMinimized() const override;
+  bool HasCapture() const override;
+  void SetAlwaysOnTop(bool always_on_top) override;
+  bool IsAlwaysOnTop() const override;
+  void SetVisibleOnAllWorkspaces(bool always_visible) override;
+  bool SetWindowTitle(const base::string16& title) override;
+  void ClearNativeFocus() override;
+  views::Widget::MoveLoopResult RunMoveLoop(
+      const gfx::Vector2d& drag_offset,
+      views::Widget::MoveLoopSource source,
+      views::Widget::MoveLoopEscapeBehavior escape_behavior) override;
+  void EndMoveLoop() override;
+  void SetVisibilityChangedAnimationsEnabled(bool value) override;
+  bool ShouldUseNativeFrame() const override;
+  bool ShouldWindowContentsBeTransparent() const override;
+  void FrameTypeChanged() override;
+  void SetFullscreen(bool fullscreen) override;
+  bool IsFullscreen() const override;
+  void SetOpacity(unsigned char opacity) override;
+  void SetWindowIcons(const gfx::ImageSkia& window_icon,
+                      const gfx::ImageSkia& app_icon) override;
+  void InitModalType(ui::ModalType modal_type) override;
+  void FlashFrame(bool flash_frame) override;
+  void OnRootViewLayout() override;
+  void OnNativeWidgetFocus() override;
+  void OnNativeWidgetBlur() override;
+  bool IsAnimatingClosed() const override;
+  bool IsTranslucentWindowOpacitySupported() const override;
+  void SizeConstraintsChanged() override;
+
+  // Overridden from aura::WindowTreeHost:
+  ui::EventSource* GetEventSource() override;
+  gfx::AcceleratedWidget GetAcceleratedWidget() override;
+  void Show() override;
+  void Hide() override;
+  gfx::Rect GetBounds() const override;
+  void SetBounds(const gfx::Rect& bounds) override;
+  gfx::Point GetLocationOnNativeScreen() const override;
+  void SetCapture() override;
+  void ReleaseCapture() override;
+  void SetCursorNative(gfx::NativeCursor cursor) override;
+  void MoveCursorToNative(const gfx::Point& location) override;
+  void OnCursorVisibilityChangedNative(bool show) override;
+
+  // Overridden from ui::PlatformWindowDelegate:
+  void OnBoundsChanged(const gfx::Rect&) override;
+  void OnDamageRect(const gfx::Rect& damaged_region) override;
+  void DispatchEvent(ui::Event* event) override;
+  void OnCloseRequest() override;
+  void OnClosed() override;
+  void OnWindowStateChanged(ui::PlatformWindowState new_state) override;
+  void OnLostCapture() override;
+  void OnAcceleratedWidgetAvailable(gfx::AcceleratedWidget widget) override;
+  void OnActivationChanged(bool active) override;
+
+  // Overridden frm ui::EventSource
+  ui::EventProcessor* GetEventProcessor() override;
+  // ui::PlatformEventDispatcher:
+  bool CanDispatchEvent(const ui::PlatformEvent& event) override;
+  uint32_t DispatchEvent(const ui::PlatformEvent& event) override;
+
+ private:
+  enum {
+    Uninitialized = 0x00,
+    Visible = 0x01,  // Window is Visible.
+    FullScreen = 0x02,  // Window is in fullscreen mode.
+    Maximized = 0x04,  // Window is maximized,
+    Minimized = 0x08,  // Window is minimized.
+    Active = 0x10  // Window is Active.
+  };
+
+  typedef unsigned RootWindowState;
+
+  // Initializes our Ozone surface to draw on. This method performs all
+  // initialization related to talking to the Ozone server.
+  void InitOzoneWindow(const views::Widget::InitParams& params);
+
+  void Relayout();
+  gfx::Size AdjustSize(const gfx::Size& requested_size);
+  void DispatchMouseEvent(ui::MouseEvent* event);
+  void ReleaseCaptureIfNeeded() const;
+  void ShowWindow();
+
+  static std::list<gfx::AcceleratedWidget>& open_windows();
+
+  RootWindowState state_;
+
+  // Original bounds of DRWH.
+  gfx::Rect previous_bounds_;
+  gfx::Rect previous_maximize_bounds_;
+  gfx::AcceleratedWidget window_;
+  base::string16 title_;
+
+  base::WeakPtrFactory<DesktopWindowTreeHostOzone> close_widget_factory_;
+
+  // Owned by DesktopNativeWidgetAura.
+  DesktopDragDropClientWayland* drag_drop_client_;
+  views::internal::NativeWidgetDelegate* native_widget_delegate_;
+  aura::Window* content_window_;
+
+  views::DesktopNativeWidgetAura* desktop_native_widget_aura_;
+  // We can optionally have a parent which can order us to close, or own
+  // children who we're responsible for closing when we CloseNow().
+  DesktopWindowTreeHostOzone* window_parent_;
+  std::set<DesktopWindowTreeHostOzone*> window_children_;
+
+  // Platform-specific part of this DesktopWindowTreeHost.
+  scoped_ptr<ui::PlatformWindow> platform_window_;
+
+  // A list of all (top-level) windows that have been created but not yet
+  // destroyed.
+  static std::list<gfx::AcceleratedWidget>* open_windows_;
+  // List of all open aura::Window.
+  static std::vector<aura::Window*>* aura_windows_;
+  static DesktopWindowTreeHostOzone* g_current_capture;
+  static DesktopWindowTreeHostOzone* g_active_window;
+  static DesktopWindowTreeHostOzone* g_current_dispatcher;
+  DISALLOW_COPY_AND_ASSIGN(DesktopWindowTreeHostOzone);
+};
+
+}  // namespace views
+
+#endif  // UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_WINDOW_TREE_HOST_OZONE_H_
--- /dev/null
+++ b/ui/desktop_aura/impl_view.gypi
@@ -0,0 +1,19 @@
+# Copyright 2014 Intel Corporation. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+{
+  'sources': [
+    'desktop_drag_drop_client_wayland.cc',
+    'desktop_drag_drop_client_wayland.h',
+    'desktop_factory_wayland.cc',
+    'desktop_factory_wayland.h',
+    'desktop_screen_wayland.cc',
+    'desktop_screen_wayland.h',
+    'desktop_window_tree_host_ozone.cc',
+    'desktop_window_tree_host_ozone.h',
+    'ozone_util.cc',
+    'ozone_util.h',
+    'window_tree_host_delegate_wayland.cc',
+    'window_tree_host_delegate_wayland.h',
+  ],
+}
--- /dev/null
+++ b/ui/desktop_aura/ozone_util.cc
@@ -0,0 +1,42 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/ui/desktop_aura/ozone_util.h"
+
+#include <set>
+#include <vector>
+
+#include "chrome/browser/ui/views/tabs/window_finder.h"
+#include "ozone/ui/desktop_aura/desktop_window_tree_host_ozone.h"
+
+namespace ui {
+
+VIEWS_EXPORT bool GetCustomFramePrefDefault() {
+  return true;
+}
+
+}  // namespace ui
+
+VIEWS_EXPORT bool IsFullScreenMode() {
+  std::vector<aura::Window*> all_windows =
+      views::DesktopWindowTreeHostOzone::GetAllOpenWindows();
+  // Only the topmost window is checked. This works fine in the most cases, but
+  // it may return false when there are multiple displays and one display has
+  // a fullscreen window but others don't. See: crbug.com/345484
+  if (all_windows.empty())
+    return false;
+
+  views::Widget* widget =
+      views::Widget::GetWidgetForNativeWindow(all_windows[0]);
+  return widget && widget->IsFullscreen();
+}
+
+// TODO(Kalyan): Remove this once https://codereview.chromium.org/176893002/
+// is fixed.
+VIEWS_EXPORT aura::Window* GetLocalProcessWindowAtPoint(
+    chrome::HostDesktopType host_desktop_type,
+    const gfx::Point& screen_point,
+    const std::set<aura::Window*>& ignore) {
+  return NULL;
+}
--- /dev/null
+++ b/ui/desktop_aura/ozone_util.h
@@ -0,0 +1,20 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_IMPL_DESKTOP_AURA_OZONE_UTIL_H_
+#define OZONE_IMPL_DESKTOP_AURA_OZONE_UTIL_H_
+
+#include "base/basictypes.h"
+
+#include "ui/views/views_export.h"
+
+namespace ui {
+
+// Determine whether we should default to native decorations or the custom
+// frame based on the currently-running window manager.
+VIEWS_EXPORT bool GetCustomFramePrefDefault();
+
+}  // namespace ui
+
+#endif  // OZONE_IMPL_DESKTOP_AURA_OZONE_UTIL_H_
--- a/ui/events/DEPS
+++ b/ui/events/DEPS
@@ -1,3 +1,3 @@
 include_rules = [
-  "+ui/gfx",
+  "+ui/events",
 ]
--- a/ui/events/OWNERS
+++ b/ui/events/OWNERS
@@ -1,6 +1,2 @@
-sadrul@chromium.org
-per-file latency_info*=jbauman@chromium.org
-per-file latency_info*=miletus@chromium.org
-
-# If you're doing structural changes get a review from one of the OWNERS.
-per-file *.gyp*=*
+kalyan.kondapally@intel.com
+tiago.vignatti@intel.com
--- /dev/null
+++ b/ui/events/event.gypi
@@ -0,0 +1,29 @@
+# Copyright 2014 Intel Corporation. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+{
+  'dependencies': [
+    '<(DEPTH)/ui/events/events.gyp:events',
+  ],
+  'sources': [
+    'event_converter_in_process.h',
+    'event_converter_in_process.cc',
+    'event_converter_ozone_wayland.h',
+    'event_converter_ozone_wayland.cc',
+    'event_factory_ozone_wayland.h',
+    'event_factory_ozone_wayland.cc',
+    'ime_change_observer.h',
+    'ime_state_change_handler.h',
+    'keyboard_codes_ozone.h',
+    'keyboard_engine_xkb.h',
+    'keyboard_engine_xkb.cc',
+    'output_change_observer.h',
+    'remote_event_dispatcher.h',
+    'remote_event_dispatcher.cc',
+    'remote_state_change_handler.h',
+    'remote_state_change_handler.cc',
+    'window_change_observer.h',
+    'window_constants.h',
+    'window_state_change_handler.h',
+   ],
+}
--- /dev/null
+++ b/ui/events/event_converter_in_process.cc
@@ -0,0 +1,369 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/ui/events/event_converter_in_process.h"
+
+#include "base/bind.h"
+#include "ozone/ui/events/event_factory_ozone_wayland.h"
+#include "ozone/ui/events/ime_change_observer.h"
+#include "ozone/ui/events/output_change_observer.h"
+#include "ozone/ui/events/window_change_observer.h"
+
+namespace ui {
+
+const double KAutoRepeatInitialTimer = 1;
+const double KAutoRepeatTimer = 0.5;
+
+EventConverterInProcess::EventConverterInProcess()
+    : EventConverterOzoneWayland(),
+      backend_(NULL) {
+}
+
+EventConverterInProcess::~EventConverterInProcess() {
+  delete backend_;
+}
+
+void EventConverterInProcess::MotionNotify(float x, float y) {
+  ui::EventConverterOzoneWayland::PostTaskOnMainLoop(base::Bind(
+      &EventConverterInProcess::NotifyMotion, this, x, y));
+}
+
+void EventConverterInProcess::ButtonNotify(unsigned handle,
+                                           ui::EventType type,
+                                           ui::EventFlags flags,
+                                           float x,
+                                           float y) {
+  ui::EventConverterOzoneWayland::PostTaskOnMainLoop(base::Bind(
+      &EventConverterInProcess::NotifyButtonPress, this, handle, type,
+          flags, x, y));
+}
+
+void EventConverterInProcess::AxisNotify(float x,
+                                         float y,
+                                         int xoffset,
+                                         int yoffset) {
+  ui::EventConverterOzoneWayland::PostTaskOnMainLoop(base::Bind(
+      &EventConverterInProcess::NotifyAxis, this, x, y, xoffset, yoffset));
+}
+
+void EventConverterInProcess::PointerEnter(unsigned handle,
+                                           float x,
+                                           float y) {
+  ui::EventConverterOzoneWayland::PostTaskOnMainLoop(base::Bind(
+      &EventConverterInProcess::NotifyPointerEnter, this, handle, x, y));
+}
+
+void EventConverterInProcess::PointerLeave(unsigned handle,
+                                           float x,
+                                           float y) {
+  ui::EventConverterOzoneWayland::PostTaskOnMainLoop(base::Bind(
+      &EventConverterInProcess::NotifyPointerLeave, this, handle, x, y));
+}
+
+void EventConverterInProcess::KeyNotify(ui::EventType type,
+                                        unsigned code) {
+  VirtualKeyNotify(type, code, backend_->GetKeyBoardModifiers());
+}
+
+void EventConverterInProcess::VirtualKeyNotify(ui::EventType type,
+                                               uint32_t key,
+                                               uint32_t modifiers) {
+  ui::EventConverterOzoneWayland::PostTaskOnMainLoop(base::Bind(
+      &EventConverterInProcess::NotifyKeyEvent, this, type,
+          backend_->KeyboardCodeFromNativeKeysym(key),
+              backend_->CharacterCodeFromNativeKeySym(key, modifiers),
+                  modifiers));
+  if (type != ui::ET_KEY_RELEASED) {
+    if (timer_.IsRunning())
+      return;
+
+    timer_.Start(
+        FROM_HERE, base::TimeDelta::FromSeconds(KAutoRepeatInitialTimer), this,
+            &EventConverterInProcess::RepeatAutoKey);
+  } else if (timer_.IsRunning()) {
+      timer_.Stop();
+  }
+}
+
+void EventConverterInProcess::KeyModifiers(uint32_t mods_depressed,
+                                           uint32_t mods_latched,
+                                           uint32_t mods_locked,
+                                           uint32_t group) {
+  backend_->OnKeyModifiers(mods_depressed,
+                           mods_latched,
+                           mods_locked,
+                           group);
+}
+
+void EventConverterInProcess::TouchNotify(ui::EventType type,
+                                          float x,
+                                          float y,
+                                          int32_t touch_id,
+                                          uint32_t time_stamp) {
+  ui::EventConverterOzoneWayland::PostTaskOnMainLoop(base::Bind(
+      &EventConverterInProcess::NotifyTouchEvent, this, type, x, y, touch_id,
+          time_stamp));
+}
+
+void EventConverterInProcess::CloseWidget(unsigned handle) {
+  ui::EventConverterOzoneWayland::PostTaskOnMainLoop(base::Bind(
+      &EventConverterInProcess::NotifyCloseWidget, handle));
+}
+
+void EventConverterInProcess::OutputSizeChanged(unsigned width,
+                                                unsigned height) {
+  ui::EventConverterOzoneWayland::PostTaskOnMainLoop(base::Bind(
+      &EventConverterInProcess::NotifyOutputSizeChanged, width, height));
+}
+
+void EventConverterInProcess::WindowResized(unsigned handle,
+                                            unsigned width,
+                                            unsigned height) {
+  ui::EventConverterOzoneWayland::PostTaskOnMainLoop(base::Bind(
+      &EventConverterInProcess::NotifyWindowResized, handle, width,
+          height));
+}
+
+void EventConverterInProcess::WindowUnminimized(unsigned handle) {
+  ui::EventConverterOzoneWayland::PostTaskOnMainLoop(base::Bind(
+      &EventConverterInProcess::NotifyWindowUnminimized, handle));
+}
+
+void EventConverterInProcess::WindowDeActivated(unsigned windowhandle) {
+  ui::EventConverterOzoneWayland::PostTaskOnMainLoop(base::Bind(
+      &EventConverterInProcess::NotifyWindowDeActivated, windowhandle));
+}
+
+void EventConverterInProcess::WindowActivated(unsigned windowhandle) {
+  ui::EventConverterOzoneWayland::PostTaskOnMainLoop(base::Bind(
+      &EventConverterInProcess::NotifyWindowActivated, windowhandle));
+}
+
+void EventConverterInProcess::Commit(unsigned handle, const std::string& text) {
+  ui::EventConverterOzoneWayland::PostTaskOnMainLoop(base::Bind(
+      &EventConverterInProcess::NotifyCommit, handle, text));
+}
+
+void EventConverterInProcess::PreeditChanged(unsigned handle,
+                                             const std::string& text,
+                                             const std::string& commit) {
+  ui::EventConverterOzoneWayland::PostTaskOnMainLoop(base::Bind(
+      &EventConverterInProcess::NotifyPreeditChanged, handle, text,
+      commit));
+}
+
+void EventConverterInProcess::PreeditEnd() {
+  ui::EventConverterOzoneWayland::PostTaskOnMainLoop(base::Bind(
+        &EventConverterInProcess::NotifyPreeditEnd, this));
+}
+
+void EventConverterInProcess::PreeditStart() {
+    ui::EventConverterOzoneWayland::PostTaskOnMainLoop(base::Bind(
+        &EventConverterInProcess::NotifyPreeditStart, this));
+}
+
+void EventConverterInProcess::InitializeXKB(base::SharedMemoryHandle fd,
+                                            uint32_t size) {
+  if (backend_) {
+    delete backend_;
+    backend_ = NULL;
+  }
+
+  backend_ = new ui::KeyboardEngineXKB();
+  backend_->OnKeyboardKeymap(fd.fd, size);
+  close(fd.fd);
+}
+
+void EventConverterInProcess::OnDispatcherListChanged() {
+  if (!loop_)
+    loop_ = base::MessageLoop::current();
+}
+
+void EventConverterInProcess::RepeatAutoKey() {
+  ui::EventConverterOzoneWayland::PostTaskOnMainLoop(base::Bind(
+      &EventConverterInProcess::NotifyKeyEvent, this, ui::ET_KEY_PRESSED,
+          backend_->GetLastKeyboardCode(),
+              backend_->GetLastCharacterCode(),
+                  backend_->GetKeyBoardModifiers()));
+  base::TimeDelta delta = base::TimeDelta::FromSeconds(KAutoRepeatTimer);
+  if (timer_.GetCurrentDelay() != delta) {
+    timer_.Stop();
+    timer_.Start(FROM_HERE,
+                 delta,
+                 this,
+                 &EventConverterInProcess::RepeatAutoKey);
+  }
+}
+
+void EventConverterInProcess::NotifyMotion(EventConverterInProcess* data,
+                                           float x,
+                                           float y) {
+  gfx::Point position(x, y);
+  ui::MouseEvent mouseev(ui::ET_MOUSE_MOVED,
+                         position,
+                         position,
+                         0,
+                         0);
+  data->DispatchEvent(&mouseev);
+}
+
+void EventConverterInProcess::NotifyButtonPress(EventConverterInProcess* data,
+                                                unsigned handle,
+                                                ui::EventType type,
+                                                ui::EventFlags flags,
+                                                float x,
+                                                float y) {
+    gfx::Point position(x, y);
+    ui::MouseEvent mouseev(type,
+                           position,
+                           position,
+                           flags,
+                           flags);
+    data->DispatchEvent(&mouseev);
+
+    if (type == ui::ET_MOUSE_RELEASED) {
+      ui::WindowChangeObserver* observer =
+          ui::EventFactoryOzoneWayland::GetInstance()->
+              GetWindowChangeObserver();
+      if (observer)
+        observer->OnWindowFocused(handle);
+    }
+}
+
+void EventConverterInProcess::NotifyAxis(EventConverterInProcess* data,
+                                         float x,
+                                         float y,
+                                         int xoffset,
+                                         int yoffset) {
+  gfx::Point position(x, y);
+  ui::MouseEvent mouseev(ui::ET_MOUSEWHEEL, position, position, 0, 0);
+  ui::MouseWheelEvent wheelev(mouseev, xoffset, yoffset);
+
+  data->DispatchEvent(&wheelev);
+}
+
+void EventConverterInProcess::NotifyPointerEnter(
+    EventConverterInProcess* data, unsigned handle, float x, float y) {
+  ui::WindowChangeObserver* observer =
+      ui::EventFactoryOzoneWayland::GetInstance()->GetWindowChangeObserver();
+  if (observer)
+    observer->OnWindowEnter(handle);
+
+  gfx::Point position(x, y);
+  ui::MouseEvent mouseev(ui::ET_MOUSE_ENTERED, position, position, 0, 0);
+  data->DispatchEvent(&mouseev);
+}
+
+void EventConverterInProcess::NotifyPointerLeave(
+    EventConverterInProcess* data, unsigned handle, float x, float y) {
+  ui::WindowChangeObserver* observer =
+      ui::EventFactoryOzoneWayland::GetInstance()->GetWindowChangeObserver();
+  if (observer)
+    observer->OnWindowLeave(handle);
+
+  gfx::Point position(x, y);
+  ui::MouseEvent mouseev(ui::ET_MOUSE_EXITED, position, position, 0, 0);
+  data->DispatchEvent(&mouseev);
+}
+
+void EventConverterInProcess::NotifyKeyEvent(EventConverterInProcess* data,
+                                             ui::EventType type,
+                                             ui::KeyboardCode code,
+                                             uint16 CharacterCodeFromNativeKey,
+                                             unsigned modifiers) {
+  ui::KeyEvent keyev(type, code, modifiers);
+  keyev.set_character(CharacterCodeFromNativeKey);
+  data->DispatchEvent(&keyev);
+}
+
+void EventConverterInProcess::NotifyTouchEvent(EventConverterInProcess* data,
+                                               ui::EventType type,
+                                               float x,
+                                               float y,
+                                               int32_t touch_id,
+                                               uint32_t time_stamp) {
+  gfx::Point position(x, y);
+  base::TimeDelta time_delta = base::TimeDelta::FromMilliseconds(time_stamp);
+  ui::TouchEvent touchev(type, position, touch_id, time_delta);
+  data->DispatchEvent(&touchev);
+}
+
+void EventConverterInProcess::NotifyCloseWidget(unsigned handle) {
+  ui::WindowChangeObserver* observer =
+      ui::EventFactoryOzoneWayland::GetInstance()->GetWindowChangeObserver();
+  if (observer)
+    observer->OnWindowClose(handle);
+}
+
+void
+EventConverterInProcess::NotifyOutputSizeChanged(unsigned width,
+                                                 unsigned height) {
+  ui::OutputChangeObserver* observer =
+      ui::EventFactoryOzoneWayland::GetInstance()->GetOutputChangeObserver();
+  if (observer)
+    observer->OnOutputSizeChanged(width, height);
+}
+
+void
+EventConverterInProcess::NotifyWindowResized(unsigned handle,
+                                             unsigned width,
+                                             unsigned height) {
+  ui::WindowChangeObserver* observer =
+      ui::EventFactoryOzoneWayland::GetInstance()->GetWindowChangeObserver();
+  if (observer)
+    observer->OnWindowResized(handle, width, height);
+}
+
+void
+EventConverterInProcess::NotifyWindowUnminimized(unsigned handle) {
+  ui::WindowChangeObserver* observer =
+      ui::EventFactoryOzoneWayland::GetInstance()->GetWindowChangeObserver();
+  if (observer)
+    observer->OnWindowUnminimized(handle);
+}
+
+void
+EventConverterInProcess::NotifyWindowDeActivated(unsigned handle) {
+  ui::WindowChangeObserver* observer =
+      ui::EventFactoryOzoneWayland::GetInstance()->GetWindowChangeObserver();
+  if (observer)
+    observer->OnWindowDeActivated(handle);
+}
+
+void
+EventConverterInProcess::NotifyWindowActivated(unsigned handle) {
+  ui::WindowChangeObserver* observer =
+      ui::EventFactoryOzoneWayland::GetInstance()->GetWindowChangeObserver();
+  if (observer)
+    observer->OnWindowActivated(handle);
+}
+
+void
+EventConverterInProcess::NotifyCommit(unsigned handle,
+                                      const std::string& text) {
+  ui::IMEChangeObserver* observer =
+      ui::EventFactoryOzoneWayland::GetInstance()->GetIMEChangeObserver();
+  if (observer)
+    observer->OnCommit(handle, text);
+}
+
+void
+EventConverterInProcess::NotifyPreeditChanged(unsigned handle,
+                                              const std::string& text,
+                                              const std::string& commit) {
+  ui::IMEChangeObserver* observer =
+      ui::EventFactoryOzoneWayland::GetInstance()->GetIMEChangeObserver();
+  if (observer)
+    observer->OnPreeditChanged(handle, text, commit);
+}
+
+void
+EventConverterInProcess::NotifyPreeditEnd(EventConverterInProcess* data) {
+}
+
+void
+EventConverterInProcess::NotifyPreeditStart(EventConverterInProcess* data) {
+}
+
+}  // namespace ui
--- /dev/null
+++ b/ui/events/event_converter_in_process.h
@@ -0,0 +1,132 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_UI_EVENTS_EVENT_CONVERTER_IN_PROCESS_H_
+#define OZONE_UI_EVENTS_EVENT_CONVERTER_IN_PROCESS_H_
+
+#include <string>
+
+#include "base/memory/scoped_ptr.h"
+#include "base/timer/timer.h"
+#include "ozone/ui/events/event_converter_ozone_wayland.h"
+#include "ozone/ui/events/keyboard_engine_xkb.h"
+#include "ui/events/event.h"
+#include "ui/events/platform/platform_event_source.h"
+
+namespace ui {
+
+class EventConverterInProcess : public ui::EventConverterOzoneWayland,
+                                public ui::PlatformEventSource {
+ public:
+  EventConverterInProcess();
+  virtual ~EventConverterInProcess();
+
+  void MotionNotify(float x, float y) override;
+  void ButtonNotify(unsigned handle,
+                    ui::EventType type,
+                    ui::EventFlags flags,
+                    float x,
+                    float y) override;
+  void AxisNotify(float x,
+                  float y,
+                  int xoffset,
+                  int yoffset) override;
+  void PointerEnter(unsigned handle, float x, float y) override;
+  void PointerLeave(unsigned handle, float x, float y) override;
+  void KeyNotify(ui::EventType type,
+                 unsigned code) override;
+  void VirtualKeyNotify(ui::EventType type,
+                        uint32_t key,
+                        uint32_t modifiers) override;
+  void KeyModifiers(uint32_t mods_depressed,
+                    uint32_t mods_latched,
+                    uint32_t mods_locked,
+                    uint32_t group) override;
+  void TouchNotify(ui::EventType type,
+                   float x,
+                   float y,
+                   int32_t touch_id,
+                   uint32_t time_stamp) override;
+  void CloseWidget(unsigned handle) override;
+
+  void OutputSizeChanged(unsigned width, unsigned height) override;
+  void WindowResized(unsigned windowhandle,
+                     unsigned width,
+                     unsigned height) override;
+  void WindowUnminimized(unsigned windowhandle) override;
+  void WindowDeActivated(unsigned windowhandle) override;
+  void WindowActivated(unsigned windowhandle) override;
+
+  void Commit(unsigned handle, const std::string& text) override;
+  void PreeditChanged(unsigned handle,
+                      const std::string& text,
+                      const std::string& commit) override;
+  void PreeditEnd() override;
+  void PreeditStart() override;
+  void InitializeXKB(base::SharedMemoryHandle fd, uint32_t size) override;
+
+ private:
+  // PlatformEventSource:
+  void OnDispatcherListChanged() override;
+  void RepeatAutoKey();
+  static void NotifyMotion(EventConverterInProcess* data,
+                           float x,
+                           float y);
+  static void NotifyButtonPress(EventConverterInProcess* data,
+                                unsigned handle,
+                                ui::EventType type,
+                                ui::EventFlags flags,
+                                float x,
+                                float y);
+  static void NotifyAxis(EventConverterInProcess* data,
+                         float x,
+                         float y,
+                         int xoffset,
+                         int yoffset);
+  static void NotifyPointerEnter(EventConverterInProcess* data,
+                                 unsigned handle,
+                                 float x,
+                                 float y);
+  static void NotifyPointerLeave(EventConverterInProcess* data,
+                                 unsigned handle,
+                                 float x,
+                                 float y);
+  static void NotifyKeyEvent(EventConverterInProcess* data,
+                             ui::EventType type,
+                             ui::KeyboardCode code,
+                             uint16 CharacterCodeFromNativeKey,
+                             unsigned modifiers);
+  static void NotifyTouchEvent(EventConverterInProcess* data,
+                               ui::EventType type,
+                               float x,
+                               float y,
+                               int32_t touch_id,
+                               uint32_t time_stamp);
+  static void NotifyCloseWidget(unsigned handle);
+  static void NotifyOutputSizeChanged(unsigned width,
+                                      unsigned height);
+  static void NotifyWindowResized(unsigned handle,
+                                  unsigned width,
+                                  unsigned height);
+  static void NotifyWindowUnminimized(unsigned handle);
+  static void NotifyWindowDeActivated(unsigned handle);
+  static void NotifyWindowActivated(unsigned handle);
+  static void NotifyCommit(unsigned handle,
+                           const std::string& text);
+  static void NotifyPreeditChanged(unsigned handle,
+                                   const std::string& text,
+                                   const std::string& commit);
+  static void NotifyPreeditEnd(EventConverterInProcess* data);
+  static void NotifyPreeditStart(EventConverterInProcess* data);
+
+  ui::KeyboardEngineXKB* backend_;
+  base::RepeatingTimer<EventConverterInProcess> timer_;
+  base::Callback<void(void*)> dispatch_callback_;  // NOLINT(readability/
+                                                   // function)
+  DISALLOW_COPY_AND_ASSIGN(EventConverterInProcess);
+};
+
+}  // namespace ui
+
+#endif  // OZONE_UI_EVENTS_EVENT_CONVERTER_IN_PROCESS_H_
--- /dev/null
+++ b/ui/events/event_converter_ozone_wayland.cc
@@ -0,0 +1,23 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/ui/events/event_converter_ozone_wayland.h"
+
+#include "base/bind.h"
+
+namespace ui {
+
+EventConverterOzoneWayland::EventConverterOzoneWayland()
+    : loop_(NULL) {
+}
+
+EventConverterOzoneWayland::~EventConverterOzoneWayland() {
+}
+
+void EventConverterOzoneWayland::PostTaskOnMainLoop(const base::Closure& task) {
+  DCHECK(loop_);
+  loop_->message_loop_proxy()->PostTask(FROM_HERE, task);
+}
+
+}  // namespace ui
--- /dev/null
+++ b/ui/events/event_converter_ozone_wayland.h
@@ -0,0 +1,78 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_UI_EVENTS_EVENT_CONVERTER_OZONE_WAYLAND_H_
+#define OZONE_UI_EVENTS_EVENT_CONVERTER_OZONE_WAYLAND_H_
+
+#include <string>
+
+#include "base/memory/shared_memory.h"
+#include "base/message_loop/message_loop.h"
+#include "ozone/platform/ozone_export_wayland.h"
+#include "ui/events/event_constants.h"
+
+namespace ui {
+
+class WindowChangeObserver;
+class OutputChangeObserver;
+
+// In OzoneWayland, Chrome relies on Wayland protocol to recieve callback of
+// any input/surface events. This class is responsible for the following:
+// 1) Convert native input events to |ui::Event| and dispatching to aura.
+// 2) Convert native events related to Window Activation and dispatch it to
+//    WindowChangeObserver
+class OZONE_WAYLAND_EXPORT EventConverterOzoneWayland {
+ public:
+  EventConverterOzoneWayland();
+  virtual ~EventConverterOzoneWayland();
+
+  virtual void MotionNotify(float x, float y) = 0;
+  virtual void ButtonNotify(unsigned handle,
+                            EventType type,
+                            EventFlags flags,
+                            float x,
+                            float y) = 0;
+  virtual void AxisNotify(float x, float y, int xoffset, int yoffset) = 0;
+  virtual void PointerEnter(unsigned handle, float x, float y) = 0;
+  virtual void PointerLeave(unsigned handle, float x, float y) = 0;
+  virtual void KeyNotify(ui::EventType type,
+                         unsigned code) = 0;
+  virtual void VirtualKeyNotify(ui::EventType type,
+                                uint32_t key,
+                                uint32_t modifiers) = 0;
+  virtual void KeyModifiers(uint32_t mods_depressed,
+                            uint32_t mods_latched,
+                            uint32_t mods_locked,
+                            uint32_t group) = 0;
+  virtual void TouchNotify(ui::EventType type,
+                           float x,
+                           float y,
+                           int32_t touch_id,
+                           uint32_t time_stamp) = 0;
+
+  virtual void OutputSizeChanged(unsigned width, unsigned height) = 0;
+  virtual void WindowResized(unsigned windowhandle,
+                             unsigned width,
+                             unsigned height) = 0;
+  virtual void WindowUnminimized(unsigned windowhandle) = 0;
+  virtual void WindowDeActivated(unsigned windowhandle) = 0;
+  virtual void WindowActivated(unsigned windowhandle) = 0;
+  virtual void CloseWidget(unsigned handle) = 0;
+  virtual void Commit(unsigned handle, const std::string& text) = 0;
+  virtual void PreeditChanged(unsigned handle, const std::string& text,
+                              const std::string& commit) = 0;
+  virtual void PreeditEnd() = 0;
+  virtual void PreeditStart() = 0;
+  virtual void InitializeXKB(base::SharedMemoryHandle fd,
+                             uint32_t size) = 0;
+
+ protected:
+  // Posts task to main loop of the thread on which Dispatcher was initialized.
+  virtual void PostTaskOnMainLoop(const base::Closure& task);
+  base::MessageLoop* loop_;
+};
+
+}  // namespace ui
+
+#endif  // OZONE_UI_EVENTS_EVENT_CONVERTER_OZONE_WAYLAND_H_
--- /dev/null
+++ b/ui/events/event_factory_ozone_wayland.cc
@@ -0,0 +1,103 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/ui/events/event_factory_ozone_wayland.h"
+
+#include "base/bind.h"
+#include "ozone/ui/public/ozone_channel_host.h"
+
+
+namespace ui {
+
+// static
+EventFactoryOzoneWayland* EventFactoryOzoneWayland::impl_ = NULL;
+
+EventFactoryOzoneWayland::EventFactoryOzoneWayland(OzoneChannelHost* host)
+    : event_converter_(NULL),
+      observer_(NULL),
+      ime_observer_(NULL),
+      output_observer_(NULL),
+      state_change_handler_(NULL),
+      ime_state_handler_(NULL),
+      host_(host) {
+  impl_ = this;
+  if (host_)
+    host_->Initialize();
+}
+
+EventFactoryOzoneWayland::~EventFactoryOzoneWayland() {
+  impl_ = NULL;
+}
+
+EventFactoryOzoneWayland* EventFactoryOzoneWayland::GetInstance() {
+  CHECK(impl_) << "No EventFactoryOzoneWayland implementation set.";
+  return impl_;
+}
+
+void EventFactoryOzoneWayland::SetWindowChangeObserver(
+    WindowChangeObserver* observer) {
+  observer_ = observer;
+}
+
+void EventFactoryOzoneWayland::SetIMEChangeObserver(
+    IMEChangeObserver* observer) {
+  ime_observer_ = observer;
+}
+
+IMEChangeObserver*
+EventFactoryOzoneWayland::GetIMEChangeObserver() const {
+  return ime_observer_;
+}
+
+WindowChangeObserver*
+EventFactoryOzoneWayland::GetWindowChangeObserver() const {
+  return observer_;
+}
+
+void EventFactoryOzoneWayland::SetOutputChangeObserver(
+    OutputChangeObserver* observer) {
+  output_observer_ = observer;
+}
+
+OutputChangeObserver*
+EventFactoryOzoneWayland::GetOutputChangeObserver() const {
+  return output_observer_;
+}
+
+void EventFactoryOzoneWayland::SetEventConverterOzoneWayland(
+    EventConverterOzoneWayland* converter) {
+  event_converter_ = converter;
+}
+
+EventConverterOzoneWayland* EventFactoryOzoneWayland::EventConverter() const {
+  CHECK(impl_) << "EventConverterOzoneWayland is not initialized yet.";
+  return event_converter_;
+}
+
+void EventFactoryOzoneWayland::SetWindowStateChangeHandler(
+    WindowStateChangeHandler* handler) {
+  if (host_ && host_->GetStateChangeHandler() &&
+      handler != host_->GetStateChangeHandler()) {
+    host_->ReleaseRemoteStateChangeHandler();
+  }
+
+  state_change_handler_ = handler;
+}
+
+WindowStateChangeHandler*
+EventFactoryOzoneWayland::GetWindowStateChangeHandler() const {
+  return state_change_handler_;
+}
+
+void EventFactoryOzoneWayland::SetIMEStateChangeHandler(
+    IMEStateChangeHandler* handler) {
+  ime_state_handler_ = handler;
+}
+
+IMEStateChangeHandler*
+EventFactoryOzoneWayland::GetImeStateChangeHandler() const {
+  return ime_state_handler_;
+}
+
+}  // namespace ui
--- /dev/null
+++ b/ui/events/event_factory_ozone_wayland.h
@@ -0,0 +1,69 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_UI_EVENTS_EVENT_FACTORY_OZONE_WAYLAND_H_
+#define OZONE_UI_EVENTS_EVENT_FACTORY_OZONE_WAYLAND_H_
+
+#include "ozone/ui/events/event_converter_ozone_wayland.h"
+#include "ozone/platform/ozone_export_wayland.h"
+
+namespace ui {
+
+class IMEChangeObserver;
+class OutputChangeObserver;
+class OzoneChannelHost;
+class WindowChangeObserver;
+class WindowStateChangeHandler;
+class IMEStateChangeHandler;
+
+class OZONE_WAYLAND_EXPORT EventFactoryOzoneWayland {
+ public:
+  explicit EventFactoryOzoneWayland(OzoneChannelHost* host = NULL);
+  virtual ~EventFactoryOzoneWayland();
+
+  // Returns the static instance last set using SetInstance().
+  static EventFactoryOzoneWayland* GetInstance();
+
+  // Sets the window change observer. Ownership is retained by the caller.
+  void SetWindowChangeObserver(WindowChangeObserver* observer);
+  WindowChangeObserver* GetWindowChangeObserver() const;
+  // Sets the output change observer. Ownership is retained by the caller.
+  void SetOutputChangeObserver(OutputChangeObserver* observer);
+  // Registered OutputChangeObserver. Ownership is not passed to the caller.
+  OutputChangeObserver* GetOutputChangeObserver() const;
+
+  // Sets the ime change observer. Ownership is retained by the caller.
+  void SetIMEChangeObserver(IMEChangeObserver* observer);
+  // Registered IMEChangeObserver. Ownership is not passed to the caller.
+  IMEChangeObserver* GetIMEChangeObserver() const;
+
+  void SetEventConverterOzoneWayland(EventConverterOzoneWayland* converter);
+  // EventConverter used to convert native input events to |ui::Event|.
+  // Ownership is not passed to the caller.
+  EventConverterOzoneWayland* EventConverter() const;
+
+  // Sets the window state change handler. Ownership is retained by the caller.
+  void SetWindowStateChangeHandler(WindowStateChangeHandler* statehandler);
+  // Registered WindowStateChangeHandler. Ownership is not passed to the caller.
+  WindowStateChangeHandler* GetWindowStateChangeHandler() const;
+
+  // Sets the IME state change handler. Ownership is retained by the caller.
+  void SetIMEStateChangeHandler(IMEStateChangeHandler* handler);
+  // Registered IMEStateChangeHandler. Ownership is not passed to the caller.
+  IMEStateChangeHandler* GetImeStateChangeHandler() const;
+
+ protected:
+  EventConverterOzoneWayland* event_converter_;
+  WindowChangeObserver* observer_;
+  IMEChangeObserver* ime_observer_;
+  OutputChangeObserver* output_observer_;
+  WindowStateChangeHandler* state_change_handler_;
+  IMEStateChangeHandler* ime_state_handler_;
+  OzoneChannelHost* host_;
+  static EventFactoryOzoneWayland* impl_;  // not owned
+};
+
+}  // namespace ui
+
+#endif  // OZONE_UI_EVENTS_EVENT_FACTORY_OZONE_WAYLAND_H_
--- /dev/null
+++ b/ui/events/ime_change_observer.h
@@ -0,0 +1,29 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_UI_EVENTS_IME_CHANGE_OBSERVER_H_
+#define OZONE_UI_EVENTS_IME_CHANGE_OBSERVER_H_
+
+#include <string>
+
+#include "ozone/platform/ozone_export_wayland.h"
+namespace ui {
+
+// A simple observer interface for all clients interested in recieving various
+// window state change notifications like when the pointer enters a
+// particular window.
+class OZONE_WAYLAND_EXPORT IMEChangeObserver {
+ public:
+  virtual void OnPreeditChanged(unsigned handle,
+                                const std::string& text,
+                                const std::string& commit) = 0;
+  virtual void OnCommit(unsigned handle, const std::string& text) = 0;
+
+ protected:
+  virtual ~IMEChangeObserver() {}
+};
+
+}  // namespace ui
+
+#endif  // OZONE_UI_EVENTS_IME_CHANGE_OBSERVER_H_
--- /dev/null
+++ b/ui/events/ime_state_change_handler.h
@@ -0,0 +1,33 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_UI_IME_IME_STATE_CHANGE_HANDLER_H_
+#define OZONE_UI_IME_IME_STATE_CHANGE_HANDLER_H_
+
+#include "base/basictypes.h"
+#include "ozone/platform/ozone_export_wayland.h"
+#include "ui/gfx/rect.h"
+
+namespace ui {
+
+// A simple interface for passing IME state change notifications coming from
+// Aura to Wayland.
+class OZONE_WAYLAND_EXPORT IMEStateChangeHandler {
+ public:
+  virtual ~IMEStateChangeHandler() { }
+
+  // This is called with IMEContext needs to be reset.
+  virtual void ResetIme() = 0;
+
+  // Notifies the context that the caret bounds have changed.  |rect| is
+  // relative to screen coordinates.
+  virtual void ImeCaretBoundsChanged(gfx::Rect rect) = 0;
+
+  virtual void ShowInputPanel() = 0;
+  virtual void HideInputPanel() = 0;
+};
+
+}  // namespace ui
+
+#endif  // OZONE_UI_IME_IME_STATE_CHANGE_HANDLER_H_
--- /dev/null
+++ b/ui/events/keyboard_codes_ozone.h
@@ -0,0 +1,409 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_UI_EVENTS_KEYBOARD_CODES_OZONE_H_
+#define OZONE_UI_EVENTS_KEYBOARD_CODES_OZONE_H_
+
+#include "ui/events/keycodes/keyboard_codes_posix.h"
+
+namespace ui {
+
+// This is unfiy the keycodes used in Chromium and XKB/any backend used in
+// Ozone-Wayland.
+
+// Standard ASCII set, HTML Entity names, ISO 10646, ISO 8879, ISO 8859-1.
+enum OZONECHARCODE {
+  OZONECHARCODE_NULL = 0x0000,
+  OZONECHARCODE_PAUSE = 0x0004,
+  OZONECHARCODE_BACKSPACE = 0x0008,
+  OZONECHARCODE_TAB = 0x0009,
+  OZONECHARCODE_LINEFEED = 0x000A,
+  OZONECHARCODE_RETURN = 0x000D,
+  OZONECHARCODE_ESCAPE = 0x001B,
+  OZONECHARCODE_FILE_SEPARATOR = 0x001C,  // SEPARATOR
+  OZONECHARCODE_GROUP_SEPARATOR = 0x001D,
+  OZONECHARCODE_RECORD_SEPARATOR = 0x001E,
+  OZONECHARCODE_UNIT_SEPARATOR = 0x001F,
+  OZONECHARCODE_SPACE = 0x0020,
+  OZONECHARCODE_EXCLAMATORY = 0x0021,  // !
+  OZONECHARCODE_DOUBLE_QUOTES = 0x0022,  // "
+  OZONECHARCODE_NUMBER = 0x0023,  // #
+  OZONECHARCODE_DOLLAR = 0x0024,  // $
+  OZONECHARCODE_PERCENT = 0x0025,  // %
+  OZONECHARCODE_AMPERSAND = 0x0026,  // &
+  OZONECHARCODE_SINGLEQUOTE = 0x0027,  // '
+  OZONECHARCODE_OPEN_PARENTHESIS = 0x0028,  // (
+  OZONECHARCODE_CLOSED_PARENTHESIS = 0x0029,  // )
+  OZONECHARCODE_ASTERISK = 0x002A,  // *
+  OZONECHARCODE_PLUS = 0x002B,  // +
+  OZONECHARCODE_COMMA = 0x002C,  // ,
+  OZONECHARCODE_MINUS = 0x002D,  // -
+  OZONECHARCODE_PERIOD = 0x002E,  // .
+  OZONECHARCODE_SLASH = 0x002F,  // /
+  OZONECHARCODE_0 = 0x0030,  // Numbers.
+  OZONECHARCODE_1 = 0x0031,
+  OZONECHARCODE_2 = 0x0032,
+  OZONECHARCODE_3 = 0x0033,
+  OZONECHARCODE_4 = 0x0034,
+  OZONECHARCODE_5 = 0x0035,
+  OZONECHARCODE_6 = 0x0036,
+  OZONECHARCODE_7 = 0x0037,
+  OZONECHARCODE_8 = 0x0038,
+  OZONECHARCODE_9 = 0x0039,
+  OZONECHARCODE_COLON = 0x003A,  // :
+  OZONECHARCODE_SEMI_COLON = 0x003B,  // ;
+  OZONECHARCODE_LESS_THAN = 0x003C,  // <
+  OZONECHARCODE_EQUAL = 0x003D,  // =
+  OZONECHARCODE_GREATER_THAN = 0x003E,  // >
+  OZONECHARCODE_QUESTION_MARK = 0x003F,  // ?
+  OZONECHARCODE_AT = 0x0040,  // @
+  OZONECHARCODE_A = 0x0041,  // Alphabets.
+  OZONECHARCODE_B = 0x0042,
+  OZONECHARCODE_C = 0x0043,
+  OZONECHARCODE_D = 0x0044,
+  OZONECHARCODE_E = 0x0045,
+  OZONECHARCODE_F = 0x0046,
+  OZONECHARCODE_G = 0x0047,
+  OZONECHARCODE_H = 0x0048,
+  OZONECHARCODE_I = 0x0049,
+  OZONECHARCODE_J = 0x004A,
+  OZONECHARCODE_K = 0x004B,
+  OZONECHARCODE_L = 0x004C,
+  OZONECHARCODE_M = 0x004D,
+  OZONECHARCODE_N = 0x004E,
+  OZONECHARCODE_O = 0x004F,
+  OZONECHARCODE_P = 0x0050,
+  OZONECHARCODE_Q = 0x0051,
+  OZONECHARCODE_R = 0x0052,
+  OZONECHARCODE_S = 0x0053,
+  OZONECHARCODE_T = 0x0054,
+  OZONECHARCODE_U = 0x0055,
+  OZONECHARCODE_V = 0x0056,
+  OZONECHARCODE_W = 0x0057,
+  OZONECHARCODE_X = 0x0058,
+  OZONECHARCODE_Y = 0x0059,
+  OZONECHARCODE_Z = 0x005A,
+  OZONECHARCODE_LEFT_BRACKET = 0x005B,  // [
+  OZONECHARCODE_BACK_SLASH = 0x005C,  // /
+  OZONECHARCODE_RIGHT_BRACKET = 0x005D,  // ]
+  OZONECHARCODE_CARET_CIRCUMFLEX = 0x005E,  // ^
+  OZONECHARCODE_UNDER_SCORE = 0x005F,  // _
+  OZONECHARCODE_GRAVE_ASSCENT = 0x0060,  // `
+  OZONECHARCODE_a = 0x0061,  // Alphabets small case.
+  OZONECHARCODE_b = 0x0062,
+  OZONECHARCODE_c = 0x0063,
+  OZONECHARCODE_d = 0x0064,
+  OZONECHARCODE_e = 0x0065,
+  OZONECHARCODE_f = 0x0066,
+  OZONECHARCODE_g = 0x0067,
+  OZONECHARCODE_h = 0x0068,
+  OZONECHARCODE_i = 0x0069,
+  OZONECHARCODE_j = 0x006A,
+  OZONECHARCODE_k = 0x006B,
+  OZONECHARCODE_l = 0x006C,
+  OZONECHARCODE_m = 0x006D,
+  OZONECHARCODE_n = 0x006E,
+  OZONECHARCODE_o = 0x006F,
+  OZONECHARCODE_p = 0x0070,
+  OZONECHARCODE_q = 0x0071,
+  OZONECHARCODE_r = 0x0072,
+  OZONECHARCODE_s = 0x0073,
+  OZONECHARCODE_t = 0x0074,
+  OZONECHARCODE_u = 0x0075,
+  OZONECHARCODE_v = 0x0076,
+  OZONECHARCODE_w = 0x0077,
+  OZONECHARCODE_x = 0x0078,
+  OZONECHARCODE_y = 0x0079,
+  OZONECHARCODE_z = 0x007A,
+  OZONECHARCODE_OPEN_BRACE = 0x007B,
+  OZONECHARCODE_VERTICAL_BAR = 0x007C,
+  OZONECHARCODE_CLOSE_BRACE = 0x007D,
+  OZONECHARCODE_TILDE = 0x007E,  //  ~
+  OZONECHARCODE_DELETE = 0x007F,  //  del
+  OZONECHARCODE_NONBREAKING_SPACE = 0x00A0,
+  OZONECHARCODE_INVERTED_EXCLAMATION = 0x00A1,  // ¡
+  OZONECHARCODE_CENT = 0x00A2,  // ¢
+  OZONECHARCODE_STERLING = 0x00A3,  // £
+  OZONECHARCODE_CURRENCY = 0x00A4,  // ¤
+  OZONECHARCODE_YEN = 0x00A5,  // ¥
+  OZONECHARCODE_BROKEN_BAR = 0x00A6,  // ¦
+  OZONECHARCODE_SECTION = 0x00A7,  // §
+  OZONECHARCODE_SPACING_DIAERESIS = 0x00A8,  // ¨
+  OZONECHARCODE_COPYRIGHT = 0x00A9,  // ©
+  OZONECHARCODE_FEMININE_ORDINAL_INDICATOR = 0x00AA,  // ª
+  OZONECHARCODE_LEFT_ANGLE_QUOTES = 0x00AB,  // «
+  OZONECHARCODE_NOT_SIGN =  0x00AC,  // ¬
+  OZONECHARCODE_SOFT_HYPHEN = 0x00AD,
+  OZONECHARCODE_REGISTERED = 0x00AE,  // ®
+  OZONECHARCODE_SPACING_MACRON = 0x00AF,
+  OZONECHARCODE_DEGREE = 0x00B0,  // °
+  OZONECHARCODE_PLUS_MINUS = 0x00B1,  // ±
+  OZONECHARCODE_SUPERSCRIPT_TWO = 0x00B2,  // ²
+  OZONECHARCODE_SUPERSCRIPT_THREE = 0x00B3,  // ³
+  OZONECHARCODE_SPACING_ACUTE =  0x00B4,  // ´
+  OZONECHARCODE_MICRO = 0x00B5,  // µ
+  OZONECHARCODE_PARAGRAPH = 0x00B6,  // ¶
+  OZONECHARCODE_MIDDLEDOT = 0x00B7,  // ·
+  OZONECHARCODE_SPACING_CEDILLA = 0x00B8,  // ¸
+  OZONECHARCODE_SUPERSCRIPT_ONE = 0x00B9,  // ¹
+  OZONECHARCODE_MASCULINE_ORDINAL_INDICATOR = 0x00BA,  // º
+  OZONECHARCODE_RIGHTANGLE_QUOTES = 0x00BB,  // »
+  OZONECHARCODE_ONE_QUARTER = 0x00BC,  // ¼
+  OZONECHARCODE_ONE_HALF =  0x00BD,  // ½
+  OZONECHARCODE_THREE_QUARTERS = 0x00BE,  // ¾
+  OZONECHARCODE_INVERTED_QUESTION_MARK = 0x00BF,  // ¿
+  OZONECHARCODE_LA_WITH_GRAVE = 0x00C0,  // À
+  OZONECHARCODE_LA_WITH_ACUTE = 0x00C1,  // Á
+  OZONECHARCODE_LA_WITH_CIRCUMFLEX = 0x00C2,  // Â
+  OZONECHARCODE_LA_WITH_TILDE = 0x00C3,  // Ã
+  OZONECHARCODE_LA_WITH_DIAERESIS = 0x00C4,  // Ä
+  OZONECHARCODE_LA_WITH_RING_ABOVE = 0x00C5,  // Å
+  OZONECHARCODE_LAE = 0x00C6,  // Æ
+  OZONECHARCODE_LC_WITH_CEDILLA = 0x00C7,  // Ç
+  OZONECHARCODE_LE_WITH_GRAVE = 0x00C8,  // È
+  OZONECHARCODE_LE_WITH_ACUTE = 0x00C9,  // É
+  OZONECHARCODE_LE_WITH_CIRCUMFLEX = 0x00CA,  // Ê
+  OZONECHARCODE_LE_WITH_DIAERESIS = 0x00CB,  // Ë
+  OZONECHARCODE_LI_WITH_GRAVE = 0x00CC,  // Ì
+  OZONECHARCODE_LI_WITH_ACUTE = 0x00CD,  // Í
+  OZONECHARCODE_LI_WITH_CIRCUMFLEX = 0x00CE,  // Î
+  OZONECHARCODE_LI_WITH_DIAERESIS = 0x00CF,  // Ï
+  OZONECHARCODE_LETH = 0x00D0,  // Ð
+  OZONECHARCODE_LN_WITH_TILDE =  0x00D1,  // Ñ
+  OZONECHARCODE_LO_WITH_GRAVE = 0x00D2,  // Ò
+  OZONECHARCODE_LO_WITH_ACUTE = 0x00D3,  // Ó
+  OZONECHARCODE_LO_WITH_CIRCUMFLEX = 0x00D4,  // Ô
+  OZONECHARCODE_LO_WITH_TILDE =  0x00D5,  // Õ
+  OZONECHARCODE_LO_WITH_DIAERESIS = 0x00D6,  // Ö
+  OZONECHARCODE_MULTIPLY =  0x00D7,  // ×
+  OZONECHARCODE_LO_WITH_STROKE = 0x00D8,  // Ø
+  OZONECHARCODE_LU_WITH_GRAVE = 0x00D9,  // Ù
+  OZONECHARCODE_LU_WITH_ACUTE = 0x00DA,  // Ú
+  OZONECHARCODE_LU_WITH_CIRCUMFLEX = 0x00DB,  // Û
+  OZONECHARCODE_LU_WITH_DIAERESIS = 0x00DC,  // Ü
+  OZONECHARCODE_LY_WITH_ACUTE =  0x00DD,  // Ý
+  OZONECHARCODE_LTHORN = 0x00DE,  // Þ
+  OZONECHARCODE_LSMALL_SHARP = 0x00DF,  // ß
+  OZONECHARCODE_LSMALL_A_WITH_GRAVE = 0x00E0,  // à
+  OZONECHARCODE_LSMALL_A_WITH_ACUTE = 0x00E1,  // á
+  OZONECHARCODE_LSMALL_A_WITH_CIRCUMFLEX = 0x00E2,  // â
+  OZONECHARCODE_LSMALL_A_WITH_TILDE = 0x00E3,  // ã
+  OZONECHARCODE_LSMALL_A_WITH_DIAERESIS = 0x00E4,  // ä
+  OZONECHARCODE_LSMALL_A_WITH_RINGABOVE = 0x00E5,  // å
+  OZONECHARCODE_LSMALL_AE = 0x00E6,  // æ
+  OZONECHARCODE_LSMALL_C_WITH_CEDILLA = 0x00E7,  // ç
+  OZONECHARCODE_LSMALL_E_WITH_GRAVE = 0x00E8,  // è
+  OZONECHARCODE_LSMALL_E_WITH_ACUTE = 0x00E9,  // é
+  OZONECHARCODE_LSMALL_E_WITH_CIRCUMFLEX = 0x00EA,  // ê
+  OZONECHARCODE_LSMALL_E_WITH_DIAERESIS = 0x00EB,  // ë
+  OZONECHARCODE_LSMALL_I_WITH_GRAVE = 0x00EC,  // ì
+  OZONECHARCODE_LSMALL_I_WITH_ACUTE = 0x00ED,  // í
+  OZONECHARCODE_LSMALL_I_WITH_CIRCUMFLEX = 0x00EE,  // î
+  OZONECHARCODE_LSMALL_I_WITH_DIAERESIS = 0x00EF,  // ï
+  OZONECHARCODE_LSMALL_ETH = 0x00F0,  // ð
+  OZONECHARCODE_LSMALL_N_WITH_TILDE =  0x00F1,  // ñ
+  OZONECHARCODE_LSMALL_O_WITH_GRAVE = 0x00F2,  // ò
+  OZONECHARCODE_LSMALL_O_WITH_ACUTE = 0x00F3,  // ó
+  OZONECHARCODE_LSMALL_O_WITH_CIRCUMFLEX = 0x00F4,  // ô
+  OZONECHARCODE_LSMALL_O_WITH_TILDE =  0x00F5,  // õ
+  OZONECHARCODE_LSMALL_O_WITH_DIAERESIS = 0x00F6,  // ö
+  OZONECHARCODE_DIVISION =  0x00F7,  // ÷
+  OZONECHARCODE_LSMALL_O_WITH_SLASH = 0x00F8,  // ø
+  OZONECHARCODE_LSMALL_U_WITH_GRAVE = 0x00F9,  // ù
+  OZONECHARCODE_LSMALL_U_WITH_ACUTE = 0x00FA,  // ú
+  OZONECHARCODE_LSMALL_U_WITH_CIRCUMFLEX = 0x00FB,  // û
+  OZONECHARCODE_LSMALL_U_WITH_DIAERESIS = 0x00FC,  // ü
+  OZONECHARCODE_LSMALL_Y_WITH_ACUTE =  0x00FD,  // ý
+  OZONECHARCODE_LSMALL_THORN = 0x00FE,  // þ
+  OZONECHARCODE_LSMALL_UY_WITH_DIAERESIS = 0x00FF,  // ÿ
+  OZONECHARCODE_LSMALL_DOT_LESS_I = 0x0131,  // ı
+  OZONECHARCODE_LSMALL_KRA = 0x0138,  // ĸ
+  OZONECHARCODE_LENG = 0x014A,  // Ŋ
+  OZONECHARCODE_LSMALL_ENG = 0x014B,  // ŋ
+  OZONECHARCODE_LOE = 0x00152,  // Œ
+  OZONECHARCODE_LSMALL_OE = 0x0153,  // œ
+  OZONECHARCODE_LSWITH_CARRON = 0x0160,  // Š
+  OZONECHARCODE_LSMALL_S_WITH_CARRON = 0x0161,  // š
+  OZONECHARCODE_LY_WITH_DIAERESIS = 0x0178,  // Ÿ
+  OZONECHARCODE_LSMALL_F_WITH_HOOK = 0x0192,  // ƒ
+  OZONECHARCODE_CARON = 0x02C7,  // ˇ
+  OZONECHARCODE_DOUBLE_ACUTE_ACCENT = 0x02DD,  // ˝
+  OZONECHARCODE_COMBINING_HORN = 0x031B,  // ̛
+  OZONECHARCODE_COMBINING_DOT_BELOW = 0x0323,  // .
+  OZONECHARCODE_COMBINING_DIAERESIS_BELOW = 0x0324,  // ..
+  OZONECHARCODE_ENDASH =  0x2013,  // –
+  OZONECHARCODE_EMDASH =  0x2014,  // —
+  OZONECHARCODE_LEFT_SINGLE_QUOTATION_MARK = 0x2018,  // ‘
+  OZONECHARCODE_RIGHT_SINGLE_QUOTATION_MARK = 0x2019,  // ’
+  OZONECHARCODE_SINGLE_LOW_QUOTATION_MARK = 0x201A,  // ‚
+  OZONECHARCODE_LEFT_DOUBLE_QUOTATION_MARK = 0x201C,  // “
+  OZONECHARCODE_RIGHT_DOUBLE_QUOTATION_MARK = 0x201D,  // ”
+  OZONECHARCODE_DOUBLE_LOW_QUOTATION_MARK = 0x201E,  // „
+  OZONECHARCODE_DAGGER =  0x2020,  // †
+  OZONECHARCODE_DOUBLE_DAGGER = 0x2021,  // ‡
+  OZONECHARCODE_BULLET = 0x2022,  // •
+  OZONECHARCODE_HORIZONTAL_ELLIPSIS = 0x2026,  // …
+  OZONECHARCODE_PER_THOUSAND = 0x2030,  // ‰
+  OZONECHARCODE_EURO = 0x20AC,  // €
+  OZONECHARCODE_TRADEMARK = 0x2122  // ™
+};
+
+// Keys which result in specific Action. The enum is defined as
+// OZONEACTIONKEY_START + VKEY_ defined in keyboard_codes_posix. This is to
+// make it easy in oz-wl side to differentiate between character codes and
+// action keys.
+enum OzoneKeyboardCode {
+  OZONEACTIONKEY_START = 0x111100,
+  OZONEACTIONKEY_BACK = OZONEACTIONKEY_START + ui::VKEY_BACK,
+  OZONEACTIONKEY_TAB = OZONEACTIONKEY_START + ui::VKEY_TAB,
+  OZONEACTIONKEY_BACKTAB = OZONEACTIONKEY_START + ui::VKEY_BACKTAB,
+  OZONEACTIONKEY_CLEAR = OZONEACTIONKEY_START + ui::VKEY_CLEAR,
+  OZONEACTIONKEY_RETURN = OZONEACTIONKEY_START + ui::VKEY_RETURN,
+  OZONEACTIONKEY_SHIFT = OZONEACTIONKEY_START + ui::VKEY_SHIFT,
+  OZONEACTIONKEY_CONTROL = OZONEACTIONKEY_START + ui::VKEY_CONTROL,
+  OZONEACTIONKEY_MENU = OZONEACTIONKEY_START + ui::VKEY_MENU,
+  OZONEACTIONKEY_PAUSE = OZONEACTIONKEY_START + ui::VKEY_PAUSE,
+  OZONEACTIONKEY_CAPITAL = OZONEACTIONKEY_START + ui::VKEY_CAPITAL,
+  OZONEACTIONKEY_KANA = OZONEACTIONKEY_START + ui::VKEY_KANA,
+  OZONEACTIONKEY_HANGUL = OZONEACTIONKEY_START + ui::VKEY_HANGUL,
+  OZONEACTIONKEY_JUNJA = OZONEACTIONKEY_START + ui::VKEY_JUNJA,
+  OZONEACTIONKEY_FINAL = OZONEACTIONKEY_START + ui::VKEY_FINAL,
+  OZONEACTIONKEY_HANJA = OZONEACTIONKEY_START + ui::VKEY_HANJA,
+  OZONEACTIONKEY_KANJI = OZONEACTIONKEY_START + ui::VKEY_KANJI,
+  OZONEACTIONKEY_ESCAPE = OZONEACTIONKEY_START + ui::VKEY_ESCAPE,
+  OZONEACTIONKEY_CONVERT = OZONEACTIONKEY_START + ui::VKEY_CONVERT,
+  OZONEACTIONKEY_NONCONVERT = OZONEACTIONKEY_START + ui::VKEY_NONCONVERT,
+  OZONEACTIONKEY_ACCEPT = OZONEACTIONKEY_START + ui::VKEY_ACCEPT,
+  OZONEACTIONKEY_MODECHANGE = OZONEACTIONKEY_START + ui::VKEY_MODECHANGE,
+  OZONEACTIONKEY_SPACE = OZONEACTIONKEY_START + ui::VKEY_SPACE,
+  OZONEACTIONKEY_PRIOR = OZONEACTIONKEY_START + ui::VKEY_PRIOR,
+  OZONEACTIONKEY_NEXT = OZONEACTIONKEY_START + ui::VKEY_NEXT,
+  OZONEACTIONKEY_END = OZONEACTIONKEY_START + ui::VKEY_END,
+  OZONEACTIONKEY_HOME = OZONEACTIONKEY_START + ui::VKEY_HOME,
+  OZONEACTIONKEY_LEFT = OZONEACTIONKEY_START + ui::VKEY_LEFT,
+  OZONEACTIONKEY_UP = OZONEACTIONKEY_START + ui::VKEY_UP,
+  OZONEACTIONKEY_RIGHT = OZONEACTIONKEY_START + ui::VKEY_RIGHT,
+  OZONEACTIONKEY_DOWN = OZONEACTIONKEY_START + ui::VKEY_DOWN,
+  OZONEACTIONKEY_SELECT = OZONEACTIONKEY_START + ui::VKEY_SELECT,
+  OZONEACTIONKEY_PRINT = OZONEACTIONKEY_START + ui::VKEY_PRINT,
+  OZONEACTIONKEY_EXECUTE = OZONEACTIONKEY_START + ui::VKEY_EXECUTE,
+  OZONEACTIONKEY_SNAPSHOT = OZONEACTIONKEY_START + ui::VKEY_SNAPSHOT,
+  OZONEACTIONKEY_INSERT = OZONEACTIONKEY_START + ui::VKEY_INSERT,
+  OZONEACTIONKEY_DELETE = OZONEACTIONKEY_START + ui::VKEY_DELETE,
+  OZONEACTIONKEY_HELP = OZONEACTIONKEY_START + ui::VKEY_HELP,
+  OZONEACTIONKEY_LWIN = OZONEACTIONKEY_START + ui::VKEY_LWIN,
+  OZONEACTIONKEY_COMMAND = OZONEACTIONKEY_START + ui::VKEY_COMMAND,
+  OZONEACTIONKEY_RWIN = OZONEACTIONKEY_START + ui::VKEY_RWIN,
+  OZONEACTIONKEY_APPS = OZONEACTIONKEY_START + ui::VKEY_APPS,
+  OZONEACTIONKEY_SLEEP = OZONEACTIONKEY_START + ui::VKEY_SLEEP,
+  OZONEACTIONKEY_ADD = OZONEACTIONKEY_START + ui::VKEY_ADD,
+  OZONEACTIONKEY_SEPARATOR = OZONEACTIONKEY_START + ui::VKEY_SEPARATOR,
+  OZONEACTIONKEY_SUBTRACT = OZONEACTIONKEY_START + ui::VKEY_SUBTRACT,
+  OZONEACTIONKEY_DECIMAL = OZONEACTIONKEY_START + ui::VKEY_DECIMAL,
+  OZONEACTIONKEY_DIVIDE = OZONEACTIONKEY_START + ui::VKEY_DIVIDE,
+  OZONEACTIONKEY_F1 = OZONEACTIONKEY_START + ui::VKEY_F1,
+  OZONEACTIONKEY_F2 = OZONEACTIONKEY_START + ui::VKEY_F2,
+  OZONEACTIONKEY_F3 = OZONEACTIONKEY_START + ui::VKEY_F3,
+  OZONEACTIONKEY_F4 = OZONEACTIONKEY_START + ui::VKEY_F4,
+  OZONEACTIONKEY_F5 = OZONEACTIONKEY_START + ui::VKEY_F5,
+  OZONEACTIONKEY_F6 = OZONEACTIONKEY_START + ui::VKEY_F6,
+  OZONEACTIONKEY_F7 = OZONEACTIONKEY_START + ui::VKEY_F7,
+  OZONEACTIONKEY_F8 = OZONEACTIONKEY_START + ui::VKEY_F8,
+  OZONEACTIONKEY_F9 = OZONEACTIONKEY_START + ui::VKEY_F9,
+  OZONEACTIONKEY_F10 = OZONEACTIONKEY_START + ui::VKEY_F10,
+  OZONEACTIONKEY_F11 = OZONEACTIONKEY_START + ui::VKEY_F11,
+  OZONEACTIONKEY_F12 = OZONEACTIONKEY_START + ui::VKEY_F12,
+  OZONEACTIONKEY_F13 = OZONEACTIONKEY_START + ui::VKEY_F13,
+  OZONEACTIONKEY_F14 = OZONEACTIONKEY_START + ui::VKEY_F14,
+  OZONEACTIONKEY_F15 = OZONEACTIONKEY_START + ui::VKEY_F15,
+  OZONEACTIONKEY_F16 = OZONEACTIONKEY_START + ui::VKEY_F16,
+  OZONEACTIONKEY_F17 = OZONEACTIONKEY_START + ui::VKEY_F17,
+  OZONEACTIONKEY_F18 = OZONEACTIONKEY_START + ui::VKEY_F18,
+  OZONEACTIONKEY_F19 = OZONEACTIONKEY_START + ui::VKEY_F19,
+  OZONEACTIONKEY_F20 = OZONEACTIONKEY_START + ui::VKEY_F20,
+  OZONEACTIONKEY_F21 = OZONEACTIONKEY_START + ui::VKEY_F21,
+  OZONEACTIONKEY_F22 = OZONEACTIONKEY_START + ui::VKEY_F22,
+  OZONEACTIONKEY_F23 = OZONEACTIONKEY_START + ui::VKEY_F23,
+  OZONEACTIONKEY_F24 = OZONEACTIONKEY_START + ui::VKEY_F24,
+  OZONEACTIONKEY_NUMLOCK = OZONEACTIONKEY_START + ui::VKEY_NUMLOCK,
+  OZONEACTIONKEY_SCROLL = OZONEACTIONKEY_START + ui::VKEY_SCROLL,
+  OZONEACTIONKEY_WLAN = OZONEACTIONKEY_START + ui::VKEY_WLAN,
+  OZONEACTIONKEY_POWER = OZONEACTIONKEY_START + ui::VKEY_POWER,
+  OZONEACTIONKEY_LSHIFT = OZONEACTIONKEY_START + ui::VKEY_LSHIFT,
+  OZONEACTIONKEY_RSHIFT = OZONEACTIONKEY_START + ui::VKEY_RSHIFT,
+  OZONEACTIONKEY_LCONTROL = OZONEACTIONKEY_START + ui::VKEY_LCONTROL,
+  OZONEACTIONKEY_RCONTROL = OZONEACTIONKEY_START + ui::VKEY_RCONTROL,
+  OZONEACTIONKEY_LMENU = OZONEACTIONKEY_START + ui::VKEY_LMENU,
+  OZONEACTIONKEY_RMENU = OZONEACTIONKEY_START + ui::VKEY_RMENU,
+  OZONEACTIONKEY_BROWSER_BACK = OZONEACTIONKEY_START + ui::VKEY_BROWSER_BACK,
+  OZONEACTIONKEY_BROWSER_FORWARD = OZONEACTIONKEY_START +
+                                     ui::VKEY_BROWSER_FORWARD,
+  OZONEACTIONKEY_BROWSER_REFRESH = OZONEACTIONKEY_START +
+                                     ui::VKEY_BROWSER_REFRESH,
+  OZONEACTIONKEY_BROWSER_STOP = OZONEACTIONKEY_START + ui::VKEY_BROWSER_STOP,
+  OZONEACTIONKEY_BROWSER_SEARCH = OZONEACTIONKEY_START +
+                                    ui::VKEY_BROWSER_SEARCH,
+  OZONEACTIONKEY_BROWSER_FAVORITES = OZONEACTIONKEY_START +
+                                       ui::VKEY_BROWSER_FAVORITES,
+  OZONEACTIONKEY_BROWSER_HOME = OZONEACTIONKEY_START + ui::VKEY_BROWSER_HOME,
+  OZONEACTIONKEY_VOLUME_MUTE = OZONEACTIONKEY_START + ui::VKEY_VOLUME_MUTE,
+  OZONEACTIONKEY_VOLUME_DOWN = OZONEACTIONKEY_START + ui::VKEY_VOLUME_DOWN,
+  OZONEACTIONKEY_VOLUME_UP = OZONEACTIONKEY_START + ui::VKEY_VOLUME_UP,
+  OZONEACTIONKEY_MEDIA_NEXT_TRACK = OZONEACTIONKEY_START +
+                                      ui::VKEY_MEDIA_NEXT_TRACK ,
+  OZONEACTIONKEY_MEDIA_PREV_TRACK = OZONEACTIONKEY_START +
+                                      ui::VKEY_MEDIA_PREV_TRACK,
+  OZONEACTIONKEY_MEDIA_STOP = OZONEACTIONKEY_START + ui::VKEY_MEDIA_STOP,
+  OZONEACTIONKEY_MEDIA_PLAY_PAUSE = OZONEACTIONKEY_START +
+                                      ui::VKEY_MEDIA_PLAY_PAUSE,
+  OZONEACTIONKEY_MEDIA_LAUNCH_MAIL = OZONEACTIONKEY_START +
+                                       ui::VKEY_MEDIA_LAUNCH_MAIL,
+  OZONEACTIONKEY_MEDIA_LAUNCH_MEDIA_SELECT = OZONEACTIONKEY_START
+      +ui::VKEY_MEDIA_LAUNCH_MEDIA_SELECT,
+  OZONEACTIONKEY_MEDIA_LAUNCH_APP1 = OZONEACTIONKEY_START +
+                                       ui::VKEY_MEDIA_LAUNCH_APP1,
+  OZONEACTIONKEY_MEDIA_LAUNCH_APP2 = OZONEACTIONKEY_START +
+                                       ui::VKEY_MEDIA_LAUNCH_APP2,
+  OZONEACTIONKEY_OEM_1 = OZONEACTIONKEY_START + ui::VKEY_OEM_1,
+  OZONEACTIONKEY_OEM_PLUS = OZONEACTIONKEY_START + ui::VKEY_OEM_PLUS,
+  OZONEACTIONKEY_OEM_COMMA = OZONEACTIONKEY_START + ui::VKEY_OEM_COMMA,
+  OZONEACTIONKEY_OEM_MINUS = OZONEACTIONKEY_START + ui::VKEY_OEM_MINUS,
+  OZONEACTIONKEY_OEM_PERIOD = OZONEACTIONKEY_START + ui::VKEY_OEM_PERIOD,
+  OZONEACTIONKEY_OEM_2 = OZONEACTIONKEY_START + ui::VKEY_OEM_2,
+  OZONEACTIONKEY_OEM_3 = OZONEACTIONKEY_START + ui::VKEY_OEM_3,
+  OZONEACTIONKEY_BRIGHTNESS_DOWN = OZONEACTIONKEY_START +
+                                     ui::VKEY_BRIGHTNESS_DOWN,
+  OZONEACTIONKEY_BRIGHTNESS_UP = OZONEACTIONKEY_START + ui::VKEY_BRIGHTNESS_UP,
+  OZONEACTIONKEY_KBD_BRIGHTNESS_DOWN = OZONEACTIONKEY_START +
+                                         ui::VKEY_KBD_BRIGHTNESS_DOWN,
+  OZONEACTIONKEY_OEM_4 = OZONEACTIONKEY_START + ui::VKEY_OEM_4,
+  OZONEACTIONKEY_OEM_5 = OZONEACTIONKEY_START + ui::VKEY_OEM_5,
+  OZONEACTIONKEY_OEM_6 = OZONEACTIONKEY_START + ui::VKEY_OEM_6,
+  OZONEACTIONKEY_OEM_7 = OZONEACTIONKEY_START + ui::VKEY_OEM_7,
+  OZONEACTIONKEY_OEM_8 = OZONEACTIONKEY_START + ui::VKEY_OEM_8,
+  OZONEACTIONKEY_ALTGR = OZONEACTIONKEY_START + ui::VKEY_ALTGR,
+  OZONEACTIONKEY_OEM_102 = OZONEACTIONKEY_START + ui::VKEY_OEM_102,
+  OZONEACTIONKEY_OEM_103 = OZONEACTIONKEY_START + ui::VKEY_OEM_103,
+  OZONEACTIONKEY_OEM_104 = OZONEACTIONKEY_START + ui::VKEY_OEM_104,
+  OZONEACTIONKEY_PROCESSKEY = OZONEACTIONKEY_START + ui::VKEY_PROCESSKEY,
+  OZONEACTIONKEY_COMPOSE = OZONEACTIONKEY_START + 0xE6,
+  OZONEACTIONKEY_PACKET = OZONEACTIONKEY_START + ui::VKEY_PACKET,
+  OZONEACTIONKEY_KBD_BRIGHTNESS_UP = OZONEACTIONKEY_START +
+                                       ui::VKEY_KBD_BRIGHTNESS_UP,
+  OZONEACTIONKEY_DBE_SBCSCHAR = OZONEACTIONKEY_START + ui::VKEY_DBE_SBCSCHAR,
+  OZONEACTIONKEY_DBE_DBCSCHAR = OZONEACTIONKEY_START + ui::VKEY_DBE_DBCSCHAR,
+  OZONEACTIONKEY_ATTN = OZONEACTIONKEY_START + ui::VKEY_ATTN,
+  OZONEACTIONKEY_CRSEL = OZONEACTIONKEY_START + ui::VKEY_CRSEL,
+  OZONEACTIONKEY_EXSEL = OZONEACTIONKEY_START + ui::VKEY_EXSEL,
+  OZONEACTIONKEY_EREOF = OZONEACTIONKEY_START + ui::VKEY_EREOF,
+  OZONEACTIONKEY_PLAY = OZONEACTIONKEY_START + ui::VKEY_PLAY,
+  OZONEACTIONKEY_ZOOM = OZONEACTIONKEY_START + ui::VKEY_ZOOM,
+  OZONEACTIONKEY_NONAME = OZONEACTIONKEY_START + ui::VKEY_NONAME,
+  OZONEACTIONKEY_PA1 = OZONEACTIONKEY_START + ui::VKEY_PA1,
+  OZONEACTIONKEY_OEM_CLEAR = OZONEACTIONKEY_START + ui::VKEY_OEM_CLEAR
+};
+
+}  // namespace ui
+
+#endif  // OZONE_UI_EVENTS_KEYBOARD_CODES_OZONE_H_
--- /dev/null
+++ b/ui/events/keyboard_engine_xkb.cc
@@ -0,0 +1,628 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/ui/events/keyboard_engine_xkb.h"
+
+#include <sys/mman.h>
+
+#include "base/strings/stringprintf.h"
+#include "ozone/ui/events/keyboard_codes_ozone.h"
+#include "ui/events/event.h"
+
+namespace ui {
+
+KeyboardEngineXKB::KeyboardEngineXKB() : keyboard_modifiers_(0),
+    mods_depressed_(0),
+    mods_latched_(0),
+    mods_locked_(0),
+    group_(0),
+    last_key_(-1),
+    last_modifiers_(0),
+    cached_sym_(XKB_KEY_NoSymbol),
+    keymap_(NULL),
+    state_(NULL),
+    context_(NULL) {
+}
+
+KeyboardEngineXKB::~KeyboardEngineXKB() {
+  FiniXKB();
+}
+
+void KeyboardEngineXKB::OnKeyboardKeymap(int fd, uint32_t size) {
+  char *map_str =
+      reinterpret_cast<char*>(mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0));
+  if (map_str == MAP_FAILED)
+    return;
+
+  InitXKB();
+  keymap_ = xkb_map_new_from_string(context_,
+                                    map_str,
+                                    XKB_KEYMAP_FORMAT_TEXT_V1,
+                                    (xkb_map_compile_flags)0);
+  munmap(map_str, size);
+  if (!keymap_)
+    return;
+
+  state_ = xkb_state_new(keymap_);
+  if (state_) {
+    xkb_map_unref(keymap_);
+    keymap_ = NULL;
+  }
+}
+
+void KeyboardEngineXKB::OnKeyModifiers(uint32_t mods_depressed,
+                                        uint32_t mods_latched,
+                                        uint32_t mods_locked,
+                                        uint32_t group) {
+  if (!state_)
+    return;
+
+  if ((mods_depressed_ == mods_depressed) && (mods_locked_ == mods_locked)
+      && (mods_latched_ == mods_latched) && (group_ == group)) {
+    return;
+  }
+
+  mods_depressed_ = mods_depressed;
+  mods_locked_ = mods_locked;
+  mods_latched_ = mods_latched;
+  group_ = group;
+  xkb_state_update_mask(state_,
+                        mods_depressed_,
+                        mods_latched_,
+                        mods_locked_,
+                        0,
+                        0,
+                        group_);
+
+  keyboard_modifiers_ = 0;
+  if (xkb_state_mod_name_is_active(
+      state_, XKB_MOD_NAME_SHIFT, XKB_STATE_MODS_EFFECTIVE))
+    keyboard_modifiers_ |= ui::EF_SHIFT_DOWN;
+
+  if (xkb_state_mod_name_is_active(
+      state_, XKB_MOD_NAME_CTRL, XKB_STATE_MODS_EFFECTIVE))
+    keyboard_modifiers_ |= ui::EF_CONTROL_DOWN;
+
+  if (xkb_state_mod_name_is_active(
+      state_, XKB_MOD_NAME_ALT, XKB_STATE_MODS_EFFECTIVE))
+    keyboard_modifiers_ |= ui::EF_ALT_DOWN;
+
+  if (xkb_state_mod_name_is_active(
+      state_, XKB_MOD_NAME_CAPS, XKB_STATE_MODS_EFFECTIVE))
+    keyboard_modifiers_ |= ui::EF_CAPS_LOCK_DOWN;
+}
+
+KeyboardCode
+KeyboardEngineXKB::KeyboardCodeFromNativeKeysym(unsigned hardwarecode) {
+  if (hardwarecode == last_key_ && last_modifiers_ ==  keyboard_modifiers_)
+    return cached_keyboard_code_;
+
+  unsigned keysym = ConvertKeyCodeFromEvdev(hardwarecode);
+  if (keysym >= OZONECHARCODE_a && keysym <= OZONECHARCODE_z) {
+    cached_keyboard_code_ = static_cast<KeyboardCode>(OZONECHARCODE_A +
+                                (keysym - OZONECHARCODE_a));
+  }
+
+  // Check if it's an alphabet or number we can directly cast it in this case.
+  if ((keysym >= OZONECHARCODE_A && keysym <= OZONECHARCODE_Z) ||
+       (keysym >= OZONECHARCODE_0 && keysym <= OZONECHARCODE_9))
+    cached_keyboard_code_ = static_cast<KeyboardCode>(keysym);
+
+  if (keysym >= OZONEACTIONKEY_BACK && keysym <= OZONEACTIONKEY_OEM_CLEAR)
+    cached_keyboard_code_ =
+        static_cast<KeyboardCode>(keysym - OZONEACTIONKEY_START);
+
+  if (keysym >= OZONECHARCODE_FILE_SEPARATOR &&
+       keysym <= OZONECHARCODE_TRADEMARK)
+    cached_keyboard_code_ = VKEY_OEM_102;
+
+  // Empty KeyCode.
+  if (keysym == OZONECHARCODE_NULL) {
+    cached_keyboard_code_ = VKEY_UNKNOWN;
+    DLOG(WARNING) << "Unknown keysym: " << base::StringPrintf("0x%x", keysym);
+  }
+
+  cached_character_code_ = EvaluateCharacterCodeFromNativeKeySym(
+                               keysym, keyboard_modifiers_);
+  return cached_keyboard_code_;
+}
+
+uint16 KeyboardEngineXKB::CharacterCodeFromNativeKeySym(unsigned hardwarecode,
+                                                        unsigned flags) {
+  if (hardwarecode == last_key_ && flags == last_modifiers_ &&
+      last_modifiers_ ==  keyboard_modifiers_) {
+    return cached_character_code_;
+  }
+
+  cached_character_code_ = EvaluateCharacterCodeFromNativeKeySym(
+                               ConvertKeyCodeFromEvdev(hardwarecode), flags);
+
+  return cached_character_code_;
+}
+
+uint16
+KeyboardEngineXKB::EvaluateCharacterCodeFromNativeKeySym(unsigned sym,
+                                                         unsigned flags) {
+  const bool ctrl = (flags & EF_CONTROL_DOWN) != 0;
+
+  // Other ctrl characters
+  if (ctrl) {
+    unsigned keysym = sym;
+    if (keysym >= OZONECHARCODE_a && keysym <= OZONECHARCODE_z)
+      keysym = OZONECHARCODE_A + (keysym - OZONECHARCODE_a);
+
+    if (keysym >= OZONECHARCODE_A && keysym <= OZONECHARCODE_Z)
+      return keysym - OZONECHARCODE_A + 1;
+
+    if ((flags & EF_SHIFT_DOWN) != 0) {
+      // following graphics chars require shift key to input.
+      switch (keysym) {
+        // ctrl-@ maps to \x00 (Null byte)
+        case OZONECHARCODE_AT:
+          return OZONECHARCODE_NULL;
+        // ctrl-^ maps to \x1E (Record separator, Information separator two)
+        case OZONECHARCODE_CARET_CIRCUMFLEX:
+          return OZONECHARCODE_RECORD_SEPARATOR;
+        // ctrl-_ maps to \x1F (Unit separator, Information separator one)
+        case OZONECHARCODE_MINUS:
+        case OZONECHARCODE_UNDER_SCORE:
+          return OZONECHARCODE_UNIT_SEPARATOR;
+        default:
+          return OZONECHARCODE_NULL;
+      }
+    } else {
+      switch (keysym) {
+        // ctrl-[ maps to \x1B (Escape)
+        case OZONECHARCODE_LEFT_BRACKET:
+          return OZONECHARCODE_ESCAPE;
+        // ctrl-\ maps to \x1C (File separator, Information separator four)
+        case OZONECHARCODE_BACK_SLASH:
+          return OZONECHARCODE_FILE_SEPARATOR;
+        // ctrl-] maps to \x1D (Group separator, Information separator three)
+        case OZONECHARCODE_RIGHT_BRACKET:
+          return OZONECHARCODE_GROUP_SEPARATOR;
+        // ctrl-Enter maps to \x0A (Line feed)
+        case OZONECHARCODE_RETURN:
+          return OZONECHARCODE_LINEFEED;
+        default:
+          return OZONECHARCODE_NULL;
+      }
+    }
+  }
+
+  if ((sym >= OZONECHARCODE_a && sym <= OZONECHARCODE_z) ||
+       (sym >= OZONECHARCODE_A && sym <= OZONECHARCODE_Z) ||
+         (sym >= OZONECHARCODE_0 && sym <= OZONECHARCODE_9))
+    return sym;
+
+  if (sym >= OZONEACTIONKEY_BACK && sym <= OZONEACTIONKEY_OEM_CLEAR) {
+    switch (sym) {
+      case OZONEACTIONKEY_TAB:
+        return OZONECHARCODE_TAB;
+      case OZONEACTIONKEY_ESCAPE:
+        return OZONECHARCODE_ESCAPE;
+      case OZONEACTIONKEY_RETURN:
+        return OZONECHARCODE_RETURN;
+      case OZONEACTIONKEY_SPACE:
+        return OZONECHARCODE_SPACE;
+      case OZONEACTIONKEY_BACK:
+        return OZONECHARCODE_BACKSPACE;
+        break;
+      default:
+        return OZONECHARCODE_NULL;
+    }
+  }
+
+  return sym;
+}
+
+unsigned KeyboardEngineXKB::ConvertKeyCodeFromEvdev(unsigned hardwarecode) {
+  const xkb_keysym_t *syms;
+  xkb_keysym_t sym;
+  uint32_t code = hardwarecode + 8;
+  uint32_t num_syms = xkb_key_get_syms(state_, code, &syms);
+  if (num_syms == 1)
+    sym = syms[0];
+  else
+    sym = XKB_KEY_NoSymbol;
+
+  last_key_ = hardwarecode;
+  last_modifiers_ =  keyboard_modifiers_;
+  cached_sym_ = sym;
+  NormalizeKey();
+
+  return cached_sym_;
+}
+
+void KeyboardEngineXKB::InitXKB() {
+  if (context_)
+    return;
+
+  context_ = xkb_context_new((xkb_context_flags)0);
+}
+
+void KeyboardEngineXKB::FiniXKB() {
+  if (state_) {
+    xkb_state_unref(state_);
+    state_ = NULL;
+  }
+
+  if (keymap_) {
+    xkb_map_unref(keymap_);
+    keymap_ = NULL;
+  }
+
+  if (context_) {
+    xkb_context_unref(context_);
+    context_ = NULL;
+  }
+}
+
+bool KeyboardEngineXKB::IsOnlyCapsLocked() const {
+  if ((keyboard_modifiers_ & ui::EF_CONTROL_DOWN) != 0)
+    return false;
+
+  if ((keyboard_modifiers_ & ui::EF_ALT_DOWN) != 0)
+    return false;
+
+  if ((keyboard_modifiers_ & ui::EF_SHIFT_DOWN) != 0)
+    return false;
+
+  return true;
+}
+
+void KeyboardEngineXKB::NormalizeKey() {
+  if ((cached_sym_ >= XKB_KEY_A && cached_sym_ <= XKB_KEY_Z) ||
+       (cached_sym_ >= XKB_KEY_a && cached_sym_ <= XKB_KEY_z) ||
+         (cached_sym_ >= XKB_KEY_0 && cached_sym_ <= XKB_KEY_9))
+    return;
+
+  if (cached_sym_ >= XKB_KEY_KP_0 && cached_sym_ <= XKB_KEY_KP_9) {
+    // Numpad Number-keys can be represented by a keysym value of 0-9 nos.
+    cached_sym_ = XKB_KEY_0 + (cached_sym_ - XKB_KEY_KP_0);
+  } else if (cached_sym_ > 0x01000100 && cached_sym_ < 0x01ffffff) {
+    // Any UCS character in this range will simply be the character's
+    // Unicode number plus 0x01000000.
+    cached_sym_ = cached_sym_ - 0x001000000;
+  } else if (cached_sym_ >= XKB_KEY_F1 && cached_sym_ <= XKB_KEY_F24) {
+    cached_sym_ = ui::OZONEACTIONKEY_F1 + (cached_sym_ - XKB_KEY_F1);
+  } else if (cached_sym_ >= XKB_KEY_KP_F1 && cached_sym_ <= XKB_KEY_KP_F4) {
+      cached_sym_ = ui::OZONEACTIONKEY_F1 + (cached_sym_ - XKB_KEY_KP_F1);
+  } else {
+      switch (cached_sym_) {
+        case XKB_KEY_dead_circumflex:
+          cached_sym_ = ui::OZONECHARCODE_CARET_CIRCUMFLEX;
+          break;
+        case XKB_KEY_dead_diaeresis:
+          cached_sym_ = ui::OZONECHARCODE_SPACING_DIAERESIS;
+          break;
+        case XKB_KEY_dead_perispomeni:
+          cached_sym_ = ui::OZONECHARCODE_TILDE;
+          break;
+        case XKB_KEY_dead_acute:
+          cached_sym_ = ui::OZONECHARCODE_SPACING_ACUTE;
+          break;
+        case XKB_KEY_dead_grave:
+          cached_sym_ = ui::OZONECHARCODE_GRAVE_ASSCENT;
+          break;
+        case XKB_KEY_endash:
+          cached_sym_ = ui::OZONECHARCODE_ENDASH;
+          break;
+        case XKB_KEY_singlelowquotemark:
+          cached_sym_ = ui::OZONECHARCODE_SINGLE_LOW_QUOTATION_MARK;
+          break;
+        case XKB_KEY_dead_cedilla:
+          cached_sym_ = ui::OZONECHARCODE_SPACING_CEDILLA;
+          break;
+        case XKB_KEY_KP_Equal:
+          cached_sym_ = ui::OZONECHARCODE_EQUAL;
+          break;
+        case XKB_KEY_KP_Multiply:
+          cached_sym_ = ui::OZONECHARCODE_MULTIPLY;
+          break;
+        case XKB_KEY_KP_Add:
+          cached_sym_ = ui::OZONECHARCODE_PLUS;
+          break;
+        case XKB_KEY_KP_Separator:
+          cached_sym_ = ui::OZONECHARCODE_COMMA;
+          break;
+        case XKB_KEY_KP_Subtract:
+          cached_sym_ = ui::OZONECHARCODE_MINUS;
+          break;
+        case XKB_KEY_KP_Decimal:
+          cached_sym_ = ui::OZONECHARCODE_PERIOD;
+          break;
+        case XKB_KEY_KP_Divide:
+          cached_sym_ = ui::OZONECHARCODE_DIVISION;
+          break;
+        case XKB_KEY_Delete:
+        case XKB_KEY_KP_Delete:
+          cached_sym_ = ui::OZONEACTIONKEY_DELETE;
+          break;
+        case XKB_KEY_KP_Tab:
+        case XKB_KEY_ISO_Left_Tab:
+        case XKB_KEY_Tab:
+        case XKB_KEY_3270_BackTab:
+          cached_sym_ = ui::OZONEACTIONKEY_TAB;
+          break;
+        case XKB_KEY_Sys_Req:
+        case XKB_KEY_Escape:
+          cached_sym_ = ui::OZONEACTIONKEY_ESCAPE;
+          break;
+        case XKB_KEY_Linefeed:
+          cached_sym_ = ui::OZONECHARCODE_LINEFEED;
+          break;
+        case XKB_KEY_Return:
+        case XKB_KEY_KP_Enter:
+        case XKB_KEY_ISO_Enter:
+          cached_sym_ = ui::OZONEACTIONKEY_RETURN;
+          break;
+        case XKB_KEY_KP_Space:
+        case XKB_KEY_space:
+          cached_sym_ = ui::OZONEACTIONKEY_SPACE;
+          break;
+        case XKB_KEY_dead_caron:
+          cached_sym_ = ui::OZONECHARCODE_CARON;
+          break;
+        case XKB_KEY_BackSpace:
+          cached_sym_ = ui::OZONEACTIONKEY_BACK;
+          break;
+        case XKB_KEY_dead_doubleacute:
+          cached_sym_ = ui::OZONECHARCODE_DOUBLE_ACUTE_ACCENT;
+          break;
+        case XKB_KEY_dead_horn:
+          cached_sym_ = ui::OZONECHARCODE_COMBINING_HORN;
+          break;
+        case XKB_KEY_oe:
+          cached_sym_ = ui::OZONECHARCODE_LSMALL_OE;
+          break;
+        case XKB_KEY_OE:
+          cached_sym_ = ui::OZONECHARCODE_LOE;
+          break;
+        case XKB_KEY_idotless:
+          cached_sym_ = ui::OZONECHARCODE_LSMALL_DOT_LESS_I;
+          break;
+        case XKB_KEY_kra:
+          cached_sym_ = ui::OZONECHARCODE_LSMALL_KRA;
+          break;
+        case XKB_KEY_dead_stroke:
+          cached_sym_ = ui::OZONECHARCODE_MINUS;
+          break;
+        case XKB_KEY_eng:
+          cached_sym_ = ui::OZONECHARCODE_LSMALL_ENG;
+          break;
+        case XKB_KEY_ENG:
+          cached_sym_ = ui::OZONECHARCODE_LENG;
+          break;
+        case XKB_KEY_leftsinglequotemark:
+          cached_sym_ = ui::OZONECHARCODE_LEFT_SINGLE_QUOTATION_MARK;
+          break;
+        case XKB_KEY_rightsinglequotemark:
+          cached_sym_ = ui::OZONECHARCODE_RIGHT_SINGLE_QUOTATION_MARK;
+          break;
+        case XKB_KEY_dead_belowdot:
+          cached_sym_ = ui::OZONECHARCODE_COMBINING_DOT_BELOW;
+          break;
+        case XKB_KEY_dead_belowdiaeresis:
+          cached_sym_ = ui::OZONECHARCODE_COMBINING_DIAERESIS_BELOW;
+          break;
+        case XKB_KEY_Clear:
+        case XKB_KEY_KP_Begin:
+          cached_sym_ = ui::OZONEACTIONKEY_CLEAR;
+          break;
+        case XKB_KEY_Home:
+        case XKB_KEY_KP_Home:
+          cached_sym_ = ui::OZONEACTIONKEY_HOME;
+          break;
+        case XKB_KEY_End:
+        case XKB_KEY_KP_End:
+          cached_sym_ = ui::OZONEACTIONKEY_END;
+          break;
+        case XKB_KEY_Page_Up:
+        case XKB_KEY_KP_Page_Up:  // aka XKB_KEY_KP_Prior
+          cached_sym_ = ui::OZONEACTIONKEY_PRIOR;
+          break;
+        case XKB_KEY_Page_Down:
+        case XKB_KEY_KP_Page_Down:  // aka XKB_KEY_KP_Next
+          cached_sym_ = ui::OZONEACTIONKEY_NEXT;
+          break;
+        case XKB_KEY_Left:
+        case XKB_KEY_KP_Left:
+          cached_sym_ = ui::OZONEACTIONKEY_LEFT;
+          break;
+        case XKB_KEY_Right:
+        case XKB_KEY_KP_Right:
+          cached_sym_ = ui::OZONEACTIONKEY_RIGHT;
+          break;
+        case XKB_KEY_Down:
+        case XKB_KEY_KP_Down:
+          cached_sym_ = ui::OZONEACTIONKEY_DOWN;
+          break;
+        case XKB_KEY_Up:
+        case XKB_KEY_KP_Up:
+          cached_sym_ = ui::OZONEACTIONKEY_UP;
+          break;
+        case XKB_KEY_Kana_Lock:
+        case XKB_KEY_Kana_Shift:
+          cached_sym_ = ui::OZONEACTIONKEY_KANA;
+          break;
+        case XKB_KEY_Hangul:
+          cached_sym_ = ui::OZONEACTIONKEY_HANGUL;
+          break;
+        case XKB_KEY_Hangul_Hanja:
+          cached_sym_ = ui::OZONEACTIONKEY_HANJA;
+          break;
+        case XKB_KEY_Kanji:
+          cached_sym_ = ui::OZONEACTIONKEY_KANJI;
+          break;
+        case XKB_KEY_Henkan:
+          cached_sym_ = ui::OZONEACTIONKEY_CONVERT;
+          break;
+        case XKB_KEY_Muhenkan:
+          cached_sym_ = ui::OZONEACTIONKEY_NONCONVERT;
+          break;
+        case XKB_KEY_Zenkaku_Hankaku:
+          cached_sym_ = ui::OZONEACTIONKEY_DBE_DBCSCHAR;
+          break;
+        case XKB_KEY_ISO_Level5_Shift:
+          cached_sym_ = ui::OZONEACTIONKEY_OEM_8;
+          break;
+        case XKB_KEY_Shift_L:
+        case XKB_KEY_Shift_R:
+          cached_sym_ = ui::OZONEACTIONKEY_SHIFT;
+          break;
+        case XKB_KEY_Control_L:
+        case XKB_KEY_Control_R:
+          cached_sym_ = ui::OZONEACTIONKEY_CONTROL;
+          break;
+        case XKB_KEY_Meta_L:
+        case XKB_KEY_Meta_R:
+        case XKB_KEY_Alt_L:
+        case XKB_KEY_Alt_R:
+          cached_sym_ = ui::OZONEACTIONKEY_MENU;
+          break;
+        case XKB_KEY_ISO_Level3_Shift:
+          cached_sym_ = ui::OZONEACTIONKEY_ALTGR;
+          break;
+        case XKB_KEY_Multi_key:
+          cached_sym_ = 0xE6;
+          break;
+        case XKB_KEY_Pause:
+          cached_sym_ = ui::OZONEACTIONKEY_PAUSE;
+          break;
+        case XKB_KEY_Caps_Lock:
+          cached_sym_ = ui::OZONEACTIONKEY_CAPITAL;
+          break;
+        case XKB_KEY_Num_Lock:
+          cached_sym_ = ui::OZONEACTIONKEY_NUMLOCK;
+          break;
+        case XKB_KEY_Scroll_Lock:
+          cached_sym_ = ui::OZONEACTIONKEY_SCROLL;
+          break;
+        case XKB_KEY_Select:
+          cached_sym_ = ui::OZONEACTIONKEY_SELECT;
+          break;
+        case XKB_KEY_Print:
+          cached_sym_ = ui::OZONEACTIONKEY_PRINT;
+          break;
+        case XKB_KEY_Execute:
+          cached_sym_ = ui::OZONEACTIONKEY_EXECUTE;
+          break;
+        case XKB_KEY_Insert:
+        case XKB_KEY_KP_Insert:
+          cached_sym_ = ui::OZONEACTIONKEY_INSERT;
+          break;
+        case XKB_KEY_Help:
+          cached_sym_ = ui::OZONEACTIONKEY_HELP;
+          break;
+        case XKB_KEY_Super_L:
+          cached_sym_ = ui::OZONEACTIONKEY_LWIN;
+          break;
+        case XKB_KEY_Super_R:
+          cached_sym_ = ui::OZONEACTIONKEY_RWIN;
+          break;
+        case XKB_KEY_Menu:
+          cached_sym_ = ui::OZONEACTIONKEY_APPS;
+          break;
+        case XKB_KEY_XF86Tools:
+          cached_sym_ = ui::OZONEACTIONKEY_F13;
+          break;
+        case XKB_KEY_XF86Launch5:
+          cached_sym_ = ui::OZONEACTIONKEY_F14;
+          break;
+        case XKB_KEY_XF86Launch6:
+          cached_sym_ = ui::OZONEACTIONKEY_F15;
+          break;
+        case XKB_KEY_XF86Launch7:
+          cached_sym_ = ui::OZONEACTIONKEY_F16;
+          break;
+        case XKB_KEY_XF86Launch8:
+          cached_sym_ = ui::OZONEACTIONKEY_F17;
+          break;
+        case XKB_KEY_XF86Launch9:
+          cached_sym_ = ui::OZONEACTIONKEY_F18;
+          break;
+
+        // For supporting multimedia buttons on a USB keyboard.
+        case XKB_KEY_XF86Back:
+          cached_sym_ = ui::OZONEACTIONKEY_BROWSER_BACK;
+          break;
+        case XKB_KEY_XF86Forward:
+          cached_sym_ = ui::OZONEACTIONKEY_BROWSER_FORWARD;
+          break;
+        case XKB_KEY_XF86Reload:
+          cached_sym_ = ui::OZONEACTIONKEY_BROWSER_REFRESH;
+          break;
+        case XKB_KEY_XF86Stop:
+          cached_sym_ = ui::OZONEACTIONKEY_BROWSER_STOP;
+          break;
+        case XKB_KEY_XF86Search:
+          cached_sym_ = ui::OZONEACTIONKEY_BROWSER_SEARCH;
+          break;
+        case XKB_KEY_XF86Favorites:
+          cached_sym_ = ui::OZONEACTIONKEY_BROWSER_FAVORITES;
+          break;
+        case XKB_KEY_XF86HomePage:
+          cached_sym_ = ui::OZONEACTIONKEY_BROWSER_HOME;
+          break;
+        case XKB_KEY_XF86AudioMute:
+          cached_sym_ = ui::OZONEACTIONKEY_VOLUME_MUTE;
+          break;
+        case XKB_KEY_XF86AudioLowerVolume:
+          cached_sym_ = ui::OZONEACTIONKEY_VOLUME_DOWN;
+          break;
+        case XKB_KEY_XF86AudioRaiseVolume:
+          cached_sym_ = ui::OZONEACTIONKEY_VOLUME_UP;
+          break;
+        case XKB_KEY_XF86AudioNext:
+          cached_sym_ = ui::OZONEACTIONKEY_MEDIA_NEXT_TRACK;
+          break;
+        case XKB_KEY_XF86AudioPrev:
+          cached_sym_ = ui::OZONEACTIONKEY_MEDIA_PREV_TRACK;
+          break;
+        case XKB_KEY_XF86AudioStop:
+          cached_sym_ = ui::OZONEACTIONKEY_MEDIA_STOP;
+          break;
+        case XKB_KEY_XF86AudioPlay:
+          cached_sym_ = ui::OZONEACTIONKEY_MEDIA_PLAY_PAUSE;
+          break;
+        case XKB_KEY_XF86Mail:
+          cached_sym_ = ui::OZONEACTIONKEY_MEDIA_LAUNCH_MAIL;
+          break;
+        case XKB_KEY_XF86LaunchA:
+          cached_sym_ = ui::OZONEACTIONKEY_MEDIA_LAUNCH_APP1;
+          break;
+        case XKB_KEY_XF86LaunchB:
+        case XKB_KEY_XF86Calculator:
+          cached_sym_ = ui::OZONEACTIONKEY_MEDIA_LAUNCH_APP2;
+          break;
+        case XKB_KEY_XF86WLAN:
+          cached_sym_ = ui::OZONEACTIONKEY_WLAN;
+          break;
+        case XKB_KEY_XF86PowerOff:
+          cached_sym_ = ui::OZONEACTIONKEY_POWER;
+          break;
+        case XKB_KEY_XF86MonBrightnessDown:
+          cached_sym_ = ui::OZONEACTIONKEY_BRIGHTNESS_DOWN;
+          break;
+        case XKB_KEY_XF86MonBrightnessUp:
+          cached_sym_ = ui::OZONEACTIONKEY_BRIGHTNESS_UP;
+          break;
+        case XKB_KEY_XF86KbdBrightnessDown:
+          cached_sym_ = ui::OZONEACTIONKEY_KBD_BRIGHTNESS_DOWN;
+          break;
+        case XKB_KEY_XF86KbdBrightnessUp:
+          cached_sym_ = ui::OZONEACTIONKEY_KBD_BRIGHTNESS_UP;
+          break;
+        case XKB_KEY_emptyset:
+        case XKB_KEY_NoSymbol:
+          cached_sym_ = ui::OZONECHARCODE_NULL;
+          break;
+        default:
+          break;
+    }
+  }
+}
+
+}  // namespace ui
--- /dev/null
+++ b/ui/events/keyboard_engine_xkb.h
@@ -0,0 +1,69 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_UI_EVENTS_INPUT_KEYBOARD_ENGINE_XKB_H_
+#define OZONE_UI_EVENTS_INPUT_KEYBOARD_ENGINE_XKB_H_
+
+#include <xkbcommon/xkbcommon.h>
+
+#include "base/basictypes.h"
+#include "ozone/platform/ozone_export_wayland.h"
+#include "ozone/ui/events/keyboard_codes_ozone.h"
+
+namespace ui {
+
+class KeyboardEngineXKB {
+ public:
+  KeyboardEngineXKB();
+  ~KeyboardEngineXKB();
+
+  void OnKeyboardKeymap(int fd, uint32_t size);
+  void OnKeyModifiers(uint32_t mods_depressed,
+                      uint32_t mods_latched,
+                      uint32_t mods_locked,
+                      uint32_t group);
+
+  KeyboardCode KeyboardCodeFromNativeKeysym(unsigned hardwarecode);
+  uint16 CharacterCodeFromNativeKeySym(unsigned sym,
+                                       unsigned flags);
+
+  uint32_t GetKeyBoardModifiers() const { return keyboard_modifiers_; }
+
+  KeyboardCode GetLastKeyboardCode() { return cached_keyboard_code_; }
+
+  uint16 GetLastCharacterCode() { return cached_character_code_; }
+
+ private:
+  void InitXKB();
+  void FiniXKB();
+  bool IsOnlyCapsLocked() const;
+  void NormalizeKey();
+  unsigned ConvertKeyCodeFromEvdev(unsigned hardwarecode);
+  uint16 EvaluateCharacterCodeFromNativeKeySym(unsigned hardwarecode,
+                                               unsigned flags);
+
+  // Keeps track of the currently active keyboard modifiers. We keep this
+  // since we want to advertise keyboard modifiers with mouse events.
+  uint32_t keyboard_modifiers_;
+  uint32_t mods_depressed_;
+  uint32_t mods_latched_;
+  uint32_t mods_locked_;
+  uint32_t group_;
+  int last_key_;
+  uint32_t last_modifiers_;
+  xkb_keysym_t cached_sym_;
+  KeyboardCode cached_keyboard_code_;
+  uint16 cached_character_code_;
+
+  // keymap used to transform keyboard events.
+  struct xkb_keymap *keymap_;
+  struct xkb_state *state_;
+  struct xkb_context *context_;
+
+  DISALLOW_COPY_AND_ASSIGN(KeyboardEngineXKB);
+};
+
+}  // namespace ui
+
+#endif  // OZONE_UI_EVENTS_INPUT_KEYBOARD_ENGINE_XKB_H_
--- /dev/null
+++ b/ui/events/output_change_observer.h
@@ -0,0 +1,26 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_UI_EVENTS_OUTPUT_CHANGE_OBSERVER_H_
+#define OZONE_UI_EVENTS_OUTPUT_CHANGE_OBSERVER_H_
+
+#include "ozone/platform/ozone_export_wayland.h"
+
+namespace ui {
+
+// A simple observer interface for all clients interested in receiving various
+// output change notifications like size changes, when a new output is added,
+// etc.
+class OZONE_WAYLAND_EXPORT OutputChangeObserver {
+ public:
+  // Called when the current output size has changed.
+  virtual void OnOutputSizeChanged(unsigned width, unsigned height) = 0;
+
+ protected:
+  virtual ~OutputChangeObserver() {}
+};
+
+}  // namespace ui
+
+#endif  // OZONE_UI_EVENTS_OUPUT_CHANGE_OBSERVER_H_
--- /dev/null
+++ b/ui/events/remote_event_dispatcher.cc
@@ -0,0 +1,146 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/ui/events/remote_event_dispatcher.h"
+
+#include "base/bind.h"
+#include "ozone/ui/public/messages.h"
+
+namespace ui {
+
+RemoteEventDispatcher::RemoteEventDispatcher()
+    : EventConverterOzoneWayland(),
+      sender_(NULL) {
+}
+
+RemoteEventDispatcher::~RemoteEventDispatcher() {
+}
+
+void RemoteEventDispatcher::ChannelEstablished(IPC::Sender* sender) {
+  loop_ = base::MessageLoop::current();
+  sender_ = sender;
+}
+
+void RemoteEventDispatcher::MotionNotify(float x, float y) {
+  Dispatch(new WaylandInput_MotionNotify(x, y));
+}
+
+void RemoteEventDispatcher::ButtonNotify(unsigned handle,
+                                         ui::EventType type,
+                                         ui::EventFlags flags,
+                                         float x,
+                                         float y) {
+  Dispatch(new WaylandInput_ButtonNotify(handle, type, flags, x, y));
+}
+
+void RemoteEventDispatcher::AxisNotify(float x,
+                                       float y,
+                                       int xoffset,
+                                       int yoffset) {
+  Dispatch(new WaylandInput_AxisNotify(x, y, xoffset, yoffset));
+}
+
+void RemoteEventDispatcher::PointerEnter(unsigned handle,
+                                         float x,
+                                         float y) {
+  Dispatch(new WaylandInput_PointerEnter(handle, x, y));
+}
+
+void RemoteEventDispatcher::PointerLeave(unsigned handle,
+                                         float x,
+                                         float y) {
+  Dispatch(new WaylandInput_PointerLeave(handle, x, y));
+}
+
+void RemoteEventDispatcher::KeyNotify(ui::EventType type,
+                                      unsigned code) {
+  Dispatch(new WaylandInput_KeyNotify(type, code));
+}
+
+void RemoteEventDispatcher::VirtualKeyNotify(ui::EventType type,
+                                             uint32_t key,
+                                             uint32_t modifiers) {
+  Dispatch(new WaylandInput_VirtualKeyNotify(type, key, modifiers));
+}
+
+void RemoteEventDispatcher::KeyModifiers(uint32_t mods_depressed,
+                                         uint32_t mods_latched,
+                                         uint32_t mods_locked,
+                                         uint32_t group) {
+  Dispatch(new WaylandInput_KeyModifiers(mods_depressed,
+                                         mods_latched,
+                                         mods_locked,
+                                         group));
+}
+
+void RemoteEventDispatcher::TouchNotify(ui::EventType type,
+                                        float x,
+                                        float y,
+                                        int32_t touch_id,
+                                        uint32_t time_stamp) {
+  Dispatch(new WaylandInput_TouchNotify(type, x, y, touch_id, time_stamp));
+}
+
+void RemoteEventDispatcher::OutputSizeChanged(unsigned width,
+                                              unsigned height) {
+  Dispatch(new WaylandInput_OutputSize(width, height));
+}
+
+void RemoteEventDispatcher::WindowResized(unsigned handle,
+                                          unsigned width,
+                                          unsigned height) {
+  Dispatch(new WaylandWindow_Resized(handle, width, height));
+}
+
+void RemoteEventDispatcher::WindowUnminimized(unsigned handle) {
+  Dispatch(new WaylandWindow_Unminimized(handle));
+}
+
+void RemoteEventDispatcher::WindowDeActivated(unsigned windowhandle) {
+  Dispatch(new WaylandWindow_DeActivated(windowhandle));
+}
+
+void RemoteEventDispatcher::WindowActivated(unsigned windowhandle) {
+  Dispatch(new WaylandWindow_Activated(windowhandle));
+}
+
+void RemoteEventDispatcher::CloseWidget(unsigned handle) {
+  Dispatch(new WaylandInput_CloseWidget(handle));
+}
+
+void RemoteEventDispatcher::Commit(unsigned handle,
+                                   const std::string& text) {
+  Dispatch(new WaylandInput_Commit(handle, text));
+}
+
+void RemoteEventDispatcher::PreeditChanged(unsigned handle,
+                                           const std::string& text,
+                                           const std::string& commit) {
+  Dispatch(new WaylandInput_PreeditChanged(handle, text, commit));
+}
+
+void RemoteEventDispatcher::PreeditEnd() {
+  Dispatch(new WaylandInput_PreeditEnd());
+}
+
+void RemoteEventDispatcher::PreeditStart() {
+  Dispatch(new WaylandInput_PreeditStart());
+}
+
+void RemoteEventDispatcher::InitializeXKB(base::SharedMemoryHandle fd,
+                                          uint32_t size) {
+  Dispatch(new WaylandInput_InitializeXKB(fd, size));
+}
+
+void RemoteEventDispatcher::Dispatch(IPC::Message* message) {
+    ui::EventConverterOzoneWayland::PostTaskOnMainLoop(
+          base::Bind(&RemoteEventDispatcher::Send, this, message));
+}
+
+void RemoteEventDispatcher::Send(RemoteEventDispatcher* dispatcher,
+                                 IPC::Message* message) {
+  dispatcher->sender_->Send(message);
+}
+
+}  // namespace ui
--- /dev/null
+++ b/ui/events/remote_event_dispatcher.h
@@ -0,0 +1,81 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_UI_EVENTS_REMOTE_EVENT_DISPATCHER_H_
+#define OZONE_UI_EVENTS_REMOTE_EVENT_DISPATCHER_H_
+
+#include <string>
+
+#include "ipc/ipc_sender.h"
+#include "ozone/ui/events/event_converter_ozone_wayland.h"
+
+namespace ui {
+
+// RemoteEventDispatcher sends native events from GPU to Browser process over
+// IPC. In Multi-process case, callbacks from Wayland are received in GPU
+// process side. All callbacks related to input need to be handled in Browser
+// process and hence the events are sent to it over IPC.
+class RemoteEventDispatcher : public ui::EventConverterOzoneWayland {
+ public:
+  RemoteEventDispatcher();
+  virtual ~RemoteEventDispatcher();
+
+  void ChannelEstablished(IPC::Sender* sender);
+
+  void MotionNotify(float x, float y) override;
+  void ButtonNotify(unsigned handle,
+                    ui::EventType type,
+                    ui::EventFlags flags,
+                    float x,
+                    float y) override;
+  void AxisNotify(float x,
+                  float y,
+                  int xoffset,
+                  int yoffset) override;
+  void PointerEnter(unsigned handle, float x, float y) override;
+  void PointerLeave(unsigned handle, float x, float y) override;
+  void KeyNotify(ui::EventType type,
+                 unsigned code) override;
+  void VirtualKeyNotify(ui::EventType type,
+                        uint32_t key,
+                        uint32_t modifiers) override;
+  void KeyModifiers(uint32_t mods_depressed,
+                    uint32_t mods_latched,
+                    uint32_t mods_locked,
+                    uint32_t group) override;
+  void TouchNotify(ui::EventType type,
+                   float x,
+                   float y,
+                   int32_t touch_id,
+                   uint32_t time_stamp) override;
+
+  void OutputSizeChanged(unsigned width, unsigned height) override;
+  void WindowResized(unsigned handle,
+                     unsigned width,
+                     unsigned height) override;
+  void WindowUnminimized(unsigned windowhandle) override;
+  void WindowDeActivated(unsigned windowhandle) override;
+  void WindowActivated(unsigned windowhandle) override;
+  void CloseWidget(unsigned handle) override;
+
+  void Commit(unsigned handle, const std::string& text) override;
+  void PreeditChanged(unsigned handle,
+                      const std::string& text,
+                      const std::string& commit) override;
+  void PreeditEnd() override;
+  void PreeditStart() override;
+  void InitializeXKB(base::SharedMemoryHandle fd,
+                     uint32_t size) override;
+
+ private:
+  void Dispatch(IPC::Message* message);
+  static void Send(RemoteEventDispatcher* dispatcher,
+                   IPC::Message* message);
+  IPC::Sender* sender_;
+  DISALLOW_COPY_AND_ASSIGN(RemoteEventDispatcher);
+};
+
+}  // namespace ui
+
+#endif  // OZONE_UI_EVENTS_REMOTE_EVENT_DISPATCHER_H_
--- /dev/null
+++ b/ui/events/remote_state_change_handler.cc
@@ -0,0 +1,91 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/ui/events/remote_state_change_handler.h"
+
+#include "ipc/ipc_sender.h"
+#include "ozone/ui/events/event_factory_ozone_wayland.h"
+#include "ozone/ui/public/messages.h"
+
+namespace ui {
+
+RemoteStateChangeHandler::RemoteStateChangeHandler()
+    : sender_(NULL) {
+  EventFactoryOzoneWayland::GetInstance()->
+      SetWindowStateChangeHandler(this);
+  EventFactoryOzoneWayland::GetInstance()->
+      SetIMEStateChangeHandler(this);
+}
+
+RemoteStateChangeHandler::~RemoteStateChangeHandler() {
+  while (!deferred_messages_.empty())
+    deferred_messages_.pop();
+}
+
+void RemoteStateChangeHandler::ChannelEstablished(IPC::Sender* sender) {
+  sender_ = sender;
+  while (!deferred_messages_.empty()) {
+    sender_->Send(deferred_messages_.front());
+    deferred_messages_.pop();
+  }
+}
+
+void RemoteStateChangeHandler::ChannelDestroyed() {
+  sender_ = NULL;
+}
+
+void RemoteStateChangeHandler::SetWidgetState(unsigned w,
+                                              ui::WidgetState state) {
+  Send(new WaylandWindow_State(w, state));
+}
+
+void RemoteStateChangeHandler::SetWidgetTitle(unsigned w,
+                                              const base::string16& title) {
+  Send(new WaylandWindow_Title(w, title));
+}
+
+void RemoteStateChangeHandler::SetWidgetCursor(int cursor_type) {
+  Send(new WaylandWindow_Cursor(cursor_type));
+}
+
+void RemoteStateChangeHandler::CreateWidget(unsigned widget,
+                                            unsigned parent,
+                                            unsigned x,
+                                            unsigned y,
+                                            ui::WidgetType type) {
+  Send(new WaylandWindow_Create(widget,
+                                    parent,
+                                    x,
+                                    y,
+                                    type));
+}
+
+void RemoteStateChangeHandler::ResetIme() {
+  Send(new WaylandWindow_ImeReset());
+}
+
+void RemoteStateChangeHandler::ImeCaretBoundsChanged(gfx::Rect rect) {
+  Send(new WaylandWindow_ImeCaretBoundsChanged(rect));
+}
+
+void RemoteStateChangeHandler::HideInputPanel() {
+  Send(new WaylandWindow_HideInputPanel());
+}
+
+void RemoteStateChangeHandler::ShowInputPanel() {
+  Send(new WaylandWindow_ShowInputPanel());
+}
+
+void RemoteStateChangeHandler::Send(IPC::Message* message) {
+  // The GPU process never sends synchronous IPC, so clear the unblock flag.
+  // This ensures the message is treated as a synchronous one and helps preserve
+  // order. Check set_unblock in ipc_messages.h for explanation.
+  message->set_unblock(true);
+  if (!sender_)
+    deferred_messages_.push(message);
+  else
+    sender_->Send(message);
+}
+
+}  // namespace ui
--- /dev/null
+++ b/ui/events/remote_state_change_handler.h
@@ -0,0 +1,61 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_UI_EVENTS_REMOTE_STATE_CHANGE_HANDLER_H_
+#define OZONE_UI_EVENTS_REMOTE_STATE_CHANGE_HANDLER_H_
+
+#include <queue>
+
+#include "ozone/ui/events/ime_state_change_handler.h"
+#include "ozone/ui/events/window_state_change_handler.h"
+
+namespace IPC {
+class Message;
+class Sender;
+}
+
+namespace ui {
+// RemoteStateChangeHandler implements WindowStateChangeHandler and
+// IMEStateChangeHandler. It is responsible for sending any Ime/Window state
+// change events from Browser to GPU process (i.e IPC).
+
+class RemoteStateChangeHandler : public ui::WindowStateChangeHandler,
+                                 public ui::IMEStateChangeHandler {
+ public:
+  typedef std::queue<IPC::Message*> DeferredMessages;
+  RemoteStateChangeHandler();
+  virtual ~RemoteStateChangeHandler();
+
+  void ChannelEstablished(IPC::Sender* sender);
+  void ChannelDestroyed();
+
+  // WindowStateChangeHandler implementation:
+  void SetWidgetState(unsigned widget,
+                      ui::WidgetState state) override;
+  void SetWidgetTitle(unsigned w,
+                      const base::string16& title) override;
+  void SetWidgetCursor(int cursor_type) override;
+  void CreateWidget(unsigned widget,
+                    unsigned parent,
+                    unsigned x,
+                    unsigned y,
+                    ui::WidgetType type) override;
+  void ResetIme() override;
+  void ImeCaretBoundsChanged(gfx::Rect rect) override;
+  void ShowInputPanel() override;
+  void HideInputPanel() override;
+
+ private:
+  void Send(IPC::Message* message);
+
+  IPC::Sender* sender_;
+  // Messages are not sent by host until connection is established. Host queues
+  // all these messages to send after connection is established.
+  DeferredMessages deferred_messages_;
+  DISALLOW_COPY_AND_ASSIGN(RemoteStateChangeHandler);
+};
+
+}  // namespace ui
+
+#endif  // OZONE_UI_EVENTS_REMOTE_STATE_CHANGE_HANDLER_H_
--- /dev/null
+++ b/ui/events/window_change_observer.h
@@ -0,0 +1,44 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_UI_EVENTS_WINDOW_CHANGE_OBSERVER_H_
+#define OZONE_UI_EVENTS_WINDOW_CHANGE_OBSERVER_H_
+
+#include <string>
+
+#include "ozone/platform/ozone_export_wayland.h"
+namespace ui {
+
+// A simple observer interface for all clients interested in recieving various
+// window state change notifications like when the pointer enters a
+// particular window.
+class OZONE_WAYLAND_EXPORT WindowChangeObserver {
+ public:
+  // Called when the pointer enters a window and recieves a button down
+  // notification.
+  virtual void OnWindowFocused(unsigned windowhandle) = 0;
+  // Called when the pointer enters a window.
+  virtual void OnWindowEnter(unsigned windowhandle) = 0;
+  // Called when the pointer leaves a window.
+  virtual void OnWindowLeave(unsigned windowhandle) = 0;
+  // Called when a window is closed.
+  virtual void OnWindowClose(unsigned windowhandle) = 0;
+  // Called when a window is resized by server.
+  virtual void OnWindowResized(unsigned windowhandle,
+                               unsigned width,
+                               unsigned height) = 0;
+  // Called when a window is Restored.
+  virtual void OnWindowUnminimized(unsigned windowhandle) = 0;
+  // Called when a window is DeActivated.
+  virtual void OnWindowDeActivated(unsigned windowhandle) = 0;
+  // Called when a window is Activate.
+  virtual void OnWindowActivated(unsigned windowhandle) = 0;
+
+ protected:
+  virtual ~WindowChangeObserver() {}
+};
+
+}  // namespace ui
+
+#endif  // OZONE_UI_EVENTS_WINDOW_CHANGE_OBSERVER_H_
--- /dev/null
+++ b/ui/events/window_constants.h
@@ -0,0 +1,33 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_UI_EVENTS_WINDOW_CONSTANTS_H_
+#define OZONE_UI_EVENTS_WINDOW_CONSTANTS_H_
+
+namespace ui {
+
+  enum WidgetState {
+    SHOW = 1,  // Widget is visible.
+    HIDE = 2,  // Widget is hidden.
+    FULLSCREEN = 3,  // Widget is in fullscreen mode.
+    MAXIMIZED = 4,  // Widget is maximized,
+    MINIMIZED = 5,  // Widget is minimized.
+    RESTORE = 6,  // Restore Widget.
+    ACTIVE = 7,  // Widget is Activated.
+    INACTIVE = 8,  // Widget is DeActivated.
+    RESIZE = 9,  // Widget is Resized.
+    DESTROYED = 10  // Widget is Destroyed.
+  };
+
+  enum WidgetType {
+    WINDOW = 1,  // A decorated Window.
+    WINDOWFRAMELESS = 2,  // An undecorated Window.
+    POPUP = 3  // An undecorated Window, with transient positioning relative to
+      // its parent and in which the input pointer is implicit grabbed
+      // (i.e. Wayland install the grab) by the Window.
+  };
+
+}  // namespace ui
+
+#endif  // OZONE_UI_EVENTS_WINDOW_CONSTANTS_H_
--- /dev/null
+++ b/ui/events/window_state_change_handler.h
@@ -0,0 +1,40 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_UI_EVENTS_WINDOW_STATE_CHANGE_HANDLER_H_
+#define OZONE_UI_EVENTS_WINDOW_STATE_CHANGE_HANDLER_H_
+
+#include "base/basictypes.h"
+#include "base/strings/string16.h"
+#include "ozone/platform/ozone_export_wayland.h"
+#include "ozone/ui/events/window_constants.h"
+
+namespace ui {
+
+// A simple interface for passing Window state change notifications coming from
+// Aura to Wayland.
+class OZONE_WAYLAND_EXPORT WindowStateChangeHandler {
+ public:
+  virtual ~WindowStateChangeHandler() { }
+
+  // Called when AcceleratedWidget widget state has changed.
+  virtual void SetWidgetState(unsigned widget,
+                              ui::WidgetState state) = 0;
+
+  // Called when AcceleratedWidget widget title has changed.
+  virtual void SetWidgetTitle(unsigned widget, const base::string16& title) = 0;
+  // Called when Cursor has changed and the image needs to be updated.
+  virtual void SetWidgetCursor(int cursor_type) = 0;
+
+  // This is called when we want to create an AcceleratedWidget widget.
+  virtual void CreateWidget(unsigned handle,
+                            unsigned parent,
+                            unsigned x,
+                            unsigned y,
+                            ui::WidgetType type) = 0;
+};
+
+}  // namespace ui
+
+#endif  // OZONE_UI_EVENTS_WINDOW_STATE_CHANGE_HANDLER_H_
--- a/ui/gfx/DEPS
+++ b/ui/gfx/DEPS
@@ -1,7 +1,3 @@
 include_rules = [
-  "+base",
-  "+skia/ext",
-  "+third_party/harfbuzz-ng",
-  "+third_party/skia",
-  "+ui/ios",
+  "+ui/gfx",,
 ]
--- a/ui/gfx/OWNERS
+++ b/ui/gfx/OWNERS
@@ -1,26 +1,2 @@
-# Font rendering and what not.
-asvitkine@chromium.org
-
-# Primitive graphics types (size, rect, vector ...)
-danakj@chromium.org
-
-# RenderText and related classes.
-msw@chromium.org
-
-# Display and related classes.
-per-file display*=oshima@chromium.org
-per-file screen*=oshima@chromium.org
-
-# Transform, interpolated transform and transform util.
-per-file transform*=shawnsingh@chromium.org
-per-file transform*=vollick@chromium.org
-per-file interpolated_transform*=vollick@chromium.org
-
-# GPU memory buffer interface.
-per-file gpu_memory_buffer*=reveman@chromium.org
-
-# R-Tree implementation.
-per-file r_tree*=luken@chromium.org
-
-# If you're doing structural changes get a review from one of the OWNERS.
-per-file *.gyp*=*
+kalyan.kondapally@intel.com
+tiago.vignatti@intel.com
--- /dev/null
+++ b/ui/gfx/gfx.gypi
@@ -0,0 +1,12 @@
+# Copyright 2014 Intel Corporation. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+{
+  'dependencies': [
+    '<(DEPTH)/ui/gfx/gfx.gyp:gfx',
+  ],
+  'sources': [
+    'vsync_provider_wayland.cc',
+    'vsync_provider_wayland.h',
+   ],
+}
--- /dev/null
+++ b/ui/gfx/vsync_provider_wayland.cc
@@ -0,0 +1,23 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/ui/gfx/vsync_provider_wayland.h"
+
+#include "base/bind.h"
+#include "base/message_loop/message_loop.h"
+
+namespace gfx {
+
+WaylandSyncProvider::WaylandSyncProvider() {
+}
+
+WaylandSyncProvider::~WaylandSyncProvider() {
+}
+
+void WaylandSyncProvider::GetVSyncParameters(
+         const UpdateVSyncCallback& callback) {
+  // TODO(kalyan): Pass refresh rate and time of the last refresh.
+}
+
+}  // namespace gfx
--- /dev/null
+++ b/ui/gfx/vsync_provider_wayland.h
@@ -0,0 +1,25 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_UI_GFX_VSYNC_PROVIDER_WAYLAND_H_
+#define OZONE_UI_GFX_VSYNC_PROVIDER_WAYLAND_H_
+
+#include "ui/gfx/vsync_provider.h"
+
+namespace gfx {
+
+class WaylandSyncProvider : public gfx::VSyncProvider {
+ public:
+  WaylandSyncProvider();
+  virtual ~WaylandSyncProvider();
+
+  void GetVSyncParameters(const UpdateVSyncCallback& callback) override;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(WaylandSyncProvider);
+};
+
+}  // namespace gfx
+
+#endif  // OZONE_UI_GFX_VSYNC_PROVIDER_WAYLAND_H_
--- a/ui/gl/gl.gyp
+++ b/ui/gl/gl.gyp
@@ -299,12 +299,6 @@
         ['OS!="android"', {
           'sources/': [ ['exclude', '^android/'] ],
         }],
-        ['use_ozone==1', {
-          'dependencies': [
-            '../ozone/ozone.gyp:ozone',
-            '../ozone/ozone.gyp:ozone_base',
-          ],
-        }],
         ['OS=="android" and android_webview_build==0', {
           'dependencies': [
             '../android/ui_android.gyp:ui_java',
--- a/ui/gl/gl_context_egl.cc
+++ b/ui/gl/gl_context_egl.cc
@@ -112,6 +112,11 @@ bool GLContextEGL::MakeCurrent(GLSurface
     return false;
   }
 
+#if defined(USE_OZONE)
+  if (!surface->IsOffscreen())
+    eglSwapInterval(display_, 0);
+#endif
+
   // Set this as soon as the context is current, since we might call into GL.
   SetRealGLApi();
 
--- /dev/null
+++ b/ui/ime/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+  "+ui/events",
+]
--- /dev/null
+++ b/ui/ime/OWNERS
@@ -0,0 +1,2 @@
+kalyan.kondapally@intel.com
+tiago.vignatti@intel.com
--- /dev/null
+++ b/ui/ime/ime.gypi
@@ -0,0 +1,15 @@
+# Copyright 2013 Intel Corporation. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+  'dependencies': [
+    '<(DEPTH)/ui/base/ui_base.gyp:ui_base',
+  ],
+  'sources': [
+    'input_method_context_factory_wayland.h',
+    'input_method_context_factory_wayland.cc',
+    'input_method_context_impl_wayland.h',
+    'input_method_context_impl_wayland.cc',
+  ],
+}
--- /dev/null
+++ b/ui/ime/input_method_context_factory_wayland.cc
@@ -0,0 +1,25 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/ui/ime/input_method_context_factory_wayland.h"
+
+#include "ozone/ui/ime/input_method_context_impl_wayland.h"
+
+namespace ui {
+
+InputMethodContextFactoryWayland::InputMethodContextFactoryWayland() {
+  LinuxInputMethodContextFactory::SetInstance(this);
+}
+
+InputMethodContextFactoryWayland::~InputMethodContextFactoryWayland() {
+}
+
+scoped_ptr<ui::LinuxInputMethodContext>
+InputMethodContextFactoryWayland::CreateInputMethodContext(
+      ui::LinuxInputMethodContextDelegate* delegate) const {
+  return scoped_ptr<ui::LinuxInputMethodContext>(
+             new InputMethodContextImplWayland(delegate));
+}
+
+}  // namespace ui
--- /dev/null
+++ b/ui/ime/input_method_context_factory_wayland.h
@@ -0,0 +1,25 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_UI_IME_INPUT_METHOD_CONTEXT_FACTORY_OZONE_H_
+#define OZONE_UI_IME_INPUT_METHOD_CONTEXT_FACTORY_OZONE_H_
+
+#include "ozone/platform/ozone_export_wayland.h"
+#include "ui/base/ime/linux/linux_input_method_context_factory.h"
+
+namespace ui {
+
+class OZONE_WAYLAND_EXPORT InputMethodContextFactoryWayland
+    : public LinuxInputMethodContextFactory  {
+ public:
+  InputMethodContextFactoryWayland();
+  virtual ~InputMethodContextFactoryWayland();
+
+  scoped_ptr<LinuxInputMethodContext> CreateInputMethodContext(
+      ui::LinuxInputMethodContextDelegate* delegate) const override;
+};
+
+}  // namespace ui
+
+#endif  // OZONE_UI_IME_INPUT_METHOD_CONTEXT_FACTORY_OZONE_H_
--- /dev/null
+++ b/ui/ime/input_method_context_impl_wayland.cc
@@ -0,0 +1,69 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/ui/ime/input_method_context_impl_wayland.h"
+
+#include "base/logging.h"
+#include "base/strings/utf_string_conversions.h"
+#include "ozone/ui/events/event_factory_ozone_wayland.h"
+#include "ozone/ui/events/ime_state_change_handler.h"
+#include "ui/base/ime/composition_text.h"
+
+namespace ui {
+
+InputMethodContextImplWayland::InputMethodContextImplWayland(
+    LinuxInputMethodContextDelegate* delegate)
+    : delegate_(delegate) {
+  CHECK(delegate_);
+  ui::EventFactoryOzoneWayland::GetInstance()->SetIMEChangeObserver(this);
+}
+
+InputMethodContextImplWayland::~InputMethodContextImplWayland() {
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// InputMethodContextImplWayland, ui::LinuxInputMethodContext implementation:
+bool InputMethodContextImplWayland::DispatchKeyEvent(
+    const KeyEvent& key_event) {
+  return false;
+}
+
+void InputMethodContextImplWayland::Reset() {
+  EventFactoryOzoneWayland::GetInstance()->GetImeStateChangeHandler()->
+      ResetIme();
+}
+
+void InputMethodContextImplWayland::OnTextInputTypeChanged(
+    ui::TextInputType text_input_type) {
+  IMEStateChangeHandler* handler =
+      EventFactoryOzoneWayland::GetInstance()->GetImeStateChangeHandler();
+  // FIXME: We need to support more input types.
+  if (text_input_type == ui::TEXT_INPUT_TYPE_NONE)
+    handler->HideInputPanel();
+  else
+    handler->ShowInputPanel();
+}
+
+void InputMethodContextImplWayland::OnCaretBoundsChanged(
+    const gfx::Rect& caret_bounds) {
+  EventFactoryOzoneWayland::GetInstance()->GetImeStateChangeHandler()->
+      ImeCaretBoundsChanged(caret_bounds);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// InputMethodContextImplWayland, ui::LinuxInputMethodContext implementation:
+
+void InputMethodContextImplWayland::OnCommit(unsigned handle,
+                                             const std::string& text) {
+  delegate_->OnCommit(base::string16(base::ASCIIToUTF16(text.c_str())));
+}
+
+void InputMethodContextImplWayland::OnPreeditChanged(
+    unsigned handle, const std::string& text, const std::string& commit) {
+  ui::CompositionText composition_text;
+  composition_text.text = base::string16(base::ASCIIToUTF16(text.c_str()));
+  delegate_->OnPreeditChanged(composition_text);
+}
+
+}  // namespace ui
--- /dev/null
+++ b/ui/ime/input_method_context_impl_wayland.h
@@ -0,0 +1,47 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_UI_IME_INPUT_METHOD_CONTEXT_IMPL_WAYLAND_H_
+#define OZONE_UI_IME_INPUT_METHOD_CONTEXT_IMPL_WAYLAND_H_
+
+#include <string>
+
+#include "ozone/platform/ozone_export_wayland.h"
+#include "ozone/ui/events/ime_change_observer.h"
+#include "ui/base/ime/linux/linux_input_method_context.h"
+#include "ui/gfx/rect.h"
+
+namespace ui {
+
+// An implementation of LinuxInputMethodContext for IME support on Ozone
+// platform using Wayland.
+class OZONE_WAYLAND_EXPORT InputMethodContextImplWayland
+  : public LinuxInputMethodContext,
+    public IMEChangeObserver {
+ public:
+  explicit InputMethodContextImplWayland(
+      ui::LinuxInputMethodContextDelegate* delegate);
+  virtual ~InputMethodContextImplWayland();
+
+  // overriden from ui::LinuxInputMethodContext
+  bool DispatchKeyEvent(const ui::KeyEvent& key_event) override;
+  void Reset() override;
+  void OnTextInputTypeChanged(ui::TextInputType text_input_type) override;
+  void OnCaretBoundsChanged(const gfx::Rect& caret_bounds) override;
+
+  // overriden from ui::IMEChangeObserver
+  void OnPreeditChanged(unsigned handle,
+                        const std::string& text,
+                        const std::string& commit) override;
+  void OnCommit(unsigned handle, const std::string& text) override;
+
+ private:
+  // Must not be NULL.
+  LinuxInputMethodContextDelegate* delegate_;
+  DISALLOW_COPY_AND_ASSIGN(InputMethodContextImplWayland);
+};
+
+}  // namespace ui
+
+#endif  // OZONE_UI_IME_INPUT_METHOD_CONTEXT_IMPL_WAYLAND_H_
--- a/ui/platform_window/platform_window.h
+++ b/ui/platform_window/platform_window.h
@@ -22,8 +22,21 @@ class PlatformWindowDelegate;
 // underlying platform windowing system (i.e. X11/Win/OSX).
 class PlatformWindow {
  public:
+   enum PlatformWindowType {
+     PLATFORM_WINDOW_UNKNOWN,
+     PLATFORM_WINDOW_TYPE_TOOLTIP,
+     PLATFORM_WINDOW_TYPE_POPUP,
+     PLATFORM_WINDOW_TYPE_MENU,
+     PLATFORM_WINDOW_TYPE_BUBBLE,
+     PLATFORM_WINDOW_TYPE_WINDOW,
+     PLATFORM_WINDOW_TYPE_WINDOW_FRAMELESS
+   };
+
   virtual ~PlatformWindow() {}
 
+  virtual void InitPlatformWindow(PlatformWindowType type,
+                                  gfx::AcceleratedWidget parent_window) { }
+
   virtual void Show() = 0;
   virtual void Hide() = 0;
   virtual void Close() = 0;
--- /dev/null
+++ b/ui/public/OWNERS
@@ -0,0 +1,2 @@
+kalyan.kondapally@intel.com
+tiago.vignatti@intel.com
--- /dev/null
+++ b/ui/public/message_generator.cc
@@ -0,0 +1,33 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Get basic type definitions.
+#define IPC_MESSAGE_IMPL
+#include "ozone/ui/public/message_generator.h"
+
+// Generate constructors.
+#include "ipc/struct_constructor_macros.h"
+#include "ozone/ui/public/message_generator.h"  // NOLINT(build/include)
+
+// Generate destructors.
+#include "ipc/struct_destructor_macros.h"
+#include "ozone/ui/public/message_generator.h"  // NOLINT(build/include)
+
+// Generate param traits write methods.
+#include "ipc/param_traits_write_macros.h"  // NOLINT(build/include_alpha)
+namespace IPC {
+#include "ozone/ui/public/message_generator.h"  // NOLINT(build/include)
+}  // namespace IPC
+
+// Generate param traits read methods.
+#include "ipc/param_traits_read_macros.h"  // NOLINT(build/include_alpha)
+namespace IPC {
+#include "ozone/ui/public/message_generator.h"  // NOLINT(build/include)
+}  // namespace IPC
+
+// Generate param traits log methods.
+#include "ipc/param_traits_log_macros.h"  // NOLINT(build/include_alpha)
+namespace IPC {
+#include "ozone/ui/public/message_generator.h"  // NOLINT(build/include)
+}  // namespace IPC
--- /dev/null
+++ b/ui/public/message_generator.h
@@ -0,0 +1,7 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Multiply-included file, hence no include guard.
+
+#include "ozone/ui/public/messages.h"
--- /dev/null
+++ b/ui/public/messages.h
@@ -0,0 +1,147 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Multiply-included message file, hence no include guard here.
+
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/memory/shared_memory.h"
+#include "base/strings/string16.h"
+#include "ipc/ipc_message_macros.h"
+#include "ipc/ipc_message_utils.h"
+#include "ipc/ipc_param_traits.h"
+#include "ipc/param_traits_macros.h"
+#include "ozone/ui/events/window_constants.h"
+#include "ui/events/event_constants.h"
+#include "ui/gfx/geometry/rect.h"
+#include "ui/gfx/ipc/gfx_param_traits.h"
+
+
+#define IPC_MESSAGE_START LastIPCMsgStart
+
+IPC_ENUM_TRAITS_MAX_VALUE(ui::EventFlags,
+                          ui::EF_ALTGR_DOWN)
+IPC_ENUM_TRAITS_MAX_VALUE(ui::EventType,
+                          ui::ET_LAST)
+IPC_ENUM_TRAITS_MAX_VALUE(ui::WidgetState,
+                          ui::DESTROYED)
+IPC_ENUM_TRAITS_MAX_VALUE(ui::WidgetType,
+                          ui::POPUP)
+
+IPC_MESSAGE_CONTROL2(WaylandInput_InitializeXKB,  // NOLINT(readability/fn_size)
+                     base::SharedMemoryHandle /*fd*/,
+                     uint32_t /*size*/)
+
+IPC_MESSAGE_CONTROL2(WaylandInput_KeyNotify,  // NOLINT(readability/fn_size)
+                     ui::EventType /*type*/,
+                     unsigned /*code*/)
+
+IPC_MESSAGE_CONTROL3(  // NOLINT(readability/fn_size)
+    WaylandInput_VirtualKeyNotify,
+    ui::EventType /*type*/,
+    uint32_t /*key*/,
+    uint32_t /*modifiers*/)
+
+IPC_MESSAGE_CONTROL4(WaylandInput_KeyModifiers,  // NOLINT(readability/fn_size)
+                     uint32_t /*mods_depressed*/,
+                     uint32_t /*mods_latched*/,
+                     uint32_t /*mods_locked*/,
+                     uint32_t /*group*/)
+
+IPC_MESSAGE_CONTROL2(WaylandInput_MotionNotify,  // NOLINT(readability/fn_size)
+                     float /*x*/,
+                     float /*y*/)
+
+IPC_MESSAGE_CONTROL5(WaylandInput_ButtonNotify,  // NOLINT(readability/fn_size)
+                     unsigned /*handle*/,
+                     ui::EventType /*type*/,
+                     ui::EventFlags /*flags*/,
+                     float /*x*/,
+                     float /*y*/)
+
+IPC_MESSAGE_CONTROL5(WaylandInput_TouchNotify,  // NOLINT(readability/fn_size)
+                     ui::EventType /*type*/,
+                     float /*x*/,
+                     float /*y*/,
+                     int32_t /*touch_id*/,
+                     uint32_t /*time_stamp*/)
+
+IPC_MESSAGE_CONTROL4(WaylandInput_AxisNotify,  // NOLINT(readability/fn_size)
+                     float /*x*/,
+                     float /*y*/,
+                     int /*x_offset*/,
+                     int /*y_offset*/)
+
+IPC_MESSAGE_CONTROL3(WaylandInput_PointerEnter,  // NOLINT(readability/fn_size)
+                     unsigned /*handle*/,
+                     float /*x*/,
+                     float /*y*/)
+
+IPC_MESSAGE_CONTROL3(WaylandInput_PointerLeave,  // NOLINT(readability/fn_size)
+                     unsigned /*handle*/,
+                     float /*x*/,
+                     float /*y*/)
+
+IPC_MESSAGE_CONTROL2(WaylandInput_OutputSize,  // NOLINT(readability/fn_size)
+                     unsigned /*width*/,
+                     unsigned /*height*/)
+
+IPC_MESSAGE_CONTROL1(WaylandInput_CloseWidget,  // NOLINT(readability/fn_size)
+                     unsigned /*handle*/)
+
+IPC_MESSAGE_CONTROL3(WaylandWindow_Resized,  // NOLINT(readability/fn_size)
+                     unsigned /* window handle */,
+                     unsigned /* width */,
+                     unsigned /* height */)
+
+IPC_MESSAGE_CONTROL1(WaylandWindow_Unminimized,  // NOLINT(readability/fn_size)
+                     unsigned /*handle*/)
+
+IPC_MESSAGE_CONTROL1(WaylandWindow_DeActivated,  // NOLINT(readability/fn_size)
+                     unsigned /*handle*/)
+
+IPC_MESSAGE_CONTROL1(WaylandWindow_Activated,  // NOLINT(readability/fn_size)
+                     unsigned /*handle*/)
+
+IPC_MESSAGE_CONTROL2(WaylandWindow_State,  // NOLINT(readability/fn_size)
+                     unsigned /* window handle */,
+                     ui::WidgetState /*state*/)
+
+IPC_MESSAGE_CONTROL5(WaylandWindow_Create,  // NOLINT(readability/fn_size)
+                     unsigned /* window handle */,
+                     unsigned /* window parent */,
+                     unsigned /* x */,
+                     unsigned /* y */,
+                     ui::WidgetType /* window type */)
+
+IPC_MESSAGE_CONTROL2(WaylandWindow_Title,  // NOLINT(readability/fn_size)
+                     unsigned /* window handle */,
+                     base::string16 /* window title */)
+
+IPC_MESSAGE_CONTROL1(WaylandWindow_Cursor,  // NOLINT(readability/fn_size)
+                     int /* cursor type */)
+
+IPC_MESSAGE_CONTROL0(WaylandWindow_ImeReset)  // NOLINT(readability/fn_size)
+
+IPC_MESSAGE_CONTROL1(WaylandWindow_ImeCaretBoundsChanged, // NOLINT(readability/
+                     gfx::Rect /* ImeCaretBoundsChanged */)  //      fn_size)
+
+IPC_MESSAGE_CONTROL0(WaylandWindow_ShowInputPanel)  // NOLINT(readability/
+                                                   //         fn_size)
+
+IPC_MESSAGE_CONTROL0(WaylandWindow_HideInputPanel)  // NOLINT(readability/
+                                                   //         fn_size)
+
+IPC_MESSAGE_CONTROL2(WaylandInput_Commit,  // NOLINT(readability/fn_size)
+                     unsigned,
+                     std::string)
+
+IPC_MESSAGE_CONTROL3(WaylandInput_PreeditChanged, // NOLINT(readability/
+                     unsigned,                    //        fn_size)
+                     std::string, std::string)
+
+IPC_MESSAGE_CONTROL0(WaylandInput_PreeditEnd)  // NOLINT(readability/fn_size)
+
+IPC_MESSAGE_CONTROL0(WaylandInput_PreeditStart)  // NOLINT(readability/fn_size)
--- /dev/null
+++ b/ui/public/ozone_channel.cc
@@ -0,0 +1,89 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/ui/public/ozone_channel.h"
+
+#include "ozone/ui/events/event_factory_ozone_wayland.h"
+#include "ozone/ui/events/ime_state_change_handler.h"
+#include "ozone/ui/events/remote_event_dispatcher.h"
+#include "ozone/ui/events/window_state_change_handler.h"
+#include "ozone/ui/public/messages.h"
+
+namespace ui {
+
+OzoneChannel::OzoneChannel() : event_converter_(NULL) {
+}
+
+OzoneChannel::~OzoneChannel() {
+}
+
+void OzoneChannel::InitializeRemoteDispatcher() {
+  event_converter_ = new RemoteEventDispatcher();
+  ui::EventFactoryOzoneWayland::GetInstance()->
+      SetEventConverterOzoneWayland(event_converter_);
+}
+
+void OzoneChannel::OnChannelEstablished(IPC::Sender* sender) {
+  if (event_converter_)
+    event_converter_->ChannelEstablished(sender);
+}
+
+bool OzoneChannel::OnMessageReceived(const IPC::Message& message) {
+  bool handled = true;
+  IPC_BEGIN_MESSAGE_MAP(OzoneChannel, message)
+  IPC_MESSAGE_HANDLER(WaylandWindow_State, OnWidgetStateChanged)
+  IPC_MESSAGE_HANDLER(WaylandWindow_Create, OnWidgetCreate)
+  IPC_MESSAGE_HANDLER(WaylandWindow_Title, OnWidgetTitleChanged)
+  IPC_MESSAGE_HANDLER(WaylandWindow_Cursor, OnWidgetCursorChanged)
+  IPC_MESSAGE_HANDLER(WaylandWindow_ImeReset, OnWidgetImeReset)
+  IPC_MESSAGE_HANDLER(WaylandWindow_ShowInputPanel, OnWidgetShowInputPanel)
+  IPC_MESSAGE_HANDLER(WaylandWindow_HideInputPanel, OnWidgetHideInputPanel)
+  IPC_MESSAGE_UNHANDLED(handled = false)
+  IPC_END_MESSAGE_MAP()
+
+  return handled;
+}
+
+void OzoneChannel::OnWidgetStateChanged(unsigned handleid,
+                                        ui::WidgetState state) {
+  EventFactoryOzoneWayland::GetInstance()->GetWindowStateChangeHandler()->
+      SetWidgetState(handleid, state);
+}
+
+void OzoneChannel::OnWidgetTitleChanged(unsigned widget,
+                                        base::string16 title) {
+  EventFactoryOzoneWayland::GetInstance()->GetWindowStateChangeHandler()->
+      SetWidgetTitle(widget, title);
+}
+
+void OzoneChannel::OnWidgetCursorChanged(int cursor_type) {
+  EventFactoryOzoneWayland::GetInstance()->GetWindowStateChangeHandler()->
+      SetWidgetCursor(cursor_type);
+}
+
+void OzoneChannel::OnWidgetCreate(unsigned widget,
+                                  unsigned parent,
+                                  unsigned x,
+                                  unsigned y,
+                                  ui::WidgetType type) {
+  EventFactoryOzoneWayland::GetInstance()->GetWindowStateChangeHandler()->
+      CreateWidget(widget, parent, x, y, type);
+}
+
+void OzoneChannel::OnWidgetImeReset() {
+  EventFactoryOzoneWayland::GetInstance()->GetImeStateChangeHandler()->
+      ResetIme();
+}
+
+void OzoneChannel::OnWidgetShowInputPanel() {
+  EventFactoryOzoneWayland::GetInstance()->GetImeStateChangeHandler()->
+      ShowInputPanel();
+}
+
+void OzoneChannel::OnWidgetHideInputPanel() {
+  EventFactoryOzoneWayland::GetInstance()->GetImeStateChangeHandler()->
+      HideInputPanel();
+}
+
+}  // namespace ui
--- /dev/null
+++ b/ui/public/ozone_channel.h
@@ -0,0 +1,45 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_UI_PUBLIC_OZONE_CHANNEL_H_
+#define OZONE_UI_PUBLIC_OZONE_CHANNEL_H_
+
+#include "base/strings/string16.h"
+#include "ozone/ui/events/window_constants.h"
+#include "ui/ozone/public/gpu_platform_support.h"
+
+namespace ui {
+class RemoteEventDispatcher;
+
+class OzoneChannel : public GpuPlatformSupport {
+ public:
+  OzoneChannel();
+  virtual ~OzoneChannel();
+  void InitializeRemoteDispatcher();
+
+  // GpuPlatformSupport:
+  void OnChannelEstablished(IPC::Sender* sender) override;
+  bool OnMessageReceived(const IPC::Message& message) override;
+
+  void OnWidgetStateChanged(unsigned handleid,
+                            ui::WidgetState state);
+  void OnWidgetTitleChanged(unsigned widget, base::string16 title);
+  void OnWidgetCursorChanged(int cursor_type);
+  void OnWidgetCreate(unsigned widget,
+                      unsigned parent,
+                      unsigned x,
+                      unsigned y,
+                      ui::WidgetType type);
+  void OnWidgetImeReset();
+  void OnWidgetShowInputPanel();
+  void OnWidgetHideInputPanel();
+
+ private:
+  RemoteEventDispatcher* event_converter_;
+  DISALLOW_COPY_AND_ASSIGN(OzoneChannel);
+};
+
+}  // namespace ui
+
+#endif  // OZONE_UI_PUBLIC_OZONE_CHANNEL_H_
--- /dev/null
+++ b/ui/public/ozone_channel_host.cc
@@ -0,0 +1,186 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/ui/public/ozone_channel_host.h"
+
+#include "ozone/ui/events/event_converter_in_process.h"
+#include "ozone/ui/events/event_factory_ozone_wayland.h"
+#include "ozone/ui/events/remote_state_change_handler.h"
+#include "ozone/ui/public/messages.h"
+
+namespace ui {
+
+OzoneChannelHost::OzoneChannelHost()
+    : state_handler_(NULL) {
+}
+
+OzoneChannelHost::~OzoneChannelHost() {
+  delete state_handler_;
+  delete event_converter_;
+}
+
+void OzoneChannelHost::Initialize() {
+  event_converter_ = new EventConverterInProcess();
+  ui::EventFactoryOzoneWayland* event_factory =
+      ui::EventFactoryOzoneWayland::GetInstance();
+  event_factory->SetEventConverterOzoneWayland(event_converter_);
+  state_handler_ = new RemoteStateChangeHandler();
+}
+
+void OzoneChannelHost::ReleaseRemoteStateChangeHandler() {
+  delete state_handler_;
+  state_handler_ = NULL;
+}
+
+WindowStateChangeHandler* OzoneChannelHost::GetStateChangeHandler() const {
+  return state_handler_;
+}
+
+void OzoneChannelHost::OnChannelEstablished(int host_id, IPC::Sender* sender) {
+  if (state_handler_)
+    state_handler_->ChannelEstablished(sender);
+}
+
+void OzoneChannelHost::OnChannelDestroyed(int host_id) {
+  if (state_handler_)
+    state_handler_->ChannelDestroyed();
+}
+
+bool OzoneChannelHost::OnMessageReceived(const IPC::Message& message) {
+  bool handled = true;
+  IPC_BEGIN_MESSAGE_MAP(OzoneChannelHost, message)
+  IPC_MESSAGE_HANDLER(WaylandInput_MotionNotify, OnMotionNotify)
+  IPC_MESSAGE_HANDLER(WaylandInput_ButtonNotify, OnButtonNotify)
+  IPC_MESSAGE_HANDLER(WaylandInput_TouchNotify, OnTouchNotify)
+  IPC_MESSAGE_HANDLER(WaylandInput_AxisNotify, OnAxisNotify)
+  IPC_MESSAGE_HANDLER(WaylandInput_PointerEnter, OnPointerEnter)
+  IPC_MESSAGE_HANDLER(WaylandInput_PointerLeave, OnPointerLeave)
+  IPC_MESSAGE_HANDLER(WaylandInput_KeyNotify, OnKeyNotify)
+  IPC_MESSAGE_HANDLER(WaylandInput_VirtualKeyNotify, OnVirtualKeyNotify)
+  IPC_MESSAGE_HANDLER(WaylandInput_KeyModifiers, OnKeyModifiers)
+  IPC_MESSAGE_HANDLER(WaylandInput_OutputSize, OnOutputSizeChanged)
+  IPC_MESSAGE_HANDLER(WaylandInput_CloseWidget, OnCloseWidget)
+  IPC_MESSAGE_HANDLER(WaylandWindow_Resized, OnWindowResized)
+  IPC_MESSAGE_HANDLER(WaylandWindow_Activated, OnWindowActivated)
+  IPC_MESSAGE_HANDLER(WaylandWindow_DeActivated, OnWindowDeActivated)
+  IPC_MESSAGE_HANDLER(WaylandWindow_Unminimized, OnWindowUnminimized)
+  IPC_MESSAGE_HANDLER(WaylandInput_Commit, OnCommit)
+  IPC_MESSAGE_HANDLER(WaylandInput_PreeditChanged, OnPreeditChanged)
+  IPC_MESSAGE_HANDLER(WaylandInput_PreeditEnd, OnPreeditEnd)
+  IPC_MESSAGE_HANDLER(WaylandInput_PreeditStart, OnPreeditStart)
+  IPC_MESSAGE_HANDLER(WaylandInput_InitializeXKB, OnInitializeXKB)
+  IPC_MESSAGE_UNHANDLED(handled = false)
+  IPC_END_MESSAGE_MAP()
+
+  return handled;
+}
+
+void OzoneChannelHost::OnMotionNotify(float x, float y) {
+  event_converter_->MotionNotify(x, y);
+}
+
+void OzoneChannelHost::OnButtonNotify(unsigned handle,
+                                      ui::EventType type,
+                                      ui::EventFlags flags,
+                                      float x,
+                                      float y) {
+  event_converter_->ButtonNotify(handle, type, flags, x, y);
+}
+
+void OzoneChannelHost::OnTouchNotify(ui::EventType type,
+                                     float x,
+                                     float y,
+                                     int32_t touch_id,
+                                     uint32_t time_stamp) {
+  event_converter_->TouchNotify(type, x, y, touch_id, time_stamp);
+}
+
+void OzoneChannelHost::OnAxisNotify(float x,
+                                    float y,
+                                    int xoffset,
+                                    int yoffset) {
+  event_converter_->AxisNotify(x, y, xoffset, yoffset);
+}
+
+void OzoneChannelHost::OnPointerEnter(unsigned handle,
+                                      float x,
+                                      float y) {
+  event_converter_->PointerEnter(handle, x, y);
+}
+
+void OzoneChannelHost::OnPointerLeave(unsigned handle,
+                                      float x,
+                                      float y) {
+  event_converter_->PointerLeave(handle, x, y);
+}
+
+void OzoneChannelHost::OnKeyNotify(ui::EventType type,
+                                   unsigned code) {
+  event_converter_->KeyNotify(type, code);
+}
+
+void OzoneChannelHost::OnVirtualKeyNotify(ui::EventType type,
+                                          uint32_t key,
+                                          uint32_t modifiers) {
+  event_converter_->VirtualKeyNotify(type, key, modifiers);
+}
+
+void OzoneChannelHost::OnKeyModifiers(uint32_t mods_depressed,
+                                      uint32_t mods_latched,
+                                      uint32_t mods_locked,
+                                      uint32_t group) {
+  event_converter_->KeyModifiers(mods_depressed,
+                                 mods_latched,
+                                 mods_locked,
+                                 group);
+}
+
+void OzoneChannelHost::OnOutputSizeChanged(unsigned width,
+                                           unsigned height) {
+  event_converter_->OutputSizeChanged(width, height);
+}
+
+void OzoneChannelHost::OnCloseWidget(unsigned handle) {
+  event_converter_->CloseWidget(handle);
+}
+
+void OzoneChannelHost::OnWindowResized(unsigned handle,
+                                       unsigned width,
+                                       unsigned height) {
+  event_converter_->WindowResized(handle, width, height);
+}
+
+void OzoneChannelHost::OnWindowUnminimized(unsigned handle) {
+  event_converter_->WindowUnminimized(handle);
+}
+
+void OzoneChannelHost::OnWindowActivated(unsigned handle) {
+  event_converter_->WindowActivated(handle);
+}
+
+void OzoneChannelHost::OnWindowDeActivated(unsigned handle) {
+  event_converter_->WindowDeActivated(handle);
+}
+
+void OzoneChannelHost::OnCommit(unsigned handle, std::string text) {
+  event_converter_->Commit(handle, text);
+}
+
+void OzoneChannelHost::OnPreeditChanged(unsigned handle, std::string text,
+                                        std::string commit) {
+  event_converter_->PreeditChanged(handle, text, commit);
+}
+
+void OzoneChannelHost::OnPreeditEnd() {
+}
+
+void OzoneChannelHost::OnPreeditStart() {
+}
+
+void OzoneChannelHost::OnInitializeXKB(base::SharedMemoryHandle fd,
+                                       uint32_t size) {
+  event_converter_->InitializeXKB(fd, size);
+}
+
+}  // namespace ui
--- /dev/null
+++ b/ui/public/ozone_channel_host.h
@@ -0,0 +1,78 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_UI_PUBLIC_OZONE_CHANNEL_HOST_H_
+#define OZONE_UI_PUBLIC_OZONE_CHANNEL_HOST_H_
+
+#include <string>
+
+#include "base/memory/shared_memory.h"
+#include "ui/events/event_constants.h"
+#include "ui/ozone/public/gpu_platform_support_host.h"
+
+namespace ui {
+class RemoteStateChangeHandler;
+class EventConverterInProcess;
+class WindowStateChangeHandler;
+
+class OzoneChannelHost : public GpuPlatformSupportHost {
+ public:
+  OzoneChannelHost();
+  virtual ~OzoneChannelHost();
+
+  void Initialize();
+  void ReleaseRemoteStateChangeHandler();
+  WindowStateChangeHandler* GetStateChangeHandler() const;
+
+  // GpuPlatformSupportHost:
+  void OnChannelEstablished(int host_id, IPC::Sender* sender) override;
+  void OnChannelDestroyed(int host_id) override;
+  bool OnMessageReceived(const IPC::Message&) override;
+
+  void OnMotionNotify(float x, float y);
+  void OnButtonNotify(unsigned handle,
+                      ui::EventType type,
+                      ui::EventFlags flags,
+                      float x,
+                      float y);
+  void OnTouchNotify(ui::EventType type,
+                     float x,
+                     float y,
+                     int32_t touch_id,
+                     uint32_t time_stamp);
+  void OnAxisNotify(float x, float y, int xoffset, int yoffset);
+  void OnPointerEnter(unsigned handle, float x, float y);
+  void OnPointerLeave(unsigned handle, float x, float y);
+  void OnKeyNotify(ui::EventType type, unsigned code);
+  void OnVirtualKeyNotify(ui::EventType type,
+                          uint32_t key,
+                          uint32_t modifiers);
+  void OnKeyModifiers(uint32_t mods_depressed,
+                      uint32_t mods_latched,
+                      uint32_t mods_locked,
+                      uint32_t group);
+  void OnOutputSizeChanged(unsigned width, unsigned height);
+  void OnCloseWidget(unsigned handle);
+  void OnWindowResized(unsigned handle,
+                       unsigned width,
+                       unsigned height);
+  void OnWindowUnminimized(unsigned handle);
+  void OnWindowActivated(unsigned handle);
+  void OnWindowDeActivated(unsigned handle);
+
+  void OnCommit(unsigned handle, std::string text);
+  void OnPreeditChanged(unsigned handle, std::string text, std::string commit);
+  void OnPreeditEnd();
+  void OnPreeditStart();
+  void OnInitializeXKB(base::SharedMemoryHandle fd, uint32_t size);
+
+ private:
+  RemoteStateChangeHandler* state_handler_;
+  EventConverterInProcess* event_converter_;
+  DISALLOW_COPY_AND_ASSIGN(OzoneChannelHost);
+};
+
+}  // namespace ui
+
+#endif  // OZONE_UI_PUBLIC_OZONE_CHANNEL_HOST_H_
--- /dev/null
+++ b/ui/public/public.gypi
@@ -0,0 +1,14 @@
+# Copyright 2014 Intel Corporation. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+{
+  'sources': [
+    'messages.h',
+    'message_generator.h',
+    'message_generator.cc',
+    'ozone_channel.h',
+    'ozone_channel.cc',
+    'ozone_channel_host.h',
+    'ozone_channel_host.cc',
+   ],
+}
--- /dev/null
+++ b/ui/ui.gypi
@@ -0,0 +1,13 @@
+# Copyright 2014 Intel Corporation. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+{
+  'includes': [
+    'cursor/cursor.gypi',
+    'events/event.gypi',
+    'gfx/gfx.gypi',
+    'ime/ime.gypi',
+    'public/public.gypi',
+    'webui/webui.gypi',
+   ],
+}
--- a/ui/views/views.gyp
+++ b/ui/views/views.gyp
@@ -4,6 +4,7 @@
 {
   'variables': {
     'chromium_code': 1,
+    'external_ozone_views_files': [],
     # Sources lists shared with GN build.
     'views_sources': [
       'accessibility/native_view_accessibility.cc',
@@ -438,12 +439,6 @@
       'widget/desktop_aura/desktop_window_tree_host_win.cc',
       'widget/desktop_aura/desktop_window_tree_host_win.h',
     ],
-    'views_desktop_aura_ozone_sources': [
-      'widget/desktop_aura/desktop_factory_ozone.cc',
-      'widget/desktop_aura/desktop_factory_ozone.h',
-      'widget/desktop_aura/desktop_screen_ozone.cc',
-      'widget/desktop_aura/desktop_window_tree_host_ozone.cc',
-    ],
     'views_test_support_sources': [
       'controls/textfield/textfield_test_api.cc',
       'controls/textfield/textfield_test_api.h',
@@ -665,6 +660,7 @@
         }],
         ['use_aura==1', {
           'sources': [
+            '<@(external_ozone_views_files)',
             '<@(views_aura_sources)',
           ],
           'dependencies': [
@@ -681,9 +677,6 @@
             ['OS == "win"', {
               'sources': [ '<@(views_desktop_aura_win_sources)' ],
             }],
-            ['use_ozone==1', {
-              'sources': [ '<@(views_desktop_aura_ozone_sources)' ],
-            }],
           ],
         }],
       ],
--- /dev/null
+++ b/ui/views/views.gyp.orig
@@ -0,0 +1,877 @@
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+{
+  'variables': {
+    'chromium_code': 1,
+    # Sources lists shared with GN build.
+    'views_sources': [
+      'accessibility/native_view_accessibility.cc',
+      'accessibility/native_view_accessibility.h',
+      'accessibility/native_view_accessibility_win.cc',
+      'accessibility/native_view_accessibility_win.h',
+      'accessible_pane_view.cc',
+      'accessible_pane_view.h',
+      'animation/bounds_animator.cc',
+      'animation/bounds_animator.h',
+      'animation/scroll_animator.cc',
+      'animation/scroll_animator.h',
+      'background.cc',
+      'background.h',
+      'border.cc',
+      'border.h',
+      'bubble/bubble_border.cc',
+      'bubble/bubble_border.h',
+      'bubble/bubble_delegate.cc',
+      'bubble/bubble_delegate.h',
+      'bubble/bubble_frame_view.cc',
+      'bubble/bubble_frame_view.h',
+      'button_drag_utils.cc',
+      'button_drag_utils.h',
+      'cocoa/bridged_content_view.h',
+      'cocoa/bridged_content_view.mm',
+      'cocoa/bridged_native_widget.h',
+      'cocoa/bridged_native_widget.mm',
+      'cocoa/views_nswindow_delegate.h',
+      'cocoa/views_nswindow_delegate.mm',
+      'color_chooser/color_chooser_listener.h',
+      'color_chooser/color_chooser_view.cc',
+      'color_chooser/color_chooser_view.h',
+      'color_constants.cc',
+      'color_constants.h',
+      'context_menu_controller.h',
+      'controls/button/blue_button.cc',
+      'controls/button/blue_button.h',
+      'controls/button/button.cc',
+      'controls/button/button.h',
+      'controls/button/checkbox.cc',
+      'controls/button/checkbox.h',
+      'controls/button/custom_button.cc',
+      'controls/button/custom_button.h',
+      'controls/button/image_button.cc',
+      'controls/button/image_button.h',
+      'controls/button/label_button.cc',
+      'controls/button/label_button.h',
+      'controls/button/label_button_border.cc',
+      'controls/button/label_button_border.h',
+      'controls/button/menu_button.cc',
+      'controls/button/menu_button.h',
+      'controls/button/menu_button_listener.h',
+      'controls/button/radio_button.cc',
+      'controls/button/radio_button.h',
+      'controls/combobox/combobox.cc',
+      'controls/combobox/combobox.h',
+      'controls/combobox/combobox_listener.h',
+      'controls/focusable_border.cc',
+      'controls/focusable_border.h',
+      'controls/glow_hover_controller.cc',
+      'controls/glow_hover_controller.h',
+      'controls/image_view.cc',
+      'controls/image_view.h',
+      'controls/label.cc',
+      'controls/label.h',
+      'controls/link.cc',
+      'controls/link.h',
+      'controls/link_listener.h',
+      'controls/menu/display_change_listener_aura.cc',
+      'controls/menu/display_change_listener_mac.cc',
+      'controls/menu/menu.cc',
+      'controls/menu/menu.h',
+      'controls/menu/menu_config.cc',
+      'controls/menu/menu_config.h',
+      'controls/menu/menu_config_aura.cc',
+      'controls/menu/menu_config_mac.cc',
+      'controls/menu/menu_config_win.cc',
+      'controls/menu/menu_controller.cc',
+      'controls/menu/menu_controller.h',
+      'controls/menu/menu_controller_delegate.h',
+      'controls/menu/menu_event_dispatcher_linux.cc',
+      'controls/menu/menu_event_dispatcher_linux.h',
+      'controls/menu/menu_delegate.cc',
+      'controls/menu/menu_delegate.h',
+      'controls/menu/menu_message_pump_dispatcher_win.cc',
+      'controls/menu/menu_message_pump_dispatcher_win.h',
+      'controls/menu/menu_message_loop.h',
+      'controls/menu/menu_message_loop_aura.cc',
+      'controls/menu/menu_message_loop_aura.h',
+      'controls/menu/menu_message_loop_mac.cc',
+      'controls/menu/menu_message_loop_mac.h',
+      'controls/menu/menu_host.cc',
+      'controls/menu/menu_host.h',
+      'controls/menu/menu_host_root_view.cc',
+      'controls/menu/menu_host_root_view.h',
+      'controls/menu/menu_insertion_delegate_win.h',
+      'controls/menu/menu_item_view.cc',
+      'controls/menu/menu_item_view.h',
+      'controls/menu/menu_listener.cc',
+      'controls/menu/menu_listener.h',
+      'controls/menu/menu_model_adapter.cc',
+      'controls/menu/menu_model_adapter.h',
+      'controls/menu/menu_runner.cc',
+      'controls/menu/menu_runner.h',
+      'controls/menu/menu_runner_handler.h',
+      'controls/menu/menu_runner_impl.cc',
+      'controls/menu/menu_runner_impl.h',
+      'controls/menu/menu_runner_impl_adapter.cc',
+      'controls/menu/menu_runner_impl_adapter.h',
+      'controls/menu/menu_runner_impl_cocoa.h',
+      'controls/menu/menu_runner_impl_cocoa.mm',
+      'controls/menu/menu_runner_impl_interface.h',
+      'controls/menu/menu_scroll_view_container.cc',
+      'controls/menu/menu_scroll_view_container.h',
+      'controls/menu/menu_separator.h',
+      'controls/menu/menu_separator_views.cc',
+      'controls/menu/menu_separator_win.cc',
+      'controls/menu/menu_types.h',
+      'controls/menu/native_menu_win.cc',
+      'controls/menu/native_menu_win.h',
+      'controls/menu/menu_image_util.cc',
+      'controls/menu/menu_image_util.h',
+      'controls/menu/submenu_view.cc',
+      'controls/menu/submenu_view.h',
+      'controls/message_box_view.cc',
+      'controls/message_box_view.h',
+      'controls/native/native_view_host.cc',
+      'controls/native/native_view_host.h',
+      'controls/native/native_view_host_aura.cc',
+      'controls/native/native_view_host_aura.h',
+      'controls/native/native_view_host_mac.h',
+      'controls/native/native_view_host_mac.mm',
+      'controls/prefix_delegate.h',
+      'controls/prefix_selector.cc',
+      'controls/prefix_selector.h',
+      'controls/progress_bar.cc',
+      'controls/progress_bar.h',
+      'controls/resize_area.cc',
+      'controls/resize_area.h',
+      'controls/resize_area_delegate.h',
+      'controls/scroll_view.cc',
+      'controls/scroll_view.h',
+      'controls/scrollbar/base_scroll_bar.cc',
+      'controls/scrollbar/base_scroll_bar.h',
+      'controls/scrollbar/base_scroll_bar_button.cc',
+      'controls/scrollbar/base_scroll_bar_button.h',
+      'controls/scrollbar/base_scroll_bar_thumb.cc',
+      'controls/scrollbar/base_scroll_bar_thumb.h',
+      'controls/scrollbar/kennedy_scroll_bar.cc',
+      'controls/scrollbar/kennedy_scroll_bar.h',
+      'controls/scrollbar/native_scroll_bar_views.cc',
+      'controls/scrollbar/native_scroll_bar_views.h',
+      'controls/scrollbar/native_scroll_bar_wrapper.h',
+      'controls/scrollbar/native_scroll_bar.cc',
+      'controls/scrollbar/native_scroll_bar.h',
+      'controls/scrollbar/overlay_scroll_bar.cc',
+      'controls/scrollbar/overlay_scroll_bar.h',
+      'controls/scrollbar/scroll_bar.cc',
+      'controls/scrollbar/scroll_bar.h',
+      'controls/separator.cc',
+      'controls/separator.h',
+      'controls/single_split_view.cc',
+      'controls/single_split_view.h',
+      'controls/single_split_view_listener.h',
+      'controls/slide_out_view.cc',
+      'controls/slide_out_view.h',
+      'controls/slider.cc',
+      'controls/slider.h',
+      'controls/styled_label.cc',
+      'controls/styled_label.h',
+      'controls/styled_label_listener.h',
+      'controls/tabbed_pane/tabbed_pane.cc',
+      'controls/tabbed_pane/tabbed_pane.h',
+      'controls/tabbed_pane/tabbed_pane_listener.h',
+      'controls/table/table_header.cc',
+      'controls/table/table_header.h',
+      'controls/table/table_utils.cc',
+      'controls/table/table_utils.h',
+      'controls/table/table_view.cc',
+      'controls/table/table_view.h',
+      'controls/table/table_view_observer.h',
+      'controls/table/table_view_row_background_painter.h',
+      'controls/textfield/textfield.cc',
+      'controls/textfield/textfield.h',
+      'controls/textfield/textfield_controller.cc',
+      'controls/textfield/textfield_controller.h',
+      'controls/textfield/textfield_model.cc',
+      'controls/textfield/textfield_model.h',
+      'controls/throbber.cc',
+      'controls/throbber.h',
+      'controls/tree/tree_view.cc',
+      'controls/tree/tree_view.h',
+      'controls/tree/tree_view_controller.cc',
+      'controls/tree/tree_view_controller.h',
+      'cull_set.cc',
+      'cull_set.h',
+      'debug_utils.cc',
+      'debug_utils.h',
+      'drag_controller.h',
+      'drag_utils.cc',
+      'drag_utils.h',
+      'drag_utils_aura.cc',
+      'focus/external_focus_tracker.cc',
+      'focus/external_focus_tracker.h',
+      'focus/focus_manager.cc',
+      'focus/focus_manager.h',
+      'focus/focus_manager_delegate.h',
+      'focus/focus_manager_factory.cc',
+      'focus/focus_manager_factory.h',
+      'focus/focus_search.cc',
+      'focus/focus_search.h',
+      'focus/view_storage.cc',
+      'focus/view_storage.h',
+      'focus/widget_focus_manager.cc',
+      'focus/widget_focus_manager.h',
+      'ime/input_method.h',
+      'ime/input_method_base.cc',
+      'ime/input_method_base.h',
+      'ime/input_method_bridge.cc',
+      'ime/input_method_bridge.h',
+      'ime/input_method_delegate.h',
+      'ime/mock_input_method.cc',
+      'ime/mock_input_method.h',
+      'ime/null_input_method.cc',
+      'ime/null_input_method.h',
+      'layout/box_layout.cc',
+      'layout/box_layout.h',
+      'layout/fill_layout.cc',
+      'layout/fill_layout.h',
+      'layout/grid_layout.cc',
+      'layout/grid_layout.h',
+      'layout/layout_constants.h',
+      'layout/layout_manager.cc',
+      'layout/layout_manager.h',
+      'linux_ui/linux_ui.h',
+      'linux_ui/linux_ui.cc',
+      'linux_ui/status_icon_linux.h',
+      'linux_ui/status_icon_linux.cc',
+      'linux_ui/window_button_order_observer.h',
+      'linux_ui/window_button_order_provider.cc',
+      'masked_targeter_delegate.cc',
+      'masked_targeter_delegate.h',
+      'metrics.cc',
+      'metrics.h',
+      'metrics_aura.cc',
+      'metrics_mac.cc',
+      'mouse_constants.h',
+      'mouse_watcher.h',
+      'mouse_watcher_aura.cc',
+      'native_cursor.h',
+      'native_cursor_aura.cc',
+      'native_cursor_mac.mm',
+      'native_theme_delegate.h',
+      'painter.cc',
+      'painter.h',
+      'rect_based_targeting_utils.cc',
+      'rect_based_targeting_utils.h',
+      'repeat_controller.cc',
+      'repeat_controller.h',
+      'round_rect_painter.cc',
+      'round_rect_painter.h',
+      'shadow_border.cc',
+      'shadow_border.h',
+      'view.cc',
+      'view.h',
+      'view_constants.cc',
+      'view_constants.h',
+      'view_constants_aura.cc',
+      'view_constants_aura.h',
+      'view_model.cc',
+      'view_model.h',
+      'view_model_utils.cc',
+      'view_model_utils.h',
+      'view_targeter.cc',
+      'view_targeter.h',
+      'view_targeter_delegate.cc',
+      'view_targeter_delegate.h',
+      'views_switches.cc',
+      'views_switches.h',
+      'views_delegate.cc',
+      'views_delegate.h',
+      'views_touch_selection_controller_factory.h',
+      'views_touch_selection_controller_factory_aura.cc',
+      'views_touch_selection_controller_factory_mac.cc',
+      'widget/drop_helper.cc',
+      'widget/drop_helper.h',
+      'widget/root_view.cc',
+      'widget/root_view.h',
+      'widget/root_view_targeter.cc',
+      'widget/root_view_targeter.h',
+      'widget/monitor_win.cc',
+      'widget/monitor_win.h',
+      'widget/native_widget.h',
+      'widget/native_widget_aura.cc',
+      'widget/native_widget_aura.h',
+      'widget/native_widget_delegate.h',
+      'widget/native_widget_mac.h',
+      'widget/native_widget_mac.mm',
+      'widget/native_widget_private.h',
+      'widget/tooltip_manager_aura.cc',
+      'widget/tooltip_manager_aura.h',
+      'widget/tooltip_manager.cc',
+      'widget/tooltip_manager.h',
+      'widget/widget.cc',
+      'widget/widget.h',
+      'widget/widget_aura_utils.cc',
+      'widget/widget_aura_utils.h',
+      'widget/widget_delegate.cc',
+      'widget/widget_delegate.h',
+      'widget/widget_deletion_observer.cc',
+      'widget/widget_deletion_observer.h',
+      'widget/widget_observer.h',
+      'widget/widget_removals_observer.h',
+      'window/client_view.cc',
+      'window/client_view.h',
+      'window/custom_frame_view.cc',
+      'window/custom_frame_view.h',
+      'window/dialog_client_view.cc',
+      'window/dialog_client_view.h',
+      'window/dialog_delegate.cc',
+      'window/dialog_delegate.h',
+      'window/frame_background.cc',
+      'window/frame_background.h',
+      'window/frame_buttons.h',
+      'window/native_frame_view.cc',
+      'window/native_frame_view.h',
+      'window/non_client_view.cc',
+      'window/non_client_view.h',
+      'window/window_button_order_provider.cc',
+      'window/window_button_order_provider.h',
+      'window/window_resources.h',
+      'window/window_shape.cc',
+      'window/window_shape.h',
+    ],
+    'views_win_sources': [
+      'controls/menu/menu_wrapper.h',
+      'controls/menu/menu_2.cc',
+      'controls/menu/menu_2.h',
+      'win/fullscreen_handler.cc',
+      'win/fullscreen_handler.h',
+      'win/hwnd_message_handler.cc',
+      'win/hwnd_message_handler.h',
+      'win/hwnd_message_handler_delegate.h',
+      'win/hwnd_util.h',
+      'win/hwnd_util_aurawin.cc',
+      'win/scoped_fullscreen_visibility.cc',
+      'win/scoped_fullscreen_visibility.h',
+      'widget/widget_hwnd_utils.cc',
+      'widget/widget_hwnd_utils.h',
+    ],
+    'views_aura_sources': [
+      'accessibility/ax_aura_obj_cache.cc',
+      'accessibility/ax_aura_obj_cache.h',
+      'accessibility/ax_view_obj_wrapper.cc',
+      'accessibility/ax_view_obj_wrapper.h',
+      'accessibility/ax_widget_obj_wrapper.cc',
+      'accessibility/ax_widget_obj_wrapper.h',
+      'accessibility/ax_window_obj_wrapper.cc',
+      'accessibility/ax_window_obj_wrapper.h',
+      'bubble/bubble_window_targeter.cc',
+      'bubble/bubble_window_targeter.h',
+      'bubble/tray_bubble_view.cc',
+      'bubble/tray_bubble_view.h',
+      'corewm/cursor_height_provider_win.cc',
+      'corewm/cursor_height_provider_win.h',
+      'corewm/tooltip.h',
+      'corewm/tooltip_aura.cc',
+      'corewm/tooltip_aura.h',
+      'corewm/tooltip_controller.cc',
+      'corewm/tooltip_controller.h',
+      'corewm/tooltip_win.cc',
+      'corewm/tooltip_win.h',
+      'mouse_watcher_view_host.cc',
+      'mouse_watcher_view_host.h',
+      'touchui/touch_editing_menu.cc',
+      'touchui/touch_editing_menu.h',
+      'touchui/touch_selection_controller_impl.cc',
+      'touchui/touch_selection_controller_impl.h',
+      'widget/window_reorderer.cc',
+      'widget/window_reorderer.h',
+    ],
+    'views_desktop_aura_sources': [
+      'widget/desktop_aura/desktop_capture_client.cc',
+      'widget/desktop_aura/desktop_capture_client.h',
+      'widget/desktop_aura/desktop_cursor_loader_updater.h',
+      'widget/desktop_aura/desktop_cursor_loader_updater_auralinux.cc',
+      'widget/desktop_aura/desktop_cursor_loader_updater_auralinux.h',
+      'widget/desktop_aura/desktop_dispatcher_client.cc',
+      'widget/desktop_aura/desktop_dispatcher_client.h',
+      'widget/desktop_aura/desktop_drop_target_win.cc',
+      'widget/desktop_aura/desktop_drop_target_win.h',
+      'widget/desktop_aura/desktop_event_client.cc',
+      'widget/desktop_aura/desktop_event_client.h',
+      'widget/desktop_aura/desktop_focus_rules.cc',
+      'widget/desktop_aura/desktop_focus_rules.h',
+      'widget/desktop_aura/desktop_native_cursor_manager.cc',
+      'widget/desktop_aura/desktop_native_cursor_manager.h',
+      'widget/desktop_aura/desktop_native_widget_aura.cc',
+      'widget/desktop_aura/desktop_native_widget_aura.h',
+      'widget/desktop_aura/desktop_window_tree_host.h',
+      'widget/desktop_aura/desktop_screen.h',
+      'widget/desktop_aura/desktop_screen_position_client.cc',
+      'widget/desktop_aura/desktop_screen_position_client.h',
+    ],
+    'views_desktop_aura_x11_sources': [
+      'widget/desktop_aura/desktop_drag_drop_client_aurax11.cc',
+      'widget/desktop_aura/desktop_drag_drop_client_aurax11.h',
+      'widget/desktop_aura/desktop_window_tree_host_x11.cc',
+      'widget/desktop_aura/desktop_window_tree_host_x11.h',
+      'widget/desktop_aura/desktop_screen_x11.cc',
+      'widget/desktop_aura/desktop_screen_x11.h',
+      'widget/desktop_aura/x11_desktop_handler.cc',
+      'widget/desktop_aura/x11_desktop_handler.h',
+      'widget/desktop_aura/x11_desktop_window_move_client.cc',
+      'widget/desktop_aura/x11_desktop_window_move_client.h',
+      'widget/desktop_aura/x11_move_loop.h',
+      'widget/desktop_aura/x11_move_loop_delegate.h',
+      'widget/desktop_aura/x11_topmost_window_finder.cc',
+      'widget/desktop_aura/x11_topmost_window_finder.h',
+      'widget/desktop_aura/x11_whole_screen_move_loop.cc',
+      'widget/desktop_aura/x11_whole_screen_move_loop.h',
+      'widget/desktop_aura/x11_window_event_filter.cc',
+      'widget/desktop_aura/x11_window_event_filter.h',
+    ],
+    'views_desktop_aura_win_sources': [
+      'widget/desktop_aura/desktop_cursor_loader_updater_aurawin.cc',
+      'widget/desktop_aura/desktop_drag_drop_client_win.cc',
+      'widget/desktop_aura/desktop_drag_drop_client_win.h',
+      'widget/desktop_aura/desktop_screen_win.cc',
+      'widget/desktop_aura/desktop_screen_win.h',
+      'widget/desktop_aura/desktop_window_tree_host_win.cc',
+      'widget/desktop_aura/desktop_window_tree_host_win.h',
+    ],
+    'views_test_support_sources': [
+      'controls/textfield/textfield_test_api.cc',
+      'controls/textfield/textfield_test_api.h',
+      'test/capture_tracking_view.cc',
+      'test/capture_tracking_view.h',
+      'test/desktop_test_views_delegate.h',
+      'test/desktop_test_views_delegate_aura.cc',
+      'test/desktop_test_views_delegate_mac.mm',
+      'test/event_generator_delegate_mac.h',
+      'test/event_generator_delegate_mac.mm',
+      'test/focus_manager_test.h',
+      'test/focus_manager_test.cc',
+      'test/menu_runner_test_api.cc',
+      'test/menu_runner_test_api.h',
+      'test/slider_test_api.cc',
+      'test/slider_test_api.h',
+      'test/test_views.cc',
+      'test/test_views.h',
+      'test/test_views_delegate.h',
+      'test/test_views_delegate_aura.cc',
+      'test/test_views_delegate_mac.mm',
+      'test/test_widget_observer.cc',
+      'test/test_widget_observer.h',
+      'test/ui_controls_factory_desktop_aurax11.cc',
+      'test/ui_controls_factory_desktop_aurax11.h',
+      'test/views_test_base.cc',
+      'test/views_test_base.h',
+      'test/views_test_helper.cc',
+      'test/views_test_helper.h',
+      'test/views_test_helper_aura.cc',
+      'test/views_test_helper_aura.h',
+      'test/views_test_helper_mac.h',
+      'test/views_test_helper_mac.mm',
+      'test/widget_test.cc',
+      'test/widget_test.h',
+      'test/widget_test_aura.cc',
+      'test/widget_test_mac.mm',
+      'test/x11_property_change_waiter.cc',
+      'test/x11_property_change_waiter.h',
+    ],
+    'views_test_support_aura_sources': [
+      'corewm/tooltip_controller_test_helper.cc',
+      'corewm/tooltip_controller_test_helper.h',
+    ],
+    'views_unittests_sources': [
+      'accessibility/native_view_accessibility_unittest.cc',
+      'accessibility/native_view_accessibility_win_unittest.cc',
+      'accessible_pane_view_unittest.cc',
+      'animation/bounds_animator_unittest.cc',
+      'bubble/bubble_border_unittest.cc',
+      'bubble/bubble_delegate_unittest.cc',
+      'bubble/bubble_frame_view_unittest.cc',
+      'bubble/bubble_window_targeter_unittest.cc',
+      'cocoa/bridged_native_widget_unittest.mm',
+      'controls/button/blue_button_unittest.cc',
+      'controls/button/custom_button_unittest.cc',
+      'controls/button/image_button_unittest.cc',
+      'controls/button/label_button_unittest.cc',
+      'controls/button/menu_button_unittest.cc',
+      'controls/combobox/combobox_unittest.cc',
+      'controls/label_unittest.cc',
+      'controls/menu/menu_controller_unittest.cc',
+      'controls/menu/menu_item_view_unittest.cc',
+      'controls/menu/menu_model_adapter_unittest.cc',
+      'controls/menu/menu_runner_cocoa_unittest.mm',
+      'controls/native/native_view_host_aura_unittest.cc',
+      'controls/native/native_view_host_mac_unittest.mm',
+      'controls/native/native_view_host_test_base.h',
+      'controls/native/native_view_host_test_base.cc',
+      'controls/native/native_view_host_unittest.cc',
+      'controls/prefix_selector_unittest.cc',
+      'controls/progress_bar_unittest.cc',
+      'controls/scrollbar/scrollbar_unittest.cc',
+      'controls/scroll_view_unittest.cc',
+      'controls/single_split_view_unittest.cc',
+      'controls/slider_unittest.cc',
+      'controls/styled_label_unittest.cc',
+      'controls/tabbed_pane/tabbed_pane_unittest.cc',
+      'controls/table/table_utils_unittest.cc',
+      'controls/table/table_view_unittest.cc',
+      'controls/table/test_table_model.cc',
+      'controls/table/test_table_model.h',
+      'controls/textfield/textfield_unittest.cc',
+      'controls/textfield/textfield_model_unittest.cc',
+      'controls/tree/tree_view_unittest.cc',
+      'focus/focus_manager_unittest.cc',
+      'focus/focus_traversal_unittest.cc',
+      'ime/input_method_bridge_unittest.cc',
+      'layout/box_layout_unittest.cc',
+      'layout/grid_layout_unittest.cc',
+      'rect_based_targeting_utils_unittest.cc',
+      'run_all_unittests.cc',
+      'view_model_unittest.cc',
+      'view_model_utils_unittest.cc',
+      'view_targeter_unittest.cc',
+      'view_unittest.cc',
+      'view_unittest_aura.cc',
+      'widget/native_widget_aura_unittest.cc',
+      'widget/native_widget_unittest.cc',
+      'widget/root_view_unittest.cc',
+      'widget/widget_unittest.cc',
+      'widget/window_reorderer_unittest.cc',
+      'window/custom_frame_view_unittest.cc',
+      'window/dialog_client_view_unittest.cc',
+      'window/dialog_delegate_unittest.cc',
+    ],
+    'views_unittests_aura_sources': [
+      'corewm/capture_controller_unittest.cc',
+      'corewm/tooltip_aura_unittest.cc',
+      'corewm/tooltip_controller_unittest.cc',
+      'touchui/touch_selection_controller_impl_unittest.cc',
+    ],
+    'views_unittests_desktop_aura_sources': [
+      'widget/desktop_aura/desktop_drag_drop_client_aurax11_unittest.cc',
+      'widget/desktop_aura/desktop_focus_rules_unittest.cc',
+      'widget/desktop_aura/desktop_native_widget_aura_unittest.cc',
+      'widget/desktop_aura/desktop_screen_x11_unittest.cc',
+      'widget/desktop_aura/desktop_screen_position_client_unittest.cc',
+      'widget/desktop_aura/desktop_window_tree_host_x11_unittest.cc',
+    ],
+  },
+  'targets': [
+    {
+      # GN version: //ui/views
+      'target_name': 'views',
+      'type': '<(component)',
+      'dependencies': [
+        '../../base/base.gyp:base',
+        '../../base/base.gyp:base_i18n',
+        '../../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
+        '../../skia/skia.gyp:skia',
+        '../../third_party/icu/icu.gyp:icui18n',
+        '../../third_party/icu/icu.gyp:icuuc',
+        '../../url/url.gyp:url_lib',
+        '../accessibility/accessibility.gyp:accessibility',
+        '../accessibility/accessibility.gyp:ax_gen',
+        '../base/ui_base.gyp:ui_base',
+        '../compositor/compositor.gyp:compositor',
+        '../events/events.gyp:events',
+        '../events/events.gyp:events_base',
+        '../events/platform/events_platform.gyp:events_platform',
+        '../gfx/gfx.gyp:gfx',
+        '../gfx/gfx.gyp:gfx_geometry',
+        '../native_theme/native_theme.gyp:native_theme',
+        '../resources/ui_resources.gyp:ui_resources',
+        '../strings/ui_strings.gyp:ui_strings',
+      ],
+      'export_dependent_settings': [
+        '../accessibility/accessibility.gyp:ax_gen',
+      ],
+      'defines': [
+        'VIEWS_IMPLEMENTATION',
+      ],
+      'sources': [
+        '<@(views_sources)',
+      ],
+      'conditions': [
+        ['use_ash==0', {
+          'sources!': [
+            'bubble/tray_bubble_view.cc',
+            'bubble/tray_bubble_view.h',
+          ],
+        }],
+        ['chromeos==0 and use_x11==1', {
+          'dependencies': [
+            '../display/display.gyp:display_util',
+          ],
+        }],
+        ['OS=="linux" and chromeos==0', {
+          'dependencies': [
+            '../shell_dialogs/shell_dialogs.gyp:shell_dialogs',
+          ],
+          'sources!': [
+            'window/window_button_order_provider.cc',
+          ],
+        }, { # OS=="linux" and chromeos==0
+          'sources/': [
+            ['exclude', 'linux_ui'],
+          ],
+        }],
+        ['OS=="win"', {
+          'sources': [
+            '<@(views_win_sources)',
+          ],
+          'dependencies': [
+            # For accessibility
+            '../../third_party/iaccessible2/iaccessible2.gyp:iaccessible2',
+          ],
+          'include_dirs': [
+            '../../third_party/wtl/include',
+          ],
+          'link_settings': {
+            'libraries': [
+              '-limm32.lib',
+              '-loleacc.lib',
+            ],
+            'msvs_settings': {
+              'VCLinkerTool': {
+                'DelayLoadDLLs': [
+                  'user32.dll',
+                ],
+              },
+            },
+          },
+          # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
+          'msvs_disabled_warnings': [ 4267, ],
+        }],
+        ['use_ozone==1', {
+          'dependencies': [
+            '../ozone/ozone.gyp:ozone',
+          ],
+        }],
+        ['use_x11==1', {
+          'dependencies': [
+            '../../build/linux/system.gyp:x11',
+            '../../build/linux/system.gyp:xrandr',
+            '../events/platform/x11/x11_events_platform.gyp:x11_events_platform',
+          ],
+        }],
+        ['use_aura==1', {
+          'sources': [
+            '<@(views_aura_sources)',
+          ],
+          'dependencies': [
+            '../aura/aura.gyp:aura',
+            '../wm/wm.gyp:wm',
+          ],
+        }],
+        ['use_aura and chromeos == 0', {
+          'sources': [ '<@(views_desktop_aura_sources)' ],
+          'conditions': [
+            ['use_x11 == 1', {
+              'sources': [ '<@(views_desktop_aura_x11_sources)' ],
+            }],
+            ['OS == "win"', {
+              'sources': [ '<@(views_desktop_aura_win_sources)' ],
+            }],
+          ],
+        }],
+      ],
+    }, # target_name: views
+    {
+      # GN version: //ui/views:test_support
+      'target_name': 'views_test_support',
+      'type': 'static_library',
+      'dependencies': [
+        '../../base/base.gyp:base',
+        '../../ipc/ipc.gyp:test_support_ipc',
+        '../../skia/skia.gyp:skia',
+        '../../testing/gtest.gyp:gtest',
+        '../base/ui_base.gyp:ui_base',
+        '../compositor/compositor.gyp:compositor',
+        '../compositor/compositor.gyp:compositor_test_support',
+        '../events/events.gyp:events',
+        '../events/events.gyp:events_test_support',
+        '../events/platform/events_platform.gyp:events_platform',
+        '../gfx/gfx.gyp:gfx',
+        '../gfx/gfx.gyp:gfx_geometry',
+        'views',
+      ],
+      'include_dirs': [
+        '..',
+      ],
+      'sources': [
+        '<@(views_test_support_sources)',
+      ],
+      'conditions': [
+        ['chromeos==1', {
+          'sources!': [
+            'test/ui_controls_factory_desktop_aurax11.cc',
+            'test/ui_controls_factory_desktop_aurax11.h',
+          ],
+        }],
+        ['use_aura==1', {
+          'sources': [ '<@(views_test_support_aura_sources)' ],
+          'dependencies': [
+            '../aura/aura.gyp:aura',
+            '../aura/aura.gyp:aura_test_support',
+            '../wm/wm.gyp:wm',
+          ],
+        }],
+      ],
+    },  # target_name: views_test_support
+    {
+      # GN version: //ui/views:views_unittests
+      'target_name': 'views_unittests',
+      'type': 'executable',
+      'dependencies': [
+        '../../base/base.gyp:base',
+        '../../base/base.gyp:base_i18n',
+        '../../base/base.gyp:test_support_base',
+        '../../skia/skia.gyp:skia',
+        '../../testing/gtest.gyp:gtest',
+        '../../third_party/icu/icu.gyp:icui18n',
+        '../../third_party/icu/icu.gyp:icuuc',
+        '../../url/url.gyp:url_lib',
+        '../accessibility/accessibility.gyp:accessibility',
+        '../base/ui_base.gyp:ui_base',
+        '../base/ui_base.gyp:ui_base_test_support',
+        '../compositor/compositor.gyp:compositor',
+        '../events/events.gyp:events',
+        '../events/events.gyp:events_base',
+        '../events/events.gyp:events_test_support',
+        '../gfx/gfx.gyp:gfx',
+        '../gfx/gfx.gyp:gfx_geometry',
+        '../resources/ui_resources.gyp:ui_resources',
+        '../resources/ui_resources.gyp:ui_test_pak',
+        '../strings/ui_strings.gyp:ui_strings',
+        'views',
+        'views_test_support',
+      ],
+      'include_dirs': [
+        '..',
+      ],
+      'sources': [
+        '<@(views_unittests_sources)',
+      ],
+      'conditions': [
+        ['chromeos==1', {
+          'sources!': [
+            'ime/input_method_bridge_unittest.cc',
+          ],
+        }],
+        ['OS=="win"', {
+          'dependencies': [
+            '../../third_party/iaccessible2/iaccessible2.gyp:iaccessible2',
+          ],
+          'link_settings': {
+            'libraries': [
+              '-limm32.lib',
+              '-loleacc.lib',
+              '-lcomctl32.lib',
+            ]
+          },
+          'include_dirs': [
+            '../third_party/wtl/include',
+          ],
+          'msvs_settings': {
+            'VCManifestTool': {
+              'AdditionalManifestFiles': [
+                '$(ProjectDir)\\test\\views_unittest.manifest',
+              ],
+            },
+          },
+        }],
+        ['OS=="win" and win_use_allocator_shim==1', {
+          'dependencies': [
+            '../../base/allocator/allocator.gyp:allocator',
+          ],
+        }],
+        ['OS=="linux" and use_allocator!="none"', {
+           # See http://crbug.com/162998#c4 for why this is needed.
+          'dependencies': [
+            '../../base/allocator/allocator.gyp:allocator',
+          ],
+        }],
+        ['use_x11==1', {
+          'dependencies': [
+            '../../build/linux/system.gyp:x11',
+            '../../build/linux/system.gyp:xext',
+            '../events/platform/x11/x11_events_platform.gyp:x11_events_platform',
+          ],
+        }],
+        ['use_ozone==1', {
+          'sources!': [
+            'corewm/capture_controller_unittest.cc',
+          ],
+        }],
+        ['use_aura==1', {
+          'sources': [ '<@(views_unittests_aura_sources)' ],
+          'dependencies': [
+            '../aura/aura.gyp:aura',
+            '../aura/aura.gyp:aura_test_support',
+            '../wm/wm.gyp:wm',
+          ],
+          'conditions': [
+            ['chromeos == 0', {
+              'sources': [ '<@(views_unittests_desktop_aura_sources)' ],
+            }],
+          ]
+        }],
+        ['use_x11==1', {
+          'dependencies': [
+            '../events/platform/x11/x11_events_platform.gyp:x11_events_platform',
+          ],
+        }],
+        ['OS=="mac"', {
+          # views_unittests not yet compiling on Mac. http://crbug.com/378134
+          'sources!': [
+            'bubble/bubble_window_targeter_unittest.cc',
+            'controls/button/custom_button_unittest.cc',
+            'controls/native/native_view_host_unittest.cc',
+            'controls/menu/menu_controller_unittest.cc',
+            'ime/input_method_bridge_unittest.cc',
+            'focus/focus_manager_unittest.cc',
+            'widget/window_reorderer_unittest.cc',
+          ]
+        }],
+      ],
+    },  # target_name: views_unittests
+  ],  # targets
+  'conditions': [
+    ['OS=="mac"', {
+      'targets': [
+        {
+          # GN version: //ui/views:macviews_interactive_ui_tests
+          'target_name': 'macviews_interactive_ui_tests',
+          'type': 'executable',
+          'dependencies': [
+            '../../base/base.gyp:base',
+            '../../base/base.gyp:test_support_base',
+            '../../skia/skia.gyp:skia',
+            '../../testing/gtest.gyp:gtest',
+            '../compositor/compositor.gyp:compositor_test_support',
+            '../resources/ui_resources.gyp:ui_resources',
+            '../resources/ui_resources.gyp:ui_test_pak',
+            '../strings/ui_strings.gyp:ui_strings',
+            'views',
+            'views_test_support',
+          ],
+          'sources': [
+            'run_all_unittests.cc',
+            'widget/native_widget_mac_interactive_uitest.mm',
+          ],
+          'conditions': [
+            ['use_aura == 1', {
+              'dependencies': [
+                '../aura/aura.gyp:aura',
+                '../wm/wm.gyp:wm',
+              ],
+            }],
+          ],
+        },  # target_name: macviews_interactive_ui_tests
+      ],  # targets
+    }],
+  ],  # conditions
+}
--- a/ui/views/widget/desktop_aura/desktop_factory_ozone.cc
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/views/widget/desktop_aura/desktop_factory_ozone.h"
-
-#include "base/logging.h"
-
-namespace views {
-
-// static
-DesktopFactoryOzone* DesktopFactoryOzone::impl_ = NULL;
-
-DesktopFactoryOzone::DesktopFactoryOzone() {
-}
-
-DesktopFactoryOzone::~DesktopFactoryOzone() {
-}
-
-DesktopFactoryOzone* DesktopFactoryOzone::GetInstance() {
-  CHECK(impl_) << "DesktopFactoryOzone accessed before constructed";
-  return impl_;
-}
-
-void DesktopFactoryOzone::SetInstance(DesktopFactoryOzone* impl) {
-  impl_ = impl;
-}
-
-} // namespace views
--- a/ui/views/widget/desktop_aura/desktop_factory_ozone.h
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_FACTORY_OZONE_H_
-#define UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_FACTORY_OZONE_H_
-
-#include "ui/views/views_export.h"
-
-namespace gfx {
-class Rect;
-class Screen;
-}
-
-namespace views {
-class DesktopNativeWidgetAura;
-class DesktopWindowTreeHost;
-
-namespace internal {
-class NativeWidgetDelegate;
-}
-
-class VIEWS_EXPORT DesktopFactoryOzone {
- public:
-  DesktopFactoryOzone();
-  virtual ~DesktopFactoryOzone();
-
-  // Returns the instance.
-  static DesktopFactoryOzone* GetInstance();
-
-  // Sets the implementation delegate. Ownership is retained by the caller.
-  static void SetInstance(DesktopFactoryOzone* impl);
-
-  // Delegates implementation of DesktopWindowTreeHost::Create externally to
-  // Ozone implementation.
-  virtual DesktopWindowTreeHost* CreateWindowTreeHost(
-      internal::NativeWidgetDelegate* native_widget_delegate,
-      DesktopNativeWidgetAura* desktop_native_widget_aura) = 0;
-
-  // Delegates implementation of DesktopScreen externally to
-  // Ozone implementation.
-  virtual gfx::Screen* CreateDesktopScreen() = 0;
-
- private:
-  static DesktopFactoryOzone* impl_; // not owned
-};
-
-}  // namespace views
-
-#endif // UI_VIEWS_WIDGET_DESKTOP_AURA_DESKTOP_FACTORY_OZONE_H_
--- a/ui/views/widget/desktop_aura/desktop_screen_ozone.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/views/widget/desktop_aura/desktop_screen.h"
-
-#include "ui/views/widget/desktop_aura/desktop_factory_ozone.h"
-
-namespace views {
-
-gfx::Screen* CreateDesktopScreen() {
-  return DesktopFactoryOzone::GetInstance()->CreateDesktopScreen();
-}
-
-}  // namespace views
--- a/ui/views/widget/desktop_aura/desktop_window_tree_host_ozone.cc
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/aura/window_tree_host.h"
-#include "ui/views/widget/desktop_aura/desktop_factory_ozone.h"
-#include "ui/views/widget/desktop_aura/desktop_window_tree_host.h"
-
-namespace views {
-
-DesktopWindowTreeHost* DesktopWindowTreeHost::Create(
-    internal::NativeWidgetDelegate* native_widget_delegate,
-    DesktopNativeWidgetAura* desktop_native_widget_aura) {
-  DesktopFactoryOzone* d_factory = DesktopFactoryOzone::GetInstance();
-
-  return d_factory->CreateWindowTreeHost(native_widget_delegate,
-                                         desktop_native_widget_aura);
-}
-
-}  // namespace views
--- /dev/null
+++ b/ui/webui/file_picker_web_dialog.h
@@ -0,0 +1,56 @@
+// Copyright (c) 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef FILE_PICKER_WEB_DIALOG_H_
+#define FILE_PICKER_WEB_DIALOG_H_
+
+#include <string>
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/compiler_specific.h"
+#include "ui/gfx/native_widget_types.h"
+#include "ui/shell_dialogs/select_file_dialog.h"
+#include "ui/web_dialogs/web_dialog_delegate.h"
+
+namespace ui {
+
+// Launches a web dialog for file picker with specified URL and title.
+class FilePickerWebDialog : public ui::WebDialogDelegate {
+ public:
+  // Shows the dialog box.
+  static void ShowDialog(SelectFileDialog::Type type,
+                         gfx::NativeWindow owning_window,
+                         content::WebContents* contents,
+                         SelectFileDialog::Listener* listener);
+  // Closes the dialog, which will delete itself.
+  void Close(const std::string& file_path) const;
+
+ private:
+  FilePickerWebDialog(SelectFileDialog::Type type, SelectFileDialog::Listener*);
+
+  // Overridden from ui::WebDialogDelegate:
+  ui::ModalType GetDialogModalType() const override;
+  base::string16 GetDialogTitle() const override;
+  GURL GetDialogContentURL() const override;
+  void GetWebUIMessageHandlers(
+      std::vector<content::WebUIMessageHandler*>* handlers) const override;
+  void GetDialogSize(gfx::Size* size) const override;
+  std::string GetDialogArgs() const override;
+  void OnDialogClosed(const std::string& json_retval) override;
+  void OnCloseContents(content::WebContents* source,
+                       bool* out_close_dialog) override;
+  bool ShouldShowDialogTitle() const override;
+  bool HandleContextMenu(const content::ContextMenuParams& params) override;
+
+  SelectFileDialog::Type type_;
+  SelectFileDialog::Listener* listener_;
+
+  DISALLOW_COPY_AND_ASSIGN(FilePickerWebDialog);
+};
+
+}  // namespace ui
+
+
+#endif  // FILE_PICKER_WEB_DIALOG_H_
--- /dev/null
+++ b/ui/webui/ozone_webui.cc
@@ -0,0 +1,173 @@
+// Copyright (c) 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/ui/webui/ozone_webui.h"
+
+#include <set>
+
+#include "base/command_line.h"
+#include "base/debug/leak_annotations.h"
+#include "base/environment.h"
+#include "base/i18n/rtl.h"
+#include "base/logging.h"
+#include "base/nix/mime_util_xdg.h"
+#include "base/stl_util.h"
+#include "base/strings/stringprintf.h"
+#include "ozone/ui/webui/select_file_dialog_impl_webui.h"
+
+namespace views {
+
+OzoneWebUI::OzoneWebUI() {
+}
+
+OzoneWebUI::~OzoneWebUI() {
+}
+
+void OzoneWebUI::Initialize() {
+}
+
+ui::SelectFileDialog* OzoneWebUI::CreateSelectFileDialog(
+    ui::SelectFileDialog::Listener* listener,
+    ui::SelectFilePolicy* policy) const {
+  return ui::SelectFileDialogImplWebUI::Create(listener, policy);
+}
+
+scoped_ptr<ui::LinuxInputMethodContext> OzoneWebUI::CreateInputMethodContext(
+      ui::LinuxInputMethodContextDelegate* delegate) const {
+  return scoped_ptr<ui::LinuxInputMethodContext>();
+}
+
+gfx::FontRenderParams OzoneWebUI::GetDefaultFontRenderParams() const {
+  NOTIMPLEMENTED();
+  return params_;
+}
+
+scoped_ptr<gfx::ScopedPangoFontDescription>
+  OzoneWebUI::GetDefaultPangoFontDescription() const {
+  NOTIMPLEMENTED();
+  return scoped_ptr<gfx::ScopedPangoFontDescription>();
+}
+
+double OzoneWebUI::GetFontDPI() const {
+  NOTIMPLEMENTED();
+  return 96.0;
+}
+
+gfx::Image OzoneWebUI::GetThemeImageNamed(int id) const {
+  return gfx::Image();
+}
+
+bool OzoneWebUI::GetColor(int id, SkColor* color) const {
+  return false;
+}
+
+bool OzoneWebUI::HasCustomImage(int id) const {
+  return false;
+}
+
+SkColor OzoneWebUI::GetFocusRingColor() const {
+  return SK_ColorBLACK;
+}
+
+SkColor OzoneWebUI::GetThumbActiveColor() const {
+  return SK_ColorBLACK;
+}
+
+SkColor OzoneWebUI::GetThumbInactiveColor() const {
+  return SK_ColorBLACK;
+}
+
+SkColor OzoneWebUI::GetTrackColor() const {
+  return SK_ColorBLACK;
+}
+
+SkColor OzoneWebUI::GetActiveSelectionBgColor() const {
+  return SK_ColorBLACK;
+}
+
+SkColor OzoneWebUI::GetActiveSelectionFgColor() const {
+  return SK_ColorBLACK;
+}
+
+SkColor OzoneWebUI::GetInactiveSelectionBgColor() const {
+  return SK_ColorBLACK;
+}
+
+SkColor OzoneWebUI::GetInactiveSelectionFgColor() const {
+  return SK_ColorBLACK;
+}
+
+double OzoneWebUI::GetCursorBlinkInterval() const {
+  return 1.0;
+}
+
+ui::NativeTheme* OzoneWebUI::GetNativeTheme(aura::Window* window) const {
+  return 0;
+}
+
+void OzoneWebUI::SetNativeThemeOverride(
+      const NativeThemeGetter& callback) {
+}
+
+bool OzoneWebUI::GetDefaultUsesSystemTheme() const {
+  return false;
+}
+
+void OzoneWebUI::SetDownloadCount(int count) const {
+}
+
+void OzoneWebUI::SetProgressFraction(float percentage) const {
+}
+
+bool OzoneWebUI::IsStatusIconSupported() const {
+  return false;
+}
+
+scoped_ptr<StatusIconLinux> OzoneWebUI::CreateLinuxStatusIcon(
+  const gfx::ImageSkia& image,
+  const base::string16& tool_tip) const {
+  return scoped_ptr<views::StatusIconLinux>();
+}
+
+gfx::Image OzoneWebUI::GetIconForContentType(
+  const std::string& content_type, int size) const {
+  return gfx::Image();
+}
+
+scoped_ptr<Border> OzoneWebUI::CreateNativeBorder(
+  views::LabelButton* owning_button,
+  scoped_ptr<views::LabelButtonBorder> border) {
+  return border.Pass();
+}
+
+void OzoneWebUI::AddWindowButtonOrderObserver(
+  WindowButtonOrderObserver* observer) {
+}
+
+void OzoneWebUI::RemoveWindowButtonOrderObserver(
+  WindowButtonOrderObserver* observer) {
+}
+
+bool OzoneWebUI::UnityIsRunning() {
+  return 0;
+}
+
+LinuxUI::NonClientMiddleClickAction
+OzoneWebUI::GetNonClientMiddleClickAction() {
+  return MIDDLE_CLICK_ACTION_NONE;
+}
+
+void OzoneWebUI::NotifyWindowManagerStartupComplete() {
+}
+
+bool OzoneWebUI::MatchEvent(const ui::Event& event,
+  std::vector<TextEditCommandAuraLinux>* commands) {
+  return false;
+}
+
+}  // namespace views
+
+views::LinuxUI* BuildWebUI() {
+  return new views::OzoneWebUI;
+}
--- /dev/null
+++ b/ui/webui/ozone_webui.h
@@ -0,0 +1,114 @@
+// Copyright (c) 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_OZONE_WEB_UI_H_
+#define CHROME_BROWSER_UI_OZONE_WEB_UI_H_
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/compiler_specific.h"
+#include "base/observer_list.h"
+#include "ui/base/ime/linux/linux_input_method_context.h"
+#include "ui/events/linux/text_edit_key_bindings_delegate_auralinux.h"
+#include "ui/gfx/color_utils.h"
+#include "ui/gfx/font_render_params.h"
+#include "ui/gfx/geometry/insets.h"
+#include "ui/gfx/image/image.h"
+#include "ui/gfx/pango_util.h"
+#include "ui/views/border.h"
+#include "ui/views/controls/button/label_button.h"
+#include "ui/views/controls/button/label_button_border.h"
+#include "ui/views/linux_ui/linux_ui.h"
+#include "ui/views/window/frame_buttons.h"
+
+class SkBitmap;
+
+namespace gfx {
+class Image;
+}
+
+using ui::TextEditCommandAuraLinux;
+
+namespace views {
+class Border;
+class LabelButton;
+class View;
+class NativeThemeChangeObserver;
+class WindowButtonOrderObserver;
+// Interface to Wayland desktop features.
+//
+class OzoneWebUI : public views::LinuxUI {
+ public:
+  OzoneWebUI();
+  virtual ~OzoneWebUI();
+
+  // ui::LinuxInputMethodContextFactory:
+  scoped_ptr<ui::LinuxInputMethodContext> CreateInputMethodContext(
+      ui::LinuxInputMethodContextDelegate* delegate) const override;
+
+  // gfx::LinuxFontDelegate:
+  gfx::FontRenderParams GetDefaultFontRenderParams() const override;
+  scoped_ptr<gfx::ScopedPangoFontDescription>
+      GetDefaultPangoFontDescription() const override;
+  double GetFontDPI() const override;
+
+  // ui::LinuxShellDialog:
+  ui::SelectFileDialog* CreateSelectFileDialog(
+      ui::SelectFileDialog::Listener* listener,
+      ui::SelectFilePolicy* policy) const override;
+
+  // ui::LinuxUI:
+  void Initialize() override;
+
+  // These methods are not needed
+  gfx::Image GetThemeImageNamed(int id) const override;
+  bool GetColor(int id, SkColor* color) const override;
+  bool HasCustomImage(int id) const override;
+  SkColor GetFocusRingColor() const override;
+  SkColor GetThumbActiveColor() const override;
+  SkColor GetThumbInactiveColor() const override;
+  SkColor GetTrackColor() const override;
+  SkColor GetActiveSelectionBgColor() const override;
+  SkColor GetActiveSelectionFgColor() const override;
+  SkColor GetInactiveSelectionBgColor() const override;
+  SkColor GetInactiveSelectionFgColor() const override;
+  double GetCursorBlinkInterval() const override;
+  ui::NativeTheme* GetNativeTheme(aura::Window* window) const override;
+  void SetNativeThemeOverride(const NativeThemeGetter& callback) override;
+  bool GetDefaultUsesSystemTheme() const override;
+  void SetDownloadCount(int count) const override;
+  void SetProgressFraction(float percentage) const override;
+  bool IsStatusIconSupported() const override;
+  scoped_ptr<StatusIconLinux> CreateLinuxStatusIcon(
+      const gfx::ImageSkia& image,
+      const base::string16& tool_tip) const override;
+  gfx::Image GetIconForContentType(const std::string& content_type,
+                                   int size) const override;
+  scoped_ptr<Border> CreateNativeBorder(
+      views::LabelButton* owning_button,
+      scoped_ptr<views::LabelButtonBorder> border) override;
+  void AddWindowButtonOrderObserver(
+      WindowButtonOrderObserver* observer) override;
+  void RemoveWindowButtonOrderObserver(
+      WindowButtonOrderObserver* observer) override;
+  bool UnityIsRunning() override;
+  NonClientMiddleClickAction GetNonClientMiddleClickAction() override;
+  void NotifyWindowManagerStartupComplete() override;
+
+  bool MatchEvent(const ui::Event& event,
+                  std::vector<TextEditCommandAuraLinux>* commands) override;
+
+ private:
+  gfx::FontRenderParams params_;
+  DISALLOW_COPY_AND_ASSIGN(OzoneWebUI);
+};
+
+}  // namespace views
+
+views::LinuxUI* BuildWebUI();
+
+#endif  // CHROME_BROWSER_UI_OZONE_WEB_UI_H_
--- /dev/null
+++ b/ui/webui/select_file_dialog_impl_webui.cc
@@ -0,0 +1,83 @@
+// Copyright (c) 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+#include "ozone/ui/webui/select_file_dialog_impl_webui.h"
+
+#include <deque>
+#include <string>
+
+#include "base/environment.h"
+#include "base/files/file_util.h"
+#include "base/lazy_instance.h"
+#include "base/nix/xdg_util.h"
+#include "base/threading/thread_restrictions.h"
+#include "content/public/browser/web_contents.h"
+
+#include "ozone/ui/webui/file_picker_web_dialog.h"
+
+namespace ui {
+
+base::FilePath* SelectFileDialogImplWebUI::last_saved_path_ = NULL;
+base::FilePath* SelectFileDialogImplWebUI::last_opened_path_ = NULL;
+
+// static
+ui::SelectFileDialog* SelectFileDialogImplWebUI::Create(
+    SelectFileDialog::Listener* listener,
+    SelectFilePolicy* policy) {
+  return new SelectFileDialogImplWebUI(listener, policy);
+}
+
+SelectFileDialogImplWebUI::SelectFileDialogImplWebUI(Listener* listener,
+                                           ui::SelectFilePolicy* policy)
+    : SelectFileDialog(listener, policy),
+      file_type_index_(0),
+      type_(SELECT_NONE) {
+  if (!last_saved_path_) {
+    last_saved_path_ = new base::FilePath();
+    last_opened_path_ = new base::FilePath();
+  }
+}
+
+SelectFileDialogImplWebUI::~SelectFileDialogImplWebUI() { }
+
+bool SelectFileDialogImplWebUI::HasMultipleFileTypeChoicesImpl() {
+  NOTIMPLEMENTED();
+  return false;
+}
+
+bool SelectFileDialogImplWebUI::IsRunning(gfx::NativeWindow parent_window)
+    const {
+  NOTIMPLEMENTED();
+  return false;
+}
+void SelectFileDialogImplWebUI::ListenerDestroyed() {
+  listener_ = NULL;
+}
+
+void SelectFileDialogImplWebUI::SelectFileImpl(
+    SelectFileDialog::Type type,
+    const base::string16& title,
+    const base::FilePath& default_path,
+    const SelectFileDialog::FileTypeInfo* file_types,
+    int file_type_index,
+    const std::string& default_extension,
+    gfx::NativeWindow owning_window,
+    void* params) {
+
+  content::WebContents* web_contents =
+      static_cast<content::WebContents*>(params);
+
+  // FIXME(joone): The title, default_path, and file_types should be passed
+  //               to ShowDialog.
+  FilePickerWebDialog::ShowDialog(type, owning_window, web_contents, listener_);
+}
+
+bool SelectFileDialogImplWebUI::CallDirectoryExistsOnUIThread(
+    const base::FilePath& path) {
+  base::ThreadRestrictions::ScopedAllowIO allow_io;
+  return base::DirectoryExists(path);
+}
+
+}  // namespace ui
--- /dev/null
+++ b/ui/webui/select_file_dialog_impl_webui.h
@@ -0,0 +1,75 @@
+// Copyright (c) 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// This file implements select dialog functionality using webview.
+
+#ifndef UI_SHELL_DIALOGS_WEBUI_SELECT_FILE_DIALOG_IMPL_H_
+#define UI_SHELL_DIALOGS_WEBUI_SELECT_FILE_DIALOG_IMPL_H_
+
+#include <set>
+
+#include "base/compiler_specific.h"
+#include "base/nix/xdg_util.h"
+#include "ui/shell_dialogs/select_file_dialog.h"
+
+namespace ui {
+
+class SelectFileDialogImplWebUI : public SelectFileDialog {
+ public:
+  // Main factory method which returns correct type.
+  static ui::SelectFileDialog* Create(Listener* listener,
+                                      ui::SelectFilePolicy* policy);
+  // BaseShellDialog implementation.
+  bool IsRunning(gfx::NativeWindow parent_window) const override;
+  void ListenerDestroyed() override;
+
+ protected:
+  explicit SelectFileDialogImplWebUI(Listener* listener,
+                                     ui::SelectFilePolicy* policy);
+  virtual ~SelectFileDialogImplWebUI();
+
+  // SelectFileDialog implementation.
+  // |params| is user data we pass back via the Listener interface.
+  void SelectFileImpl(Type type,
+                      const base::string16& title,
+                      const base::FilePath& default_path,
+                      const FileTypeInfo* file_types,
+                      int file_type_index,
+                      const base::FilePath::StringType& default_extension,
+                      gfx::NativeWindow owning_window,
+                      void* params) override;
+  bool HasMultipleFileTypeChoicesImpl() override;
+
+  // Wrapper for base::DirectoryExists() that allow access on the UI
+  // thread. Use this only in the file dialog functions, where it's ok
+  // because the file dialog has to do many stats anyway. One more won't
+  // hurt too badly and it's likely already cached.
+  bool CallDirectoryExistsOnUIThread(const base::FilePath& path);
+
+  // The file filters.
+  FileTypeInfo file_types_;
+
+  // The index of the default selected file filter.
+  // Note: This starts from 1, not 0.
+  size_t file_type_index_;
+
+  // The type of dialog we are showing the user.
+  Type type_;
+
+  // These two variables track where the user last saved a file or opened a
+  // file so that we can display future dialogs with the same starting path.
+  static base::FilePath* last_saved_path_;
+  static base::FilePath* last_opened_path_;
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(SelectFileDialogImplWebUI);
+};
+
+SelectFileDialog* CreateLinuxSelectFileDialog(
+    SelectFileDialog::Listener* listener,
+    SelectFilePolicy* policy);
+
+}  // namespace ui
+
+#endif  // UI_SHELL_DIALOGS_WEBUI_SELECT_FILE_DIALOG_IMPL_H_
--- /dev/null
+++ b/ui/webui/webui.gypi
@@ -0,0 +1,18 @@
+# Copyright 2014 Intel Corporation. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+  'dependencies': [
+    '<(DEPTH)/ui/base/ui_base.gyp:ui_base',
+    '<(DEPTH)/build/linux/system.gyp:pangocairo',
+    '../ui/accessibility/accessibility.gyp:accessibility'
+  ],
+  'sources': [
+    'file_picker_web_dialog.h',
+    'select_file_dialog_impl_webui.h',
+    'select_file_dialog_impl_webui.cc',
+    'ozone_webui.h',
+    'ozone_webui.cc'
+  ],
+}
--- /dev/null
+++ b/wayland/DEPS
@@ -0,0 +1,6 @@
+include_rules = [
+  "-ozone/content",
+  "-ozone/ui/desktop_aura",
+  "+ozone/ui/events",
+  "+ozone/ui/gfx",
+]
--- /dev/null
+++ b/wayland/OWNERS
@@ -0,0 +1,2 @@
+kalyan.kondapally@intel.com
+tiago.vignatti@intel.com
--- /dev/null
+++ b/wayland/display.cc
@@ -0,0 +1,381 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/wayland/display.h"
+
+#include <EGL/egl.h>
+#include <string>
+
+#include "base/files/file_path.h"
+#include "base/native_library.h"
+#include "base/stl_util.h"
+#include "ozone/ui/events/event_factory_ozone_wayland.h"
+#include "ozone/ui/events/output_change_observer.h"
+#include "ozone/wayland/display_poll_thread.h"
+#include "ozone/wayland/egl/surface_ozone_wayland.h"
+#include "ozone/wayland/input/cursor.h"
+#include "ozone/wayland/input_device.h"
+#include "ozone/wayland/screen.h"
+#include "ozone/wayland/shell/shell.h"
+#include "ozone/wayland/window.h"
+
+namespace ozonewayland {
+WaylandDisplay* WaylandDisplay::instance_ = NULL;
+
+WaylandDisplay::WaylandDisplay() : SurfaceFactoryOzone(),
+    display_(NULL),
+    registry_(NULL),
+    compositor_(NULL),
+    shell_(NULL),
+    shm_(NULL),
+    primary_screen_(NULL),
+    primary_input_(NULL),
+    display_poll_thread_(NULL),
+    screen_list_(),
+    input_list_(),
+    widget_map_(),
+    serial_(0),
+    processing_events_(false) {
+}
+
+WaylandDisplay::~WaylandDisplay() {
+  Terminate();
+}
+
+const std::list<WaylandScreen*>& WaylandDisplay::GetScreenList() const {
+  return screen_list_;
+}
+
+WaylandWindow* WaylandDisplay::GetWindow(unsigned window_handle) const {
+  return GetWidget(window_handle);
+}
+
+struct wl_text_input_manager* WaylandDisplay::GetTextInputManager() const {
+  return text_input_manager_;
+}
+
+void WaylandDisplay::FlushDisplay() {
+  wl_display_flush(display_);
+}
+
+void WaylandDisplay::DestroyWindow(unsigned w) {
+  std::map<unsigned, WaylandWindow*>::const_iterator it = widget_map_.find(w);
+  WaylandWindow* widget = it == widget_map_.end() ? NULL : it->second;
+  DCHECK(widget);
+  delete widget;
+  widget_map_.erase(w);
+  if (widget_map_.empty())
+    StopProcessingEvents();
+}
+
+gfx::AcceleratedWidget WaylandDisplay::GetNativeWindow(unsigned window_handle) {
+  // Ensure we are processing wayland event requests.
+  StartProcessingEvents();
+  WaylandWindow* widget = GetWidget(window_handle);
+  DCHECK(widget);
+  widget->RealizeAcceleratedWidget();
+
+  return (gfx::AcceleratedWidget)widget->egl_window();
+}
+
+bool WaylandDisplay::InitializeHardware() {
+  InitializeDisplay();
+  if (!display_) {
+    LOG(ERROR) << "WaylandDisplay failed to initialize hardware";
+    return false;
+  }
+
+  return true;
+}
+
+intptr_t WaylandDisplay::GetNativeDisplay() {
+  return (intptr_t)display_;
+}
+
+scoped_ptr<ui::SurfaceOzoneEGL> WaylandDisplay::CreateEGLSurfaceForWidget(
+    gfx::AcceleratedWidget w) {
+  return make_scoped_ptr<ui::SurfaceOzoneEGL>(new SurfaceOzoneWayland(w));
+}
+
+bool WaylandDisplay::LoadEGLGLES2Bindings(
+    ui::SurfaceFactoryOzone::AddGLLibraryCallback add_gl_library,
+    ui::SurfaceFactoryOzone::SetGLGetProcAddressProcCallback setprocaddress) {
+  // The variable EGL_PLATFORM specifies native platform to be used by the
+  // drivers (atleast on Mesa). When the variable is not set, Mesa uses the
+  // first platform listed in --with-egl-platforms during compilation. Thus, we
+  // ensure here that wayland is set as the native platform. However, we don't
+  // override the EGL_PLATFORM value in case it has already been set.
+  setenv("EGL_PLATFORM", "wayland", 0);
+  base::NativeLibraryLoadError error;
+  base::NativeLibrary gles_library = base::LoadNativeLibrary(
+    base::FilePath("libGLESv2.so.2"), &error);
+
+  if (!gles_library) {
+    LOG(WARNING) << "Failed to load GLES library: " << error.ToString();
+    return false;
+  }
+
+  base::NativeLibrary egl_library = base::LoadNativeLibrary(
+    base::FilePath("libEGL.so.1"), &error);
+
+  if (!egl_library) {
+    LOG(WARNING) << "Failed to load EGL library: " << error.ToString();
+    base::UnloadNativeLibrary(gles_library);
+    return false;
+  }
+
+  GLGetProcAddressProc get_proc_address =
+      reinterpret_cast<GLGetProcAddressProc>(
+          base::GetFunctionPointerFromNativeLibrary(
+              egl_library, "eglGetProcAddress"));
+
+  if (!get_proc_address) {
+    LOG(ERROR) << "eglGetProcAddress not found.";
+    base::UnloadNativeLibrary(egl_library);
+    base::UnloadNativeLibrary(gles_library);
+    return false;
+  }
+
+  setprocaddress.Run(get_proc_address);
+  add_gl_library.Run(egl_library);
+  add_gl_library.Run(gles_library);
+  return true;
+}
+
+const int32*
+WaylandDisplay::GetEGLSurfaceProperties(const int32* desired_list) {
+  static const EGLint kConfigAttribs[] = {
+    EGL_BUFFER_SIZE, 32,
+    EGL_ALPHA_SIZE, 8,
+    EGL_BLUE_SIZE, 8,
+    EGL_GREEN_SIZE, 8,
+    EGL_RED_SIZE, 8,
+    EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+    EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
+    EGL_NONE
+  };
+
+  return kConfigAttribs;
+}
+
+void WaylandDisplay::SetWidgetState(unsigned w,
+                                    ui::WidgetState state) {
+  switch (state) {
+    case ui::FULLSCREEN:
+    {
+      WaylandWindow* widget = GetWidget(w);
+      widget->SetFullscreen();
+      break;
+    }
+    case ui::MAXIMIZED:
+    {
+      WaylandWindow* widget = GetWidget(w);
+      widget->Maximize();
+      break;
+    }
+    case ui::MINIMIZED:
+    {
+      WaylandWindow* widget = GetWidget(w);
+      widget->Minimize();
+      break;
+    }
+    case ui::RESTORE:
+    {
+      WaylandWindow* widget = GetWidget(w);
+      widget->Restore();
+      break;
+    }
+    case ui::ACTIVE:
+      NOTIMPLEMENTED() << " ACTIVE " << w;
+      break;
+    case ui::INACTIVE:
+      NOTIMPLEMENTED() << " INACTIVE " << w;
+      break;
+    case ui::SHOW:
+      NOTIMPLEMENTED() << " SHOW " << w;
+      break;
+    case ui::HIDE:
+      NOTIMPLEMENTED() << " HIDE " << w;
+      break;
+    default:
+      break;
+  }
+}
+
+void WaylandDisplay::SetWidgetTitle(unsigned w,
+                                    const base::string16& title) {
+  WaylandWindow* widget = GetWidget(w);
+  DCHECK(widget);
+  widget->SetWindowTitle(title);
+}
+
+void WaylandDisplay::SetWidgetCursor(int cursor_type) {
+  primary_input_->SetCursorType(cursor_type);
+}
+
+void WaylandDisplay::CreateWidget(unsigned widget,
+                                  unsigned parent,
+                                  unsigned x,
+                                  unsigned y,
+                                  ui::WidgetType type) {
+  DCHECK(!GetWidget(widget));
+  WaylandWindow* window = CreateAcceleratedSurface(widget);
+
+  WaylandWindow* parent_window = GetWidget(parent);
+  DCHECK(window);
+  switch (type) {
+  case ui::WINDOW:
+    window->SetShellAttributes(WaylandWindow::TOPLEVEL);
+    break;
+  case ui::WINDOWFRAMELESS:
+    NOTIMPLEMENTED();
+    break;
+  case ui::POPUP:
+    DCHECK(parent_window);
+    window->SetShellAttributes(WaylandWindow::POPUP,
+                               parent_window->ShellSurface(),
+                               x,
+                               y);
+    break;
+  default:
+    break;
+  }
+}
+
+void WaylandDisplay::InitializeDisplay() {
+  DCHECK(!display_);
+  display_ = wl_display_connect(NULL);
+  if (!display_)
+    return;
+
+  instance_ = this;
+  static const struct wl_registry_listener registry_all = {
+    WaylandDisplay::DisplayHandleGlobal
+  };
+
+  registry_ = wl_display_get_registry(display_);
+  wl_registry_add_listener(registry_, &registry_all, this);
+  shell_ = new WaylandShell();
+
+  if (wl_display_roundtrip(display_) < 0) {
+    Terminate();
+    return;
+  }
+
+  ui::EventFactoryOzoneWayland::GetInstance()->
+      SetWindowStateChangeHandler(this);
+  display_poll_thread_ = new WaylandDisplayPollThread(display_);
+}
+
+WaylandWindow* WaylandDisplay::CreateAcceleratedSurface(unsigned w) {
+  WaylandWindow* window = new WaylandWindow(w);
+  widget_map_[w] = window;
+
+  return window;
+}
+
+void WaylandDisplay::StartProcessingEvents() {
+  DCHECK(display_poll_thread_);
+  // Start polling for wayland events.
+  if (!processing_events_) {
+    display_poll_thread_->StartProcessingEvents();
+    processing_events_ = true;
+  }
+}
+
+void WaylandDisplay::StopProcessingEvents() {
+  DCHECK(display_poll_thread_);
+  // Start polling for wayland events.
+  if (processing_events_) {
+    display_poll_thread_->StopProcessingEvents();
+    processing_events_ = false;
+  }
+}
+
+void WaylandDisplay::Terminate() {
+  if (!widget_map_.empty()) {
+    STLDeleteValues(&widget_map_);
+    widget_map_.clear();
+  }
+
+  for (std::list<WaylandInputDevice*>::iterator i = input_list_.begin();
+      i != input_list_.end(); ++i) {
+      delete *i;
+  }
+
+  for (std::list<WaylandScreen*>::iterator i = screen_list_.begin();
+      i != screen_list_.end(); ++i) {
+      delete *i;
+  }
+
+  screen_list_.clear();
+  input_list_.clear();
+
+  WaylandCursor::Clear();
+
+  if (compositor_)
+    wl_compositor_destroy(compositor_);
+
+  delete shell_;
+  if (shm_)
+    wl_shm_destroy(shm_);
+
+  if (registry_)
+    wl_registry_destroy(registry_);
+
+  delete display_poll_thread_;
+
+  if (display_) {
+    wl_display_flush(display_);
+    wl_display_disconnect(display_);
+    display_ = NULL;
+  }
+
+  instance_ = NULL;
+}
+
+WaylandWindow* WaylandDisplay::GetWidget(unsigned w) const {
+  std::map<unsigned, WaylandWindow*>::const_iterator it = widget_map_.find(w);
+  return it == widget_map_.end() ? NULL : it->second;
+}
+
+
+// static
+void WaylandDisplay::DisplayHandleGlobal(void *data,
+    struct wl_registry *registry,
+    uint32_t name,
+    const char *interface,
+    uint32_t version) {
+
+  WaylandDisplay* disp = static_cast<WaylandDisplay*>(data);
+
+  if (strcmp(interface, "wl_compositor") == 0) {
+    disp->compositor_ = static_cast<wl_compositor*>(
+        wl_registry_bind(registry, name, &wl_compositor_interface, 1));
+  } else if (strcmp(interface, "wl_output") == 0) {
+    WaylandScreen* screen = new WaylandScreen(disp->registry(), name);
+    if (!disp->screen_list_.empty())
+      NOTIMPLEMENTED() << "Multiple screens support is not implemented";
+
+    disp->screen_list_.push_back(screen);
+    // (kalyan) Support extended output.
+    disp->primary_screen_ = disp->screen_list_.front();
+  } else if (strcmp(interface, "wl_seat") == 0) {
+    WaylandInputDevice *input_device = new WaylandInputDevice(disp, name);
+    disp->input_list_.push_back(input_device);
+    disp->primary_input_ = disp->input_list_.front();
+  } else if (strcmp(interface, "wl_shm") == 0) {
+    disp->shm_ = static_cast<wl_shm*>(
+        wl_registry_bind(registry, name, &wl_shm_interface, 1));
+     WaylandCursor::InitializeCursorData(disp->shm_);
+  } else if (strcmp(interface, "wl_text_input_manager") == 0) {
+    disp->text_input_manager_ = static_cast<wl_text_input_manager*>(
+        wl_registry_bind(registry, name, &wl_text_input_manager_interface, 1));
+  } else {
+    disp->shell_->Initialize(registry, name, interface, version);
+  }
+}
+
+}  // namespace ozonewayland
--- /dev/null
+++ b/wayland/display.h
@@ -0,0 +1,154 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_WAYLAND_DISPLAY_H_
+#define OZONE_WAYLAND_DISPLAY_H_
+
+#if !defined(__STDC_FORMAT_MACROS)
+#define __STDC_FORMAT_MACROS
+#endif
+
+#include <wayland-client.h>
+#include <list>
+#include <map>
+
+#include "base/basictypes.h"
+#include "ozone/ui/events/window_state_change_handler.h"
+#include "ozone/wayland/input/text-client-protocol.h"
+#include "ui/ozone/public/surface_factory_ozone.h"
+
+namespace ozonewayland {
+
+class WaylandDisplayPollThread;
+class WaylandInputDevice;
+class WaylandScreen;
+class WaylandShell;
+class WaylandWindow;
+struct wl_egl_window;
+
+typedef std::map<unsigned, WaylandWindow*> WindowMap;
+
+// WaylandDisplay is a wrapper around wl_display. Once we get a valid
+// wl_display, the Wayland server will send different events to register
+// the Wayland compositor, shell, screens, input devices, ...
+class WaylandDisplay : public ui::WindowStateChangeHandler,
+                       public ui::SurfaceFactoryOzone {
+ public:
+  WaylandDisplay();
+  virtual ~WaylandDisplay();
+
+  // Ownership is not passed to the caller.
+  static WaylandDisplay* GetInstance() { return instance_; }
+
+  // Returns a pointer to wl_display.
+  wl_display* display() const { return display_; }
+
+  wl_registry* registry() const { return registry_; }
+
+  WaylandInputDevice* PrimaryInput() const { return primary_input_; }
+
+  // Returns a list of the registered screens.
+  const std::list<WaylandScreen*>& GetScreenList() const;
+  WaylandScreen* PrimaryScreen() const { return primary_screen_ ; }
+
+  WaylandShell* GetShell() const { return shell_; }
+
+  wl_shm* shm() const { return shm_; }
+  wl_compositor* GetCompositor() const { return compositor_; }
+  struct wl_text_input_manager* GetTextInputManager() const;
+
+  int GetDisplayFd() const { return wl_display_get_fd(display_); }
+  unsigned GetSerial() const { return serial_; }
+  void SetSerial(unsigned serial) { serial_ = serial; }
+  // Returns WaylandWindow associated with w. The ownership is not transferred
+  // to the caller.
+  WaylandWindow* GetWindow(unsigned window_handle) const;
+  gfx::AcceleratedWidget GetNativeWindow(unsigned window_handle);
+
+  // Destroys WaylandWindow whose handle is w.
+  void DestroyWindow(unsigned w);
+
+  // Does a round trip to Wayland server. This call blocks the current thread
+  // until all pending request are processed by the server.
+  void FlushDisplay();
+
+  bool InitializeHardware();
+
+  // Ozone Display implementation:
+  intptr_t GetNativeDisplay() override;
+
+  // Ownership is passed to the caller.
+  scoped_ptr<ui::SurfaceOzoneEGL> CreateEGLSurfaceForWidget(
+      gfx::AcceleratedWidget widget) override;
+
+  bool LoadEGLGLES2Bindings(
+      ui::SurfaceFactoryOzone::AddGLLibraryCallback add_gl_library,
+      ui::SurfaceFactoryOzone::SetGLGetProcAddressProcCallback
+      proc_address) override;
+  const int32* GetEGLSurfaceProperties(const int32* desired_list) override;
+
+  // WindowStateChangeHandler implementation:
+  void SetWidgetState(unsigned widget,
+                      ui::WidgetState state) override;
+  void SetWidgetTitle(unsigned w,
+                      const base::string16& title) override;
+  void SetWidgetCursor(int cursor_type) override;
+  void CreateWidget(unsigned widget,
+                    unsigned parent,
+                    unsigned x,
+                    unsigned y,
+                    ui::WidgetType type) override;
+
+ private:
+  void InitializeDisplay();
+  // Creates a WaylandWindow backed by EGL Window and maps it to w. This can be
+  // useful for callers to track a particular surface. By default the type of
+  // surface(i.e. toplevel, menu) is none. One needs to explicitly call
+  // WaylandWindow::SetShellAttributes to set this. The ownership of
+  // WaylandWindow is not passed to the caller.
+  WaylandWindow* CreateAcceleratedSurface(unsigned w);
+
+  // Starts polling on display fd. This should be used when one needs to
+  // continuously read pending events coming from Wayland compositor and
+  // dispatch them. The polling is done completely on a separate thread and
+  // doesn't block the thread from which this is called.
+  void StartProcessingEvents();
+  // Stops polling on display fd.
+  void StopProcessingEvents();
+
+  void Terminate();
+  WaylandWindow* GetWidget(unsigned w) const;
+  // This handler resolves all server events used in initialization. It also
+  // handles input device registration, screen registration.
+  static void DisplayHandleGlobal(
+      void *data,
+      struct wl_registry *registry,
+      uint32_t name,
+      const char *interface,
+      uint32_t version);
+
+  // WaylandDisplay manages the memory of all these pointers.
+  wl_display* display_;
+  wl_registry* registry_;
+  wl_compositor* compositor_;
+  WaylandShell* shell_;
+  wl_shm* shm_;
+  struct wl_text_input_manager* text_input_manager_;
+  WaylandScreen* primary_screen_;
+  WaylandInputDevice* primary_input_;
+  WaylandDisplayPollThread* display_poll_thread_;
+
+  std::list<WaylandScreen*> screen_list_;
+  std::list<WaylandInputDevice*> input_list_;
+  WindowMap widget_map_;
+  unsigned serial_;
+  bool processing_events_;
+  static WaylandDisplay* instance_;
+  DISALLOW_COPY_AND_ASSIGN(WaylandDisplay);
+};
+
+}  // namespace ozonewayland
+
+#endif  // OZONE_WAYLAND_DISPLAY_H_
--- /dev/null
+++ b/wayland/display_poll_thread.cc
@@ -0,0 +1,171 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/wayland/display_poll_thread.h"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/epoll.h>
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <wayland-client.h>
+
+#include "base/bind.h"
+#include "ozone/wayland/display.h"
+
+namespace ozonewayland {
+const int MAX_EVENTS = 16;
+// os-compatibility
+extern "C" {
+int osEpollCreateCloExec(void);
+
+static int setCloExecOrClose(int fd) {
+  int flags;
+
+  if (fd == -1)
+    return -1;
+
+  flags = fcntl(fd, F_GETFD);
+  if (flags == -1)
+    goto err;
+
+  if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1)
+    goto err;
+
+  return fd;
+
+  err:
+    close(fd);
+    return -1;
+}
+
+int osEpollCreateCloExec(void) {
+  int fd;
+
+#ifdef EPOLL_CLOEXEC
+  fd = epoll_create1(EPOLL_CLOEXEC);
+  if (fd >= 0)
+    return fd;
+  if (errno != EINVAL)
+    return -1;
+#endif
+
+  fd = epoll_create(1);
+  return setCloExecOrClose(fd);
+}
+}  // os-compatibility
+
+WaylandDisplayPollThread::WaylandDisplayPollThread(wl_display* display)
+    : base::Thread("WaylandDisplayPollThread"),
+      display_(display),
+      polling_(true, false),
+      stop_polling_(true, false) {
+  DCHECK(display_);
+  epoll_fd_ = osEpollCreateCloExec();
+  if (epoll_fd_ < 0)
+    LOG(ERROR) << "Epoll creation failed.";
+}
+
+WaylandDisplayPollThread::~WaylandDisplayPollThread() {
+  StopProcessingEvents();
+}
+
+void WaylandDisplayPollThread::StartProcessingEvents() {
+  DCHECK(!polling_.IsSignaled() && epoll_fd_);
+  base::Thread::Options options;
+  options.message_loop_type = base::MessageLoop::TYPE_IO;
+  StartWithOptions(options);
+  SetPriority(base::kThreadPriority_Background);
+  message_loop_proxy()->PostTask(FROM_HERE, base::Bind(
+      &WaylandDisplayPollThread::DisplayRun, this));
+}
+
+void WaylandDisplayPollThread::StopProcessingEvents() {
+  if (polling_.IsSignaled())
+    stop_polling_.Signal();
+
+  Stop();
+}
+
+void WaylandDisplayPollThread::CleanUp() {
+  SetThreadWasQuitProperly(true);
+  if (epoll_fd_)
+    close(epoll_fd_);
+}
+
+void  WaylandDisplayPollThread::DisplayRun(WaylandDisplayPollThread* data) {
+  struct epoll_event ep[MAX_EVENTS];
+  int i, ret, count = 0;
+  uint32_t event = 0;
+  bool epoll_err = false;
+  unsigned display_fd = wl_display_get_fd(data->display_);
+  int epoll_fd = data->epoll_fd_;
+  ep[0].events = EPOLLIN;
+  ep[0].data.ptr = 0;
+  if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, display_fd, &ep[0]) < 0) {
+    close(epoll_fd);
+    data->epoll_fd_ = 0;
+    LOG(ERROR) << "epoll_ctl Add failed";
+    return;
+  }
+
+  // Set the signal state. This is used to query from other threads (i.e.
+  // StopProcessingEvents on Main thread), if this thread is still polling.
+  data->polling_.Signal();
+
+  // Adopted from:
+  // http://cgit.freedesktop.org/wayland/weston/tree/clients/window.c#n5531.
+  while (1) {
+    wl_display_dispatch_pending(data->display_);
+    ret = wl_display_flush(data->display_);
+    if (ret < 0 && errno == EAGAIN) {
+      ep[0].events = EPOLLIN | EPOLLERR | EPOLLHUP;
+      epoll_ctl(epoll_fd, EPOLL_CTL_MOD, display_fd, &ep[0]);
+    } else if (ret < 0) {
+      epoll_err = true;
+      break;
+    }
+    // StopProcessingEvents has been called or we have been asked to stop
+    // polling. Break from the loop.
+    if (data->stop_polling_.IsSignaled())
+      break;
+
+    count = epoll_wait(epoll_fd, ep, MAX_EVENTS, -1);
+    // Break if epoll wait returned value less than 0 and we aren't interrupted
+    // by a signal.
+    if (count < 0 && errno != EINTR) {
+      LOG(ERROR) << "epoll_wait returned an error." << errno;
+      epoll_err = true;
+      break;
+    }
+
+    for (i = 0; i < count; i++) {
+      event = ep[i].events;
+      // We can have cases where EPOLLIN and EPOLLHUP are both set for
+      // example. Don't break if both flags are set.
+      if ((event & EPOLLERR || event & EPOLLHUP) &&
+             !(event & EPOLLIN)) {
+        epoll_err = true;
+        break;
+      }
+
+      if (event & EPOLLIN) {
+        ret = wl_display_dispatch(data->display_);
+        if (ret == -1) {
+          LOG(ERROR) << "wl_display_dispatch failed with an error." << errno;
+          epoll_err = true;
+          break;
+        }
+      }
+    }
+
+    if (epoll_err)
+      break;
+  }
+
+  data->polling_.Reset();
+  data->stop_polling_.Reset();
+}
+
+}  // namespace ozonewayland
--- /dev/null
+++ b/wayland/display_poll_thread.h
@@ -0,0 +1,42 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_WAYLAND_DISPLAY_POLL_THREAD_H_
+#define OZONE_WAYLAND_DISPLAY_POLL_THREAD_H_
+
+#include "base/synchronization/waitable_event.h"
+#include "base/threading/thread.h"
+
+class wl_display;
+namespace ozonewayland {
+// This class lets you poll on a given Wayland display (passed in constructor),
+// read any pending events coming from Wayland compositor and dispatch them.
+// Caller should ensure that StopProcessingEvents is called before display is
+// destroyed.
+class WaylandDisplayPollThread : public base::Thread {
+ public:
+  explicit WaylandDisplayPollThread(wl_display* display);
+  ~WaylandDisplayPollThread() override;
+
+  // Starts polling on wl_display fd and read/flush requests coming from Wayland
+  // compositor.
+  void StartProcessingEvents();
+  // Stops polling and handling of any events from Wayland compositor.
+  void StopProcessingEvents();
+
+ protected:
+  void CleanUp() override;
+
+ private:
+  static void DisplayRun(WaylandDisplayPollThread* data);
+  base::WaitableEvent polling_;  // Is set as long as the thread is polling.
+  base::WaitableEvent stop_polling_;
+  int epoll_fd_;
+  wl_display* display_;
+  DISALLOW_COPY_AND_ASSIGN(WaylandDisplayPollThread);
+};
+
+}  // namespace ozonewayland
+
+#endif
--- /dev/null
+++ b/wayland/egl/OWNERS
@@ -0,0 +1,2 @@
+kalyan.kondapally@intel.com
+tiago.vignatti@intel.com
--- /dev/null
+++ b/wayland/egl/egl_window.cc
@@ -0,0 +1,27 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/wayland/egl/egl_window.h"
+
+#include <EGL/egl.h>
+#include <wayland-egl.h>
+
+namespace ozonewayland {
+
+EGLWindow::EGLWindow(struct wl_surface* surface, int32_t width, int32_t height)
+    : window_(NULL) {
+  window_ = wl_egl_window_create(surface, width, height);
+}
+
+EGLWindow::~EGLWindow() {
+  wl_egl_window_destroy(window_);
+}
+
+bool EGLWindow::Resize(int32_t width, int32_t height) {
+  // TODO(kalyan): Check if we need to sync display here.
+  wl_egl_window_resize(window_, width, height, 0, 0);
+  return true;
+}
+
+}  // namespace ozonewayland
--- /dev/null
+++ b/wayland/egl/egl_window.h
@@ -0,0 +1,32 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_WAYLAND_EGL_EGL_WINDOW_H_
+#define OZONE_WAYLAND_EGL_EGL_WINDOW_H_
+
+#include <wayland-client.h>
+
+#include "base/basictypes.h"
+
+struct wl_egl_window;
+
+namespace ozonewayland {
+
+class WaylandSurface;
+class EGLWindow {
+ public:
+  EGLWindow(struct wl_surface* surface, int32_t width, int32_t height);
+  ~EGLWindow();
+
+  wl_egl_window* egl_window() const { return window_; }
+  bool Resize(int32_t width, int32_t height);
+
+ private:
+  wl_egl_window* window_;
+  DISALLOW_COPY_AND_ASSIGN(EGLWindow);
+};
+
+}  // namespace ozonewayland
+
+#endif  // OZONE_WAYLAND_EGL_EGL_WINDOW_H_
--- /dev/null
+++ b/wayland/egl/surface_ozone_wayland.cc
@@ -0,0 +1,42 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/wayland/egl/surface_ozone_wayland.h"
+
+#include "ozone/ui/gfx/vsync_provider_wayland.h"
+#include "ozone/wayland/display.h"
+#include "ozone/wayland/window.h"
+
+namespace ozonewayland {
+
+SurfaceOzoneWayland::SurfaceOzoneWayland(unsigned handle)
+    : handle_(handle) {
+}
+
+SurfaceOzoneWayland::~SurfaceOzoneWayland() {
+  WaylandDisplay::GetInstance()->DestroyWindow(handle_);
+  WaylandDisplay::GetInstance()->FlushDisplay();
+}
+
+intptr_t SurfaceOzoneWayland::GetNativeWindow() {
+  return WaylandDisplay::GetInstance()->GetNativeWindow(handle_);
+}
+
+bool SurfaceOzoneWayland::ResizeNativeWindow(
+    const gfx::Size& viewport_size) {
+  WaylandWindow* window = WaylandDisplay::GetInstance()->GetWindow(handle_);
+  DCHECK(window);
+  window->Resize(viewport_size.width(), viewport_size.height());
+  return true;
+}
+
+bool SurfaceOzoneWayland::OnSwapBuffers() {
+  return true;
+}
+
+scoped_ptr<gfx::VSyncProvider> SurfaceOzoneWayland::CreateVSyncProvider() {
+  return scoped_ptr<gfx::VSyncProvider>(new gfx::WaylandSyncProvider());
+}
+
+}  // namespace ozonewayland
--- /dev/null
+++ b/wayland/egl/surface_ozone_wayland.h
@@ -0,0 +1,34 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_WAYLAND_EGL_SURFACE_OZONE_WAYLAND
+#define OZONE_WAYLAND_EGL_SURFACE_OZONE_WAYLAND
+
+#include "base/basictypes.h"
+#include "base/memory/scoped_ptr.h"
+#include "ui/gfx/gfx_export.h"
+#include "ui/ozone/public/surface_ozone_egl.h"
+
+namespace ozonewayland {
+
+// Provides EGL support for SurfaceOzone.
+class SurfaceOzoneWayland : public ui::SurfaceOzoneEGL {
+ public:
+  explicit SurfaceOzoneWayland(unsigned handle);
+  virtual ~SurfaceOzoneWayland();
+
+  // SurfaceOzone:
+  intptr_t GetNativeWindow() override;
+  bool ResizeNativeWindow(const gfx::Size& viewport_size) override;
+  bool OnSwapBuffers() override;
+  scoped_ptr<gfx::VSyncProvider> CreateVSyncProvider() override;
+
+ private:
+  unsigned handle_;
+  DISALLOW_COPY_AND_ASSIGN(SurfaceOzoneWayland);
+};
+
+}  // namespace ozonewayland
+
+#endif  // OZONE_WAYLAND_EGL_SURFACE_OZONE_WAYLAND
--- /dev/null
+++ b/wayland/input/OWNERS
@@ -0,0 +1,2 @@
+kalyan.kondapally@intel.com
+tiago.vignatti@intel.com
--- /dev/null
+++ b/wayland/input/cursor.cc
@@ -0,0 +1,175 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/wayland/input/cursor.h"
+
+#include <vector>
+
+#include "base/logging.h"
+#include "ozone/wayland/display.h"
+
+namespace ozonewayland {
+// This number should be equal to size of array defined in WaylandCursorData
+// constructor.
+const unsigned TotalCursorTypes = 24;
+
+class WaylandCursorData {
+ public:
+  explicit WaylandCursorData(wl_shm* shm);
+  ~WaylandCursorData();
+
+  static WaylandCursorData* GetInstance() {
+    return impl_;
+  }
+
+  static void InitializeCursorData(wl_shm* shm) {
+    if (!impl_)
+      impl_ = new WaylandCursorData(shm);
+  }
+
+  static void DestroyCursorData() {
+    if (impl_) {
+      delete impl_;
+      impl_ = NULL;
+    }
+  }
+
+  struct wl_cursor_image* GetCursorImage(WaylandCursor::CursorType index);
+
+ private:
+  wl_cursor_theme* cursor_theme_;
+  // All supported Cursor types.
+  std::vector<wl_cursor*> cursors_;
+  static WaylandCursorData* impl_;
+  DISALLOW_COPY_AND_ASSIGN(WaylandCursorData);
+};
+
+WaylandCursorData* WaylandCursorData::impl_ = NULL;
+
+WaylandCursorData::WaylandCursorData(wl_shm* shm)
+    : cursor_theme_(NULL),
+      cursors_(std::vector<wl_cursor*>(TotalCursorTypes)) {
+  // This list should be always in sync with WaylandCursor::CursorType
+  const char* cursor_names[] = {
+    "default",
+    "bottom_left_corner",
+    "bottom_right_corner",
+    "bottom_side",
+    "cross",
+    "fleur",
+    "grabbing",
+    "left_ptr",
+    "left_side",
+    "left_arrow",
+    "right_side",
+    "top_left_corner",
+    "top_left_arrow",
+    "top_right_corner",
+    "top_side",
+    "up_arrow",
+    "wait",
+    "watch",
+    "xterm",
+    "hand1",
+    "text",
+    "question_arrow",
+    "v_double_arrow",
+    "h_double_arrow"
+  };
+
+  // (kalyan) We should be able to configure the size of cursor and theme name.
+  cursor_theme_ = wl_cursor_theme_load(NULL, 24, shm);
+  DCHECK(cursor_theme_);
+
+  for (unsigned i = 0; i < TotalCursorTypes; i++)
+    cursors_[i] = wl_cursor_theme_get_cursor(cursor_theme_, cursor_names[i]);
+}
+
+struct wl_cursor_image* WaylandCursorData::GetCursorImage(
+    WaylandCursor::CursorType type) {
+  int index = type - 1;
+  const struct wl_cursor* cursor = cursors_.at(index);
+  if (!cursor)
+    return NULL;
+
+  return cursor->images[0];
+}
+
+WaylandCursorData::~WaylandCursorData() {
+  wl_cursor_theme_destroy(cursor_theme_);
+
+  if (!cursors_.empty())
+    cursors_.clear();
+}
+
+WaylandCursor::WaylandCursor(wl_shm* shm) : input_pointer_(NULL),
+    pointer_surface_(NULL),
+    current_cursor_(CURSOR_UNSET) {
+  DCHECK(WaylandCursorData::GetInstance());
+  WaylandDisplay* display = WaylandDisplay::GetInstance();
+  pointer_surface_ = wl_compositor_create_surface(display->GetCompositor());
+}
+
+WaylandCursor::~WaylandCursor() {
+  DCHECK(pointer_surface_);
+  wl_surface_destroy(pointer_surface_);
+}
+
+void WaylandCursor::Clear() {
+  WaylandCursorData::DestroyCursorData();
+}
+
+void WaylandCursor::InitializeCursorData(wl_shm* shm) {
+  WaylandCursorData::InitializeCursorData(shm);
+}
+
+void WaylandCursor::Update(CursorType type, uint32_t serial) {
+  if (!input_pointer_)
+    return;
+
+  DCHECK(type != CURSOR_UNSET);
+  CursorType cursor_type = type;
+  wl_cursor_image* image = WaylandCursorData::GetInstance()->GetCursorImage(
+      cursor_type);
+
+  if (!image) {
+    LOG(INFO) << "The current cursor theme does not have a cursor for type "
+              << cursor_type << ". Falling back to the default cursor.";
+    // The cursor currently being displayed is already the default one, so we
+    // can just continue showing it.
+    if (current_cursor_ == CURSOR_LEFT_PTR)
+      return;
+
+    cursor_type = CURSOR_LEFT_PTR;
+    image = WaylandCursorData::GetInstance()->GetCursorImage(cursor_type);
+    DCHECK(image);
+  }
+
+  current_cursor_ = cursor_type;
+  struct wl_buffer* buffer = wl_cursor_image_get_buffer(image);
+  int width = image->width;
+  int height = image->height;
+  wl_pointer_set_cursor(input_pointer_,
+                        serial,
+                        pointer_surface_,
+                        image->hotspot_x,
+                        image->hotspot_y);
+
+  struct wl_surface* surface = pointer_surface_;
+  wl_surface_attach(surface, buffer, 0, 0);
+  wl_surface_damage(surface, 0, 0, width, height);
+  wl_surface_commit(surface);
+}
+
+void WaylandCursor::SetInputPointer(wl_pointer* pointer) {
+  if (input_pointer_ == pointer)
+    return;
+
+  if (input_pointer_)
+    wl_pointer_destroy(input_pointer_);
+
+  input_pointer_ = pointer;
+}
+
+}  // namespace ozonewayland
--- /dev/null
+++ b/wayland/input/cursor.h
@@ -0,0 +1,71 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_WAYLAND_INPUT_CURSOR_H_
+#define OZONE_WAYLAND_INPUT_CURSOR_H_
+
+#include <wayland-client.h>
+#include <wayland-cursor.h>
+
+#include "base/basictypes.h"
+
+namespace ozonewayland {
+
+class WaylandCursor {
+ public:
+  enum CursorType {
+    CURSOR_UNSET = 0,
+    CURSOR_DEFAULT,
+    CURSOR_BOTTOM_LEFT,
+    CURSOR_BOTTOM_RIGHT,
+    CURSOR_BOTTOM,
+    CURSOR_CROSS,
+    CURSOR_FLEUR,
+    CURSOR_DRAGGING,
+    CURSOR_LEFT_PTR,
+    CURSOR_LEFT,
+    CURSOR_LEFT_ARROW,
+    CURSOR_RIGHT,
+    CURSOR_TOP_LEFT,
+    CURSOR_TOP_LEFT_ARROW,
+    CURSOR_TOP_RIGHT,
+    CURSOR_TOP,
+    CURSOR_UP_ARROW,
+    CURSOR_WAIT,
+    CURSOR_WATCH,
+    CURSOR_IBEAM,
+    CURSOR_HAND1,
+    CURSOR_TEXT,
+    CURSOR_QUESTION_ARROW,
+    CURSOR_V_DOUBLE_ARROW,
+    CURSOR_H_DOUBLE_ARROW
+  };
+
+  explicit WaylandCursor(wl_shm* shm);
+  ~WaylandCursor();
+
+  // Destroys CursorData. WaylandDisplay is responsible for calling this as
+  // needed. No other class should call this.
+  static void Clear();
+
+  // Initializes CursorData. WaylandDisplay is responsible for calling this as
+  // needed. No other class should call this. We do it this way to avoid
+  // initializing theme under sandbox.
+  static void InitializeCursorData(wl_shm* shm);
+
+  void Update(CursorType type, uint32_t serial);
+
+  wl_pointer* GetInputPointer() const { return input_pointer_; }
+  void SetInputPointer(wl_pointer* pointer);
+
+ private:
+  wl_pointer* input_pointer_;
+  struct wl_surface* pointer_surface_;
+  CursorType current_cursor_;
+  DISALLOW_COPY_AND_ASSIGN(WaylandCursor);
+};
+
+}  // namespace ozonewayland
+
+#endif  // OZONE_WAYLAND_DISPLAY_H_
--- /dev/null
+++ b/wayland/input/keyboard.cc
@@ -0,0 +1,106 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/wayland/input/keyboard.h"
+
+#include "ozone/ui/events/event_factory_ozone_wayland.h"
+
+namespace ozonewayland {
+
+WaylandKeyboard::WaylandKeyboard() : input_keyboard_(NULL),
+    dispatcher_(NULL) {
+}
+
+WaylandKeyboard::~WaylandKeyboard() {
+  if (input_keyboard_)
+    wl_keyboard_destroy(input_keyboard_);
+}
+
+void WaylandKeyboard::OnSeatCapabilities(wl_seat *seat, uint32_t caps) {
+  static const struct wl_keyboard_listener kInputKeyboardListener = {
+    WaylandKeyboard::OnKeyboardKeymap,
+    WaylandKeyboard::OnKeyboardEnter,
+    WaylandKeyboard::OnKeyboardLeave,
+    WaylandKeyboard::OnKeyNotify,
+    WaylandKeyboard::OnKeyModifiers,
+  };
+
+  dispatcher_ = ui::EventFactoryOzoneWayland::GetInstance()->EventConverter();
+
+  if ((caps & WL_SEAT_CAPABILITY_KEYBOARD) && !input_keyboard_) {
+    input_keyboard_ = wl_seat_get_keyboard(seat);
+    wl_keyboard_add_listener(input_keyboard_, &kInputKeyboardListener,
+        this);
+  } else if (!(caps & WL_SEAT_CAPABILITY_KEYBOARD) && input_keyboard_) {
+    wl_keyboard_destroy(input_keyboard_);
+    input_keyboard_ = NULL;
+  }
+}
+
+void WaylandKeyboard::OnKeyNotify(void* data,
+                                  wl_keyboard* input_keyboard,
+                                  uint32_t serial,
+                                  uint32_t time,
+                                  uint32_t key,
+                                  uint32_t state) {
+  WaylandKeyboard* device = static_cast<WaylandKeyboard*>(data);
+  ui::EventType type = ui::ET_KEY_PRESSED;
+  WaylandDisplay::GetInstance()->SetSerial(serial);
+  if (state == WL_KEYBOARD_KEY_STATE_RELEASED)
+    type = ui::ET_KEY_RELEASED;
+
+  device->dispatcher_->KeyNotify(type, key);
+}
+
+void WaylandKeyboard::OnKeyboardKeymap(void *data,
+                                       struct wl_keyboard *keyboard,
+                                       uint32_t format,
+                                       int fd,
+                                       uint32_t size) {
+  WaylandKeyboard* device = static_cast<WaylandKeyboard*>(data);
+
+  if (!data) {
+    close(fd);
+    return;
+  }
+
+  if (format != WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1) {
+    close(fd);
+    return;
+  }
+
+  base::SharedMemoryHandle section =  base::FileDescriptor(fd, true);
+  device->dispatcher_->InitializeXKB(section, size);
+}
+
+void WaylandKeyboard::OnKeyboardEnter(void* data,
+                                      wl_keyboard* input_keyboard,
+                                      uint32_t serial,
+                                      wl_surface* surface,
+                                      wl_array* keys) {
+  WaylandDisplay::GetInstance()->SetSerial(serial);
+}
+
+void WaylandKeyboard::OnKeyboardLeave(void* data,
+                                      wl_keyboard* input_keyboard,
+                                      uint32_t serial,
+                                      wl_surface* surface) {
+  WaylandDisplay::GetInstance()->SetSerial(serial);
+}
+
+void WaylandKeyboard::OnKeyModifiers(void *data,
+                                     wl_keyboard *keyboard,
+                                     uint32_t serial,
+                                     uint32_t mods_depressed,
+                                     uint32_t mods_latched,
+                                     uint32_t mods_locked,
+                                     uint32_t group) {
+  WaylandKeyboard* device = static_cast<WaylandKeyboard*>(data);
+  device->dispatcher_->KeyModifiers(mods_depressed,
+                                   mods_latched,
+                                   mods_locked,
+                                   group);
+}
+
+}  // namespace ozonewayland
--- /dev/null
+++ b/wayland/input/keyboard.h
@@ -0,0 +1,64 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_WAYLAND_INPUT_KEYBOARD_H_
+#define OZONE_WAYLAND_INPUT_KEYBOARD_H_
+
+#include "ozone/wayland/display.h"
+
+namespace ui {
+class EventConverterOzoneWayland;
+}
+
+namespace ozonewayland {
+
+class WaylandKeyboard {
+ public:
+  WaylandKeyboard();
+  ~WaylandKeyboard();
+
+  void OnSeatCapabilities(wl_seat *seat, uint32_t caps);
+
+ private:
+  static void OnKeyNotify(void* data,
+                          wl_keyboard* input_keyboard,
+                          uint32_t serial,
+                          uint32_t time,
+                          uint32_t key,
+                          uint32_t state);
+
+  static void OnKeyboardKeymap(void *data,
+                               struct wl_keyboard *keyboard,
+                               uint32_t format,
+                               int fd,
+                               uint32_t size);
+
+  static void OnKeyboardEnter(void* data,
+                              wl_keyboard* input_keyboard,
+                              uint32_t serial,
+                              wl_surface* surface,
+                              wl_array* keys);
+
+  static void OnKeyboardLeave(void* data,
+                              wl_keyboard* input_keyboard,
+                              uint32_t serial,
+                              wl_surface* surface);
+
+  static void OnKeyModifiers(void *data,
+                             wl_keyboard *keyboard,
+                             uint32_t serial,
+                             uint32_t mods_depressed,
+                             uint32_t mods_latched,
+                             uint32_t mods_locked,
+                             uint32_t group);
+
+  wl_keyboard* input_keyboard_;
+  ui::EventConverterOzoneWayland* dispatcher_;
+
+  DISALLOW_COPY_AND_ASSIGN(WaylandKeyboard);
+};
+
+}  // namespace ozonewayland
+
+#endif  // OZONE_WAYLAND_INPUT_KEYBOARD_H_
--- /dev/null
+++ b/wayland/input/pointer.cc
@@ -0,0 +1,181 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/wayland/input/pointer.h"
+
+#include <linux/input.h>
+
+#include "ozone/ui/events/event_factory_ozone_wayland.h"
+#include "ozone/wayland/input/cursor.h"
+#include "ozone/wayland/input_device.h"
+#include "ozone/wayland/window.h"
+#include "ui/events/event.h"
+
+namespace ozonewayland {
+
+WaylandPointer::WaylandPointer()
+  : cursor_(NULL),
+    dispatcher_(NULL),
+    pointer_position_(0, 0),
+    input_pointer_(NULL) {
+}
+
+WaylandPointer::~WaylandPointer() {
+  delete cursor_;
+  if (input_pointer_)
+    wl_pointer_destroy(input_pointer_);
+}
+
+void WaylandPointer::OnSeatCapabilities(wl_seat *seat, uint32_t caps) {
+  static const struct wl_pointer_listener kInputPointerListener = {
+    WaylandPointer::OnPointerEnter,
+    WaylandPointer::OnPointerLeave,
+    WaylandPointer::OnMotionNotify,
+    WaylandPointer::OnButtonNotify,
+    WaylandPointer::OnAxisNotify,
+  };
+
+  if (!cursor_)
+    cursor_ = new WaylandCursor(WaylandDisplay::GetInstance()->shm());
+
+  dispatcher_ = ui::EventFactoryOzoneWayland::GetInstance()->EventConverter();
+
+  if ((caps & WL_SEAT_CAPABILITY_POINTER) && !cursor_->GetInputPointer()) {
+    input_pointer_ = wl_seat_get_pointer(seat);
+      cursor_->SetInputPointer(input_pointer_);
+    wl_pointer_set_user_data(input_pointer_, this);
+    wl_pointer_add_listener(input_pointer_, &kInputPointerListener, this);
+  } else if (!(caps & WL_SEAT_CAPABILITY_POINTER)
+                && cursor_->GetInputPointer()) {
+    cursor_->SetInputPointer(NULL);
+  }
+}
+
+void WaylandPointer::OnMotionNotify(void* data,
+                                    wl_pointer* input_pointer,
+                                    uint32_t time,
+                                    wl_fixed_t sx_w,
+                                    wl_fixed_t sy_w) {
+  WaylandPointer* device = static_cast<WaylandPointer*>(data);
+  WaylandInputDevice* input = WaylandDisplay::GetInstance()->PrimaryInput();
+  float sx = wl_fixed_to_double(sx_w);
+  float sy = wl_fixed_to_double(sy_w);
+
+  device->pointer_position_.SetPoint(sx, sy);
+  if (input->GetGrabWindowHandle() &&
+        input->GetGrabWindowHandle() != input->GetFocusWindowHandle()) {
+      return;
+  }
+
+  device->dispatcher_->MotionNotify(sx, sy);
+}
+
+void WaylandPointer::OnButtonNotify(void* data,
+                                    wl_pointer* input_pointer,
+                                    uint32_t serial,
+                                    uint32_t time,
+                                    uint32_t button,
+                                    uint32_t state) {
+  WaylandPointer* device = static_cast<WaylandPointer*>(data);
+  WaylandDisplay::GetInstance()->SetSerial(serial);
+  WaylandInputDevice* input = WaylandDisplay::GetInstance()->PrimaryInput();
+  if (input->GetFocusWindowHandle() && input->GetGrabButton() == 0 &&
+        state == WL_POINTER_BUTTON_STATE_PRESSED)
+    input->SetGrabWindowHandle(input->GetFocusWindowHandle(), button);
+
+  if (input->GetGrabWindowHandle()) {
+    ui::EventType type = ui::ET_MOUSE_PRESSED;
+    if (state == WL_POINTER_BUTTON_STATE_RELEASED)
+      type = ui::ET_MOUSE_RELEASED;
+
+    // TODO(vignatti): simultaneous clicks fail
+    ui::EventFlags flags = ui::EF_NONE;
+    if (button == BTN_LEFT)
+      flags = ui::EF_LEFT_MOUSE_BUTTON;
+    else if (button == BTN_RIGHT)
+      flags = ui::EF_RIGHT_MOUSE_BUTTON;
+    else if (button == BTN_MIDDLE)
+      flags = ui::EF_MIDDLE_MOUSE_BUTTON;
+
+    device->dispatcher_->ButtonNotify(input->GetFocusWindowHandle(),
+                                      type,
+                                      flags,
+                                      device->pointer_position_.x(),
+                                      device->pointer_position_.y());
+  }
+
+  if (input->GetGrabWindowHandle() && input->GetGrabButton() == button &&
+        state == WL_POINTER_BUTTON_STATE_RELEASED)
+    input->SetGrabWindowHandle(0, 0);
+}
+
+void WaylandPointer::OnAxisNotify(void* data,
+                                  wl_pointer* input_pointer,
+                                  uint32_t time,
+                                  uint32_t axis,
+                                  int32_t value) {
+  int x_offset = 0, y_offset = 0;
+  WaylandPointer* device = static_cast<WaylandPointer*>(data);
+  const int delta = ui::MouseWheelEvent::kWheelDelta;
+
+  switch (axis) {
+    case WL_POINTER_AXIS_HORIZONTAL_SCROLL:
+      x_offset = value > 0 ? -delta : delta;
+      break;
+    case WL_POINTER_AXIS_VERTICAL_SCROLL:
+      y_offset = value > 0 ? -delta : delta;
+      break;
+    default:
+      break;
+  }
+
+  device->dispatcher_->AxisNotify(device->pointer_position_.x(),
+                                  device->pointer_position_.y(),
+                                  x_offset,
+                                  y_offset);
+}
+
+void WaylandPointer::OnPointerEnter(void* data,
+                                    wl_pointer* input_pointer,
+                                    uint32_t serial,
+                                    wl_surface* surface,
+                                    wl_fixed_t sx_w,
+                                    wl_fixed_t sy_w) {
+  WaylandInputDevice* input = WaylandDisplay::GetInstance()->PrimaryInput();
+
+  if (!surface) {
+    input->SetFocusWindowHandle(0);
+    return;
+  }
+
+  WaylandPointer* device = static_cast<WaylandPointer*>(data);
+  WaylandWindow* window =
+      static_cast<WaylandWindow*>(wl_surface_get_user_data(surface));
+  unsigned handle = window->Handle();
+  float sx = wl_fixed_to_double(sx_w);
+  float sy = wl_fixed_to_double(sy_w);
+
+  WaylandDisplay::GetInstance()->SetSerial(serial);
+  device->pointer_position_.SetPoint(sx, sy);
+  input->SetFocusWindowHandle(handle);
+  device->dispatcher_->PointerEnter(handle,
+                                    device->pointer_position_.x(),
+                                    device->pointer_position_.y());
+}
+
+void WaylandPointer::OnPointerLeave(void* data,
+                                    wl_pointer* input_pointer,
+                                    uint32_t serial,
+                                    wl_surface* surface) {
+  WaylandPointer* device = static_cast<WaylandPointer*>(data);
+  WaylandDisplay::GetInstance()->SetSerial(serial);
+
+  WaylandInputDevice* input = WaylandDisplay::GetInstance()->PrimaryInput();
+  device->dispatcher_->PointerLeave(input->GetFocusWindowHandle(),
+                                    device->pointer_position_.x(),
+                                    device->pointer_position_.y());
+  input->SetFocusWindowHandle(0);
+}
+
+}  // namespace ozonewayland
--- /dev/null
+++ b/wayland/input/pointer.h
@@ -0,0 +1,78 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_WAYLAND_INPUT_POINTER_H_
+#define OZONE_WAYLAND_INPUT_POINTER_H_
+
+#include "ozone/wayland/display.h"
+#include "ui/gfx/point.h"
+
+namespace ui {
+class EventConverterOzoneWayland;
+}
+
+namespace ozonewayland {
+
+class WaylandCursor;
+class WaylandWindow;
+
+class WaylandPointer {
+ public:
+  WaylandPointer();
+  ~WaylandPointer();
+
+  void OnSeatCapabilities(wl_seat *seat, uint32_t caps);
+  WaylandCursor* Cursor() const { return cursor_; }
+
+ private:
+  static void OnMotionNotify(
+      void* data,
+      wl_pointer* input_pointer,
+      uint32_t time,
+      wl_fixed_t sx_w,
+      wl_fixed_t sy_w);
+
+  static void OnButtonNotify(
+      void* data,
+      wl_pointer* input_pointer,
+      uint32_t serial,
+      uint32_t time,
+      uint32_t button,
+      uint32_t state);
+
+  static void OnAxisNotify(
+      void* data,
+      wl_pointer* input_pointer,
+      uint32_t time,
+      uint32_t axis,
+      int32_t value);
+
+  static void OnPointerEnter(
+      void* data,
+      wl_pointer* input_pointer,
+      uint32_t serial,
+      wl_surface* surface,
+      wl_fixed_t sx_w,
+      wl_fixed_t sy_w);
+
+  static void OnPointerLeave(
+      void* data,
+      wl_pointer* input_pointer,
+      uint32_t serial,
+      wl_surface* surface);
+
+  WaylandCursor* cursor_;
+  ui::EventConverterOzoneWayland* dispatcher_;
+  // Keeps track of the last position for the motion event. We want to
+  // dispatch this with events such as wheel or button which don't have a
+  // position associated on Wayland.
+  gfx::Point pointer_position_;
+  struct wl_pointer *input_pointer_;
+
+  DISALLOW_COPY_AND_ASSIGN(WaylandPointer);
+};
+
+}  // namespace ozonewayland
+
+#endif  // OZONE_WAYLAND_INPUT_POINTER_H_
--- /dev/null
+++ b/wayland/input/text-client-protocol.h
@@ -0,0 +1,544 @@
+/*
+ * Copyright © 2012, 2013 Intel Corporation
+ *
+ * Permission to use, copy, modify, distribute, and sell this
+ * software and its documentation for any purpose is hereby granted
+ * without fee, provided that the above copyright notice appear in
+ * all copies and that both that copyright notice and this permission
+ * notice appear in supporting documentation, and that the name of
+ * the copyright holders not be used in advertising or publicity
+ * pertaining to distribution of the software without specific,
+ * written prior permission.  The copyright holders make no
+ * representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied
+ * warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+
+#ifndef TEXT_CLIENT_PROTOCOL_H
+#define TEXT_CLIENT_PROTOCOL_H
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include <stddef.h>
+#include "wayland-client.h"
+
+struct wl_client;
+struct wl_resource;
+
+struct wl_text_input;
+struct wl_text_input_manager;
+
+extern const struct wl_interface wl_text_input_interface;
+extern const struct wl_interface wl_text_input_manager_interface;
+
+#ifndef WL_TEXT_INPUT_CONTENT_HINT_ENUM
+#define WL_TEXT_INPUT_CONTENT_HINT_ENUM
+/**
+ * wl_text_input_content_hint - content hint
+ * @WL_TEXT_INPUT_CONTENT_HINT_NONE: no special behaviour
+ * @WL_TEXT_INPUT_CONTENT_HINT_DEFAULT: auto completion, correction and
+ *	capitalization
+ * @WL_TEXT_INPUT_CONTENT_HINT_PASSWORD: hidden and sensitive text
+ * @WL_TEXT_INPUT_CONTENT_HINT_AUTO_COMPLETION: suggest word completions
+ * @WL_TEXT_INPUT_CONTENT_HINT_AUTO_CORRECTION: suggest word corrections
+ * @WL_TEXT_INPUT_CONTENT_HINT_AUTO_CAPITALIZATION: switch to uppercase
+ *	letters at the start of a sentence
+ * @WL_TEXT_INPUT_CONTENT_HINT_LOWERCASE: prefer lowercase letters
+ * @WL_TEXT_INPUT_CONTENT_HINT_UPPERCASE: prefer uppercase letters
+ * @WL_TEXT_INPUT_CONTENT_HINT_TITLECASE: prefer casing for titles and
+ *	headings (can be language dependent)
+ * @WL_TEXT_INPUT_CONTENT_HINT_HIDDEN_TEXT: characters should be hidden
+ * @WL_TEXT_INPUT_CONTENT_HINT_SENSITIVE_DATA: typed text should not be
+ *	stored
+ * @WL_TEXT_INPUT_CONTENT_HINT_LATIN: just latin characters should be
+ *	entered
+ * @WL_TEXT_INPUT_CONTENT_HINT_MULTILINE: the text input is multiline
+ *
+ * Content hint is a bitmask to allow to modify the behavior of the text
+ * input.
+ */
+enum wl_text_input_content_hint {
+	WL_TEXT_INPUT_CONTENT_HINT_NONE = 0x0,
+	WL_TEXT_INPUT_CONTENT_HINT_DEFAULT = 0x7,
+	WL_TEXT_INPUT_CONTENT_HINT_PASSWORD = 0xc0,
+	WL_TEXT_INPUT_CONTENT_HINT_AUTO_COMPLETION = 0x1,
+	WL_TEXT_INPUT_CONTENT_HINT_AUTO_CORRECTION = 0x2,
+	WL_TEXT_INPUT_CONTENT_HINT_AUTO_CAPITALIZATION = 0x4,
+	WL_TEXT_INPUT_CONTENT_HINT_LOWERCASE = 0x8,
+	WL_TEXT_INPUT_CONTENT_HINT_UPPERCASE = 0x10,
+	WL_TEXT_INPUT_CONTENT_HINT_TITLECASE = 0x20,
+	WL_TEXT_INPUT_CONTENT_HINT_HIDDEN_TEXT = 0x40,
+	WL_TEXT_INPUT_CONTENT_HINT_SENSITIVE_DATA = 0x80,
+	WL_TEXT_INPUT_CONTENT_HINT_LATIN = 0x100,
+	WL_TEXT_INPUT_CONTENT_HINT_MULTILINE = 0x200,
+};
+#endif /* WL_TEXT_INPUT_CONTENT_HINT_ENUM */
+
+#ifndef WL_TEXT_INPUT_CONTENT_PURPOSE_ENUM
+#define WL_TEXT_INPUT_CONTENT_PURPOSE_ENUM
+/**
+ * wl_text_input_content_purpose - content purpose
+ * @WL_TEXT_INPUT_CONTENT_PURPOSE_NORMAL: default input, allowing all
+ *	characters
+ * @WL_TEXT_INPUT_CONTENT_PURPOSE_ALPHA: allow only alphabetic characters
+ * @WL_TEXT_INPUT_CONTENT_PURPOSE_DIGITS: allow only digits
+ * @WL_TEXT_INPUT_CONTENT_PURPOSE_NUMBER: input a number (including
+ *	decimal separator and sign)
+ * @WL_TEXT_INPUT_CONTENT_PURPOSE_PHONE: input a phone number
+ * @WL_TEXT_INPUT_CONTENT_PURPOSE_URL: input an URL
+ * @WL_TEXT_INPUT_CONTENT_PURPOSE_EMAIL: input an email address
+ * @WL_TEXT_INPUT_CONTENT_PURPOSE_NAME: input a name of a person
+ * @WL_TEXT_INPUT_CONTENT_PURPOSE_PASSWORD: input a password (combine
+ *	with password or sensitive_data hint)
+ * @WL_TEXT_INPUT_CONTENT_PURPOSE_DATE: input a date
+ * @WL_TEXT_INPUT_CONTENT_PURPOSE_TIME: input a time
+ * @WL_TEXT_INPUT_CONTENT_PURPOSE_DATETIME: input a date and time
+ * @WL_TEXT_INPUT_CONTENT_PURPOSE_TERMINAL: input for a terminal
+ *
+ * The content purpose allows to specify the primary purpose of a text
+ * input.
+ *
+ * This allows an input method to show special purpose input panels with
+ * extra characters or to disallow some characters.
+ */
+enum wl_text_input_content_purpose {
+	WL_TEXT_INPUT_CONTENT_PURPOSE_NORMAL = 0,
+	WL_TEXT_INPUT_CONTENT_PURPOSE_ALPHA = 1,
+	WL_TEXT_INPUT_CONTENT_PURPOSE_DIGITS = 2,
+	WL_TEXT_INPUT_CONTENT_PURPOSE_NUMBER = 3,
+	WL_TEXT_INPUT_CONTENT_PURPOSE_PHONE = 4,
+	WL_TEXT_INPUT_CONTENT_PURPOSE_URL = 5,
+	WL_TEXT_INPUT_CONTENT_PURPOSE_EMAIL = 6,
+	WL_TEXT_INPUT_CONTENT_PURPOSE_NAME = 7,
+	WL_TEXT_INPUT_CONTENT_PURPOSE_PASSWORD = 8,
+	WL_TEXT_INPUT_CONTENT_PURPOSE_DATE = 9,
+	WL_TEXT_INPUT_CONTENT_PURPOSE_TIME = 10,
+	WL_TEXT_INPUT_CONTENT_PURPOSE_DATETIME = 11,
+	WL_TEXT_INPUT_CONTENT_PURPOSE_TERMINAL = 12,
+};
+#endif /* WL_TEXT_INPUT_CONTENT_PURPOSE_ENUM */
+
+#ifndef WL_TEXT_INPUT_PREEDIT_STYLE_ENUM
+#define WL_TEXT_INPUT_PREEDIT_STYLE_ENUM
+enum wl_text_input_preedit_style {
+	WL_TEXT_INPUT_PREEDIT_STYLE_DEFAULT = 0,
+	WL_TEXT_INPUT_PREEDIT_STYLE_NONE = 1,
+	WL_TEXT_INPUT_PREEDIT_STYLE_ACTIVE = 2,
+	WL_TEXT_INPUT_PREEDIT_STYLE_INACTIVE = 3,
+	WL_TEXT_INPUT_PREEDIT_STYLE_HIGHLIGHT = 4,
+	WL_TEXT_INPUT_PREEDIT_STYLE_UNDERLINE = 5,
+	WL_TEXT_INPUT_PREEDIT_STYLE_SELECTION = 6,
+	WL_TEXT_INPUT_PREEDIT_STYLE_INCORRECT = 7,
+};
+#endif /* WL_TEXT_INPUT_PREEDIT_STYLE_ENUM */
+
+#ifndef WL_TEXT_INPUT_TEXT_DIRECTION_ENUM
+#define WL_TEXT_INPUT_TEXT_DIRECTION_ENUM
+enum wl_text_input_text_direction {
+	WL_TEXT_INPUT_TEXT_DIRECTION_AUTO = 0,
+	WL_TEXT_INPUT_TEXT_DIRECTION_LTR = 1,
+	WL_TEXT_INPUT_TEXT_DIRECTION_RTL = 2,
+};
+#endif /* WL_TEXT_INPUT_TEXT_DIRECTION_ENUM */
+
+/**
+ * wl_text_input - text input
+ * @enter: enter event
+ * @leave: leave event
+ * @modifiers_map: modifiers map
+ * @input_panel_state: state of the input panel
+ * @preedit_string: pre-edit
+ * @preedit_styling: pre-edit styling
+ * @preedit_cursor: pre-edit cursor
+ * @commit_string: commit
+ * @cursor_position: set cursor to new position
+ * @delete_surrounding_text: delete surrounding text
+ * @keysym: keysym
+ * @language: language
+ * @text_direction: text direction
+ *
+ * An object used for text input. Adds support for text input and input
+ * methods to applications. A text-input object is created from a
+ * wl_text_input_manager and corresponds typically to a text entry in an
+ * application. Requests are used to activate/deactivate the text-input
+ * object and set state information like surrounding and selected text or
+ * the content type. The information about entered text is sent to the
+ * text-input object via the pre-edit and commit events. Using this
+ * interface removes the need for applications to directly process hardware
+ * key events and compose text out of them.
+ *
+ * Text is generally UTF-8 encoded, indices and lengths are in Unicode
+ * characters.
+ *
+ * Serials are used to synchronize the state between the text input and an
+ * input method. New serials are sent by the text input in the commit_state
+ * request and are used by the input method to indicate the known text
+ * input state in events like preedit_string, commit_string, and keysym.
+ * The text input can then ignore events from the input method which are
+ * based on an outdated state (for example after a reset).
+ */
+struct wl_text_input_listener {
+	/**
+	 * enter - enter event
+	 * @surface: (none)
+	 *
+	 * Notify the text-input object when it received focus. Typically
+	 * in response to an activate request.
+	 */
+	void (*enter)(void *data,
+		      struct wl_text_input *wl_text_input,
+		      struct wl_surface *surface);
+	/**
+	 * leave - leave event
+	 *
+	 * Notify the text-input object when it lost focus. Either in
+	 * response to a deactivate request or when the assigned surface
+	 * lost focus or was destroyed.
+	 */
+	void (*leave)(void *data,
+		      struct wl_text_input *wl_text_input);
+	/**
+	 * modifiers_map - modifiers map
+	 * @map: (none)
+	 *
+	 * Transfer an array of 0-terminated modifiers names. The
+	 * position in the array is the index of the modifier as used in
+	 * the modifiers bitmask in the keysym event.
+	 */
+	void (*modifiers_map)(void *data,
+			      struct wl_text_input *wl_text_input,
+			      struct wl_array *map);
+	/**
+	 * input_panel_state - state of the input panel
+	 * @state: (none)
+	 *
+	 * Notify when the visibility state of the input panel changed.
+	 */
+	void (*input_panel_state)(void *data,
+				  struct wl_text_input *wl_text_input,
+				  uint32_t state);
+	/**
+	 * preedit_string - pre-edit
+	 * @serial: serial of the latest known text input state
+	 * @text: (none)
+	 * @commit: (none)
+	 *
+	 * Notify when a new composing text (pre-edit) should be set
+	 * around the current cursor position. Any previously set composing
+	 * text should be removed.
+	 *
+	 * The commit text can be used to replace the preedit text on reset
+	 * (for example on unfocus).
+	 *
+	 * The text input should also handle all preedit_style and
+	 * preedit_cursor events occuring directly before preedit_string.
+	 */
+	void (*preedit_string)(void *data,
+			       struct wl_text_input *wl_text_input,
+			       uint32_t serial,
+			       const char *text,
+			       const char *commit);
+	/**
+	 * preedit_styling - pre-edit styling
+	 * @index: (none)
+	 * @length: (none)
+	 * @style: (none)
+	 *
+	 * Sets styling information on composing text. The style is
+	 * applied for length Unicode characters from index relative to the
+	 * beginning of the composing text (as Unicode character offset).
+	 * Multiple styles can be applied to a composing text by sending
+	 * multiple preedit_styling events.
+	 *
+	 * This event is handled as part of a following preedit_string
+	 * event.
+	 */
+	void (*preedit_styling)(void *data,
+				struct wl_text_input *wl_text_input,
+				uint32_t index,
+				uint32_t length,
+				uint32_t style);
+	/**
+	 * preedit_cursor - pre-edit cursor
+	 * @index: (none)
+	 *
+	 * Sets the cursor position inside the composing text (as Unicode
+	 * character offset) relative to the start of the composing text.
+	 * When index is a negative number no cursor is shown.
+	 *
+	 * This event is handled as part of a following preedit_string
+	 * event.
+	 */
+	void (*preedit_cursor)(void *data,
+			       struct wl_text_input *wl_text_input,
+			       int32_t index);
+	/**
+	 * commit_string - commit
+	 * @serial: serial of the latest known text input state
+	 * @text: (none)
+	 *
+	 * Notify when text should be inserted into the editor widget.
+	 * The text to commit could be either just a single character after
+	 * a key press or the result of some composing (pre-edit). It could
+	 * be also an empty text when some text should be removed (see
+	 * delete_surrounding_text) or when the input cursor should be
+	 * moved (see cursor_position).
+	 *
+	 * Any previously set composing text should be removed.
+	 */
+	void (*commit_string)(void *data,
+			      struct wl_text_input *wl_text_input,
+			      uint32_t serial,
+			      const char *text);
+	/**
+	 * cursor_position - set cursor to new position
+	 * @index: (none)
+	 * @anchor: (none)
+	 *
+	 * Notify when the cursor or anchor position should be modified.
+	 *
+	 * This event should be handled as part of a following
+	 * commit_string event.
+	 */
+	void (*cursor_position)(void *data,
+				struct wl_text_input *wl_text_input,
+				int32_t index,
+				int32_t anchor);
+	/**
+	 * delete_surrounding_text - delete surrounding text
+	 * @index: (none)
+	 * @length: (none)
+	 *
+	 * Notify when the text around the current cursor position should
+	 * be deleted.
+	 *
+	 * Index is relative to the current cursor (in Unicode characters).
+	 * Length is the length of deleted text (in Unicode characters).
+	 *
+	 * This event should be handled as part of a following
+	 * commit_string event.
+	 */
+	void (*delete_surrounding_text)(void *data,
+					struct wl_text_input *wl_text_input,
+					int32_t index,
+					uint32_t length);
+	/**
+	 * keysym - keysym
+	 * @serial: serial of the latest known text input state
+	 * @time: (none)
+	 * @sym: (none)
+	 * @state: (none)
+	 * @modifiers: (none)
+	 *
+	 * Notify when a key event was sent. Key events should not be
+	 * used for normal text input operations, which should be done with
+	 * commit_string, delete_surrounding_text, etc. The key event
+	 * follows the wl_keyboard key event convention. Sym is a XKB
+	 * keysym, state a wl_keyboard key_state. Modifiers are a mask for
+	 * effective modifiers (where the modifier indices are set by the
+	 * modifiers_map event)
+	 */
+	void (*keysym)(void *data,
+		       struct wl_text_input *wl_text_input,
+		       uint32_t serial,
+		       uint32_t time,
+		       uint32_t sym,
+		       uint32_t state,
+		       uint32_t modifiers);
+	/**
+	 * language - language
+	 * @serial: serial of the latest known text input state
+	 * @language: (none)
+	 *
+	 * Sets the language of the input text. The "language" argument
+	 * is a RFC-3066 format language tag.
+	 */
+	void (*language)(void *data,
+			 struct wl_text_input *wl_text_input,
+			 uint32_t serial,
+			 const char *language);
+	/**
+	 * text_direction - text direction
+	 * @serial: serial of the latest known text input state
+	 * @direction: (none)
+	 *
+	 * Sets the text direction of input text.
+	 *
+	 * It is mainly needed for showing input cursor on correct side of
+	 * the editor when there is no input yet done and making sure
+	 * neutral direction text is laid out properly.
+	 */
+	void (*text_direction)(void *data,
+			       struct wl_text_input *wl_text_input,
+			       uint32_t serial,
+			       uint32_t direction);
+};
+
+static inline int
+wl_text_input_add_listener(struct wl_text_input *wl_text_input,
+			   const struct wl_text_input_listener *listener, void *data)
+{
+	return wl_proxy_add_listener((struct wl_proxy *) wl_text_input,
+				     (void (**)(void)) listener, data);
+}
+
+#define WL_TEXT_INPUT_ACTIVATE	0
+#define WL_TEXT_INPUT_DEACTIVATE	1
+#define WL_TEXT_INPUT_SHOW_INPUT_PANEL	2
+#define WL_TEXT_INPUT_HIDE_INPUT_PANEL	3
+#define WL_TEXT_INPUT_RESET	4
+#define WL_TEXT_INPUT_SET_SURROUNDING_TEXT	5
+#define WL_TEXT_INPUT_SET_CONTENT_TYPE	6
+#define WL_TEXT_INPUT_SET_CURSOR_RECTANGLE	7
+#define WL_TEXT_INPUT_SET_PREFERRED_LANGUAGE	8
+#define WL_TEXT_INPUT_COMMIT_STATE	9
+#define WL_TEXT_INPUT_INVOKE_ACTION	10
+
+static inline void
+wl_text_input_set_user_data(struct wl_text_input *wl_text_input, void *user_data)
+{
+	wl_proxy_set_user_data((struct wl_proxy *) wl_text_input, user_data);
+}
+
+static inline void *
+wl_text_input_get_user_data(struct wl_text_input *wl_text_input)
+{
+	return wl_proxy_get_user_data((struct wl_proxy *) wl_text_input);
+}
+
+static inline void
+wl_text_input_destroy(struct wl_text_input *wl_text_input)
+{
+	wl_proxy_destroy((struct wl_proxy *) wl_text_input);
+}
+
+static inline void
+wl_text_input_activate(struct wl_text_input *wl_text_input, struct wl_seat *seat, struct wl_surface *surface)
+{
+	wl_proxy_marshal((struct wl_proxy *) wl_text_input,
+			 WL_TEXT_INPUT_ACTIVATE, seat, surface);
+}
+
+static inline void
+wl_text_input_deactivate(struct wl_text_input *wl_text_input, struct wl_seat *seat)
+{
+	wl_proxy_marshal((struct wl_proxy *) wl_text_input,
+			 WL_TEXT_INPUT_DEACTIVATE, seat);
+}
+
+static inline void
+wl_text_input_show_input_panel(struct wl_text_input *wl_text_input)
+{
+	wl_proxy_marshal((struct wl_proxy *) wl_text_input,
+			 WL_TEXT_INPUT_SHOW_INPUT_PANEL);
+}
+
+static inline void
+wl_text_input_hide_input_panel(struct wl_text_input *wl_text_input)
+{
+	wl_proxy_marshal((struct wl_proxy *) wl_text_input,
+			 WL_TEXT_INPUT_HIDE_INPUT_PANEL);
+}
+
+static inline void
+wl_text_input_reset(struct wl_text_input *wl_text_input)
+{
+	wl_proxy_marshal((struct wl_proxy *) wl_text_input,
+			 WL_TEXT_INPUT_RESET);
+}
+
+static inline void
+wl_text_input_set_surrounding_text(struct wl_text_input *wl_text_input, const char *text, uint32_t cursor, uint32_t anchor)
+{
+	wl_proxy_marshal((struct wl_proxy *) wl_text_input,
+			 WL_TEXT_INPUT_SET_SURROUNDING_TEXT, text, cursor, anchor);
+}
+
+static inline void
+wl_text_input_set_content_type(struct wl_text_input *wl_text_input, uint32_t hint, uint32_t purpose)
+{
+	wl_proxy_marshal((struct wl_proxy *) wl_text_input,
+			 WL_TEXT_INPUT_SET_CONTENT_TYPE, hint, purpose);
+}
+
+static inline void
+wl_text_input_set_cursor_rectangle(struct wl_text_input *wl_text_input, int32_t x, int32_t y, int32_t width, int32_t height)
+{
+	wl_proxy_marshal((struct wl_proxy *) wl_text_input,
+			 WL_TEXT_INPUT_SET_CURSOR_RECTANGLE, x, y, width, height);
+}
+
+static inline void
+wl_text_input_set_preferred_language(struct wl_text_input *wl_text_input, const char *language)
+{
+	wl_proxy_marshal((struct wl_proxy *) wl_text_input,
+			 WL_TEXT_INPUT_SET_PREFERRED_LANGUAGE, language);
+}
+
+static inline void
+wl_text_input_commit_state(struct wl_text_input *wl_text_input, uint32_t serial)
+{
+	wl_proxy_marshal((struct wl_proxy *) wl_text_input,
+			 WL_TEXT_INPUT_COMMIT_STATE, serial);
+}
+
+static inline void
+wl_text_input_invoke_action(struct wl_text_input *wl_text_input, uint32_t button, uint32_t index)
+{
+	wl_proxy_marshal((struct wl_proxy *) wl_text_input,
+			 WL_TEXT_INPUT_INVOKE_ACTION, button, index);
+}
+
+#define WL_TEXT_INPUT_MANAGER_CREATE_TEXT_INPUT	0
+
+static inline void
+wl_text_input_manager_set_user_data(struct wl_text_input_manager *wl_text_input_manager, void *user_data)
+{
+	wl_proxy_set_user_data((struct wl_proxy *) wl_text_input_manager, user_data);
+}
+
+static inline void *
+wl_text_input_manager_get_user_data(struct wl_text_input_manager *wl_text_input_manager)
+{
+	return wl_proxy_get_user_data((struct wl_proxy *) wl_text_input_manager);
+}
+
+static inline void
+wl_text_input_manager_destroy(struct wl_text_input_manager *wl_text_input_manager)
+{
+	wl_proxy_destroy((struct wl_proxy *) wl_text_input_manager);
+}
+
+static inline struct wl_text_input *
+wl_text_input_manager_create_text_input(struct wl_text_input_manager *wl_text_input_manager)
+{
+	struct wl_proxy *id;
+
+	id = wl_proxy_create((struct wl_proxy *) wl_text_input_manager,
+			     &wl_text_input_interface);
+	if (!id)
+		return NULL;
+
+	wl_proxy_marshal((struct wl_proxy *) wl_text_input_manager,
+			 WL_TEXT_INPUT_MANAGER_CREATE_TEXT_INPUT, id);
+
+	return (struct wl_text_input *) id;
+}
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+++ b/wayland/input/text-protocol.c
@@ -0,0 +1,93 @@
+/*
+ * Copyright © 2012, 2013 Intel Corporation
+ *
+ * Permission to use, copy, modify, distribute, and sell this
+ * software and its documentation for any purpose is hereby granted
+ * without fee, provided that the above copyright notice appear in
+ * all copies and that both that copyright notice and this permission
+ * notice appear in supporting documentation, and that the name of
+ * the copyright holders not be used in advertising or publicity
+ * pertaining to distribution of the software without specific,
+ * written prior permission.  The copyright holders make no
+ * representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied
+ * warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+
+#include <stdlib.h>
+#include <stdint.h>
+#include "wayland-util.h"
+
+extern const struct wl_interface wl_seat_interface;
+extern const struct wl_interface wl_surface_interface;
+extern const struct wl_interface wl_seat_interface;
+extern const struct wl_interface wl_surface_interface;
+extern const struct wl_interface wl_text_input_interface;
+
+static const struct wl_interface *types[] = {
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	&wl_seat_interface,
+	&wl_surface_interface,
+	&wl_seat_interface,
+	&wl_surface_interface,
+	&wl_text_input_interface,
+};
+
+static const struct wl_message wl_text_input_requests[] = {
+	{ "activate", "oo", types + 5 },
+	{ "deactivate", "o", types + 7 },
+	{ "show_input_panel", "", types + 0 },
+	{ "hide_input_panel", "", types + 0 },
+	{ "reset", "", types + 0 },
+	{ "set_surrounding_text", "suu", types + 0 },
+	{ "set_content_type", "uu", types + 0 },
+	{ "set_cursor_rectangle", "iiii", types + 0 },
+	{ "set_preferred_language", "s", types + 0 },
+	{ "commit_state", "u", types + 0 },
+	{ "invoke_action", "uu", types + 0 },
+};
+
+static const struct wl_message wl_text_input_events[] = {
+	{ "enter", "o", types + 8 },
+	{ "leave", "", types + 0 },
+	{ "modifiers_map", "a", types + 0 },
+	{ "input_panel_state", "u", types + 0 },
+	{ "preedit_string", "uss", types + 0 },
+	{ "preedit_styling", "uuu", types + 0 },
+	{ "preedit_cursor", "i", types + 0 },
+	{ "commit_string", "us", types + 0 },
+	{ "cursor_position", "ii", types + 0 },
+	{ "delete_surrounding_text", "iu", types + 0 },
+	{ "keysym", "uuuuu", types + 0 },
+	{ "language", "us", types + 0 },
+	{ "text_direction", "uu", types + 0 },
+};
+
+WL_EXPORT const struct wl_interface wl_text_input_interface = {
+	"wl_text_input", 1,
+	11, wl_text_input_requests,
+	13, wl_text_input_events,
+};
+
+static const struct wl_message wl_text_input_manager_requests[] = {
+	{ "create_text_input", "n", types + 9 },
+};
+
+WL_EXPORT const struct wl_interface wl_text_input_manager_interface = {
+	"wl_text_input_manager", 1,
+	1, wl_text_input_manager_requests,
+	0, NULL,
+};
--- /dev/null
+++ b/wayland/input/text_input.cc
@@ -0,0 +1,170 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/wayland/input/text_input.h"
+
+#include <string>
+
+#include "ozone/ui/events/event_factory_ozone_wayland.h"
+#include "ozone/ui/events/keyboard_codes_ozone.h"
+#include "ozone/wayland/display.h"
+#include "ozone/wayland/input/keyboard.h"
+#include "ozone/wayland/input_device.h"
+#include "ozone/wayland/shell/shell_surface.h"
+#include "ozone/wayland/window.h"
+
+namespace ozonewayland {
+
+WaylandTextInput::WaylandTextInput(WaylandInputDevice* inputDevice):
+  text_input_(NULL), active_window_(NULL), last_active_window_(NULL),
+  input_device_(inputDevice) {
+  enable_vkb_support_ = getenv("USE_OZONE_WAYLAND_VKB");
+}
+
+WaylandTextInput::~WaylandTextInput() {
+  if (text_input_)
+    wl_text_input_destroy(text_input_);
+}
+
+void WaylandTextInput::SetActiveWindow(WaylandWindow* window) {
+  active_window_ = window;
+  if (active_window_)
+    last_active_window_ = active_window_;
+}
+
+void WaylandTextInput::OnCommitString(void* data,
+                                      struct wl_text_input* text_input,
+                                      uint32_t serial,
+                                      const char* text) {
+  ui::EventConverterOzoneWayland* dispatcher =
+        ui::EventFactoryOzoneWayland::GetInstance()->EventConverter();
+  DCHECK(static_cast<WaylandTextInput*>(data)->last_active_window_);
+  dispatcher->Commit(static_cast<WaylandTextInput*>(data)->
+      last_active_window_->Handle(), std::string(text));
+}
+
+void WaylandTextInput::OnPreeditString(void* data,
+                                       struct wl_text_input* text_input,
+                                       uint32_t serial,
+                                       const char* text,
+                                       const char* commit) {
+  ui::EventConverterOzoneWayland* dispatcher =
+         ui::EventFactoryOzoneWayland::GetInstance()->EventConverter();
+  DCHECK(static_cast<WaylandTextInput*>(data)->last_active_window_);
+  dispatcher->PreeditChanged(static_cast<WaylandTextInput*>(data)->
+     last_active_window_->Handle(), std::string(text), std::string(commit));
+}
+
+void WaylandTextInput::OnDeleteSurroundingText(void* data,
+                                       struct wl_text_input* text_input,
+                                       int32_t index,
+                                       uint32_t length) {
+}
+
+void WaylandTextInput::OnCursorPosition(void* data,
+                                       struct wl_text_input* text_input,
+                                       int32_t index,
+                                       int32_t anchor) {
+}
+
+void WaylandTextInput::OnPreeditStyling(void* data,
+                                       struct wl_text_input* text_input,
+                                       uint32_t index,
+                                       uint32_t length,
+                                       uint32_t style) {
+}
+
+void WaylandTextInput::OnPreeditCursor(void* data,
+                                       struct wl_text_input* text_input,
+                                       int32_t index) {
+}
+
+void WaylandTextInput::OnModifiersMap(void* data,
+                                      struct wl_text_input* text_input,
+                                      struct wl_array* map) {
+}
+
+void WaylandTextInput::OnKeysym(void* data,
+                                struct wl_text_input* text_input,
+                                uint32_t serial,
+                                uint32_t time,
+                                uint32_t key,
+                                uint32_t state,
+                                uint32_t modifiers) {
+  // Copid from WaylandKeyboard::OnKeyNotify()
+  ui::EventType type = ui::ET_KEY_PRESSED;
+  WaylandDisplay::GetInstance()->SetSerial(serial);
+  if (state == WL_KEYBOARD_KEY_STATE_RELEASED)
+    type = ui::ET_KEY_RELEASED;
+
+  ui::EventConverterOzoneWayland* dispatcher =
+          ui::EventFactoryOzoneWayland::GetInstance()->EventConverter();
+  dispatcher->VirtualKeyNotify(type, key, modifiers);
+}
+
+void WaylandTextInput::OnEnter(void* data,
+                               struct wl_text_input* text_input,
+                               struct wl_surface* surface) {
+}
+
+void WaylandTextInput::OnLeave(void* data,
+                               struct wl_text_input* text_input) {
+}
+
+void WaylandTextInput::OnInputPanelState(void* data,
+                               struct wl_text_input* text_input,
+                               uint32_t state) {
+}
+
+void WaylandTextInput::OnLanguage(void* data,
+                               struct wl_text_input* text_input,
+                               uint32_t serial,
+                               const char* language) {
+}
+
+void WaylandTextInput::OnTextDirection(void* data,
+                               struct wl_text_input* text_input,
+                               uint32_t serial,
+                               uint32_t direction) {
+}
+
+void WaylandTextInput::ResetIme() {
+  static const struct wl_text_input_listener text_input_listener = {
+      WaylandTextInput::OnEnter,
+      WaylandTextInput::OnLeave,
+      WaylandTextInput::OnModifiersMap,
+      WaylandTextInput::OnInputPanelState,
+      WaylandTextInput::OnPreeditString,
+      WaylandTextInput::OnPreeditStyling,
+      WaylandTextInput::OnPreeditCursor,
+      WaylandTextInput::OnCommitString,
+      WaylandTextInput::OnCursorPosition,
+      WaylandTextInput::OnDeleteSurroundingText,
+      WaylandTextInput::OnKeysym,
+      WaylandTextInput::OnLanguage,
+      WaylandTextInput::OnTextDirection
+  };
+
+  if (!text_input_ && enable_vkb_support_) {
+    text_input_ = wl_text_input_manager_create_text_input(
+        WaylandDisplay::GetInstance()->GetTextInputManager());
+    wl_text_input_add_listener(text_input_, &text_input_listener, this);
+  }
+}
+
+void WaylandTextInput::ShowInputPanel(wl_seat* input_seat) {
+  if (text_input_ && active_window_) {
+    wl_text_input_show_input_panel(text_input_);
+    wl_text_input_activate(text_input_,
+                           input_seat,
+                           active_window_->ShellSurface()->GetWLSurface());
+  }
+}
+
+void WaylandTextInput::HideInputPanel(wl_seat* input_seat) {
+  if (text_input_)
+    wl_text_input_deactivate(text_input_, input_seat);
+}
+
+}  // namespace ozonewayland
--- /dev/null
+++ b/wayland/input/text_input.h
@@ -0,0 +1,101 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_WAYLAND_TEXT_INPUT_H_
+#define OZONE_WAYLAND_TEXT_INPUT_H_
+
+#include "ozone/wayland/display.h"
+#include "ozone/wayland/input/text-client-protocol.h"
+
+namespace ozonewayland {
+
+class WaylandWindow;
+class WaylandInputDevice;
+
+class WaylandTextInput {
+ public:
+  explicit WaylandTextInput(WaylandInputDevice* inputDevice);
+  ~WaylandTextInput();
+  void ResetIme();
+  void ShowInputPanel(wl_seat* input_seat);
+  void HideInputPanel(wl_seat* input_seat);
+  void SetActiveWindow(WaylandWindow* window);
+  WaylandInputDevice* getInputDevice() { return input_device_; }
+
+ private:
+  static void OnCommitString(void* data,
+                             struct wl_text_input* text_input,
+                             uint32_t serial,
+                             const char* text);
+
+  static void OnPreeditString(void* data,
+                             struct wl_text_input* text_input,
+                             uint32_t serial,
+                             const char* text,
+                             const char* commit);
+
+  static void OnDeleteSurroundingText(void* data,
+                             struct wl_text_input* text_input,
+                             int32_t index,
+                             uint32_t length);
+
+  static void OnCursorPosition(void* data,
+                             struct wl_text_input* text_input,
+                             int32_t index,
+                             int32_t anchor);
+
+  static void OnPreeditStyling(void* data,
+                             struct wl_text_input* text_input,
+                             uint32_t index,
+                             uint32_t length,
+                             uint32_t style);
+
+  static void OnPreeditCursor(void* data,
+                            struct wl_text_input* text_input,
+                            int32_t index);
+
+  static void OnModifiersMap(void* data,
+                            struct wl_text_input* text_input,
+                            struct wl_array* map);
+
+  static void OnKeysym(void* data,
+                       struct wl_text_input* text_input,
+                       uint32_t serial,
+                       uint32_t time,
+                       uint32_t key,
+                       uint32_t state,
+                       uint32_t modifiers);
+
+  static void OnEnter(void* data,
+                      struct wl_text_input* text_input,
+                      struct wl_surface* surface);
+
+  static void OnLeave(void* data,
+                      struct wl_text_input* text_input);
+
+  static void OnInputPanelState(void* data,
+                      struct wl_text_input* text_input,
+                      uint32_t state);
+
+  static void OnLanguage(void* data,
+                      struct wl_text_input* text_input,
+                      uint32_t serial,
+                      const char* language);
+
+  static void OnTextDirection(void* data,
+                      struct wl_text_input* text_input,
+                      uint32_t serial,
+                      uint32_t direction);
+  bool enable_vkb_support_;
+  struct wl_text_input* text_input_;
+  WaylandWindow* active_window_;
+  WaylandWindow* last_active_window_;
+  WaylandInputDevice* input_device_;
+
+  DISALLOW_COPY_AND_ASSIGN(WaylandTextInput);
+};
+
+}  // namespace ozonewayland
+
+#endif  // OZONE_WAYLAND_TEXT_INPUT_H_
--- /dev/null
+++ b/wayland/input/touchscreen.cc
@@ -0,0 +1,126 @@
+// Copyright (c) 2014 Noser Engineering AG. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/wayland/input/touchscreen.h"
+
+#include <linux/input.h>
+
+#include "ozone/ui/events/event_factory_ozone_wayland.h"
+#include "ozone/wayland/input/cursor.h"
+#include "ozone/wayland/input_device.h"
+#include "ozone/wayland/window.h"
+#include "ui/events/event.h"
+
+namespace ozonewayland {
+
+WaylandTouchscreen::WaylandTouchscreen()
+  : dispatcher_(NULL),
+    pointer_position_(0, 0),
+    wl_touch_(NULL) {
+}
+
+WaylandTouchscreen::~WaylandTouchscreen() {
+  if (wl_touch_)
+    wl_touch_destroy(wl_touch_);
+}
+
+void WaylandTouchscreen::OnSeatCapabilities(wl_seat *seat, uint32_t caps) {
+  static const struct wl_touch_listener kInputTouchListener = {
+    WaylandTouchscreen::OnTouchDown,
+    WaylandTouchscreen::OnTouchUp,
+    WaylandTouchscreen::OnTouchMotion,
+    WaylandTouchscreen::OnTouchFrame,
+    WaylandTouchscreen::OnTouchCancel,
+  };
+
+  dispatcher_ = ui::EventFactoryOzoneWayland::GetInstance()->EventConverter();
+
+  if ((caps & WL_SEAT_CAPABILITY_TOUCH)) {
+    wl_touch_ = wl_seat_get_touch(seat);
+    wl_touch_set_user_data(wl_touch_, this);
+    wl_touch_add_listener(wl_touch_, &kInputTouchListener, this);
+  }
+}
+
+void WaylandTouchscreen::OnTouchDown(void *data,
+                                     struct wl_touch *wl_touch,
+                                     uint32_t serial,
+                                     uint32_t time,
+                                     struct wl_surface *surface,
+                                     int32_t id,
+                                     wl_fixed_t x,
+                                     wl_fixed_t y) {
+  WaylandTouchscreen* device = static_cast<WaylandTouchscreen*>(data);
+  WaylandDisplay::GetInstance()->SetSerial(serial);
+  WaylandInputDevice* input = WaylandDisplay::GetInstance()->PrimaryInput();
+  if (input->GetFocusWindowHandle() && input->GetGrabButton() == 0)
+    input->SetGrabWindowHandle(input->GetFocusWindowHandle(), id);
+
+  float sx = wl_fixed_to_double(x);
+  float sy = wl_fixed_to_double(y);
+
+  device->pointer_position_.SetPoint(sx, sy);
+
+  device->dispatcher_->TouchNotify(ui::ET_TOUCH_PRESSED, sx, sy, id, time);
+}
+
+void WaylandTouchscreen::OnTouchUp(void *data,
+                                   struct wl_touch *wl_touch,
+                                   uint32_t serial,
+                                   uint32_t time,
+                                   int32_t id) {
+  WaylandTouchscreen* device = static_cast<WaylandTouchscreen*>(data);
+  WaylandDisplay::GetInstance()->SetSerial(serial);
+  WaylandInputDevice* input = WaylandDisplay::GetInstance()->PrimaryInput();
+
+  device->dispatcher_->TouchNotify(ui::ET_TOUCH_RELEASED,
+                                   device->pointer_position_.x(),
+                                   device->pointer_position_.y(), id, time);
+
+  if (input->GetGrabWindowHandle() && input->GetGrabButton() == id)
+    input->SetGrabWindowHandle(0, 0);
+}
+
+void WaylandTouchscreen::OnTouchMotion(void *data,
+                                      struct wl_touch *wl_touch,
+                                      uint32_t time,
+                                      int32_t id,
+                                      wl_fixed_t x,
+                                      wl_fixed_t y) {
+  WaylandTouchscreen* device = static_cast<WaylandTouchscreen*>(data);
+  WaylandInputDevice* input = WaylandDisplay::GetInstance()->PrimaryInput();
+  float sx = wl_fixed_to_double(x);
+  float sy = wl_fixed_to_double(y);
+
+  device->pointer_position_.SetPoint(sx, sy);
+
+  if (input->GetGrabWindowHandle() &&
+    input->GetGrabWindowHandle() != input->GetFocusWindowHandle()) {
+    return;
+  }
+
+  device->dispatcher_->TouchNotify(ui::ET_TOUCH_MOVED, sx, sy, id, time);
+}
+
+void WaylandTouchscreen::OnTouchFrame(void *data,
+                                      struct wl_touch *wl_touch) {
+  // TODO(speedpat): find out what should be done here
+}
+
+void WaylandTouchscreen::OnTouchCancel(void *data,
+                                       struct wl_touch *wl_touch) {
+  WaylandTouchscreen* device = static_cast<WaylandTouchscreen*>(data);
+  WaylandInputDevice* input = WaylandDisplay::GetInstance()->PrimaryInput();
+
+  device->dispatcher_->TouchNotify(ui::ET_TOUCH_CANCELLED,
+                                   device->pointer_position_.x(),
+                                   device->pointer_position_.y(),
+                                   input->GetGrabButton(),
+                                   0);
+
+  if (input->GetGrabWindowHandle() && input->GetGrabButton() != 0)
+    input->SetGrabWindowHandle(0, 0);
+}
+
+}  // namespace ozonewayland
--- /dev/null
+++ b/wayland/input/touchscreen.h
@@ -0,0 +1,69 @@
+// Copyright (c) 2014 Noser Engineering AG. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_WAYLAND_INPUT_TOUCHSCREEN_H_
+#define OZONE_WAYLAND_INPUT_TOUCHSCREEN_H_
+
+#include "ozone/wayland/display.h"
+#include "ui/gfx/point.h"
+
+namespace ui {
+class EventConverterOzoneWayland;
+}
+
+namespace ozonewayland {
+
+class WaylandWindow;
+
+class WaylandTouchscreen {
+ public:
+  WaylandTouchscreen();
+  ~WaylandTouchscreen();
+
+  void OnSeatCapabilities(wl_seat *seat, uint32_t caps);
+
+ private:
+  static void OnTouchDown(
+      void *data,
+      struct wl_touch *wl_touch,
+      uint32_t serial,
+      uint32_t time,
+      struct wl_surface *surface,
+      int32_t id,
+      wl_fixed_t x,
+      wl_fixed_t y);
+
+  static void OnTouchUp(
+      void *data,
+      struct wl_touch *wl_touch,
+      uint32_t serial,
+      uint32_t time,
+      int32_t id);
+
+  static void OnTouchMotion(
+      void *data,
+      struct wl_touch *wl_touch,
+      uint32_t time,
+      int32_t id,
+      wl_fixed_t x,
+      wl_fixed_t y);
+
+  static void OnTouchFrame(
+      void *data,
+      struct wl_touch *wl_touch);
+
+  static void OnTouchCancel(
+      void *data,
+      struct wl_touch *wl_touch);
+
+  ui::EventConverterOzoneWayland* dispatcher_;
+  gfx::Point pointer_position_;
+  struct wl_touch* wl_touch_;
+
+  DISALLOW_COPY_AND_ASSIGN(WaylandTouchscreen);
+};
+
+}  // namespace ozonewayland
+
+#endif  // OZONE_WAYLAND_INPUT_POINTER_H_
--- /dev/null
+++ b/wayland/input_device.cc
@@ -0,0 +1,237 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/wayland/input_device.h"
+
+#include "base/logging.h"
+#include "ozone/ui/events/event_factory_ozone_wayland.h"
+#include "ozone/wayland/display.h"
+#include "ozone/wayland/input/cursor.h"
+#include "ozone/wayland/input/keyboard.h"
+#include "ozone/wayland/input/pointer.h"
+#include "ozone/wayland/input/text_input.h"
+#include "ozone/wayland/input/touchscreen.h"
+
+namespace ozonewayland {
+
+const int kCursorNull = 0;
+const int kCursorPointer = 1;
+const int kCursorCross = 2;
+const int kCursorHand = 3;
+const int kCursorIBeam = 4;
+const int kCursorWait = 5;
+const int kCursorHelp = 6;
+const int kCursorEastResize = 7;
+const int kCursorNorthResize = 8;
+const int kCursorNorthEastResize = 9;
+const int kCursorNorthWestResize = 10;
+const int kCursorSouthResize = 11;
+const int kCursorSouthEastResize = 12;
+const int kCursorSouthWestResize = 13;
+const int kCursorWestResize = 14;
+const int kCursorNorthSouthResize = 15;
+const int kCursorEastWestResize = 16;
+const int kCursorNorthEastSouthWestResize = 17;
+const int kCursorNorthWestSouthEastResize = 18;
+const int kCursorColumnResize = 19;
+const int kCursorRowResize = 20;
+const int kCursorMiddlePanning = 21;
+const int kCursorEastPanning = 22;
+const int kCursorNorthPanning = 23;
+const int kCursorNorthEastPanning = 24;
+const int kCursorNorthWestPanning = 25;
+const int kCursorSouthPanning = 26;
+const int kCursorSouthEastPanning = 27;
+const int kCursorSouthWestPanning = 28;
+const int kCursorWestPanning = 29;
+const int kCursorMove = 30;
+const int kCursorVerticalText = 31;
+const int kCursorCell = 32;
+const int kCursorContextMenu = 33;
+const int kCursorAlias = 34;
+const int kCursorProgress = 35;
+const int kCursorNoDrop = 36;
+const int kCursorCopy = 37;
+const int kCursorNone = 38;
+const int kCursorNotAllowed = 39;
+const int kCursorZoomIn = 40;
+const int kCursorZoomOut = 41;
+const int kCursorGrab = 42;
+const int kCursorGrabbing = 43;
+const int kCursorCustom = 44;
+
+// Returns Wayland font cursor shape from an Aura cursor.
+WaylandCursor::CursorType CursorShapeFromNative(unsigned cursor_type) {
+  switch (cursor_type) {
+    case kCursorMiddlePanning:
+    case kCursorMove:
+      return WaylandCursor::CURSOR_FLEUR;
+    case kCursorEastPanning:
+      return WaylandCursor::CURSOR_RIGHT;
+    case kCursorNorthPanning:
+      return WaylandCursor::CURSOR_UP_ARROW;
+    case kCursorNorthEastPanning:
+      return WaylandCursor::CURSOR_TOP_RIGHT;
+    case kCursorNorthWestPanning:
+      return WaylandCursor::CURSOR_TOP_LEFT;
+    case kCursorSouthPanning:
+      return WaylandCursor::CURSOR_BOTTOM;
+    case kCursorSouthEastPanning:
+    case kCursorSouthEastResize:
+      return WaylandCursor::CURSOR_BOTTOM_RIGHT;
+    case kCursorSouthWestPanning:
+    case kCursorSouthWestResize:
+      return WaylandCursor::CURSOR_BOTTOM_LEFT;
+    case kCursorWestPanning:
+      return WaylandCursor::CURSOR_LEFT_ARROW;
+    case kCursorNone:
+    case kCursorNull:
+    case kCursorPointer:
+    // TODO(kalyan): Choose right cursor types.
+    case kCursorGrab:
+    case kCursorGrabbing:
+      return WaylandCursor::CURSOR_LEFT_PTR;
+    case kCursorCross:
+      return WaylandCursor::CURSOR_CROSS;
+    case kCursorHand:
+      return WaylandCursor::CURSOR_HAND1;
+    case kCursorIBeam:
+      return WaylandCursor::CURSOR_IBEAM;
+    case kCursorProgress:
+      return WaylandCursor::CURSOR_WATCH;
+    case kCursorWait:
+      return WaylandCursor::CURSOR_WAIT;
+    case kCursorHelp:
+      return WaylandCursor::CURSOR_QUESTION_ARROW;
+    case kCursorEastResize:
+      return WaylandCursor::CURSOR_RIGHT;
+    case kCursorNorthResize:
+      return WaylandCursor::CURSOR_TOP;
+    case kCursorNorthEastResize:
+      return WaylandCursor::CURSOR_TOP_RIGHT;
+    case kCursorNorthWestResize:
+      return WaylandCursor::CURSOR_TOP_LEFT_ARROW;
+    case kCursorSouthResize:
+      return WaylandCursor::CURSOR_BOTTOM;
+    case kCursorWestResize:
+      return WaylandCursor::CURSOR_LEFT;
+    case kCursorNorthSouthResize:
+    case kCursorRowResize:
+      return WaylandCursor::CURSOR_V_DOUBLE_ARROW;
+    case kCursorEastWestResize:
+    case kCursorColumnResize:
+      return WaylandCursor::CURSOR_H_DOUBLE_ARROW;
+    case kCursorCustom:
+      NOTREACHED();
+      return WaylandCursor::CURSOR_DEFAULT;
+  }
+  NOTREACHED() << "Case not handled for " << cursor_type;
+  return WaylandCursor::CURSOR_LEFT_PTR;
+}
+
+WaylandInputDevice::WaylandInputDevice(WaylandDisplay* display,
+                                       uint32_t id)
+    : focused_window_handle_(0),
+      grab_window_handle_(0),
+      grab_button_(0),
+      input_seat_(NULL),
+      input_keyboard_(NULL),
+      input_pointer_(NULL),
+      input_touch_(NULL),
+      text_input_(NULL) {
+  ui::EventFactoryOzoneWayland::GetInstance()->SetIMEStateChangeHandler(this);
+  static const struct wl_seat_listener kInputSeatListener = {
+    WaylandInputDevice::OnSeatCapabilities,
+  };
+
+  input_seat_ = static_cast<wl_seat*>(
+      wl_registry_bind(display->registry(), id, &wl_seat_interface, 1));
+  DCHECK(input_seat_);
+  wl_seat_add_listener(input_seat_, &kInputSeatListener, this);
+  wl_seat_set_user_data(input_seat_, this);
+  text_input_ = new WaylandTextInput(this);
+}
+
+WaylandInputDevice::~WaylandInputDevice() {
+  delete input_keyboard_;
+  delete input_pointer_;
+  delete text_input_;
+  if (input_touch_ != NULL) {
+    delete input_touch_;
+  }
+  wl_seat_destroy(input_seat_);
+}
+
+void WaylandInputDevice::OnSeatCapabilities(void *data,
+                                            wl_seat *seat,
+                                            uint32_t caps) {
+  WaylandInputDevice* device = static_cast<WaylandInputDevice*>(data);
+  if ((caps & WL_SEAT_CAPABILITY_KEYBOARD) && !device->input_keyboard_) {
+    device->input_keyboard_ = new WaylandKeyboard();
+    device->input_keyboard_->OnSeatCapabilities(seat, caps);
+  } else if (!(caps & WL_SEAT_CAPABILITY_KEYBOARD) && device->input_keyboard_) {
+    device->input_keyboard_->OnSeatCapabilities(seat, caps);
+    delete device->input_keyboard_;
+    device->input_keyboard_ = NULL;
+  }
+
+  if ((caps & WL_SEAT_CAPABILITY_POINTER) && !device->input_pointer_) {
+    device->input_pointer_ = new WaylandPointer();
+    device->input_pointer_->OnSeatCapabilities(seat, caps);
+  } else if (!(caps & WL_SEAT_CAPABILITY_POINTER) && device->input_pointer_) {
+    device->input_pointer_->OnSeatCapabilities(seat, caps);
+    delete device->input_pointer_;
+    device->input_pointer_ = NULL;
+  }
+
+  if ((caps & WL_SEAT_CAPABILITY_TOUCH) && !device->input_touch_) {
+    device->input_touch_ = new WaylandTouchscreen();
+    device->input_touch_->OnSeatCapabilities(seat, caps);
+  } else if (!(caps & WL_SEAT_CAPABILITY_TOUCH) && device->input_touch_) {
+    delete device->input_touch_;
+    device->input_touch_ = NULL;
+  }
+}
+
+void WaylandInputDevice::SetFocusWindowHandle(unsigned windowhandle) {
+  focused_window_handle_ = windowhandle;
+  WaylandWindow* window = NULL;
+  if (windowhandle)
+    window = WaylandDisplay::GetInstance()->GetWindow(windowhandle);
+  text_input_->SetActiveWindow(window);
+}
+
+void WaylandInputDevice::SetGrabWindowHandle(unsigned windowhandle,
+                                             uint32_t button) {
+  grab_window_handle_ = windowhandle;
+  grab_button_ = button;
+}
+
+void WaylandInputDevice::SetCursorType(int cursor_type) {
+  if (!input_pointer_) {
+    LOG(WARNING) << "Tried to change cursor without input configured";
+    return;
+  }
+  input_pointer_->Cursor()->Update(CursorShapeFromNative(cursor_type),
+                                   WaylandDisplay::GetInstance()->GetSerial());
+}
+
+void WaylandInputDevice::ResetIme() {
+  text_input_->ResetIme();
+}
+
+void WaylandInputDevice::ImeCaretBoundsChanged(gfx::Rect rect) {
+  NOTIMPLEMENTED();
+}
+
+void WaylandInputDevice::ShowInputPanel() {
+  text_input_->ShowInputPanel(input_seat_);
+}
+
+void WaylandInputDevice::HideInputPanel() {
+  text_input_->HideInputPanel(input_seat_);
+}
+
+}  // namespace ozonewayland
--- /dev/null
+++ b/wayland/input_device.h
@@ -0,0 +1,60 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_WAYLAND_INPUT_DEVICE_H_
+#define OZONE_WAYLAND_INPUT_DEVICE_H_
+
+#include <wayland-client.h>
+#include "base/basictypes.h"
+#include "ozone/ui/events/ime_state_change_handler.h"
+
+namespace ozonewayland {
+
+class WaylandKeyboard;
+class WaylandPointer;
+class WaylandDisplay;
+class WaylandTouchscreen;
+class WaylandTextInput;
+
+class WaylandInputDevice : public ui::IMEStateChangeHandler {
+ public:
+  WaylandInputDevice(WaylandDisplay* display, uint32_t id);
+  virtual ~WaylandInputDevice();
+
+  wl_seat* GetInputSeat() const { return input_seat_; }
+  WaylandKeyboard* GetKeyBoard() const { return input_keyboard_; }
+  WaylandPointer* GetPointer() const { return input_pointer_; }
+  unsigned GetFocusWindowHandle() const { return focused_window_handle_; }
+  unsigned GetGrabWindowHandle() const { return grab_window_handle_; }
+  uint32_t GetGrabButton() const { return grab_button_; }
+  void SetFocusWindowHandle(unsigned windowhandle);
+  void SetGrabWindowHandle(unsigned windowhandle, uint32_t button);
+  void SetCursorType(int cursor_type);
+
+  void ResetIme() override;
+  void ImeCaretBoundsChanged(gfx::Rect rect) override;
+  void ShowInputPanel() override;
+  void HideInputPanel() override;
+
+ private:
+  static void OnSeatCapabilities(void *data,
+                                 wl_seat *seat,
+                                 uint32_t caps);
+
+  // Keeps track of current focused window.
+  unsigned focused_window_handle_;
+  unsigned grab_window_handle_;
+  uint32_t grab_button_;
+  wl_seat* input_seat_;
+  WaylandKeyboard* input_keyboard_;
+  WaylandPointer* input_pointer_;
+  WaylandTouchscreen* input_touch_;
+  WaylandTextInput* text_input_;
+
+  DISALLOW_COPY_AND_ASSIGN(WaylandInputDevice);
+};
+
+}  // namespace ozonewayland
+
+#endif  // OZONE_WAYLAND_INPUT_DEVICE_H_
--- /dev/null
+++ b/wayland/ozone_wayland_screen.cc
@@ -0,0 +1,87 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/wayland/ozone_wayland_screen.h"
+
+#include "ozone/ui/desktop_aura/desktop_platform_screen.h"
+
+#include "ozone/ui/events/event_factory_ozone_wayland.h"
+#include "ozone/ui/events/output_change_observer.h"
+#include "ozone/wayland/display_poll_thread.h"
+#include "ozone/wayland/egl/surface_ozone_wayland.h"
+#include "ozone/wayland/input/cursor.h"
+#include "ozone/wayland/input_device.h"
+#include "ozone/wayland/screen.h"
+
+namespace ozonewayland {
+
+OzoneWaylandScreen::OzoneWaylandScreen() : look_ahead_screen_(NULL) {
+  LookAheadOutputGeometry();
+}
+
+OzoneWaylandScreen::~OzoneWaylandScreen() {
+}
+
+gfx::Point OzoneWaylandScreen::GetCursorScreenPoint() {
+  return gfx::Point();
+}
+
+void OzoneWaylandScreen::LookAheadOutputGeometry() {
+  wl_display* display = wl_display_connect(NULL);
+  if (!display)
+    return;
+
+  static const struct wl_registry_listener registry_output = {
+    OzoneWaylandScreen::DisplayHandleOutputOnly
+  };
+
+  wl_registry* registry = wl_display_get_registry(display);
+  wl_registry_add_listener(registry, &registry_output, this);
+
+  if (wl_display_roundtrip(display) > 0) {
+    while (look_ahead_screen_->Geometry().IsEmpty())
+      wl_display_roundtrip(display);
+
+    ui::EventFactoryOzoneWayland* event_factory =
+        ui::EventFactoryOzoneWayland::GetInstance();
+    DCHECK(event_factory->GetOutputChangeObserver());
+
+    unsigned width = look_ahead_screen_->Geometry().width();
+    unsigned height = look_ahead_screen_->Geometry().height();
+    event_factory->GetOutputChangeObserver()->OnOutputSizeChanged(width,
+                                                                  height);
+  }
+
+  if (look_ahead_screen_) {
+    delete look_ahead_screen_;
+    look_ahead_screen_ = NULL;
+  }
+
+  wl_registry_destroy(registry);
+  wl_display_flush(display);
+  wl_display_disconnect(display);
+}
+
+void OzoneWaylandScreen::DisplayHandleOutputOnly(void *data,
+                                                 struct wl_registry *registry,
+                                                 uint32_t name,
+                                                 const char *interface,
+                                                 uint32_t version) {
+  OzoneWaylandScreen* disp = static_cast<OzoneWaylandScreen*>(data);
+
+  if (strcmp(interface, "wl_output") == 0) {
+    WaylandScreen* screen = new WaylandScreen(registry, name);
+    disp->look_ahead_screen_ = screen;
+  }
+}
+
+}  // namespace ozonewayland
+
+namespace views {
+
+ui::DesktopPlatformScreen* CreateDesktopPlatformScreen() {
+  return new ozonewayland::OzoneWaylandScreen();
+}
+
+}
--- /dev/null
+++ b/wayland/ozone_wayland_screen.h
@@ -0,0 +1,40 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_WAYLAND_OZONE_WAYLAND_SCREEN_H_
+#define OZONE_WAYLAND_OZONE_WAYLAND_SCREEN_H_
+
+#include <wayland-client.h>
+
+#include "ozone/platform/desktop_platform_screen.h"
+
+namespace ozonewayland {
+
+class WaylandScreen;
+
+class OzoneWaylandScreen : public ui::DesktopPlatformScreen {
+ public:
+  OzoneWaylandScreen();
+  ~OzoneWaylandScreen() override;
+
+  // PlatformScreen:
+  gfx::Point GetCursorScreenPoint() override;
+
+ private:
+  void LookAheadOutputGeometry();
+  // This handler resolves only screen registration. In general you don't want
+  // to use this but the one below.
+  static void DisplayHandleOutputOnly(
+      void *data,
+      struct wl_registry *registry,
+      uint32_t name,
+      const char *interface,
+      uint32_t version);
+  WaylandScreen* look_ahead_screen_;
+  DISALLOW_COPY_AND_ASSIGN(OzoneWaylandScreen);
+};
+
+}  // namespace ozonewayland
+
+#endif  // OZONE_WAYLAND_OZONE_WAYLAND_SCREEN_H_
--- /dev/null
+++ b/wayland/screen.cc
@@ -0,0 +1,70 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/wayland/screen.h"
+
+#include <wayland-client.h>
+
+#include "ozone/ui/events/event_factory_ozone_wayland.h"
+#include "ozone/wayland/display.h"
+
+namespace ozonewayland {
+
+WaylandScreen::WaylandScreen(wl_registry* registry, uint32_t id)
+    : output_(NULL),
+      refresh_(0),
+      rect_(0, 0, 0, 0) {
+  static const wl_output_listener kOutputListener = {
+    WaylandScreen::OutputHandleGeometry,
+    WaylandScreen::OutputHandleMode,
+  };
+
+  output_ = static_cast<wl_output*>(
+      wl_registry_bind(registry, id, &wl_output_interface, 1));
+  wl_output_add_listener(output_, &kOutputListener, this);
+  DCHECK(output_);
+}
+
+WaylandScreen::~WaylandScreen() {
+  wl_output_destroy(output_);
+}
+
+// static
+void WaylandScreen::OutputHandleGeometry(void *data,
+                                         wl_output *output,
+                                         int32_t x,
+                                         int32_t y,
+                                         int32_t physical_width,
+                                         int32_t physical_height,
+                                         int32_t subpixel,
+                                         const char* make,
+                                         const char* model,
+                                         int32_t output_transform) {
+  WaylandScreen* screen = static_cast<WaylandScreen*>(data);
+  screen->rect_.set_origin(gfx::Point(x, y));
+}
+
+// static
+void WaylandScreen::OutputHandleMode(void* data,
+                                     wl_output* wl_output,
+                                     uint32_t flags,
+                                     int32_t width,
+                                     int32_t height,
+                                     int32_t refresh) {
+  WaylandScreen* screen = static_cast<WaylandScreen*>(data);
+  if (flags & WL_OUTPUT_MODE_CURRENT) {
+    screen->rect_.set_width(width);
+    screen->rect_.set_height(height);
+    screen->refresh_ = refresh;
+
+    if (!WaylandDisplay::GetInstance())
+      return;
+
+    ui::EventFactoryOzoneWayland::GetInstance()->EventConverter()->
+        OutputSizeChanged(width, height);
+  }
+}
+
+}  // namespace ozonewayland
--- /dev/null
+++ b/wayland/screen.h
@@ -0,0 +1,65 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_WAYLAND_SCREEN_H_
+#define OZONE_WAYLAND_SCREEN_H_
+
+#include <stdint.h>
+
+#include "base/basictypes.h"
+#include "ui/gfx/point.h"
+#include "ui/gfx/rect.h"
+
+struct wl_output;
+struct wl_registry;
+
+namespace ozonewayland {
+
+class WaylandDisplay;
+
+// WaylandScreen objects keep track of the current outputs (screens/monitors)
+// that are available to the application.
+class WaylandScreen {
+ public:
+  WaylandScreen(wl_registry* registry, uint32_t id);
+  ~WaylandScreen();
+
+  // Returns the active allocation of the screen.
+  gfx::Rect Geometry() const { return rect_; }
+
+ private:
+  // Callback functions that allows the display to initialize the screen's
+  // position and available modes.
+  static void OutputHandleGeometry(void* data,
+                                   wl_output* output,
+                                   int32_t x,
+                                   int32_t y,
+                                   int32_t physical_width,
+                                   int32_t physical_height,
+                                   int32_t subpixel,
+                                   const char* make,
+                                   const char* model,
+                                   int32_t output_transform);
+
+  static void OutputHandleMode(void* data,
+                               wl_output* wl_output,
+                               uint32_t flags,
+                               int32_t width,
+                               int32_t height,
+                               int32_t refresh);
+
+  // The Wayland output this object wraps
+  wl_output* output_;
+
+  // Rect and Refresh rate of active mode.
+  int32_t refresh_;
+  gfx::Rect rect_;
+
+  DISALLOW_COPY_AND_ASSIGN(WaylandScreen);
+};
+
+}  // namespace ozonewayland
+
+#endif  // OZONE_WAYLAND_SCREEN_H_
--- /dev/null
+++ b/wayland/shell/OWNERS
@@ -0,0 +1,2 @@
+kalyan.kondapally@intel.com
+tiago.vignatti@intel.com
--- /dev/null
+++ b/wayland/shell/ivi-application-client-protocol.h
@@ -0,0 +1,176 @@
+/* 
+ * Copyright (C) 2013 DENSO CORPORATION
+ * Copyright (c) 2013 BMW Car IT GmbH
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef IVI_APPLICATION_CLIENT_PROTOCOL_H
+#define IVI_APPLICATION_CLIENT_PROTOCOL_H
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+#include <stddef.h>
+#include <stdint.h>
+#include "wayland-client.h"
+
+struct wl_client;
+struct wl_resource;
+
+struct ivi_surface;
+struct ivi_application;
+
+extern const struct wl_interface ivi_surface_interface;
+extern const struct wl_interface ivi_application_interface;
+
+#ifndef IVI_SURFACE_WARNING_CODE_ENUM
+#define IVI_SURFACE_WARNING_CODE_ENUM
+/**
+ * ivi_surface_warning_code - possible warning codes returned by ivi
+ *	compositor
+ * @IVI_SURFACE_WARNING_CODE_INVALID_WL_SURFACE: wl_surface is invalid
+ * @IVI_SURFACE_WARNING_CODE_IVI_ID_IN_USE: ivi_id is in use and can not
+ *	be shared
+ *
+ * These define all possible warning codes returned by ivi compositor on
+ * server-side warnings. invalid_wl_surface: - wl_surface already has a
+ * another role. - wl_surface is destroyed before the ivi_surface is
+ * destroyed. ivi_id_in_use: ivi_id is already assigned by another
+ * application.
+ */
+enum ivi_surface_warning_code {
+	IVI_SURFACE_WARNING_CODE_INVALID_WL_SURFACE = 1,
+	IVI_SURFACE_WARNING_CODE_IVI_ID_IN_USE = 2,
+};
+#endif /* IVI_SURFACE_WARNING_CODE_ENUM */
+
+/**
+ * ivi_surface - application interface to surface in ivi compositor
+ * @visibility: visibility of surface in ivi compositor has changed
+ * @warning: server-side warning detected
+ *
+ * 
+ */
+struct ivi_surface_listener {
+	/**
+	 * visibility - visibility of surface in ivi compositor has
+	 *	changed
+	 * @visibility: (none)
+	 *
+	 * The new visibility state is provided in argument visibility.
+	 * If visibility is 0, the surface has become invisible. If
+	 * visibility is not 0, the surface has become visible.
+	 */
+	void (*visibility)(void *data,
+			   struct ivi_surface *ivi_surface,
+			   int32_t visibility);
+	/**
+	 * warning - server-side warning detected
+	 * @warning_code: (none)
+	 * @warning_text: (none)
+	 *
+	 * The ivi compositor encountered warning while processing a
+	 * request by this application. The warning is defined by argument
+	 * warning_code and optional warning_text. If the warning is
+	 * detected, client shall destroy the ivi_surface object.
+	 *
+	 * When a warning event is sent, the compositor turns the
+	 * ivi_surface object inert. The ivi_surface will not deliver
+	 * further events, all requests on it are ignored except 'destroy',
+	 * and the association to the ivi_id is removed. The client should
+	 * destroy the ivi_surface object. If an inert ivi_surface object
+	 * is used as an argument to any other object's request, that
+	 * request will [produce a fatal error / produce a warning / be
+	 * ignored].
+	 */
+	void (*warning)(void *data,
+			struct ivi_surface *ivi_surface,
+			int32_t warning_code,
+			const char *warning_text);
+};
+
+static inline int
+ivi_surface_add_listener(struct ivi_surface *ivi_surface,
+			 const struct ivi_surface_listener *listener, void *data)
+{
+	return wl_proxy_add_listener((struct wl_proxy *) ivi_surface,
+				     (void (**)(void)) listener, data);
+}
+
+#define IVI_SURFACE_DESTROY	0
+
+static inline void
+ivi_surface_set_user_data(struct ivi_surface *ivi_surface, void *user_data)
+{
+	wl_proxy_set_user_data((struct wl_proxy *) ivi_surface, user_data);
+}
+
+static inline void *
+ivi_surface_get_user_data(struct ivi_surface *ivi_surface)
+{
+	return wl_proxy_get_user_data((struct wl_proxy *) ivi_surface);
+}
+
+static inline void
+ivi_surface_destroy(struct ivi_surface *ivi_surface)
+{
+	wl_proxy_marshal((struct wl_proxy *) ivi_surface,
+			 IVI_SURFACE_DESTROY);
+
+	wl_proxy_destroy((struct wl_proxy *) ivi_surface);
+}
+
+#define IVI_APPLICATION_SURFACE_CREATE	0
+
+static inline void
+ivi_application_set_user_data(struct ivi_application *ivi_application, void *user_data)
+{
+	wl_proxy_set_user_data((struct wl_proxy *) ivi_application, user_data);
+}
+
+static inline void *
+ivi_application_get_user_data(struct ivi_application *ivi_application)
+{
+	return wl_proxy_get_user_data((struct wl_proxy *) ivi_application);
+}
+
+static inline void
+ivi_application_destroy(struct ivi_application *ivi_application)
+{
+	wl_proxy_destroy((struct wl_proxy *) ivi_application);
+}
+
+static inline struct ivi_surface *
+ivi_application_surface_create(struct ivi_application *ivi_application, uint32_t ivi_id, struct wl_surface *surface)
+{
+	struct wl_proxy *id;
+
+	id = wl_proxy_marshal_constructor((struct wl_proxy *) ivi_application,
+			 IVI_APPLICATION_SURFACE_CREATE, &ivi_surface_interface, ivi_id, surface, NULL);
+
+	return (struct ivi_surface *) id;
+}
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+++ b/wayland/shell/ivi-application-protocol.c
@@ -0,0 +1,63 @@
+/* 
+ * Copyright (C) 2013 DENSO CORPORATION
+ * Copyright (c) 2013 BMW Car IT GmbH
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include <stdlib.h>
+#include <stdint.h>
+#include "wayland-util.h"
+
+extern const struct wl_interface ivi_surface_interface;
+extern const struct wl_interface wl_surface_interface;
+
+static const struct wl_interface *types[] = {
+	NULL,
+	NULL,
+	NULL,
+	&wl_surface_interface,
+	&ivi_surface_interface,
+};
+
+static const struct wl_message ivi_surface_requests[] = {
+	{ "destroy", "", types + 0 },
+};
+
+static const struct wl_message ivi_surface_events[] = {
+	{ "visibility", "i", types + 0 },
+	{ "warning", "i?s", types + 0 },
+};
+
+WL_EXPORT const struct wl_interface ivi_surface_interface = {
+	"ivi_surface", 1,
+	1, ivi_surface_requests,
+	2, ivi_surface_events,
+};
+
+static const struct wl_message ivi_application_requests[] = {
+	{ "surface_create", "uon", types + 2 },
+};
+
+WL_EXPORT const struct wl_interface ivi_application_interface = {
+	"ivi_application", 1,
+	1, ivi_application_requests,
+	0, NULL,
+};
+
--- /dev/null
+++ b/wayland/shell/ivi_shell_surface.cc
@@ -0,0 +1,73 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/wayland/shell/ivi_shell_surface.h"
+
+#include "base/logging.h"
+#include "base/strings/utf_string_conversions.h"
+
+#include "ozone/wayland/display.h"
+#include "ozone/wayland/input_device.h"
+#include "ozone/wayland/shell/ivi-application-client-protocol.h"
+#include "ozone/wayland/shell/shell.h"
+#define IVI_SURFACE_ID 7000
+
+namespace ozonewayland {
+
+int IVIShellSurface::last_ivi_surface_id_ = IVI_SURFACE_ID;
+
+IVIShellSurface::IVIShellSurface()
+    : WaylandShellSurface(),
+      ivi_surface_(NULL),
+      ivi_surface_id_(IVI_SURFACE_ID) {
+}
+
+IVIShellSurface::~IVIShellSurface() {
+  ivi_surface_destroy(ivi_surface_);
+}
+
+void IVIShellSurface::InitializeShellSurface(WaylandWindow* window,
+                                             WaylandWindow::ShellType type) {
+  DCHECK(!ivi_surface_);
+  WaylandDisplay* display = WaylandDisplay::GetInstance();
+  DCHECK(display);
+  WaylandShell* shell = WaylandDisplay::GetInstance()->GetShell();
+  DCHECK(shell && shell->GetIVIShell());
+  char *env;
+  if ((env = getenv("OZONE_WAYLAND_IVI_SURFACE_ID")))
+    ivi_surface_id_ = atoi(env);
+  else
+    ivi_surface_id_ = last_ivi_surface_id_ + 1;
+  ivi_surface_ = ivi_application_surface_create(
+                     shell->GetIVIShell(), ivi_surface_id_, GetWLSurface());
+  last_ivi_surface_id_ = ivi_surface_id_;
+
+  DCHECK(ivi_surface_);
+}
+
+void IVIShellSurface::UpdateShellSurface(WaylandWindow::ShellType type,
+                                         WaylandShellSurface* shell_parent,
+                                         unsigned x,
+                                         unsigned y) {
+  WaylandShellSurface::FlushDisplay();
+}
+
+void IVIShellSurface::SetWindowTitle(const base::string16& title) {
+}
+
+void IVIShellSurface::Maximize() {
+}
+
+void IVIShellSurface::Minimize() {
+}
+
+void IVIShellSurface::Unminimize() {
+}
+
+bool IVIShellSurface::IsMinimized() const {
+  return false;
+}
+
+
+}  // namespace ozonewayland
--- /dev/null
+++ b/wayland/shell/ivi_shell_surface.h
@@ -0,0 +1,43 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_WAYLAND_SHELL_IVI_SHELL_SURFACE_H_
+#define OZONE_WAYLAND_SHELL_IVI_SHELL_SURFACE_H_
+
+#include "ozone/wayland/shell/shell_surface.h"
+
+struct ivi_surface;
+
+namespace ozonewayland {
+
+class WaylandSurface;
+class WaylandWindow;
+
+class IVIShellSurface : public WaylandShellSurface {
+ public:
+  IVIShellSurface();
+  virtual ~IVIShellSurface();
+
+  void InitializeShellSurface(WaylandWindow* window,
+                              WaylandWindow::ShellType type) override;
+  void UpdateShellSurface(WaylandWindow::ShellType type,
+                          WaylandShellSurface* shell_parent,
+                          unsigned x,
+                          unsigned y) override;
+  void SetWindowTitle(const base::string16& title) override;
+  void Maximize() override;
+  void Minimize() override;
+  void Unminimize() override;
+  bool IsMinimized() const override;
+
+ private:
+  ivi_surface* ivi_surface_;
+  int ivi_surface_id_;
+  static int last_ivi_surface_id_;
+  DISALLOW_COPY_AND_ASSIGN(IVIShellSurface);
+};
+
+}  // namespace ozonewayland
+
+#endif  // OZONE_WAYLAND_SHELL_IVI_SHELL_SURFACE_H_
--- /dev/null
+++ b/wayland/shell/shell.cc
@@ -0,0 +1,86 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/wayland/shell/shell.h"
+
+#include "base/logging.h"
+#include "ozone/wayland/display.h"
+#include "ozone/wayland/shell/ivi-application-client-protocol.h"
+#include "ozone/wayland/shell/ivi_shell_surface.h"
+#include "ozone/wayland/shell/wl_shell_surface.h"
+#include "ozone/wayland/shell/xdg-shell-client-protocol.h"
+#include "ozone/wayland/shell/xdg_shell_surface.h"
+
+namespace ozonewayland {
+
+WaylandShell::WaylandShell()
+    : shell_(NULL),
+      xdg_shell_(NULL),
+      ivi_application_(NULL) {
+}
+
+WaylandShell::~WaylandShell() {
+  if (shell_)
+    wl_shell_destroy(shell_);
+  if (xdg_shell_)
+    xdg_shell_destroy(xdg_shell_);
+  if (ivi_application_)
+    ivi_application_destroy(ivi_application_);
+}
+
+WaylandShellSurface*
+WaylandShell::CreateShellSurface(WaylandWindow* window,
+                                 WaylandWindow::ShellType type) {
+  DCHECK(shell_ || xdg_shell_ || ivi_application_);
+  WaylandDisplay* display = WaylandDisplay::GetInstance();
+  DCHECK(display);
+  WaylandShellSurface* surface = NULL;
+  if (ivi_application_)
+    surface = new IVIShellSurface();
+  if (xdg_shell_)
+    surface = new XDGShellSurface();
+  if (!surface)
+    surface = new WLShellSurface();
+
+  DCHECK(surface);
+  surface->InitializeShellSurface(window, type);
+  wl_surface_set_user_data(surface->GetWLSurface(), window);
+  display->FlushDisplay();
+
+  return surface;
+}
+
+void WaylandShell::Initialize(struct wl_registry *registry,
+                              uint32_t name,
+                              const char *interface,
+                              uint32_t version) {
+  if (strcmp(interface, "wl_shell") == 0) {
+    DCHECK(!shell_);
+    shell_ = static_cast<wl_shell*>(
+        wl_registry_bind(registry, name, &wl_shell_interface, 1));
+  } else if ((strcmp(interface, "xdg_shell") == 0) &&
+                getenv("OZONE_WAYLAND_USE_XDG_SHELL")) {
+      DCHECK(!xdg_shell_);
+      xdg_shell_ = static_cast<xdg_shell*>(
+          wl_registry_bind(registry, name, &xdg_shell_interface, 1));
+      xdg_shell_use_unstable_version(xdg_shell_, XDG_SHELL_VERSION_CURRENT);
+
+      static const xdg_shell_listener xdg_shell_listener = {
+        WaylandShell::XDGHandlePing
+      };
+      xdg_shell_add_listener(xdg_shell_, &xdg_shell_listener, NULL);
+  } else if (strcmp(interface, "ivi_application") == 0) {
+      DCHECK(!ivi_application_);
+      ivi_application_ = static_cast<ivi_application*>(
+          wl_registry_bind(registry, name, &ivi_application_interface, 1));
+  }
+}
+
+void WaylandShell::XDGHandlePing(void* data,
+                                 struct xdg_shell* xdg_shell,
+                                 uint32_t serial) {
+  xdg_shell_pong(xdg_shell, serial);
+}
+
+}  // namespace ozonewayland
--- /dev/null
+++ b/wayland/shell/shell.h
@@ -0,0 +1,50 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_WAYLAND_SHELL_SHELL_H_
+#define OZONE_WAYLAND_SHELL_SHELL_H_
+
+#include <wayland-client.h>
+
+#include "base/basictypes.h"
+#include "ozone/wayland/window.h"
+
+struct xdg_shell;
+struct ivi_application;
+namespace ozonewayland {
+
+class WaylandShellSurface;
+class WaylandWindow;
+
+class WaylandShell {
+ public:
+  WaylandShell();
+  ~WaylandShell();
+  // Creates shell surface for a given WaylandWindow. This can be either
+  // wl_shell, xdg_shell or any shell which supports wayland protocol.
+  // Ownership is passed to the caller.
+  WaylandShellSurface* CreateShellSurface(WaylandWindow* parent,
+                                          WaylandWindow::ShellType type);
+  void Initialize(struct wl_registry *registry,
+                  uint32_t name,
+                  const char *interface,
+                  uint32_t version);
+
+  wl_shell* GetWLShell() const { return shell_; }
+  xdg_shell* GetXDGShell() const { return xdg_shell_; }
+  ivi_application* GetIVIShell() const { return ivi_application_; }
+
+ private:
+  static void XDGHandlePing(void* data,
+                            struct xdg_shell* xdg_shell,
+                            uint32_t serial);
+  wl_shell* shell_;
+  xdg_shell* xdg_shell_;
+  ivi_application* ivi_application_;
+  DISALLOW_COPY_AND_ASSIGN(WaylandShell);
+};
+
+}  // namespace ozonewayland
+
+#endif  // OZONE_WAYLAND_SHELL_H_
--- /dev/null
+++ b/wayland/shell/shell_surface.cc
@@ -0,0 +1,77 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/wayland/shell/shell_surface.h"
+
+#include "ozone/ui/events/event_factory_ozone_wayland.h"
+#include "ozone/wayland/display.h"
+#include "ozone/wayland/input_device.h"
+
+namespace ozonewayland {
+
+WaylandShellSurface::WaylandShellSurface()
+    : surface_(NULL) {
+  WaylandDisplay* display = WaylandDisplay::GetInstance();
+  surface_ = wl_compositor_create_surface(display->GetCompositor());
+}
+
+WaylandShellSurface::~WaylandShellSurface() {
+  DCHECK(surface_);
+  wl_surface_destroy(surface_);
+  FlushDisplay();
+}
+
+struct wl_surface* WaylandShellSurface::GetWLSurface() const {
+    return surface_;
+}
+
+void WaylandShellSurface::FlushDisplay() const {
+  WaylandDisplay* display = WaylandDisplay::GetInstance();
+  DCHECK(display);
+  display->FlushDisplay();
+}
+
+void WaylandShellSurface::PopupDone() {
+  WaylandInputDevice* input = WaylandDisplay::GetInstance()->PrimaryInput();
+  ui::EventConverterOzoneWayland* dispatcher =
+      ui::EventFactoryOzoneWayland::GetInstance()->EventConverter();
+
+  if (!input->GetGrabWindowHandle())
+    return;
+  dispatcher->CloseWidget(input->GetGrabWindowHandle());
+  input->SetGrabWindowHandle(0, 0);
+}
+
+void WaylandShellSurface::WindowResized(void* data,
+                                 unsigned width,
+                                 unsigned height) {
+  WaylandWindow *window = static_cast<WaylandWindow*>(data);
+  ui::EventConverterOzoneWayland* dispatcher =
+      ui::EventFactoryOzoneWayland::GetInstance()->EventConverter();
+  dispatcher->WindowResized(window->Handle(), width, height);
+}
+
+void WaylandShellSurface::WindowActivated(void *data) {
+  WaylandWindow *window = static_cast<WaylandWindow*>(data);
+  WaylandShellSurface* shellSurface = window->ShellSurface();
+
+  ui::EventConverterOzoneWayland* dispatcher =
+    ui::EventFactoryOzoneWayland::GetInstance()->EventConverter();
+
+  if (shellSurface->IsMinimized()) {
+    shellSurface->Unminimize();
+    dispatcher->WindowUnminimized(window->Handle());
+  } else {
+    dispatcher->WindowActivated(window->Handle());
+  }
+}
+
+void WaylandShellSurface::WindowDeActivated(void *data) {
+  WaylandWindow *window = static_cast<WaylandWindow*>(data);
+  ui::EventConverterOzoneWayland* dispatcher =
+    ui::EventFactoryOzoneWayland::GetInstance()->EventConverter();
+  dispatcher->WindowDeActivated(window->Handle());
+}
+
+}  // namespace ozonewayland
--- /dev/null
+++ b/wayland/shell/shell_surface.h
@@ -0,0 +1,54 @@
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_WAYLAND_SHELL_SHELL_SURFACE_H_
+#define OZONE_WAYLAND_SHELL_SHELL_SURFACE_H_
+
+#include <wayland-client.h>
+
+#include "base/basictypes.h"
+#include "ozone/wayland/window.h"
+
+namespace ozonewayland {
+
+class WaylandWindow;
+
+class WaylandShellSurface {
+ public:
+  WaylandShellSurface();
+  virtual ~WaylandShellSurface();
+
+  struct wl_surface* GetWLSurface() const;
+
+  // The implementation should initialize the shell and set up all
+  // necessary callbacks.
+  virtual void InitializeShellSurface(WaylandWindow* window,
+                                      WaylandWindow::ShellType type) = 0;
+  virtual void UpdateShellSurface(WaylandWindow::ShellType type,
+                                  WaylandShellSurface* shell_parent,
+                                  unsigned x,
+                                  unsigned y) = 0;
+  virtual void SetWindowTitle(const base::string16& title) = 0;
+  virtual void Maximize() = 0;
+  virtual void Minimize() = 0;
+  virtual void Unminimize() = 0;
+  virtual bool IsMinimized() const = 0;
+
+  // static functions.
+  static void PopupDone();
+  static void WindowResized(void *data, unsigned width, unsigned height);
+  static void WindowActivated(void *data);
+  static void WindowDeActivated(void *data);
+
+ protected:
+  void FlushDisplay() const;
+
+ private:
+  struct wl_surface* surface_;
+  DISALLOW_COPY_AND_ASSIGN(WaylandShellSurface);
+};
+
+}  // namespace ozonewayland
+
+#endif  // OZONE_WAYLAND_SHELL_SHELL_SURFACE_H_
--- /dev/null
+++ b/wayland/shell/wl_shell_surface.cc
@@ -0,0 +1,124 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/wayland/shell/wl_shell_surface.h"
+
+#include "base/logging.h"
+#include "base/strings/utf_string_conversions.h"
+
+#include "ozone/wayland/display.h"
+#include "ozone/wayland/input_device.h"
+#include "ozone/wayland/shell/shell.h"
+
+namespace ozonewayland {
+
+WLShellSurface::WLShellSurface()
+    : WaylandShellSurface(),
+      shell_surface_(NULL) {
+}
+
+WLShellSurface::~WLShellSurface() {
+  wl_shell_surface_destroy(shell_surface_);
+}
+
+void WLShellSurface::InitializeShellSurface(WaylandWindow* window,
+                                            WaylandWindow::ShellType type) {
+  DCHECK(!shell_surface_);
+  WaylandDisplay* display = WaylandDisplay::GetInstance();
+  DCHECK(display);
+  WaylandShell* shell = WaylandDisplay::GetInstance()->GetShell();
+  DCHECK(shell && shell->GetWLShell());
+  shell_surface_ = wl_shell_get_shell_surface(shell->GetWLShell(),
+                                              GetWLSurface());
+
+  static const wl_shell_surface_listener shell_surface_listener = {
+    WLShellSurface::HandlePing,
+    WLShellSurface::HandleConfigure,
+    WLShellSurface::HandlePopupDone
+  };
+
+  wl_shell_surface_add_listener(shell_surface_,
+                                &shell_surface_listener,
+                                window);
+
+  DCHECK(shell_surface_);
+}
+
+void WLShellSurface::UpdateShellSurface(WaylandWindow::ShellType type,
+                                        WaylandShellSurface* shell_parent,
+                                        unsigned x,
+                                        unsigned y) {
+  switch (type) {
+  case WaylandWindow::TOPLEVEL:
+    wl_shell_surface_set_toplevel(shell_surface_);
+    break;
+  case WaylandWindow::POPUP: {
+    WaylandDisplay* display = WaylandDisplay::GetInstance();
+    WaylandInputDevice* input_device = display->PrimaryInput();
+    wl_surface* parent_surface = shell_parent->GetWLSurface();
+    wl_shell_surface_set_popup(shell_surface_,
+                               input_device->GetInputSeat(),
+                               display->GetSerial(),
+                               parent_surface,
+                               x,
+                               y,
+                               0);
+    break;
+  }
+  case WaylandWindow::FULLSCREEN:
+    wl_shell_surface_set_fullscreen(shell_surface_,
+                                    WL_SHELL_SURFACE_FULLSCREEN_METHOD_DEFAULT,
+                                    0,
+                                    NULL);
+    break;
+  case WaylandWindow::CUSTOM:
+      NOTREACHED() << "Unsupported shell type: " << type;
+    break;
+    default:
+      break;
+  }
+
+  WaylandShellSurface::FlushDisplay();
+}
+
+void WLShellSurface::SetWindowTitle(const base::string16& title) {
+  wl_shell_surface_set_title(shell_surface_, UTF16ToUTF8(title).c_str());
+  WaylandShellSurface::FlushDisplay();
+}
+
+void WLShellSurface::Maximize() {
+  wl_shell_surface_set_maximized(shell_surface_, NULL);
+  WaylandShellSurface::FlushDisplay();
+}
+
+void WLShellSurface::Minimize() {
+}
+
+void WLShellSurface::Unminimize() {
+}
+
+bool WLShellSurface::IsMinimized() const {
+  return false;
+}
+
+void WLShellSurface::HandleConfigure(void* data,
+                                     struct wl_shell_surface* surface,
+                                     uint32_t edges,
+                                     int32_t width,
+                                     int32_t height) {
+  WaylandShellSurface::WindowResized(data, width, height);
+}
+
+void WLShellSurface::HandlePopupDone(void* data,
+                                     struct wl_shell_surface* surface) {
+  WaylandShellSurface::PopupDone();
+}
+
+void WLShellSurface::HandlePing(void* data,
+                                struct wl_shell_surface* shell_surface,
+                                uint32_t serial) {
+  wl_shell_surface_pong(shell_surface, serial);
+}
+
+}  // namespace ozonewayland
--- /dev/null
+++ b/wayland/shell/wl_shell_surface.h
@@ -0,0 +1,50 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_WAYLAND_SHELL_WL_SHELL_SURFACE_H_
+#define OZONE_WAYLAND_SHELL_WL_SHELL_SURFACE_H_
+
+#include "ozone/wayland/shell/shell_surface.h"
+
+namespace ozonewayland {
+
+class WaylandSurface;
+class WaylandWindow;
+
+class WLShellSurface : public WaylandShellSurface {
+ public:
+  WLShellSurface();
+  virtual ~WLShellSurface();
+
+  void InitializeShellSurface(WaylandWindow* window,
+                              WaylandWindow::ShellType type) override;
+  void UpdateShellSurface(WaylandWindow::ShellType type,
+                          WaylandShellSurface* shell_parent,
+                          unsigned x,
+                          unsigned y) override;
+  void SetWindowTitle(const base::string16& title) override;
+  void Maximize() override;
+  void Minimize() override;
+  void Unminimize() override;
+  bool IsMinimized() const override;
+
+  static void HandleConfigure(void* data,
+                              struct wl_shell_surface* shell_surface,
+                              uint32_t edges,
+                              int32_t width,
+                              int32_t height);
+  static void HandlePopupDone(void* data,
+                              struct wl_shell_surface* shell_surface);
+  static void HandlePing(void* data,
+                         struct wl_shell_surface* shell_surface,
+                         uint32_t serial);
+
+ private:
+  wl_shell_surface* shell_surface_;
+  DISALLOW_COPY_AND_ASSIGN(WLShellSurface);
+};
+
+}  // namespace ozonewayland
+
+#endif  // OZONE_WAYLAND_SHELL_WL_SHELL_SURFACE_H_
--- /dev/null
+++ b/wayland/shell/xdg-shell-client-protocol.h
@@ -0,0 +1,504 @@
+/*
+ * Copyright © 2008-2013 Kristian Høgsberg
+ * Copyright © 2013      Rafael Antognolli
+ * Copyright © 2013      Jasper St. Pierre
+ * Copyright © 2010-2013 Intel Corporation
+ *
+ * Permission to use, copy, modify, distribute, and sell this
+ * software and its documentation for any purpose is hereby granted
+ * without fee, provided that the above copyright notice appear in
+ * all copies and that both that copyright notice and this permission
+ * notice appear in supporting documentation, and that the name of
+ * the copyright holders not be used in advertising or publicity
+ * pertaining to distribution of the software without specific,
+ * written prior permission.  The copyright holders make no
+ * representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied
+ * warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+
+#ifndef XDG_SHELL_CLIENT_PROTOCOL_H
+#define XDG_SHELL_CLIENT_PROTOCOL_H
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include <stddef.h>
+#include "wayland-client.h"
+
+struct wl_client;
+struct wl_resource;
+
+struct xdg_shell;
+struct xdg_surface;
+struct xdg_popup;
+
+extern const struct wl_interface xdg_shell_interface;
+extern const struct wl_interface xdg_surface_interface;
+extern const struct wl_interface xdg_popup_interface;
+
+#ifndef XDG_SHELL_VERSION_ENUM
+#define XDG_SHELL_VERSION_ENUM
+/**
+ * xdg_shell_version - latest protocol version
+ * @XDG_SHELL_VERSION_CURRENT: Always the latest version
+ *
+ * The 'current' member of this enum gives the version of the protocol.
+ * Implementations can compare this to the version they implement using
+ * static_assert to ensure the protocol and implementation versions match.
+ */
+enum xdg_shell_version {
+	XDG_SHELL_VERSION_CURRENT = 3,
+};
+#endif /* XDG_SHELL_VERSION_ENUM */
+
+/**
+ * xdg_shell - create desktop-style surfaces
+ * @ping: check if the client is alive
+ *
+ * This interface is implemented by servers that provide desktop-style
+ * user interfaces.
+ *
+ * It allows clients to associate a xdg_surface with a basic surface.
+ */
+struct xdg_shell_listener {
+	/**
+	 * ping - check if the client is alive
+	 * @serial: pass this to the callback
+	 *
+	 * The ping event asks the client if it's still alive. Pass the
+	 * serial specified in the event back to the compositor by sending
+	 * a "pong" request back with the specified serial.
+	 *
+	 * Compositors can use this to determine if the client is still
+	 * alive. It's unspecified what will happen if the client doesn't
+	 * respond to the ping request, or in what timeframe. Clients
+	 * should try to respond in a reasonable amount of time.
+	 */
+	void (*ping)(void *data,
+		     struct xdg_shell *xdg_shell,
+		     uint32_t serial);
+};
+
+static inline int
+xdg_shell_add_listener(struct xdg_shell *xdg_shell,
+		       const struct xdg_shell_listener *listener, void *data)
+{
+	return wl_proxy_add_listener((struct wl_proxy *) xdg_shell,
+				     (void (**)(void)) listener, data);
+}
+
+#define XDG_SHELL_USE_UNSTABLE_VERSION	0
+#define XDG_SHELL_GET_XDG_SURFACE	1
+#define XDG_SHELL_GET_XDG_POPUP	2
+#define XDG_SHELL_PONG	3
+
+static inline void
+xdg_shell_set_user_data(struct xdg_shell *xdg_shell, void *user_data)
+{
+	wl_proxy_set_user_data((struct wl_proxy *) xdg_shell, user_data);
+}
+
+static inline void *
+xdg_shell_get_user_data(struct xdg_shell *xdg_shell)
+{
+	return wl_proxy_get_user_data((struct wl_proxy *) xdg_shell);
+}
+
+static inline void
+xdg_shell_destroy(struct xdg_shell *xdg_shell)
+{
+	wl_proxy_destroy((struct wl_proxy *) xdg_shell);
+}
+
+static inline void
+xdg_shell_use_unstable_version(struct xdg_shell *xdg_shell, int32_t version)
+{
+	wl_proxy_marshal((struct wl_proxy *) xdg_shell,
+			 XDG_SHELL_USE_UNSTABLE_VERSION, version);
+}
+
+static inline struct xdg_surface *
+xdg_shell_get_xdg_surface(struct xdg_shell *xdg_shell, struct wl_surface *surface)
+{
+	struct wl_proxy *id;
+
+	id = wl_proxy_marshal_constructor((struct wl_proxy *) xdg_shell,
+			 XDG_SHELL_GET_XDG_SURFACE, &xdg_surface_interface, NULL, surface);
+
+	return (struct xdg_surface *) id;
+}
+
+static inline struct xdg_popup *
+xdg_shell_get_xdg_popup(struct xdg_shell *xdg_shell, struct wl_surface *surface, struct wl_surface *parent, struct wl_seat *seat, uint32_t serial, int32_t x, int32_t y, uint32_t flags)
+{
+	struct wl_proxy *id;
+
+	id = wl_proxy_marshal_constructor((struct wl_proxy *) xdg_shell,
+			 XDG_SHELL_GET_XDG_POPUP, &xdg_popup_interface, NULL, surface, parent, seat, serial, x, y, flags);
+
+	return (struct xdg_popup *) id;
+}
+
+static inline void
+xdg_shell_pong(struct xdg_shell *xdg_shell, uint32_t serial)
+{
+	wl_proxy_marshal((struct wl_proxy *) xdg_shell,
+			 XDG_SHELL_PONG, serial);
+}
+
+#ifndef XDG_SURFACE_RESIZE_EDGE_ENUM
+#define XDG_SURFACE_RESIZE_EDGE_ENUM
+/**
+ * xdg_surface_resize_edge - edge values for resizing
+ * @XDG_SURFACE_RESIZE_EDGE_NONE: (none)
+ * @XDG_SURFACE_RESIZE_EDGE_TOP: (none)
+ * @XDG_SURFACE_RESIZE_EDGE_BOTTOM: (none)
+ * @XDG_SURFACE_RESIZE_EDGE_LEFT: (none)
+ * @XDG_SURFACE_RESIZE_EDGE_TOP_LEFT: (none)
+ * @XDG_SURFACE_RESIZE_EDGE_BOTTOM_LEFT: (none)
+ * @XDG_SURFACE_RESIZE_EDGE_RIGHT: (none)
+ * @XDG_SURFACE_RESIZE_EDGE_TOP_RIGHT: (none)
+ * @XDG_SURFACE_RESIZE_EDGE_BOTTOM_RIGHT: (none)
+ *
+ * These values are used to indicate which edge of a surface is being
+ * dragged in a resize operation. The server may use this information to
+ * adapt its behavior, e.g. choose an appropriate cursor image.
+ */
+enum xdg_surface_resize_edge {
+	XDG_SURFACE_RESIZE_EDGE_NONE = 0,
+	XDG_SURFACE_RESIZE_EDGE_TOP = 1,
+	XDG_SURFACE_RESIZE_EDGE_BOTTOM = 2,
+	XDG_SURFACE_RESIZE_EDGE_LEFT = 4,
+	XDG_SURFACE_RESIZE_EDGE_TOP_LEFT = 5,
+	XDG_SURFACE_RESIZE_EDGE_BOTTOM_LEFT = 6,
+	XDG_SURFACE_RESIZE_EDGE_RIGHT = 8,
+	XDG_SURFACE_RESIZE_EDGE_TOP_RIGHT = 9,
+	XDG_SURFACE_RESIZE_EDGE_BOTTOM_RIGHT = 10,
+};
+#endif /* XDG_SURFACE_RESIZE_EDGE_ENUM */
+
+#ifndef XDG_SURFACE_STATE_ENUM
+#define XDG_SURFACE_STATE_ENUM
+/**
+ * xdg_surface_state - types of state on the surface
+ * @XDG_SURFACE_STATE_MAXIMIZED: the surface is maximized
+ * @XDG_SURFACE_STATE_FULLSCREEN: the surface is fullscreen
+ *
+ * The different state values used on the surface. This is designed for
+ * state values like maximized, fullscreen. It is paired with the
+ * request_change_state event to ensure that both the client and the
+ * compositor setting the state can be synchronized.
+ *
+ * States set in this way are double-buffered. They will get applied on the
+ * next commit.
+ *
+ * Desktop environments may extend this enum by taking up a range of values
+ * and documenting the range they chose in this description. They are not
+ * required to document the values for the range that they chose. Ideally,
+ * any good extensions from a desktop environment should make its way into
+ * standardization into this enum.
+ *
+ * The current reserved ranges are:
+ *
+ * 0x0000 - 0x0FFF: xdg-shell core values, documented below. 0x1000 -
+ * 0x1FFF: GNOME
+ */
+enum xdg_surface_state {
+	XDG_SURFACE_STATE_MAXIMIZED = 1,
+	XDG_SURFACE_STATE_FULLSCREEN = 2,
+};
+#endif /* XDG_SURFACE_STATE_ENUM */
+
+/**
+ * xdg_surface - desktop-style metadata interface
+ * @configure: suggest resize
+ * @change_state: compositor wants to change a surface's state
+ * @activated: surface was activated
+ * @deactivated: surface was deactivated
+ * @close: surface wants to be closed
+ *
+ * An interface that may be implemented by a wl_surface, for
+ * implementations that provide a desktop-style user interface.
+ *
+ * It provides requests to treat surfaces like windows, allowing to set
+ * properties like maximized, fullscreen, minimized, and to move and resize
+ * them, and associate metadata like title and app id.
+ *
+ * On the server side the object is automatically destroyed when the
+ * related wl_surface is destroyed. On client side, xdg_surface.destroy()
+ * must be called before destroying the wl_surface object.
+ */
+struct xdg_surface_listener {
+	/**
+	 * configure - suggest resize
+	 * @width: (none)
+	 * @height: (none)
+	 *
+	 * The configure event asks the client to resize its surface.
+	 *
+	 * The size is a hint, in the sense that the client is free to
+	 * ignore it if it doesn't resize, pick a smaller size (to satisfy
+	 * aspect ratio or resize in steps of NxM pixels).
+	 *
+	 * The client is free to dismiss all but the last configure event
+	 * it received.
+	 *
+	 * The width and height arguments specify the size of the window in
+	 * surface local coordinates.
+	 */
+	void (*configure)(void *data,
+			  struct xdg_surface *xdg_surface,
+			  int32_t width,
+			  int32_t height);
+	/**
+	 * change_state - compositor wants to change a surface's state
+	 * @state_type: the state to set
+	 * @value: the value to change the state to
+	 * @serial: a serial for the compositor's own tracking
+	 *
+	 * This event tells the client to change a surface's state. The
+	 * client should respond with an ack_change_state request to the
+	 * compositor to guarantee that the compositor knows that the
+	 * client has seen it.
+	 */
+	void (*change_state)(void *data,
+			     struct xdg_surface *xdg_surface,
+			     uint32_t state_type,
+			     uint32_t value,
+			     uint32_t serial);
+	/**
+	 * activated - surface was activated
+	 *
+	 * The activated_set event is sent when this surface has been
+	 * activated, which means that the surface has user attention.
+	 * Window decorations should be updated accordingly. You should not
+	 * use this event for anything but the style of decorations you
+	 * display, use wl_keyboard.enter and wl_keyboard.leave for
+	 * determining keyboard focus.
+	 */
+	void (*activated)(void *data,
+			  struct xdg_surface *xdg_surface);
+	/**
+	 * deactivated - surface was deactivated
+	 *
+	 * The deactivate event is sent when this surface has been
+	 * deactivated, which means that the surface lost user attention.
+	 * Window decorations should be updated accordingly. You should not
+	 * use this event for anything but the style of decorations you
+	 * display, use wl_keyboard.enter and wl_keyboard.leave for
+	 * determining keyboard focus.
+	 */
+	void (*deactivated)(void *data,
+			    struct xdg_surface *xdg_surface);
+	/**
+	 * close - surface wants to be closed
+	 *
+	 * The close event is sent by the compositor when the user wants
+	 * the surface to be closed. This should be equivalent to the user
+	 * clicking the close button in client-side decorations, if your
+	 * application has any...
+	 *
+	 * This is only a request that the user intends to close your
+	 * window. The client may choose to ignore this request, or show a
+	 * dialog to ask the user to save their data...
+	 */
+	void (*close)(void *data,
+		      struct xdg_surface *xdg_surface);
+};
+
+static inline int
+xdg_surface_add_listener(struct xdg_surface *xdg_surface,
+			 const struct xdg_surface_listener *listener, void *data)
+{
+	return wl_proxy_add_listener((struct wl_proxy *) xdg_surface,
+				     (void (**)(void)) listener, data);
+}
+
+#define XDG_SURFACE_DESTROY	0
+#define XDG_SURFACE_SET_TRANSIENT_FOR	1
+#define XDG_SURFACE_SET_MARGIN	2
+#define XDG_SURFACE_SET_TITLE	3
+#define XDG_SURFACE_SET_APP_ID	4
+#define XDG_SURFACE_MOVE	5
+#define XDG_SURFACE_RESIZE	6
+#define XDG_SURFACE_SET_OUTPUT	7
+#define XDG_SURFACE_REQUEST_CHANGE_STATE	8
+#define XDG_SURFACE_ACK_CHANGE_STATE	9
+#define XDG_SURFACE_SET_MINIMIZED	10
+
+static inline void
+xdg_surface_set_user_data(struct xdg_surface *xdg_surface, void *user_data)
+{
+	wl_proxy_set_user_data((struct wl_proxy *) xdg_surface, user_data);
+}
+
+static inline void *
+xdg_surface_get_user_data(struct xdg_surface *xdg_surface)
+{
+	return wl_proxy_get_user_data((struct wl_proxy *) xdg_surface);
+}
+
+static inline void
+xdg_surface_destroy(struct xdg_surface *xdg_surface)
+{
+	wl_proxy_marshal((struct wl_proxy *) xdg_surface,
+			 XDG_SURFACE_DESTROY);
+
+	wl_proxy_destroy((struct wl_proxy *) xdg_surface);
+}
+
+static inline void
+xdg_surface_set_transient_for(struct xdg_surface *xdg_surface, struct wl_surface *parent)
+{
+	wl_proxy_marshal((struct wl_proxy *) xdg_surface,
+			 XDG_SURFACE_SET_TRANSIENT_FOR, parent);
+}
+
+static inline void
+xdg_surface_set_margin(struct xdg_surface *xdg_surface, int32_t left_margin, int32_t right_margin, int32_t top_margin, int32_t bottom_margin)
+{
+	wl_proxy_marshal((struct wl_proxy *) xdg_surface,
+			 XDG_SURFACE_SET_MARGIN, left_margin, right_margin, top_margin, bottom_margin);
+}
+
+static inline void
+xdg_surface_set_title(struct xdg_surface *xdg_surface, const char *title)
+{
+	wl_proxy_marshal((struct wl_proxy *) xdg_surface,
+			 XDG_SURFACE_SET_TITLE, title);
+}
+
+static inline void
+xdg_surface_set_app_id(struct xdg_surface *xdg_surface, const char *app_id)
+{
+	wl_proxy_marshal((struct wl_proxy *) xdg_surface,
+			 XDG_SURFACE_SET_APP_ID, app_id);
+}
+
+static inline void
+xdg_surface_move(struct xdg_surface *xdg_surface, struct wl_seat *seat, uint32_t serial)
+{
+	wl_proxy_marshal((struct wl_proxy *) xdg_surface,
+			 XDG_SURFACE_MOVE, seat, serial);
+}
+
+static inline void
+xdg_surface_resize(struct xdg_surface *xdg_surface, struct wl_seat *seat, uint32_t serial, uint32_t edges)
+{
+	wl_proxy_marshal((struct wl_proxy *) xdg_surface,
+			 XDG_SURFACE_RESIZE, seat, serial, edges);
+}
+
+static inline void
+xdg_surface_set_output(struct xdg_surface *xdg_surface, struct wl_output *output)
+{
+	wl_proxy_marshal((struct wl_proxy *) xdg_surface,
+			 XDG_SURFACE_SET_OUTPUT, output);
+}
+
+static inline void
+xdg_surface_request_change_state(struct xdg_surface *xdg_surface, uint32_t state_type, uint32_t value, uint32_t serial)
+{
+	wl_proxy_marshal((struct wl_proxy *) xdg_surface,
+			 XDG_SURFACE_REQUEST_CHANGE_STATE, state_type, value, serial);
+}
+
+static inline void
+xdg_surface_ack_change_state(struct xdg_surface *xdg_surface, uint32_t state_type, uint32_t value, uint32_t serial)
+{
+	wl_proxy_marshal((struct wl_proxy *) xdg_surface,
+			 XDG_SURFACE_ACK_CHANGE_STATE, state_type, value, serial);
+}
+
+static inline void
+xdg_surface_set_minimized(struct xdg_surface *xdg_surface)
+{
+	wl_proxy_marshal((struct wl_proxy *) xdg_surface,
+			 XDG_SURFACE_SET_MINIMIZED);
+}
+
+/**
+ * xdg_popup - desktop-style metadata interface
+ * @popup_done: popup interaction is done
+ *
+ * An interface that may be implemented by a wl_surface, for
+ * implementations that provide a desktop-style popups/menus. A popup
+ * surface is a transient surface with an added pointer grab.
+ *
+ * An existing implicit grab will be changed to owner-events mode, and the
+ * popup grab will continue after the implicit grab ends (i.e. releasing
+ * the mouse button does not cause the popup to be unmapped).
+ *
+ * The popup grab continues until the window is destroyed or a mouse button
+ * is pressed in any other clients window. A click in any of the clients
+ * surfaces is reported as normal, however, clicks in other clients
+ * surfaces will be discarded and trigger the callback.
+ *
+ * The x and y arguments specify the locations of the upper left corner of
+ * the surface relative to the upper left corner of the parent surface, in
+ * surface local coordinates.
+ *
+ * xdg_popup surfaces are always transient for another surface.
+ */
+struct xdg_popup_listener {
+	/**
+	 * popup_done - popup interaction is done
+	 * @serial: serial of the implicit grab on the pointer
+	 *
+	 * The popup_done event is sent out when a popup grab is broken,
+	 * that is, when the users clicks a surface that doesn't belong to
+	 * the client owning the popup surface.
+	 */
+	void (*popup_done)(void *data,
+			   struct xdg_popup *xdg_popup,
+			   uint32_t serial);
+};
+
+static inline int
+xdg_popup_add_listener(struct xdg_popup *xdg_popup,
+		       const struct xdg_popup_listener *listener, void *data)
+{
+	return wl_proxy_add_listener((struct wl_proxy *) xdg_popup,
+				     (void (**)(void)) listener, data);
+}
+
+#define XDG_POPUP_DESTROY	0
+
+static inline void
+xdg_popup_set_user_data(struct xdg_popup *xdg_popup, void *user_data)
+{
+	wl_proxy_set_user_data((struct wl_proxy *) xdg_popup, user_data);
+}
+
+static inline void *
+xdg_popup_get_user_data(struct xdg_popup *xdg_popup)
+{
+	return wl_proxy_get_user_data((struct wl_proxy *) xdg_popup);
+}
+
+static inline void
+xdg_popup_destroy(struct xdg_popup *xdg_popup)
+{
+	wl_proxy_marshal((struct wl_proxy *) xdg_popup,
+			 XDG_POPUP_DESTROY);
+
+	wl_proxy_destroy((struct wl_proxy *) xdg_popup);
+}
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+++ b/wayland/shell/xdg-shell-protocol.c
@@ -0,0 +1,120 @@
+/*
+ * Copyright © 2008-2013 Kristian Høgsberg
+ * Copyright © 2013      Rafael Antognolli
+ * Copyright © 2013      Jasper St. Pierre
+ * Copyright © 2010-2013 Intel Corporation
+ *
+ * Permission to use, copy, modify, distribute, and sell this
+ * software and its documentation for any purpose is hereby granted
+ * without fee, provided that the above copyright notice appear in
+ * all copies and that both that copyright notice and this permission
+ * notice appear in supporting documentation, and that the name of
+ * the copyright holders not be used in advertising or publicity
+ * pertaining to distribution of the software without specific,
+ * written prior permission.  The copyright holders make no
+ * representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied
+ * warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+ * THIS SOFTWARE.
+ */
+
+#include <stdlib.h>
+#include <stdint.h>
+#include "wayland-util.h"
+
+extern const struct wl_interface wl_output_interface;
+extern const struct wl_interface wl_seat_interface;
+extern const struct wl_interface wl_surface_interface;
+extern const struct wl_interface xdg_popup_interface;
+extern const struct wl_interface xdg_surface_interface;
+
+static const struct wl_interface *types[] = {
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	&xdg_surface_interface,
+	&wl_surface_interface,
+	&xdg_popup_interface,
+	&wl_surface_interface,
+	&wl_surface_interface,
+	&wl_seat_interface,
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+	&wl_surface_interface,
+	&wl_seat_interface,
+	NULL,
+	&wl_seat_interface,
+	NULL,
+	NULL,
+	&wl_output_interface,
+};
+
+static const struct wl_message xdg_shell_requests[] = {
+	{ "use_unstable_version", "i", types + 0 },
+	{ "get_xdg_surface", "no", types + 4 },
+	{ "get_xdg_popup", "nooouiiu", types + 6 },
+	{ "pong", "u", types + 0 },
+};
+
+static const struct wl_message xdg_shell_events[] = {
+	{ "ping", "u", types + 0 },
+};
+
+WL_EXPORT const struct wl_interface xdg_shell_interface = {
+	"xdg_shell", 1,
+	4, xdg_shell_requests,
+	1, xdg_shell_events,
+};
+
+static const struct wl_message xdg_surface_requests[] = {
+	{ "destroy", "", types + 0 },
+	{ "set_transient_for", "?o", types + 14 },
+	{ "set_margin", "iiii", types + 0 },
+	{ "set_title", "s", types + 0 },
+	{ "set_app_id", "s", types + 0 },
+	{ "move", "ou", types + 15 },
+	{ "resize", "ouu", types + 17 },
+	{ "set_output", "?o", types + 20 },
+	{ "request_change_state", "uuu", types + 0 },
+	{ "ack_change_state", "uuu", types + 0 },
+	{ "set_minimized", "", types + 0 },
+};
+
+static const struct wl_message xdg_surface_events[] = {
+	{ "configure", "ii", types + 0 },
+	{ "change_state", "uuu", types + 0 },
+	{ "activated", "", types + 0 },
+	{ "deactivated", "", types + 0 },
+	{ "close", "", types + 0 },
+};
+
+WL_EXPORT const struct wl_interface xdg_surface_interface = {
+	"xdg_surface", 1,
+	11, xdg_surface_requests,
+	5, xdg_surface_events,
+};
+
+static const struct wl_message xdg_popup_requests[] = {
+	{ "destroy", "", types + 0 },
+};
+
+static const struct wl_message xdg_popup_events[] = {
+	{ "popup_done", "u", types + 0 },
+};
+
+WL_EXPORT const struct wl_interface xdg_popup_interface = {
+	"xdg_popup", 1,
+	1, xdg_popup_requests,
+	1, xdg_popup_events,
+};
--- /dev/null
+++ b/wayland/shell/xdg_shell_surface.cc
@@ -0,0 +1,173 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/wayland/shell/xdg_shell_surface.h"
+
+#include "base/logging.h"
+#include "base/strings/utf_string_conversions.h"
+
+#include "ozone/wayland/display.h"
+#include "ozone/wayland/input_device.h"
+#include "ozone/wayland/shell/shell.h"
+#include "ozone/wayland/shell/xdg-shell-client-protocol.h"
+
+namespace ozonewayland {
+
+XDGShellSurface::XDGShellSurface()
+    : WaylandShellSurface(),
+      xdg_surface_(NULL),
+      xdg_popup_(NULL),
+      maximized_(false),
+      minimized_(false) {
+}
+
+XDGShellSurface::~XDGShellSurface() {
+  if (xdg_surface_)
+    xdg_surface_destroy(xdg_surface_);
+  if (xdg_popup_)
+    xdg_popup_destroy(xdg_popup_);
+}
+
+void XDGShellSurface::InitializeShellSurface(WaylandWindow* window,
+                                             WaylandWindow::ShellType type) {
+  DCHECK(!xdg_surface_);
+  DCHECK(!xdg_popup_);
+  WaylandDisplay* display = WaylandDisplay::GetInstance();
+  DCHECK(display);
+  WaylandShell* shell = WaylandDisplay::GetInstance()->GetShell();
+  DCHECK(shell && shell->GetXDGShell());
+
+  if (type != WaylandWindow::POPUP) {
+    xdg_surface_ = xdg_shell_get_xdg_surface(shell->GetXDGShell(),
+                                             GetWLSurface());
+
+    static const xdg_surface_listener xdg_surface_listener = {
+      XDGShellSurface::HandleConfigure,
+      XDGShellSurface::HandleChangeState,
+      XDGShellSurface::HandleActivate,
+      XDGShellSurface::HandleDeactivate,
+      XDGShellSurface::HandleDelete
+    };
+
+    xdg_surface_add_listener(xdg_surface_,
+                             &xdg_surface_listener,
+                             window);
+
+    DCHECK(xdg_surface_);
+  }
+}
+
+void XDGShellSurface::UpdateShellSurface(WaylandWindow::ShellType type,
+                                         WaylandShellSurface* shell_parent,
+                                         unsigned x,
+                                         unsigned y) {
+  switch (type) {
+  case WaylandWindow::TOPLEVEL: {
+    if (maximized_) {
+      xdg_surface_request_change_state(xdg_surface_,
+                                       XDG_SURFACE_STATE_MAXIMIZED,
+                                       false, 0);
+      maximized_ = false;
+    }
+    break;
+  }
+  case WaylandWindow::POPUP: {
+    WaylandDisplay* display = WaylandDisplay::GetInstance();
+    WaylandInputDevice* input_device = display->PrimaryInput();
+    wl_surface* surface = GetWLSurface();
+    wl_surface* parent_surface = shell_parent->GetWLSurface();
+    xdg_popup_ = xdg_shell_get_xdg_popup(display->GetShell()->GetXDGShell(),
+                                         surface,
+                                         parent_surface,
+                                         input_device->GetInputSeat(),
+                                         display->GetSerial(),
+                                         x,
+                                         y,
+                                         0);
+    static const xdg_popup_listener xdg_popup_listener = {
+      XDGShellSurface::HandlePopupPopupDone
+    };
+    xdg_popup_add_listener(xdg_popup_,
+                           &xdg_popup_listener,
+                           NULL);
+    DCHECK(xdg_popup_);
+    break;
+  }
+  case WaylandWindow::FULLSCREEN:
+    xdg_surface_request_change_state(xdg_surface_,
+                                     XDG_SURFACE_STATE_FULLSCREEN,
+                                     true, 0);
+    break;
+  case WaylandWindow::CUSTOM:
+      NOTREACHED() << "Unsupported shell type: " << type;
+    break;
+    default:
+      break;
+  }
+
+  WaylandShellSurface::FlushDisplay();
+}
+
+void XDGShellSurface::SetWindowTitle(const base::string16& title) {
+  xdg_surface_set_title(xdg_surface_, UTF16ToUTF8(title).c_str());
+  WaylandShellSurface::FlushDisplay();
+}
+
+void XDGShellSurface::Maximize() {
+  xdg_surface_request_change_state(xdg_surface_,
+                                   XDG_SURFACE_STATE_MAXIMIZED,
+                                   true, 0);
+  maximized_ = true;
+  WaylandShellSurface::FlushDisplay();
+}
+
+void XDGShellSurface::Minimize() {
+  xdg_surface_set_minimized(xdg_surface_);
+  minimized_ = true;
+}
+
+void XDGShellSurface::Unminimize() {
+  minimized_ = false;
+}
+
+bool XDGShellSurface::IsMinimized() const {
+  return minimized_;
+}
+
+void XDGShellSurface::HandleConfigure(void* data,
+                                      struct xdg_surface* xdg_surface,
+                                      int32_t width,
+                                      int32_t height) {
+  WaylandShellSurface::WindowResized(data, width, height);
+}
+
+void XDGShellSurface::HandleChangeState(void* data,
+                                        struct xdg_surface* xdg_surface,
+                                        uint32_t state,
+                                        uint32_t value,
+                                        uint32_t serial) {
+  xdg_surface_ack_change_state(xdg_surface, state, value, serial);
+}
+
+void XDGShellSurface::HandleActivate(void* data,
+                                     struct xdg_surface* xdg_surface) {
+  WaylandShellSurface::WindowActivated(data);
+}
+
+void XDGShellSurface::HandleDeactivate(void* data,
+                                       struct xdg_surface* xdg_surface) {
+  WaylandShellSurface::WindowDeActivated(data);
+}
+
+void XDGShellSurface::HandleDelete(void* data,
+                                   struct xdg_surface* xdg_surface) {
+}
+
+void XDGShellSurface::HandlePopupPopupDone(void* data,
+                                           struct xdg_popup* xdg_popup,
+                                           uint32_t serial) {
+  WaylandShellSurface::PopupDone();
+}
+
+}  // namespace ozonewayland
--- /dev/null
+++ b/wayland/shell/xdg_shell_surface.h
@@ -0,0 +1,66 @@
+// Copyright 2014 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_WAYLAND_SHELL_XDG_SURFACE_H_
+#define OZONE_WAYLAND_SHELL_XDG_SURFACE_H_
+
+#include "ozone/wayland/shell/shell_surface.h"
+
+struct xdg_surface;
+struct xdg_popup;
+
+namespace ozonewayland {
+
+class WaylandSurface;
+class WaylandWindow;
+
+class XDGShellSurface : public WaylandShellSurface {
+ public:
+  XDGShellSurface();
+  virtual ~XDGShellSurface();
+
+  void InitializeShellSurface(WaylandWindow* window,
+                              WaylandWindow::ShellType type) override;
+  void UpdateShellSurface(WaylandWindow::ShellType type,
+                          WaylandShellSurface* shell_parent,
+                          unsigned x,
+                          unsigned y) override;
+  void SetWindowTitle(const base::string16& title) override;
+  void Maximize() override;
+  void Minimize() override;
+  void Unminimize() override;
+  bool IsMinimized() const override;
+
+  static void HandleConfigure(void* data,
+                              struct xdg_surface* xdg_surface,
+                              int32_t width,
+                              int32_t height);
+  static void HandleChangeState(void* data,
+                                struct xdg_surface* xdg_surface,
+                                uint32_t state,
+                                uint32_t value,
+                                uint32_t serial);
+  static void HandleActivate(void* data,
+                             struct xdg_surface* xdg_surface);
+  static void HandleDeactivate(void* data,
+                               struct xdg_surface* xdg_surface);
+  static void HandleDelete(void* data,
+                           struct xdg_surface* xdg_surface);
+
+  static void HandlePopupPopupDone(void* data,
+                                   struct xdg_popup* xdg_popup,
+                                   uint32_t serial);
+
+ private:
+  xdg_surface* xdg_surface_;
+  xdg_popup* xdg_popup_;
+  bool maximized_;
+  bool minimized_;
+  DISALLOW_COPY_AND_ASSIGN(XDGShellSurface);
+};
+
+
+}  // namespace ozonewayland
+
+#endif  // OZONE_WAYLAND_SHELL_XDG_SURFACE_H_
--- /dev/null
+++ b/wayland/wayland.gyp
@@ -0,0 +1,101 @@
+# Copyright 2013 The Chromium Authors. All rights reserved.
+# Copyright 2013 Intel Corporation. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{
+  'variables': {
+    'conditions': [
+      ['sysroot!=""', {
+        'pkg-config': '../../build/linux/pkg-config-wrapper "<(sysroot)" "<(target_arch)"',
+      }, {
+        'pkg-config': 'pkg-config'
+      }],
+    ],
+  },
+
+  'targets': [
+    {
+      'target_name': 'wayland_toolkit',
+      'type': 'static_library',
+      'variables': {
+        'WAYLAND_VERSION': '1.4.0',
+        'MESA_VERSION': '9.1.3',
+        'wayland_packages': [
+          'egl >= <(MESA_VERSION)',
+          'wayland-client >= <(WAYLAND_VERSION)',
+          'wayland-cursor >= <(WAYLAND_VERSION)',
+          'wayland-egl >= <(MESA_VERSION)',
+          'xkbcommon',
+        ],
+      },
+      'cflags': [
+        '<!@(<(pkg-config) --cflags <(wayland_packages))',
+      ],
+      'direct_dependent_settings': {
+        'cflags': [
+          '<!@(<(pkg-config) --cflags <(wayland_packages))',
+        ],
+      },
+      'link_settings': {
+        'ldflags': [
+          '<!@(<(pkg-config) --libs-only-L --libs-only-other <(wayland_packages))',
+        ],
+        'libraries': [
+          '<!@(<(pkg-config) --libs-only-l <(wayland_packages))',
+        ],
+      },
+      'dependencies': [
+        '../../base/base.gyp:base',
+      ],
+      'include_dirs': [
+        '../..',
+        '<(DEPTH)/third_party/khronos',
+      ],
+      'sources': [
+        'display.cc',
+        'display.h',
+        'display_poll_thread.cc',
+        'display_poll_thread.h',
+        'ozone_wayland_screen.cc',
+        'ozone_wayland_screen.h',
+        'input_device.cc',
+        'input_device.h',
+        'screen.cc',
+        'screen.h',
+        'window.cc',
+        'window.h',
+        'egl/egl_window.cc',
+        'egl/egl_window.h',
+        'egl/surface_ozone_wayland.cc',
+        'egl/surface_ozone_wayland.h',
+        'input/cursor.cc',
+        'input/cursor.h',
+        'input/keyboard.cc',
+        'input/keyboard.h',
+        'input/pointer.cc',
+        'input/pointer.h',
+        'input/text_input.h',
+        'input/text_input.cc',
+        'input/text-protocol.c',
+        'input/text-client-protocol.h',
+        'input/touchscreen.cc',
+        'input/touchscreen.h',
+        'shell/shell.cc',
+        'shell/shell.h',
+        'shell/shell_surface.h',
+        'shell/shell_surface.cc',
+        'shell/wl_shell_surface.cc',
+        'shell/wl_shell_surface.h',
+        'shell/xdg_shell_surface.cc',
+        'shell/xdg_shell_surface.h',
+        'shell/xdg-shell-protocol.c',
+        'shell/xdg-shell-client-protocol.h',
+        'shell/ivi_shell_surface.cc',
+        'shell/ivi_shell_surface.h',
+        'shell/ivi-application-protocol.c',
+        'shell/ivi-application-client-protocol.h',
+      ],
+    },
+  ]
+}
--- /dev/null
+++ b/wayland/window.cc
@@ -0,0 +1,117 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ozone/wayland/window.h"
+
+#include "base/logging.h"
+#include "ozone/wayland/display.h"
+#include "ozone/wayland/egl/egl_window.h"
+#include "ozone/wayland/input_device.h"
+#include "ozone/wayland/shell/shell.h"
+#include "ozone/wayland/shell/shell_surface.h"
+
+namespace ozonewayland {
+
+WaylandWindow::WaylandWindow(unsigned handle) : shell_surface_(NULL),
+    window_(NULL),
+    type_(None),
+    handle_(handle),
+    allocation_(gfx::Rect(0, 0, 1, 1)) {
+}
+
+WaylandWindow::~WaylandWindow() {
+  delete window_;
+  delete shell_surface_;
+}
+
+void WaylandWindow::SetShellAttributes(ShellType type) {
+  if (type_ == type)
+    return;
+
+  if (!shell_surface_) {
+    shell_surface_ =
+        WaylandDisplay::GetInstance()->GetShell()->CreateShellSurface(this,
+                                                                      type);
+  }
+
+  type_ = type;
+  shell_surface_->UpdateShellSurface(type_, NULL, 0, 0);
+}
+
+void WaylandWindow::SetShellAttributes(ShellType type,
+                                       WaylandShellSurface* shell_parent,
+                                       unsigned x,
+                                       unsigned y) {
+  DCHECK(shell_parent && (type == POPUP));
+
+  if (!shell_surface_) {
+    shell_surface_ =
+        WaylandDisplay::GetInstance()->GetShell()->CreateShellSurface(this,
+                                                                      type);
+    WaylandInputDevice* input = WaylandDisplay::GetInstance()->PrimaryInput();
+    input->SetGrabWindowHandle(handle_, 0);
+  }
+
+  type_ = type;
+  shell_surface_->UpdateShellSurface(type_, shell_parent, x, y);
+}
+
+void WaylandWindow::SetWindowTitle(const base::string16& title) {
+  shell_surface_->SetWindowTitle(title);
+}
+
+void WaylandWindow::Maximize() {
+  if (type_ != FULLSCREEN)
+    shell_surface_->Maximize();
+}
+
+void WaylandWindow::Minimize() {
+  shell_surface_->Minimize();
+}
+
+void WaylandWindow::Restore() {
+  // If window is created as fullscreen, we don't set/restore any window states
+  // like Maximize etc.
+  if (type_ != FULLSCREEN)
+    shell_surface_->UpdateShellSurface(type_, NULL, 0, 0);
+}
+
+void WaylandWindow::SetFullscreen() {
+  if (type_ != FULLSCREEN)
+    shell_surface_->UpdateShellSurface(FULLSCREEN, NULL, 0, 0);
+}
+
+void WaylandWindow::RealizeAcceleratedWidget() {
+  if (!shell_surface_) {
+    LOG(ERROR) << "Shell type not set. Setting it to TopLevel";
+    SetShellAttributes(TOPLEVEL);
+  }
+
+  if (!window_)
+    window_ = new EGLWindow(shell_surface_->GetWLSurface(),
+                            allocation_.width(),
+                            allocation_.height());
+}
+
+wl_egl_window* WaylandWindow::egl_window() const {
+  DCHECK(window_);
+  return window_->egl_window();
+}
+
+void WaylandWindow::Resize(unsigned width, unsigned height) {
+  if ((allocation_.width() == width) && (allocation_.height() == height))
+    return;
+
+  allocation_ = gfx::Rect(allocation_.x(), allocation_.y(), width, height);
+  if (!shell_surface_ || !window_)
+    return;
+
+  window_->Resize(width, height);
+  WaylandDisplay* display = WaylandDisplay::GetInstance();
+  DCHECK(display);
+  display->FlushDisplay();
+}
+
+}  // namespace ozonewayland
--- /dev/null
+++ b/wayland/window.h
@@ -0,0 +1,73 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Copyright 2013 Intel Corporation. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef OZONE_WAYLAND_WINDOW_H_
+#define OZONE_WAYLAND_WINDOW_H_
+
+#include <wayland-client.h>
+
+#include "base/strings/string16.h"
+#include "ui/gfx/rect.h"
+
+namespace ozonewayland {
+
+class WaylandShellSurface;
+class EGLWindow;
+struct wl_egl_window;
+
+typedef unsigned WaylandWindowId;
+
+class WaylandWindow {
+ public:
+  enum ShellType {
+    None,
+    TOPLEVEL,
+    FULLSCREEN,
+    POPUP,
+    CUSTOM
+  };
+
+  // Creates a window and maps it to handle.
+  explicit WaylandWindow(unsigned handle);
+  ~WaylandWindow();
+
+  void SetShellAttributes(ShellType type);
+  void SetShellAttributes(ShellType type,
+                          WaylandShellSurface* shell_parent,
+                          unsigned x,
+                          unsigned y);
+  void SetWindowTitle(const base::string16& title);
+  void Maximize();
+  void Minimize();
+  void Restore();
+  void SetFullscreen();
+
+  ShellType Type() const { return type_; }
+  unsigned Handle() const { return handle_; }
+  WaylandShellSurface* ShellSurface() const { return shell_surface_; }
+
+  void RealizeAcceleratedWidget();
+
+  // Returns pointer to egl window associated with the window.
+  // The WaylandWindow object owns the pointer.
+  wl_egl_window* egl_window() const;
+
+  // Immediately Resizes window and flushes Wayland Display.
+  void Resize(unsigned width, unsigned height);
+  gfx::Rect GetBounds() const { return allocation_; }
+
+ private:
+  WaylandShellSurface* shell_surface_;
+  EGLWindow* window_;
+
+  ShellType type_;
+  unsigned handle_;
+  gfx::Rect allocation_;
+  DISALLOW_COPY_AND_ASSIGN(WaylandWindow);
+};
+
+}  // namespace ozonewayland
+
+#endif  // OZONE_WAYLAND_WINDOW_H_
