Merge from Chromium at DEPS revision r213780

This commit was generated by merge_to_master.py.

Change-Id: I9cf93efc460166e8ae27c76302af9095b402a90e
diff --git a/chrome/VERSION b/chrome/VERSION
index e905f18..b9638e5 100644
--- a/chrome/VERSION
+++ b/chrome/VERSION
@@ -1,4 +1,4 @@
 MAJOR=30
 MINOR=0
-BUILD=1576
+BUILD=1577
 PATCH=0
diff --git a/chrome/app/breakpad_linux.cc b/chrome/app/breakpad_linux.cc
index f4b5caa..8c71bcd 100644
--- a/chrome/app/breakpad_linux.cc
+++ b/chrome/app/breakpad_linux.cc
@@ -31,7 +31,7 @@
 #include "base/platform_file.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/posix/global_descriptors.h"
-#include "base/process_util.h"
+#include "base/process/memory.h"
 #include "base/strings/string_util.h"
 #include "breakpad/src/client/linux/handler/exception_handler.h"
 #include "breakpad/src/client/linux/minidump_writer/directory_reader.h"
diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegate.cc
index 6620288..ab25e99 100644
--- a/chrome/app/chrome_main_delegate.cc
+++ b/chrome/app/chrome_main_delegate.cc
@@ -9,7 +9,8 @@
 #include "base/message_loop/message_loop.h"
 #include "base/metrics/stats_counters.h"
 #include "base/path_service.h"
-#include "base/process_util.h"
+#include "base/process/memory.h"
+#include "base/process/process_handle.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 4d19df6..a396538 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -5197,7 +5197,10 @@
         Use your microphone and camera
       </message>
       <message name="IDS_EXTENSION_PROMPT_WARNING_DOWNLOADS" desc="Permission string for access to downloads.">
-        Manage your downloads and open downloaded files
+        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_FILE_SYSTEM_WRITE" desc="Permission string for write access to the file system.">
         Write to files that you have opened in the application
diff --git a/chrome/app/nacl_fork_delegate_linux.cc b/chrome/app/nacl_fork_delegate_linux.cc
index f152498..eef9436 100644
--- a/chrome/app/nacl_fork_delegate_linux.cc
+++ b/chrome/app/nacl_fork_delegate_linux.cc
@@ -19,7 +19,7 @@
 #include "base/path_service.h"
 #include "base/posix/eintr_wrapper.h"
 #include "base/posix/unix_domain_socket_linux.h"
-#include "base/process_util.h"
+#include "base/process/launch.h"
 #include "base/third_party/dynamic_annotations/dynamic_annotations.h"
 #include "chrome/common/chrome_paths.h"
 #include "components/nacl/common/nacl_helper_linux.h"
diff --git a/chrome/app/policy/policy_templates_am.xtb b/chrome/app/policy/policy_templates_am.xtb
index aa78515..f4548e4 100644
--- a/chrome/app/policy/policy_templates_am.xtb
+++ b/chrome/app/policy/policy_templates_am.xtb
@@ -90,6 +90,11 @@
 
       ካልተዋቀረ ተጠቃሚው ይመጣለት እንደሆነ ይጠየቃል ወይም ማስመጣት በራስ-ሰር ሊከሰት ይችላል።</translation>
 <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME"/> የሚከተሉትን የይዘት አይነቶች እንዲቆጣጠር ይፍቀዱለት</translation>
+<translation id="6647965994887675196">ወደ እውነት ከተዋቀረ ክትትል የሚደረግባቸው ተጠቃሚዎች ሊፈጠሩ እና ስራ ላይ ሊውሉ ይችላሉ።
+
+          ወደ ሐሰት ከተዋቀረ ወይም ካልተዋቀረ ክትትል የሚደረግባቸው የተጠቃሚዎች መፍጠር እና መግቢያ ይሰናከላሉ። ሁሉም ነባር ክትትል የሚደረግባቸው ተጠቃሚዎች ይደበቃሉ።
+
+          ማሳሰቢያ፦ የሸማች እና የድርጅት መሣሪያዎች ነባሪ ባህሪዎች የተለያዩ ናቸው፦ ክትትል የሚደረግባቸው ተጠቃሚዎች በሸማች መሣሪያዎች ላይ በነባሪነት ይነቃሉ፣ ነገር ግን በድርጅት መሣሪያዎች ላይ በነባሪነት ይሰናከላሉ።</translation>
 <translation id="5469825884154817306">በእነዚህ ጣቢያዎች ላይ ምስሎችን አግድ</translation>
 <translation id="8412312801707973447">የመስመር ላይ OCSP/CRL ማረጋገጦች ይከናወኑ ወይም አይከናወኑ እንደሆኑ</translation>
 <translation id="6649397154027560979">ይህ መመሪያ ተቋርጧል፣ እባክዎ ይልቁንስ URLBlacklist ይጠቀሙ።
@@ -1134,6 +1139,7 @@
 
           ይህ መመሪያ እንዳልተዋቀረ ከተተወ የመግቢያ ገጹ መጀመሪያ ላይ ሲታይ ባለከፍተኛ ንፅፅር ሁነታው ይሰናከላል። ተጠቃሚዎች በማንኛውም ጊዜ ባለከፍተኛ ንፅፅር ሁነታውን ማንቃት ወይም ማሰናከል ይችላሉ፣ እና በመግቢያ ገጹ ላይ ያለው ሁኔታው በተጠቃሚዎች መካከል ቋሚ ይሆናል።</translation>
 <translation id="8580857153747395000">ከይዘት ጥቅሎች ውጪ የሆኑ ጣቢያዎች በሚጎበኙበት ጊዜ አስጠንቅቅ።</translation>
+<translation id="350796261613621561">ክትትል የሚደረግባቸው የተጠቃሚዎች መፍጠር ያንቁ።</translation>
 <translation id="602728333950205286">ነባሪ የፍለጋ አቅራቢ ቅጽበታዊ ዩ አር ኤል</translation>
 <translation id="3030000825273123558">ሜትሪክስ ሪፖርት ማድረግን ያንቁ</translation>
 <translation id="6559057113164934677">ማንኛውም ጣቢያ ካሜራውን እና ማይክሮፎኑን እንዲደርስባቸው አትፍቀድ</translation>
@@ -1159,6 +1165,9 @@
 <translation id="8864975621965365890">አንድ ጣቢያ በ<ph name="PRODUCT_FRAME_NAME"/> ተሰርቶ ሲታይ የሚመጣውን የአለመቀበል ጥያቄን ያፍናል።</translation>
 <translation id="3264793472749429012">የነባሪ ፍለጋ አቅራቢ የኮድ ግቤቶች</translation>
 <translation id="285480231336205327">የከፍተኛ ንፅፅር ሁነታን ያንቁ</translation>
+<translation id="5366977351895725771">ወደ ሐሰት ከተዋቀረ በዚህ ተጠቃሚ የሚደረጉ ክትትል የሚደረግባቸው የተጠቃሚዎች መፍጠር ይሰናከላል። ማንኛቸውም ክትትል የሚደረግባቸው ተጠቃሚዎች አሁንም የሚገኙ ይሆናሉ።
+
+          ወደ እውነት ከተዋቀረ ወይም ካልተዋቀረ ክትትል የሚደረግባቸው ተጠቃሚዎች በዚህ ተጠቃሚ ሊፈጠሩ እና ሊቀናበሩ ይችላሉ።</translation>
 <translation id="8101760444435022591">Soft-fail፣ የመስመር ላይ የስረዛ ማረጋገጫዎች ምንም ውጤታማ የሆነ የደህንነት ጥቅም የማይሰጡ ከመሆናቸው አንጻር በ<ph name="PRODUCT_NAME"/> ስሪት 19 እና ከዚያ በኋላ በሆነ ስሪት በነባሪነት ተሰናክለዋል። ይህን መምሪያ ወደ በማዋቀር ቀዳሚው ባህሪ ይመለስና የመስመር ላይ OCSP/CRL ማረጋገጦች ይከናወናሉ።
 
       መምሪያው ካልተዋቀረ ወይም ሐሰት እንዲሆን ከተዋቀረ Chrome በChrome 19 እና ከዚያ በኋላ በሆነ ስሪት የመስመር ላይ ስረዛዎችን አያከናውንም።</translation>
diff --git a/chrome/app/policy/policy_templates_ar.xtb b/chrome/app/policy/policy_templates_ar.xtb
index e8acbf9..5436436 100644
--- a/chrome/app/policy/policy_templates_ar.xtb
+++ b/chrome/app/policy/policy_templates_ar.xtb
@@ -70,6 +70,11 @@
 <translation id="3816312845600780067">تمكين اختصار لوحة المفاتيح للخروج لتسجيل الدخول تلقائيًا</translation>
 <translation id="3214164532079860003">تفرض هذه السياسة استيراد الصفحة الرئيسية من المتصفح الافتراضي الحالي إذا تم تمكينه. إذا تم تعطيلها، فلا يتم استيراد الصفحة الرئيسية. إذا لم يتم تعيينها، فقد يتم سؤال المستخدم بشأن الاستيراد أو إجراء الاستيراد تلقائيًا.</translation>
 <translation id="5330684698007383292">السماح لـ <ph name="PRODUCT_FRAME_NAME"/> بالتعامل مع أنواع المحتوى التالية</translation>
+<translation id="6647965994887675196">في حالة تعيين السياسة على القيمة true، يمكن إنشاء حسابات للمستخدمين خاضعة للإشراف واستخدامها.
+
+          في حالة تعيين السياسة على القيمة false أو عدم تهيئتها، سيتم تعطيل إنشاء حسابات المستخدمين الخاضعة للإشراف وتسجيل الدخول إليها. سيتم إخفاء كل حسابات المستخدمين الخاضعة للإشراف.
+
+          ملاحظة: طريقة العمل الافتراضية لأجهزة المستخدمين وأجهزة المؤسسات تختلف: على أجهزة المستخدمين، يتم تمكين حسابات المستخدمين الخاضعة للإشراف بشكل افتراضي ولكن يتم تعطيلها على أجهزة المؤسسات بشكل افتراضي.</translation>
 <translation id="5469825884154817306">حظر عرض الصور في هذه المواقع</translation>
 <translation id="8412312801707973447">ما إذا كانت فحوصات OCSP/CRL عبر الإنترنت يتم تنفيذها أم لا</translation>
 <translation id="6649397154027560979">هناك اعتراض على هذه السياسة، يُرجى استخدام URLBlacklist بدلاً منها.
@@ -900,6 +905,7 @@
 
           في حالة ترك هذه السياسة بدون تعيين، يتم تعطيل وضع التباين العالي عند ظهور شاشة تسجيل الدخول للمرة الأولى. ويُمكن للمستخدمين تمكين وضع التباين العالي أو تعطيله في أي وقت مع استمرار الحالة في شاشة تسجيل الدخول بين المستخدمين.</translation>
 <translation id="8580857153747395000">التحذير عند الانتقال إلى مواقع خارج حزمات المحتوى.</translation>
+<translation id="350796261613621561">تمكين إنشاء حسابات المستخدمين الخاضعة للإشراف.</translation>
 <translation id="602728333950205286">عنوان URL للبحث باستخدام مزود البحث الافتراضي</translation>
 <translation id="3030000825273123558">تمكين إعداد تقرير للمقاييس</translation>
 <translation id="6559057113164934677">عدم السماح لأي موقع بالدخول إلى الكاميرا والميكروفون</translation>
@@ -917,6 +923,9 @@
 <translation id="8864975621965365890">لإيقاف طلب التحول إلى أسفل الذي يظهر عند عرض الموقع بواسطة <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">ترميز مزود البحث الافتراضي</translation>
 <translation id="285480231336205327">تمكين وضع التباين العالي</translation>
+<translation id="5366977351895725771">في حالة تعيين السياسة على القيمة false، فسيتم تعطيل إمكانية إنشاء هذا المستخدم لحسابات المستخدمين الخاضعة للإشراف. وستظل أي حسابات مستخدمين حالية خاضعة للإشراف متاحة.
+
+          في حالة تعيين السياسة على القيمة true أو عدم تهيئتها، يمكن لهذا المستخدم إنشاء حسابات المستخدمين الخاضعة للإشراف وإدارتها.</translation>
 <translation id="8101760444435022591">في ضوء حقيقة أن الأعطال البسيطة وفحوصات الإبطال عبر الإنترنت لا توفر فائدة أمان فعالة، لذلك يتم تعطيلها افتراضيًا في <ph name="PRODUCT_NAME"/>، الإصدار 19 والإصدارات الأحدث. من خلال تعيين هذه السياسة على &quot;true&quot;، تتم استعادة السلوك السابق وسيتم تنفيذ فحوصات OCSP/CRL عبر الإنترنت.
 
       في حالة عدم تعيين هذه السياسة أو تم تعيينها على &quot;false&quot;، فلن ينفذ Chrome فحوصات الإبطال عبر الإنترنت في الإصدار 19 من Chrome والإصدارات الأحدث.</translation>
diff --git a/chrome/app/policy/policy_templates_bg.xtb b/chrome/app/policy/policy_templates_bg.xtb
index 4c78499..092d353 100644
--- a/chrome/app/policy/policy_templates_bg.xtb
+++ b/chrome/app/policy/policy_templates_bg.xtb
@@ -78,6 +78,11 @@
 <translation id="3816312845600780067">Активиране на клавишната комбинация за предотвратяване на автоматичното влизане</translation>
 <translation id="3214164532079860003">Ако е активирано, това правило импортира принудително началната страница от текущия браузър по подразбиране. В противен случай тя няма да се импортира. Ако правилото не е зададено, потребителят може да бъде попитан дали операцията да се извърши, или импортирането може да стане автоматично.</translation>
 <translation id="5330684698007383292">Разрешаване на <ph name="PRODUCT_FRAME_NAME"/> да обработва следните типове съдържание</translation>
+<translation id="6647965994887675196">При „true“ могат да се създават и използват контролирани потребители.
+
+Ако е зададено „false“ или правилото не е конфигурирано, създаването на тези потребители и влизането в профили с тях ще бъдат деактивирани. Всички съществуващи контролирани потребители ще бъдат скрити.
+
+ЗАБЕЛЕЖКА: Стандартното поведение за потребителски и корпоративни устройства се различава: по подразбиране контролираните потребители са активирани на потребителски устройства, но са деактивирани на корпоративни.</translation>
 <translation id="5469825884154817306">Блокиране на изображенията на тези сайтове</translation>
 <translation id="8412312801707973447">Дали да се изпълняват онлайн OCSP/CRL проверки</translation>
 <translation id="6649397154027560979">Това правило е оттеглено. Вместо това, моля, ползвайте URLBlacklist.
@@ -904,6 +909,7 @@
 
           Ако правилото не бъде зададено, режимът на висок контраст е деактивиран при първото показване на екрана за вход. Потребителите могат да го активират или деактивират по всяко време и състоянието му в екрана за вход се запазва между тях.</translation>
 <translation id="8580857153747395000">Предупреждение при посещаване на сайтове извън пакети със съдържание.</translation>
+<translation id="350796261613621561">Активиране на създаването на контролирани потребители.</translation>
 <translation id="602728333950205286">URL адрес за динамично търсене за търсещата машина по подразбиране</translation>
 <translation id="3030000825273123558">Активиране на съобщаването на показателите</translation>
 <translation id="6559057113164934677">Забраняване на сайтовете да осъществяват достъп до камерата и микрофона</translation>
@@ -923,6 +929,9 @@
 <translation id="8864975621965365890">Потиска подканата за отхвърляне, която се показва при изобразяване на сайт от <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Кодировки за търсещата машина по подразбиране</translation>
 <translation id="285480231336205327">Да се активира режимът на висок контраст</translation>
+<translation id="5366977351895725771">При „false“ създаването на контролирани потребители ще бъде деактивирано за този потребител. Всички съществуващи контролирани потребители пак ще са налице.
+
+Ако е зададено „true“ или правилото не е конфигурирано, съответният потребител може да създава и управлява контролирани потребители.</translation>
 <translation id="8101760444435022591">Като се има предвид, че връщащите грешка „soft-fail“ онлайн проверки за анулирани сертификати не предоставят ефективни ползи за сигурността, те са деактивирани по подразбиране в <ph name="PRODUCT_NAME"/> версия 19 и по-нови. Със задаването на „true“ за това правило предишното поведение се възстановява и онлайн OCSP/CRL проверките ще се изпълняват. Ако правилото не е зададено или е „false“, Chrome няма да изпълнява съответните проверки във версия 19 или по-нови.</translation>
 <translation id="5469484020713359236">Позволява да зададете списък с образци за URL адреси, посочващи сайтове, на които е разрешено да задават „бисквитки“. Ако това правило е оставено незададено, за всички сайтове ще се използва глобалната стандартна стойност от правилото „DefaultCookiesSetting“, ако е зададено, или в противен случай – личната конфигурация на потребителя.</translation>
 <translation id="1504431521196476721">Отдалечено удостоверяване</translation>
diff --git a/chrome/app/policy/policy_templates_bn.xtb b/chrome/app/policy/policy_templates_bn.xtb
index 9e95d54..a80a1e9 100644
--- a/chrome/app/policy/policy_templates_bn.xtb
+++ b/chrome/app/policy/policy_templates_bn.xtb
@@ -74,6 +74,12 @@
 <translation id="3816312845600780067">স্বয়ংক্রিয় লগইনের জন্য বেলআউট কীবোর্ড শর্টকাট সক্রিয় করুন</translation>
 <translation id="3214164532079860003">এই নীতিটি হোম পৃষ্ঠাটিকে বর্তমান ডিফল্ট ব্রাউজারটি সক্ষম থাকলে সেটি থেকে আমদানি করতে জোর দেয় যদি অক্ষম থাকে তবে হোম পৃষ্ঠাটি আমদানি হয় না৷ যদি এটি সেট না থাকে তবে ব্যবহারকারীকে আমদানি করতে হবে কিনা তা জিজ্ঞাসা করা হতে পারে বা স্বয়ংক্রিয়ভাবে আমদানি করা হতে পারে৷</translation>
 <translation id="5330684698007383292">নিম্নোক্ত সামগ্রী প্রকার পরিচালনা করতে <ph name="PRODUCT_FRAME_NAME"/> কে মঞ্জুরি দিন৷</translation>
+<translation id="6647965994887675196">যদি সত্যতে সেট করা থাকে, তাহলে তত্বাবধানে থাকা ব্যবহারকারী তৈরি করা এবং ব্যবহার করা যেতে পারে৷
+
+          যদি মিথ্যাতে সেট করা থাকে বা কনফিগার করা না থাকে, তাহলে তত্বাবধানে থাকা ব্যবহারকারী তৈরি করা এবং লগইন করা অক্ষম থাকবে৷ সমস্ত বিদ্যমান তত্বাবধানে থাকা ব্যবহারকারী লুক্কায়িত হবে৷
+
+          
+ দ্রষ্টব্য: উপভোক্তা এবং এন্টারপ্রাইজ ডিভাইসগুলির জন্য ডিফল্ট আচরণ পৃথক হয়: উপভোক্তার ডিভাইসগুলিতে ডিফল্ট হিসাবে তত্বাবধানে থাকা ব্যবহারকারীগুলি সক্ষমিত থাকে, কিন্তু এন্টারপ্রাইজ ডিভাইসগুলিতে সেগুলি ডিফল্ট হিসাবে অক্ষমিত থাকে৷</translation>
 <translation id="5469825884154817306">এই সাইটগুলিতে চিত্রগুলি অবরোধ করুন</translation>
 <translation id="8412312801707973447">অনলাইন OCSP / CRL পরীক্ষা  করা হয় কিনা</translation>
 <translation id="6649397154027560979">এই নীতিটি থামানো হয়েছে, দয়া করে এর পরিবর্তে URLBlacklist ব্যবহার করুন৷
@@ -1074,6 +1080,7 @@
 
           যদি এই নীতিটি সেট না করে ফেলে রাখা হয়, তাহলে যখন লগইন স্ক্রীন প্রথমে প্রদর্শিত হয় তখন উচ্চ কনট্রাস্ট মোড অক্ষম থাকে৷ ব্যবহারকারীরা যেকোনো সময়ে উচ্চ কনট্রাস্ট মোড সক্ষম বা অক্ষম করতে পারেন এবং লগইন স্ক্রীনে ব্যবহারকারীদের মধ্যে এটির স্থিতি স্থায়ী হয়৷</translation>
 <translation id="8580857153747395000">সামগ্রী প্যাকগুলির বাইরের সাইটগুলি পরিদর্শন করা সময় সর্তক করুন৷</translation>
+<translation id="350796261613621561">তত্বাবধানে থাকা ব্যবহারকারী তৈরি করা সক্ষম করুন৷</translation>
 <translation id="602728333950205286">ডিফল্ট অনুসন্ধান সরবরাহকারী তাত্ক্ষণিক URL</translation>
 <translation id="3030000825273123558">ছন্দোবিজ্ঞান প্রতিবেদন সক্ষম করুন</translation>
 <translation id="6559057113164934677">ক্যামেরা ও মাইক্রোফোনে অ্যাক্সেসের মঞ্জুরি কোনো সাইটকে দেবেন না</translation>
@@ -1099,6 +1106,9 @@
 <translation id="8864975621965365890">যখন একটি সাইট <ph name="PRODUCT_FRAME_NAME"/> এর দ্বারা রেন্ডার করা হয় তখন এতে প্রদর্শিত প্রত্যাখ্যানের বিজ্ঞপ্তিটিকে গোপন করে৷</translation>
 <translation id="3264793472749429012">ডিফল্ট অনুসন্ধান সরবরাহকারী এনকোডিংগুলি</translation>
 <translation id="285480231336205327">উচ্চ কনট্র্যাস্ট মোড সক্ষম করুন</translation>
+<translation id="5366977351895725771">যদি মিথ্যাতে সেট করা থাকে, তাহলে এই ব্যবহারকারীর দ্বারা তত্বাবধানে থাকা ব্যবহারকারী তৈরি করা অক্ষম হবে৷ যেকোনো বিদ্যমান তত্বাবধানে থাকা ব্যবহারকারী এখনো উপলব্ধ হবে৷
+
+          যদি সত্যতে সেট করা থাকে বা কনফিগার করা না থাকে, তাহলে এই ব্যবহারকারী দ্বারা তত্বাবধানে থাকা ব্যবহারকারী তৈরি এবং পরিচালিত করা যেতে পারে৷</translation>
 <translation id="8101760444435022591">সফ্ট-ফেল অনলাইন প্রত্যাহারমূলক পরীক্ষা কোন কার্যকরী নিরাপত্তা সুবিধা প্রদান করেনা, এই বিষয়ের আলোকে, তাদের <ph name="PRODUCT_NAME"/> সংস্করণ 19 এবং তার পরে ডিফল্টরূপে অক্ষম করা হয়৷ এই নীতিকে সত্য হিসাবে সেট করলে, পূর্ববর্তী আচরণ পূর্বাবস্থায় ফিরে আসে এবং অনলাইন OCSP/CRL পরীক্ষা করা হয়৷
 
       যদি নীতি সেট না করা হয় অথবা মিথ্যা হিসাবে সেট করা হয়, তাহলে Chrome Chrome-19 এবং তার পরে অনলাইন প্রত্যাহার পরীক্ষা করবে না৷</translation>
diff --git a/chrome/app/policy/policy_templates_ca.xtb b/chrome/app/policy/policy_templates_ca.xtb
index 6eb5f28..e3894b8 100644
--- a/chrome/app/policy/policy_templates_ca.xtb
+++ b/chrome/app/policy/policy_templates_ca.xtb
@@ -66,6 +66,11 @@
 <translation id="3816312845600780067">Activa les tecles de drecera d'ajuda per a l'inici automàtic</translation>
 <translation id="3214164532079860003">Si està activada, aquesta política fa que la pàgina d'inici s'importi des del navegador predeterminat actual. Si està desactivada, la pàgina d'inici no s'importarà. Si no es defineix, pot ser que es demani a l'usuari si vol importar o bé la importació es pot produir de manera automàtica.</translation>
 <translation id="5330684698007383292">Permet que <ph name="PRODUCT_FRAME_NAME"/> gestioni els tipus de contingut següents</translation>
+<translation id="6647965994887675196">Si es defineix com a vertader, es poden crear usuaris supervisats i es poden fer servir.
+
+          Si es defineix com a fals o bé no es configura, l'inici de sessió i la creació d'usuaris supervisats es desactivaran. S'amagaran tots els usuaris supervisats existents.
+
+          NOTA: el comportament predeterminat dels dispositius de consumidor i d'empresa és diferent. Als dispositius de consumidor els usuaris supervisats estan activats de manera predeterminada, mentre que als dispositius d'empresa estan desactivats per defecte.</translation>
 <translation id="5469825884154817306">Bloqueja les imatges en aquests llocs</translation>
 <translation id="8412312801707973447">Si es realitzen comprovacions OCSP/CRL en línia</translation>
 <translation id="6649397154027560979">Aquesta política està obsoleta, feu servir URLBlacklist al seu lloc-.
@@ -895,6 +900,7 @@
 
           Si no s'estableix aquesta política, el mode de contrast elevat es desactivarà quan la pantalla d'inici de sessió es mostri per primera vegada. Els usuaris poden activar o desactivar el mode de contrast elevat en qualsevol moment i el seu estat a la pantalla d'inici de sessió es mantindrà entre els usuaris.</translation>
 <translation id="8580857153747395000">Mostra un advertiment quan es visitin llocs no inclosos en paquets de contingut.</translation>
+<translation id="350796261613621561">Activa la creació d'usuaris supervisats.</translation>
 <translation id="602728333950205286">URL instantani del proveïdor de cerca predeterminat</translation>
 <translation id="3030000825273123558">Activa la creació d'informes de mètriques</translation>
 <translation id="6559057113164934677">No permetis que cap lloc accedeixi a la càmera ni al micròfon</translation>
@@ -912,6 +918,9 @@
 <translation id="8864975621965365890">Suprimeix l'avís de desactivació que apareix quan un lloc <ph name="PRODUCT_FRAME_NAME"/> renderitza un lloc.</translation>
 <translation id="3264793472749429012">Codificacions del proveïdor de cerca predeterminat</translation>
 <translation id="285480231336205327">Activa el mode de contrast elevat</translation>
+<translation id="5366977351895725771">Si es defineix com a fals, la creació d'usuaris supervisats per part d'aquest usuari es desactivarà. Els usuaris supervisats existents continuaran estant disponibles.
+
+          Si es defineix com a vertader o bé no es configura, aquest usuari pot crear i gestionar usuaris supervisats.</translation>
 <translation id="8101760444435022591">Com que les comprovacions de revocació en línia que no requereixen cap atenció no proporcionen cap benefici de seguretat eficaç, estan desactivades de manera predeterminada a la versió 19 del producte <ph name="PRODUCT_NAME"/> i posteriors. En definir aquesta política a «true» (cert), es restaurarà el comportament anterior i es realitzaran les comprovacions OCSP/CRL en línia.
 
       Si no es defineix la política o si es defineix a «false» (fals), Chrome no realitzarà cap comprovació de revocació en línia a Chrome 19 i posteriors.</translation>
diff --git a/chrome/app/policy/policy_templates_cs.xtb b/chrome/app/policy/policy_templates_cs.xtb
index 6071f84..3178ece 100644
--- a/chrome/app/policy/policy_templates_cs.xtb
+++ b/chrome/app/policy/policy_templates_cs.xtb
@@ -86,6 +86,11 @@
 
      Není-li nastavena, může se uživatelům zobrazit výzva, zda chtějí domovskou stránku importovat, nebo může import probíhat automaticky.</translation>
 <translation id="5330684698007383292">Umožnit pluginu <ph name="PRODUCT_FRAME_NAME"/> zpracovávat následující typy obsahu</translation>
+<translation id="6647965994887675196">Pokud tuto zásadu nastavíte na hodnotu true, lze vytvářet a používat uživatele pod dohledem.
+
+          Pokud tuto zásadu nenakonfigurujete nebo ji nastavíte na hodnotu false, bude vytváření a přihlašování uživatelů pod dohledem zakázáno. Všichni existující uživatelé pod dohledem budou skryti.
+
+          POZNÁMKA: Výchozí chování pro zákaznická a podniková zařízení se liší. V zákaznických zařízeních budou uživatelé pod dohledem ve výchozím nastavení aktivní, zatímco v podnikových zařízeních nikoli.</translation>
 <translation id="5469825884154817306">Blokovat obrázky na těchto stránkách</translation>
 <translation id="8412312801707973447">Zda se budou provádět online kontroly OCSP/CRL</translation>
 <translation id="6649397154027560979">Podpora této zásady byla ukončena, použijte prosím namísto ní seznam URLBlacklist.
@@ -1121,6 +1126,7 @@
 
 Pokud tuto zásadu nenastavíte, bude při prvním zobrazení obrazovky přihlášení režim vysokého kontrastu deaktivován. Uživatelé budou moci režim vysokého kontrastu kdykoli aktivovat nebo deaktivovat a zvolený stav na přihlašovací obrazovce přetrvá i u jiných uživatelů.</translation>
 <translation id="8580857153747395000">Při návštěvě webů mimo obsahové balíčky se zobrazí varování.</translation>
+<translation id="350796261613621561">Povolení vytváření uživatelů pod dohledem</translation>
 <translation id="602728333950205286">Adresa URL dynamického vyhledávání výchozího poskytovatele vyhledávání</translation>
 <translation id="3030000825273123558">Povolit hlášení o metrikách</translation>
 <translation id="6559057113164934677">Nedovolit žádnému webu používat kameru a mikrofon</translation>
@@ -1146,6 +1152,9 @@
 <translation id="8864975621965365890">Potlačuje oznámení o ukončení podpory, která se zobrazuje, když je web vykreslován pomocí pluginu <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Kódování výchozího poskytovatele vyhledávání</translation>
 <translation id="285480231336205327">Aktivovat vysoce kontrastní režim</translation>
+<translation id="5366977351895725771">Pokud tuto zásadu nastavíte na hodnotu false, vytváření a přihlašování uživatelů pod dohledem bude zakázáno. Všichni existující uživatelé pod dohledem budou stále k dispozici.
+
+          Pokud tuto zásahu nenakonfigurujete nebo ji nastavíte na hodnotu true, tento uživatel bude moci vytvářet a spravovat uživatele pod dohledem.</translation>
 <translation id="8101760444435022591">Vzhledem k tomu, že online kontroly zamítnutých certifikátů nepřinášejí žádné efektivní bezpečnostní výhody a také snadno selhávají, jsou v prohlížeči <ph name="PRODUCT_NAME"/> verze 19 a vyšší ve výchozím nastavení deaktivovány. Nastavíte-li tuto zásadu na hodnotu True, obnoví se předchozí chování a budou prováděny online kontroly OCSP/CRL.
 
       Pokud tato zásada není nastavena nebo je nastavena na hodnotu False, nebude Chrome verze 19 a vyšší provádět online kontroly zamítnutých certifikátů.</translation>
diff --git a/chrome/app/policy/policy_templates_da.xtb b/chrome/app/policy/policy_templates_da.xtb
index ba361ea..fa233b7 100644
--- a/chrome/app/policy/policy_templates_da.xtb
+++ b/chrome/app/policy/policy_templates_da.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">Aktivér nødtastaturgenvej til automatisk login</translation>
 <translation id="3214164532079860003">Denne politik tvinger import af startsiden fra den aktuelle standardbrowser, hvis den er aktiveret. Hvis den er deaktiveret, importeres startsiden ikke. Hvis den ikke er angivet, kan brugeren blive spurgt, om den skal importeres, eller også sker det automatisk.</translation>
 <translation id="5330684698007383292">Tillad, at <ph name="PRODUCT_FRAME_NAME"/> håndterer følgende indholdstyper</translation>
+<translation id="6647965994887675196">Hvis dette er angivet som sandt, kan overvågede brugere oprettes og anvendes.
+
+          Hvis dette er angivet som falsk eller ikke er konfigureret, vil oprettelse af overvågede brugere og login for sådanne brugere være deaktiveret. Alle eksisterende overvågede brugere vil blive skjult.
+
+          BEMÆRK! Forbruger- og virksomhedsenheder opfører sig som standard forskelligt. På forbrugerenheder er overvågede brugere som standard aktiveret, men på virksomhedsenheder er de som standard deaktiveret.</translation>
 <translation id="5469825884154817306">Bloker billeder på disse websites</translation>
 <translation id="8412312801707973447">Om der udføres online kontrol af OCSP/CRL</translation>
 <translation id="6649397154027560979">Denne politik er ved at blive udfaset. Brug i stedet URLBlacklist.
@@ -932,6 +937,7 @@
 
           Hvis denne politik ikke indstilles, deaktiveres høj kontrast, når loginskærmen vises første gang. Brugerne kan når som helst aktivere eller deaktivere Høj kontrast, og dens status på loginskærmen fastholdes hos brugerne.</translation>
 <translation id="8580857153747395000">Vis en advarsel, når du er på websites uden for indholdspakkerne.</translation>
+<translation id="350796261613621561">Aktivér oprettelse af overvågede brugere.</translation>
 <translation id="602728333950205286">Direkte webadresse til standardsøgemaskinen</translation>
 <translation id="3030000825273123558">Aktivér datarapportering</translation>
 <translation id="6559057113164934677">Tillad ikke, at websites får adgang til kameraet og mikrofonen</translation>
@@ -949,6 +955,9 @@
 <translation id="8864975621965365890">Undertrykker opfordringen til afvisning, som vises, når et website gengives af <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Kodninger for standardsøgemaskinen</translation>
 <translation id="285480231336205327">Aktivér høj kontrast</translation>
+<translation id="5366977351895725771">Hvis dette er angivet som falsk, vil oprettelse af overvågede brugere være deaktiveret for denne bruger. Alle eksisterende overvågede brugere vil stadig være tilgængelige.
+
+          Hvis dette er angivet som sandt eller ikke er konfigureret, kan overvågede brugere oprettes og administreres af denne bruger.</translation>
 <translation id="8101760444435022591">Set i lyset af det faktum, at soft-fail online tilbagekaldelsesundersøgelser ikke har nogen effektive sikkerhedsfordele, deaktiveres de som standard i <ph name="PRODUCT_NAME"/> version 19 eller nyere. Hvis du indstiller denne politik til sand, gendannes den forrige adfærd, og der udføres online OCSP/CRL-undersøgelser. 
 
       Hvis politikken ikke angives eller indstilles til falsk, udfører Chrome ikke online tilbagekaldelsesundersøgelser i Chrome 19 eller nyere.</translation>
diff --git a/chrome/app/policy/policy_templates_de.xtb b/chrome/app/policy/policy_templates_de.xtb
index a71f0d6..2c53b90 100644
--- a/chrome/app/policy/policy_templates_de.xtb
+++ b/chrome/app/policy/policy_templates_de.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">Tastaturkürzel zur Umgehung der automatischen Anmeldung aktivieren</translation>
 <translation id="3214164532079860003">Bei Aktivierung erzwingt diese Richtlinie, dass die Startseite vom aktuellen Standardbrowser importiert wird. Wenn sie deaktiviert ist, wird die Startseite nicht importiert. Sollte sie nicht konfiguriert sein, so wird der Nutzer gefragt, ob ein Import erfolgen soll, oder der Import findet automatisch statt.</translation>
 <translation id="5330684698007383292">Verarbeitung der folgenden Inhaltstypen durch <ph name="PRODUCT_FRAME_NAME"/> zulassen</translation>
+<translation id="6647965994887675196">Wurde &quot;true&quot; festgelegt, können betreute Nutzer erstellt und verwendet werden.
+
+          Wurde &quot;false&quot; oder &quot;not configured&quot; festgelegt, wird die Erstellung und Anmeldung betreuter Nutzer deaktiviert. Alle vorhandenen betreuten Nutzer werden ausgeblendet.
+
+          Hinweis: Das Standardverhalten bei Geräten für Kunden und bei Geräten für Unternehmen ist unterschiedlich: Bei Geräten für Kunden sind betreute Nutzer standardmäßig aktiviert, bei Geräten für Unternehmen hingegen sind sie standardmäßig deaktiviert.</translation>
 <translation id="5469825884154817306">Bilder auf diesen Websites blockieren</translation>
 <translation id="8412312801707973447">Ob online OCSP-/CRL-Prüfungen durchgeführt werden</translation>
 <translation id="6649397154027560979">Diese Richtlinie wird nicht mehr verwendet, nutzen Sie stattdessen die Richtlinie &quot;URLBlacklist&quot;.
@@ -883,6 +888,7 @@
 
           Falls diese Richtlinie nicht konfiguriert wird, ist der Modus mit hohem Kontrast deaktiviert, wenn die Anmeldeseite das erste Mal angezeigt wird. Die Nutzer können den Modus mit hohem Kontrast jederzeit aktivieren oder deaktivieren und dieser Status bleibt auf der Anmeldeseite erhalten.</translation>
 <translation id="8580857153747395000">Vor dem Besuch von Websites außerhalb von Inhaltspaketen warnen</translation>
+<translation id="350796261613621561">Erstellung von betreuten Nutzern aktivieren</translation>
 <translation id="602728333950205286">Google Instant-URL der Standardsuchmaschine</translation>
 <translation id="3030000825273123558">Messdatenberichte aktivieren</translation>
 <translation id="6559057113164934677">Keine Website darf auf meine Kamera oder mein Mikrofon zugreifen</translation>
@@ -900,6 +906,9 @@
 <translation id="8864975621965365890">Unterdrückung des Hinweises auf Einstellung des Frames, der beim Rendern einer Website durch <ph name="PRODUCT_FRAME_NAME"/> erscheint</translation>
 <translation id="3264793472749429012">Standardsuchmaschinen-Codierungen</translation>
 <translation id="285480231336205327">Modus mit hohem Kontrast aktivieren</translation>
+<translation id="5366977351895725771">Wurde &quot;false&quot; festgelegt, kann dieser Nutzer keine betreuten Nutzer erstellen. Alle vorhandenen betreuten Nutzer sind weiterhin verfügbar.
+
+          Wurde &quot;true&quot; oder &quot;not configured&quot; festgelegt, kann dieser Nutzer betreute Nutzer erstellen und verwalten.</translation>
 <translation id="8101760444435022591">Da Online-Überprüfungen zu SoftFail-Zertifikatssperren keinen wirkungsvollen Sicherheitseffekt bieten, werden sie ab <ph name="PRODUCT_NAME"/>-Version 19 standardmäßig deaktiviert. Wenn Sie diese Richtlinie auf &quot;true&quot; setzen, wird das vorherige Verhalten wiederhergestellt und es werden online OCSP-/CRL-Prüfungen durchgeführt.
 
       Falls die Richtlinie nicht konfiguriert oder auf &quot;false&quot; eingestellt ist, führt Chrome ab Version 19 keine Online-Überprüfungen auf Zertifikatssperren mehr durch.</translation>
diff --git a/chrome/app/policy/policy_templates_el.xtb b/chrome/app/policy/policy_templates_el.xtb
index f876875..bcc2b85 100644
--- a/chrome/app/policy/policy_templates_el.xtb
+++ b/chrome/app/policy/policy_templates_el.xtb
@@ -85,6 +85,11 @@
 
       Αν δεν έχει καθοριστεί, μπορεί να ζητηθεί από τον χρήστη αν θα γίνει εισαγωγή, διαφορετικά η εισαγωγή μπορεί να συμβεί αυτόματα.</translation>
 <translation id="5330684698007383292">Να επιτρέπεται στο <ph name="PRODUCT_FRAME_NAME"/> η διαχείριση των παρακάτω τύπων περιεχομένου</translation>
+<translation id="6647965994887675196">Εάν αυτή η ρύθμιση οριστεί ως αληθής, είναι δυνατή η δημιουργία και η χρήση εποπτευόμενων χρηστών.
+
+          Εάν οριστεί ψευδής ή δεν διαμορφωθεί, η δημιουργία και η σύνδεση εποπτευόμενων χρηστών θα απενεργοποιηθεί. Θα γίνει απόκρυψη όλων των υπαρχόντων εποπτευόμενων χρηστών.
+
+          ΣΗΜΕΙΩΣΗ: Η προεπιλεγμένη συμπεριφορά για συσκευές πελατών και επιχειρήσεων διαφέρει: στις συσκευές πελατών, οι εποπτευόμενοι χρήστες είναι ενεργοποιημένοι από προεπιλογή, αλλά σε συσκευές επιχειρήσεων είναι απενεργοποιημένοι από προεπιλογή.</translation>
 <translation id="5469825884154817306">Αποκλεισμός εικόνων σε αυτούς τους ιστότοπους</translation>
 <translation id="8412312801707973447">Εάν εκτελούνται οι έλεγχοι OCSP/CRL στο διαδίκτυο</translation>
 <translation id="6649397154027560979">Αυτή η πολιτική έχει καταργηθεί, χρησιμοποιήστε στη θέση της το URLBlacklist.
@@ -1113,6 +1118,7 @@
 
           Αν δεν ρυθμιστεί αυτή η πολιτική, η λειτουργία υψηλής αντίθεσης απενεργοποιείται την πρώτη φορά που εμφανίζεται η οθόνη σύνδεσης. Οι χρήστες μπορούν να ενεργοποιούν ή να απενεργοποιούν τη λειτουργία υψηλής αντίθεσης ανά πάσα στιγμή και η κατάσταση της οθόνης σύνδεσης διατηρείται από τον ένα χρήστη στον άλλο.</translation>
 <translation id="8580857153747395000">Να προειδοποιείται ο χρήστης όταν επισκέπτεται ιστότοπους εκτός των πακέτων περιεχομένου.</translation>
+<translation id="350796261613621561">Ενεργοποίηση δημιουργίας εποπτευόμενων χρηστών.</translation>
 <translation id="602728333950205286">Προεπιλεγμένη διεύθυνση URL instant παροχέα αναζήτησης</translation>
 <translation id="3030000825273123558">Ενεργοποίηση αναφοράς μετρήσεων</translation>
 <translation id="6559057113164934677">Να μην επιτρέπεται η πρόσβαση οποιουδήποτε ιστότοπου στην κάμερα και το μικρόφωνο</translation>
@@ -1138,6 +1144,9 @@
 <translation id="8864975621965365890">Αποκρύπτει τo μήνυμα απόρριψης που εμφανίζεται όταν ένας ιστότοπος αποδίδεται από το <ph name="PRODUCT_FRAME_NAME"/> .</translation>
 <translation id="3264793472749429012">Προεπιλεγμένες κωδικοποιήσεις παροχέα αναζήτησης</translation>
 <translation id="285480231336205327">Ενεργοποίηση λειτουργίας υψηλής αντίθεσης</translation>
+<translation id="5366977351895725771">Εάν οριστεί ψευδής, η δημιουργία εποπτευόμενων χρηστών από αυτόν το χρήστη θα απενεργοποιηθεί. Τυχόν υπάρχοντες εποπτευόμενοι χρήστες θα εξακολουθήσουν να είναι διαθέσιμοι.
+
+          Εάν οριστεί αληθής ή δεν διαμορφωθεί, είναι δυνατή η δημιουργία και η διαχείριση εποπτευόμενων χρηστών από αυτόν το χρήστη.</translation>
 <translation id="8101760444435022591">Υπό το πρίσμα ότι οι έλεγχοι ακύρωσης τερματισμού μη κρίσιμων διεργασιών στο διαδίκτυο δεν παρέχουν αποτελεσματικά προνόμια ασφάλειας, απενεργοποιούνται από προεπιλογή στην έκδοση 19 του <ph name="PRODUCT_NAME"/> και σε νεότερες εκδόσεις. Με τη ρύθμιση αυτής της πολιτικής ως αληθούς, γίνεται επαναφορά της προηγούμενης συμπεριφοράς και εκτελούνται οι έλεγχοι OCSP/CRL στο διαδίκτυο.
 
       Εάν η πολιτική δεν έχει οριστεί ή έχει οριστεί ως ψευδής, το Chrome δεν θα εκτελέσει ελέγχους ακύρωσης στο διαδίκτυο στο Chrome 19 και σε νεότερες εκδόσεις.</translation>
diff --git a/chrome/app/policy/policy_templates_en-GB.xtb b/chrome/app/policy/policy_templates_en-GB.xtb
index cd674bc..dc24e08 100644
--- a/chrome/app/policy/policy_templates_en-GB.xtb
+++ b/chrome/app/policy/policy_templates_en-GB.xtb
@@ -90,6 +90,11 @@
 
       If it is not set, the user may be asked whether to import or importing may happen automatically.</translation>
 <translation id="5330684698007383292">Allow <ph name="PRODUCT_FRAME_NAME"/> to handle the following content types</translation>
+<translation id="6647965994887675196">If set to true, supervised users can be created and used.
+
+          If set to false or not configured, supervised-user creation and login will be disabled. All existing supervised users will be hidden.
+
+          NOTE: The default behaviour for consumer and enterprise devices differs: on consumer devices, supervised users are enabled by default, but on enterprise devices they are disabled by default.</translation>
 <translation id="5469825884154817306">Block images on these sites</translation>
 <translation id="8412312801707973447">Whether online OCSP/CRL checks are performed</translation>
 <translation id="6649397154027560979">This policy is deprecated, please use URLBlacklist instead.
@@ -1129,6 +1134,7 @@
 
           If this policy is left unset, high contrast mode is disabled when the login screen is first shown. Users can enable or disable high contrast mode at any time and its status on the login screen is persisted between users.</translation>
 <translation id="8580857153747395000">Warn when visiting sites outside of content packs.</translation>
+<translation id="350796261613621561">Enable creation of supervised users.</translation>
 <translation id="602728333950205286">Default search provider instant URL</translation>
 <translation id="3030000825273123558">Enable metrics reporting</translation>
 <translation id="6559057113164934677">Do not allow any site to access the camera and microphone</translation>
@@ -1154,6 +1160,9 @@
 <translation id="8864975621965365890">Suppresses the turn-down prompt that appears when a site is rendered by <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Default search provider encodings</translation>
 <translation id="285480231336205327">Enable high contrast mode</translation>
+<translation id="5366977351895725771">If set to false, supervised-user creation by this user will be disabled. Any existing supervised users will still be available.
+
+          If set to true or not configured, supervised users can be created and managed by this user.</translation>
 <translation id="8101760444435022591">In light of the fact that soft-fail online revocation checks provide no effective security benefit, they are disabled by default in <ph name="PRODUCT_NAME"/> version 19 and later. By setting this policy to true, the previous behaviour is restored and online OCSP/CRL checks will be performed.
 
       If the policy is not set, or is set to false, then Chrome will not perform online revocation checks in Chrome 19 and later.</translation>
diff --git a/chrome/app/policy/policy_templates_es-419.xtb b/chrome/app/policy/policy_templates_es-419.xtb
index 1e98d0c..726a738 100644
--- a/chrome/app/policy/policy_templates_es-419.xtb
+++ b/chrome/app/policy/policy_templates_es-419.xtb
@@ -72,6 +72,11 @@
 <translation id="3816312845600780067">Habilitar combinación de teclas para acceso directo de rescate para el acceso automático</translation>
 <translation id="3214164532079860003">Esta política, si se habilita, fuerza la importación de la página principal del navegador predeterminado actual. Si la política se inhabilita, la página principal no se importará. Si no se configura esta opción, se le puede preguntar al usuario si desea importar la página principal o la importación puede realizarse de forma automática.</translation>
 <translation id="5330684698007383292">Permitir que <ph name="PRODUCT_FRAME_NAME"/> gestione los siguientes tipos de contenido</translation>
+<translation id="6647965994887675196">Si está configurada en verdadero, pueden crearse y utilizarse usuarios supervisados.
+
+          Si está configurada en falso o si no está configurada, la creación y el acceso de usuarios supervisados estarán inhabilitados. Todos los usuarios supervisados existentes estarán ocultos.
+
+          NOTA: El comportamiento predeterminado en dispositivos para consumidores y empresas difiere: en los dispositivos para consumidores, los usuarios supervisados están habilitados de forma predeterminada; en cambio, en los dispositivos para empresas, los usuarios supervisados están inhabilitados de forma predeterminada.</translation>
 <translation id="5469825884154817306">Bloquear imágenes en estos sitios</translation>
 <translation id="8412312801707973447">Se realizan comprobaciones OCSP/CRL si estás conectado.</translation>
 <translation id="6649397154027560979">Esta política dejó de estar disponible. Utiliza URLBlacklist en su lugar.
@@ -884,6 +889,7 @@
 
           Si no se establece esta política, el modo de contraste alto se inhabilitará la primera vez que se muestre la pantalla de acceso. Los usuarios pueden habilitar o inhabilitar el modo de contraste alto en cualquier momento, y su estado en la pantalla de acceso permanece entre usuarios.</translation>
 <translation id="8580857153747395000">Advertir cuando se visitan sitios fuera de los paquetes de contenido</translation>
+<translation id="350796261613621561">Habilita la creación de usuarios supervisados.</translation>
 <translation id="602728333950205286">URL instantánea del proveedor de búsqueda predeterminado</translation>
 <translation id="3030000825273123558">Activar los informes estadísticos</translation>
 <translation id="6559057113164934677">No permitir que ningún sitio acceda a la cámara ni al micrófono</translation>
@@ -901,6 +907,9 @@
 <translation id="8864975621965365890">Elimina el mensaje de desactivación que aparece cuando <ph name="PRODUCT_FRAME_NAME"/> muestra un sitio.</translation>
 <translation id="3264793472749429012">Codificación del proveedor de búsqueda predeterminado</translation>
 <translation id="285480231336205327">Habilitar el modo de contraste alto</translation>
+<translation id="5366977351895725771">Si está configurada en falso, la creación de usuarios supervisados por este usuario estará inhabilitada. Los usuarios supervisados existentes seguirán estando disponibles.
+
+          Si está configurada en verdadero o si no está configurada, este usuario podrá crear y administrar usuarios supervisados.</translation>
 <translation id="8101760444435022591">Teniendo en cuenta que las comprobaciones de revocación en línea de fallos leves no proporcionan ventajas de seguridad efectivas, se desactivan de forma predeterminada en la versión 19 y posteriores de <ph name="PRODUCT_NAME"/>. Al establecer el valor de esta política en &quot;true&quot;, se restaura el comportamiento anterior y se realizan comprobaciones OCSP/CRL en línea.
 
       Si no se establece esta política, o si se establece el valor &quot;false&quot;, Chrome no realizará comprobaciones de revocación en línea en Chrome 19 y versiones posteriores.</translation>
diff --git a/chrome/app/policy/policy_templates_es.xtb b/chrome/app/policy/policy_templates_es.xtb
index beac3b7..7bcd6cd 100644
--- a/chrome/app/policy/policy_templates_es.xtb
+++ b/chrome/app/policy/policy_templates_es.xtb
@@ -87,6 +87,11 @@
 
       Si no se establece, es posible que se le pida al usuario que haga la importación o que la página de inicio se importe automáticamente.</translation>
 <translation id="5330684698007383292">Permitir que <ph name="PRODUCT_FRAME_NAME"/> procese los tipos de contenido que se indican a continuación</translation>
+<translation id="6647965994887675196">Si se establece el valor &quot;true&quot;, se permitirá la creación y el uso de usuarios supervisados.
+
+          Si se establece el valor &quot;false&quot; o no se configura la política, se inhabilitarán el inicio de sesión y la creación de usuarios supervisados y se ocultarán todos los usuarios supervisados creados anteriormente.
+
+          NOTA: El comportamiento predeterminado es diferente según el dispositivo: en los dispositivos de clientes particulares, los usuarios supervisados están habilitados de forma predeterminada, mientras que en los dispositivos de empresa, están inhabilitados de forma predeterminada.</translation>
 <translation id="5469825884154817306">Bloquear imágenes de estos sitios</translation>
 <translation id="8412312801707973447">Se realizan comprobaciones OCSP/CRL si estás online</translation>
 <translation id="6649397154027560979">Esta política está obsoleta, utiliza URLBlacklist en su lugar.
@@ -1131,6 +1136,7 @@
 
           Si no se establece esta política, el modo de contraste alto se inhabilitará la primera vez que se muestre la pantalla de inicio de sesión. Los usuarios pueden habilitar o inhabilitar el modo de contraste alto en cualquier momento, y su estado en la pantalla de inicio de sesión permanece entre usuarios.</translation>
 <translation id="8580857153747395000">Advertir cuando se visitan sitios no incluidos en paquetes de contenido.</translation>
+<translation id="350796261613621561">Habilitar la creación de usuarios supervisados</translation>
 <translation id="602728333950205286">URL de función Instant del proveedor de búsquedas predeterminadas</translation>
 <translation id="3030000825273123558">Habilitar los informes estadísticos</translation>
 <translation id="6559057113164934677">No permitir que ningún sitio acceda a la cámara y al micrófono</translation>
@@ -1156,6 +1162,9 @@
 <translation id="8864975621965365890">Elimina el mensaje de desactivación que aparece cuando <ph name="PRODUCT_FRAME_NAME"/> muestra un sitio.</translation>
 <translation id="3264793472749429012">Codificaciones del proveedor de búsquedas predeterminadas</translation>
 <translation id="285480231336205327">Habilitar modo de contraste alto</translation>
+<translation id="5366977351895725771">Si se establece el valor &quot;false&quot;, el usuario no podrá crear usuarios supervisados, pero seguirán estando disponibles los usuarios supervisados creados anteriormente.
+
+          Si se establece el valor &quot;true&quot; o no se configura la política, el usuario podrá crear y administrar usuarios supervisados.</translation>
 <translation id="8101760444435022591">Teniendo en cuenta el hecho de que las comprobaciones de revocación online de fallos leves no proporcionan ventajas de seguridad efectivas, se inhabilitan de forma predeterminada en la versión 19 y posteriores de <ph name="PRODUCT_NAME"/>. Al establecer el valor correspondiente a esta política en &quot;true&quot;, se restaura el comportamiento anterior y se realizan comprobaciones OCSP/CRL online.
 
       Si no se establece esta política, o si se establece el valor &quot;false&quot;, Chrome no realizará comprobaciones de revocación online en Chrome 19 y versiones posteriores.</translation>
diff --git a/chrome/app/policy/policy_templates_et.xtb b/chrome/app/policy/policy_templates_et.xtb
index a1f8568..c08257e 100644
--- a/chrome/app/policy/policy_templates_et.xtb
+++ b/chrome/app/policy/policy_templates_et.xtb
@@ -82,6 +82,11 @@
 <translation id="3816312845600780067">Pääsu klaviatuuri otsetee lubamine automaatseks sisselogimiseks</translation>
 <translation id="3214164532079860003">Kui see reegel on lubatud, siis imporditakse avaleht praegusest vaikebrauserist. Kui reegel on keelatud, siis avalehte ei impordita. Kui reegel ei ole määratud, siis võidakse avaleht automaatselt importida või kasutajalt küsida, kas ta soovib selle importida.</translation>
 <translation id="5330684698007383292">Pistikprogrammil <ph name="PRODUCT_FRAME_NAME"/> järgmiste sisutüüpide töötlemise lubamine</translation>
+<translation id="6647965994887675196">Kui väärtuseks on seatud valik Tõene, saab luua ja kasutada järelevalvega kasutajaid.
+
+          Kui väärtuseks on seatud valik Väär või Seadistamata, siis on järelevalvega kasutajate loomine ja sisselogimine keelatud. Kõik olemasolevad järelevalvega kasutajad peidetakse.
+
+          MÄRKUS. Tavatarbijatele ja ettevõtetele mõeldud seadmete vaikekäitumine on erinev: tarbijate seadmetes on järelevalvega kasutajad vaikimisi lubatud, kuid ettevõtete seadmetes vaikimisi keelatud.</translation>
 <translation id="5469825884154817306">Blokeeri kujutised nendel saitidel</translation>
 <translation id="8412312801707973447">Kontrolli võrgus OCSP-d/CRL-i</translation>
 <translation id="6649397154027560979">Selle reegli tugi on katkestatud, kasutage selle asemel üksust URLBlacklist.
@@ -1101,6 +1106,7 @@
 
          Kui jätate reegli määramata, on suure kontrastsusega režiim algselt keelatud. Kasutaja võib suure kontrastsusega režiimi igal ajal lubada või keelata ja selle olek jääb sisselogimisekraanil kasutajati püsivaks.</translation>
 <translation id="8580857153747395000">Hoiata sisupakettidest väljaspool olevate saitide külastamisel.</translation>
+<translation id="350796261613621561">Järelevalvega kasutajate loomise lubamine.</translation>
 <translation id="602728333950205286">Vaikeotsingupakkuja Instant-URL</translation>
 <translation id="3030000825273123558">Luba mõõdikute aruandlus</translation>
 <translation id="6559057113164934677">Keela kõikidel saitidel juurdepääs kaamerale ja mikrofonile</translation>
@@ -1126,6 +1132,9 @@
 <translation id="8864975621965365890">Keelab tagasilükkamisviiba, mis kuvatakse, kui saiti renderdab <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Vaikeotsingupakkuja kodeeringud</translation>
 <translation id="285480231336205327">Luba kõrge kontrastiga režiim</translation>
+<translation id="5366977351895725771">Kui väärtuseks on seatud valik Väär, siis keelatakse sellel kasutajal järelevalvega kasutajate loomine. Kõik olemasolevad järelevalvega kasutajad on ikka saadaval.
+
+          Kui väärtuseks on seatud valik Tõene või Seadistamata, saab see kasutaja luua ja hallata järelevalvega kasutajaid.</translation>
 <translation id="8101760444435022591">Osalise nurjumise puhul ei suurenda tagasivõtmise kontrollimine turvalisust, mistõttu on kontrollimine vaikimisi rakenduse <ph name="PRODUCT_NAME"/> 19. ja hilisemates versioonides vaikimisi keelatud. Selle reegli lubamisel taastatakse varasem käitumine ja võrgus ei kontrollita OCSP-d/CRL-i.
 
       Kui jätate selle reegli määramata või keelate selle, siis ei kontrolli Chrome 19. ja hilisemates versioonides võrgus tagasivõtmist.</translation>
diff --git a/chrome/app/policy/policy_templates_fa.xtb b/chrome/app/policy/policy_templates_fa.xtb
index 46771ff..7f65b53 100644
--- a/chrome/app/policy/policy_templates_fa.xtb
+++ b/chrome/app/policy/policy_templates_fa.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">به کار انداختن میانبر آزاد صفحه‌کلید برای ورود خودکار به سیستم</translation>
 <translation id="3214164532079860003">این قانون در صورت فعال بودن، صفحهٔ اصلی را وادار می‌کند تا از مرورگر پیش‌فرض کنونی وارد شود. در صورت غیرفعال بودن، صفحهٔ اصلی دریافت نمی‌شود. اگر تنظیم نشود، ممکن است از کاربر در مورد وارد کردن سؤال شود یا به طور خودکار وارد شود.</translation>
 <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME"/> بتواند با انواع محتوای زیر کار کند</translation>
+<translation id="6647965994887675196">اگر روی صحیح تنظیم شده باشد، امکان ایجاد کاربر نظارت‌شده و استفاده از آن وجود دارد.
+
+       اگر روی غلط تنظیم شده باشد یا پیکربندی نشده باشد، ایجاد کاربر نظارت‌شده و ورود به سیستم آن از کار می‌افتد. تمام کاربران نظارت‌شده موجود مخفی خواهند شد.
+
+      نکته: رفتار پیش‌فرض دستگاه‌های مصرف‌کننده و دستگاه‌های سازمانی فرق می‌کند: در دستگاه‌های مصرف‌کننده کاربران نظارت‌شده به طور پیش‌فرض به کار انداخته می‌شوند اما در دستگاه‌های سازمانی به طور پیش‌فرض از کار انداخته می‌شوند.</translation>
 <translation id="5469825884154817306">مسدود کردن تصاویر در این سایت‌ها</translation>
 <translation id="8412312801707973447">آیا بررسی‌های OCSP/CRL آنلاین اجرا شود</translation>
 <translation id="6649397154027560979">این خط‌مشی منسوخ شده است، لطفاً به جای آن از فهرست سیاه نشانی اینترنتی استفاده کنید.
@@ -883,6 +888,7 @@
 
    چنانچه این خط‌مشی بدون تنظیم رها شده باشد، با نمایش صفحه ورود به سیستم، حالت کنتراست بالا از کار انداخته می‌شود. کاربران می‌توانند در هر زمان که بخواهند حالت کنتراست بالا را به کار انداخته یا از کار بیاندازند و این وضعیت در صفحه ورود به سیستم در بین کاربران دائمی خواهد بود.</translation>
 <translation id="8580857153747395000">اخطار در هنگام بازدید از سایت‌های خارج از بسته محتوا.</translation>
+<translation id="350796261613621561">ایجاد کاربران نظارت‌شده را به کار بیاندازید.</translation>
 <translation id="602728333950205286">URL جستجوی آنی برای ارائه دهنده جستجوی پیش‌فرض</translation>
 <translation id="3030000825273123558">گزارش معیارها فعال شود</translation>
 <translation id="6559057113164934677">به هر سایتی اجازه داده نشود به دوربین و میکروفون من دسترسی داشته باشد</translation>
@@ -900,6 +906,9 @@
 <translation id="8864975621965365890">درخواست برگرداندن را که هنگام اجرای سایت توسط <ph name="PRODUCT_FRAME_NAME"/> تولید می‌شود، متوقف می‌کند.</translation>
 <translation id="3264793472749429012">رمزگذاری های ارائه دهنده جستجوی پیش‌فرض</translation>
 <translation id="285480231336205327">فعال کردن حالت کنتراست بالا</translation>
+<translation id="5366977351895725771">اگر روی غلط تنظیم شده باشد، ایجاد کاربر نظارت‌شده توسط این کاربر از کار خواهد افتاد. کاربران نظارت‌شدهٔ موجود همچنان در دسترس خواهند بود.
+
+          اگر روی صحیح تنظیم شده باشد یا پیکربندی نشده باشد، این کاربر می‌تواند کاربران نظارت‌شده ایجاد کند و مدیریت نماید.</translation>
 <translation id="8101760444435022591">نظر به اینکه بررسی‌های لغو آنلاین، خرابی تدریجی هیچ مزیت امنیتی مؤثری را در بر ندارد، این ویژگی‌ها به صورت پیش‌فرض در نسخه 9 <ph name="PRODUCT_NAME"/> و بالاتر غیرفعال شدند. با تنظیم این خط مشی روی درست، رفتار قبلی بازیابی می‌شود و بررسی‌های OCSP/CRL آنلاین اجرا می‌شود.
 
      در صورتی که خط مشی تنظیم نشود، یا روی نادرست تنظیم شود، Chrome بررسی‌های لغو آنلاین را در Chrome 19 یا بالاتر انجام نمی‌دهد.
diff --git a/chrome/app/policy/policy_templates_fi.xtb b/chrome/app/policy/policy_templates_fi.xtb
index 5c0fbf1..0c5dd09 100644
--- a/chrome/app/policy/policy_templates_fi.xtb
+++ b/chrome/app/policy/policy_templates_fi.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">Salli automaattisen kirjautumisen peruutusnäppäin</translation>
 <translation id="3214164532079860003">Tämä käytäntö (sen ollessa käytössä) pakottaa etusivun tuomisen nykyisestä oletusselaimesta. Jos käytäntö ei ole käytössä, etusivua ei tuoda. Jos käytäntöä ei ole määritetty, käyttäjältä voidaan kysyä, haluaako hän tuoda etusivun, tai sivu voidaan tuoda automaattisesti.</translation>
 <translation id="5330684698007383292">Anna tuotteen <ph name="PRODUCT_FRAME_NAME"/> käsitellä seuraavia sisältötyyppejä</translation>
+<translation id="6647965994887675196">Jos asetuksen arvo on tosi, valvottuja käyttäjiä voi luoda ja käyttää.
+
+          Jos asetuksen arvo on epätosi tai sitä ei ole määritetty, valvottujen käyttäjien luominen ja kirjautuminen ei ole käytössä. Kaikki olemassa olevat valvotut käyttäjät piilotetaan.
+
+          HUOMAA: kuluttajien ja yrityskäyttöön tarkoitettujen laitteiden oletuskäytös eroaa toisistaan: kuluttajien laitteilla valvotut käyttäjät ovat käytössä oletuksena, kun taas yrityslaitteilla ne ovat oletuksena pois käytöstä.</translation>
 <translation id="5469825884154817306">Estä kuvat näissä sivustoissa</translation>
 <translation id="8412312801707973447">OCSP-/CRL-tarkistusten suorittaminen</translation>
 <translation id="6649397154027560979">Tämä käytäntö ei ole enää käytössä, käytä URLBlacklist-käytäntöä sen sijaan.
@@ -884,6 +889,7 @@
 
           Jos tätä käytäntöä ei määritetä, suuri kontrasti -tila ei ole käytössä kirjautumisnäytön ensimmäisellä näyttökerralla. Käyttäjät voivat ottaa suuri kontrasti -tilan käyttöön tai pois käytöstä milloin tahansa, ja sen tila kirjautumisnäytössä pysyy samana, vaikka käyttäjä vaihtuisi.</translation>
 <translation id="8580857153747395000">Varoita, kun sisältöpaketteihin kuulumaton sivusto avataan.</translation>
+<translation id="350796261613621561">Ota valvottujen käyttäjien luominen käyttöön.</translation>
 <translation id="602728333950205286">Oletushakupalvelun Instant-URL-osoite</translation>
 <translation id="3030000825273123558">Ota tilastoraportit käyttöön</translation>
 <translation id="6559057113164934677">Älä anna minkään sivuston käyttää kameraa ja mikrofonia</translation>
@@ -901,6 +907,9 @@
 <translation id="8864975621965365890">Torjuu hylkäyskehotuksen, joka tulee näkyviin, kun sivu on hahmonnettu tuotteella <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Oletushakupalvelun merkkijärjestelmät</translation>
 <translation id="285480231336205327">Ota suuri kontrasti -tila käyttöön</translation>
+<translation id="5366977351895725771">Jos asetuksen arvo on epätosi, tämä käyttäjä ei voi luoda valvottuja käyttäjiä. Kaikki aiemmin luodut valvotut käyttäjät ovat kuitenkin käytettävissä.
+
+          Jos asetuksen arvo on tosi tai sitä ei ole määritetty, tämä käyttäjä voi luoda ja hallinnoida valvottuja käyttäjiä.</translation>
 <translation id="8101760444435022591">OCSP- ja CRL-tarkistukset eivät tarjoa merkittävää suojaushyötyä, joten ne ovat oletuksena poissa käytöstä tuotteen <ph name="PRODUCT_NAME"/> versiosta 19 lähtien. Jos tälle käytännölle asetetaan tosi-arvo, aikaisempi toiminnallisuus palautetaan ja OCSP- ja CRL-tarkistukset suoritetaan.
 
       Jos tätä käytäntöä ei aseteta tai jos sille asetetaan epätosi-arvo, Chromen versiossa 19 ja myöhemmissä ei suoriteta näitä tarkistuksia.</translation>
diff --git a/chrome/app/policy/policy_templates_fil.xtb b/chrome/app/policy/policy_templates_fil.xtb
index 75210d8..0330dfc 100644
--- a/chrome/app/policy/policy_templates_fil.xtb
+++ b/chrome/app/policy/policy_templates_fil.xtb
@@ -86,6 +86,11 @@
 
       Kung hindi ito nakatakda, maaaring tanungin sa user kung mag-i-import o hindi, o maaaring awtomatikong mangyari ang pag-import.</translation>
 <translation id="5330684698007383292">Payagan ang <ph name="PRODUCT_FRAME_NAME"/> na pangasiwaan ang mga sumusunod na uri ng nilalaman</translation>
+<translation id="6647965994887675196">Kung nakatakda sa true, maaaring gumawa at gumamit ng mga pinapangasiwaang user.
+
+          Kung nakatakda sa false o hindi naka-configure, idi-disable ang paggawa at pag-log in ng pinapangasiwaang user. Itatago ang lahat ng umiiral na pinapangasiwaang user.
+
+          TANDAAN: Magkaiba ang default na pagkilos ng mga device ng consumer at enterprise device: sa mga device ng consumer, naka-enable ang mga pinapangasiwaang user bilang default, ngunit sa mga enterprise device, naka-disable sila bilang default.</translation>
 <translation id="5469825884154817306">I-block ang mga larawan sa mga site na ito</translation>
 <translation id="8412312801707973447">Kung isinasagawa ang mga online na pagsusuri sa OCSP/CRL</translation>
 <translation id="6649397154027560979">Hindi na ginagamit ang patakarang ito, sa halip mangyaring gamitin ang URLBlacklist.
@@ -1111,6 +1116,7 @@
 
           Kung hahayaang hindi nakatakda ang patakarang ito, naka-disable ang high contrast mode kapag unang ipinakita ang screen sa pag-login. Maaaring i-enable o i-disable ng mga user ang high contrast mode anumang oras at mananatili ang katayuan nito sa screen sa pag-login sa pagitan ng mga user.</translation>
 <translation id="8580857153747395000">Magbabala kapag bumibisita sa mga site sa labas ng mga pack ng nilalaman.</translation>
+<translation id="350796261613621561">I-enable ang paggawa ng mga pinapangasiwaang user.</translation>
 <translation id="602728333950205286">Instant na URL ng default na provider ng paghahanap</translation>
 <translation id="3030000825273123558">Paganahin ang pag-uulat ng mga sukatan</translation>
 <translation id="6559057113164934677">Huwag payagan ang anumang site na i-access ang camera at mikropono</translation>
@@ -1136,6 +1142,9 @@
 <translation id="8864975621965365890">Pinipigilan ang turndown na prompt na lumilitaw kapag na-render ang isang site ng <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Mga pag-encode ng default na provider ng paghahanap</translation>
 <translation id="285480231336205327">Paganahin ang mataas na contrast mode</translation>
+<translation id="5366977351895725771">Kung nakatakda sa false, idi-disable ang paggawa ng pinapangasiwaang user para sa user na ito. Magiging available pa rin ang sinumang mga umiiral na pinapangasiwaang user.
+
+          Kung nakatakda sa true o hindi naka-configure, maaaring gumawa at mamahala ng mga pinapangasiwaang user ang user na ito.</translation>
 <translation id="8101760444435022591">Dahil walang mabisang pakinabang sa seguridad ang hindi pa pinal at mga pagsusuri sa pagbawi sa online, hindi pinapagana ang mga iyon bilang default sa  bersyon 19 at mas bago ng <ph name="PRODUCT_NAME"/>. Sa pamamagitan ng pagtatakda sa patakarang ito sa true, ipapanumbalik ang nakaraang paggalaw at isasagawa ang mga online na pagsusuri ng OCSP/CRL.
 
       Kung hindi nakatakda ang patakarang ito, o kung nakatakda ito sa false, hindi magsasagawa ng mga pagsusuri sa pagbawi sa online ang Chrome sa Chrome 19 at mas mabago.</translation>
diff --git a/chrome/app/policy/policy_templates_fr.xtb b/chrome/app/policy/policy_templates_fr.xtb
index f4e02f6..73a610b 100644
--- a/chrome/app/policy/policy_templates_fr.xtb
+++ b/chrome/app/policy/policy_templates_fr.xtb
@@ -90,6 +90,11 @@
 
 Si elle n'est pas configurée, l'utilisateur peut être invité à effectuer l'importation, ou celle-ci peut se faire automatiquement.</translation>
 <translation id="5330684698007383292">Autoriser <ph name="PRODUCT_FRAME_NAME"/> à gérer les types de contenu suivants</translation>
+<translation id="6647965994887675196">Si cette règle est associée à la valeur &quot;true&quot;, vous pouvez créer et utiliser des comptes utilisateur supervisés.
+
+          Si elle est associée à la valeur &quot;false&quot; ou si elle n'est pas configurée, la création et la connexion des comptes utilisateur supervisés sont désactivées. Tous les utilisateurs supervisés existants sont alors masqués.
+
+          REMARQUE : Le comportement par défaut des appareils grand public diffère de celui des appareils professionnels : sur les appareils grand public, les comptes utilisateur supervisés sont autorisés par défaut, contrairement aux appareils professionnels.</translation>
 <translation id="5469825884154817306">Bloquer les images sur ces sites</translation>
 <translation id="8412312801707973447">Si des contrôles OCSP/CRL en ligne sont effectués</translation>
 <translation id="6649397154027560979">Cette règle a été abandonnée. Veuillez utiliser URLBlacklist à la place.
@@ -1123,6 +1128,7 @@
 
           Si vous ne définissez pas cette règle, le mode Contraste élevé est désactivé au premier affichage de l'écran de connexion. Les utilisateurs peuvent l'activer ou le désactiver à tout moment, et son état sur l'écran de connexion est appliqué à tous les utilisateurs.</translation>
 <translation id="8580857153747395000">Prévenir lors de la consultation de sites en dehors des packs de contenu</translation>
+<translation id="350796261613621561">Autoriser la création de comptes utilisateur supervisés</translation>
 <translation id="602728333950205286">URL de recherche instantanée du moteur de recherche par défaut</translation>
 <translation id="3030000825273123558">Activer la génération de rapports sur les statistiques</translation>
 <translation id="6559057113164934677">Interdire à tous les sites d'accéder à la caméra et au microphone</translation>
@@ -1148,6 +1154,9 @@
 <translation id="8864975621965365890">Supprime l'invite de fermeture qui s'affiche lors du rendu d'un site par <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Codages du moteur de recherche par défaut</translation>
 <translation id="285480231336205327">Activer le mode Contraste élevé</translation>
+<translation id="5366977351895725771">Si cette règle est associée à la valeur &quot;false&quot;, la création de comptes utilisateur supervisés par cet utilisateur est désactivée. Les utilisateurs supervisés existants restent disponibles.
+
+          Si elle est associée à la valeur &quot;true&quot; ou si elle n'est pas configurée, cet utilisateur peut créer et gérer des comptes utilisateur supervisés.</translation>
 <translation id="8101760444435022591">Étant donné que les contrôles de révocation en ligne, parfois sujets à erreur, ne présentent aucun avantage concret en termes de sécurité, ils sont désactivés par défaut dans les versions 19 et ultérieures de <ph name="PRODUCT_NAME"/>. L'activation de cette règle restaure le comportement précédent. Des contrôles OCSP/CRL sont alors effectués.
 
        Si cette règle n'est pas définie ou si elle est définie sur &quot;false&quot;, Google Chrome n'effectue aucun contrôle de révocation en ligne dans les versions 19 et ultérieures.</translation>
diff --git a/chrome/app/policy/policy_templates_gu.xtb b/chrome/app/policy/policy_templates_gu.xtb
index 2b9874b..e7b6097 100644
--- a/chrome/app/policy/policy_templates_gu.xtb
+++ b/chrome/app/policy/policy_templates_gu.xtb
@@ -89,6 +89,11 @@
 
       જો તે સેટ કરેલું ન હોય, તો વપરાશકર્તાને આયાત કરવું કે નહીં તે પૂછવામાં આવશે અથવા આયાત કરવું આપમેળે થઈ શકે છે.</translation>
 <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME"/> ને નીચે આપેલા સામગ્રી પ્રકારોને હેન્ડલ કરવાની મંજૂરી આપો</translation>
+<translation id="6647965994887675196">જો ટ્રૂ પર સેટ હોય, તો નિરીક્ષણ કરેલ વપરાશકર્તાઓ બનાવી અને ઉપયોગ કરી શકાય છે.
+
+          જો ફોલ્સ પર સેટ છે અથવા ગોઠવેલું નથી , તો નિરીક્ષણ કરેલ વપરાશકર્તા નિર્માણ અને લોગિન અક્ષમ કરવામાં આવશે. અસ્તિત્વમાં છે તે બધા નિરીક્ષણ કરેલા વપરાશકર્તાઓને છુપાવવામાં આવશે.
+
+          નોંધ: ઉપભોક્તા અને ઉદ્યોગના ઉપકરણો માટે ડિફોલ્ટ વર્તણૂક ભિન્ન હોય છે: ઉપભોક્તાના ઉપકરણો પર નિરીક્ષણ કરેલા વપરાશકર્તાઓ ડિફોલ્ટ રૂપે સક્ષમ હોય છે પરંતુ ઉદ્યોગના ઉપકરણો પર તે ડિફોલ્ટ રૂપે અક્ષમ હોય છે.</translation>
 <translation id="5469825884154817306">આ સાઇટ્સ પર છબીઓને અવરોધિત કરો</translation>
 <translation id="8412312801707973447">પછી ભલે ઑનલાઇન OCSP/CRL ચેક્સ કરવામાં આવ્યા હોય</translation>
 <translation id="6649397154027560979">આ નીતિ ટાળવામાં આવી છે, કૃપા કરીને તેને બદલે URLBlacklist નો ઉપયોગ કરો.
@@ -1108,6 +1113,7 @@
 
           જો આ નીતિને સેટ કર્યા વિના છોડેલી હોય, તો લોગિન સ્ક્રીન પહેલી વખત બતાવવામાં આવે ત્યારે ઉચ્ચ કોન્ટ્રાસ્ટ મોડ અક્ષમ હોય છે. વપરાશકર્તાઓ કોઈપણ સમયે ઉચ્ચ કોન્ટ્રાસ્ટ મોડને સક્ષમ અથવા અક્ષમ કરી શકે છે અને લોગિન સ્ક્રીન પર તેની સ્થિતિ વપરાશકર્તાઓ વચ્ચે નિરંતર હોય છે.</translation>
 <translation id="8580857153747395000">સામગ્રી પૅક્સ બહાર જ્યારે સાઇટ્સની મુલાકાત લઈ રહ્યાં હોય ત્યારે ચેતવો.</translation>
+<translation id="350796261613621561">નિરીક્ષણ કરેલ વપરાશકર્તાઓના નિર્માણને સક્ષમ કરો.</translation>
 <translation id="602728333950205286">ડિફોલ્ટ શોધ પ્રદાતા ત્વરિત URL</translation>
 <translation id="3030000825273123558">મેટ્રિક્સ રિપોર્ટિંગને સક્ષમ કરે છે</translation>
 <translation id="6559057113164934677">કોઈપણ સાઇટને કૅમેરા અથવા માઇક્રોફોનને ઍક્સેસ કરવાની મંજૂરી આપશો નહીં</translation>
@@ -1133,6 +1139,9 @@
 <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME"/> દ્વારા કોઈ સાઇટ રેન્ડર કરવામાં આવે ત્યારે દેખાતા ટર્નડાઉન સંકેતને નાબૂદ કરે છે.</translation>
 <translation id="3264793472749429012">ડિફૉલ્ટ શોધ પ્રદાતા એન્કોડિંગ્સ</translation>
 <translation id="285480231336205327">હાઇ કોન્ટ્રાસ મોડને સક્ષમ કરો</translation>
+<translation id="5366977351895725771">જો ફોલ્સ પર સેટ છે, તો આ વપરાશકર્તા દ્વારા નિરીક્ષણ કરેલ વપરાશકર્તા નિર્માણ કરવામાં આવશે. અસ્તિત્વમાં છે તે કોઈ પણ નિરીક્ષણ કરેલા વપરાશકર્તાઓ હજી પણ ઉપલબ્ધ રહેશે.
+
+          જો ટ્રૂ પર સેટ છે અથવા ગોઠવેલું નથી , તો આ વપરાશકર્તા દ્વારા નિરીક્ષણ કરેલ વપરાશકર્તાઓ બનાવી અને સંચાલિત કરી શકાય છે.</translation>
 <translation id="8101760444435022591">હકીકતમાં થોડું નિષ્ફળ છે, ઑનલાઇન રદબાતલ ચેક્સ પ્રભાવી સુરક્ષા લાભ પ્રદાન કરતું નથી, તે <ph name="PRODUCT_NAME"/> vસંસ્કરણ 19 અને પછીનાં સંસ્કરણમાં ડિફોલ્ટ રૂપે અક્ષમ છે. આ નીતિ true પર સેટ કરીને, પાછલી વર્તણૂકને પુનઃસ્થાપિત કરી શકાય છે અને ઑનલાઇન OCSP/CRL ચેક્સ કરવામાં આવે છે.
 
       જો આ નીતિને સેટ કરેલી નથી અથવા false પર સેટ કરેલી છે, તો Chrome દ્વારા Chrome 19 અને પછીના સંસ્કરણમાં ઑનલાઇન રદબાતલ ચેક્સ કરવામાં આવશે.</translation>
diff --git a/chrome/app/policy/policy_templates_hi.xtb b/chrome/app/policy/policy_templates_hi.xtb
index 277a19d..d5b62b4 100644
--- a/chrome/app/policy/policy_templates_hi.xtb
+++ b/chrome/app/policy/policy_templates_hi.xtb
@@ -79,6 +79,11 @@
 
       यदि उसे सेट न किया गया हो, तो उपयोगकर्ता से आयात करने के लिए पूछा जा सकता है, या आयात स्‍वचालित रूप से हो सकता है.</translation>
 <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME"/> को सामग्री के निम्‍न प्रकारों को प्रबंधित करने दें</translation>
+<translation id="6647965994887675196">यदि सही पर सेट है, तो पर्यवेक्षित उपयोगकर्ता बनाए और उपयोग किए जा सकते हैं.
+
+          यदि गलत पर सेट है या कॉन्फ़िगर नहीं है, तो पर्यवेक्षित-उपयोगकर्ता बनाया जाना और लॉगिन अक्षम हो जाएंगे. सभी मौजूदा पर्यवेक्षित उपयोगकर्ता छिपा दिए जाएंगे.
+
+          ध्यान दें: ग्राहक और एंटरप्राइज़ उपकरणों के डिफ़ॉल्ट व्यवहार में अंतर होता है: ग्राहक उपकरणों पर पर्यवेक्षित उपयोगकर्ता डिफ़ॉल्ट रूप से सक्षम होते हैं, लेकिन एंटरप्राइज़ उपकरणों पर वे डिफ़ॉल्ट रूप से अक्षम होते हैं.</translation>
 <translation id="5469825884154817306">इन साइटों पर चित्र अवरुद्ध करें</translation>
 <translation id="8412312801707973447">क्‍या ऑनलाइन OCSP/CRL जांचें निष्‍पादित की जा रही हैं</translation>
 <translation id="6649397154027560979">यह नीति बहिष्कृत हो गई है, इसके बजाय कृपया URLBlacklist का उपयोग करें.
@@ -977,6 +982,7 @@
 
           यदि इस नीति को सेट किए बिना ही छोड़ दिया जाता है, तो पहली बार लॉगिन स्क्रीन दिखाई देने पर उच्च कंट्रास्ट मो़ड अक्षम किया जाता है. उपयोगकर्ता उच्च कंट्रास्ट मोड को कभी भी सक्षम या अक्षम कर सकते हैं और लॉगिन स्क्रीन पर उसकी स्थिति उपयोगकर्ताओं के बीच एक समान होती है.</translation>
 <translation id="8580857153747395000">सामग्री पैक से बाहर की साइटें विज़िट करने पर चेतावनी दें.</translation>
+<translation id="350796261613621561">पर्यवेक्षित उपयोगकर्ताओं का बनाया जाना सक्षम करती है.</translation>
 <translation id="602728333950205286">डिफ़ॉल्‍ट खोज प्रदाता झटपट URL</translation>
 <translation id="3030000825273123558">मीट्रिक रिपोर्ट करना सक्षम करें</translation>
 <translation id="6559057113164934677">किसी भी साइट को कैमरे और माइक्रोफ़ोन तक न पहुंचने दें</translation>
@@ -1002,6 +1008,9 @@
 <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME"/> द्वारा किसी साइट को रेंडर किए जाने पर दिखाई देने वाले टर्नडाउन संकेत को छिपा देती है.</translation>
 <translation id="3264793472749429012">डिफ़ॉल्‍ट खोज प्रदाता एन्कोडिंग</translation>
 <translation id="285480231336205327">उच्च कंट्रास्ट मोड सक्षम करें</translation>
+<translation id="5366977351895725771">यदि गलत पर सेट है तो, इस उपयोगकर्ता द्वारा पर्यवेक्षित-उपयोगकर्ता का बनाया जाना अक्षम हो जाएगा. कोई भी मौजूदा पर्यवेक्षित उपयोगकर्ता अभी भी उपलब्ध रहेगा.
+
+          यदि सही पर सेट है तो, इस उपयोगकर्ता द्वारा पर्यवेक्षित उपयोगकर्ता बनाए जा सकेंगे और प्रबंधित किए जा सकेंगे.</translation>
 <translation id="8101760444435022591">इस तथ्‍य को ध्‍यान में रखते हुए कि सॉफ़्ट-फ़ेल, ऑनलाइन निरस्‍तीकरण जाचं कोई प्रभावी सुरक्षा लाभ नहीं प्रदान करती हैं, वे <ph name="PRODUCT_NAME"/> के 19 और बाद के संस्‍करणों में डिफ़ॉल्‍ट रूप में अक्षम होते हैं. इस नीति को सही पर सेट करके, पिछला व्यवहार पुनर्स्‍थापित किया जाता है और ऑनलाइन OCSP/CRL जांच निष्‍पादित की जाती है.
 
       यदि नीति सेट नहीं है या गलत पर सेट हैं, तो फिर Chrome,  Chrome 19 और इसके बाद वालों में ऑनलाइन निरस्‍तीकरण जांच नहीं करेगा.</translation>
diff --git a/chrome/app/policy/policy_templates_hr.xtb b/chrome/app/policy/policy_templates_hr.xtb
index 39148c9..05c4f9a 100644
--- a/chrome/app/policy/policy_templates_hr.xtb
+++ b/chrome/app/policy/policy_templates_hr.xtb
@@ -73,6 +73,11 @@
 <translation id="3816312845600780067">Omogući tipkovni prečac za izbjegavanje automatske prijave</translation>
 <translation id="3214164532079860003">Ako je omogućeno, ovo pravilo prisilno uvozi početnu stranicu iz trenutačno zadanog preglednika. Ako je onemogućeno, početna se stranica ne uvozi. Ako nije postavljeno, korisniku može biti postavljen upit želi li uvesti stranicu ili do uvoza može doći automatski.</translation>
 <translation id="5330684698007383292">Dopusti proizvodu <ph name="PRODUCT_FRAME_NAME"/> rukovanje sljedećim vrstama sadržaja</translation>
+<translation id="6647965994887675196">Ako je postavljeno na točno, mogu se izrađivati i upotrebljavati nadzirani korisnici.
+
+          Ako je postavljeno na netočno ili nije konfigurirano, izrada i prijava nadziranih korisnika bit će onemogućena. Svi postojeći nadzirani korisnici bit će skriveni.
+
+          NAPOMENA: zadano se ponašanje za potrošačke i poslovne uređaje razlikuje: na potrošačkim su uređajima nadzirani korisnici omogućeni prema zadanim postavkama, a na poslovnim su uređajima onemogućeni prema zadanim postavkama.</translation>
 <translation id="5469825884154817306">Blokiraj slike na ovim web-lokacijama</translation>
 <translation id="8412312801707973447">Izvršavaju li se mrežne provjere OCSP/CRL</translation>
 <translation id="6649397154027560979">Pravilo je obustavljeno, upotrijebite URLBlacklist.
@@ -888,6 +893,7 @@
 
           Ako se to pravilo ne postavi, način visokog kontrasta onemogućen je pri prvom prikazivanju zaslona za prijavu. Korisnici mogu omogućiti ili onemogućiti način visokog kontrasta u bilo kojem trenutku, a njegov status na zaslonu za prijavu zadržat će se i za sljedeće korisnike.</translation>
 <translation id="8580857153747395000">Upozori kada se posjećuju web-lokacije izvan paketa sadržaja.</translation>
+<translation id="350796261613621561">Omogući izradu nadziranih korisnika.</translation>
 <translation id="602728333950205286">Instant URL zadanog davatelja usluge pretraživanja</translation>
 <translation id="3030000825273123558">Omogući izvješće o metrici</translation>
 <translation id="6559057113164934677">Ne dopuštaj nijednoj web-lokaciji pristupanje kameri i mikrofonu</translation>
@@ -905,6 +911,9 @@
 <translation id="8864975621965365890">Zaustavlja upit za odbijanje koji se pojavljuje kada web-lokaciju generira <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Kodiranja zadanog davatelja usluge pretraživanja</translation>
 <translation id="285480231336205327">Omogućavanje načina visokog kontrasta</translation>
+<translation id="5366977351895725771">Ako je postavljeno na netočno, korisnik neće moći izrađivati nadzirane korisnike. Postojeći nadzirani korisnici i dalje će biti dostupni.
+
+          Ako je postavljeno na točno ili nije konfigurirano, korisnik može izrađivati nadzirane korisnike i upravljati njima.</translation>
 <translation id="8101760444435022591">Budući da &quot;soft-fail&quot;, mrežne provjere opoziva ne pružaju učinkovitu zaštitu sigurnosti, onemogućuju se prema zadanim postavkama na usluzi <ph name="PRODUCT_NAME"/> verzije 19 i novijih verzija. Postavljanjem tog pravila na vrijednost &quot;istinito&quot;, prethodno se ponašanje vraća i mrežne provjere OCSP/CRL bit će izvršene.
 
       Ako to pravilo nije postavljeno ili je postavljeno na vrijednost &quot;lažno&quot;, Chrome neće vršiti mrežne provjere opoziva u Chromeu 19 i novijim verzijama.</translation>
diff --git a/chrome/app/policy/policy_templates_hu.xtb b/chrome/app/policy/policy_templates_hu.xtb
index 1dffde9..45f73b7 100644
--- a/chrome/app/policy/policy_templates_hu.xtb
+++ b/chrome/app/policy/policy_templates_hu.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">Kiváltó billentyűparancs engedélyezése az automatikus bejelentkezéshez</translation>
 <translation id="3214164532079860003">Ez a házirend -- ha engedélyezve van -- kikényszeríti a kezdőlap importálását az alapértelmezett böngészőből. Ha le van tiltva, akkor nem kerül sor a kezdőlap importálására. Ha nincs beállítva, akkor előfordulhat, hogy a rendszer a felhasználótól kérdezi meg, hogy megtörténjen-e az importálás, vagy hogy lehet-e automatikus az importálás.</translation>
 <translation id="5330684698007383292">A következő tartalomtípusok kezelésének engedélyezése a(z) <ph name="PRODUCT_FRAME_NAME"/> számára</translation>
+<translation id="6647965994887675196">Ha „igaz” értékre van állítva, megengedett a felügyelt felhasználók létrehozása és használata.
+
+          Ha „hamis” értékre van állítva, illetve nincs beállítva, a felügyelt felhasználók létrehozása és bejelentkezése nem lehetséges. Az összes meglévő felügyelt felhasználó rejtve lesz.
+
+          MEGJEGYZÉS: a fogyasztói és vállalati eszközök alapértelmezett működése eltérő. A fogyasztói eszközökön alapértelmezés szerint engedélyezettek a felügyelt felhasználók, míg a vállalati eszközökön le vannak tiltva.</translation>
 <translation id="5469825884154817306">Képek letiltása ezeken az webhelyeken</translation>
 <translation id="8412312801707973447">Végbemenjenek-e online OCSP-/CRL-ellenőrzések</translation>
 <translation id="6649397154027560979">Ez a házirend megszűnt. Kérjük, használja helyette az URLBlacklist házirendet.
@@ -884,6 +889,7 @@
 
           Ha nem állítja be ezt a házirendet, akkor a nagy kontrasztú mód le lesz tiltva a bejelentkezési képernyő első megjelenítésekor. A felhasználók bármikor engedélyezhetik vagy letilthatják a nagy kontrasztú módot, és annak állapota mindegyik felhasználó esetében megmarad a bejelentkezési képernyőn.</translation>
 <translation id="8580857153747395000">Figyelmeztetés tartalomcsomagokon kívüli webhelyek felkeresése esetén.</translation>
+<translation id="350796261613621561">Felügyelt felhasználók létrehozásának engedélyezése.</translation>
 <translation id="602728333950205286">Alapértelmezett keresési szolgáltató azonnali URL-je</translation>
 <translation id="3030000825273123558">Mutatók jelentéseinek engedélyezése</translation>
 <translation id="6559057113164934677">Ne engedje webhelyek hozzáférését a kamerához és mikrofonhoz</translation>
@@ -901,6 +907,9 @@
 <translation id="8864975621965365890">Elrejti a kikapcsolási figyelmeztetést, amely akkor jelenik meg, ha egy webhelyet a(z) <ph name="PRODUCT_FRAME_NAME"/> jeleníti meg.</translation>
 <translation id="3264793472749429012">Alapértelmezett keresési szolgáltató kódolásai</translation>
 <translation id="285480231336205327">Nagy kontrasztú mód engedélyezése</translation>
+<translation id="5366977351895725771">Ha „hamis” értékre van állítva, a felhasználó nem hozhat létre felügyelt felhasználókat. Az összes meglévő felügyelt felhasználó továbbra is elérhető lesz.
+
+          Ha „igaz” értékre van állítva, illetve nincs beállítva, a felhasználó létrehozhat és kezelhet felügyelt felhasználókat.</translation>
 <translation id="8101760444435022591">Figyelemmel arra, hogy a hibajavító mechanizmus szerint működő internetes visszavonási ellenőrzések nem nyújtanak megfelelő biztonságot, a(z) <ph name="PRODUCT_NAME"/> 19-es és további verzióiban alapértelmezés szerint ki vannak kapcsolva. A házirend igaz értékre állításával visszaállítódik a korábbi viselkedés, és a rendszer online módú OCSP/CRL-ellenőrzéseket végez.
 
       Ha a házirend nincs beállítva, vagy értéke hamis, akkor a Chrome nem végez online visszavonási ellenőrzéseket a Chrome 19-es és újabb verzióinál.</translation>
diff --git a/chrome/app/policy/policy_templates_id.xtb b/chrome/app/policy/policy_templates_id.xtb
index 38c3d61..ba6282a 100644
--- a/chrome/app/policy/policy_templates_id.xtb
+++ b/chrome/app/policy/policy_templates_id.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">Aktifkan pintasan keyboard penyelamatan untuk masuk otomatis</translation>
 <translation id="3214164532079860003">Kebijakan ini memaksa beranda diimpor dari browser default yang sedang digunakan, jika diaktifkan. Jika dinonaktifkan, beranda tidak diimpor. Jika tidak disetel, pengguna mungkin akan ditanya apakah ingin mengimpor, atau pengimporan dapat terjadi secara otomatis.</translation>
 <translation id="5330684698007383292">Izinkan <ph name="PRODUCT_FRAME_NAME"/> menangani jenis konten berikut</translation>
+<translation id="6647965994887675196">Jika disetel ke true, pengguna yang diawasi dapat dibuat dan digunakan.
+
+          Jika disetel ke false atau tidak dikonfigurasi, pembuatan dan info masuk pengguna yang diawasi akan dinonaktifkan. Semua pengguna diawasi yang sudah ada akan tersembunyi.
+
+          CATATAN: Perilaku default untuk perangkat pelanggan dan perusahaan berbeda: pada perangkat pelanggan, pengguna yang diawasi diaktifkan secara default, namun pada perangkat perusahaan, pengguna yang diawasi dinonaktifkan secara default.</translation>
 <translation id="5469825884154817306">Cekal gambar pada situs ini</translation>
 <translation id="8412312801707973447">Apakah pemeriksaan OCSP/CRL online dilakukan atau tidak</translation>
 <translation id="6649397154027560979">Kebijakan ini tidak lagi digunakan, gunakan URLBlacklist sebagai gantinya.
@@ -884,6 +889,7 @@
 
           Jika kebijakan ini tidak disetel, mode kontras tinggi dinonaktifkan saat layar masuk ditampilkan untuk pertama kali. Pengguna dapat mengaktifkan atau menonaktifkan mode kontras tinggi kapan saja dan statusnya di layar masuk bersifat permanen antar pengguna.</translation>
 <translation id="8580857153747395000">Peringatkan saat mengunjungi situs di luar paket konten.</translation>
+<translation id="350796261613621561">Mengaktifkan pembuatan pengguna yang diawasi.</translation>
 <translation id="602728333950205286">URL sekejap penyedia penelusuran default</translation>
 <translation id="3030000825273123558">Aktifkan pelaporan metrik</translation>
 <translation id="6559057113164934677">Jangan izinkan situs apa pun mengakses kamera dan mikrofon</translation>
@@ -901,6 +907,9 @@
 <translation id="8864975621965365890">Menimpa permintaan penghentian yang muncul saat situs dirender oleh <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Penyandiaksaraan penyedia penelusuran default</translation>
 <translation id="285480231336205327">Aktifkan mode kontras tinggi</translation>
+<translation id="5366977351895725771">Jika disetel ke false, pembuatan pengguna yang diawasi oleh pengguna ini akan dinonaktifkan. Pengguna diawasi mana pun yang sudah ada akan tetap tersedia.
+
+          Jika disetel ke true atau tidak dikonfigurasi, pengguna yang diawasi dapat dibuat dan dikelola oleh pengguna ini.</translation>
 <translation id="8101760444435022591">Mengingat bahwa pemeriksaan pembatalan online, kegagalan-lunak tidak memberikan manfaat keamanan yang efektif, pemeriksaan tersebut dinonaktifkan secara default dalam <ph name="PRODUCT_NAME"/> versi 19 dan yang lebih baru. Dengan menyetel kebijakan ini ke true, perilaku sebelumnya dipulihkan dan akan dilakukan pemeriksaan OCSP/CRL online.
 
       Jika kebijakan tidak disetel, atau disetel ke false, maka Chrome tidak akan melakukan pemeriksaan pembatalan online dalam Chrome 19 dan yang lebih baru.</translation>
diff --git a/chrome/app/policy/policy_templates_it.xtb b/chrome/app/policy/policy_templates_it.xtb
index 05ae087..e6659a2 100644
--- a/chrome/app/policy/policy_templates_it.xtb
+++ b/chrome/app/policy/policy_templates_it.xtb
@@ -66,6 +66,11 @@
 <translation id="3816312845600780067">Attivazione scorciatoia da tastiera bailout per accesso automatico</translation>
 <translation id="3214164532079860003">Se è attiva, questa norma impone l'importazione della pagina iniziale dal browser predefinito corrente. Se non è attiva, la pagina iniziale non viene importata. Se non viene impostata, all'utente potrebbe essere chiesto se desidera effettuare l'importazione, oppure l'importazione potrebbe avvenire automaticamente.</translation>
 <translation id="5330684698007383292">Consenti a <ph name="PRODUCT_FRAME_NAME"/> di gestire i seguenti tipi di contenuti</translation>
+<translation id="6647965994887675196">Se questa norma è impostata su true, è possibile creare e utilizzare utenti controllati.
+
+          Se questa norma è impostata su false o non è configurata, la creazione di utenti controllati e il relativo accesso saranno disattivati. Tutti gli utenti controllati esistenti saranno nascosti.
+
+          NOTA. Il comportamento predefinito per dispositivi consumer ed enterprise è diverso: sui dispositivi consumer, gli utenti controllati sono abilitati per impostazione predefinita, mentre sui dispositivi enterprise sono disabilitati per impostazione predefinita.</translation>
 <translation id="5469825884154817306">Blocca immagini su questi siti</translation>
 <translation id="8412312801707973447">Esecuzione dei controlli OCSP/CRL online</translation>
 <translation id="6649397154027560979">Questa norma non è più supportata; utilizza la norma URLBlacklist.
@@ -874,6 +879,7 @@
 
 Se la norma non viene impostata, la modalità ad alto contrasto viene disattivata alla prima visualizzazione della schermata di accesso. Gli utenti possono attivare o disattivare la modalità ad alto contrasto in qualsiasi momento e il relativo stato nella schermata di accesso persiste per tutti gli utenti.</translation>
 <translation id="8580857153747395000">Avvisa quando vengono visitati siti non presenti nei pacchetti di contenuti.</translation>
+<translation id="350796261613621561">Attivazione della creazione di utenti controllati.</translation>
 <translation id="602728333950205286">URL di ricerca istantanea del provider di ricerca predefinito</translation>
 <translation id="3030000825273123558">Attiva rapporti sulle metriche</translation>
 <translation id="6559057113164934677">Non consentire ad alcun sito di accedere alla fotocamera e al microfono</translation>
@@ -891,6 +897,9 @@
 <translation id="8864975621965365890">Consente di eliminare il messaggio di richiesta di turndown che compare quando un sito viene visualizzato da <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Codifiche del provider di ricerca predefinito</translation>
 <translation id="285480231336205327">Attiva modalità ad alto contrasto</translation>
+<translation id="5366977351895725771">Se questa norma è impostata su false, la creazione di utenti controllati da parte di questo utente sarà disabilitata. Gli eventuali utenti controllati esistenti saranno comunque disponibili.
+
+          Se questa norma è impostata su true o non è configurata, questo utente può creare e gestire utenti controllati.</translation>
 <translation id="8101760444435022591">Alla luce del fatto che i controlli della revoca online soft-fail non offrono un effettivo vantaggio per la sicurezza, sono disattivati per impostazione predefinita nella versione 19 e versioni successive di <ph name="PRODUCT_NAME"/>. Se questa norma viene impostata su true, viene ripristinato il comportamento precedente e vengono effettuati i controlli OCSP/CRL online.
 
       Se la norma non viene impostata o viene impostata su false, Chrome non effettuerà i controlli della revoca online in Chrome 19 e versioni successive.</translation>
diff --git a/chrome/app/policy/policy_templates_iw.xtb b/chrome/app/policy/policy_templates_iw.xtb
index e2b04c5..93f7c1a 100644
--- a/chrome/app/policy/policy_templates_iw.xtb
+++ b/chrome/app/policy/policy_templates_iw.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">הפעל מקשי קיצור כחלופה להתחברות אוטומטית</translation>
 <translation id="3214164532079860003">מדיניות זו מאלצת לייבא את דף הבית מדפדפן ברירת המחדל הנוכחי אם היא מופעלת. אם היא מושבתת, דף הבית אינו מיובא. אם לא הוגדרה, ייתכן כי המערכת תשאל את המשתמש אם לייבא את דף הבית, או שהייבוא עשוי להתבצע באופן אוטומטי.</translation>
 <translation id="5330684698007383292">אפשר ל-<ph name="PRODUCT_FRAME_NAME"/> לטפל בסוגי התוכן הבאים.</translation>
+<translation id="6647965994887675196">אם תוגדר כ-true, ניתן יהיה ליצור משתמשים מבוקרים ולהשתמש בהם.
+
+          אם תוגדר כ-false, יצירת משתמשים מבוקרים תוגבל וההתחברות תושבת. כל המשתמשים המבוקרים האחרים יוסתרו.
+
+          שים לב: ההתנהגות המוגדרת כברירת מחדל עבור מכשירים של צרכנים ושל ארגונים שונה: במכשירים של צרכנים, משתמשים מבוקרים מופעלים כברירת מחדל, אבל במכשירים של ארגונים, הם מושבתים כברירת מחדל.</translation>
 <translation id="5469825884154817306">חסום תמונות באתרים אלה</translation>
 <translation id="8412312801707973447">האם מבוצעות בדיקות OCSP/CRL מקוונות</translation>
 <translation id="6649397154027560979">מדיניות זו הוצאה משימוש, אנא השתמש ב-URLBlacklist במקום זאת.
@@ -880,6 +885,7 @@
 
           אם לא תגדיר מדיניות זו, מצב ניגודיות גבוהה יהיה מושבת בעת ההצגה הראשונה של מסך ההתחברות. המשתמשים יוכלו להפעיל או להשבית את מצב ניגודיות גבוהה בכל עת, והסטטוס שלו במסך ההתחברות יישאר עקבי בין המשתמשים.</translation>
 <translation id="8580857153747395000">הזהר בעת ביקור באתרים שמחוץ לחבילות תוכן.</translation>
+<translation id="350796261613621561">הפעלת יצירה של משתמשים מבוקרים.</translation>
 <translation id="602728333950205286">כתובת אתר Instant של ספק חיפוש המוגדר כברירת מחדל</translation>
 <translation id="3030000825273123558">הפעל דיווח על מדדים</translation>
 <translation id="6559057113164934677">אל תאפשר לאף אתר גישה למצלמה ולמיקרופון</translation>
@@ -897,6 +903,9 @@
 <translation id="8864975621965365890">מניעת השאלה לפני ביטול המופיעה כאשר אתר מוצג על ידי <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">קידודים של ספק חיפוש המוגדר כברירת מחדל</translation>
 <translation id="285480231336205327">אפשר מצב ניגודיות גבוהה</translation>
+<translation id="5366977351895725771">אם תוגדר כ-false, יצירת משתמשים מבוקרים על ידי המשתמש הזה תושבת. משתמשים מבוקרים קיימים עדיין יהיו זמינים.
+
+          אם תוגדר כ-true או לא תוגדר, המשתמש הזה יוכל ליצור משתמשים מבוקרים ולנהל אותם.</translation>
 <translation id="8101760444435022591">לאור העובדה שבדיקות ביטול מקוונות מסוג soft-fail אינן מספקות שום יתרון אבטחה, הן מושבתות כברירת מחדל ב-<ph name="PRODUCT_NAME"/> גרסה 19 ואילך. על ידי הגדרת מדיניות זו כ'אמת', הפעילות הקודמת תוחזר, ובדיקות OCSP/CRL מקוונות יתבצעו.
 
       אם המדיניות לא תוגדר, או מוגדרת כ'שקר', Chrome לא יבצע בדיקות ביטול מקוונות בגרסה 19 ואילך של Chrome.</translation>
diff --git a/chrome/app/policy/policy_templates_ja.xtb b/chrome/app/policy/policy_templates_ja.xtb
index 18753eb..e13e359 100644
--- a/chrome/app/policy/policy_templates_ja.xtb
+++ b/chrome/app/policy/policy_templates_ja.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">自動ログイン回避用のキーボード ショートカットを有効にする</translation>
 <translation id="3214164532079860003">このポリシーを有効にするとホームページが現在の既定のブラウザからインポートされます。無効にするとホームページはインポートされません。このポリシーが未設定の場合、インポートするかどうかをユーザーに尋ねるか、自動的にインポートされます。</translation>
 <translation id="5330684698007383292">次のコンテンツ タイプの処理を <ph name="PRODUCT_FRAME_NAME"/> に対して許可する</translation>
+<translation id="6647965994887675196">true に設定されている場合は、監視対象ユーザーを作成して使用できます。
+
+          false に設定されている場合や未設定の場合は、監視対象ユーザーの作成とログインはできません。既存の監視対象ユーザーはすべて非表示になります。
+
+          注: デフォルトの動作は、個人向けのデバイスと企業向けのデバイスとで異なります。個人向けデバイスでは、監視対象ユーザーはデフォルトで有効になっていますが、企業向けデバイスではそうではありません。</translation>
 <translation id="5469825884154817306">これらのサイトの画像をブロックする</translation>
 <translation id="8412312801707973447">オンライン OCSP/CRL チェックを実行するかどうかを指定する</translation>
 <translation id="6649397154027560979">このポリシーはサポート終了となっているため、代わりに URLBlacklist を使用してください。
@@ -896,6 +901,7 @@
 
           このポリシーが未設定の場合は、ログイン画面が表示された直後はハイコントラスト モードが無効になります。ユーザーはいつでもハイコントラスト モードを有効または無効にすることができ、ログイン画面でのハイコントラスト モードの状態はログアウト後も維持されます。</translation>
 <translation id="8580857153747395000">コンテンツ パック外部のサイトを訪問したときに警告する。</translation>
+<translation id="350796261613621561">監視対象ユーザーを作成できるようにします。</translation>
 <translation id="602728333950205286">デフォルトの検索プロバイダのインスタント検索 URL</translation>
 <translation id="3030000825273123558">統計情報のレポート送信を有効にする</translation>
 <translation id="6559057113164934677">カメラやマイクへのアクセスをどのサイトにも許可しない</translation>
@@ -913,6 +919,9 @@
 <translation id="8864975621965365890">サイトが <ph name="PRODUCT_FRAME_NAME"/> によってレンダリングされるときに表示されるサポート終了メッセージを抑制します。</translation>
 <translation id="3264793472749429012">デフォルトの検索プロバイダのエンコード</translation>
 <translation id="285480231336205327">ハイ コントラスト モードを有効にする</translation>
+<translation id="5366977351895725771">false に設定されている場合、このユーザーは監視対象ユーザーを作成できません。既存の監視対象ユーザーは引き続き利用可能です。
+
+          true に設定されている場合や未設定の場合、このユーザーは監視対象ユーザーを作成し管理できます。</translation>
 <translation id="8101760444435022591">オンラインによる証明書取り消しの確認が Soft Fail の場合、効果的なセキュリティ上の利点がないという点を考慮し、<ph name="PRODUCT_NAME"/> バージョン 19 以降ではデフォルトで無効になっています。このポリシーを true に設定すると、前回の動作を復元し、オンライン OCSP/CRL チェックを実行します。
 
       このポリシーが未設定または false に設定した場合、Chrome 19 以降ではオンラインによる証明書取り消しの確認は行われません。</translation>
diff --git a/chrome/app/policy/policy_templates_kn.xtb b/chrome/app/policy/policy_templates_kn.xtb
index 26ba7ab..8903f7f 100644
--- a/chrome/app/policy/policy_templates_kn.xtb
+++ b/chrome/app/policy/policy_templates_kn.xtb
@@ -73,6 +73,11 @@
 <translation id="3816312845600780067">ಆಟೋ-ಲಾಗಿನ್‌ಗಾಗಿ ಬೇಲ್ಔಟ್ ಕೀಬೋರ್ಡ್ ಕಿರುಹಾದಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="3214164532079860003">ಸಕ್ರಿಯಗೊಳಿಸಿದಲ್ಲಿ ಪ್ರಸ್ತುತ ಡೀಫಾಲ್ಟ್ ಬ್ರೌಸರ್‪ನಿಂದ ಮುಖಪುಟವನ್ನು ಆಮದು ಮಾಡುವಂತೆ ಈ ನೀತಿಯು ಆಗ್ರಹಿಸುತ್ತದೆ. ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದಲ್ಲಿ, ಮುಖಪುಟವನ್ನು ಆಮದುಗೊಳಿಸುವುದಿಲ್ಲ. ಇದನ್ನು ಹೊಂದಿಸದಿದ್ದರೆ, ಎಲ್ಲಿಂದ ಆಮದು ಮಾಡಬೇಕೆಂದು ಬಳಕೆದಾರ ಕೇಳಬಹುದು, ಅಥವಾ ಆಮದು ಮಾಡುವುದು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಂಭವಿಸಬಹುದು.</translation>
 <translation id="5330684698007383292">ಮುಂದಿನ ವಿಷಯದ ಪ್ರಕಾರಗಳನ್ನು ನಿರ್ವಹಿಸಲು <ph name="PRODUCT_FRAME_NAME"/> ಅನ್ನು ಅನುಮತಿಸುತ್ತದೆ.</translation>
+<translation id="6647965994887675196">ಸರಿ ಎಂದು ಹೊಂದಿಸಿದರೆ, ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರನ್ನು ರಚಿಸಬಹುದು ಮತ್ತು ಬಳಸಬಹುದು.
+
+          ಒಂದು ವೇಳೆ ತಪ್ಪು ಎಂದು ಹೊಂದಿಸಿದರೆ ಅಥವಾ ಕಾನ್ಫಿಗರ್ ಮಾಡದಿದ್ದರೆ, ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರ ರಚನೆ ಮತ್ತು ಲಾಗಿನ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತದೆ. ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಎಲ್ಲಾ ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರನ್ನು ಮರೆಮಾಡಲಾಗುತ್ತದೆ.
+
+         ಗಮನಿಸಿ: ಗ್ರಾಹಕ ಮತ್ತು ಉದ್ಯಮ ಸಾಧನಗಳಿಗೂ ಡೀಫಾಲ್ಟ್ ನಡವಳಿಕೆ ಭಿನ್ನವಾಗಿರುತ್ತದೆ: ಗ್ರಾಹಕರ ಸಾಧನಗಳಲ್ಲಿ ಮೇಲ್ವಿಚಾರಣೆ ಬಳಕೆದಾರನ್ನು ಡೀಫಾಲ್ಟ್ ಮೂಲಕ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿರುತ್ತದೆ, ಆದರೆ ಉದ್ಯಮ ಸಾಧನಗಳಲ್ಲಿ ಅವರನ್ನು ಡೀಫಾಲ್ಟ್ ಮೂಲಕ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿರುತ್ತದೆ.</translation>
 <translation id="5469825884154817306">ಈ ಸೈಟ್‌ಗಳಲ್ಲಿ ಚಿತ್ರಗಳನ್ನು ನಿರ್ಬಂಧಿಸಿ</translation>
 <translation id="8412312801707973447">ಆನ್‌ಲೈನ್ OCSP/CRL ಪರಿಶೀಲನೆಗಳನ್ನು ಕಾರ್ಯಾಚರಿಸಲಾಗುತ್ತದೆಯೇ</translation>
 <translation id="6649397154027560979">ಈ ನೀತಿಯನ್ನು ಅಸಮ್ಮತಿಸಲಾಗಿದೆ, ಬದಲಾಗಿ ದಯವಿಟ್ಟು URLBlacklist ಬಳಸಿ.
@@ -869,6 +874,7 @@
 
           ಒಂದು ವೇಳೆ ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದೇ ಬಿಟ್ಟರೆ, ಲಾಗಿನ್ ಪರದೆಯು ಮೊದಲು ಪ್ರದರ್ಶನಗೊಂಡಾಗ ಅಧಿಕ ಕಾಂಟ್ರಾಸ್ಟ್ ಮೋಡ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತದೆ. ಬಳಕೆದಾರರು ಅಧಿಕ ಕಾಂಟ್ರಾಸ್ಟ್ ಮೋಡ್ ಆನ್ನು ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಸಕ್ರಿಯ ಅಥವಾ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬಹುದು ಮತ್ತು ಲಾಗಿನ್ ಪರದೆಯಲ್ಲಿರುವ ಅದರ ಸ್ಥಿತಿಯು ಬಳಕೆದಾರರ ನಡುವೆ ನಿರಂತರವಾಗಿರುತ್ತದೆ.</translation>
 <translation id="8580857153747395000">ಸೈಟ್‌ಗಳಿಗೆ ವಿಷಯದ ಪ್ಯಾಕ್‌ಗಳಿಂದ ಹೊರಗೆ ಭೇಟಿ ನೀಡುವಾಗ ಎಚ್ಚರಿಸಿ.</translation>
+<translation id="350796261613621561">ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರ ರಚನೆ ಸಕ್ರಿಯಗೊಳಿಸಿ.</translation>
 <translation id="602728333950205286">ಡೀಫಾಲ್ಟ್ ಹುಡುಕಾಟ ನೀಡುಗರ ಇನ್‌ಸ್ಟೆಂಟ್ URL</translation>
 <translation id="3030000825273123558">ಮಾಪನಗಳ ವರದಿಗಾರಿಕೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="6559057113164934677">ಕ್ಯಾಮರಾ ಮತ್ತು ಮೈಕ್ರೋಫೋನ್ ಪ್ರವೇಶಿಸಲು ಯಾವುದೇ ಸೈಟ್ ಅನ್ನು ಅನುಮತಿಸಬೇಡಿ</translation>
@@ -886,6 +892,9 @@
 <translation id="8864975621965365890">ಸೈಟ್ ಅನ್ನು <ph name="PRODUCT_FRAME_NAME"/> ಮೂಲಕ ತೋರಿಸುತ್ತಿರುವಾಗ ಗೋಚರಿಸುವಂತಹ ಟರ್ನ್‌ಡೌನ್ ಪ್ರಾಂಪ್ಟ್ ಅನ್ನು ನಿಗ್ರಹಿಸುತ್ತದೆ.</translation>
 <translation id="3264793472749429012">ಡೀಫಾಲ್ಟ್ ಹುಡುಕಾಟ ನೀಡುಗ ಎನ್ಕೋಡಿಂಗ್‌ಗಳು</translation>
 <translation id="285480231336205327">ಉನ್ನತ ಕಾಂಟ್ರಾಸ್ಟ್ ಮೋಡ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
+<translation id="5366977351895725771">ತಪ್ಪು ಎಂದು ಹೊಂದಿಸಿದರೆ, ಈ ಬಳಕೆದಾರರಿಂದ ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರ ರಚನೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತದೆ. ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರು ಇನ್ನೂ ಲಭ್ಯವಿರುತ್ತಾರೆ.
+
+          ಒಂದು ವೇಳೆ ಸರಿ ಎಂದು ಹೊಂದಿಸಿದರೆ ಅಥವಾ ಕಾನ್ಫಿಗರ್ ಮಾಡದಿದ್ದರೆ, ಮೇಲ್ವಿಚಾರಣೆ ಬಳಕೆದಾರರನ್ನು ರಚಿಸಬಹುದಾಗಿರುತ್ತದೆ ಮತ್ತು ಈ ಬಳಕೆದಾರರಿಂದ ನಿರ್ವಹಿಸಬಹುದಾಗಿರುತ್ತದೆ.</translation>
 <translation id="8101760444435022591">ನೈಜಾರ್ಥದಲ್ಲಿ, ಆನ್‌ಲೈನ್ ರಿವೊಕೇಶನ್ ಪರಿಶೀಲನೆಗಳು ಪರಿಣಾಮಕಾರಿಯಾದ ಭದ್ರತಾ ಪ್ರಯೋಜನವನ್ನು ಒದಗಿಸುವುದಿಲ್ಲ, ಡೀಫಾಲ್ಟ್ <ph name="PRODUCT_NAME"/> ನಲ್ಲಿ ಆವೃತ್ತಿ 19 ಮತ್ತು ಅದರ ನಂತರ ಅವುಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ. ನಿಜವಾದ ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸುವುದರ ಮೂಲಕ, ಹಿಂದಿನ ವರ್ತನೆಯು ಮರುಸ್ಥಾಪನೆಯಾಗುತ್ತದೆ ಮತ್ತು ಆನ್‌ಲೈನ್ OCSP/CRL ಪರಿಶೀಲನೆಗಳು ಕಾರ್ಯಾಚರಿಸುತ್ತವೆ. ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದಿದ್ದರೆ, ಸುಳ್ಳಿಗೆ ಹೊಂದಿಸಿದರೆ, Chrome 19 ಮತ್ತು ನಂತರದಲ್ಲಿ ಆನ್‌ಲೈನ್ ರಿವೊಕೇಶನ್ ಪರಿಶೀಲನೆಗಳನ್ನು ನಂತರ Chrome ಕಾರ್ಯಾಚರಿಸುವುದಿಲ್ಲ.</translation>
 <translation id="5469484020713359236">ಕುಕೀಗಳನ್ನು ಹೊಂದಿಸಲು ಅನುಮತಿಸುವಂತಹ ಸೈಟ್‌ಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವಂತಹ url ಪ್ರಕಾರಗಳನ್ನು ಹೊಂದಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದೆ ಬಿಟ್ಟಲ್ಲಿ ಜಾಗತಿಕ ಡೀಫಾಲ್ಟ್ ಮೌಲ್ಯವನ್ನು 'DefaultCookiesSetting' ನೀತಿಯನ್ನು ಹೊಂದಿಸಿದ್ದಲ್ಲಿ ಇದನ್ನು ಬಳಸಲಾಗುತ್ತದೆ ಅಥವಾ ಬಳಕೆದಾರರ ವೈಯಕ್ತಿಕ ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="1504431521196476721">ರಿಮೋಟ್ ದೃಢೀಕರಣ</translation>
diff --git a/chrome/app/policy/policy_templates_ko.xtb b/chrome/app/policy/policy_templates_ko.xtb
index 5e4d252..f6f4a04 100644
--- a/chrome/app/policy/policy_templates_ko.xtb
+++ b/chrome/app/policy/policy_templates_ko.xtb
@@ -86,6 +86,11 @@
 
       설정하지 않으면 홈페이지를 가져올지 여부를 사용자에게 확인하거나 자동으로 가져올 수 있습니다.</translation>
 <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME"/>이(가) 다음 콘텐츠 유형을 다루도록 허용</translation>
+<translation id="6647965994887675196">true로 설정하면 관리 대상 사용자를 생성하고 사용할 수 있습니다.
+
+          false로 설정하거나 설정하지 않으면 관리 대상 사용자 생성 및 로그인이 사용 중지됩니다. 기존의 모든 관리 대상 사용자는 숨겨집니다.
+
+          참고: 일반 소비자용과 기업용 기기는 기본 동작에 차이가 있습니다. 일반 소비자용 기기는 관리 대상 사용자를 기본적으로 사용하도록 설정되어 있으나, 기업용 기기에서는 기본적으로 사용 중지되어 있습니다.</translation>
 <translation id="5469825884154817306">이 사이트의 이미지 차단</translation>
 <translation id="8412312801707973447">온라인 OCSP/CRL 확인 수행 여부</translation>
 <translation id="6649397154027560979">이 정책은 지원 중단되었으므로 대신 URLBlacklist를 사용하시기 바랍니다.
@@ -1119,6 +1124,7 @@
 
           이 정책이 설정되지 않은 경우 로그인 화면이 처음 나타날 때 고대비 모드가 사용 중지되어 있습니다. 사용자는 언제든지 고대비 모드를 사용 설정 또는 사용 중지할 수 있으며 로그인 화면에서의 상태가 사용자별로 유지됩니다.</translation>
 <translation id="8580857153747395000">콘텐츠 팩 외부 사이트를 방문할 때 표시되는 경고입니다.</translation>
+<translation id="350796261613621561">관리 대상 사용자 생성을 사용하도록 설정합니다.</translation>
 <translation id="602728333950205286">기본 검색 공급자 순간 검색 URL</translation>
 <translation id="3030000825273123558">통계 보고 사용</translation>
 <translation id="6559057113164934677">카메라 및 마이크에 대한 모든 사이트의 액세스 허용 안함</translation>
@@ -1144,6 +1150,9 @@
 <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME"/>에서 사이트를 렌더링할 때 나타나는 종료 프롬프트를 표시하지 않습니다.</translation>
 <translation id="3264793472749429012">기본 검색 공급자 인코딩</translation>
 <translation id="285480231336205327">고대비 모드 사용</translation>
+<translation id="5366977351895725771">false로 설정하면 이 사용자에 의한 관리 대상 사용자 생성이 사용 중지됩니다. 기존 관리 대상 사용자는 계속 사용할 수 있습니다.
+
+          true로 설정하거나 설정하지 않으면 이 사용자가 관리 대상 사용자를 생성하고 관리할 수 있습니다.</translation>
 <translation id="8101760444435022591">가벼운 고장, 온라인 폐기 검사가 보안 혜택을 제공하지 않는다는 것을 고려하여 기본적으로 <ph name="PRODUCT_NAME"/> 버전 19 이상에서는 사용 중지합니다. 이 정책을 true로 설정하면 이전 작업이 복원되며 온라인 OCSP/CRL 확인이 수행됩니다.
 
       이 정책을 설정하지 않거나 false로 설정하면 Chrome은 Chrome 19 이상에서 온라인 폐기 확인을 수행하지 않습니다.</translation>
diff --git a/chrome/app/policy/policy_templates_lt.xtb b/chrome/app/policy/policy_templates_lt.xtb
index bc7a676..56c8d0d 100644
--- a/chrome/app/policy/policy_templates_lt.xtb
+++ b/chrome/app/policy/policy_templates_lt.xtb
@@ -89,6 +89,11 @@
 
       Jei jis nenustatytas, naudotojo gali būti paklausta, ar importuoti, arba gali būti automatiškai pradėta importuoti.</translation>
 <translation id="5330684698007383292">Leisti „<ph name="PRODUCT_FRAME_NAME"/>“ naudoti šių tipų turinį</translation>
+<translation id="6647965994887675196">Jei ši politika galioja, galima sukurti ir naudoti prižiūrimus naudotojus.
+
+          Jei ši politika negalioja arba yra nesukonfigūruota, prižiūrimo naudotojo kūrimas ir prisijungimas bus neleidžiamas. Visi esami prižiūrimi naudotojai bus paslėpti.
+
+          PASTABA: numatytoji klientų ir įmonės įrenginių elgsena skiriasi: klientų įrenginiuose prižiūrimi naudotojai pagal numatytuosius nustatymus yra įgalinti, o įmonės įrenginiuose – neleidžiami.</translation>
 <translation id="5469825884154817306">Blokuoti vaizdus šiose svetainėse</translation>
 <translation id="8412312801707973447">Ar atliekami OCSP / CRL patikrinimai prisijungus</translation>
 <translation id="6649397154027560979">Ši politika nebenaudojama, vietoje jos naudokite politiką „URLBlacklist“.
@@ -1130,6 +1135,7 @@
 
           Jei ši politika nenustatyta, didelio kontrasto režimas yra išjungtas, kai prisijungimo ekranas rodomas pirmą kartą. Naudotojai gali bet kada įgalinti arba išjungti didelio kontrasto režimą, o jo būsena skirtingiems naudotojams prisijungimo ekrane bus vienoda.</translation>
 <translation id="8580857153747395000">Įspėti, kai apsilankoma svetainėse, neesančiose turinio paketuose.</translation>
+<translation id="350796261613621561">Įgalinti prižiūrimų naudotojų kūrimą.</translation>
 <translation id="602728333950205286">Numatytojo paieškos teikėjo intuityviosios paieškos URL</translation>
 <translation id="3030000825273123558">Įgalinti metrikos ataskaitų teikimą</translation>
 <translation id="6559057113164934677">Neleisti jokiai svetainei pasiekti kameros ir mikrofono</translation>
@@ -1155,6 +1161,9 @@
 <translation id="8864975621965365890">Nerodomas raginimas išjungti, kuris rodomas, kai svetainę pateikia „<ph name="PRODUCT_FRAME_NAME"/>“.</translation>
 <translation id="3264793472749429012">Numatytojo paieškos teikėjo koduotės</translation>
 <translation id="285480231336205327">Įgalinti didelio kontrasto būseną</translation>
+<translation id="5366977351895725771">Jei ši politika negalioja, šis naudotojas negalės kurti prižiūrimų naudotojų. Visi esami naudotojai bus vis tiek pasiekiami.
+
+          Jei ši politika galioja arba yra nesukonfigūruota, šis naudotojas gali kurti ir tvarkyti prižiūrimus naudotojus.</translation>
 <translation id="8101760444435022591">Atsiradus programiniam gedimui, prisijungus atliekami panaikinimo patikrinimai neužtikrina tinkamo saugumo, todėl jie pagal numatytuosius nustatymus neleidžiami 19 ir naujesnių versijų „<ph name="PRODUCT_NAME"/>“. Nustačius šią politiką į „true“ (tiesa), atkuriama ankstesnė elgsena ir atliekami OCSP / CRL patikrinimai prisijungus.
 
       Nenustačius politikos arba nustačius į „false“ (netiesa), „Chrome“ neatlieka panaikinimo patikrinimų prisijungus 19 ir naujesnių versijų „Chrome“.</translation>
diff --git a/chrome/app/policy/policy_templates_lv.xtb b/chrome/app/policy/policy_templates_lv.xtb
index 5023c93..52c011c 100644
--- a/chrome/app/policy/policy_templates_lv.xtb
+++ b/chrome/app/policy/policy_templates_lv.xtb
@@ -90,6 +90,11 @@
 
       Ja tā nav iestatīta, vai nu lietotājam var tikt vaicāts, vai importēt, vai arī importēšana var notikt automātiski.</translation>
 <translation id="5330684698007383292">Atļauja produktam <ph name="PRODUCT_FRAME_NAME"/> apstrādāt tālāk norādītos satura veidus</translation>
+<translation id="6647965994887675196">Iestatot vērtību uz “true”, var tikt veidoti un izmantoti uzraudzītie lietotāju konti.
+
+          Ja vērtība tiek iestatīta uz “false” vai arī netiek konfigurēta, uzraudzīto lietotāju kontu veidošana un pieteikšanās tiks atspējota. Visi esošie uzraudzītie lietotāju konti tiks slēpti.
+
+          PIEZĪME. Noklusējuma darbības klientu un uzņēmumu ierīcēs atšķiras: klientu ierīcēs uzraudzītie lietotāju konti pēc noklusējuma ir iespējoti, taču uzņēmumu ierīcēs — atspējoti.</translation>
 <translation id="5469825884154817306">Bloķē attēlus šajās vietnēs</translation>
 <translation id="8412312801707973447">Vai tiek veiktas OCSP/CRL pārbaudes tiešsaistē</translation>
 <translation id="6649397154027560979">Šīs politikas darbība ir pārtraukta. Lūdzu, tās vietā izmantojiet politiku URLBlacklist.
@@ -1120,6 +1125,7 @@
 
           Ja šī politika nav iestatīta, augsta kontrasta režīms ir atspējots, kad pirmo reizi tiek parādīts pieteikšanās ekrāns. Lietotājs var jebkurā brīdī iespējot vai atspējot augsta kontrasta režīmu, un tā statuss pieteikšanās ekrānā tiek saglabāts visiem lietotājiem.</translation>
 <translation id="8580857153747395000">Brīdināt, kad tiek apmeklētas satura pakotnēs neiekļautas vietnes.</translation>
+<translation id="350796261613621561">Iespējot uzraudzīto lietotāju kontu veidošanu</translation>
 <translation id="602728333950205286">Noklusējuma meklētājprogrammas dinamisko mekl. rezultātu URL</translation>
 <translation id="3030000825273123558">Iespējot metrikas ziņošanu</translation>
 <translation id="6559057113164934677">Neļaut nevienai vietnei piekļūt kamerai un mikrofonam</translation>
@@ -1145,6 +1151,9 @@
 <translation id="8864975621965365890">Aizliedz noraidīšanas uzvedni, kas tiek parādīta, ja vietni renderē spraudnis <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Noklusējuma meklētājprogrammas kodējumi</translation>
 <translation id="285480231336205327">Iespējot augsta kontrasta režīmu</translation>
+<translation id="5366977351895725771">Iestatot vērtību uz “false”, šim lietotājam tiks atspējota iespēja veidot uzraudzītos lietotāju kontus. Visi esošie uzraudzītie lietotāju konti joprojām būs pieejami.
+
+          Ja vērtība tiek iestatīta uz “true” vai netiek konfigurēta, šis lietotājs var veidot un pārvaldīt uzraudzītos lietotāju kontus.</translation>
 <translation id="8101760444435022591">Ņemot vērā to, ka pastāvīgas atteices atsaukšanas pārbaudes tiešsaistē nenodrošina nevienu efektīvu drošības priekšrocību, tās tiek atspējotas pēc noklusējuma produkta <ph name="PRODUCT_NAME"/> 19. vai jaunākā versijā. Iestatot šo politiku uz Patiesa, tiek atjaunota iepriekšējā darbība un tiek veiktas OCSP/CRL pārbaudes tiešsaistē.
 
       Ja politika netiek iestatīta vai iestatīta uz Aplama, pārlūks Chrome neveic atsaukšanas pārbaudes tiešsaistē pārlūka Chrome 19. vai jaunākā versijā.</translation>
diff --git a/chrome/app/policy/policy_templates_ml.xtb b/chrome/app/policy/policy_templates_ml.xtb
index 8e48af4..359ba90 100644
--- a/chrome/app/policy/policy_templates_ml.xtb
+++ b/chrome/app/policy/policy_templates_ml.xtb
@@ -88,6 +88,11 @@
 
       ഇത് സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ, അത് ഇംപോർട്ട് ചെയ്യണോ അല്ലെങ്കിൽ ഇംപോർട്ട് ചെയ്യൽ യാന്ത്രികമായി സംഭവിക്കേണ്ടതുണ്ടോ എന്ന് ഉപയോക്താവിനോട് ചോദിച്ചേക്കാം.</translation>
 <translation id="5330684698007383292">ഇനിപ്പറയുന്ന ഉള്ളടക്ക തരങ്ങള്‍ കൈകാര്യം ചെയ്യാന്‍ <ph name="PRODUCT_FRAME_NAME"/> എന്നതിനെ അനുവദിക്കുക</translation>
+<translation id="6647965994887675196">true എന്നതായി സജ്ജമാക്കുകയാണെങ്കിൽ, സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താക്കളെ സൃഷ്‌ടിക്കാനും ഉപയോഗിക്കാനുമാകും.
+
+          false എന്നതായി സജ്ജമാക്കുകയോ കോൺഫിഗർ ചെയ്യാതിരിക്കുകയോ ആണെങ്കിൽ, സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താവിനെ സൃഷ്‌ടിക്കലും ലോഗിൻ ചെയ്യലും പ്രവർത്തനരഹിതമാകും. നിലവിലുള്ള എല്ലാ സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താക്കളും മറയ്‌ക്കപ്പെടും.
+
+          ശ്രദ്ധിക്കുക: ഉപയോക്തൃ, എന്റർപ്രൈസ് ഉപകരണങ്ങൾക്കുള്ള സ്ഥിര രീതി വ്യത്യസ്‌തമാണ്: ഉപയോക്തൃ ഉപകരണങ്ങളിൽ സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താക്കളെ സ്ഥിരമായി പ്രവർത്തനക്ഷമമാക്കിയിരിക്കുന്നു, എന്നാൽ എന്റർപ്രൈസ് ഉപകരണങ്ങളിൽ അവ സ്ഥിരമായി പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു.</translation>
 <translation id="5469825884154817306">ഈ സൈറ്റുകളില്‍ ഇമേജ് തടയുക</translation>
 <translation id="8412312801707973447">ഓൺലൈൻ OCSP/CRL ചെക്കുകൾ നടപ്പിലാക്കിയിട്ടുണ്ടോ</translation>
 <translation id="6649397154027560979">ഈ നയം ഒഴിവാക്കിയെങ്കിൽ പകരം URLBlacklist ഉപയോഗിക്കുക.
@@ -1127,6 +1132,7 @@
 
           ഈ നയം സജ്ജമാക്കാതെ വിടുകയാണെങ്കിൽ, ആദ്യമായി ലോഗിൻ സ്‌ക്രീൻ ദൃശ്യമാകുമ്പോൾ ഉയർന്ന ദൃശ്യ തീവ്രത മോഡ് പ്രവർത്തനരഹിതമാകുന്നു. ഉപയോക്താക്കൾക്ക് ഏതുസമയത്തും ഉയർന്ന ദൃശ്യ തീവ്രത മോഡ് പ്രവർത്തനക്ഷമമാക്കാനോ പ്രവർത്തനരഹിതമാക്കാനോ കഴിയും ഒപ്പം ലോഗിൻ സ്‌ക്രീനിൽ ഉപയോക്താക്കൾക്കിടയിൽ അതിന്റെ നില തുടരുകയും ചെയ്യും.</translation>
 <translation id="8580857153747395000">ഉള്ളടക്ക പാക്കുകളുടെ പുറത്തുള്ള സൈറ്റുകൾ സന്ദർശിക്കുമ്പോൾ മുന്നറിയിപ്പ് നൽകുക.</translation>
+<translation id="350796261613621561">സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താക്കളെ സൃഷ്‌ടിക്കൽ പ്രവർത്തനക്ഷമമാക്കുക.</translation>
 <translation id="602728333950205286">സ്ഥിരസ്ഥിതി തിരയല്‍ ദാതാവിന്‍റെ തല്‍ക്ഷണ URL</translation>
 <translation id="3030000825273123558">അളവുകൾ റിപ്പോർട്ടുചെയ്യൽ പ്രാപ്‌തമാക്കുക</translation>
 <translation id="6559057113164934677">എന്റെ ക്യാമറയും മൈക്രോഫോണും ആക്‌സസ്സുചെയ്യാൻ ഒരു സൈറ്റിനെയും അനുവദിക്കരുത്</translation>
@@ -1152,6 +1158,9 @@
 <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME"/>, ഒരു സൈറ്റ് റെൻഡർ ചെയ്‌തിരിക്കുമ്പോൾ ദൃശ്യമാകുന്ന നിരസിക്കൽ ആവശ്യം നിയന്ത്രിക്കുക.</translation>
 <translation id="3264793472749429012">സ്ഥിരസ്ഥിതി തിരയല്‍ ദാതാവിന്‍റെ എന്‍കോഡിംഗുകള്‍</translation>
 <translation id="285480231336205327">ഉയർന്ന ദൃശ്യ തീവ്രത മോഡ് പ്രാപ്‌തമാക്കുക</translation>
+<translation id="5366977351895725771">false എന്നതായി സജ്ജമാക്കുകയാണെങ്കിൽ, ഈ ഉപയോക്താവ് മുഖേന സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താവിനെ സൃഷ്‌ടിക്കൽ പ്രവർത്തനരഹിതമാകും. നിലവിലുള്ള സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താക്കളെല്ലാം തുടർന്നും ലഭ്യമാകും.
+
+          true എന്നതായി സജ്ജമാക്കുകയോ കോൺഫിഗർ ചെയ്യാതിരിക്കുകയോ ആണെങ്കിൽ, ഈ ഉപയോക്താവിന് സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താക്കളെ സൃഷ്‌ടിക്കാനും നിയന്ത്രിക്കാനും കഴിയും.</translation>
 <translation id="8101760444435022591">സോഫ്റ്റ്‌വെയർ പരാജയം എന്ന വസ്‌തുതയുടെ വെളിച്ചത്തില്‍, ഓണ്‍‌ലൈനായുള്ള അസാധുവാക്കൽ പരിശോധനകൾ ഫലപ്രദമായ സുരക്ഷാ പ്രയോജനം നൽകാത്തതിനാൽ, <ph name="PRODUCT_NAME"/> പതിപ്പ് 19-ലും അതിന് ശേഷം ഇറങ്ങിയ പതിപ്പുകളിലും അവ സ്ഥിരസ്ഥിതിയായി അപ്രാപ്‌തമാക്കി. ഈ നയം ശരി എന്നതിലേക്ക് ക്രമീകരിക്കുന്നതിലൂടെ, മുൻ പ്രവർത്തനരീതി പുനഃസ്ഥാപിക്കുകയും ഓൺലൈൻ OCSP/CRL പരിശോധനകൾ നടപ്പിലാക്കുകയും ചെയ്യും.
 
       ഈ നയം സജ്ജീകരിക്കാത്ത നിലയിലാണെങ്കിലോ തെറ്റ് എന്നതിലേക്ക് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിലോ, Chrome 19-ലും അതിന് ശേഷം ഇറങ്ങിയ പതിപ്പുകളിലും ഓണ്‍‌ലൈന്‍ അസാധുവാക്കൽ പരിശോധനകൾ Chrome നടപ്പിലാക്കുകയില്ല.</translation>
diff --git a/chrome/app/policy/policy_templates_mr.xtb b/chrome/app/policy/policy_templates_mr.xtb
index 75867fc..1eb05a0 100644
--- a/chrome/app/policy/policy_templates_mr.xtb
+++ b/chrome/app/policy/policy_templates_mr.xtb
@@ -83,6 +83,11 @@
 अक्षम केल्यास, मुख्‍य पृष्‍ठ आयात केले जात नाही.
 ते सेट केले नसल्यास, वापरकर्त्याला आयात करायचे की किंवा ‍नाही, किंवा आयात करणे स्वयंचलितपणे होण्याबाबत विचारले जाते.</translation>
 <translation id="5330684698007383292">खालील सामग्री प्रकार हाताळण्यास <ph name="PRODUCT_FRAME_NAME"/> ला अनुमती द्या</translation>
+<translation id="6647965994887675196">सत्य वर सेट केल्यास, पर्यवेक्षी वापरकर्ते तयार केले आणि वापरले जाऊ शकतात.
+
+          असत्य वर सेट केल्यास किंवा कॉन्फिगर केले नसल्यास, पर्यवेक्षी-वापरकर्ता निर्मिती आणि लॉग इन अक्षम होईल. सर्व विद्यमान पर्यवेक्षी वापरकर्ते लपविले जातील.
+
+          टीप: ग्राहकाचे डीफॉल्ट वर्तन आणि एंटरप्राइज डिव्हाइसेसमध्ये फरक असतो: ग्राहक डिव्हाइसेसवर पर्यवेक्षी वापरकर्ते डीफॉल्टनुसार सक्षम केले जातात, परंतु एंटरप्राइज डिव्हाइसेसवर ते डीफॉल्टनुसार अक्षम केले जातात.</translation>
 <translation id="5469825884154817306">या साइटवरील प्रतिमा अवरोधित करा</translation>
 <translation id="8412312801707973447">ऑनलाइन OCSP/CRL तपासण्या पूर्ण केल्या आहेत किंवा नाहीत</translation>
 <translation id="6649397154027560979">हे धोरण बहिष्कृत करण्यात आले आहे, कृपया त्याऐवजी URLBlacklist वापरा.
@@ -1076,6 +1081,7 @@
 
           हे धोरण सेट न करता सोडल्यास, जेव्हा लॉगिन स्क्रीन प्रथम दर्शविली जाते तेव्हा उच्च तीव्रता मोड अक्षम होतो. वापरकर्ते कोणत्याही वेळी उच्च तीव्रता मोड आणि लॉगिन स्क्रीनवरील वापरकर्त्यांमध्ये कायम असलेली त्याची स्थिती सक्षम किंवा अक्षम करू शकतात.</translation>
 <translation id="8580857153747395000">सामग्री पॅक बाहेर साइटना भेट देताना चेतावणी द्या.</translation>
+<translation id="350796261613621561">पर्यवेक्षी वापरकर्त्यांची निर्मिती सक्षम करा.</translation>
 <translation id="602728333950205286">डीफॉल्ट शोध प्रदाता झटपट URL</translation>
 <translation id="3030000825273123558">मेट्रिक्स अहवाल सक्षम करा</translation>
 <translation id="6559057113164934677">कॅमेरा आणि मायक्रोफोनवर प्रवेश करण्यास कोणत्याही साइटला अनुमती देऊ नका</translation>
@@ -1101,6 +1107,9 @@
 <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME"/> द्वारे एखादी साइट पूर्तता करते तेव्हा दिसत असलेली नाकारण्याची सूचना दाबते.</translation>
 <translation id="3264793472749429012">डीफॉल्ट शोध प्रदाता एन्कोडिंग</translation>
 <translation id="285480231336205327">उच्च तीव्रता मोड सक्षम करा</translation>
+<translation id="5366977351895725771">असत्य वर सेट केल्यास, या वापरकर्त्याद्वारे पर्यवेक्षी-वापरकर्ता निर्मिती अक्षम केली जाईल. कोणतेही विद्यमान पर्यवेक्षी वापरकर्ते तरीही उपलब्ध राहतील.
+
+          सत्य वर सेट केल्यास किंवा कॉन्फिगर केले नसल्यास, पर्यवेक्षी वापरकर्ते या वापरकर्त्याद्वारे तयार केले आणि व्यवस्थापित केले जाऊ शकतात.</translation>
 <translation id="8101760444435022591">सॉफ्‍ट-फेल, ऑनलाइन रद्दीकरण तपासण्‍या कोणतेही प्रभावी सुरक्षा लाभ देत नाहीत या तथ्‍याच्या प्रकाशात, त्या डीफॉल्ट रुपात <ph name="PRODUCT_NAME"/> आवृत्ती 19 आणि त्यानंतरच्या मध्‍ये ते अक्षम करण्‍यात आले आहे. हे धोरण लागू होण्‍यास सेट केल्यास, मागील वर्तन पुनर्संचयित केले जाते आणि ऑनलाइन OCSP/CRL तपासण्‍या केल्या जातात. 
 
       धोरण सेट केले नसल्यास, किंवा चुकीचे वर सेट केल्यास, Chrome हे Chrome 19 आणि नंतरच्यामध्‍ये ऑनलाइन निरस्त करण्याच्या तपासण्या करणार नाही.</translation>
diff --git a/chrome/app/policy/policy_templates_ms.xtb b/chrome/app/policy/policy_templates_ms.xtb
index fe30be4..d870393 100644
--- a/chrome/app/policy/policy_templates_ms.xtb
+++ b/chrome/app/policy/policy_templates_ms.xtb
@@ -87,6 +87,11 @@
 
       Jika ia tidak ditetapkan, pengguna mungkin ditanya sama ada mahu mengimport atau tidak, atau pengimportan mungkin berlaku secara automatik.</translation>
 <translation id="5330684698007383292">Benarkan <ph name="PRODUCT_FRAME_NAME"/> mengendalikan jenis kandungan berikut</translation>
+<translation id="6647965994887675196">Jika ditetapkan kepada benar, pengguna diselia boleh dihasilkan dan digunakan.
+
+          Jika ditetapkan kepada palsu atau tidak dikonfigurasi, penghasilan dan log masuk pengguna diselia akan dilumpuhkan. Semua pengguna diselia yang sedia ada akan disembunyikan.
+
+          PERHATIAN: Gelagat lalai untuk peranti pengguna dan perusahaan berbeza: pada peranti pengguna, pengguna diselia didayakan secara lalai tetapi pada peranti perusahaan, pengguna diselia dilumpuhkan secara lalai.</translation>
 <translation id="5469825884154817306">Sekat imej pada tapak ini</translation>
 <translation id="8412312801707973447">Sama ada semakan OCSP/CRL dalam talian dilaksanakan</translation>
 <translation id="6649397154027560979">Dasar ini tidak akan digunakan lagi, sebaliknya, sila gunakan URLBlacklist.
@@ -1126,6 +1131,7 @@
 
           Jika dasar ini dibiarkan tanpa ditetapkan, mod kontras tinggi dilumpuhkan apabila skrin log masuk mula-mula dipaparkan. Pengguna boleh mendayakan atau melumpuhkan mod kontras tinggi pada bila-bila masa dan statusnya pada skrin log masuk yang berterusan antara pengguna.</translation>
 <translation id="8580857153747395000">Beri amaran apabila melawat tapak web di luar pek kandungan.</translation>
+<translation id="350796261613621561">Dayakan penghasilan pengguna diselia.</translation>
 <translation id="602728333950205286">URL semerta pembekal carian lalai</translation>
 <translation id="3030000825273123558">Dayakan laporan metrik</translation>
 <translation id="6559057113164934677">Jangan benarkan mana-mana tapak mengakses kamera dan mikrofon</translation>
@@ -1151,6 +1157,9 @@
 <translation id="8864975621965365890">Menyekat gesaan penolakan yang dipaparkan apabila tapak dipaparkan oleh <ph name="PRODUCT_FRAME_NAME"/> .</translation>
 <translation id="3264793472749429012">Pengekodan pembekal carian lalai</translation>
 <translation id="285480231336205327">Dayakan mod kontras tinggi</translation>
+<translation id="5366977351895725771">Jika ditetapkan kepada palsu, penghasilan pengguna diselia oleh pengguna ini akan dilumpuhkan. Mana-mana pengguna diselia yang sedia ada masih akan tersedia.
+
+          Jika ditetapkan kepada benar atau tidak dikonfigurasi, pengguna diselia boleh dihasilkan dan diuruskan oleh pengguna ini.</translation>
 <translation id="8101760444435022591">Berasaskan fakta bahawa semakan kegagalan lembut, pembatalan dalam talian tidak memberikan sebarang manfaat keselamatan yang berkesan, semakan ini dilumpuhkan secara lalai dalam <ph name="PRODUCT_NAME"/> versi 19 dan yang lebih baharu. Dengan menetapkan dasar ini kepada benar, gelagat terdahulu dipulihkan dan semakan OCSP/CRL dalam talian akan dilaksanakan.
 
       Jika dasar ini tidak ditetapkan atau ditetapkan kepada palsu, maka Chrome tidak akan melaksanakan semakan pembatalan dalam talian dalam Chrome 19 dan yang lebih baharu.</translation>
diff --git a/chrome/app/policy/policy_templates_nl.xtb b/chrome/app/policy/policy_templates_nl.xtb
index a187f08..72d4261 100644
--- a/chrome/app/policy/policy_templates_nl.xtb
+++ b/chrome/app/policy/policy_templates_nl.xtb
@@ -86,6 +86,11 @@
 
       Als dit beleid niet is ingesteld, kan de gebruiker worden gevraagd of deze wil importeren, of wordt er automatisch geïmporteerd.</translation>
 <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME"/> toestaan de volgende soorten inhoud te verwerken.</translation>
+<translation id="6647965994887675196">Als dit wordt ingesteld op 'true' (waar), kunnen bewaakte gebruikers worden gemaakt en gebruikt.
+
+          Als dit wordt ingesteld op 'false' (niet waar) of niet wordt geconfigureerd, wordt het maken van en inloggen voor bewaakte gebruikers uitgeschakeld. Alle bestaande bewaakte gebruikers worden verborgen.
+
+          OPMERKING: het standaardgedrag voor zakelijke en consumentenapparaten verschilt: op consumentenapparaten zijn bewaakte gebruikers standaard ingeschakeld, maar op zakelijke apparaten zijn ze standaard uitgeschakeld.</translation>
 <translation id="5469825884154817306">Afbeeldingen blokkeren op deze sites</translation>
 <translation id="8412312801707973447">Uitvoer van online OCSP/CRL-controles</translation>
 <translation id="6649397154027560979">Dit  beleid is verouderd, gebruik URLBlacklist.
@@ -593,7 +598,7 @@
           Als dit beleid niet wordt ingesteld, wordt de algemene standaardwaarde gebruikt voor alle sites, op basis van het beleid 'DefaultPluginsSetting' (als dit is ingesteld) of anders op basis van de configuratie van de gebruiker.</translation>
 <translation id="4423597592074154136">Proxyinstellingen handmatig specificeren</translation>
 <translation id="209586405398070749">Stabiel kanaal</translation>
-<translation id="8170878842291747619">Hiermee wordt de geïntegreerde service Google Vertalen ingeschakeld in <ph name="PRODUCT_NAME"/>.
+<translation id="8170878842291747619">Hiermee wordt de geïntegreerde service Google Translate ingeschakeld in <ph name="PRODUCT_NAME"/>.
 
       Als u deze instelling inschakelt, wordt in <ph name="PRODUCT_NAME"/> een geïntegreerde werkbalk weergegeven waarin de gebruiker wordt gevraagd of deze de pagina wil laten vertalen (indien van toepassing).
 
@@ -1121,6 +1126,7 @@
 
           Als u het beleid niet instelt, wordt de modus voor hoog contrast uitgeschakeld wanneer het inlogscherm voor de eerste keer wordt weergegeven. Gebruikers kunnen de modus voor hoog contrast op elk moment in- of uitschakelen en de status op het inlogscherm is permanent tussen gebruikers.</translation>
 <translation id="8580857153747395000">Waarschuwen als sites worden bezocht die zich niet in de inhoudspakketten bevinden.</translation>
+<translation id="350796261613621561">Maken van bewaakte gebruikers inschakelen.</translation>
 <translation id="602728333950205286">Instant-URL voor standaardzoekprovider</translation>
 <translation id="3030000825273123558">Rapportage van statistieken inschakelen</translation>
 <translation id="6559057113164934677">Niet toestaan dat sites toegang krijgen tot de camera en microfoon</translation>
@@ -1146,6 +1152,9 @@
 <translation id="8864975621965365890">Hiermee onderdrukt u de prompt die wordt weergegeven wanneer een site wordt weergegeven door <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Coderingen voor standaardzoekprovider</translation>
 <translation id="285480231336205327">Modus voor hoog contrast inschakelen</translation>
+<translation id="5366977351895725771">Als dit is ingesteld op 'false' (niet waar) wordt het maken van bewaakte gebruikers uitgeschakeld voor deze gebruiker. Bestaande bewaakte gebruikers blijven beschikbaar.
+
+          Als dit is ingesteld op 'true' (waar) of niet is geconfigureerd, kunnen bewaakte gebruikers worden gemaakt en beheerd door deze gebruiker.</translation>
 <translation id="8101760444435022591">Omdat soft-fail, online certificaatintrekkingscontroles de veiligheid niet aantoonbaar verhogen, worden deze standaard uitgeschakeld in versie 19 en hoger van <ph name="PRODUCT_NAME"/>. Door dit beleid op 'true' in te stellen, wordt het eerdere gedrag hersteld en worden online OCSP/CRL-controles uitgevoerd.
 
       Als het beleid niet is ingesteld, of is ingesteld op 'false', voert Chrome geen online intrekkingscontroles uit in Chrome 19 en hoger.</translation>
diff --git a/chrome/app/policy/policy_templates_no.xtb b/chrome/app/policy/policy_templates_no.xtb
index 7794405..51db47b 100644
--- a/chrome/app/policy/policy_templates_no.xtb
+++ b/chrome/app/policy/policy_templates_no.xtb
@@ -77,6 +77,11 @@
 <translation id="3816312845600780067">Aktiver hurtigtasten for avbrytelse av automatisk pålogging</translation>
 <translation id="3214164532079860003">Denne retningslinjen tvinger startsiden til å bli importert fra nåværende standard nettleser hvis den er aktivert. Hvis retningslinjen er deaktivert, importeres ikke startsiden. Hvis retningslinjen ikke er angitt, er det mulig at brukeren får spørsmål om hvorvidt vedkommende ønsker å importere, eller så kan importeringen skje automatisk.</translation>
 <translation id="5330684698007383292">Gi <ph name="PRODUCT_FRAME_NAME"/> tillatelse til å håndtere de følgende innholdstypene</translation>
+<translation id="6647965994887675196">Hvis angitt til «true», kan overvåkede brukere opprettes og brukes.
+
+          Hvis angitt til «false» eller ikke konfigurert, er oppretting og bruk av overvåkede brukere deaktivert. Alle eksisterende overvåkede brukere skjules.
+
+          MERK: Standardatferden for forbruker- og bedriftsenheter er ikke den samme. På forbrukerenheter er overvåkede brukere aktivert som standard, men på bedriftsenheter er de deaktivert.</translation>
 <translation id="5469825884154817306">Blokkér bilder på disse nettstedene</translation>
 <translation id="8412312801707973447">Angir om OCSP/CRL-kontroller utføres på nettet</translation>
 <translation id="6649397154027560979">Denne innstillingen er avviklet. Bruk URLBlacklist i stedet.
@@ -1039,6 +1044,7 @@
 
           Hvis denne innstillingen angis, deaktiveres høykontrastmodus når påloggingssiden vises for første gang. Brukere kan aktivere eller deaktivere høykontrastmodus når som helst, og dens status på påloggingssiden forblir den samme mellom brukere.</translation>
 <translation id="8580857153747395000">Advarsel når nettsteder som ikke inngår i innholdspakker åpnes.</translation>
+<translation id="350796261613621561">Aktiver oppretting av overvåkede brukere.</translation>
 <translation id="602728333950205286">Umiddelbar nettadresse for standard søkeleverandør</translation>
 <translation id="3030000825273123558">Aktiver rapportering av beregninger</translation>
 <translation id="6559057113164934677">Forby nettsteder fra å bruke kameraet og mikrofonen min</translation>
@@ -1064,6 +1070,9 @@
 <translation id="8864975621965365890">Ignorerer avslagsforespørselen som vises når et nettsted gjengis av <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Kodinger av standard søkeleverandør</translation>
 <translation id="285480231336205327">Aktiver modus for høy kontrast</translation>
+<translation id="5366977351895725771">Hvis angitt til «false» kan ikke denne brukeren opprette overvåkede brukere. Eksisterende overvåkede brukere er fortsatt tilgjengelige.
+
+          Hvis angitt til «true» eller ikke konfigurert, kan denne brukeren opprette og administrere overvåkede brukere.</translation>
 <translation id="8101760444435022591">Som et resultat av at opphevelsekontroller for myke systemstopp ikke gir noen effektiv sikkerhetsfordel, blir de som standard deaktivert for versjon 19 og nyere av <ph name="PRODUCT_NAME"/>. Hvis du angir denne innstillingen som Sann, gjenopprettes tidligere atferd. I tillegg blir OCSP/CRL-kontroller på nettet utført.</translation>
 <translation id="5469484020713359236">Gjør at du kan angi en liste over nettadressemønstre som spesifiserer hvilke nettsteder som får angi informasjonskapsler.
 
diff --git a/chrome/app/policy/policy_templates_pl.xtb b/chrome/app/policy/policy_templates_pl.xtb
index b8191be..0ced8ea 100644
--- a/chrome/app/policy/policy_templates_pl.xtb
+++ b/chrome/app/policy/policy_templates_pl.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">Włącz automatyczne logowanie skrótem klawiszowym</translation>
 <translation id="3214164532079860003">W przypadku włączenia ta zasada wymusza zaimportowanie strony startowej z bieżącej przeglądarki domyślnej. Jeśli zasada będzie wyłączona, strona startowa nie zostanie zaimportowana. Jeśli ta zasada nie zostanie ustawiona, użytkownik może zobaczyć pytanie, czy zaimportować stronę, lub importowanie może odbyć się automatycznie.</translation>
 <translation id="5330684698007383292">Zezwalaj <ph name="PRODUCT_FRAME_NAME"/> na obsługę tych typów treści</translation>
+<translation id="6647965994887675196">Jeśli ta zasada ma wartość „prawda”, można tworzyć użytkowników nadzorowanych i logować się jako oni.
+
+          Jeśli ma ona wartość „fałsz” lub nie jest skonfigurowana, tworzenie użytkowników nadzorowanych i logowanie się jako oni jest wyłączone. Wszyscy istniejący użytkownicy nadzorowani zostają ukryci.
+
+          UWAGA: działanie domyślne różni się na urządzeniach dla użytkowników indywidualnych i dla firm. Na tych pierwszych funkcja użytkowników nadzorowanych jest domyślnie włączona, a na drugich – wyłączona.</translation>
 <translation id="5469825884154817306">Blokuj grafiki w tych witrynach</translation>
 <translation id="8412312801707973447">Czy wykonywane jest sprawdzanie OCSP/CRL online</translation>
 <translation id="6649397154027560979">Ta zasada została wycofana, zamiast niej użyj URLBlacklist.
@@ -870,6 +875,7 @@
 
           Jeśli zasada pozostanie nieustawiona, po pierwszym wyświetleniu ekranu logowania tryb wysokiego kontrastu jest wyłączony. Użytkownicy mogą go w każdej chwili włączyć lub wyłączyć i jego stan na ekranie logowania jest trwały dla wszystkich użytkowników.</translation>
 <translation id="8580857153747395000">Ostrzegaj przy odwiedzaniu witryn spoza pakietów treści.</translation>
+<translation id="350796261613621561">Włącz tworzenie użytkowników nadzorowanych.</translation>
 <translation id="602728333950205286">Adres URL wyszukiwania dynamicznego od domyślnego dostawcy wyszukiwania</translation>
 <translation id="3030000825273123558">Włącz raportowanie statystyk</translation>
 <translation id="6559057113164934677">Nie pozwalaj żadnym stronom na dostęp do kamery i mikrofonu</translation>
@@ -887,6 +893,9 @@
 <translation id="8864975621965365890">Pomija monit o odinstalowanie wyświetlany wtedy, gdy witryna jest renderowana przez <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Kodowania obsługiwane przez domyślnego dostawcę wyszukiwania</translation>
 <translation id="285480231336205327">Włącz tryb wysokiego kontrastu</translation>
+<translation id="5366977351895725771">Jeśli ta zasada ma wartość „fałsz”, ten użytkownik nie może tworzyć użytkowników nadzorowanych. Dotychczasowi użytkownicy nadzorowani będą nadal dostępni.
+
+          Jeśli ma ona wartość „prawda” lub nie jest skonfigurowana, ten użytkownik może tworzyć użytkowników nadzorowanych i zarządzać nimi.</translation>
 <translation id="8101760444435022591">Ponieważ sprawdzanie online, czy certyfikat nie został unieważniony (ignorowany z powodu błędu sieci) nie poprawia bezpieczeństwa, w <ph name="PRODUCT_NAME"/> 19 i nowszych wersjach jest domyślnie wyłączone. W przypadku włączenia tej zasady przywrócone zostanie wcześniejsze zachowanie i będzie wykonywane sprawdzanie OCSP/CRL online.
 
       Jeśli ta zasada nie zostanie ustawiona lub będzie wyłączona, Chrome w wersji 19 lub nowszej nie będzie sprawdzał unieważnień online.</translation>
diff --git a/chrome/app/policy/policy_templates_pt-BR.xtb b/chrome/app/policy/policy_templates_pt-BR.xtb
index c37e5c6..2cd5c13 100644
--- a/chrome/app/policy/policy_templates_pt-BR.xtb
+++ b/chrome/app/policy/policy_templates_pt-BR.xtb
@@ -71,6 +71,11 @@
 <translation id="3816312845600780067">Ativar atalho do teclado dp plano de salvação para login automático</translation>
 <translation id="3214164532079860003">Caso ativada, esta política força a página inicial a ser importada do navegador padrão atual. Se desativada, a página inicial não é importada. Caso não seja definida, o usuário pode ser solicitado a responder se deseja importar ou permitir a importação automática.</translation>
 <translation id="5330684698007383292">Permitir que o <ph name="PRODUCT_FRAME_NAME"/> trabalhe com os tipos de conteúdo a seguir</translation>
+<translation id="6647965994887675196">Se definida com verdadeira, será possível criar e utilizar usuários supervisionados.
+
+          Se definida como falsa ou não configurada, a criação e o login de usuários supervisionados serão desativados. Todos os usuários supervisionados existentes serão ocultos.
+
+          OBSERVAÇÃO: há uma diferença entre o comportamento padrão em dispositivos corporativos e de consumidores: em dispositivos de consumidores, os usuários supervisionados são ativados por padrão. Já em dispositivos corporativos, o padrão é os usuários supervisionados estarem desativados.</translation>
 <translation id="5469825884154817306">Bloquear imagens nestes sites</translation>
 <translation id="8412312801707973447">Define se as verificações on-line de OCSP/CRL devem ser executadas</translation>
 <translation id="6649397154027560979">Esta política teve o uso suspenso. Em vez dela, use URLBlacklist.
@@ -840,6 +845,7 @@
 
           Se esta política não for definida, o modo de alto contraste será desativado quando a tela de login for exibida pela primeira vez. Os usuários podem ativar ou desativar o modo de alto contraste a qualquer momento e seu status na tela de login continuará entre os usuários.</translation>
 <translation id="8580857153747395000">Avisar ao visitar sites fora de pacotes de conteúdo.</translation>
+<translation id="350796261613621561">Ativa a criação de usuários supervisionados.</translation>
 <translation id="602728333950205286">URL instantâneo do provedor de pesquisa padrão</translation>
 <translation id="3030000825273123558">Ativa relatórios de métricas</translation>
 <translation id="6559057113164934677">Não permitir que nenhum site acesse minha câmera e meu microfone</translation>
@@ -857,6 +863,9 @@
 <translation id="8864975621965365890">Remove a solicitação de recusa que aparece quando um site é processado pelo <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Codificações do provedor de pesquisa padrão</translation>
 <translation id="285480231336205327">Ativar modo de alto contraste</translation>
+<translation id="5366977351895725771">Se definida como falsa, a criação de usuários supervisionados por este usuário será desativada. Quaisquer usuários supervisionados existentes permanecerão disponíveis.
+
+          Se definida como verdadeira ou não configurada, este usuário poderá criar e gerenciar usuários supervisionados.</translation>
 <translation id="8101760444435022591">Levando em consideração que as verificações soft-fail de revogação on-line não oferecem qualquer benefício de segurança eficaz, elas são desativadas por padrão nas versões 19 e posteriores do <ph name="PRODUCT_NAME"/>. Ao configurar true para esta política, o comportamento anterior será restaurado e as verificações on-line de OCSP/CRL serão realizadas. Se essa política não for configurada, ou for configurada para como false, o Google Chrome não realizará verificações de revogação on-line no Google Chrome 19 e posteriores.</translation>
 <translation id="5469484020713359236">Permite que você defina uma lista de padrões de URL que especificam sites com permissão para definir cookies. Se esta política for deixada sem definição, o valor padrão global será utilizado para todos os sites a partir da política &quot;DefaultCookiesSetting&quot;, caso esta tenha sido definida, ou a partir das configurações pessoais do usuário, caso não tenha sido definida.</translation>
 <translation id="1504431521196476721">Declaração remota</translation>
diff --git a/chrome/app/policy/policy_templates_pt-PT.xtb b/chrome/app/policy/policy_templates_pt-PT.xtb
index 6743b90..9c3f716 100644
--- a/chrome/app/policy/policy_templates_pt-PT.xtb
+++ b/chrome/app/policy/policy_templates_pt-PT.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">Ativar o atalho de teclado de resgate para o início de sessão automático</translation>
 <translation id="3214164532079860003">Quando esta política está ativada, força a importação da página inicial a partir do navegador predefinido atual. Se estiver desativada, a página inicial não é importada. Se não estiver definida, o utilizador poderá ser questionado se pretende importá-la ou a importação poderá ocorrer automaticamente.</translation>
 <translation id="5330684698007383292">Permitir que o <ph name="PRODUCT_FRAME_NAME"/> processe os seguintes tipos de conteúdo</translation>
+<translation id="6647965994887675196">Se definido como &quot;true&quot;, é possível criar e utilizar utilizadores supervisionados.
+
+          Se definido como &quot;false&quot; ou não configurado, é desativada a criação e o início de sessão de utilizadores supervisionados. Todos os utilizadores supervisionados ficarão ocultos.
+
+          NOTA: O comportamento predefinido para dispositivos empresariais e de consumidor difere: em dispositivos de consumidor, os utilizadores supervisionados estão ativados por predefinição, enquanto que nos dispositivos empresariais estão desativados por predefinição.</translation>
 <translation id="5469825884154817306">Bloquear imagens nesses sites</translation>
 <translation id="8412312801707973447">Se são ou não efetuadas verificações OCSP/CRL on-line</translation>
 <translation id="6649397154027560979">Esta política está desatualizada. Em vez disso, utilize URLBlacklist.
@@ -887,6 +892,7 @@
 
           Se esta política não for definida, o modo de alto contraste é desativado quando o ecrã de início de sessão é mostrado pela primeira vez. Os utilizadores podem ativar ou desativar o modo de alto contraste a qualquer momento e o seu estado no ecrã de início de sessão persiste entre utilizadores.</translation>
 <translation id="8580857153747395000">Avisar quando estiver a visitar sites fora dos pacotes de conteúdo.</translation>
+<translation id="350796261613621561">Permitir a criação de utilizadores supervisionados.</translation>
 <translation id="602728333950205286">URL instantâneo do fornecedor de pesquisas predefinido</translation>
 <translation id="3030000825273123558">Ativar relatório de métricas</translation>
 <translation id="6559057113164934677">Não permitir que nenhum site aceda à câmara e microfone</translation>
@@ -904,6 +910,9 @@
 <translation id="8864975621965365890">Suprime o pedido de recusa que aparece quando um site é convertido por <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Codificações do fornecedor de pesquisas predefinido</translation>
 <translation id="285480231336205327">Ativar modo de alto contraste</translation>
+<translation id="5366977351895725771">Se definido como &quot;false&quot;, é desativada a criação de utilizadores supervisionados por parte deste utilizador. Todos os utilizadores supervisionados continuarão disponíveis.
+
+          Se definido como &quot;true&quot; ou não configurado, é possível criar e gerir utilizadores supervisionados por parte deste utilizador.</translation>
 <translation id="8101760444435022591">Uma vez que as verificações de revogação on-line &quot;softfail&quot; não oferecem nenhum benefício de segurança eficaz, estas estão desativadas por predefinição na versão 19 do <ph name="PRODUCT_NAME"/> e posterior. Ao definir esta política como verdadeira, o comportamento anterior é restaurado e são efetuadas as verificações OCSP/CRL on-line.
 
       Se a política não estiver definida ou estiver definida como falsa, o Chrome não irá efetuar verificações de revogação on-line no Chrome 19 e posterior.</translation>
diff --git a/chrome/app/policy/policy_templates_ro.xtb b/chrome/app/policy/policy_templates_ro.xtb
index 9ab07a9..8762b0b 100644
--- a/chrome/app/policy/policy_templates_ro.xtb
+++ b/chrome/app/policy/policy_templates_ro.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">Activați comanda rapidă de la tastatură de rezervă pentru conectarea automată</translation>
 <translation id="3214164532079860003">Dacă este activată, această politică forțează importarea paginii de pornire din browserul prestabilit actual. Dacă este dezactivată, pagina de pornire nu este importată. Dacă nu este setată, este posibil ca utilizatorul să fie întrebat dacă se efectuează importarea sau aceasta ar putea avea loc în mod automat.</translation>
 <translation id="5330684698007383292">Permiteți ca <ph name="PRODUCT_FRAME_NAME"/> să gestioneze următoarele tipuri de conținut</translation>
+<translation id="6647965994887675196">Dacă această politică este activată, pot fi creați și folosiți utilizatori monitorizați.
+
+          Dacă această politică nu este activată sau configurată, crearea și conectarea utilizatorilor monitorizați vor fi dezactivate. Toți utilizatorii monitorizați existenți vor fi ascunși.
+
+          NOTĂ: comportamentul prestabilit pentru dispozitivele destinate consumatorilor și întreprinderilor diferă: utilizatorii monitorizați sunt activați în mod prestabilit pe dispozitivele destinate consumatorilor, iar pe dispozitivele destinate întreprinderilor, aceștia sunt dezactivați în mod prestabilit.</translation>
 <translation id="5469825884154817306">Blocați imagini de pe aceste site-uri</translation>
 <translation id="8412312801707973447">Această politică stabilește dacă sunt efectuate verificări OCSP/CRL online</translation>
 <translation id="6649397154027560979">Această politică este învechită. Utilizați, în schimb, URLBlacklist.
@@ -884,6 +889,7 @@
 
           Dacă această politică nu este configurată, modul de contrast ridicat este dezactivat la afișarea inițială a ecranului de conectare. Utilizatorii pot oricând să activeze sau să dezactiveze modul de contrast ridicat, iar starea sa pe ecranul de conectare persistă de la un utilizator la altul.</translation>
 <translation id="8580857153747395000">Utilizatorii sunt avertizați când accesează site-uri din afara pachetelor de conținut.</translation>
+<translation id="350796261613621561">Permiteți crearea utilizatorilor monitorizați.</translation>
 <translation id="602728333950205286">Adresa URL instant a furnizorului de căutare prestabilit</translation>
 <translation id="3030000825273123558">Activați raportarea statisticilor</translation>
 <translation id="6559057113164934677">Nu permiteți niciunui site să acceseze camera și microfonul</translation>
@@ -901,6 +907,9 @@
 <translation id="8864975621965365890">Elimină solicitarea de refuzare care apare atunci când un site web este redat de <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Codificări pentru furnizorul de căutare prestabilit</translation>
 <translation id="285480231336205327">Activați modul de contrast ridicat</translation>
+<translation id="5366977351895725771">Dacă această politică nu este activată, crearea utilizatorilor monitorizați de către acest utilizator va fi dezactivată. Utilizatorii monitorizați existenți vor fi în continuare disponibili.
+
+          Dacă această politică este activată sau nu este configurată, acest utilizator poate crea și gestiona utilizatori monitorizați.</translation>
 <translation id="8101760444435022591">Deoarece software-ul poate eșua, verificările de revocare online nu oferă avantaje de securitate clare, acestea fiind dezactivate în mod prestabilit în <ph name="PRODUCT_NAME"/> versiunea 19 și versiunile ulterioare. Prin activarea acestei politici, comportamentul anterior este restabilit și sunt efectuate verificări OCSP/CRL online.
 
       Dacă politica nu este setată sau nu este activată, atunci Chrome nu va efectua verificări de revocare online în Chrome 19 și versiunile ulterioare.</translation>
diff --git a/chrome/app/policy/policy_templates_ru.xtb b/chrome/app/policy/policy_templates_ru.xtb
index 6347977..1ee0064 100644
--- a/chrome/app/policy/policy_templates_ru.xtb
+++ b/chrome/app/policy/policy_templates_ru.xtb
@@ -71,6 +71,11 @@
 <translation id="3816312845600780067">Поддержка быстрых клавиш при выполнении автоматического входа</translation>
 <translation id="3214164532079860003">Это правило импортирует главную страницу из текущего браузера по умолчанию. Если оно отключено, главная страница не импортируется, а если не настроено, страница может быть импортирована автоматически либо пользователю может быть предложено импортировать ее.</translation>
 <translation id="5330684698007383292">Типы содержания, которые <ph name="PRODUCT_FRAME_NAME"/> может обрабатывать</translation>
+<translation id="6647965994887675196">Если для правила задано значение &quot;true&quot;, на устройстве можно создавать и использовать контролируемые профили.
+
+          Если задано значение &quot;false&quot; или значение не задано, нельзя будет создавать контролируемые профили и входить в них. Все существующие контролируемые профили будут скрыты.
+
+          ПРИМЕЧАНИЕ. На пользовательских и корпоративных устройствах применяются разные настройки по умолчанию: на пользовательских устройствах поддержка контролируемых профилей включена, а на корпоративных – отключена.</translation>
 <translation id="5469825884154817306">Блокировать изображения на этих сайтах</translation>
 <translation id="8412312801707973447">Выполняются ли проверки OCSP/CRL в режиме онлайн</translation>
 <translation id="6649397154027560979">Это правило устарело, используйте вместо него правило URLBlacklist.
@@ -875,6 +880,7 @@
 
           Если значение правила не задано, при первом переходе на экран входа режим высокой контрастности будет отключен. Пользователи могут его в любое время включить и отключить, а его статус будет виден всем пользователям на экране входа.</translation>
 <translation id="8580857153747395000">Предупреждение пользователя о том, что он переходит на сайт, не включенный в пакет контента.</translation>
+<translation id="350796261613621561">Включить поддержку контролируемых профилей.</translation>
 <translation id="602728333950205286">URL Живого поиска для поисковой системы по умолчанию</translation>
 <translation id="3030000825273123558">Включить передачу статистической информации</translation>
 <translation id="6559057113164934677">Запрет доступа сайтов к камере и микрофону</translation>
@@ -892,6 +898,9 @@
 <translation id="8864975621965365890">Скрывает подсказку, которая появляется, если сайт обрабатывается <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Кодировки поисковой системы по умолчанию</translation>
 <translation id="285480231336205327">Включить режим высокой контрастности</translation>
+<translation id="5366977351895725771">Если для правила задано значение &quot;false&quot;, этот пользователь не сможет создавать контролируемые профили. При этом все существующие контролируемые профили будут доступны.
+
+          Если задано значение &quot;true&quot; или значение не задано, этот пользователь сможет создавать контролируемые профили и управлять ими.</translation>
 <translation id="8101760444435022591">Так как проверки отозванных сертификатов в реальном времени и безопасном режиме не дают существенного улучшения безопасности, в <ph name="PRODUCT_NAME"/> 19 и более поздних версиях они по умолчанию отключены. Установка этого правила обеспечивает восстановление предыдущего режима работы с проведением проверок OCSP/CRL.
 
       Если эти правила не установлены или определены неверно, в Chrome 19 и более поздних версиях подобная проверка проводиться не будет.</translation>
diff --git a/chrome/app/policy/policy_templates_sk.xtb b/chrome/app/policy/policy_templates_sk.xtb
index a22a77f..6a6fe39 100644
--- a/chrome/app/policy/policy_templates_sk.xtb
+++ b/chrome/app/policy/policy_templates_sk.xtb
@@ -85,6 +85,11 @@
       Ak je zakázané, domovská stránka sa neimportuje.
       Ak nie je nastavené, môže sa používateľovi zobraziť výzva, či chce domovskú stránku importovať, alebo môže import prebehnúť automaticky.</translation>
 <translation id="5330684698007383292">Povoliť doplnku <ph name="PRODUCT_FRAME_NAME"/> spracovávať nasledujúce typy obsahu</translation>
+<translation id="6647965994887675196">Ak toto pravidlo nastavíte na hodnotu true, bude možné vytvárať a používať kontrolovaných používateľov.
+
+          Ak toto pravidlo nenakonfigurujete alebo ho nastavíte na hodnotu false, bude vytváranie a prihlasovanie kontrolovaných používateľov zakázané. Všetci existujúci kontrolovaní používatelia budú skrytí.
+
+          POZNÁMKA: Predvolené správanie pre zákaznícke a podnikové zariadenia sa líši. V zákazníckych zariadeniach budú kontrolovaní používatelia v predvolenom nastavení povolení, zatiaľ čo v podnikových zariadeniach budú zakázaní.</translation>
 <translation id="5469825884154817306">Blokovať obrázky na týchto stránkach</translation>
 <translation id="8412312801707973447">Či sa majú vykonávať kontroly OCSP/CRL online</translation>
 <translation id="6649397154027560979">Podpora tohto pravidla je ukončená. Použite namiesto neho pravidlo URLBlacklist.
@@ -1112,6 +1117,7 @@
 
           Ak toto pravidlo ponecháte nenastavené, bude režim vysokého kontrastu pri prvom zobrazení prihlasovacej obrazovky zakázaný. Používatelia budú môcť režim vysokého kontrastu kedykoľvek povoliť alebo zakázať a jeho stav na prihlasovacej obrazovke sa zachová aj po zmene používateľov.</translation>
 <translation id="8580857153747395000">Upozorniť na návštevu stránky, ktorá je mimo balíkov obsahu.</translation>
+<translation id="350796261613621561">Povoliť vytváranie kontrolovaných používateľov.</translation>
 <translation id="602728333950205286">Adresa URL dynamického vyhľadávania predvoleného poskytovateľa vyhľadávania</translation>
 <translation id="3030000825273123558">Povoliť hlásenia o metrikách</translation>
 <translation id="6559057113164934677">Nepovoliť žiadnym stránkam používať kameru a mikrofón</translation>
@@ -1137,6 +1143,9 @@
 <translation id="8864975621965365890">Potlačí výzvu o zamietnutie, ktorá sa zobrazí pri vykreslení stránky rámcom <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Kódovania predvoleného poskytovateľa vyhľadávania</translation>
 <translation id="285480231336205327">Povoliť režim s vysokým kontrastom</translation>
+<translation id="5366977351895725771">Ak toto pravidlo nastavíte na hodnotu false, bude vytváranie a prihlasovanie kontrolovaných používateľov zakázané. Všetci existujúci kontrolovaní používatelia budú stále k dispozícii.
+
+          Ak toto pravidlo nenakonfigurujete alebo ho nastavíte na hodnotu true, tento používateľ bude môcť vytvárať a spravovať kontrolovaných používateľov.</translation>
 <translation id="8101760444435022591">Vzhľadom na skutočnosť, že kontroly zrušenia typu soft-fail neposkytujú z hľadiska bezpečnosti žiadne efektívne výhody, sú v predvolenom nastavení prehliadača <ph name="PRODUCT_NAME"/> verzie 19 a novších zakázané. Ak toto pravidlo nastavíte na hodnotu true, obnoví sa predchádzajúca konfigurácia a začnú sa vykonávať kontroly OCSP/CLR online.
 
       Ak pravidlo nenastavíte alebo ho nastavíte na hodnotu false, prehliadač Chrome verzie 19 a novších nebude vykonávať kontroly zrušenia online.</translation>
diff --git a/chrome/app/policy/policy_templates_sl.xtb b/chrome/app/policy/policy_templates_sl.xtb
index 549f89b..6a238ea 100644
--- a/chrome/app/policy/policy_templates_sl.xtb
+++ b/chrome/app/policy/policy_templates_sl.xtb
@@ -90,6 +90,11 @@
 
       Če ni nastavljen, bo uporabnik morda vprašan, ali naj jo uvozi, ali pa bo uvoz izveden samodejno.</translation>
 <translation id="5330684698007383292">Dovoli, da <ph name="PRODUCT_FRAME_NAME"/> obravnava te vrste vsebine.</translation>
+<translation id="6647965994887675196">Če je pravilnik vklopljen, je mogoče ustvariti in uporabiti nadzorovane uporabnike.
+
+          Če pravilnik ni vklopljen ali ni nastavljen, ustvarjanje in prijava nadzorovanih uporabnikov nista mogoča. Vsi obstoječi nadzorovani uporabniki so skriti.
+
+          OPOMBA: Privzeta nastavitev se razlikuje v napravah za potrošnike in napravah za podjetja: v napravah za potrošnike so nadzorovani uporabniki privzeto omogočeni, v napravah za podjetja pa privzeto onemogočeni.</translation>
 <translation id="5469825884154817306">Blokiranje slik na teh mestih</translation>
 <translation id="8412312801707973447">Ali se izvaja spletni pregled OCSP/CRL</translation>
 <translation id="6649397154027560979">Ta pravilnik je zastarel, Namesto njega uporabite URLBlacklist.
@@ -1131,6 +1136,7 @@
 
           Če ta pravilnik ni vklopljen, je visokokontrastni način onemogočen, ko je prvič prikazan prijavni zaslon. Uporabniki lahko kadar koli omogočijo ali onemogočijo lupo, pri čemer se njegovo stanje na prijavnem zaslonu ohrani med uporabniki.</translation>
 <translation id="8580857153747395000">Opozori pri odpiranju spletnih mest zunaj paketov vsebine.</translation>
+<translation id="350796261613621561">Omogočanje ustvarjanja nadzorovanih uporabnikov.</translation>
 <translation id="602728333950205286">Privzeti URL iskalnika za dinamično iskanje</translation>
 <translation id="3030000825273123558">Omogoči pošiljanje podatkov</translation>
 <translation id="6559057113164934677">Ne dovoli nobenemu spletnemu mestu dostopa do kamere in mikrofona</translation>
@@ -1156,6 +1162,9 @@
 <translation id="8864975621965365890">Ne prikaže poziva za preklop, ki se prikaže, ko se spletno mesto upodablja z <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Privzeto kodiranje iskalnika</translation>
 <translation id="285480231336205327">Omogoči visokokontrastni način</translation>
+<translation id="5366977351895725771">Če pravilnik ni vklopljen, ta uporabnik ne more ustvarjati nadzorovanih uporabnikov. Obstoječi nadzorovani uporabniki so še vedno na voljo.
+
+          Če je pravilnik vklopljen ali ni nastavljen, lahko ta uporabnik ustvarja in upravlja nadzorovane uporabnike.</translation>
 <translation id="8101760444435022591">Ker mehko preverjanje preklica ne zagotavlja dodatne varnosti, je v brskalniku <ph name="PRODUCT_NAME"/> različice 19 ali novejšem privzeto onemogočeno. Če ta pravilnik omogočite, so obnovljene prejšnje nastavitve in spletni pregled OCSP/CRL se izvaja.
 
       Če pravilnik ni nastavljen ali ga onemogočite, Google Chrome v različici 19 ali novejši ne bo izvajal spletnega pregleda preklica.</translation>
diff --git a/chrome/app/policy/policy_templates_sr.xtb b/chrome/app/policy/policy_templates_sr.xtb
index ea68772..30c8396 100644
--- a/chrome/app/policy/policy_templates_sr.xtb
+++ b/chrome/app/policy/policy_templates_sr.xtb
@@ -86,6 +86,11 @@
 
       Ако нису подешене, корисник ће можда бити упитан да ли жели да је увезе или се увоз аутоматски одвија.</translation>
 <translation id="5330684698007383292">Дозволи <ph name="PRODUCT_FRAME_NAME"/>-у да рукује следећим типовима садржаја</translation>
+<translation id="6647965994887675196">Ако се подеси на „тачно“, омогућава се прављење и коришћење корисника под надзором.
+
+          Ако се подеси на „нетачно“ или се не конфигурише, онемогућава се прављење корисника под надзором и његово пријављивање. Сви постојећи корисници под надзором биће скривени.
+
+          НАПОМЕНА: Подразумевано понашање за уређаје корисника и уређаје предузећа се разликује – корисници под надзором су подразумевано омогућени на уређајима корисника, док су на уређајима предузећа подразумевано онемогућени.</translation>
 <translation id="5469825884154817306">Блокирај слике на овим сајтовима</translation>
 <translation id="8412312801707973447">Да ли се обављају OCSP/CRL провере на мрежи</translation>
 <translation id="6649397154027560979">Ове смернице су застареле, уместо њих користите URLBlacklist.
@@ -1115,6 +1120,7 @@
 
           Ако не подесите ове смернице, режим високог контраста ће бити онемогућен када се екран за пријављивање прикаже по први пут. Корисници ће моћи да омогуће или онемогуће режим високог контраста у било ком тренутку и његов статус на екрану за пријављивање ће бити трајан за кориснике.</translation>
 <translation id="8580857153747395000">Упозори ме када посећујем сајтове изван пакета садржаја.</translation>
+<translation id="350796261613621561">Омогућавање прављења корисника под надзором.</translation>
 <translation id="602728333950205286">Инстант URL адреса подразумеваног добављача претраге</translation>
 <translation id="3030000825273123558">Омогућавање пријављивања показатеља</translation>
 <translation id="6559057113164934677">Не дозволи ниједном сајту да приступа камери и микрофону</translation>
@@ -1140,6 +1146,9 @@
 <translation id="8864975621965365890">Спречава приказивање упита за одбијање који се појављује када <ph name="PRODUCT_FRAME_NAME"/> приказује сајт.</translation>
 <translation id="3264793472749429012">Кодирања подразумеваног добављача претраге</translation>
 <translation id="285480231336205327">Омогући режим високог контраста</translation>
+<translation id="5366977351895725771">Ако се подеси на „нетачно“, овом кориснику се онемогућава прављење корисника под надзором. Сви постојећи корисници под надзором биће и даље доступни.
+
+          Ако се подеси на „тачно“ или се не конфигурише, овај корисник ће моћи да прави кориснике под надзором и управља њима.</translation>
 <translation id="8101760444435022591">У светлу чињенице да провере опозива на мрежи са софтверским грешкама не пружају никакве стварне безбедносне погодности, оне су подразумевано онемогућене у верзији 19 и новијим верзијама производа <ph name="PRODUCT_NAME"/>. Подешавањем ових смерница на Тачно претходно понашање се враћа и OCSP/CRL провере на мрежи ће се обављати.
 
       Ако смернице не буду подешене или буду подешене на Нетачно, Chrome неће обављати провере опозива на мрежи у Chrome-у 19 и новијим верзијама.</translation>
diff --git a/chrome/app/policy/policy_templates_sv.xtb b/chrome/app/policy/policy_templates_sv.xtb
index 716bc22..108381e 100644
--- a/chrome/app/policy/policy_templates_sv.xtb
+++ b/chrome/app/policy/policy_templates_sv.xtb
@@ -90,6 +90,11 @@
 
       Om policyn inte ställs in kan användaren tillfrågas om han eller hon vill importera, eller så kan importen göras automatiskt.</translation>
 <translation id="5330684698007383292">Tillåt att <ph name="PRODUCT_FRAME_NAME"/> hanterar följande innehållstyper</translation>
+<translation id="6647965994887675196">Om &quot;true&quot; anges kan övervakade användare skapas och användas.
+
+          Om &quot;false&quot; anges eller om ingen konfiguration utförs inaktiveras alternativet att skapa övervakade användare och att logga in. Alla befintliga övervakade användare döljs.
+
+          OBS! Standardbeteendet skiljer sig åt mellan kund- och företagsenheter: på kundenheter aktiveras övervakade användare som standard men på företagsenheter inaktiveras de som standard.</translation>
 <translation id="5469825884154817306">Blockera bilder på dessa webbplatser</translation>
 <translation id="8412312801707973447">Anger huruvida OCSP/CRL-onlinekontroller ska utföras</translation>
 <translation id="6649397154027560979">Den här principen är föråldrad, använd URLBlacklist i stället.
@@ -1126,6 +1131,7 @@
 
           Om den här principen inte anges är högkontrastläget inaktiverat första gången som inloggningsskärmen visas. Användarna kan aktivera eller inaktivera högkontrastläget när som helst och dess status på inloggningsskärmen sparas.</translation>
 <translation id="8580857153747395000">Varna när du besöker webbplatser utanför innehållspaketet.</translation>
+<translation id="350796261613621561">Aktivera alternativet att skapa övervakade användare.</translation>
 <translation id="602728333950205286">Dynamisk webbadress för standardsökleverantör</translation>
 <translation id="3030000825273123558">Aktivera statistikrapportering</translation>
 <translation id="6559057113164934677">Tillåt inte att webbplatser kommer åt min kamera och mikrofon</translation>
@@ -1151,6 +1157,9 @@
 <translation id="8864975621965365890">Ser till att avvisningsmeddelandet som visas när en webbplats renderas av <ph name="PRODUCT_FRAME_NAME"/> inte visas.</translation>
 <translation id="3264793472749429012">Kodningar för standardsökleverantör</translation>
 <translation id="285480231336205327">Aktivera läge för hög kontrast</translation>
+<translation id="5366977351895725771">Om &quot;false&quot; anges inaktiveras alternativet att skapa övervakade användare för den här användaren. Eventuella befintliga övervakade användare är fortfarande tillgängliga.
+
+          Om &quot;true&quot; anges eller ingen konfiguration utförs kan den här användaren skapa och hantera övervakade användare.</translation>
 <translation id="8101760444435022591">Eftersom återkallelsekontroller online vid programfel inte ger någon effektiv säkerhetsfördel är de inaktiverade som standard i <ph name="PRODUCT_NAME"/> version 19 och senare. Om du aktiverar den här policyn återställs den tidigare inställningen och OCSP/CRL-onlinekontroller utförs.
 
       Om policyn inte ställs in eller ställs in på falskt görs ingen återkallelsekontroll online i Chrome 19.</translation>
diff --git a/chrome/app/policy/policy_templates_sw.xtb b/chrome/app/policy/policy_templates_sw.xtb
index b636188..4c3ac06 100644
--- a/chrome/app/policy/policy_templates_sw.xtb
+++ b/chrome/app/policy/policy_templates_sw.xtb
@@ -83,6 +83,11 @@
 
       Ikiwa hautawekwa, huenda mtumiaji akaombwa kuleta, au huenda uletaji ukatendeka kiotomatiki.</translation>
 <translation id="5330684698007383292">Ruhusu <ph name="PRODUCT_FRAME_NAME"/> kushughulikia aina zifuatazo za maudhui</translation>
+<translation id="6647965994887675196">Kama iwekwa kuwa kweli, watumiaji wanaosimamiwa wanaweza kuundwa na kutumiwa.
+
+         Kama imewekwa kuwa uwongo au haijasanidiwa, uundaji wa mtumiaji wa kusimamiwa na kuingia katika akaunti kutalemazwa. Watumiaji wote wa kusimamiwa watafichwa.
+
+          KUMBUKA: Tabia chaguo-msingi ya vifaa vya watumiaji na biashara zinatofautiana: kwenye vifaa vya watumiaji watumiaji wa kusimamiwa huwashwa kama chaguo-msingi, lakini kwenye vifaa vya biashara wao huzimwa kama chaguo-msingi.</translation>
 <translation id="5469825884154817306">Zuia picha katika tovuti hizi</translation>
 <translation id="8412312801707973447">Ikiwa ukaguzi wa mtandaoni wa OCSP/CRL umeatekelezwa</translation>
 <translation id="6649397154027560979">Sera hii imeacha kuendesha huduma, tafadhali tumia URL Zilizoondolewa Idhini badala yake. 
@@ -1039,15 +1044,15 @@
 
       Vifaa <ph name="PRODUCT_OS_NAME"/> vinakagua visasisho kiotomatiki wakati mpangilio huu haujasanidiwa au umewekwa kuwa Sivyo.</translation>
 <translation id="6190022522129724693">Mpangilio chaguo-msingi za ibukizi</translation>
-<translation id="847472800012384958">Usiruhusu tovuti yoyote kuonyesha viibukizi</translation>
+<translation id="847472800012384958">Usiruhusu tovuti yoyote kuonyesha madirisha ibukizi</translation>
 <translation id="4733471537137819387">Sera zinazohusiana na uthibitishaji wa HTTP jumuishi.</translation>
 <translation id="8951350807133946005">Weka saraka ya akiba ya diski</translation>
 <translation id="2592091433672667839">Muda wa shughuli kabla ya seva ya skrini kuonyeshwa kwenye skrini ya kuingia katika modi ya rejareja</translation>
 <translation id="166427968280387991">Seva ya proksi</translation>
-<translation id="2805707493867224476">Ruhusu tovuti zote zionyeshe viibukizi</translation>
+<translation id="2805707493867224476">Ruhusu tovuti zote zionyeshe madirisha ibukizi</translation>
 <translation id="1727394138581151779">Zuia programu jalizi zote</translation>
 <translation id="8118665053362250806">Weka ukubwa wa media ya akiba ya diski</translation>
-<translation id="7079519252486108041">Zuia viibukizi kwenye tovuti hizi</translation>
+<translation id="7079519252486108041">Zuia madirisha ibukizi kwenye tovuti hizi</translation>
 <translation id="1859633270756049523">Punguza urefu wa kipindi</translation>
 <translation id="7433714841194914373">Wezesha Papo hapo</translation>
 <translation id="4983201894483989687">Ruhusu kuendesha programu jalizi ambazo zimepitwa na wakati.</translation>
@@ -1101,6 +1106,7 @@
 Iwapo utaweka sera hii, watumiaji wanaweza kwa muda kuipuuza kwa kuwasha au kuzima hali ya juu ya utofautishaji. Hata hivyo, chaguo la mtumiaji halitaendelea na chaguo-msingi  hurejeshwa tena wakati wowote skrini ya kuingia katika akaunto inapoonyeshwa upya au mtumiaji anaposalia bila kufanya kitu kwenye skrini ya kuingia katika akaunti kwa dakika moja. 
 Iwapo sera hii haijawekwa, hali ya juu ya utoafautishaji huzimwa wakati skrini ya kuingia katika akaunti inapoonyeshwa kwanza. Watumiaji wanaweza kuwasha au kuzima hali ya juu ya utofautishaji wakati wowote na hali yake kwenye skrini ya kuingia katika akaunti inaendelea kati ya watumiaji.</translation>
 <translation id="8580857153747395000">Onya ninapotembelea tovuti zilizo nje ya mafurushi ya maudhui.</translation>
+<translation id="350796261613621561">Washa uundaji wa watumiaji wa kusimamiwa.</translation>
 <translation id="602728333950205286">URL ya papo hapo ya kitoaji chaguo-msingi cha utafutaji</translation>
 <translation id="3030000825273123558">Wezesha kuripoti kwa metriki</translation>
 <translation id="6559057113164934677">Usiruhusu tovuti yoyote kufikia kamera na maikrofoni yangu</translation>
@@ -1126,6 +1132,9 @@
 <translation id="8864975621965365890">Didimiza kukataa kuuliza ambako huonekana tovuti inapotolewa na <ph name="PRODUCT_FRAME_NAME"/> .</translation>
 <translation id="3264793472749429012">Usimbaji wa kitoaji chaguo-msingi cha utafutaji</translation>
 <translation id="285480231336205327">Wezesha modi ya juu ya kulinganua</translation>
+<translation id="5366977351895725771">Kama imewekwa kama uongo, uundaji wa mtumiaji wa kusimamiwa na mtumiaji huyu utazimwa. Bado mtumiaji yeyote wa kusimamiwa wa sasa atapatikana.
+
+          Kama ikiwekwa kuwa kweli au haijasanidiwa,watumiaji wa kusimamiwa wanaweza kuundwa na kusimamiwa na mtumiaji huyu.</translation>
 <translation id="8101760444435022591">Kwa sababu ya Ndivyo kwamba kushindwa kwa baadhi ya vipengee, ukaguzi wa ubatilishaji wa mtandaoni hautio usalama bora unaofanya inayofanya kazi, utalemazwa kwa chaguo-msingi katika toleo la 19 la <ph name="PRODUCT_NAME"/> na baadaye. Kwa kuweka sera hii kuwa kweli, tabia ya awali inahifadhiwa upya na ukaguzi wa mtandaoni wa OCSP/CRL utatekelezwa.
 
       Ikiwa sera hii haitawekwa, au kuwekwa kwenye Sivyo, basi Chrome haitatekeleza ukaguzi wa ubatilishaji wa mtandao katika Chrome 19 na baadaye.</translation>
diff --git a/chrome/app/policy/policy_templates_ta.xtb b/chrome/app/policy/policy_templates_ta.xtb
index f06a165..a2aa82a 100644
--- a/chrome/app/policy/policy_templates_ta.xtb
+++ b/chrome/app/policy/policy_templates_ta.xtb
@@ -72,6 +72,11 @@
 <translation id="3816312845600780067">தானியங்கு உள்நுழைவுக்கு மீட்பு விசைப்பலகை குறுக்குவழியை இயக்கவும்</translation>
 <translation id="3214164532079860003">தற்போதைய இயல்புநிலை உலாவி இயக்கத்தில் இருந்தால் முகப்புப்பக்கத்தை இறக்குமதி செய்ய இந்தக் கொள்கை தூண்டுகிறது. அது முடக்கப்பட்டால், முகப்புப்பக்கத்தை இறக்குமதி செய்ய முடியாது. இது அமைக்கப்படவில்லை எனில், இறக்குமதி செய்யலாமா என பயனரிடம் கேட்கப்படும் அல்லது தானாக இறக்குமதியாகும்.</translation>
 <translation id="5330684698007383292">பின்வரும் உள்ளடக்க வகைகளைக் கையாள <ph name="PRODUCT_FRAME_NAME"/> ஐ அனுமதி</translation>
+<translation id="6647965994887675196">சரி என அமைக்கப்பட்டால், கண்காணிக்கப்படும் பயனர்களை உருவாக்கி, அவர்களைப் பயன்படுத்த முடியும்.
+
+         தவறு என அமைக்கப்பட்டால் அல்லது உள்ளமைக்கப்படாவிட்டால், கண்காணிக்கப்படும் பயனரை உருவாக்குதல் மற்றும் உள்நுழைதல் முடக்கப்படும். ஏற்கனவே இருக்கும் அனைத்து கண்காணிக்கப்படும் பயனர்களும் மறைக்கப்படுவார்கள்.
+
+          குறிப்பு: நுகர்வோர் மற்றும் நிறுவன சாதனங்களுக்கான இயல்புநிலை செயல்முறை மாறுபடும்: நுகர்வோர் சாதனங்களில் கண்காணிக்கப்படும் பயனர்கள் இயல்புநிலையில் இயக்கப்படுவார்கள், ஆனால் நிறுவன சாதனங்களில் இயல்பாகவே அவர்கள் முடக்கப்படுவார்கள்.</translation>
 <translation id="5469825884154817306">இந்த தளங்களில் படங்களை தடு</translation>
 <translation id="8412312801707973447">ஆன்லைன் OCSP/CRL சோதனைகள் செயல்படுகின்றனவா</translation>
 <translation id="6649397154027560979">இந்தக் கொள்கைத் தடுக்கப்பட்டது, பதிலாக URLBlacklist ஐப் பயன்படுத்தவும்.
@@ -881,6 +886,7 @@
 
           இந்தக் கொள்கை அமைக்கப்படாமல் இருந்தால், உள்நுழைவுத் திரை முதலில் காண்பிக்கப்படும்போது அதிக ஒளி மாறுபாட்டுப் பயன்முறை முடக்கப்படும். உள்நுழைவுத் திரையில் பயனர்கள் எந்த நேரத்திலும் அதிக ஒளி மாறுபாட்டுப் பயன்முறையையும் அதன் நிலையையும் இயக்கலாம் அல்லது முடக்கலாம், இது பயனர்களுக்கு இடையில் நிலையானது.</translation>
 <translation id="8580857153747395000">உள்ளடக்கத் தொகுப்புகளுக்கு வெளியே உள்ள தளங்களைப் பார்வையிடும்போது எச்சரிக்கைசெய்.</translation>
+<translation id="350796261613621561">கண்காணிக்கப்படும் பயனர்களின் உருவாக்குதலை இயக்கு.</translation>
 <translation id="602728333950205286">இயல்புநிலை தேடல் வழங்குநர்  உடனடி URL</translation>
 <translation id="3030000825273123558">மெட்ரிக்ஸ் அறிக்கைகளை இயக்கு</translation>
 <translation id="6559057113164934677">கேமரா அல்லது மைக்ரோஃபோனை எந்த தளமும் அணுக அனுமதிக்காதே</translation>
@@ -898,6 +904,9 @@
 <translation id="8864975621965365890"><ph name="PRODUCT_FRAME_NAME"/> ஆல் தளம் வழங்கப்படும்போது தோன்றும் இயக்க அறிவுறுத்துதலை முடக்கும்</translation>
 <translation id="3264793472749429012">இயல்புநிலை தேடல் வழங்குநர் குறியீட்டு முறைகள்</translation>
 <translation id="285480231336205327">அதிக தெளிவான பயன்முறையை செயலாக்குக</translation>
+<translation id="5366977351895725771">தவறு என அமைக்கப்பட்டால், இந்தப் பயனர் உருவாக்கும் கண்காணிக்கப்படும் பயனர் முடக்கப்படுவார். ஏற்கனவே உள்ள கண்காணிக்கப்படும் பயனர்கள் அனைவரும் தொடர்ந்து இருப்பார்கள்.
+
+          சரி என அமைக்கப்பட்டால் அல்லது உள்ளமைக்கப்படாவிட்டால், இந்தப் பயனரால் கண்காணிக்கப்படும் பயனர்கள் உருவாக்கப்பட்டு நிர்வகிக்கப்படுவார்கள்.</translation>
 <translation id="8101760444435022591">மென்மையான-தோல்வில் சிறிதளவு உண்மையாக, ஆன்லைன் திரும்பப்பெறல் சோதனைகள் பயனுள்ள எந்த பாதுகாப்பு நன்மையையும் வழங்காது. அவை, <ph name="PRODUCT_NAME"/> பதிப்பு 19 மற்றும் அதற்குப் பிந்தைய பதிப்பில் இயல்பாகவே முடக்கப்படும். இந்தக் கொள்கையை true என அமைத்தால், முந்தைய பண்பானது மீட்டமைக்கப்படும். மேலும், ஆன்லைன் OCSP/CRL சோதனைகள் செயல்படும்.
 
       கொள்கையை அமைக்கவில்லையென்றாலோ அல்லது false என அமைத்தாலோ, Chrome 19 மற்றும் அதற்குப் பிந்தைய பதிப்புகளில் ஆன்லைன் திரும்பப்பெறல் சோதனைகளை Chrome செயல்படுத்தாது.</translation>
diff --git a/chrome/app/policy/policy_templates_te.xtb b/chrome/app/policy/policy_templates_te.xtb
index 8c9be41..d3d7db2 100644
--- a/chrome/app/policy/policy_templates_te.xtb
+++ b/chrome/app/policy/policy_templates_te.xtb
@@ -73,6 +73,11 @@
 <translation id="3816312845600780067">స్వీయ-లాగిన్ కోసం బెయిల్అవుట్ కీబోర్డ్ సత్వరమార్గాన్ని ప్రారంభించండి</translation>
 <translation id="3214164532079860003">ఈ విధానం హోమ్ పేజీని ప్రారంభించబడినట్లయితే ప్రస్తుత డిఫాల్ట్ బ్రౌజర్ నుండి దిగుమతి చేస్తుంది. ఆపివేయబడితే, హోమ్ పేజీ దిగుమతి చేయబడదు. సెట్ చేయకపోతే, దిగుమతి కోసం వినియోగదారు అభ్యర్థనను పొందవచ్చు లేదా స్వయంచాలకంగా దిగుమతి కావచ్చు.</translation>
 <translation id="5330684698007383292">ఈ క్రింది కంటెంట్ రకాలని నిర్వహించడానికి <ph name="PRODUCT_FRAME_NAME"/>ని అనుమతించండి</translation>
+<translation id="6647965994887675196">ఒప్పుకు సెట్ చేస్తే, పర్యవేక్షించబడే వినియోగదారులు సృష్టించబడతారు మరియు ఉపయోగించబడతారు.
+
+          తప్పుకు సెట్ చేస్తే లేదా కాన్ఫిగర్ చేయకపోతే, పర్యవేక్షించబడే-వినియోగదారు సృష్టి మరియు లాగిన్ నిలిపివేయబడతాయి. ప్రస్తుతం ఉన్న పర్యవేక్షించబడే వినియోగదారులందరూ దాచబడతారు.
+
+          గమనిక: వాడుకదారు మరియు ఎంటర్‌ప్రైజ్ పరికరాల డిఫాల్ట్ ప్రవర్తన భిన్నంగా ఉంటుంది: వాడుకదారు పరికరాల్లో పర్యవేక్షించబడే వినియోగదారులు డిఫాల్ట్‌గా ప్రారంభించబడతారు, కానీ ఎంటర్‌ప్రైజ్ పరికరాల్లో వారు డిఫాల్ట్‌గా నిలిపివేయబడతారు.</translation>
 <translation id="5469825884154817306">ఈ సైట్‌లలో చిత్రాలని బ్లాక్ చెయ్యి</translation>
 <translation id="8412312801707973447">ఆన్‌లైన్‌లో OCSP/CRL తనిఖీలు అమలు చేయాలా లేదా</translation>
 <translation id="6649397154027560979">ఈ విధానం విస్మరించబడింది, దయచేసి బదులుగా URLBlacklistని ఉపయోగించండి.
@@ -898,6 +903,7 @@
 
           ఈ విధానాన్ని సెట్ చేయకుండా వదిలేస్తే, లాగిన్ స్క్రీన్ మొదట చూపబడినప్పుడు అధిక కాంట్రాస్ట్ మోడ్ నిలిపివేయబడుతుంది. వినియోగదారులు ఎప్పుడైనా అధిక కాంట్రాస్ట్ మోడ్‌ను ప్రారంభించవచ్చు లేదా నిలిపివేయవచ్చు మరియు లాగిన్ స్క్రీన్‌లో దాని స్థితి వినియోగదారుల మధ్య అలాగే కొనసాగుతుంది.</translation>
 <translation id="8580857153747395000">కంటెంట్ ప్యాక్‌ల వెలుపలి సైట్‌లను సందర్శించేటప్పుడు హెచ్చరిక.</translation>
+<translation id="350796261613621561">పర్యవేక్షించబడే వినియోగదారుల సృష్టిని ప్రారంభించండి.</translation>
 <translation id="602728333950205286">డిఫాల్ట్ శోధన అందింపుదారు తక్షణ URL</translation>
 <translation id="3030000825273123558">గణాంకాల నివేదనను ప్రారంభించు</translation>
 <translation id="6559057113164934677">కెమెరా మరియు మైక్రోఫోన్‌ను ప్రాప్యత చేయడానికి ఏ సైట్‌ని అనుమతించవద్దు</translation>
@@ -915,6 +921,9 @@
 <translation id="8864975621965365890">సైట్ <ph name="PRODUCT_FRAME_NAME"/> ద్వారా అమలు చేయబడినప్పుడు ప్రాంప్ట్ చేయబడే అవకాశాన్ని నియంత్రిస్తుంది.</translation>
 <translation id="3264793472749429012">డిఫాల్ట్ శోధన అందింపుదారు ఎన్‌కోడింగ్‌లు</translation>
 <translation id="285480231336205327">అధిక వర్ణ వ్యత్యాస మోడ్‌ను ప్రారంభించు</translation>
+<translation id="5366977351895725771">తప్పుకు సెట్ చేస్తే, ఈ వినియోగదారు యొక్క పర్యవేక్షించబడే-వినియోగదారు సృష్టి నిలిపివేయబడుతుంది. ప్రస్తుతం ఉన్న పర్యవేక్షించబడే వినియోగదారులు ఇప్పటికీ అందుబాటులో ఉంటారు.
+
+          ఒప్పుకు సెట్ చేస్తే లేదా కాన్ఫిగర్ చేయకపోతే, పర్యవేక్షించబడే వినియోగదారులు ఈ వినియోగదారు ద్వారా సృష్టించబడతారు మరియు నిర్వహించబడతారు.</translation>
 <translation id="8101760444435022591">వాస్తవానికి సాఫ్ట్-వైఫల్యం, ఆన్‌లైన్‌లో ఉపసంహరణ తనిఖీలు ప్రభావవంతమైన భద్రతా ప్రయోజనాన్ని అందించవు, <ph name="PRODUCT_NAME"/> సంస్కరణ 19 మరియు తర్వాత దానిలో అవి డిఫాల్ట్‌గా నిలిపివేయబడతాయి. ఈ విధానాన్ని ఒప్పుకు సెట్ చేయడం ద్వారా, మునుపటి ప్రవర్తన పునరుద్ధరించబడుతుంది మరియు ఆన్‌లైన్‌లో OCSP/CRL తనిఖీలు అమలు చేయబడతాయి.
 
       విధానాన్ని సెట్ చేయకుండా ఉంటే లేదా తప్పుకు సెట్ చేయబడి ఉంటే, తర్వాత Chrome 19 మరియు తర్వాత దానిలో  Chrome ఆన్‌లైన్ ఉపసంహరణ తనిఖీలను అమలు చేయదు.</translation>
diff --git a/chrome/app/policy/policy_templates_th.xtb b/chrome/app/policy/policy_templates_th.xtb
index 3f9dee1..e5ee913 100644
--- a/chrome/app/policy/policy_templates_th.xtb
+++ b/chrome/app/policy/policy_templates_th.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">เปิดใช้งานแป้นพิมพ์ลัด bailout สำหรับการเข้าสู่ระบบอัตโนมัติ</translation>
 <translation id="3214164532079860003">นโยบายนี้บังคับให้นำเข้าหน้าแรกจากเบราว์เซอร์เริ่มต้นปัจจุบันหากมีการเปิดใช้งานไว้ แต่หากปิดใช้งานอยู่ จะไม่มีการนำเข้าหน้าแรก หากไม่มีการตั้งค่าไว้ ผู้ใช้อาจจะได้รับคำถามว่าจะนำเข้าหรือไม่ หรือการนำเข้าอาจเกิดขึ้นโดยอัตโนมัติก็ได้</translation>
 <translation id="5330684698007383292">อนุญาตให้ <ph name="PRODUCT_FRAME_NAME"/> จัดการประเภทเนื้อหาดังต่อไปนี้</translation>
+<translation id="6647965994887675196">หากตั้งค่าเป็นจริง จะสามารถสร้างและใช้งานผู้ใช้ภายใต้การดูแลได้
+
+          หากตั้งค่าเป็นเท็จหรือไม่ได้กำหนดค่า การสร้างผู้ใช้ภายใต้การดูแลและการเข้าสู่ระบบของผู้ใช้ภายใต้การดูแลจะถูกปิดใช้งาน ผู้ใช้ภายใต้การดูแลที่มีอยู่ทั้งหมดจะถูกซ่อนไว้
+
+          หมายเหตุ: การทำงานเริ่มต้นสำหรับอุปกรณ์ของผู้บริโภคและอุปกรณ์ขององค์กรจะแตกต่างกัน: บนอุปกรณ์ของผู้บริโภค ผู้ใช้ภายใต้การดูแลจะถูกเปิดใช้งานโดยค่าเริ่มต้น แต่จะปิดใช้งานโดยค่าเริ่มต้นบนอุปกรณ์ขององค์กร</translation>
 <translation id="5469825884154817306">ปิดกั้นภาพบนไซต์เหล่านี้</translation>
 <translation id="8412312801707973447">ดำเนินการตรวจสอบ OCSP/CRL แบบออนไลน์หรือไม่</translation>
 <translation id="6649397154027560979">นโยบายนี้ได้ถูกเลิกใช้งาน โปรดใช้ URLBlacklist แทน
@@ -870,6 +875,7 @@
 
           หากนโยบายนี้ไม่มีการตั้งค่า โหมดคอนทราสต์สูงจะถูกปิดใช้งานเมื่อหน้าจอการเข้าสู่ระบบแสดงเป็นครั้งแรก ผู้ใช้สามารถเปิดหรือปิดใช้งานโหมดคอนทราสต์สูงได้ตลอดเวลา และสถานะบนหน้าจอการเข้าสู่ระบบจะยังคงค้างอยู่สำหรับการใช้งานในระหว่างผู้ใช้รายต่างๆ</translation>
 <translation id="8580857153747395000">เตือนเมื่อไปที่เว็บไซต์ภายนอกชุดเนื้อหา</translation>
+<translation id="350796261613621561">เปิดใช้งานการสร้างผู้ใช้ภายใต้การดูแล</translation>
 <translation id="602728333950205286">URL ค้นหาทันใจของผู้ให้บริการการค้นหาเริ่มต้น</translation>
 <translation id="3030000825273123558">เปิดใช้งานการรายงานเมตริก</translation>
 <translation id="6559057113164934677">ไม่อนุญาตให้ไซต์ใดๆ เข้าถึงกล้องและไมโครโฟน</translation>
@@ -887,6 +893,9 @@
 <translation id="8864975621965365890">ระงับการแจ้งเรื่องการปฏิเสธ ซึ่งจะปรากฏขึ้นเมื่อไซต์แสดงผลโดย <ph name="PRODUCT_FRAME_NAME"/></translation>
 <translation id="3264793472749429012">การเข้ารหัสของผู้ให้บริการการค้นหาเริ่มต้น</translation>
 <translation id="285480231336205327">เปิดใช้งานโหมดความคมชัดสูง</translation>
+<translation id="5366977351895725771">หากตั้งค่าเป็นเท็จ การสร้างผู้ใช้ภายใต้การดูแลโดยผู้ใช้รายนี้จะถูกปิดใช้งาน ผู้ใช้ภายใต้การดูแลใดๆ ที่มีอยู่แล้วจะยังคงมีอยู่
+
+          หากตั้งค่าเป็นจริงหรือไม่ได้กำหนดค่า ผู้ใช้รายนี้จะสามารถสร้างและจัดการผู้ใช้ภายใต้การดูแลได้</translation>
 <translation id="8101760444435022591">เนื่องจากข้อเท็จจริงที่ว่าการตรวจสอบการเพิกถอนทางออนไลน์แบบ Soft-fail ไม่มีประโยชน์ในด้านการรักษาความปลอดภัยที่มีประสิทธิผล การตรวจสอบดังกล่าวจะถูกปิดใช้งานโดยค่าเริ่มต้นใน <ph name="PRODUCT_NAME"/> รุ่น 19 และรุ่นที่ใหม่กว่า และด้วยการตั้งค่านโยบายนี้เป็น &quot;จริง&quot; ลักษณะการทำงานก่อนหน้านี้จะได้รับการคืนค่า และจะมีการดำเนินการตรวจสอบ OCSP/CRL แบบออนไลน์
 
       หากไม่ได้ตั้งค่านโยบายนี้หรือตั้งค่าเป็น &quot;เท็จ&quot; Chrome จะไม่ตรวจสอบการเพิกถอนทางออนไลน์ใน Chrome 19 และรุ่นที่ใหม่กว่า</translation>
diff --git a/chrome/app/policy/policy_templates_tr.xtb b/chrome/app/policy/policy_templates_tr.xtb
index 03f9d2b..14aa1d8 100644
--- a/chrome/app/policy/policy_templates_tr.xtb
+++ b/chrome/app/policy/policy_templates_tr.xtb
@@ -88,6 +88,11 @@
 
       Ayarlanmazsa, kullanıcıdan içe aktarma işlemini gerçekleştirmesi istenebilir veya içe aktarma otomatik olarak gerçekleşebilir.</translation>
 <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME"/> için aşağıdaki içerik türlerini işlemeye izin ver</translation>
+<translation id="6647965994887675196">True (doğru) olarak ayarlanırsa, denetlenen kullanıcılar oluşturulabilir ve kullanılabilir
+
+          False (yanlış) olarak ayarlanır veya yapılandırılmazsa, denetlenen kullanıcı oluşturma ve denetlenen kullanıcı girişi özellikleri devre dışı bırakılır. Mevcut tüm denetlenen kullanıcılar gizlenir.
+
+          NOT: Tüketicilere ve kuruluşlara yönelik cihazlarda varsayılan davranış farklıdır: Tüketicilere yönelik cihazlarda, denetlenen kullanıcılar varsayılan olarak etkindir, ancak kuruluşlara yönelik cihazlarda bunlar varsayılan olarak devre dışıdır.</translation>
 <translation id="5469825884154817306">Bu sitelerdeki resimleri engelle</translation>
 <translation id="8412312801707973447">Çevrimiçi OCSP/CRL denetimlerinin yapılıp yapılmayacağı</translation>
 <translation id="6649397154027560979">Bu politika kullanımdan kaldırılmıştır; lütfen bunun yerine URLBlacklist'i kullanın.
@@ -1114,6 +1119,7 @@
 
           Bu politika ayarlanmadan bırakılırsa, giriş ekranı ilk kez gösterildiğinde yüksek kontrast modu devre dışıdır. Kullanıcılar yüksek kontrast modunu her zaman etkinleştirebilir veya devre dışı bırakabilir ve yüksek kontrast modunun giriş ekranındaki durumu kullanıcılar arasında kalıcıdır.</translation>
 <translation id="8580857153747395000">İçerik paketlerinin dışındaki siteleri ziyaret ederken uyar.</translation>
+<translation id="350796261613621561">Denetlenen kullanıcılar oluşturmayı etkinleştir.</translation>
 <translation id="602728333950205286">Varsayılan arama sağlayıcı anında arama URL'si</translation>
 <translation id="3030000825273123558">Ölçüm raporlamayı etkinleştir</translation>
 <translation id="6559057113164934677">Hiçbir sitenin kamera ve mikrofona erişmesine izin verme</translation>
@@ -1139,6 +1145,9 @@
 <translation id="8864975621965365890">Bir site <ph name="PRODUCT_FRAME_NAME"/> tarafından oluşturulduğunda görülen reddetme sorusunu engeller.</translation>
 <translation id="3264793472749429012">Varsayılan arama sağlayıcı kodlamaları</translation>
 <translation id="285480231336205327">Yüksek kontrast modunu etkinleştir</translation>
+<translation id="5366977351895725771">False (yanlış) olarak ayarlanırsa, bu kullanıcının denetlenen kullanıcı oluşturma yetkisi devre dışı bırakılır. Mevcut tüm denetlenen kullanıcılar kullanılabilir olmaya devam eder.
+
+          True (doğru) olarak ayarlanırsa veya yapılandırılmazsa, bu kullanıcı denetlenen kullanıcılar oluşturabilir ve denetlenen kullanıcıları yönetebilir.</translation>
 <translation id="8101760444435022591">Kısmi çökme bağlamında, çevrimiçi iptal denetimleri güvenlik açısından etkili yararlar sağlamaz, bunlar <ph name="PRODUCT_NAME"/> sürüm 19 ve daha yeni sürümlerde varsayılan olarak devre dışı bırakılmıştır. Bu politika true değerine ayarlandığında, önceki çalışma biçimi geri yüklenir ve çevrimiçi OCSP/CRL denetimleri yapılır.
 
       Politika ayarlanmazsa veya false değerine ayarlanırsa, Chrome 19 ve daha yeni sürümlerde çevrimiçi iptal denetimleri yapılmaz.</translation>
diff --git a/chrome/app/policy/policy_templates_uk.xtb b/chrome/app/policy/policy_templates_uk.xtb
index 68aa4d3..a74d889 100644
--- a/chrome/app/policy/policy_templates_uk.xtb
+++ b/chrome/app/policy/policy_templates_uk.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">Увімкнути аварійну комбінацію клавіш для автоматичного входу</translation>
 <translation id="3214164532079860003">Якщо це правило ввімкнено, домашня сторінка імпортується з поточного веб-переглядача за умовчанням. Якщо вимкнено, домашня сторінка не імпортується. Якщо його не встановлено, користувач отримує запит на імпортування або імпортування розпочинається автоматично.</translation>
 <translation id="5330684698007383292">Дозволити <ph name="PRODUCT_FRAME_NAME"/> обробляти вказані типи вмісту</translation>
+<translation id="6647965994887675196">Якщо для цього правила встановлено значення &quot;true&quot;, можна створювати контрольованих користувачів і користуватися їхніми обліковими записами.
+
+          Якщо для цього правила встановлено значення &quot;false&quot; або його не налаштовано, створення та вхід контрольованих користувачів буде вимкнено. Усіх наявних контрольованих користувачів буде сховано.
+
+          ПРИМІТКА. Поведінка за умовчанням для приватних і корпоративних пристроїв різниться: на приватних пристроях контрольовані користувачі ввімкнені за умовчанням, а на корпоративних пристроях – вимкнені за умовчанням.</translation>
 <translation id="5469825884154817306">Блокувати зображення на цих сайтах</translation>
 <translation id="8412312801707973447">Чи виконуються онлайнові перевірки OCSP/CRL</translation>
 <translation id="6649397154027560979">Це правило більше не використовується. Натомість використовуйте правило URLBlacklist.
@@ -885,6 +890,7 @@
 
           Якщо це правило не встановлено, режим високого контрасту вимикається під час першої появи екрана входу. Користувачі можуть вмикати чи вимикати режим високого контрасту будь-коли, і такий вибір на екрані входу буде чинним для всіх користувачів.</translation>
 <translation id="8580857153747395000">Попереджати про відвідування сайтів, які не входять у пакети вмісту.</translation>
+<translation id="350796261613621561">Увімкнути створення контрольованих користувачів.</translation>
 <translation id="602728333950205286">URL-адреса для миттєвого пошуку пошукової служби за умовчанням</translation>
 <translation id="3030000825273123558">Увімкнути повідомлення показників</translation>
 <translation id="6559057113164934677">Заборонити всім сайтам доступ до камери та мікрофона</translation>
@@ -902,6 +908,9 @@
 <translation id="8864975621965365890">Забороняє запити на вимкнення, які з’являються, коли <ph name="PRODUCT_FRAME_NAME"/> обробляє сайт.</translation>
 <translation id="3264793472749429012">Кодування пошукової служби за умовчанням</translation>
 <translation id="285480231336205327">Увімкнути режим високого контрасту</translation>
+<translation id="5366977351895725771">Якщо для цього правила встановлено значення &quot;false&quot;, цей користувач не зможе створювати контрольованих користувачів. Усі наявні контрольовані користувачі все ж будуть активні.
+
+          Якщо для цього правила встановлено значення &quot;true&quot; або його не налаштовано, цей користувач зможе створювати контрольованих користувачів і керувати ними.</translation>
 <translation id="8101760444435022591">Зважаючи на те, що онлайнові перевірки анулювання сертифікатів із так званою &quot;м’якою відмовою&quot; (soft-fail) не забезпечують ефективного покращання безпеки, за умовчанням вони вимкнені в <ph name="PRODUCT_NAME"/> 19 і новіших версіях. Якщо встановити для цього правила значення &quot;true&quot;, відновиться попередній режим і знову виконуватимуться перевірки OCSP/CRL у режимі онлайн.
 
       Якщо правило не встановлено чи його значення встановлено як &quot;false&quot;, Chrome не виконуватиме онлайнові перевірки сертифікатів у Chrome 19 і новіших версіях.</translation>
diff --git a/chrome/app/policy/policy_templates_vi.xtb b/chrome/app/policy/policy_templates_vi.xtb
index 1dfabaf..33b94eb 100644
--- a/chrome/app/policy/policy_templates_vi.xtb
+++ b/chrome/app/policy/policy_templates_vi.xtb
@@ -89,6 +89,11 @@
 
       Nếu không thiết lập chính sách này, người dùng có thể được hỏi có nhập hay không hoặc quá trình nhập có thể diễn ra tự động.</translation>
 <translation id="5330684698007383292">Cho phép <ph name="PRODUCT_FRAME_NAME"/> xử lý các loại nội dung sau</translation>
+<translation id="6647965994887675196">Nếu đặt thành đúng, bạn có thể tạo và sử dụng tài khoản người dùng bị giám sát.
+
+          Nếu đặt thành sai hoặc không định cấu hình, tính năng tạo và đăng nhập tài khoản người dùng bị giám sát sẽ bị tắt. Tất cả tài khoản người dùng bị giám sát hiện có sẽ bị ẩn.
+
+          LƯU Ý: Chế độ mặc định đối với các thiết bị dành cho người tiêu dùng và doanh nghiệp khác nhau: trên thiết bị dành cho người tiêu dùng, tài khoản người dùng bị giám sát được bật theo mặc định nhưng trên thiết bị dành cho doanh nghiệp, các tài khoản này được tắt theo mặc định.</translation>
 <translation id="5469825884154817306">Chặn hình ảnh trên các trang web này</translation>
 <translation id="8412312801707973447">Liệu các kiểm tra OCSP/CRL trực tuyến có được thực hiện hay không</translation>
 <translation id="6649397154027560979">Chính sách này không còn được dùng nữa, thay vào đó hãy sử dụng URLBlacklist.
@@ -1097,6 +1102,7 @@
 
           Nếu không đặt chính sách này, chế độ tương phản cao bị tắt khi màn hình đăng nhập hiển thị lần đầu. Người dùng có thể bật hoặc tắt chế độ tương phản cao bất cứ lúc nào và trạng thái của chế độ này trên màn hình đăng nhập được duy trì giữa những người dùng.</translation>
 <translation id="8580857153747395000">Cảnh báo khi truy cập vào các trang web bên ngoài gói nội dung.</translation>
+<translation id="350796261613621561">Bật tính năng tạo tài khoản người dùng bị giám sát.</translation>
 <translation id="602728333950205286">URL instant của nhà cung cấp dịch vụ tìm kiếm mặc định</translation>
 <translation id="3030000825273123558">Bật báo cáo số liệu</translation>
 <translation id="6559057113164934677">Không cho phép bất kỳ trang web nào truy cập vào máy ảnh và micrô</translation>
@@ -1122,6 +1128,9 @@
 <translation id="8864975621965365890">Loại bỏ lời nhắc từ chối xuất hiện khi một trang web được hiển thị bởi <ph name="PRODUCT_FRAME_NAME"/>.</translation>
 <translation id="3264793472749429012">Mã hóa của nhà cung cấp dịch vụ tìm kiếm mặc định</translation>
 <translation id="285480231336205327">Bật chế độ tương phản cao</translation>
+<translation id="5366977351895725771">Nếu đặt thành sai, tác vụ tạo tài khoản người dùng bị giám sát của người dùng này sẽ bị tắt. Mọi tài khoản người dùng bị giám sát hiện có sẽ vẫn khả dụng.
+
+          Nếu đặt thành đúng hoặc không định cấu hình, người dùng này có thể tạo và quản lý tài khoản người dùng bị giám sát.</translation>
 <translation id="8101760444435022591">Cân nhắc sự thật rằng các kiểm tra lỗi phần mềm, thu hồi trực tuyến không cung cấp lợi ích bảo mật thực sự nào, chúng bị tắt theo mặc định trong <ph name="PRODUCT_NAME"/> phiên bản 19 và cao hơn. Bằng cách đặt chính sách này thành đúng, hoạt động trước đó được khôi phục và các kiểm tra OCSP/CRL trực tuyến sẽ được thực hiện.
 
       Nếu chính sách không được đặt hoặc được đặt thành sai, khi đó Chrome sẽ không thực hiện các kiểm tra thu hồi trực tuyến trong Chrome 19 và cao hơn.</translation>
diff --git a/chrome/app/policy/policy_templates_zh-CN.xtb b/chrome/app/policy/policy_templates_zh-CN.xtb
index 213afe3..cdbc6cc 100644
--- a/chrome/app/policy/policy_templates_zh-CN.xtb
+++ b/chrome/app/policy/policy_templates_zh-CN.xtb
@@ -66,6 +66,11 @@
 <translation id="3816312845600780067">启用停止自动登录的键盘快捷键</translation>
 <translation id="3214164532079860003">如果启用此政策,就会强制从当前默认浏览器导入主页。如果停用此政策,就不会导入主页。如果未设置此政策,系统就会询问用户是否导入主页,或者系统自动进行导入。</translation>
 <translation id="5330684698007383292">允许 <ph name="PRODUCT_FRAME_NAME"/>处理以下内容类型</translation>
+<translation id="6647965994887675196">如果此政策的值设置为 True,则您可以创建和使用受监管用户帐户。
+
+          如果此政策的值设置为 False 或未配置,则系统将停用受监管用户创建和登录功能,并会隐藏所有现有的受监管用户。
+
+          请注意,普通用户设备和企业设备的默认行为有所不同:默认情况下,系统会在普通用户设备上启用受监管用户,而在企业设备上停用受监管用户。</translation>
 <translation id="5469825884154817306">在这些网站上阻止图片</translation>
 <translation id="8412312801707973447">是否执行在线 OCSP/CRL 检查</translation>
 <translation id="6649397154027560979">此政策已弃用,请改用 URLBlacklist。
@@ -885,6 +890,7 @@
 
           如果未设置此政策,则登录屏幕初次显示时会停用高反差模式。用户可以随时启用或停用高反差模式,并且其在登录屏幕上的启用或停用状态对于各用户均有效。</translation>
 <translation id="8580857153747395000">在访问非内容包内的网站时发出警告。</translation>
+<translation id="350796261613621561">启用创建受监管用户的功能。</translation>
 <translation id="602728333950205286">默认搜索服务提供商的即搜即得网址</translation>
 <translation id="3030000825273123558">启用指标报告</translation>
 <translation id="6559057113164934677">不允许任何网站使用摄像头和麦克风</translation>
@@ -902,6 +908,9 @@
 <translation id="8864975621965365890">浏览使用 <ph name="PRODUCT_FRAME_NAME"/>呈现的网站时,阻止显示“停止支持”的提示。</translation>
 <translation id="3264793472749429012">默认搜索服务提供商的编码</translation>
 <translation id="285480231336205327">启用高反差模式</translation>
+<translation id="5366977351895725771">如果此政策的值设置为 False,此用户将无法创建受监管用户。不过,所有目前受监管的用户帐户仍然可供访问。
+
+          如果此政策的值设置为 True 或未配置,这位用户即可创建并管理受监管用户。</translation>
 <translation id="8101760444435022591">鉴于软故障和在线撤消检查未提供有效的安全优势,因此它们在 <ph name="PRODUCT_NAME"/>版本 19 及更高版本中默认停用。将此政策设置为 true,即可恢复以前的行为,系统将执行在线 OCSP/CRL 检查。
 
       如果未设置此政策或将其设置为 false,Chrome 浏览器 19 及更高版本就不会执行在线撤消检查。</translation>
diff --git a/chrome/app/policy/policy_templates_zh-TW.xtb b/chrome/app/policy/policy_templates_zh-TW.xtb
index 866a686..9bab638 100644
--- a/chrome/app/policy/policy_templates_zh-TW.xtb
+++ b/chrome/app/policy/policy_templates_zh-TW.xtb
@@ -69,6 +69,11 @@
 <translation id="3816312845600780067">啟用停止自動登入的鍵盤快速鍵</translation>
 <translation id="3214164532079860003">如果啟用這項政策,則會強制從目前的預設瀏覽器匯入首頁。如果停用這項政策,則不會匯入首頁。如果未設定這項政策,系統會自動匯入首頁,或詢問使用者是否要匯入首頁。</translation>
 <translation id="5330684698007383292">允許 <ph name="PRODUCT_FRAME_NAME"/> 處理列出的內容類型</translation>
+<translation id="6647965994887675196">如果設為 True,即可建立並使用受監督的使用者。
+
+          如果設為 False 或不予設定,則無法建立及登入受監督的使用者帳戶。系統將全面隱藏現有的受監督使用者。
+
+          注意:一般使用者和企業客戶的裝置對於這項設定的預設值有所不同。在預設狀態下,一般使用者的裝置會啟用建立受監督使用者的功能,但企業戶的裝置則會停用這項功能。</translation>
 <translation id="5469825884154817306">封鎖這些網站的圖片</translation>
 <translation id="8412312801707973447">不論線上 OCSP/CRL 檢查是否執行</translation>
 <translation id="6649397154027560979">這項政策已淘汰,請改用 URLBlacklist。
@@ -894,6 +899,7 @@
 
           如果您未設定這項政策,則系統會在初次顯示登入畫面時停用高反差模式。使用者隨時都可以啟用或停用高反差模式,而高反差模式在登入畫面的狀態則視使用者的選擇而定 (均為永久性)。</translation>
 <translation id="8580857153747395000">瀏覽非內容套件內網站時顯示警告。</translation>
+<translation id="350796261613621561">啟用建立受監督使用者的功能。</translation>
 <translation id="602728333950205286">預設搜尋引擎互動智慧搜尋網址</translation>
 <translation id="3030000825273123558">啟用計量報告</translation>
 <translation id="6559057113164934677">不允許任何網站使用攝影機和麥克風</translation>
@@ -911,6 +917,9 @@
 <translation id="8864975621965365890">瀏覽使用 <ph name="PRODUCT_FRAME_NAME"/>轉譯的網站時,隱藏停止支援提示。</translation>
 <translation id="3264793472749429012">預設搜尋引擎編碼</translation>
 <translation id="285480231336205327">啟用高反差模式</translation>
+<translation id="5366977351895725771">如果設為 False,這位使用者將無法建立受監督的使用者。目前如有任何受監督的使用者帳戶,則仍然可供存取。
+
+          如果設為 True 或不予設定,這位使用者即可建立並管理受監督的使用者。</translation>
 <translation id="8101760444435022591">由於軟失敗線上撤銷檢查不會提供有效的安全性效益,因此在 <ph name="PRODUCT_NAME"/> 版本 19 和更新版本中,根據預設這些檢查已停用。將這項政策設定為 True,系統會還原先前行為,並且會執行線上 OCSP/CRL 檢查。
 
       如果您沒有設定這項政策,或將政策設定為 False,則 Chrome 不會在 Chrome 19 和更新版本中執行線上撤銷檢查。</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index 2db3d44..00ace1a 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -2800,7 +2800,7 @@
 <translation id="7525138786556653796">Přepne na schéma šifrování podporované novým serverem synchronizace. Upozornění: touto akcí dojde ke změně dat synchronizace a někteří klienti je pak nemusí přečíst.</translation>
 <translation id="2498765460639677199">Obrovské</translation>
 <translation id="2378982052244864789">Vyberte adresář rozšíření.</translation>
-<translation id="7861215335140947162">Stahování</translation>
+<translation id="7861215335140947162">&amp;Stažené soubory</translation>
 <translation id="6586099239452884121">Prohlížení v roli hosta</translation>
 <translation id="1358735829858566124">Soubor nebo adresář nelze použít.</translation>
 <translation id="175772926354468439">Aktivovat motiv</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index d52d5dd..c40251e 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -788,7 +788,7 @@
 <translation id="7550830279652415241">bookmarks_<ph name="DATESTAMP"/>.html</translation>
 <translation id="6327653052522436195">Ort</translation>
 <translation id="6828153365543658583">Anmeldung auf die folgenden Nutzer beschränken:</translation>
-<translation id="8106045200081704138">Mit mir geteilt</translation>
+<translation id="8106045200081704138">Für mich freigegeben</translation>
 <translation id="1652965563555864525">&amp;Stummschalten</translation>
 <translation id="4200983522494130825">&amp;Neuer Tab</translation>
 <translation id="7979036127916589816">Synchronisierungsfehler</translation>
@@ -3490,7 +3490,7 @@
 <translation id="1197979282329025000">Beim Abrufen der Druckerfunktionen für Drucker &quot;<ph name="PRINTER_NAME"/>&quot; ist ein Fehler aufgetreten. Dieser Drucker konnte nicht mit <ph name="CLOUD_PRINT_NAME"/> registriert werden.</translation>
 <translation id="890308499387283275">Chrome kann Datei nicht herunterladen.</translation>
 <translation id="6557565812667414268">Nur für High DPI-Displays aktiviert</translation>
-<translation id="5469954281417596308">Lesezeichen-Manager</translation>
+<translation id="5469954281417596308">Lesezeichenmanager</translation>
 <translation id="5288481194217812690"><ph name="FILENAME"/></translation>
 <translation id="4151234098429563754">Diese Seite enthält ein Skript von nicht authentifizierten Quellen.</translation>
 <translation id="1143142264369994168">Signaturgeber des Zertifikats</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index dab3c50..29299fe 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -66,7 +66,7 @@
 <translation id="479384608159513044">Attiva gruppo di app OS X per Avvio applicazioni.</translation>
 <translation id="390181652609784098">Ora puoi accedere ai tuoi Preferiti, alla tua cronologia e ad altre impostazioni su tutti i dispositivi su cui esegui l'accesso.</translation>
 <translation id="368260109873638734">Dettagli sui problemi di questo sito web</translation>
-<translation id="7409233648990234464">Riavvia Powerwash</translation>
+<translation id="7409233648990234464">Riavvia ed esegui Powerwash</translation>
 <translation id="7428534988046001922">Le seguenti applicazioni sono ora installate:</translation>
 <translation id="787386463582943251">Aggiungi indirizzo email</translation>
 <translation id="2833791489321462313">Richiedi la password per riattivazione da sospensione</translation>
@@ -3191,7 +3191,7 @@
 <translation id="6442187272350399447">Strepitoso</translation>
 <translation id="7317938878466090505"><ph name="PROFILE_NAME"/> (corrente)</translation>
 <translation id="6774230405643443657">Abilita la decodifica differita delle immagini.</translation>
-<translation id="2148999191776934271"><ph name="HOUR"/>:<ph name="MINUTE"/> rimanenti al completamento della ricarica</translation>
+<translation id="2148999191776934271"><ph name="HOUR"/>:<ph name="MINUTE"/> per completare la ricarica</translation>
 <translation id="6007237601604674381">Spostamento non riuscito. <ph name="ERROR_MESSAGE"/></translation>
 <translation id="907841381057066561">Operazione di creazione di un file zip temporaneo durante la creazione del pacchetto non riuscita.</translation>
 <translation id="1881456419707551346">Dettagli connessione</translation>
@@ -4318,7 +4318,7 @@
 <translation id="8119381715954636144">Identità non verificata</translation>
 <translation id="1497270430858433901">Hai ottenuto l'utilizzo gratuito di <ph name="DATA_AMOUNT"/> in data <ph name="DATE"/></translation>
 <translation id="1779652936965200207">Inserisci questa passkey su &quot;<ph name="DEVICE_NAME"/>&quot;:</translation>
-<translation id="8307376264102990850">Calcolo del tempo rimanente al completamento della ricarica</translation>
+<translation id="8307376264102990850">Calcolo del tempo per completare la ricarica</translation>
 <translation id="636850387210749493">Registrazione aziendale</translation>
 <translation id="4602466770786743961">Consenti sempre a <ph name="HOST"/> di accedere alla webcam e al microfono</translation>
 <translation id="852573274664085347">La modifica al tocco può essere inizializzata toccando un campo di testo o un testo selezionato.</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index 687bdba..87bba1b 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -443,7 +443,7 @@
 <translation id="8373486119359090598">הפעל מחוות מתקדמות</translation>
 <translation id="5197255632782567636">אינטרנט</translation>
 <translation id="8787254343425541995">אפשר שרתי proxy עבור רשתות משותפות</translation>
-<translation id="4755860829306298968">נהל חסימת פלאגין...</translation>
+<translation id="4755860829306298968">נהל חסימת יישומי פלאגין...</translation>
 <translation id="8879284080359814990">הצ&amp;ג ככרטיסייה</translation>
 <translation id="4314714876846249089"><ph name="PRODUCT_NAME"/>
           נתקל בבעיות בגישה לרשת.
@@ -2410,7 +2410,7 @@
 <translation id="4578576389176790381">תוכן מ-<ph name="ELEMENTS_HOST_NAME"/>, מפיצה ידועה של תוכנות זדוניות, הוכנס לדף האינטרנט הזה. סביר מאוד שביקור בדף זה יגרום לפגיעה ב-Mac שלך על ידי תוכנה זדונית.</translation>
 <translation id="2208158072373999562">ארכיון Zip</translation>
 <translation id="2756798847867733934">כרטיס SIM מושבת</translation>
-<translation id="5464632865477611176">הרץ בפעם הזאת</translation>
+<translation id="5464632865477611176">הפעל באופן חד פעמי</translation>
 <translation id="4268025649754414643">קידוד מפתח</translation>
 <translation id="916745092148443205">הדגשה של מחוות הקשה</translation>
 <translation id="1168020859489941584">פותח ב-<ph name="TIME_REMAINING"/>...</translation>
@@ -3882,7 +3882,7 @@
 <translation id="7538714048953037041">רשת Wimax</translation>
 <translation id="641087317769093025">לא ניתן לבטל את הדחיסה של התוסף</translation>
 <translation id="5263972071113911534">לפני <ph name="NUMBER_MANY"/> ימים</translation>
-<translation id="7461850476009326849">סגור פלאגאינים בודדים...</translation>
+<translation id="7461850476009326849">השבת חלק מיישומי הפלאגין...</translation>
 <translation id="4097411759948332224">שלח צילום מסך של דף זה</translation>
 <translation id="2231990265377706070">סימן קריאה</translation>
 <translation id="7199540622786492483"><ph name="PRODUCT_NAME"/> אינו מעודכן מכיוון שלא הופעל במשך זמן מה. יש עדכון זמין והוא יחול ברגע שתבצע הפעלה מחדש.</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index f469417..22315b1 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -3467,7 +3467,7 @@
 <translation id="5293659407874396561"><ph name="SUBJECT"/>(<ph name="ISSUER"/>)</translation>
 <translation id="2115926821277323019">유효한 URL이어야 함</translation>
 <translation id="3464726836683998962">모바일 데이터 로밍 사용 안 함</translation>
-<translation id="8986494364107987395">사용 통계 및 충돌 보고서를 Google에 자동으로 보내기</translation>
+<translation id="8986494364107987395">사용 통계 및 오류 보고서를 Google에 자동으로 보내기</translation>
 <translation id="7070714457904110559">위치 정보 기능에 실험실 확장 프로그램을 사용하도록 설정합니다. 여기에는 운영체제 위치 API를 사용(가능한 경우)하고 더 정확한 위치 확인을 위해 로컬 네트워크 설정 데이터를 Google 위치 서비스에 전송하는 기능이 포함됩니다.</translation>
 <translation id="6701535245008341853">프로필을 가져올 수 없습니다.</translation>
 <translation id="8303655282093186569">병음 입력 설정</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 023d0fc..5de0e9e 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -2511,7 +2511,7 @@
 <translation id="1800987794509850828">Plug-inbroker: <ph name="PLUGIN_NAME"/></translation>
 <translation id="8871696467337989339">U gebruikt een niet-ondersteunde opdrachtregelmarkering: <ph name="BAD_FLAG"/>. De stabiliteit en beveiliging zullen hieronder lijden.</translation>
 <translation id="1774833706453699074">Bladwijzer toevoegen voor geopende pagina's...</translation>
-<translation id="5031870354684148875">Over Google Vertalen</translation>
+<translation id="5031870354684148875">Over Google Translate</translation>
 <translation id="5702389759209837579">Toegang tot uw geopende tabbladen op al uw apparaten.</translation>
 <translation id="8381055888183086563">Hiermee worden contextmenuopties voor foutopsporing ingeschakeld, zoals 'Element controleren' voor pakketapps.</translation>
 <translation id="1675020493753693718">Interactief automatisch aanvullen inschakelen</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index c8ecf07..fe17186 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -406,7 +406,7 @@
 <translation id="6337534724793800597">Chuja sera kwa jina</translation>
 <translation id="3583413473134066075">Inaenda.. Inaenda... Imeenda.</translation>
 <translation id="6585234750898046415">Chagua picha ya kuonyesha ya akaunti yako kwenye skrini ya kuingia.</translation>
-<translation id="7957054228628133943">Dhibiti uzuiaji wa viibukizi...</translation>
+<translation id="7957054228628133943">Dhibiti uzuiaji wa madirisha ibukizi...</translation>
 <translation id="179767530217573436">wiki 4 zilizopita</translation>
 <translation id="2279770628980885996">Hali isiyotarajiwa ilishuhudiwa wakati seva ilipokuwa ikijaribu kutimiza ombi.</translation>
 <translation id="210116126541562594">Kimezuiwa kwa chauo-msingi</translation>
@@ -1003,7 +1003,7 @@
 <translation id="1465078513372056452">Tumia anwani ya utozaji kwa usafirishaji</translation>
 <translation id="8494979374722910010">Jaribio la kufikia seva limeshindwa.</translation>
 <translation id="1864756863218646478">Faili haikupatikana.</translation>
-<translation id="7810202088502699111">Viibukizi vilizuiwa kwenye ukurasa huu.</translation>
+<translation id="7810202088502699111">Madirisha ibukizi yalizuiwa kwenye ukurasa huu.</translation>
 <translation id="3808873045540128170">Amekufa, Juma!</translation>
 <translation id="3452404311384756672">Muda unaotumika kuleta:</translation>
 <translation id="646727171725540434">Proksi ya HTTP</translation>
@@ -1064,7 +1064,7 @@
 <translation id="7740996059027112821">Wastani</translation>
 <translation id="6973656660372572881">Seva zote za proksi thabiti na URL ya hati ya .pac zimebainishwa.</translation>
 <translation id="409980434320521454">Ulinganishaji umeshindwa</translation>
-<translation id="192144045824434199">Wezesha vidirsha vya madirisha yanayofungukia nje ya fremu ya kivinjari. Jaribio la kufungua Kidirisha litafunuga kiibukizi badala yake iwapo halitawezeshwa. Vidirisha vinawezeshwa mara kwa mara kwenye vituo vya dev na kanari.</translation>
+<translation id="192144045824434199">Washa vidirisha vinavyofungukia nje ya fremu ya kivinjari. Jaribio la kufungua Kidirisha, badala yake, litafungua kiibukizi iwapo hakijawashwa. Vidirisha vinawashwa mara kwa mara kwenye vituo vya usanidi na kanari.</translation>
 <translation id="6344783595350022745">Futa Matini</translation>
 <translation id="1426410128494586442">Ndio</translation>
 <translation id="2359345697448000899">Dhibiti viendelezi vyako kwa kubofya Viendelezi katika menyu ya Zana.</translation>
@@ -1289,7 +1289,7 @@
 <translation id="8340999562596018839">Maoni ya yaliyotamkwa</translation>
 <translation id="3866443872548686097">Midia yako fufuzi iko tayari. Unaweza kuiondoa kwenye mfumo wako.</translation>
 <translation id="6824564591481349393">Nakili Anwani ya Barua P&amp;epe</translation>
-<translation id="907148966137935206">Usiruhusu tovuti yoyote ionyeshe viibukizi (inapendekezwa)</translation>
+<translation id="907148966137935206">Usiruhusu tovuti yoyote ionyeshe madirisha ibukizi (inapendekezwa)</translation>
 <translation id="5184063094292164363">Kidhibiti Kazi cha &amp;JavaScript</translation>
 <translation id="333371639341676808">Zuia ukurasa huu usiunde majadiliano zaidi.</translation>
 <translation id="2280486287150724112">Pambizo la kulia</translation>
@@ -1421,7 +1421,7 @@
 <translation id="644038709730536388">Pata maelezo zaidi kuhusu jinsi ya kujilinda dhidi ya programu hatari kwenye wavuti.</translation>
 <translation id="5730457677019354032">Onyesha matokeo ya Papo hapo (Viendelezi vya Papo Hapo ni vya karibu nawe pekee).</translation>
 <translation id="6677380263041696420">Badilisha picha...</translation>
-<translation id="2155931291251286316">Ruhusu viibukizi kutoka <ph name="HOST"/> kila wakati</translation>
+<translation id="2155931291251286316">Ruhusu madirisha ibukizi kutoka <ph name="HOST"/> kila wakati</translation>
 <translation id="3445830502289589282">Uthibitishaji wa awamu ya pili:</translation>
 <translation id="5650551054760837876">Matokeo ya utafutaji hayakupatikana.</translation>
 <translation id="5494362494988149300">Funga &amp;Utakapomalizika</translation>
@@ -1461,7 +1461,7 @@
 <translation id="4874539263382920044">Kichwa sharti kiwe na angalua kibambo kimoja</translation>
 <translation id="9214520840402538427">Lo! Uanzishaji wa muda wa usakinishaji sifa umechina. Tafadhali wasiliana na mwakilishi wako wa kutoa msaada.</translation>
 <translation id="798525203920325731">Nafasi za majina za mtandao</translation>
-<translation id="7092106376816104">Vighairi vya viibukizi</translation>
+<translation id="7092106376816104">Vighairi madirisha ibukizi</translation>
 <translation id="4600958291864306415">inaunda...</translation>
 <translation id="8594787581355215556">Umeingia kama <ph name="USER_EMAIL_ADDRESS"/>. Dhibiti data yako iliyolinganishwa kwenye <ph name="BEGIN_LINK"/>Dashibodi ya Google<ph name="END_LINK"/>.</translation>
 <translation id="4338600611020922010">Ongeza kwa skrini ya mwanzo</translation>
@@ -1795,7 +1795,7 @@
 <translation id="7978976675897366893">Ongeza anwani ya usafirishaji...</translation>
 <translation id="2084978867795361905">MS-IME</translation>
 <translation id="1818196664359151069">Msongo:</translation>
-<translation id="3481915276125965083">Viibukizi vifuatavyo vilizuiwa kwenye ukurasa huu:</translation>
+<translation id="3481915276125965083">Madirisha ibukizi yafuatayo yalizuiwa kwenye ukurasa huu:</translation>
 <translation id="7163503212501929773">zimesalia saa <ph name="NUMBER_MANY"/></translation>
 <translation id="7705276765467986571">Isingeweza kupakia muundo wa alamisho.</translation>
 <translation id="750413812607578381">Unapaswa kuanzisha upya <ph name="PRODUCT_NAME"/> sasa.</translation>
@@ -1862,7 +1862,7 @@
 <translation id="5486561344817861625">Unda Uanzishaji upya wa Ukurasa</translation>
 <translation id="2367972762794486313">Onyesha programu</translation>
 <translation id="5602600725402519729">&amp;Pakia tena</translation>
-<translation id="6955446738988643816">Kagua Kiibukizi</translation>
+<translation id="6955446738988643816">Kagua Dirisha Ibukizi</translation>
 <translation id="172612876728038702">TPM inasanidiwa. Tafadhali vumilia; huenda hii ikachukua dakika chache.</translation>
 <translation id="2836635946302913370">Kuingia kwa jina hili la mtumiaji kumelemazwa na msimamizi wako.</translation>
 <translation id="3512307528596687562">Ukurasa wa wavuti ulio <ph name="URL"/> umesababisha kuelekezwa kwingine kwingi. Kufuta vidakuzi vyako vya tovuti hii au kuruhusu vidakuzi vya mtu mwingine kunaweza kutatua tatizo. Ikiwa sivyo, kuna uwezekano ni tatizo la usanidi wa seva na siyo tatizo katika kifaa chako.</translation>
@@ -2680,7 +2680,7 @@
 <translation id="942954117721265519">Hakuna picha katika saraka hii.</translation>
 <translation id="671928215901716392">Funga skrini</translation>
 <translation id="2241468422635044128">Imeruhusiwa na kiendelezi</translation>
-<translation id="3727187387656390258">Kagua kiibukizi</translation>
+<translation id="3727187387656390258">Kagua dirisha ibukizi</translation>
 <translation id="361106536627977100">Data ya Flash</translation>
 <translation id="569068482611873351">Ingiza...</translation>
 <translation id="6571070086367343653">Hariri kadi ya mkopo</translation>
@@ -3199,7 +3199,7 @@
 <translation id="3414758901256308084">Sakinua</translation>
 <translation id="7791536208663663346">Inalemaza uondoaji msimbo kwenye video ya maunzi iliyoharakishwa inapopatikana.</translation>
 <translation id="87377425248837826">Wezesha Paneli</translation>
-<translation id="2805707493867224476">Ruhusu tovuti zote zionyeshe viibukizi</translation>
+<translation id="2805707493867224476">Ruhusu tovuti zote zionyeshe madirisha ibukizi</translation>
 <translation id="3561217442734750519">Thamani ya kuingizwa kwa ufunguo binafsi sharti iwe njia halali.</translation>
 <translation id="2984337792991268709">Leo <ph name="TODAY_DAYTIME"/></translation>
 <translation id="5227808808023563348">Tafuta maandishi ya awali</translation>
@@ -4720,7 +4720,7 @@
 <translation id="4614787993721978672">Inaruhusu mtumaji kubadili kati ya watoa huduma wa simu kutuma Kiolesura. Onyo: Mtoa huduma wa Sprint atafanya kazi TU kwa watumiaji walio na mpango wa Sprint uliopo.</translation>
 <translation id="146220085323579959">Mtandao umekatizwa. Tafadhali kagua muunganisho wako wa mtandao na ujaribu tena.</translation>
 <translation id="6263284346895336537">Sio Muhimu</translation>
-<translation id="6409731863280057959">Viibukizi</translation>
+<translation id="6409731863280057959">Madirisha ibukizi</translation>
 <translation id="3459774175445953971">Ilibadilishwa mwisho:</translation>
 <translation id="2569850583200847032">Washa utoaji wa nenosiri.</translation>
 <translation id="6122191549521593678">Mtandaoni</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index 2b02f2b..1019ddd 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -941,7 +941,7 @@
 <translation id="5361686177218315158">Ngoại lệ máy ảnh và micrô Adobe Flash Player khác nhau.</translation>
 <translation id="3395011312013575824">Đang gửi.</translation>
 <translation id="5043766625767731235">Tiếp tục chặn plug-in không có hộp cát</translation>
-<translation id="4667176955651319626">Chặn dữ liệu web và cookie bên thứ ba</translation>
+<translation id="4667176955651319626">Chặn dữ liệu web và cookie của bên thứ ba</translation>
 <translation id="6686490380836145850">Đóng tab phía bên phải</translation>
 <translation id="8366694425498033255">Phím chọn</translation>
 <translation id="5608669887400696928"><ph name="NUMBER_DEFAULT"/> giờ</translation>
@@ -2574,7 +2574,7 @@
 <translation id="994901932508062332">Tháng vừa qua</translation>
 <translation id="1720318856472900922">Xác thực Máy chủ TLS WWW</translation>
 <translation id="62243461820985415">Chrome không thể tải xuống hình nền này.</translation>
-<translation id="1752977958630076881">Chỉ giữ dữ liệu cục bộ cho đến khi tôi thoát trình duyệt của mình</translation>
+<translation id="1752977958630076881">Chỉ lưu giữ dữ liệu cục bộ cho đến khi tôi thoát trình duyệt của mình</translation>
 <translation id="8550022383519221471">Dịch vụ đồng bộ hóa không khả dụng cho tên miền của bạn.</translation>
 <translation id="1658424621194652532">Trang này đang truy cập micrô của bạn.</translation>
 <translation id="3355823806454867987">Thay đổi thiết lập proxy...</translation>
diff --git a/chrome/app/theme/theme_resources.grd b/chrome/app/theme/theme_resources.grd
index c86a968..8a9e420 100644
--- a/chrome/app/theme/theme_resources.grd
+++ b/chrome/app/theme/theme_resources.grd
@@ -248,6 +248,7 @@
         <structure type="chrome_scaled_image" name="IDR_ENROLL_SUCCESS" file="enroll_success.png" />
       </if>
       <structure type="chrome_scaled_image" name="IDR_ERROR_NETWORK_GENERIC" file="common/error_network_generic.png" />
+      <structure type="chrome_scaled_image" name="IDR_ERROR_NETWORK_OFFLINE" file="common/error_network_offline.png" />
       <structure type="chrome_scaled_image" name="IDR_EXTENSIONS_FAVICON" file="common/favicon_extensions.png" />
       <structure type="chrome_scaled_image" name="IDR_EXTENSIONS_SCRIPT_BUBBLE" file="common/script_bubble.png" />
       <structure type="chrome_scaled_image" name="IDR_EXTENSIONS_PUZZLE_PIECE" file="common/exstension-features_28.png" />
@@ -483,7 +484,6 @@
       </if>
       <if expr="pp_ifdef('chromeos')">
         <structure type="chrome_scaled_image" name="IDR_NETWORK_ADD_CONNECTION" file="cros/network_add_connection.png" />
-        <structure type="chrome_scaled_image" name="IDR_NETWORK_ERROR" file="cros/network_error.png" />
         <structure type="chrome_scaled_image" name="IDR_NETWORK_HIDE_PASSWORD" file="cros/network_hide_password.png" />
         <structure type="chrome_scaled_image" name="IDR_NETWORK_HIDE_PASSWORD_HOVER" file="cros/network_hide_password_hover.png" />
         <structure type="chrome_scaled_image" name="IDR_NETWORK_SHOW_PASSWORD" file="cros/network_show_password.png" />
diff --git a/chrome/browser/DEPS b/chrome/browser/DEPS
index b5c1fc7..ca42870 100644
--- a/chrome/browser/DEPS
+++ b/chrome/browser/DEPS
@@ -106,7 +106,4 @@
   "+third_party/WebKit/public/web/WebScreenInfo.h",
   "+third_party/WebKit/public/web/WebTextDirection.h",
   "+third_party/WebKit/public/web/WebWindowFeatures.h",
-
-  # These should be burned down. http://crbug.com/237267
-  "!third_party/WebKit/public/web/WebView.h",
 ]
diff --git a/chrome/browser/OWNERS b/chrome/browser/OWNERS
index f9db9bc..b614afe 100644
--- a/chrome/browser/OWNERS
+++ b/chrome/browser/OWNERS
@@ -4,6 +4,7 @@
 
 per-file chrome_content_browser_client.cc=*
 per-file chrome_content_browser_client.h=*
+per-file chrome_content_browser_client_browsertest.cc=*
 
 per-file chrome_browser_field_trials*=asvitkine@chromium.org
 per-file chrome_browser_field_trials*=stevet@chromium.org
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 9879d13..9e5a15e 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -1228,14 +1228,16 @@
     IDS_FLAGS_ASH_ENABLE_NEW_AUDIO_HANDLER_NAME,
     IDS_FLAGS_ASH_ENABLE_NEW_AUDIO_HANDLER_DESCRIPTION,
     kOsCrOS,
-    ENABLE_DISABLE_VALUE_TYPE("", ash::switches::kAshDisableNewAudioHandler)
+    ENABLE_DISABLE_VALUE_TYPE(ash::switches::kAshEnableNewAudioHandler,
+                              ash::switches::kAshDisableNewAudioHandler)
   },
   {
     "ash-audio-device-menu",
     IDS_FLAGS_ASH_AUDIO_DEVICE_MENU_NAME,
     IDS_FLAGS_ASH_AUDIO_DEVICE_MENU_DESCRIPTION,
     kOsCrOS,
-    ENABLE_DISABLE_VALUE_TYPE("", ash::switches::kAshDisableAudioDeviceMenu)
+    ENABLE_DISABLE_VALUE_TYPE(ash::switches::kAshEnableAudioDeviceMenu,
+                              ash::switches::kAshDisableAudioDeviceMenu)
   },
   {
     "enable-carrier-switching",
diff --git a/chrome/browser/browsing_data/browsing_data_remover.cc b/chrome/browser/browsing_data/browsing_data_remover.cc
index 1eb406a..15b8959 100644
--- a/chrome/browser/browsing_data/browsing_data_remover.cc
+++ b/chrome/browser/browsing_data/browsing_data_remover.cc
@@ -849,10 +849,8 @@
 void BrowsingDataRemover::ClearShaderCacheOnUIThread() {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 
-  BrowserContext::GetDefaultStoragePartition(profile_)->ClearDataForRange(
-      content::StoragePartition::REMOVE_DATA_MASK_SHADER_CACHE,
-      content::StoragePartition::kAllStorage,
-      delete_begin_, delete_end_,
+  BrowserContext::GetDefaultStoragePartition(profile_)->AsyncClearDataBetween(
+      content::StoragePartition::kShaderStorage, delete_begin_, delete_end_,
       base::Bind(&BrowsingDataRemover::ClearedShaderCache,
                  base::Unretained(this)));
 }
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index a166d59..a47541a 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -2195,6 +2195,11 @@
   // actually handle them.
   handler->AddHandlerPair(&WillHandleBrowserAboutURL,
                           BrowserURLHandler::null_handler());
+
+  // Handler to rewrite chrome://newtab for InstantExtended.
+  handler->AddHandlerPair(&chrome::HandleNewTabURLRewrite,
+                          &chrome::HandleNewTabURLReverseRewrite);
+
   // chrome: & friends.
   handler->AddHandlerPair(&HandleWebUI, &HandleWebUIReverse);
 }
diff --git a/chrome/browser/chrome_content_browser_client_browsertest.cc b/chrome/browser/chrome_content_browser_client_browsertest.cc
index de24691..9d4b494 100644
--- a/chrome/browser/chrome_content_browser_client_browsertest.cc
+++ b/chrome/browser/chrome_content_browser_client_browsertest.cc
@@ -3,8 +3,10 @@
 // found in the LICENSE file.
 
 #include "base/command_line.h"
+#include "chrome/browser/search/search.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/common/chrome_switches.h"
 #include "chrome/test/base/in_process_browser_test.h"
 #include "chrome/test/base/ui_test_utils.h"
 #include "content/public/browser/navigation_controller.h"
@@ -75,6 +77,37 @@
   EXPECT_EQ(url, entry->GetVirtualURL());
 }
 
+IN_PROC_BROWSER_TEST_F(ChromeContentBrowserClientBrowserTest,
+                       UberURLHandler_InstantExtendedNewTabPage) {
+  const GURL url_original("chrome://newtab");
+  const GURL url_rewritten("http://example.com/newtab");
+  CommandLine::ForCurrentProcess()->AppendSwitchASCII(
+      switches::kInstantNewTabURL, url_rewritten.spec());
+  chrome::EnableInstantExtendedAPIForTesting();
+
+  ui_test_utils::NavigateToURL(browser(), url_original);
+  NavigationEntry* entry = GetLastCommittedEntry();
+
+  ASSERT_TRUE(entry != NULL);
+  EXPECT_EQ(url_rewritten, entry->GetURL());
+  EXPECT_EQ(url_original, entry->GetVirtualURL());
+}
+
+IN_PROC_BROWSER_TEST_F(ChromeContentBrowserClientBrowserTest,
+                       UberURLHandler_InstantExtendedNewTabPageDisabled) {
+  const GURL url_original("chrome://newtab");
+  const GURL url_rewritten("http://example.com/newtab");
+  CommandLine::ForCurrentProcess()->AppendSwitchASCII(
+      switches::kInstantNewTabURL, url_rewritten.spec());
+
+  ui_test_utils::NavigateToURL(browser(), url_original);
+  NavigationEntry* entry = GetLastCommittedEntry();
+
+  ASSERT_TRUE(entry != NULL);
+  EXPECT_EQ(url_original, entry->GetURL());
+  EXPECT_EQ(url_original, entry->GetVirtualURL());
+}
+
 // Test that a basic navigation works in --site-per-process mode.  This prevents
 // regressions when that mode calls out into the ChromeContentBrowserClient,
 // such as http://crbug.com/164223.
diff --git a/chrome/browser/chrome_page_zoom.cc b/chrome/browser/chrome_page_zoom.cc
index acca565..ae596ce 100644
--- a/chrome/browser/chrome_page_zoom.cc
+++ b/chrome/browser/chrome_page_zoom.cc
@@ -14,8 +14,8 @@
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/user_metrics.h"
 #include "content/public/browser/web_contents.h"
+#include "content/public/common/page_zoom.h"
 #include "content/public/common/renderer_preferences.h"
-#include "third_party/WebKit/public/web/WebView.h"
 
 using content::UserMetricsAction;
 
@@ -36,7 +36,7 @@
   for (size_t i = 0; i < kPresetZoomFactorsSize; i++) {
     double zoom_value = kPresetZoomFactors[i];
     if (value_type == PAGE_ZOOM_VALUE_TYPE_LEVEL)
-      zoom_value = WebKit::WebView::zoomFactorToZoomLevel(zoom_value);
+      zoom_value = content::ZoomFactorToZoomLevel(zoom_value);
     if (content::ZoomValuesEqual(zoom_value, custom_value))
       found_custom = true;
     zoom_values.push_back(zoom_value);
@@ -44,10 +44,10 @@
   // If the preset array did not contain the custom value, append it to the
   // vector and then sort.
   double min = value_type == PAGE_ZOOM_VALUE_TYPE_LEVEL ?
-      WebKit::WebView::zoomFactorToZoomLevel(content::kMinimumZoomFactor) :
+      content::ZoomFactorToZoomLevel(content::kMinimumZoomFactor) :
       content::kMinimumZoomFactor;
   double max = value_type == PAGE_ZOOM_VALUE_TYPE_LEVEL ?
-      WebKit::WebView::zoomFactorToZoomLevel(content::kMaximumZoomFactor) :
+      content::ZoomFactorToZoomLevel(content::kMaximumZoomFactor) :
       content::kMaximumZoomFactor;
   if (!found_custom && custom_value > min && custom_value < max) {
     zoom_values.push_back(custom_value);
diff --git a/chrome/browser/chromeos/drive/change_list_loader_unittest.cc b/chrome/browser/chromeos/drive/change_list_loader_unittest.cc
index d774a64..7605e61 100644
--- a/chrome/browser/chromeos/drive/change_list_loader_unittest.cc
+++ b/chrome/browser/chromeos/drive/change_list_loader_unittest.cc
@@ -66,6 +66,35 @@
   DISALLOW_COPY_AND_ASSIGN(TestChangeListLoaderObserver);
 };
 
+class TestDriveService : public FakeDriveService {
+ public:
+  TestDriveService() : never_return_all_resource_list_(false),
+                       blocked_call_count_(0) {}
+
+  void set_never_return_all_resource_list(bool value) {
+    never_return_all_resource_list_ = value;
+  }
+
+  int blocked_call_count() const { return blocked_call_count_; }
+
+  // FakeDriveService override.
+  virtual google_apis::CancelCallback GetAllResourceList(
+      const google_apis::GetResourceListCallback& callback) OVERRIDE {
+    if (never_return_all_resource_list_) {
+      ++blocked_call_count_;
+      return google_apis::CancelCallback();
+    }
+    return FakeDriveService::GetAllResourceList(callback);
+  }
+
+ private:
+  // GetAllResourceList never returns result when this is set to true.
+  // Used to emulate the real server's slowness.
+  bool never_return_all_resource_list_;
+
+  int blocked_call_count_;  // Number of blocked method calls.
+};
+
 class ChangeListLoaderTest : public testing::Test {
  protected:
   virtual void SetUp() OVERRIDE {
@@ -73,7 +102,7 @@
     pref_service_.reset(new TestingPrefServiceSimple);
     test_util::RegisterDrivePrefs(pref_service_->registry());
 
-    drive_service_.reset(new FakeDriveService);
+    drive_service_.reset(new TestDriveService);
     ASSERT_TRUE(drive_service_->LoadResourceListForWapi(
         "gdata/root_feed.json"));
     ASSERT_TRUE(drive_service_->LoadAccountMetadataForWapi(
@@ -121,7 +150,7 @@
   content::TestBrowserThreadBundle thread_bundle_;
   base::ScopedTempDir temp_dir_;
   scoped_ptr<TestingPrefServiceSimple> pref_service_;
-  scoped_ptr<FakeDriveService> drive_service_;
+  scoped_ptr<TestDriveService> drive_service_;
   scoped_ptr<JobScheduler> scheduler_;
   scoped_ptr<ResourceMetadataStorage,
              test_util::DestroyHelperForTests> metadata_storage_;
@@ -224,6 +253,112 @@
             metadata_->GetResourceEntryByPath(file_path, &entry));
 }
 
+TEST_F(ChangeListLoaderTest, LoadIfNeeded_MyDrive) {
+  // Emulate the slowness of GetAllResourceList().
+  drive_service_->set_never_return_all_resource_list(true);
+
+  // Load grand root.
+  FileError error = FILE_ERROR_FAILED;
+  change_list_loader_->LoadIfNeeded(
+      DirectoryFetchInfo(util::kDriveGrandRootSpecialResourceId, 0),
+      google_apis::test_util::CreateCopyResultCallback(&error));
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(FILE_ERROR_OK, error);
+
+  // GetAllResourceList() was called.
+  EXPECT_EQ(1, drive_service_->blocked_call_count());
+
+  // My Drive is present in the local metadata, but its child is not.
+  ResourceEntry entry;
+  EXPECT_EQ(FILE_ERROR_OK,
+            metadata_->GetResourceEntryByPath(util::GetDriveMyDriveRootPath(),
+                                              &entry));
+  const int64 mydrive_changestamp =
+      entry.directory_specific_info().changestamp();
+
+  base::FilePath file_path =
+      util::GetDriveMyDriveRootPath().AppendASCII("File 1.txt");
+  EXPECT_EQ(FILE_ERROR_NOT_FOUND,
+            metadata_->GetResourceEntryByPath(file_path, &entry));
+
+  // Load My Drive.
+  change_list_loader_->LoadIfNeeded(
+      DirectoryFetchInfo(drive_service_->GetRootResourceId(),
+                         mydrive_changestamp),
+      google_apis::test_util::CreateCopyResultCallback(&error));
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(FILE_ERROR_OK, error);
+
+  // Now the file is present.
+  EXPECT_EQ(FILE_ERROR_OK,
+            metadata_->GetResourceEntryByPath(file_path, &entry));
+}
+
+TEST_F(ChangeListLoaderTest, LoadIfNeeded_NewDirectories) {
+  // Make local metadata up to date.
+  FileError error = FILE_ERROR_FAILED;
+  change_list_loader_->LoadIfNeeded(
+      DirectoryFetchInfo(),
+      google_apis::test_util::CreateCopyResultCallback(&error));
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(FILE_ERROR_OK, error);
+
+  // Add a new file.
+  scoped_ptr<google_apis::ResourceEntry> file = AddNewFile("New File");
+  ASSERT_TRUE(file);
+
+  // Emulate the slowness of GetAllResourceList().
+  drive_service_->set_never_return_all_resource_list(true);
+
+  // Enter refreshing state.
+  FileError check_for_updates_error = FILE_ERROR_FAILED;
+  change_list_loader_->CheckForUpdates(
+      google_apis::test_util::CreateCopyResultCallback(
+          &check_for_updates_error));
+  EXPECT_TRUE(change_list_loader_->IsRefreshing());
+
+  // Load My Drive.
+  change_list_loader_->LoadIfNeeded(
+      DirectoryFetchInfo(drive_service_->GetRootResourceId(),
+                         metadata_->GetLargestChangestamp()),
+      google_apis::test_util::CreateCopyResultCallback(&error));
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(FILE_ERROR_OK, error);
+
+  // The new file is present in the local metadata.
+  base::FilePath file_path =
+      util::GetDriveMyDriveRootPath().AppendASCII(file->title());
+  ResourceEntry entry;
+  EXPECT_EQ(FILE_ERROR_OK,
+            metadata_->GetResourceEntryByPath(file_path, &entry));
+}
+
+TEST_F(ChangeListLoaderTest, LoadIfNeeded_MultipleCalls) {
+  TestChangeListLoaderObserver observer(change_list_loader_.get());
+
+  // Load grand root.
+  FileError error = FILE_ERROR_FAILED;
+  change_list_loader_->LoadIfNeeded(
+      DirectoryFetchInfo(util::kDriveGrandRootSpecialResourceId, 0),
+      google_apis::test_util::CreateCopyResultCallback(&error));
+
+  // Load grand root again without waiting for the result.
+  FileError error2 = FILE_ERROR_FAILED;
+  change_list_loader_->LoadIfNeeded(
+      DirectoryFetchInfo(util::kDriveGrandRootSpecialResourceId, 0),
+      google_apis::test_util::CreateCopyResultCallback(&error2));
+  base::RunLoop().RunUntilIdle();
+
+  // Callback is called for each method call.
+  EXPECT_EQ(FILE_ERROR_OK, error);
+  EXPECT_EQ(FILE_ERROR_OK, error2);
+
+  // No duplicated resource list load and observer events.
+  EXPECT_EQ(1, drive_service_->resource_list_load_count());
+  EXPECT_EQ(1, observer.initial_load_complete_count());
+  EXPECT_EQ(1, observer.load_from_server_complete_count());
+}
+
 TEST_F(ChangeListLoaderTest, CheckForUpdates) {
   // CheckForUpdates() results in no-op before load.
   FileError check_for_updates_error = FILE_ERROR_FAILED;
diff --git a/chrome/browser/chromeos/drive/drive_integration_service.cc b/chrome/browser/chromeos/drive/drive_integration_service.cc
index 1af4edc..139292c 100644
--- a/chrome/browser/chromeos/drive/drive_integration_service.cc
+++ b/chrome/browser/chromeos/drive/drive_integration_service.cc
@@ -232,6 +232,13 @@
     drive_notification_manager->RemoveObserver(this);
 
   RemoveDriveMountPoint();
+  debug_info_collector_.reset();

+  download_handler_.reset();

+  file_write_helper_.reset();

+  file_system_.reset();

+  drive_app_registry_.reset();

+  scheduler_.reset();
+  drive_service_.reset();
 }
 
 void DriveIntegrationService::AddObserver(
diff --git a/chrome/browser/chromeos/drive/file_cache.cc b/chrome/browser/chromeos/drive/file_cache.cc
index 1b1ef5e..8ef2ab7 100644
--- a/chrome/browser/chromeos/drive/file_cache.cc
+++ b/chrome/browser/chromeos/drive/file_cache.cc
@@ -238,7 +238,6 @@
 }
 
 void FileCache::GetFileOnUIThread(const std::string& resource_id,
-                                  const std::string& md5,
                                   const GetFileFromCacheCallback& callback) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
   DCHECK(!callback.is_null());
@@ -249,7 +248,6 @@
                                    base::Bind(&FileCache::GetFile,
                                               base::Unretained(this),
                                               resource_id,
-                                              md5,
                                               cache_file_path),
                                    base::Bind(&RunGetFileFromCacheCallback,
                                               callback,
@@ -257,13 +255,12 @@
 }
 
 FileError FileCache::GetFile(const std::string& resource_id,
-                             const std::string& md5,
                              base::FilePath* cache_file_path) {
   AssertOnSequencedWorkerPool();
   DCHECK(cache_file_path);
 
   FileCacheEntry cache_entry;
-  if (!GetCacheEntry(resource_id, md5, &cache_entry) ||
+  if (!storage_->GetCacheEntry(resource_id, &cache_entry) ||
       !cache_entry.is_present())
     return FILE_ERROR_NOT_FOUND;
 
@@ -417,7 +414,6 @@
   if (cache_entry.is_dirty())
     return FILE_ERROR_OK;
 
-  // Now that file operations have completed, update metadata.
   cache_entry.set_is_dirty(true);
   return storage_->PutCacheEntry(resource_id, cache_entry) ?
       FILE_ERROR_OK : FILE_ERROR_FAILED;
@@ -427,30 +423,24 @@
                                 const std::string& md5) {
   AssertOnSequencedWorkerPool();
 
-  // |md5| is the new .<md5> extension to rename the file to.
-  // So, search for entry in cache without comparing md5.
-  FileCacheEntry cache_entry;
-
   // Clearing a dirty file means its entry and actual file blob must exist in
   // cache.
+  FileCacheEntry cache_entry;
   if (!storage_->GetCacheEntry(resource_id, &cache_entry) ||
       !cache_entry.is_present()) {
     LOG(WARNING) << "Can't clear dirty state of a file that wasn't cached: "
-                 << "res_id=" << resource_id
-                 << ", md5=" << md5;
+                 << resource_id;
     return FILE_ERROR_NOT_FOUND;
   }
 
   // If a file is not dirty (it should have been marked dirty via
   // MarkDirtyInCache), clearing its dirty state is an invalid operation.
   if (!cache_entry.is_dirty()) {
-    LOG(WARNING) << "Can't clear dirty state of a non-dirty file: res_id="
-                 << resource_id
-                 << ", md5=" << md5;
+    LOG(WARNING) << "Can't clear dirty state of a non-dirty file: "
+                 << resource_id;
     return FILE_ERROR_INVALID_OPERATION;
   }
 
-  // Now that file operations have completed, update metadata.
   cache_entry.set_md5(md5);
   cache_entry.set_is_dirty(false);
   return storage_->PutCacheEntry(resource_id, cache_entry) ?
diff --git a/chrome/browser/chromeos/drive/file_cache.h b/chrome/browser/chromeos/drive/file_cache.h
index c576b7b..405341b 100644
--- a/chrome/browser/chromeos/drive/file_cache.h
+++ b/chrome/browser/chromeos/drive/file_cache.h
@@ -134,15 +134,12 @@
   // |callback| must not be null.
   // Must be called on the UI thread.
   void GetFileOnUIThread(const std::string& resource_id,
-                         const std::string& md5,
                          const GetFileFromCacheCallback& callback);
 
-  // Checks if file corresponding to |resource_id| and |md5| exists in cache,
-  // and returns FILE_ERROR_OK with |cache_file_path| storing the path to
-  // the file.
+  // Checks if file corresponding to |resource_id| exists in cache, and returns
+  // FILE_ERROR_OK with |cache_file_path| storing the path to the file.
   // |cache_file_path| must not be null.
   FileError GetFile(const std::string& resource_id,
-                    const std::string& md5,
                     base::FilePath* cache_file_path);
 
   // Runs Store() on |blocking_task_runner_|, and calls |callback| with
@@ -205,7 +202,7 @@
   // Marks the specified entry dirty.
   FileError MarkDirty(const std::string& resource_id);
 
-  // Clears dirty state of the specified entry.
+  // Clears dirty state of the specified entry and updates its MD5.
   FileError ClearDirty(const std::string& resource_id,
                        const std::string& md5);
 
diff --git a/chrome/browser/chromeos/drive/file_cache_unittest.cc b/chrome/browser/chromeos/drive/file_cache_unittest.cc
index f18830a..7db6e0a 100644
--- a/chrome/browser/chromeos/drive/file_cache_unittest.cc
+++ b/chrome/browser/chromeos/drive/file_cache_unittest.cc
@@ -106,14 +106,11 @@
     ASSERT_TRUE(success);
   }
 
-  void TestGetFileFromCacheByResourceIdAndMd5(
-      const std::string& resource_id,
-      const std::string& md5,
-      FileError expected_error,
-      const std::string& expected_file_extension) {
+  void TestGetFile(const std::string& resource_id,
+                   FileError expected_error) {
     FileError error = FILE_ERROR_OK;
     base::FilePath cache_file_path;
-    cache_->GetFileOnUIThread(resource_id, md5,
+    cache_->GetFileOnUIThread(resource_id,
                               google_apis::test_util::CreateCopyResultCallback(
                                   &error, &cache_file_path));
     test_util::RunBlockingPoolTask();
@@ -217,7 +214,7 @@
     if (error == FILE_ERROR_OK) {
       base::FilePath cache_file_path;
       cache_->GetFileOnUIThread(
-          resource_id, std::string(),
+          resource_id,
           google_apis::test_util::CreateCopyResultCallback(
               &error, &cache_file_path));
       test_util::RunBlockingPoolTask();
@@ -271,7 +268,6 @@
   }
 
   void TestMarkAsUnmounted(const std::string& resource_id,
-                           const std::string& md5,
                            const base::FilePath& file_path,
                            FileError expected_error,
                            int expected_cache_state) {
@@ -286,7 +282,7 @@
 
     base::FilePath cache_file_path;
     cache_->GetFileOnUIThread(
-        resource_id, md5,
+        resource_id,
         google_apis::test_util::CreateCopyResultCallback(
             &error, &cache_file_path));
     test_util::RunBlockingPoolTask();
@@ -411,19 +407,11 @@
                    FILE_ERROR_OK, TEST_CACHE_STATE_PRESENT);
 
   // Then try to get the existing file from cache.
-  TestGetFileFromCacheByResourceIdAndMd5(
-      resource_id, md5, FILE_ERROR_OK, md5);
+  TestGetFile(resource_id, FILE_ERROR_OK);
 
-  // Get file from cache with same resource id as existing file but different
-  // md5.
-  TestGetFileFromCacheByResourceIdAndMd5(
-      resource_id, "9999", FILE_ERROR_NOT_FOUND, md5);
-
-  // Get file from cache with different resource id from existing file but same
-  // md5.
+  // Get file from cache with different resource id.
   resource_id = "document:1a2b";
-  TestGetFileFromCacheByResourceIdAndMd5(
-      resource_id, md5, FILE_ERROR_NOT_FOUND, md5);
+  TestGetFile(resource_id, FILE_ERROR_NOT_FOUND);
 }
 
 TEST_F(FileCacheTestOnUIThread, RemoveFromCacheSimple) {
@@ -506,16 +494,14 @@
   TestPin(resource_id, FILE_ERROR_OK, TEST_CACHE_STATE_PINNED);
 
   // Get the non-existent pinned file from cache.
-  TestGetFileFromCacheByResourceIdAndMd5(
-      resource_id, md5, FILE_ERROR_NOT_FOUND, md5);
+  TestGetFile(resource_id, FILE_ERROR_NOT_FOUND);
 
   // Store an existing file to the previously pinned non-existent file.
   TestStoreToCache(resource_id, md5, dummy_file_path_, FILE_ERROR_OK,
                    TEST_CACHE_STATE_PRESENT | TEST_CACHE_STATE_PINNED);
 
   // Get the previously pinned and stored file from cache.
-  TestGetFileFromCacheByResourceIdAndMd5(
-      resource_id, md5, FILE_ERROR_OK, md5);
+  TestGetFile(resource_id, FILE_ERROR_OK);
 }
 
 TEST_F(FileCacheTestOnUIThread, RemoveFromCachePinned) {
@@ -595,7 +581,7 @@
   base::FilePath dirty_path;
   FileError error = FILE_ERROR_FAILED;
   cache_->GetFileOnUIThread(
-      resource_id, md5,
+      resource_id,
       google_apis::test_util::CreateCopyResultCallback(&error, &dirty_path));
   test_util::RunBlockingPoolTask();
   EXPECT_EQ(FILE_ERROR_OK, error);
@@ -710,12 +696,12 @@
   base::FilePath file_path;
   FileError error = FILE_ERROR_FAILED;
   cache_->GetFileOnUIThread(
-      resource_id, md5,
+      resource_id,
       google_apis::test_util::CreateCopyResultCallback(&error, &file_path));
   test_util::RunBlockingPoolTask();
   EXPECT_EQ(FILE_ERROR_OK, error);
 
-  TestMarkAsUnmounted(resource_id, md5, file_path, FILE_ERROR_OK,
+  TestMarkAsUnmounted(resource_id, file_path, FILE_ERROR_OK,
                       TEST_CACHE_STATE_PRESENT);
   EXPECT_TRUE(CacheEntryExists(resource_id, md5));
 
@@ -895,8 +881,7 @@
             cache_->Store(resource_id_tmp, md5_tmp, src_file,
                           FileCache::FILE_OPERATION_COPY));
   base::FilePath tmp_path;
-  ASSERT_EQ(FILE_ERROR_OK,
-            cache_->GetFile(resource_id_tmp, md5_tmp, &tmp_path));
+  ASSERT_EQ(FILE_ERROR_OK, cache_->GetFile(resource_id_tmp, &tmp_path));
 
   // Store a file as a pinned file and remember the path.
   const std::string resource_id_pinned = "id_pinned", md5_pinned = "md5_pinned";
@@ -905,8 +890,7 @@
                           FileCache::FILE_OPERATION_COPY));
   ASSERT_EQ(FILE_ERROR_OK, cache_->Pin(resource_id_pinned));
   base::FilePath pinned_path;
-  ASSERT_EQ(FILE_ERROR_OK,
-            cache_->GetFile(resource_id_pinned, md5_pinned, &pinned_path));
+  ASSERT_EQ(FILE_ERROR_OK, cache_->GetFile(resource_id_pinned, &pinned_path));
 
   // Call FreeDiskSpaceIfNeededFor().
   fake_free_disk_space_getter_->set_default_value(test_util::kLotsOfSpace);
diff --git a/chrome/browser/chromeos/drive/file_system.cc b/chrome/browser/chromeos/drive/file_system.cc
index 674dbc4..0962967 100644
--- a/chrome/browser/chromeos/drive/file_system.cc
+++ b/chrome/browser/chromeos/drive/file_system.cc
@@ -756,7 +756,6 @@
 
   drive::internal::SearchMetadata(blocking_task_runner_,
                                   resource_metadata_,
-                                  cache_,
                                   query,
                                   options,
                                   at_most_num_matches,
@@ -949,10 +948,8 @@
 
   // Gets the cache file path.
   const std::string& resource_id = entry->resource_id();
-  const std::string& md5 = entry->file_specific_info().md5();
   cache_->GetFileOnUIThread(
       resource_id,
-      md5,
       base::Bind(
           &FileSystem::CheckLocalModificationAndRunAfterGetCacheFile,
           weak_ptr_factory_.GetWeakPtr(),
diff --git a/chrome/browser/chromeos/drive/file_system/copy_operation_unittest.cc b/chrome/browser/chromeos/drive/file_system/copy_operation_unittest.cc
index d9643e5..aee7007 100644
--- a/chrome/browser/chromeos/drive/file_system/copy_operation_unittest.cc
+++ b/chrome/browser/chromeos/drive/file_system/copy_operation_unittest.cc
@@ -125,7 +125,6 @@
   // The content is "x"s of the file size.
   base::FilePath cache_path;
   cache()->GetFileOnUIThread(entry.resource_id(),
-                             entry.file_specific_info().md5(),
                              google_apis::test_util::CreateCopyResultCallback(
                                  &error, &cache_path));
   test_util::RunBlockingPoolTask();
diff --git a/chrome/browser/chromeos/drive/file_system/download_operation.cc b/chrome/browser/chromeos/drive/file_system/download_operation.cc
index a391986..0e01200 100644
--- a/chrome/browser/chromeos/drive/file_system/download_operation.cc
+++ b/chrome/browser/chromeos/drive/file_system/download_operation.cc
@@ -66,29 +66,36 @@
     return FILE_ERROR_OK;
   }
 
-  // Get the cache file path if available.
-  cache->GetFile(entry->resource_id(),
-                 entry->file_specific_info().md5(),
-                 cache_file_path);
+  // Leave |cache_file_path| empty when no cache entry is found.
+  FileCacheEntry cache_entry;
+  if (!cache->GetCacheEntry(entry->resource_id(),
+                            entry->file_specific_info().md5(),
+                            &cache_entry))
+    return FILE_ERROR_OK;
 
-  // If the cache file is available and dirty, the modified file info needs to
-  // be stored in |entry|.
+  // Leave |cache_file_path| empty when the stored file is obsolete and has no
+  // local modification.
+  if (!cache_entry.is_dirty() &&
+      entry->file_specific_info().md5() != cache_entry.md5())
+    return FILE_ERROR_OK;
+
+  // Fill |cache_file_path| with the path to the cached file.
+  FileError error = cache->GetFile(entry->resource_id(), cache_file_path);
+  if (error != FILE_ERROR_OK)
+    return error;
+
+  // If the cache file is dirty, the modified file info needs to be stored in
+  // |entry|.
   // TODO(kinaba): crbug.com/246469. The logic below is a duplicate of that in
   // drive::FileSystem::CheckLocalModificationAndRun. We should merge them once
   // the drive::FS side is also converted to run fully on blocking pool.
-  if (!cache_file_path->empty()) {
-    FileCacheEntry cache_entry;
-    if (cache->GetCacheEntry(entry->resource_id(),
-                             entry->file_specific_info().md5(),
-                             &cache_entry) &&
-        cache_entry.is_dirty()) {
-      base::PlatformFileInfo file_info;
-      if (file_util::GetFileInfo(*cache_file_path, &file_info)) {
-        PlatformFileInfoProto entry_file_info;
-        util::ConvertPlatformFileInfoToResourceEntry(file_info,
-                                                     &entry_file_info);
-        *entry->mutable_file_info() = entry_file_info;
-      }
+  if (cache_entry.is_dirty()) {
+    base::PlatformFileInfo file_info;
+    if (file_util::GetFileInfo(*cache_file_path, &file_info)) {
+      PlatformFileInfoProto entry_file_info;
+      util::ConvertPlatformFileInfoToResourceEntry(file_info,
+                                                   &entry_file_info);
+      *entry->mutable_file_info() = entry_file_info;
     }
   }
 
@@ -194,7 +201,7 @@
     return error;
   }
 
-  return cache->GetFile(resource_id, md5, cache_file_path);
+  return cache->GetFile(resource_id, cache_file_path);
 }
 
 }  // namespace
diff --git a/chrome/browser/chromeos/drive/file_system/open_file_operation.cc b/chrome/browser/chromeos/drive/file_system/open_file_operation.cc
index d23c488..7743c06 100644
--- a/chrome/browser/chromeos/drive/file_system/open_file_operation.cc
+++ b/chrome/browser/chromeos/drive/file_system/open_file_operation.cc
@@ -26,13 +26,12 @@
 
 FileError UpdateFileLocalState(internal::FileCache* cache,
                                const std::string& resource_id,
-                               const std::string& md5,
                                base::FilePath* local_file_path) {
   FileError error = cache->MarkDirty(resource_id);
   if (error != FILE_ERROR_OK)
     return error;
 
-  return cache->GetFile(resource_id, md5, local_file_path);
+  return cache->GetFile(resource_id, local_file_path);
 }
 
 }  // namespace
@@ -140,7 +139,6 @@
       base::Bind(&UpdateFileLocalState,
                  cache_,
                  entry->resource_id(),
-                 entry->file_specific_info().md5(),
                  new_local_file_path),
       base::Bind(&OpenFileOperation::OpenFileAfterUpdateLocalState,
                  weak_ptr_factory_.GetWeakPtr(),
diff --git a/chrome/browser/chromeos/drive/file_system/truncate_operation_unittest.cc b/chrome/browser/chromeos/drive/file_system/truncate_operation_unittest.cc
index 32ff259..e2c8575 100644
--- a/chrome/browser/chromeos/drive/file_system/truncate_operation_unittest.cc
+++ b/chrome/browser/chromeos/drive/file_system/truncate_operation_unittest.cc
@@ -48,7 +48,7 @@
   base::FilePath local_path;
   error = FILE_ERROR_FAILED;
   cache()->GetFileOnUIThread(
-      src_entry.resource_id(), src_entry.file_specific_info().md5(),
+      src_entry.resource_id(),
       google_apis::test_util::CreateCopyResultCallback(&error, &local_path));
   test_util::RunBlockingPoolTask();
   ASSERT_EQ(FILE_ERROR_OK, error);
@@ -107,7 +107,7 @@
   base::FilePath local_path;
   error = FILE_ERROR_FAILED;
   cache()->GetFileOnUIThread(
-      src_entry.resource_id(), src_entry.file_specific_info().md5(),
+      src_entry.resource_id(),
       google_apis::test_util::CreateCopyResultCallback(&error, &local_path));
   test_util::RunBlockingPoolTask();
   ASSERT_EQ(FILE_ERROR_OK, error);
diff --git a/chrome/browser/chromeos/drive/file_system/update_operation.cc b/chrome/browser/chromeos/drive/file_system/update_operation.cc
index 7bc4255..324fcda 100644
--- a/chrome/browser/chromeos/drive/file_system/update_operation.cc
+++ b/chrome/browser/chromeos/drive/file_system/update_operation.cc
@@ -40,8 +40,7 @@
   if (drive_file_path->empty())
     return FILE_ERROR_NOT_FOUND;
 
-  error = cache->GetFile(
-      resource_id, entry->file_specific_info().md5(), cache_file_path);
+  error = cache->GetFile(resource_id, cache_file_path);
   if (error != FILE_ERROR_OK)
     return error;
 
diff --git a/chrome/browser/chromeos/drive/file_system_unittest.cc b/chrome/browser/chromeos/drive/file_system_unittest.cc
index 95bfd1b..68d79c2 100644
--- a/chrome/browser/chromeos/drive/file_system_unittest.cc
+++ b/chrome/browser/chromeos/drive/file_system_unittest.cc
@@ -772,8 +772,7 @@
   EXPECT_TRUE(cache_entry.is_dirty());
 
   base::FilePath cache_file_path;
-  EXPECT_EQ(FILE_ERROR_OK,
-            cache_->GetFile(file_resource_id, md5, &cache_file_path));
+  EXPECT_EQ(FILE_ERROR_OK, cache_->GetFile(file_resource_id, &cache_file_path));
   EXPECT_EQ(cache_file_path, opened_file_path);
 
   // Write a new content.
diff --git a/chrome/browser/chromeos/drive/resource_metadata_storage.cc b/chrome/browser/chromeos/drive/resource_metadata_storage.cc
index 6f7c74d..56a6bc9 100644
--- a/chrome/browser/chromeos/drive/resource_metadata_storage.cc
+++ b/chrome/browser/chromeos/drive/resource_metadata_storage.cc
@@ -121,6 +121,28 @@
   return entry_;
 }
 
+bool ResourceMetadataStorage::Iterator::GetCacheEntry(
+    FileCacheEntry* cache_entry) {
+  base::ThreadRestrictions::AssertIOAllowed();
+  DCHECK(!IsAtEnd());
+
+  // Try to seek to the cache entry.
+  std::string current_key = it_->key().ToString();
+  std::string cache_entry_key = GetCacheEntryKey(current_key);
+  it_->Seek(leveldb::Slice(cache_entry_key));
+
+  bool success = it_->Valid() &&
+      it_->key().compare(cache_entry_key) == 0 &&
+      cache_entry->ParseFromArray(it_->value().data(), it_->value().size());
+
+  // Seek back to the original position.
+  it_->Seek(leveldb::Slice(current_key));
+  DCHECK(!IsAtEnd());
+  DCHECK_EQ(current_key, it_->key().ToString());
+
+  return success;
+}
+
 void ResourceMetadataStorage::Iterator::Advance() {
   base::ThreadRestrictions::AssertIOAllowed();
   DCHECK(!IsAtEnd());
diff --git a/chrome/browser/chromeos/drive/resource_metadata_storage.h b/chrome/browser/chromeos/drive/resource_metadata_storage.h
index adac420..0ad61ef 100644
--- a/chrome/browser/chromeos/drive/resource_metadata_storage.h
+++ b/chrome/browser/chromeos/drive/resource_metadata_storage.h
@@ -51,6 +51,9 @@
     // Returns the entry currently pointed by this object.
     const ResourceEntry& Get() const;
 
+    // Gets the cache entry which corresponds to |entry_| if available.
+    bool GetCacheEntry(FileCacheEntry* cache_entry);
+
     // Advances to the next entry.
     void Advance();
 
diff --git a/chrome/browser/chromeos/drive/resource_metadata_storage_unittest.cc b/chrome/browser/chromeos/drive/resource_metadata_storage_unittest.cc
index a1f31ad..667f920 100644
--- a/chrome/browser/chromeos/drive/resource_metadata_storage_unittest.cc
+++ b/chrome/browser/chromeos/drive/resource_metadata_storage_unittest.cc
@@ -151,24 +151,39 @@
   for (size_t i = 0; i < entries.size(); ++i)
     EXPECT_TRUE(storage_->PutEntry(entries[i]));
 
-  // Insert some dummy cache entries.
-  FileCacheEntry cache_entry;
-  EXPECT_TRUE(storage_->PutCacheEntry(entries[0].resource_id(), cache_entry));
-  EXPECT_TRUE(storage_->PutCacheEntry(entries[1].resource_id(), cache_entry));
+  // Insert some cache entries.
+  std::map<std::string, FileCacheEntry> cache_entries;
+  cache_entries[entries[0].resource_id()].set_md5("aaaaaa");
+  cache_entries[entries[1].resource_id()].set_md5("bbbbbb");
+  for (std::map<std::string, FileCacheEntry>::iterator it =
+           cache_entries.begin(); it != cache_entries.end(); ++it)
+    EXPECT_TRUE(storage_->PutCacheEntry(it->first, it->second));
 
   // Iterate and check the result.
-  std::map<std::string, ResourceEntry> result;
+  std::map<std::string, ResourceEntry> found_entries;
+  std::map<std::string, FileCacheEntry> found_cache_entries;
   scoped_ptr<ResourceMetadataStorage::Iterator> it = storage_->GetIterator();
   ASSERT_TRUE(it);
   for (; !it->IsAtEnd(); it->Advance()) {
     const ResourceEntry& entry = it->Get();
-    result[entry.resource_id()] = entry;
+    found_entries[entry.resource_id()] = entry;
+
+    FileCacheEntry cache_entry;
+    if (it->GetCacheEntry(&cache_entry))
+      found_cache_entries[entry.resource_id()] = cache_entry;
   }
   EXPECT_FALSE(it->HasError());
 
-  EXPECT_EQ(entries.size(), result.size());
+  EXPECT_EQ(entries.size(), found_entries.size());
   for (size_t i = 0; i < entries.size(); ++i)
-    EXPECT_EQ(1U, result.count(entries[i].resource_id()));
+    EXPECT_EQ(1U, found_entries.count(entries[i].resource_id()));
+
+  EXPECT_EQ(cache_entries.size(), found_cache_entries.size());
+  for (std::map<std::string, FileCacheEntry>::iterator it =
+           cache_entries.begin(); it != cache_entries.end(); ++it) {
+    ASSERT_EQ(1U, found_cache_entries.count(it->first));
+    EXPECT_EQ(it->second.md5(), found_cache_entries[it->first].md5());
+  }
 }
 
 TEST_F(ResourceMetadataStorageTest, PutCacheEntry) {
diff --git a/chrome/browser/chromeos/drive/search_metadata.cc b/chrome/browser/chromeos/drive/search_metadata.cc
index 9e5b30c..a167830 100644
--- a/chrome/browser/chromeos/drive/search_metadata.cc
+++ b/chrome/browser/chromeos/drive/search_metadata.cc
@@ -10,7 +10,6 @@
 #include "base/bind.h"
 #include "base/i18n/string_search.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/chromeos/drive/file_cache.h"
 #include "chrome/browser/chromeos/drive/file_system_util.h"
 #include "content/public/browser/browser_thread.h"
 #include "net/base/escape.h"
@@ -83,7 +82,7 @@
 // SEARCH_METADATA_OFFLINE is requested, only hosted documents and cached files
 // match with the query. This option can not be used with other options.
 bool IsEligibleEntry(const ResourceEntry& entry,
-                     internal::FileCache* cache,
+                     ResourceMetadata::Iterator* it,
                      int options) {
   if ((options & SEARCH_METADATA_EXCLUDE_HOSTED_DOCUMENTS) &&
       entry.file_specific_info().is_hosted_document())
@@ -100,9 +99,7 @@
     if (entry.file_specific_info().is_hosted_document())
       return true;
     FileCacheEntry cache_entry;
-    cache->GetCacheEntry(entry.resource_id(),
-                         std::string(),
-                         &cache_entry);
+    it->GetCacheEntry(&cache_entry);
     return cache_entry.is_present();
   }
 
@@ -121,15 +118,16 @@
 // the query.
 void MaybeAddEntryToResult(
     ResourceMetadata* resource_metadata,
-    FileCache* cache,
+    ResourceMetadata::Iterator* it,
     base::i18n::FixedPatternStringSearchIgnoringCaseAndAccents* query,
     int options,
     size_t at_most_num_matches,
     ScopedPriorityQueue<MetadataSearchResult,
-                        MetadataSearchResultComparator>* result_candidates,
-    const ResourceEntry& entry) {
+                        MetadataSearchResultComparator>* result_candidates) {
   DCHECK_GE(at_most_num_matches, result_candidates->size());
 
+  const ResourceEntry& entry = it->Get();
+
   // If the candidate set is already full, and this |entry| is old, do nothing.
   // We perform this check first in order to avoid the costly find-and-highlight
   // or FilePath lookup as much as possible.
@@ -141,7 +139,7 @@
   // |options| and matches the query. The base name of the entry must
   // contain |query| to match the query.
   std::string highlighted;
-  if (!IsEligibleEntry(entry, cache, options) ||
+  if (!IsEligibleEntry(entry, it, options) ||
       (query && !FindAndHighlight(entry.base_name(), query, &highlighted)))
     return;
 
@@ -153,7 +151,6 @@
 
 // Implements SearchMetadata().
 FileError SearchMetadataOnBlockingPool(ResourceMetadata* resource_metadata,
-                                       FileCache* cache,
                                        const std::string& query_text,
                                        int options,
                                        int at_most_num_matches,
@@ -168,10 +165,10 @@
   // Iterate over entries.
   scoped_ptr<ResourceMetadata::Iterator> it = resource_metadata->GetIterator();
   for (; !it->IsAtEnd(); it->Advance()) {
-    MaybeAddEntryToResult(resource_metadata, cache,
+    MaybeAddEntryToResult(resource_metadata, it.get(),
                           query_text.empty() ? NULL : &query,
                           options,
-                          at_most_num_matches, &result_candidates, it->Get());
+                          at_most_num_matches, &result_candidates);
   }
 
   // Prepare the result.
@@ -207,7 +204,6 @@
 void SearchMetadata(
     scoped_refptr<base::SequencedTaskRunner> blocking_task_runner,
     ResourceMetadata* resource_metadata,
-    FileCache* cache,
     const std::string& query,
     int options,
     int at_most_num_matches,
@@ -223,7 +219,6 @@
                                    FROM_HERE,
                                    base::Bind(&SearchMetadataOnBlockingPool,
                                               resource_metadata,
-                                              cache,
                                               query,
                                               options,
                                               at_most_num_matches,
diff --git a/chrome/browser/chromeos/drive/search_metadata.h b/chrome/browser/chromeos/drive/search_metadata.h
index d4e0e6f..e4f140d 100644
--- a/chrome/browser/chromeos/drive/search_metadata.h
+++ b/chrome/browser/chromeos/drive/search_metadata.h
@@ -18,7 +18,6 @@
 namespace drive {
 namespace internal {
 
-class FileCache;
 class ResourceMetadata;
 
 // Searches the local resource metadata, and returns the entries
@@ -31,7 +30,6 @@
 void SearchMetadata(
     scoped_refptr<base::SequencedTaskRunner> blocking_task_runner,
     ResourceMetadata* resource_metadata,
-    FileCache* cache,
     const std::string& query,
     int search_options,
     int at_most_num_matches,
diff --git a/chrome/browser/chromeos/drive/search_metadata_unittest.cc b/chrome/browser/chromeos/drive/search_metadata_unittest.cc
index 1c9c3d4..9e1ff21 100644
--- a/chrome/browser/chromeos/drive/search_metadata_unittest.cc
+++ b/chrome/browser/chromeos/drive/search_metadata_unittest.cc
@@ -218,7 +218,6 @@
 
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "NonExistent",
                  SEARCH_METADATA_ALL,
                  kDefaultAtMostNumMatches,
@@ -236,7 +235,6 @@
 
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "SubDirectory File 1.txt",
                  SEARCH_METADATA_ALL,
                  kDefaultAtMostNumMatches,
@@ -259,7 +257,6 @@
   // The query is all in lower case.
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "subdirectory file 1.txt",
                  SEARCH_METADATA_ALL,
                  kDefaultAtMostNumMatches,
@@ -279,7 +276,6 @@
 
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "SubDir",
                  SEARCH_METADATA_ALL,
                  kDefaultAtMostNumMatches,
@@ -309,7 +305,6 @@
   // returned.
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "SubDir",
                  SEARCH_METADATA_ALL,
                  1,  // at_most_num_matches
@@ -329,7 +324,6 @@
 
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "Directory 1",
                  SEARCH_METADATA_ALL,
                  kDefaultAtMostNumMatches,
@@ -348,7 +342,6 @@
 
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "Document",
                  SEARCH_METADATA_ALL,
                  kDefaultAtMostNumMatches,
@@ -369,7 +362,6 @@
 
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "Document",
                  SEARCH_METADATA_EXCLUDE_HOSTED_DOCUMENTS,
                  kDefaultAtMostNumMatches,
@@ -387,7 +379,6 @@
 
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "",
                  SEARCH_METADATA_SHARED_WITH_ME,
                  kDefaultAtMostNumMatches,
@@ -407,7 +398,6 @@
 
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "excludeDir-test",
                  SEARCH_METADATA_ALL,
                  kDefaultAtMostNumMatches,
@@ -431,7 +421,6 @@
 
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "excludeDir-test",
                  SEARCH_METADATA_EXCLUDE_DIRECTORIES,
                  kDefaultAtMostNumMatches,
@@ -457,7 +446,6 @@
     const std::string query = kQueries[i];
     SearchMetadata(base::MessageLoopProxy::current(),
                    resource_metadata_.get(),
-                   cache_.get(),
                    query,
                    SEARCH_METADATA_ALL,
                    kDefaultAtMostNumMatches,
@@ -485,7 +473,6 @@
 
   SearchMetadata(base::MessageLoopProxy::current(),
                  resource_metadata_.get(),
-                 cache_.get(),
                  "",
                  SEARCH_METADATA_OFFLINE,
                  kDefaultAtMostNumMatches,
diff --git a/chrome/browser/chromeos/drive/sync_client_unittest.cc b/chrome/browser/chromeos/drive/sync_client_unittest.cc
index c209643..6c0c8d6 100644
--- a/chrome/browser/chromeos/drive/sync_client_unittest.cc
+++ b/chrome/browser/chromeos/drive/sync_client_unittest.cc
@@ -293,13 +293,13 @@
   base::FilePath cache_file;
   std::string content;
   EXPECT_EQ(FILE_ERROR_OK, cache_->GetFile(resource_ids_["fetched"],
-                                           std::string(), &cache_file));
+                                           &cache_file));
   EXPECT_TRUE(file_util::ReadFileToString(cache_file, &content));
   EXPECT_EQ(kRemoteContent, content);
   content.clear();
 
   EXPECT_EQ(FILE_ERROR_OK, cache_->GetFile(resource_ids_["dirty"],
-                                           std::string(), &cache_file));
+                                           &cache_file));
   EXPECT_TRUE(file_util::ReadFileToString(cache_file, &content));
   EXPECT_EQ(kLocalContent, content);
 }
diff --git a/chrome/browser/chromeos/extensions/external_cache.cc b/chrome/browser/chromeos/extensions/external_cache.cc
new file mode 100644
index 0000000..3e19c65
--- /dev/null
+++ b/chrome/browser/chromeos/extensions/external_cache.cc
@@ -0,0 +1,440 @@
+// Copyright (c) 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 "chrome/browser/chromeos/extensions/external_cache.h"
+
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/file_util.h"
+#include "base/files/file_enumerator.h"
+#include "base/location.h"
+#include "base/strings/string_util.h"
+#include "base/values.h"
+#include "base/version.h"
+#include "chrome/browser/chrome_notification_types.h"
+#include "chrome/browser/extensions/crx_installer.h"
+#include "chrome/browser/extensions/external_provider_impl.h"
+#include "chrome/browser/extensions/updater/extension_downloader.h"
+#include "chrome/common/extensions/extension.h"
+#include "chrome/common/extensions/extension_constants.h"
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/notification_details.h"
+#include "content/public/browser/notification_service.h"
+#include "content/public/browser/notification_source.h"
+
+namespace chromeos {
+
+namespace {
+
+// File name extension for CRX files (not case sensitive).
+const char kCRXFileExtension[] = ".crx";
+
+}  // namespace
+
+ExternalCache::ExternalCache(const std::string& cache_dir,
+                             net::URLRequestContextGetter* request_context,
+                             Delegate* delegate)
+    : cache_dir_(cache_dir),
+      request_context_(request_context),
+      delegate_(delegate),
+      cached_extensions_(new base::DictionaryValue()),
+      weak_ptr_factory_(this),
+      worker_pool_token_(
+          content::BrowserThread::GetBlockingPool()->GetSequenceToken()) {
+  notification_registrar_.Add(
+      this,
+      chrome::NOTIFICATION_EXTENSION_INSTALL_ERROR,
+      content::NotificationService::AllBrowserContextsAndSources());
+}
+
+ExternalCache::~ExternalCache() {
+}
+
+void ExternalCache::UpdateExtensionsList(
+    scoped_ptr<base::DictionaryValue> prefs) {
+  extensions_ = prefs.Pass();
+  CheckCacheNow();
+}
+
+void ExternalCache::OnDamagedFileDetected(const base::FilePath& path) {
+  for (base::DictionaryValue::Iterator it(*cached_extensions_.get());
+       !it.IsAtEnd(); it.Advance()) {
+    const base::DictionaryValue* entry = NULL;
+    if (it.value().GetAsDictionary(&entry)) {
+      NOTREACHED() << "ExternalCache found bad entry with type "
+                   << it.value().GetType();
+      continue;
+    }
+
+    std::string external_crx;
+    if (entry->GetString(extensions::ExternalProviderImpl::kExternalCrx,
+                         &external_crx) &&
+        external_crx == path.value()) {
+
+      LOG(ERROR) << "ExternalCache extension at " << path.value()
+                 << " failed to install, deleting it.";
+      cached_extensions_->Remove(it.key(), NULL);
+      UpdateExtensionLoader();
+
+      // The file will be downloaded again on the next restart.
+      content::BrowserThread::PostTask(
+          content::BrowserThread::FILE, FROM_HERE,
+          base::Bind(base::IgnoreResult(base::DeleteFile), path, true));
+
+      // Don't try to DownloadMissingExtensions() from here,
+      // since it can cause a fail/retry loop.
+      return;
+    }
+  }
+  LOG(ERROR) << "ExternalCache cannot find external_crx " << path.value();
+}
+
+void ExternalCache::Observe(int type,
+                            const content::NotificationSource& source,
+                            const content::NotificationDetails& details) {
+  switch (type) {
+    case chrome::NOTIFICATION_EXTENSION_INSTALL_ERROR: {
+      extensions::CrxInstaller* installer =
+          content::Source<extensions::CrxInstaller>(source).ptr();
+      OnDamagedFileDetected(installer->source_file());
+      break;
+    }
+
+    default:
+      NOTREACHED();
+  }
+}
+
+void ExternalCache::OnExtensionDownloadFailed(
+    const std::string& id,
+    extensions::ExtensionDownloaderDelegate::Error error,
+    const extensions::ExtensionDownloaderDelegate::PingResult& ping_result,
+    const std::set<int>& request_ids) {
+  if (error == NO_UPDATE_AVAILABLE) {
+    if (!cached_extensions_->HasKey(id)) {
+      LOG(ERROR) << "ExternalCache extension " << id
+                 << " not found on update server";
+    }
+  } else {
+    LOG(ERROR) << "ExternalCache failed to download extension " << id
+               << ", error " << error;
+  }
+}
+
+void ExternalCache::OnExtensionDownloadFinished(
+    const std::string& id,
+    const base::FilePath& path,
+    const GURL& download_url,
+    const std::string& version,
+    const extensions::ExtensionDownloaderDelegate::PingResult& ping_result,
+    const std::set<int>& request_ids) {
+  // The explicit copy ctors are to make sure that Bind() binds a copy and not
+  // a reference to the arguments.
+  PostBlockingTask(FROM_HERE,
+                   base::Bind(&ExternalCache::BlockingInstallCacheEntry,
+                              weak_ptr_factory_.GetWeakPtr(),
+                              std::string(cache_dir_),
+                              std::string(id),
+                              base::FilePath(path),
+                              std::string(version)));
+}
+
+void ExternalCache::OnBlacklistDownloadFinished(
+    const std::string& data,
+    const std::string& package_hash,
+    const std::string& version,
+    const extensions::ExtensionDownloaderDelegate::PingResult& ping_result,
+    const std::set<int>& request_ids) {
+  NOTREACHED();
+}
+
+bool ExternalCache::IsExtensionPending(const std::string& id) {
+  // Pending means that there is no installed version yet.
+  return extensions_->HasKey(id) && !cached_extensions_->HasKey(id);
+}
+
+bool ExternalCache::GetExtensionExistingVersion(const std::string& id,
+                                                std::string* version) {
+  DictionaryValue* extension_dictionary = NULL;
+  if (cached_extensions_->GetDictionary(id, &extension_dictionary)) {
+    return extension_dictionary->GetString(
+        extensions::ExternalProviderImpl::kExternalVersion,
+        version);
+  }
+  return false;
+}
+
+void ExternalCache::CheckCacheNow() {
+  scoped_ptr<DictionaryValue> prefs(extensions_->DeepCopy());
+  PostBlockingTask(FROM_HERE,
+                   base::Bind(&ExternalCache::BlockingCheckCache,
+                              weak_ptr_factory_.GetWeakPtr(),
+                              std::string(cache_dir_),
+                              base::Passed(&prefs)));
+}
+
+void ExternalCache::UpdateExtensionLoader() {
+  VLOG(1) << "Notify ExternalCache delegate about cache update";
+  if (delegate_)
+    delegate_->OnExtensionListsUpdated(cached_extensions_.get());
+}
+
+// static
+void ExternalCache::BlockingCheckCache(
+    base::WeakPtr<ExternalCache> external_cache,
+    const std::string& cache_dir,
+    scoped_ptr<base::DictionaryValue> prefs) {
+  BlockingCheckCacheInternal(cache_dir, prefs.get());
+  content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
+                          base::Bind(&ExternalCache::OnCacheUpdated,
+                                     external_cache,
+                                     base::Passed(&prefs)));
+}
+
+// static
+void ExternalCache::BlockingCheckCacheInternal(const std::string& cache_dir,
+                                               base::DictionaryValue* prefs) {
+  // Start by verifying that the cache dir exists.
+  base::FilePath dir(cache_dir);
+  if (!base::DirectoryExists(dir)) {
+    // Create it now.
+    if (!file_util::CreateDirectory(dir)) {
+      LOG(ERROR) << "Failed to create ExternalCache directory at "
+                 << dir.value();
+
+      // Nothing else to do. Cache won't be used.
+      return;
+    }
+  }
+
+  // Enumerate all the files in the cache |dir|, including directories
+  // and symlinks. Each unrecognized file will be erased.
+  int types = base::FileEnumerator::FILES | base::FileEnumerator::DIRECTORIES |
+      base::FileEnumerator::SHOW_SYM_LINKS;
+  base::FileEnumerator enumerator(dir, false /* recursive */, types);
+  for (base::FilePath path = enumerator.Next();
+       !path.empty(); path = enumerator.Next()) {
+    base::FileEnumerator::FileInfo info = enumerator.GetInfo();
+    std::string basename = path.BaseName().value();
+
+    if (info.IsDirectory() || file_util::IsLink(info.GetName())) {
+      LOG(ERROR) << "Erasing bad file in ExternalCache directory: " << basename;
+      base::DeleteFile(path, true /* recursive */);
+      continue;
+    }
+
+    // crx files in the cache are named <extension-id>-<version>.crx.
+    std::string id;
+    std::string version;
+    if (EndsWith(basename, kCRXFileExtension, false /* case-sensitive */)) {
+      size_t n = basename.find('-');
+      if (n != std::string::npos && n + 1 < basename.size() - 4) {
+        id = basename.substr(0, n);
+        // Size of |version| = total size - "<id>" - "-" - ".crx"
+        version = basename.substr(n + 1, basename.size() - 5 - id.size());
+      }
+    }
+
+    base::DictionaryValue* entry = NULL;
+    if (!extensions::Extension::IdIsValid(id)) {
+      LOG(ERROR) << "Bad extension id in ExternalCache: " << id;
+      id.clear();
+    } else if (!prefs->GetDictionary(id, &entry)) {
+      LOG(WARNING) << basename << " is in the cache but is not configured by "
+                   << "the ExternalCache source, and will be erased.";
+      id.clear();
+    }
+
+    if (!Version(version).IsValid()) {
+      LOG(ERROR) << "Bad extension version in ExternalCache: " << version;
+      version.clear();
+    }
+
+    if (id.empty() || version.empty()) {
+      LOG(ERROR) << "Invalid file in ExternalCache, erasing: " << basename;
+      base::DeleteFile(path, true /* recursive */);
+      continue;
+    }
+
+    // Enforce a lower-case id.
+    id = StringToLowerASCII(id);
+
+    std::string update_url;
+    std::string prev_version_string;
+    std::string prev_crx;
+    if (entry->GetString(extensions::ExternalProviderImpl::kExternalUpdateUrl,
+                         &update_url)) {
+      VLOG(1) << "ExternalCache found cached version " << version
+              << " for extension id: " << id;
+      entry->Remove(extensions::ExternalProviderImpl::kExternalUpdateUrl, NULL);
+      entry->SetString(extensions::ExternalProviderImpl::kExternalVersion,
+                       version);
+      entry->SetString(extensions::ExternalProviderImpl::kExternalCrx,
+                        path.value());
+      if (extension_urls::IsWebstoreUpdateUrl(GURL(update_url))) {
+        entry->SetBoolean(extensions::ExternalProviderImpl::kIsFromWebstore,
+                         true);
+      }
+    } else if (
+        entry->GetString(extensions::ExternalProviderImpl::kExternalVersion,
+                         &prev_version_string) &&
+        entry->GetString(extensions::ExternalProviderImpl::kExternalCrx,
+                         &prev_crx)) {
+      LOG(ERROR) << "Found two ExternalCache files for the same extension, "
+                    "will erase the oldest version";
+      Version prev_version(prev_version_string);
+      Version curr_version(version);
+      DCHECK(prev_version.IsValid());
+      DCHECK(curr_version.IsValid());
+      if (prev_version.CompareTo(curr_version) < 0) {
+        base::DeleteFile(base::FilePath(prev_crx), true /* recursive */);
+        entry->SetString(extensions::ExternalProviderImpl::kExternalCrx,
+                         path.value());
+      } else {
+        base::DeleteFile(path, true /* recursive */);
+      }
+    } else {
+      NOTREACHED() << "ExternalCache found bad entry for extension id: " << id
+                   << " file path: " << path.value();
+    }
+  }
+}
+
+void ExternalCache::OnCacheUpdated(scoped_ptr<base::DictionaryValue> prefs) {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+
+  // If request_context_ is missing we can't download anything.
+  if (!downloader_ && request_context_) {
+    downloader_.reset(
+        new extensions::ExtensionDownloader(this, request_context_));
+  }
+
+  cached_extensions_->Clear();
+  for (base::DictionaryValue::Iterator it(*extensions_.get());
+       !it.IsAtEnd(); it.Advance()) {
+    const base::DictionaryValue* entry = NULL;
+    if (!it.value().GetAsDictionary(&entry)) {
+      LOG(ERROR) << "ExternalCache found bad entry with type "
+                 << it.value().GetType();
+      continue;
+    }
+
+    // Check for updates for all extensions configured except for extensions
+    // marked as keep_if_present.
+    std::string update_url;
+    if (downloader_ &&
+        !entry->HasKey(extensions::ExternalProviderImpl::kKeepIfPresent) &&
+        entry->GetString(extensions::ExternalProviderImpl::kExternalUpdateUrl,
+                         &update_url)) {
+      downloader_->AddPendingExtension(it.key(), GURL(update_url), 0);
+    }
+
+    base::DictionaryValue* cached_entry = NULL;
+    if (prefs->GetDictionary(it.key(), &cached_entry)) {
+      std::string crx_path;
+      if (!downloader_ ||
+          cached_entry->GetString(
+              extensions::ExternalProviderImpl::kExternalCrx, &crx_path) ||
+          cached_entry->HasKey(
+              extensions::ExternalProviderImpl::kKeepIfPresent)) {
+        base::Value* value = NULL;
+        prefs->Remove(it.key(), &value);
+        cached_extensions_->Set(it.key(), value);
+      }
+    }
+  }
+  if (downloader_)
+    downloader_->StartAllPending();
+
+  VLOG(1) << "Updated ExternalCache, there are "
+          << cached_extensions_->size() << " extensions cached";
+
+  UpdateExtensionLoader();
+}
+
+// static
+void ExternalCache::BlockingInstallCacheEntry(
+    base::WeakPtr<ExternalCache> external_cache,
+    const std::string& app_cache_dir,
+    const std::string& id,
+    const base::FilePath& path,
+    const std::string& version) {
+  Version version_validator(version);
+  if (!version_validator.IsValid()) {
+    LOG(ERROR) << "ExternalCache downloaded extension " << id << " but got bad "
+               << "version: " << version;
+    base::DeleteFile(path, true /* recursive */);
+    return;
+  }
+
+  std::string basename = id + "-" + version + kCRXFileExtension;
+  base::FilePath cache_dir(app_cache_dir);
+  base::FilePath cached_crx_path = cache_dir.Append(basename);
+
+  if (base::PathExists(cached_crx_path)) {
+    LOG(WARNING) << "AppPack downloaded a crx whose filename will overwrite "
+                 << "an existing cached crx.";
+    base::DeleteFile(cached_crx_path, true /* recursive */);
+  }
+
+  if (!base::DirectoryExists(cache_dir)) {
+    LOG(ERROR) << "AppPack cache directory does not exist, creating now: "
+               << cache_dir.value();
+    if (!file_util::CreateDirectory(cache_dir)) {
+      LOG(ERROR) << "Failed to create the AppPack cache dir!";
+      base::DeleteFile(path, true /* recursive */);
+      return;
+    }
+  }
+
+  if (!base::Move(path, cached_crx_path)) {
+    LOG(ERROR) << "Failed to move AppPack crx from " << path.value()
+               << " to " << cached_crx_path.value();
+    base::DeleteFile(path, true /* recursive */);
+    return;
+  }
+
+  content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
+                          base::Bind(&ExternalCache::OnCacheEntryInstalled,
+                                     external_cache,
+                                     std::string(id),
+                                     cached_crx_path.value(),
+                                     std::string(version)));
+}
+
+void ExternalCache::OnCacheEntryInstalled(const std::string& id,
+                                          const std::string& path,
+                                          const std::string& version) {
+  VLOG(1) << "AppPack installed a new extension in the cache: " << path;
+
+  base::DictionaryValue* entry = NULL;
+  std::string update_url;
+  if (!extensions_->GetDictionary(id, &entry) ||
+      !entry->GetString(extensions::ExternalProviderImpl::kExternalUpdateUrl,
+                        &update_url)) {
+    LOG(ERROR) << "ExternalCache cannot find entry for extension " << id;
+    return;
+  }
+
+  // Copy entry to don't modify it inside extensions_.
+  entry = entry->DeepCopy();
+  entry->Remove(extensions::ExternalProviderImpl::kExternalUpdateUrl, NULL);
+  entry->SetString(extensions::ExternalProviderImpl::kExternalVersion, version);
+  entry->SetString(extensions::ExternalProviderImpl::kExternalCrx, path);
+  if (extension_urls::IsWebstoreUpdateUrl(GURL(update_url)))
+    entry->SetBoolean(extensions::ExternalProviderImpl::kIsFromWebstore, true);
+
+  cached_extensions_->Set(id, entry);
+  UpdateExtensionLoader();
+}
+
+void ExternalCache::PostBlockingTask(const tracked_objects::Location& location,
+                                     const base::Closure& task) {
+  content::BrowserThread::GetBlockingPool()->
+      PostSequencedWorkerTaskWithShutdownBehavior(
+          worker_pool_token_, location, task,
+          base::SequencedWorkerPool::SKIP_ON_SHUTDOWN);
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/extensions/external_cache.h b/chrome/browser/chromeos/extensions/external_cache.h
new file mode 100644
index 0000000..e9415b5
--- /dev/null
+++ b/chrome/browser/chromeos/extensions/external_cache.h
@@ -0,0 +1,172 @@
+// Copyright (c) 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 CHROME_BROWSER_CHROMEOS_EXTENSIONS_EXTERNAL_CACHE_H_
+#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_EXTERNAL_CACHE_H_
+
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/callback.h"
+#include "base/files/file_path.h"
+#include "base/memory/weak_ptr.h"
+#include "base/threading/sequenced_worker_pool.h"
+#include "chrome/browser/extensions/updater/extension_downloader_delegate.h"
+#include "content/public/browser/notification_observer.h"
+#include "content/public/browser/notification_registrar.h"
+
+namespace base {
+class DictionaryValue;
+}
+
+namespace extensions {
+class ExtensionDownloader;
+}
+
+namespace net {
+class URLRequestContextGetter;
+}
+
+namespace tracked_objects {
+class Location;
+}
+
+namespace chromeos {
+
+// The ExternalCache manages cache for external extensions.
+class ExternalCache : public content::NotificationObserver,
+                      public extensions::ExtensionDownloaderDelegate {
+ public:
+  class Delegate {
+   public:
+    virtual ~Delegate() {}
+    // Caller owns |prefs|.
+    virtual void OnExtensionListsUpdated(
+        const base::DictionaryValue* prefs) = 0;
+  };
+
+  // The |request_context| is used for the update checks.
+  ExternalCache(const std::string& cache_dir,
+                net::URLRequestContextGetter* request_context,
+                Delegate* delegate);
+  virtual ~ExternalCache();
+
+  // Update list of extensions in cache and force update check for them.
+  // ExternalCache gets ownership of |prefs|.
+  void UpdateExtensionsList(scoped_ptr<base::DictionaryValue> prefs);
+
+  // If a user of one of the ExternalCache's extensions detects that
+  // the extension is damaged then this method can be used to remove it from
+  // the cache and retry to download it after a restart.
+  void OnDamagedFileDetected(const base::FilePath& path);
+
+ protected:
+  // Implementation of content::NotificationObserver:
+  virtual void Observe(int type,
+                       const content::NotificationSource& source,
+                       const content::NotificationDetails& details) OVERRIDE;
+
+  // Implementation of ExtensionDownloaderDelegate:
+  virtual void OnExtensionDownloadFailed(
+      const std::string& id,
+      Error error,
+      const PingResult& ping_result,
+      const std::set<int>& request_ids) OVERRIDE;
+
+  virtual void OnExtensionDownloadFinished(
+      const std::string& id,
+      const base::FilePath& path,
+      const GURL& download_url,
+      const std::string& version,
+      const PingResult& ping_result,
+      const std::set<int>& request_ids) OVERRIDE;
+
+  virtual void OnBlacklistDownloadFinished(
+      const std::string& data,
+      const std::string& package_hash,
+      const std::string& version,
+      const PingResult& ping_result,
+      const std::set<int>& request_ids) OVERRIDE;
+
+  virtual bool IsExtensionPending(const std::string& id) OVERRIDE;
+
+  virtual bool GetExtensionExistingVersion(const std::string& id,
+                                           std::string* version) OVERRIDE;
+
+  // Starts a cache update check immediately.
+  void CheckCacheNow();
+
+  // Notifies the that the cache has been updated, providing
+  // extensions loader with an updated list of extensions.
+  void UpdateExtensionLoader();
+
+  // Performs a cache update check on the blocking pool. |external_cache| is
+  // used to reply in the UI thread. |prefs| contains the list extensions
+  // anything else is invalid, and should be removed from the cache.
+  // Ownership of |prefs| is transferred to this function.
+  static void BlockingCheckCache(
+      base::WeakPtr<ExternalCache> external_cache,
+      const std::string& app_cache_dir,
+      scoped_ptr<base::DictionaryValue> prefs);
+
+  // Helper for BlockingCheckCache(), updates |prefs|.
+  static void BlockingCheckCacheInternal(
+      const std::string& app_cache_dir,
+      base::DictionaryValue* prefs);
+
+  // Invoked when the cache has been updated. |prefs| contains all the currently
+  // valid crx files in the cache, ownerships is transfered to this function.
+  void OnCacheUpdated(scoped_ptr<base::DictionaryValue> prefs);
+
+  // Invoked to install the downloaded crx file at |path| in the cache.
+  static void BlockingInstallCacheEntry(
+      base::WeakPtr<ExternalCache> external_cache,
+      const std::string& app_cache_dir,
+      const std::string& id,
+      const base::FilePath& path,
+      const std::string& version);
+
+  // Invoked on the UI thread when a new entry has been installed in the cache.
+  void OnCacheEntryInstalled(const std::string& id,
+                             const std::string& path,
+                             const std::string& version);
+
+  // Helper to post blocking IO tasks to the blocking pool.
+  void PostBlockingTask(const tracked_objects::Location& from_here,
+                        const base::Closure& task);
+
+  // Path to the dir where apps cache is stored.
+  std::string cache_dir_;
+
+  // Request context used by the |downloader_|.
+  net::URLRequestContextGetter* request_context_;
+
+  // Delegate that would like to get notifications about cache updates.
+  Delegate* delegate_;
+
+  // This is the list of extensions currently configured.
+  scoped_ptr<base::DictionaryValue> extensions_;
+
+  // This contains extensions that are both currently configured
+  // and that have a valid crx in the cache.
+  scoped_ptr<base::DictionaryValue> cached_extensions_;
+
+  // Used to download the extensions and to check for updates.
+  scoped_ptr<extensions::ExtensionDownloader> downloader_;
+
+  base::WeakPtrFactory<ExternalCache> weak_ptr_factory_;
+
+  // Observes failures to install CRX files.
+  content::NotificationRegistrar notification_registrar_;
+
+  // Unique sequence token so that tasks posted by the ExternalCache are
+  // executed sequentially in the blocking pool.
+  base::SequencedWorkerPool::SequenceToken worker_pool_token_;
+
+  DISALLOW_COPY_AND_ASSIGN(ExternalCache);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_EXTERNAL_CACHE_H_
diff --git a/chrome/browser/chromeos/extensions/external_pref_cache_loader.cc b/chrome/browser/chromeos/extensions/external_pref_cache_loader.cc
new file mode 100644
index 0000000..cd02dae
--- /dev/null
+++ b/chrome/browser/chromeos/extensions/external_pref_cache_loader.cc
@@ -0,0 +1,47 @@
+// Copyright (c) 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 "chrome/browser/chromeos/extensions/external_pref_cache_loader.h"
+
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/memory/singleton.h"
+#include "base/values.h"
+#include "chrome/browser/browser_process.h"
+#include "content/public/browser/browser_thread.h"
+
+namespace chromeos {
+
+namespace {
+
+// Directory where the extensions are cached.
+const char kPreinstalledAppsCacheDir[] = "/var/cache/external_cache";
+
+}  // namespace
+
+ExternalPrefCacheLoader::ExternalPrefCacheLoader(int base_path_id,
+                                                 Options options)
+  : ExternalPrefLoader(base_path_id, options) {
+}
+
+ExternalPrefCacheLoader::~ExternalPrefCacheLoader() {
+}
+
+void ExternalPrefCacheLoader::OnExtensionListsUpdated(
+    const base::DictionaryValue* prefs) {
+  prefs_.reset(prefs->DeepCopy());
+  ExternalPrefLoader::LoadFinished();
+}
+
+void ExternalPrefCacheLoader::LoadFinished() {
+  if (!external_cache_.get()) {
+    external_cache_.reset(new ExternalCache(kPreinstalledAppsCacheDir,
+        g_browser_process->system_request_context(),
+        this));
+  }
+
+  external_cache_->UpdateExtensionsList(prefs_.Pass());
+}
+
+}  // namespace chromeos
diff --git a/chrome/browser/chromeos/extensions/external_pref_cache_loader.h b/chrome/browser/chromeos/extensions/external_pref_cache_loader.h
new file mode 100644
index 0000000..f886f85
--- /dev/null
+++ b/chrome/browser/chromeos/extensions/external_pref_cache_loader.h
@@ -0,0 +1,40 @@
+// Copyright (c) 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 CHROME_BROWSER_CHROMEOS_EXTENSIONS_EXTERNAL_PREF_CACHE_LOADER_H_
+#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_EXTERNAL_PREF_CACHE_LOADER_H_
+
+#include "chrome/browser/chromeos/extensions/external_cache.h"
+#include "chrome/browser/extensions/external_pref_loader.h"
+
+namespace chromeos {
+
+// A specialization of the ExternalPrefCacheLoader that caches crx files for
+// external extensions with update URL in common place for all users on the
+// machine.
+class ExternalPrefCacheLoader : public extensions::ExternalPrefLoader,
+                                public ExternalCache::Delegate {
+ public:
+  ExternalPrefCacheLoader(int base_path_id, Options options);
+
+  // Implementation of ExternalCache::Delegate:
+  virtual void OnExtensionListsUpdated(
+      const base::DictionaryValue* prefs) OVERRIDE;
+
+ protected:
+  virtual ~ExternalPrefCacheLoader();
+
+  virtual void LoadFinished() OVERRIDE;
+
+ private:
+  friend class base::RefCountedThreadSafe<ExternalLoader>;
+
+  scoped_ptr<ExternalCache> external_cache_;
+
+  DISALLOW_COPY_AND_ASSIGN(ExternalPrefCacheLoader);
+};
+
+}  // namespace chromeos
+
+#endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_EXTERNAL_PREF_CACHE_LOADER_H_
diff --git a/chrome/browser/chromeos/fileapi/remote_file_system_operation.cc b/chrome/browser/chromeos/fileapi/remote_file_system_operation.cc
deleted file mode 100644
index e51e568..0000000
--- a/chrome/browser/chromeos/fileapi/remote_file_system_operation.cc
+++ /dev/null
@@ -1,244 +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 "chrome/browser/chromeos/fileapi/remote_file_system_operation.h"
-
-#include "base/bind.h"
-#include "base/platform_file.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/values.h"
-#include "net/url_request/url_request.h"
-#include "url/gurl.h"
-#include "webkit/browser/fileapi/file_system_url.h"
-#include "webkit/browser/fileapi/file_writer_delegate.h"
-
-using fileapi::FileSystemURL;
-
-namespace chromeos {
-
-RemoteFileSystemOperation::RemoteFileSystemOperation(
-    scoped_refptr<fileapi::RemoteFileSystemProxyInterface> remote_proxy)
-      : remote_proxy_(remote_proxy),
-        pending_operation_(kOperationNone) {
-}
-
-RemoteFileSystemOperation::~RemoteFileSystemOperation() {
-}
-
-void RemoteFileSystemOperation::GetMetadata(const FileSystemURL& url,
-    const GetMetadataCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationGetMetadata));
-  remote_proxy_->GetFileInfo(url, callback);
-}
-
-void RemoteFileSystemOperation::DirectoryExists(const FileSystemURL& url,
-    const StatusCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationDirectoryExists));
-  remote_proxy_->GetFileInfo(url,
-      base::Bind(&RemoteFileSystemOperation::DidDirectoryExists,
-                 AsWeakPtr(), callback));
-}
-
-void RemoteFileSystemOperation::FileExists(const FileSystemURL& url,
-    const StatusCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationFileExists));
-  remote_proxy_->GetFileInfo(url,
-      base::Bind(base::Bind(&RemoteFileSystemOperation::DidFileExists,
-                            AsWeakPtr(), callback)));
-}
-
-void RemoteFileSystemOperation::ReadDirectory(const FileSystemURL& url,
-    const ReadDirectoryCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationReadDirectory));
-  remote_proxy_->ReadDirectory(url, callback);
-}
-
-void RemoteFileSystemOperation::Remove(const FileSystemURL& url, bool recursive,
-                                       const StatusCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationRemove));
-  remote_proxy_->Remove(url, recursive,
-      base::Bind(&RemoteFileSystemOperation::DidFinishFileOperation,
-                 AsWeakPtr(), callback));
-}
-
-
-void RemoteFileSystemOperation::CreateDirectory(
-    const FileSystemURL& url, bool exclusive, bool recursive,
-    const StatusCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationCreateDirectory));
-  remote_proxy_->CreateDirectory(url, exclusive, recursive,
-      base::Bind(&RemoteFileSystemOperation::DidFinishFileOperation,
-                 AsWeakPtr(), callback));
-}
-
-void RemoteFileSystemOperation::CreateFile(const FileSystemURL& url,
-                                           bool exclusive,
-                                           const StatusCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationCreateFile));
-  remote_proxy_->CreateFile(url, exclusive,
-      base::Bind(&RemoteFileSystemOperation::DidFinishFileOperation,
-                 AsWeakPtr(), callback));
-}
-
-void RemoteFileSystemOperation::Copy(const FileSystemURL& src_url,
-                                     const FileSystemURL& dest_url,
-                                     const StatusCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationCopy));
-
-  remote_proxy_->Copy(src_url, dest_url,
-      base::Bind(&RemoteFileSystemOperation::DidFinishFileOperation,
-                 AsWeakPtr(), callback));
-}
-
-void RemoteFileSystemOperation::Move(const FileSystemURL& src_url,
-                                     const FileSystemURL& dest_url,
-                                     const StatusCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationMove));
-
-  remote_proxy_->Move(src_url, dest_url,
-      base::Bind(&RemoteFileSystemOperation::DidFinishFileOperation,
-                 AsWeakPtr(), callback));
-}
-
-void RemoteFileSystemOperation::Write(
-    const FileSystemURL& url,
-    scoped_ptr<fileapi::FileWriterDelegate> writer_delegate,
-    scoped_ptr<net::URLRequest> blob_request,
-    const WriteCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationWrite));
-  file_writer_delegate_ = writer_delegate.Pass();
-  file_writer_delegate_->Start(
-      blob_request.Pass(),
-      base::Bind(&RemoteFileSystemOperation::DidWrite, AsWeakPtr(), callback));
-}
-
-void RemoteFileSystemOperation::Truncate(const FileSystemURL& url,
-                                         int64 length,
-                                         const StatusCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationTruncate));
-
-  remote_proxy_->Truncate(url, length,
-      base::Bind(&RemoteFileSystemOperation::DidFinishFileOperation,
-                 AsWeakPtr(), callback));
-}
-
-void RemoteFileSystemOperation::Cancel(const StatusCallback& cancel_callback) {
-  DCHECK(cancel_callback_.is_null());
-  cancel_callback_ = cancel_callback;
-
-  if (file_writer_delegate_) {
-    DCHECK_EQ(kOperationWrite, pending_operation_);
-    // This will call DidWrite() with ABORT status code.
-    file_writer_delegate_->Cancel();
-  } else {
-    // For truncate we have no way to cancel the inflight operation (for now).
-    // Let it just run and dispatch cancel callback later.
-    DCHECK_EQ(kOperationTruncate, pending_operation_);
-  }
-}
-
-void RemoteFileSystemOperation::TouchFile(const FileSystemURL& url,
-                                          const base::Time& last_access_time,
-                                          const base::Time& last_modified_time,
-                                          const StatusCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationTouchFile));
-  remote_proxy_->TouchFile(
-      url,
-      last_access_time,
-      last_modified_time,
-      base::Bind(&RemoteFileSystemOperation::DidFinishFileOperation,
-                 AsWeakPtr(), callback));
-}
-
-void RemoteFileSystemOperation::OpenFile(const FileSystemURL& url,
-                                         int file_flags,
-                                         base::ProcessHandle peer_handle,
-                                         const OpenFileCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationOpenFile));
-  remote_proxy_->OpenFile(
-      url,
-      file_flags,
-      peer_handle,
-      base::Bind(&RemoteFileSystemOperation::DidOpenFile,
-                 AsWeakPtr(), url, callback));
-}
-
-fileapi::LocalFileSystemOperation*
-RemoteFileSystemOperation::AsLocalFileSystemOperation() {
-  NOTIMPLEMENTED();
-  return NULL;
-}
-
-void RemoteFileSystemOperation::CreateSnapshotFile(
-    const FileSystemURL& url,
-    const SnapshotFileCallback& callback) {
-  DCHECK(SetPendingOperationType(kOperationCreateSnapshotFile));
-  remote_proxy_->CreateSnapshotFile(url, callback);
-}
-
-bool RemoteFileSystemOperation::SetPendingOperationType(OperationType type) {
-  if (pending_operation_ != kOperationNone)
-    return false;
-  pending_operation_ = type;
-  return true;
-}
-
-void RemoteFileSystemOperation::DidDirectoryExists(
-    const StatusCallback& callback,
-    base::PlatformFileError rv,
-    const base::PlatformFileInfo& file_info) {
-  if (rv == base::PLATFORM_FILE_OK && !file_info.is_directory)
-    rv = base::PLATFORM_FILE_ERROR_NOT_A_DIRECTORY;
-  callback.Run(rv);
-}
-
-void RemoteFileSystemOperation::DidFileExists(
-    const StatusCallback& callback,
-    base::PlatformFileError rv,
-    const base::PlatformFileInfo& file_info) {
-  if (rv == base::PLATFORM_FILE_OK && file_info.is_directory)
-    rv = base::PLATFORM_FILE_ERROR_NOT_A_FILE;
-  callback.Run(rv);
-}
-
-void RemoteFileSystemOperation::DidWrite(
-    const WriteCallback& write_callback,
-    base::PlatformFileError rv,
-    int64 bytes,
-    FileWriterDelegate::WriteProgressStatus write_status) {
-  bool complete = (write_status != FileWriterDelegate::SUCCESS_IO_PENDING);
-  StatusCallback cancel_callback = cancel_callback_;
-  write_callback.Run(rv, bytes, complete);
-  if (!cancel_callback.is_null())
-    cancel_callback.Run(base::PLATFORM_FILE_OK);
-}
-
-void RemoteFileSystemOperation::DidFinishFileOperation(
-    const StatusCallback& callback,
-    base::PlatformFileError rv) {
-  if (!cancel_callback_.is_null()) {
-    DCHECK_EQ(kOperationTruncate, pending_operation_);
-
-    StatusCallback cancel_callback = cancel_callback_;
-    callback.Run(base::PLATFORM_FILE_ERROR_ABORT);
-    cancel_callback.Run(base::PLATFORM_FILE_OK);
-  } else {
-    callback.Run(rv);
-  }
-}
-
-void RemoteFileSystemOperation::DidOpenFile(
-    const fileapi::FileSystemURL& url,
-    const OpenFileCallback& callback,
-    base::PlatformFileError result,
-    base::PlatformFile file,
-    base::ProcessHandle peer_handle) {
-  callback.Run(
-      result, file,
-      base::Bind(&fileapi::RemoteFileSystemProxyInterface::NotifyCloseFile,
-                 remote_proxy_, url),
-      peer_handle);
-}
-
-}  // namespace chromeos
diff --git a/chrome/browser/chromeos/fileapi/remote_file_system_operation.h b/chrome/browser/chromeos/fileapi/remote_file_system_operation.h
deleted file mode 100644
index a467368..0000000
--- a/chrome/browser/chromeos/fileapi/remote_file_system_operation.h
+++ /dev/null
@@ -1,120 +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 CHROME_BROWSER_CHROMEOS_FILEAPI_REMOTE_FILE_SYSTEM_OPERATION_H_
-#define CHROME_BROWSER_CHROMEOS_FILEAPI_REMOTE_FILE_SYSTEM_OPERATION_H_
-
-#include "base/basictypes.h"
-#include "base/memory/weak_ptr.h"
-#include "webkit/browser/fileapi/file_system_operation.h"
-#include "webkit/browser/fileapi/file_writer_delegate.h"
-#include "webkit/browser/fileapi/remote_file_system_proxy.h"
-
-namespace base {
-class Value;
-}
-
-namespace fileapi {
-class FileWriterDelegate;
-class LocalFileSystemOperation;
-}
-
-namespace chromeos {
-
-// FileSystemOperation implementation for local file systems.
-class RemoteFileSystemOperation
-    : public fileapi::FileSystemOperation,
-      public base::SupportsWeakPtr<RemoteFileSystemOperation> {
- public:
-  typedef fileapi::FileWriterDelegate FileWriterDelegate;
-
-  explicit RemoteFileSystemOperation(
-      scoped_refptr<fileapi::RemoteFileSystemProxyInterface> remote_proxy);
-
-  virtual ~RemoteFileSystemOperation();
-
-  // FileSystemOperation overrides.
-  virtual void CreateFile(const fileapi::FileSystemURL& url,
-                          bool exclusive,
-                          const StatusCallback& callback) OVERRIDE;
-  virtual void CreateDirectory(const fileapi::FileSystemURL& url,
-                               bool exclusive,
-                               bool recursive,
-                               const StatusCallback& callback) OVERRIDE;
-  virtual void Copy(const fileapi::FileSystemURL& src_url,
-                    const fileapi::FileSystemURL& dest_url,
-                    const StatusCallback& callback) OVERRIDE;
-  virtual void Move(const fileapi::FileSystemURL& src_url,
-                    const fileapi::FileSystemURL& dest_url,
-                    const StatusCallback& callback) OVERRIDE;
-  virtual void DirectoryExists(const fileapi::FileSystemURL& url,
-                               const StatusCallback& callback) OVERRIDE;
-  virtual void FileExists(const fileapi::FileSystemURL& url,
-                          const StatusCallback& callback) OVERRIDE;
-  virtual void GetMetadata(const fileapi::FileSystemURL& url,
-                           const GetMetadataCallback& callback) OVERRIDE;
-  virtual void ReadDirectory(const fileapi::FileSystemURL& url,
-                             const ReadDirectoryCallback& callback) OVERRIDE;
-  virtual void Remove(const fileapi::FileSystemURL& url, bool recursive,
-                      const StatusCallback& callback) OVERRIDE;
-  virtual void Write(const fileapi::FileSystemURL& url,
-                     scoped_ptr<fileapi::FileWriterDelegate> writer_delegate,
-                     scoped_ptr<net::URLRequest> blob_request,
-                     const WriteCallback& callback) OVERRIDE;
-  virtual void Truncate(const fileapi::FileSystemURL& url, int64 length,
-                        const StatusCallback& callback) OVERRIDE;
-  virtual void Cancel(const StatusCallback& cancel_callback) OVERRIDE;
-  virtual void TouchFile(const fileapi::FileSystemURL& url,
-                         const base::Time& last_access_time,
-                         const base::Time& last_modified_time,
-                         const StatusCallback& callback) OVERRIDE;
-  virtual void OpenFile(
-      const fileapi::FileSystemURL& url,
-      int file_flags,
-      base::ProcessHandle peer_handle,
-      const OpenFileCallback& callback) OVERRIDE;
-  virtual fileapi::LocalFileSystemOperation*
-      AsLocalFileSystemOperation() OVERRIDE;
-  virtual void CreateSnapshotFile(
-      const fileapi::FileSystemURL& url,
-      const SnapshotFileCallback& callback) OVERRIDE;
-
- private:
-  // Used only for internal assertions.
-  // Returns false if there's another inflight pending operation.
-  bool SetPendingOperationType(OperationType type);
-
-  // Generic callback that translates platform errors to WebKit error codes.
-  void DidDirectoryExists(const StatusCallback& callback,
-                          base::PlatformFileError rv,
-                          const base::PlatformFileInfo& file_info);
-  void DidFileExists(const StatusCallback& callback,
-                     base::PlatformFileError rv,
-                     const base::PlatformFileInfo& file_info);
-  void DidWrite(const WriteCallback& write_callback,
-                base::PlatformFileError result,
-                int64 bytes,
-                FileWriterDelegate::WriteProgressStatus write_status);
-  void DidFinishFileOperation(const StatusCallback& callback,
-                              base::PlatformFileError rv);
-  void DidOpenFile(
-      const fileapi::FileSystemURL& url,
-      const OpenFileCallback& callback,
-      base::PlatformFileError result,
-      base::PlatformFile file,
-      base::ProcessHandle peer_handle);
-
-  scoped_refptr<fileapi::RemoteFileSystemProxyInterface> remote_proxy_;
-  // A flag to make sure we call operation only once per instance.
-  OperationType pending_operation_;
-  scoped_ptr<fileapi::FileWriterDelegate> file_writer_delegate_;
-
-  StatusCallback cancel_callback_;
-
-  DISALLOW_COPY_AND_ASSIGN(RemoteFileSystemOperation);
-};
-
-}  // namespace chromeos
-
-#endif  // CHROME_BROWSER_CHROMEOS_FILEAPI_REMOTE_FILE_SYSTEM_OPERATION_H_
diff --git a/chrome/browser/chromeos/policy/app_pack_updater.h b/chrome/browser/chromeos/policy/app_pack_updater.h
index 390de7e..9f256b8 100644
--- a/chrome/browser/chromeos/policy/app_pack_updater.h
+++ b/chrome/browser/chromeos/policy/app_pack_updater.h
@@ -22,7 +22,6 @@
 class GURL;
 
 namespace extensions {
-class CrxInstaller;
 class ExtensionDownloader;
 class ExternalLoader;
 }
@@ -164,10 +163,6 @@
                              const std::string& path,
                              const std::string& version);
 
-  // Handles failure to install CRX files. The file is deleted if it came from
-  // the cache.
-  void OnCrxInstallFailed(extensions::CrxInstaller* installer);
-
   // Helper to post blocking IO tasks to the blocking pool.
   void PostBlockingTask(const tracked_objects::Location& from_here,
                         const base::Closure& task);
diff --git a/chrome/browser/chromeos/system/ash_system_tray_delegate.cc b/chrome/browser/chromeos/system/ash_system_tray_delegate.cc
index a7f7ed9..96f6f9d 100644
--- a/chrome/browser/chromeos/system/ash_system_tray_delegate.cc
+++ b/chrome/browser/chromeos/system/ash_system_tray_delegate.cc
@@ -679,8 +679,10 @@
 
   virtual void ConnectToBluetoothDevice(const std::string& address) OVERRIDE {
     device::BluetoothDevice* device = bluetooth_adapter_->GetDevice(address);
-    if (!device || device->IsConnecting() || device->IsConnected())
+    if (!device || device->IsConnecting() ||
+        (device->IsConnected() && device->IsPaired())) {
       return;
+    }
     if (device->IsPaired() && !device->IsConnectable())
       return;
     if (device->IsPaired() || !device->IsPairable()) {
diff --git a/chrome/browser/chromeos/system_logs/debug_daemon_log_source.cc b/chrome/browser/chromeos/system_logs/debug_daemon_log_source.cc
index 60ba329..feb1d8f 100644
--- a/chrome/browser/chromeos/system_logs/debug_daemon_log_source.cc
+++ b/chrome/browser/chromeos/system_logs/debug_daemon_log_source.cc
@@ -23,6 +23,7 @@
 const char kRoutesKeyName[] = "routes";
 const char kNetworkStatusKeyName[] = "network-status";
 const char kModemStatusKeyName[] = "modem-status";
+const char kWiMaxStatusKeyName[] = "wimax-status";
 const char kUserLogFileKeyName[] = "user_log_files";
 
 namespace chromeos {
@@ -53,6 +54,9 @@
   client->GetModemStatus(base::Bind(&DebugDaemonLogSource::OnGetModemStatus,
                                     weak_ptr_factory_.GetWeakPtr()));
   ++num_pending_requests_;
+  client->GetWiMaxStatus(base::Bind(&DebugDaemonLogSource::OnGetWiMaxStatus,
+                                    weak_ptr_factory_.GetWeakPtr()));
+  ++num_pending_requests_;
   client->GetAllLogs(base::Bind(&DebugDaemonLogSource::OnGetLogs,
                                 weak_ptr_factory_.GetWeakPtr()));
   ++num_pending_requests_;
@@ -94,6 +98,17 @@
   RequestCompleted();
 }
 
+void DebugDaemonLogSource::OnGetWiMaxStatus(bool succeeded,
+                                            const std::string& status) {
+  DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
+
+  if (succeeded)
+    (*response_)[kWiMaxStatusKeyName] = status;
+  else
+    (*response_)[kWiMaxStatusKeyName] = kNotAvailable;
+  RequestCompleted();
+}
+
 void DebugDaemonLogSource::OnGetLogs(bool /* succeeded */,
                                      const KeyValueMap& logs) {
   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
diff --git a/chrome/browser/chromeos/system_logs/debug_daemon_log_source.h b/chrome/browser/chromeos/system_logs/debug_daemon_log_source.h
index aea030f..8d1626c 100644
--- a/chrome/browser/chromeos/system_logs/debug_daemon_log_source.h
+++ b/chrome/browser/chromeos/system_logs/debug_daemon_log_source.h
@@ -33,6 +33,7 @@
   void OnGetRoutes(bool succeeded, const std::vector<std::string>& routes);
   void OnGetNetworkStatus(bool succeeded, const std::string& status);
   void OnGetModemStatus(bool succeeded, const std::string& status);
+  void OnGetWiMaxStatus(bool succeeded, const std::string& status);
   void OnGetLogs(bool succeeded,
                  const KeyValueMap& logs);
   void OnGetUserLogFiles(bool succeeded,
diff --git a/chrome/browser/drive/drive_uploader.cc b/chrome/browser/drive/drive_uploader.cc
index 0d4866a..493a763 100644
--- a/chrome/browser/drive/drive_uploader.cc
+++ b/chrome/browser/drive/drive_uploader.cc
@@ -34,6 +34,15 @@
 
 namespace drive {
 
+namespace {
+// Upload data is split to multiple HTTP request each conveying kUploadChunkSize
+// bytes (except the request for uploading the last chunk of data).
+// The value must be a multiple of 512KB according to the spec of GData WAPI and
+// Drive API v2. It is set to a smaller value than 2^31 for working around
+// server side error (crbug.com/264089).
+const int64 kUploadChunkSize = (1LL << 30);  // 1GB
+}  // namespace
+
 // Structure containing current upload information of file, passed between
 // DriveServiceInterface methods and callbacks.
 struct DriveUploader::UploadFileInfo {
@@ -316,11 +325,15 @@
     return;
   }
 
+  // Limit the size of data uploaded per each request by kUploadChunkSize.
+  const int64 end_position = std::min(upload_file_info->content_length,
+                                      start_position + kUploadChunkSize);
+
   UploadFileInfo* info_ptr = upload_file_info.get();
   info_ptr->cancel_callback = drive_service_->ResumeUpload(
       info_ptr->upload_location,
       start_position,
-      info_ptr->content_length,
+      end_position,
       info_ptr->content_length,
       info_ptr->content_type,
       info_ptr->file_path,
diff --git a/chrome/browser/extensions/ad_view_browsertest.cc b/chrome/browser/extensions/ad_view_browsertest.cc
index 045293e..4982cb2 100644
--- a/chrome/browser/extensions/ad_view_browsertest.cc
+++ b/chrome/browser/extensions/ad_view_browsertest.cc
@@ -65,7 +65,15 @@
 
 // This test checks that <adview> attributes are also exposed as properties
 // (with the same name and value).
-IN_PROC_BROWSER_TEST_F(AdViewTest, PropertiesAreInSyncWithAttributes) {
+#if defined(OS_WIN)
+// Flaky on Win XP. (http://crbug.com/264362)
+#define MAYBE_PropertiesAreInSyncWithAttributes \
+    DISABLED_PropertiesAreInSyncWithAttributes
+#else
+#define MAYBE_PropertiesAreInSyncWithAttributes \
+    PropertiesAreInSyncWithAttributes
+#endif
+IN_PROC_BROWSER_TEST_F(AdViewTest, MAYBE_PropertiesAreInSyncWithAttributes) {
   ASSERT_TRUE(StartEmbeddedTestServer());
 
   ASSERT_TRUE(RunPlatformAppTest(
diff --git a/chrome/browser/extensions/api/downloads/downloads_api.cc b/chrome/browser/extensions/api/downloads/downloads_api.cc
index 03d6613..7de85f4 100644
--- a/chrome/browser/extensions/api/downloads/downloads_api.cc
+++ b/chrome/browser/extensions/api/downloads/downloads_api.cc
@@ -808,11 +808,7 @@
   EXTENSION_FUNCTION_VALIDATE(params.get());
   const extensions::api::downloads::DownloadOptions& options = params->options;
   GURL download_url(options.url);
-  if (!download_url.is_valid() ||
-      (!download_url.SchemeIs("data") &&
-       download_url.GetOrigin() != GetExtension()->url().GetOrigin() &&
-       !extensions::PermissionsData::HasHostPermission(GetExtension(),
-                                                       download_url))) {
+  if (!download_url.is_valid()) {
     error_ = download_extension_errors::kInvalidURLError;
     return false;
   }
@@ -1109,7 +1105,9 @@
   EXTENSION_FUNCTION_VALIDATE(params.get());
   DownloadItem* download_item = GetDownload(
       profile(), include_incognito(), params->download_id);
-  if (!download_item || download_item->GetState() != DownloadItem::COMPLETE) {
+  if (!download_item || download_item->GetState() != DownloadItem::COMPLETE ||
+      !GetExtension()->HasAPIPermission(
+          extensions::APIPermission::kDownloadsOpen)) {
     error_ = download_extension_errors::kInvalidOperationError;
     return false;
   }
diff --git a/chrome/browser/extensions/api/downloads/downloads_api_unittest.cc b/chrome/browser/extensions/api/downloads/downloads_api_unittest.cc
index 26450b6..93a40f2 100644
--- a/chrome/browser/extensions/api/downloads/downloads_api_unittest.cc
+++ b/chrome/browser/extensions/api/downloads/downloads_api_unittest.cc
@@ -1736,17 +1736,25 @@
     "http://",
     "#frag",
     "foo/bar.html#frag",
-    "javascript:document.write(\\\"hello\\\");",
-    "javascript:return false;",
-    "ftp://example.com/example.txt",
   };
 
   for (size_t index = 0; index < arraysize(kInvalidURLs); ++index) {
     EXPECT_STREQ(download_extension_errors::kInvalidURLError,
                   RunFunctionAndReturnError(new DownloadsDownloadFunction(),
                                             base::StringPrintf(
-        "[{\"url\": \"%s\"}]", kInvalidURLs[index])).c_str());
+        "[{\"url\": \"%s\"}]", kInvalidURLs[index])).c_str())
+      << kInvalidURLs[index];
   }
+
+  EXPECT_STREQ("net::ERR_ACCESS_DENIED", RunFunctionAndReturnError(
+      new DownloadsDownloadFunction(),
+      "[{\"url\": \"javascript:document.write(\\\"hello\\\");\"}]").c_str());
+  EXPECT_STREQ("net::ERR_ACCESS_DENIED", RunFunctionAndReturnError(
+      new DownloadsDownloadFunction(),
+      "[{\"url\": \"javascript:return false;\"}]").c_str());
+  EXPECT_STREQ("net::ERR_NOT_IMPLEMENTED", RunFunctionAndReturnError(
+      new DownloadsDownloadFunction(),
+      "[{\"url\": \"ftp://example.com/example.txt\"}]").c_str());
 }
 
 // TODO(benjhayden): Set up a test ftp server, add ftp://localhost* to
diff --git a/chrome/browser/chromeos/extensions/networking_private_api.h b/chrome/browser/extensions/api/networking_private/networking_private_api.h
similarity index 96%
rename from chrome/browser/chromeos/extensions/networking_private_api.h
rename to chrome/browser/extensions/api/networking_private/networking_private_api.h
index d7232a3..cab006d 100644
--- a/chrome/browser/chromeos/extensions/networking_private_api.h
+++ b/chrome/browser/extensions/api/networking_private/networking_private_api.h
@@ -1,12 +1,12 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// 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.
 
 // These classes implement the chrome.networkingPrivate JavaScript extension
 // API.
 
-#ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_NETWORKING_PRIVATE_API_H_
-#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_NETWORKING_PRIVATE_API_H_
+#ifndef CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_API_H_
+#define CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_API_H_
 
 #include <string>
 
@@ -250,4 +250,5 @@
   DISALLOW_COPY_AND_ASSIGN(NetworkingPrivateVerifyAndEncryptDataFunction);
 };
 
-#endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_NETWORKING_PRIVATE_API_H_
+#endif  // CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_API_H_
+
diff --git a/chrome/browser/chromeos/extensions/networking_private_api.cc b/chrome/browser/extensions/api/networking_private/networking_private_api_chromeos.cc
similarity index 98%
rename from chrome/browser/chromeos/extensions/networking_private_api.cc
rename to chrome/browser/extensions/api/networking_private/networking_private_api_chromeos.cc
index 9708b8d..cdaf357 100644
--- a/chrome/browser/chromeos/extensions/networking_private_api.cc
+++ b/chrome/browser/extensions/api/networking_private/networking_private_api_chromeos.cc
@@ -1,8 +1,8 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// 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 "chrome/browser/chromeos/extensions/networking_private_api.h"
+#include "chrome/browser/extensions/api/networking_private/networking_private_api.h"
 
 #include "base/bind.h"
 #include "base/bind_helpers.h"
diff --git a/chrome/browser/extensions/api/networking_private/networking_private_api_nonchromeos.cc b/chrome/browser/extensions/api/networking_private/networking_private_api_nonchromeos.cc
new file mode 100644
index 0000000..55beff7
--- /dev/null
+++ b/chrome/browser/extensions/api/networking_private/networking_private_api_nonchromeos.cc
@@ -0,0 +1,435 @@
+// 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 "chrome/browser/extensions/api/networking_private/networking_private_api.h"
+
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/callback.h"
+#include "base/command_line.h"
+#include "base/json/json_reader.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/extensions/event_names.h"
+#include "chrome/browser/extensions/event_router.h"
+#include "chrome/browser/extensions/extension_function_registry.h"
+#include "chrome/browser/extensions/extension_system.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/api/networking_private.h"
+
+using extensions::event_names::kOnNetworkListChanged;
+using extensions::event_names::kOnNetworksChanged;
+using extensions::EventRouter;
+using extensions::ExtensionSystem;
+namespace api = extensions::api::networking_private;
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateGetPropertiesFunction
+
+
+const char kNetworkingPrivateProperties[] = "NetworkingPrivateProperties";
+
+struct NetworkingPrivatePropertiesData : base::SupportsUserData::Data {
+  explicit NetworkingPrivatePropertiesData(const base::DictionaryValue* prop) :
+    properties_(prop->DeepCopy()) { }
+  scoped_ptr<base::DictionaryValue> properties_;
+};
+
+NetworkingPrivateGetPropertiesFunction::
+  ~NetworkingPrivateGetPropertiesFunction() {
+}
+
+bool NetworkingPrivateGetPropertiesFunction::RunImpl() {
+  scoped_ptr<api::GetProperties::Params> params =
+      api::GetProperties::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+
+  // If there are properties set by SetProperties function, use those.
+  NetworkingPrivatePropertiesData* stored_properties =
+    static_cast<NetworkingPrivatePropertiesData*> (
+        profile()->GetUserData(kNetworkingPrivateProperties));
+  if (stored_properties != NULL) {
+    SetResult(stored_properties->properties_.release());
+    SendResponse(true);
+    return true;
+  }
+
+  const std::string network_properties =
+    "{\"ConnectionState\":\"NotConnected\","
+     "\"GUID\":\"stub_wifi2\","
+     "\"Name\":\"wifi2_PSK\","
+     "\"Type\":\"WiFi\","
+     "\"WiFi\":{"
+       "\"Frequency\":5000,"
+       "\"FrequencyList\":[2400,5000],"
+       "\"SSID\":\"stub_wifi2\","
+       "\"Security\":\"WPA-PSK\","
+       "\"SignalStrength\":80}}";
+
+  if (params->network_guid == "nonexistent_path") {
+    error_ = "Error.DBusFailed";
+    SendResponse(false);
+  } else {
+    SetResult(base::JSONReader::Read(network_properties));
+    SendResponse(true);
+  }
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateGetManagedPropertiesFunction
+
+NetworkingPrivateGetManagedPropertiesFunction::
+  ~NetworkingPrivateGetManagedPropertiesFunction() {
+}
+
+bool NetworkingPrivateGetManagedPropertiesFunction::RunImpl() {
+  scoped_ptr<api::GetManagedProperties::Params> params =
+      api::GetManagedProperties::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+  const std::string network_properties =
+      "{"
+      "  \"ConnectionState\": {"
+      "    \"Active\": \"NotConnected\","
+      "    \"Effective\": \"Unmanaged\""
+      "  },"
+      "  \"GUID\": \"stub_wifi2\","
+      "  \"Name\": {"
+      "    \"Active\": \"wifi2_PSK\","
+      "    \"Effective\": \"UserPolicy\","
+      "    \"UserPolicy\": \"My WiFi Network\""
+      "  },"
+      "  \"Type\": {"
+      "    \"Active\": \"WiFi\","
+      "    \"Effective\": \"UserPolicy\","
+      "    \"UserPolicy\": \"WiFi\""
+      "  },"
+      "  \"WiFi\": {"
+      "    \"AutoConnect\": {"
+      "      \"Active\": false,"
+      "      \"UserEditable\": true"
+      "    },"
+      "    \"Frequency\" : {"
+      "      \"Active\": 5000,"
+      "      \"Effective\": \"Unmanaged\""
+      "    },"
+      "    \"FrequencyList\" : {"
+      "      \"Active\": [2400, 5000],"
+      "      \"Effective\": \"Unmanaged\""
+      "    },"
+      "    \"Passphrase\": {"
+      "      \"Effective\": \"UserSetting\","
+      "      \"UserEditable\": true,"
+      "      \"UserSetting\": \"FAKE_CREDENTIAL_VPaJDV9x\""
+      "    },"
+      "    \"SSID\": {"
+      "      \"Active\": \"stub_wifi2\","
+      "      \"Effective\": \"UserPolicy\","
+      "      \"UserPolicy\": \"stub_wifi2\""
+      "    },"
+      "    \"Security\": {"
+      "      \"Active\": \"WPA-PSK\","
+      "      \"Effective\": \"UserPolicy\","
+      "      \"UserPolicy\": \"WPA-PSK\""
+      "    },"
+      "    \"SignalStrength\": {"
+      "      \"Active\": 80,"
+      "      \"Effective\": \"Unmanaged\""
+      "    }"
+      "  }"
+      "}";
+
+  SetResult(base::JSONReader::Read(network_properties));
+  SendResponse(true);
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateGetStateFunction
+
+NetworkingPrivateGetStateFunction::
+  ~NetworkingPrivateGetStateFunction() {
+}
+
+bool NetworkingPrivateGetStateFunction::RunImpl() {
+  scoped_ptr<api::GetState::Params> params =
+      api::GetState::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+  const std::string network_state =
+      "{"
+      "  \"ConnectionState\": \"NotConnected\","
+      "  \"GUID\": \"stub_wifi2\","
+      "  \"Name\": \"wifi2_PSK\","
+      "  \"Type\": \"WiFi\","
+      "  \"WiFi\": {"
+      "    \"AutoConnect\": false,"
+      "    \"FrequencyList\": [2400, 5000],"
+      "    \"Security\": \"WPA-PSK\","
+      "    \"SignalStrength\": 80"
+      "  }"
+      "}";
+  SetResult(base::JSONReader::Read(network_state));
+  SendResponse(true);
+  return true;
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateSetPropertiesFunction
+
+NetworkingPrivateSetPropertiesFunction::
+  ~NetworkingPrivateSetPropertiesFunction() {
+}
+
+bool NetworkingPrivateSetPropertiesFunction::RunImpl() {
+  scoped_ptr<api::SetProperties::Params> params =
+      api::SetProperties::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+  scoped_ptr<base::DictionaryValue> properties_dict(
+      params->properties.ToValue());
+
+  // Store properties_dict in profile to return from GetProperties.
+  profile()->SetUserData(kNetworkingPrivateProperties,
+    new NetworkingPrivatePropertiesData(properties_dict.get()));
+  SendResponse(true);
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateGetVisibleNetworksFunction
+
+NetworkingPrivateGetVisibleNetworksFunction::
+  ~NetworkingPrivateGetVisibleNetworksFunction() {
+}
+
+bool NetworkingPrivateGetVisibleNetworksFunction::RunImpl() {
+  scoped_ptr<api::GetVisibleNetworks::Params> params =
+      api::GetVisibleNetworks::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+  const std::string networks_json =
+      "[{"
+      "    \"ConnectionState\": \"Connected\","
+      "    \"GUID\": \"stub_ethernet\","
+      "    \"Name\": \"eth0\","
+      "    \"Type\": \"Ethernet\""
+      "  },"
+      "  {"
+      "    \"ConnectionState\": \"Connected\","
+      "    \"GUID\": \"stub_wifi1\","
+      "    \"Name\": \"wifi1\","
+      "    \"Type\": \"WiFi\","
+      "    \"WiFi\": {"
+      "      \"AutoConnect\": false,"
+      "      \"FrequencyList\": [2400],"
+      "      \"Security\": \"WEP-PSK\","
+      "      \"SignalStrength\": 0"
+      "    }"
+      "  },"
+      "  {"
+      "    \"ConnectionState\": \"NotConnected\","
+      "    \"GUID\": \"stub_wifi2\","
+      "    \"Name\": \"wifi2_PSK\","
+      "    \"Type\": \"WiFi\","
+      "    \"WiFi\": {"
+      "      \"AutoConnect\": false,"
+      "      \"FrequencyList\": [2400, 5000],"
+      "      \"Security\": \"WPA-PSK\","
+      "      \"SignalStrength\": 80"
+      "    }"
+      "  },"
+      "  {"
+      "    \"Cellular\": {"
+      "      \"ActivateOverNonCellularNetwork\": false,"
+      "      \"ActivationState\": \"not-activated\","
+      "      \"NetworkTechnology\": \"GSM\","
+      "      \"RoamingState\": \"home\""
+      "    },"
+      "    \"ConnectionState\": \"NotConnected\","
+      "    \"GUID\": \"stub_cellular1\","
+      "    \"Name\": \"cellular1\","
+      "    \"Type\": \"Cellular\""
+      "  },"
+      "  {"
+      "    \"ConnectionState\": \"Connected\","
+      "    \"GUID\": \"stub_vpn1\","
+      "    \"Name\": \"vpn1\","
+      "    \"Type\": \"VPN\","
+      "    \"VPN\": {"
+      "      \"AutoConnect\": false"
+      "    }"
+      "  }]";
+  ListValue* visible_networks =
+      static_cast<ListValue*>(base::JSONReader::Read(networks_json));
+  // If caller only needs WiFi networks, then remove all other networks.
+  if (params->type == api::GetVisibleNetworks::Params::TYPE_WIFI) {
+    visible_networks->Remove(4, NULL);
+    visible_networks->Remove(3, NULL);
+    visible_networks->Remove(0, NULL);
+  }
+
+  SetResult(visible_networks);
+  SendResponse(true);
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateRequestNetworkScanFunction
+
+NetworkingPrivateRequestNetworkScanFunction::
+  ~NetworkingPrivateRequestNetworkScanFunction() {
+}
+
+bool NetworkingPrivateRequestNetworkScanFunction::RunImpl() {
+  // Generate onNetworkListChanged event.
+  std::vector<std::string> changes;
+  changes.push_back("stub_ethernet");
+  changes.push_back("stub_wifi1");
+  changes.push_back("stub_wifi2");
+  changes.push_back("stub_cellular1");
+  changes.push_back("stub_vpn1");
+
+  EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+  scoped_ptr<base::ListValue> args(api::OnNetworkListChanged::Create(changes));
+  scoped_ptr<extensions::Event> extension_event(new extensions::Event(
+      kOnNetworkListChanged, args.Pass()));
+  event_router->BroadcastEvent(extension_event.Pass());
+
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateStartConnectFunction
+
+NetworkingPrivateStartConnectFunction::
+  ~NetworkingPrivateStartConnectFunction() {
+}
+
+bool NetworkingPrivateStartConnectFunction::RunImpl() {
+  scoped_ptr<api::StartConnect::Params> params =
+      api::StartConnect::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+  if (params->network_guid == "nonexistent_path") {
+    error_ = "not-found";
+    SendResponse(false);
+  } else {
+    SendResponse(true);
+    // Set Properties to reflect connected state
+    const std::string network_properties =
+      "{\"ConnectionState\":\"Connected\","
+       "\"GUID\":\"stub_wifi2\","
+       "\"Name\":\"wifi2_PSK\","
+       "\"Type\":\"WiFi\","
+       "\"WiFi\":{"
+         "\"Frequency\":5000,"
+         "\"FrequencyList\":[2400,5000],"
+         "\"SSID\":\"stub_wifi2\","
+         "\"Security\":\"WPA-PSK\","
+         "\"SignalStrength\":80}}";
+
+    // Store network_properties in profile to return from GetProperties.
+    profile()->SetUserData(kNetworkingPrivateProperties,
+      new NetworkingPrivatePropertiesData(
+        static_cast<DictionaryValue*>(
+          base::JSONReader::Read(network_properties))));
+
+    // Broadcast NetworksChanged Event that network is connected
+    EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+    scoped_ptr<base::ListValue> args(api::OnNetworksChanged::Create(
+        std::vector<std::string>(1, params->network_guid)));
+    scoped_ptr<extensions::Event> netchanged_event(
+        new extensions::Event(kOnNetworksChanged, args.Pass()));
+    event_router->BroadcastEvent(netchanged_event.Pass());
+
+    // Generate NetworkListChanged event.
+    std::vector<std::string> list;
+    list.push_back("stub_wifi2");
+    list.push_back("stub_ethernet");
+    list.push_back("stub_wifi1");
+    list.push_back("stub_cellular1");
+    list.push_back("stub_vpn1");
+
+    scoped_ptr<base::ListValue> arg2(api::OnNetworkListChanged::Create(list));
+    scoped_ptr<extensions::Event> netlist_event(new extensions::Event(
+        kOnNetworkListChanged, arg2.Pass()));
+    event_router->BroadcastEvent(netlist_event.Pass());
+  }
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateStartDisconnectFunction
+
+NetworkingPrivateStartDisconnectFunction::
+  ~NetworkingPrivateStartDisconnectFunction() {
+}
+
+bool NetworkingPrivateStartDisconnectFunction::RunImpl() {
+  scoped_ptr<api::StartDisconnect::Params> params =
+      api::StartDisconnect::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+  if (params->network_guid == "nonexistent_path") {
+    error_ = "not-found";
+    SendResponse(false);
+  } else {
+    SendResponse(true);
+
+    // Send Event that network is disconnected. Listener will use GetProperties.
+    EventRouter* event_router = ExtensionSystem::Get(profile_)->event_router();
+    scoped_ptr<base::ListValue> args(api::OnNetworksChanged::Create(
+        std::vector<std::string>(1, params->network_guid)));
+    scoped_ptr<extensions::Event> extension_event(
+        new extensions::Event(kOnNetworksChanged, args.Pass()));
+    event_router->BroadcastEvent(extension_event.Pass());
+  }
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateVerifyDestinationFunction
+
+NetworkingPrivateVerifyDestinationFunction::
+  ~NetworkingPrivateVerifyDestinationFunction() {
+}
+
+bool NetworkingPrivateVerifyDestinationFunction::RunImpl() {
+  scoped_ptr<api::VerifyDestination::Params> params =
+      api::VerifyDestination::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+  SetResult(new base::FundamentalValue(true));
+  SendResponse(true);
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateVerifyAndEncryptCredentialsFunction
+
+NetworkingPrivateVerifyAndEncryptCredentialsFunction::
+  ~NetworkingPrivateVerifyAndEncryptCredentialsFunction() {
+}
+
+bool NetworkingPrivateVerifyAndEncryptCredentialsFunction::RunImpl() {
+  scoped_ptr<api::VerifyAndEncryptCredentials::Params> params =
+      api::VerifyAndEncryptCredentials::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+  SetResult(new base::StringValue("encrypted_credentials"));
+  SendResponse(true);
+  return true;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// NetworkingPrivateVerifyAndEncryptDataFunction
+
+NetworkingPrivateVerifyAndEncryptDataFunction::
+  ~NetworkingPrivateVerifyAndEncryptDataFunction() {
+}
+
+bool NetworkingPrivateVerifyAndEncryptDataFunction::RunImpl() {
+  scoped_ptr<api::VerifyAndEncryptData::Params> params =
+      api::VerifyAndEncryptData::Params::Create(*args_);
+  EXTENSION_FUNCTION_VALIDATE(params);
+  SetResult(new base::StringValue("encrypted_data"));
+  SendResponse(true);
+  return true;
+}
+
diff --git a/chrome/browser/chromeos/extensions/networking_private_apitest.cc b/chrome/browser/extensions/api/networking_private/networking_private_apitest.cc
similarity index 93%
rename from chrome/browser/chromeos/extensions/networking_private_apitest.cc
rename to chrome/browser/extensions/api/networking_private/networking_private_apitest.cc
index fe7093c..5ab4ef5 100644
--- a/chrome/browser/chromeos/extensions/networking_private_apitest.cc
+++ b/chrome/browser/extensions/api/networking_private/networking_private_apitest.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// 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.
 
@@ -15,6 +15,8 @@
 #include "chrome/browser/policy/policy_types.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/test/base/ui_test_utils.h"
+
+#if defined(OS_CHROMEOS)
 #include "chromeos/chromeos_switches.h"
 #include "chromeos/dbus/cryptohome_client.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
@@ -25,7 +27,7 @@
 #include "chromeos/network/onc/onc_utils.h"
 #include "policy/policy_constants.h"
 #include "third_party/cros_system_api/dbus/service_constants.h"
-
+#endif  // OS_CHROMEOS
 using testing::AnyNumber;
 using testing::Return;
 using testing::_;
@@ -37,19 +39,35 @@
 const char kUser1ProfilePath[] = "/profile/user1/shill";
 const char kUserIdStubHashSuffix[] = "-hash";
 
-void AssignString(std::string* out,
-                  DBusMethodCallStatus call_status,
-                  const std::string& result) {
-  CHECK_EQ(call_status, DBUS_METHOD_CALL_SUCCESS);
-  *out = result;
-}
-
 }  // namespace
 
 class ExtensionNetworkingPrivateApiTest :
     public ExtensionApiTest,
     public testing::WithParamInterface<bool> {
  public:
+  bool RunNetworkingSubtest(const std::string& subtest) {
+    return RunExtensionSubtest(
+        "networking", "main.html?" + subtest,
+        kFlagEnableFileAccess | kFlagLoadAsComponent);
+  }
+
+  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
+    EXPECT_CALL(provider_, IsInitializationComplete(_))
+        .WillRepeatedly(Return(true));
+    EXPECT_CALL(provider_, RegisterPolicyDomain(_)).Times(AnyNumber());
+    policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
+
+    ExtensionApiTest::SetUpInProcessBrowserTestFixture();
+  }
+
+#if defined(OS_CHROMEOS)
+  static void AssignString(std::string* out,
+                    DBusMethodCallStatus call_status,
+                    const std::string& result) {
+    CHECK_EQ(call_status, DBUS_METHOD_CALL_SUCCESS);
+    *out = result;
+  }
+
   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
     ExtensionApiTest::SetUpCommandLine(command_line);
     // Whitelist the extension ID of the test extension.
@@ -68,21 +86,6 @@
       command_line->AppendSwitch(::switches::kMultiProfiles);
   }
 
-  bool RunNetworkingSubtest(const std::string& subtest) {
-    return RunExtensionSubtest(
-        "networking", "main.html?" + subtest,
-        kFlagEnableFileAccess | kFlagLoadAsComponent);
-  }
-
-  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
-    EXPECT_CALL(provider_, IsInitializationComplete(_))
-        .WillRepeatedly(Return(true));
-    EXPECT_CALL(provider_, RegisterPolicyDomain(_)).Times(AnyNumber());
-    policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
-
-    ExtensionApiTest::SetUpInProcessBrowserTestFixture();
-  }
-
   void InitializeSanitizedUsername() {
     chromeos::UserManager* user_manager = chromeos::UserManager::Get();
     chromeos::User* user = user_manager->GetActiveUser();
@@ -189,6 +192,19 @@
 
     content::RunAllPendingInMessageLoop();
   }
+#else  // !defined(OS_CHROMEOS)
+  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
+    ExtensionApiTest::SetUpCommandLine(command_line);
+    // Whitelist the extension ID of the test extension.
+    command_line->AppendSwitchASCII(::switches::kWhitelistedExtensionID,
+                                    "epcifkihnkjgphfkloaaleeakhpmgdmn");
+  }
+
+  virtual void SetUpOnMainThread() OVERRIDE {
+    ExtensionApiTest::SetUpOnMainThread();
+    content::RunAllPendingInMessageLoop();
+  }
+#endif  // OS_CHROMEOS
 
  protected:
   policy::MockConfigurationPolicyProvider provider_;
@@ -250,6 +266,7 @@
   EXPECT_TRUE(RunNetworkingSubtest("setProperties")) << message_;
 }
 
+#if defined(OS_CHROMEOS)
 IN_PROC_BROWSER_TEST_P(ExtensionNetworkingPrivateApiTest,
                        GetManagedProperties) {
   ShillServiceClient::TestInterface* service_test =
@@ -302,6 +319,7 @@
 
   EXPECT_TRUE(RunNetworkingSubtest("getManagedProperties")) << message_;
 }
+#endif  // OS_CHROMEOS
 
 IN_PROC_BROWSER_TEST_P(ExtensionNetworkingPrivateApiTest,
                        OnNetworksChangedEventConnect) {
@@ -340,3 +358,4 @@
                         testing::Bool());
 
 }  // namespace chromeos
+
diff --git a/chrome/browser/chromeos/extensions/networking_private_event_router.h b/chrome/browser/extensions/api/networking_private/networking_private_event_router.h
similarity index 84%
rename from chrome/browser/chromeos/extensions/networking_private_event_router.h
rename to chrome/browser/extensions/api/networking_private/networking_private_event_router.h
index 9173c76..011c8dd 100644
--- a/chrome/browser/chromeos/extensions/networking_private_event_router.h
+++ b/chrome/browser/extensions/api/networking_private/networking_private_event_router.h
@@ -1,9 +1,9 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// 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 CHROME_BROWSER_CHROMEOS_EXTENSIONS_NETWORKING_PRIVATE_EVENT_ROUTER_H_
-#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_NETWORKING_PRIVATE_EVENT_ROUTER_H_
+#ifndef CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_EVENT_ROUTER_H_
+#define CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_EVENT_ROUTER_H_
 
 #include "chrome/browser/extensions/event_router.h"
 #include "chromeos/network/network_state_handler_observer.h"
@@ -52,4 +52,5 @@
 
 }  // namespace chromeos
 
-#endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_NETWORKING_PRIVATE_EVENT_ROUTER_H_
+#endif  // CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_EVENT_ROUTER_H_
+
diff --git a/chrome/browser/chromeos/extensions/networking_private_event_router.cc b/chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc
similarity index 95%
rename from chrome/browser/chromeos/extensions/networking_private_event_router.cc
rename to chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc
index 97b3b60..44d70eb 100644
--- a/chrome/browser/chromeos/extensions/networking_private_event_router.cc
+++ b/chrome/browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc
@@ -1,12 +1,12 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// 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 "chrome/browser/chromeos/extensions/networking_private_event_router.h"
+#include "chrome/browser/extensions/api/networking_private/networking_private_event_router.h"
 
 #include "base/json/json_writer.h"
 #include "chrome/browser/browser_process.h"
-#include "chrome/browser/chromeos/extensions/networking_private_api.h"
+#include "chrome/browser/extensions/api/networking_private/networking_private_api.h"
 #include "chrome/browser/extensions/event_names.h"
 #include "chrome/browser/extensions/event_router_forwarder.h"
 #include "chrome/browser/extensions/extension_system.h"
@@ -139,3 +139,4 @@
 }
 
 }  // namespace chromeos
+
diff --git a/chrome/browser/chromeos/extensions/networking_private_event_router_factory.cc b/chrome/browser/extensions/api/networking_private/networking_private_event_router_factory.cc
similarity index 83%
rename from chrome/browser/chromeos/extensions/networking_private_event_router_factory.cc
rename to chrome/browser/extensions/api/networking_private/networking_private_event_router_factory.cc
index 1a88b74..6814ffe 100644
--- a/chrome/browser/chromeos/extensions/networking_private_event_router_factory.cc
+++ b/chrome/browser/extensions/api/networking_private/networking_private_event_router_factory.cc
@@ -1,10 +1,10 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// 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 "chrome/browser/chromeos/extensions/networking_private_event_router_factory.h"
+#include "chrome/browser/extensions/api/networking_private/networking_private_event_router_factory.h"
 
-#include "chrome/browser/chromeos/extensions/networking_private_event_router.h"
+#include "chrome/browser/extensions/api/networking_private/networking_private_event_router.h"
 #include "chrome/browser/extensions/extension_system_factory.h"
 #include "chrome/browser/profiles/incognito_helpers.h"
 #include "chrome/browser/profiles/profile.h"
@@ -38,7 +38,11 @@
 BrowserContextKeyedService*
 NetworkingPrivateEventRouterFactory::BuildServiceInstanceFor(
     content::BrowserContext* profile) const {
+#if defined(OS_CHROMEOS)
   return new NetworkingPrivateEventRouter(static_cast<Profile*>(profile));
+#else  // OS_CHROMEOS
+  return NULL;
+#endif  // OS_CHROMEOS
 }
 
 content::BrowserContext*
diff --git a/chrome/browser/chromeos/extensions/networking_private_event_router_factory.h b/chrome/browser/extensions/api/networking_private/networking_private_event_router_factory.h
similarity index 81%
rename from chrome/browser/chromeos/extensions/networking_private_event_router_factory.h
rename to chrome/browser/extensions/api/networking_private/networking_private_event_router_factory.h
index 0208904..bcd2eba 100644
--- a/chrome/browser/chromeos/extensions/networking_private_event_router_factory.h
+++ b/chrome/browser/extensions/api/networking_private/networking_private_event_router_factory.h
@@ -1,9 +1,9 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// 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 CHROME_BROWSER_CHROMEOS_EXTENSIONS_NETWORKING_PRIVATE_EVENT_ROUTER_FACTORY_H_
-#define CHROME_BROWSER_CHROMEOS_EXTENSIONS_NETWORKING_PRIVATE_EVENT_ROUTER_FACTORY_H_
+#ifndef CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_EVENT_ROUTER_FACTORY_H_
+#define CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_EVENT_ROUTER_FACTORY_H_
 
 #include "base/memory/singleton.h"
 #include "components/browser_context_keyed_service/browser_context_keyed_service_factory.h"
@@ -49,4 +49,5 @@
 
 }  // namespace chromeos
 
-#endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_NETWORKING_PRIVATE_EVENT_ROUTER_FACTORY_H_
+#endif  // CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_EVENT_ROUTER_FACTORY_H_
+
diff --git a/chrome/browser/extensions/app_process_apitest.cc b/chrome/browser/extensions/app_process_apitest.cc
index ee5a829..a1c30b5 100644
--- a/chrome/browser/extensions/app_process_apitest.cc
+++ b/chrome/browser/extensions/app_process_apitest.cc
@@ -10,6 +10,7 @@
 #include "chrome/browser/extensions/process_map.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h"
+#include "chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/browser_finder.h"
@@ -656,20 +657,28 @@
       LoadExtension(test_data_dir_.AppendASCII("app_process"));
   ASSERT_TRUE(app);
 
-  content::WindowedNotificationObserver blocker_observer(
-      chrome::NOTIFICATION_CONTENT_BLOCKED_STATE_CHANGED,
-      content::NotificationService::AllSources());
   ui_test_utils::NavigateToURL(
       browser(), GetTestBaseURL("app_process").Resolve("path3/container.html"));
 
-  blocker_observer.Wait();
-
   WebContents* tab = browser()->tab_strip_model()->GetActiveWebContents();
   BlockedContentTabHelper* blocked_content_tab_helper =
       BlockedContentTabHelper::FromWebContents(tab);
-  std::vector<WebContents*> blocked_contents;
-  blocked_content_tab_helper->GetBlockedContents(&blocked_contents);
-  EXPECT_EQ(blocked_contents.size(), 1u);
+  PopupBlockerTabHelper* popup_blocker_tab_helper =
+      PopupBlockerTabHelper::FromWebContents(tab);
+  if (!blocked_content_tab_helper->GetBlockedContentsCount() &&
+      (!popup_blocker_tab_helper ||
+       !popup_blocker_tab_helper->GetBlockedPopupsCount())) {
+    content::WindowedNotificationObserver observer(
+        chrome::NOTIFICATION_WEB_CONTENT_SETTINGS_CHANGED,
+        content::NotificationService::AllSources());
+    observer.Wait();
+  }
+
+  EXPECT_EQ(1u,
+            blocked_content_tab_helper->GetBlockedContentsCount() +
+                (popup_blocker_tab_helper
+                     ? popup_blocker_tab_helper->GetBlockedPopupsCount()
+                     : 0));
 }
 
 // Tests that if an extension launches an app via chrome.tabs.create with an URL
diff --git a/chrome/browser/extensions/data_deleter.cc b/chrome/browser/extensions/data_deleter.cc
index 8c8fe4f..46518b0 100644
--- a/chrome/browser/extensions/data_deleter.cc
+++ b/chrome/browser/extensions/data_deleter.cc
@@ -41,19 +41,16 @@
     // preserve this code path without checking for isolation because it's
     // simpler than special casing.  This code should go away once we merge
     // the various URLRequestContexts (http://crbug.com/159193).
-    partition->ClearDataForOrigin(
-        content::StoragePartition::REMOVE_DATA_MASK_ALL,
+    partition->AsyncClearDataForOrigin(
         content::StoragePartition::kAllStorage,
         storage_origin,
         profile->GetRequestContextForExtensions());
   } else {
     // We don't need to worry about the media request context because that
     // shares the same cookie store as the main request context.
-    partition->ClearDataForOrigin(
-        content::StoragePartition::REMOVE_DATA_MASK_ALL,
-        content::StoragePartition::kAllStorage,
-        storage_origin,
-        partition->GetURLRequestContext());
+    partition->AsyncClearDataForOrigin(content::StoragePartition::kAllStorage,
+                                       storage_origin,
+                                       partition->GetURLRequestContext());
   }
 
   // Begin removal of the settings for the current extension.
diff --git a/chrome/browser/extensions/external_loader.h b/chrome/browser/extensions/external_loader.h
index 86ffee3..ecadda0 100644
--- a/chrome/browser/extensions/external_loader.h
+++ b/chrome/browser/extensions/external_loader.h
@@ -55,7 +55,7 @@
   virtual ~ExternalLoader();
 
   // Notifies the provider that the list of extensions has been loaded.
-  void LoadFinished();
+  virtual void LoadFinished();
 
   // Used for passing the list of extensions from the method that loads them
   // to |LoadFinished|. To ensure thread safety, the rules are the following:
diff --git a/chrome/browser/extensions/external_pref_loader.h b/chrome/browser/extensions/external_pref_loader.h
index 49b0ce9..c06dd35 100644
--- a/chrome/browser/extensions/external_pref_loader.h
+++ b/chrome/browser/extensions/external_pref_loader.h
@@ -38,6 +38,8 @@
   virtual const base::FilePath GetBaseCrxFilePath() OVERRIDE;
 
  protected:
+  virtual ~ExternalPrefLoader() {}
+
   virtual void StartLoading() OVERRIDE;
   bool IsOptionSet(Options option) {
     return (options_ & option) != 0;
@@ -46,8 +48,6 @@
  private:
   friend class base::RefCountedThreadSafe<ExternalLoader>;
 
-  virtual ~ExternalPrefLoader() {}
-
   // Actually searches for and loads candidate standalone extension preference
   // files in the path corresponding to |base_path_id|.
   // Must be called on the file thread.
diff --git a/chrome/browser/extensions/external_provider_impl.cc b/chrome/browser/extensions/external_provider_impl.cc
index b5f3dc5..677f447 100644
--- a/chrome/browser/extensions/external_provider_impl.cc
+++ b/chrome/browser/extensions/external_provider_impl.cc
@@ -39,6 +39,7 @@
 #endif
 
 #if defined(OS_CHROMEOS)
+#include "chrome/browser/chromeos/extensions/external_pref_cache_loader.h"
 #include "chrome/browser/chromeos/login/user_manager.h"
 #include "chrome/browser/chromeos/policy/app_pack_updater.h"
 #include "chrome/browser/policy/browser_policy_connector.h"
@@ -394,13 +395,19 @@
     external_apps_path_id = chrome::DIR_MANAGED_USERS_DEFAULT_APPS;
 #endif
 
+#if defined(OS_CHROMEOS)
+  typedef chromeos::ExternalPrefCacheLoader PrefLoader;
+#else
+  typedef ExternalPrefLoader PrefLoader;
+#endif
+
   if (!is_chromeos_demo_session) {
     provider_list->push_back(
         linked_ptr<ExternalProviderInterface>(
             new ExternalProviderImpl(
                 service,
-                new ExternalPrefLoader(external_apps_path_id,
-                                       check_admin_permissions_on_mac),
+                new PrefLoader(external_apps_path_id,
+                               check_admin_permissions_on_mac),
                 profile,
                 Manifest::EXTERNAL_PREF,
                 Manifest::EXTERNAL_PREF_DOWNLOAD,
diff --git a/chrome/browser/feedback/feedback_util.cc b/chrome/browser/feedback/feedback_util.cc
index 8095fad..738bf9e 100644
--- a/chrome/browser/feedback/feedback_util.cc
+++ b/chrome/browser/feedback/feedback_util.cc
@@ -38,17 +38,15 @@
 #include "net/url_request/url_fetcher_delegate.h"
 #include "net/url_request/url_request_status.h"
 #include "third_party/icu/source/common/unicode/locid.h"
+#include "third_party/zlib/google/zip.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "url/gurl.h"
 
-#if defined(OS_CHROMEOS)
-#include "third_party/zlib/google/zip.h"
-#endif
-
 using content::WebContents;
 
 namespace {
-const char kLogsFilename[] = "system_logs.txt";
+const base::FilePath::CharType kLogsFilename[] =
+    FILE_PATH_LITERAL("system_logs.txt");
 }
 
 namespace chrome {
@@ -434,7 +432,6 @@
   screen_size = rect;
 }
 
-#if defined(OS_CHROMEOS)
 // static
 bool FeedbackUtil::ZipString(const std::string& logs,
                              std::string* compressed_logs) {
@@ -443,10 +440,10 @@
 
   // Create a temporary directory, put the logs into a file in it. Create
   // another temporary file to receive the zip file in.
-  if (!file_util::CreateNewTempDirectory("", &temp_path))
+  if (!file_util::CreateNewTempDirectory(FILE_PATH_LITERAL(""), &temp_path))
     return false;
-  if (file_util::WriteFile(
-      temp_path.Append(kLogsFilename), logs.c_str(), logs.size()) == -1)
+  if (file_util::WriteFile(temp_path.Append(kLogsFilename),
+                           logs.c_str(), logs.size()) == -1)
     return false;
   if (!file_util::CreateTemporaryFile(&zip_file))
     return false;
@@ -459,5 +456,3 @@
 
   return true;
 }
-#endif // OS_CHROMEOS
-
diff --git a/chrome/browser/feedback/feedback_util.h b/chrome/browser/feedback/feedback_util.h
index 163317d..7849186 100644
--- a/chrome/browser/feedback/feedback_util.h
+++ b/chrome/browser/feedback/feedback_util.h
@@ -76,9 +76,7 @@
   static void ClearScreenshotPng();
   static void SetScreenshotSize(const gfx::Rect& rect);
   static gfx::Rect& GetScreenshotSize();
-#if defined(OS_CHROMEOS)
   static bool ZipString(const std::string& logs, std::string* compressed_logs);
-#endif
 
   class PostCleanup;
 
diff --git a/chrome/browser/feedback/tracing_manager.cc b/chrome/browser/feedback/tracing_manager.cc
new file mode 100644
index 0000000..3ea14cf
--- /dev/null
+++ b/chrome/browser/feedback/tracing_manager.cc
@@ -0,0 +1,135 @@
+// 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 "chrome/browser/feedback/tracing_manager.h"
+
+#include "base/bind.h"
+#include "base/prefs/pref_service.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/feedback/feedback_util.h"
+#include "chrome/common/pref_names.h"
+#include "content/public/browser/trace_controller.h"
+
+namespace {
+// Only once trace manager can exist at a time.
+TracingManager* g_tracing_manager = NULL;
+// Trace IDs start at 1 and increase.
+int g_next_trace_id = 1;
+}
+
+TracingManager::TracingManager()
+    : current_trace_id_(0),
+      weak_ptr_factory_(this) {
+  DCHECK(!g_tracing_manager);
+  g_tracing_manager = this;
+  StartTracing();
+}
+
+TracingManager::~TracingManager() {
+  DCHECK(g_tracing_manager == this);
+  g_tracing_manager = NULL;
+}
+
+int TracingManager::RequestTrace() {
+  // Return the current trace if one is being collected.
+  if (current_trace_id_)
+    return current_trace_id_;
+
+  current_trace_id_ = g_next_trace_id;
+  ++g_next_trace_id;
+  content::TraceController::GetInstance()->EndTracingAsync(this);
+  return current_trace_id_;
+}
+
+bool TracingManager::GetTraceData(int id, const TraceDataCallback& callback) {
+  // If a trace is being collected currently, send it via callback when
+  // complete.
+  if (current_trace_id_) {
+    // Only allow one trace data request at a time.
+    if (trace_callback_.is_null()) {
+      trace_callback_ = callback;
+      return true;
+    } else {
+      return false;
+    }
+  } else {
+    std::map<int, scoped_refptr<base::RefCountedString> >::iterator data =
+        trace_data_.find(id);
+    if (data == trace_data_.end())
+      return false;
+
+    // Always return the data asychronously, so the behavior is consistant.
+    base::MessageLoopProxy::current()->PostTask(
+        FROM_HERE,
+        base::Bind(callback, data->second));
+    return true;
+  }
+}
+
+void TracingManager::DiscardTraceData(int id) {
+  trace_data_.erase(id);
+
+  // If the trace is discarded before it is complete, clean up the accumulators.
+  if (id == current_trace_id_) {
+    current_trace_id_ = 0;
+    data_ = "";
+
+    // If the trace has already been requested, provide an empty string.
+    if (!trace_callback_.is_null()) {
+      trace_callback_.Run(scoped_refptr<base::RefCountedString>());
+      trace_callback_.Reset();
+    }
+  }
+}
+
+void TracingManager::StartTracing() {
+  content::TraceController::GetInstance()->BeginTracing(
+      this, "-test_*",
+      base::debug::TraceLog::RECORD_CONTINUOUSLY);
+}
+
+void TracingManager::OnEndTracingComplete() {
+  if (!current_trace_id_)
+    return;
+
+  std::string output_val;
+  FeedbackUtil::ZipString(data_, &output_val);
+
+  scoped_refptr<base::RefCountedString> output;
+  output->TakeString(&output_val);
+
+  trace_data_[current_trace_id_] = output;
+
+  if (!trace_callback_.is_null()) {
+    trace_callback_.Run(output);
+    trace_callback_.Reset();
+  }
+
+  current_trace_id_ = 0;
+  data_ = "";
+
+  // Tracing has to be restarted asynchronous, so the TracingController can
+  // clean up.
+  base::MessageLoopProxy::current()->PostTask(
+      FROM_HERE,
+      base::Bind(&TracingManager::StartTracing,
+                 weak_ptr_factory_.GetWeakPtr()));
+}
+
+void TracingManager::OnTraceDataCollected(
+    const scoped_refptr<base::RefCountedString>& trace_fragment) {
+  if (current_trace_id_)
+    data_ += trace_fragment->data();
+}
+
+// static
+scoped_ptr<TracingManager> TracingManager::Create() {
+  if (g_tracing_manager)
+    return scoped_ptr<TracingManager>();
+  return scoped_ptr<TracingManager>(new TracingManager());
+}
+
+TracingManager* TracingManager::Get() {
+  return g_tracing_manager;
+}
diff --git a/chrome/browser/feedback/tracing_manager.h b/chrome/browser/feedback/tracing_manager.h
new file mode 100644
index 0000000..c70206a
--- /dev/null
+++ b/chrome/browser/feedback/tracing_manager.h
@@ -0,0 +1,80 @@
+// 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 CHROME_BROWSER_FEEDBACK_TRACING_MANAGER_H_
+#define CHROME_BROWSER_FEEDBACK_TRACING_MANAGER_H_
+
+#include <map>
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/callback.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "content/public/browser/trace_subscriber.h"
+
+// Callback used for getting the output of a trace.
+typedef base::Callback<void(scoped_refptr<base::RefCountedString> trace_data)>
+    TraceDataCallback;
+
+// This class is used to manage performance meterics that can be attached to
+// feedback reports.  This class is a Singleton that is owned by the preference
+// system.  It should only be created when it is enabled, and should only be
+// accessed elsewhere via Get().
+//
+// When a performance trace is desired, TracingManager::Get()->RequestTrace()
+// should be invoked.  The TracingManager will then start preparing a zipped
+// version of the performance data.  That data can then be requested via
+// GetTraceData().  When the data is no longer needed, it should be discarded
+// via DiscardTraceData().
+class TracingManager : public content::TraceSubscriber {
+ public:
+  virtual ~TracingManager();
+
+  // Create a TracingManager.  Can only be called when none exists.
+  static scoped_ptr<TracingManager> Create();
+
+  // Get the current TracingManager.  Returns NULL if one doesn't exist.
+  static TracingManager* Get();
+
+  // Request a trace ending at the current time.  If a trace is already being
+  // collected, the id for that trace is returned.
+  int RequestTrace();
+
+  // Get the trace data for |id|.  On success, true is returned, and the data is
+  // returned via |callback|.  Returns false on failure.
+  bool GetTraceData(int id, const TraceDataCallback& callback);
+
+  // Discard the data for trace |id|.
+  void DiscardTraceData(int id);
+
+ private:
+  void StartTracing();
+
+  // content::TraceSubscriber overrides
+  virtual void OnEndTracingComplete() OVERRIDE;
+  virtual void OnTraceDataCollected(
+      const scoped_refptr<base::RefCountedString>& trace_fragment) OVERRIDE;
+
+  TracingManager();
+
+  // Data being collected from the current trace.
+  std::string data_;
+
+  // ID of the trace that is being collected.
+  int current_trace_id_;
+
+  // Mapping of trace ID to trace data.
+  std::map<int, scoped_refptr<base::RefCountedString> > trace_data_;
+
+  // Callback for the current trace request.
+  TraceDataCallback trace_callback_;
+
+  base::WeakPtrFactory<TracingManager> weak_ptr_factory_;
+
+  DISALLOW_COPY_AND_ASSIGN(TracingManager);
+};
+
+#endif  // CHROME_BROWSER_FEEDBACK_TRACING_MANAGER_H_
+
diff --git a/chrome/browser/google_apis/DEPS b/chrome/browser/google_apis/DEPS
index 214c501..20ee665 100644
--- a/chrome/browser/google_apis/DEPS
+++ b/chrome/browser/google_apis/DEPS
@@ -8,14 +8,9 @@
 specific_include_rules = {
   # AuthService should be gone. crbug.com/162157
   "auth_service\.(h|cc)": [
-    "!chrome/browser/chrome_notification_types.h",
     "!chrome/browser/profiles/profile.h",
-    "!chrome/browser/signin/token_service_factory.h",
-    "!chrome/browser/signin/token_service.h",
-    "!content/public/browser/notification_details.h",
-    "!content/public/browser/notification_observer.h",
-    "!content/public/browser/notification_registrar.h",
-    "!content/public/browser/notification_source.h",
-    "!content/public/browser/notification_types.h",
+    "!chrome/browser/signin/oauth2_token_service.h",
+    "!chrome/browser/signin/profile_oauth2_token_service.h",
+    "!chrome/browser/signin/profile_oauth2_token_service_factory.h",
   ],
 }
diff --git a/chrome/browser/google_apis/auth_service.cc b/chrome/browser/google_apis/auth_service.cc
index 7d2017a..195848b 100644
--- a/chrome/browser/google_apis/auth_service.cc
+++ b/chrome/browser/google_apis/auth_service.cc
@@ -8,20 +8,16 @@
 #include <vector>
 
 #include "base/bind.h"
+#include "base/location.h"
 #include "base/message_loop/message_loop_proxy.h"
 #include "base/metrics/histogram.h"
-#include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/google_apis/auth_service_observer.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/signin/token_service.h"
-#include "chrome/browser/signin/token_service_factory.h"
-#include "content/public/browser/notification_details.h"
-#include "content/public/browser/notification_source.h"
-#include "content/public/browser/notification_types.h"
+#include "chrome/browser/signin/profile_oauth2_token_service.h"
+#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
 #include "google_apis/gaia/gaia_constants.h"
 #include "google_apis/gaia/gaia_urls.h"
 #include "google_apis/gaia/google_service_auth_error.h"
-#include "google_apis/gaia/oauth2_access_token_fetcher.h"
 
 #if defined(OS_CHROMEOS)
 #include "chromeos/login/login_state.h"
@@ -39,62 +35,49 @@
 const int kSuccessRatioHistogramTemporaryFailure = 3;
 const int kSuccessRatioHistogramMaxValue = 4;  // The max value is exclusive.
 
-}  // namespace
-
 // OAuth2 authorization token retrieval request.
-class AuthRequest : public OAuth2AccessTokenConsumer {
+class AuthRequest : public OAuth2TokenService::Consumer {
  public:
-  AuthRequest(net::URLRequestContextGetter* url_request_context_getter,
+  AuthRequest(Profile* profile,
+              net::URLRequestContextGetter* url_request_context_getter,
               const AuthStatusCallback& callback,
-              const std::vector<std::string>& scopes,
-              const std::string& refresh_token);
+              const std::vector<std::string>& scopes);
   virtual ~AuthRequest();
-  void Start();
-
-  // Overridden from OAuth2AccessTokenConsumer:
-  virtual void OnGetTokenSuccess(const std::string& access_token,
-                                 const base::Time& expiration_time) OVERRIDE;
-  virtual void OnGetTokenFailure(const GoogleServiceAuthError& error) OVERRIDE;
 
  private:
-  net::URLRequestContextGetter* url_request_context_getter_;
-  std::string refresh_token_;
+  // Overridden from OAuth2TokenService::Consumer:
+  virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
+                                 const std::string& access_token,
+                                 const base::Time& expiration_time) OVERRIDE;
+  virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request,
+                                 const GoogleServiceAuthError& error) OVERRIDE;
+
   AuthStatusCallback callback_;
-  std::vector<std::string> scopes_;
-  scoped_ptr<OAuth2AccessTokenFetcher> oauth2_access_token_fetcher_;
+  OAuth2TokenService::ScopeSet scopes_;
+  scoped_ptr<OAuth2TokenService::Request> request_;
   base::ThreadChecker thread_checker_;
 
   DISALLOW_COPY_AND_ASSIGN(AuthRequest);
 };
 
 AuthRequest::AuthRequest(
+    Profile* profile,
     net::URLRequestContextGetter* url_request_context_getter,
     const AuthStatusCallback& callback,
-    const std::vector<std::string>& scopes,
-    const std::string& refresh_token)
-    : url_request_context_getter_(url_request_context_getter),
-      refresh_token_(refresh_token),
-      callback_(callback),
-      scopes_(scopes) {
+    const std::vector<std::string>& scopes)
+    : callback_(callback),
+      scopes_(scopes.begin(), scopes.end()) {
   DCHECK(!callback_.is_null());
+  request_ = ProfileOAuth2TokenServiceFactory::GetForProfile(profile)->
+      StartRequestWithContext(url_request_context_getter, scopes_, this);
 }
 
 AuthRequest::~AuthRequest() {}
 
-void AuthRequest::Start() {
-  DCHECK(!refresh_token_.empty());
-  oauth2_access_token_fetcher_.reset(new OAuth2AccessTokenFetcher(
-      this, url_request_context_getter_));
-  oauth2_access_token_fetcher_->Start(
-      GaiaUrls::GetInstance()->oauth2_chrome_client_id(),
-      GaiaUrls::GetInstance()->oauth2_chrome_client_secret(),
-      refresh_token_,
-      scopes_);
-}
-
 // Callback for OAuth2AccessTokenFetcher on success. |access_token| is the token
 // used to start fetching user data.
-void AuthRequest::OnGetTokenSuccess(const std::string& access_token,
+void AuthRequest::OnGetTokenSuccess(const OAuth2TokenService::Request* request,
+                                    const std::string& access_token,
                                     const base::Time& expiration_time) {
   DCHECK(thread_checker_.CalledOnValidThread());
 
@@ -107,7 +90,8 @@
 }
 
 // Callback for OAuth2AccessTokenFetcher on failure.
-void AuthRequest::OnGetTokenFailure(const GoogleServiceAuthError& error) {
+void AuthRequest::OnGetTokenFailure(const OAuth2TokenService::Request* request,
+                                    const GoogleServiceAuthError& error) {
   DCHECK(thread_checker_.CalledOnValidThread());
 
   LOG(WARNING) << "AuthRequest: token request using refresh token failed: "
@@ -137,6 +121,8 @@
   delete this;
 }
 
+}  // namespace
+
 AuthService::AuthService(
     Profile* profile,
     net::URLRequestContextGetter* url_request_context_getter,
@@ -146,19 +132,19 @@
       scopes_(scopes),
       weak_ptr_factory_(this) {
   DCHECK(thread_checker_.CalledOnValidThread());
+  DCHECK(profile);
 
   // Get OAuth2 refresh token (if we have any) and register for its updates.
-  TokenService* service = TokenServiceFactory::GetForProfile(profile_);
-  refresh_token_ = service->GetOAuth2LoginRefreshToken();
-  registrar_.Add(this,
-                 chrome::NOTIFICATION_TOKEN_AVAILABLE,
-                 content::Source<TokenService>(service));
-  registrar_.Add(this,
-                 chrome::NOTIFICATION_TOKEN_REQUEST_FAILED,
-                 content::Source<TokenService>(service));
+  OAuth2TokenService* service =
+      ProfileOAuth2TokenServiceFactory::GetForProfile(profile_);
+  service->AddObserver(this);
+  has_refresh_token_ = service->RefreshTokenIsAvailable();
 }
 
 AuthService::~AuthService() {
+  OAuth2TokenService* service =
+      ProfileOAuth2TokenServiceFactory::GetForProfile(profile_);
+  service->RemoveObserver(this);
 }
 
 void AuthService::StartAuthentication(const AuthStatusCallback& callback) {
@@ -172,12 +158,12 @@
                           base::Bind(callback, HTTP_SUCCESS, access_token_));
   } else if (HasRefreshToken()) {
     // We have refresh token, let's get an access token.
-    (new AuthRequest(url_request_context_getter_,
-                     base::Bind(&AuthService::OnAuthCompleted,
-                                weak_ptr_factory_.GetWeakPtr(),
-                                callback),
-                     scopes_,
-                     refresh_token_))->Start();
+    new AuthRequest(profile_,
+                    url_request_context_getter_,
+                    base::Bind(&AuthService::OnAuthCompleted,
+                               weak_ptr_factory_.GetWeakPtr(),
+                               callback),
+                    scopes_);
   } else {
     relay_proxy->PostTask(FROM_HERE,
                           base::Bind(callback, GDATA_NOT_READY, std::string()));
@@ -189,7 +175,7 @@
 }
 
 bool AuthService::HasRefreshToken() const {
-  return !refresh_token_.empty();
+  return has_refresh_token_;
 }
 
 const std::string& AuthService::access_token() const {
@@ -201,7 +187,7 @@
 }
 
 void AuthService::ClearRefreshToken() {
-  refresh_token_.clear();
+  has_refresh_token_ = false;
 
   FOR_EACH_OBSERVER(AuthServiceObserver,
                     observers_,
@@ -239,24 +225,19 @@
   observers_.RemoveObserver(observer);
 }
 
-void AuthService::Observe(int type,
-                          const content::NotificationSource& source,
-                          const content::NotificationDetails& details) {
-  DCHECK(type == chrome::NOTIFICATION_TOKEN_AVAILABLE ||
-         type == chrome::NOTIFICATION_TOKEN_REQUEST_FAILED);
+void AuthService::OnRefreshTokenAvailable(const std::string& account_id) {
+  OnHandleRefreshToken(true);
+}
 
-  TokenService::TokenAvailableDetails* token_details =
-      content::Details<TokenService::TokenAvailableDetails>(details).ptr();
-  if (token_details->service() != GaiaConstants::kGaiaOAuth2LoginRefreshToken)
-    return;
+void AuthService::OnRefreshTokenRevoked(const std::string& account_id,
+                                        const GoogleServiceAuthError& error) {
+  OnHandleRefreshToken(false);
+}
 
+void AuthService::OnHandleRefreshToken(bool has_refresh_token) {
   access_token_.clear();
-  if (type == chrome::NOTIFICATION_TOKEN_AVAILABLE) {
-    TokenService* service = TokenServiceFactory::GetForProfile(profile_);
-    refresh_token_ = service->GetOAuth2LoginRefreshToken();
-  } else {
-    refresh_token_.clear();
-  }
+  has_refresh_token_ = has_refresh_token;
+
   FOR_EACH_OBSERVER(AuthServiceObserver,
                     observers_,
                     OnOAuth2RefreshTokenChanged());
diff --git a/chrome/browser/google_apis/auth_service.h b/chrome/browser/google_apis/auth_service.h
index a5647a7..4c92ab1 100644
--- a/chrome/browser/google_apis/auth_service.h
+++ b/chrome/browser/google_apis/auth_service.h
@@ -12,9 +12,7 @@
 #include "base/observer_list.h"
 #include "base/threading/thread_checker.h"
 #include "chrome/browser/google_apis/auth_service_interface.h"
-#include "chrome/browser/google_apis/gdata_errorcode.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
+#include "chrome/browser/signin/oauth2_token_service.h"
 
 class Profile;
 
@@ -31,7 +29,7 @@
 // (TokenService) and provides OAuth2 token refresh infrastructure.
 // All public functions must be called on UI thread.
 class AuthService : public AuthServiceInterface,
-                    public content::NotificationObserver {
+                    public OAuth2TokenService::Observer {
  public:
   // |url_request_context_getter| is used to perform authentication with
   // URLFetcher.
@@ -52,10 +50,11 @@
   virtual void ClearAccessToken() OVERRIDE;
   virtual void ClearRefreshToken() OVERRIDE;
 
-  // Overridden from content::NotificationObserver:
-  virtual void Observe(int type,
-                       const content::NotificationSource& source,
-                       const content::NotificationDetails& details) OVERRIDE;
+  // Overridden from OAuth2TokenService::Observer:
+  virtual void OnRefreshTokenAvailable(const std::string& account_id) OVERRIDE;
+  virtual void OnRefreshTokenRevoked(
+      const std::string& account_id,
+      const GoogleServiceAuthError& error) OVERRIDE;
 
   // Sets the access_token as specified.  This should be used only for testing.
   void set_access_token_for_testing(const std::string& token) {
@@ -68,6 +67,9 @@
   static bool CanAuthenticate(Profile* profile);
 
  private:
+  // Called when the state of the refresh token changes.
+  void OnHandleRefreshToken(bool has_refresh_token);
+
   // Called when authentication request from StartAuthentication() is
   // completed.
   void OnAuthCompleted(const AuthStatusCallback& callback,
@@ -76,14 +78,12 @@
 
   Profile* profile_;
   net::URLRequestContextGetter* url_request_context_getter_;  // Not owned.
-  std::string refresh_token_;
+  bool has_refresh_token_;
   std::string access_token_;
   std::vector<std::string> scopes_;
   ObserverList<AuthServiceObserver> observers_;
   base::ThreadChecker thread_checker_;
 
-  content::NotificationRegistrar registrar_;
-
   // Note: This should remain the last member so it'll be destroyed and
   // invalidate its weak pointers before any other members are destroyed.
   base::WeakPtrFactory<AuthService> weak_ptr_factory_;
diff --git a/chrome/browser/guestview/webview/webview_constants.cc b/chrome/browser/guestview/webview/webview_constants.cc
index b80b635..2611a7d 100644
--- a/chrome/browser/guestview/webview/webview_constants.cc
+++ b/chrome/browser/guestview/webview/webview_constants.cc
@@ -16,6 +16,8 @@
 const char kEventLoadRedirect[] = "webview.onLoadRedirect";
 const char kEventLoadStart[] = "webview.onLoadStart";
 const char kEventLoadStop[] = "webview.onLoadStop";
+const char kEventResponsive[] = "webview.onResponsive";
+const char kEventUnresponsive[] = "webview.onUnresponsive";
 
 // Parameters/properties on events.
 const char kLevel[] = "level";
diff --git a/chrome/browser/guestview/webview/webview_constants.h b/chrome/browser/guestview/webview/webview_constants.h
index e8ce5a4..59532f2 100644
--- a/chrome/browser/guestview/webview/webview_constants.h
+++ b/chrome/browser/guestview/webview/webview_constants.h
@@ -19,11 +19,13 @@
 extern const char kEventLoadRedirect[];
 extern const char kEventLoadStart[];
 extern const char kEventLoadStop[];
+extern const char kEventResponsive[];
+extern const char kEventUnresponsive[];
 
 // Parameters/properties on events.
-extern const char kMessage[];
 extern const char kLevel[];
 extern const char kLine[];
+extern const char kMessage[];
 extern const char kNewURL[];
 extern const char kOldURL[];
 extern const char kProcessId[];
@@ -35,8 +37,6 @@
 extern const char kInternalEntryCount[];
 extern const char kInternalProcessId[];
 
-// Parameters/properties on events.
-
 }  // namespace webview
 
 #endif  // CHROME_BROWSER_GUESTVIEW_WEBVIEW_WEBVIEW_CONSTANTS_H_
diff --git a/chrome/browser/guestview/webview/webview_guest.cc b/chrome/browser/guestview/webview/webview_guest.cc
index 71a4e6c..9bd9389 100644
--- a/chrome/browser/guestview/webview/webview_guest.cc
+++ b/chrome/browser/guestview/webview/webview_guest.cc
@@ -160,6 +160,22 @@
   return false;
 }
 
+// TODO(fsamuel): Find a reliable way to test the 'responsive' and
+// 'unresponsive' events.
+void WebViewGuest::RendererResponsive() {
+  scoped_ptr<DictionaryValue> args(new DictionaryValue());
+  args->SetInteger(webview::kProcessId,
+      guest_web_contents()->GetRenderProcessHost()->GetID());
+  DispatchEvent(new GuestView::Event(webview::kEventResponsive, args.Pass()));
+}
+
+void WebViewGuest::RendererUnresponsive() {
+  scoped_ptr<DictionaryValue> args(new DictionaryValue());
+  args->SetInteger(webview::kProcessId,
+      guest_web_contents()->GetRenderProcessHost()->GetID());
+  DispatchEvent(new GuestView::Event(webview::kEventUnresponsive, args.Pass()));
+}
+
 void WebViewGuest::Observe(int type,
                            const content::NotificationSource& source,
                            const content::NotificationDetails& details) {
diff --git a/chrome/browser/guestview/webview/webview_guest.h b/chrome/browser/guestview/webview/webview_guest.h
index 5f63ecd..a13e306 100644
--- a/chrome/browser/guestview/webview/webview_guest.h
+++ b/chrome/browser/guestview/webview/webview_guest.h
@@ -48,6 +48,8 @@
   virtual void GuestProcessGone(base::TerminationStatus status) OVERRIDE;
   virtual bool HandleKeyboardEvent(
       const content::NativeWebKeyboardEvent& event) OVERRIDE;
+  virtual void RendererResponsive() OVERRIDE;
+  virtual void RendererUnresponsive() OVERRIDE;
 
   // NotificationObserver implementation.
   virtual void Observe(int type,
diff --git a/chrome/browser/media/webrtc_browsertest_common.cc b/chrome/browser/media/webrtc_browsertest_common.cc
index 83c24fc..cf067b6 100644
--- a/chrome/browser/media/webrtc_browsertest_common.cc
+++ b/chrome/browser/media/webrtc_browsertest_common.cc
@@ -6,7 +6,6 @@
 
 #include "base/file_util.h"
 #include "base/path_service.h"
-#include "base/process_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/test/test_timeouts.h"
 #include "base/time/time.h"
diff --git a/chrome/browser/memory_details_android.cc b/chrome/browser/memory_details_android.cc
index 9be87ae..fab8422 100644
--- a/chrome/browser/memory_details_android.cc
+++ b/chrome/browser/memory_details_android.cc
@@ -10,6 +10,7 @@
 
 #include "base/bind.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/process/process_iterator.h"
 #include "chrome/common/chrome_constants.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/common/process_type.h"
diff --git a/chrome/browser/metrics/thread_watcher.cc b/chrome/browser/metrics/thread_watcher.cc
index 54e26c7..c8ee4cf 100644
--- a/chrome/browser/metrics/thread_watcher.cc
+++ b/chrome/browser/metrics/thread_watcher.cc
@@ -411,7 +411,7 @@
 // static
 const int ThreadWatcherList::kUnresponsiveSeconds = 2;
 // static
-const int ThreadWatcherList::kUnresponsiveCount = 7;
+const int ThreadWatcherList::kUnresponsiveCount = 9;
 // static
 const int ThreadWatcherList::kLiveThreadsThreshold = 2;
 
diff --git a/chrome/browser/net/net_error_tab_helper.cc b/chrome/browser/net/net_error_tab_helper.cc
index 6f20a8a..c441c2c 100644
--- a/chrome/browser/net/net_error_tab_helper.cc
+++ b/chrome/browser/net/net_error_tab_helper.cc
@@ -143,7 +143,7 @@
       dns_error_active_(false),
       dns_error_page_committed_(false),
       dns_probe_status_(chrome_common_net::DNS_PROBE_POSSIBLE),
-      enabled_by_trial_(chrome_common_net::DnsProbesEnabledByFieldTrial()) {
+      probes_enabled_(chrome_common_net::DnsProbesEnabled()) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 
   // If this helper is under test, it won't have a WebContents.
@@ -208,7 +208,7 @@
     return testing_state_ == TESTING_FORCE_ENABLED;
 
   // TODO(ttuttle): Disable on mobile?
-  return enabled_by_trial_ && *resolve_errors_with_web_service_;
+  return probes_enabled_ && *resolve_errors_with_web_service_;
 }
 
 void NetErrorTabHelper::SendInfo() {
diff --git a/chrome/browser/net/net_error_tab_helper.h b/chrome/browser/net/net_error_tab_helper.h
index fd0553e..2a38e0c 100644
--- a/chrome/browser/net/net_error_tab_helper.h
+++ b/chrome/browser/net/net_error_tab_helper.h
@@ -108,8 +108,8 @@
   // navigations), it re-sends the status whenever an error page commits.
   chrome_common_net::DnsProbeStatus dns_probe_status_;
 
-  // Whether we are enabled to run by the DnsProbe-Enable field trial.
-  const bool enabled_by_trial_;
+  // Whether probes are enabled (by the command-line option or the field trial).
+  const bool probes_enabled_;
 
   // Optional callback for browser test to snoop on outgoing NetErrorInfo IPCs.
   DnsProbeStatusSnoopCallback dns_probe_status_snoop_callback_;
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service.cc b/chrome/browser/policy/cloud/user_policy_signin_service.cc
index 4091e32..2baff3d 100644
--- a/chrome/browser/policy/cloud/user_policy_signin_service.cc
+++ b/chrome/browser/policy/cloud/user_policy_signin_service.cc
@@ -20,6 +20,7 @@
 #include "chrome/browser/signin/token_service_factory.h"
 #include "chrome/common/pref_names.h"
 #include "content/public/browser/notification_details.h"
+#include "content/public/browser/notification_source.h"
 #include "google_apis/gaia/gaia_constants.h"
 
 #if defined(ENABLE_MANAGED_USERS)
diff --git a/chrome/browser/policy/cloud/user_policy_signin_service_base.cc b/chrome/browser/policy/cloud/user_policy_signin_service_base.cc
index d530557..2b78d89 100644
--- a/chrome/browser/policy/cloud/user_policy_signin_service_base.cc
+++ b/chrome/browser/policy/cloud/user_policy_signin_service_base.cc
@@ -18,6 +18,7 @@
 #include "chrome/browser/signin/signin_manager_factory.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/pref_names.h"
+#include "content/public/browser/notification_source.h"
 
 namespace policy {
 
diff --git a/chrome/browser/prerender/prerender_local_predictor.cc b/chrome/browser/prerender/prerender_local_predictor.cc
index 93525f6..520dc22 100644
--- a/chrome/browser/prerender/prerender_local_predictor.cc
+++ b/chrome/browser/prerender/prerender_local_predictor.cc
@@ -198,6 +198,10 @@
   return (transition & content::PAGE_TRANSITION_CHAIN_END) == 0;
 }
 
+bool IsFormSubmit(PageTransition transition) {
+  return (transition & content::PAGE_TRANSITION_FORM_SUBMIT) != 0;
+}
+
 bool ShouldExcludeTransitionForPrediction(PageTransition transition) {
   return IsBackForward(transition) || IsHomePage(transition) ||
       IsIntermediateRedirect(transition);
@@ -441,7 +445,8 @@
       if (!last_visited.is_null() &&
           last_visited > visits[i].time - max_age &&
           last_visited < visits[i].time - min_age) {
-        next_urls_currently_found.insert(visits[i].url_id);
+        if (!IsFormSubmit(visits[i].transition))
+          next_urls_currently_found.insert(visits[i].url_id);
       }
     }
     if (i == static_cast<int>(visits.size()) - 1 ||
@@ -715,6 +720,7 @@
   PrerenderProperties* prerender_properties = NULL;
 
   for (int i = 0; i < static_cast<int>(info->candidate_urls_.size()); i++) {
+    RecordEvent(EVENT_CONTINUE_PRERENDER_CHECK_EXAMINE_NEXT_URL);
     url_info.reset(new LocalPredictorURLInfo(info->candidate_urls_[i]));
 
     // We need to check whether we can issue a prerender for this URL.
@@ -813,11 +819,13 @@
             p->prerender_handle.get())) {
       new_prerender_handle->OnCancel();
       new_prerender_handle.reset(NULL);
+      RecordEvent(EVENT_ISSUE_PRERENDER_ALREADY_PRERENDERING);
       break;
     }
   }
 
   if (new_prerender_handle.get()) {
+    RecordEvent(EVENT_ISSUE_PRERENDER_NEW_PRERENDER);
     // The new prerender does not match any existing prerenders. Update
     // prerender_properties so that it reflects the new entry.
     prerender_properties->url_id = url_id;
@@ -829,8 +837,10 @@
     prerender_properties->prerender_handle.swap(new_prerender_handle);
     // new_prerender_handle now represents the old previou prerender that we
     // are replacing. So we need to cancel it.
-    if (new_prerender_handle)
+    if (new_prerender_handle) {
       new_prerender_handle->OnCancel();
+      RecordEvent(EVENT_ISSUE_PRERENDER_CANCELLED_OLD_PRERENDER);
+    }
   }
 
   RecordEvent(EVENT_ADD_VISIT_PRERENDERING);
diff --git a/chrome/browser/prerender/prerender_local_predictor.h b/chrome/browser/prerender/prerender_local_predictor.h
index ebd8e03..67cea7f 100644
--- a/chrome/browser/prerender/prerender_local_predictor.h
+++ b/chrome/browser/prerender/prerender_local_predictor.h
@@ -91,6 +91,10 @@
     EVENT_TAB_HELPER_URL_SEEN_NAMESPACE_MATCH = 48,
     EVENT_PRERENDER_URL_LOOKUP_MULTIPLE_SOURCE_WEBCONTENTS_FOUND = 49,
     EVENT_CONTINUE_PRERENDER_CHECK_ON_SIDE_EFFECT_FREE_WHITELIST = 50,
+    EVENT_CONTINUE_PRERENDER_CHECK_EXAMINE_NEXT_URL = 51,
+    EVENT_ISSUE_PRERENDER_ALREADY_PRERENDERING = 52,
+    EVENT_ISSUE_PRERENDER_NEW_PRERENDER = 53,
+    EVENT_ISSUE_PRERENDER_CANCELLED_OLD_PRERENDER = 54,
     EVENT_MAX_VALUE
   };
 
diff --git a/chrome/browser/printing/printing_layout_browsertest.cc b/chrome/browser/printing/printing_layout_browsertest.cc
index 1d80518..cc0c449 100644
--- a/chrome/browser/printing/printing_layout_browsertest.cc
+++ b/chrome/browser/printing/printing_layout_browsertest.cc
@@ -8,6 +8,7 @@
 #include "base/files/file_path.h"
 #include "base/message_loop/message_loop.h"
 #include "base/path_service.h"
+#include "base/process/process.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/test_file_util.h"
diff --git a/chrome/browser/profile_resetter/brandcode_config_fetcher.cc b/chrome/browser/profile_resetter/brandcode_config_fetcher.cc
index b3fb98b..f9c6c83 100644
--- a/chrome/browser/profile_resetter/brandcode_config_fetcher.cc
+++ b/chrome/browser/profile_resetter/brandcode_config_fetcher.cc
@@ -27,12 +27,20 @@
 "      >\n"
 "    <updatecheck />\n"
 "    <data name=\"install\" "
-    "index=\"skipfirstrunui-importsearch-defaultbrowser\" />\n"
+    "index=\"__BRANDCODE_PLACEHOLDER__\" />\n"
 "  </app>\n"
 "</request>";
 
-std::string GetUploadData() {
-  return kPostXml;
+// Returns the query to the server which can be used to retrieve the config.
+// |brand| is a brand code, it mustn't be empty.
+std::string GetUploadData(const std::string& brand) {
+  DCHECK(!brand.empty());
+  std::string data(kPostXml);
+  const std::string placeholder("__BRANDCODE_PLACEHOLDER__");
+  size_t placeholder_pos = data.find(placeholder);
+  DCHECK(placeholder_pos != std::string::npos);
+  data.replace(placeholder_pos, placeholder.size(), brand);
+  return data;
 }
 
 // Extracts json master prefs from xml.
@@ -130,15 +138,17 @@
 } // namespace
 
 BrandcodeConfigFetcher::BrandcodeConfigFetcher(const FetchCallback& callback,
-                                               const GURL& url)
+                                               const GURL& url,
+                                               const std::string& brandcode)
     : fetch_callback_(callback) {
+  DCHECK(!brandcode.empty());
   config_fetcher_.reset(net::URLFetcher::Create(0 /* ID used for testing */,
                                                 url,
                                                 net::URLFetcher::POST,
                                                 this));
   config_fetcher_->SetRequestContext(
       g_browser_process->system_request_context());
-  config_fetcher_->SetUploadData("text/xml", GetUploadData());
+  config_fetcher_->SetUploadData("text/xml", GetUploadData(brandcode));
   config_fetcher_->AddExtraRequestHeader("Accept: text/xml");
   config_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
                                 net::LOAD_DO_NOT_SAVE_COOKIES |
diff --git a/chrome/browser/profile_resetter/brandcode_config_fetcher.h b/chrome/browser/profile_resetter/brandcode_config_fetcher.h
index cacee4d..bbb5631 100644
--- a/chrome/browser/profile_resetter/brandcode_config_fetcher.h
+++ b/chrome/browser/profile_resetter/brandcode_config_fetcher.h
@@ -20,7 +20,8 @@
   typedef base::Callback<void ()> FetchCallback;
 
   BrandcodeConfigFetcher(const FetchCallback& callback,
-                         const GURL& url);
+                         const GURL& url,
+                         const std::string& brandcode);
   virtual ~BrandcodeConfigFetcher();
 
   bool IsActive() const { return config_fetcher_; }
diff --git a/chrome/browser/profile_resetter/profile_resetter_unittest.cc b/chrome/browser/profile_resetter/profile_resetter_unittest.cc
index f1caa33..0c3b529 100644
--- a/chrome/browser/profile_resetter/profile_resetter_unittest.cc
+++ b/chrome/browser/profile_resetter/profile_resetter_unittest.cc
@@ -72,6 +72,9 @@
 using extensions::Extension;
 using extensions::Manifest;
 
+
+// ProfileResetterTest --------------------------------------------------------
+
 // ProfileResetterTest sets up the extension, WebData and TemplateURL services.
 class ProfileResetterTest : public ExtensionServiceTestBase,
                             public ProfileResetterTestBase {
@@ -101,6 +104,125 @@
   return new TemplateURLService(static_cast<Profile*>(context));
 }
 
+
+// PinnedTabsResetTest --------------------------------------------------------
+
+class PinnedTabsResetTest : public BrowserWithTestWindowTest,
+                            public ProfileResetterTestBase {
+ protected:
+  virtual void SetUp() OVERRIDE;
+
+  content::WebContents* CreateWebContents();
+};
+
+void PinnedTabsResetTest::SetUp() {
+  BrowserWithTestWindowTest::SetUp();
+  resetter_.reset(new ProfileResetter(profile()));
+}
+
+content::WebContents* PinnedTabsResetTest::CreateWebContents() {
+  return content::WebContents::Create(
+      content::WebContents::CreateParams(profile()));
+}
+
+
+// ConfigParserTest -----------------------------------------------------------
+
+// URLFetcher delegate that simply records the upload data.
+struct URLFetcherRequestListener : net::URLFetcherDelegate {
+  URLFetcherRequestListener();
+  virtual ~URLFetcherRequestListener();
+
+  virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
+
+  std::string upload_data;
+  net::URLFetcherDelegate* real_delegate;
+};
+
+URLFetcherRequestListener::URLFetcherRequestListener()
+    : real_delegate(NULL) {
+}
+
+URLFetcherRequestListener::~URLFetcherRequestListener() {
+}
+
+void URLFetcherRequestListener::OnURLFetchComplete(
+    const net::URLFetcher* source) {
+  const net::TestURLFetcher* test_fetcher =
+      static_cast<const net::TestURLFetcher*>(source);
+  upload_data = test_fetcher->upload_data();
+  DCHECK(real_delegate);
+  real_delegate->OnURLFetchComplete(source);
+}
+
+class ConfigParserTest : public testing::Test {
+ protected:
+  ConfigParserTest();
+  virtual ~ConfigParserTest();
+
+  scoped_ptr<BrandcodeConfigFetcher> WaitForRequest(const GURL& url);
+
+  net::FakeURLFetcherFactory& factory() { return factory_; }
+
+ private:
+  scoped_ptr<net::FakeURLFetcher> CreateFakeURLFetcher(
+      const GURL& url,
+      net::URLFetcherDelegate* fetcher_delegate,
+      const std::string& response_data,
+      bool success);
+
+  MOCK_METHOD0(Callback, void(void));
+
+  base::MessageLoop loop_;
+  content::TestBrowserThread ui_thread_;
+  content::TestBrowserThread io_thread_;
+  URLFetcherRequestListener request_listener_;
+  net::FakeURLFetcherFactory factory_;
+};
+
+ConfigParserTest::ConfigParserTest()
+    : loop_(base::MessageLoop::TYPE_IO),
+      ui_thread_(content::BrowserThread::UI, &loop_),
+      io_thread_(content::BrowserThread::IO, &loop_),
+      factory_(NULL, base::Bind(&ConfigParserTest::CreateFakeURLFetcher,
+                                base::Unretained(this))) {
+}
+
+ConfigParserTest::~ConfigParserTest() {}
+
+scoped_ptr<BrandcodeConfigFetcher> ConfigParserTest::WaitForRequest(
+    const GURL& url) {
+  EXPECT_CALL(*this, Callback());
+  scoped_ptr<BrandcodeConfigFetcher> fetcher(
+      new BrandcodeConfigFetcher(base::Bind(&ConfigParserTest::Callback,
+                                            base::Unretained(this)),
+                                 url,
+                                 "ABCD"));
+  base::MessageLoop::current()->RunUntilIdle();
+  EXPECT_FALSE(fetcher->IsActive());
+  // Look for the brand code in the request.
+  EXPECT_NE(std::string::npos, request_listener_.upload_data.find("ABCD"));
+  return fetcher.Pass();
+}
+
+scoped_ptr<net::FakeURLFetcher> ConfigParserTest::CreateFakeURLFetcher(
+    const GURL& url,
+    net::URLFetcherDelegate* fetcher_delegate,
+    const std::string& response_data,
+    bool success) {
+  request_listener_.real_delegate = fetcher_delegate;
+  scoped_ptr<net::FakeURLFetcher> fetcher(
+      new net::FakeURLFetcher(url, &request_listener_, response_data, success));
+  scoped_refptr<net::HttpResponseHeaders> download_headers =
+      new net::HttpResponseHeaders("");
+  download_headers->AddHeader("Content-Type: text/xml");
+  fetcher->set_response_headers(download_headers);
+  return fetcher.Pass();
+}
+
+
+// helper functions -----------------------------------------------------------
+
 scoped_refptr<Extension> CreateExtension(const std::string& name,
                                          const base::FilePath& path,
                                          Manifest::Location location,
@@ -123,78 +245,6 @@
   return extension;
 }
 
-class PinnedTabsResetTest : public BrowserWithTestWindowTest,
-                            public ProfileResetterTestBase {
- protected:
-  virtual void SetUp() OVERRIDE;
-
-  content::WebContents* CreateWebContents();
-};
-
-void PinnedTabsResetTest::SetUp() {
-  BrowserWithTestWindowTest::SetUp();
-  resetter_.reset(new ProfileResetter(profile()));
-}
-
-content::WebContents* PinnedTabsResetTest::CreateWebContents() {
-  return content::WebContents::Create(
-      content::WebContents::CreateParams(profile()));
-}
-
-class ConfigParserTest : public testing::Test {
- protected:
-  ConfigParserTest();
-  virtual ~ConfigParserTest();
-
-  MOCK_METHOD0(Callback, void(void));
-
-  scoped_ptr<BrandcodeConfigFetcher> WaitForRequest(const GURL& url);
-
-  static scoped_ptr<net::FakeURLFetcher> CreateFakeURLFetcher(
-      const GURL& url,
-      net::URLFetcherDelegate* d,
-      const std::string& response_data,
-      bool success);
-
-  base::MessageLoop loop_;
-  content::TestBrowserThread ui_thread_;
-  content::TestBrowserThread io_thread_;
-};
-
-ConfigParserTest::ConfigParserTest()
-    : loop_(base::MessageLoop::TYPE_IO),
-      ui_thread_(content::BrowserThread::UI, &loop_),
-      io_thread_(content::BrowserThread::IO, &loop_) {
-}
-
-ConfigParserTest::~ConfigParserTest() {}
-
-scoped_ptr<BrandcodeConfigFetcher> ConfigParserTest::WaitForRequest(
-    const GURL& url) {
-  EXPECT_CALL(*this, Callback());
-  scoped_ptr<BrandcodeConfigFetcher> fetcher(
-      new BrandcodeConfigFetcher(base::Bind(&ConfigParserTest::Callback,
-                                            base::Unretained(this)),
-                                 url));
-  base::MessageLoop::current()->RunUntilIdle();
-  EXPECT_FALSE(fetcher->IsActive());
-  return fetcher.Pass();
-}
-
-scoped_ptr<net::FakeURLFetcher> ConfigParserTest::CreateFakeURLFetcher(
-    const GURL& url,
-    net::URLFetcherDelegate* d,
-    const std::string& response_data,
-    bool success) {
-  scoped_ptr<net::FakeURLFetcher> fetcher(
-      new net::FakeURLFetcher(url, d, response_data, success));
-  scoped_refptr<net::HttpResponseHeaders> download_headers =
-      new net::HttpResponseHeaders("");
-  download_headers->AddHeader("Content-Type: text/xml");
-  fetcher->set_response_headers(download_headers);
-  return fetcher.Pass();
-}
-
 void ReplaceString(std::string* str,
                    const std::string& placeholder,
                    const std::string& substitution) {
@@ -523,9 +573,8 @@
 
 // Tries to load unavailable config file.
 TEST_F(ConfigParserTest, NoConnectivity) {
-  net::FakeURLFetcherFactory factory(NULL);
   const std::string url("http://test");
-  factory.SetFakeResponse(url, "", false);
+  factory().SetFakeResponse(url, "", false);
 
   scoped_ptr<BrandcodeConfigFetcher> fetcher = WaitForRequest(GURL(url));
   EXPECT_FALSE(fetcher->GetSettings());
@@ -533,16 +582,13 @@
 
 // Tries to load available config file.
 TEST_F(ConfigParserTest, ParseConfig) {
-  net::FakeURLFetcherFactory factory(
-      NULL,
-      base::Bind(&ConfigParserTest::CreateFakeURLFetcher));
   const std::string url("http://test");
   std::string xml_config(kXmlConfig);
   ReplaceString(&xml_config, "placeholder_for_data", kDistributionConfig);
   ReplaceString(&xml_config,
                 "placeholder_for_id",
                 "abbaabbaabbaabbaabbaabbaabbaabba");
-  factory.SetFakeResponse(url, xml_config, true);
+  factory().SetFakeResponse(url, xml_config, true);
 
   scoped_ptr<BrandcodeConfigFetcher> fetcher = WaitForRequest(GURL(url));
   scoped_ptr<BrandcodedDefaultSettings> settings = fetcher->GetSettings();
diff --git a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
index 38b80e9..35cae78 100644
--- a/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
+++ b/chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.cc
@@ -118,8 +118,8 @@
 #if defined(OS_CHROMEOS)
 #include "chrome/browser/chromeos/extensions/input_method_api.h"
 #include "chrome/browser/chromeos/extensions/media_player_api.h"
-#include "chrome/browser/chromeos/extensions/networking_private_event_router_factory.h"
 #include "chrome/browser/extensions/api/input_ime/input_ime_api.h"
+#include "chrome/browser/extensions/api/networking_private/networking_private_event_router_factory.h"
 #if defined(FILE_MANAGER_EXTENSION)
 #include "chrome/browser/chromeos/extensions/file_manager/file_browser_private_api_factory.h"
 #endif
diff --git a/chrome/browser/resources/chromeos/login/screen_error_message.html b/chrome/browser/resources/chromeos/login/screen_error_message.html
index 0365067..82db057 100644
--- a/chrome/browser/resources/chromeos/login/screen_error_message.html
+++ b/chrome/browser/resources/chromeos/login/screen_error_message.html
@@ -1,7 +1,7 @@
 <div id="error-message" class="step hidden show-offline-error">
   <div class="step-contents">
     <div class="error-header">
-      <img alt class="error-icon" src="chrome://theme/IDR_NETWORK_ERROR">
+      <img alt class="error-icon" src="chrome://theme/IDR_ERROR_NETWORK_OFFLINE">
       <div id="captive-portal-title" i18n-content="captivePortalTitle"
           class="error-title
                  show-with-error-state-portal
diff --git a/chrome/browser/resources/file_manager/js/file_copy_manager.js b/chrome/browser/resources/file_manager/js/file_copy_manager.js
index 9fe76ce..766c251 100644
--- a/chrome/browser/resources/file_manager/js/file_copy_manager.js
+++ b/chrome/browser/resources/file_manager/js/file_copy_manager.js
@@ -693,6 +693,8 @@
     task, successCallback, errorCallback) {
   if (task.zip)
     this.serviceZipTask_(task, successCallback, errorCallback);
+  else if (task.move)
+    this.serviceMoveTask_(task, successCallback, errorCallback);
   else
     this.serviceCopyTask_(task, successCallback, errorCallback);
 };
@@ -701,7 +703,6 @@
  * Service all entries in the copy (and move) task.
  * Note: this method contains also the operation of "Move" due to historical
  * reason.
- * TODO(hidehiko): extract "move" related code into another method.
  *
  * @param {FileCopyManager.Task} task A copy task to be run.
  * @param {function()} successCallback On success.
@@ -753,7 +754,7 @@
 };
 
 /**
- * Service the next entry in a given task.
+ * Copies the next entry in a given task.
  * TODO(olege): Refactor this method into a separate class.
  *
  * @param {FileManager.Task} task A task.
@@ -817,28 +818,11 @@
     onCopyCompleteBase(targetEntry, 0);
   };
 
-  var onFilesystemMoveComplete = function(sourceEntry, targetEntry) {
-    self.sendOperationEvent_('moved', [sourceEntry, targetEntry]);
-    onCopyCompleteBase(targetEntry, 0);
-  };
-
   var onFilesystemError = function(err) {
     onError('FILESYSTEM_ERROR', err);
   };
 
   var onDeduplicated = function(targetRelativePath) {
-    if (task.move) {
-      targetDirEntry.getDirectory(
-          PathUtil.dirname(targetRelativePath), {create: false},
-          function(dirEntry) {
-            sourceEntry.moveTo(dirEntry, PathUtil.basename(targetRelativePath),
-                               onFilesystemMoveComplete.bind(self, sourceEntry),
-                               onFilesystemError);
-          },
-          onFilesystemError);
-      return;
-    }
-
     // TODO(benchan): drive::FileSystem has not implemented directory copy,
     // and thus we only call FileEntry.copyTo() for files. Revisit this
     // code when drive::FileSystem supports directory copy.
@@ -986,6 +970,106 @@
 };
 
 /**
+ * Moves all entries in the task.
+ *
+ * @param {FileCopyManager.Task} task A move task to be run.
+ * @param {function()} successCallback On success.
+ * @param {function(FileCopyManager.Error)} errorCallback On error.
+ * @private
+ */
+FileCopyManager.prototype.serviceMoveTask_ = function(
+    task, successCallback, errorCallback) {
+  this.serviceNextMoveTaskEntry_(
+      task,
+      (function onCompleted() {
+        // We should not dispatch a PROGRESS event when there is no pending
+        // items in the task.
+        if (task.pendingDirectories.length + task.pendingFiles.length == 0) {
+          successCallback();
+          return;
+        }
+
+        // Move the next entry.
+        this.sendProgressEvent_('PROGRESS');
+        this.serviceNextMoveTaskEntry_(
+            task, onCompleted.bind(this), errorCallback);
+      }).bind(this),
+      errorCallback);
+};
+
+/**
+ * Moves the next entry in a given task.
+ *
+ * Implementation note: This method can be simplified more. For example, in
+ * Task.setEntries(), the flag to recurse is set to false for move task,
+ * so that all the entries' originalSourcePath should be
+ * dirname(sourceEntry.fullPath).
+ * Thus, targetRelativePath should contain exact one component. Also we can
+ * skip applyRenames, because the destination directory always should be
+ * task.targetDirEntry.
+ * The unnecessary complexity is due to historical reason.
+ * TODO(hidehiko): Refactor this method.
+ *
+ * @param {FileManager.Task} task A move task.
+ * @param {function()} successCallback On success.
+ * @param {function(FileCopyManager.Error)} errorCallback On error.
+ * @private
+ */
+FileCopyManager.prototype.serviceNextMoveTaskEntry_ = function(
+    task, successCallback, errorCallback) {
+  if (this.maybeCancel_())
+    return;
+
+  var self = this;
+  var sourceEntry = task.getNextEntry();
+
+  if (!sourceEntry) {
+    // All entries in this task have been copied.
+    successCallback();
+    return;
+  }
+
+  var onError = function(reason, data) {
+    self.log_('serviceNextMoveTaskEntry error: ' + reason + ':', data);
+    errorCallback(new FileCopyManager.Error(reason, data));
+  };
+
+  // |sourceEntry.originalSourcePath| is set in util.recurseAndResolveEntries.
+  var sourcePath = sourceEntry.originalSourcePath;
+  if (sourceEntry.fullPath.substr(0, sourcePath.length) != sourcePath) {
+    // We found an entry in the list that is not relative to the base source
+    // path, something is wrong.
+    onError('UNEXPECTED_SOURCE_FILE', sourceEntry.fullPath);
+    return;
+  }
+
+  util.deduplicatePath(
+      task.targetDirEntry,
+      task.applyRenames(sourceEntry.fullPath.substr(sourcePath.length + 1)),
+      function(targetRelativePath) {
+        var onFilesystemError = function(err) {
+          onError('FILESYSTEM_ERROR', err);
+        };
+
+        task.targetDirEntry.getDirectory(
+            PathUtil.dirname(targetRelativePath), {create: false},
+            function(dirEntry) {
+              sourceEntry.moveTo(
+                  dirEntry, PathUtil.basename(targetRelativePath),
+                  function(targetEntry) {
+                    self.sendOperationEvent_(
+                        'moved', [sourceEntry, targetEntry]);
+                    task.markEntryComplete(targetEntry, 0);
+                    successCallback();
+                  },
+                  onFilesystemError);
+            },
+            onFilesystemError);
+      },
+      onError);
+};
+
+/**
  * Service a zip file creation task.
  *
  * @param {FileCopyManager.Task} task A zip task to be run.
@@ -1083,7 +1167,7 @@
         reportedProgress = progress.loaded;
       };
 
-      writer.onwriteend = function() {
+      writer.onwrite = function() {
         sourceEntry.getMetadata(function(metadata) {
           chrome.fileBrowserPrivate.setLastModified(targetEntry.toURL(),
               '' + Math.round(metadata.modificationTime.getTime() / 1000));
diff --git a/chrome/browser/resources/file_manager/js/file_manager.js b/chrome/browser/resources/file_manager/js/file_manager.js
index 66cb272..fc02338 100644
--- a/chrome/browser/resources/file_manager/js/file_manager.js
+++ b/chrome/browser/resources/file_manager/js/file_manager.js
@@ -637,13 +637,13 @@
 
     var doc = this.document_;
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'newfolder',
+    CommandUtil.registerCommand(doc, 'newfolder',
         Commands.newFolderCommand, this, this.directoryModel_);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'newwindow',
+    CommandUtil.registerCommand(doc, 'newwindow',
         Commands.newWindowCommand, this, this.directoryModel_);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'change-default-app',
+    CommandUtil.registerCommand(doc, 'change-default-app',
         Commands.changeDefaultAppCommand, this);
 
     CommandUtil.registerCommand(this.volumeList_, 'unmount',
@@ -652,58 +652,53 @@
     CommandUtil.registerCommand(this.volumeList_, 'import-photos',
         Commands.importCommand, this.volumeList_);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'format',
+    CommandUtil.registerCommand(doc, 'format',
         Commands.formatCommand, this.volumeList_, this,
         this.directoryModel_);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'delete',
+    CommandUtil.registerCommand(doc, 'delete',
         Commands.deleteFileCommand, this);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'rename',
+    CommandUtil.registerCommand(doc, 'rename',
         Commands.renameFileCommand, this);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'volume-help',
+    CommandUtil.registerCommand(doc, 'volume-help',
         Commands.volumeHelpCommand, this);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'drive-buy-more-space',
+    CommandUtil.registerCommand(doc, 'drive-buy-more-space',
         Commands.driveBuySpaceCommand, this);
 
-    CommandUtil.registerCommand(this.dialogContainer_,
-        'drive-clear-local-cache', Commands.driveClearCacheCommand, this);
+    CommandUtil.registerCommand(doc, 'drive-clear-local-cache',
+        Commands.driveClearCacheCommand, this);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'drive-go-to-drive',
+    CommandUtil.registerCommand(doc, 'drive-go-to-drive',
         Commands.driveGoToDriveCommand, this);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'paste',
+    CommandUtil.registerCommand(doc, 'paste',
         Commands.pasteFileCommand, doc, this.fileTransferController_);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'open-with',
+    CommandUtil.registerCommand(doc, 'open-with',
         Commands.openWithCommand, this);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'toggle-pinned',
+    CommandUtil.registerCommand(doc, 'toggle-pinned',
         Commands.togglePinnedCommand, this);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'zip-selection',
+    CommandUtil.registerCommand(doc, 'zip-selection',
         Commands.zipSelectionCommand, this, this.directoryModel_);
 
-    CommandUtil.registerCommand(this.dialogContainer_, 'share',
-        Commands.shareCommand, this);
+    CommandUtil.registerCommand(doc, 'share', Commands.shareCommand, this);
+    CommandUtil.registerCommand(doc, 'create-folder-shortcut',
+        Commands.createFolderShortcutCommand, this);
+    CommandUtil.registerCommand(doc, 'remove-folder-shortcut',
+        Commands.removeFolderShortcutCommand, this, this.volumeList_);
 
-    CommandUtil.registerCommand(this.dialogContainer_,
-        'create-folder-shortcut', Commands.createFolderShortcutCommand, this);
-
-    CommandUtil.registerCommand(this.dialogContainer_,
-        'remove-folder-shortcut', Commands.removeFolderShortcutCommand, this,
-        this.volumeList_);
-
-    CommandUtil.registerCommand(this.dialogContainer_, 'search',
-        Commands.searchCommand, this,
+    CommandUtil.registerCommand(doc, 'search', Commands.searchCommand, this,
         this.dialogDom_.querySelector('#search-box'));
 
     // Register commands with CTRL-1..9 shortcuts for switching between
     // volumes.
     for (var i = 1; i <= 9; i++) {
-      CommandUtil.registerCommand(this.dialogContainer_,
+      CommandUtil.registerCommand(doc,
                                   'volume-switch-' + i,
                                   Commands.volumeSwitchCommand,
                                   this.volumeList_,
diff --git a/chrome/browser/resources/gesture_config.js b/chrome/browser/resources/gesture_config.js
index e38baa9..1e201b2 100644
--- a/chrome/browser/resources/gesture_config.js
+++ b/chrome/browser/resources/gesture_config.js
@@ -331,7 +331,12 @@
     },
     {
       key: 'minimum_threshold_start',
-      label: 'Start overscroll gesture after scrolling',
+      label: 'Start overscroll gesture (horizontal)',
+      units: 'pixels'
+    },
+    {
+      key: 'vertical_threshold_start',
+      label: 'Start overscroll gesture (vertical)',
       units: 'pixels'
     },
     {
diff --git a/chrome/browser/resources/local_ntp/local_ntp.js b/chrome/browser/resources/local_ntp/local_ntp.js
index e63fbaa..23272e0 100644
--- a/chrome/browser/resources/local_ntp/local_ntp.js
+++ b/chrome/browser/resources/local_ntp/local_ntp.js
@@ -391,8 +391,7 @@
 
 
 /**
- * Renders the attribution if the image is present and loadable.  Otherwise
- * hides it.
+ * Renders the attribution if the URL is present, otherwise hides it.
  * @param {string} url The URL of the attribution image, if any.
  * @private
  */
@@ -401,18 +400,14 @@
     setAttributionVisibility_(false);
     return;
   }
-  var attributionImage = new Image();
-  attributionImage.onload = function() {
-    var oldAttributionImage = attribution.querySelector('img');
-    if (oldAttributionImage)
-      removeNode(oldAttributionImage);
+
+  var attributionImage = attribution.querySelector('img');
+  if (!attributionImage) {
+    attributionImage = new Image();
     attribution.appendChild(attributionImage);
-    setAttributionVisibility_(true);
-  };
-  attributionImage.onerror = function() {
-    setAttributionVisibility_(false);
-  };
-  attributionImage.src = url;
+  }
+  attributionImage.style.content = url;
+  setAttributionVisibility_(true);
 }
 
 
diff --git a/chrome/browser/resources/net_internals/waterfall_row.js b/chrome/browser/resources/net_internals/waterfall_row.js
index d24595a..d17ebc3 100644
--- a/chrome/browser/resources/net_internals/waterfall_row.js
+++ b/chrome/browser/resources/net_internals/waterfall_row.js
@@ -41,15 +41,23 @@
         addTextNode(this.urlCell_, this.description_);
       }
 
-      this.barCell_.innerHTML = '';
+      this.rowCell_.innerHTML = '';
+
       var matchingEventPairs = this.findLogEntryPairs_(this.eventTypes_);
 
       // Creates the spacing in the beginning to show start time.
       var startTime = this.parentView_.getStartTime();
       var sourceEntryStartTime = this.sourceEntry_.getStartTime();
       var delay = sourceEntryStartTime - startTime;
-      var scaledMinTime = delay * scale;
-      this.createNode_(this.barCell_, scaledMinTime, 'padding');
+      var frontNode = addNode(this.rowCell_, 'div');
+      setNodeWidth(frontNode, delay * scale);
+
+      var barCell = addNode(this.rowCell_, 'div');
+      barCell.classList.add('waterfall-view-bar');
+
+      if (this.sourceEntry_.isError()) {
+        barCell.classList.add('error');
+      }
 
       var currentEnd = sourceEntryStartTime;
       for (var i = 0; i < matchingEventPairs.length; ++i) {
@@ -64,20 +72,22 @@
         // Handles the spaces between events.
         if (currentEnd < event.startTime) {
           var eventDuration = event.startTime - currentEnd;
-          var eventWidth = eventDuration * scale;
-          this.createNode_(this.barCell_, eventWidth, this.type_);
+          var padNode = this.createNode_(
+              barCell, eventDuration, this.type_, 'source');
         }
 
         // Creates event bars.
         var eventType = eventTypeToCssClass_(EventTypeNames[event.eventType]);
-        var eventWidth = event.eventDuration * scale;
-        this.createNode_(this.barCell_, eventWidth, eventType);
+        var eventNode = this.createNode_(
+            barCell, event.eventDuration, eventType, event);
         currentEnd = event.startTime + event.eventDuration;
       }
+
       // Creates a bar for the part after the last event.
       if (this.getEndTime() > currentEnd) {
-        var endWidth = (this.getEndTime() - currentEnd) * scale;
-        this.createNode_(this.barCell_, endWidth, this.type_);
+        var endDuration = (this.getEndTime() - currentEnd);
+        var endNode = this.createNode_(
+            barCell, endDuration, this.type_, 'source');
       }
     },
 
@@ -89,11 +99,84 @@
       return this.sourceEntry_.getEndTime();
     },
 
+    clearPopup_: function(parentNode) {
+      parentNode.innerHTML = '';
+    },
+
+    // TODO(viona): Create popup at mouse location.
+    createPopup_: function(parentNode, event, eventType, duration, mouse) {
+      var tableStart = this.parentView_.getStartTime();
+
+      var newPopup = addNode(parentNode, 'div');
+      newPopup.classList.add('waterfall-view-popup');
+
+      var popupList = addNode(newPopup, 'ul');
+      popupList.classList.add('waterfall-view-popup-list');
+
+      this.createPopupItem_(
+          popupList, 'Event Type', eventType);
+      this.createPopupItem_(
+          popupList, 'Event Duration', duration.toFixed(0) + 'ms');
+
+      if (event != 'source') {
+        this.createPopupItem_(
+            popupList, 'Event Start Time', event.startTime - tableStart + 'ms');
+        this.createPopupItem_(
+            popupList, 'Event End Time', event.endTime - tableStart + 'ms');
+      }
+
+      this.createPopupItem_(
+          popupList, 'Source Start Time',
+          this.getStartTime() - tableStart + 'ms');
+      this.createPopupItem_(
+          popupList, 'Source End Time', this.getEndTime() - tableStart + 'ms');
+      this.createPopupItem_(
+          popupList, 'Source ID', this.sourceEntry_.getSourceId());
+      var urlListItem = this.createPopupItem_(
+          popupList, 'Source Description: ', this.description_);
+
+      var viewWidth = $(WaterfallView.MAIN_BOX_ID).offsetWidth;
+      // Controls the overflow of extremely long URLs by cropping to window.
+      if (urlListItem.offsetWidth > viewWidth) {
+        urlListItem.style.width = viewWidth + 'px';
+      }
+      urlListItem.classList.add('waterfall-view-popup-list-url-item');
+
+      this.createPopupItem_(
+          popupList, 'Has Error', this.sourceEntry_.isError());
+
+      // Fixes cases where the popup appears 'off-screen'.
+      var popupLeft = mouse.pageX + $(WaterfallView.MAIN_BOX_ID).scrollLeft;
+      var popupRight = popupLeft + newPopup.offsetWidth;
+      var viewRight = viewWidth + $(WaterfallView.MAIN_BOX_ID).scrollLeft;
+
+      if (viewRight - popupRight < 0) {
+        popupLeft = viewRight - newPopup.offsetWidth;
+      }
+      newPopup.style.left = popupLeft + 'px';
+
+      var popupTop = mouse.pageY + $(WaterfallView.MAIN_BOX_ID).scrollTop;
+      var popupBottom = popupTop + newPopup.offsetHeight;
+      var viewBottom = $(WaterfallView.MAIN_BOX_ID).offsetHeight +
+          $(WaterfallView.MAIN_BOX_ID).scrollTop;
+
+      if (viewBottom - popupBottom < 0) {
+        popupTop = viewBottom - newPopup.offsetHeight;
+      }
+      newPopup.style.top = popupTop + 'px';
+    },
+
+    createPopupItem_: function(parentPopup, key, popupInformation) {
+      var popupItem = addNode(parentPopup, 'li');
+      addTextNode(popupItem, key + ': ' + popupInformation);
+      return popupItem;
+    },
+
     createRow_: function() {
       // Create a row.
       var tr = addNode($(WaterfallView.TBODY_ID), 'tr');
       tr._id = this.sourceEntry_.getSourceId();
-      this.row_ = tr;
+      this.tableRow = tr;
 
       var idCell = addNode(tr, 'td');
       addTextNode(idCell, this.sourceEntry_.getSourceId());
@@ -103,22 +186,30 @@
       addTextNode(urlCell, this.description_);
       this.urlCell_ = urlCell;
 
-      // Creates the offset for where the color bar appears.
-      var barCell = addNode(tr, 'td');
-      barCell.classList.add('waterfall-view-row');
-      this.barCell_ = barCell;
+      // Creates the color bar.
 
-      this.updateRow();
+      var rowCell = addNode(tr, 'td');
+      rowCell.classList.add('waterfall-view-row');
+      this.rowCell_ = rowCell;
 
       var sourceTypeString = this.sourceEntry_.getSourceTypeString();
       this.type_ = eventTypeToCssClass_(sourceTypeString);
+
+      this.updateRow();
     },
 
     // Generates nodes.
-    createNode_: function(parentNode, durationScaled, eventType) {
+    createNode_: function(parentNode, duration, eventType, event) {
+      var scale = this.parentView_.getScaleFactor();
       var newNode = addNode(parentNode, 'div');
-      setNodeWidth(newNode, durationScaled);
-      newNode.classList.add('waterfall-view-row-' + eventType);
+      setNodeWidth(newNode, duration * scale);
+      newNode.classList.add(eventType);
+      newNode.addEventListener(
+          'mouseover',
+          this.createPopup_.bind(this, newNode, event, eventType, duration),
+          true);
+      newNode.addEventListener(
+          'mouseout', this.clearPopup_.bind(this, newNode), true);
       return newNode;
     },
 
@@ -135,24 +226,24 @@
       var startEntries = {};
       var entries = this.sourceEntry_.getLogEntries();
       for (var i = 0; i < entries.length; ++i) {
-        var type = entries[i].type;
+        var currentEntry = entries[i];
+        var type = currentEntry.type;
         if (typeList.indexOf(type) < 0) {
           continue;
         }
-        if (entries[i].phase == EventPhase.PHASE_BEGIN) {
-          startEntries[type] = entries[i];
+        if (currentEntry.phase == EventPhase.PHASE_BEGIN) {
+          startEntries[type] = currentEntry;
         }
-        if (startEntries[type] && entries[i].phase == EventPhase.PHASE_END) {
+        if (startEntries[type] && currentEntry.phase == EventPhase.PHASE_END) {
           var event = {
             startEntry: startEntries[type],
-            endEntry: entries[i],
+            endEntry: currentEntry,
           };
           matchingEventPairs.push(event);
         }
       }
       return matchingEventPairs;
     },
-
   };
 
   function eventTypeToCssClass_(rawEventType) {
diff --git a/chrome/browser/resources/net_internals/waterfall_view.css b/chrome/browser/resources/net_internals/waterfall_view.css
index 2d1b636..14a0f60c 100644
--- a/chrome/browser/resources/net_internals/waterfall_view.css
+++ b/chrome/browser/resources/net_internals/waterfall_view.css
@@ -3,6 +3,16 @@
  * found in the LICENSE file.
  */
 
+#waterfall-view-controls {
+  background-color: #FFF;
+  border-color: #000;
+  border-style: solid;
+  border-width: 1px;
+  padding-left: 5px;
+  position: fixed;
+  top: 40px;
+}
+
 .waterfall-view-url-cell {
   display: inline-block;
   overflow: hidden;
@@ -17,44 +27,101 @@
 
 .waterfall-view-row * {
   display: inline-block;
-  height: 15px;
-  opacity: 0.5;
   padding-top: 0;
 }
 
-.waterfall-view-row [class*='http-stream-request'] {
-  background-color: #000;
+.waterfall-view-bar > * {
+  height: 15px;
 }
 
-.waterfall-view-row [class*='http-transaction-read-headers'] {
-  background-color: rgb(255, 0, 0);
+.waterfall-view-popup-list {
+  background-color: rgba(255, 255, 255, 0.8);
+  border-color: #000;
+  border-style: solid;
+  border-width: 2px;
+  color: #000;
+  padding-right: 1em;
+  z-index: -1;
 }
 
-.waterfall-view-row [class*='url-request'] {
-  background-color: rgb(0, 0, 255);
+.waterfall-view-popup-list > li {
+  display: list-item;
+}
+.waterfall-view-popup-list-url-item {
+  text-overflow: ellipsis;
+  white-space: nowrap;
 }
 
-.waterfall-view-row [class*='http-stream-job'] {
-  background-color: rgb(0, 255, 0);
+.waterfall-view-bar.error {
+  border-color: rgba(255, 0, 0, 0.8);
+  border-style: solid;
+  border-width: 1px;
+  height: 18px;
 }
 
-.waterfall-view-row [class*='proxy-service'] {
-  background-color: rgb(122, 122, 0);
+.waterfall-view-row .http-stream-request {
+  background: -webkit-linear-gradient(top, #EEE, rgba(0, 0, 0, 0.5));
 }
 
-.waterfall-view-row [class*='socket-pool-connect-job'] {
-  background-color: rgb(0, 122, 122);
+.waterfall-view-row .http-stream-request-bound-to-job {
+  background: -webkit-linear-gradient(top, #EEE, rgba(200, 200, 200, 0.5));
 }
 
-.waterfall-view-row [class*='host-resolver-impl'] {
-  background-color: rgb(122, 0, 122);
+.waterfall-view-row .http-transaction-read-headers {
+  background: -webkit-linear-gradient(top, #EEE, rgba(255, 0, 0, 0.5));
 }
 
-.waterfall-view-row [class*='socket'] {
-  background-color: rgb(122, 178, 0);
+.waterfall-view-row .url-request {
+  background: -webkit-linear-gradient(top, #EEE, rgba(0, 0, 255, 0.5));
 }
 
-.waterfall-popup {
-  display: block;
-  font-size: 15px;
+.waterfall-view-row .http-stream-job {
+  background: -webkit-linear-gradient(top, #EEE, rgba(0, 255, 0, 0.5));
+}
+
+.waterfall-view-row .proxy-service {
+  background: -webkit-linear-gradient(top, #EEE, rgba(122, 122, 0, 0.5));
+}
+
+.waterfall-view-row .socket-pool-connect-job {
+  background: -webkit-linear-gradient(top, #EEE, rgba(0, 122, 122, 0.5));
+}
+
+.waterfall-view-row .host-resolver-impl {
+  background: -webkit-linear-gradient(top, #EEE, rgba(122, 0, 122, 0.5));
+}
+
+.waterfall-view-row .socket {
+  background: -webkit-linear-gradient(top, #EEE, rgba(122, 178, 0, 0.5));
+}
+
+.waterfall-view-row .tcp-connect {
+  background: -webkit-linear-gradient(top, #EEE, rgba(0, 178, 122, 0.5));
+}
+
+.waterfall-view-row .ssl-connect {
+  background: -webkit-linear-gradient(top, #EEE, rgba(55, 122, 178, 0.5));
+}
+
+.waterfall-view-popup {
+  display: inline-block;
+  position: absolute;
+}
+
+.waterfall-view-time-scale-row {
+  white-space: nowrap;
+}
+
+.waterfall-view-time-scale {
+  border-color: #000;
+  border-left-style: solid;
+  border-width: 1px;
+  box-sizing: border-box;
+  display: inline-block;
+  height: 15px;
+}
+
+/* Colors every fifth bar red. */
+.waterfall-view-time-scale-special {
+  border-color: rgb(255, 0, 0);
 }
diff --git a/chrome/browser/resources/net_internals/waterfall_view.html b/chrome/browser/resources/net_internals/waterfall_view.html
index d605122..ac88a7a 100644
--- a/chrome/browser/resources/net_internals/waterfall_view.html
+++ b/chrome/browser/resources/net_internals/waterfall_view.html
@@ -1,16 +1,18 @@
 <!-- =============== Events Waterfall View ================= -->
 <div id=waterfall-view-tab-content class=content-box>
   <div>
-    Information:
-    <p>Currently only captures URL Request events. Blue represents URL
-    Requests. Red represents Header Reads. Grey represents Stream Requests.
-    <input id=waterfall-view-time-scale type="button"
-        value="Scale To Fit Window">
+    <div id=waterfall-view-controls>
+      Start Time: <input id=waterfall-view-start-input type=number min=0 value=0>
+      End Time: <input id=waterfall-view-end-input type=number min=0>
+      <input id=waterfall-view-adjust-to-window type=button value="Fit Range in Window">
+    </div>
+    <p>
     <table id=waterfall-view-source-list-table>
       <thead>
       <tr>
         <td id=waterfall-view-source-id>ID</td>
         <td id=waterfall-view-source-header>Source</td>
+        <td id=waterfall-view-time-scale-labels></td>
       </tr>
       </thead>
       <!-- Events Waterfall table body: This is where request rows go into -->
diff --git a/chrome/browser/resources/net_internals/waterfall_view.js b/chrome/browser/resources/net_internals/waterfall_view.js
index 2f1b0ed..aac15b6 100644
--- a/chrome/browser/resources/net_internals/waterfall_view.js
+++ b/chrome/browser/resources/net_internals/waterfall_view.js
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+// TODO(viona): Write a README document/instructions.
+
 /** This view displays the event waterfall. */
 var WaterfallView = (function() {
   'use strict';
@@ -22,7 +24,10 @@
 
     // For adjusting the range of view.
     $(WaterfallView.SCALE_ID).addEventListener(
-        'click', this.adjustToWindow_.bind(this), true);
+        'click', this.setStartEndTimes_.bind(this), true);
+
+    $(WaterfallView.MAIN_BOX_ID).addEventListener(
+        'mousewheel', this.scrollToZoom_.bind(this), true);
 
     this.initializeSourceList_();
   }
@@ -34,9 +39,22 @@
   // IDs for special HTML elements in events_waterfall_view.html.
   WaterfallView.MAIN_BOX_ID = 'waterfall-view-tab-content';
   WaterfallView.TBODY_ID = 'waterfall-view-source-list-tbody';
-  WaterfallView.SCALE_ID = 'waterfall-view-time-scale';
+  WaterfallView.SCALE_ID = 'waterfall-view-adjust-to-window';
   WaterfallView.ID_HEADER_ID = 'waterfall-view-source-id';
   WaterfallView.SOURCE_HEADER_ID = 'waterfall-view-source-header';
+  WaterfallView.TIME_SCALE_HEADER_ID = 'waterfall-view-time-scale-labels';
+  WaterfallView.TIME_RANGE_ID = 'waterfall-view-time-range-submit';
+  WaterfallView.START_TIME_ID = 'waterfall-view-start-input';
+  WaterfallView.END_TIME_ID = 'waterfall-view-end-input';
+
+  // The number of units mouse wheel deltas increase for each tick of the
+  // wheel.
+  var MOUSE_WHEEL_UNITS_PER_CLICK = 120;
+
+  // Amount we zoom for one vertical tick of the mouse wheel, as a ratio.
+  var MOUSE_WHEEL_ZOOM_RATE = 1.25;
+  // Amount we scroll for one horizontal tick of the mouse wheel, in pixels.
+  var MOUSE_WHEEL_SCROLL_RATE = MOUSE_WHEEL_UNITS_PER_CLICK;
 
   cr.addSingletonGetter(WaterfallView);
 
@@ -55,24 +73,29 @@
         this.startTime_ = timeutil.convertTimeTicksToTime(logEntries[0].time);
         // Initial scale factor.
         this.scaleFactor_ = 0.1;
+        this.eventsList_ = this.createEventsList_();
       }
       for (var i = 0; i < sourceEntries.length; ++i) {
         var sourceEntry = sourceEntries[i];
         var id = sourceEntry.getSourceId();
-        if (sourceEntry.getSourceType() == EventSourceType.URL_REQUEST) {
-          var row = this.sourceIdToRowMap_[id];
-          if (!row) {
-            var importantEventTypes = [
-                EventType.HTTP_STREAM_REQUEST,
-                EventType.HTTP_TRANSACTION_READ_HEADERS
-            ];
-            this.sourceIdToRowMap_[id] =
-                new WaterfallRow(this, sourceEntry, importantEventTypes);
-          } else {
-            row.onSourceUpdated();
+        for (var j = 0; j < this.eventsList_.length; ++j) {
+          var eventObject = this.eventsList_[j];
+          if (sourceEntry.getSourceType() == eventObject.mainEvent) {
+            var row = this.sourceIdToRowMap_[id];
+            if (!row) {
+              var newRow = new WaterfallRow(
+                  this, sourceEntry, eventObject.importantEventTypes);
+              if (newRow == undefined) {
+                console.log(sourceEntry);
+              }
+              this.sourceIdToRowMap_[id] = newRow;
+            } else {
+              row.onSourceUpdated();
+            }
           }
         }
       }
+      this.updateTimeScale_(this.scaleFactor_);
     },
 
     onAllSourceEntriesDeleted: function() {
@@ -103,28 +126,65 @@
     },
 
     /**
-     * Changes width of the bars such that horizontally, everything fits into
-     * the user's current window size.
-     * TODO(viona): Deal with the magic number.
+     * Changes scroll position of the window such that horizontally, everything
+     * within the specified range fits into the user's viewport.
+     * TODO(viona): Find a way to get rid of the magic number.
      */
-    adjustToWindow_: function() {
-      var usedWidth = $(WaterfallView.SOURCE_HEADER_ID).offsetWidth +
-          $(WaterfallView.ID_HEADER_ID).offsetWidth;
-      var availableWidth = ($(WaterfallView.MAIN_BOX_ID).offsetWidth -
-          usedWidth - 50);
-      if (availableWidth <= 0) {
-        availableWidth = 1;
-      }
+    adjustToWindow_: function(windowStart, windowEnd) {
+      var maxWidth = $(WaterfallView.MAIN_BOX_ID).offsetWidth - 50;
+      $(WaterfallView.TBODY_ID).width = maxWidth + 'px';
       var totalDuration = 0;
-      for (var id in this.sourceIdToRowMap_) {
-        var row = this.sourceIdToRowMap_[id];
-        var rowDuration = row.getEndTime() - this.startTime_;
-        if (totalDuration < rowDuration) {
-          totalDuration = rowDuration;
+      if (windowEnd != -1) {
+        totalDuration = windowEnd - windowStart;
+      } else {
+        for (var id in this.sourceIdToRowMap_) {
+          var row = this.sourceIdToRowMap_[id];
+          var rowDuration = row.getEndTime() - this.startTime_;
+          if (totalDuration < rowDuration && !row.hide) {
+            totalDuration = rowDuration;
+          }
         }
       }
-      var scaleFactor = availableWidth / totalDuration;
-      this.scaleAll_(scaleFactor);
+      if (totalDuration <= 0) {
+        return;
+      }
+      this.scaleAll_(maxWidth / totalDuration);
+      var waterfallLeft = $(WaterfallView.TIME_SCALE_HEADER_ID).offsetLeft;
+      $(WaterfallView.MAIN_BOX_ID).scrollLeft =
+          windowStart * this.scaleFactor_ + waterfallLeft;
+    },
+
+    // Updates the time tick indicators.
+    updateTimeScale_: function(scaleFactor) {
+      var timePerTick = 1;
+      var minTickDistance = 20;
+
+      $(WaterfallView.TIME_SCALE_HEADER_ID).innerHTML = '';
+
+      // Holder provides environment to prevent wrapping.
+      var timeTickRow = addNode($(WaterfallView.TIME_SCALE_HEADER_ID), 'div');
+      timeTickRow.classList.add('waterfall-view-time-scale-row');
+
+      var availableWidth = $(WaterfallView.TBODY_ID).clientWidth;
+      var tickDistance = scaleFactor * timePerTick;
+
+      while (tickDistance < minTickDistance) {
+        timePerTick = timePerTick * 10;
+        tickDistance = scaleFactor * timePerTick;
+      }
+
+      var tickCount = availableWidth / tickDistance;
+      for (var i = 0; i < tickCount; ++i) {
+        var timeCell = addNode(timeTickRow, 'div');
+        setNodeWidth(timeCell, tickDistance);
+        timeCell.classList.add('waterfall-view-time-scale');
+        timeCell.title = i * timePerTick + ' to ' +
+           (i + 1) * timePerTick + ' ms';
+        // Red marker for every 5th bar.
+        if (i % 5 == 0) {
+          timeCell.classList.add('waterfall-view-time-scale-special');
+        }
+      }
     },
 
     /**
@@ -136,6 +196,76 @@
         var row = this.sourceIdToRowMap_[id];
         row.updateRow();
       }
+      this.updateTimeScale_(scaleFactor);
+    },
+
+    scrollToZoom_: function(event) {
+      // To use scrolling to control zoom, hold down the alt key and scroll.
+      if ('wheelDelta' in event && event.altKey) {
+        var zoomFactor = Math.pow(MOUSE_WHEEL_ZOOM_RATE,
+             event.wheelDeltaY / MOUSE_WHEEL_UNITS_PER_CLICK);
+
+        var waterfallLeft = $(WaterfallView.TIME_SCALE_HEADER_ID).offsetLeft;
+        var oldCursorPosition = event.pageX +
+            $(WaterfallView.MAIN_BOX_ID).scrollLeft;
+        var oldCursorPositionInTable = oldCursorPosition - waterfallLeft;
+
+        this.scaleAll_(this.scaleFactor_ * zoomFactor);
+
+        // Shifts the view when scrolling. newScroll could be less than 0 or
+        // more than the maximum scroll position, but both cases are handled
+        // by the inbuilt scrollLeft implementation.
+        var newScroll =
+            oldCursorPositionInTable * zoomFactor - event.pageX + waterfallLeft;
+        $(WaterfallView.MAIN_BOX_ID).scrollLeft = newScroll;
+      }
+    },
+
+    // Parses user input, then calls adjustToWindow to shift that into view.
+    setStartEndTimes_: function() {
+      var windowStart = parseInt($(WaterfallView.START_TIME_ID).value);
+      var windowEnd = parseInt($(WaterfallView.END_TIME_ID).value);
+      if ($(WaterfallView.END_TIME_ID).value == '') {
+        windowEnd = -1;
+      }
+      if ($(WaterfallView.START_TIME_ID).value == '') {
+        windowStart = 0;
+      }
+      this.adjustToWindow_(windowStart, windowEnd);
+    },
+
+    // Provides a structure that can be used to define source entry types and
+    // the log entries that are of interest.
+    createEventsList_: function() {
+      var eventsList = [];
+      // Creating list of events.
+      // TODO(viona): This is hard-coded. Consider user-input.
+      //              Also, work on getting socket information inlined in the
+      //              relevant URL_REQUEST events.
+      var urlRequestEvents = [
+        EventType.HTTP_STREAM_REQUEST,
+        EventType.HTTP_STREAM_REQUEST_BOUND_TO_JOB,
+        EventType.HTTP_TRANSACTION_READ_HEADERS
+      ];
+
+      eventsList.push(this.createEventTypeObjects_(
+          EventSourceType.URL_REQUEST, urlRequestEvents));
+
+      var httpStreamJobEvents = [EventType.PROXY_SERVICE];
+      eventsList.push(this.createEventTypeObjects_(
+          EventSourceType.HTTP_STREAM_JOB, httpStreamJobEvents));
+
+      return eventsList;
+    },
+
+    // Creates objects that can be used to define source entry types and
+    // the log entries that are of interest.
+    createEventTypeObjects_: function(mainEventType, eventTypesList) {
+      var eventTypeObject = {
+        mainEvent: mainEventType,
+        importantEventTypes: eventTypesList
+      };
+      return eventTypeObject;
     },
   };
 
diff --git a/chrome/browser/resources/print_preview/print_preview.css b/chrome/browser/resources/print_preview/print_preview.css
index ed5424c..9369e1a 100644
--- a/chrome/browser/resources/print_preview/print_preview.css
+++ b/chrome/browser/resources/print_preview/print_preview.css
@@ -295,3 +295,9 @@
   height: 100%;
   position: relative;
 }
+
+html:not(.focus-outline-visible)
+:enabled:focus:-webkit-any(input[type='checkbox'],input[type='radio'],button) {
+  /* Cancel border-color for :focus specified in widgets.css. */
+  border-color: rgba(0,0,0,0.25);
+}
diff --git a/chrome/browser/resources/print_preview/print_preview.html b/chrome/browser/resources/print_preview/print_preview.html
index e246549..1133332 100644
--- a/chrome/browser/resources/print_preview/print_preview.html
+++ b/chrome/browser/resources/print_preview/print_preview.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<html i18n-values="dir:textdirection;" id="print-preview">
+<html i18n-values="dir:textdirection;" id="print-preview" class="focus-outline-visible">
 
 <head>
   <meta charset="utf-8">
@@ -29,6 +29,8 @@
   <script src="chrome://print/strings.js"></script>
   <script src="chrome://resources/js/cr.js"></script>
   <script src="chrome://resources/js/cr/event_target.js"></script>
+  <script src="chrome://resources/js/cr/ui.js"></script>
+  <script src="chrome://resources/js/cr/ui/focus_outline_manager.js"></script>
   <script src="chrome://resources/js/event_tracker.js"></script>
   <script src="chrome://resources/js/local_strings.js"></script>
   <script src="chrome://resources/js/util.js"></script>
diff --git a/chrome/browser/resources/print_preview/print_preview.js b/chrome/browser/resources/print_preview/print_preview.js
index 0fc07b7..4f906bd 100644
--- a/chrome/browser/resources/print_preview/print_preview.js
+++ b/chrome/browser/resources/print_preview/print_preview.js
@@ -227,6 +227,7 @@
       }
       this.nativeLayer_.startGetInitialSettings();
       this.destinationStore_.startLoadLocalDestinations();
+      cr.ui.FocusOutlineManager.forDocument(document);
     },
 
     /** @override */
diff --git a/chrome/browser/safe_browsing/client_side_detection_host.cc b/chrome/browser/safe_browsing/client_side_detection_host.cc
index 5c5a781..1f67d5c 100644
--- a/chrome/browser/safe_browsing/client_side_detection_host.cc
+++ b/chrome/browser/safe_browsing/client_side_detection_host.cc
@@ -177,18 +177,22 @@
       return;
     }
 
+    bool malware_killswitch_on = database_manager_->IsMalwareKillSwitchOn();
+
     BrowserThread::PostTask(
         BrowserThread::UI,
         FROM_HERE,
-        base::Bind(&ShouldClassifyUrlRequest::CheckCache, this));
+        base::Bind(&ShouldClassifyUrlRequest::CheckCache, this,
+                   malware_killswitch_on));
   }
 
-  void CheckCache() {
+  void CheckCache(bool malware_killswitch_on) {
     DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
     if (canceled_) {
       return;
     }
 
+    host_->SetMalwareKillSwitch(malware_killswitch_on);
     // If result is cached, we don't want to run classification again
     bool is_phishing;
     if (csd_service_->GetValidCachedResult(params_.url, &is_phishing)) {
@@ -251,6 +255,7 @@
       csd_service_(NULL),
       weak_factory_(this),
       unsafe_unique_page_id_(-1),
+      malware_killswitch_on_(false),
       malware_report_enabled_(false) {
   DCHECK(tab);
   // Note: csd_service_ and sb_service will be NULL here in testing.
@@ -386,15 +391,16 @@
       browse_info_.get() &&
       verdict->ParseFromString(verdict_str) &&
       verdict->IsInitialized()) {
-    if (malware_report_enabled_) {
+    // We do the malware IP matching and request sending if the feature
+    // is enabled.
+    if (malware_report_enabled_ && !MalwareKillSwitchIsOn()) {
       scoped_ptr<ClientMalwareRequest> malware_verdict(
           new ClientMalwareRequest);
       // Start browser-side malware feature extraction.  Once we're done it will
       // send the malware client verdict request.
       malware_verdict->set_url(verdict->url());
       feature_extractor_->ExtractMalwareFeatures(
-          browse_info_.get(),
-          malware_verdict.get());
+          browse_info_.get(), malware_verdict.get());
       MalwareFeatureExtractionDone(malware_verdict.Pass());
     }
 
@@ -512,7 +518,8 @@
   DCHECK_EQ(type, content::NOTIFICATION_RESOURCE_RESPONSE_STARTED);
   const ResourceRequestDetails* req = content::Details<ResourceRequestDetails>(
       details).ptr();
-  if (req && browse_info_.get()) {
+  if (req && browse_info_.get() && malware_report_enabled_ &&
+      !MalwareKillSwitchIsOn()) {
     UpdateIPHostMap(req->socket_address.host() /* ip */,
                     req->url.host()  /* url host */);
   }
@@ -545,4 +552,14 @@
   database_manager_ = database_manager;
 }
 
+bool ClientSideDetectionHost::MalwareKillSwitchIsOn() {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  return malware_killswitch_on_;
+}
+
+void ClientSideDetectionHost::SetMalwareKillSwitch(bool killswitch_on) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  malware_killswitch_on_ = killswitch_on;
+}
+
 }  // namespace safe_browsing
diff --git a/chrome/browser/safe_browsing/client_side_detection_host.h b/chrome/browser/safe_browsing/client_side_detection_host.h
index 7329f52..7f3e93e 100644
--- a/chrome/browser/safe_browsing/client_side_detection_host.h
+++ b/chrome/browser/safe_browsing/client_side_detection_host.h
@@ -102,6 +102,10 @@
       SafeBrowsingUIManager* ui_manager,
       SafeBrowsingDatabaseManager* database_manager);
 
+  // Get/Set malware_killswitch_on_ value. These methods called on UI thread.
+  bool MalwareKillSwitchIsOn();
+  void SetMalwareKillSwitch(bool killswitch_on);
+
   // This pointer may be NULL if client-side phishing detection is disabled.
   ClientSideDetectionService* csd_service_;
   // These pointers may be NULL if SafeBrowsing is disabled.
@@ -137,8 +141,14 @@
   int unsafe_unique_page_id_;
   scoped_ptr<SafeBrowsingUIManager::UnsafeResource> unsafe_resource_;
 
+  // Whether the malware IP matching feature killswitch is on.
+  // This should be accessed from UI thread.
+  bool malware_killswitch_on_;
+
   // Whether the malware bad ip matching and report feature is enabled.
+  // This should be accessed from UI thread.
   bool malware_report_enabled_;
+
   DISALLOW_COPY_AND_ASSIGN(ClientSideDetectionHost);
 };
 
diff --git a/chrome/browser/safe_browsing/database_manager.cc b/chrome/browser/safe_browsing/database_manager.cc
index 47b238d..db0963a 100644
--- a/chrome/browser/safe_browsing/database_manager.cc
+++ b/chrome/browser/safe_browsing/database_manager.cc
@@ -306,6 +306,14 @@
   return database_->ContainsDownloadWhitelistedString(str);
 }
 
+bool SafeBrowsingDatabaseManager::IsMalwareKillSwitchOn() {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+  if (!enabled_ || !MakeDatabaseAvailable()) {
+    return true;
+  }
+  return database_->IsMalwareIPMatchKillSwitchOn();
+}
+
 bool SafeBrowsingDatabaseManager::CheckBrowseUrl(const GURL& url,
                                                  Client* client) {
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
diff --git a/chrome/browser/safe_browsing/database_manager.h b/chrome/browser/safe_browsing/database_manager.h
index 09f64bd..acc38ef 100644
--- a/chrome/browser/safe_browsing/database_manager.h
+++ b/chrome/browser/safe_browsing/database_manager.h
@@ -172,6 +172,9 @@
   // This method is expected to be called on the IO thread.
   virtual bool MatchDownloadWhitelistString(const std::string& str);
 
+  // Check if the CSD malware IP matching kill switch is turned on.
+  virtual bool IsMalwareKillSwitchOn();
+
   // Called on the IO thread to cancel a pending check if the result is no
   // longer needed.
   void CancelCheck(Client* client);
diff --git a/chrome/browser/safe_browsing/download_protection_service.cc b/chrome/browser/safe_browsing/download_protection_service.cc
index 62c12fa..6756bbf 100644
--- a/chrome/browser/safe_browsing/download_protection_service.cc
+++ b/chrome/browser/safe_browsing/download_protection_service.cc
@@ -10,6 +10,7 @@
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
 #include "base/metrics/histogram.h"
+#include "base/metrics/sparse_histogram.h"
 #include "base/sequenced_task_runner_helpers.h"
 #include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
@@ -388,6 +389,14 @@
             << item_->GetUrlChain().back() << ": success="
             << source->GetStatus().is_success() << " response_code="
             << source->GetResponseCode();
+    if (source->GetStatus().is_success()) {
+      UMA_HISTOGRAM_SPARSE_SLOWLY(
+          "SBClientDownload.DownloadRequestResponseCode",
+          source->GetResponseCode());
+    }
+    UMA_HISTOGRAM_SPARSE_SLOWLY(
+        "SBClientDownload.DownloadRequestNetError",
+        -source->GetStatus().error());
     DownloadCheckResultReason reason = REASON_SERVER_PING_FAILED;
     DownloadCheckResult result = SAFE;
     if (source->GetStatus().is_success() &&
diff --git a/chrome/browser/safe_browsing/safe_browsing_database.cc b/chrome/browser/safe_browsing/safe_browsing_database.cc
index 9f43ecd..b193f50 100644
--- a/chrome/browser/safe_browsing/safe_browsing_database.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_database.cc
@@ -12,6 +12,7 @@
 #include "base/message_loop/message_loop.h"
 #include "base/metrics/histogram.h"
 #include "base/metrics/stats_counters.h"
+#include "base/process/process.h"
 #include "base/process/process_metrics.h"
 #include "base/time/time.h"
 #include "chrome/browser/safe_browsing/prefix_set.h"
@@ -70,6 +71,12 @@
 const char kWhitelistKillSwitchUrl[] =
     "sb-ssl.google.com/safebrowsing/csd/killswitch";  // Don't change this!
 
+// If the hash of this exact expression is on a whitelist then the
+// malware IP blacklisting feature will be disabled in csd.
+// Don't change this!
+const char kMalwareIPKillSwitchUrl[] =
+    "sb-ssl.google.com/safebrowsing/csd/killswitch_malware";
+
 // To save space, the incoming |chunk_id| and |list_id| are combined
 // into an |encoded_chunk_id| for storage by shifting the |list_id|
 // into the low-order bits.  These functions decode that information.
@@ -1605,3 +1612,12 @@
     whitelist->first.swap(new_whitelist);
   }
 }
+
+bool SafeBrowsingDatabaseNew::IsMalwareIPMatchKillSwitchOn() {
+  SBFullHash malware_kill_switch;
+  crypto::SHA256HashString(kMalwareIPKillSwitchUrl, &malware_kill_switch,
+                           sizeof(malware_kill_switch));
+  std::vector<SBFullHash> full_hashes;
+  full_hashes.push_back(malware_kill_switch);
+  return ContainsWhitelistedHashes(csd_whitelist_, full_hashes);
+}
diff --git a/chrome/browser/safe_browsing/safe_browsing_database.h b/chrome/browser/safe_browsing/safe_browsing_database.h
index 219f1ea..6446e35 100644
--- a/chrome/browser/safe_browsing/safe_browsing_database.h
+++ b/chrome/browser/safe_browsing/safe_browsing_database.h
@@ -171,6 +171,10 @@
       const std::vector<SBPrefix>& prefixes,
       const std::vector<SBFullHashResult>& full_hits) = 0;
 
+  // Returns true if the malware IP blacklisting killswitch URL is present
+  // in the csd whitelist.
+  virtual bool IsMalwareIPMatchKillSwitchOn() = 0;
+
   // The name of the bloom-filter file for the given database file.
   // NOTE(shess): OBSOLETE.  Present for deleting stale files.
   static base::FilePath BloomFilterForFilename(
@@ -297,6 +301,9 @@
       const std::vector<SBPrefix>& prefixes,
       const std::vector<SBFullHashResult>& full_hits) OVERRIDE;
 
+  // Returns the value of malware_kill_switch_;
+  virtual bool IsMalwareIPMatchKillSwitchOn() OVERRIDE;
+
  private:
   friend class SafeBrowsingDatabaseTest;
   FRIEND_TEST_ALL_PREFIXES(SafeBrowsingDatabaseTest, HashCaching);
@@ -368,8 +375,7 @@
 
   // Lock for protecting access to variables that may be used on the
   // IO thread.  This includes |prefix_set_|, |full_browse_hashes_|,
-  // |pending_browse_hashes_|, |prefix_miss_cache_|, |csd_whitelist_|,
-  // and |csd_whitelist_all_urls_|.
+  // |pending_browse_hashes_|, |prefix_miss_cache_|, |csd_whitelist_|.
   base::Lock lookup_lock_;
 
   // Underlying persistent store for chunk data.
diff --git a/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc b/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc
index ec50a66..7e934a9 100644
--- a/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_database_unittest.cc
@@ -1365,6 +1365,19 @@
   EXPECT_FALSE(database_->ContainsDownloadWhitelistedUrl(
       GURL(std::string("http://www.google.com/"))));
 
+  // Test only add the malware IP killswitch
+  csd_chunks.clear();
+  chunk.hosts.clear();
+  InsertAddChunkHostFullHashes(
+      &chunk, 15, "sb-ssl.google.com/",
+      "sb-ssl.google.com/safebrowsing/csd/killswitch_malware");
+  csd_chunks.push_back(chunk);
+  EXPECT_TRUE(database_->UpdateStarted(&lists));
+  database_->InsertChunks(safe_browsing_util::kCsdWhiteList, csd_chunks);
+  database_->UpdateFinished(true);
+
+  EXPECT_TRUE(database_->IsMalwareIPMatchKillSwitchOn());
+
   // Test that the kill-switch works as intended.
   csd_chunks.clear();
   download_chunks.clear();
@@ -1373,7 +1386,6 @@
   InsertAddChunkHostFullHashes(&chunk, 5, "sb-ssl.google.com/",
                                "sb-ssl.google.com/safebrowsing/csd/killswitch");
   csd_chunks.push_back(chunk);
-
   chunk.hosts.clear();
   InsertAddChunkHostFullHashes(&chunk, 5, "sb-ssl.google.com/",
                                "sb-ssl.google.com/safebrowsing/csd/killswitch");
@@ -1385,6 +1397,7 @@
                           download_chunks);
   database_->UpdateFinished(true);
 
+  EXPECT_TRUE(database_->IsMalwareIPMatchKillSwitchOn());
   EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl(
       GURL(std::string("https://") + kGood1Url2 + "/c.html")));
   EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl(
@@ -1413,6 +1426,12 @@
   csd_chunks.push_back(sub_chunk);
 
   sub_chunk.hosts.clear();
+  InsertSubChunkHostFullHash(
+      &sub_chunk, 10, 15, "sb-ssl.google.com/",
+      "sb-ssl.google.com/safebrowsing/csd/killswitch_malware");
+  csd_chunks.push_back(sub_chunk);
+
+  sub_chunk.hosts.clear();
   InsertSubChunkHostFullHash(&sub_chunk, 1, 5,
                              "sb-ssl.google.com/",
                              "sb-ssl.google.com/safebrowsing/csd/killswitch");
@@ -1424,6 +1443,7 @@
                           download_chunks);
   database_->UpdateFinished(true);
 
+  EXPECT_FALSE(database_->IsMalwareIPMatchKillSwitchOn());
   EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl(
       GURL(std::string("https://") + kGood1Url2 + "/c.html")));
   EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl(
diff --git a/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc b/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc
index 20543d5..c36e23f 100644
--- a/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_service_browsertest.cc
@@ -143,6 +143,9 @@
       const std::vector<SBFullHashResult>& full_hits) OVERRIDE {
     // Do nothing for the cache.
   }
+  virtual bool IsMalwareIPMatchKillSwitchOn() OVERRIDE {
+    return false;
+  }
 
   // Fill up the database with test URL.
   void AddUrl(const GURL& url,
diff --git a/chrome/browser/search/search.cc b/chrome/browser/search/search.cc
index 883c43e..291fb08 100644
--- a/chrome/browser/search/search.cc
+++ b/chrome/browser/search/search.cc
@@ -161,6 +161,13 @@
        google_util::StartsWithCommandLineGoogleBaseURL(url));
 }
 
+// Returns true if |url| matches --instant-new-tab-url.
+bool IsCommandLineInstantNTPURL(const GURL& url) {
+  const GURL ntp_url(CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
+      switches::kInstantNewTabURL));
+  return ntp_url.is_valid() && MatchesOriginAndPath(ntp_url, url);
+}
+
 // Returns true if |url| can be used as an Instant URL for |profile|.
 bool IsInstantURL(const GURL& url, Profile* profile) {
   if (!IsInstantExtendedAPIEnabled())
@@ -169,6 +176,9 @@
   if (!url.is_valid())
     return false;
 
+  if (IsCommandLineInstantNTPURL(url))
+    return true;
+
   TemplateURL* template_url = GetDefaultSearchProviderTemplateURL(profile);
   if (!template_url)
     return false;
@@ -316,11 +326,16 @@
     return false;
 
   Profile* profile = Profile::FromBrowserContext(contents->GetBrowserContext());
-  return IsInstantExtendedAPIEnabled() &&
-         IsRenderedInInstantProcess(contents, profile) &&
-         (IsInstantURL(entry->GetVirtualURL(), profile) ||
-          entry->GetVirtualURL() == GetLocalInstantURL(profile)) &&
-         GetSearchTermsImpl(contents, entry).empty();
+  if (!IsInstantExtendedAPIEnabled() ||
+      !IsRenderedInInstantProcess(contents, profile))
+    return false;
+
+  if (IsInstantURL(entry->GetVirtualURL(), profile) ||
+      entry->GetVirtualURL() == GetLocalInstantURL(profile))
+    return GetSearchTermsImpl(contents, entry).empty();
+
+  return entry->GetVirtualURL() == GURL(chrome::kChromeUINewTabURL) &&
+      IsCommandLineInstantNTPURL(entry->GetURL());
 }
 
 bool IsSuggestPrefEnabled(Profile* profile) {
@@ -380,6 +395,12 @@
 }
 
 bool ShouldShowInstantNTP() {
+  // If the instant-new-tab-url flag is set, we'll always just load the NTP
+  // directly instead of preloading contents using InstantNTP.
+  const CommandLine* command_line = CommandLine::ForCurrentProcess();
+  if (command_line->HasSwitch(switches::kInstantNewTabURL))
+    return false;
+
   FieldTrialFlags flags;
   if (GetFieldTrialInfo(
           base::FieldTrialList::FindFullName(kInstantExtendedFieldTrialName),
@@ -478,6 +499,39 @@
   return false;
 }
 
+bool HandleNewTabURLRewrite(GURL* url,
+                            content::BrowserContext* browser_context) {
+  if (!IsInstantExtendedAPIEnabled())
+    return false;
+
+  if (!url->SchemeIs(chrome::kChromeUIScheme) ||
+      url->host() != chrome::kChromeUINewTabHost)
+    return false;
+
+  const GURL ntp_url(CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
+      switches::kInstantNewTabURL));
+  if (!ntp_url.is_valid())
+    return false;
+
+  *url = ntp_url;
+  return true;
+}
+
+bool HandleNewTabURLReverseRewrite(GURL* url,
+                                   content::BrowserContext* browser_context) {
+  if (!IsInstantExtendedAPIEnabled())
+    return false;
+
+  const GURL ntp_url(CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
+      switches::kInstantNewTabURL));
+  if (!MatchesOriginAndPath(ntp_url, *url))
+    return false;
+
+  *url = GURL(chrome::kChromeUINewTabURL);
+  return true;
+}
+
+
 void EnableInstantExtendedAPIForTesting() {
   CommandLine* cl = CommandLine::ForCurrentProcess();
   cl->AppendSwitch(switches::kEnableInstantExtendedAPI);
diff --git a/chrome/browser/search/search.h b/chrome/browser/search/search.h
index 7f1bf78..ef59f2d 100644
--- a/chrome/browser/search/search.h
+++ b/chrome/browser/search/search.h
@@ -18,6 +18,7 @@
 class TemplateURLRef;
 
 namespace content {
+class BrowserContext;
 class NavigationEntry;
 class WebContents;
 }
@@ -147,6 +148,17 @@
 // Returns true if |contents| corresponds to a preloaded instant extended NTP.
 bool IsPreloadedInstantExtendedNTP(const content::WebContents* contents);
 
+// Rewrites |url| if
+//   1. |url| is kChromeUINewTabURL,
+//   2. InstantExtended is enabled, and
+//   3. The --instant-new-tab-url switch is set to a valid URL.
+// |url| is rewritten to the value of --instant-new-tab-url.
+bool HandleNewTabURLRewrite(GURL* url,
+                            content::BrowserContext* browser_context);
+// Reverses the operation from HandleNewTabURLRewrite.
+bool HandleNewTabURLReverseRewrite(GURL* url,
+                                   content::BrowserContext* browser_context);
+
 // -----------------------------------------------------
 // The following APIs are exposed for use in tests only.
 // -----------------------------------------------------
diff --git a/chrome/browser/search/search_unittest.cc b/chrome/browser/search/search_unittest.cc
index c986500..925a56d 100644
--- a/chrome/browser/search/search_unittest.cc
+++ b/chrome/browser/search/search_unittest.cc
@@ -583,4 +583,23 @@
   EXPECT_EQ("http://www.bar.com/webhp?a=b&strk", instant_url.spec());
 }
 
+TEST_F(SearchTest, ShouldShowInstantNTP_Default) {
+  EnableInstantExtendedAPIForTesting();
+  EXPECT_TRUE(ShouldShowInstantNTP());
+}
+
+TEST_F(SearchTest, ShouldShowInstantNTP_DisabledViaFinch) {
+  EnableInstantExtendedAPIForTesting();
+  ASSERT_TRUE(base::FieldTrialList::CreateFieldTrial("InstantExtended",
+                                                     "Group1 show_ntp:0"));
+  EXPECT_FALSE(ShouldShowInstantNTP());
+}
+
+TEST_F(SearchTest, ShouldShowInstantNTP_DisabledByInstantNewTabURLSwitch) {
+  EnableInstantExtendedAPIForTesting();
+  CommandLine::ForCurrentProcess()->AppendSwitchASCII(
+      switches::kInstantNewTabURL, "http://example.com/newtab");
+  EXPECT_FALSE(ShouldShowInstantNTP());
+}
+
 }  // namespace chrome
diff --git a/chrome/browser/signin/oauth2_token_service.cc b/chrome/browser/signin/oauth2_token_service.cc
index 1790aea..1cc4e18 100644
--- a/chrome/browser/signin/oauth2_token_service.cc
+++ b/chrome/browser/signin/oauth2_token_service.cc
@@ -309,6 +309,14 @@
 scoped_ptr<OAuth2TokenService::Request> OAuth2TokenService::StartRequest(
     const OAuth2TokenService::ScopeSet& scopes,
     OAuth2TokenService::Consumer* consumer) {
+  return StartRequestWithContext(GetRequestContext(), scopes, consumer);
+}
+
+scoped_ptr<OAuth2TokenService::Request>
+OAuth2TokenService::StartRequestWithContext(
+    net::URLRequestContextGetter* getter,
+    const ScopeSet& scopes,
+    Consumer* consumer) {
   DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
 
   scoped_ptr<RequestImpl> request(new RequestImpl(consumer));
@@ -340,10 +348,7 @@
   }
 
   pending_fetchers_[fetch_parameters] =
-      Fetcher::CreateAndStart(this,
-                              GetRequestContext(),
-                              refresh_token,
-                              scopes,
+      Fetcher::CreateAndStart(this, getter, refresh_token, scopes,
                               request->AsWeakPtr());
   return request.PassAs<Request>();
 }
diff --git a/chrome/browser/signin/oauth2_token_service.h b/chrome/browser/signin/oauth2_token_service.h
index b40066e..d979fcf 100644
--- a/chrome/browser/signin/oauth2_token_service.h
+++ b/chrome/browser/signin/oauth2_token_service.h
@@ -117,6 +117,14 @@
   virtual scoped_ptr<Request> StartRequest(const ScopeSet& scopes,
                                            Consumer* consumer);
 
+  // This method does the same as |StartRequest| except it uses the request
+  // context given by |getter| instead of using the one returned by
+  // |GetRequestContext| implemented by derived classes.
+  virtual scoped_ptr<Request> StartRequestWithContext(
+      net::URLRequestContextGetter* getter,
+      const ScopeSet& scopes,
+      Consumer* consumer);
+
   // Returns true if a refresh token exists. If false, calls to
   // |StartRequest| will result in a Consumer::OnGetTokenFailure callback.
   virtual bool RefreshTokenIsAvailable();
diff --git a/chrome/browser/signin/signin_manager.cc b/chrome/browser/signin/signin_manager.cc
index f419d84..09a4862 100644
--- a/chrome/browser/signin/signin_manager.cc
+++ b/chrome/browser/signin/signin_manager.cc
@@ -125,18 +125,6 @@
     token_service->LoadTokensFromDB();
 }
 
-void SigninManager::CleanupNotificationRegistration() {
-  content::Source<TokenService> token_service(
-      TokenServiceFactory::GetForProfile(profile_));
-  if (registrar_.IsRegistered(this,
-                              chrome::NOTIFICATION_TOKEN_AVAILABLE,
-                              token_service)) {
-    registrar_.Remove(this,
-                      chrome::NOTIFICATION_TOKEN_AVAILABLE,
-                      token_service);
-  }
-}
-
 std::string SigninManager::SigninTypeToString(
     SigninManager::SigninType type) {
   switch (type) {
@@ -202,15 +190,6 @@
                                   login_token,
                                   login_captcha,
                                   GaiaAuthFetcher::HostedAccountsNotAllowed);
-
-  // Register for token availability.  The signin manager will pre-login the
-  // user when the GAIA service token is ready for use.
-  if (delegate_->AreSigninCookiesAllowed()) {
-    TokenService* token_service = TokenServiceFactory::GetForProfile(profile_);
-    registrar_.Add(this,
-                   chrome::NOTIFICATION_TOKEN_AVAILABLE,
-                   content::Source<TokenService>(token_service));
-  }
 }
 
 void SigninManager::ProvideSecondFactorAccessCode(
@@ -312,7 +291,6 @@
 void SigninManager::ClearTransientSigninData() {
   DCHECK(IsInitialized());
 
-  CleanupNotificationRegistration();
   client_login_.reset();
   last_result_ = ClientLoginResult();
   possibly_invalid_username_.clear();
@@ -409,6 +387,11 @@
   }
 }
 
+void SigninManager::Shutdown() {
+  local_state_pref_registrar_.RemoveAll();
+  SigninManagerBase::Shutdown();
+}
+
 void SigninManager::OnGoogleServicesUsernamePatternChanged() {
   if (!GetAuthenticatedUsername().empty() &&
       !IsAllowedUsername(GetAuthenticatedUsername())) {
@@ -651,60 +634,21 @@
   OnClientLoginFailure(error);
 }
 
-void SigninManager::OnUbertokenSuccess(const std::string& token) {
-  ubertoken_fetcher_.reset();
-  if (client_login_.get() == NULL) {
-    client_login_.reset(
-        new GaiaAuthFetcher(this,
-                            GaiaConstants::kChromeSource,
-                            profile_->GetRequestContext()));
-  }
-
-  client_login_->StartMergeSession(token);
-}
-
-void SigninManager::OnUbertokenFailure(const GoogleServiceAuthError& error) {
-  LOG(WARNING) << " Unable to login the user to the web: " << error.ToString();
-  ubertoken_fetcher_.reset();
-}
-
 void SigninManager::Observe(int type,
                             const content::NotificationSource& source,
                             const content::NotificationDetails& details) {
-  switch (type) {
-    case chrome::NOTIFICATION_TOKEN_AVAILABLE: {
-      TokenService::TokenAvailableDetails* tok_details =
-          content::Details<TokenService::TokenAvailableDetails>(
-              details).ptr();
+  DCHECK_EQ(content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, type);
 
-      // If a GAIA service token has become available, use it to pre-login the
-      // user to other services that depend on GAIA credentials.
-      if (tok_details->service() ==
-          GaiaConstants::kGaiaOAuth2LoginRefreshToken) {
-        ubertoken_fetcher_.reset(new UbertokenFetcher(profile_, this));
-        ubertoken_fetcher_->StartFetchingToken();
-
-        // We only want to do this once per sign-in.
-        CleanupNotificationRegistration();
-      }
-      break;
-    }
-    case content::NOTIFICATION_RENDERER_PROCESS_TERMINATED: {
-      // It's possible we're listening to a "stale" renderer because it was
-      // replaced with a new process by process-per-site. In either case,
-      // stop listening to it, but only reset signin_process_id_ tracking
-      // if this was from the current signin process.
-      registrar_.Remove(this,
-                        content::NOTIFICATION_RENDERER_PROCESS_TERMINATED,
-                        source);
-      if (signin_process_id_ ==
-          content::Source<content::RenderProcessHost>(source)->GetID()) {
-        signin_process_id_ = kInvalidProcessId;
-      }
-      break;
-    }
-    default:
-      NOTREACHED();
+  // It's possible we're listening to a "stale" renderer because it was
+  // replaced with a new process by process-per-site. In either case,
+  // stop listening to it, but only reset signin_process_id_ tracking
+  // if this was from the current signin process.
+  registrar_.Remove(this,
+                    content::NOTIFICATION_RENDERER_PROCESS_TERMINATED,
+                    source);
+  if (signin_process_id_ ==
+      content::Source<content::RenderProcessHost>(source)->GetID()) {
+    signin_process_id_ = kInvalidProcessId;
   }
 }
 
diff --git a/chrome/browser/signin/signin_manager.h b/chrome/browser/signin/signin_manager.h
index 1e84e0a..3c54c94 100644
--- a/chrome/browser/signin/signin_manager.h
+++ b/chrome/browser/signin/signin_manager.h
@@ -33,7 +33,6 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/signin/signin_internals_util.h"
 #include "chrome/browser/signin/signin_manager_base.h"
-#include "chrome/browser/signin/ubertoken_fetcher.h"
 #include "components/browser_context_keyed_service/browser_context_keyed_service.h"
 #include "content/public/browser/notification_observer.h"
 #include "content/public/browser/notification_registrar.h"
@@ -50,7 +49,6 @@
 
 class SigninManager : public SigninManagerBase,
                       public GaiaAuthConsumer,
-                      public UbertokenConsumer,
                       public content::NotificationObserver {
  public:
   // The callback invoked once the OAuth token has been fetched during signin,
@@ -120,6 +118,7 @@
   // invalid username policy updates, we need to check this during
   // initialization and sign the user out.
   virtual void Initialize(Profile* profile, PrefService* local_state) OVERRIDE;
+  virtual void Shutdown() OVERRIDE;
 
   // Invoked from an OAuthTokenFetchedCallback to complete user signin.
   virtual void CompletePendingSignin();
@@ -161,10 +160,6 @@
   virtual void OnGetUserInfoFailure(
       const GoogleServiceAuthError& error) OVERRIDE;
 
-  // UbertokenConsumer
-  virtual void OnUbertokenSuccess(const std::string& token) OVERRIDE;
-  virtual void OnUbertokenFailure(const GoogleServiceAuthError& error) OVERRIDE;
-
   // content::NotificationObserver
   virtual void Observe(int type,
                        const content::NotificationSource& source,
@@ -260,8 +255,6 @@
   std::string password_;  // This is kept empty whenever possible.
   bool had_two_factor_error_;
 
-  void CleanupNotificationRegistration();
-
   // Result of the last client login, kept pending the lookup of the
   // canonical email.
   ClientLoginResult last_result_;
@@ -272,9 +265,6 @@
   // Registrar for notifications from the TokenService.
   content::NotificationRegistrar registrar_;
 
-  // UbertokenFetcher to login to user to the web property.
-  scoped_ptr<UbertokenFetcher> ubertoken_fetcher_;
-
   // OAuth revocation fetcher for sign outs.
   scoped_ptr<GaiaAuthFetcher> revoke_token_fetcher_;
 
diff --git a/chrome/browser/signin/ubertoken_fetcher.cc b/chrome/browser/signin/ubertoken_fetcher.cc
index 01d9ad4..b726b70 100644
--- a/chrome/browser/signin/ubertoken_fetcher.cc
+++ b/chrome/browser/signin/ubertoken_fetcher.cc
@@ -7,15 +7,13 @@
 #include <vector>
 
 #include "base/logging.h"
-#include "base/strings/stringprintf.h"
-#include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/signin/token_service.h"
-#include "chrome/browser/signin/token_service_factory.h"
+#include "chrome/browser/signin/profile_oauth2_token_service.h"
+#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
+#include "google_apis/gaia/gaia_auth_fetcher.h"
 #include "google_apis/gaia/gaia_constants.h"
 #include "google_apis/gaia/gaia_urls.h"
 #include "google_apis/gaia/google_service_auth_error.h"
-#include "net/base/load_flags.h"
 
 UbertokenFetcher::UbertokenFetcher(Profile* profile,
                                    UbertokenConsumer* consumer)
@@ -28,86 +26,11 @@
 }
 
 void UbertokenFetcher::StartFetchingToken() {
-  TokenService* token_service = TokenServiceFactory::GetForProfile(profile_);
-  if (token_service->HasOAuthLoginToken()) {
-    StartFetchingUbertoken();
-  } else {
-    registrar_.Add(this,
-                   chrome::NOTIFICATION_TOKEN_AVAILABLE,
-                   content::Source<TokenService>(token_service));
-    registrar_.Add(this,
-                   chrome::NOTIFICATION_TOKEN_REQUEST_FAILED,
-                   content::Source<TokenService>(token_service));
-    token_service->StartFetchingTokens();
-  }
-}
-
-void UbertokenFetcher::StartFetchingUbertoken() {
-  TokenService* token_service = TokenServiceFactory::GetForProfile(profile_);
-  DCHECK(token_service->HasOAuthLoginToken());
-  gaia::OAuthClientInfo client_info;
-  GaiaUrls* urls = GaiaUrls::GetInstance();
-  client_info.client_id = urls->oauth2_chrome_client_id();
-  client_info.client_secret = urls->oauth2_chrome_client_secret();
-  gaia_oauth_client_.reset(new gaia::GaiaOAuthClient(
-      profile_->GetRequestContext()));
-  std::vector<std::string> empty_scope_list;  // (Use scope from refresh token.)
-  gaia_oauth_client_->RefreshToken(
-      client_info, token_service->GetOAuth2LoginRefreshToken(),
-      empty_scope_list, 1, this);
-}
-
-void UbertokenFetcher::Observe(int type,
-                               const content::NotificationSource& source,
-                               const content::NotificationDetails& details) {
-  DCHECK(type == chrome::NOTIFICATION_TOKEN_AVAILABLE ||
-         type == chrome::NOTIFICATION_TOKEN_REQUEST_FAILED);
-
-  if (type == chrome::NOTIFICATION_TOKEN_AVAILABLE) {
-    TokenService::TokenAvailableDetails* token_details =
-        content::Details<TokenService::TokenAvailableDetails>(details).ptr();
-    if (token_details->service() !=
-        GaiaConstants::kGaiaOAuth2LoginRefreshToken) {
-      return;
-    }
-    registrar_.RemoveAll();
-    StartFetchingUbertoken();
-  } else {
-    TokenService::TokenRequestFailedDetails* token_details =
-        content::Details<TokenService::TokenRequestFailedDetails>(details).
-            ptr();
-    if (token_details->service() == GaiaConstants::kLSOService ||
-        token_details->service() ==
-            GaiaConstants::kGaiaOAuth2LoginRefreshToken) {
-      consumer_->OnUbertokenFailure(token_details->error());
-    }
-  }
-}
-
-void UbertokenFetcher::OnGetTokensResponse(const std::string& refresh_token,
-                                           const std::string& access_token,
-                                           int expires_in_seconds) {
-  NOTREACHED();
-}
-
-void UbertokenFetcher::OnRefreshTokenResponse(const std::string& access_token,
-                                              int expires_in_seconds) {
-  gaia_auth_fetcher_.reset(new GaiaAuthFetcher(this,
-                                               GaiaConstants::kChromeSource,
-                                               profile_->GetRequestContext()));
-  gaia_auth_fetcher_->StartTokenFetchForUberAuthExchange(access_token);
-}
-
-void UbertokenFetcher::OnOAuthError() {
-  GoogleServiceAuthError error(
-      GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS);
-  consumer_->OnUbertokenFailure(error);
-}
-
-void UbertokenFetcher::OnNetworkError(int response_code) {
-  GoogleServiceAuthError error =
-      GoogleServiceAuthError::FromConnectionError(response_code);
-  consumer_->OnUbertokenFailure(error);
+  OAuth2TokenService::ScopeSet scopes;
+  scopes.insert(GaiaUrls::GetInstance()->oauth1_login_scope());
+  access_token_request_ =
+      ProfileOAuth2TokenServiceFactory::GetForProfile(profile_)->
+          StartRequest(scopes, this);
 }
 
 void UbertokenFetcher::OnUberAuthTokenSuccess(const std::string& token) {
@@ -118,3 +41,21 @@
     const GoogleServiceAuthError& error) {
   consumer_->OnUbertokenFailure(error);
 }
+
+void UbertokenFetcher::OnGetTokenSuccess(
+    const OAuth2TokenService::Request* request,
+    const std::string& access_token,
+    const base::Time& expiration_time) {
+  access_token_request_.reset();
+  gaia_auth_fetcher_.reset(new GaiaAuthFetcher(this,
+                                               GaiaConstants::kChromeSource,
+                                               profile_->GetRequestContext()));
+  gaia_auth_fetcher_->StartTokenFetchForUberAuthExchange(access_token);
+}
+
+void UbertokenFetcher::OnGetTokenFailure(
+    const OAuth2TokenService::Request* request,
+    const GoogleServiceAuthError& error) {
+  access_token_request_.reset();
+  consumer_->OnUbertokenFailure(error);
+}
diff --git a/chrome/browser/signin/ubertoken_fetcher.h b/chrome/browser/signin/ubertoken_fetcher.h
index 3c4a516..b7dd6d0 100644
--- a/chrome/browser/signin/ubertoken_fetcher.h
+++ b/chrome/browser/signin/ubertoken_fetcher.h
@@ -6,24 +6,19 @@
 #define CHROME_BROWSER_SIGNIN_UBERTOKEN_FETCHER_H_
 
 #include "base/memory/scoped_ptr.h"
-#include "content/public/browser/notification_details.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
-#include "content/public/browser/notification_source.h"
+#include "chrome/browser/signin/oauth2_token_service.h"
 #include "google_apis/gaia/gaia_auth_consumer.h"
-#include "google_apis/gaia/gaia_auth_fetcher.h"
-#include "google_apis/gaia/gaia_oauth_client.h"
 
 // Allow to retrieves an uber-auth token for the user. This class uses the
-// |TokenService| and considers that the user is already logged in. It will then
-// retrieve the OAuth2 refresh token, use it to generate an OAuth2 access token
-// and finally use this access token to generate the uber-auth token.
+// |OAuth2TokenService| and considers that the user is already logged in. It
+// will use the OAuth2 access token to generate the uber-auth token.
 //
 // This class should be used on a single thread, but it can be whichever thread
 // that you like.
 //
 // This class can handle one request at a time.
 
+class GaiaAuthFetcher;
 class GoogleServiceAuthError;
 class Profile;
 
@@ -37,9 +32,8 @@
 };
 
 // Allows to retrieve an uber-auth token.
-class UbertokenFetcher : public content::NotificationObserver,
-                         public gaia::GaiaOAuthClient::Delegate,
-                         public GaiaAuthConsumer {
+class UbertokenFetcher : public GaiaAuthConsumer,
+                         public OAuth2TokenService::Consumer {
  public:
   UbertokenFetcher(Profile* profile, UbertokenConsumer* consumer);
   virtual ~UbertokenFetcher();
@@ -47,33 +41,23 @@
   // Start fetching the token.
   void StartFetchingToken();
 
-  // Overriden from gaia::GaiaOAuthClient::Delegate:
-  virtual void OnGetTokensResponse(const std::string& refresh_token,
-                                   const std::string& access_token,
-                                   int expires_in_seconds) OVERRIDE;
-  virtual void OnRefreshTokenResponse(const std::string& access_token,
-                                      int expires_in_seconds) OVERRIDE;
-  virtual void OnOAuthError() OVERRIDE;
-  virtual void OnNetworkError(int response_code) OVERRIDE;
-
   // Overriden from GaiaAuthConsumer
   virtual void OnUberAuthTokenSuccess(const std::string& token) OVERRIDE;
   virtual void OnUberAuthTokenFailure(
       const GoogleServiceAuthError& error) OVERRIDE;
 
-  // Overriden from content::NotificationObserver:
-  virtual void Observe(int type,
-                       const content::NotificationSource& source,
-                       const content::NotificationDetails& details) OVERRIDE;
+  // Overriden from OAuth2TokenService::Consumer:
+  virtual void OnGetTokenSuccess(const OAuth2TokenService::Request* request,
+                                 const std::string& access_token,
+                                 const base::Time& expiration_time) OVERRIDE;
+  virtual void OnGetTokenFailure(const OAuth2TokenService::Request* request,
+                                 const GoogleServiceAuthError& error) OVERRIDE;
 
  private:
-  void StartFetchingUbertoken();
-
   Profile* profile_;
   UbertokenConsumer* consumer_;
-  content::NotificationRegistrar registrar_;
-  scoped_ptr<gaia::GaiaOAuthClient> gaia_oauth_client_;
   scoped_ptr<GaiaAuthFetcher> gaia_auth_fetcher_;
+  scoped_ptr<OAuth2TokenService::Request> access_token_request_;
 
   DISALLOW_COPY_AND_ASSIGN(UbertokenFetcher);
 };
diff --git a/chrome/browser/signin/ubertoken_fetcher_unittest.cc b/chrome/browser/signin/ubertoken_fetcher_unittest.cc
index ec752c7..90b1d78 100644
--- a/chrome/browser/signin/ubertoken_fetcher_unittest.cc
+++ b/chrome/browser/signin/ubertoken_fetcher_unittest.cc
@@ -4,13 +4,16 @@
 
 #include "chrome/browser/signin/ubertoken_fetcher.h"
 
-#include "chrome/browser/chrome_notification_types.h"
-#include "chrome/browser/signin/token_service.h"
+#include "base/memory/scoped_ptr.h"
+#include "chrome/browser/signin/profile_oauth2_token_service.h"
+#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
 #include "chrome/browser/signin/token_service_unittest.h"
 #include "google_apis/gaia/gaia_constants.h"
 #include "net/url_request/test_url_fetcher_factory.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+namespace {
+
 class MockUbertokenConsumer : public UbertokenConsumer {
  public:
   MockUbertokenConsumer()
@@ -37,15 +40,40 @@
   int nb_error_;
 };
 
+class MockOAuth2TokenService : public ProfileOAuth2TokenService {
+  // OAuth2TokenService overrides:
+  virtual scoped_ptr<OAuth2TokenService::Request>
+      StartRequest(const OAuth2TokenService::ScopeSet& scopes,
+                   OAuth2TokenService::Consumer* consumer) OVERRIDE {
+    // Don't actually make a request.
+    scoped_ptr<OAuth2TokenService::Request> request;
+    return request.Pass();
+  }
+};
+
+
+BrowserContextKeyedService* Build(content::BrowserContext* profile) {
+  MockOAuth2TokenService* token_service = new MockOAuth2TokenService();
+  token_service->Initialize(static_cast<Profile*>(profile));
+  return token_service;
+}
+
+}  // namespace
+
 class UbertokenFetcherTest : public TokenServiceTestHarness {
  public:
   virtual void SetUp() OVERRIDE {
     TokenServiceTestHarness::SetUp();
+    profile()->CreateRequestContext(NULL);
+
+    ProfileOAuth2TokenServiceFactory::GetInstance()->
+        SetTestingFactoryAndUse(profile(), Build);
     UpdateCredentialsOnService();
     fetcher_.reset(new UbertokenFetcher(profile(), &consumer_));
   }
 
   virtual void TearDown() OVERRIDE {
+    fetcher_.reset();
     TokenServiceTestHarness::TearDown();
   }
 
@@ -55,50 +83,51 @@
   scoped_ptr<UbertokenFetcher> fetcher_;
 };
 
-TEST_F(UbertokenFetcherTest, TestSuccessWithoutRefreshToken) {
-  fetcher_->StartFetchingToken();
-  TokenService::TokenAvailableDetails
-      details(GaiaConstants::kGaiaOAuth2LoginRefreshToken, "refreshToken");
+TEST_F(UbertokenFetcherTest, Basic) {
+}
+
+TEST_F(UbertokenFetcherTest, Success) {
   service()->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken,
                                    "refreshToken");
-  fetcher_->Observe(chrome::NOTIFICATION_TOKEN_AVAILABLE,
-                    content::Source<TokenService>(service()),
-                    content::Details<const TokenService::TokenAvailableDetails>(
-                        &details));
-  fetcher_->OnRefreshTokenResponse("accessToken", 3600);
+  fetcher_->StartFetchingToken();
+  fetcher_->OnGetTokenSuccess(NULL, "accessToken", base::Time());
   fetcher_->OnUberAuthTokenSuccess("uberToken");
   EXPECT_EQ(0, consumer_.nb_error_);
   EXPECT_EQ(1, consumer_.nb_correct_token_);
   EXPECT_EQ("uberToken", consumer_.last_token_);
 }
 
-TEST_F(UbertokenFetcherTest, TestSuccessWithRefreshToken) {
-  service()->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken,
-                                   "refreshToken");
+TEST_F(UbertokenFetcherTest, NoRefreshToken) {
   fetcher_->StartFetchingToken();
-  fetcher_->OnRefreshTokenResponse("accessToken", 3600);
-  fetcher_->OnUberAuthTokenSuccess("uberToken");
-  EXPECT_EQ(0, consumer_.nb_error_);
-  EXPECT_EQ(1, consumer_.nb_correct_token_);
-  EXPECT_EQ("uberToken", consumer_.last_token_);
-}
-
-
-TEST_F(UbertokenFetcherTest, TestFailures) {
   GoogleServiceAuthError error(GoogleServiceAuthError::USER_NOT_SIGNED_UP);
-  EXPECT_EQ(0, consumer_.nb_error_);
-  TokenService::TokenRequestFailedDetails
-      details(GaiaConstants::kGaiaOAuth2LoginRefreshToken, error);
-  fetcher_->Observe(
-      chrome::NOTIFICATION_TOKEN_REQUEST_FAILED,
-      content::Source<TokenService>(service()),
-      content::Details<const TokenService::TokenRequestFailedDetails>(
-          &details));
+  fetcher_->OnGetTokenFailure(NULL, error);
   EXPECT_EQ(1, consumer_.nb_error_);
-  fetcher_->OnOAuthError();
-  EXPECT_EQ(2, consumer_.nb_error_);
-  fetcher_->OnNetworkError(401);
-  EXPECT_EQ(3, consumer_.nb_error_);
+  EXPECT_EQ(0, consumer_.nb_correct_token_);
+}
+
+TEST_F(UbertokenFetcherTest, FailureToGetAccessToken) {
+  GoogleServiceAuthError error(GoogleServiceAuthError::USER_NOT_SIGNED_UP);
+
+  service()->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken,
+                                   "refreshToken");
+  fetcher_->StartFetchingToken();
+  fetcher_->OnGetTokenFailure(NULL, error);
+
+  EXPECT_EQ(1, consumer_.nb_error_);
+  EXPECT_EQ(0, consumer_.nb_correct_token_);
+  EXPECT_EQ("", consumer_.last_token_);
+}
+
+TEST_F(UbertokenFetcherTest, FailureToGetUberToken) {
+  GoogleServiceAuthError error(GoogleServiceAuthError::USER_NOT_SIGNED_UP);
+
+  service()->IssueAuthTokenForTest(GaiaConstants::kGaiaOAuth2LoginRefreshToken,
+                                   "refreshToken");
+  fetcher_->StartFetchingToken();
+  fetcher_->OnGetTokenSuccess(NULL, "accessToken", base::Time());
   fetcher_->OnUberAuthTokenFailure(error);
-  EXPECT_EQ(4, consumer_.nb_error_);
+
+  EXPECT_EQ(1, consumer_.nb_error_);
+  EXPECT_EQ(0, consumer_.nb_correct_token_);
+  EXPECT_EQ("", consumer_.last_token_);
 }
diff --git a/chrome/browser/ui/app_list/search/webstore_provider.cc b/chrome/browser/ui/app_list/search/webstore_provider.cc
index 479ded0..761cee0 100644
--- a/chrome/browser/ui/app_list/search/webstore_provider.cc
+++ b/chrome/browser/ui/app_list/search/webstore_provider.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/metrics/field_trial.h"
+#include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
 #include "chrome/browser/browser_process.h"
@@ -16,6 +17,7 @@
 #include "chrome/browser/ui/app_list/search/webstore_result.h"
 #include "chrome/browser/ui/app_list/search/webstore_search_fetcher.h"
 #include "chrome/common/extensions/extension_constants.h"
+#include "chrome/common/url_constants.h"
 #include "url/gurl.h"
 
 namespace app_list {
@@ -34,6 +36,49 @@
   return base::FieldTrialList::FindFullName(kFieldTrialName) == kEnable;
 }
 
+// Returns whether or not the user's input string, |query|, might contain any
+// sensitive information, based purely on its value and not where it came from.
+bool IsSensitiveInput(const string16& query) {
+  const GURL query_as_url(query);
+  if (!query_as_url.is_valid())
+    return false;
+
+  // The input can be interpreted as a URL. Check to see if it is potentially
+  // sensitive. (Code shamelessly copied from search_provider.cc's
+  // IsQuerySuitableForSuggest function.)
+
+  // First we check the scheme: if this looks like a URL with a scheme that is
+  // file, we shouldn't send it. Sending such things is a waste of time and a
+  // disclosure of potentially private, local data. If the scheme is OK, we
+  // still need to check other cases below.
+  if (LowerCaseEqualsASCII(query_as_url.scheme(), chrome::kFileScheme))
+    return true;
+
+  // Don't send URLs with usernames, queries or refs. Some of these are
+  // private, and the Suggest server is unlikely to have any useful results
+  // for any of them. Also don't send URLs with ports, as we may initially
+  // think that a username + password is a host + port (and we don't want to
+  // send usernames/passwords), and even if the port really is a port, the
+  // server is once again unlikely to have and useful results.
+  if (!query_as_url.username().empty() ||
+      !query_as_url.port().empty() ||
+      !query_as_url.query().empty() ||
+      !query_as_url.ref().empty()) {
+    return true;
+  }
+
+  // Don't send anything for https except the hostname. Hostnames are OK
+  // because they are visible when the TCP connection is established, but the
+  // specific path may reveal private information.
+  if (LowerCaseEqualsASCII(query_as_url.scheme(), chrome::kHttpsScheme) &&
+      !query_as_url.path().empty() &&
+      query_as_url.path() != "/") {
+    return true;
+  }
+
+  return false;
+}
+
 }  // namespace
 
 WebstoreProvider::WebstoreProvider(Profile* profile,
@@ -44,6 +89,13 @@
 WebstoreProvider::~WebstoreProvider() {}
 
 void WebstoreProvider::Start(const base::string16& query) {
+  ClearResults();
+
+  // If |query| contains sensitive data, bail out and do not create the place
+  // holder "search-web-store" result.
+  if (IsSensitiveInput(query))
+    return;
+
   const std::string query_utf8 = UTF16ToUTF8(query);
 
   if (UseWebstoreSearch()) {
@@ -59,7 +111,6 @@
 
   // Add a placeholder result which when clicked will run the user's query in a
   // browser. This placeholder is removed when the search results arrive.
-  ClearResults();
   Add(scoped_ptr<ChromeSearchResult>(
       new SearchWebstoreResult(profile_, query_utf8)).Pass());
 }
diff --git a/chrome/browser/ui/app_list/search/webstore_provider_browsertest.cc b/chrome/browser/ui/app_list/search/webstore_provider_browsertest.cc
index b60133a..ced21f4 100644
--- a/chrome/browser/ui/app_list/search/webstore_provider_browsertest.cc
+++ b/chrome/browser/ui/app_list/search/webstore_provider_browsertest.cc
@@ -189,5 +189,26 @@
   }
 }
 
+IN_PROC_BROWSER_TEST_F(WebstoreProviderTest, NoSearchForSensitiveData) {
+  // None of the following input strings should be accepted because they may
+  // contain private data.
+  const char* inputs[] = {
+    // file: scheme is bad.
+    "file://filename",
+    "FILE://filename",
+    // URLs with usernames, ports, queries or refs are bad.
+    "http://username:password@hostname/",
+    "http://www.example.com:1000",
+    "http://foo:1000",
+    "http://hostname/?query=q",
+    "http://hostname/path#ref",
+    // A https URL with path is bad.
+    "https://hostname/path",
+  };
+
+  for (size_t i = 0; i < arraysize(inputs); ++i)
+    EXPECT_EQ("", RunQuery(inputs[i], ""));
+}
+
 }  // namespace test
 }  // namespace app_list
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
index 2fe7f2f..38c6905 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.cc
@@ -101,6 +101,9 @@
 // HSL shift to gray out an image.
 const color_utils::HSL kGrayImageShift = {-1, 0, 0.8};
 
+// Limit Wallet items refresh rate to at most once per minute.
+const int kWalletItemsRefreshRateSeconds = 60;
+
 // Returns true if |card_type| is supported by Wallet.
 bool IsWalletSupportedCard(const std::string& card_type) {
   return card_type == autofill::kVisaCard ||
@@ -643,6 +646,17 @@
     view_->Hide();
 }
 
+void AutofillDialogControllerImpl::TabActivated() {
+  // If the user switched away from this tab and then switched back, reload the
+  // Wallet items, in case they've changed.
+  int seconds_elapsed_since_last_refresh =
+      (base::TimeTicks::Now() - last_wallet_items_fetch_timestamp_).InSeconds();
+  if (IsPayingWithWallet() && wallet_items_ &&
+      seconds_elapsed_since_last_refresh >= kWalletItemsRefreshRateSeconds) {
+    GetWalletItems();
+  }
+}
+
 void AutofillDialogControllerImpl::OnAutocheckoutError() {
   DCHECK_EQ(AUTOCHECKOUT_IN_PROGRESS, autocheckout_state_);
   GetMetricLogger().LogAutocheckoutDuration(
@@ -901,7 +915,15 @@
 }
 
 void AutofillDialogControllerImpl::GetWalletItems() {
+  if (wallet_items_) {
+    previously_selected_instrument_id_ = ActiveInstrument()->object_id();
+    previously_selected_shipping_address_id_ =
+        ActiveShippingAddress()->object_id();
+  }
+
+  last_wallet_items_fetch_timestamp_ = base::TimeTicks::Now();
   wallet_items_.reset();
+
   // The "Loading..." page should be showing now, which should cause the
   // account chooser to hide.
   view_->UpdateAccountChooser();
@@ -2092,6 +2114,10 @@
       GURL settings_url(chrome::kChromeUISettingsURL);
       url = settings_url.Resolve(chrome::kAutofillSubPage);
     } else {
+      // Reset |last_wallet_items_fetch_timestamp_| to ensure that the Wallet
+      // data is refreshed as soon as the user switches back to this tab after
+      // potentially editing his data.
+      last_wallet_items_fetch_timestamp_ = base::TimeTicks();
       url = SectionForSuggestionsMenuModel(*model) == SECTION_SHIPPING ?
           wallet::GetManageAddressesUrl() : wallet::GetManageInstrumentsUrl();
     }
@@ -2489,9 +2515,14 @@
           addresses[i]->DisplayName(),
           addresses[i]->DisplayNameDetail());
 
-      if (addresses[i]->object_id() == wallet_items_->default_address_id())
+      const std::string default_shipping_address_id =
+          !previously_selected_shipping_address_id_.empty() ?
+              previously_selected_shipping_address_id_ :
+              wallet_items_->default_address_id();
+      if (addresses[i]->object_id() == default_shipping_address_id)
         suggested_shipping_.SetCheckedItem(key);
     }
+    previously_selected_shipping_address_id_.clear();
 
     if (!IsSubmitPausedOn(wallet::VERIFY_CVV)) {
       const std::vector<wallet::WalletItems::MaskedInstrument*>& instruments =
@@ -2519,12 +2550,16 @@
         if (allowed) {
           if (first_active_instrument_key.empty())
             first_active_instrument_key = key;
-          if (instruments[i]->object_id() ==
-              wallet_items_->default_instrument_id()) {
+
+          const std::string default_instrument_id =
+              !previously_selected_instrument_id_.empty() ?
+                  previously_selected_instrument_id_ :
+                  wallet_items_->default_instrument_id();
+          if (instruments[i]->object_id() == default_instrument_id)
             default_instrument_key = key;
-          }
         }
       }
+      previously_selected_instrument_id_.clear();
 
       // TODO(estade): this should have a URL sublabel.
       suggested_cc_billing_.AddKeyedItem(
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.h b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.h
index 88e7429..7769189 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_impl.h
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_impl.h
@@ -92,6 +92,10 @@
   void Show();
   void Hide();
 
+  // Called when the tab hosting this dialog is activated by a user gesture.
+  // Used to trigger a refresh of the user's Wallet data.
+  void TabActivated();
+
   // Adds a step in the flow to the Autocheckout UI.
   void AddAutocheckoutStep(AutocheckoutStepType step_type);
 
@@ -597,6 +601,15 @@
   scoped_ptr<wallet::WalletItems> wallet_items_;
   scoped_ptr<wallet::FullWallet> full_wallet_;
 
+  // The last active instrument and shipping address object ids. These
+  // variables are only set (i.e. non-empty) when the Wallet items are being
+  // re-fetched.
+  std::string previously_selected_instrument_id_;
+  std::string previously_selected_shipping_address_id_;
+
+  // When the Wallet items were last fetched.
+  base::TimeTicks last_wallet_items_fetch_timestamp_;
+
   // Local machine signals to pass along on each request to trigger (or
   // discourage) risk challenges; sent if the user is up to date on legal docs.
   std::string risk_data_;
diff --git a/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc b/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc
index a647868..51f2d16 100644
--- a/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc
+++ b/chrome/browser/ui/autofill/autofill_dialog_controller_unittest.cc
@@ -2284,4 +2284,59 @@
   controller()->ViewClosed();
 }
 
+TEST_F(AutofillDialogControllerTest, ReloadWalletItemsOnActivation) {
+  // Switch into Wallet mode and initialize some Wallet data.
+  SwitchToWallet();
+
+  scoped_ptr<wallet::WalletItems> wallet_items = wallet::GetTestWalletItems();
+  wallet_items->AddInstrument(wallet::GetTestMaskedInstrument());
+  wallet_items->AddInstrument(wallet::GetTestNonDefaultMaskedInstrument());
+  wallet_items->AddAddress(wallet::GetTestNonDefaultShippingAddress());
+  wallet_items->AddAddress(wallet::GetTestShippingAddress());
+  controller()->OnDidGetWalletItems(wallet_items.Pass());
+
+  // Initially, the default entries should be selected.
+  ui::MenuModel* cc_billing_model =
+      controller()->MenuModelForSection(SECTION_CC_BILLING);
+  ui::MenuModel* shipping_model =
+      controller()->MenuModelForSection(SECTION_SHIPPING);
+  // "add", "manage", and 2 suggestions.
+  ASSERT_EQ(4, cc_billing_model->GetItemCount());
+  EXPECT_TRUE(cc_billing_model->IsItemCheckedAt(0));
+  // "use billing", "add", "manage", and 2 suggestions.
+  ASSERT_EQ(5, shipping_model->GetItemCount());
+  EXPECT_TRUE(shipping_model->IsItemCheckedAt(2));
+
+  // Select entries other than the defaults.
+  cc_billing_model->ActivatedAt(1);
+  shipping_model->ActivatedAt(1);
+  // "add", "manage", and 2 suggestions.
+  ASSERT_EQ(4, cc_billing_model->GetItemCount());
+  EXPECT_TRUE(cc_billing_model->IsItemCheckedAt(1));
+  // "use billing", "add", "manage", and 2 suggestions.
+  ASSERT_EQ(5, shipping_model->GetItemCount());
+  EXPECT_TRUE(shipping_model-> IsItemCheckedAt(1));
+
+  // Simulate switching away from the tab and back.  This should issue a request
+  // for wallet items.
+  EXPECT_CALL(*controller()->GetTestingWalletClient(), GetWalletItems(_));
+  controller()->TabActivated();
+
+  // Simulate a response that includes different items.
+  wallet_items = wallet::GetTestWalletItems();
+  wallet_items->AddInstrument(wallet::GetTestMaskedInstrumentExpired());
+  wallet_items->AddInstrument(wallet::GetTestMaskedInstrument());
+  wallet_items->AddInstrument(wallet::GetTestNonDefaultMaskedInstrument());
+  wallet_items->AddAddress(wallet::GetTestNonDefaultShippingAddress());
+  controller()->OnDidGetWalletItems(wallet_items.Pass());
+
+  // The previously selected entries should still be selected.
+  // "add", "manage", and 3 suggestions.
+  ASSERT_EQ(5, cc_billing_model->GetItemCount());
+  EXPECT_TRUE(cc_billing_model->IsItemCheckedAt(2));
+  // "use billing", "add", "manage", and 1 suggestion.
+  ASSERT_EQ(4, shipping_model->GetItemCount());
+  EXPECT_TRUE(shipping_model->IsItemCheckedAt(1));
+}
+
 }  // namespace autofill
diff --git a/chrome/browser/ui/autofill/tab_autofill_manager_delegate.cc b/chrome/browser/ui/autofill/tab_autofill_manager_delegate.cc
index 44603d9..00007ba 100644
--- a/chrome/browser/ui/autofill/tab_autofill_manager_delegate.cc
+++ b/chrome/browser/ui/autofill/tab_autofill_manager_delegate.cc
@@ -19,6 +19,7 @@
 #include "chrome/browser/ui/browser_finder.h"
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/chrome_pages.h"
+#include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
 #include "chrome/common/url_constants.h"
 #include "components/autofill/content/browser/autofill_driver_impl.h"
 #include "components/autofill/core/common/autofill_pref_names.h"
@@ -46,6 +47,14 @@
   DCHECK(!popup_controller_);
 }
 
+void TabAutofillManagerDelegate::TabActivated(int reason) {
+  if (reason != TabStripModelObserver::CHANGE_REASON_USER_GESTURE)
+    return;
+
+  if (dialog_controller_.get())
+    dialog_controller_->TabActivated();
+}
+
 PersonalDataManager* TabAutofillManagerDelegate::GetPersonalDataManager() {
   Profile* profile =
       Profile::FromBrowserContext(web_contents_->GetBrowserContext());
diff --git a/chrome/browser/ui/autofill/tab_autofill_manager_delegate.h b/chrome/browser/ui/autofill/tab_autofill_manager_delegate.h
index 75879bd..004a0bb 100644
--- a/chrome/browser/ui/autofill/tab_autofill_manager_delegate.h
+++ b/chrome/browser/ui/autofill/tab_autofill_manager_delegate.h
@@ -37,6 +37,9 @@
  public:
   virtual ~TabAutofillManagerDelegate();
 
+  // Called when the tab corresponding to |this| instance is activated.
+  void TabActivated(int reason);
+
   // AutofillManagerDelegate implementation.
   virtual PersonalDataManager* GetPersonalDataManager() OVERRIDE;
   virtual PrefService* GetPrefs() OVERRIDE;
diff --git a/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc b/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc
index c248a37..2c12189 100644
--- a/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc
+++ b/chrome/browser/ui/blocked_content/popup_blocker_browsertest.cc
@@ -262,10 +262,10 @@
 
   // Launch the blocked popup.
   EXPECT_EQ(1u, popup_blocker_helper->GetBlockedPopupsCount());
-  IDMap<chrome::NavigateParams, IDMapOwnPointer>::const_iterator iter(
-      &popup_blocker_helper->GetBlockedPopupRequests());
-  ASSERT_FALSE(iter.IsAtEnd());
-  popup_blocker_helper->ShowBlockedPopup(iter.GetCurrentKey());
+  std::map<int32, GURL> blocked_requests =
+      popup_blocker_helper->GetBlockedPopupRequests();
+  std::map<int32, GURL>::const_iterator iter = blocked_requests.begin();
+  popup_blocker_helper->ShowBlockedPopup(iter->first);
 
   observer.Wait();
 }
@@ -299,10 +299,10 @@
   PopupBlockerTabHelper* popup_blocker_helper =
       PopupBlockerTabHelper::FromWebContents(web_contents);
   EXPECT_EQ(1u, popup_blocker_helper->GetBlockedPopupsCount());
-  IDMap<chrome::NavigateParams, IDMapOwnPointer>::const_iterator iter(
-      &popup_blocker_helper->GetBlockedPopupRequests());
-  ASSERT_FALSE(iter.IsAtEnd());
-  popup_blocker_helper->ShowBlockedPopup(iter.GetCurrentKey());
+  std::map<int32, GURL> blocked_requests =
+      popup_blocker_helper->GetBlockedPopupRequests();
+  std::map<int32, GURL>::const_iterator iter = blocked_requests.begin();
+  popup_blocker_helper->ShowBlockedPopup(iter->first);
 
   observer.Wait();
 }
@@ -336,10 +336,10 @@
   PopupBlockerTabHelper* popup_blocker_helper =
       PopupBlockerTabHelper::FromWebContents(web_contents);
   EXPECT_EQ(1u, popup_blocker_helper->GetBlockedPopupsCount());
-  IDMap<chrome::NavigateParams, IDMapOwnPointer>::const_iterator iter(
-      &popup_blocker_helper->GetBlockedPopupRequests());
-  ASSERT_FALSE(iter.IsAtEnd());
-  popup_blocker_helper->ShowBlockedPopup(iter.GetCurrentKey());
+  std::map<int32, GURL> blocked_requests =
+      popup_blocker_helper->GetBlockedPopupRequests();
+  std::map<int32, GURL>::const_iterator iter = blocked_requests.begin();
+  popup_blocker_helper->ShowBlockedPopup(iter->first);
 
   observer.Wait();
   Browser* new_browser = browser_observer.WaitForSingleNewBrowser();
@@ -380,10 +380,54 @@
   PopupBlockerTabHelper* popup_blocker_helper =
       PopupBlockerTabHelper::FromWebContents(web_contents);
   EXPECT_EQ(1u, popup_blocker_helper->GetBlockedPopupsCount());
-  IDMap<chrome::NavigateParams, IDMapOwnPointer>::const_iterator iter(
-      &popup_blocker_helper->GetBlockedPopupRequests());
-  ASSERT_FALSE(iter.IsAtEnd());
-  popup_blocker_helper->ShowBlockedPopup(iter.GetCurrentKey());
+  std::map<int32, GURL> blocked_requests =
+      popup_blocker_helper->GetBlockedPopupRequests();
+  std::map<int32, GURL>::const_iterator iter = blocked_requests.begin();
+  popup_blocker_helper->ShowBlockedPopup(iter->first);
+
+  observer.Wait();
+  Browser* new_browser = browser_observer.WaitForSingleNewBrowser();
+
+  // Check that the referrer was correctly set.
+  web_contents = new_browser->tab_strip_model()->GetActiveWebContents();
+  base::string16 expected_title(base::ASCIIToUTF16("PASS"));
+  content::TitleWatcher title_watcher(web_contents, expected_title);
+  EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
+}
+
+IN_PROC_BROWSER_TEST_F(BetterPopupBlockerBrowserTest, WindowFeaturesBarProps) {
+  GURL url(ui_test_utils::GetTestUrl(
+      base::FilePath(kTestDir),
+      base::FilePath(FILE_PATH_LITERAL("popup-windowfeatures.html"))));
+
+  CountRenderViewHosts counter;
+
+  ui_test_utils::NavigateToURL(browser(), url);
+
+  // If the popup blocker blocked the blank post, there should be only one tab.
+  EXPECT_EQ(1u, chrome::GetBrowserCount(browser()->profile(),
+                                        browser()->host_desktop_type()));
+  EXPECT_EQ(1, browser()->tab_strip_model()->count());
+  WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  EXPECT_EQ(url, web_contents->GetURL());
+
+  // And no new RVH created.
+  EXPECT_EQ(0, counter.GetRenderViewHostCreatedCount());
+
+  content::WindowedNotificationObserver observer(
+      chrome::NOTIFICATION_TAB_ADDED,
+      content::NotificationService::AllSources());
+  ui_test_utils::BrowserAddedObserver browser_observer;
+
+  // Launch the blocked popup.
+  PopupBlockerTabHelper* popup_blocker_helper =
+      PopupBlockerTabHelper::FromWebContents(web_contents);
+  EXPECT_EQ(1u, popup_blocker_helper->GetBlockedPopupsCount());
+  std::map<int32, GURL> blocked_requests =
+      popup_blocker_helper->GetBlockedPopupRequests();
+  std::map<int32, GURL>::const_iterator iter = blocked_requests.begin();
+  popup_blocker_helper->ShowBlockedPopup(iter->first);
 
   observer.Wait();
   Browser* new_browser = browser_observer.WaitForSingleNewBrowser();
diff --git a/chrome/browser/ui/blocked_content/popup_blocker_tab_helper.cc b/chrome/browser/ui/blocked_content/popup_blocker_tab_helper.cc
index 41b36ff..cc8077c 100644
--- a/chrome/browser/ui/blocked_content/popup_blocker_tab_helper.cc
+++ b/chrome/browser/ui/blocked_content/popup_blocker_tab_helper.cc
@@ -9,14 +9,27 @@
 #include "chrome/browser/content_settings/tab_specific_content_settings.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser_navigator.h"
+#include "chrome/common/render_messages.h"
 #include "content/public/browser/navigation_controller.h"
 #include "content/public/browser/navigation_details.h"
 #include "content/public/browser/navigation_entry.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_contents_delegate.h"
+#include "third_party/WebKit/public/web/WebWindowFeatures.h"
+
+using WebKit::WebWindowFeatures;
 
 DEFINE_WEB_CONTENTS_USER_DATA_KEY(PopupBlockerTabHelper);
 
+struct PopupBlockerTabHelper::BlockedRequest {
+  BlockedRequest(const chrome::NavigateParams& params,
+                 const WebWindowFeatures& window_features)
+      : params(params), window_features(window_features) {}
+
+  chrome::NavigateParams params;
+  WebWindowFeatures window_features;
+};
+
 PopupBlockerTabHelper::PopupBlockerTabHelper(
     content::WebContents* web_contents)
     : content::WebContentsObserver(web_contents) {
@@ -49,7 +62,8 @@
 }
 
 bool PopupBlockerTabHelper::MaybeBlockPopup(
-    const chrome::NavigateParams& params) {
+    const chrome::NavigateParams& params,
+    const WebWindowFeatures& window_features) {
   // A page can't spawn popups (or do anything else, either) until its load
   // commits, so when we reach here, the popup was spawned by the
   // NavigationController's last committed entry, not the active entry.  For
@@ -69,7 +83,7 @@
           CONTENT_SETTING_ALLOW) {
     return false;
   } else {
-    blocked_popups_.Add(new chrome::NavigateParams(params));
+    blocked_popups_.Add(new BlockedRequest(params, window_features));
     TabSpecificContentSettings::FromWebContents(web_contents())->
         OnContentBlocked(CONTENT_SETTINGS_TYPE_POPUPS, std::string());
     return true;
@@ -77,10 +91,14 @@
 }
 
 void PopupBlockerTabHelper::ShowBlockedPopup(int32 id) {
-  chrome::NavigateParams* params = blocked_popups_.Lookup(id);
-  if (!params)
+  BlockedRequest* popup = blocked_popups_.Lookup(id);
+  if (!popup)
     return;
-  chrome::Navigate(params);
+  chrome::Navigate(&popup->params);
+  if (popup->params.target_contents) {
+    popup->params.target_contents->Send(new ChromeViewMsg_SetWindowFeatures(
+        popup->params.target_contents->GetRoutingID(), popup->window_features));
+  }
   blocked_popups_.Remove(id);
   if (blocked_popups_.IsEmpty())
     PopupNotificationVisibilityChanged(false);
@@ -90,7 +108,13 @@
   return blocked_popups_.size();
 }
 
-IDMap<chrome::NavigateParams, IDMapOwnPointer>&
-PopupBlockerTabHelper::GetBlockedPopupRequests() {
-  return blocked_popups_;
+std::map<int32, GURL> PopupBlockerTabHelper::GetBlockedPopupRequests() {
+  std::map<int32, GURL> result;
+  for (IDMap<BlockedRequest, IDMapOwnPointer>::const_iterator iter(
+           &blocked_popups_);
+       !iter.IsAtEnd();
+       iter.Advance()) {
+    result[iter.GetCurrentKey()] = iter.GetCurrentValue()->params.url;
+  }
+  return result;
 }
diff --git a/chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h b/chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h
index 1526054..9631742 100644
--- a/chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h
+++ b/chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h
@@ -5,13 +5,21 @@
 #ifndef CHROME_BROWSER_UI_BLOCKED_CONTENT_POPUP_BLOCKER_TAB_HELPER_H_
 #define CHROME_BROWSER_UI_BLOCKED_CONTENT_POPUP_BLOCKER_TAB_HELPER_H_
 
+#include <map>
+
 #include "base/id_map.h"
 #include "content/public/browser/web_contents_observer.h"
 #include "content/public/browser/web_contents_user_data.h"
 
 namespace chrome {
 struct NavigateParams;
-};
+}
+
+namespace WebKit {
+struct WebWindowFeatures;
+}
+
+class GURL;
 
 // Per-tab class to manage blocked popups.
 class PopupBlockerTabHelper
@@ -22,7 +30,8 @@
 
   // Returns true if the popup request defined by |params| should be blocked.
   // In that case, it is also added to the |blocked_contents_| container.
-  bool MaybeBlockPopup(const chrome::NavigateParams& params);
+  bool MaybeBlockPopup(const chrome::NavigateParams& params,
+                       const WebKit::WebWindowFeatures& window_features);
 
   // Creates the blocked popup with |popup_id|.
   void ShowBlockedPopup(int32 popup_id);
@@ -31,8 +40,7 @@
   size_t GetBlockedPopupsCount() const;
 
   // Returns the mapping from popup IDs to blocked popup requests.
-  IDMap<chrome::NavigateParams, IDMapOwnPointer>&
-  GetBlockedPopupRequests();
+  std::map<int32, GURL> GetBlockedPopupRequests();
 
   // content::WebContentsObserver overrides:
   virtual void DidNavigateMainFrame(
@@ -40,13 +48,15 @@
       const content::FrameNavigateParams& params) OVERRIDE;
 
  private:
-  explicit PopupBlockerTabHelper(content::WebContents* web_contents);
+  struct BlockedRequest;
   friend class content::WebContentsUserData<PopupBlockerTabHelper>;
 
+  explicit PopupBlockerTabHelper(content::WebContents* web_contents);
+
   // Called when the blocked popup notification is shown or hidden.
   void PopupNotificationVisibilityChanged(bool visible);
 
-  IDMap<chrome::NavigateParams, IDMapOwnPointer> blocked_popups_;
+  IDMap<BlockedRequest, IDMapOwnPointer> blocked_popups_;
 
   DISALLOW_COPY_AND_ASSIGN(PopupBlockerTabHelper);
 };
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index 3020251..8fb374d 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -88,6 +88,7 @@
 #include "chrome/browser/themes/theme_service.h"
 #include "chrome/browser/themes/theme_service_factory.h"
 #include "chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.h"
+#include "chrome/browser/ui/autofill/tab_autofill_manager_delegate.h"
 #include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h"
 #include "chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h"
 #include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h"
@@ -1083,6 +1084,9 @@
   // This needs to be called after UpdateSearchState().
   if (instant_controller_)
     instant_controller_->ActiveTabChanged();
+
+  autofill::TabAutofillManagerDelegate::FromWebContents(new_contents)->
+      TabActivated(reason);
 }
 
 void Browser::TabMoved(WebContents* contents,
@@ -1289,8 +1293,10 @@
          params.disposition == NEW_BACKGROUND_TAB) &&
         !params.user_gesture && !CommandLine::ForCurrentProcess()->HasSwitch(
                                     switches::kDisablePopupBlocking)) {
-      if (popup_blocker_helper->MaybeBlockPopup(nav_params))
+      if (popup_blocker_helper->MaybeBlockPopup(nav_params,
+                                                WebWindowFeatures())) {
         return NULL;
+      }
     }
   }
 
@@ -1538,7 +1544,7 @@
     else
       nav_params.disposition = disposition;
 
-    return !popup_blocker_helper->MaybeBlockPopup(nav_params);
+    return !popup_blocker_helper->MaybeBlockPopup(nav_params, features);
   }
 
   return true;
diff --git a/chrome/browser/ui/content_settings/content_setting_bubble_model.cc b/chrome/browser/ui/content_settings/content_setting_bubble_model.cc
index b2bd578..c50ca8b 100644
--- a/chrome/browser/ui/content_settings/content_setting_bubble_model.cc
+++ b/chrome/browser/ui/content_settings/content_setting_bubble_model.cc
@@ -547,15 +547,13 @@
 void ContentSettingPopupBubbleModel::SetPopups() {
   if (CommandLine::ForCurrentProcess()->HasSwitch(
           switches::kEnableBetterPopupBlocking)) {
-    IDMap<chrome::NavigateParams, IDMapOwnPointer>& blocked_popups =
+    std::map<int32, GURL> blocked_popups =
         PopupBlockerTabHelper::FromWebContents(web_contents())
             ->GetBlockedPopupRequests();
-    for (IDMap<chrome::NavigateParams, IDMapOwnPointer>::const_iterator
-             iter(&blocked_popups);
-         !iter.IsAtEnd();
-         iter.Advance()) {
-
-      std::string title(iter.GetCurrentValue()->url.spec());
+    for (std::map<int32, GURL>::const_iterator iter = blocked_popups.begin();
+         iter != blocked_popups.end();
+         ++iter) {
+      std::string title(iter->second.spec());
       // The popup may not have a valid URL.
       if (title.empty())
         title = l10n_util::GetStringUTF8(IDS_TAB_LOADING_TITLE);
@@ -563,7 +561,7 @@
           ui::ResourceBundle::GetSharedInstance().GetImageNamed(
               IDR_DEFAULT_FAVICON),
           title,
-          iter.GetCurrentKey());
+          iter->first);
       add_popup(popup_item);
     }
     return;
diff --git a/chrome/browser/ui/gesture_prefs_observer_factory_aura.cc b/chrome/browser/ui/gesture_prefs_observer_factory_aura.cc
index 7c593fa..73c59c8 100644
--- a/chrome/browser/ui/gesture_prefs_observer_factory_aura.cc
+++ b/chrome/browser/ui/gesture_prefs_observer_factory_aura.cc
@@ -55,7 +55,9 @@
       { prefs::kOverscrollVerticalThresholdComplete,
         OVERSCROLL_CONFIG_VERT_THRESHOLD_COMPLETE },
       { prefs::kOverscrollMinimumThresholdStart,
-        OVERSCROLL_CONFIG_MIN_THRESHOLD_START },
+        OVERSCROLL_CONFIG_HORIZ_THRESHOLD_START },
+      { prefs::kOverscrollVerticalThresholdStart,
+        OVERSCROLL_CONFIG_VERT_THRESHOLD_START },
       { prefs::kOverscrollHorizontalResistThreshold,
         OVERSCROLL_CONFIG_HORIZ_RESIST_AFTER },
       { prefs::kOverscrollVerticalResistThreshold,
diff --git a/chrome/browser/ui/search/search_tab_helper.cc b/chrome/browser/ui/search/search_tab_helper.cc
index 1a226db..33e119b 100644
--- a/chrome/browser/ui/search/search_tab_helper.cc
+++ b/chrome/browser/ui/search/search_tab_helper.cc
@@ -195,8 +195,16 @@
 void SearchTabHelper::DetermineIfPageSupportsInstant() {
   Profile* profile =
       Profile::FromBrowserContext(web_contents_->GetBrowserContext());
-  if (!chrome::ShouldAssignURLToInstantRenderer(web_contents_->GetURL(),
-                                                profile)) {
+  // Use the underlying URL rather than the virtual URL when checking whether
+  // this navigation can land in the Instant process. Otherwise this check
+  // would fail if a URL like chrome://newtab is being rewritten to an Instant
+  // URL.
+  // TODO(samarth): actually check whether this WebContents is rendered in an
+  // Instant process rather than checking the URL.
+  const content::NavigationEntry* entry =
+      web_contents_->GetController().GetActiveEntry();
+  const GURL& current_url = entry ? entry->GetURL() : web_contents_->GetURL();
+  if (!chrome::ShouldAssignURLToInstantRenderer(current_url, profile)) {
     // The page is not in the Instant process. This page does not support
     // instant. If we send an IPC message to a page that is not in the Instant
     // process, it will never receive it and will never respond. Therefore,
diff --git a/chrome/browser/ui/search_engines/template_url_table_model.cc b/chrome/browser/ui/search_engines/template_url_table_model.cc
index 918ae0f..072885c 100644
--- a/chrome/browser/ui/search_engines/template_url_table_model.cc
+++ b/chrome/browser/ui/search_engines/template_url_table_model.cc
@@ -252,14 +252,7 @@
   template_url_service_->RemoveObserver(this);
   TemplateURL* template_url = GetTemplateURL(index);
 
-  scoped_ptr<ModelEntry> entry(entries_[index]);
-  entries_.erase(entries_.begin() + index);
-  if (index < last_search_engine_index_)
-    --last_search_engine_index_;
-  if (index < last_other_engine_index_)
-    --last_other_engine_index_;
-  if (observer_)
-    observer_->OnItemsRemoved(index, 1);
+  scoped_ptr<ModelEntry> entry(RemoveEntry(index));
 
   // Make sure to remove from the table model first, otherwise the
   // TemplateURL would be freed.
@@ -280,13 +273,9 @@
   data.SetURL(url);
   TemplateURL* turl = new TemplateURL(template_url_service_->profile(), data);
   template_url_service_->Add(turl);
-  ModelEntry* entry = new ModelEntry(this, turl);
+  scoped_ptr<ModelEntry> entry(new ModelEntry(this, turl));
   template_url_service_->AddObserver(this);
-  entries_.insert(entries_.begin() + index, entry);
-  if (index <= last_other_engine_index_)
-    ++last_other_engine_index_;
-  if (observer_)
-    observer_->OnItemsAdded(index, 1);
+  AddEntry(index, entry.Pass());
 }
 
 void TemplateURLTableModel::ModifyTemplateURL(int index,
@@ -332,15 +321,9 @@
   if (index < last_search_engine_index_)
     return index;  // Already in the main group.
 
-  ModelEntry* current_entry = entries_[index];
-  entries_.erase(index + entries_.begin());
-  if (observer_)
-    observer_->OnItemsRemoved(index, 1);
-
+  scoped_ptr<ModelEntry> current_entry(RemoveEntry(index));
   const int new_index = last_search_engine_index_++;
-  entries_.insert(entries_.begin() + new_index, current_entry);
-  if (observer_)
-    observer_->OnItemsAdded(new_index, 1);
+  AddEntry(new_index, current_entry.Pass());
   return new_index;
 }
 
@@ -393,3 +376,23 @@
 void TemplateURLTableModel::OnTemplateURLServiceChanged() {
   Reload();
 }
+
+scoped_ptr<ModelEntry> TemplateURLTableModel::RemoveEntry(int index) {
+  scoped_ptr<ModelEntry> entry(entries_[index]);
+  entries_.erase(index + entries_.begin());
+  if (index < last_search_engine_index_)
+    --last_search_engine_index_;
+  if (index < last_other_engine_index_)
+    --last_other_engine_index_;
+  if (observer_)
+    observer_->OnItemsRemoved(index, 1);
+  return entry.Pass();
+}
+
+void TemplateURLTableModel::AddEntry(int index, scoped_ptr<ModelEntry> entry) {
+  entries_.insert(entries_.begin() + index, entry.release());
+  if (index <= last_other_engine_index_)
+    ++last_other_engine_index_;
+  if (observer_)
+    observer_->OnItemsAdded(index, 1);
+}
diff --git a/chrome/browser/ui/search_engines/template_url_table_model.h b/chrome/browser/ui/search_engines/template_url_table_model.h
index 5e00d97..864b48c 100644
--- a/chrome/browser/ui/search_engines/template_url_table_model.h
+++ b/chrome/browser/ui/search_engines/template_url_table_model.h
@@ -9,6 +9,7 @@
 #include <vector>
 
 #include "base/compiler_specific.h"
+#include "base/memory/scoped_ptr.h"
 #include "base/strings/string16.h"
 #include "chrome/browser/search_engines/template_url_service_observer.h"
 #include "ui/base/models/table_model.h"
@@ -110,6 +111,12 @@
   // TemplateURLServiceObserver notification.
   virtual void OnTemplateURLServiceChanged() OVERRIDE;
 
+  // Removes the entry at |index| from |entries_| and returns the removed item.
+  scoped_ptr<ModelEntry> RemoveEntry(int index);
+
+  // Adds |entry| to |entries_| at |index| and takes ownership.
+  void AddEntry(int index, scoped_ptr<ModelEntry> entry);
+
   ui::TableModelObserver* observer_;
 
   // The entries.
diff --git a/chrome/browser/ui/views/autofill/autofill_dialog_views.cc b/chrome/browser/ui/views/autofill/autofill_dialog_views.cc
index a376e94..478abc6 100644
--- a/chrome/browser/ui/views/autofill/autofill_dialog_views.cc
+++ b/chrome/browser/ui/views/autofill/autofill_dialog_views.cc
@@ -33,6 +33,8 @@
 #include "ui/gfx/skia_util.h"
 #include "ui/views/background.h"
 #include "ui/views/border.h"
+#include "ui/views/bubble/bubble_border.h"
+#include "ui/views/bubble/bubble_frame_view.h"
 #include "ui/views/controls/button/blue_button.h"
 #include "ui/views/controls/button/checkbox.h"
 #include "ui/views/controls/button/image_button.h"
@@ -535,7 +537,6 @@
     : image_view_(new views::ImageView()),
       message_stack_(new views::View()),
       button_(new views::BlueButton(listener, string16())) {
-  set_border(views::Border::CreateEmptyBorder(12, 12, 12, 12));
   set_background(views::Background::CreateSolidBackground(GetNativeTheme()->
       GetSystemColor(ui::NativeTheme::kColorId_DialogBackground)));
 
@@ -620,8 +621,12 @@
   fade_out_.reset();
 }
 
+gfx::Insets AutofillDialogViews::OverlayView::GetInsets() const {
+  return gfx::Insets(12, 12, 12, 12);
+}
+
 void AutofillDialogViews::OverlayView::Layout() {
-  gfx::Rect bounds = GetContentsBounds();
+  gfx::Rect bounds = ContentBoundsSansBubbleBorder();
   if (!message_stack_->visible()) {
     image_view_->SetBoundsRect(bounds);
     return;
@@ -653,8 +658,9 @@
 void AutofillDialogViews::OverlayView::OnPaint(gfx::Canvas* canvas) {
   // BubbleFrameView doesn't mask the window, it just draws the border via
   // image assets. Match that rounding here.
-  static const SkScalar kCornerRadius = SkIntToScalar(2);
-  gfx::Rect rect = GetContentsBounds();
+  gfx::Rect rect = ContentBoundsSansBubbleBorder();
+  const SkScalar kCornerRadius = SkIntToScalar(
+      GetBubbleBorder() ? GetBubbleBorder()->GetBorderCornerRadius() : 2);
   gfx::Path window_mask;
   window_mask.addRoundRect(gfx::RectToSkRect(rect),
                            kCornerRadius, kCornerRadius);
@@ -706,6 +712,24 @@
   views::View::PaintChildren(canvas);
 }
 
+views::BubbleBorder* AutofillDialogViews::OverlayView::GetBubbleBorder() {
+  views::View* frame = GetWidget()->non_client_view()->frame_view();
+  std::string bubble_frame_view_name(views::BubbleFrameView::kViewClassName);
+  if (frame->GetClassName() == bubble_frame_view_name)
+    return static_cast<views::BubbleFrameView*>(frame)->bubble_border();
+  NOTREACHED();
+  return NULL;
+}
+
+gfx::Rect AutofillDialogViews::OverlayView::ContentBoundsSansBubbleBorder() {
+  gfx::Rect bounds = GetContentsBounds();
+  int bubble_width = 5;
+  if (GetBubbleBorder())
+    bubble_width = GetBubbleBorder()->GetBorderThickness();
+  bounds.Inset(bubble_width, bubble_width, bubble_width, bubble_width);
+  return bounds;
+}
+
 // AutofillDialogViews::NotificationArea ---------------------------------------
 
 AutofillDialogViews::NotificationArea::NotificationArea(
diff --git a/chrome/browser/ui/views/autofill/autofill_dialog_views.h b/chrome/browser/ui/views/autofill/autofill_dialog_views.h
index cae7ce1..27df407 100644
--- a/chrome/browser/ui/views/autofill/autofill_dialog_views.h
+++ b/chrome/browser/ui/views/autofill/autofill_dialog_views.h
@@ -35,6 +35,7 @@
 }
 
 namespace views {
+class BubbleBorder;
 class Checkbox;
 class Combobox;
 class FocusableBorder;
@@ -292,12 +293,19 @@
     virtual void AnimationEnded(const ui::Animation* animation) OVERRIDE;
 
     // views::View implementation:
+    virtual gfx::Insets GetInsets() const OVERRIDE;
     virtual void Layout() OVERRIDE;
     virtual const char* GetClassName() const OVERRIDE;
     virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
     virtual void PaintChildren(gfx::Canvas* canvas) OVERRIDE;
 
    private:
+    // Gets the border of the non-client frame view as a BubbleBorder.
+    views::BubbleBorder* GetBubbleBorder();
+
+    // Gets the bounds of this view without the frame view's bubble border.
+    gfx::Rect ContentBoundsSansBubbleBorder();
+
     // Child View. Front and center.
     views::ImageView* image_view_;
     // Child View. When visible, below |image_view_|.
diff --git a/chrome/browser/ui/views/avatar_menu_bubble_view.cc b/chrome/browser/ui/views/avatar_menu_bubble_view.cc
index 6119289..3089862 100644
--- a/chrome/browser/ui/views/avatar_menu_bubble_view.cc
+++ b/chrome/browser/ui/views/avatar_menu_bubble_view.cc
@@ -472,6 +472,7 @@
 
 // static
 AvatarMenuBubbleView* AvatarMenuBubbleView::avatar_bubble_ = NULL;
+bool AvatarMenuBubbleView::close_on_deactivate_ = true;
 
 // static
 void AvatarMenuBubbleView::ShowBubble(
@@ -487,6 +488,7 @@
   avatar_bubble_ = new AvatarMenuBubbleView(
       anchor_view, arrow, anchor_rect, browser);
   views::BubbleDelegateView::CreateBubble(avatar_bubble_);
+  avatar_bubble_->set_close_on_deactivate(close_on_deactivate_);
   avatar_bubble_->SetBackgroundColors();
   avatar_bubble_->SetAlignment(border_alignment);
   avatar_bubble_->GetWidget()->Show();
diff --git a/chrome/browser/ui/views/avatar_menu_bubble_view.h b/chrome/browser/ui/views/avatar_menu_bubble_view.h
index 29597b1..c49ae45 100644
--- a/chrome/browser/ui/views/avatar_menu_bubble_view.h
+++ b/chrome/browser/ui/views/avatar_menu_bubble_view.h
@@ -79,6 +79,13 @@
   virtual void OnAvatarMenuModelChanged(
       AvatarMenuModel* avatar_menu_model) OVERRIDE;
 
+  // We normally close the bubble any time it becomes inactive but this can lead
+  // to flaky tests where unexpected UI events are triggering this behavior.
+  // Tests should call this with "false" for more consistent operation.
+  static void set_close_on_deactiavte(bool close) {
+    close_on_deactivate_ = close;
+  }
+
  private:
   AvatarMenuBubbleView(views::View* anchor_view,
                        views::BubbleBorder::Arrow arrow,
@@ -118,6 +125,7 @@
   views::Link* switch_profile_link_;
 
   static AvatarMenuBubbleView* avatar_bubble_;
+  static bool close_on_deactivate_;
 
   // Is set to true if the managed user has clicked on Switch Users.
   bool expanded_;
diff --git a/chrome/browser/ui/views/avatar_menu_button_browsertest.cc b/chrome/browser/ui/views/avatar_menu_button_browsertest.cc
index c6e21b3..1a6c4ff1 100644
--- a/chrome/browser/ui/views/avatar_menu_button_browsertest.cc
+++ b/chrome/browser/ui/views/avatar_menu_button_browsertest.cc
@@ -96,6 +96,8 @@
   AvatarMenuButton* button = GetAvatarMenuButton();
   ASSERT_TRUE(button);
 
+  AvatarMenuBubbleView::set_close_on_deactiavte(false);
+  ProfileChooserView::set_close_on_deactiavte(false);
   static_cast<views::MenuButtonListener*>(button)->OnMenuButtonClicked(
       NULL, gfx::Point());
   base::MessageLoop::current()->RunUntilIdle();
diff --git a/chrome/browser/ui/views/profile_chooser_view.cc b/chrome/browser/ui/views/profile_chooser_view.cc
index f432e77..afcd69f 100644
--- a/chrome/browser/ui/views/profile_chooser_view.cc
+++ b/chrome/browser/ui/views/profile_chooser_view.cc
@@ -30,6 +30,7 @@
 
 // static
 ProfileChooserView* ProfileChooserView::profile_bubble_ = NULL;
+bool ProfileChooserView::close_on_deactivate_ = true;
 
 // static
 void ProfileChooserView::ShowBubble(
@@ -45,6 +46,7 @@
   profile_bubble_ = new ProfileChooserView(
       anchor_view, arrow, anchor_rect, browser);
   views::BubbleDelegateView::CreateBubble(profile_bubble_);
+  profile_bubble_->set_close_on_deactivate(close_on_deactivate_);
   profile_bubble_->SetAlignment(border_alignment);
   profile_bubble_->GetWidget()->Show();
 }
diff --git a/chrome/browser/ui/views/profile_chooser_view.h b/chrome/browser/ui/views/profile_chooser_view.h
index 54dcb43..eb33739 100644
--- a/chrome/browser/ui/views/profile_chooser_view.h
+++ b/chrome/browser/ui/views/profile_chooser_view.h
@@ -43,6 +43,13 @@
   static bool IsShowing();
   static void Hide();
 
+  // We normally close the bubble any time it becomes inactive but this can lead
+  // to flaky tests where unexpected UI events are triggering this behavior.
+  // Tests should call this with "false" for more consistent operation.
+  static void set_close_on_deactiavte(bool close) {
+    close_on_deactivate_ = close;
+  }
+
  private:
   friend class AvatarMenuButtonTest;
   FRIEND_TEST_ALL_PREFIXES(AvatarMenuButtonTest, NewSignOut);
@@ -72,6 +79,7 @@
       AvatarMenuModel* avatar_menu_model) OVERRIDE;
 
   static ProfileChooserView* profile_bubble_;
+  static bool close_on_deactivate_;
 
   views::View* CreateProfileImageView(const gfx::Image& icon, int side);
   views::View* CreateProfileCardView(size_t avatar_to_show);
diff --git a/chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views.cc b/chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views.cc
index bd4df7a..8abb284 100644
--- a/chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views.cc
+++ b/chrome/browser/ui/views/tab_contents/chrome_web_contents_view_delegate_views.cc
@@ -87,7 +87,9 @@
 }
 
 void ChromeWebContentsViewDelegateViews::TakeFocus(bool reverse) {
-  GetFocusManager()->AdvanceFocus(reverse);
+  views::FocusManager* focus_manager = GetFocusManager();
+  if (focus_manager)
+    focus_manager->AdvanceFocus(reverse);
 }
 
 void ChromeWebContentsViewDelegateViews::StoreFocus() {
diff --git a/chrome/browser/ui/webui/chromeos/salsa_ui.cc b/chrome/browser/ui/webui/chromeos/salsa_ui.cc
index eb0bbf2..5d16335 100644
--- a/chrome/browser/ui/webui/chromeos/salsa_ui.cc
+++ b/chrome/browser/ui/webui/chromeos/salsa_ui.cc
@@ -55,6 +55,7 @@
   prefs::kOverscrollHorizontalThresholdComplete,
   prefs::kOverscrollVerticalThresholdComplete,
   prefs::kOverscrollMinimumThresholdStart,
+  prefs::kOverscrollVerticalThresholdStart,
   prefs::kOverscrollHorizontalResistThreshold,
   prefs::kOverscrollVerticalResistThreshold,
   prefs::kImmersiveModeRevealDelayMs,
diff --git a/chrome/browser/ui/webui/identity_internals_ui.cc b/chrome/browser/ui/webui/identity_internals_ui.cc
index e575e49..3b0a167 100644
--- a/chrome/browser/ui/webui/identity_internals_ui.cc
+++ b/chrome/browser/ui/webui/identity_internals_ui.cc
@@ -19,6 +19,7 @@
 #include "content/public/browser/web_ui_controller.h"
 #include "content/public/browser/web_ui_data_source.h"
 #include "content/public/browser/web_ui_message_handler.h"
+#include "google_apis/gaia/gaia_auth_fetcher.h"
 #include "google_apis/gaia/gaia_constants.h"
 #include "grit/browser_resources.h"
 #include "grit/generated_resources.h"
diff --git a/chrome/browser/ui/webui/ntp/ntp_login_handler.cc b/chrome/browser/ui/webui/ntp/ntp_login_handler.cc
index a5c8050..f20351e 100644
--- a/chrome/browser/ui/webui/ntp/ntp_login_handler.cc
+++ b/chrome/browser/ui/webui/ntp/ntp_login_handler.cc
@@ -38,11 +38,11 @@
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/browser/web_ui.h"
+#include "content/public/common/page_zoom.h"
 #include "grit/chromium_strings.h"
 #include "grit/generated_resources.h"
 #include "net/base/escape.h"
 #include "skia/ext/image_operations.h"
-#include "third_party/WebKit/public/web/WebView.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/gfx/canvas.h"
 #include "ui/gfx/image/image.h"
@@ -164,8 +164,7 @@
     success = args->GetDouble(3, &height);
     DCHECK(success);
 
-    double zoom =
-        WebKit::WebView::zoomLevelToZoomFactor(web_contents->GetZoomLevel());
+    double zoom = content::ZoomLevelToZoomFactor(web_contents->GetZoomLevel());
     gfx::Rect rect(x * zoom, y * zoom, width * zoom, height * zoom);
 
     browser->window()->ShowAvatarBubble(web_ui()->GetWebContents(), rect);
diff --git a/chrome/browser/ui/webui/options/browser_options_handler.cc b/chrome/browser/ui/webui/options/browser_options_handler.cc
index 800b984..d6aed6a 100644
--- a/chrome/browser/ui/webui/options/browser_options_handler.cc
+++ b/chrome/browser/ui/webui/options/browser_options_handler.cc
@@ -79,7 +79,6 @@
 #include "grit/generated_resources.h"
 #include "grit/locale_settings.h"
 #include "grit/theme_resources.h"
-#include "third_party/WebKit/public/web/WebView.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/webui/web_ui_util.h"
@@ -1468,8 +1467,7 @@
 void BrowserOptionsHandler::HandleDefaultZoomFactor(const ListValue* args) {
   double zoom_factor;
   if (ExtractDoubleValue(args, &zoom_factor)) {
-    default_zoom_level_.SetValue(
-        WebKit::WebView::zoomFactorToZoomLevel(zoom_factor));
+    default_zoom_level_.SetValue(content::ZoomFactorToZoomLevel(zoom_factor));
   }
 }
 
@@ -1670,7 +1668,7 @@
   PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
   double default_zoom_level = pref_service->GetDouble(prefs::kDefaultZoomLevel);
   double default_zoom_factor =
-      WebKit::WebView::zoomLevelToZoomFactor(default_zoom_level);
+      content::ZoomLevelToZoomFactor(default_zoom_level);
 
   // Generate a vector of zoom factors from an array of known presets along with
   // the default factor added if necessary.
diff --git a/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc b/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc
index c8b991d..ad50697 100644
--- a/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc
+++ b/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc
@@ -1011,14 +1011,8 @@
 void InternetOptionsHandler::EnableCellularCallback(
     const base::ListValue* args) {
   NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler();
-  if (!handler->IsTechnologyEnabled(NetworkStateHandler::kMatchTypeMobile)) {
-    handler->SetTechnologyEnabled(
-        NetworkStateHandler::kMatchTypeMobile, true,
-        base::Bind(&ShillError, "EnableCellularCallback"));
-    return;
-  }
-  const DeviceState* device = handler->GetDeviceStateByType(
-      NetworkStateHandler::kMatchTypeMobile);
+  const DeviceState* device =
+      handler->GetDeviceStateByType(flimflam::kTypeCellular);
   if (!device) {
     LOG(ERROR) << "Mobile device not found.";
     return;
@@ -1028,6 +1022,12 @@
                                   SimDialogDelegate::SIM_DIALOG_UNLOCK);
     return;
   }
+  if (!handler->IsTechnologyEnabled(flimflam::kTypeCellular)) {
+    handler->SetTechnologyEnabled(
+        flimflam::kTypeCellular, true,
+        base::Bind(&ShillError, "EnableCellularCallback"));
+    return;
+  }
   if (device->IsSimAbsent()) {
     MobileConfig* config = MobileConfig::GetInstance();
     if (config->IsReady()) {
diff --git a/chrome/browser/ui/webui/options/reset_profile_settings_handler.cc b/chrome/browser/ui/webui/options/reset_profile_settings_handler.cc
index f28ec88..68ee2bb 100644
--- a/chrome/browser/ui/webui/options/reset_profile_settings_handler.cc
+++ b/chrome/browser/ui/webui/options/reset_profile_settings_handler.cc
@@ -28,6 +28,7 @@
 namespace options {
 
 ResetProfileSettingsHandler::ResetProfileSettingsHandler() {
+  google_util::GetBrand(&brandcode_);
 }
 
 ResetProfileSettingsHandler::~ResetProfileSettingsHandler() {
@@ -68,8 +69,8 @@
 
 void ResetProfileSettingsHandler::HandleResetProfileSettings(
     const ListValue* /*value*/) {
-  DCHECK(config_fetcher_);
-  if (config_fetcher_->IsActive()) {
+  DCHECK(brandcode_.empty() || config_fetcher_);
+  if (config_fetcher_ && config_fetcher_->IsActive()) {
     // Reset once the prefs are fetched.
     config_fetcher_->SetCallback(
         base::Bind(&ResetProfileSettingsHandler::ResetProfile,
@@ -84,11 +85,13 @@
 }
 
 void ResetProfileSettingsHandler::OnShowResetProfileDialog(const ListValue*) {
-  // TODO(vasilii): use a real request.
+  if (brandcode_.empty())
+    return;
   config_fetcher_.reset(new BrandcodeConfigFetcher(
       base::Bind(&ResetProfileSettingsHandler::OnSettingsFetched,
                  Unretained(this)),
-      GURL("https://tools.google.com/service/update2")));
+      GURL("https://tools.google.com/service/update2"),
+      brandcode_));
 }
 
 void ResetProfileSettingsHandler::OnSettingsFetched() {
@@ -100,13 +103,18 @@
 void ResetProfileSettingsHandler::ResetProfile() {
   DCHECK(resetter_);
   DCHECK(!resetter_->IsActive());
-  DCHECK(config_fetcher_);
-  DCHECK(!config_fetcher_->IsActive());
 
-  scoped_ptr<BrandcodedDefaultSettings> default_settings =
-      config_fetcher_->GetSettings();
-  config_fetcher_.reset();
-  // If we failed to fetch BrandcodedDefaultSettings, use default settings.
+  scoped_ptr<BrandcodedDefaultSettings> default_settings;
+  if (config_fetcher_) {
+    DCHECK(!config_fetcher_->IsActive());
+    default_settings = config_fetcher_->GetSettings();
+    config_fetcher_.reset();
+  } else {
+    DCHECK(brandcode_.empty());
+  }
+
+  // If failed to fetch BrandcodedDefaultSettings or this is an organic
+  // installation, use default settings.
   if (!default_settings)
     default_settings.reset(new BrandcodedDefaultSettings);
   resetter_->Reset(
diff --git a/chrome/browser/ui/webui/options/reset_profile_settings_handler.h b/chrome/browser/ui/webui/options/reset_profile_settings_handler.h
index 999b023..9431590 100644
--- a/chrome/browser/ui/webui/options/reset_profile_settings_handler.h
+++ b/chrome/browser/ui/webui/options/reset_profile_settings_handler.h
@@ -54,6 +54,9 @@
 
   scoped_ptr<BrandcodeConfigFetcher> config_fetcher_;
 
+  // Contains Chrome brand code; empty for organic Chrome.
+  std::string brandcode_;
+
   DISALLOW_COPY_AND_ASSIGN(ResetProfileSettingsHandler);
 };
 
diff --git a/chrome/browser/upgrade_detector_impl.cc b/chrome/browser/upgrade_detector_impl.cc
index 15602d4..0bfdbf5 100644
--- a/chrome/browser/upgrade_detector_impl.cc
+++ b/chrome/browser/upgrade_detector_impl.cc
@@ -14,6 +14,7 @@
 #include "base/memory/singleton.h"
 #include "base/metrics/field_trial.h"
 #include "base/path_service.h"
+#include "base/process/launch.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/browser_tests.isolate b/chrome/browser_tests.isolate
index 71bbb7b..9c9ad09 100644
--- a/chrome/browser_tests.isolate
+++ b/chrome/browser_tests.isolate
@@ -8,7 +8,7 @@
         'command': [
           '../testing/xvfb.py',
           '<(PRODUCT_DIR)',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '--use-less-jobs',
           '<(PRODUCT_DIR)/browser_tests<(EXECUTABLE_SUFFIX)',
         ],
@@ -41,6 +41,8 @@
         'isolate_dependency_tracked': [
           '../ppapi/tests/test_case.html',
           '../ppapi/tests/test_page.css',
+          '../tools/swarm_client/run_isolated.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '../testing/test_env.py',
           '<(PRODUCT_DIR)/browser_tests<(EXECUTABLE_SUFFIX)',
           '<(PRODUCT_DIR)/ppapi_nacl_tests_glibc.nmf',
@@ -68,7 +70,6 @@
           '../third_party/safe_browsing/',
           '../third_party/simplejson/',
           '../third_party/tlslite/',
-          '../tools/swarm_client/',
           '<(PRODUCT_DIR)/nacl_test_data/',
           '<(PRODUCT_DIR)/pnacl/',
           '<(PRODUCT_DIR)/pseudo_locales/',
@@ -125,7 +126,7 @@
       'variables': {
         'command': [
           '../testing/test_env.py',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '--use-less-jobs',
           '<(PRODUCT_DIR)/browser_tests<(EXECUTABLE_SUFFIX)',
         ],
diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp
index 767a22a..b065db8 100644
--- a/chrome/chrome.gyp
+++ b/chrome/chrome.gyp
@@ -213,6 +213,7 @@
             '../third_party/icu/icu.gyp:icui18n',
             '../third_party/icu/icu.gyp:icuuc',
             '../third_party/leveldatabase/leveldatabase.gyp:leveldatabase',
+            '../third_party/libusb/libusb.gyp:libusb',
           ],
           'include_dirs': [
             '..',
@@ -247,6 +248,9 @@
               ],
             }],
             ['OS=="android"', {
+              'dependencies!': [
+                '../third_party/libusb/libusb.gyp:libusb',
+              ],
               'sources!': [
                 'browser/devtools/browser_list_tabcontents_provider.cc',
                 'browser/devtools/devtools_window.cc',
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 194f834..74ba444 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -320,6 +320,8 @@
         'browser/feedback/feedback_data.h',
         'browser/feedback/feedback_util.cc',
         'browser/feedback/feedback_util.h',
+        'browser/feedback/tracing_manager.cc',
+        'browser/feedback/tracing_manager.h',
         'browser/captive_portal/captive_portal_detector.cc',
         'browser/captive_portal/captive_portal_detector.h',
         'browser/captive_portal/captive_portal_login_detector.cc',
diff --git a/chrome/chrome_browser_chromeos.gypi b/chrome/chrome_browser_chromeos.gypi
index 3e713d7..0bdcfa9 100644
--- a/chrome/chrome_browser_chromeos.gypi
+++ b/chrome/chrome_browser_chromeos.gypi
@@ -320,6 +320,10 @@
         'browser/chromeos/extensions/default_app_order.h',
         'browser/chromeos/extensions/echo_private_api.cc',
         'browser/chromeos/extensions/echo_private_api.h',
+        'browser/chromeos/extensions/external_cache.cc',
+        'browser/chromeos/extensions/external_cache.h',
+        'browser/chromeos/extensions/external_pref_cache_loader.cc',
+        'browser/chromeos/extensions/external_pref_cache_loader.h',
         'browser/chromeos/extensions/file_manager/file_handler_util.cc',
         'browser/chromeos/extensions/file_manager/file_handler_util.h',
         'browser/chromeos/extensions/file_manager/file_manager_event_router.cc',
@@ -351,8 +355,6 @@
         'browser/chromeos/fileapi/file_system_backend.cc',
         'browser/chromeos/fileapi/file_system_backend.h',
         'browser/chromeos/fileapi/file_system_backend_delegate.h',
-        'browser/chromeos/fileapi/remote_file_system_operation.cc',
-        'browser/chromeos/fileapi/remote_file_system_operation.h',
         'browser/chromeos/imageburner/burn_controller.cc',
         'browser/chromeos/imageburner/burn_controller.h',
         'browser/chromeos/imageburner/burn_device_handler.cc',
@@ -856,12 +858,6 @@
             'browser/chromeos/extensions/input_method_api.h',
             'browser/chromeos/extensions/media_player_api.cc',
             'browser/chromeos/extensions/media_player_api.h',
-            'browser/chromeos/extensions/networking_private_api.cc',
-            'browser/chromeos/extensions/networking_private_api.h',
-            'browser/chromeos/extensions/networking_private_event_router.cc',
-            'browser/chromeos/extensions/networking_private_event_router.h',
-            'browser/chromeos/extensions/networking_private_event_router_factory.cc',
-            'browser/chromeos/extensions/networking_private_event_router_factory.h',
             'browser/chromeos/extensions/wallpaper_manager_util.cc',
             'browser/chromeos/extensions/wallpaper_manager_util.h',
             'browser/chromeos/extensions/wallpaper_private_api.cc',
diff --git a/chrome/chrome_browser_extensions.gypi b/chrome/chrome_browser_extensions.gypi
index ba052bd..1d94b37 100644
--- a/chrome/chrome_browser_extensions.gypi
+++ b/chrome/chrome_browser_extensions.gypi
@@ -322,6 +322,13 @@
         'browser/extensions/api/music_manager_private/device_id_win.cc',
         'browser/extensions/api/music_manager_private/music_manager_private_api.cc',
         'browser/extensions/api/music_manager_private/music_manager_private_api.h',
+        'browser/extensions/api/networking_private/networking_private_api_chromeos.cc',
+        'browser/extensions/api/networking_private/networking_private_api_nonchromeos.cc',
+        'browser/extensions/api/networking_private/networking_private_api.h',
+        'browser/extensions/api/networking_private/networking_private_event_router_chromeos.cc',
+        'browser/extensions/api/networking_private/networking_private_event_router.h',
+        'browser/extensions/api/networking_private/networking_private_event_router_factory.cc',
+        'browser/extensions/api/networking_private/networking_private_event_router_factory.h',
         'browser/extensions/api/notifications/notifications_api.cc',
         'browser/extensions/api/notifications/notifications_api.h',
         'browser/extensions/api/omnibox/omnibox_api.cc',
@@ -787,6 +794,7 @@
             'browser/extensions/api/audio/audio_service.cc',
             'browser/extensions/api/feedback_private/feedback_service_nonchromeos.cc',
             'browser/extensions/api/diagnostics/diagnostics_api_nonchromeos.cc',
+            'browser/extensions/api/networking_private/networking_private_api_nonchromeos.cc',
             'browser/extensions/default_apps.cc',
             'browser/extensions/default_apps.h',
           ],
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 84b38ff..e9f7274 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -1201,7 +1201,6 @@
         'browser/chromeos/extensions/file_manager/file_manager_notifications_browsertest.cc',
         'browser/chromeos/extensions/info_private_apitest.cc',
         'browser/chromeos/extensions/input_method_apitest_chromeos.cc',
-        'browser/chromeos/extensions/networking_private_apitest.cc',
         'browser/chromeos/extensions/wallpaper_private_apitest.cc',
         'browser/chromeos/input_method/input_method_engine_ibus_browserttests.cc',
         'browser/chromeos/kiosk_mode/mock_kiosk_mode_settings.cc',
@@ -1316,6 +1315,7 @@
         'browser/extensions/api/metrics_private/metrics_apitest.cc',
         'browser/extensions/api/module/module_apitest.cc',
         'browser/extensions/api/music_manager_private/music_manager_private_browsertest.cc',
+        'browser/extensions/api/networking_private/networking_private_apitest.cc',
         'browser/extensions/api/notifications/notifications_apitest.cc',
         'browser/extensions/api/omnibox/omnibox_api_browsertest.cc',
         'browser/extensions/api/page_capture/page_capture_apitest.cc',
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc
index 667c868..83d2ce9 100644
--- a/chrome/common/chrome_switches.cc
+++ b/chrome/common/chrome_switches.cc
@@ -302,6 +302,9 @@
 // Disables retrieval of PAC URLs from DHCP as per the WPAD standard.
 const char kDisableDhcpWpad[]               = "disable-dhcp-wpad";
 
+// Force-disables DNS probes on main frame DNS errors.
+const char kDisableDnsProbes[]              = "disable-dns-probes";
+
 // Disable extensions.
 const char kDisableExtensions[]             = "disable-extensions";
 
@@ -532,6 +535,10 @@
 // If true devtools experimental settings are enabled.
 const char kEnableDevToolsExperiments[]     = "enable-devtools-experiments";
 
+// Force-enables DNS probes on main frame DNS errors.  (The user must still
+// opt in to "Use web service to resolve navigation errors".)
+const char kEnableDnsProbes[]               = "enable-dns-probes";
+
 // Enables extensions to be easily installed from sites other than the web
 // store. Without this flag, they can still be installed, but must be manually
 // dragged onto chrome://extensions/.
@@ -865,6 +872,9 @@
 // app/extension ID given, and then prompt the user to download and install it.
 const char kInstallFromWebstore[]           = "install-from-webstore";
 
+// Causes Chrome to load this URL instead of chrome://newtab for New Tab pages.
+const char kInstantNewTabURL[]              = "instant-new-tab-url";
+
 // Marks a renderer as an Instant process.
 const char kInstantProcess[]                = "instant-process";
 
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h
index 5b36cf6..9cb516b 100644
--- a/chrome/common/chrome_switches.h
+++ b/chrome/common/chrome_switches.h
@@ -94,6 +94,7 @@
 extern const char kDisableCustomJumpList[];
 extern const char kDisableDefaultApps[];
 extern const char kDisableDhcpWpad[];
+extern const char kDisableDnsProbes[];
 extern const char kDisableExtensionsFileAccessCheck[];
 extern const char kDisableExtensionsHttpThrottling[];
 extern const char kDisableExtensionsResourceWhitelist[];
@@ -157,6 +158,7 @@
 extern const char kEnableContacts[];
 extern const char kEnableDeviceDiscovery[];
 extern const char kEnableDevToolsExperiments[];
+extern const char kEnableDnsProbes[];
 extern const char kEnableExperimentalExtensionApis[];
 extern const char kEnableExtensionActivityLogging[];
 extern const char kEnableExtensionActivityLogTesting[];
@@ -239,6 +241,7 @@
 extern const char kIgnoreUrlFetcherCertRequests[];
 extern const char kIncognito[];
 extern const char kInstallFromWebstore[];
+extern const char kInstantNewTabURL[];
 extern const char kInstantProcess[];
 extern const char kKeepAliveForTest[];
 extern const char kKioskMode[];
diff --git a/chrome/common/extensions/api/_permission_features.json b/chrome/common/extensions/api/_permission_features.json
index 308af3c..b14833b 100644
--- a/chrome/common/extensions/api/_permission_features.json
+++ b/chrome/common/extensions/api/_permission_features.json
@@ -193,6 +193,10 @@
       "extension", "packaged_app"
     ]
   },
+  "downloads.open": {
+    "channel": "beta",
+    "extension_types": ["extension"]
+  },
   "dial": {
     "channel": "stable",
     "extension_types": ["extension"],
@@ -388,7 +392,7 @@
     ]
   },
   "musicManagerPrivate": {
-    "channel": "dev",
+    "channel": "stable",
     "extension_types": ["platform_app"],
     "whitelist": [
       "4B1D0E19C6C43C008C44A8278C8B5BFE15ABEB3C", // Music Manager
diff --git a/chrome/common/extensions/api/downloads.idl b/chrome/common/extensions/api/downloads.idl
index 75afceb..c427026 100644
--- a/chrome/common/extensions/api/downloads.idl
+++ b/chrome/common/extensions/api/downloads.idl
@@ -409,9 +409,10 @@
                             GetFileIconCallback callback);
 
     // Open the downloaded file now if the $ref:DownloadItem is complete;
-    // returns an error through $ref:runtime.lastError otherwise. An
-    // $ref:onChanged event will fire when the item is opened for the first
-    // time.
+    // returns an error through $ref:runtime.lastError otherwise. Requires the
+    // <code>"downloads.open"</code> permission in addition to the
+    // <code>"downloads"</code> permission. An $ref:onChanged event will fire
+    // when the item is opened for the first time.
     // |downloadId|: The identifier for the downloaded file.
     static void open(long downloadId);
 
diff --git a/chrome/common/extensions/api/networking_private.json b/chrome/common/extensions/api/networking_private.json
index 14640ef..39d0e97 100644
--- a/chrome/common/extensions/api/networking_private.json
+++ b/chrome/common/extensions/api/networking_private.json
@@ -7,9 +7,8 @@
     "namespace":"networkingPrivate",
     "description": "none",
     "compiler_options": {
-      "implemented_in": "chrome/browser/chromeos/extensions/networking_private_api.h"
+      "implemented_in": "chrome/browser/extensions/api/networking_private/networking_private_api.h"
     },
-    "platforms": ["chromeos"],
     "types" : [
       {
         "id": "NetworkProperties",
diff --git a/chrome/common/extensions/docs/templates/intros/downloads.html b/chrome/common/extensions/docs/templates/intros/downloads.html
index 552819e..1e576ba 100644
--- a/chrome/common/extensions/docs/templates/intros/downloads.html
+++ b/chrome/common/extensions/docs/templates/intros/downloads.html
@@ -1,27 +1,17 @@
 <h2 id='manifest'>Manifest</h2>
 
 <p> You must declare the 'downloads' permission in the <a
-href='manifest.html'>extension manifest</a> to use this API, along with <a
-href='declare_permissions.html'>host permissions</a> for any hosts that you
-may pass to $ref:downloads.download.</p>
+href='manifest.html'>extension manifest</a> to use this API.</p>
 
 <pre>{
   'name': 'My extension',
   ...
 <b>  'permissions': [
     'downloads',
-    '*://*.google.com'
   ]</b>,
   ...
 }</pre>
 
-<p>If the URL's hostname is not specified in the permissions, then 
-$ref:downloads.download will call its callback with a null
-<code>downloadId</code> and set the 
-$ref:runtime.lastError
-object to indicate that the extension does not have permission to access that
-hostname.</p>
-
 <h2 id='examples'>Examples</h2>
 
 <p>You can find simple examples of using the downloads module in the <a
diff --git a/chrome/common/extensions/permissions/api_permission.h b/chrome/common/extensions/permissions/api_permission.h
index d043f93..78e2238 100644
--- a/chrome/common/extensions/permissions/api_permission.h
+++ b/chrome/common/extensions/permissions/api_permission.h
@@ -68,6 +68,7 @@
     kDevtools,
     kDownloads,
     kDownloadsInternal,
+    kDownloadsOpen,
     kEchoPrivate,
     kEnterprisePlatformKeysPrivate,
     kExperimental,
diff --git a/chrome/common/extensions/permissions/chrome_api_permissions.cc b/chrome/common/extensions/permissions/chrome_api_permissions.cc
index a4558af..73779e8 100644
--- a/chrome/common/extensions/permissions/chrome_api_permissions.cc
+++ b/chrome/common/extensions/permissions/chrome_api_permissions.cc
@@ -50,6 +50,10 @@
     { APIPermission::kDownloads, "downloads", APIPermissionInfo::kFlagNone,
       IDS_EXTENSION_PROMPT_WARNING_DOWNLOADS,
       PermissionMessage::kDownloads },
+    { APIPermission::kDownloadsOpen, "downloads.open",
+      APIPermissionInfo::kFlagNone,
+      IDS_EXTENSION_PROMPT_WARNING_DOWNLOADS_OPEN,
+      PermissionMessage::kDownloadsOpen },
     { APIPermission::kIdentity, "identity" },
     { APIPermission::kExperimental, "experimental",
       APIPermissionInfo::kFlagCannotBeOptional },
diff --git a/chrome/common/extensions/permissions/permission_message.h b/chrome/common/extensions/permissions/permission_message.h
index 9098dc1..c87aaff 100644
--- a/chrome/common/extensions/permissions/permission_message.h
+++ b/chrome/common/extensions/permissions/permission_message.h
@@ -65,6 +65,7 @@
     kWebConnectable,
     kActivityLogPrivate,
     kBluetoothDevices,
+    kDownloadsOpen,
     kEnumBoundary,
   };
 
diff --git a/chrome/common/localized_error.cc b/chrome/common/localized_error.cc
index 136607a..3939e6f 100644
--- a/chrome/common/localized_error.cc
+++ b/chrome/common/localized_error.cc
@@ -529,6 +529,12 @@
   error_strings->SetString("heading",
       l10n_util::GetStringUTF16(options.heading_resource_id));
 
+  std::string icon_class = (error_code == net::ERR_INTERNET_DISCONNECTED &&
+                            error_domain == net::kErrorDomain)
+                               ? "icon-offline"
+                               : "icon-generic";
+  error_strings->SetString("iconClass", icon_class);
+
   base::DictionaryValue* summary = new base::DictionaryValue;
   summary->SetString("msg",
       l10n_util::GetStringUTF16(options.summary_resource_id));
diff --git a/chrome/common/net/net_error_info.cc b/chrome/common/net/net_error_info.cc
index e350b89..dd67c7d 100644
--- a/chrome/common/net/net_error_info.cc
+++ b/chrome/common/net/net_error_info.cc
@@ -2,8 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "base/command_line.h"
 #include "base/logging.h"
 #include "base/metrics/field_trial.h"
+#include "chrome/common/chrome_switches.h"
 #include "chrome/common/net/net_error_info.h"
 
 namespace chrome_common_net {
@@ -37,7 +39,14 @@
          status < DNS_PROBE_MAX;
 }
 
-bool DnsProbesEnabledByFieldTrial() {
+bool DnsProbesEnabled() {
+  CommandLine* command_line = CommandLine::ForCurrentProcess();
+
+  if (command_line->HasSwitch(switches::kDisableDnsProbes))
+    return false;
+  else if (command_line->HasSwitch(switches::kEnableDnsProbes))
+    return true;
+
   const char kDnsProbeFieldTrialName[] = "DnsProbe-Enable";
   const char kDnsProbeFieldTrialEnableGroupName[] = "enable";
 
diff --git a/chrome/common/net/net_error_info.h b/chrome/common/net/net_error_info.h
index ec9d816..44730c2 100644
--- a/chrome/common/net/net_error_info.h
+++ b/chrome/common/net/net_error_info.h
@@ -62,9 +62,10 @@
 // Returns true if |status| is one of the DNS_PROBE_FINISHED_* statuses.
 bool DnsProbeStatusIsFinished(DnsProbeStatus status);
 
-// Returns true if DNS probes are enabled (by the DnsProbe-Enable field trial),
-// or false if they are disabled or the field trial wasn't found.
-bool DnsProbesEnabledByFieldTrial();
+// Checks the --force-dns-probes command line option and the DnsProbe-Enable
+// field trial.  If the command-line option is found, return what it says,
+// otherwise return true if and only if the field trial has group "enabled".
+bool DnsProbesEnabled();
 
 // The error domain used to pass DNS probe statuses to the localized error
 // code.
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
index 1e8eaf7..56e3721 100644
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -2455,6 +2455,8 @@
     "overscroll.vertical_threshold_complete";
 const char kOverscrollMinimumThresholdStart[] =
     "overscroll.minimum_threshold_start";
+const char kOverscrollVerticalThresholdStart[] =
+    "overscroll.vertical_threshold_start";
 const char kOverscrollHorizontalResistThreshold[] =
     "overscroll.horizontal_resist_threshold";
 const char kOverscrollVerticalResistThreshold[] =
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
index e128646..f4c6cc6 100644
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -904,6 +904,7 @@
 extern const char kOverscrollHorizontalThresholdComplete[];
 extern const char kOverscrollVerticalThresholdComplete[];
 extern const char kOverscrollMinimumThresholdStart[];
+extern const char kOverscrollVerticalThresholdStart[];
 extern const char kOverscrollHorizontalResistThreshold[];
 extern const char kOverscrollVerticalResistThreshold[];
 #endif
diff --git a/chrome/common/render_messages.h b/chrome/common/render_messages.h
index b93e023..6001df2 100644
--- a/chrome/common/render_messages.h
+++ b/chrome/common/render_messages.h
@@ -374,6 +374,10 @@
                     content::TopControlsState /* current */,
                     bool /* animate */)
 
+// Updates the window features of the render view.
+IPC_MESSAGE_ROUTED1(ChromeViewMsg_SetWindowFeatures,
+                    WebKit::WebWindowFeatures /* window_features */)
+
 // JavaScript related messages -----------------------------------------------
 
 // Notify the JavaScript engine in the render to change its parameters
diff --git a/chrome/interactive_ui_tests.isolate b/chrome/interactive_ui_tests.isolate
index faaed83..554fdd0 100644
--- a/chrome/interactive_ui_tests.isolate
+++ b/chrome/interactive_ui_tests.isolate
@@ -8,7 +8,7 @@
         'command': [
           '../testing/xvfb.py',
           '<(PRODUCT_DIR)',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '-j1',
           '<(PRODUCT_DIR)/interactive_ui_tests<(EXECUTABLE_SUFFIX)',
         ],
@@ -33,8 +33,7 @@
           '../net/tools/testserver/testserver_base.py',
           '../testing/test_env.py',
           '../tools/swarm_client/run_isolated.py',
-          '../tools/swarm_client/run_test_cases.py',
-          '../tools/swarm_client/third_party/upload.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/interactive_ui_tests<(EXECUTABLE_SUFFIX)',
           '<(PRODUCT_DIR)/resources.pak',
         ],
@@ -44,9 +43,6 @@
           '../third_party/tlslite/tlslite/',
           'test/data/',
         ],
-        'isolate_dependency_touched': [
-          '../tools/swarm_client/third_party/__init__.py',
-        ],
       },
     }],
     ['OS=="linux" or OS=="win"', {
@@ -73,7 +69,7 @@
       'variables': {
         'command': [
           '../testing/test_env.py',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '-j1',
           '<(PRODUCT_DIR)/interactive_ui_tests<(EXECUTABLE_SUFFIX)',
         ],
diff --git a/chrome/renderer/chrome_render_process_observer.cc b/chrome/renderer/chrome_render_process_observer.cc
index f4a5f8b..282607c 100644
--- a/chrome/renderer/chrome_render_process_observer.cc
+++ b/chrome/renderer/chrome_render_process_observer.cc
@@ -18,7 +18,6 @@
 #include "base/metrics/statistics_recorder.h"
 #include "base/native_library.h"
 #include "base/path_service.h"
-#include "base/process_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/threading/platform_thread.h"
 #include "chrome/common/child_process_logging.h"
diff --git a/chrome/renderer/chrome_render_view_observer.cc b/chrome/renderer/chrome_render_view_observer.cc
index fa9a76a..5d67159 100644
--- a/chrome/renderer/chrome_render_view_observer.cc
+++ b/chrome/renderer/chrome_render_view_observer.cc
@@ -72,6 +72,7 @@
 using WebKit::WebURLRequest;
 using WebKit::WebView;
 using WebKit::WebVector;
+using WebKit::WebWindowFeatures;
 using extensions::APIPermission;
 
 // Delay in milliseconds that we'll wait before capturing the page contents
@@ -221,6 +222,7 @@
     IPC_MESSAGE_HANDLER(ChromeViewMsg_UpdateTopControlsState,
                         OnUpdateTopControlsState)
 #endif
+    IPC_MESSAGE_HANDLER(ChromeViewMsg_SetWindowFeatures, OnSetWindowFeatures)
     IPC_MESSAGE_UNHANDLED(handled = false)
   IPC_END_MESSAGE_MAP()
 
@@ -297,6 +299,11 @@
 }
 #endif
 
+void ChromeRenderViewObserver::OnSetWindowFeatures(
+    const WebWindowFeatures& window_features) {
+  render_view()->GetWebView()->setWindowFeatures(window_features);
+}
+
 void ChromeRenderViewObserver::Navigate(const GURL& url) {
   // Execute cache clear operations that were postponed until a navigation
   // event (including tab reload).
diff --git a/chrome/renderer/chrome_render_view_observer.h b/chrome/renderer/chrome_render_view_observer.h
index ae1aac9..b97b6d4 100644
--- a/chrome/renderer/chrome_render_view_observer.h
+++ b/chrome/renderer/chrome_render_view_observer.h
@@ -33,6 +33,7 @@
 
 namespace WebKit {
 class WebView;
+struct WebWindowFeatures;
 }
 
 namespace safe_browsing {
@@ -138,6 +139,7 @@
                                 content::TopControlsState current,
                                 bool animate);
 #endif
+  void OnSetWindowFeatures(const WebKit::WebWindowFeatures& window_features);
 
   void CapturePageInfoLater(int page_id,
                             bool preliminary_capture,
diff --git a/chrome/renderer/media/chrome_webrtc_log_message_delegate_unittest.cc b/chrome/renderer/media/chrome_webrtc_log_message_delegate_unittest.cc
index 90fca67..e1f29a4 100644
--- a/chrome/renderer/media/chrome_webrtc_log_message_delegate_unittest.cc
+++ b/chrome/renderer/media/chrome_webrtc_log_message_delegate_unittest.cc
@@ -4,7 +4,7 @@
 
 #include <string>
 
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "chrome/common/partial_circular_buffer.h"
 #include "chrome/renderer/media/chrome_webrtc_log_message_delegate.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/chrome/renderer/net/net_error_helper.cc b/chrome/renderer/net/net_error_helper.cc
index 46a8e0e..5df8611 100644
--- a/chrome/renderer/net/net_error_helper.cc
+++ b/chrome/renderer/net/net_error_helper.cc
@@ -30,7 +30,6 @@
 using chrome_common_net::DnsProbeStatus;
 using chrome_common_net::DnsProbeStatusIsFinished;
 using chrome_common_net::DnsProbeStatusToString;
-using chrome_common_net::DnsProbesEnabledByFieldTrial;
 using content::RenderThread;
 using content::RenderView;
 using content::RenderViewObserver;
@@ -166,6 +165,7 @@
   return handled;
 }
 
+// static
 bool NetErrorHelper::GetErrorStringsForDnsProbe(
     WebKit::WebFrame* frame,
     const WebKit::WebURLError& error,
diff --git a/chrome/renderer/pepper/pepper_flash_drm_renderer_host.cc b/chrome/renderer/pepper/pepper_flash_drm_renderer_host.cc
index 26b6ef4..ca59c7e 100644
--- a/chrome/renderer/pepper/pepper_flash_drm_renderer_host.cc
+++ b/chrome/renderer/pepper/pepper_flash_drm_renderer_host.cc
@@ -5,7 +5,7 @@
 #include "chrome/renderer/pepper/pepper_flash_drm_renderer_host.h"
 
 #include "base/files/file_path.h"
-#include "content/public/renderer/ppapi_plugin_instance.h"
+#include "content/public/renderer/pepper_plugin_instance.h"
 #include "content/public/renderer/renderer_ppapi_host.h"
 #include "ppapi/c/pp_errors.h"
 #include "ppapi/host/dispatch_host_message.h"
@@ -46,7 +46,7 @@
 
 int32_t PepperFlashDRMRendererHost::OnGetVoucherFile(
     ppapi::host::HostMessageContext* context) {
-  webkit::ppapi::PluginInstance* plugin_instance =
+  content::PepperPluginInstance* plugin_instance =
       renderer_ppapi_host_->GetPluginInstance(pp_instance());
   if (!plugin_instance)
     return PP_ERROR_FAILED;
diff --git a/chrome/renderer/pepper/pepper_flash_fullscreen_host.cc b/chrome/renderer/pepper/pepper_flash_fullscreen_host.cc
index edeb06b..37bea81 100644
--- a/chrome/renderer/pepper/pepper_flash_fullscreen_host.cc
+++ b/chrome/renderer/pepper/pepper_flash_fullscreen_host.cc
@@ -4,7 +4,7 @@
 
 #include "chrome/renderer/pepper/pepper_flash_fullscreen_host.h"
 
-#include "content/public/renderer/ppapi_plugin_instance.h"
+#include "content/public/renderer/pepper_plugin_instance.h"
 #include "content/public/renderer/renderer_ppapi_host.h"
 #include "ppapi/c/pp_errors.h"
 #include "ppapi/host/dispatch_host_message.h"
@@ -39,7 +39,7 @@
 int32_t PepperFlashFullscreenHost::OnSetFullscreen(
     ppapi::host::HostMessageContext* context,
     bool fullscreen) {
-  webkit::ppapi::PluginInstance* plugin_instance =
+  content::PepperPluginInstance* plugin_instance =
       renderer_ppapi_host_->GetPluginInstance(pp_instance());
   if (plugin_instance) {
     plugin_instance->FlashSetFullscreen(fullscreen, true);
diff --git a/chrome/renderer/pepper/pepper_flash_renderer_host.cc b/chrome/renderer/pepper/pepper_flash_renderer_host.cc
index 37561ae..e305946 100644
--- a/chrome/renderer/pepper/pepper_flash_renderer_host.cc
+++ b/chrome/renderer/pepper/pepper_flash_renderer_host.cc
@@ -7,7 +7,7 @@
 #include <vector>
 
 #include "chrome/renderer/pepper/ppb_pdf_impl.h"
-#include "content/public/renderer/ppapi_plugin_instance.h"
+#include "content/public/renderer/pepper_plugin_instance.h"
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/renderer_ppapi_host.h"
 #include "ipc/ipc_message_macros.h"
@@ -89,7 +89,7 @@
 int32_t PepperFlashRendererHost::OnSetInstanceAlwaysOnTop(
     ppapi::host::HostMessageContext* host_context,
     bool on_top) {
-  webkit::ppapi::PluginInstance* plugin_instance =
+  content::PepperPluginInstance* plugin_instance =
       host_->GetPluginInstance(pp_instance());
   if (plugin_instance)
     plugin_instance->SetAlwaysOnTop(on_top);
@@ -206,8 +206,8 @@
     const ppapi::URLRequestInfoData& data,
     const std::string& target,
     bool from_user_action) {
-  // If our PluginInstance is already destroyed, just return a failure.
-  webkit::ppapi::PluginInstance* plugin_instance =
+  // If our PepperPluginInstance is already destroyed, just return a failure.
+  content::PepperPluginInstance* plugin_instance =
       host_->GetPluginInstance(pp_instance());
   if (!plugin_instance)
     return PP_ERROR_FAILED;
@@ -242,7 +242,7 @@
 int32_t PepperFlashRendererHost::OnIsRectTopmost(
     ppapi::host::HostMessageContext* host_context,
     const PP_Rect& rect) {
-  webkit::ppapi::PluginInstance* plugin_instance =
+  content::PepperPluginInstance* plugin_instance =
       host_->GetPluginInstance(pp_instance());
   if (plugin_instance && plugin_instance->IsRectTopmost(
       gfx::Rect(rect.point.x, rect.point.y,rect.size.width, rect.size.height)))
diff --git a/chrome/renderer/pepper/pepper_pdf_host.cc b/chrome/renderer/pepper/pepper_pdf_host.cc
index debaf9c..172b1bc 100644
--- a/chrome/renderer/pepper/pepper_pdf_host.cc
+++ b/chrome/renderer/pepper/pepper_pdf_host.cc
@@ -8,7 +8,7 @@
 #include "chrome/common/render_messages.h"
 #include "chrome/renderer/printing/print_web_view_helper.h"
 #include "content/public/common/referrer.h"
-#include "content/public/renderer/ppapi_plugin_instance.h"
+#include "content/public/renderer/pepper_plugin_instance.h"
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/render_view.h"
 #include "content/public/renderer/renderer_ppapi_host.h"
@@ -38,8 +38,6 @@
 #include "ui/gfx/image/image_skia_rep.h"
 #include "ui/gfx/point.h"
 
-using webkit::ppapi::PluginInstance;
-
 namespace chrome {
 
 namespace {
@@ -179,7 +177,8 @@
 
 int32_t PepperPDFHost::OnHostMsgDidStartLoading(
     ppapi::host::HostMessageContext* context) {
-  PluginInstance* instance = host_->GetPluginInstance(pp_instance());
+  content::PepperPluginInstance* instance =
+      host_->GetPluginInstance(pp_instance());
   if (!instance)
     return PP_ERROR_FAILED;
   instance->GetRenderView()->DidStartLoading();
@@ -188,7 +187,8 @@
 
 int32_t PepperPDFHost::OnHostMsgDidStopLoading(
     ppapi::host::HostMessageContext* context) {
-  PluginInstance* instance = host_->GetPluginInstance(pp_instance());
+  content::PepperPluginInstance* instance =
+      host_->GetPluginInstance(pp_instance());
   if (!instance)
     return PP_ERROR_FAILED;
   instance->GetRenderView()->DidStopLoading();
@@ -197,7 +197,8 @@
 
 int32_t PepperPDFHost::OnHostMsgSetContentRestriction(
     ppapi::host::HostMessageContext* context, int restrictions) {
-  PluginInstance* instance = host_->GetPluginInstance(pp_instance());
+  content::PepperPluginInstance* instance =
+      host_->GetPluginInstance(pp_instance());
   if (!instance)
     return PP_ERROR_FAILED;
   instance->GetRenderView()->Send(
@@ -226,7 +227,8 @@
 
 int32_t PepperPDFHost::OnHostMsgHasUnsupportedFeature(
     ppapi::host::HostMessageContext* context) {
-  PluginInstance* instance = host_->GetPluginInstance(pp_instance());
+  content::PepperPluginInstance* instance =
+      host_->GetPluginInstance(pp_instance());
   if (!instance)
     return PP_ERROR_FAILED;
 
@@ -245,7 +247,8 @@
 int32_t PepperPDFHost::OnHostMsgPrint(
     ppapi::host::HostMessageContext* context) {
 #if defined(ENABLE_PRINTING)
-  PluginInstance* instance = host_->GetPluginInstance(pp_instance());
+  content::PepperPluginInstance* instance =
+      host_->GetPluginInstance(pp_instance());
   if (!instance)
     return PP_ERROR_FAILED;
 
@@ -265,7 +268,8 @@
 
 int32_t PepperPDFHost::OnHostMsgSaveAs(
     ppapi::host::HostMessageContext* context) {
-  PluginInstance* instance = host_->GetPluginInstance(pp_instance());
+  content::PepperPluginInstance* instance =
+      host_->GetPluginInstance(pp_instance());
   if (!instance)
     return PP_ERROR_FAILED;
   GURL url = instance->GetPluginURL();
diff --git a/chrome/renderer/pepper/pepper_shared_memory_message_filter.cc b/chrome/renderer/pepper/pepper_shared_memory_message_filter.cc
index a3af8ea..8aafd70 100644
--- a/chrome/renderer/pepper/pepper_shared_memory_message_filter.cc
+++ b/chrome/renderer/pepper/pepper_shared_memory_message_filter.cc
@@ -6,9 +6,9 @@
 
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/shared_memory.h"
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "content/public/common/content_client.h"
-#include "content/public/renderer/ppapi_plugin_instance.h"
+#include "content/public/renderer/pepper_plugin_instance.h"
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/renderer_ppapi_host.h"
 #include "ppapi/host/ppapi_host.h"
@@ -55,7 +55,7 @@
 
   base::SharedMemoryHandle host_shm_handle;
   shm->ShareToProcess(base::GetCurrentProcessHandle(), &host_shm_handle);
-  *host_handle_id = webkit::ppapi::PluginInstance::Get(instance)->
+  *host_handle_id = content::PepperPluginInstance::Get(instance)->
       GetVarTracker()->TrackSharedMemoryHandle(instance, host_shm_handle, size);
 
   base::PlatformFile host_handle =
diff --git a/chrome/renderer/pepper/ppb_nacl_private_impl.cc b/chrome/renderer/pepper/ppb_nacl_private_impl.cc
index 7ffe277..2c8d603 100644
--- a/chrome/renderer/pepper/ppb_nacl_private_impl.cc
+++ b/chrome/renderer/pepper/ppb_nacl_private_impl.cc
@@ -18,7 +18,7 @@
 #include "content/public/common/content_client.h"
 #include "content/public/common/content_switches.h"
 #include "content/public/common/sandbox_init.h"
-#include "content/public/renderer/ppapi_plugin_instance.h"
+#include "content/public/renderer/pepper_plugin_instance.h"
 #include "content/public/renderer/renderer_ppapi_host.h"
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/render_view.h"
@@ -159,8 +159,8 @@
   InstanceInfo instance_info = it->second;
   map.erase(it);
 
-  webkit::ppapi::PluginInstance* plugin_instance =
-      webkit::ppapi::PluginInstance::Get(instance);
+  content::PepperPluginInstance* plugin_instance =
+      content::PepperPluginInstance::Get(instance);
   if (!plugin_instance) {
     DLOG(ERROR) << "GetInstance() failed";
     return PP_EXTERNAL_PLUGIN_ERROR_MODULE;
diff --git a/chrome/renderer/pepper/ppb_pdf_impl.cc b/chrome/renderer/pepper/ppb_pdf_impl.cc
index 0ac88b2..85e92e1 100644
--- a/chrome/renderer/pepper/ppb_pdf_impl.cc
+++ b/chrome/renderer/pepper/ppb_pdf_impl.cc
@@ -14,7 +14,7 @@
 #include "chrome/renderer/printing/print_web_view_helper.h"
 #include "content/public/common/child_process_sandbox_support_linux.h"
 #include "content/public/common/referrer.h"
-#include "content/public/renderer/ppapi_plugin_instance.h"
+#include "content/public/renderer/pepper_plugin_instance.h"
 #include "content/public/renderer/render_thread.h"
 #include "content/public/renderer/render_view.h"
 #include "grit/webkit_resources.h"
@@ -38,7 +38,6 @@
 #include "ui/base/resource/resource_bundle.h"
 
 using ppapi::PpapiGlobals;
-using webkit::ppapi::PluginInstance;
 using WebKit::WebElement;
 using WebKit::WebView;
 using content::RenderThread;
@@ -134,7 +133,8 @@
 #if defined(ENABLE_PRINTING)
 
 WebKit::WebElement GetWebElement(PP_Instance instance_id) {
-  PluginInstance* instance = PluginInstance::Get(instance_id);
+  content::PepperPluginInstance* instance =
+      content::PepperPluginInstance::Get(instance_id);
   if (!instance)
     return WebKit::WebElement();
   return instance->GetContainer()->element();
@@ -167,7 +167,8 @@
 
 PP_Var GetLocalizedString(PP_Instance instance_id,
                           PP_ResourceString string_id) {
-  PluginInstance* instance = PluginInstance::Get(instance_id);
+  content::PepperPluginInstance* instance =
+      content::PepperPluginInstance::Get(instance_id);
   if (!instance)
     return PP_MakeUndefined();
 
@@ -193,7 +194,7 @@
     PP_PrivateFontCharset charset) {
 #if defined(OS_LINUX) || defined(OS_OPENBSD)
   // Validate the instance before using it below.
-  if (!PluginInstance::Get(instance_id))
+  if (!content::PepperPluginInstance::Get(instance_id))
     return 0;
 
   scoped_refptr<ppapi::StringVar> face_name(ppapi::StringVar::FromPPVar(
@@ -287,21 +288,24 @@
 }
 
 void DidStartLoading(PP_Instance instance_id) {
-  PluginInstance* instance = PluginInstance::Get(instance_id);
+  content::PepperPluginInstance* instance =
+      content::PepperPluginInstance::Get(instance_id);
   if (!instance)
     return;
   instance->GetRenderView()->DidStartLoading();
 }
 
 void DidStopLoading(PP_Instance instance_id) {
-  PluginInstance* instance = PluginInstance::Get(instance_id);
+  content::PepperPluginInstance* instance =
+      content::PepperPluginInstance::Get(instance_id);
   if (!instance)
     return;
   instance->GetRenderView()->DidStopLoading();
 }
 
 void SetContentRestriction(PP_Instance instance_id, int restrictions) {
-  PluginInstance* instance = PluginInstance::Get(instance_id);
+  content::PepperPluginInstance* instance =
+      content::PepperPluginInstance::Get(instance_id);
   if (!instance)
     return;
   instance->GetRenderView()->Send(
@@ -321,7 +325,8 @@
 }
 
 void HasUnsupportedFeature(PP_Instance instance_id) {
-  PluginInstance* instance = PluginInstance::Get(instance_id);
+  content::PepperPluginInstance* instance =
+      content::PepperPluginInstance::Get(instance_id);
   if (!instance)
     return;
 
@@ -336,7 +341,8 @@
 }
 
 void SaveAs(PP_Instance instance_id) {
-  PluginInstance* instance = PluginInstance::Get(instance_id);
+  content::PepperPluginInstance* instance =
+      content::PepperPluginInstance::Get(instance_id);
   if (!instance)
     return;
   GURL url = instance->GetPluginURL();
@@ -373,7 +379,8 @@
     return 0;
 
   // Validate the instance.
-  PluginInstance* instance = PluginInstance::Get(instance_id);
+  content::PepperPluginInstance* instance =
+      content::PepperPluginInstance::Get(instance_id);
   if (!instance)
     return 0;
 
diff --git a/chrome/renderer/printing/print_web_view_helper.cc b/chrome/renderer/printing/print_web_view_helper.cc
index 4e8d94b..5d68beb 100644
--- a/chrome/renderer/printing/print_web_view_helper.cc
+++ b/chrome/renderer/printing/print_web_view_helper.cc
@@ -12,7 +12,7 @@
 #include "base/logging.h"
 #include "base/message_loop/message_loop.h"
 #include "base/metrics/histogram.h"
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/renderer/printing/print_web_view_helper_linux.cc b/chrome/renderer/printing/print_web_view_helper_linux.cc
index 9b6b5c4..3bdf60c 100644
--- a/chrome/renderer/printing/print_web_view_helper_linux.cc
+++ b/chrome/renderer/printing/print_web_view_helper_linux.cc
@@ -19,7 +19,7 @@
 #include "third_party/WebKit/public/web/WebFrame.h"
 
 #if !defined(OS_CHROMEOS)
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #endif  // !defined(OS_CHROMEOS)
 
 namespace printing {
diff --git a/chrome/renderer/printing/print_web_view_helper_win.cc b/chrome/renderer/printing/print_web_view_helper_win.cc
index d2a6da4..f2203f2 100644
--- a/chrome/renderer/printing/print_web_view_helper_win.cc
+++ b/chrome/renderer/printing/print_web_view_helper_win.cc
@@ -7,7 +7,7 @@
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/metrics/histogram.h"
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "base/win/scoped_gdi_object.h"
 #include "base/win/scoped_hdc.h"
 #include "base/win/scoped_select_object.h"
diff --git a/chrome/renderer/resources/extensions/searchbox_api.js b/chrome/renderer/resources/extensions/searchbox_api.js
index 1acb05a..6bdb5ea 100644
--- a/chrome/renderer/resources/extensions/searchbox_api.js
+++ b/chrome/renderer/resources/extensions/searchbox_api.js
@@ -83,16 +83,24 @@
       function GetMostVisitedItemsWrapper() {
         var mostVisitedItems = GetMostVisitedItems();
         for (var i = 0, item; item = mostVisitedItems[i]; ++i) {
+          item.faviconUrl = GenerateFaviconURL(item.renderViewId, item.rid);
           // These properties are private data and should not be returned to
           // the page. They are only accessible via getMostVisitedItemData().
           item.url = null;
           item.title = null;
           item.domain = null;
           item.direction = null;
+          item.renderViewId = null;
         }
         return mostVisitedItems;
       }
 
+      function GenerateFaviconURL(renderViewId, rid) {
+        return "chrome-search://favicon/size/16@" +
+            window.devicePixelRatio + "x/" +
+            renderViewId + "/" + rid;
+      }
+
       // =======================================================================
       //                           Exported functions
       // =======================================================================
diff --git a/chrome/renderer/resources/extensions/web_view.js b/chrome/renderer/resources/extensions/web_view.js
index 2d1a083..6b4d3c9 100644
--- a/chrome/renderer/resources/extensions/web_view.js
+++ b/chrome/renderer/resources/extensions/web_view.js
@@ -15,9 +15,7 @@
     'minwidth', 'maxheight', 'maxwidth'];
 
 var WEB_VIEW_EVENTS = {
-  'responsive' : ['processId'],
   'sizechanged': ['oldHeight', 'oldWidth', 'newHeight', 'newWidth'],
-  'unresponsive' : ['processId']
 };
 
 var createEvent = function(name) {
@@ -69,6 +67,14 @@
   'loadstop': {
     evt: createEvent('webview.onLoadStop'),
     fields: []
+  },
+  'responsive': {
+    evt: createEvent('webview.onResponsive'),
+    fields: ['processId']
+  },
+  'unresponsive': {
+    evt: createEvent('webview.onUnresponsive'),
+    fields: ['processId']
   }
 };
 
diff --git a/chrome/renderer/resources/neterror.html b/chrome/renderer/resources/neterror.html
index 41c80c8..1117dfe 100644
--- a/chrome/renderer/resources/neterror.html
+++ b/chrome/renderer/resources/neterror.html
@@ -55,7 +55,11 @@
   text-decoration: none;
 }
 
-.error-img {
+.icon {
+  -webkit-user-select: none;
+}
+
+.icon-generic {
   /**
    * Can't access chrome://theme/IDR_ERROR_NETWORK_GENERIC from an untrusted
    * renderer process, so embed the resource manually.
@@ -63,7 +67,12 @@
   content: -webkit-image-set(
       url('../../app/theme/default_100_percent/common/error_network_generic.png') 1x,
       url('../../app/theme/default_200_percent/common/error_network_generic.png') 2x);
-  -webkit-user-select: none;
+}
+
+.icon-offline {
+  content: -webkit-image-set(
+      url('../../app/theme/default_100_percent/common/error_network_offline.png') 1x,
+      url('../../app/theme/default_200_percent/common/error_network_offline.png') 2x);
 }
 
 #content-top {
@@ -320,7 +329,7 @@
  <div id="box">
   <div id="content-top">
     <h1>
-     <div><img class="error-img"></div>
+     <div><img class="icon" jseval="this.classList.add(iconClass)"></div>
      <span i18n-content="heading"></span>
     </h1>
 
@@ -347,7 +356,7 @@
 <div id="sub-frame-error">
   <!-- Show details when hovering over the icon, in case the details are
        hidden because they're too large. -->
-  <img class="error-img" jsvalues=".title:errorDetails">
+  <img class="icon" jseval="this.classList.add(iconClass)" jsvalues=".title:errorDetails">
   <div id="sub-frame-error-details" jsvalues=".innerHTML:errorDetails"></div>
 </div>
 </body>
diff --git a/chrome/renderer/searchbox/searchbox.cc b/chrome/renderer/searchbox/searchbox.cc
index b0f7fbf..e184eab 100644
--- a/chrome/renderer/searchbox/searchbox.cc
+++ b/chrome/renderer/searchbox/searchbox.cc
@@ -10,6 +10,8 @@
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/common/chrome_switches.h"
+#include "chrome/common/favicon/favicon_types.h"
+#include "chrome/common/favicon/favicon_url_parser.h"
 #include "chrome/common/omnibox_focus_state.h"
 #include "chrome/common/render_messages.h"
 #include "chrome/common/url_constants.h"
@@ -49,21 +51,18 @@
 
 namespace internal {  // for testing
 
-// Parses |url| and fills in |id| with the InstantRestrictedID obtained from the
-// |url|. |render_view_id| is the ID of the associated RenderView.
+// Parses |path| and fills in |id| with the InstantRestrictedID obtained from
+// the |path|. |render_view_id| is the ID of the associated RenderView.
 //
-// Valid |url| forms:
-// chrome-search://favicon/<view_id>/<restricted_id>
-// chrome-search://thumb/<view_id>/<restricted_id>
+// |path| is a pair of |render_view_id| and |restricted_id|, and it is
+// contained in Instant Extended URLs. A valid |path| is in the form:
+// <render_view_id>/<restricted_id>
 //
-// If the |url| is valid, returns true and fills in |id| with restricted_id
-// value. If the |url| is invalid, returns false and |id| is not set.
-bool GetInstantRestrictedIDFromURL(int render_view_id,
-                                   const GURL& url,
-                                   InstantRestrictedID* id) {
-  // Strip leading path.
-  std::string path = url.path().substr(1);
-
+// If the |path| is valid, returns true and fills in |id| with restricted_id
+// value. If the |path| is invalid, returns false and |id| is not set.
+bool GetInstantRestrictedIDFromPath(int render_view_id,
+                                    const std::string& path,
+                                    InstantRestrictedID* id) {
   // Check that the path is of Most visited item ID form.
   std::vector<std::string> tokens;
   if (Tokenize(path, "/", &tokens) != 2)
@@ -75,6 +74,70 @@
   return base::StringToInt(tokens[1], id);
 }
 
+bool GetRestrictedIDFromFaviconUrl(int render_view_id,
+                                   const GURL& url,
+                                   std::string* favicon_params,
+                                   InstantRestrictedID* rid) {
+  // Strip leading slash.
+  std::string raw_path = url.path();
+  DCHECK_GT(raw_path.length(), (size_t) 0);
+  DCHECK_EQ(raw_path[0], '/');
+  raw_path = raw_path.substr(1);
+
+  chrome::ParsedFaviconPath parsed;
+  if (!chrome::ParseFaviconPath(raw_path, chrome::FAVICON, &parsed))
+    return false;
+
+  // The part of the URL which details the favicon parameters should be returned
+  // so the favicon URL can be reconstructed, by replacing the restricted_id
+  // with the actual URL from which the favicon is being requested.
+  *favicon_params = raw_path.substr(0, parsed.path_index);
+
+  // The part of the favicon URL which is supposed to contain the URL from
+  // which the favicon is being requested (i.e., the page's URL) actually
+  // contains a pair in the format "<view_id>/<restricted_id>". If the page's
+  // URL is not in the expected format then the execution must be stopped,
+  // returning |true|, indicating that the favicon URL should be translated
+  // without the page's URL part, to prevent search providers from spoofing
+  // the user's browsing history. For example, the following favicon URL
+  // "chrome-search://favicon/http://www.secretsite.com" it is not in the
+  // expected format "chrome-search://favicon/<view_id>/<restricted_id>" so
+  // the pages's URL part ("http://www.secretsite.com") should be removed
+  // entirely from the translated URL otherwise the search engine would know
+  // if the user has visited that page (by verifying whether the favicon URL
+  // returns an image for a particular page's URL); the translated URL in this
+  // case would be "chrome-search://favicon/" which would simply return the
+  // default favicon.
+  std::string id_part = raw_path.substr(parsed.path_index);
+  InstantRestrictedID id;
+  if (!GetInstantRestrictedIDFromPath(render_view_id, id_part, &id))
+    return true;
+
+  *rid = id;
+  return true;
+}
+
+// Parses a thumbnail |url| and fills in |id| with the InstantRestrictedID
+// obtained from the |url|. |render_view_id| is the ID of the associated
+// RenderView.
+//
+// Valid |url| forms:
+// chrome-search://thumb/<view_id>/<restricted_id>
+//
+// If the |url| is valid, returns true and fills in |id| with restricted_id
+// value. If the |url| is invalid, returns false and |id| is not set.
+bool GetRestrictedIDFromThumbnailUrl(int render_view_id,
+                                     const GURL& url,
+                                     InstantRestrictedID* id) {
+  // Strip leading slash.
+  std::string path = url.path();
+  DCHECK_GT(path.length(), (size_t) 0);
+  DCHECK_EQ(path[0], '/');
+  path = path.substr(1);
+
+  return GetInstantRestrictedIDFromPath(render_view_id, path, id);
+}
+
 }  // namespace internal
 
 SearchBox::SearchBox(content::RenderView* render_view)
@@ -109,25 +172,29 @@
 
 bool SearchBox::GenerateFaviconURLFromTransientURL(const GURL& transient_url,
                                                    GURL* url) const {
-  InstantRestrictedID rid = 0;
-  if (!internal::GetInstantRestrictedIDFromURL(render_view()->GetRoutingID(),
-                                               transient_url, &rid)) {
+  std::string favicon_params;
+  InstantRestrictedID rid = -1;
+  bool success = internal::GetRestrictedIDFromFaviconUrl(
+      render_view()->GetRoutingID(), transient_url, &favicon_params, &rid);
+  if (!success)
     return false;
-  }
 
-  GURL most_visited_item_url(GetURLForMostVisitedItem(rid));
-  if (most_visited_item_url.is_empty())
-    return false;
-  *url = GURL(base::StringPrintf("chrome-search://favicon/%s",
-                                 most_visited_item_url.spec().c_str()));
+  InstantMostVisitedItem item;
+  std::string item_url;
+  if (rid != -1 && GetMostVisitedItemWithID(rid, &item))
+    item_url = item.url.spec();
+
+  *url = GURL(base::StringPrintf("chrome-search://favicon/%s%s",
+                                 favicon_params.c_str(),
+                                 item_url.c_str()));
   return true;
 }
 
 bool SearchBox::GenerateThumbnailURLFromTransientURL(const GURL& transient_url,
                                                      GURL* url) const {
   InstantRestrictedID rid = 0;
-  if (!internal::GetInstantRestrictedIDFromURL(render_view()->GetRoutingID(),
-                                               transient_url, &rid)) {
+  if (!internal::GetRestrictedIDFromThumbnailUrl(render_view()->GetRoutingID(),
+                                                 transient_url, &rid)) {
     return false;
   }
 
diff --git a/chrome/renderer/searchbox/searchbox.h b/chrome/renderer/searchbox/searchbox.h
index e1a7737..b4743c9 100644
--- a/chrome/renderer/searchbox/searchbox.h
+++ b/chrome/renderer/searchbox/searchbox.h
@@ -36,11 +36,13 @@
 
   // Generates the favicon URL of the most visited item specified by the
   // |transient_url|. If the |transient_url| is valid, returns true and fills in
-  // |url|. If the |transient_url| is invalid, returns false  and |url| is not
-  // set.
+  // |url|. If the |transient_url| is invalid, returns true and |url| is set to
+  // "chrome-search://favicon/" in order to prevent the invalid URL to be
+  // requested.
   //
-  // Valid form of |transient_url|:
-  //    chrome-search://favicon/<render_view_id>/<most_visited_item_id>
+  // Valid forms of |transient_url|:
+  //    chrome-search://favicon/<view_id>/<restricted_id>
+  //    chrome-search://favicon/<favicon_parameters>/<view_id>/<restricted_id>
   bool GenerateFaviconURLFromTransientURL(const GURL& transient_url,
                                           GURL* url) const;
 
diff --git a/chrome/renderer/searchbox/searchbox_extension.cc b/chrome/renderer/searchbox/searchbox_extension.cc
index 4beae50..3eacc3c 100644
--- a/chrome/renderer/searchbox/searchbox_extension.cc
+++ b/chrome/renderer/searchbox/searchbox_extension.cc
@@ -30,7 +30,8 @@
 namespace {
 
 const char kCSSBackgroundImageFormat[] = "-webkit-image-set("
-    "url(chrome-search://theme/IDR_THEME_NTP_BACKGROUND?%s) 1x)";
+    "url(chrome-search://theme/IDR_THEME_NTP_BACKGROUND?%s) 1x, "
+    "url(chrome-search://theme/IDR_THEME_NTP_BACKGROUND@2x?%s) 2x)";
 
 const char kCSSBackgroundColorFormat[] = "rgba(%d,%d,%d,%s)";
 
@@ -45,8 +46,9 @@
 const char kCSSBackgroundRepeatY[] = "repeat-y";
 const char kCSSBackgroundRepeat[] = "repeat";
 
-const char kThemeAttributionFormat[] =
-    "chrome-search://theme/IDR_THEME_NTP_ATTRIBUTION?%s";
+const char kThemeAttributionFormat[] = "-webkit-image-set("
+    "url(chrome-search://theme/IDR_THEME_NTP_ATTRIBUTION?%s) 1x, "
+    "url(chrome-search://theme/IDR_THEME_NTP_ATTRIBUTION@2x?%s) 2x)";
 
 const char kLTRHtmlTextDirection[] = "ltr";
 const char kRTLHtmlTextDirection[] = "rtl";
@@ -80,14 +82,6 @@
                                            most_visited_item_id));
 }
 
-v8::Handle<v8::String> GenerateFaviconURL(
-    int render_view_id,
-    InstantRestrictedID most_visited_item_id) {
-  return UTF8ToV8String(base::StringPrintf("chrome-search://favicon/%d/%d",
-                                           render_view_id,
-                                           most_visited_item_id));
-}
-
 // Populates a Javascript MostVisitedItem object from |mv_item|.
 // NOTE: Includes "url", "title" and "domain" which are private data, so should
 // not be returned to the Instant page. These should be erased before returning
@@ -118,11 +112,10 @@
     title = UTF8ToUTF16(mv_item.url.spec());
 
   v8::Handle<v8::Object> obj = v8::Object::New();
+  obj->Set(v8::String::New("renderViewId"), v8::Int32::New(render_view_id));
   obj->Set(v8::String::New("rid"), v8::Int32::New(restricted_id));
   obj->Set(v8::String::New("thumbnailUrl"),
            GenerateThumbnailURL(render_view_id, restricted_id));
-  obj->Set(v8::String::New("faviconUrl"),
-           GenerateFaviconURL(render_view_id, restricted_id));
   obj->Set(v8::String::New("title"), UTF16ToV8String(title));
   obj->Set(v8::String::New("domain"), UTF8ToV8String(mv_item.url.host()));
   obj->Set(v8::String::New("direction"), UTF8ToV8String(direction));
@@ -692,14 +685,15 @@
   info->Set(v8::String::New("alternateLogo"),
             v8::Boolean::New(theme_info.logo_alternate));
 
-  // The theme background image url is of format
-  // "-webkit-image-set(url(chrome://theme/IDR_THEME_BACKGROUND?<theme_id>) 1x)"
-  // where <theme_id> is the id that identifies the theme.
+  // The theme background image url is of format kCSSBackgroundImageFormat
+  // where both instances of "%s" are replaced with the id that identifies the
+  // theme.
   // This is the CSS "background-image" format.
   // Value is only valid if there's a custom theme background image.
   if (extensions::Extension::IdIsValid(theme_info.theme_id)) {
     info->Set(v8::String::New("imageUrl"), UTF8ToV8String(
         base::StringPrintf(kCSSBackgroundImageFormat,
+                           theme_info.theme_id.c_str(),
                            theme_info.theme_id.c_str())));
 
     // The theme background image horizontal alignment is one of "left",
@@ -761,6 +755,7 @@
     if (theme_info.has_attribution) {
       info->Set(v8::String::New("attributionUrl"), UTF8ToV8String(
           base::StringPrintf(kThemeAttributionFormat,
+                             theme_info.theme_id.c_str(),
                              theme_info.theme_id.c_str())));
     }
   }
diff --git a/chrome/renderer/searchbox/searchbox_unittest.cc b/chrome/renderer/searchbox/searchbox_unittest.cc
index bfc7384..3cd3108 100644
--- a/chrome/renderer/searchbox/searchbox_unittest.cc
+++ b/chrome/renderer/searchbox/searchbox_unittest.cc
@@ -9,10 +9,16 @@
 
 namespace internal {
 
-// Defined in searchbox_extension.cc
-bool GetInstantRestrictedIDFromURL(int render_view_id,
+// Defined in searchbox.cc
+bool GetRestrictedIDFromThumbnailUrl(int render_view_id,
+                                     const GURL& url,
+                                     InstantRestrictedID* id);
+
+// Defined in searchbox.cc
+bool GetRestrictedIDFromFaviconUrl(int render_view_id,
                                    const GURL& url,
-                                   InstantRestrictedID* id);
+                                   std::string* favicon_params,
+                                   InstantRestrictedID* rid);
 
 TEST(SearchBoxUtilTest, GetInstantRestrictedIDFromTransientURL) {
   const int kInvalidRenderViewID = 920;
@@ -49,7 +55,7 @@
 
   InstantRestrictedID rid = 0;
   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
-    bool return_val = GetInstantRestrictedIDFromURL(
+    bool return_val = GetRestrictedIDFromThumbnailUrl(
         test_cases[i].render_view_id, test_cases[i].transient_url, &rid);
     EXPECT_EQ(test_cases[i].expected_return_val, return_val);
     EXPECT_EQ(test_cases[i].expected_rid, rid);
@@ -57,4 +63,171 @@
   }
 }
 
+TEST(SearchBoxUtilTest, ParseRestrictedFaviconTransientUrl) {
+  const int kInvalidRenderViewID = 920;
+  const int kValidRenderViewID = 1;
+
+  const struct {
+    int render_view_id;
+    GURL transient_url;
+    std::string expected_favicon_params;
+    InstantRestrictedID expected_rid;
+    bool expected_return_val;
+  } test_cases[] = {
+    // RenderView ID matches the view id specified in the transient url.
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/1/2"),
+      "",
+      2,
+      true
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/size/16@2x/1/2"),
+      "size/16@2x/",
+      2,
+      true
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/largest/1/2"),
+      "largest/",
+      2,
+      true
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/origin/1/2"),
+      "origin/",
+      2,
+      true
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/iconurl/1/2"),
+      "iconurl/",
+      2,
+      true
+    },
+
+    // RenderView ID does not match the view id specified in the transient url.
+    {
+      kInvalidRenderViewID,
+      GURL("chrome-search://favicon/1/2"),
+      "",
+      0,
+      true
+    },
+    {
+      kInvalidRenderViewID,
+      GURL("chrome-search://favicon/size/16@2x/1/2"),
+      "size/16@2x/",
+      0,
+      true
+    },
+    {
+      kInvalidRenderViewID,
+      GURL("chrome-search://favicon/largest/1/2"),
+      "largest/",
+      0,
+      true
+    },
+    {
+      kInvalidRenderViewID,
+      GURL("chrome-search://favicon/origin/1/2"),
+      "origin/",
+      0,
+      true
+    },
+    {
+      kInvalidRenderViewID,
+      GURL("chrome-search://favicon/iconurl/1/2"),
+      "iconurl/",
+      0,
+      true
+    },
+
+    // Invalid transient urls.
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon"),
+      "",
+      0,
+      false
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/"),
+      "",
+      0,
+      false
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/size/16@2x"),
+      "",
+      0,
+      false
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/size"),
+      "",
+      0,
+      true
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/size/16@2x/123"),
+      "size/16@2x/",
+      0,
+      true
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/size/16@2x/xyz"),
+      "size/16@2x/",
+      0,
+      true
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/size/16@2x/123/"),
+      "size/16@2x/",
+      0,
+      true
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/size/16@2x/123/xyz"),
+      "size/16@2x/",
+      0,
+      true
+    },
+    {
+      kValidRenderViewID,
+      GURL("chrome-search://favicon/invalidparameter/16@2x/1/2"),
+      "",
+      0,
+      true
+    }
+  };
+
+  std::string favicon_params = "";
+  InstantRestrictedID rid = 0;
+  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) {
+    bool return_val = GetRestrictedIDFromFaviconUrl(
+        test_cases[i].render_view_id,
+        test_cases[i].transient_url,
+        &favicon_params,
+        &rid);
+    EXPECT_EQ(test_cases[i].expected_return_val, return_val);
+    EXPECT_EQ(test_cases[i].expected_favicon_params, favicon_params);
+    EXPECT_EQ(test_cases[i].expected_rid, rid);
+    favicon_params = "";
+    rid = 0;
+  }
+}
+
 }  // namespace internal
diff --git a/chrome/sync_integration_tests.isolate b/chrome/sync_integration_tests.isolate
index 76cf74e..30fd0a5 100644
--- a/chrome/sync_integration_tests.isolate
+++ b/chrome/sync_integration_tests.isolate
@@ -8,7 +8,7 @@
         'command': [
           '../testing/xvfb.py',
           '<(PRODUCT_DIR)',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/sync_integration_tests<(EXECUTABLE_SUFFIX)',
         ],
         'isolate_dependency_tracked': [
@@ -44,8 +44,11 @@
     }],
     ['OS=="linux" or OS=="mac" or OS=="win"', {
       'variables': {
+        'isolate_dependency_tracked': [
+          '../tools/swarm_client/run_isolated.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
+        ],
         'isolate_dependency_untracked': [
-          '../tools/swarm_client/',
           '<(PRODUCT_DIR)/pyproto/',
         ],
       },
@@ -53,7 +56,7 @@
     ['OS=="mac"', {
       'variables': {
         'command': [
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/sync_integration_tests<(EXECUTABLE_SUFFIX)',
         ],
         'isolate_dependency_tracked': [
diff --git a/chrome/tools/build/mac/dump_product_syms b/chrome/tools/build/mac/dump_product_syms
index ca96e2a..b05e568 100755
--- a/chrome/tools/build/mac/dump_product_syms
+++ b/chrome/tools/build/mac/dump_product_syms
@@ -92,6 +92,14 @@
   SRC_NAMES[${#SRC_NAMES[@]}]="PDF.plugin"
 fi
 
+# libpeerconnection.so is optional. Currently only built when branding=Chrome
+# but will in the future also be built for Chromium, so we do a simple check.
+# TODO(tommi): Remove this check and move libpeerconnection.so into the required
+# section when libpeerconnection.so is built for all configs.
+if [[ -e "${BUILT_PRODUCTS_DIR}/libpeerconnection.so" ]]; then
+  SRC_NAMES[${#SRC_NAMES[@]}]="libpeerconnection.so"
+fi
+
 for SRC_NAME in "${SRC_NAMES[@]}"; do
   # SRC_STEM is the name of the file within the DWARF directory of the .dSYM
   # bundle, which comes from the on-disk name of an executable or dylib within
diff --git a/chrome/tools/convert_dict/convert_dict.cc b/chrome/tools/convert_dict/convert_dict.cc
index 39830e0..91082f6 100644
--- a/chrome/tools/convert_dict/convert_dict.cc
+++ b/chrome/tools/convert_dict/convert_dict.cc
@@ -18,7 +18,7 @@
 #include "base/files/file_path.h"
 #include "base/i18n/icu_util.h"
 #include "base/logging.h"
-#include "base/process_util.h"
+#include "base/process/memory.h"
 #include "base/strings/string_util.h"
 #include "chrome/tools/convert_dict/aff_reader.h"
 #include "chrome/tools/convert_dict/dic_reader.h"
diff --git a/chrome/tools/ipclist/ipcfuzz.cc b/chrome/tools/ipclist/ipcfuzz.cc
index da6ca4a..40845d7 100644
--- a/chrome/tools/ipclist/ipcfuzz.cc
+++ b/chrome/tools/ipclist/ipcfuzz.cc
@@ -13,7 +13,6 @@
 #include "base/memory/singleton.h"
 #include "base/message_loop/message_loop.h"
 #include "base/pickle.h"
-#include "base/process_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
diff --git a/chrome/tools/perf/flush_cache/flush_cache.cc b/chrome/tools/perf/flush_cache/flush_cache.cc
index f13a3e5..60f99ce 100644
--- a/chrome/tools/perf/flush_cache/flush_cache.cc
+++ b/chrome/tools/perf/flush_cache/flush_cache.cc
@@ -6,7 +6,7 @@
 // It's useful for testing Chrome with a cold database.
 
 #include "base/files/file_path.h"
-#include "base/process_util.h"
+#include "base/process/memory.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/sys_string_conversions.h"
 #include "base/test/test_file_util.h"
diff --git a/chrome/unit_tests.isolate b/chrome/unit_tests.isolate
index 96e982b..59b789d 100644
--- a/chrome/unit_tests.isolate
+++ b/chrome/unit_tests.isolate
@@ -44,7 +44,7 @@
         'command': [
           '../testing/xvfb.py',
           '<(PRODUCT_DIR)',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/unit_tests<(EXECUTABLE_SUFFIX)',
         ],
         'isolate_dependency_tracked': [
@@ -62,6 +62,8 @@
       'variables': {
         'isolate_dependency_tracked': [
           '../testing/test_env.py',
+          '../tools/swarm_client/run_isolated.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/unit_tests<(EXECUTABLE_SUFFIX)',
           'browser/safe_browsing/two_phase_testserver.py',
         ],
@@ -70,7 +72,6 @@
           '../third_party/pyftpdlib/',
           '../third_party/pywebsocket/',
           '../third_party/tlslite/',
-          '../tools/swarm_client/',
           '<(PRODUCT_DIR)/pyproto/',
         ],
       },
@@ -89,7 +90,7 @@
       'variables': {
         'command': [
           '../testing/test_env.py',
-          '../tools/swarm_client/run_test_cases.py',
+          '../tools/swarm_client/googletest/run_test_cases.py',
           '<(PRODUCT_DIR)/unit_tests<(EXECUTABLE_SUFFIX)',
         ],
         'isolate_dependency_untracked': [
diff --git a/chrome/utility/importer/firefox_importer_unittest_utils.h b/chrome/utility/importer/firefox_importer_unittest_utils.h
index 5bdbfa7..3bff323 100644
--- a/chrome/utility/importer/firefox_importer_unittest_utils.h
+++ b/chrome/utility/importer/firefox_importer_unittest_utils.h
@@ -7,7 +7,7 @@
 
 #include "base/basictypes.h"
 #include "base/memory/scoped_ptr.h"
-#include "base/process_util.h"
+#include "base/process/process_handle.h"
 #include "chrome/utility/importer/nss_decryptor.h"
 
 class FFDecryptorServerChannelListener;
diff --git a/chrome/utility/importer/firefox_importer_unittest_utils_mac.cc b/chrome/utility/importer/firefox_importer_unittest_utils_mac.cc
index ff4ee5e..5e8cb9d 100644
--- a/chrome/utility/importer/firefox_importer_unittest_utils_mac.cc
+++ b/chrome/utility/importer/firefox_importer_unittest_utils_mac.cc
@@ -10,6 +10,8 @@
 #include "base/file_util.h"
 #include "base/files/file_path.h"
 #include "base/message_loop/message_loop.h"
+#include "base/process/kill.h"
+#include "base/process/launch.h"
 #include "base/test/test_timeouts.h"
 #include "chrome/common/importer/firefox_importer_utils.h"
 #include "ipc/ipc_channel.h"