Commit ccc5a98e authored by Tibor Goldschwendt's avatar Tibor Goldschwendt Committed by Commit Bot

[android] Remove async proguarded feature module functionality

We don't forsee that being used. Thus, remove code and reduce
maintenance burden.

Bug: 1012714
Change-Id: Ia3d93513c39f67e4a1c120e6b0688b4734a0aba3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1849940
Commit-Queue: Tibor Goldschwendt <tiborg@chromium.org>
Auto-Submit: Tibor Goldschwendt <tiborg@chromium.org>
Reviewed-by: default avatarPeter Wen <wnwen@chromium.org>
Reviewed-by: default avatarPiotr Bialecki <bialpio@chromium.org>
Reviewed-by: default avatarFred Mello <fredmello@chromium.org>
Cr-Commit-Position: refs/heads/master@{#704254}
parent a4219e7d
......@@ -11,7 +11,6 @@ java_binary("java_bytecode_rewriter") {
"java/org/chromium/bytecode/AssertionEnablerClassAdapter.java",
"java/org/chromium/bytecode/ByteCodeProcessor.java",
"java/org/chromium/bytecode/ClassPathValidator.java",
"java/org/chromium/bytecode/ConstantPoolReferenceReader.java",
"java/org/chromium/bytecode/CustomClassLoaderClassWriter.java",
"java/org/chromium/bytecode/CustomResourcesClassAdapter.java",
"java/org/chromium/bytecode/ThreadAssertionClassAdapter.java",
......
......@@ -63,7 +63,6 @@ class ByteCodeProcessor {
private static ClassLoader sDirectClassPathClassLoader;
private static ClassLoader sFullClassPathClassLoader;
private static Set<String> sFullClassPathJarPaths;
private static String sGenerateClassDepsPath;
private static ClassPathValidator sValidator;
private static class EntryDataPair {
......@@ -257,7 +256,6 @@ class ByteCodeProcessor {
sShouldUseCustomResources = args[currIndex++].equals("--enable-custom-resources");
sShouldUseThreadAnnotations = args[currIndex++].equals("--enable-thread-annotations");
sShouldCheckClassPath = args[currIndex++].equals("--enable-check-class-path");
sGenerateClassDepsPath = args[currIndex++];
int sdkJarsLength = Integer.parseInt(args[currIndex++]);
List<String> sdkJarPaths =
Arrays.asList(Arrays.copyOfRange(args, currIndex, currIndex + sdkJarsLength));
......@@ -280,13 +278,6 @@ class ByteCodeProcessor {
sFullClassPathJarPaths.addAll(
Arrays.asList(Arrays.copyOfRange(args, currIndex, args.length)));
// Write list of references from Java class constant pools to specified output file
// sGenerateClassDepsPath. This is needed for keep rule generation for async DFMs.
if (!sGenerateClassDepsPath.isEmpty()) {
ConstantPoolReferenceReader.writeConstantPoolRefsToFile(
sFullClassPathJarPaths, sGenerateClassDepsPath);
}
sFullClassPathClassLoader = loadJars(sFullClassPathJarPaths);
sFullClassPathJarPaths.removeAll(directClassPathJarPaths);
......
// Copyright 2019 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.bytecode;
import org.objectweb.asm.ClassReader;
import java.io.BufferedInputStream;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
/**
* Compiles list of references from all Java .class files in given jar paths by
* reading from the constant pool, and writes this list to an output file.
* This list is used for keep rule generation for maintaining compatibility between
* async DFMs and synchronous modules.
*/
public class ConstantPoolReferenceReader {
private static final String CLASS_FILE_SUFFIX = ".class";
private static final int BUFFER_SIZE = 16384;
// Constants representing Java constant pool tags
// See https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.4
private static final int FIELD_REF_TAG = 9;
private static final int METHOD_REF_TAG = 10;
private static final int INTERFACE_METHOD_REF_TAG = 11;
private static byte[] readAllBytes(InputStream inputStream) throws IOException {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int numRead = 0;
byte[] data = new byte[BUFFER_SIZE];
while ((numRead = inputStream.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, numRead);
}
return buffer.toByteArray();
}
/**
* Given a set of paths, generates references used to produce Proguard keep rules
* necessary for asynchronous DFMs.
* It reads all references stored in constant pools of Java classes from
* the specified jar paths and writes them to an output file.
* References written to the specified file can be converted to a
* corresponding set of Proguard keep rules using the
* constant_pool_refs_to_keep_rules.py script.
*
* @param jarPaths Set of paths specifying Java files to read constant pool
* references from.
* @param outputFilePath File path to write output to.
*/
public static void writeConstantPoolRefsToFile(Set<String> jarPaths, String outputFilePath) {
HashSet<String> classReferences = new HashSet<>();
for (String jarPath : jarPaths) {
try (ZipInputStream inputStream = new ZipInputStream(
new BufferedInputStream(new FileInputStream(jarPath)))) {
ZipEntry entry;
while ((entry = inputStream.getNextEntry()) != null) {
if (entry.isDirectory() || !entry.getName().endsWith(CLASS_FILE_SUFFIX)) {
continue;
}
byte[] data = readAllBytes(inputStream);
ClassReader reader = new ClassReader(data);
classReferences.addAll(collectConstantPoolClassReferences(reader));
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(outputFilePath));
for (String ref : classReferences) {
writer.append(ref);
writer.append("\n");
}
writer.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
/**
* Given a ClassReader, return a set of all super classes, implemented interfaces and
* members by reading from the associated class's constant pool.
*
* @param classReader .class file interface for reading the constant pool.
*/
private static Set<String> collectConstantPoolClassReferences(ClassReader classReader) {
char[] charBuffer = new char[classReader.getMaxStringLength()];
HashSet<String> classReferences = new HashSet<>();
classReferences.add(classReader.getSuperName());
classReferences.addAll(Arrays.asList(classReader.getInterfaces()));
// According to the Java spec, the constant pool is indexed from 1 to constant_pool_count -
// 1. See https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.4
StringBuilder refInfoString = new StringBuilder();
for (int i = 1; i < classReader.getItemCount(); i++) {
int offset = classReader.getItem(i);
if (offset <= 0) {
continue;
}
int constantType = classReader.readByte(offset - 1);
if (offset > 0
&& (constantType == METHOD_REF_TAG || constantType == FIELD_REF_TAG
|| constantType == INTERFACE_METHOD_REF_TAG)) {
// Read the corresponding class ref and member info from the constant pool.
int classIndex = classReader.readUnsignedShort(offset);
int classStartIndex = classReader.getItem(classIndex);
// Class index is a 2-byte quantity, nameAndTypeIndex is stored sequentially after.
int nameAndTypeIndex = classReader.readUnsignedShort(offset + 2);
int nameAndTypeStartIndex = classReader.getItem(nameAndTypeIndex);
// Get member's containing class's name, member's name, and member's details (type,
// return type, and argument types).
refInfoString.append(classReader.readUTF8(classStartIndex, charBuffer));
refInfoString.append(",");
refInfoString.append(classReader.readUTF8(nameAndTypeStartIndex, charBuffer));
refInfoString.append(",");
refInfoString.append(classReader.readUTF8(nameAndTypeStartIndex + 2, charBuffer));
classReferences.add(refInfoString.toString());
refInfoString.setLength(0);
}
}
return classReferences;
}
}
\ No newline at end of file
# Copyright 2019 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""
This script is used to convert a list of references to corresponding ProGuard
keep rules, for the purposes of maintaining compatibility between async DFMs
and synchronously proguarded modules.
This script take an input file generated from
//build/android/bytecode/java/org/chromium/bytecode/ByteCodeProcessor.java
during the build phase of an async module.
"""
from collections import defaultdict
import argparse
import sys
# Classes in _IGNORED_PACKAGES do not need explicit keep rules because they are
# system APIs and are already included in ProGuard configs.
_IGNORED_PACKAGES = ['java', 'android', 'org.w3c', 'org.xml', 'dalvik']
# Classes in _WHITELIST_PACKAGES are support libraries compiled into chrome
# that must bypass the _IGNORED_PACKAGES.
_WHITELIST_PACKAGES = ['android.support']
# TODO(https://crbug.com/968769): Filter may be too broad.
# Classes in _DFM_FEATURES will be excluded from "keep all members" rule.
_DFM_FEATURES = [
'org.chromium.chrome.autofill_assistant', 'org.chromium.chrome.tab_ui',
'org.chromium.chrome.browser.tasks.tab_management', 'org.chromium.chrome.vr'
]
# Mapping for translating Java bytecode type identifiers to source code type
# identifiers.
_TYPE_IDENTIFIER_MAP = {
'V': 'void',
'Z': 'boolean',
'B': 'byte',
'S': 'short',
'C': 'char',
'I': 'int',
'J': 'long',
'F': 'float',
'D': 'double',
}
# Translates DEX TypeDescriptor of the first type found in a given string to
# its source code type identifier, as described in
# https://source.android.com/devices/tech/dalvik/dex-format#typedescriptor,
# and returns the translated type and the starting index of the next type
# (if present).
def translate_single_type(typedesc):
array_count = 0
translated = ''
next_index = 0
# In the constant pool, fully qualified names (prefixed by 'L') have a
# trailing ';' if they are describing the type/return type of a symbol,
# or the type of arguments passed to a symbol. TypeDescriptor representing
# primitive types do not have trailing ';'s in any circumstances.
for i, c in enumerate(typedesc):
if c == '[':
array_count += 1
continue
if c == 'L':
# Fully qualified names have no trailing ';' if they are describing the
# containing class of a reference.
next_index = typedesc.find(';')
if next_index == -1:
next_index = len(typedesc)
translated = typedesc[i + 1:next_index]
break
else:
translated = _TYPE_IDENTIFIER_MAP[c]
next_index = i
break
translated += '[]' * array_count
return translated, next_index + 1
# Convert string of method argument types read from constant pool to
# corresponding list of srouce code type identifiers.
def parse_args_list(args_list):
parsed_args = []
start_index = 0
while start_index < len(args_list):
args_list = args_list[start_index:]
translated_arg, start_index = translate_single_type(args_list)
parsed_args.append(translated_arg)
return parsed_args
def add_to_refs(class_name, keep_entry, dep_refs):
# Add entry to class's keep rule if entry is not the empty string
if class_name in dep_refs and keep_entry:
dep_refs[class_name].append(keep_entry)
else:
dep_refs[class_name] = [keep_entry]
def should_include_class_path(class_path):
""" Check whether a class_path should be added as keep rule.
Conditions:
- Class is auto-generated (Lambdas/Nested, for example $)
- Class is not in a DFM Module
- Class is not in a black/white listed package
"""
nested_class = '$' in class_path
not_in_dfm = all(not class_path.startswith(f) for f in _DFM_FEATURES)
allowed_packages = not (any(
class_path.startswith(p)
for p in _IGNORED_PACKAGES) and all(not class_path.startswith(p)
for p in _WHITELIST_PACKAGES))
return nested_class or (not_in_dfm and allowed_packages)
def main(argv):
dep_refs = defaultdict(list)
extended_and_implemented_classes = set()
parser = argparse.ArgumentParser()
parser.add_argument(
'--input-file',
required=True,
help='Path to constant pool reference output.')
parser.add_argument(
'--output-file',
required=True,
help='Path to write corresponding keep rules to')
args = parser.parse_args(argv[1:])
with open(args.input_file, 'r') as constant_pool_refs:
for line in constant_pool_refs:
line = line.rstrip().replace('/', '.')
# Ignore any references specified by the list of
# _IGNORED_PACKAGES and not in _WHITELIST_PACKAGES.
if (any(line.startswith(p) for p in _IGNORED_PACKAGES)
and all(not line.startswith(p) for p in _WHITELIST_PACKAGES)):
continue
reflist = line.split(',')
# Lines denoting super classes and implemented interface references do
# not contain additional information and thus have reflist size 1.
# Store these as a separate set as they require full keep rules.
if len(reflist) == 1:
extended_and_implemented_classes.add(reflist[0])
continue
class_name = reflist[0]
member_name = reflist[1]
member_info = reflist[2]
keep_entry = ''
# When testing with the VR module, all class names read from constant
# pool output that were prefixed with '[' matched references to the
# overridden clone() method of the Object class. These seem to correspond
# to Java enum types defined within classes.
# It is not entirely clear whether or not this always represents
# an enum, why enums would be represented as such in the constant pool,
# or how we should go about keeping these references. For the moment,
# ignoring these references does not impact compatibility between
# modules.
if class_name.startswith('['):
continue
# Ignore R(esources) files that are from the same module.
if ('$' in class_name
and any(class_name.startswith(f) for f in _DFM_FEATURES)):
continue
# If member_info starts with '(', member is a method, otherwise member
# is a field.
# Format keep entries as per ProGuard documentation
# guardsquare.com/en/products/proguard/manual/usage#classspecification.
if member_info.startswith('('):
args_list, return_type = member_info.split(')')
args_list = parse_args_list(args_list[1:])
if member_name == '<init>':
# No return type specified for constructors.
return_type = ''
else:
return_type = translate_single_type(return_type)[0]
# Include types of function arguments.
for arg_type in args_list:
if should_include_class_path(arg_type):
extended_and_implemented_classes.add(arg_type)
# Include the actual class when it's a constructor.
if member_name == '<init>':
if should_include_class_path(class_name):
extended_and_implemented_classes.add(class_name)
continue
keep_entry = '%s %s(%s);' % (return_type, member_name,
', '.join(args_list))
else:
keep_entry = '%s %s;' % (translate_single_type(member_info)[0],
member_name)
dep_refs[class_name].append(keep_entry)
with open(args.output_file, 'w') as keep_rules:
# Write super classes and implemented interfaces to keep rules.
for super_class in sorted(extended_and_implemented_classes):
keep_rules.write('-keep class %s { *; }\n' % (super_class.rstrip()))
keep_rules.write('\n')
# Write all other class references to keep rules.
for c in sorted(dep_refs.iterkeys()):
if c in extended_and_implemented_classes:
continue
class_keeps = '\n '.join(dep_refs[c])
keep_rules.write('-keep class %s {\n %s\n}\n' % (c, class_keeps))
keep_rules.write('\n')
if __name__ == '__main__':
main(sys.argv)
# Copyright 2019 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.
import unittest
import re
import os
class TestProguardRuleGeneration(unittest.TestCase):
"""
This script is used to test a ProGuard keep rules for the purposes
of maintaining compatibility between async DFMs and synchronously
proguarded modules.
The rules are often generated by constant_pool_refs_to_keep_rules.py
This test can be run manually. Example:
python build/android/constant_pool_refs_to_keep_rules_test.py -v
"""
# Make sure this variable is set accordingly.
# It should point to a proguard file.
PROGUARD_FILE_PATH = os.path.join(
os.path.dirname(__file__),
"../../chrome/android/features/tab_ui/proguard_async.flags")
def test_TabUI_HasRules(self):
"""
Ensures that a few of the rules used in tabs_ui module are included.
Although this is far from 100% deterministic, these rules are
created by code that exercise different parts of the rule generation code.
"""
rules = set()
with open(self.PROGUARD_FILE_PATH, 'r') as proguard_rules:
for line in proguard_rules:
if line.startswith('-keep'):
rule = re.search('class (.+?) {', line).group(1)
rules.add(rule)
# The following rules test most of the use cases for
# rules that can be added automatically.
self.assertIn('org.chromium.ui.modelutil.PropertyModel', rules)
self.assertIn('org.chromium.ui.modelutil.PropertyModel', rules)
self.assertIn('org.chromium.ui.modelutil.PropertyKey', rules)
self.assertIn('org.chromium.chrome.browser.toolbar.ToolbarManager', rules)
self.assertIn('org.chromium.base.Supplier', rules)
self.assertIn('android.support.v7.widget.helper.ItemTouchHelper', rules)
self.assertIn(
'android.support.v7.widget.helper.ItemTouchHelper$SimpleCallback',
rules)
self.assertIn('android.support.v7.widget.helper.ItemTouchHelper$Callback',
rules)
self.assertIn('android.support.v4.content.ContextCompat', rules)
self.assertIn('android.support.v7.widget.GridLayoutManager', rules)
self.assertIn('android.support.v4.content.res.ResourcesCompat', rules)
self.assertIn(
'org.chromium.chrome.browser.tasks.tabgroup.TabGroupModelFilter', rules)
self.assertIn('android.support.v7.widget.RecyclerView$ViewHolder', rules)
self.assertIn('android.support.v7.widget.RecyclerView', rules)
self.assertIn('org.chromium.ui.modelutil.SimpleRecyclerViewMcpBase', rules)
self.assertIn('org.chromium.ui.modelutil.RecyclerViewAdapter', rules)
# The following rules need to be added manually.
self.assertNotIn(
'org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager' +
'$FullscreenListener$$CC', rules)
self.assertNotIn(
'org.chromium.chrome.browser.widget.bottomsheet.BottomSheet' +
'$BottomSheetContent$$CC', rules)
self.assertNotIn('org.chromium.ui.widget.RoundedCornerImageView', rules)
self.assertNotIn(
'android.support.v4.graphics.drawable.RoundedBitmapDrawable', rules)
def test_TabUI_HasNoDuplicateRules(self):
"""
Ensures that there are no duplicate keep rules
"""
rules = set()
with open(self.PROGUARD_FILE_PATH, 'r') as proguard_rules:
for line in proguard_rules:
if line.startswith('-keep'):
rule = re.search('class (.+?) {', line).group(1)
self.assertNotIn(rule, rules)
rules.add(rule)
if __name__ == '__main__':
unittest.main()
......@@ -36,7 +36,6 @@ def main(argv):
_AddSwitch(parser, '--enable-assert')
_AddSwitch(parser, '--enable-thread-annotations')
_AddSwitch(parser, '--enable-check-class-path')
parser.add_argument('--enable-class-deps-output', default='')
args = parser.parse_args(argv)
sdk_jars = build_utils.ParseGnList(args.sdk_classpath_jars)
......@@ -58,7 +57,6 @@ def main(argv):
args.script, args.input_jar, args.output_jar, verbose, args.is_prebuilt,
args.enable_assert, args.enable_custom_resources,
args.enable_thread_annotations, args.enable_check_class_path,
args.enable_class_deps_output,
str(len(sdk_jars))
] + sdk_jars + [str(len(direct_jars))] + direct_jars + extra_classpath_jars)
subprocess.check_call(cmd)
......
......@@ -111,8 +111,7 @@ def _ParseOptions():
parser.add_argument(
'--verbose', '-v', action='store_true', help='Print all ProGuard output')
parser.add_argument(
'--repackage-classes',
help='Unique package name given to an asynchronously proguarded module')
'--repackage-classes', help='Package all optimized classes are put in.')
parser.add_argument(
'--disable-outlining',
action='store_true',
......
......@@ -1529,10 +1529,8 @@ if (enable_java_templates) {
_desugar = defined(invoker.supports_android) && invoker.supports_android
_jacoco_instrument = invoker.jacoco_instrument
_enable_class_deps_output = defined(invoker.enable_class_deps_output)
_enable_bytecode_rewriter =
_enable_assert || _enable_custom_resources ||
_enable_thread_annotations || _enable_class_deps_output
_enable_assert || _enable_custom_resources || _enable_thread_annotations
_is_prebuilt = defined(invoker.is_prebuilt) && invoker.is_prebuilt
_enable_bytecode_checks = !defined(invoker.enable_bytecode_checks) ||
invoker.enable_bytecode_checks
......@@ -1548,7 +1546,6 @@ if (enable_java_templates) {
if (defined(invoker.enable_bytecode_rewriter)) {
not_needed([
"_enable_assert",
"_enable_class_deps_output",
"_enable_custom_resources",
"_enable_thread_annotations",
])
......@@ -1616,10 +1613,6 @@ if (enable_java_templates) {
if (_enable_bytecode_checks) {
args += [ "--enable-check-class-path" ]
}
if (_enable_class_deps_output) {
args += [ "--enable-class-deps-output" ] +
[ invoker.enable_class_deps_output ]
}
args += [
"--direct-classpath-jars",
"@FileArg($_rebased_build_config:javac:classpath)",
......@@ -3628,7 +3621,6 @@ if (enable_java_templates) {
[
"enable_bytecode_checks",
"enable_bytecode_rewriter",
"enable_class_deps_output",
"jar_excluded_patterns",
"jar_included_patterns",
])
......
......@@ -2779,7 +2779,6 @@ if (enable_java_templates) {
"base_module_target",
"chromium_code",
"classpath_deps",
"enable_class_deps_output",
"jacoco_never_instrument",
"java_files",
"javac_args",
......@@ -3508,7 +3507,6 @@ if (enable_java_templates) {
"data_deps",
"deps",
"enable_chromium_linker_tests",
"enable_class_deps_output",
"enable_multidex",
"generate_buildconfig_java",
"generate_final_jni",
......@@ -4387,13 +4385,6 @@ if (enable_java_templates) {
# module name (which cannot be 'base', since this is reserved for the
# base module), and an 'apk_target' field that specified the
# corresponding android_apk target name the module is modeled on.
# A scope may have an additional field, 'proguard_async', that
# specifies whether or not the module is asynchronous. This field should
# be set to true if the module is asynchronous, and set to false or left
# undefined otherwise.
# Async modules are those that are proguarded in a separate build step.
# This ensures that changes to these modules do not change the base
# module.
#
# enable_language_splits: Optional. If true, enable APK splits based
# on languages.
......@@ -4476,7 +4467,7 @@ if (enable_java_templates) {
_rebased_base_module_build_config =
rebase_path(_base_module_build_config, root_build_dir)
_sync_modules = [
_modules = [
{
name = "base"
module_target = invoker.base_module_target
......@@ -4485,8 +4476,6 @@ if (enable_java_templates) {
},
]
_async_modules = []
_proguard_enabled =
defined(invoker.proguard_enabled) && invoker.proguard_enabled
_enable_multidex =
......@@ -4507,10 +4496,7 @@ if (enable_java_templates) {
_sync_dex_target = "${target_name}__sync_dex"
_sync_dex_target_dep = ":$_sync_dex_target"
}
# TODO(crbug.com/938635): Combine synchronous proguard run mapping file
# and asynchronous proguard run mapping files into single .mapping.
_sync_proguard_mapping_path = "${_bundle_path}.mapping"
_proguard_mapping_path = "${_bundle_path}.mapping"
}
assert(_proguard_enabled || !defined(invoker.enable_multidex),
......@@ -4520,11 +4506,6 @@ if (enable_java_templates) {
_module_count = 0
not_needed([ "_module_count" ])
# Define unique package for each async proguarding run.
_async_package_number = 1
not_needed([ "_async_package_number" ])
foreach(_module, invoker.extra_modules) {
_module_count += 1
assert(defined(_module.name),
......@@ -4542,68 +4523,23 @@ if (enable_java_templates) {
"$_module_target_gen_dir/${_module_target_name}.build_config"
_module.build_config_target =
"$_module_target$build_config_target_suffix"
if (defined(_module.proguard_async) && _module.proguard_async) {
if (_proguard_enabled) {
# Use asynchronous proguarding for async modules.
_async_proguard_mapping_path =
"${_bundle_path}_${_module.name}.mapping"
_dex_zip = "${target_out_dir}/${target_name}/${target_name}_${_module.name}_dex.zip"
_module.dex_path = _dex_zip
# Give unique name to each async dex target using module name.
_async_dex_target = "${target_name}_${_module.name}_dex"
dex(_async_dex_target) {
enable_multidex = _enable_multidex
proguard_enabled = true
proguard_mapping_path = _async_proguard_mapping_path
forward_variables_from(invoker,
[
"proguard_jar_path",
"min_sdk_version",
])
build_config = _module.build_config
repackage_classes = "ap${_async_package_number}"
# TODO(https://crbug.com/952858): R8 currently doesn't handle
# applying mapping files.
# Pass mapping file of synchronous proguarding run to async
# module proguarding runs to preserve compatibility.
# apply_mapping = _sync_proguard_mapping_path
deps = [
_module.module_target,
_sync_dex_target_dep,
]
output = _dex_zip
}
_module.async_dex_target = _async_dex_target
_async_package_number += 1
}
_async_modules += [ _module ]
} else {
_sync_modules += [ _module ]
}
_modules += [ _module ]
}
}
# Make build config, which is required for synchronized proguarding.
_sync_module_java_targets = []
_sync_module_build_configs = []
_sync_module_targets = []
foreach(_module, _sync_modules) {
_sync_module_targets += [ _module.module_target ]
_sync_module_java_targets += [ "${_module.module_target}__java" ]
_sync_module_build_configs += [ _module.build_config ]
_module_java_targets = []
_module_build_configs = []
_module_targets = []
foreach(_module, _modules) {
_module_targets += [ _module.module_target ]
_module_java_targets += [ "${_module.module_target}__java" ]
_module_build_configs += [ _module.build_config ]
}
# Used to expose the module Java targets of the bundle.
group("${target_name}__java") {
deps = _sync_module_java_targets
deps = _module_java_targets
}
group("${target_name}__compile_resources") {
deps = [
......@@ -4628,14 +4564,11 @@ if (enable_java_templates) {
"${target_gen_dir}/${target_name}/${target_name}__unsplit_dex.zip"
write_build_config(_build_config_target) {
# We don't want async modules to be proguarded synchronously, so we leave
# them out of possible_config_deps.
type = "android_app_bundle"
possible_config_deps =
_sync_module_targets + [ proguard_android_sdk_dep_ ]
possible_config_deps = _module_targets + [ proguard_android_sdk_dep_ ]
build_config = _build_config
proguard_enabled = _proguard_enabled
module_build_configs = _sync_module_build_configs
module_build_configs = _module_build_configs
final_dex_path = _unsplit_dex_zip
if (_proguard_enabled) {
......@@ -4676,7 +4609,7 @@ if (enable_java_templates) {
proguard_expectations_file = _proguard_expectations_file
}
deps = _sync_module_java_targets + [ ":$_build_config_target" ]
deps = _module_java_targets + [ ":$_build_config_target" ]
output = _unsplit_dex_zip
}
}
......@@ -4684,30 +4617,25 @@ if (enable_java_templates) {
_dexsplitter_target = "${target_name}__dexsplitter"
dexsplitter(_dexsplitter_target) {
input_dex_zip = _unsplit_dex_zip
proguard_mapping = _sync_proguard_mapping_path
all_modules = _sync_modules
proguard_mapping = _proguard_mapping_path
all_modules = _modules
deps = [
":$_build_config_target",
_sync_dex_target_dep,
] + _sync_module_java_targets
] + _module_java_targets
}
}
# Merge async and sync module scopes.
_all_modules = _sync_modules + _async_modules
_all_create_module_targets = []
_all_module_zip_paths = []
_all_module_build_configs = []
foreach(_module, _all_modules) {
foreach(_module, _modules) {
_module_target = _module.module_target
_module_build_config = _module.build_config
_module_build_config_target = _module.build_config_target
if (!_proguard_enabled) {
_dex_target_for_module = "${_module_target}__final_dex"
} else if (defined(_module.dex_path)) {
_dex_target_for_module = ":${_module.async_dex_target}"
} else {
_dex_target_for_module = ":$_dexsplitter_target"
}
......@@ -4724,12 +4652,6 @@ if (enable_java_templates) {
build_config = _module_build_config
module_zip_path = _module_zip_path
# If module is async, use defined dex_path directly rather than
# build config FileArg.
if (defined(_module.dex_path)) {
dex_path = _module.dex_path
}
deps = [
_dex_target_for_module,
_module_build_config_target,
......@@ -4818,7 +4740,7 @@ if (enable_java_templates) {
]
}
foreach(_module, _all_modules) {
foreach(_module, _modules) {
_rebased_build_config =
rebase_path(_module.build_config, root_build_dir)
args += [
......@@ -4837,10 +4759,7 @@ if (enable_java_templates) {
# (have proguard enabled).
if (_proguard_enabled) {
# Merge all module targets to obtain size info files for all targets.
_all_module_targets = _sync_module_targets
foreach(_async_module, _async_modules) {
_all_module_targets += [ _async_module.module_target ]
}
_all_module_targets = _module_targets
_size_info_target = "${target_name}__size_info"
create_size_info_files(_size_info_target) {
......@@ -4911,14 +4830,13 @@ if (enable_java_templates) {
]
}
# TODO(crbug.com/938635): Combine async module mapping paths with the sync one.
if (_proguard_enabled) {
args += [
"--proguard-mapping-path",
rebase_path(_sync_proguard_mapping_path, root_build_dir),
rebase_path(_proguard_mapping_path, root_build_dir),
]
data_deps += [ "//build/android/stacktrace:java_deobfuscate" ]
data += [ _sync_proguard_mapping_path ]
data += [ _proguard_mapping_path ]
}
}
......
......@@ -475,23 +475,6 @@ android_library("chrome_java") {
"//components/module_installer/android:module_interface_processor",
]
proguard_configs = []
if (async_ar) {
proguard_configs += [ "//chrome/android/features/ar/proguard_async.flags" ]
}
if (async_vr) {
proguard_configs += [
"//chrome/android/features/vr/proguard_async.flags",
"//chrome/android/features/vr/proguard_async_manual.flags",
]
}
if (async_tab_ui) {
proguard_configs += [
"//chrome/android/features/tab_ui/proguard_async.flags",
"//chrome/android/features/tab_ui/proguard_async_manual.flags",
]
}
processor_args_javac = [ "dagger.fastInit=enabled" ]
}
......
......@@ -19,5 +19,4 @@ ar_module_desc = {
android_manifest = "//chrome/android/features/ar/AndroidManifest.xml"
loadable_modules_32_bit = [ "$_libarcore_dir/armeabi-v7a/libarcore_sdk_c.so" ]
loadable_modules_64_bit = [ "$_libarcore_dir/arm64-v8a/libarcore_sdk_c.so" ]
proguard_async = async_ar
}
# Explicitly keep the ArCoreShim interface. Because ArCoreShim
# is in base, and its implementing class ArCoreShimImpl is in AR,
# asynchronous proguarding of AR will cause ArCoreShim to be removed
# during synchronous proguarding, which causes AR on Chrome to crash.
-keep interface org.chromium.chrome.browser.vr.ArCoreShim {
*;
}
\ No newline at end of file
......@@ -175,8 +175,4 @@ android_library("java") {
"//third_party/android_deps:com_android_support_support_v13_java",
"//ui/android:ui_java",
]
if (async_tab_ui) {
proguard_configs = [ "//base/android/proguard/chromium_code.flags" ]
}
}
......@@ -5,7 +5,4 @@
declare_args() {
# Controls the feature being a DFM or not.
disable_tab_ui_dfm = true
# Whether to create tab_ui module as an asynchronous DFM.
async_tab_ui = false
}
# Copyright 2019 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.
-keep class android.content.res.Resources$Theme { *; }
-keep class android.support.v7.widget.GridLayoutManager { *; }
-keep class android.support.v7.widget.LinearLayoutManager { *; }
-keep class android.support.v7.widget.RecyclerView { *; }
-keep class android.support.v7.widget.RecyclerView$Adapter { *; }
-keep class android.support.v7.widget.RecyclerView$LayoutManager { *; }
-keep class android.support.v7.widget.RecyclerView$ViewHolder { *; }
-keep class android.support.v7.widget.helper.ItemTouchHelper { *; }
-keep class android.support.v7.widget.helper.ItemTouchHelper$Callback { *; }
-keep class android.support.v7.widget.helper.ItemTouchHelper$SimpleCallback { *; }
-keep class android.view.View$OnClickListener { *; }
-keep class android.widget.PopupWindow$OnDismissListener { *; }
-keep class boolean { *; }
-keep class float { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$anim { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$animator { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$array { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$attr { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$bool { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$color { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$dimen { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$drawable { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$font { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$fraction { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$id { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$integer { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$layout { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$menu { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$mipmap { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$plurals { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$string { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$style { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$styleable { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$transition { *; }
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R$xml { *; }
-keep class gen._chrome._android._monochrome_public_bundle__tab_ui_bundle_module__compile_resources.srcjar.R$dimen { *; }
-keep class gen._chrome._android._monochrome_public_bundle__tab_ui_bundle_module__compile_resources.srcjar.R$drawable { *; }
-keep class gen._chrome._android._monochrome_public_bundle__tab_ui_bundle_module__compile_resources.srcjar.R$id { *; }
-keep class gen._chrome._android._monochrome_public_bundle__tab_ui_bundle_module__compile_resources.srcjar.R$layout { *; }
-keep class int { *; }
-keep class int[] { *; }
-keep class long { *; }
-keep class null { *; }
-keep class org.apache.http.conn.scheme.LayeredSocketFactory { *; }
-keep class org.apache.http.conn.scheme.SocketFactory { *; }
-keep class org.apache.http.conn.ssl.AbstractVerifier { *; }
-keep class org.apache.http.conn.ssl.X509HostnameVerifier { *; }
-keep class org.apache.http.params.CoreConnectionPNames { *; }
-keep class org.chromium.base.Callback { *; }
-keep class org.chromium.base.ObserverList { *; }
-keep class org.chromium.base.Supplier { *; }
-keep class org.chromium.base.task.TaskTraits { *; }
-keep class org.chromium.chrome.browser.ThemeColorProvider { *; }
-keep class org.chromium.chrome.browser.ThemeColorProvider$ThemeColorObserver { *; }
-keep class org.chromium.chrome.browser.ThemeColorProvider$TintObserver { *; }
-keep class org.chromium.chrome.browser.compositor.CompositorViewHolder { *; }
-keep class org.chromium.chrome.browser.compositor.layouts.EmptyOverviewModeObserver { *; }
-keep class org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior { *; }
-keep class org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior$OverviewModeObserver { *; }
-keep class org.chromium.chrome.browser.compositor.layouts.content.TabContentManager { *; }
-keep class org.chromium.chrome.browser.favicon.FaviconHelper { *; }
-keep class org.chromium.chrome.browser.favicon.FaviconHelper$FaviconImageCallback { *; }
-keep class org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager { *; }
-keep class org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager$FullscreenListener { *; }
-keep class org.chromium.chrome.browser.gesturenav.HistoryNavigationDelegate { *; }
-keep class org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher { *; }
-keep class org.chromium.chrome.browser.lifecycle.Destroyable { *; }
-keep class org.chromium.chrome.browser.lifecycle.LifecycleObserver { *; }
-keep class org.chromium.chrome.browser.lifecycle.PauseResumeWithNativeObserver { *; }
-keep class org.chromium.chrome.browser.profiles.Profile { *; }
-keep class org.chromium.chrome.browser.tab.EmptyTabObserver { *; }
-keep class org.chromium.chrome.browser.tab.Tab { *; }
-keep class org.chromium.chrome.browser.tab.TabObserver { *; }
-keep class org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver { *; }
-keep class org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver { *; }
-keep class org.chromium.chrome.browser.tabmodel.TabCreatorManager { *; }
-keep class org.chromium.chrome.browser.tabmodel.TabList { *; }
-keep class org.chromium.chrome.browser.tabmodel.TabModel { *; }
-keep class org.chromium.chrome.browser.tabmodel.TabModelObserver { *; }
-keep class org.chromium.chrome.browser.tabmodel.TabModelSelector { *; }
-keep class org.chromium.chrome.browser.tabmodel.TabModelSelectorObserver { *; }
-keep class org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver { *; }
-keep class org.chromium.chrome.browser.tasks.tab_groups.TabGroupUtils$1 { *; }
-keep class org.chromium.chrome.browser.tasks.tab_management.GridTabSwitcher { *; }
-keep class org.chromium.chrome.browser.tasks.tab_management.GridTabSwitcher$GridController { *; }
-keep class org.chromium.chrome.browser.tasks.tab_management.GridTabSwitcherMediator$ResetHandler { *; }
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGridDialogMediator$ResetHandler { *; }
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGridSheetMediator$ResetHandler { *; }
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGridSheetViewBinder$ViewHolder { *; }
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGroupUi { *; }
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGroupUiMediator$ResetHandler { *; }
-keep class org.chromium.chrome.browser.tasks.tab_management.TabListMediator$CreateGroupButtonProvider { *; }
-keep class org.chromium.chrome.browser.tasks.tab_management.TabListMediator$GridCardOnClickListenerProvider { *; }
-keep class org.chromium.chrome.browser.tasks.tab_management.TabListMediator$IphProvider { *; }
-keep class org.chromium.chrome.browser.tasks.tab_management.TabListMediator$TabActionListener { *; }
-keep class org.chromium.chrome.browser.tasks.tab_management.TabListMediator$ThumbnailProvider { *; }
-keep class org.chromium.chrome.browser.tasks.tab_management.TabListMediator$TitleProvider { *; }
-keep class org.chromium.chrome.browser.tasks.tab_management.TabListRecyclerView$VisibilityListener { *; }
-keep class org.chromium.chrome.browser.tasks.tab_management.TabManagementDelegate { *; }
-keep class org.chromium.chrome.browser.toolbar.ToolbarManager { *; }
-keep class org.chromium.chrome.browser.toolbar.bottom.BottomControlsCoordinator$BottomControlsVisibilityController { *; }
-keep class org.chromium.chrome.browser.widget.ScrimView { *; }
-keep class org.chromium.chrome.browser.widget.ScrimView$ScrimObserver { *; }
-keep class org.chromium.chrome.browser.widget.ScrimView$ScrimParams { *; }
-keep class org.chromium.chrome.browser.widget.ScrimView$StatusBarScrimDelegate { *; }
-keep class org.chromium.chrome.browser.widget.bottomsheet.BottomSheet$BottomSheetContent { *; }
-keep class org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController { *; }
-keep class org.chromium.chrome.browser.widget.bottomsheet.BottomSheetObserver { *; }
-keep class org.chromium.chrome.browser.widget.bottomsheet.EmptyBottomSheetObserver { *; }
-keep class org.chromium.chrome.browser.widget.textbubble.TextBubble { *; }
-keep class org.chromium.components.feature_engagement.Tracker { *; }
-keep class org.chromium.content_public.browser.LoadUrlParams { *; }
-keep class org.chromium.ui.modelutil.ListModelBase { *; }
-keep class org.chromium.ui.modelutil.PropertyKey { *; }
-keep class org.chromium.ui.modelutil.PropertyKey[] { *; }
-keep class org.chromium.ui.modelutil.PropertyListModel { *; }
-keep class org.chromium.ui.modelutil.PropertyModel { *; }
-keep class org.chromium.ui.modelutil.PropertyModel$Builder { *; }
-keep class org.chromium.ui.modelutil.PropertyModel$ReadableBooleanPropertyKey { *; }
-keep class org.chromium.ui.modelutil.PropertyModel$ReadableFloatPropertyKey { *; }
-keep class org.chromium.ui.modelutil.PropertyModel$ReadableIntPropertyKey { *; }
-keep class org.chromium.ui.modelutil.PropertyModel$ReadableObjectPropertyKey { *; }
-keep class org.chromium.ui.modelutil.PropertyModel$WritableBooleanPropertyKey { *; }
-keep class org.chromium.ui.modelutil.PropertyModel$WritableFloatPropertyKey { *; }
-keep class org.chromium.ui.modelutil.PropertyModel$WritableIntPropertyKey { *; }
-keep class org.chromium.ui.modelutil.PropertyModel$WritableObjectPropertyKey { *; }
-keep class org.chromium.ui.modelutil.PropertyModelChangeProcessor$ViewBinder { *; }
-keep class org.chromium.ui.modelutil.PropertyObservable { *; }
-keep class org.chromium.ui.modelutil.RecyclerViewAdapter { *; }
-keep class org.chromium.ui.modelutil.RecyclerViewAdapter$Delegate { *; }
-keep class org.chromium.ui.modelutil.RecyclerViewAdapter$ViewHolderFactory { *; }
-keep class org.chromium.ui.modelutil.SimpleRecyclerViewMcpBase { *; }
-keep class org.chromium.ui.modelutil.SimpleRecyclerViewMcpBase$ItemViewTypeCallback { *; }
-keep class org.chromium.ui.modelutil.SimpleRecyclerViewMcpBase$ViewBinder { *; }
-keep class org.chromium.ui.resources.dynamics.DynamicResource { *; }
-keep class org.chromium.ui.resources.dynamics.DynamicResourceLoader { *; }
-keep class org.chromium.ui.resources.dynamics.ViewResourceAdapter { *; }
-keep class org.chromium.ui.widget.RectProvider { *; }
-keep class org.chromium.ui.widget.ViewRectProvider { *; }
-keep class android.support.v4.content.ContextCompat {
int getColor(android.content.Context, int);
}
-keep class android.support.v4.content.res.ResourcesCompat {
android.graphics.drawable.Drawable getDrawable(android.content.res.Resources, int, android.content.res.Resources$Theme);
}
-keep class android.support.v7.content.res.AppCompatResources {
android.graphics.drawable.Drawable getDrawable(android.content.Context, int);
}
-keep class android.support.v7.widget.RecyclerView$ItemAnimator {
void setAddDuration(long);
long getAddDuration();
}
-keep class gen._chrome._android._features._tab_ui._java_resources.srcjar.R {
void onResourcesLoaded(int);
void onResourcesLoadedString(int);
void onResourcesLoadedDrawable(int);
void onResourcesLoadedMipmap(int);
void onResourcesLoadedStyleable(int);
void onResourcesLoadedInteger(int);
void onResourcesLoadedColor(int);
boolean sResourcesDidLoad;
void onResourcesLoadedMenu(int);
void onResourcesLoadedDimen(int);
void onResourcesLoadedXml(int);
void onResourcesLoadedLayout(int);
void onResourcesLoadedTransition(int);
void onResourcesLoadedBool(int);
void onResourcesLoadedFont(int);
void onResourcesLoadedAnim(int);
void onResourcesLoadedAnimator(int);
void onResourcesLoadedArray(int);
void onResourcesLoadedStyle(int);
void onResourcesLoadedFraction(int);
void onResourcesLoadedAttr(int);
void onResourcesLoadedId(int);
void onResourcesLoadedPlurals(int);
}
-keep class org.apache.http.conn.ssl.SSLSocketFactory {
org.apache.http.conn.ssl.X509HostnameVerifier ALLOW_ALL_HOSTNAME_VERIFIER;
org.apache.http.conn.ssl.X509HostnameVerifier STRICT_HOSTNAME_VERIFIER;
org.apache.http.conn.ssl.X509HostnameVerifier BROWSER_COMPATIBLE_HOSTNAME_VERIFIER;
}
-keep class org.chromium.base.ApiCompatibilityUtils {
void setImageTintList(android.widget.ImageView, android.content.res.ColorStateList);
int getColor(android.content.res.Resources, int);
}
-keep class org.chromium.base.ApplicationStatus {
android.app.Activity getLastTrackedFocusedActivity();
}
-keep class org.chromium.base.ContextUtils {
android.content.Context getApplicationContext();
}
-keep class org.chromium.base.Log {
void w(java.lang.String, java.lang.String, java.lang.Object[]);
}
-keep class org.chromium.base.metrics.RecordHistogram {
void recordSparseHistogram(java.lang.String, int);
void recordCountHistogram(java.lang.String, int);
}
-keep class org.chromium.base.metrics.RecordUserAction {
void record(java.lang.String);
}
-keep class org.chromium.base.task.PostTask {
void postTask(org.chromium.base.task.TaskTraits, java.lang.Runnable);
}
-keep class org.chromium.chrome.R$color {
int modern_grey_100;
int modern_grey_800_alpha_38;
int modern_primary_color;
int default_text_color_dark;
int modern_grey_300;
}
-keep class org.chromium.chrome.R$dimen {
int toolbar_height_no_shadow;
int control_container_height;
int compositor_tab_title_text_size;
int default_favicon_size;
}
-keep class org.chromium.chrome.R$drawable {
int btn_close;
int ic_globe_24dp;
int chromelogo16;
}
-keep class org.chromium.chrome.R$plurals {
int bottom_tab_grid_title_placeholder;
}
-keep class org.chromium.chrome.R$string {
int iph_tab_groups_your_tabs_together_text;
int bottom_tab_grid_opened_full;
int accessibility_tabstrip_tab;
int iph_tab_groups_quickly_compare_pages_text;
int iph_tab_groups_tap_to_see_another_tab_text;
int bottom_tab_grid_opened_half;
int iph_tab_groups_tap_to_see_another_tab_accessibility_text;
int accessibility_tabstrip_btn_close_tab;
int bottom_tab_grid_description;
int bottom_tab_grid_closed;
}
-keep class org.chromium.chrome.browser.ChromeActivity {
org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher getLifecycleDispatcher();
org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior getOverviewModeBehavior();
org.chromium.chrome.browser.toolbar.ToolbarManager getToolbarManager();
void onBackPressed();
org.chromium.chrome.browser.compositor.layouts.content.TabContentManager getTabContentManager();
org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager getFullscreenManager();
boolean isWarmOnResume();
org.chromium.chrome.browser.tabmodel.TabModelSelector getTabModelSelector();
org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController getBottomSheetController();
org.chromium.chrome.browser.compositor.CompositorViewHolder getCompositorViewHolder();
}
-keep class org.chromium.chrome.browser.ChromeFeatureList {
boolean isInitialized();
boolean isEnabled(java.lang.String);
}
-keep class org.chromium.chrome.browser.ChromeTabbedActivity {
org.chromium.chrome.browser.tabmodel.TabModelSelector getTabModelSelector();
org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior getOverviewModeBehavior();
}
-keep class org.chromium.chrome.browser.feature_engagement.TrackerFactory {
org.chromium.components.feature_engagement.Tracker getTrackerForProfile(org.chromium.chrome.browser.profiles.Profile);
}
-keep class org.chromium.chrome.browser.gesturenav.HistoryNavigationLayout {
void setNavigationDelegate(org.chromium.chrome.browser.gesturenav.HistoryNavigationDelegate);
}
-keep class org.chromium.chrome.browser.metrics.UmaSessionStats {
void registerSyntheticFieldTrial(java.lang.String, java.lang.String);
}
-keep class org.chromium.chrome.browser.native_page.NativePageFactory {
boolean isNativePageUrl(java.lang.String, boolean);
}
-keep class org.chromium.chrome.browser.tabmodel.TabCreatorManager$TabCreator {
org.chromium.chrome.browser.tab.Tab createNewTab(org.chromium.content_public.browser.LoadUrlParams, int, org.chromium.chrome.browser.tab.Tab);
}
-keep class org.chromium.chrome.browser.tabmodel.TabModelFilter {
int index();
int indexOf(org.chromium.chrome.browser.tab.Tab);
boolean isIncognito();
java.util.List getRelatedTabList(int);
}
-keep class org.chromium.chrome.browser.tabmodel.TabModelFilterProvider {
void removeTabModelFilterObserver(org.chromium.chrome.browser.tabmodel.TabModelObserver);
org.chromium.chrome.browser.tabmodel.TabModelFilter getTabModelFilter(boolean);
org.chromium.chrome.browser.tabmodel.TabModelFilter getCurrentTabModelFilter();
void addTabModelFilterObserver(org.chromium.chrome.browser.tabmodel.TabModelObserver);
}
-keep class org.chromium.chrome.browser.tabmodel.TabModelUtils {
int getTabIndexById(org.chromium.chrome.browser.tabmodel.TabList, int);
org.chromium.chrome.browser.tab.Tab getTabById(org.chromium.chrome.browser.tabmodel.TabList, int);
}
-keep class org.chromium.chrome.browser.tasks.ReturnToChromeExperimentsUtil {
boolean shouldShowOmniboxOnTabSwitcher();
}
-keep class org.chromium.chrome.browser.tasks.tab_groups.TabGroupUtils {
boolean isMoveInSameGroup(org.chromium.chrome.browser.tabmodel.TabModel, int, int);
boolean $assertionsDisabled;
void lambda$maybeShowIPH$0(org.chromium.components.feature_engagement.Tracker, java.lang.String);
void startObservingForTabGroupsIPH(org.chromium.chrome.browser.tabmodel.TabModelSelector);
void maybeShowIPH(java.lang.String, android.view.View);
org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver access$000();
int getLastTabModelIndexForList(org.chromium.chrome.browser.tabmodel.TabModelSelector, java.util.List);
org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver sTabModelSelectorTabObserver;
int getFirstTabModelIndexForList(org.chromium.chrome.browser.tabmodel.TabModelSelector, java.util.List);
org.chromium.chrome.browser.tab.Tab getSelectedTabInGroupForTab(org.chromium.chrome.browser.tabmodel.TabModelSelector, org.chromium.chrome.browser.tab.Tab);
}
-keep class org.chromium.chrome.browser.tasks.tab_management.GridTabSwitcherCoordinator {
org.chromium.chrome.browser.tasks.tab_management.TabListCoordinator mTabGridCoordinator;
java.lang.String lambda$new$0(org.chromium.chrome.browser.tabmodel.TabModelSelector, android.content.Context, org.chromium.chrome.browser.tab.Tab);
org.chromium.ui.modelutil.PropertyModelChangeProcessor mContainerViewChangeProcessor;
org.chromium.chrome.browser.tasks.tab_management.TabGridDialogCoordinator mTabGridDialogCoordinator;
org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher mLifecycleDispatcher;
org.chromium.chrome.browser.tasks.tab_management.GridTabSwitcherMediator mMediator;
org.chromium.chrome.browser.tasks.tab_management.MultiThumbnailCardProvider mMultiThumbnailCardProvider;
}
-keep class org.chromium.chrome.browser.tasks.tab_management.GridTabSwitcherMediator {
org.chromium.chrome.browser.tasks.tab_management.TabListMediator$TabActionListener getGridCardOnClickListener(org.chromium.chrome.browser.tab.Tab);
java.util.List getRelatedTabs(int);
org.chromium.chrome.browser.tasks.tab_management.GridTabSwitcherMediator$ResetHandler access$300(org.chromium.chrome.browser.tasks.tab_management.GridTabSwitcherMediator);
boolean mShouldIgnoreNextSelect;
org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager$FullscreenListener mFullscreenListener;
void lambda$getCreateGroupButtonOnClickListener$1(int);
org.chromium.chrome.browser.tasks.tab_management.TabGridDialogMediator$ResetHandler mTabGridDialogResetHandler;
org.chromium.chrome.browser.tabmodel.TabModelSelector mTabModelSelector;
void prepareOverview();
org.chromium.chrome.browser.tabmodel.TabModelObserver mTabModelObserver;
boolean ableToCreateGroup(org.chromium.chrome.browser.tab.Tab);
void setContentOverlayVisibility(boolean);
org.chromium.ui.modelutil.PropertyModel access$000(org.chromium.chrome.browser.tasks.tab_management.GridTabSwitcherMediator);
org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager mFullscreenManager;
boolean access$102(org.chromium.chrome.browser.tasks.tab_management.GridTabSwitcherMediator, boolean);
org.chromium.chrome.browser.tasks.tab_management.GridTabSwitcherMediator$ResetHandler mResetHandler;
org.chromium.chrome.browser.tasks.tab_management.TabListMediator$TabActionListener getCreateGroupButtonOnClickListener(org.chromium.chrome.browser.tab.Tab);
void destroy();
org.chromium.base.ObserverList mObservers;
boolean access$100(org.chromium.chrome.browser.tasks.tab_management.GridTabSwitcherMediator);
void setVisibility(boolean);
boolean ableToOpenDialog(org.chromium.chrome.browser.tab.Tab);
org.chromium.chrome.browser.tabmodel.TabModelSelectorObserver mTabModelSelectorObserver;
void access$400(org.chromium.chrome.browser.tasks.tab_management.GridTabSwitcherMediator, boolean);
void lambda$getGridCardOnClickListener$0(int);
org.chromium.ui.modelutil.PropertyModel mContainerViewModel;
org.chromium.chrome.browser.compositor.CompositorViewHolder mCompositorViewHolder;
org.chromium.chrome.browser.tabmodel.TabModelSelector access$200(org.chromium.chrome.browser.tasks.tab_management.GridTabSwitcherMediator);
}
-keep class org.chromium.chrome.browser.tasks.tab_management.MultiThumbnailCardProvider {
android.graphics.Paint access$1000(org.chromium.chrome.browser.tasks.tab_management.MultiThumbnailCardProvider);
org.chromium.chrome.browser.tasks.tab_management.TabListFaviconProvider access$1200(org.chromium.chrome.browser.tasks.tab_management.MultiThumbnailCardProvider);
org.chromium.chrome.browser.tasks.tab_management.TabListFaviconProvider mTabListFaviconProvider;
java.util.List mThumbnailRects;
float access$900(org.chromium.chrome.browser.tasks.tab_management.MultiThumbnailCardProvider);
android.graphics.Paint mTextPaint;
java.util.List access$800(org.chromium.chrome.browser.tasks.tab_management.MultiThumbnailCardProvider);
java.util.List mFaviconRects;
android.graphics.Paint mEmptyThumbnailPaint;
java.util.List access$1100(org.chromium.chrome.browser.tasks.tab_management.MultiThumbnailCardProvider);
float access$500(org.chromium.chrome.browser.tasks.tab_management.MultiThumbnailCardProvider);
java.util.List mFaviconBackgroundRects;
int mSize;
android.graphics.Paint access$700(org.chromium.chrome.browser.tasks.tab_management.MultiThumbnailCardProvider);
org.chromium.chrome.browser.tabmodel.TabModelSelector access$100(org.chromium.chrome.browser.tasks.tab_management.MultiThumbnailCardProvider);
org.chromium.chrome.browser.tabmodel.TabModelSelector mTabModelSelector;
android.graphics.Paint mThumbnailFramePaint;
org.chromium.chrome.browser.compositor.layouts.content.TabContentManager access$200(org.chromium.chrome.browser.tasks.tab_management.MultiThumbnailCardProvider);
android.graphics.Paint access$400(org.chromium.chrome.browser.tasks.tab_management.MultiThumbnailCardProvider);
java.util.List access$300(org.chromium.chrome.browser.tasks.tab_management.MultiThumbnailCardProvider);
float mRadius;
float mFaviconCirclePadding;
android.graphics.Paint mFaviconBackgroundPaint;
android.graphics.Paint access$600(org.chromium.chrome.browser.tasks.tab_management.MultiThumbnailCardProvider);
org.chromium.chrome.browser.compositor.layouts.content.TabContentManager mTabContentManager;
int access$000(org.chromium.chrome.browser.tasks.tab_management.MultiThumbnailCardProvider);
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGridContainerViewBinder {
void bind(org.chromium.ui.modelutil.PropertyModel, org.chromium.chrome.browser.tasks.tab_management.TabListRecyclerView, org.chromium.ui.modelutil.PropertyKey);
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGridDialogCoordinator {
org.chromium.ui.modelutil.PropertyModel mToolbarPropertyModel;
android.content.Context mContext;
org.chromium.chrome.browser.tasks.tab_management.TabGridDialogMediator mMediator;
void updateDialogContent(java.util.List);
org.chromium.chrome.browser.tasks.tab_management.TabGridSheetToolbarCoordinator mToolbarCoordinator;
org.chromium.chrome.browser.tasks.tab_management.TabGridDialogMediator$ResetHandler getResetHandler();
org.chromium.chrome.browser.tasks.tab_management.TabListCoordinator mTabListCoordinator;
void resetWithListOfTabs(java.util.List);
org.chromium.chrome.browser.tasks.tab_management.TabGridDialogParent mParentLayout;
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGridDialogMediator {
void setupToolbarClickHandlers();
org.chromium.chrome.browser.tabmodel.TabModelSelector mTabModelSelector;
void onReset(java.lang.Integer);
android.view.View$OnClickListener getCollapseButtonClickListener();
java.util.List getRelatedTabs(int);
void updateGridTabSwitcher();
org.chromium.ui.modelutil.PropertyModel mModel;
org.chromium.chrome.browser.tabmodel.TabModelObserver mTabModelObserver;
void lambda$getAddButtonClickListener$1(android.view.View);
void setupScrimViewObserver();
android.content.Context mContext;
void updateDialog();
org.chromium.chrome.browser.tasks.tab_management.TabGridDialogMediator$ResetHandler mDialogResetHandler;
org.chromium.chrome.browser.tabmodel.TabCreatorManager mTabCreatorManager;
boolean $assertionsDisabled;
void access$100(org.chromium.chrome.browser.tasks.tab_management.TabGridDialogMediator);
int access$400(org.chromium.chrome.browser.tasks.tab_management.TabGridDialogMediator);
int access$402(org.chromium.chrome.browser.tasks.tab_management.TabGridDialogMediator, int);
org.chromium.chrome.browser.tasks.tab_management.GridTabSwitcherMediator$ResetHandler mGridTabSwitcherResetHandler;
java.util.List access$300(org.chromium.chrome.browser.tasks.tab_management.TabGridDialogMediator, int);
org.chromium.ui.modelutil.PropertyModel access$200(org.chromium.chrome.browser.tasks.tab_management.TabGridDialogMediator);
void lambda$getCollapseButtonClickListener$0(android.view.View);
android.view.View$OnClickListener getAddButtonClickListener();
void access$000(org.chromium.chrome.browser.tasks.tab_management.TabGridDialogMediator);
int mCurrentTabId;
void destroy();
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGridDialogParent {
void showDialog();
org.chromium.chrome.browser.widget.ScrimView$ScrimParams mScrimParams;
android.widget.PopupWindow mPopupWindow;
void setupDialogAnimation();
void destroy();
int mSideMargin;
void updateDialogWithOrientation(android.content.Context, int);
android.content.ComponentCallbacks mComponentCallbacks;
android.widget.LinearLayout mDialogContainerView;
void access$000(org.chromium.chrome.browser.tasks.tab_management.TabGridDialogParent, android.content.Context, int);
org.chromium.chrome.browser.widget.ScrimView mScrimView;
android.animation.Animator access$102(org.chromium.chrome.browser.tasks.tab_management.TabGridDialogParent, android.animation.Animator);
void hideDialog();
android.animation.ValueAnimator mDialogFadeOut;
android.view.ViewGroup mParent;
android.animation.Animator mCurrentAnimator;
int mTopMargin;
void setupDialogContent(android.content.Context);
void resetDialog(android.view.View, android.view.View);
android.widget.PopupWindow access$200(org.chromium.chrome.browser.tasks.tab_management.TabGridDialogParent);
android.animation.ValueAnimator mDialogFadeIn;
int mStatusBarHeight;
android.widget.FrameLayout$LayoutParams mContainerParams;
void setScrimViewObserver(org.chromium.chrome.browser.widget.ScrimView$ScrimObserver);
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGridSheetContent {
android.view.View mToolbarView;
void destroy();
org.chromium.chrome.browser.tasks.tab_management.TabListRecyclerView mRecyclerView;
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGridSheetCoordinator {
void updateBottomSheetContent(java.util.List);
org.chromium.chrome.browser.tasks.tab_management.TabGridSheetToolbarCoordinator mToolbarCoordinator;
org.chromium.ui.modelutil.PropertyModel mToolbarPropertyModel;
org.chromium.chrome.browser.tasks.tab_management.TabGridSheetContent mBottomSheetContent;
org.chromium.chrome.browser.tasks.tab_management.TabGridSheetMediator mMediator;
void destroy();
org.chromium.chrome.browser.tasks.tab_management.TabListCoordinator mTabGridCoordinator;
void resetWithListOfTabs(java.util.List);
android.content.Context mContext;
void startObservingForCreationIPH();
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGridSheetMediator {
android.view.View$OnClickListener getAddButtonClickListener();
org.chromium.chrome.browser.tabmodel.TabCreatorManager mTabCreatorManager;
void lambda$getAddButtonClickListener$3(android.view.View);
org.chromium.chrome.browser.tasks.tab_management.TabGridSheetMediator$ResetHandler mResetHandler;
org.chromium.chrome.browser.tabmodel.TabModelObserver mTabModelObserver;
void lambda$new$1(android.content.res.ColorStateList, boolean);
org.chromium.chrome.browser.ThemeColorProvider$ThemeColorObserver mThemeColorObserver;
void lambda$new$0(int, boolean);
void onReset(org.chromium.chrome.browser.tasks.tab_management.TabGridSheetContent);
void lambda$getCollapseButtonClickListener$2(android.view.View);
org.chromium.chrome.browser.widget.bottomsheet.BottomSheet$BottomSheetContent getCurrentSheetContent();
boolean $assertionsDisabled;
void setupToolbarClickHandlers();
android.content.Context mContext;
android.view.View$OnClickListener getCollapseButtonClickListener();
void destroy();
void showTabGridSheet(org.chromium.chrome.browser.tasks.tab_management.TabGridSheetContent);
void updateBottomSheet();
org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController mBottomSheetController;
org.chromium.chrome.browser.ThemeColorProvider mThemeColorProvider;
void access$000(org.chromium.chrome.browser.tasks.tab_management.TabGridSheetMediator);
org.chromium.ui.modelutil.PropertyModel mModel;
org.chromium.chrome.browser.widget.bottomsheet.BottomSheetObserver mSheetObserver;
org.chromium.chrome.browser.ThemeColorProvider$TintObserver mTintObserver;
org.chromium.chrome.browser.tabmodel.TabModelSelector mTabModelSelector;
void hideTabGridSheet();
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGridSheetProperties {
org.chromium.ui.modelutil.PropertyModel$WritableObjectPropertyKey SCRIMVIEW_OBSERVER;
org.chromium.ui.modelutil.PropertyModel$WritableIntPropertyKey PRIMARY_COLOR;
org.chromium.ui.modelutil.PropertyModel$WritableObjectPropertyKey TINT;
org.chromium.ui.modelutil.PropertyModel$WritableObjectPropertyKey ADD_CLICK_LISTENER;
org.chromium.ui.modelutil.PropertyModel$WritableIntPropertyKey CONTENT_TOP_MARGIN;
org.chromium.ui.modelutil.PropertyModel$WritableBooleanPropertyKey IS_DIALOG_VISIBLE;
org.chromium.ui.modelutil.PropertyKey[] ALL_KEYS;
org.chromium.ui.modelutil.PropertyModel$WritableObjectPropertyKey COLLAPSE_CLICK_LISTENER;
org.chromium.ui.modelutil.PropertyModel$WritableObjectPropertyKey HEADER_TITLE;
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGridSheetToolbarCoordinator {
android.view.View getView();
org.chromium.chrome.browser.tasks.tab_management.TabGroupUiToolbarView mToolbarView;
org.chromium.ui.modelutil.PropertyModelChangeProcessor mModelChangeProcessor;
void destroy();
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGridSheetViewBinder {
void bind(org.chromium.ui.modelutil.PropertyModel, org.chromium.chrome.browser.tasks.tab_management.TabGridSheetViewBinder$ViewHolder, org.chromium.ui.modelutil.PropertyKey);
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGridViewBinder {
void lambda$onBindViewHolder$3(org.chromium.chrome.browser.tasks.tab_management.TabListMediator$TabActionListener, org.chromium.chrome.browser.tasks.tab_management.TabGridViewHolder, android.view.View);
void lambda$onBindViewHolder$2(org.chromium.chrome.browser.tasks.tab_management.TabGridViewHolder, android.graphics.Bitmap);
void lambda$onBindViewHolder$0(org.chromium.ui.modelutil.PropertyModel, org.chromium.chrome.browser.tasks.tab_management.TabGridViewHolder, android.view.View);
void lambda$onBindViewHolder$1(org.chromium.ui.modelutil.PropertyModel, org.chromium.chrome.browser.tasks.tab_management.TabGridViewHolder, android.view.View);
void onBindViewHolder(org.chromium.chrome.browser.tasks.tab_management.TabGridViewHolder, org.chromium.ui.modelutil.PropertyModel);
void onBindViewHolder(org.chromium.chrome.browser.tasks.tab_management.TabGridViewHolder, org.chromium.ui.modelutil.PropertyModel, org.chromium.ui.modelutil.PropertyKey);
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGridViewHolder {
android.widget.ImageView favicon;
int getTabId();
org.chromium.ui.widget.ButtonCompat createGroupButton;
android.widget.TextView title;
android.view.View backgroundView;
android.view.View itemView;
org.chromium.chrome.browser.tasks.tab_management.TabGridViewHolder create(android.view.ViewGroup, int);
void setTabId(int);
int mTabId;
java.lang.ref.WeakReference sCloseButtonBitmapWeakRef;
void resetThumbnail();
android.widget.ImageView thumbnail;
android.widget.ImageView closeButton;
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGroupUiCoordinator {
org.chromium.ui.modelutil.PropertyModel mTabStripToolbarModel;
org.chromium.chrome.browser.ThemeColorProvider mThemeColorProvider;
android.content.Context mContext;
org.chromium.chrome.browser.tasks.tab_management.TabGroupUiMediator mMediator;
org.chromium.chrome.browser.ChromeActivity mActivity;
org.chromium.chrome.browser.tasks.tab_management.TabGridSheetCoordinator mTabGridSheetCoordinator;
void recordSessionCount();
org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher mActivityLifecycleDispatcher;
org.chromium.chrome.browser.tasks.tab_management.TabListCoordinator mTabStripCoordinator;
boolean $assertionsDisabled;
org.chromium.chrome.browser.tasks.tab_management.TabStripToolbarCoordinator mTabStripToolbarCoordinator;
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGroupUiMediator {
org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior mOverviewModeBehavior;
boolean mIsTabGroupUiVisible;
org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver mTabModelSelectorTabObserver;
org.chromium.chrome.browser.tabmodel.TabModelSelector access$400(org.chromium.chrome.browser.tasks.tab_management.TabGroupUiMediator);
org.chromium.chrome.browser.tasks.tab_management.TabGroupUiMediator$ResetHandler access$500(org.chromium.chrome.browser.tasks.tab_management.TabGroupUiMediator);
java.util.List getRelatedTabsForId(int);
org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior$OverviewModeObserver mOverviewModeObserver;
org.chromium.chrome.browser.tabmodel.TabModelSelectorObserver mTabModelSelectorObserver;
boolean access$100(org.chromium.chrome.browser.tasks.tab_management.TabGroupUiMediator);
org.chromium.ui.modelutil.PropertyModel mToolbarPropertyModel;
org.chromium.chrome.browser.ThemeColorProvider$ThemeColorObserver mThemeColorObserver;
void lambda$setupToolbarClickHandlers$3(android.view.View);
org.chromium.chrome.browser.ThemeColorProvider mThemeColorProvider;
void lambda$setupToolbarClickHandlers$2(android.view.View);
void setupToolbarClickHandlers();
void lambda$new$1(android.content.res.ColorStateList, boolean);
void resetTabStripWithRelatedTabsForId(int);
org.chromium.chrome.browser.toolbar.bottom.BottomControlsCoordinator$BottomControlsVisibilityController mVisibilityController;
void destroy();
boolean $assertionsDisabled;
void lambda$new$0(int, boolean);
org.chromium.chrome.browser.tabmodel.TabModelObserver mTabModelObserver;
org.chromium.chrome.browser.ThemeColorProvider$TintObserver mTintObserver;
void access$300(org.chromium.chrome.browser.tasks.tab_management.TabGroupUiMediator, int);
boolean mIsClosingAGroup;
org.chromium.chrome.browser.tabmodel.TabCreatorManager mTabCreatorManager;
org.chromium.chrome.browser.tasks.tab_management.TabGroupUiMediator$ResetHandler mResetHandler;
org.chromium.chrome.browser.tabmodel.TabModelSelector mTabModelSelector;
boolean access$102(org.chromium.chrome.browser.tasks.tab_management.TabGroupUiMediator, boolean);
java.util.List access$200(org.chromium.chrome.browser.tasks.tab_management.TabGroupUiMediator, int);
boolean access$000(org.chromium.chrome.browser.tasks.tab_management.TabGroupUiMediator);
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGroupUiToolbarView {
android.view.View mMainContent;
void setTint(android.content.res.ColorStateList);
android.view.ViewGroup mContainerView;
org.chromium.ui.widget.ChromeImageView mLeftButton;
void setMainContentVisibility(boolean);
void setTitle(java.lang.String);
org.chromium.ui.widget.ChromeImageView mRightButton;
android.view.View findViewById(int);
android.widget.TextView mTitleTextView;
void setLeftButtonOnClickListener(android.view.View$OnClickListener);
android.view.ViewGroup getViewContainer();
void setRightButtonOnClickListener(android.view.View$OnClickListener);
void setPrimaryColor(int);
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabGroupUiToolbarViewBinder {
void bind(org.chromium.ui.modelutil.PropertyModel, org.chromium.chrome.browser.tasks.tab_management.TabGroupUiToolbarView, org.chromium.ui.modelutil.PropertyKey);
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabListContainerProperties {
org.chromium.ui.modelutil.PropertyModel$WritableIntPropertyKey TOP_PADDING;
org.chromium.ui.modelutil.PropertyModel$WritableObjectPropertyKey VISIBILITY_LISTENER;
org.chromium.ui.modelutil.PropertyModel$WritableIntPropertyKey INITIAL_SCROLL_INDEX;
org.chromium.ui.modelutil.PropertyModel$WritableBooleanPropertyKey ANIMATE_VISIBILITY_CHANGES;
org.chromium.ui.modelutil.PropertyKey[] ALL_KEYS;
org.chromium.ui.modelutil.PropertyModel$WritableIntPropertyKey BOTTOM_CONTROLS_HEIGHT;
org.chromium.ui.modelutil.PropertyModel$WritableBooleanPropertyKey IS_INCOGNITO;
org.chromium.ui.modelutil.PropertyModel$WritableBooleanPropertyKey IS_VISIBLE;
org.chromium.ui.modelutil.PropertyModel$WritableIntPropertyKey TOP_CONTROLS_HEIGHT;
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabListCoordinator {
void updateThumbnailLocation();
org.chromium.chrome.browser.tabmodel.TabModelSelector mTabModelSelector;
android.graphics.Rect mThumbnailLocationOfCurrentTab;
org.chromium.chrome.browser.tasks.tab_management.TabListMediator mMediator;
org.chromium.chrome.browser.tasks.tab_management.TabListRecyclerView mRecyclerView;
int getResourceId();
android.graphics.Rect getThumbnailLocationOfCurrentTab();
int mMode;
void destroy();
org.chromium.ui.modelutil.SimpleRecyclerViewMcpBase mModelChangeProcessor;
org.chromium.chrome.browser.tasks.tab_management.TabListRecyclerView getContainerView();
void resetWithListOfTabs(java.util.List);
void prepareOverview();
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabListFaviconProvider {
android.graphics.drawable.Drawable getDefaultFaviconDrawable();
android.graphics.drawable.Drawable getFaviconForUrlSync(java.lang.String, boolean, android.graphics.Bitmap);
android.graphics.drawable.Drawable sRoundedGlobeDrawable;
android.graphics.drawable.Drawable processBitmap(android.graphics.Bitmap);
int mFaviconSize;
void lambda$getFaviconForUrlAsync$0(org.chromium.base.Callback, android.graphics.Bitmap, java.lang.String);
android.graphics.drawable.Drawable sRoundedChromeDrawable;
org.chromium.chrome.browser.profiles.Profile mProfile;
void getFaviconForUrlAsync(java.lang.String, boolean, org.chromium.base.Callback);
org.chromium.chrome.browser.favicon.FaviconHelper mFaviconHelper;
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabListMediator {
void addTabInfoToModel(org.chromium.chrome.browser.tab.Tab, int, boolean);
boolean isValidMovePosition(int);
android.content.ComponentCallbacks mComponentCallbacks;
org.chromium.chrome.browser.tasks.tab_management.TabListFaviconProvider mTabListFaviconProvider;
org.chromium.chrome.browser.tasks.tab_management.TabListMediator$GridCardOnClickListenerProvider mGridCardOnClickListenerProvider;
boolean mShownIPH;
org.chromium.chrome.browser.tasks.tab_management.TabListMediator$TabActionListener access$1300(org.chromium.chrome.browser.tasks.tab_management.TabListMediator);
java.util.Map access$800();
org.chromium.chrome.browser.tabmodel.TabModelSelector access$100(org.chromium.chrome.browser.tasks.tab_management.TabListMediator);
boolean access$600(org.chromium.chrome.browser.tasks.tab_management.TabListMediator);
java.util.List access$1000(org.chromium.chrome.browser.tasks.tab_management.TabListMediator, int);
void access$900(org.chromium.chrome.browser.tasks.tab_management.TabListMediator, org.chromium.chrome.browser.tab.Tab, int, int);
void registerOrientationListener(android.support.v7.widget.GridLayoutManager);
java.lang.String mComponentName;
boolean mCloseAllRelatedTabs;
java.lang.String access$200(org.chromium.chrome.browser.tasks.tab_management.TabListMediator);
org.chromium.chrome.browser.tasks.tab_management.TabListMediator$TitleProvider mTitleProvider;
android.support.v7.widget.helper.ItemTouchHelper$SimpleCallback getItemTouchHelperCallback(float);
void access$700(org.chromium.chrome.browser.tasks.tab_management.TabListMediator, org.chromium.chrome.browser.tab.Tab, boolean);
void onTabClosedFrom(int, java.lang.String);
boolean access$002(org.chromium.chrome.browser.tasks.tab_management.TabListMediator, boolean);
org.chromium.chrome.browser.tasks.tab_management.TabListMediator$IphProvider mIphProvider;
java.util.Map sTabClosedFromMapTabClosedFromMap;
void onTabAdded(org.chromium.chrome.browser.tab.Tab, boolean);
org.chromium.chrome.browser.tab.TabObserver mTabObserver;
org.chromium.chrome.browser.tasks.tab_management.TabListMediator$CreateGroupButtonProvider mCreateGroupButtonProvider;
java.util.List getRelatedTabsForId(int);
org.chromium.chrome.browser.tasks.tab_management.TabListFaviconProvider access$400(org.chromium.chrome.browser.tasks.tab_management.TabListMediator);
org.chromium.chrome.browser.tasks.tab_management.TabListMediator$TabActionListener mTabSelectedListener;
org.chromium.chrome.browser.tasks.tab_management.TabListMediator$TabActionListener mTabClosedListener;
void resetWithListOfTabs(java.util.List);
org.chromium.chrome.browser.tabmodel.TabModelSelector mTabModelSelector;
boolean access$000(org.chromium.chrome.browser.tasks.tab_management.TabListMediator);
void lambda$addTabInfoToModel$0(org.chromium.chrome.browser.tab.Tab, android.graphics.drawable.Drawable);
org.chromium.chrome.browser.tasks.tab_management.TabListMediator$ThumbnailProvider mThumbnailProvider;
void onGroupClosedFrom(int);
org.chromium.chrome.browser.tasks.tab_management.TabListModel mModel;
org.chromium.chrome.browser.tabmodel.TabModelObserver mTabModelObserver;
void onTabMoved(org.chromium.chrome.browser.tab.Tab, int, int);
void access$1200(org.chromium.chrome.browser.tasks.tab_management.TabListMediator, int, java.lang.String);
org.chromium.chrome.browser.tasks.tab_management.TabListModel access$300(org.chromium.chrome.browser.tasks.tab_management.TabListMediator);
org.chromium.chrome.browser.tasks.tab_management.TabListMediator$TitleProvider access$500(org.chromium.chrome.browser.tasks.tab_management.TabListMediator);
void access$1100(org.chromium.chrome.browser.tasks.tab_management.TabListMediator, int);
void destroy();
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabListModel {
void add(int, org.chromium.ui.modelutil.PropertyObservable);
int size();
void add(org.chromium.ui.modelutil.PropertyObservable);
java.lang.Object get(int);
org.chromium.ui.modelutil.PropertyObservable removeAt(int);
void set(java.util.Collection);
int indexFromId(int);
void move(int, int);
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabListRecyclerView {
int getId();
long access$200(org.chromium.chrome.browser.tasks.tab_management.TabListRecyclerView);
android.graphics.Rect getRectOfCurrentThumbnail(int);
void setHasFixedSize(boolean);
android.animation.ValueAnimator mFadeInAnimator;
int getPaddingLeft();
int getPaddingBottom();
void endAllAnimations();
long mOriginalAddDuration;
int getResourceId();
org.chromium.ui.resources.dynamics.ViewResourceAdapter access$300(org.chromium.chrome.browser.tasks.tab_management.TabListRecyclerView);
org.chromium.ui.resources.dynamics.ViewResourceAdapter mDynamicView;
int computeVerticalScrollOffset();
org.chromium.chrome.browser.tasks.tab_management.TabListRecyclerView$VisibilityListener mListener;
void startShowing(boolean);
android.animation.ValueAnimator access$002(org.chromium.chrome.browser.tasks.tab_management.TabListRecyclerView, android.animation.ValueAnimator);
void setBackgroundColor(int);
void setAlpha(float);
void setVisibilityListener(org.chromium.chrome.browser.tasks.tab_management.TabListRecyclerView$VisibilityListener);
android.animation.ValueAnimator mFadeOutAnimator;
void setVisibility(int);
android.view.ViewTreeObserver getViewTreeObserver();
void setPadding(int, int, int, int);
android.support.v7.widget.RecyclerView$LayoutManager getLayoutManager();
boolean $assertionsDisabled;
void createDynamicView(org.chromium.ui.resources.dynamics.DynamicResourceLoader);
android.content.res.Resources getResources();
android.animation.ValueAnimator access$402(org.chromium.chrome.browser.tasks.tab_management.TabListRecyclerView, android.animation.ValueAnimator);
void prepareOverview();
void setAdapter(android.support.v7.widget.RecyclerView$Adapter);
android.support.v7.widget.RecyclerView$ItemAnimator getItemAnimator();
void requestLayout();
android.view.ViewGroup$LayoutParams getLayoutParams();
android.support.v7.widget.RecyclerView$ViewHolder findViewHolderForAdapterPosition(int);
void setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager);
void getLocationInWindow(int[]);
void startHiding(boolean);
int getPaddingRight();
org.chromium.chrome.browser.tasks.tab_management.TabListRecyclerView$VisibilityListener access$100(org.chromium.chrome.browser.tasks.tab_management.TabListRecyclerView);
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabProperties {
org.chromium.ui.modelutil.PropertyModel$ReadableIntPropertyKey TAB_ID;
org.chromium.ui.modelutil.PropertyModel$WritableObjectPropertyKey IPH_PROVIDER;
org.chromium.ui.modelutil.PropertyModel$WritableObjectPropertyKey CREATE_GROUP_LISTENER;
org.chromium.ui.modelutil.PropertyModel$WritableObjectPropertyKey TAB_SELECTED_LISTENER;
org.chromium.ui.modelutil.PropertyKey[] ALL_KEYS_TAB_GRID;
org.chromium.ui.modelutil.PropertyKey[] ALL_KEYS_TAB_STRIP;
org.chromium.ui.modelutil.PropertyModel$WritableObjectPropertyKey FAVICON;
org.chromium.ui.modelutil.PropertyModel$WritableBooleanPropertyKey IS_SELECTED;
org.chromium.ui.modelutil.PropertyModel$WritableObjectPropertyKey TITLE;
org.chromium.ui.modelutil.PropertyModel$WritableObjectPropertyKey TAB_CLOSED_LISTENER;
org.chromium.ui.modelutil.PropertyModel$WritableObjectPropertyKey THUMBNAIL_FETCHER;
org.chromium.ui.modelutil.PropertyModel$WritableFloatPropertyKey ALPHA;
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabStripToolbarCoordinator {
android.view.ViewGroup getTabListContainerView();
org.chromium.ui.modelutil.PropertyModel mModel;
org.chromium.ui.modelutil.PropertyModelChangeProcessor mModelChangeProcessor;
org.chromium.chrome.browser.tasks.tab_management.TabGroupUiToolbarView mToolbarView;
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabStripToolbarViewProperties {
org.chromium.ui.modelutil.PropertyModel$WritableIntPropertyKey PRIMARY_COLOR;
org.chromium.ui.modelutil.PropertyModel$WritableObjectPropertyKey ADD_CLICK_LISTENER;
org.chromium.ui.modelutil.PropertyModel$WritableObjectPropertyKey TINT;
org.chromium.ui.modelutil.PropertyKey[] ALL_KEYS;
org.chromium.ui.modelutil.PropertyModel$WritableObjectPropertyKey EXPAND_CLICK_LISTENER;
org.chromium.ui.modelutil.PropertyModel$WritableBooleanPropertyKey IS_MAIN_CONTENT_VISIBLE;
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabStripViewBinder {
void lambda$onBindViewHolder$1(org.chromium.ui.modelutil.PropertyModel, org.chromium.chrome.browser.tasks.tab_management.TabStripViewHolder, android.view.View);
void lambda$onBindViewHolder$0(org.chromium.ui.modelutil.PropertyModel, org.chromium.chrome.browser.tasks.tab_management.TabStripViewHolder, android.view.View);
void onBindViewHolder(org.chromium.chrome.browser.tasks.tab_management.TabStripViewHolder, org.chromium.ui.modelutil.PropertyModel, org.chromium.ui.modelutil.PropertyKey);
void onBindViewHolder(org.chromium.chrome.browser.tasks.tab_management.TabStripViewHolder, org.chromium.ui.modelutil.PropertyModel);
}
-keep class org.chromium.chrome.browser.tasks.tab_management.TabStripViewHolder {
android.widget.ImageButton button;
int mTabId;
android.view.View itemView;
org.chromium.chrome.browser.tasks.tab_management.TabStripViewHolder create(android.view.ViewGroup, int);
void setTabId(int);
int getTabId();
}
-keep class org.chromium.chrome.browser.tasks.tabgroup.TabGroupModelFilter {
int indexOf(org.chromium.chrome.browser.tab.Tab);
int getTabGroupCount();
void recordSessionsCount(org.chromium.chrome.browser.tab.Tab);
void moveRelatedTabs(int, int);
org.chromium.chrome.browser.tab.Tab getTabAt(int);
}
-keep class org.chromium.chrome.browser.util.ColorUtils {
int getPrimaryBackgroundColor(android.content.res.Resources, boolean);
}
-keep class org.chromium.chrome.browser.util.FeatureUtilities {
boolean isTabGroupsAndroidEnabled();
boolean isTabGroupsAndroidUiImprovementsEnabled();
}
-keep class org.chromium.chrome.browser.util.ViewUtils {
android.support.v4.graphics.drawable.RoundedBitmapDrawable createRoundedBitmapDrawable(android.graphics.Bitmap, int);
int DEFAULT_FAVICON_CORNER_RADIUS;
}
-keep class org.chromium.chrome.browser.widget.bottomsheet.BottomSheet {
void addObserver(org.chromium.chrome.browser.widget.bottomsheet.BottomSheetObserver);
void removeObserver(org.chromium.chrome.browser.widget.bottomsheet.BottomSheetObserver);
org.chromium.chrome.browser.widget.bottomsheet.BottomSheet$BottomSheetContent getCurrentSheetContent();
}
-keep class org.chromium.content_public.browser.NavigationHandle {
boolean isSameDocument();
boolean isValidSearchFormUrl();
boolean isInMainFrame();
java.lang.Integer pageTransition();
}
-keep class org.chromium.content_public.browser.UiThreadTaskTraits {
org.chromium.base.task.TaskTraits USER_VISIBLE;
}
-keep class org.chromium.ui.interpolators.BakedBezierInterpolator {
org.chromium.ui.interpolators.BakedBezierInterpolator FADE_IN_CURVE;
org.chromium.ui.interpolators.BakedBezierInterpolator FADE_OUT_CURVE;
}
-keep class org.chromium.ui.modelutil.PropertyModelChangeProcessor {
void destroy();
org.chromium.ui.modelutil.PropertyModelChangeProcessor create(org.chromium.ui.modelutil.PropertyObservable, java.lang.Object, org.chromium.ui.modelutil.PropertyModelChangeProcessor$ViewBinder);
}
-keep class org.chromium.ui.widget.ButtonCompat {
void setVisibility(int);
void setOnClickListener(android.view.View$OnClickListener);
}
-keep class org.chromium.ui.widget.ChromeImageView {
void setOnClickListener(android.view.View$OnClickListener);
}
-keep class org.json.JSONObject {
java.lang.Object NULL;
}
# Copyright 2019 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.
# Rules added manually due to types
# 1) used and included in XML files (ie. layout),
# 2) dynamically generated by the compiler (ie. lambda), and
# 3) types not currently being included in our constant pool deps.
-keep class android.support.v4.graphics.drawable.RoundedBitmapDrawable { *; }
-keep class org.chromium.ui.widget.RoundedCornerImageView { *; }
-keep class org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager$FullscreenListener$$CC { *; }
-keep class org.chromium.chrome.browser.widget.bottomsheet.BottomSheet$BottomSheetContent$$CC { *; }
-keep class org.chromium.chrome.browser.compositor.layouts.OverviewModeController { *; }
\ No newline at end of file
......@@ -8,5 +8,4 @@ tab_ui_module_desc = {
name = "tab_ui"
java_deps = [ "//chrome/android/features/tab_ui:java" ]
android_manifest = "//chrome/android/features/tab_ui/AndroidManifest.xml"
proguard_async = async_tab_ui
}
......@@ -134,9 +134,6 @@ android_library("java") {
"//ui/android:ui_utils_java",
]
if (async_vr) {
proguard_configs = [ "//base/android/proguard/chromium_code.flags" ]
}
annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
}
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -11,7 +11,6 @@ vr_module_desc = {
name = "vr"
java_deps = [ "//chrome/android/features/vr:java" ]
android_manifest = "//chrome/android/features/vr/java/AndroidManifest.xml"
proguard_async = async_vr
if (use_native_partitions) {
native_deps = [ "//chrome/browser/vr:vr_ui" ]
native_entrypoints = "//chrome/browser/vr/module_exports.lst"
......
......@@ -45,10 +45,6 @@ template("chrome_feature_module") {
deps += _module_desc.java_deps
}
if (defined(_module_desc.proguard_async) && _module_desc.proguard_async) {
enable_class_deps_output = "${_module_desc.name}_constant_pool_deps.txt"
}
# Don't embed more translations than required (http://crbug.com/932017).
aapt_locale_whitelist = locales
......
......@@ -28,7 +28,6 @@ if (enable_arcore) {
# native_deps: (Optional) Native code going into module.
# native_entrypoints: (Optional) File with list of exposed symbols from native
# feature module library.
# proguard_async: (Optional) Whether to proguard the module asynchronously.
# loadable_modules_32_bit: (Optional) List of additional 32-bit shared
# library files going into module if the module is executed in 32 bit.
# loadable_modules_64_bit: (Optional) List of additional 64-bit shared
......
......@@ -207,14 +207,6 @@ android_library("ar_java") {
]
java_files = [ "//chrome/android/java/src/org/chromium/chrome/browser/vr/ArCoreShimImpl.java" ]
# TODO(crbug.com/938909): chromium_code.flags is not used as a proguard
# config when proguarding asynchronously. This results in AR crashing
# chrome when AR is an async DFM. Should implement a more scalable
# solution to including chromium_code.flags with all async DFMs.
if (async_ar) {
proguard_configs = [ "//base/android/proguard/chromium_code.flags" ]
}
}
if (enable_arcore) {
......
......@@ -47,10 +47,4 @@ declare_args() {
# TODO(crbug.com/843374): AR should not depend on |enable_vr|.
enable_arcore = enable_vr && is_android && !is_chromecast &&
(current_cpu == "arm" || current_cpu == "arm64")
# Whether to create AR module as an asynchronous DFM.
async_ar = false
# Whether to create VR module as an asynchronous DFM.
async_vr = false
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment