Cherry pick Make it possible to find locale pak files in the Android apk.

Cherry pick
https://src.chromium.org/viewvc/chrome?view=rev&revision=286324
and update makefiles.

Make it possible to find locale pak files in the Android apk.

This makes it possible for the ResourceBundle class to 'see' .pak
files directly embedded in the apk. This enables the webview to directly
mmap the files without extracting them to disk first.

BUG=394502
Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=286324

Bug: 16723226
Change-Id: Iaa191247875be7e496cb398e53b2338baf8b5721
diff --git a/ui/android/java/src/org/chromium/ui/base/ResourceBundle.java b/ui/android/java/src/org/chromium/ui/base/ResourceBundle.java
new file mode 100644
index 0000000..a17975c
--- /dev/null
+++ b/ui/android/java/src/org/chromium/ui/base/ResourceBundle.java
@@ -0,0 +1,32 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.ui.base;
+
+import android.content.Context;
+import android.content.res.AssetFileDescriptor;
+import android.content.res.AssetManager;
+
+import org.chromium.base.CalledByNative;
+import org.chromium.base.JNINamespace;
+
+import java.io.IOException;
+
+/**
+ * This class provides the resource bundle related methods for the native library.
+ */
+@JNINamespace("ui")
+class ResourceBundle {
+    @CalledByNative
+    static boolean assetContainedInApk(Context ctx, String filename) {
+        try {
+            AssetManager am = ctx.getAssets();
+            AssetFileDescriptor afd = am.openFd(filename);
+            afd.close();
+            return true;
+        } catch (IOException e) {
+            return false;
+        }
+    }
+}
diff --git a/ui/base/BUILD.gn b/ui/base/BUILD.gn
index fe42ae9..7c3dc8f 100644
--- a/ui/base/BUILD.gn
+++ b/ui/base/BUILD.gn
@@ -546,6 +546,7 @@
       "../android/java/src/org/chromium/ui/base/Clipboard.java",
       "../android/java/src/org/chromium/ui/base/DeviceFormFactor.java",
       "../android/java/src/org/chromium/ui/base/LocalizationUtils.java",
+      "../android/java/src/org/chromium/ui/base/ResourceBundle.java",
       "../android/java/src/org/chromium/ui/base/SelectFileDialog.java",
       "../android/java/src/org/chromium/ui/base/TouchDevice.java",
       "../android/java/src/org/chromium/ui/base/ViewAndroid.java",
diff --git a/ui/base/android/ui_base_jni_registrar.cc b/ui/base/android/ui_base_jni_registrar.cc
index cf4b579..23f3934 100644
--- a/ui/base/android/ui_base_jni_registrar.cc
+++ b/ui/base/android/ui_base_jni_registrar.cc
@@ -11,6 +11,7 @@
 #include "ui/base/clipboard/clipboard_android_initialization.h"
 #include "ui/base/device_form_factor_android.h"
 #include "ui/base/l10n/l10n_util_android.h"
+#include "ui/base/resource/resource_bundle_android.h"
 #include "ui/base/touch/touch_device.h"
 
 namespace ui {
@@ -20,6 +21,7 @@
   { "Clipboard", RegisterClipboardAndroid },
   { "DeviceFormFactor", RegisterDeviceFormFactorAndroid },
   { "LocalizationUtils", l10n_util::RegisterLocalizationUtil },
+  { "ResourceBundle", RegisterResourceBundleAndroid },
   { "TouchDevice", RegisterTouchDeviceAndroid },
   { "ViewAndroid", ViewAndroid::RegisterViewAndroid },
   { "WindowAndroid", WindowAndroid::RegisterWindowAndroid },
diff --git a/ui/base/resource/resource_bundle.cc b/ui/base/resource/resource_bundle.cc
index cd1c077..c388422 100644
--- a/ui/base/resource/resource_bundle.cc
+++ b/ui/base/resource/resource_bundle.cc
@@ -36,6 +36,10 @@
 #include "ui/gfx/screen.h"
 #include "ui/gfx/size_conversions.h"
 
+#if defined(OS_ANDROID)
+#include "ui/base/resource/resource_bundle_android.h"
+#endif
+
 #if defined(OS_CHROMEOS)
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/gfx/platform_font_pango.h"
@@ -65,6 +69,10 @@
 const unsigned char kPngScaleChunkType[4] = { 'c', 's', 'C', 'l' };
 const unsigned char kPngDataChunkType[4] = { 'I', 'D', 'A', 'T' };
 
+#if !defined(OS_MACOSX)
+const char kPakFileSuffix[] = ".pak";
+#endif
+
 ResourceBundle* g_shared_instance_ = NULL;
 
 void InitDefaultFontList() {
@@ -221,7 +229,16 @@
 }
 
 bool ResourceBundle::LocaleDataPakExists(const std::string& locale) {
-  return !GetLocaleFilePath(locale, true).empty();
+  bool locale_file_path_exists = !GetLocaleFilePath(locale, true).empty();
+#if defined(OS_ANDROID)
+  // TODO(mkosiba,primiano): Chrome should mmap the .pak files too, in which
+  // case we'd not need to check if locale_file_path_exists here.
+  // http://crbug.com/394502.
+  return locale_file_path_exists ||
+      AssetContainedInApk(locale + kPakFileSuffix);
+#else
+  return locale_file_path_exists;
+#endif
 }
 
 void ResourceBundle::AddDataPackFromPath(const base::FilePath& path,
@@ -264,8 +281,10 @@
 
   PathService::Get(ui::DIR_LOCALES, &locale_file_path);
 
-  if (!locale_file_path.empty())
-    locale_file_path = locale_file_path.AppendASCII(app_locale + ".pak");
+  if (!locale_file_path.empty()) {
+    locale_file_path =
+        locale_file_path.AppendASCII(app_locale + kPakFileSuffix);
+  }
 
   if (delegate_) {
     locale_file_path =
diff --git a/ui/base/resource/resource_bundle_android.cc b/ui/base/resource/resource_bundle_android.cc
index b194269..630ad5c 100644
--- a/ui/base/resource/resource_bundle_android.cc
+++ b/ui/base/resource/resource_bundle_android.cc
@@ -6,11 +6,14 @@
 
 #include <string>
 
+#include "base/android/jni_android.h"
+#include "base/android/jni_string.h"
 #include "base/file_util.h"
 #include "base/files/file_path.h"
 #include "base/logging.h"
 #include "base/path_service.h"
 #include "base/strings/stringprintf.h"
+#include "jni/ResourceBundle_jni.h"
 #include "ui/base/resource/resource_handle.h"
 #include "ui/base/ui_base_paths.h"
 
@@ -29,4 +32,16 @@
   return GetImageNamed(resource_id);
 }
 
+bool AssetContainedInApk(const std::string& filename) {
+  JNIEnv* env = base::android::AttachCurrentThread();
+  return Java_ResourceBundle_assetContainedInApk(
+      env,
+      base::android::GetApplicationContext(),
+      base::android::ConvertUTF8ToJavaString(env, filename).obj());
+}
+
+bool RegisterResourceBundleAndroid(JNIEnv* env) {
+  return RegisterNativesImpl(env);
+}
+
 }
diff --git a/ui/base/resource/resource_bundle_android.h b/ui/base/resource/resource_bundle_android.h
new file mode 100644
index 0000000..d1400f8
--- /dev/null
+++ b/ui/base/resource/resource_bundle_android.h
@@ -0,0 +1,20 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_BASE_RESOURCE_RESOURCE_BUNDLE_ANDROID_H_
+#define UI_BASE_RESOURCE_RESOURCE_BUNDLE_ANDROID_H_
+
+#include "base/basictypes.h"
+
+namespace ui {
+
+// Checks whether the locale data pak is contained within the .apk.
+bool AssetContainedInApk(const std::string& filename);
+
+bool RegisterResourceBundleAndroid(JNIEnv* env);
+
+}  // namespace ui
+
+#endif  // UI_BASE_RESOURCE_RESOURCE_BUNDLE_ANDROID_H_
+
diff --git a/ui/base/ui_base.gyp b/ui/base/ui_base.gyp
index e5ddcd7..6d8443a 100644
--- a/ui/base/ui_base.gyp
+++ b/ui/base/ui_base.gyp
@@ -628,6 +628,7 @@
              '../android/java/src/org/chromium/ui/base/Clipboard.java',
              '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java',
              '../android/java/src/org/chromium/ui/base/LocalizationUtils.java',
+             '../android/java/src/org/chromium/ui/base/ResourceBundle.java',
              '../android/java/src/org/chromium/ui/base/SelectFileDialog.java',
              '../android/java/src/org/chromium/ui/base/TouchDevice.java',
              '../android/java/src/org/chromium/ui/base/ViewAndroid.java',
diff --git a/ui/base/ui_base_jni_headers.target.darwin-arm.mk b/ui/base/ui_base_jni_headers.target.darwin-arm.mk
index fcb9028..16f9658 100644
--- a/ui/base/ui_base_jni_headers.target.darwin-arm.mk
+++ b/ui/base/ui_base_jni_headers.target.darwin-arm.mk
@@ -16,7 +16,7 @@
 
 
 ### Generated for rule "ui_base_ui_base_gyp_ui_base_jni_headers_target_generate_jni_headers":
-# "{'inputs': ['../../base/android/jni_generator/jni_generator.py', '../../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/ui/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['../android/java/src/org/chromium/ui/base/Clipboard.java', '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java', '../android/java/src/org/chromium/ui/base/LocalizationUtils.java', '../android/java/src/org/chromium/ui/base/SelectFileDialog.java', '../android/java/src/org/chromium/ui/base/TouchDevice.java', '../android/java/src/org/chromium/ui/base/ViewAndroid.java', '../android/java/src/org/chromium/ui/base/WindowAndroid.java'], 'action': ['../../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/ui/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
+# "{'inputs': ['../../base/android/jni_generator/jni_generator.py', '../../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/ui/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['../android/java/src/org/chromium/ui/base/Clipboard.java', '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java', '../android/java/src/org/chromium/ui/base/LocalizationUtils.java', '../android/java/src/org/chromium/ui/base/ResourceBundle.java', '../android/java/src/org/chromium/ui/base/SelectFileDialog.java', '../android/java/src/org/chromium/ui/base/TouchDevice.java', '../android/java/src/org/chromium/ui/base/ViewAndroid.java', '../android/java/src/org/chromium/ui/base/WindowAndroid.java'], 'action': ['../../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/ui/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
@@ -44,6 +44,15 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/ui/jni; cd $(gyp_local_path)/ui/base; ../../base/android/jni_generator/jni_generator.py --input_file ../android/java/src/org/chromium/ui/base/LocalizationUtils.java --output_dir "$(gyp_shared_intermediate_dir)/ui/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: $(LOCAL_PATH)/ui/android/java/src/org/chromium/ui/base/ResourceBundle.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/ui/jni; cd $(gyp_local_path)/ui/base; ../../base/android/jni_generator/jni_generator.py --input_file ../android/java/src/org/chromium/ui/base/ResourceBundle.java --output_dir "$(gyp_shared_intermediate_dir)/ui/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../../android_webview/build/jarjar-rules.txt --ptr_type long
+
+
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
@@ -85,6 +94,7 @@
 	$(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/DeviceFormFactor_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/LocalizationUtils_jni.h \
+	$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/TouchDevice_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/ViewAndroid_jni.h \
@@ -97,6 +107,7 @@
 	$(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/DeviceFormFactor_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/LocalizationUtils_jni.h \
+	$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/TouchDevice_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/ViewAndroid_jni.h \
diff --git a/ui/base/ui_base_jni_headers.target.darwin-arm64.mk b/ui/base/ui_base_jni_headers.target.darwin-arm64.mk
index 7fe220a..e4e2e9b 100644
--- a/ui/base/ui_base_jni_headers.target.darwin-arm64.mk
+++ b/ui/base/ui_base_jni_headers.target.darwin-arm64.mk
@@ -16,7 +16,7 @@
 
 
 ### Generated for rule "ui_base_ui_base_gyp_ui_base_jni_headers_target_generate_jni_headers":
-# "{'inputs': ['../../base/android/jni_generator/jni_generator.py', '../../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/ui/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['../android/java/src/org/chromium/ui/base/Clipboard.java', '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java', '../android/java/src/org/chromium/ui/base/LocalizationUtils.java', '../android/java/src/org/chromium/ui/base/SelectFileDialog.java', '../android/java/src/org/chromium/ui/base/TouchDevice.java', '../android/java/src/org/chromium/ui/base/ViewAndroid.java', '../android/java/src/org/chromium/ui/base/WindowAndroid.java'], 'action': ['../../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/ui/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
+# "{'inputs': ['../../base/android/jni_generator/jni_generator.py', '../../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/ui/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['../android/java/src/org/chromium/ui/base/Clipboard.java', '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java', '../android/java/src/org/chromium/ui/base/LocalizationUtils.java', '../android/java/src/org/chromium/ui/base/ResourceBundle.java', '../android/java/src/org/chromium/ui/base/SelectFileDialog.java', '../android/java/src/org/chromium/ui/base/TouchDevice.java', '../android/java/src/org/chromium/ui/base/ViewAndroid.java', '../android/java/src/org/chromium/ui/base/WindowAndroid.java'], 'action': ['../../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/ui/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
@@ -44,6 +44,15 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/ui/jni; cd $(gyp_local_path)/ui/base; ../../base/android/jni_generator/jni_generator.py --input_file ../android/java/src/org/chromium/ui/base/LocalizationUtils.java --output_dir "$(gyp_shared_intermediate_dir)/ui/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: $(LOCAL_PATH)/ui/android/java/src/org/chromium/ui/base/ResourceBundle.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/ui/jni; cd $(gyp_local_path)/ui/base; ../../base/android/jni_generator/jni_generator.py --input_file ../android/java/src/org/chromium/ui/base/ResourceBundle.java --output_dir "$(gyp_shared_intermediate_dir)/ui/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../../android_webview/build/jarjar-rules.txt --ptr_type long
+
+
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
@@ -85,6 +94,7 @@
 	$(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/DeviceFormFactor_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/LocalizationUtils_jni.h \
+	$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/TouchDevice_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/ViewAndroid_jni.h \
@@ -97,6 +107,7 @@
 	$(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/DeviceFormFactor_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/LocalizationUtils_jni.h \
+	$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/TouchDevice_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/ViewAndroid_jni.h \
diff --git a/ui/base/ui_base_jni_headers.target.darwin-mips.mk b/ui/base/ui_base_jni_headers.target.darwin-mips.mk
index 2f18453..904354f 100644
--- a/ui/base/ui_base_jni_headers.target.darwin-mips.mk
+++ b/ui/base/ui_base_jni_headers.target.darwin-mips.mk
@@ -16,7 +16,7 @@
 
 
 ### Generated for rule "ui_base_ui_base_gyp_ui_base_jni_headers_target_generate_jni_headers":
-# "{'inputs': ['../../base/android/jni_generator/jni_generator.py', '../../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/ui/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['../android/java/src/org/chromium/ui/base/Clipboard.java', '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java', '../android/java/src/org/chromium/ui/base/LocalizationUtils.java', '../android/java/src/org/chromium/ui/base/SelectFileDialog.java', '../android/java/src/org/chromium/ui/base/TouchDevice.java', '../android/java/src/org/chromium/ui/base/ViewAndroid.java', '../android/java/src/org/chromium/ui/base/WindowAndroid.java'], 'action': ['../../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/ui/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
+# "{'inputs': ['../../base/android/jni_generator/jni_generator.py', '../../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/ui/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['../android/java/src/org/chromium/ui/base/Clipboard.java', '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java', '../android/java/src/org/chromium/ui/base/LocalizationUtils.java', '../android/java/src/org/chromium/ui/base/ResourceBundle.java', '../android/java/src/org/chromium/ui/base/SelectFileDialog.java', '../android/java/src/org/chromium/ui/base/TouchDevice.java', '../android/java/src/org/chromium/ui/base/ViewAndroid.java', '../android/java/src/org/chromium/ui/base/WindowAndroid.java'], 'action': ['../../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/ui/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
@@ -44,6 +44,15 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/ui/jni; cd $(gyp_local_path)/ui/base; ../../base/android/jni_generator/jni_generator.py --input_file ../android/java/src/org/chromium/ui/base/LocalizationUtils.java --output_dir "$(gyp_shared_intermediate_dir)/ui/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: $(LOCAL_PATH)/ui/android/java/src/org/chromium/ui/base/ResourceBundle.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/ui/jni; cd $(gyp_local_path)/ui/base; ../../base/android/jni_generator/jni_generator.py --input_file ../android/java/src/org/chromium/ui/base/ResourceBundle.java --output_dir "$(gyp_shared_intermediate_dir)/ui/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../../android_webview/build/jarjar-rules.txt --ptr_type long
+
+
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
@@ -85,6 +94,7 @@
 	$(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/DeviceFormFactor_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/LocalizationUtils_jni.h \
+	$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/TouchDevice_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/ViewAndroid_jni.h \
@@ -97,6 +107,7 @@
 	$(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/DeviceFormFactor_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/LocalizationUtils_jni.h \
+	$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/TouchDevice_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/ViewAndroid_jni.h \
diff --git a/ui/base/ui_base_jni_headers.target.darwin-x86.mk b/ui/base/ui_base_jni_headers.target.darwin-x86.mk
index 649b9f0..e167045 100644
--- a/ui/base/ui_base_jni_headers.target.darwin-x86.mk
+++ b/ui/base/ui_base_jni_headers.target.darwin-x86.mk
@@ -16,7 +16,7 @@
 
 
 ### Generated for rule "ui_base_ui_base_gyp_ui_base_jni_headers_target_generate_jni_headers":
-# "{'inputs': ['../../base/android/jni_generator/jni_generator.py', '../../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/ui/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['../android/java/src/org/chromium/ui/base/Clipboard.java', '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java', '../android/java/src/org/chromium/ui/base/LocalizationUtils.java', '../android/java/src/org/chromium/ui/base/SelectFileDialog.java', '../android/java/src/org/chromium/ui/base/TouchDevice.java', '../android/java/src/org/chromium/ui/base/ViewAndroid.java', '../android/java/src/org/chromium/ui/base/WindowAndroid.java'], 'action': ['../../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/ui/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
+# "{'inputs': ['../../base/android/jni_generator/jni_generator.py', '../../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/ui/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['../android/java/src/org/chromium/ui/base/Clipboard.java', '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java', '../android/java/src/org/chromium/ui/base/LocalizationUtils.java', '../android/java/src/org/chromium/ui/base/ResourceBundle.java', '../android/java/src/org/chromium/ui/base/SelectFileDialog.java', '../android/java/src/org/chromium/ui/base/TouchDevice.java', '../android/java/src/org/chromium/ui/base/ViewAndroid.java', '../android/java/src/org/chromium/ui/base/WindowAndroid.java'], 'action': ['../../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/ui/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
@@ -44,6 +44,15 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/ui/jni; cd $(gyp_local_path)/ui/base; ../../base/android/jni_generator/jni_generator.py --input_file ../android/java/src/org/chromium/ui/base/LocalizationUtils.java --output_dir "$(gyp_shared_intermediate_dir)/ui/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: $(LOCAL_PATH)/ui/android/java/src/org/chromium/ui/base/ResourceBundle.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/ui/jni; cd $(gyp_local_path)/ui/base; ../../base/android/jni_generator/jni_generator.py --input_file ../android/java/src/org/chromium/ui/base/ResourceBundle.java --output_dir "$(gyp_shared_intermediate_dir)/ui/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../../android_webview/build/jarjar-rules.txt --ptr_type long
+
+
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
@@ -85,6 +94,7 @@
 	$(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/DeviceFormFactor_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/LocalizationUtils_jni.h \
+	$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/TouchDevice_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/ViewAndroid_jni.h \
@@ -97,6 +107,7 @@
 	$(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/DeviceFormFactor_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/LocalizationUtils_jni.h \
+	$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/TouchDevice_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/ViewAndroid_jni.h \
diff --git a/ui/base/ui_base_jni_headers.target.darwin-x86_64.mk b/ui/base/ui_base_jni_headers.target.darwin-x86_64.mk
index eaad221..b2218ac 100644
--- a/ui/base/ui_base_jni_headers.target.darwin-x86_64.mk
+++ b/ui/base/ui_base_jni_headers.target.darwin-x86_64.mk
@@ -16,7 +16,7 @@
 
 
 ### Generated for rule "ui_base_ui_base_gyp_ui_base_jni_headers_target_generate_jni_headers":
-# "{'inputs': ['../../base/android/jni_generator/jni_generator.py', '../../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/ui/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['../android/java/src/org/chromium/ui/base/Clipboard.java', '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java', '../android/java/src/org/chromium/ui/base/LocalizationUtils.java', '../android/java/src/org/chromium/ui/base/SelectFileDialog.java', '../android/java/src/org/chromium/ui/base/TouchDevice.java', '../android/java/src/org/chromium/ui/base/ViewAndroid.java', '../android/java/src/org/chromium/ui/base/WindowAndroid.java'], 'action': ['../../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/ui/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
+# "{'inputs': ['../../base/android/jni_generator/jni_generator.py', '../../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/ui/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['../android/java/src/org/chromium/ui/base/Clipboard.java', '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java', '../android/java/src/org/chromium/ui/base/LocalizationUtils.java', '../android/java/src/org/chromium/ui/base/ResourceBundle.java', '../android/java/src/org/chromium/ui/base/SelectFileDialog.java', '../android/java/src/org/chromium/ui/base/TouchDevice.java', '../android/java/src/org/chromium/ui/base/ViewAndroid.java', '../android/java/src/org/chromium/ui/base/WindowAndroid.java'], 'action': ['../../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/ui/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
@@ -44,6 +44,15 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/ui/jni; cd $(gyp_local_path)/ui/base; ../../base/android/jni_generator/jni_generator.py --input_file ../android/java/src/org/chromium/ui/base/LocalizationUtils.java --output_dir "$(gyp_shared_intermediate_dir)/ui/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: $(LOCAL_PATH)/ui/android/java/src/org/chromium/ui/base/ResourceBundle.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/ui/jni; cd $(gyp_local_path)/ui/base; ../../base/android/jni_generator/jni_generator.py --input_file ../android/java/src/org/chromium/ui/base/ResourceBundle.java --output_dir "$(gyp_shared_intermediate_dir)/ui/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../../android_webview/build/jarjar-rules.txt --ptr_type long
+
+
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
@@ -85,6 +94,7 @@
 	$(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/DeviceFormFactor_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/LocalizationUtils_jni.h \
+	$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/TouchDevice_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/ViewAndroid_jni.h \
@@ -97,6 +107,7 @@
 	$(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/DeviceFormFactor_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/LocalizationUtils_jni.h \
+	$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/TouchDevice_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/ViewAndroid_jni.h \
diff --git a/ui/base/ui_base_jni_headers.target.linux-arm.mk b/ui/base/ui_base_jni_headers.target.linux-arm.mk
index fcb9028..16f9658 100644
--- a/ui/base/ui_base_jni_headers.target.linux-arm.mk
+++ b/ui/base/ui_base_jni_headers.target.linux-arm.mk
@@ -16,7 +16,7 @@
 
 
 ### Generated for rule "ui_base_ui_base_gyp_ui_base_jni_headers_target_generate_jni_headers":
-# "{'inputs': ['../../base/android/jni_generator/jni_generator.py', '../../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/ui/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['../android/java/src/org/chromium/ui/base/Clipboard.java', '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java', '../android/java/src/org/chromium/ui/base/LocalizationUtils.java', '../android/java/src/org/chromium/ui/base/SelectFileDialog.java', '../android/java/src/org/chromium/ui/base/TouchDevice.java', '../android/java/src/org/chromium/ui/base/ViewAndroid.java', '../android/java/src/org/chromium/ui/base/WindowAndroid.java'], 'action': ['../../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/ui/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
+# "{'inputs': ['../../base/android/jni_generator/jni_generator.py', '../../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/ui/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['../android/java/src/org/chromium/ui/base/Clipboard.java', '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java', '../android/java/src/org/chromium/ui/base/LocalizationUtils.java', '../android/java/src/org/chromium/ui/base/ResourceBundle.java', '../android/java/src/org/chromium/ui/base/SelectFileDialog.java', '../android/java/src/org/chromium/ui/base/TouchDevice.java', '../android/java/src/org/chromium/ui/base/ViewAndroid.java', '../android/java/src/org/chromium/ui/base/WindowAndroid.java'], 'action': ['../../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/ui/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
@@ -44,6 +44,15 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/ui/jni; cd $(gyp_local_path)/ui/base; ../../base/android/jni_generator/jni_generator.py --input_file ../android/java/src/org/chromium/ui/base/LocalizationUtils.java --output_dir "$(gyp_shared_intermediate_dir)/ui/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: $(LOCAL_PATH)/ui/android/java/src/org/chromium/ui/base/ResourceBundle.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/ui/jni; cd $(gyp_local_path)/ui/base; ../../base/android/jni_generator/jni_generator.py --input_file ../android/java/src/org/chromium/ui/base/ResourceBundle.java --output_dir "$(gyp_shared_intermediate_dir)/ui/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../../android_webview/build/jarjar-rules.txt --ptr_type long
+
+
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
@@ -85,6 +94,7 @@
 	$(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/DeviceFormFactor_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/LocalizationUtils_jni.h \
+	$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/TouchDevice_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/ViewAndroid_jni.h \
@@ -97,6 +107,7 @@
 	$(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/DeviceFormFactor_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/LocalizationUtils_jni.h \
+	$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/TouchDevice_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/ViewAndroid_jni.h \
diff --git a/ui/base/ui_base_jni_headers.target.linux-arm64.mk b/ui/base/ui_base_jni_headers.target.linux-arm64.mk
index 7fe220a..e4e2e9b 100644
--- a/ui/base/ui_base_jni_headers.target.linux-arm64.mk
+++ b/ui/base/ui_base_jni_headers.target.linux-arm64.mk
@@ -16,7 +16,7 @@
 
 
 ### Generated for rule "ui_base_ui_base_gyp_ui_base_jni_headers_target_generate_jni_headers":
-# "{'inputs': ['../../base/android/jni_generator/jni_generator.py', '../../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/ui/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['../android/java/src/org/chromium/ui/base/Clipboard.java', '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java', '../android/java/src/org/chromium/ui/base/LocalizationUtils.java', '../android/java/src/org/chromium/ui/base/SelectFileDialog.java', '../android/java/src/org/chromium/ui/base/TouchDevice.java', '../android/java/src/org/chromium/ui/base/ViewAndroid.java', '../android/java/src/org/chromium/ui/base/WindowAndroid.java'], 'action': ['../../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/ui/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
+# "{'inputs': ['../../base/android/jni_generator/jni_generator.py', '../../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/ui/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['../android/java/src/org/chromium/ui/base/Clipboard.java', '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java', '../android/java/src/org/chromium/ui/base/LocalizationUtils.java', '../android/java/src/org/chromium/ui/base/ResourceBundle.java', '../android/java/src/org/chromium/ui/base/SelectFileDialog.java', '../android/java/src/org/chromium/ui/base/TouchDevice.java', '../android/java/src/org/chromium/ui/base/ViewAndroid.java', '../android/java/src/org/chromium/ui/base/WindowAndroid.java'], 'action': ['../../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/ui/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
@@ -44,6 +44,15 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/ui/jni; cd $(gyp_local_path)/ui/base; ../../base/android/jni_generator/jni_generator.py --input_file ../android/java/src/org/chromium/ui/base/LocalizationUtils.java --output_dir "$(gyp_shared_intermediate_dir)/ui/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: $(LOCAL_PATH)/ui/android/java/src/org/chromium/ui/base/ResourceBundle.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/ui/jni; cd $(gyp_local_path)/ui/base; ../../base/android/jni_generator/jni_generator.py --input_file ../android/java/src/org/chromium/ui/base/ResourceBundle.java --output_dir "$(gyp_shared_intermediate_dir)/ui/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../../android_webview/build/jarjar-rules.txt --ptr_type long
+
+
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
@@ -85,6 +94,7 @@
 	$(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/DeviceFormFactor_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/LocalizationUtils_jni.h \
+	$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/TouchDevice_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/ViewAndroid_jni.h \
@@ -97,6 +107,7 @@
 	$(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/DeviceFormFactor_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/LocalizationUtils_jni.h \
+	$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/TouchDevice_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/ViewAndroid_jni.h \
diff --git a/ui/base/ui_base_jni_headers.target.linux-mips.mk b/ui/base/ui_base_jni_headers.target.linux-mips.mk
index 2f18453..904354f 100644
--- a/ui/base/ui_base_jni_headers.target.linux-mips.mk
+++ b/ui/base/ui_base_jni_headers.target.linux-mips.mk
@@ -16,7 +16,7 @@
 
 
 ### Generated for rule "ui_base_ui_base_gyp_ui_base_jni_headers_target_generate_jni_headers":
-# "{'inputs': ['../../base/android/jni_generator/jni_generator.py', '../../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/ui/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['../android/java/src/org/chromium/ui/base/Clipboard.java', '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java', '../android/java/src/org/chromium/ui/base/LocalizationUtils.java', '../android/java/src/org/chromium/ui/base/SelectFileDialog.java', '../android/java/src/org/chromium/ui/base/TouchDevice.java', '../android/java/src/org/chromium/ui/base/ViewAndroid.java', '../android/java/src/org/chromium/ui/base/WindowAndroid.java'], 'action': ['../../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/ui/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
+# "{'inputs': ['../../base/android/jni_generator/jni_generator.py', '../../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/ui/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['../android/java/src/org/chromium/ui/base/Clipboard.java', '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java', '../android/java/src/org/chromium/ui/base/LocalizationUtils.java', '../android/java/src/org/chromium/ui/base/ResourceBundle.java', '../android/java/src/org/chromium/ui/base/SelectFileDialog.java', '../android/java/src/org/chromium/ui/base/TouchDevice.java', '../android/java/src/org/chromium/ui/base/ViewAndroid.java', '../android/java/src/org/chromium/ui/base/WindowAndroid.java'], 'action': ['../../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/ui/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
@@ -44,6 +44,15 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/ui/jni; cd $(gyp_local_path)/ui/base; ../../base/android/jni_generator/jni_generator.py --input_file ../android/java/src/org/chromium/ui/base/LocalizationUtils.java --output_dir "$(gyp_shared_intermediate_dir)/ui/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: $(LOCAL_PATH)/ui/android/java/src/org/chromium/ui/base/ResourceBundle.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/ui/jni; cd $(gyp_local_path)/ui/base; ../../base/android/jni_generator/jni_generator.py --input_file ../android/java/src/org/chromium/ui/base/ResourceBundle.java --output_dir "$(gyp_shared_intermediate_dir)/ui/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../../android_webview/build/jarjar-rules.txt --ptr_type long
+
+
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
@@ -85,6 +94,7 @@
 	$(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/DeviceFormFactor_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/LocalizationUtils_jni.h \
+	$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/TouchDevice_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/ViewAndroid_jni.h \
@@ -97,6 +107,7 @@
 	$(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/DeviceFormFactor_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/LocalizationUtils_jni.h \
+	$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/TouchDevice_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/ViewAndroid_jni.h \
diff --git a/ui/base/ui_base_jni_headers.target.linux-x86.mk b/ui/base/ui_base_jni_headers.target.linux-x86.mk
index 649b9f0..e167045 100644
--- a/ui/base/ui_base_jni_headers.target.linux-x86.mk
+++ b/ui/base/ui_base_jni_headers.target.linux-x86.mk
@@ -16,7 +16,7 @@
 
 
 ### Generated for rule "ui_base_ui_base_gyp_ui_base_jni_headers_target_generate_jni_headers":
-# "{'inputs': ['../../base/android/jni_generator/jni_generator.py', '../../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/ui/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['../android/java/src/org/chromium/ui/base/Clipboard.java', '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java', '../android/java/src/org/chromium/ui/base/LocalizationUtils.java', '../android/java/src/org/chromium/ui/base/SelectFileDialog.java', '../android/java/src/org/chromium/ui/base/TouchDevice.java', '../android/java/src/org/chromium/ui/base/ViewAndroid.java', '../android/java/src/org/chromium/ui/base/WindowAndroid.java'], 'action': ['../../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/ui/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
+# "{'inputs': ['../../base/android/jni_generator/jni_generator.py', '../../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/ui/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['../android/java/src/org/chromium/ui/base/Clipboard.java', '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java', '../android/java/src/org/chromium/ui/base/LocalizationUtils.java', '../android/java/src/org/chromium/ui/base/ResourceBundle.java', '../android/java/src/org/chromium/ui/base/SelectFileDialog.java', '../android/java/src/org/chromium/ui/base/TouchDevice.java', '../android/java/src/org/chromium/ui/base/ViewAndroid.java', '../android/java/src/org/chromium/ui/base/WindowAndroid.java'], 'action': ['../../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/ui/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
@@ -44,6 +44,15 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/ui/jni; cd $(gyp_local_path)/ui/base; ../../base/android/jni_generator/jni_generator.py --input_file ../android/java/src/org/chromium/ui/base/LocalizationUtils.java --output_dir "$(gyp_shared_intermediate_dir)/ui/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: $(LOCAL_PATH)/ui/android/java/src/org/chromium/ui/base/ResourceBundle.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/ui/jni; cd $(gyp_local_path)/ui/base; ../../base/android/jni_generator/jni_generator.py --input_file ../android/java/src/org/chromium/ui/base/ResourceBundle.java --output_dir "$(gyp_shared_intermediate_dir)/ui/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../../android_webview/build/jarjar-rules.txt --ptr_type long
+
+
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
@@ -85,6 +94,7 @@
 	$(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/DeviceFormFactor_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/LocalizationUtils_jni.h \
+	$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/TouchDevice_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/ViewAndroid_jni.h \
@@ -97,6 +107,7 @@
 	$(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/DeviceFormFactor_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/LocalizationUtils_jni.h \
+	$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/TouchDevice_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/ViewAndroid_jni.h \
diff --git a/ui/base/ui_base_jni_headers.target.linux-x86_64.mk b/ui/base/ui_base_jni_headers.target.linux-x86_64.mk
index eaad221..b2218ac 100644
--- a/ui/base/ui_base_jni_headers.target.linux-x86_64.mk
+++ b/ui/base/ui_base_jni_headers.target.linux-x86_64.mk
@@ -16,7 +16,7 @@
 
 
 ### Generated for rule "ui_base_ui_base_gyp_ui_base_jni_headers_target_generate_jni_headers":
-# "{'inputs': ['../../base/android/jni_generator/jni_generator.py', '../../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/ui/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['../android/java/src/org/chromium/ui/base/Clipboard.java', '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java', '../android/java/src/org/chromium/ui/base/LocalizationUtils.java', '../android/java/src/org/chromium/ui/base/SelectFileDialog.java', '../android/java/src/org/chromium/ui/base/TouchDevice.java', '../android/java/src/org/chromium/ui/base/ViewAndroid.java', '../android/java/src/org/chromium/ui/base/WindowAndroid.java'], 'action': ['../../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/ui/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
+# "{'inputs': ['../../base/android/jni_generator/jni_generator.py', '../../android_webview/build/jarjar-rules.txt'], 'process_outputs_as_sources': '1', 'extension': 'java', 'outputs': ['$(gyp_shared_intermediate_dir)/ui/jni/%(INPUT_ROOT)s_jni.h'], 'rule_name': 'generate_jni_headers', 'rule_sources': ['../android/java/src/org/chromium/ui/base/Clipboard.java', '../android/java/src/org/chromium/ui/base/DeviceFormFactor.java', '../android/java/src/org/chromium/ui/base/LocalizationUtils.java', '../android/java/src/org/chromium/ui/base/ResourceBundle.java', '../android/java/src/org/chromium/ui/base/SelectFileDialog.java', '../android/java/src/org/chromium/ui/base/TouchDevice.java', '../android/java/src/org/chromium/ui/base/ViewAndroid.java', '../android/java/src/org/chromium/ui/base/WindowAndroid.java'], 'action': ['../../base/android/jni_generator/jni_generator.py', '--input_file', '$(RULE_SOURCES)', '--output_dir', '$(gyp_shared_intermediate_dir)/ui/jni', '--includes', 'base/android/jni_generator/jni_generator_helper.h', '--optimize_generation', '0', '--jarjar', '../../android_webview/build/jarjar-rules.txt', '--ptr_type', 'long'], 'message': 'Generating JNI bindings from $(RULE_SOURCES)'}":
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
 $(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
@@ -44,6 +44,15 @@
 	mkdir -p $(gyp_shared_intermediate_dir)/ui/jni; cd $(gyp_local_path)/ui/base; ../../base/android/jni_generator/jni_generator.py --input_file ../android/java/src/org/chromium/ui/base/LocalizationUtils.java --output_dir "$(gyp_shared_intermediate_dir)/ui/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../../android_webview/build/jarjar-rules.txt --ptr_type long
 
 
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_local_path := $(LOCAL_PATH)
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: gyp_shared_intermediate_dir := $(abspath $(gyp_shared_intermediate_dir))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: export PATH := $(subst $(ANDROID_BUILD_PATHS),,$(PATH))
+$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h: $(LOCAL_PATH)/ui/android/java/src/org/chromium/ui/base/ResourceBundle.java $(LOCAL_PATH)/base/android/jni_generator/jni_generator.py $(LOCAL_PATH)/android_webview/build/jarjar-rules.txt $(GYP_TARGET_DEPENDENCIES)
+	mkdir -p $(gyp_shared_intermediate_dir)/ui/jni; cd $(gyp_local_path)/ui/base; ../../base/android/jni_generator/jni_generator.py --input_file ../android/java/src/org/chromium/ui/base/ResourceBundle.java --output_dir "$(gyp_shared_intermediate_dir)/ui/jni" --includes base/android/jni_generator/jni_generator_helper.h --optimize_generation 0 --jarjar ../../android_webview/build/jarjar-rules.txt --ptr_type long
+
+
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_local_path := $(LOCAL_PATH)
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_var_prefix := $(GYP_VAR_PREFIX)
 $(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h: gyp_intermediate_dir := $(abspath $(gyp_intermediate_dir))
@@ -85,6 +94,7 @@
 	$(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/DeviceFormFactor_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/LocalizationUtils_jni.h \
+	$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/TouchDevice_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/ViewAndroid_jni.h \
@@ -97,6 +107,7 @@
 	$(gyp_shared_intermediate_dir)/ui/jni/Clipboard_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/DeviceFormFactor_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/LocalizationUtils_jni.h \
+	$(gyp_shared_intermediate_dir)/ui/jni/ResourceBundle_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/SelectFileDialog_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/TouchDevice_jni.h \
 	$(gyp_shared_intermediate_dir)/ui/jni/ViewAndroid_jni.h \