diff --git a/DEPS b/DEPS index 9273595..50fceddc4b 100644 --- a/DEPS +++ b/DEPS
@@ -121,11 +121,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': 'c6444d2f26b19ba76678fdfb83a9c7d654896f67', + 'skia_revision': '1400f599f5ddbd2abfb45b412637edbc482bebdf', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': '946785948ed5d87b5a831116a0a9aee8a6953428', + 'v8_revision': '62870e413e844b75279f358f5da0fd8c7e83ddfb', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other. @@ -133,7 +133,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': 'b827f490e46e06ca4132f61ae9dc6c309e874135', + 'angle_revision': '80766cfa26566de48142708e1d158ecbf4129cc2', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling build tools # and whatever else without interference from each other. @@ -145,7 +145,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': 'd565ca70a82bec487b54282997dcbaa1537cb44f', + 'pdfium_revision': '084a842135de0294b487584ffd2430633ee3214f', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling openmax_dl # and whatever else without interference from each other. @@ -181,7 +181,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling catapult # and whatever else without interference from each other. - 'catapult_revision': 'daced929e547fb83ac8555a154074c546f10294a', + 'catapult_revision': '775ce3b01f6bdc38937284a9cccc9dadd1e3fa10', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -197,7 +197,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. - 'feed_revision': 'd3514e6cb9ac00229a76e2aedfa367fa71fa4bd2', + 'feed_revision': '4da2d86623e7cb85126f5ef2c6894a76941e8c69', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling android_sdk_build-tools_version # and whatever else without interference from each other. @@ -704,7 +704,7 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'b1be3782a4caea81e21cdca0bf3fec4cf41a17dc', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '80a1cf66b83c394c911b14312274b26dba888ae0', 'src/third_party/devtools-node-modules': Var('chromium_git') + '/external/github.com/ChromeDevTools/devtools-node-modules' + '@' + Var('devtools_node_modules_revision'), @@ -1036,7 +1036,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + 'd4a22724784e03cfeeb0b3a658b501c1a677b2aa', + Var('android_git') + '/platform/external/perfetto.git' + '@' + 'e2a911298a26d956f26a81f73b4eb60a0aff7f63', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + 'ac0d98b5cee6c024b0cffeb4f8f45b6fc5ccdb78', @@ -1199,7 +1199,7 @@ Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + 'f22b9ad8d75bf99652dfc3b1db40e73d9fdd3840', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '949099d50de6cdeab8877c8b55093efce244374e', + Var('webrtc_git') + '/src.git' + '@' + '977cd17316ea5fa01e269a9531e7b1e1231fb529', 'src/third_party/xdg-utils': { 'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d', @@ -1240,7 +1240,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@27a62fa17e71ff2630c43b8af3e06cfd2d0f3072', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@5d0d8017656d90ff48950081cca638304c567b90', 'condition': 'checkout_src_internal', },
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index 93b9958..4e7cb3a 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -1369,6 +1369,7 @@ # TODO(stevenjb): Investigate whether this is OK. https://crbug.com/644336. "//chromeos/audio", "//chromeos/components/multidevice/logging", + "//chromeos/dbus", "//chromeos/dbus:power_manager_proto", "//chromeos/dbus/services:services", "//chromeos/services/assistant/public:feature_flags", @@ -1555,6 +1556,7 @@ # TODO(stevenjb): Investigate whether this is OK. https://crbug.com/644336. "//chromeos/audio", + "//chromeos/dbus", "//components/discardable_memory/public/interfaces", "//components/services/font:lib", "//components/services/font/public/interfaces", @@ -1927,11 +1929,11 @@ "//base/test:test_support", "//chromeos", "//chromeos:test_support", - "//chromeos:test_support_without_gmock", # TODO(stevenjb): Investigate whether this is OK. https://crbug.com/644336. "//chromeos/audio", "//chromeos/dbus:power_manager_proto", + "//chromeos/dbus:test_support", "//chromeos/services/assistant:test_support", "//chromeos/services/multidevice_setup/public/cpp:test_support", "//chromeos/services/multidevice_setup/public/mojom", @@ -2201,10 +2203,10 @@ "//base/test:test_support", "//cc:test_support", "//chromeos", - "//chromeos:test_support_without_gmock", # TODO(stevenjb): Investigate whether this is OK. https://crbug.com/644336. "//chromeos/audio", + "//chromeos/dbus:test_support", "//components/account_id", "//components/prefs:test_support", "//components/user_manager:user_manager",
diff --git a/ash/public/cpp/default_frame_header.cc b/ash/public/cpp/default_frame_header.cc index 302409dd..3260d67c 100644 --- a/ash/public/cpp/default_frame_header.cc +++ b/ash/public/cpp/default_frame_header.cc
@@ -23,9 +23,6 @@ namespace { -// Color for the window title text. -constexpr SkColor kTitleTextColor = SkColorSetRGB(40, 40, 40); -constexpr SkColor kLightTitleTextColor = SK_ColorWHITE; // This is 2x of the slide ainmation duration. constexpr int kColorUpdateDurationMs = 240; @@ -161,8 +158,8 @@ } SkColor DefaultFrameHeader::GetTitleColor() const { - return color_utils::IsDark(GetCurrentFrameColor()) ? kLightTitleTextColor - : kTitleTextColor; + return color_utils::PickContrastingColor( + SK_ColorWHITE, SkColorSetRGB(40, 40, 40), GetCurrentFrameColor()); } ///////////////////////////////////////////////////////////////////////////////
diff --git a/base/android/java/src/org/chromium/base/annotations/MainDex.java b/base/android/java/src/org/chromium/base/annotations/MainDex.java index 56aab743..b0affb7 100644 --- a/base/android/java/src/org/chromium/base/annotations/MainDex.java +++ b/base/android/java/src/org/chromium/base/annotations/MainDex.java
@@ -12,8 +12,8 @@ /** * An annotation that signals that a class should be kept in the main dex file. * - * This generally means it's used by renderer processes, which can't load secondary dexes - * on K and below. + * This generally means it's used by child processes (renderer/utility), which can't load secondary + * dexes on K and below. */ @Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.CLASS)
diff --git a/base/android/java/src/org/chromium/base/task/SingleThreadTaskRunner.java b/base/android/java/src/org/chromium/base/task/SingleThreadTaskRunner.java index 030c6df..7f90e4e 100644 --- a/base/android/java/src/org/chromium/base/task/SingleThreadTaskRunner.java +++ b/base/android/java/src/org/chromium/base/task/SingleThreadTaskRunner.java
@@ -15,5 +15,5 @@ * * @return true iff this SingleThreadTaskRunner is bound to the current thread. */ - public boolean belongsToCurrentThread(); + boolean belongsToCurrentThread(); }
diff --git a/base/android/java/src/org/chromium/base/task/TaskRunner.java b/base/android/java/src/org/chromium/base/task/TaskRunner.java index 0a2eaac..a50f4fd 100644 --- a/base/android/java/src/org/chromium/base/task/TaskRunner.java +++ b/base/android/java/src/org/chromium/base/task/TaskRunner.java
@@ -17,7 +17,14 @@ * * @param task The task to be run immediately. */ - public void postTask(Runnable task); + void postTask(Runnable task); + + /** + * Cleans up native side of TaskRunner. This must be called if the TaskRunner will have a + * shorter lifetime than the process it is created in. Thread-safe and safe to be called + * multiple times. + */ + void destroy(); /** * Instructs the TaskRunner to initialize the native TaskRunner and migrate any tasks over to
diff --git a/base/android/java/src/org/chromium/base/task/TaskRunnerImpl.java b/base/android/java/src/org/chromium/base/task/TaskRunnerImpl.java index dd5f1d1..8c2e4b2 100644 --- a/base/android/java/src/org/chromium/base/task/TaskRunnerImpl.java +++ b/base/android/java/src/org/chromium/base/task/TaskRunnerImpl.java
@@ -44,13 +44,28 @@ } @Override - protected void finalize() { - if (mNativeTaskRunnerAndroid != 0) nativeFinalize(mNativeTaskRunnerAndroid); + public void destroy() { + synchronized (mLock) { + if (mNativeTaskRunnerAndroid != 0) nativeDestroy(mNativeTaskRunnerAndroid); + mNativeTaskRunnerAndroid = 0; + mPreNativeTasks = null; + } + } + + @Override + protected void finalize() throws Throwable { + try { + // Calling destroy as a fallback in case destroy wasn't called by the user. + destroy(); + } finally { + super.finalize(); + } } @Override public void postTask(Runnable task) { synchronized (mLock) { + assert mNativeTaskRunnerAndroid != 0 || mPreNativeTasks != null; if (mNativeTaskRunnerAndroid != 0) { nativePostTask(mNativeTaskRunnerAndroid, task); return; @@ -90,19 +105,21 @@ @Override public void initNativeTaskRunner() { synchronized (mLock) { - mNativeTaskRunnerAndroid = nativeInit(mTaskTraits.mPrioritySetExplicitly, - mTaskTraits.mPriority, mTaskTraits.mMayBlock, mTaskTraits.mExtensionId, - mTaskTraits.mExtensionData); - for (Runnable task : mPreNativeTasks) { - nativePostTask(mNativeTaskRunnerAndroid, task); + if (mPreNativeTasks != null) { + mNativeTaskRunnerAndroid = nativeInit(mTaskTraits.mPrioritySetExplicitly, + mTaskTraits.mPriority, mTaskTraits.mMayBlock, mTaskTraits.mExtensionId, + mTaskTraits.mExtensionData); + for (Runnable task : mPreNativeTasks) { + nativePostTask(mNativeTaskRunnerAndroid, task); + } + mPreNativeTasks = null; } - mPreNativeTasks = null; } } // NB due to Proguard obfuscation it's easiest to pass the traits via arguments. private static native long nativeInit(boolean prioritySetExplicitly, int priority, boolean mayBlock, byte extensionId, byte[] extensionData); - private native void nativeFinalize(long nativeTaskRunnerAndroid); + private native void nativeDestroy(long nativeTaskRunnerAndroid); private native void nativePostTask(long nativeTaskRunnerAndroid, Runnable task); }
diff --git a/base/android/task_scheduler/task_runner_android.cc b/base/android/task_scheduler/task_runner_android.cc index 524bd0e..901521a 100644 --- a/base/android/task_scheduler/task_runner_android.cc +++ b/base/android/task_scheduler/task_runner_android.cc
@@ -29,10 +29,9 @@ TaskRunnerAndroid::~TaskRunnerAndroid() = default; -void TaskRunnerAndroid::Finalize( - JNIEnv* env, - const base::android::JavaRef<jobject>& caller) { - // This will happen on the Java finalizer thread. +void TaskRunnerAndroid::Destroy(JNIEnv* env, + const base::android::JavaRef<jobject>& caller) { + // This could happen on any thread. delete this; }
diff --git a/base/android/task_scheduler/task_runner_android.h b/base/android/task_scheduler/task_runner_android.h index ade0dc96..7350cfb 100644 --- a/base/android/task_scheduler/task_runner_android.h +++ b/base/android/task_scheduler/task_runner_android.h
@@ -17,7 +17,7 @@ explicit TaskRunnerAndroid(scoped_refptr<TaskRunner> task_runner); ~TaskRunnerAndroid(); - void Finalize(JNIEnv* env, const base::android::JavaRef<jobject>& caller); + void Destroy(JNIEnv* env, const base::android::JavaRef<jobject>& caller); void PostTask(JNIEnv* env, const base::android::JavaRef<jobject>& caller,
diff --git a/base/compiler_specific.h b/base/compiler_specific.h index 0d6bccc8..f07497e 100644 --- a/base/compiler_specific.h +++ b/base/compiler_specific.h
@@ -31,9 +31,6 @@ // Pop effects of innermost MSVC_PUSH_* macro. #define MSVC_POP_WARNING() __pragma(warning(pop)) -#define MSVC_DISABLE_OPTIMIZE() __pragma(optimize("", off)) -#define MSVC_ENABLE_OPTIMIZE() __pragma(optimize("", on)) - #else // Not MSVC #define _Printf_format_string_ @@ -44,6 +41,24 @@ #endif // COMPILER_MSVC +// These macros can be helpful when investigating compiler bugs or when +// investigating issues in local optimized builds, by temporarily disabling +// optimizations for a single function or file. These macros should never be +// used to permanently work around compiler bugs or other mysteries, and should +// not be used in landed changes. +#if !defined(OFFICIAL_BUILD) +#if defined(__clang__) +#define DISABLE_OPTIMIZE() __pragma(clang optimize off) +#define ENABLE_OPTIMIZE() __pragma(clang optimize on) +#elif defined(COMPILER_MSVC) +#define DISABLE_OPTIMIZE() __pragma(optimize("", off)) +#define ENABLE_OPTIMIZE() __pragma(optimize("", on)) +#else +// These macros are not currently available for other compiler options. +#endif +// These macros are not available in official builds. +#endif // !defined(OFFICIAL_BUILD) + // Annotate a variable indicating it's ok if the variable is not used. // (Typically used to silence a compiler warning when the assignment // is important for some other reason.)
diff --git a/build/android/gyp/proguard.py b/build/android/gyp/proguard.py index 4e6ec5f7..7627efb 100755 --- a/build/android/gyp/proguard.py +++ b/build/android/gyp/proguard.py
@@ -6,11 +6,13 @@ import optparse import os +import re import shutil import sys import tempfile from util import build_utils +from util import diff_utils from util import proguard_util @@ -47,6 +49,17 @@ '--apply-mapping', help='Path to proguard mapping to apply.') parser.add_option('--mapping-output', help='Path for proguard to output mapping file to.') + parser.add_option( + '--output-config', + help='Path to write the merged proguard config file to.') + parser.add_option( + '--expected-configs-file', + help='Path to a file containing the expected merged proguard configs') + parser.add_option( + '--verify-expected-configs', + action='store_true', + help='Fail if the expected merged proguard configs differ from the ' + 'generated merged proguard configs.') parser.add_option('--classpath', action='append', help='Classpath for proguard.') parser.add_option('--main-dex-rules-path', action='append', @@ -88,6 +101,32 @@ return options +def _NormalizeMergedConfig(merged_config_str): + stripped_config = re.sub( + r'(^\-(injars|libraryjars|print).*\n)|(#.*\n)', + '', + merged_config_str, + flags=re.MULTILINE) + + config_groups = re.findall( + r'^(\-.*?(\n|(\{.*?\})))', + stripped_config, + flags=re.DOTALL | re.MULTILINE) + + return '\n'.join(sorted(g[0].strip() for g in config_groups)) + + +def _VerifyExpectedConfigs(expected_path, actual_path, fail_on_exit): + diff = diff_utils.DiffFileContents(expected_path, actual_path, + 'Proguard Flags') + if not diff: + return + + print diff + if fail_on_exit: + sys.exit(1) + + def _MoveTempDexFile(tmp_dex_dir, dex_path): """Move the temp dex file out of |tmp_dex_dir|. @@ -107,8 +146,8 @@ shutil.move(tmp_dex_path, dex_path) -def _CreateR8Command(options, map_output_path, output_dir, tmp_proguard_config, - libraries): +def _CreateR8Command(options, map_output_path, output_dir, tmp_config_path, + tmp_printconfiguration_path, libraries): cmd = [ 'java', '-jar', options.r8_path, '--no-data-resources', @@ -122,10 +161,13 @@ for config_file in options.proguard_configs: cmd += ['--pg-conf', config_file] - if options.apply_mapping: - tmp_proguard_config.write('-applymapping ' + options.apply_mapping) - tmp_proguard_config.flush() - cmd += ['--pg-conf', tmp_proguard_config.name] + if options.apply_mapping or options.output_config: + with open(tmp_config_path, 'w') as f: + if options.apply_mapping: + f.write('-applymapping ' + options.apply_mapping) + if options.output_config: + f.write('-printconfiguration ' + tmp_printconfiguration_path) + cmd += ['--pg-conf', tmp_config_path] if options.min_api: cmd += ['--min-api', options.min_api] @@ -150,27 +192,41 @@ # TODO(agrieve): Remove proguard usages. if options.r8_path: - with tempfile.NamedTemporaryFile() as mapping_temp: - with tempfile.NamedTemporaryFile() as tmp_proguard_config: - if options.output_path.endswith('.dex'): - with build_utils.TempDir() as tmp_dex_dir: - cmd = _CreateR8Command(options, mapping_temp.name, tmp_dex_dir, - tmp_proguard_config, libraries) - build_utils.CheckOutput(cmd) - _MoveTempDexFile(tmp_dex_dir, options.output_path) - else: - cmd = _CreateR8Command(options, mapping_temp.name, - options.output_path, tmp_proguard_config, - libraries) - build_utils.CheckOutput(cmd) + with build_utils.TempDir() as tmp_dir: + tmp_mapping_path = os.path.join(tmp_dir, 'mapping.txt') + tmp_proguard_config_path = os.path.join(tmp_dir, 'proguard_config.txt') + tmp_merged_config_path = os.path.join(tmp_dir, 'merged_config.txt') - # Copy the mapping file back to where it should be. - map_path = options.mapping_output - with build_utils.AtomicOutput(map_path) as mapping: + if options.output_path.endswith('.dex'): + with build_utils.TempDir() as tmp_dex_dir: + cmd = _CreateR8Command(options, tmp_mapping_path, tmp_dex_dir, + tmp_proguard_config_path, + tmp_merged_config_path, libraries) + build_utils.CheckOutput(cmd) + _MoveTempDexFile(tmp_dex_dir, options.output_path) + else: + cmd = _CreateR8Command(options, tmp_mapping_path, options.output_path, + tmp_proguard_config_path, tmp_merged_config_path, + libraries) + build_utils.CheckOutput(cmd) + + # Copy output files to correct locations. + with build_utils.AtomicOutput(options.mapping_output) as mapping: # Mapping files generated by R8 include comments that may break # some of our tooling so remove those. - mapping_temp.seek(0) - mapping.writelines(l for l in mapping_temp if not l.startswith("#")) + with open(tmp_mapping_path) as tmp: + mapping.writelines(l for l in tmp if not l.startswith("#")) + + with build_utils.AtomicOutput(options.output_config) as merged_config: + with open(tmp_merged_config_path) as tmp: + # Sort flags alphabetically to make diffs more stable and easier to + # consume. Also strip out lines with build specific paths in them. + merged_config.write(_NormalizeMergedConfig(tmp.read())) + + if options.expected_configs_file: + _VerifyExpectedConfigs(options.expected_configs_file, + options.output_config, + options.verify_expected_configs) other_inputs = [] if options.apply_mapping:
diff --git a/build/android/gyp/proguard.pydeps b/build/android/gyp/proguard.pydeps index 6db3d7d..fd870a0 100644 --- a/build/android/gyp/proguard.pydeps +++ b/build/android/gyp/proguard.pydeps
@@ -4,5 +4,6 @@ proguard.py util/__init__.py util/build_utils.py +util/diff_utils.py util/md5_check.py util/proguard_util.py
diff --git a/build/android/gyp/util/diff_utils.py b/build/android/gyp/util/diff_utils.py new file mode 100755 index 0000000..da8bf23 --- /dev/null +++ b/build/android/gyp/util/diff_utils.py
@@ -0,0 +1,32 @@ +#!/usr/bin/env python +# +# 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 difflib +import itertools + + +def DiffFileContents(expected_path, actual_path, description): + """Check file contents for equality and return the diff or None.""" + with open(expected_path) as f_expected, open(actual_path) as f_actual: + expected_lines = f_expected.readlines() + actual_lines = f_actual.readlines() + + if expected_lines == actual_lines: + return None + + diff = difflib.unified_diff( + expected_lines, + actual_lines, + fromfile=expected_path, + tofile=actual_path, + n=0) + + return '\n'.join( + itertools.chain( + diff, ('Detected {} change.'.format(description), + 'If this is expected, please update the file by running:', + 'cp {} {}'.format(actual_path, expected_path), + 'Otherwise please fix the issue before submitting a CL')))
diff --git a/build/config/android/config.gni b/build/config/android/config.gni index 2fb5743..1b85633 100644 --- a/build/config/android/config.gni +++ b/build/config/android/config.gni
@@ -225,8 +225,14 @@ # already used as the default for public targets. This will evenutally be # the default. https://crbug.com/908988 use_r8 = false + + # Checks that proguard flags have not changed (!is_java_debug only). + check_android_configuration = false } + assert(!(check_android_configuration && is_java_debug), + "check_android_configuration only works when proguard is enabled") + # We need a second declare_args block to make sure we are using the overridden # value of the arguments set above. declare_args() {
diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni index 9bbcaca..932c357b 100644 --- a/build/config/android/internal_rules.gni +++ b/build/config/android/internal_rules.gni
@@ -31,6 +31,10 @@ "*:*_resources", "*:*_grd", "*:*locale_paks", + "*_bundle_module", + + # TODO(crbug.com/908819): Remove item below once downstream module target + # names have been changed to *_bundle_module. "*_module", # TODO(agrieve): Rename targets below to match above patterns. @@ -980,6 +984,27 @@ "@FileArg($_rebased_build_config:android:sdk_jars)", ] + if (defined(invoker.config_output_path)) { + _config_output_path = invoker.config_output_path + outputs += [ _config_output_path ] + args += [ + "--output-config", + rebase_path(_config_output_path, root_build_dir), + ] + + if (defined(invoker.proguard_expectations_file)) { + _expected_configs_file = invoker.proguard_expectations_file + inputs += [ _expected_configs_file ] + args += [ + "--expected-configs-file", + rebase_path(_expected_configs_file, root_build_dir), + ] + if (check_android_configuration) { + args += [ "--verify-expected-configs" ] + } + } + } + if (!defined(invoker.proguard_jar_path) || use_r8) { args += [ "--r8-path", @@ -1099,6 +1124,7 @@ if (_proguarding_with_r8) { _proguard_output_path = invoker.output _proguard_target_name = target_name + _proguard_config_output_path = "$_proguard_output_path.proguard_flags" } else { _proguard_output_path = invoker.output + ".proguard.jar" _proguard_target_name = "${target_name}__proguard" @@ -1108,9 +1134,10 @@ proguard(_proguard_target_name) { forward_variables_from(invoker, [ - "proguard_jar_path", - "deps", "build_config", + "deps", + "proguard_expectations_file", + "proguard_jar_path", "proguard_mapping_path", "testonly", ]) @@ -1162,6 +1189,9 @@ } output_path = _proguard_output_path + if (_proguarding_with_r8) { + config_output_path = _proguard_config_output_path + } } }
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni index add2ce2..d5395b5 100644 --- a/build/config/android/rules.gni +++ b/build/config/android/rules.gni
@@ -1954,6 +1954,8 @@ # resources.arsc file in the apk or module. # resources_config_path: Path to the aapt2 optimize config file that tags # resources with acceptable/non-acceptable optimizations. + # proguard_expectations_file: Path to generated file containing the merged + # proguard flags from all input config files. template("android_apk_or_module") { forward_variables_from(invoker, [ "testonly" ]) @@ -2567,6 +2569,7 @@ [ "min_sdk_version", "dexlayout_profile", + "proguard_expectations_file", ]) proguard_enabled = _proguard_enabled build_config = _build_config @@ -2968,6 +2971,7 @@ "product_version_resources_dep", "proguard_configs", "proguard_enabled", + "proguard_expectations_file", "proguard_jar_path", "resource_blacklist_regex", "resource_blacklist_exceptions",
diff --git a/cc/paint/paint_op_reader.cc b/cc/paint/paint_op_reader.cc index d805195..d2ed4fa0 100644 --- a/cc/paint/paint_op_reader.cc +++ b/cc/paint/paint_op_reader.cc
@@ -9,6 +9,7 @@ #include "base/bits.h" #include "base/debug/dump_without_crashing.h" +#include "base/rand_util.h" #include "base/stl_util.h" #include "cc/paint/image_transfer_cache_entry.h" #include "cc/paint/paint_cache.h" @@ -616,9 +617,8 @@ } inline void PaintOpReader::SetInvalid() { - if (valid_ && options_.crash_dump_on_failure) { - // TODO(enne): make this DumpWithoutCrashing after http://crbug.com/910772 - // base::debug::DumpWithoutCrashing(); + if (valid_ && options_.crash_dump_on_failure && base::RandInt(1, 10) == 1) { + base::debug::DumpWithoutCrashing(); } valid_ = false; }
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index d84830ff..7cc260fd 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -19,6 +19,7 @@ import("//third_party/protobuf/proto_library.gni") import("//tools/resources/generate_resource_whitelist.gni") import("//tools/v8_context_snapshot/v8_context_snapshot.gni") +import("//ui/android/features.gni") import("channel.gni") import("java_sources.gni") import("static_initializers.gni") @@ -136,9 +137,15 @@ "java/res", "//chrome/android/java/res_chromium", ] + if (enable_vr) { resource_dirs += [ "//chrome/android/java/res_vr" ] } + + if (enable_android_night_mode) { + resource_dirs += [ "//chrome/android/java/res_night" ] + } + deps = [ ":chrome_strings_grd", "//chrome/android/webapk/libs/common:splash_resources", @@ -1420,6 +1427,7 @@ "jni_registration_header", "is_modern", "module_name", + "proguard_expectations_file", "target_type", ]) @@ -1471,21 +1479,29 @@ chrome_public_apk_or_module_tmpl("chrome_public_apk") { target_type = "android_apk" apk_name = "ChromePublic" + if (!is_java_debug) { + proguard_expectations_file = + "//chrome/android/java/chrome_public_apk.proguard_flags.expected" + } } chrome_public_apk_or_module_tmpl("chrome_modern_public_apk") { target_type = "android_apk" apk_name = "ChromeModernPublic" is_modern = true + if (!is_java_debug) { + proguard_expectations_file = + "//chrome/android/java/chrome_modern_public_apk.proguard_flags.expected" + } } -chrome_public_apk_or_module_tmpl("chrome_public_base_module") { +chrome_public_apk_or_module_tmpl("chrome_public_base_bundle_module") { target_type = "android_app_bundle_module" is_base_module = true module_name = "ChromePublicBase" } -chrome_public_apk_or_module_tmpl("chrome_modern_public_base_module") { +chrome_public_apk_or_module_tmpl("chrome_modern_public_base_bundle_module") { target_type = "android_app_bundle_module" module_name = "ChromeModernPublicBase" is_base_module = true @@ -1527,6 +1543,7 @@ "apk_name", "is_base_module", "module_name", + "proguard_expectations_file", "proguard_jar_path", "target_type", "use_trichrome_library", @@ -1567,9 +1584,13 @@ monochrome_public_apk_or_module_tmpl("monochrome_public_apk") { apk_name = "MonochromePublic" target_type = "android_apk" + if (!is_java_debug) { + proguard_expectations_file = + "//chrome/android/java/monochrome_public_apk.proguard_flags.expected" + } } -monochrome_public_apk_or_module_tmpl("monochrome_public_base_module") { +monochrome_public_apk_or_module_tmpl("monochrome_public_base_bundle_module") { module_name = "MonochromePublicBase" target_type = "android_app_bundle_module" is_base_module = true @@ -1798,20 +1819,20 @@ # Feature modules that go into Chrome Android application bundles. if (modularize_ar) { - ar_module_tmpl("ar_public_module") { + ar_module_tmpl("ar_public_bundle_module") { manifest_package = manifest_package module_name = "ArPublic" - base_module_target = ":monochrome_public_base_module" + base_module_target = ":monochrome_public_base_bundle_module" version_code = monochrome_version_code version_name = chrome_version_name } } if (modularize_vr) { - vr_module_tmpl("vr_public_module") { + vr_module_tmpl("vr_public_bundle_module") { manifest_package = manifest_package module_name = "VrPublic" - base_module_target = ":chrome_modern_public_base_module" + base_module_target = ":chrome_modern_public_base_bundle_module" version_code = chrome_modern_version_code version_name = chrome_version_name } @@ -1820,7 +1841,7 @@ # Chrome Android application bundles. android_app_bundle("chrome_public_bundle") { bundle_name = "ChromePublic" - base_module_target = ":chrome_public_base_module" + base_module_target = ":chrome_public_base_bundle_module" if (!is_java_debug) { proguard_enabled = true } @@ -1833,7 +1854,7 @@ android_app_bundle("chrome_modern_public_bundle") { bundle_name = "ChromeModernPublic" - base_module_target = ":chrome_modern_public_base_module" + base_module_target = ":chrome_modern_public_base_bundle_module" if (!is_java_debug) { proguard_enabled = true } @@ -1842,7 +1863,7 @@ extra_modules = [ { name = "vr" - module_target = ":vr_public_module" + module_target = ":vr_public_bundle_module" }, ] } @@ -1850,7 +1871,7 @@ android_app_bundle("monochrome_public_bundle") { bundle_name = "MonochromePublic" - base_module_target = ":monochrome_public_base_module" + base_module_target = ":monochrome_public_base_bundle_module" if (!is_java_debug) { proguard_enabled = true proguard_android_sdk_dep = webview_framework_dep @@ -1860,7 +1881,7 @@ extra_modules = [ { name = "ar" - module_target = ":ar_public_module" + module_target = ":ar_public_bundle_module" }, ] }
diff --git a/chrome/android/OWNERS b/chrome/android/OWNERS index 7459ac67..b0bf6e70 100644 --- a/chrome/android/OWNERS +++ b/chrome/android/OWNERS
@@ -11,6 +11,8 @@ # For VR Javatest changes per-file BUILD.gn=bsheedy@chromium.org +per-file *.proguard_flags.expected=* + # Translation artifacts: per-file *.xtb=file://tools/translation/TRANSLATION_OWNERS
diff --git a/chrome/android/java/chrome_modern_public_apk.proguard_flags.expected b/chrome/android/java/chrome_modern_public_apk.proguard_flags.expected new file mode 100644 index 0000000..a79e18db --- /dev/null +++ b/chrome/android/java/chrome_modern_public_apk.proguard_flags.expected
@@ -0,0 +1,571 @@ +-allowaccessmodification +-assumenosideeffects class ** { + @org.chromium.base.annotations.RemovableInRelease <methods>; +} +-assumenosideeffects class android.util.Log { + static *** d(...); + static *** v(...); + static *** isLoggable(...); +} +-dontpreverify +-dontwarn android.app.Notification +-dontwarn android.nfc.NfcAdapter +-dontwarn android.security.NetworkSecurityPolicy +-dontwarn android.support.** +-dontwarn com.google.android.apps.common.proguard.UsedBy* +-dontwarn com.google.common.logging.nano.Vr$** +-dontwarn com.google.protobuf.nano.NanoEnumValue +-dontwarn com.google.vr.** +-dontwarn javax.annotation.** +-dontwarn libcore.io.Memory +-dontwarn org.checkerframework.** +-dontwarn org.chromium.base.library_loader.NativeLibraries +-dontwarn sun.misc.Unsafe +-keep @android.support.annotation.Keep class * +-keep @com.google.android.gms.common.util.DynamiteApi public class * { + public <fields>; + public <methods>; +} +-keep @com.google.vr.cardboard.UsedByNative class * +-keep @com.google.vr.cardboard.annotations.UsedByNative class * +-keep @com.google.vr.cardboard.annotations.UsedByReflection class * +-keep @interface android.support.annotation.Keep +-keep @interface com.google.android.gms.common.annotation.KeepName +-keep @interface com.google.android.gms.common.util.DynamiteApi +-keep @interface org.chromium.base.annotations.AccessedByNative +-keep @interface org.chromium.base.annotations.CalledByNative +-keep @interface org.chromium.base.annotations.CalledByNativeUnchecked +-keep @interface org.chromium.base.annotations.DoNotInline +-keep @interface org.chromium.base.annotations.RemovableInRelease +-keep @interface org.chromium.base.annotations.UsedByReflection +-keep @org.chromium.base.annotations.UsedByReflection class * {} +-keep class * implements android.arch.lifecycle.GenericLifecycleObserver { + <init>(...); +} +-keep class * implements android.arch.lifecycle.LifecycleObserver { +} +-keep class * implements org.chromium.base.test.params.ParameterProvider +-keep class android.support.customtabs.PostMessageService { <init>(); } +-keep class android.support.customtabs.browseractions.BrowserActionsFallbackMenuView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.customtabs.browseractions.BrowserServiceFileProvider { <init>(); } +-keep class android.support.design.internal.BaselineLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.internal.NavigationMenuItemView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.internal.NavigationMenuView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.internal.SnackbarContentLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.widget.AppBarLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.widget.CheckableImageButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.widget.CoordinatorLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.widget.Snackbar$SnackbarLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.widget.TabItem { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.widget.TabLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v4.media.** implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} +-keep class android.support.v4.view.ViewPager { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v4.widget.NestedScrollView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v4.widget.Space { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.app.AlertController$RecycleListView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.app.MediaRouteButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.app.MediaRouteExpandCollapseButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.app.MediaRouteVolumeSlider { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.app.OverlayListView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.view.menu.ActionMenuItemView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.view.menu.ExpandedMenuView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.view.menu.ListMenuItemView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ActionBarContainer { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ActionBarContextView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ActionBarOverlayLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ActionMenuView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ActivityChooserView$InnerLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.AlertDialogLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.AppCompatImageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.AppCompatSpinner { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ButtonBarLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ContentFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.DialogTitle { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.FitWindowsFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.FitWindowsLinearLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.GridLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.RecyclerView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.SearchView { + public <init>(...); +} +-keep class android.support.v7.widget.SearchView$SearchAutoComplete { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.SwitchCompat { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.Toolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ViewStubCompat { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.widget.RadioButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class com.google.android.apps.chrome.appwidget.bookmarks.BookmarkThumbnailWidgetProvider { <init>(); } +-keep class com.google.android.gms.cast.framework.ReconnectionService { <init>(); } +-keep class com.google.android.gms.cast.framework.internal.featurehighlight.HelpTextView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class com.google.android.gms.cast.framework.media.MediaIntentReceiver { <init>(); } +-keep class com.google.android.gms.cast.framework.media.MediaNotificationService { <init>(); } +-keep class com.google.android.gms.common.api.GoogleApiActivity { <init>(); } +-keep class com.google.android.gms.common.internal.ReflectedParcelable +-keep class com.google.android.gms.gcm.GcmReceiver { <init>(); } +-keep class com.google.ipc.invalidation.external.client.contrib.AndroidListener$AlarmReceiver { <init>(); } +-keep class com.google.ipc.invalidation.ticl.android2.AndroidInternalScheduler$AlarmReceiver { <init>(); } +-keep class com.google.ipc.invalidation.ticl.android2.TiclService { <init>(); } +-keep class com.google.ipc.invalidation.ticl.android2.channel.AndroidInstanceIDListenerService { <init>(); } +-keep class com.google.ipc.invalidation.ticl.android2.channel.AndroidMessageSenderService { <init>(); } +-keep class com.google.ipc.invalidation.ticl.android2.channel.GcmRegistrationTaskService { <init>(); } +-keep class com.google.vr.cardboard.UsedByNative +-keep class com.google.vr.cardboard.annotations.UsedByNative +-keep class com.google.vr.cardboard.annotations.UsedByReflection +-keep class org.chromium.build.BuildHooksAndroidImpl +-keep class org.chromium.chrome.browser.BrowserRestartActivity { <init>(); } +-keep class org.chromium.chrome.browser.ChromeApplication { <init>(); } +-keep class org.chromium.chrome.browser.ChromeBackgroundService { <init>(); } +-keep class org.chromium.chrome.browser.ChromeTabbedActivity { <init>(); } +-keep class org.chromium.chrome.browser.ChromeTabbedActivity2 { <init>(); } +-keep class org.chromium.chrome.browser.LauncherShortcutActivity { <init>(); } +-keep class org.chromium.chrome.browser.NoTouchActivity { <init>(); } +-keep class org.chromium.chrome.browser.appmenu.AppMenuIconRowFooter { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.appmenu.AppMenuItemIcon { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill.keyboard_accessory.AccessorySheetView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill.keyboard_accessory.KeyboardAccessoryModernView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill.keyboard_accessory.KeyboardAccessoryTabLayoutView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill.keyboard_accessory.KeyboardAccessoryView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill.keyboard_accessory.PasswordAccessoryInfoView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill_assistant.ui.PaymentRequestBottomBar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill_assistant.ui.TouchEventFilter { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkActionBar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkActivity { <init>(); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkAddActivity { <init>(); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkAddEditFolderActivity { <init>(); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkEditActivity { <init>(); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkFolderRow { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkFolderSelectActivity { <init>(); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkItemRow { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.bookmarkswidget.BookmarkWidgetProxy { <init>(); } +-keep class org.chromium.chrome.browser.bookmarkswidget.BookmarkWidgetService { <init>(); } +-keep class org.chromium.chrome.browser.browseractions.BrowserActionActivity { <init>(); } +-keep class org.chromium.chrome.browser.browseractions.BrowserActionsService { <init>(); } +-keep class org.chromium.chrome.browser.browserservices.ClearDataDialogActivity { <init>(); } +-keep class org.chromium.chrome.browser.browserservices.ClearDataService { <init>(); } +-keep class org.chromium.chrome.browser.browserservices.ClientAppBroadcastReceiver { <init>(); } +-keep class org.chromium.chrome.browser.browserservices.ManageTrustedWebActivityDataActivity { <init>(); } +-keep class org.chromium.chrome.browser.compositor.CompositorViewHolder { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.contacts_picker.ContactView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.contacts_picker.ContactsPickerToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.contextmenu.TabularContextMenuViewPager { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.contextual_suggestions.ToolbarView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.coordinator.CoordinatorLayoutForPointer { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.crash.ChromeMinidumpUploadJobService { <init>(); } +-keep class org.chromium.chrome.browser.crash.MinidumpUploadService { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.CustomTabActivity { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.CustomTabsConnectionService { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.PaymentHandlerActivity { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.SeparateTaskCustomTabActivity { <init>(); } +-keep class org.chromium.chrome.browser.document.ChromeLauncherActivity { <init>(); } +-keep class org.chromium.chrome.browser.document.DocumentActivity { <init>(); } +-keep class org.chromium.chrome.browser.document.IncognitoDocumentActivity { <init>(); } +-keep class org.chromium.chrome.browser.dom_distiller.DistilledPagePrefsView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.DownloadActivity { <init>(); } +-keep class org.chromium.chrome.browser.download.DownloadBroadcastManager { <init>(); } +-keep class org.chromium.chrome.browser.download.DownloadBroadcastReceiver { <init>(); } +-keep class org.chromium.chrome.browser.download.DownloadForegroundService { <init>(); } +-keep class org.chromium.chrome.browser.download.DownloadLocationCustomView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.home.list.view.AspectRatioFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.home.list.view.AsyncImageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.home.list.view.CircularProgressView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.home.list.view.ForegroundRoundedCornerImageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.home.toolbar.DownloadHomeToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.home.view.SelectionView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.ui.DownloadItemView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.ui.DownloadManagerToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.ui.OfflineGroupHeaderView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.explore_sites.ExperimentalExploreSitesCategoryTileView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.explore_sites.ExploreSitesCategoryCardView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.explore_sites.ExploreSitesCategoryTileView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.explore_sites.ExploreSitesTileView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.firstrun.FirstRunActivity { <init>(); } +-keep class org.chromium.chrome.browser.firstrun.FirstRunChooserView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.firstrun.FirstRunView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.firstrun.LightweightFirstRunActivity { <init>(); } +-keep class org.chromium.chrome.browser.firstrun.TabbedModeFirstRunActivity { <init>(); } +-keep class org.chromium.chrome.browser.history.HistoryActivity { <init>(); } +-keep class org.chromium.chrome.browser.history.HistoryItemView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.history.HistoryManagerToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.incognito.IncognitoDisclosureActivity { <init>(); } +-keep class org.chromium.chrome.browser.incognito.IncognitoNotificationService { <init>(); } +-keep class org.chromium.chrome.browser.infobar.InfoBarMessageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.infobar.TextViewEllipsizerSafe { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.infobar.translate.TranslateTabContent { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.infobar.translate.TranslateTabLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.instantapps.AuthenticatedProxyActivity { <init>(); } +-keep class org.chromium.chrome.browser.invalidation.ChromeBrowserSyncAdapterService { <init>(); } +-keep class org.chromium.chrome.browser.invalidation.ChromeInvalidationClientService { <init>(); } +-keep class org.chromium.chrome.browser.jsdialog.JavascriptDialogCustomView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.locale.LocaleChangedBroadcastReceiver { <init>(); } +-keep class org.chromium.chrome.browser.media.MediaCaptureNotificationService { <init>(); } +-keep class org.chromium.chrome.browser.media.MediaLauncherActivity { <init>(); } +-keep class org.chromium.chrome.browser.media.remote.ExpandedControllerActivity { <init>(); } +-keep class org.chromium.chrome.browser.media.remote.FullscreenMediaRouteButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.media.router.caf.remoting.CafExpandedControllerActivity { <init>(); } +-keep class org.chromium.chrome.browser.media.ui.MediaNotificationManager$CastListenerService { <init>(); } +-keep class org.chromium.chrome.browser.media.ui.MediaNotificationManager$CastMediaButtonReceiver { <init>(); } +-keep class org.chromium.chrome.browser.media.ui.MediaNotificationManager$PlaybackListenerService { <init>(); } +-keep class org.chromium.chrome.browser.media.ui.MediaNotificationManager$PlaybackMediaButtonReceiver { <init>(); } +-keep class org.chromium.chrome.browser.media.ui.MediaNotificationManager$PresentationListenerService { <init>(); } +-keep class org.chromium.chrome.browser.media.ui.MediaNotificationManager$PresentationMediaButtonReceiver { <init>(); } +-keep class org.chromium.chrome.browser.modaldialog.ModalDialogView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.multiwindow.MultiInstanceChromeTabbedActivity { <init>(); } +-keep class org.chromium.chrome.browser.notifications.NotificationIntentInterceptor$Receiver { <init>(); } +-keep class org.chromium.chrome.browser.notifications.NotificationJobService { <init>(); } +-keep class org.chromium.chrome.browser.notifications.NotificationService { <init>(); } +-keep class org.chromium.chrome.browser.notifications.NotificationService$Receiver { <init>(); } +-keep class org.chromium.chrome.browser.ntp.ContentSuggestionsNotifier$DeleteReceiver { <init>(); } +-keep class org.chromium.chrome.browser.ntp.ContentSuggestionsNotifier$OpenUrlReceiver { <init>(); } +-keep class org.chromium.chrome.browser.ntp.ContentSuggestionsNotifier$TimeoutReceiver { <init>(); } +-keep class org.chromium.chrome.browser.ntp.IncognitoNewTabPageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.IncognitoNewTabPageViewMD { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.LogoView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.NativePageRootFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.NewTabPageLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.NewTabPageLayout$SearchBoxContainerView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.NewTabPageScrollView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.NewTabPageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.RecentTabsExpandableListView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.RecentTabsGroupView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.cards.ProgressIndicatorView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.snippets.SectionHeaderView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.offlinepages.AutoFetchNotifier$ClickReceiver { <init>(); } +-keep class org.chromium.chrome.browser.offlinepages.prefetch.PrefetchedPagesNotifier$ClickReceiver { <init>(); } +-keep class org.chromium.chrome.browser.offlinepages.prefetch.PrefetchedPagesNotifier$SettingsReceiver { <init>(); } +-keep class org.chromium.chrome.browser.omaha.OmahaClient { <init>(); } +-keep class org.chromium.chrome.browser.omnibox.LocationBarPhone { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.omnibox.LocationBarTablet { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.omnibox.UrlBar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.omnibox.status.StatusView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.page_info.PageInfoView$ElidedUrlTextView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.password_manager.PasswordGenerationDialogCustomView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.payments.ui.PaymentRequestBottomBar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.payments.ui.PaymentRequestHeader { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.payments.ui.PaymentRequestUiErrorView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.photo_picker.DecoderService { <init>(); } +-keep class org.chromium.chrome.browser.photo_picker.PhotoPickerToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.photo_picker.PickerBitmapView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.preferences.AboutChromePreferenceOSVersion { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ButtonPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ChromeBaseListPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ChromeBasePreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ChromeSwitchPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ClearBrowsingDataCheckBoxPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ExpandablePreferenceGroup { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.HyperlinkPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.LearnMorePreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.Preferences { <init>(); } +-keep class org.chromium.chrome.browser.preferences.SeekBarLinkedCheckBoxPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.SignInPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.SigninExpandablePreferenceGroup { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.SpinnerPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.SyncErrorCardPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.SyncPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.SyncedAccountPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.TextAndButtonPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.TextMessagePreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.TextScalePreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.datareduction.DataReductionMainMenuItem { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.preferences.datareduction.DataReductionSiteBreakdownView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.preferences.datareduction.DataReductionStatsPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.download.DownloadLocationPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.languages.LanguageListPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.website.ClearWebsiteStorage { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.website.ManageSpaceActivity { <init>(); } +-keep class org.chromium.chrome.browser.preferences.website.SiteSettingsPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.website.TriStateSiteSettingsPreference { <init>(...); } +-keep class org.chromium.chrome.browser.prerender.ChromePrerenderService { <init>(); } +-keep class org.chromium.chrome.browser.printing.PrintShareActivity { <init>(); } +-keep class org.chromium.chrome.browser.provider.ChromeBrowserProvider { <init>(); } +-keep class org.chromium.chrome.browser.searchwidget.SearchActivity { <init>(); } +-keep class org.chromium.chrome.browser.searchwidget.SearchActivityLocationBarLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.searchwidget.SearchWidgetProvider { <init>(); } +-keep class org.chromium.chrome.browser.send_tab_to_self.SendTabToSelfShareActivity { <init>(); } +-keep class org.chromium.chrome.browser.services.AccountsChangedReceiver { <init>(); } +-keep class org.chromium.chrome.browser.services.gcm.ChromeGcmListenerService { <init>(); } +-keep class org.chromium.chrome.browser.services.gcm.InvalidationGcmUpstreamSender { <init>(); } +-keep class org.chromium.chrome.browser.signin.AccountSigninActivity { <init>(); } +-keep class org.chromium.chrome.browser.signin.AccountSigninChooseView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.signin.AccountSigninConfirmationView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.signin.AccountSigninView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.signin.PersonalizedSigninPromoView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.signin.SigninActivity { <init>(); } +-keep class org.chromium.chrome.browser.signin.SigninScrollView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.signin.SigninView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.signin.SyncPromoView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.snackbar.BottomContainer { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.snackbar.TemplatePreservingTextView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.suggestions.SuggestionsRecyclerView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.suggestions.SuggestionsTileView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.suggestions.TileGridLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.sync.ui.PassphraseActivity { <init>(); } +-keep class org.chromium.chrome.browser.tab.SadTabView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.HomeButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.IncognitoToggleTabLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.MenuButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.NewTabButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.TabSwitcherButtonView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.bottom.BottomToolbarNewTabButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.bottom.CloseAllTabsButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.bottom.ScrollingBottomViewResourceFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.bottom.SearchAccelerator { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.bottom.ShareButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.CustomTabToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.CustomTabToolbar$InterceptTouchLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.TabSwitcherModeTTPhone { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.ToggleTabStackButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.ToolbarControlContainer { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.ToolbarControlContainer$ToolbarViewResourceFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.ToolbarPhone { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.ToolbarTablet { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.tracing.TracingNotificationService { <init>(); } +-keep class org.chromium.chrome.browser.upgrade.PackageReplacedBroadcastReceiver { <init>(); } +-keep class org.chromium.chrome.browser.upgrade.UpgradeActivity { <init>(); } +-keep class org.chromium.chrome.browser.upgrade.UpgradeIntentService { <init>(); } +-keep class org.chromium.chrome.browser.util.ChromeFileProvider { <init>(); } +-keep class org.chromium.chrome.browser.vr.VrCancelAnimationActivity { <init>(); } +-keep class org.chromium.chrome.browser.vr.VrFirstRunActivity { <init>(); } +-keep class org.chromium.chrome.browser.webapps.SameTaskWebApkActivity { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity0 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity1 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity2 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity3 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity4 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity5 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity6 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity7 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity8 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity9 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity0 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity1 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity2 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity3 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity4 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity5 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity6 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity7 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity8 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity9 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappLauncherActivity { <init>(); } +-keep class org.chromium.chrome.browser.widget.AlertDialogEditText { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.BoundedLinearLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.CompatibilityTextInputLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.DualControlLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.EmptyAlertEditText { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.FadingEdgeScrollView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.FadingShadowView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.ListMenuButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.LoadingView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.MaterialProgressBar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.NumberRollView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.PromoDialogLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.RadioButtonLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.RadioButtonWithDescription { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.accessibility.AccessibilityTabModelListItem { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.accessibility.AccessibilityTabModelListView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.accessibility.AccessibilityTabModelWrapper { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.bottomsheet.BottomSheet { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.bottomsheet.TouchRestrictingFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.emptybackground.EmptyBackgroundViewTablet { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.findinpage.FindToolbar$FindQuery { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.findinpage.FindToolbarPhone { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.findinpage.FindToolbarTablet { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.incognitotoggle.IncognitoToggleButtonTablet { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.prefeditor.EditorDialogToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.prefeditor.ExpandableGridView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.selection.SelectableListLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.components.background_task_scheduler.BackgroundTaskGcmTaskService { <init>(); } +-keep class org.chromium.components.background_task_scheduler.BackgroundTaskJobService { <init>(); } +-keep class org.chromium.components.embedder_support.delegate.ColorPickerAdvanced { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.components.embedder_support.delegate.ColorPickerMoreButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.components.embedder_support.delegate.ColorPickerSimple { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.content.app.PrivilegedProcessService { + public <init>(); +} +-keep class org.chromium.content.app.PrivilegedProcessService0 { <init>(); } +-keep class org.chromium.content.app.PrivilegedProcessService1 { <init>(); } +-keep class org.chromium.content.app.PrivilegedProcessService2 { <init>(); } +-keep class org.chromium.content.app.PrivilegedProcessService3 { <init>(); } +-keep class org.chromium.content.app.PrivilegedProcessService4 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService { + public <init>(); +} +-keep class org.chromium.content.app.SandboxedProcessService0 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService1 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService10 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService11 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService12 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService13 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService14 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService15 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService16 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService17 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService18 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService19 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService2 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService20 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService21 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService22 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService23 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService24 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService25 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService26 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService27 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService28 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService29 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService3 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService30 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService31 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService32 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService33 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService34 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService35 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService36 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService37 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService38 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService39 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService4 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService5 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService6 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService7 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService8 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService9 { <init>(); } +-keep class org.chromium.third_party.android.datausagechart.ChartDataUsageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.third_party.android.datausagechart.ChartNetworkSeriesView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.third_party.android.media.MediaController { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.AsyncViewStub { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.ButtonCompat { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.CheckableImageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.ChipView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.ChromeImageButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.ChromeImageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.OptimizedFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.TextViewWithClickableSpans { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.TextViewWithLeading { <init>(android.content.Context, android.util.AttributeSet); } +-keep public class * extends android.support.design.widget.CoordinatorLayout$Behavior { + public <init>(android.content.Context, android.util.AttributeSet); + public <init>(); +} +-keep public class * extends android.support.v7.widget.RecyclerView$LayoutManager { + public <init>(...); +} +-keep public class * implements com.google.android.gms.cast.framework.OptionsProvider +-keep public class android.support.transition.FragmentTransitionSupport { +} +-keep public class org.chromium.chrome.browser.** extends android.app.Fragment { + public <init>(); +} +-keepattributes *Annotation* +-keepattributes *Annotation* +-keepattributes *Annotation* +-keepattributes AnnotationDefault +-keepattributes RuntimeVisible*Annotations +-keepattributes SourceFile,LineNumberTable +-keepclasseswithmembernames,allowoptimization class com.google.common.logging.nano.Vr$VREvent$SdkConfigurationParams** { + *; +} +-keepclasseswithmembernames,includedescriptorclasses class com.google.vr.** { + native <methods>; +} +-keepclasseswithmembers class * { + @android.support.annotation.Keep <fields>; +} +-keepclasseswithmembers class * { + @android.support.annotation.Keep <methods>; +} +-keepclasseswithmembers class * { + @org.chromium.base.annotations.AccessedByNative <fields>; +} +-keepclasseswithmembers class * { + @org.chromium.base.annotations.UsedByReflection <fields>; +} +-keepclasseswithmembers class * { + @org.chromium.base.annotations.UsedByReflection <methods>; +} +-keepclasseswithmembers,includedescriptorclasses class * { + @org.chromium.base.annotations.CalledByNative <methods>; +} +-keepclasseswithmembers,includedescriptorclasses class * { + @org.chromium.base.annotations.CalledByNativeUnchecked <methods>; +} +-keepclasseswithmembers,includedescriptorclasses class * { + native <methods>; +} +-keepclassmembernames class * { + @com.google.android.gms.common.annotation.KeepName *; +} +-keepclassmembernames,allowobfuscation class * { + @org.chromium.base.annotations.DoNotInline <methods>; +} +-keepclassmembers class * extends com.google.android.gms.internal.clearcut.zzcg { + <fields>; +} +-keepclassmembers class * implements android.os.Parcelable { + public static *** CREATOR; +} +-keepclassmembers class * implements android.os.Parcelable { + public static final *** CREATOR; +} +-keepclassmembers class * { + @com.google.vr.cardboard.UsedByNative *; +} +-keepclassmembers class * { + @com.google.vr.cardboard.annotations.UsedByNative *; +} +-keepclassmembers class * { + @com.google.vr.cardboard.annotations.UsedByReflection *; +} +-keepclassmembers class ** { + @android.arch.lifecycle.OnLifecycleEvent *; +} +-keepclassmembers class android.support.design.internal.BottomNavigationMenuView { + boolean mShiftingMode; +} +-keepclassmembers class android.support.graphics.drawable.VectorDrawableCompat$* { + void set*(***); + *** get*(); +} +-keepclassmembers class android.support.transition.ChangeBounds$* extends android.animation.AnimatorListenerAdapter { + android.support.transition.ChangeBounds$ViewBounds mViewBounds; +} +-keepclassmembers class com.google.android.gms.common.api.internal.BasePendingResult { + com.google.android.gms.common.api.internal.BasePendingResult$ReleasableResultGuardian mResultGuardian; +} +-keepclassmembers class com.google.android.gms.gcm.GcmListenerService { + public void handleIntent(android.content.Intent); +} +-keepclassmembers class org.chromium.** implements android.os.Parcelable { + public static *** CREATOR; +} +-keepclassmembers enum * { + public static **[] values(); +} +-keepclassmembers enum android.arch.lifecycle.Lifecycle$Event { + <fields>; +} +-keepclassmembers enum org.chromium.** { + public static **[] values(); +} +-keepclassmembers public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { + public static final *** NULL; +} +-keepnames @com.google.android.gms.common.annotation.KeepName class * +-keepnames class * implements android.os.Parcelable +-keepnames class * implements com.google.android.gms.common.internal.ReflectedParcelable +-keepnames class * implements org.chromium.components.background_task_scheduler.BackgroundTask { + public <init>(); +} +-keepnames class com.google.vr.ndk.** { *; } +-keepnames class com.google.vr.sdk.** { *; } +-keepnames class org.chromium.** implements android.os.Parcelable +-keepnames,allowobfuscation @org.chromium.base.annotations.DoNotInline class * { + *; +} +-optimizationpasses 3 +-optimizations !class/merging/horizontal +-renamesourcefileattribute PG +-repackageclasses '' \ No newline at end of file
diff --git a/chrome/android/java/chrome_public_apk.proguard_flags.expected b/chrome/android/java/chrome_public_apk.proguard_flags.expected new file mode 100644 index 0000000..b9843d9 --- /dev/null +++ b/chrome/android/java/chrome_public_apk.proguard_flags.expected
@@ -0,0 +1,581 @@ +-allowaccessmodification +-assumenosideeffects class ** { + @org.chromium.base.annotations.RemovableInRelease <methods>; +} +-assumenosideeffects class android.util.Log { + static *** d(...); + static *** v(...); + static *** isLoggable(...); +} +-dontpreverify +-dontwarn android.app.Notification +-dontwarn android.nfc.NfcAdapter +-dontwarn android.security.NetworkSecurityPolicy +-dontwarn android.support.** +-dontwarn com.google.android.apps.common.proguard.UsedBy* +-dontwarn com.google.common.logging.nano.Vr$** +-dontwarn com.google.protobuf.nano.NanoEnumValue +-dontwarn com.google.vr.** +-dontwarn javax.annotation.** +-dontwarn libcore.io.Memory +-dontwarn org.checkerframework.** +-dontwarn org.chromium.base.library_loader.NativeLibraries +-dontwarn sun.misc.Unsafe +-keep @android.support.annotation.Keep class * +-keep @com.google.android.gms.common.util.DynamiteApi public class * { + public <fields>; + public <methods>; +} +-keep @com.google.vr.cardboard.UsedByNative class * +-keep @com.google.vr.cardboard.annotations.UsedByNative class * +-keep @com.google.vr.cardboard.annotations.UsedByReflection class * +-keep @interface android.support.annotation.Keep +-keep @interface com.google.android.gms.common.annotation.KeepName +-keep @interface com.google.android.gms.common.util.DynamiteApi +-keep @interface org.chromium.base.annotations.AccessedByNative +-keep @interface org.chromium.base.annotations.CalledByNative +-keep @interface org.chromium.base.annotations.CalledByNativeUnchecked +-keep @interface org.chromium.base.annotations.DoNotInline +-keep @interface org.chromium.base.annotations.RemovableInRelease +-keep @interface org.chromium.base.annotations.UsedByReflection +-keep @org.chromium.base.annotations.UsedByReflection class * {} +-keep class * implements android.arch.lifecycle.GenericLifecycleObserver { + <init>(...); +} +-keep class * implements android.arch.lifecycle.LifecycleObserver { +} +-keep class * implements org.chromium.base.test.params.ParameterProvider +-keep class android.support.customtabs.PostMessageService { <init>(); } +-keep class android.support.customtabs.browseractions.BrowserActionsFallbackMenuView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.customtabs.browseractions.BrowserServiceFileProvider { <init>(); } +-keep class android.support.design.internal.BaselineLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.internal.NavigationMenuItemView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.internal.NavigationMenuView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.internal.SnackbarContentLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.widget.AppBarLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.widget.CheckableImageButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.widget.CoordinatorLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.widget.Snackbar$SnackbarLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.widget.TabItem { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.widget.TabLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v4.media.** implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} +-keep class android.support.v4.view.ViewPager { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v4.widget.NestedScrollView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v4.widget.Space { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.app.AlertController$RecycleListView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.app.MediaRouteButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.app.MediaRouteExpandCollapseButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.app.MediaRouteVolumeSlider { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.app.OverlayListView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.view.menu.ActionMenuItemView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.view.menu.ExpandedMenuView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.view.menu.ListMenuItemView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ActionBarContainer { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ActionBarContextView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ActionBarOverlayLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ActionMenuView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ActivityChooserView$InnerLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.AlertDialogLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.AppCompatImageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.AppCompatSpinner { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ButtonBarLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ContentFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.DialogTitle { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.FitWindowsFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.FitWindowsLinearLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.GridLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.RecyclerView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.SearchView { + public <init>(...); +} +-keep class android.support.v7.widget.SearchView$SearchAutoComplete { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.SwitchCompat { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.Toolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ViewStubCompat { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.widget.RadioButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class com.google.android.apps.chrome.appwidget.bookmarks.BookmarkThumbnailWidgetProvider { <init>(); } +-keep class com.google.android.gms.cast.framework.ReconnectionService { <init>(); } +-keep class com.google.android.gms.cast.framework.internal.featurehighlight.HelpTextView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class com.google.android.gms.cast.framework.media.MediaIntentReceiver { <init>(); } +-keep class com.google.android.gms.cast.framework.media.MediaNotificationService { <init>(); } +-keep class com.google.android.gms.common.api.GoogleApiActivity { <init>(); } +-keep class com.google.android.gms.common.internal.ReflectedParcelable +-keep class com.google.android.gms.gcm.GcmReceiver { <init>(); } +-keep class com.google.ipc.invalidation.external.client.contrib.AndroidListener$AlarmReceiver { <init>(); } +-keep class com.google.ipc.invalidation.ticl.android2.AndroidInternalScheduler$AlarmReceiver { <init>(); } +-keep class com.google.ipc.invalidation.ticl.android2.TiclService { <init>(); } +-keep class com.google.ipc.invalidation.ticl.android2.channel.AndroidInstanceIDListenerService { <init>(); } +-keep class com.google.ipc.invalidation.ticl.android2.channel.AndroidMessageSenderService { <init>(); } +-keep class com.google.ipc.invalidation.ticl.android2.channel.GcmRegistrationTaskService { <init>(); } +-keep class com.google.vr.cardboard.UsedByNative +-keep class com.google.vr.cardboard.annotations.UsedByNative +-keep class com.google.vr.cardboard.annotations.UsedByReflection +-keep class org.chromium.build.BuildHooksAndroidImpl +-keep class org.chromium.chrome.browser.BrowserRestartActivity { <init>(); } +-keep class org.chromium.chrome.browser.ChromeApplication { <init>(); } +-keep class org.chromium.chrome.browser.ChromeBackgroundService { <init>(); } +-keep class org.chromium.chrome.browser.ChromeTabbedActivity { <init>(); } +-keep class org.chromium.chrome.browser.ChromeTabbedActivity2 { <init>(); } +-keep class org.chromium.chrome.browser.LauncherShortcutActivity { <init>(); } +-keep class org.chromium.chrome.browser.NoTouchActivity { <init>(); } +-keep class org.chromium.chrome.browser.appmenu.AppMenuIconRowFooter { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.appmenu.AppMenuItemIcon { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill.keyboard_accessory.AccessorySheetView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill.keyboard_accessory.KeyboardAccessoryModernView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill.keyboard_accessory.KeyboardAccessoryTabLayoutView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill.keyboard_accessory.KeyboardAccessoryView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill.keyboard_accessory.PasswordAccessoryInfoView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill_assistant.ui.PaymentRequestBottomBar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill_assistant.ui.TouchEventFilter { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkActionBar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkActivity { <init>(); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkAddActivity { <init>(); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkAddEditFolderActivity { <init>(); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkEditActivity { <init>(); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkFolderRow { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkFolderSelectActivity { <init>(); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkItemRow { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.bookmarkswidget.BookmarkWidgetProxy { <init>(); } +-keep class org.chromium.chrome.browser.bookmarkswidget.BookmarkWidgetService { <init>(); } +-keep class org.chromium.chrome.browser.browseractions.BrowserActionActivity { <init>(); } +-keep class org.chromium.chrome.browser.browseractions.BrowserActionsService { <init>(); } +-keep class org.chromium.chrome.browser.browserservices.ClearDataDialogActivity { <init>(); } +-keep class org.chromium.chrome.browser.browserservices.ClearDataService { <init>(); } +-keep class org.chromium.chrome.browser.browserservices.ClientAppBroadcastReceiver { <init>(); } +-keep class org.chromium.chrome.browser.browserservices.ManageTrustedWebActivityDataActivity { <init>(); } +-keep class org.chromium.chrome.browser.compositor.CompositorViewHolder { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.contacts_picker.ContactView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.contacts_picker.ContactsPickerToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.contextmenu.TabularContextMenuViewPager { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.contextual_suggestions.ToolbarView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.coordinator.CoordinatorLayoutForPointer { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.crash.ChromeMinidumpUploadJobService { <init>(); } +-keep class org.chromium.chrome.browser.crash.MinidumpUploadService { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.CustomTabActivity { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.CustomTabsConnectionService { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.PaymentHandlerActivity { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.SeparateTaskCustomTabActivity { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.SeparateTaskCustomTabActivity0 { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.SeparateTaskCustomTabActivity1 { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.SeparateTaskCustomTabActivity2 { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.SeparateTaskCustomTabActivity3 { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.SeparateTaskCustomTabActivity4 { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.SeparateTaskCustomTabActivity5 { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.SeparateTaskCustomTabActivity6 { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.SeparateTaskCustomTabActivity7 { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.SeparateTaskCustomTabActivity8 { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.SeparateTaskCustomTabActivity9 { <init>(); } +-keep class org.chromium.chrome.browser.document.ChromeLauncherActivity { <init>(); } +-keep class org.chromium.chrome.browser.document.DocumentActivity { <init>(); } +-keep class org.chromium.chrome.browser.document.IncognitoDocumentActivity { <init>(); } +-keep class org.chromium.chrome.browser.dom_distiller.DistilledPagePrefsView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.DownloadActivity { <init>(); } +-keep class org.chromium.chrome.browser.download.DownloadBroadcastManager { <init>(); } +-keep class org.chromium.chrome.browser.download.DownloadBroadcastReceiver { <init>(); } +-keep class org.chromium.chrome.browser.download.DownloadForegroundService { <init>(); } +-keep class org.chromium.chrome.browser.download.DownloadLocationCustomView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.home.list.view.AspectRatioFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.home.list.view.AsyncImageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.home.list.view.CircularProgressView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.home.list.view.ForegroundRoundedCornerImageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.home.toolbar.DownloadHomeToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.home.view.SelectionView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.ui.DownloadItemView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.ui.DownloadManagerToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.ui.OfflineGroupHeaderView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.explore_sites.ExperimentalExploreSitesCategoryTileView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.explore_sites.ExploreSitesCategoryCardView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.explore_sites.ExploreSitesCategoryTileView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.explore_sites.ExploreSitesTileView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.firstrun.FirstRunActivity { <init>(); } +-keep class org.chromium.chrome.browser.firstrun.FirstRunChooserView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.firstrun.FirstRunView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.firstrun.LightweightFirstRunActivity { <init>(); } +-keep class org.chromium.chrome.browser.firstrun.TabbedModeFirstRunActivity { <init>(); } +-keep class org.chromium.chrome.browser.history.HistoryActivity { <init>(); } +-keep class org.chromium.chrome.browser.history.HistoryItemView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.history.HistoryManagerToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.incognito.IncognitoDisclosureActivity { <init>(); } +-keep class org.chromium.chrome.browser.incognito.IncognitoNotificationService { <init>(); } +-keep class org.chromium.chrome.browser.infobar.InfoBarMessageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.infobar.TextViewEllipsizerSafe { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.infobar.translate.TranslateTabContent { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.infobar.translate.TranslateTabLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.instantapps.AuthenticatedProxyActivity { <init>(); } +-keep class org.chromium.chrome.browser.invalidation.ChromeBrowserSyncAdapterService { <init>(); } +-keep class org.chromium.chrome.browser.invalidation.ChromeInvalidationClientService { <init>(); } +-keep class org.chromium.chrome.browser.jsdialog.JavascriptDialogCustomView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.locale.LocaleChangedBroadcastReceiver { <init>(); } +-keep class org.chromium.chrome.browser.media.MediaCaptureNotificationService { <init>(); } +-keep class org.chromium.chrome.browser.media.MediaLauncherActivity { <init>(); } +-keep class org.chromium.chrome.browser.media.remote.ExpandedControllerActivity { <init>(); } +-keep class org.chromium.chrome.browser.media.remote.FullscreenMediaRouteButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.media.router.caf.remoting.CafExpandedControllerActivity { <init>(); } +-keep class org.chromium.chrome.browser.media.ui.MediaNotificationManager$CastListenerService { <init>(); } +-keep class org.chromium.chrome.browser.media.ui.MediaNotificationManager$CastMediaButtonReceiver { <init>(); } +-keep class org.chromium.chrome.browser.media.ui.MediaNotificationManager$PlaybackListenerService { <init>(); } +-keep class org.chromium.chrome.browser.media.ui.MediaNotificationManager$PlaybackMediaButtonReceiver { <init>(); } +-keep class org.chromium.chrome.browser.media.ui.MediaNotificationManager$PresentationListenerService { <init>(); } +-keep class org.chromium.chrome.browser.media.ui.MediaNotificationManager$PresentationMediaButtonReceiver { <init>(); } +-keep class org.chromium.chrome.browser.modaldialog.ModalDialogView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.multiwindow.MultiInstanceChromeTabbedActivity { <init>(); } +-keep class org.chromium.chrome.browser.notifications.NotificationIntentInterceptor$Receiver { <init>(); } +-keep class org.chromium.chrome.browser.notifications.NotificationJobService { <init>(); } +-keep class org.chromium.chrome.browser.notifications.NotificationService { <init>(); } +-keep class org.chromium.chrome.browser.notifications.NotificationService$Receiver { <init>(); } +-keep class org.chromium.chrome.browser.ntp.ContentSuggestionsNotifier$DeleteReceiver { <init>(); } +-keep class org.chromium.chrome.browser.ntp.ContentSuggestionsNotifier$OpenUrlReceiver { <init>(); } +-keep class org.chromium.chrome.browser.ntp.ContentSuggestionsNotifier$TimeoutReceiver { <init>(); } +-keep class org.chromium.chrome.browser.ntp.IncognitoNewTabPageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.IncognitoNewTabPageViewMD { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.LogoView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.NativePageRootFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.NewTabPageLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.NewTabPageLayout$SearchBoxContainerView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.NewTabPageScrollView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.NewTabPageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.RecentTabsExpandableListView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.RecentTabsGroupView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.cards.ProgressIndicatorView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.snippets.SectionHeaderView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.offlinepages.AutoFetchNotifier$ClickReceiver { <init>(); } +-keep class org.chromium.chrome.browser.offlinepages.prefetch.PrefetchedPagesNotifier$ClickReceiver { <init>(); } +-keep class org.chromium.chrome.browser.offlinepages.prefetch.PrefetchedPagesNotifier$SettingsReceiver { <init>(); } +-keep class org.chromium.chrome.browser.omaha.OmahaClient { <init>(); } +-keep class org.chromium.chrome.browser.omnibox.LocationBarPhone { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.omnibox.LocationBarTablet { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.omnibox.UrlBar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.omnibox.status.StatusView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.page_info.PageInfoView$ElidedUrlTextView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.password_manager.PasswordGenerationDialogCustomView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.payments.ui.PaymentRequestBottomBar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.payments.ui.PaymentRequestHeader { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.payments.ui.PaymentRequestUiErrorView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.photo_picker.DecoderService { <init>(); } +-keep class org.chromium.chrome.browser.photo_picker.PhotoPickerToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.photo_picker.PickerBitmapView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.preferences.AboutChromePreferenceOSVersion { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ButtonPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ChromeBaseListPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ChromeBasePreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ChromeSwitchPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ClearBrowsingDataCheckBoxPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ExpandablePreferenceGroup { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.HyperlinkPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.LearnMorePreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.Preferences { <init>(); } +-keep class org.chromium.chrome.browser.preferences.SeekBarLinkedCheckBoxPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.SignInPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.SigninExpandablePreferenceGroup { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.SpinnerPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.SyncErrorCardPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.SyncPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.SyncedAccountPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.TextAndButtonPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.TextMessagePreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.TextScalePreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.datareduction.DataReductionMainMenuItem { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.preferences.datareduction.DataReductionSiteBreakdownView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.preferences.datareduction.DataReductionStatsPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.download.DownloadLocationPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.languages.LanguageListPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.website.ClearWebsiteStorage { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.website.ManageSpaceActivity { <init>(); } +-keep class org.chromium.chrome.browser.preferences.website.SiteSettingsPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.website.TriStateSiteSettingsPreference { <init>(...); } +-keep class org.chromium.chrome.browser.prerender.ChromePrerenderService { <init>(); } +-keep class org.chromium.chrome.browser.printing.PrintShareActivity { <init>(); } +-keep class org.chromium.chrome.browser.provider.ChromeBrowserProvider { <init>(); } +-keep class org.chromium.chrome.browser.searchwidget.SearchActivity { <init>(); } +-keep class org.chromium.chrome.browser.searchwidget.SearchActivityLocationBarLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.searchwidget.SearchWidgetProvider { <init>(); } +-keep class org.chromium.chrome.browser.send_tab_to_self.SendTabToSelfShareActivity { <init>(); } +-keep class org.chromium.chrome.browser.services.AccountsChangedReceiver { <init>(); } +-keep class org.chromium.chrome.browser.services.gcm.ChromeGcmListenerService { <init>(); } +-keep class org.chromium.chrome.browser.services.gcm.InvalidationGcmUpstreamSender { <init>(); } +-keep class org.chromium.chrome.browser.signin.AccountSigninActivity { <init>(); } +-keep class org.chromium.chrome.browser.signin.AccountSigninChooseView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.signin.AccountSigninConfirmationView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.signin.AccountSigninView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.signin.PersonalizedSigninPromoView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.signin.SigninActivity { <init>(); } +-keep class org.chromium.chrome.browser.signin.SigninScrollView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.signin.SigninView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.signin.SyncPromoView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.snackbar.BottomContainer { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.snackbar.TemplatePreservingTextView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.suggestions.SuggestionsRecyclerView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.suggestions.SuggestionsTileView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.suggestions.TileGridLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.sync.ui.PassphraseActivity { <init>(); } +-keep class org.chromium.chrome.browser.tab.SadTabView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.HomeButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.IncognitoToggleTabLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.MenuButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.NewTabButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.TabSwitcherButtonView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.bottom.BottomToolbarNewTabButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.bottom.CloseAllTabsButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.bottom.ScrollingBottomViewResourceFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.bottom.SearchAccelerator { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.bottom.ShareButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.CustomTabToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.CustomTabToolbar$InterceptTouchLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.TabSwitcherModeTTPhone { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.ToggleTabStackButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.ToolbarControlContainer { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.ToolbarControlContainer$ToolbarViewResourceFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.ToolbarPhone { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.ToolbarTablet { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.tracing.TracingNotificationService { <init>(); } +-keep class org.chromium.chrome.browser.upgrade.PackageReplacedBroadcastReceiver { <init>(); } +-keep class org.chromium.chrome.browser.upgrade.UpgradeActivity { <init>(); } +-keep class org.chromium.chrome.browser.upgrade.UpgradeIntentService { <init>(); } +-keep class org.chromium.chrome.browser.util.ChromeFileProvider { <init>(); } +-keep class org.chromium.chrome.browser.vr.VrCancelAnimationActivity { <init>(); } +-keep class org.chromium.chrome.browser.vr.VrFirstRunActivity { <init>(); } +-keep class org.chromium.chrome.browser.webapps.SameTaskWebApkActivity { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity0 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity1 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity2 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity3 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity4 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity5 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity6 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity7 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity8 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity9 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity0 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity1 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity2 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity3 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity4 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity5 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity6 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity7 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity8 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity9 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappLauncherActivity { <init>(); } +-keep class org.chromium.chrome.browser.widget.AlertDialogEditText { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.BoundedLinearLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.CompatibilityTextInputLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.DualControlLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.EmptyAlertEditText { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.FadingEdgeScrollView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.FadingShadowView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.ListMenuButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.LoadingView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.MaterialProgressBar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.NumberRollView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.PromoDialogLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.RadioButtonLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.RadioButtonWithDescription { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.accessibility.AccessibilityTabModelListItem { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.accessibility.AccessibilityTabModelListView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.accessibility.AccessibilityTabModelWrapper { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.bottomsheet.BottomSheet { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.bottomsheet.TouchRestrictingFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.emptybackground.EmptyBackgroundViewTablet { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.findinpage.FindToolbar$FindQuery { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.findinpage.FindToolbarPhone { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.findinpage.FindToolbarTablet { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.incognitotoggle.IncognitoToggleButtonTablet { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.prefeditor.EditorDialogToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.prefeditor.ExpandableGridView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.selection.SelectableListLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.components.background_task_scheduler.BackgroundTaskGcmTaskService { <init>(); } +-keep class org.chromium.components.background_task_scheduler.BackgroundTaskJobService { <init>(); } +-keep class org.chromium.components.embedder_support.delegate.ColorPickerAdvanced { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.components.embedder_support.delegate.ColorPickerMoreButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.components.embedder_support.delegate.ColorPickerSimple { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.content.app.PrivilegedProcessService { + public <init>(); +} +-keep class org.chromium.content.app.PrivilegedProcessService0 { <init>(); } +-keep class org.chromium.content.app.PrivilegedProcessService1 { <init>(); } +-keep class org.chromium.content.app.PrivilegedProcessService2 { <init>(); } +-keep class org.chromium.content.app.PrivilegedProcessService3 { <init>(); } +-keep class org.chromium.content.app.PrivilegedProcessService4 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService { + public <init>(); +} +-keep class org.chromium.content.app.SandboxedProcessService0 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService1 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService10 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService11 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService12 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService13 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService14 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService15 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService16 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService17 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService18 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService19 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService2 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService20 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService21 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService22 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService23 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService24 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService25 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService26 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService27 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService28 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService29 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService3 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService30 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService31 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService32 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService33 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService34 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService35 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService36 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService37 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService38 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService39 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService4 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService5 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService6 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService7 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService8 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService9 { <init>(); } +-keep class org.chromium.third_party.android.datausagechart.ChartDataUsageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.third_party.android.datausagechart.ChartNetworkSeriesView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.third_party.android.media.MediaController { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.AsyncViewStub { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.ButtonCompat { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.CheckableImageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.ChipView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.ChromeImageButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.ChromeImageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.OptimizedFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.TextViewWithClickableSpans { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.TextViewWithLeading { <init>(android.content.Context, android.util.AttributeSet); } +-keep public class * extends android.support.design.widget.CoordinatorLayout$Behavior { + public <init>(android.content.Context, android.util.AttributeSet); + public <init>(); +} +-keep public class * extends android.support.v7.widget.RecyclerView$LayoutManager { + public <init>(...); +} +-keep public class * implements com.google.android.gms.cast.framework.OptionsProvider +-keep public class android.support.transition.FragmentTransitionSupport { +} +-keep public class org.chromium.chrome.browser.** extends android.app.Fragment { + public <init>(); +} +-keepattributes *Annotation* +-keepattributes *Annotation* +-keepattributes *Annotation* +-keepattributes AnnotationDefault +-keepattributes RuntimeVisible*Annotations +-keepattributes SourceFile,LineNumberTable +-keepclasseswithmembernames,allowoptimization class com.google.common.logging.nano.Vr$VREvent$SdkConfigurationParams** { + *; +} +-keepclasseswithmembernames,includedescriptorclasses class com.google.vr.** { + native <methods>; +} +-keepclasseswithmembers class * { + @android.support.annotation.Keep <fields>; +} +-keepclasseswithmembers class * { + @android.support.annotation.Keep <methods>; +} +-keepclasseswithmembers class * { + @org.chromium.base.annotations.AccessedByNative <fields>; +} +-keepclasseswithmembers class * { + @org.chromium.base.annotations.UsedByReflection <fields>; +} +-keepclasseswithmembers class * { + @org.chromium.base.annotations.UsedByReflection <methods>; +} +-keepclasseswithmembers,includedescriptorclasses class * { + @org.chromium.base.annotations.CalledByNative <methods>; +} +-keepclasseswithmembers,includedescriptorclasses class * { + @org.chromium.base.annotations.CalledByNativeUnchecked <methods>; +} +-keepclasseswithmembers,includedescriptorclasses class * { + native <methods>; +} +-keepclassmembernames class * { + @com.google.android.gms.common.annotation.KeepName *; +} +-keepclassmembernames,allowobfuscation class * { + @org.chromium.base.annotations.DoNotInline <methods>; +} +-keepclassmembers class * extends com.google.android.gms.internal.clearcut.zzcg { + <fields>; +} +-keepclassmembers class * implements android.os.Parcelable { + public static *** CREATOR; +} +-keepclassmembers class * implements android.os.Parcelable { + public static final *** CREATOR; +} +-keepclassmembers class * { + @com.google.vr.cardboard.UsedByNative *; +} +-keepclassmembers class * { + @com.google.vr.cardboard.annotations.UsedByNative *; +} +-keepclassmembers class * { + @com.google.vr.cardboard.annotations.UsedByReflection *; +} +-keepclassmembers class ** { + @android.arch.lifecycle.OnLifecycleEvent *; +} +-keepclassmembers class android.support.design.internal.BottomNavigationMenuView { + boolean mShiftingMode; +} +-keepclassmembers class android.support.graphics.drawable.VectorDrawableCompat$* { + void set*(***); + *** get*(); +} +-keepclassmembers class android.support.transition.ChangeBounds$* extends android.animation.AnimatorListenerAdapter { + android.support.transition.ChangeBounds$ViewBounds mViewBounds; +} +-keepclassmembers class com.google.android.gms.common.api.internal.BasePendingResult { + com.google.android.gms.common.api.internal.BasePendingResult$ReleasableResultGuardian mResultGuardian; +} +-keepclassmembers class com.google.android.gms.gcm.GcmListenerService { + public void handleIntent(android.content.Intent); +} +-keepclassmembers class org.chromium.** implements android.os.Parcelable { + public static *** CREATOR; +} +-keepclassmembers enum * { + public static **[] values(); +} +-keepclassmembers enum android.arch.lifecycle.Lifecycle$Event { + <fields>; +} +-keepclassmembers enum org.chromium.** { + public static **[] values(); +} +-keepclassmembers public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { + public static final *** NULL; +} +-keepnames @com.google.android.gms.common.annotation.KeepName class * +-keepnames class * implements android.os.Parcelable +-keepnames class * implements com.google.android.gms.common.internal.ReflectedParcelable +-keepnames class * implements org.chromium.components.background_task_scheduler.BackgroundTask { + public <init>(); +} +-keepnames class com.google.vr.ndk.** { *; } +-keepnames class com.google.vr.sdk.** { *; } +-keepnames class org.chromium.** implements android.os.Parcelable +-keepnames,allowobfuscation @org.chromium.base.annotations.DoNotInline class * { + *; +} +-optimizationpasses 3 +-optimizations !class/merging/horizontal +-renamesourcefileattribute PG +-repackageclasses '' \ No newline at end of file
diff --git a/chrome/android/java/monochrome_public_apk.proguard_flags.expected b/chrome/android/java/monochrome_public_apk.proguard_flags.expected new file mode 100644 index 0000000..cf293f5 --- /dev/null +++ b/chrome/android/java/monochrome_public_apk.proguard_flags.expected
@@ -0,0 +1,650 @@ +-allowaccessmodification +-assumenosideeffects class ** { + @org.chromium.base.annotations.RemovableInRelease <methods>; +} +-assumenosideeffects class android.util.Log { + static *** d(...); + static *** v(...); + static *** isLoggable(...); +} +-dontnote com.android.webview.chromium.AwSafeBrowsingApiHandler +-dontnote com.android.webview.chromium.WebViewDelegateFactory$Api21CompatibilityDelegate +-dontnote org.chromium.base.library_loader.Linker$TestRunner +-dontnote org.chromium.media.MediaPlayerBridge +-dontnote org.chromium.net.DefaultAndroidKeyStore +-dontnote org.chromium.net.ProxyChangeListener$ProxyReceiver +-dontpreverify +-dontwarn android.app.Notification +-dontwarn android.nfc.NfcAdapter +-dontwarn android.security.NetworkSecurityPolicy +-dontwarn android.support.** +-dontwarn com.google.android.apps.common.proguard.UsedBy* +-dontwarn com.google.android.gms.R** +-dontwarn com.google.common.logging.nano.Vr$** +-dontwarn com.google.protobuf.nano.NanoEnumValue +-dontwarn com.google.vr.** +-dontwarn javax.annotation.** +-dontwarn libcore.io.Memory +-dontwarn org.checkerframework.** +-dontwarn org.chromium.base.library_loader.NativeLibraries +-dontwarn org.chromium.base.library_loader.NativeLibraries +-dontwarn sun.misc.Unsafe +-keep @android.support.annotation.Keep class * +-keep @com.google.android.gms.common.util.DynamiteApi public class * { + public <fields>; + public <methods>; +} +-keep @com.google.ar.core.annotations.UsedByNative class * +-keep @com.google.ar.core.annotations.UsedByReflection class * +-keep @com.google.vr.cardboard.UsedByNative class * +-keep @com.google.vr.cardboard.annotations.UsedByNative class * +-keep @com.google.vr.cardboard.annotations.UsedByReflection class * +-keep @com.google.vr.dynamite.client.UsedByNative class * +-keep @com.google.vr.dynamite.client.UsedByReflection class * +-keep @interface android.support.annotation.Keep +-keep @interface com.google.android.gms.common.annotation.KeepName +-keep @interface com.google.android.gms.common.util.DynamiteApi +-keep @interface org.chromium.base.annotations.AccessedByNative +-keep @interface org.chromium.base.annotations.CalledByNative +-keep @interface org.chromium.base.annotations.CalledByNativeUnchecked +-keep @interface org.chromium.base.annotations.DoNotInline +-keep @interface org.chromium.base.annotations.RemovableInRelease +-keep @interface org.chromium.base.annotations.UsedByReflection +-keep @org.chromium.base.annotations.UsedByReflection class * {} +-keep class * implements android.arch.lifecycle.GenericLifecycleObserver { + <init>(...); +} +-keep class * implements android.arch.lifecycle.LifecycleObserver { +} +-keep class * implements android.webkit.WebViewFactoryProvider$Statics { + *; +} +-keep class * implements org.chromium.base.test.params.ParameterProvider +-keep class android.support.customtabs.PostMessageService { <init>(); } +-keep class android.support.customtabs.browseractions.BrowserActionsFallbackMenuView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.customtabs.browseractions.BrowserServiceFileProvider { <init>(); } +-keep class android.support.design.internal.BaselineLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.internal.NavigationMenuItemView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.internal.NavigationMenuView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.internal.SnackbarContentLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.widget.AppBarLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.widget.CheckableImageButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.widget.CoordinatorLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.widget.Snackbar$SnackbarLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.widget.TabItem { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.design.widget.TabLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v4.media.** implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} +-keep class android.support.v4.view.ViewPager { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v4.widget.NestedScrollView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v4.widget.Space { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.app.AlertController$RecycleListView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.app.MediaRouteButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.app.MediaRouteExpandCollapseButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.app.MediaRouteVolumeSlider { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.app.OverlayListView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.view.menu.ActionMenuItemView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.view.menu.ExpandedMenuView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.view.menu.ListMenuItemView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ActionBarContainer { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ActionBarContextView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ActionBarOverlayLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ActionMenuView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ActivityChooserView$InnerLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.AlertDialogLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.AppCompatImageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.AppCompatSpinner { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ButtonBarLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ContentFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.DialogTitle { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.FitWindowsFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.FitWindowsLinearLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.GridLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.RecyclerView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.SearchView { + public <init>(...); +} +-keep class android.support.v7.widget.SearchView$SearchAutoComplete { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.SwitchCompat { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.Toolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.support.v7.widget.ViewStubCompat { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.webkit.WebChromeClient { + void onShowCustomView(...); + void onHideCustomView(); +} +-keep class android.widget.LinearLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class android.widget.RadioButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class com.android.webview.chromium.AwSafeBrowsingApiHandler { + AwSafeBrowsingApiHandler(...); +} +-keep class com.android.webview.chromium.ContentSettingsAdapter { + public *; +} +-keep class com.android.webview.chromium.DrawFunctor +-keep class com.android.webview.chromium.DrawGLFunctor +-keep class com.android.webview.chromium.GraphicsUtils +-keep class com.android.webview.chromium.LicenseActivity { <init>(); } +-keep class com.android.webview.chromium.LicenseContentProvider { <init>(); } +-keep class com.android.webview.chromium.WebViewChromium { + public *; +} +-keep class com.android.webview.chromium.WebViewChromiumFactoryProvider { + public *; +} +-keep class com.android.webview.chromium.WebViewChromiumFactoryProviderFor* { + public *; +} +-keep class com.android.webview.chromium.WebViewDatabaseAdapter { + public *; +} +-keep class com.google.android.apps.chrome.appwidget.bookmarks.BookmarkThumbnailWidgetProvider { <init>(); } +-keep class com.google.android.gms.cast.framework.ReconnectionService { <init>(); } +-keep class com.google.android.gms.cast.framework.internal.featurehighlight.HelpTextView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class com.google.android.gms.cast.framework.media.MediaIntentReceiver { <init>(); } +-keep class com.google.android.gms.cast.framework.media.MediaNotificationService { <init>(); } +-keep class com.google.android.gms.common.api.GoogleApiActivity { <init>(); } +-keep class com.google.android.gms.common.internal.ReflectedParcelable +-keep class com.google.android.gms.gcm.GcmReceiver { <init>(); } +-keep class com.google.ar.core.InstallActivity { <init>(); } +-keep class com.google.ar.core.annotations.UsedByNative +-keep class com.google.ar.core.annotations.UsedByReflection +-keep class com.google.ipc.invalidation.external.client.contrib.AndroidListener$AlarmReceiver { <init>(); } +-keep class com.google.ipc.invalidation.ticl.android2.AndroidInternalScheduler$AlarmReceiver { <init>(); } +-keep class com.google.ipc.invalidation.ticl.android2.TiclService { <init>(); } +-keep class com.google.ipc.invalidation.ticl.android2.channel.AndroidInstanceIDListenerService { <init>(); } +-keep class com.google.ipc.invalidation.ticl.android2.channel.AndroidMessageSenderService { <init>(); } +-keep class com.google.ipc.invalidation.ticl.android2.channel.GcmRegistrationTaskService { <init>(); } +-keep class com.google.vr.cardboard.UsedByNative +-keep class com.google.vr.cardboard.annotations.UsedByNative +-keep class com.google.vr.cardboard.annotations.UsedByReflection +-keep class com.google.vr.dynamite.client.ILoadedInstanceCreator { *; } +-keep class com.google.vr.dynamite.client.INativeLibraryLoader { *; } +-keep class com.google.vr.dynamite.client.IObjectWrapper { *; } +-keep class com.google.vr.dynamite.client.UsedByNative +-keep class com.google.vr.dynamite.client.UsedByReflection +-keep class org.chromium.android_webview.AwBrowserProcess { + java.nio.channels.FileLock sExclusiveFileLock; +} +-keep class org.chromium.android_webview.services.AwMinidumpUploadJobService { <init>(); } +-keep class org.chromium.android_webview.services.AwVariationsSeedFetcher { <init>(); } +-keep class org.chromium.android_webview.services.CrashReceiverService { <init>(); } +-keep class org.chromium.android_webview.services.VariationsSeedServer { <init>(); } +-keep class org.chromium.build.BuildHooksAndroidImpl +-keep class org.chromium.chrome.browser.BrowserRestartActivity { <init>(); } +-keep class org.chromium.chrome.browser.ChromeBackgroundService { <init>(); } +-keep class org.chromium.chrome.browser.ChromeTabbedActivity { <init>(); } +-keep class org.chromium.chrome.browser.ChromeTabbedActivity2 { <init>(); } +-keep class org.chromium.chrome.browser.LauncherShortcutActivity { <init>(); } +-keep class org.chromium.chrome.browser.MonochromeApplication { <init>(); } +-keep class org.chromium.chrome.browser.NoTouchActivity { <init>(); } +-keep class org.chromium.chrome.browser.appmenu.AppMenuIconRowFooter { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.appmenu.AppMenuItemIcon { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill.keyboard_accessory.AccessorySheetView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill.keyboard_accessory.KeyboardAccessoryModernView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill.keyboard_accessory.KeyboardAccessoryTabLayoutView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill.keyboard_accessory.KeyboardAccessoryView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill.keyboard_accessory.PasswordAccessoryInfoView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill_assistant.ui.PaymentRequestBottomBar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.autofill_assistant.ui.TouchEventFilter { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkActionBar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkActivity { <init>(); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkAddActivity { <init>(); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkAddEditFolderActivity { <init>(); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkEditActivity { <init>(); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkFolderRow { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkFolderSelectActivity { <init>(); } +-keep class org.chromium.chrome.browser.bookmarks.BookmarkItemRow { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.bookmarkswidget.BookmarkWidgetProxy { <init>(); } +-keep class org.chromium.chrome.browser.bookmarkswidget.BookmarkWidgetService { <init>(); } +-keep class org.chromium.chrome.browser.browseractions.BrowserActionActivity { <init>(); } +-keep class org.chromium.chrome.browser.browseractions.BrowserActionsService { <init>(); } +-keep class org.chromium.chrome.browser.browserservices.ClearDataDialogActivity { <init>(); } +-keep class org.chromium.chrome.browser.browserservices.ClearDataService { <init>(); } +-keep class org.chromium.chrome.browser.browserservices.ClientAppBroadcastReceiver { <init>(); } +-keep class org.chromium.chrome.browser.browserservices.ManageTrustedWebActivityDataActivity { <init>(); } +-keep class org.chromium.chrome.browser.compositor.CompositorViewHolder { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.contacts_picker.ContactView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.contacts_picker.ContactsPickerToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.contextmenu.TabularContextMenuViewPager { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.contextual_suggestions.ToolbarView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.coordinator.CoordinatorLayoutForPointer { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.crash.ChromeMinidumpUploadJobService { <init>(); } +-keep class org.chromium.chrome.browser.crash.MinidumpUploadService { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.CustomTabActivity { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.CustomTabsConnectionService { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.PaymentHandlerActivity { <init>(); } +-keep class org.chromium.chrome.browser.customtabs.SeparateTaskCustomTabActivity { <init>(); } +-keep class org.chromium.chrome.browser.document.ChromeLauncherActivity { <init>(); } +-keep class org.chromium.chrome.browser.document.DocumentActivity { <init>(); } +-keep class org.chromium.chrome.browser.document.IncognitoDocumentActivity { <init>(); } +-keep class org.chromium.chrome.browser.dom_distiller.DistilledPagePrefsView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.DownloadActivity { <init>(); } +-keep class org.chromium.chrome.browser.download.DownloadBroadcastManager { <init>(); } +-keep class org.chromium.chrome.browser.download.DownloadBroadcastReceiver { <init>(); } +-keep class org.chromium.chrome.browser.download.DownloadForegroundService { <init>(); } +-keep class org.chromium.chrome.browser.download.DownloadLocationCustomView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.home.list.view.AspectRatioFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.home.list.view.AsyncImageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.home.list.view.CircularProgressView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.home.list.view.ForegroundRoundedCornerImageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.home.toolbar.DownloadHomeToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.home.view.SelectionView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.ui.DownloadItemView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.ui.DownloadManagerToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.download.ui.OfflineGroupHeaderView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.explore_sites.ExperimentalExploreSitesCategoryTileView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.explore_sites.ExploreSitesCategoryCardView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.explore_sites.ExploreSitesCategoryTileView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.explore_sites.ExploreSitesTileView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.firstrun.FirstRunActivity { <init>(); } +-keep class org.chromium.chrome.browser.firstrun.FirstRunChooserView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.firstrun.FirstRunView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.firstrun.LightweightFirstRunActivity { <init>(); } +-keep class org.chromium.chrome.browser.firstrun.TabbedModeFirstRunActivity { <init>(); } +-keep class org.chromium.chrome.browser.history.HistoryActivity { <init>(); } +-keep class org.chromium.chrome.browser.history.HistoryItemView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.history.HistoryManagerToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.incognito.IncognitoDisclosureActivity { <init>(); } +-keep class org.chromium.chrome.browser.incognito.IncognitoNotificationService { <init>(); } +-keep class org.chromium.chrome.browser.infobar.InfoBarMessageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.infobar.TextViewEllipsizerSafe { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.infobar.translate.TranslateTabContent { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.infobar.translate.TranslateTabLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.instantapps.AuthenticatedProxyActivity { <init>(); } +-keep class org.chromium.chrome.browser.invalidation.ChromeBrowserSyncAdapterService { <init>(); } +-keep class org.chromium.chrome.browser.invalidation.ChromeInvalidationClientService { <init>(); } +-keep class org.chromium.chrome.browser.jsdialog.JavascriptDialogCustomView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.locale.LocaleChangedBroadcastReceiver { <init>(); } +-keep class org.chromium.chrome.browser.media.MediaCaptureNotificationService { <init>(); } +-keep class org.chromium.chrome.browser.media.MediaLauncherActivity { <init>(); } +-keep class org.chromium.chrome.browser.media.remote.ExpandedControllerActivity { <init>(); } +-keep class org.chromium.chrome.browser.media.remote.FullscreenMediaRouteButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.media.router.caf.remoting.CafExpandedControllerActivity { <init>(); } +-keep class org.chromium.chrome.browser.media.ui.MediaNotificationManager$CastListenerService { <init>(); } +-keep class org.chromium.chrome.browser.media.ui.MediaNotificationManager$CastMediaButtonReceiver { <init>(); } +-keep class org.chromium.chrome.browser.media.ui.MediaNotificationManager$PlaybackListenerService { <init>(); } +-keep class org.chromium.chrome.browser.media.ui.MediaNotificationManager$PlaybackMediaButtonReceiver { <init>(); } +-keep class org.chromium.chrome.browser.media.ui.MediaNotificationManager$PresentationListenerService { <init>(); } +-keep class org.chromium.chrome.browser.media.ui.MediaNotificationManager$PresentationMediaButtonReceiver { <init>(); } +-keep class org.chromium.chrome.browser.modaldialog.ModalDialogView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.multiwindow.MultiInstanceChromeTabbedActivity { <init>(); } +-keep class org.chromium.chrome.browser.notifications.NotificationIntentInterceptor$Receiver { <init>(); } +-keep class org.chromium.chrome.browser.notifications.NotificationJobService { <init>(); } +-keep class org.chromium.chrome.browser.notifications.NotificationService { <init>(); } +-keep class org.chromium.chrome.browser.notifications.NotificationService$Receiver { <init>(); } +-keep class org.chromium.chrome.browser.ntp.ContentSuggestionsNotifier$DeleteReceiver { <init>(); } +-keep class org.chromium.chrome.browser.ntp.ContentSuggestionsNotifier$OpenUrlReceiver { <init>(); } +-keep class org.chromium.chrome.browser.ntp.ContentSuggestionsNotifier$TimeoutReceiver { <init>(); } +-keep class org.chromium.chrome.browser.ntp.IncognitoNewTabPageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.IncognitoNewTabPageViewMD { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.LogoView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.NativePageRootFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.NewTabPageLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.NewTabPageLayout$SearchBoxContainerView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.NewTabPageScrollView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.NewTabPageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.RecentTabsExpandableListView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.RecentTabsGroupView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.cards.ProgressIndicatorView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.ntp.snippets.SectionHeaderView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.offlinepages.AutoFetchNotifier$ClickReceiver { <init>(); } +-keep class org.chromium.chrome.browser.offlinepages.prefetch.PrefetchedPagesNotifier$ClickReceiver { <init>(); } +-keep class org.chromium.chrome.browser.offlinepages.prefetch.PrefetchedPagesNotifier$SettingsReceiver { <init>(); } +-keep class org.chromium.chrome.browser.omaha.OmahaClient { <init>(); } +-keep class org.chromium.chrome.browser.omnibox.LocationBarPhone { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.omnibox.LocationBarTablet { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.omnibox.UrlBar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.omnibox.status.StatusView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.page_info.PageInfoView$ElidedUrlTextView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.password_manager.PasswordGenerationDialogCustomView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.payments.ui.PaymentRequestBottomBar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.payments.ui.PaymentRequestHeader { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.payments.ui.PaymentRequestUiErrorView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.photo_picker.DecoderService { <init>(); } +-keep class org.chromium.chrome.browser.photo_picker.PhotoPickerToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.photo_picker.PickerBitmapView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.preferences.AboutChromePreferenceOSVersion { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ButtonPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ChromeBaseListPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ChromeBasePreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ChromeSwitchPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ClearBrowsingDataCheckBoxPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.ExpandablePreferenceGroup { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.HyperlinkPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.LearnMorePreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.Preferences { <init>(); } +-keep class org.chromium.chrome.browser.preferences.SeekBarLinkedCheckBoxPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.SignInPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.SigninExpandablePreferenceGroup { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.SpinnerPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.SyncErrorCardPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.SyncPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.SyncedAccountPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.TextAndButtonPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.TextMessagePreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.TextScalePreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.datareduction.DataReductionMainMenuItem { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.preferences.datareduction.DataReductionSiteBreakdownView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.preferences.datareduction.DataReductionStatsPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.download.DownloadLocationPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.languages.LanguageListPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.website.ClearWebsiteStorage { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.website.ManageSpaceActivity { <init>(); } +-keep class org.chromium.chrome.browser.preferences.website.SiteSettingsPreference { <init>(...); } +-keep class org.chromium.chrome.browser.preferences.website.TriStateSiteSettingsPreference { <init>(...); } +-keep class org.chromium.chrome.browser.prerender.ChromePrerenderService { <init>(); } +-keep class org.chromium.chrome.browser.printing.PrintShareActivity { <init>(); } +-keep class org.chromium.chrome.browser.provider.ChromeBrowserProvider { <init>(); } +-keep class org.chromium.chrome.browser.searchwidget.SearchActivity { <init>(); } +-keep class org.chromium.chrome.browser.searchwidget.SearchActivityLocationBarLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.searchwidget.SearchWidgetProvider { <init>(); } +-keep class org.chromium.chrome.browser.send_tab_to_self.SendTabToSelfShareActivity { <init>(); } +-keep class org.chromium.chrome.browser.services.AccountsChangedReceiver { <init>(); } +-keep class org.chromium.chrome.browser.services.gcm.ChromeGcmListenerService { <init>(); } +-keep class org.chromium.chrome.browser.services.gcm.InvalidationGcmUpstreamSender { <init>(); } +-keep class org.chromium.chrome.browser.signin.AccountSigninActivity { <init>(); } +-keep class org.chromium.chrome.browser.signin.AccountSigninChooseView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.signin.AccountSigninConfirmationView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.signin.AccountSigninView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.signin.PersonalizedSigninPromoView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.signin.SigninActivity { <init>(); } +-keep class org.chromium.chrome.browser.signin.SigninScrollView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.signin.SigninView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.signin.SyncPromoView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.snackbar.BottomContainer { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.snackbar.TemplatePreservingTextView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.suggestions.SuggestionsRecyclerView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.suggestions.SuggestionsTileView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.suggestions.TileGridLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.sync.ui.PassphraseActivity { <init>(); } +-keep class org.chromium.chrome.browser.tab.SadTabView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.HomeButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.IncognitoToggleTabLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.MenuButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.NewTabButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.TabSwitcherButtonView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.bottom.BottomToolbarNewTabButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.bottom.CloseAllTabsButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.bottom.ScrollingBottomViewResourceFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.bottom.SearchAccelerator { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.bottom.ShareButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.CustomTabToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.CustomTabToolbar$InterceptTouchLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.TabSwitcherModeTTPhone { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.ToggleTabStackButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.ToolbarControlContainer { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.ToolbarControlContainer$ToolbarViewResourceFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.ToolbarPhone { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.toolbar.top.ToolbarTablet { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.tracing.TracingNotificationService { <init>(); } +-keep class org.chromium.chrome.browser.upgrade.PackageReplacedBroadcastReceiver { <init>(); } +-keep class org.chromium.chrome.browser.upgrade.UpgradeActivity { <init>(); } +-keep class org.chromium.chrome.browser.upgrade.UpgradeIntentService { <init>(); } +-keep class org.chromium.chrome.browser.util.ChromeFileProvider { <init>(); } +-keep class org.chromium.chrome.browser.vr.VrCancelAnimationActivity { <init>(); } +-keep class org.chromium.chrome.browser.vr.VrFirstRunActivity { <init>(); } +-keep class org.chromium.chrome.browser.webapps.SameTaskWebApkActivity { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity0 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity1 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity2 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity3 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity4 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity5 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity6 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity7 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity8 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebApkActivity9 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity0 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity1 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity2 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity3 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity4 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity5 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity6 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity7 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity8 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappActivity9 { <init>(); } +-keep class org.chromium.chrome.browser.webapps.WebappLauncherActivity { <init>(); } +-keep class org.chromium.chrome.browser.widget.AlertDialogEditText { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.BoundedLinearLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.CompatibilityTextInputLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.DualControlLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.EmptyAlertEditText { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.FadingEdgeScrollView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.FadingShadowView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.ListMenuButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.LoadingView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.MaterialProgressBar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.NumberRollView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.PromoDialogLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.RadioButtonLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.RadioButtonWithDescription { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.accessibility.AccessibilityTabModelListItem { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.accessibility.AccessibilityTabModelListView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.accessibility.AccessibilityTabModelWrapper { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.bottomsheet.BottomSheet { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.bottomsheet.TouchRestrictingFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.emptybackground.EmptyBackgroundViewTablet { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.findinpage.FindToolbar$FindQuery { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.findinpage.FindToolbarPhone { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.findinpage.FindToolbarTablet { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.incognitotoggle.IncognitoToggleButtonTablet { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.prefeditor.EditorDialogToolbar { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.prefeditor.ExpandableGridView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.chrome.browser.widget.selection.SelectableListLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.components.background_task_scheduler.BackgroundTaskGcmTaskService { <init>(); } +-keep class org.chromium.components.background_task_scheduler.BackgroundTaskJobService { <init>(); } +-keep class org.chromium.components.embedder_support.delegate.ColorPickerAdvanced { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.components.embedder_support.delegate.ColorPickerMoreButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.components.embedder_support.delegate.ColorPickerSimple { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.content.app.PrivilegedProcessService { + public <init>(); +} +-keep class org.chromium.content.app.PrivilegedProcessService0 { <init>(); } +-keep class org.chromium.content.app.PrivilegedProcessService1 { <init>(); } +-keep class org.chromium.content.app.PrivilegedProcessService2 { <init>(); } +-keep class org.chromium.content.app.PrivilegedProcessService3 { <init>(); } +-keep class org.chromium.content.app.PrivilegedProcessService4 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService { + public <init>(); +} +-keep class org.chromium.content.app.SandboxedProcessService0 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService1 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService10 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService11 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService12 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService13 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService14 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService15 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService16 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService17 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService18 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService19 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService2 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService20 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService21 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService22 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService23 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService24 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService25 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService26 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService27 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService28 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService29 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService3 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService30 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService31 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService32 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService33 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService34 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService35 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService36 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService37 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService38 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService39 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService4 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService5 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService6 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService7 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService8 { <init>(); } +-keep class org.chromium.content.app.SandboxedProcessService9 { <init>(); } +-keep class org.chromium.third_party.android.datausagechart.ChartDataUsageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.third_party.android.datausagechart.ChartNetworkSeriesView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.third_party.android.media.MediaController { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.AsyncViewStub { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.ButtonCompat { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.CheckableImageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.ChipView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.ChromeImageButton { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.ChromeImageView { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.OptimizedFrameLayout { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.TextViewWithClickableSpans { <init>(android.content.Context, android.util.AttributeSet); } +-keep class org.chromium.ui.widget.TextViewWithLeading { <init>(android.content.Context, android.util.AttributeSet); } +-keep public class * extends android.support.design.widget.CoordinatorLayout$Behavior { + public <init>(android.content.Context, android.util.AttributeSet); + public <init>(); +} +-keep public class * extends android.support.v7.widget.RecyclerView$LayoutManager { + public <init>(...); +} +-keep public class * implements com.google.android.gms.cast.framework.OptionsProvider +-keep public class android.support.transition.FragmentTransitionSupport { +} +-keep public class com.google.ar.core.** {*;} +-keep public class org.chromium.chrome.browser.** extends android.app.Fragment { + public <init>(); +} +-keep public class org.chromium.support_lib_boundary.* { public *; } +-keepattributes *Annotation* +-keepattributes *Annotation* +-keepattributes *Annotation* +-keepattributes AnnotationDefault +-keepattributes RuntimeVisible*Annotations +-keepattributes SourceFile,LineNumberTable +-keepclasseswithmembernames,allowoptimization class com.google.common.logging.nano.Vr$VREvent$SdkConfigurationParams** { + *; +} +-keepclasseswithmembernames,includedescriptorclasses class com.google.ar.** { + native <methods>; +} +-keepclasseswithmembernames,includedescriptorclasses class com.google.vr.** { + native <methods>; +} +-keepclasseswithmembers class * { + @android.support.annotation.Keep <fields>; +} +-keepclasseswithmembers class * { + @android.support.annotation.Keep <methods>; +} +-keepclasseswithmembers class * { + @org.chromium.base.annotations.AccessedByNative <fields>; +} +-keepclasseswithmembers class * { + @org.chromium.base.annotations.UsedByReflection <fields>; +} +-keepclasseswithmembers class * { + @org.chromium.base.annotations.UsedByReflection <methods>; +} +-keepclasseswithmembers,includedescriptorclasses class * { + @org.chromium.base.annotations.CalledByNative <methods>; +} +-keepclasseswithmembers,includedescriptorclasses class * { + @org.chromium.base.annotations.CalledByNativeUnchecked <methods>; +} +-keepclasseswithmembers,includedescriptorclasses class * { + native <methods>; +} +-keepclassmembernames class * { + @com.google.android.gms.common.annotation.KeepName *; +} +-keepclassmembernames,allowobfuscation class * { + @org.chromium.base.annotations.DoNotInline <methods>; +} +-keepclassmembers class * extends com.google.android.gms.internal.clearcut.zzcg { + <fields>; +} +-keepclassmembers class * implements android.os.Parcelable { + public static *** CREATOR; +} +-keepclassmembers class * implements android.os.Parcelable { + public static final *** CREATOR; +} +-keepclassmembers class * { + @com.google.ar.core.annotations.UsedByNative *; +} +-keepclassmembers class * { + @com.google.ar.core.annotations.UsedByReflection *; +} +-keepclassmembers class * { + @com.google.vr.cardboard.UsedByNative *; +} +-keepclassmembers class * { + @com.google.vr.cardboard.annotations.UsedByNative *; +} +-keepclassmembers class * { + @com.google.vr.cardboard.annotations.UsedByReflection *; +} +-keepclassmembers class * { + @com.google.vr.dynamite.client.UsedByNative *; +} +-keepclassmembers class * { + @com.google.vr.dynamite.client.UsedByReflection *; +} +-keepclassmembers class ** { + @android.arch.lifecycle.OnLifecycleEvent *; +} +-keepclassmembers class android.support.design.internal.BottomNavigationMenuView { + boolean mShiftingMode; +} +-keepclassmembers class android.support.graphics.drawable.VectorDrawableCompat$* { + void set*(***); + *** get*(); +} +-keepclassmembers class android.support.transition.ChangeBounds$* extends android.animation.AnimatorListenerAdapter { + android.support.transition.ChangeBounds$ViewBounds mViewBounds; +} +-keepclassmembers class com.google.android.gms.common.api.internal.BasePendingResult { + com.google.android.gms.common.api.internal.BasePendingResult$ReleasableResultGuardian mResultGuardian; +} +-keepclassmembers class com.google.android.gms.gcm.GcmListenerService { + public void handleIntent(android.content.Intent); +} +-keepclassmembers class org.chromium.** implements android.os.Parcelable { + public static *** CREATOR; +} +-keepclassmembers class org.chromium.android_webview.AwPdfExporter { + android.view.ViewGroup mContainerView; +} +-keepclassmembers enum * { + public static **[] values(); +} +-keepclassmembers enum android.arch.lifecycle.Lifecycle$Event { + <fields>; +} +-keepclassmembers enum org.chromium.** { + public static **[] values(); +} +-keepclassmembers public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { + public static final *** NULL; +} +-keepnames @com.google.android.gms.common.annotation.KeepName class * +-keepnames class * implements android.os.Parcelable +-keepnames class * implements com.google.android.gms.common.internal.ReflectedParcelable +-keepnames class * implements org.chromium.components.background_task_scheduler.BackgroundTask { + public <init>(); +} +-keepnames class com.google.vr.ndk.** { *; } +-keepnames class com.google.vr.sdk.** { *; } +-keepnames class org.chromium.** implements android.os.Parcelable +-keepnames,allowobfuscation @org.chromium.base.annotations.DoNotInline class * { + *; +} +-keepparameternames +-optimizationpasses 3 +-optimizations !class/merging/horizontal +-renamesourcefileattribute PG +-repackageclasses '' \ No newline at end of file
diff --git a/chrome/android/java/res/layout/edit_url_suggestion_layout.xml b/chrome/android/java/res/layout/edit_url_suggestion_layout.xml new file mode 100644 index 0000000..463aeac --- /dev/null +++ b/chrome/android/java/res/layout/edit_url_suggestion_layout.xml
@@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright 2018 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. --> + +<RelativeLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/suggestions_url_view" + android:minHeight="@dimen/omnibox_suggestion_edit_url_min_height" + android:layout_width="match_parent" + android:layout_height="wrap_content" > + + <LinearLayout + android:id="@+id/edit_url_suggestion_icons" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:layout_centerVertical="true" + android:orientation="horizontal" + android:layout_marginEnd="@dimen/omnibox_suggestion_refine_view_modern_end_padding"> + + <org.chromium.ui.widget.ChromeImageButton + android:id="@+id/url_copy_icon" + style="@style/OmniboxSuggestionIconButton" + android:src="@drawable/ic_content_copy_black" + android:contentDescription="@string/copy_link" + android:visibility="gone" /> + + <org.chromium.ui.widget.ChromeImageButton + android:id="@+id/url_share_icon" + style="@style/OmniboxSuggestionIconButton" + android:src="@drawable/ic_share_white_24dp" + android:contentDescription="@string/menu_share_page" + android:visibility="gone" /> + + <org.chromium.ui.widget.ChromeImageButton + android:id="@+id/url_edit_icon" + style="@style/OmniboxSuggestionIconButton" + android:src="@drawable/bookmark_edit_active" + android:contentDescription="@string/bookmark_item_edit" /> + + </LinearLayout> + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentStart="true" + android:layout_centerVertical="true" + android:layout_toStartOf="@id/edit_url_suggestion_icons" + android:orientation="vertical" + android:layout_marginStart="@dimen/omnibox_suggestion_start_offset"> + + <TextView + android:id="@+id/title_text_view" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:ellipsize="end" + android:textAppearance="@style/TextAppearance.BlackTitle1" + android:singleLine="true" /> + + <TextView + android:id="@+id/full_url_text_view" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:ellipsize="end" + android:textAppearance="@style/TextAppearance.OmniboxSuggestionSecondLine" + android:singleLine="true" /> + + </LinearLayout> + + <View + android:layout_alignParentBottom="true" + android:importantForAccessibility="no" + style="@style/HorizontalDivider" /> + +</RelativeLayout>
diff --git a/chrome/android/java/res/values-v17/styles.xml b/chrome/android/java/res/values-v17/styles.xml index 24cc8c9..de0b48f 100644 --- a/chrome/android/java/res/values-v17/styles.xml +++ b/chrome/android/java/res/values-v17/styles.xml
@@ -18,7 +18,7 @@ <style name="LauncherTheme" parent="@android:style/Theme.NoDisplay" /> - <style name="MainThemeBase" parent="Theme.AppCompat.Light.NoActionBar"> + <style name="MainThemeBase" parent="Theme.AppCompat.DayNight.NoActionBar"> <item name="android:windowContentOverlay">@null</item> <item name="android:textColorHighlight">@color/text_highlight_color</item> <item name="android:textColorLink">@color/default_text_color_link</item> @@ -102,9 +102,6 @@ <style name="WebappTheme" parent="MainThemeBase"> <item name="android:windowBackground">@null</item> <item name="android:windowDisablePreview">true</item> - <!-- Translucency is necessary for a jank-free transition when launching both - WebApkActivity and a splash screen activity with Intent.FLAG_ACTIVITY_NO_ANIMATION. --> - <item name="android:windowIsTranslucent">true</item> </style> <style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> @@ -824,6 +821,20 @@ <item name="android:textSize">@dimen/location_bar_url_text_size</item> </style> + <!-- Omnibox suggestions --> + <!-- TODO(mdjones): Use unified styles for omnibox suggestions: crbug.com/915785 --> + <style name="TextAppearance.OmniboxSuggestionSecondLine"> + <item name="android:textSize">@dimen/omnibox_suggestion_second_line_text_size</item> + <item name="android:textColor">@color/suggestion_url_dark_modern</item> + </style> + + <style name="OmniboxSuggestionIconButton"> + <item name="android:background">@null</item> + <item name="android:layout_width">@dimen/min_touch_target_size</item> + <item name="android:layout_height">@dimen/min_touch_target_size</item> + <item name="tint">@color/default_icon_color_blue</item> + </style> + <!-- Trusted Web Activities --> <style name="ClearDataDialogActivityTheme" parent="FullscreenTransparentActivityTheme"> <item name="android:windowBackground">@android:color/transparent</item>
diff --git a/chrome/android/java/res/values/dimens.xml b/chrome/android/java/res/values/dimens.xml index 4361147..00a89be 100644 --- a/chrome/android/java/res/values/dimens.xml +++ b/chrome/android/java/res/values/dimens.xml
@@ -295,6 +295,7 @@ <dimen name="omnibox_suggestion_first_line_text_size">16sp</dimen> <dimen name="omnibox_suggestion_second_line_text_size">14sp</dimen> <dimen name="omnibox_suggestion_answer_line2_vertical_spacing">3dp</dimen> + <dimen name="omnibox_suggestion_edit_url_min_height">60dp</dimen> <!-- omnibox_suggestion_answer_line2_vertical_spacing + 2dp --> <dimen name="omnibox_suggestion_answer_image_vertical_spacing">5dp</dimen> <dimen name="omnibox_suggestion_answer_image_horizontal_spacing">4dp</dimen>
diff --git a/chrome/android/java/res_night/values-night/colors.xml b/chrome/android/java/res_night/values-night/colors.xml new file mode 100644 index 0000000..24962ae0 --- /dev/null +++ b/chrome/android/java/res_night/values-night/colors.xml
@@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- 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. --> + +<resources> + <!-- TODO(huayinz): Change the colors. --> + <color name="modern_primary_color">#610000FF</color> +</resources> \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java index 7e13419..706a37c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java
@@ -10,6 +10,7 @@ import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatDelegate; import org.chromium.base.ActivityState; import org.chromium.base.ApplicationState; @@ -40,6 +41,7 @@ import org.chromium.chrome.browser.init.InvalidStartupDialog; import org.chromium.chrome.browser.metrics.UmaUtils; import org.chromium.chrome.browser.preferences.ChromePreferenceManager; +import org.chromium.chrome.browser.util.FeatureUtilities; import org.chromium.chrome.browser.vr.OnExitVrRequestListener; import org.chromium.chrome.browser.vr.VrModuleProvider; import org.chromium.components.module_installer.ModuleInstaller; @@ -57,11 +59,17 @@ @Nullable private static ChromeAppComponent sComponent; + @Override + public void onCreate() { + super.onCreate(); + if (isBrowserProcess()) initDefaultNightMode(); + } + // Called by the framework for ALL processes. Runs before ContentProviders are created. // Quirk: context.getApplicationContext() returns null during this method. @Override protected void attachBaseContext(Context context) { - boolean isBrowserProcess = !ContextUtils.getProcessName().contains(":"); + boolean isBrowserProcess = isBrowserProcess(); if (isBrowserProcess) UmaUtils.recordMainEntryPointTime(); super.attachBaseContext(context); ContextUtils.initApplicationContext(this); @@ -121,6 +129,10 @@ AsyncTask.takeOverAndroidThreadPool(); } + private static boolean isBrowserProcess() { + return !ContextUtils.getProcessName().contains(":"); + } + private static Boolean shouldUseDebugFlags() { return ChromePreferenceManager.getInstance().readBoolean( ChromePreferenceManager.COMMAND_LINE_ON_NON_ROOTED_ENABLED_KEY, false); @@ -215,6 +227,16 @@ }); } + private void initDefaultNightMode() { + if (FeatureUtilities.isNightModeAvailable()) { + // TODO(huayinz): Initialize default night mode based on settings. + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); + } else { + // Force not to use night mode. + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); + } + } + /** Returns the application-scoped component. */ public static ChromeAppComponent getComponent() { if (sComponent == null) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java index 75ce5f9..a74c6fb 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
@@ -154,6 +154,7 @@ public static final String AUTOFILL_ALLOW_NON_HTTP_ACTIVATION = "AutofillAllowNonHttpActivation"; public static final String ADJUST_WEBAPK_INSTALLATION_SPACE = "AdjustWebApkInstallationSpace"; + public static final String ANDROID_NIGHT_MODE = "AndroidNightMode"; public static final String ANDROID_PAY_INTEGRATION_V1 = "AndroidPayIntegrationV1"; public static final String ANDROID_PAY_INTEGRATION_V2 = "AndroidPayIntegrationV2"; public static final String ANDROID_PAYMENT_APPS = "AndroidPaymentApps";
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/TabularContextMenuUi.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/TabularContextMenuUi.java index 6cdb806..922bd17 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/TabularContextMenuUi.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/TabularContextMenuUi.java
@@ -5,9 +5,6 @@ package org.chromium.chrome.browser.contextmenu; import android.app.Activity; -import android.content.ClipData; -import android.content.ClipboardManager; -import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Canvas; @@ -33,7 +30,7 @@ import org.chromium.base.VisibleForTesting; import org.chromium.chrome.R; import org.chromium.chrome.browser.widget.ContextMenuDialog; -import org.chromium.ui.widget.Toast; +import org.chromium.ui.base.Clipboard; import java.util.ArrayList; import java.util.List; @@ -207,11 +204,7 @@ }); if (TextUtils.isEmpty(params.getUnfilteredLinkUrl())) return; headerTextView.setOnLongClickListener(view -> { - ClipboardManager clipboard = (ClipboardManager) view.getContext().getSystemService( - Context.CLIPBOARD_SERVICE); - ClipData clip = ClipData.newPlainText("url", params.getUnfilteredLinkUrl()); - clipboard.setPrimaryClip(clip); - Toast.makeText(view.getContext(), R.string.url_copied, Toast.LENGTH_SHORT).show(); + Clipboard.getInstance().copyUrlToClipboard(params.getUnfilteredLinkUrl()); return true; }); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java index dbb9b4e..e1a75fa 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
@@ -131,6 +131,11 @@ public static final String EXTRA_SEND_TO_EXTERNAL_DEFAULT_HANDLER = "android.support.customtabs.extra.SEND_TO_EXTERNAL_HANDLER"; + /** Key for the intent extra used to define an array list of module managed hosts. */ + @VisibleForTesting + public static final String EXTRA_MODULE_MANAGED_HOST_LIST = + "org.chromium.chrome.browser.customtabs.EXTRA_MODULE_MANAGED_HOST_LIST"; + /** Extra that defines the module managed URLs regex. */ @VisibleForTesting public static final String EXTRA_MODULE_MANAGED_URLS_REGEX = @@ -175,6 +180,8 @@ @Nullable private final ComponentName mModuleComponentName; @Nullable + private final List<String> mModuleManagedHosts; + @Nullable private final Pattern mModuleManagedUrlsPattern; private final boolean mHideCctHeaderOnModuleManagedUrls; private final boolean mIsIncognito; @@ -304,6 +311,8 @@ String moduleClassName = IntentUtils.safeGetStringExtra(intent, EXTRA_MODULE_CLASS_NAME); if (modulePackageName != null && moduleClassName != null) { mModuleComponentName = new ComponentName(modulePackageName, moduleClassName); + mModuleManagedHosts = + IntentUtils.safeGetStringArrayListExtra(intent, EXTRA_MODULE_MANAGED_HOST_LIST); String moduleManagedUrlsRegex = IntentUtils.safeGetStringExtra(intent, EXTRA_MODULE_MANAGED_URLS_REGEX); mModuleManagedUrlsPattern = (moduleManagedUrlsRegex != null) @@ -313,6 +322,7 @@ intent, EXTRA_HIDE_CCT_HEADER_ON_MODULE_MANAGED_URLS, false); } else { mModuleComponentName = null; + mModuleManagedHosts = null; mModuleManagedUrlsPattern = null; mHideCctHeaderOnModuleManagedUrls = false; } @@ -831,6 +841,15 @@ } /** + * See {@link #EXTRA_MODULE_MANAGED_HOST_LIST}. + * @return The list of module managed hosts, or null if not specified. + */ + @Nullable + public List<String> getExtraModuleManagedHosts() { + return mModuleManagedHosts; + } + + /** * @return the Intent this instance was created with. */ public Intent getIntent() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleCoordinator.java index b5d3442..2922e68 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/dynamicmodule/DynamicModuleCoordinator.java
@@ -44,6 +44,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.util.List; import java.util.regex.Pattern; import javax.inject.Inject; @@ -91,15 +92,6 @@ private int mDefaultTopControlContainerHeight; private boolean mHasSetOverlayView; - // Whether isModuleManagedUrl(url) must check the URL's port number or not. - // This makes it easier to run tests with the EmbeddedTestServer. - private static boolean sCheckPortNumber = true; - - @VisibleForTesting - public static void setCheckPortNumber(boolean checkPortNumber) { - sCheckPortNumber = checkPortNumber; - } - private final EmptyTabObserver mHeaderVisibilityObserver = new EmptyTabObserver() { @Override public void onDidFinishNavigation(Tab tab, String url, boolean isInMainFrame, @@ -331,15 +323,10 @@ if (!ChromeFeatureList.isEnabled(ChromeFeatureList.CCT_MODULE)) { return false; } - if (TextUtils.isEmpty(url)) { - return false; - } + List<String> moduleManagedHosts = mIntentDataProvider.getExtraModuleManagedHosts(); Pattern urlsPattern = mIntentDataProvider.getExtraModuleManagedUrlsPattern(); - if (urlsPattern == null) { - return false; - } - String pathAndQuery = url.substring(UrlUtilities.stripPath(url).length()); - if (!urlsPattern.matcher(pathAndQuery).matches()) { + if (TextUtils.isEmpty(url) || moduleManagedHosts == null || moduleManagedHosts.isEmpty() + || urlsPattern == null) { return false; } Uri parsed = Uri.parse(url); @@ -347,10 +334,17 @@ if (!UrlConstants.HTTPS_SCHEME.equals(scheme)) { return false; } - if (!UrlUtilities.nativeIsGoogleDomainUrl(url, sCheckPortNumber)) { + String host = parsed.getHost(); + if (host == null) { return false; } - return true; + String pathAndQuery = url.substring(UrlUtilities.stripPath(url).length()); + for (String moduleManagedHost : moduleManagedHosts) { + if (host.equals(moduleManagedHost) && urlsPattern.matcher(pathAndQuery).matches()) { + return true; + } + } + return false; } public void setTopBarHeight(int height) { @@ -399,4 +393,4 @@ mActivity.getActivityTab().removeObserver(observer); mTabObserverRegistrar.unregisterTabObserver(observer); } -} +} \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java index 5bae736..dbe45ff 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
@@ -356,6 +356,11 @@ } @Override + public void clearOmniboxFocus() { + setUrlBarFocus(false); + } + + @Override public void selectAll() { mUrlCoordinator.selectAll(); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java index d20c155..ec1d20ac 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/AutocompleteCoordinator.java
@@ -26,6 +26,7 @@ import org.chromium.chrome.browser.omnibox.suggestions.AutocompleteController.OnSuggestionsReceivedListener; import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestionsList.OmniboxSuggestionListEmbedder; import org.chromium.chrome.browser.omnibox.suggestions.SuggestionListViewBinder.SuggestionListViewHolder; +import org.chromium.chrome.browser.omnibox.suggestions.editurl.EditUrlSuggestionCoordinator; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.toolbar.ToolbarDataProvider; import org.chromium.chrome.browser.util.KeyNavigationUtil; @@ -49,7 +50,7 @@ /** * Provides the additional functionality to trigger and interact with autocomplete suggestions. */ - public interface AutocompleteDelegate { + public interface AutocompleteDelegate extends EditUrlSuggestionCoordinator.LocationBarDelegate { /** * Notified that the URL text has changed. */ @@ -82,11 +83,6 @@ void loadUrl(String url, @PageTransition int transition, long inputStart); /** - * Requests that the specified text be set as the current editing text in the omnibox. - */ - void setOmniboxEditingText(String text); - - /** * @return Whether the omnibox was focused via the NTP fakebox. */ boolean didFocusUrlFromFakebox();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionUiType.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionUiType.java index 22f8ff1..dd17f5d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionUiType.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/OmniboxSuggestionUiType.java
@@ -10,8 +10,9 @@ import java.lang.annotation.RetentionPolicy; /** The different types of view that a suggestion can be. */ -@IntDef({OmniboxSuggestionUiType.DEFAULT}) +@IntDef({OmniboxSuggestionUiType.DEFAULT, OmniboxSuggestionUiType.EDIT_URL_SUGGESTION}) @Retention(RetentionPolicy.SOURCE) @interface OmniboxSuggestionUiType { int DEFAULT = 0; + int EDIT_URL_SUGGESTION = 1; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionCoordinator.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionCoordinator.java new file mode 100644 index 0000000..80066a00 --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionCoordinator.java
@@ -0,0 +1,217 @@ +// Copyright 2018 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.chrome.browser.omnibox.suggestions.editurl; + +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; + +import org.chromium.chrome.R; +import org.chromium.chrome.browser.ActivityTabProvider; +import org.chromium.chrome.browser.ChromeFeatureList; +import org.chromium.chrome.browser.omnibox.OmniboxSuggestionType; +import org.chromium.chrome.browser.omnibox.suggestions.OmniboxSuggestion; +import org.chromium.chrome.browser.share.ShareMenuActionHandler; +import org.chromium.chrome.browser.tab.Tab; +import org.chromium.ui.base.Clipboard; +import org.chromium.ui.modelutil.PropertyModel; + +/** + * This class controls the interaction of the "edit url" suggestion item with the rest of the + * suggestions list. This class also serves as a mediator, containing logic that interacts with + * the rest of Chrome. + */ +public class EditUrlSuggestionCoordinator implements OnClickListener { + /** An interface for handling taps on the suggestion rather than its buttons. */ + public interface SuggestionSelectionHandler { + /** + * Handle the edit URL suggestion selection. + * @param suggestion The selected suggestion. + */ + void onEditUrlSuggestionSelected(OmniboxSuggestion suggestion); + } + + /** An interface for modifying the location bar and it's contents. */ + public interface LocationBarDelegate { + /** Remove focus from the omnibox. */ + void clearOmniboxFocus(); + + /** + * Set the text in the omnibox. + * @param text The text that should be displayed in the omnibox. + */ + void setOmniboxEditingText(String text); + } + + /** The name of the parameter for getting the experiment variation. */ + private static final String FIELD_TRIAL_PARAM_NAME = "variation"; + + /** The name of the experiment variation that shows the copy icon. */ + private static final String COPY_ICON_VARIATION_NAME = "copy_icon"; + + /** The suggestion's model. */ + private final PropertyModel mModel; + + /** The delegate for accessing the location bar for observation and modification. */ + private final LocationBarDelegate mLocationBarDelegate; + + /** A means of accessing the activity's tab. */ + private ActivityTabProvider mTabProvider; + + /** The suggestion view. */ + private ViewGroup mView; + + /** Whether the omnibox has already cleared its content for the focus event. */ + private boolean mHasClearedOmniboxForFocus; + + /** The last omnibox suggestion to be processed. */ + private OmniboxSuggestion mLastProcessedSuggestion; + + /** A handler for suggestion selection. */ + private SuggestionSelectionHandler mSelectionHandler; + + /** + * @param tabProvider A means of accessing the active tab. + * @param locationBarDelegate A means of modifying the location bar. + * @param selectionHandler A mechanism for handling selection of the edit URL suggestion item. + */ + public EditUrlSuggestionCoordinator(ActivityTabProvider tabProvider, + LocationBarDelegate locationBarDelegate, + SuggestionSelectionHandler selectionHandler) { + mTabProvider = tabProvider; + mLocationBarDelegate = locationBarDelegate; + mModel = new PropertyModel(EditUrlSuggestionProperties.ALL_KEYS); + mSelectionHandler = selectionHandler; + } + + /** + * Handle a specific omnibox suggestion type and determine whether a custom suggestion item + * should be shown. + * @param suggestion The omnibox suggestion being processed. + * @return Whether the suggestion item should be shown. + */ + public boolean maybeReplaceOmniboxSuggestion(OmniboxSuggestion suggestion) { + Tab activeTab = mTabProvider != null ? mTabProvider.getActivityTab() : null; + if (OmniboxSuggestionType.URL_WHAT_YOU_TYPED != suggestion.getType() || activeTab == null + || activeTab.isIncognito()) { + return false; + } + mLastProcessedSuggestion = suggestion; + if (!mHasClearedOmniboxForFocus) { + mHasClearedOmniboxForFocus = true; + mLocationBarDelegate.setOmniboxEditingText(""); + } + updateUrlDisplayInfo(); + return true; + } + + /** + * @param provider A means of getting the activity's tab. + */ + public void setActivityTabProvider(ActivityTabProvider provider) { + mTabProvider = provider; + } + + /** + * @return The view to insert into the list. + */ + public ViewGroup getView() { + return mView; + } + + /** + * @return The model for the view. + */ + public PropertyModel getModel() { + return mModel; + } + + /** + * Clean up any state that this coordinator has. + */ + public void destroy() { + mLastProcessedSuggestion = null; + mSelectionHandler = null; + } + + /** + * @return The experiment variation for the Search Ready Omnibox. + */ + private static String getSearchReadyOmniboxVariation() { + return ChromeFeatureList.getFieldTrialParamByFeature( + ChromeFeatureList.SEARCH_READY_OMNIBOX, FIELD_TRIAL_PARAM_NAME); + } + + /** + * A notification that the omnibox focus state has changed. + * @param hasFocus Whether the omnibox has focus. + */ + public void onUrlFocusChange(boolean hasFocus) { + if (!hasFocus) { + mHasClearedOmniboxForFocus = false; + mLastProcessedSuggestion = null; + mView = null; + return; + } + + // When the omnibox is focused, create a new version of the suggestion item. + LayoutInflater inflater = mTabProvider.getActivityTab().getActivity().getLayoutInflater(); + mView = (ViewGroup) inflater.inflate(R.layout.edit_url_suggestion_layout, null); + mModel.set(EditUrlSuggestionProperties.TEXT_CLICK_LISTENER, this); + + // Check which variation of the experiment is being run. + String variation = getSearchReadyOmniboxVariation(); + if (COPY_ICON_VARIATION_NAME.equals(variation)) { + mModel.set(EditUrlSuggestionProperties.COPY_ICON_VISIBLE, true); + mModel.set(EditUrlSuggestionProperties.SHARE_ICON_VISIBLE, false); + } else { + mModel.set(EditUrlSuggestionProperties.COPY_ICON_VISIBLE, false); + mModel.set(EditUrlSuggestionProperties.SHARE_ICON_VISIBLE, true); + } + mModel.set(EditUrlSuggestionProperties.BUTTON_CLICK_LISTENER, this); + } + + /** + * Update the URL info displayed in this view. + */ + private void updateUrlDisplayInfo() { + Tab tab = mTabProvider.getActivityTab(); + if (tab == null || mLastProcessedSuggestion == null) return; + + // Only update the title if the displayed URL matches the tab's URL. + if (TextUtils.equals(tab.getUrl(), mLastProcessedSuggestion.getUrl())) { + mModel.set(EditUrlSuggestionProperties.TITLE_TEXT, tab.getTitle()); + } else { + mModel.set(EditUrlSuggestionProperties.TITLE_TEXT, mLastProcessedSuggestion.getUrl()); + } + mModel.set(EditUrlSuggestionProperties.URL_TEXT, mLastProcessedSuggestion.getUrl()); + } + + @Override + public void onClick(View view) { + Tab activityTab = mTabProvider.getActivityTab(); + assert activityTab != null : "A tab is required to make changes to the location bar."; + + if (R.id.url_copy_icon == view.getId()) { + Clipboard.getInstance().copyUrlToClipboard(mLastProcessedSuggestion.getUrl()); + } else if (R.id.url_share_icon == view.getId()) { + mLocationBarDelegate.clearOmniboxFocus(); + // TODO(mdjones): This should only share the displayed URL instead of the background + // tab. + ShareMenuActionHandler.getInstance().onShareMenuItemSelected( + activityTab.getActivity(), activityTab, false, activityTab.isIncognito()); + } else if (R.id.url_edit_icon == view.getId()) { + mLocationBarDelegate.setOmniboxEditingText(mLastProcessedSuggestion.getUrl()); + } else { + // If the event wasn't on any of the buttons, treat is as a tap on the general + // suggestion. + if (mSelectionHandler != null) { + mSelectionHandler.onEditUrlSuggestionSelected(mLastProcessedSuggestion); + } + } + } +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionProperties.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionProperties.java new file mode 100644 index 0000000..89e9ecd --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionProperties.java
@@ -0,0 +1,41 @@ +// Copyright 2018 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.chrome.browser.omnibox.suggestions.editurl; + +import android.view.View; + +import org.chromium.ui.modelutil.PropertyKey; +import org.chromium.ui.modelutil.PropertyModel.WritableBooleanPropertyKey; +import org.chromium.ui.modelutil.PropertyModel.WritableObjectPropertyKey; + +/** The properties for the "edit URL" suggestion in the omnibox suggestions. */ +class EditUrlSuggestionProperties { + /** A key determining the visibility of the copy icon in the suggestion view. */ + public static final WritableBooleanPropertyKey COPY_ICON_VISIBLE = + new WritableBooleanPropertyKey(); + + /** A key determining the visibility of the share icon in the suggestion view. */ + public static final WritableBooleanPropertyKey SHARE_ICON_VISIBLE = + new WritableBooleanPropertyKey(); + + /** The key for the title displayed by the suggestion item. */ + public static final WritableObjectPropertyKey<String> TITLE_TEXT = + new WritableObjectPropertyKey<>(); + + /** The key for the URL displayed for the suggestion item. */ + public static final WritableObjectPropertyKey<String> URL_TEXT = + new WritableObjectPropertyKey<>(); + + /** The key for the click listener that all of the buttons use. */ + public static final WritableObjectPropertyKey<View.OnClickListener> BUTTON_CLICK_LISTENER = + new WritableObjectPropertyKey<>(); + + /** The key for the click listener that the text of the suggestion uses. */ + public static final WritableObjectPropertyKey<View.OnClickListener> TEXT_CLICK_LISTENER = + new WritableObjectPropertyKey<>(); + + public static final PropertyKey[] ALL_KEYS = new PropertyKey[] {COPY_ICON_VISIBLE, + SHARE_ICON_VISIBLE, TITLE_TEXT, URL_TEXT, BUTTON_CLICK_LISTENER, TEXT_CLICK_LISTENER}; +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionViewBinder.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionViewBinder.java new file mode 100644 index 0000000..6ef542a --- /dev/null +++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionViewBinder.java
@@ -0,0 +1,50 @@ +// Copyright 2018 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.chrome.browser.omnibox.suggestions.editurl; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import org.chromium.chrome.R; +import org.chromium.ui.modelutil.PropertyKey; +import org.chromium.ui.modelutil.PropertyModel; + +/** A mechanism for binding the {@link EditUrlSuggestionProperties} to its view. */ +public class EditUrlSuggestionViewBinder { + public static void bind(PropertyModel model, ViewGroup view, PropertyKey propertyKey) { + if (EditUrlSuggestionProperties.COPY_ICON_VISIBLE == propertyKey) { + view.findViewById(R.id.url_copy_icon) + .setVisibility(model.get(EditUrlSuggestionProperties.COPY_ICON_VISIBLE) + ? View.VISIBLE + : View.GONE); + } else if (EditUrlSuggestionProperties.SHARE_ICON_VISIBLE == propertyKey) { + view.findViewById(R.id.url_share_icon) + .setVisibility(model.get(EditUrlSuggestionProperties.SHARE_ICON_VISIBLE) + ? View.VISIBLE + : View.GONE); + } else if (EditUrlSuggestionProperties.TITLE_TEXT == propertyKey) { + TextView titleView = view.findViewById(R.id.title_text_view); + titleView.setText(model.get(EditUrlSuggestionProperties.TITLE_TEXT)); + } else if (EditUrlSuggestionProperties.URL_TEXT == propertyKey) { + TextView urlView = view.findViewById(R.id.full_url_text_view); + urlView.setText(model.get(EditUrlSuggestionProperties.URL_TEXT)); + } else if (EditUrlSuggestionProperties.BUTTON_CLICK_LISTENER == propertyKey) { + view.findViewById(R.id.url_edit_icon) + .setOnClickListener( + model.get(EditUrlSuggestionProperties.BUTTON_CLICK_LISTENER)); + view.findViewById(R.id.url_copy_icon) + .setOnClickListener( + model.get(EditUrlSuggestionProperties.BUTTON_CLICK_LISTENER)); + view.findViewById(R.id.url_share_icon) + .setOnClickListener( + model.get(EditUrlSuggestionProperties.BUTTON_CLICK_LISTENER)); + } else if (EditUrlSuggestionProperties.TEXT_CLICK_LISTENER == propertyKey) { + view.setOnClickListener(model.get(EditUrlSuggestionProperties.TEXT_CLICK_LISTENER)); + } else { + throw new RuntimeException("Unknown property key in EditUrlSuggestionViewBinder!"); + } + } +}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoController.java b/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoController.java index 69676a56..7ba87ed5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/page_info/PageInfoController.java
@@ -6,8 +6,6 @@ import android.app.Activity; import android.content.ActivityNotFoundException; -import android.content.ClipData; -import android.content.ClipboardManager; import android.content.Context; import android.content.Intent; import android.graphics.Color; @@ -53,6 +51,7 @@ import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContentsObserver; import org.chromium.net.GURLUtils; +import org.chromium.ui.base.Clipboard; import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.modaldialog.DialogDismissalCause; @@ -62,7 +61,6 @@ import org.chromium.ui.text.NoUnderlineClickableSpan; import org.chromium.ui.text.SpanApplier; import org.chromium.ui.text.SpanApplier.SpanInfo; -import org.chromium.ui.widget.Toast; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -184,13 +182,8 @@ mView.toggleUrlTruncation(); }; // Long press the url text to copy it to the clipboard. - viewParams.urlTitleLongClickCallback = () -> { - ClipboardManager clipboard = - (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE); - ClipData clip = ClipData.newPlainText("url", mFullUrl); - clipboard.setPrimaryClip(clip); - Toast.makeText(mContext, R.string.url_copied, Toast.LENGTH_SHORT).show(); - }; + viewParams.urlTitleLongClickCallback = + () -> Clipboard.getInstance().copyUrlToClipboard(mFullUrl); // Work out the URL and connection message and status visibility. mFullUrl = isShowingOfflinePage() ? offlinePageUrl : mTab.getOriginalUrl();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceManager.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceManager.java index 0d6d7744..add7926 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/ChromePreferenceManager.java
@@ -167,6 +167,12 @@ public static final String BOTTOM_TOOLBAR_ENABLED_KEY = "bottom_toolbar_enabled"; /** + * Whether or not night mode is available. + * Default value is false. + */ + public static final String NIGHT_MODE_AVAILABLE_KEY = "night_mode_available"; + + /** * Marks that the content suggestions surface has been shown. * Default value is false. */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java index 4d63a6f3..54015b3 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java
@@ -1148,7 +1148,7 @@ if (mOmniboxStartupMetrics != null) { // Record the histogram before destroying, if we have the data. - mOmniboxStartupMetrics.maybeRecordHistograms(); + if (mInitializedWithNative) mOmniboxStartupMetrics.maybeRecordHistograms(); mOmniboxStartupMetrics.destroy(); mOmniboxStartupMetrics = null; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/CustomTabToolbar.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/CustomTabToolbar.java index f4795047..ebf63b9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/CustomTabToolbar.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/CustomTabToolbar.java
@@ -9,8 +9,6 @@ import android.animation.ValueAnimator; import android.animation.ValueAnimator.AnimatorUpdateListener; import android.app.Activity; -import android.content.ClipData; -import android.content.ClipboardManager; import android.content.Context; import android.content.res.ColorStateList; import android.content.res.Configuration; @@ -65,12 +63,12 @@ import org.chromium.components.url_formatter.UrlFormatter; import org.chromium.content_public.common.ContentUrlConstants; import org.chromium.net.GURLUtils; +import org.chromium.ui.base.Clipboard; import org.chromium.ui.base.DeviceFormFactor; import org.chromium.ui.base.WindowAndroid; import org.chromium.ui.interpolators.BakedBezierInterpolator; import org.chromium.ui.text.SpanApplier; import org.chromium.ui.text.SpanApplier.SpanInfo; -import org.chromium.ui.widget.Toast; import java.util.List; import java.util.regex.Pattern; @@ -720,14 +718,9 @@ getContext(), v, v.getContentDescription()); } if (v == mTitleUrlContainer) { - ClipboardManager clipboard = - (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE); Tab tab = getCurrentTab(); if (tab == null) return false; - String url = tab.getOriginalUrl(); - ClipData clip = ClipData.newPlainText("url", url); - clipboard.setPrimaryClip(clip); - Toast.makeText(getContext(), R.string.url_copied, Toast.LENGTH_SHORT).show(); + Clipboard.getInstance().copyUrlToClipboard(tab.getOriginalUrl()); return true; } return false;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java index b309a5a..4a256dd 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java
@@ -75,6 +75,7 @@ private static Boolean sIsNewTabPageButtonEnabled; private static Boolean sIsBottomToolbarEnabled; private static Boolean sShouldInflateToolbarOnBackgroundThread; + private static Boolean sIsNightModeAvailable; private static final String NTP_BUTTON_TRIAL_NAME = "NewTabPage"; private static final String NTP_BUTTON_VARIANT_PARAM_NAME = "variation"; @@ -187,6 +188,7 @@ cacheNewTabPageButtonEnabled(); cacheBottomToolbarEnabled(); cacheInflateToolbarOnBackgroundThread(); + cacheNightModeAvailable(); // Propagate DONT_PREFETCH_LIBRARIES feature value to LibraryLoader. This can't // be done in LibraryLoader itself because it lives in //base and can't depend @@ -352,6 +354,32 @@ } /** + * Cache whether or not night mode is available (i.e. night mode experiment is enabled) so on + * next startup, the value can be made available immediately. + */ + public static void cacheNightModeAvailable() { + ChromePreferenceManager.getInstance().writeBoolean( + ChromePreferenceManager.NIGHT_MODE_AVAILABLE_KEY, + ChromeFeatureList.isEnabled(ChromeFeatureList.ANDROID_NIGHT_MODE)); + } + + /** + * @return Whether or not night mode experiment is enabled (i.e. night mode experiment is + * enabled). + */ + public static boolean isNightModeAvailable() { + if (sIsNightModeAvailable == null) { + ChromePreferenceManager prefManager = ChromePreferenceManager.getInstance(); + + try (StrictModeContext unused = StrictModeContext.allowDiskReads()) { + sIsNightModeAvailable = prefManager.readBoolean( + ChromePreferenceManager.NIGHT_MODE_AVAILABLE_KEY, false); + } + } + return sIsNightModeAvailable; + } + + /** * Cache whether or not command line is enabled on non-rooted devices. */ private static void cacheCommandLineOnNonRootedEnabled() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/util/UrlUtilities.java b/chrome/android/java/src/org/chromium/chrome/browser/util/UrlUtilities.java index 92e262d..b70f7a4 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/util/UrlUtilities.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/util/UrlUtilities.java
@@ -368,7 +368,6 @@ boolean includePrivateRegistries); private static native String nativeGetDomainAndRegistry(String url, boolean includePrivateRegistries); - public static native boolean nativeIsGoogleDomainUrl(String url, boolean allowNonStandardPort); public static native boolean nativeIsGoogleSearchUrl(String url); public static native boolean nativeIsGoogleHomePageUrl(String url); private static native boolean nativeIsUrlWithinScope(String url, String scopeUrl);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActionsNotificationManager.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActionsNotificationManager.java index b65f6a6..bd2abfc 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActionsNotificationManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappActionsNotificationManager.java
@@ -7,8 +7,6 @@ import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; -import android.content.ClipData; -import android.content.ClipboardManager; import android.content.Context; import android.content.Intent; import android.support.v4.app.NotificationCompat; @@ -23,7 +21,7 @@ import org.chromium.chrome.browser.notifications.NotificationUmaTracker; import org.chromium.chrome.browser.notifications.channels.ChannelDefinitions; import org.chromium.chrome.browser.tab.Tab; -import org.chromium.ui.widget.Toast; +import org.chromium.ui.base.Clipboard; /** * Manages the notification shown by Chrome when running standalone Web Apps. It accomplishes @@ -129,12 +127,7 @@ return true; } else if (ACTION_FOCUS.equals(intent.getAction())) { Tab tab = mWebappActivity.getActivityTab(); - if (tab != null) { - ClipboardManager clipboard = (ClipboardManager) mWebappActivity.getSystemService( - Context.CLIPBOARD_SERVICE); - clipboard.setPrimaryClip(ClipData.newPlainText("url", tab.getOriginalUrl())); - Toast.makeText(mWebappActivity, R.string.url_copied, Toast.LENGTH_SHORT).show(); - } + if (tab != null) Clipboard.getInstance().copyUrlToClipboard(tab.getOriginalUrl()); RecordUserAction.record("Webapp.NotificationFocused"); return true; }
diff --git a/chrome/android/java/strings/android_chrome_strings.grd b/chrome/android/java/strings/android_chrome_strings.grd index 1c301389..7d46e80 100644 --- a/chrome/android/java/strings/android_chrome_strings.grd +++ b/chrome/android/java/strings/android_chrome_strings.grd
@@ -3173,9 +3173,6 @@ <message name="IDS_CONTENT_PROVIDER_SEARCH_DESCRIPTION" desc="Description for Chrome's entry in QSB's list of search suggestion providers [CHAR-LIMIT=32]"> Bookmarks and web history </message> - <message name="IDS_URL_COPIED" desc="Notification telling the user that the url has been copied to clipboard. [CHAR-LIMIT=32]"> - URL copied. - </message> <message name="IDS_CHROME_SURVEY_PROMPT" desc="Message shown that invites the user to take a survey about Chrome. 'Help' and 'improve' are imperative verbs. 'Take survey' is a tappable link. When tapped, a survey about Chrome opens."> Help improve Chrome. <ph name="BEGIN_LINK"><LINK></ph>Take survey<ph name="END_LINK"></LINK></ph> </message>
diff --git a/chrome/android/java_sources.gni b/chrome/android/java_sources.gni index 22ad1c7..b805d30 100644 --- a/chrome/android/java_sources.gni +++ b/chrome/android/java_sources.gni
@@ -1172,6 +1172,9 @@ "java/src/org/chromium/chrome/browser/omnibox/suggestions/SuggestionViewProperties.java", "java/src/org/chromium/chrome/browser/omnibox/suggestions/SuggestionViewViewBinder.java", "java/src/org/chromium/chrome/browser/omnibox/suggestions/VoiceSuggestionProvider.java", + "java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionCoordinator.java", + "java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionProperties.java", + "java/src/org/chromium/chrome/browser/omnibox/suggestions/editurl/EditUrlSuggestionViewBinder.java", "java/src/org/chromium/chrome/browser/page_info/CertificateChainHelper.java", "java/src/org/chromium/chrome/browser/page_info/CertificateViewer.java", "java/src/org/chromium/chrome/browser/page_info/ConnectionInfoPopup.java",
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/dynamicmodule/CustomTabsDynamicModuleTestUtils.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/dynamicmodule/CustomTabsDynamicModuleTestUtils.java index e67888d..4e750e8 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/dynamicmodule/CustomTabsDynamicModuleTestUtils.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/dynamicmodule/CustomTabsDynamicModuleTestUtils.java
@@ -6,6 +6,7 @@ import static org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider.EXTRA_HIDE_CCT_HEADER_ON_MODULE_MANAGED_URLS; import static org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider.EXTRA_MODULE_CLASS_NAME; +import static org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider.EXTRA_MODULE_MANAGED_HOST_LIST; import static org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider.EXTRA_MODULE_MANAGED_URLS_REGEX; import static org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider.EXTRA_MODULE_PACKAGE_NAME; import static org.chromium.chrome.browser.customtabs.dynamicmodule.DynamicModuleNavigationEventObserver.PENDING_URL_KEY; @@ -26,6 +27,7 @@ import org.chromium.chrome.browser.customtabs.CustomTabsTestUtils; import org.chromium.chrome.browser.externalauth.ExternalAuthUtils; +import java.util.ArrayList; import java.util.concurrent.TimeoutException; /** @@ -233,6 +235,11 @@ return this; } + IntentBuilder setModuleHostList(ArrayList<String> moduleHostList) { + mIntent.putStringArrayListExtra(EXTRA_MODULE_MANAGED_HOST_LIST, moduleHostList); + return this; + } + IntentBuilder setHideCCTHeader(boolean isEnabled) { mIntent.putExtra(EXTRA_HIDE_CCT_HEADER_ON_MODULE_MANAGED_URLS, isEnabled); return this;
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/dynamicmodule/CustomTabsDynamicModuleUITest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/dynamicmodule/CustomTabsDynamicModuleUITest.java index 5499fc9..e1573f0 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/dynamicmodule/CustomTabsDynamicModuleUITest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/dynamicmodule/CustomTabsDynamicModuleUITest.java
@@ -11,6 +11,7 @@ import static org.chromium.base.ThreadUtils.runOnUiThread; import android.content.Intent; +import android.net.Uri; import android.support.test.InstrumentationRegistry; import android.support.test.filters.SmallTest; import android.support.test.uiautomator.UiDevice; @@ -47,11 +48,12 @@ import org.chromium.content_public.browser.test.util.ClickUtils; import org.chromium.content_public.browser.test.util.Criteria; import org.chromium.content_public.browser.test.util.CriteriaHelper; -import org.chromium.content_public.common.ContentSwitches; import org.chromium.net.test.EmbeddedTestServer; import org.chromium.net.test.ServerCertificate; import org.chromium.ui.base.PageTransition; +import java.util.ArrayList; +import java.util.Arrays; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; @@ -60,8 +62,7 @@ * controlled by a dynamic module. */ @RunWith(ChromeJUnit4ClassRunner.class) -@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, - ContentSwitches.HOST_RESOLVER_RULES + "=MAP * 127.0.0.1"}) +@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) public class CustomTabsDynamicModuleUITest { @Rule public CustomTabActivityTestRule mActivityRule = new CustomTabActivityTestRule(); @@ -92,16 +93,13 @@ mTestPage = mTestServer.getURL(TEST_PAGE); mTestPage2 = mTestServer.getURL(TEST_PAGE_2); - mModuleManagedPage = mTestServer.getURLWithHostName("google.com", MODULE_MANAGED_PAGE); - mModuleManagedPage2 = mTestServer.getURLWithHostName("google.com", MODULE_MANAGED_PAGE_2); - - DynamicModuleCoordinator.setCheckPortNumber(false); + mModuleManagedPage = mTestServer.getURL(MODULE_MANAGED_PAGE); + mModuleManagedPage2 = mTestServer.getURL(MODULE_MANAGED_PAGE_2); } @After public void tearDown() throws Exception { ModuleFactoryOverrides.clearOverrides(); - DynamicModuleCoordinator.setCheckPortNumber(true); } /** @@ -115,6 +113,7 @@ public void testModuleNotProvided() throws InterruptedException { Intent intent = new IntentBuilder(mModuleManagedPage) .setModulePackageName(null).setModuleClassName(null) + .setModuleHostList(getServerHostsList()) .setModuleManagedUrlRegex(getModuleManagedRegex()) .build(); @@ -136,6 +135,7 @@ @Features.DisableFeatures(ChromeFeatureList.CCT_MODULE) public void testFeatureIsDisabled() throws InterruptedException { Intent intent = new IntentBuilder(mModuleManagedPage) + .setModuleHostList(getServerHostsList()) .setModuleManagedUrlRegex(getModuleManagedRegex()) .build(); @@ -162,6 +162,7 @@ throws InterruptedException, ExecutionException, TimeoutException { Intent intent = new IntentBuilder(mModuleManagedPage) + .setModuleHostList(getServerHostsList()) .setModuleManagedUrlRegex(getModuleManagedRegex()) .build(); @@ -253,6 +254,7 @@ // moduleManagedUrl1 -> nav1.1 - nav1.2 Intent intent = new IntentBuilder(mModuleManagedPage) .setModuleFailToLoadComponentName() + .setModuleHostList(getServerHostsList()) .setModuleManagedUrlRegex(getModuleManagedRegex()).build(); mActivityRule.startCustomTabActivityWithIntent(intent); @@ -296,6 +298,7 @@ @Features.EnableFeatures(ChromeFeatureList.CCT_MODULE) public void testSetTopBarContentView_secondCallIsNoOp() throws Exception { Intent intent = new IntentBuilder(mModuleManagedPage) + .setModuleHostList(getServerHostsList()) .setModuleManagedUrlRegex(getModuleManagedRegex()) .build(); @@ -333,6 +336,7 @@ @Features.EnableFeatures(ChromeFeatureList.CCT_MODULE) public void testSetTopBarContentView_withModuleAndManagedUrls_topBarVisible() throws Exception { Intent intent = new IntentBuilder(mModuleManagedPage) + .setModuleHostList(getServerHostsList()) .setModuleManagedUrlRegex(getModuleManagedRegex()) .build(); mActivityRule.startCustomTabActivityWithIntent(intent); @@ -354,11 +358,11 @@ @Features.EnableFeatures({ ChromeFeatureList.CCT_MODULE, ChromeFeatureList.CCT_MODULE_CUSTOM_HEADER}) public void testSetTopBarContentView_notModuleManagedHost_cctHeaderVisible() throws Exception { - String url = mTestServer.getURLWithHostName("non-managed-domain", MODULE_MANAGED_PAGE); - Intent intent = new IntentBuilder(url) - .setModuleManagedUrlRegex(getModuleManagedRegex()) - .setHideCCTHeader(true) - .build(); + Intent intent = new IntentBuilder(mModuleManagedPage) + .setModuleHostList(new ArrayList<>(Arrays.asList("www.google.com"))) + .setModuleManagedUrlRegex(getModuleManagedRegex()) + .setHideCCTHeader(true) + .build(); mActivityRule.startCustomTabActivityWithIntent(intent); waitForModuleLoading(); @@ -373,6 +377,7 @@ ChromeFeatureList.CCT_MODULE, ChromeFeatureList.CCT_MODULE_CUSTOM_HEADER}) public void testSetTopBarContentView_withModuleAndExtras_cctHeaderHidden() throws Exception { Intent intent = new IntentBuilder(mModuleManagedPage) + .setModuleHostList(getServerHostsList()) .setModuleManagedUrlRegex(getModuleManagedRegex()) .setHideCCTHeader(true) .build(); @@ -398,6 +403,7 @@ @Features.DisableFeatures(ChromeFeatureList.CCT_MODULE_CUSTOM_HEADER) public void testSetTopBarHeight_featureDisabled_heightNotChanged() throws Exception { Intent intent = new IntentBuilder(mModuleManagedPage) + .setModuleHostList(getServerHostsList()) .setModuleManagedUrlRegex(getModuleManagedRegex()) .setHideCCTHeader(true) .build(); @@ -419,6 +425,7 @@ ChromeFeatureList.CCT_MODULE, ChromeFeatureList.CCT_MODULE_CUSTOM_HEADER}) public void testSetTopBarHeight_cctHeaderNotHidden_heightNotChanged() throws Exception { Intent intent = new IntentBuilder(mModuleManagedPage) + .setModuleHostList(getServerHostsList()) .setModuleManagedUrlRegex(getModuleManagedRegex()) .setHideCCTHeader(false) .build(); @@ -439,6 +446,7 @@ ChromeFeatureList.CCT_MODULE, ChromeFeatureList.CCT_MODULE_CUSTOM_HEADER}) public void testSetTopBarHeight_withModuleAndExtras_heightUpdated() throws Exception { Intent intent = new IntentBuilder(mModuleManagedPage) + .setModuleHostList(getServerHostsList()) .setModuleManagedUrlRegex(getModuleManagedRegex()) .setHideCCTHeader(true) .build(); @@ -458,6 +466,7 @@ @Features.DisableFeatures(ChromeFeatureList.CCT_MODULE_CUSTOM_HEADER) public void testSetTopBarContentView_featureDisabled_progressBarNoChange() throws Exception { Intent intent = new IntentBuilder(mModuleManagedPage) + .setModuleHostList(getServerHostsList()) .setModuleManagedUrlRegex(getModuleManagedRegex()) .setHideCCTHeader(true) .build(); @@ -472,6 +481,7 @@ EnableFeatures({ChromeFeatureList.CCT_MODULE, ChromeFeatureList.CCT_MODULE_CUSTOM_HEADER}) public void testSetTopBarContentView_cctHeaderNotHidden_progressBarNoChange() throws Exception { Intent intent = new IntentBuilder(mModuleManagedPage) + .setModuleHostList(getServerHostsList()) .setModuleManagedUrlRegex(getModuleManagedRegex()) .setHideCCTHeader(false) .build(); @@ -486,6 +496,7 @@ EnableFeatures({ChromeFeatureList.CCT_MODULE, ChromeFeatureList.CCT_MODULE_CUSTOM_HEADER}) public void testSetTopBarContentView_withModuleAndExtras_progressBarChanged() throws Exception { Intent intent = new IntentBuilder(mModuleManagedPage) + .setModuleHostList(getServerHostsList()) .setModuleManagedUrlRegex(getModuleManagedRegex()) .setHideCCTHeader(true) .build(); @@ -515,6 +526,11 @@ return "^(" + MODULE_MANAGED_PAGE + "|" + MODULE_MANAGED_PAGE_2 + ")$"; } + private ArrayList<String> getServerHostsList() { + return new ArrayList<>(new ArrayList<>( + Arrays.asList(Uri.parse(mModuleManagedPage).getHost()))); + } + private void runAndWaitForActivityStopped(Runnable runnable) throws TimeoutException, InterruptedException { CallbackHelper cctHiddenCallback = new CallbackHelper(); @@ -582,4 +598,4 @@ } return canChange; } -} +} \ No newline at end of file
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 776ab21..2314ec4a 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -1981,7 +1981,7 @@ "//ui/gfx", "//ui/gfx/geometry", "//ui/gl", - "//ui/gl:gl_features", + "//ui/gl:buildflags", "//ui/message_center", "//ui/message_center/public/cpp", "//ui/resources",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 51eee3a..585f50d3 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -140,7 +140,7 @@ #include "ui/events/blink/blink_features.h" #include "ui/events/event_switches.h" #include "ui/gfx/switches.h" -#include "ui/gl/gl_features.h" +#include "ui/gl/buildflags.h" #include "ui/gl/gl_switches.h" #include "ui/keyboard/public/keyboard_switches.h" #include "ui/native_theme/native_theme_features.h" @@ -151,6 +151,7 @@ #if defined(OS_ANDROID) #include "chrome/browser/android/chrome_feature_list.h" #include "chrome/browser/android/explore_sites/explore_sites_feature.h" +#include "ui/android/buildflags.h" #else // OS_ANDROID #include "chrome/browser/media/router/media_router_feature.h" #include "ui/message_center/public/cpp/features.h" @@ -2576,6 +2577,13 @@ FEATURE_VALUE_TYPE( password_manager::features::kPasswordsKeyboardAccessory)}, #endif // OS_ANDROID +#if defined(OS_ANDROID) +#if BUILDFLAG(ENABLE_ANDROID_NIGHT_MODE) + {"enable-android-night-mode", flag_descriptions::kAndroidNightModeName, + flag_descriptions::kAndroidNightModeDescription, kOsAndroid, + FEATURE_VALUE_TYPE(chrome::android::kAndroidNightMode)}, +#endif // BUILDFLAG(ENABLE_ANDROID_NIGHT_MODE) +#endif // OS_ANDROID #if defined(OS_LINUX) && !defined(OS_CHROMEOS) {"passwords-migrate-linux-to-login-db", flag_descriptions::kPasswordsMigrateLinuxToLoginDBName,
diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc index d689f16..3bbe510 100644 --- a/chrome/browser/android/chrome_feature_list.cc +++ b/chrome/browser/android/chrome_feature_list.cc
@@ -80,6 +80,7 @@ &invalidation::switches::kFCMInvalidations, &kAdjustWebApkInstallationSpace, &kAllowRemoteContextForNotifications, + &kAndroidNightMode, &kAndroidPayIntegrationV1, &kAndroidPayIntegrationV2, &kAndroidPaymentApps, @@ -198,6 +199,9 @@ const base::Feature kAdjustWebApkInstallationSpace = { "AdjustWebApkInstallationSpace", base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kAndroidNightMode{"AndroidNightMode", + base::FEATURE_DISABLED_BY_DEFAULT}; + const base::Feature kAndroidPayIntegrationV1{"AndroidPayIntegrationV1", base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/chrome/browser/android/chrome_feature_list.h b/chrome/browser/android/chrome_feature_list.h index 1ed5ba5..9525997 100644 --- a/chrome/browser/android/chrome_feature_list.h +++ b/chrome/browser/android/chrome_feature_list.h
@@ -14,6 +14,7 @@ // Alphabetical: extern const base::Feature kAdjustWebApkInstallationSpace; extern const base::Feature kAllowRemoteContextForNotifications; +extern const base::Feature kAndroidNightMode; extern const base::Feature kAndroidPayIntegrationV1; extern const base::Feature kAndroidPayIntegrationV2; extern const base::Feature kAndroidPaymentApps;
diff --git a/chrome/browser/android/url_utilities.cc b/chrome/browser/android/url_utilities.cc index c195666..7789410 100644 --- a/chrome/browser/android/url_utilities.cc +++ b/chrome/browser/android/url_utilities.cc
@@ -88,20 +88,6 @@ net::registry_controlled_domains::GetDomainAndRegistry(gurl, filter)); } -static jboolean JNI_UrlUtilities_IsGoogleDomainUrl( - JNIEnv* env, - const JavaParamRef<jstring>& url, - jboolean allow_non_standard_port) { - GURL gurl = JNI_UrlUtilities_ConvertJavaStringToGURL(env, url); - if (gurl.is_empty()) - return false; - return google_util::IsGoogleDomainUrl( - gurl, google_util::DISALLOW_SUBDOMAIN, - allow_non_standard_port == JNI_TRUE - ? google_util::ALLOW_NON_STANDARD_PORTS - : google_util::DISALLOW_NON_STANDARD_PORTS); -} - static jboolean JNI_UrlUtilities_IsGoogleSearchUrl( JNIEnv* env, const JavaParamRef<jstring>& url) {
diff --git a/chrome/browser/background_fetch/background_fetch_browsertest.cc b/chrome/browser/background_fetch/background_fetch_browsertest.cc index f04fcef..d4983f6 100644 --- a/chrome/browser/background_fetch/background_fetch_browsertest.cc +++ b/chrome/browser/background_fetch/background_fetch_browsertest.cc
@@ -714,9 +714,6 @@ EXPECT_TRUE( base::StartsWith(offline_content_provider_observer_->latest_item().title, "New Fetched Title!", base::CompareCase::SENSITIVE)); - - // Make sure the delegate cleans up after the fetch is complete. - EXPECT_TRUE(delegate_->job_details_map_.empty()); } IN_PROC_BROWSER_TEST_F(BackgroundFetchBrowserTest, @@ -740,6 +737,27 @@ EXPECT_EQ(request_body_, "upload!"); } +IN_PROC_BROWSER_TEST_F(BackgroundFetchBrowserTest, ClickEventIsDispatched) { + ASSERT_NO_FATAL_FAILURE(RunScriptAndCheckResultingMessage( + "RunFetchTillCompletion()", "backgroundfetchsuccess")); + EXPECT_EQ(offline_content_provider_observer_->latest_item().state, + offline_items_collection::OfflineItemState::COMPLETE); + + base::RunLoop().RunUntilIdle(); // Give updates a chance to propagate. + + ASSERT_EQ(delegate_->job_details_map_.size(), 1u); + auto& job_details = delegate_->job_details_map_.begin()->second; + EXPECT_EQ(job_details.job_state, + BackgroundFetchDelegateImpl::JobDetails::State::kJobComplete); + + // Simulate notification click. + delegate_->OpenItem(offline_items_collection::LaunchLocation::NOTIFICATION, + job_details.offline_item.id); + + // Job Details should be deleted at this point. + EXPECT_TRUE(delegate_->job_details_map_.empty()); +} + IN_PROC_BROWSER_TEST_F(BackgroundFetchBrowserTest, FetchCanBePausedAndResumed) { offline_content_provider_observer_->PauseOnNextUpdate(); ASSERT_NO_FATAL_FAILURE(RunScriptAndCheckResultingMessage(
diff --git a/chrome/browser/background_fetch/background_fetch_delegate_impl.cc b/chrome/browser/background_fetch/background_fetch_delegate_impl.cc index 159212b..2697a99 100644 --- a/chrome/browser/background_fetch/background_fetch_delegate_impl.cc +++ b/chrome/browser/background_fetch/background_fetch_delegate_impl.cc
@@ -154,6 +154,10 @@ case State::kStartedButPaused: offline_item.state = OfflineItemState::PAUSED; break; + case State::kJobComplete: + // There shouldn't be any updates at this point. + NOTREACHED(); + break; default: offline_item.state = OfflineItemState::IN_PROGRESS; } @@ -345,7 +349,15 @@ void BackgroundFetchDelegateImpl::MarkJobComplete( const std::string& job_unique_id) { - job_details_map_.erase(job_unique_id); + auto job_details_iter = job_details_map_.find(job_unique_id); + DCHECK(job_details_iter != job_details_map_.end()); + + JobDetails& job_details = job_details_iter->second; + job_details.job_state = JobDetails::State::kJobComplete; + + // Clear the |job_details| internals that are no longer needed. + job_details.current_fetch_guids.clear(); + job_details.fetch_description.reset(); } void BackgroundFetchDelegateImpl::UpdateUI( @@ -557,8 +569,17 @@ void BackgroundFetchDelegateImpl::OpenItem( offline_items_collection::LaunchLocation location, const offline_items_collection::ContentId& id) { - if (auto client = GetClient(id.id)) - client->OnUIActivated(id.id); + auto job_details_iter = job_details_map_.find(id.id); + if (job_details_iter == job_details_map_.end()) + return; + + JobDetails& job_details = job_details_iter->second; + if (job_details.client) + job_details.client->OnUIActivated(id.id); + + // No point in keeping the job details around anymore. + if (job_details.job_state == JobDetails::State::kJobComplete) + job_details_map_.erase(job_details_iter); } void BackgroundFetchDelegateImpl::RemoveItem(
diff --git a/chrome/browser/background_fetch/background_fetch_delegate_impl.h b/chrome/browser/background_fetch/background_fetch_delegate_impl.h index af12951..c123b46 100644 --- a/chrome/browser/background_fetch/background_fetch_delegate_impl.h +++ b/chrome/browser/background_fetch/background_fetch_delegate_impl.h
@@ -131,8 +131,7 @@ } private: - FRIEND_TEST_ALL_PREFIXES(BackgroundFetchBrowserTest, - FetchesRunToCompletionAndUpdateTitle_Fetched); + FRIEND_TEST_ALL_PREFIXES(BackgroundFetchBrowserTest, ClickEventIsDispatched); struct JobDetails { // If a job is part of the |job_details_map_|, it will have one of these @@ -146,6 +145,9 @@ kCancelled, // All requests were processed (either succeeded or failed). kDownloadsComplete, + // The appropriate completion event (success, fail, abort) has been + // dispatched. + kJobComplete, }; JobDetails(JobDetails&&);
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index ade9294..6784b04 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -216,7 +216,6 @@ #include "components/previews/content/previews_user_data.h" #include "components/previews/core/previews_decider.h" #include "components/previews/core/previews_experiments.h" -#include "components/previews/core/previews_lite_page_redirect.h" #include "components/rappor/public/rappor_utils.h" #include "components/rappor/rappor_recorder_impl.h" #include "components/rappor/rappor_service_impl.h" @@ -1646,10 +1645,6 @@ ChromeContentBrowserClientExtensionsPart::OverrideNavigationParams( site_instance, transition, is_renderer_initiated, referrer); #endif - - // Clear the referrer if it is for the internal lite page preview domain. - if (previews::IsLitePageRedirectPreviewDomain(referrer->url)) - *referrer = content::Referrer(); } bool ChromeContentBrowserClient::ShouldStayInParentProcessForNTP(
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index fe799787..d3925c73 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -79,6 +79,7 @@ "//chrome/services/diagnosticsd/public/mojom", "//chrome/services/file_util/public/cpp", "//chromeos", + "//chromeos:policy_certificate_provider", "//chromeos/assistant:buildflags", "//chromeos/attestation", "//chromeos/audio", @@ -89,6 +90,7 @@ "//chromeos/components/proximity_auth", "//chromeos/components/tether", "//chromeos/cryptohome", + "//chromeos/dbus", "//chromeos/dbus:attestation_proto", "//chromeos/dbus:authpolicy_proto", "//chromeos/dbus:biod_proto", @@ -614,6 +616,10 @@ "child_accounts/consumer_status_reporting_service.h", "child_accounts/consumer_status_reporting_service_factory.cc", "child_accounts/consumer_status_reporting_service_factory.h", + "child_accounts/event_based_status_reporting_service.cc", + "child_accounts/event_based_status_reporting_service.h", + "child_accounts/event_based_status_reporting_service_factory.cc", + "child_accounts/event_based_status_reporting_service_factory.h", "child_accounts/screen_time_controller.cc", "child_accounts/screen_time_controller.h", "child_accounts/screen_time_controller_factory.cc", @@ -2065,6 +2071,7 @@ "//chromeos", "//chromeos/components/drivefs", "//chromeos/components/drivefs:test_support", + "//chromeos/dbus", "//components/crx_file", "//components/drive", "//components/policy/proto", @@ -2157,6 +2164,7 @@ "authpolicy/auth_policy_credentials_manager_unittest.cc", "base/file_flusher_unittest.cc", "certificate_provider/certificate_provider_service_unittest.cc", + "child_accounts/event_based_status_reporting_service_unittest.cc", "child_accounts/time_limit_notifier_unittest.cc", "child_accounts/usage_time_limit_processor_unittest.cc", "crostini/crostini_manager_unittest.cc", @@ -2503,6 +2511,7 @@ "//chrome/common", "//chromeos/components/multidevice:test_support", "//chromeos/components/tether:test_support", + "//chromeos/dbus", "//chromeos/dbus:login_manager_proto", "//chromeos/dbus/services:test_support", "//chromeos/ime:gencode",
diff --git a/chrome/browser/chromeos/account_manager/account_manager_migrator.cc b/chrome/browser/chromeos/account_manager/account_manager_migrator.cc index 7d341dc..e447aef 100644 --- a/chrome/browser/chromeos/account_manager/account_manager_migrator.cc +++ b/chrome/browser/chromeos/account_manager/account_manager_migrator.cc
@@ -22,6 +22,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/account_reconcilor_factory.h" #include "chrome/browser/signin/account_tracker_service_factory.h" +#include "chrome/browser/signin/gaia_cookie_manager_service_factory.h" #include "chrome/browser/web_data_service_factory.h" #include "chromeos/account_manager/account_manager.h" #include "chromeos/account_manager/account_manager_factory.h" @@ -30,6 +31,7 @@ #include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/signin/core/browser/account_reconcilor.h" #include "components/signin/core/browser/account_tracker_service.h" +#include "components/signin/core/browser/gaia_cookie_manager_service.h" #include "components/signin/core/browser/webdata/token_web_data.h" #include "components/webdata/common/web_data_service_consumer.h" @@ -62,6 +64,8 @@ return prefixed_account_id.substr(10 /* length of "AccountId-" */); } +// An |AccountMigrationRunner::Step| to migrate the Chrome OS Device Account's +// LST to |AccountManager|. class DeviceAccountMigration : public AccountMigrationRunner::Step, public WebDataServiceConsumer { public: @@ -190,6 +194,122 @@ DISALLOW_COPY_AND_ASSIGN(DeviceAccountMigration); }; +// An |AccountMigrationRunner::Step| to migrate the Chrome content area accounts +// to |AccountManager|. The objective is to migrate the account names only. We +// cannot migrate any credentials (cookies). +class ContentAreaAccountsMigration : public AccountMigrationRunner::Step, + GaiaCookieManagerService::Observer { + public: + ContentAreaAccountsMigration( + AccountManager* account_manager, + AccountTrackerService* const account_tracker_service, + GaiaCookieManagerService* gaia_cookie_manager_service) + : AccountMigrationRunner::Step("ContentAreaAccountsMigration"), + account_manager_(account_manager), + account_tracker_service_(account_tracker_service), + gaia_cookie_manager_service_(gaia_cookie_manager_service), + weak_factory_(this) {} + ~ContentAreaAccountsMigration() override = default; + + void Run(base::OnceCallback<void(bool)> callback) override { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + callback_ = std::move(callback); + + account_manager_->GetAccounts( + base::BindOnce(&ContentAreaAccountsMigration::OnGetAccounts, + weak_factory_.GetWeakPtr())); + } + + private: + void OnGetAccounts( + std::vector<AccountManager::AccountKey> account_manager_accounts) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + account_manager_accounts_ = std::move(account_manager_accounts); + + std::vector<gaia::ListedAccount> signed_in_content_area_accounts; + std::vector<gaia::ListedAccount> signed_out_content_area_accounts; + gaia_cookie_manager_service_->AddObserver(this); + if (gaia_cookie_manager_service_->ListAccounts( + &signed_in_content_area_accounts, + &signed_out_content_area_accounts)) { + OnGaiaAccountsInCookieUpdated( + signed_in_content_area_accounts, signed_out_content_area_accounts, + GoogleServiceAuthError(GoogleServiceAuthError::NONE)); + } + } + + void OnGaiaAccountsInCookieUpdated( + const std::vector<gaia::ListedAccount>& signed_in_content_area_accounts, + const std::vector<gaia::ListedAccount>& signed_out_content_area_accounts, + const GoogleServiceAuthError& error) override { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + // We should not have reached here without |OnGetAccounts| having been + // called and |account_manager_accounts_| empty. + // Furthermore, Account Manager must have been populated with the Device + // Account before this |Step| is run. + DCHECK(!account_manager_accounts_.empty()); + gaia_cookie_manager_service_->RemoveObserver(this); + + MigrateAccounts(signed_in_content_area_accounts, + signed_out_content_area_accounts); + + std::move(callback_).Run(true); + } + + void MigrateAccounts( + const std::vector<gaia::ListedAccount>& signed_in_content_area_accounts, + const std::vector<gaia::ListedAccount>& + signed_out_content_area_accounts) { + for (const gaia::ListedAccount& account : signed_in_content_area_accounts) { + MigrateAccount(account); + } + for (const gaia::ListedAccount& account : + signed_out_content_area_accounts) { + MigrateAccount(account); + } + } + + void MigrateAccount(const gaia::ListedAccount& account) { + AccountManager::AccountKey account_key{ + account.gaia_id, account_manager::AccountType::ACCOUNT_TYPE_GAIA}; + if (base::ContainsValue(account_manager_accounts_, account_key)) { + // Do not overwrite any existing account in |AccountManager|. + return; + } + + // |AccountTrackerService::SeedAccountInfo| must be called before + // |AccountManager::UpsertToken|. |AccountManager| observers will need to + // translate |AccountManager::AccountKey| to other formats using + // |AccountTrackerService| and hence |AccountTrackerService| should be + // updated first. + account_tracker_service_->SeedAccountInfo(account.gaia_id, + account.raw_email); + account_manager_->UpsertToken(account_key, AccountManager::kInvalidToken); + } + + // A non-owning pointer to |AccountManager|. + AccountManager* const account_manager_; + + // A non-owning pointer to |AccountTrackerService|. + AccountTrackerService* const account_tracker_service_; + + // A non-owning pointer to |GaiaCookieManagerService|. + GaiaCookieManagerService* const gaia_cookie_manager_service_; + + // A temporary cache of accounts in |AccountManager|. + std::vector<AccountManager::AccountKey> account_manager_accounts_; + + // Callback to invoke at the end of this |Step|, with the final result of the + // operation. + base::OnceCallback<void(bool)> callback_; + + SEQUENCE_CHECKER(sequence_checker_); + + base::WeakPtrFactory<ContentAreaAccountsMigration> weak_factory_; + + DISALLOW_COPY_AND_ASSIGN(ContentAreaAccountsMigration); +}; + } // namespace AccountManagerMigrator::AccountManagerMigrator(Profile* profile) @@ -203,6 +323,11 @@ if (!chromeos::switches::IsAccountManagerEnabled()) return; + // Account migration does not make sense for ephemeral (Guest, Managed + // Session, Kiosk, Demo etc.) sessions. + if (user_manager::UserManager::Get()->IsCurrentUserCryptohomeDataEphemeral()) + return; + chromeos::AccountManagerFactory* factory = g_browser_process->platform_part()->GetAccountManagerFactory(); chromeos::AccountManager* account_manager = @@ -211,15 +336,15 @@ AccountTrackerService* account_tracker_service = AccountTrackerServiceFactory::GetForProfile(profile_); - scoped_refptr<TokenWebData> token_web_data = - WebDataServiceFactory::GetTokenWebDataForProfile( - profile_, ServiceAccessType::EXPLICIT_ACCESS); - migration_runner_.AddStep(std::make_unique<DeviceAccountMigration>( GetDeviceAccount(profile_), account_manager, account_tracker_service, - token_web_data)); + WebDataServiceFactory::GetTokenWebDataForProfile( + profile_, ServiceAccessType::EXPLICIT_ACCESS) /* token_web_data */)); + migration_runner_.AddStep(std::make_unique<ContentAreaAccountsMigration>( + account_manager, account_tracker_service, + GaiaCookieManagerServiceFactory::GetForProfile( + profile_) /* gaia_cookie_manager_service */)); - // TODO(sinhak): Migrate Secondary Accounts in Chrome content area. // TODO(sinhak): Migrate Secondary Accounts in ARC. // TODO(sinhak): Store success state in Preferences. // TODO(sinhak): Verify Device Account LST state. @@ -274,6 +399,8 @@ // Account reconciliation is paused for the duration of migration and needs to // be re-enabled once migration is done. DependsOn(AccountReconcilorFactory::GetInstance()); + // For getting Chrome content area accounts. + DependsOn(GaiaCookieManagerServiceFactory::GetInstance()); } AccountManagerMigratorFactory::~AccountManagerMigratorFactory() = default;
diff --git a/chrome/browser/chromeos/child_accounts/consumer_status_reporting_service.cc b/chrome/browser/chromeos/child_accounts/consumer_status_reporting_service.cc index bb8758b70..f720920 100644 --- a/chrome/browser/chromeos/child_accounts/consumer_status_reporting_service.cc +++ b/chrome/browser/chromeos/child_accounts/consumer_status_reporting_service.cc
@@ -7,12 +7,14 @@ #include "base/bind.h" #include "base/logging.h" #include "base/threading/thread_task_runner_handle.h" +#include "chrome/browser/chromeos/child_accounts/event_based_status_reporting_service_factory.h" #include "chrome/browser/chromeos/child_accounts/usage_time_limit_processor.h" #include "chrome/browser/chromeos/policy/device_status_collector.h" #include "chrome/browser/chromeos/policy/status_uploader.h" #include "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h" #include "chrome/browser/chromeos/policy/user_policy_manager_factory_chromeos.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/common/chrome_features.h" #include "chrome/common/pref_names.h" #include "chromeos/system/statistics_provider.h" #include "components/policy/core/common/cloud/cloud_policy_client.h" @@ -58,6 +60,10 @@ base::Unretained(this))); CreateStatusUploaderIfNeeded(user_cloud_policy_manager_->core()->client()); + + if (base::FeatureList::IsEnabled(features::kEventBasedStatusReporting)) { + EventBasedStatusReportingServiceFactory::GetForBrowserContext(context); + } } ConsumerStatusReportingService::~ConsumerStatusReportingService() = default;
diff --git a/chrome/browser/chromeos/child_accounts/consumer_status_reporting_service.h b/chrome/browser/chromeos/child_accounts/consumer_status_reporting_service.h index 0fed1d12..06cb387 100644 --- a/chrome/browser/chromeos/child_accounts/consumer_status_reporting_service.h +++ b/chrome/browser/chromeos/child_accounts/consumer_status_reporting_service.h
@@ -34,7 +34,7 @@ public: explicit ConsumerStatusReportingService(content::BrowserContext* context); ~ConsumerStatusReportingService() override; - void RequestImmediateStatusReport(); + virtual void RequestImmediateStatusReport(); // Get the child's usage time so far today. base::TimeDelta GetChildScreenTime() const;
diff --git a/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service.cc b/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service.cc new file mode 100644 index 0000000..bb43c57 --- /dev/null +++ b/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service.cc
@@ -0,0 +1,48 @@ +// 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. + +#include "chrome/browser/chromeos/child_accounts/event_based_status_reporting_service.h" + +#include "base/logging.h" +#include "chrome/browser/chromeos/child_accounts/consumer_status_reporting_service.h" +#include "chrome/browser/chromeos/child_accounts/consumer_status_reporting_service_factory.h" +#include "chrome/browser/profiles/profile.h" + +namespace chromeos { + +EventBasedStatusReportingService::EventBasedStatusReportingService( + content::BrowserContext* context) + : context_(context) { + ArcAppListPrefs* arc_app_prefs = ArcAppListPrefs::Get(context_); + // arc_app_prefs may not available in some browser tests. + if (!arc_app_prefs) + return; + arc_app_prefs->AddObserver(this); +} + +EventBasedStatusReportingService::~EventBasedStatusReportingService() = default; + +void EventBasedStatusReportingService::OnPackageInstalled( + const arc::mojom::ArcPackageInfo& package_info) { + VLOG(1) << "Request status report due to an app install."; + ConsumerStatusReportingServiceFactory::GetForBrowserContext(context_) + ->RequestImmediateStatusReport(); +} + +void EventBasedStatusReportingService::OnPackageModified( + const arc::mojom::ArcPackageInfo& package_info) { + VLOG(1) << "Request status report due to an app update."; + ConsumerStatusReportingServiceFactory::GetForBrowserContext(context_) + ->RequestImmediateStatusReport(); +} + +void EventBasedStatusReportingService::Shutdown() { + ArcAppListPrefs* arc_app_prefs = ArcAppListPrefs::Get(context_); + // arc_app_prefs may not available in some browser tests. + if (!arc_app_prefs) + return; + arc_app_prefs->RemoveObserver(this); +} + +} // namespace chromeos
diff --git a/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service.h b/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service.h new file mode 100644 index 0000000..653f726e --- /dev/null +++ b/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service.h
@@ -0,0 +1,42 @@ +// 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. + +#ifndef CHROME_BROWSER_CHROMEOS_CHILD_ACCOUNTS_EVENT_BASED_STATUS_REPORTING_SERVICE_H_ +#define CHROME_BROWSER_CHROMEOS_CHILD_ACCOUNTS_EVENT_BASED_STATUS_REPORTING_SERVICE_H_ + +#include "base/macros.h" +#include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" +#include "components/keyed_service/core/keyed_service.h" + +namespace content { +class BrowserContext; +} + +namespace chromeos { + +// Requests status report when events relevant to supervision features happen. +class EventBasedStatusReportingService : public KeyedService, + public ArcAppListPrefs::Observer { + public: + explicit EventBasedStatusReportingService(content::BrowserContext* context); + ~EventBasedStatusReportingService() override; + + // ArcAppListPrefs::Observer: + void OnPackageInstalled( + const arc::mojom::ArcPackageInfo& package_info) override; + void OnPackageModified( + const arc::mojom::ArcPackageInfo& package_info) override; + + private: + // KeyedService: + void Shutdown() override; + + content::BrowserContext* const context_; + + DISALLOW_COPY_AND_ASSIGN(EventBasedStatusReportingService); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_CHILD_ACCOUNTS_EVENT_BASED_STATUS_REPORTING_SERVICE_H_
diff --git a/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service_factory.cc b/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service_factory.cc new file mode 100644 index 0000000..254c8eea --- /dev/null +++ b/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service_factory.cc
@@ -0,0 +1,46 @@ +// 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. + +#include "chrome/browser/chromeos/child_accounts/event_based_status_reporting_service_factory.h" + +#include "chrome/browser/chromeos/child_accounts/consumer_status_reporting_service_factory.h" +#include "chrome/browser/chromeos/child_accounts/event_based_status_reporting_service.h" +#include "chrome/browser/ui/app_list/arc/arc_app_list_prefs_factory.h" +#include "components/keyed_service/content/browser_context_dependency_manager.h" + +namespace chromeos { + +// static +EventBasedStatusReportingService* +EventBasedStatusReportingServiceFactory::GetForBrowserContext( + content::BrowserContext* context) { + return static_cast<EventBasedStatusReportingService*>( + GetInstance()->GetServiceForBrowserContext(context, true)); +} + +// static +EventBasedStatusReportingServiceFactory* +EventBasedStatusReportingServiceFactory::GetInstance() { + static base::NoDestructor<EventBasedStatusReportingServiceFactory> factory; + return factory.get(); +} + +EventBasedStatusReportingServiceFactory:: + EventBasedStatusReportingServiceFactory() + : BrowserContextKeyedServiceFactory( + "EventBasedStatusReportingServiceFactory", + BrowserContextDependencyManager::GetInstance()) { + DependsOn(ConsumerStatusReportingServiceFactory::GetInstance()); + DependsOn(ArcAppListPrefsFactory::GetInstance()); +} + +EventBasedStatusReportingServiceFactory:: + ~EventBasedStatusReportingServiceFactory() = default; + +KeyedService* EventBasedStatusReportingServiceFactory::BuildServiceInstanceFor( + content::BrowserContext* context) const { + return new EventBasedStatusReportingService(context); +} + +} // namespace chromeos
diff --git a/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service_factory.h b/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service_factory.h new file mode 100644 index 0000000..fce832a --- /dev/null +++ b/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service_factory.h
@@ -0,0 +1,45 @@ +// 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. + +#ifndef CHROME_BROWSER_CHROMEOS_CHILD_ACCOUNTS_EVENT_BASED_STATUS_REPORTING_SERVICE_FACTORY_H_ +#define CHROME_BROWSER_CHROMEOS_CHILD_ACCOUNTS_EVENT_BASED_STATUS_REPORTING_SERVICE_FACTORY_H_ + +#include "base/macros.h" +#include "base/no_destructor.h" +#include "components/keyed_service/content/browser_context_keyed_service_factory.h" + +namespace content { +class BrowserContext; +} + +namespace chromeos { +class EventBasedStatusReportingService; + +// Singleton that owns all EventBasedStatusReportingService and associates +// them with BrowserContexts. Listens for the BrowserContext's destruction +// notification and cleans up the associated EventBasedStatusReportingService. +class EventBasedStatusReportingServiceFactory + : public BrowserContextKeyedServiceFactory { + public: + static EventBasedStatusReportingService* GetForBrowserContext( + content::BrowserContext* context); + + static EventBasedStatusReportingServiceFactory* GetInstance(); + + private: + friend class base::NoDestructor<EventBasedStatusReportingServiceFactory>; + + EventBasedStatusReportingServiceFactory(); + ~EventBasedStatusReportingServiceFactory() override; + + // BrowserContextKeyedServiceFactory: + KeyedService* BuildServiceInstanceFor( + content::BrowserContext* context) const override; + + DISALLOW_COPY_AND_ASSIGN(EventBasedStatusReportingServiceFactory); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_CHILD_ACCOUNTS_EVENT_BASED_STATUS_REPORTING_SERVICE_FACTORY_H_
diff --git a/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service_unittest.cc b/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service_unittest.cc new file mode 100644 index 0000000..ffd6e63 --- /dev/null +++ b/chrome/browser/chromeos/child_accounts/event_based_status_reporting_service_unittest.cc
@@ -0,0 +1,119 @@ +// 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. + +#include "chrome/browser/chromeos/child_accounts/event_based_status_reporting_service.h" + +#include <memory> + +#include "base/macros.h" +#include "chrome/browser/chromeos/child_accounts/consumer_status_reporting_service.h" +#include "chrome/browser/chromeos/child_accounts/consumer_status_reporting_service_factory.h" +#include "chrome/browser/supervised_user/supervised_user_constants.h" +#include "chrome/browser/ui/app_list/arc/arc_app_test.h" +#include "chrome/test/base/testing_profile.h" +#include "components/arc/common/app.mojom.h" +#include "components/keyed_service/core/keyed_service.h" +#include "content/public/test/test_browser_thread_bundle.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace chromeos { + +namespace { + +class TestingConsumerStatusReportingService + : public ConsumerStatusReportingService { + public: + explicit TestingConsumerStatusReportingService( + content::BrowserContext* context) + : ConsumerStatusReportingService(context) {} + ~TestingConsumerStatusReportingService() override = default; + + void RequestImmediateStatusReport() override { performed_status_reports_++; } + int performed_status_reports() const { return performed_status_reports_; } + + private: + int performed_status_reports_ = 0; + + DISALLOW_COPY_AND_ASSIGN(TestingConsumerStatusReportingService); +}; + +std::unique_ptr<KeyedService> CreateTestingConsumerStatusReportingService( + content::BrowserContext* browser_context) { + return std::unique_ptr<KeyedService>( + new TestingConsumerStatusReportingService(browser_context)); +} + +} // namespace + +class EventBasedStatusReportingServiceTest : public testing::Test { + protected: + EventBasedStatusReportingServiceTest() = default; + ~EventBasedStatusReportingServiceTest() override = default; + + void SetUp() override { + profile_.SetSupervisedUserId(supervised_users::kChildAccountSUID); + arc_test_.SetUp(profile()); + ConsumerStatusReportingServiceFactory::GetInstance()->SetTestingFactory( + profile(), + base::BindRepeating(&CreateTestingConsumerStatusReportingService)); + ConsumerStatusReportingService* consumer_status_reporting_service = + ConsumerStatusReportingServiceFactory::GetForBrowserContext(profile()); + test_consumer_status_reporting_service_ = + static_cast<TestingConsumerStatusReportingService*>( + consumer_status_reporting_service); + } + + void TearDown() override { arc_test_.TearDown(); } + + arc::mojom::AppHost* app_host() { return arc_test_.arc_app_list_prefs(); } + Profile* profile() { return &profile_; } + TestingConsumerStatusReportingService* + test_consumer_status_reporting_service() { + return test_consumer_status_reporting_service_; + } + + private: + content::TestBrowserThreadBundle thread_bundle_; + ArcAppTest arc_test_; + TestingProfile profile_; + TestingConsumerStatusReportingService* + test_consumer_status_reporting_service_; + + DISALLOW_COPY_AND_ASSIGN(EventBasedStatusReportingServiceTest); +}; + +TEST_F(EventBasedStatusReportingServiceTest, ReportWhenAppInstall) { + EventBasedStatusReportingService service(profile()); + + ASSERT_EQ( + 0, test_consumer_status_reporting_service()->performed_status_reports()); + app_host()->OnPackageAdded(arc::mojom::ArcPackageInfo::New()); + EXPECT_EQ( + 1, test_consumer_status_reporting_service()->performed_status_reports()); +} + +TEST_F(EventBasedStatusReportingServiceTest, ReportWhenAppUpdate) { + EventBasedStatusReportingService service(profile()); + + ASSERT_EQ( + 0, test_consumer_status_reporting_service()->performed_status_reports()); + app_host()->OnPackageModified(arc::mojom::ArcPackageInfo::New()); + EXPECT_EQ( + 1, test_consumer_status_reporting_service()->performed_status_reports()); +} + +TEST_F(EventBasedStatusReportingServiceTest, ReportForMultipleEvents) { + EventBasedStatusReportingService service(profile()); + + ASSERT_EQ( + 0, test_consumer_status_reporting_service()->performed_status_reports()); + app_host()->OnPackageAdded(arc::mojom::ArcPackageInfo::New()); + EXPECT_EQ( + 1, test_consumer_status_reporting_service()->performed_status_reports()); + app_host()->OnPackageModified(arc::mojom::ArcPackageInfo::New()); + EXPECT_EQ( + 2, test_consumer_status_reporting_service()->performed_status_reports()); +} + +} // namespace chromeos
diff --git a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_signin_chromeos.cc b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_signin_chromeos.cc index 85a7027d..9dff063 100644 --- a/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_signin_chromeos.cc +++ b/chrome/browser/chromeos/login/easy_unlock/easy_unlock_service_signin_chromeos.cc
@@ -382,6 +382,10 @@ // Only record metrics for users who have enabled the feature. if (IsEnabled()) { + if (will_authenticate_using_easy_unlock()) { + SmartLockMetricsRecorder::RecordAuthResultSignInSuccess(); + } + EasyUnlockAuthEvent event = GetPasswordAuthEvent(); if (event == PASSWORD_ENTRY_PHONE_LOCKED || event == PASSWORD_ENTRY_PHONE_NOT_LOCKABLE ||
diff --git a/chrome/browser/chromeos/login/users/chrome_user_manager_impl.cc b/chrome/browser/chromeos/login/users/chrome_user_manager_impl.cc index 5bcf857..ac8676e 100644 --- a/chrome/browser/chromeos/login/users/chrome_user_manager_impl.cc +++ b/chrome/browser/chromeos/login/users/chrome_user_manager_impl.cc
@@ -128,11 +128,6 @@ // session by default. constexpr bool kManagedSessionEnabledByDefault = true; -bool FakeOwnership() { - return base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kStubCrosSettings); -} - std::string FullyCanonicalize(const std::string& email) { return gaia::CanonicalizeEmail(gaia::SanitizeEmail(email)); } @@ -864,13 +859,6 @@ MaybeStartBluetoothLogging(account_id); - if (FakeOwnership()) { - std::string owner_email; - chromeos::CrosSettings::Get()->GetString(chromeos::kDeviceOwner, - &owner_email); - if (owner_email == account_id.GetUserEmail()) - SetOwnerId(account_id); - } GetUserImageManager(account_id)->UserLoggedIn(IsCurrentUserNew(), false); WallpaperControllerClient::Get()->ShowUserWallpaper(account_id);
diff --git a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos_factory.cc b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos_factory.cc index 456e353..0e51a3a1 100644 --- a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos_factory.cc +++ b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos_factory.cc
@@ -12,7 +12,6 @@ #include "chrome/browser/chromeos/settings/device_settings_service.h" #include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h" #include "chrome/browser/profiles/profile.h" -#include "chromeos/constants/chromeos_switches.h" #include "chromeos/dbus/constants/dbus_paths.h" #include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/ownership/owner_key_util.h" @@ -97,15 +96,6 @@ return nullptr; } - // TODO(olsen): Delete this code once no tests use kStubCrosSettings switch. - // See http://crbug.com/909635 - if (base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kStubCrosSettings) && - g_stub_cros_settings_provider_for_testing_ == nullptr) { - g_stub_cros_settings_provider_for_testing_ = - CrosSettings::Get()->stubbed_provider_for_test(); - } - // If g_stub_cros_settings_provider_for_testing_ is set, we treat the current // user as the owner, and write settings directly to the stubbed provider. // This is done using the FakeOwnerSettingsService.
diff --git a/chrome/browser/chromeos/profiles/profile_helper.cc b/chrome/browser/chromeos/profiles/profile_helper.cc index 919f28f..63d60d0 100644 --- a/chrome/browser/chromeos/profiles/profile_helper.cc +++ b/chrome/browser/chromeos/profiles/profile_helper.cc
@@ -198,11 +198,6 @@ // static bool ProfileHelper::IsOwnerProfile(const Profile* profile) { - if (base::CommandLine::ForCurrentProcess()->HasSwitch( - chromeos::switches::kStubCrosSettings)) { - return true; - } - if (!profile) return false; const user_manager::User* user =
diff --git a/chrome/browser/chromeos/settings/cros_settings.cc b/chrome/browser/chromeos/settings/cros_settings.cc index 361b8e3..a2e334b 100644 --- a/chrome/browser/chromeos/settings/cros_settings.cc +++ b/chrome/browser/chromeos/settings/cros_settings.cc
@@ -13,7 +13,6 @@ #include "base/values.h" #include "chrome/browser/chromeos/settings/device_settings_provider.h" #include "chrome/browser/chromeos/settings/device_settings_service.h" -#include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h" #include "chromeos/constants/chromeos_switches.h" #include "chromeos/settings/cros_settings_names.h" #include "chromeos/settings/system_settings_provider.h" @@ -99,25 +98,8 @@ // This is safe since |this| is never deleted. base::Unretained(this))); - base::CommandLine* commandLine = base::CommandLine::ForCurrentProcess(); - if (commandLine->HasSwitch(switches::kStubCrosSettings)) { - std::unique_ptr<StubCrosSettingsProvider> stubbed_provider = - std::make_unique<StubCrosSettingsProvider>(notify_cb); - stubbed_provider_ptr_ = stubbed_provider.get(); - // When kStubCrosSettings is set, then kLoginUser is treated as the device - // owner (if it is also set): - if (commandLine->HasSwitch(switches::kLoginUser)) { - stubbed_provider->Set( - kDeviceOwner, - base::Value(commandLine->GetSwitchValueASCII(switches::kLoginUser))); - } - AddSettingsProvider(std::move(stubbed_provider)); - - } else { - AddSettingsProvider(std::make_unique<DeviceSettingsProvider>( - notify_cb, device_settings_service, local_state)); - } - // System settings are not mocked currently. + AddSettingsProvider(std::make_unique<DeviceSettingsProvider>( + notify_cb, device_settings_service, local_state)); AddSettingsProvider(std::make_unique<SystemSettingsProvider>(notify_cb)); }
diff --git a/chrome/browser/chromeos/settings/cros_settings.h b/chrome/browser/chromeos/settings/cros_settings.h index 1dc1df9..efc8d79 100644 --- a/chrome/browser/chromeos/settings/cros_settings.h +++ b/chrome/browser/chromeos/settings/cros_settings.h
@@ -28,7 +28,6 @@ namespace chromeos { class DeviceSettingsService; -class StubCrosSettingsProvider; // This class manages per-device/global settings. class CrosSettings { @@ -140,12 +139,6 @@ // Returns the provider that handles settings with the |path| or prefix. CrosSettingsProvider* GetProvider(const std::string& path) const; - // Returns the StubCrosSettingsProvider. Returns |nullptr| unless the - // kStubCrosSettings switch is set, which is only true during testing. - StubCrosSettingsProvider* stubbed_provider_for_test() const { - return stubbed_provider_ptr_; - } - private: friend class CrosSettingsTest; @@ -155,9 +148,6 @@ // List of ChromeOS system settings providers. std::vector<std::unique_ptr<CrosSettingsProvider>> providers_; - // A stubbed provider - only used if the kStubCrosSettings switch is set. - StubCrosSettingsProvider* stubbed_provider_ptr_ = nullptr; - // A map from settings names to a list of observers. Observers get fired in // the order they are added. std::map<std::string, std::unique_ptr<base::CallbackList<void(void)>>>
diff --git a/chrome/browser/chromeos/settings/scoped_cros_settings_test_helper.cc b/chrome/browser/chromeos/settings/scoped_cros_settings_test_helper.cc index 0a051387..1de7d5cc 100644 --- a/chrome/browser/chromeos/settings/scoped_cros_settings_test_helper.cc +++ b/chrome/browser/chromeos/settings/scoped_cros_settings_test_helper.cc
@@ -42,14 +42,11 @@ void ScopedCrosSettingsTestHelper::ReplaceDeviceSettingsProviderWithStub() { CHECK(CrosSettings::IsInitialized()); - CrosSettings* const cros_settings = CrosSettings::Get(); - - // If CrosSettings is already using a stub, then we shouldn't be replacing it - // with a different stub - that would be confusing and unnecessary. - CHECK(!cros_settings->stubbed_provider_for_test()); - // And, this function shouldn't be called twice either, for the same reason: + // This function shouldn't be called twice. CHECK(!real_settings_provider_); + CrosSettings* const cros_settings = CrosSettings::Get(); + // TODO(olsen): This could be simplified if DeviceSettings and CrosSettings // were the same thing, which they nearly are, except for 3 timezone settings. CrosSettingsProvider* real_settings_provider = @@ -74,14 +71,6 @@ } StubCrosSettingsProvider* ScopedCrosSettingsTestHelper::GetStubbedProvider() { - // If CrosSettings was already initialized with kStubCrosSettings, then - // we use the StubCrosSettingsProvider that was already initialized: - if (CrosSettings::IsInitialized() && - CrosSettings::Get()->stubbed_provider_for_test()) { - return CrosSettings::Get()->stubbed_provider_for_test(); - } - // Otherwise, we use this one - it has to be explicitly swapped in using - // ReplaceDeviceSettingsProviderWithStub() however. return stub_settings_provider_ptr_; }
diff --git a/chrome/browser/chromeos/settings/scoped_cros_settings_test_helper.h b/chrome/browser/chromeos/settings/scoped_cros_settings_test_helper.h index 85cf77f..8f0513e 100644 --- a/chrome/browser/chromeos/settings/scoped_cros_settings_test_helper.h +++ b/chrome/browser/chromeos/settings/scoped_cros_settings_test_helper.h
@@ -49,11 +49,8 @@ std::unique_ptr<FakeOwnerSettingsService> CreateOwnerSettingsService( Profile* profile); - // Returns the stubbed CrosSettingsProvider - either the one that was - // initialized by |CrosSettings::Initialize()| (that is, if the switch - // |kStubCrosSettings| is set). Or, if CrosSettings was not initialized with - // a stub, this returns a stub that is only swapped into |CrosSettings| once - // |ReplaceDeviceSettingsProviderWithStub()| is called. + // Returns the stubbed CrosSettingsProvider - the one that is swapped into + // |CrosSettings| once |ReplaceDeviceSettingsProviderWithStub()| is called. // Note that if you want to test the real DeviceSettingsProvider in your test // (not a stub), you should set the settings using the OwnerSettingsService // which uses the current user's private key to sign the settings. @@ -61,8 +58,7 @@ // These methods simply call the appropriate method on |GetStubbedProvider()|. // So if you use them, you need to make sure that a stubbed provider is used - // in your test - either by setting |kStubCrosSettings| switch or by calling - // |ReplaceDeviceSettingsProviderWithStub()|. + // in your test by calling |ReplaceDeviceSettingsProviderWithStub()|. void SetTrustedStatus(CrosSettingsProvider::TrustedStatus status); void SetCurrentUserIsOwner(bool owner); void Set(const std::string& path, const base::Value& in_value);
diff --git a/chrome/browser/component_updater/vr_assets_component_installer.cc b/chrome/browser/component_updater/vr_assets_component_installer.cc index 60d3786a..e37e7ad 100644 --- a/chrome/browser/component_updater/vr_assets_component_installer.cc +++ b/chrome/browser/component_updater/vr_assets_component_installer.cc
@@ -20,7 +20,7 @@ #include "build/build_config.h" #include "chrome/browser/vr/assets_loader.h" #include "chrome/browser/vr/metrics/metrics_helper.h" -#include "chrome/browser/vr/vr_features.h" +#include "chrome/browser/vr/vr_buildflags.h" #include "components/component_updater/component_updater_paths.h" #include "components/component_updater/component_updater_service.h" #include "components/crx_file/id_util.h"
diff --git a/chrome/browser/data_use_measurement/page_load_capping/page_load_capping_browsertest.cc b/chrome/browser/data_use_measurement/page_load_capping/page_load_capping_browsertest.cc index 61eba02..fbece38 100644 --- a/chrome/browser/data_use_measurement/page_load_capping/page_load_capping_browsertest.cc +++ b/chrome/browser/data_use_measurement/page_load_capping/page_load_capping_browsertest.cc
@@ -23,6 +23,7 @@ #include "chrome/common/pref_names.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" +#include "components/data_reduction_proxy/core/common/data_reduction_proxy_features.h" #include "components/infobars/core/confirm_infobar_delegate.h" #include "components/infobars/core/infobar.h" #include "components/infobars/core/infobar_delegate.h" @@ -145,9 +146,6 @@ private: void SetUp() override { - std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); - scoped_refptr<base::FieldTrial> trial = - base::FieldTrialList::CreateFieldTrial("TrialName1", "GroupName1"); std::map<std::string, std::string> feature_parameters = { {"PageCapMiB", "0"}, {"PageFuzzingKiB", "0"}, @@ -155,15 +153,12 @@ {"InfoBarTimeoutInMilliseconds", "500000"}}; ChangeParams(&feature_parameters); - base::FieldTrialParamAssociator::GetInstance()->AssociateFieldTrialParams( - "TrialName1", "GroupName1", feature_parameters); - - feature_list->RegisterFieldTrialOverride( - data_use_measurement::page_load_capping::features::kDetectingHeavyPages - .name, - base::FeatureList::OVERRIDE_ENABLE_FEATURE, trial.get()); - - scoped_feature_list_.InitWithFeatureList(std::move(feature_list)); + scoped_parameterized_feature_list_.InitAndEnableFeatureWithParameters( + data_use_measurement::page_load_capping::features::kDetectingHeavyPages, + feature_parameters); + scoped_feature_list_.InitAndEnableFeature( + data_reduction_proxy::features:: + kDataReductionProxyEnabledWithNetworkService); https_test_server_.RegisterRequestHandler(base::BindRepeating( &PageLoadCappingBrowserTest::HandleRequest, base::Unretained(this))); @@ -204,6 +199,7 @@ std::unique_ptr<base::RunLoop> run_loop_; base::test::ScopedFeatureList scoped_feature_list_; + base::test::ScopedFeatureList scoped_parameterized_feature_list_; }; IN_PROC_BROWSER_TEST_F(PageLoadCappingBrowserTest, PageLoadCappingBlocksLoads) {
diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn index fdaadcd..635e58d 100644 --- a/chrome/browser/extensions/BUILD.gn +++ b/chrome/browser/extensions/BUILD.gn
@@ -958,6 +958,7 @@ "//chromeos/attestation", "//chromeos/components/proximity_auth", "//chromeos/cryptohome", + "//chromeos/dbus", "//chromeos/disks", "//chromeos/login/login_state", "//chromeos/services/ime/public/mojom",
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 2fc2cba5c..0fa05a01 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -724,6 +724,11 @@ "expiry_milestone": 73 }, { + "name": "enable-android-night-mode", + "owners": [ "huayinz", "twellington", "tedchoc" ], + "expiry_milestone": 76 + }, + { "name": "enable-android-pay-integration-v1", // "owners": [ "your-team" ], "expiry_milestone": 76
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index c7cd524..d320a6b 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -2716,6 +2716,14 @@ const char kWebXrRenderPathChoiceSharedBufferDescription[] = "SharedBuffer (Android O+)"; +#if BUILDFLAG(ENABLE_ANDROID_NIGHT_MODE) + +const char kAndroidNightModeName[] = "Enable night mode based on user settings"; +const char kAndroidNightModeDescription[] = + "If enabled, user can enable night mode through settings."; + +#endif // BUILDFLAG(ENABLE_ANDROID_NIGHT_MODE) + // Non-Android ----------------------------------------------------------------- #else // !defined(OS_ANDROID)
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index bc71f2a..278d4b4 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -16,6 +16,10 @@ #include "media/media_buildflags.h" #include "ppapi/buildflags/buildflags.h" +#if defined(OS_ANDROID) +#include "ui/android/buildflags.h" +#endif // defined(OS_ANDROID) + // This file declares strings used in chrome://flags. These messages are not // translated, because instead of end-users they target Chromium developers and // testers. See https://crbug.com/587272 and https://crbug.com/703134 for more @@ -1614,6 +1618,13 @@ extern const char kWebXrRenderPathChoiceGpuFenceDescription[]; extern const char kWebXrRenderPathChoiceSharedBufferDescription[]; +#if BUILDFLAG(ENABLE_ANDROID_NIGHT_MODE) + +extern const char kAndroidNightModeName[]; +extern const char kAndroidNightModeDescription[]; + +#endif // BUILDFLAG(ENABLE_ANDROID_NIGHT_MODE) + // Non-Android ---------------------------------------------------------------- #else // !defined(OS_ANDROID)
diff --git a/chrome/browser/media/media_engagement_score_unittest.cc b/chrome/browser/media/media_engagement_score_unittest.cc index c5434394..5cbd764c 100644 --- a/chrome/browser/media/media_engagement_score_unittest.cc +++ b/chrome/browser/media/media_engagement_score_unittest.cc
@@ -159,6 +159,10 @@ void OverrideFieldTrial(int min_visits, double lower_threshold, double upper_threshold) { + field_trial_list_.reset(); + field_trial_list_ = std::make_unique<base::FieldTrialList>(nullptr); + base::FieldTrialParamAssociator::GetInstance()->ClearAllParamsForTesting(); + std::map<std::string, std::string> params; params[MediaEngagementScore::kScoreMinVisitsParamName] = std::to_string(min_visits); @@ -167,23 +171,9 @@ params[MediaEngagementScore::kHighScoreUpperThresholdParamName] = std::to_string(upper_threshold); - field_trial_list_.reset(); - field_trial_list_.reset(new base::FieldTrialList(nullptr)); - base::FieldTrialParamAssociator::GetInstance()->ClearAllParamsForTesting(); - - const std::string kTrialName = "TrialName"; - const std::string kGroupName = "GroupName"; - - base::AssociateFieldTrialParams(kTrialName, kGroupName, params); - base::FieldTrial* field_trial = - base::FieldTrialList::CreateFieldTrial(kTrialName, kGroupName); - - std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); - feature_list->RegisterFieldTrialOverride( - media::kMediaEngagementBypassAutoplayPolicies.name, - base::FeatureList::OVERRIDE_ENABLE_FEATURE, field_trial); - base::FeatureList::ClearInstanceForTesting(); - scoped_feature_list_.InitWithFeatureList(std::move(feature_list)); + scoped_feature_list_ = std::make_unique<base::test::ScopedFeatureList>(); + scoped_feature_list_->InitAndEnableFeatureWithParameters( + media::kMediaEngagementBypassAutoplayPolicies, params); std::map<std::string, std::string> actual_params; EXPECT_TRUE(base::GetFieldTrialParamsByFeature( @@ -194,7 +184,7 @@ } private: - base::test::ScopedFeatureList scoped_feature_list_; + std::unique_ptr<base::test::ScopedFeatureList> scoped_feature_list_; std::unique_ptr<base::FieldTrialList> field_trial_list_; };
diff --git a/chrome/browser/net/netinfo_network_quality_estimator_holdback_browsertest.cc b/chrome/browser/net/netinfo_network_quality_estimator_holdback_browsertest.cc index 5134dcb..2579320 100644 --- a/chrome/browser/net/netinfo_network_quality_estimator_holdback_browsertest.cc +++ b/chrome/browser/net/netinfo_network_quality_estimator_holdback_browsertest.cc
@@ -101,27 +101,12 @@ } void ConfigureHoldbackExperiment() { - base::FieldTrialParamAssociator::GetInstance()->ClearAllParamsForTesting(); - const std::string kTrialName = "TrialFoo"; - const std::string kGroupName = "GroupFoo"; // Value not used - - scoped_refptr<base::FieldTrial> trial = - base::FieldTrialList::CreateFieldTrial(kTrialName, kGroupName); - std::map<std::string, std::string> params; - if (GetParam()) { params["web_effective_connection_type_override"] = "2G"; } - ASSERT_TRUE( - base::FieldTrialParamAssociator::GetInstance() - ->AssociateFieldTrialParams(kTrialName, kGroupName, params)); - - std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); - feature_list->RegisterFieldTrialOverride( - features::kNetworkQualityEstimatorWebHoldback.name, - base::FeatureList::OVERRIDE_ENABLE_FEATURE, trial.get()); - scoped_feature_list_.InitWithFeatureList(std::move(feature_list)); + scoped_feature_list_.InitAndEnableFeatureWithParameters( + features::kNetworkQualityEstimatorWebHoldback, params); } // Simulates a network quality change.
diff --git a/chrome/browser/offline_pages/offline_page_mhtml_archiver.cc b/chrome/browser/offline_pages/offline_page_mhtml_archiver.cc index e63f91b..bf81fbf 100644 --- a/chrome/browser/offline_pages/offline_page_mhtml_archiver.cc +++ b/chrome/browser/offline_pages/offline_page_mhtml_archiver.cc
@@ -22,6 +22,7 @@ #include "components/offline_pages/core/archive_validator.h" #include "components/offline_pages/core/model/offline_page_model_utils.h" #include "components/offline_pages/core/offline_clock.h" +#include "components/offline_pages/core/offline_page_feature.h" #include "components/security_state/core/security_state.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/navigation_entry.h" @@ -124,6 +125,8 @@ params.remove_popup_overlay = create_archive_params.remove_popup_overlay; params.use_page_problem_detectors = create_archive_params.use_page_problem_detectors; + params.use_mojo_for_mhtml_serialization = + IsOnTheFlyMhtmlHashComputationEnabled(); web_contents->GenerateMHTML( params,
diff --git a/chrome/browser/pdf/pdf_extension_test.cc b/chrome/browser/pdf/pdf_extension_test.cc index 17c41cd..aca8c1c 100644 --- a/chrome/browser/pdf/pdf_extension_test.cc +++ b/chrome/browser/pdf/pdf_extension_test.cc
@@ -662,7 +662,8 @@ } #if defined(OS_CHROMEOS) -IN_PROC_BROWSER_TEST_F(PDFAnnotationsTest, AnnotationsFeatureEnabled) { +// TODO(https://crbug.com/920684): Test is flaky. +IN_PROC_BROWSER_TEST_F(PDFAnnotationsTest, DISABLED_AnnotationsFeatureEnabled) { RunTestsInFile("annotations_feature_enabled_test.js", "test.pdf"); } IN_PROC_BROWSER_TEST_F(PDFExtensionTest, AnnotationsFeatureDisabled) {
diff --git a/chrome/browser/permissions/permission_context_base_unittest.cc b/chrome/browser/permissions/permission_context_base_unittest.cc index 3a0dfeb..137681c 100644 --- a/chrome/browser/permissions/permission_context_base_unittest.cc +++ b/chrome/browser/permissions/permission_context_base_unittest.cc
@@ -14,6 +14,7 @@ #include "base/feature_list.h" #include "base/macros.h" #include "base/metrics/field_trial.h" +#include "base/metrics/field_trial_params.h" #include "base/run_loop.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/mock_entropy_provider.h" @@ -47,8 +48,6 @@ const char* const kPermissionsKillSwitchBlockedValue = PermissionContextBase::kPermissionsKillSwitchBlockedValue; const char kPermissionsKillSwitchTestGroup[] = "TestGroup"; -const char* const kPromptGroupName = kPermissionsKillSwitchTestGroup; -const char kPromptTrialName[] = "PermissionPromptsUX"; class TestPermissionContext : public PermissionContextBase { public: @@ -391,27 +390,16 @@ SetUpUrl(url); base::HistogramTester histograms; - // Set up the custom parameter and custom value. - base::FieldTrialList field_trials(nullptr); - base::FieldTrial* trial = base::FieldTrialList::CreateFieldTrial( - kPromptTrialName, kPromptGroupName); std::map<std::string, std::string> params; params[PermissionDecisionAutoBlocker::kPromptDismissCountKey] = "5"; - ASSERT_TRUE(variations::AssociateVariationParams(kPromptTrialName, - kPromptGroupName, params)); - - std::unique_ptr<base::FeatureList> feature_list = - std::make_unique<base::FeatureList>(); - feature_list->RegisterFieldTrialOverride( - features::kBlockPromptsIfDismissedOften.name, - base::FeatureList::OVERRIDE_ENABLE_FEATURE, trial); - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitWithFeatureList(std::move(feature_list)); + scoped_feature_list.InitAndEnableFeatureWithParameters( + features::kBlockPromptsIfDismissedOften, params); - EXPECT_EQ(base::FeatureList::GetFieldTrial( - features::kBlockPromptsIfDismissedOften), - trial); + std::map<std::string, std::string> actual_params; + EXPECT_TRUE(base::GetFieldTrialParamsByFeature( + features::kBlockPromptsIfDismissedOften, &actual_params)); + EXPECT_EQ(params, actual_params); { std::map<std::string, std::string> actual_params;
diff --git a/chrome/browser/previews/previews_infobar_delegate_unittest.cc b/chrome/browser/previews/previews_infobar_delegate_unittest.cc index dba766f6..550d431 100644 --- a/chrome/browser/previews/previews_infobar_delegate_unittest.cc +++ b/chrome/browser/previews/previews_infobar_delegate_unittest.cc
@@ -243,18 +243,8 @@ field_trial_list_.reset(new base::FieldTrialList(nullptr)); base::FieldTrialParamAssociator::GetInstance()->ClearAllParamsForTesting(); - const std::string kTrialName = "TrialName"; - const std::string kGroupName = "GroupName"; - - base::AssociateFieldTrialParams(kTrialName, kGroupName, variation_params); - base::FieldTrial* field_trial = - base::FieldTrialList::CreateFieldTrial(kTrialName, kGroupName); - - std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); - feature_list->RegisterFieldTrialOverride( - previews::features::kStalePreviewsTimestamp.name, - base::FeatureList::OVERRIDE_ENABLE_FEATURE, field_trial); - scoped_feature_list_.InitWithFeatureList(std::move(feature_list)); + scoped_feature_list_.InitAndEnableFeatureWithParameters( + previews::features::kStalePreviewsTimestamp, variation_params); } void TestStalePreviews(
diff --git a/chrome/browser/previews/previews_lite_page_browsertest.cc b/chrome/browser/previews/previews_lite_page_browsertest.cc index b56bbf4..3463388 100644 --- a/chrome/browser/previews/previews_lite_page_browsertest.cc +++ b/chrome/browser/previews/previews_lite_page_browsertest.cc
@@ -39,6 +39,7 @@ #include "components/content_settings/core/browser/cookie_settings.h" #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client_test_utils.h" #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h" +#include "components/data_reduction_proxy/core/common/data_reduction_proxy_features.h" #include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h" #include "components/data_reduction_proxy/proto/data_store.pb.h" #include "components/history/core/browser/history_service.h" @@ -198,41 +199,23 @@ base::Unretained(this))); ASSERT_TRUE(slow_http_server_->Start()); - std::unique_ptr<base::FeatureList> feature_list = - std::make_unique<base::FeatureList>(); - { - // The trial and group names are dummy values. - scoped_refptr<base::FieldTrial> trial = - base::FieldTrialList::CreateFieldTrial("TrialName1", "GroupName1"); - std::map<std::string, std::string> feature_parameters = { - {"previews_host", previews_server().spec()}, - {"blacklisted_path_suffixes", ".mp4,.jpg"}, - {"trigger_on_localhost", "true"}, - {"navigation_timeout_milliseconds", - use_timeout ? base::IntToString(kTimeoutMs) : "0"}, - {"control_group", is_control ? "true" : "false"}}; - base::FieldTrialParamAssociator::GetInstance()->AssociateFieldTrialParams( - "TrialName1", "GroupName1", feature_parameters); + std::map<std::string, std::string> feature_parameters = { + {"previews_host", previews_server().spec()}, + {"blacklisted_path_suffixes", ".mp4,.jpg"}, + {"trigger_on_localhost", "true"}, + {"navigation_timeout_milliseconds", + use_timeout ? base::IntToString(kTimeoutMs) : "0"}, + {"control_group", is_control ? "true" : "false"}}; - feature_list->RegisterFieldTrialOverride( - previews::features::kLitePageServerPreviews.name, - base::FeatureList::OVERRIDE_ENABLE_FEATURE, trial.get()); - } - { - // The trial and group names are dummy values. - scoped_refptr<base::FieldTrial> trial = - base::FieldTrialList::CreateFieldTrial("TrialName3", "GroupName3"); - feature_list->RegisterFieldTrialOverride( - previews::features::kPreviews.name, - base::FeatureList::OVERRIDE_ENABLE_FEATURE, trial.get()); - feature_list->RegisterFieldTrialOverride( - previews::features::kOptimizationHints.name, - base::FeatureList::OVERRIDE_ENABLE_FEATURE, trial.get()); - feature_list->RegisterFieldTrialOverride( - previews::features::kResourceLoadingHints.name, - base::FeatureList::OVERRIDE_ENABLE_FEATURE, trial.get()); - } - scoped_feature_list_.InitWithFeatureList(std::move(feature_list)); + scoped_parameterized_feature_list_.InitAndEnableFeatureWithParameters( + previews::features::kLitePageServerPreviews, feature_parameters); + + scoped_feature_list_.InitWithFeatures( + {previews::features::kPreviews, previews::features::kOptimizationHints, + previews::features::kResourceLoadingHints, + data_reduction_proxy::features:: + kDataReductionProxyEnabledWithNetworkService}, + {}); } void SetUpOnMainThread() override { @@ -648,6 +631,7 @@ return std::move(response); } + base::test::ScopedFeatureList scoped_parameterized_feature_list_; base::test::ScopedFeatureList scoped_feature_list_; std::unique_ptr<net::EmbeddedTestServer> previews_server_; std::unique_ptr<net::EmbeddedTestServer> https_server_; @@ -1209,39 +1193,6 @@ VerifyPreviewLoaded(); } -IN_PROC_BROWSER_TEST_F(PreviewsLitePageServerBrowserTest, - DISABLE_ON_WIN_MAC(LitePagePreviewsReferrer)) { - // Referrers should be copied across navigations unless the referrer is the - // lite page domain, in which case the referrer should not be set. - { - browser()->OpenURL(content::OpenURLParams( - HttpsLitePageURL(kSuccess), - content::Referrer(GURL("https://www.google.com"), - network::mojom::ReferrerPolicy::kDefault), - WindowOpenDisposition::CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, - false /* is_renderer_initiated */)); - VerifyPreviewLoaded(); - - content::NavigationEntry* entry = - GetWebContents()->GetController().GetLastCommittedEntry(); - EXPECT_EQ(entry->GetReferrer().url, GURL("https://www.google.com")); - } - - { - browser()->OpenURL(content::OpenURLParams( - HttpsLitePageURL(kSuccess), - content::Referrer(previews_server(), - network::mojom::ReferrerPolicy::kDefault), - WindowOpenDisposition::CURRENT_TAB, ui::PAGE_TRANSITION_TYPED, - false /* is_renderer_initiated */)); - VerifyPreviewLoaded(); - - content::NavigationEntry* entry = - GetWebContents()->GetController().GetLastCommittedEntry(); - EXPECT_EQ(entry->GetReferrer().url, content::Referrer().url); - } -} - class PreviewsLitePageServerTimeoutBrowserTest : public PreviewsLitePageServerBrowserTest { public:
diff --git a/chrome/browser/previews/previews_lite_page_navigation_throttle.cc b/chrome/browser/previews/previews_lite_page_navigation_throttle.cc index 41944a1..6fb9b2d 100644 --- a/chrome/browser/previews/previews_lite_page_navigation_throttle.cc +++ b/chrome/browser/previews/previews_lite_page_navigation_throttle.cc
@@ -101,10 +101,6 @@ url_params.frame_tree_node_id = handle->GetFrameTreeNodeId(); url_params.user_gesture = handle->HasUserGesture(); url_params.started_from_context_menu = handle->WasStartedFromContextMenu(); - - if (previews::IsLitePageRedirectPreviewDomain(handle->GetReferrer().url)) - url_params.referrer = content::Referrer(); - return url_params; }
diff --git a/chrome/browser/resources/chromeos/chromevox/chromevox/background/keymaps/next_keymap.json b/chrome/browser/resources/chromeos/chromevox/chromevox/background/keymaps/next_keymap.json index c6ee78a..544e308 100644 --- a/chrome/browser/resources/chromeos/chromevox/chromevox/background/keymaps/next_keymap.json +++ b/chrome/browser/resources/chromeos/chromevox/chromevox/background/keymaps/next_keymap.json
@@ -615,10 +615,11 @@ { "command": "dumpTree", "sequence": { - "cvoxModifier": true, - "keys": { - "keyCode": [68, 84] - } + "cvoxModifier": true, + "keys": { + "keyCode": [68, 84], + "ctrlKey": [true] + } } }, {
diff --git a/chrome/browser/resources/md_downloads/item.html b/chrome/browser/resources/md_downloads/item.html index 658d1ae0..7e14642 100644 --- a/chrome/browser/resources/md_downloads/item.html +++ b/chrome/browser/resources/md_downloads/item.html
@@ -258,7 +258,8 @@ right: initial; } - #pauseOrResume { + #pauseOrResume, + #dangerous .action-button { margin-inline-end: 8px; } </style>
diff --git a/chrome/browser/resources/settings/about_page/about_page.html b/chrome/browser/resources/settings/about_page/about_page.html index c64cae2..7590e6e 100644 --- a/chrome/browser/resources/settings/about_page/about_page.html +++ b/chrome/browser/resources/settings/about_page/about_page.html
@@ -90,40 +90,39 @@ } </if> </style> - <div> - <settings-section page-title="$i18n{aboutPageTitle}" section="about"> - <settings-animated-pages id="pages" section="about" - focus-config="[[focusConfig_]]"> - <div route-path="default"> - <div class="settings-box two-line"> - <img id="product-logo" on-click="onProductLogoTap_" - srcset="chrome://theme/current-channel-logo@1x 1x, - chrome://theme/current-channel-logo@2x 2x" - alt="$i18n{aboutProductLogoAlt}"> - <h1 class="product-title">$i18n{aboutProductTitle}</h1> - </div> - <div class="settings-box two-line"> - <!-- TODO(dpapad): Investigate why vulcanize does not handle well - a new line after "getThrobberSrcIfUpdating_(", causes incorrect - src URL --> - <!-- Set the icon from the iconset (when it's obsolete/EOL and - when update is done) or set the src (when it's updating). --> - <iron-icon - hidden="[[!shouldShowIcons_(showUpdateStatus_)]]" + <settings-section page-title="$i18n{aboutPageTitle}" section="about"> + <settings-animated-pages id="pages" section="about" + focus-config="[[focusConfig_]]"> + <div route-path="default"> + <div class="settings-box two-line"> + <img id="product-logo" on-click="onProductLogoTap_" + srcset="chrome://theme/current-channel-logo@1x 1x, + chrome://theme/current-channel-logo@2x 2x" + alt="$i18n{aboutProductLogoAlt}"> + <h1 class="product-title">$i18n{aboutProductTitle}</h1> + </div> + <div class="settings-box two-line"> + <!-- TODO(dpapad): Investigate why vulcanize does not handle well + a new line after "getThrobberSrcIfUpdating_(", causes incorrect + src URL --> + <!-- Set the icon from the iconset (when it's obsolete/EOL and + when update is done) or set the src (when it's updating). --> + <iron-icon + hidden="[[!shouldShowIcons_(showUpdateStatus_)]]" <if expr="not chromeos"> - icon$="[[getUpdateStatusIcon_( - obsoleteSystemInfo_, currentUpdateStatusEvent_)]]" - src="[[getThrobberSrcIfUpdating_(obsoleteSystemInfo_, currentUpdateStatusEvent_)]]"> + icon$="[[getUpdateStatusIcon_( + obsoleteSystemInfo_, currentUpdateStatusEvent_)]]" + src="[[getThrobberSrcIfUpdating_(obsoleteSystemInfo_, currentUpdateStatusEvent_)]]"> </if> <if expr="chromeos"> - icon$="[[getUpdateStatusIcon_( - hasEndOfLife_, currentUpdateStatusEvent_)]]" - src="[[getThrobberSrcIfUpdating_(hasEndOfLife_, currentUpdateStatusEvent_)]]"> + icon$="[[getUpdateStatusIcon_( + hasEndOfLife_, currentUpdateStatusEvent_)]]" + src="[[getThrobberSrcIfUpdating_(hasEndOfLife_, currentUpdateStatusEvent_)]]"> </if> - </iron-icon> - <div class="start padded"> - <div id="updateStatusMessage" hidden="[[!showUpdateStatus_]]"> - <div + </iron-icon> + <div class="start padded"> + <div id="updateStatusMessage" hidden="[[!showUpdateStatus_]]"> + <div <if expr="not chromeos"> inner-h-t-m-l="[[getUpdateStatusMessage_( currentUpdateStatusEvent_)]]"> @@ -132,166 +131,165 @@ inner-h-t-m-l="[[getUpdateStatusMessage_( currentUpdateStatusEvent_, targetChannel_)]]"> </if> - </div> - <a hidden$="[[!shouldShowLearnMoreLink_( - currentUpdateStatusEvent_)]]" target="_blank" - href="https://support.google.com/chrome?p=update_error"> - $i18n{learnMore} - </a> </div> + <a hidden$="[[!shouldShowLearnMoreLink_( + currentUpdateStatusEvent_)]]" target="_blank" + href="https://support.google.com/chrome?p=update_error"> + $i18n{learnMore} + </a> + </div> <if expr="not chromeos"> - <span id="deprecationWarning" - hidden="[[!obsoleteSystemInfo_.obsolete]]"> - $i18n{aboutObsoleteSystem} - <a href="$i18n{aboutObsoleteSystemURL}" target="_blank"> - $i18n{learnMore} - </a> - </span> -</if> -<if expr="chromeos"> - <div id="endOfLifeMessageContainer" hidden="[[!hasEndOfLife_]]"> - $i18n{endOfLifeMessage} - <a href="$i18n{endOfLifeLearnMoreURL}" target="_blank"> - $i18n{learnMore} - </a> - </div> -</if> - <div class="secondary">$i18n{aboutBrowserVersion}</div> - </div> - <div class="separator" hidden="[[!showButtonContainer_]]"></div> - <span id="buttonContainer" hidden="[[!showButtonContainer_]]"> - <paper-button id="relaunch" class="secondary-button" - hidden="[[!showRelaunch_]]" on-click="onRelaunchTap_"> - $i18n{aboutRelaunch} - </paper-button> -<if expr="chromeos"> - <paper-button id="relaunchAndPowerwash" class="secondary-button" - hidden="[[!showRelaunchAndPowerwash_]]" - on-click="onRelaunchAndPowerwashTap_"> - $i18n{aboutRelaunchAndPowerwash} - </paper-button> - <paper-button id="checkForUpdates" class="secondary-button" - hidden="[[!showCheckUpdates_]]" - on-click="onCheckUpdatesTap_"> - $i18n{aboutCheckForUpdates} - </paper-button> -</if> + <span id="deprecationWarning" + hidden="[[!obsoleteSystemInfo_.obsolete]]"> + $i18n{aboutObsoleteSystem} + <a href="$i18n{aboutObsoleteSystemURL}" target="_blank"> + $i18n{learnMore} + </a> </span> - </div> +</if> <if expr="chromeos"> - <div id="aboutTPMFirmwareUpdate" class="settings-box two-line" - hidden$="[[!showTPMFirmwareUpdateLineItem_]]" - on-click="onTPMFirmwareUpdateTap_" actionable> - <div class="start"> - <div>$i18n{aboutTPMFirmwareUpdateTitle}</div> - <div class="secondary"> - $i18n{aboutTPMFirmwareUpdateDescription} - <a href="$i18n{aboutTPMFirmwareUpdateLearnMoreURL}" - target="_blank" on-click="onLearnMoreTap_"> - $i18n{learnMore} - </a> - </div> - </div> - <paper-icon-button-light class="subpage-arrow"> - <button aria-labelledby="aboutTPMFirmwareUpdate"></button> - </paper-icon-button-light> + <div id="endOfLifeMessageContainer" hidden="[[!hasEndOfLife_]]"> + $i18n{endOfLifeMessage} + <a href="$i18n{endOfLifeLearnMoreURL}" target="_blank"> + $i18n{learnMore} + </a> + </div> +</if> + <div class="secondary">$i18n{aboutBrowserVersion}</div> </div> + <div class="separator" hidden="[[!showButtonContainer_]]"></div> + <span id="buttonContainer" hidden="[[!showButtonContainer_]]"> + <paper-button id="relaunch" class="secondary-button" + hidden="[[!showRelaunch_]]" on-click="onRelaunchTap_"> + $i18n{aboutRelaunch} + </paper-button> +<if expr="chromeos"> + <paper-button id="relaunchAndPowerwash" class="secondary-button" + hidden="[[!showRelaunchAndPowerwash_]]" + on-click="onRelaunchAndPowerwashTap_"> + $i18n{aboutRelaunchAndPowerwash} + </paper-button> + <paper-button id="checkForUpdates" class="secondary-button" + hidden="[[!showCheckUpdates_]]" + on-click="onCheckUpdatesTap_"> + $i18n{aboutCheckForUpdates} + </paper-button> +</if> + </span> + </div> +<if expr="chromeos"> + <div id="aboutTPMFirmwareUpdate" class="settings-box two-line" + hidden$="[[!showTPMFirmwareUpdateLineItem_]]" + on-click="onTPMFirmwareUpdateTap_" actionable> + <div class="start"> + <div>$i18n{aboutTPMFirmwareUpdateTitle}</div> + <div class="secondary"> + $i18n{aboutTPMFirmwareUpdateDescription} + <a href="$i18n{aboutTPMFirmwareUpdateLearnMoreURL}" + target="_blank" on-click="onLearnMoreTap_"> + $i18n{learnMore} + </a> + </div> + </div> + <paper-icon-button-light class="subpage-arrow"> + <button aria-labelledby="aboutTPMFirmwareUpdate"></button> + </paper-icon-button-light> + </div> </if> <if expr="_google_chrome and is_macosx"> - <template is="dom-if" if="[[!promoteUpdaterStatus_.hidden]]"> - <div id="promoteUpdater" class="settings-box" - disabled$="[[promoteUpdaterStatus_.disabled]]" - actionable$="[[promoteUpdaterStatus_.actionable]]" - on-click="onPromoteUpdaterTap_"> - <div class="start"> - [[promoteUpdaterStatus_.text]] - <a href="https://support.google.com/chrome/answer/95414" - target="_blank" id="updaterLearnMore" - on-click="onLearnMoreTap_"> - $i18n{learnMore} - </a> - </div> - <paper-icon-button-light class="subpage-arrow" - hidden="[[!promoteUpdaterStatus_.actionable]]"> - <button disabled="[[promoteUpdaterStatus_.disabled]]" - aria-label$="[[promoteUpdaterStatus_.text]]"> - </button> - </paper-icon-button-light> + <template is="dom-if" if="[[!promoteUpdaterStatus_.hidden]]"> + <div id="promoteUpdater" class="settings-box" + disabled$="[[promoteUpdaterStatus_.disabled]]" + actionable$="[[promoteUpdaterStatus_.actionable]]" + on-click="onPromoteUpdaterTap_"> + <div class="start"> + [[promoteUpdaterStatus_.text]] + <a href="https://support.google.com/chrome/answer/95414" + target="_blank" id="updaterLearnMore" + on-click="onLearnMoreTap_"> + $i18n{learnMore} + </a> </div> - </template> -</if> - <cr-link-row class="hr" icon-class="icon-external" id="help" - on-click="onHelpTap_" label="$i18n{aboutGetHelpUsingChrome}"> - </cr-link-row> -<if expr="_google_chrome"> - <cr-link-row class="hr" icon-class="subpage-arrow" id="reportIssue" - on-click="onReportIssueTap_" label="$i18n{aboutReportAnIssue}"> - </cr-link-row> -</if> -<if expr="chromeos"> - <cr-link-row class="hr" icon-class="subpage-arrow" - id="detailed-build-info-trigger" - on-click="onDetailedBuildInfoTap_" - label="$i18n{aboutDetailedBuildInfo}"></cr-link-row> - <cr-link-row class="hr" icon-class="subpage-arrow" - start-icon="settings:business" - id="management-info" - on-click="onManagementInfoTap_" - label="[[managementTitle_]]"></cr-link-row> -</if> - </div> -<if expr="chromeos"> - <template is="dom-if" route-path="/help/details"> - <settings-subpage page-title="$i18n{aboutDetailedBuildInfo}"> - <settings-detailed-build-info></settings-detailed-build-info> - </settings-subpage> - </template> - <template is="dom-if" route-path="/help/management"> - <settings-subpage page-title="[[managementTitle_]]"> - <settings-management-page></settings-management-page> - </settings-subpage> - </template> -</if> - </settings-animated-pages> - </settings-section> - - <settings-section> - <div class="settings-box padded block"> - <div class="info-section"> - <div class="secondary">$i18n{aboutProductTitle}</div> - <div class="secondary">$i18n{aboutProductCopyright}</div> - </div> - - <div class="info-section"> - <div class="secondary">$i18nRaw{aboutProductLicense}</div> -<if expr="chromeos"> - <div class="secondary" - inner-h-t-m-l="[[getAboutProductOsLicense_( - showCrostiniLicense_)]]"> + <paper-icon-button-light class="subpage-arrow" + hidden="[[!promoteUpdaterStatus_.actionable]]"> + <button disabled="[[promoteUpdaterStatus_.disabled]]" + aria-label$="[[promoteUpdaterStatus_.text]]"> + </button> + </paper-icon-button-light> </div> + </template> </if> - </div> + <cr-link-row class="hr" icon-class="icon-external" id="help" + on-click="onHelpTap_" label="$i18n{aboutGetHelpUsingChrome}"> + </cr-link-row> <if expr="_google_chrome"> - <div class="secondary">$i18nRaw{aboutProductTos}</div> + <cr-link-row class="hr" icon-class="subpage-arrow" id="reportIssue" + on-click="onReportIssueTap_" label="$i18n{aboutReportAnIssue}"> + </cr-link-row> +</if> +<if expr="chromeos"> + <cr-link-row class="hr" icon-class="subpage-arrow" + id="detailed-build-info-trigger" + on-click="onDetailedBuildInfoTap_" + label="$i18n{aboutDetailedBuildInfo}"></cr-link-row> + <cr-link-row class="hr" icon-class="subpage-arrow" + start-icon="settings:business" + id="management-info" + on-click="onManagementInfoTap_" + label="[[managementTitle_]]"></cr-link-row> </if> </div> <if expr="chromeos"> - <div class="settings-box padded block" id="regulatoryInfo" - hidden$="[[!shouldShowRegulatoryOrSafetyInfo_(regulatoryInfo_)]]"> -<if expr="_google_chrome"> - <div class="secondary" hidden$="[[!shouldShowSafetyInfo_()]]"> - <a target="_blank" href="$i18n{aboutProductSafetyURL}"> - $i18nRaw{aboutProductSafety} - </a> + <template is="dom-if" route-path="/help/details"> + <settings-subpage page-title="$i18n{aboutDetailedBuildInfo}"> + <settings-detailed-build-info></settings-detailed-build-info> + </settings-subpage> + </template> + <template is="dom-if" route-path="/help/management"> + <settings-subpage page-title="[[managementTitle_]]"> + <settings-management-page></settings-management-page> + </settings-subpage> + </template> +</if> + </settings-animated-pages> + </settings-section> + + <settings-section> + <div class="settings-box padded block"> + <div class="info-section"> + <div class="secondary">$i18n{aboutProductTitle}</div> + <div class="secondary">$i18n{aboutProductCopyright}</div> + </div> + + <div class="info-section"> + <div class="secondary">$i18nRaw{aboutProductLicense}</div> +<if expr="chromeos"> + <div class="secondary" + inner-h-t-m-l="[[getAboutProductOsLicense_( + showCrostiniLicense_)]]"> </div> </if> - <img src="[[regulatoryInfo_.url]]" alt="[[regulatoryInfo_.text]]" - hidden$="[[!shouldShowRegulatoryInfo_(regulatoryInfo_)]]" - role="presentation"> + </div> +<if expr="_google_chrome"> + <div class="secondary">$i18nRaw{aboutProductTos}</div> +</if> + </div> +<if expr="chromeos"> + <div class="settings-box padded block" id="regulatoryInfo" + hidden$="[[!shouldShowRegulatoryOrSafetyInfo_(regulatoryInfo_)]]"> +<if expr="_google_chrome"> + <div class="secondary" hidden$="[[!shouldShowSafetyInfo_()]]"> + <a target="_blank" href="$i18n{aboutProductSafetyURL}"> + $i18nRaw{aboutProductSafety} + </a> </div> </if> - </settings-section> - </div> + <img src="[[regulatoryInfo_.url]]" alt="[[regulatoryInfo_.text]]" + hidden$="[[!shouldShowRegulatoryInfo_(regulatoryInfo_)]]" + role="presentation"> + </div> +</if> + </settings-section> <if expr="chromeos"> <template is="dom-if" if="[[showUpdateWarningDialog_]]" restamp> <settings-update-warning-dialog update-info="[[updateInfo_]]"
diff --git a/chrome/browser/ssl/ssl_error_handler_unittest.cc b/chrome/browser/ssl/ssl_error_handler_unittest.cc index a461ed7..da7e425a 100644 --- a/chrome/browser/ssl/ssl_error_handler_unittest.cc +++ b/chrome/browser/ssl/ssl_error_handler_unittest.cc
@@ -22,6 +22,7 @@ #include "chrome/browser/ssl/common_name_mismatch_handler.h" #include "chrome/browser/ssl/ssl_error_assistant.h" #include "chrome/browser/ssl/ssl_error_assistant.pb.h" +#include "chrome/browser/ssl/ssl_error_handler.h" #include "chrome/common/buildflags.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h" #include "chrome/test/base/testing_profile.h" @@ -394,25 +395,17 @@ ~SSLErrorAssistantProtoTest() override {} void SetCaptivePortalFeatureEnabled(bool enabled) { - if (enabled) { - scoped_feature_list_.InitFromCommandLine( - "CaptivePortalCertificateList" /* enabled */, - std::string() /* disabled */); - } else { - scoped_feature_list_.InitFromCommandLine( - std::string(), "CaptivePortalCertificateList" /* disabled */); - } + if (enabled) + scoped_feature_list_.InitAndEnableFeature(kCaptivePortalCertificateList); + else + scoped_feature_list_.InitAndDisableFeature(kCaptivePortalCertificateList); } void SetMITMSoftwareFeatureEnabled(bool enabled) { - if (enabled) { - scoped_feature_list_.InitFromCommandLine( - "MITMSoftwareInterstitial" /* enabled */, - std::string() /* disabled */); - } else { - scoped_feature_list_.InitFromCommandLine( - std::string(), "MITMSoftwareInterstitial" /* disabled */); - } + if (enabled) + scoped_feature_list_.InitAndEnableFeature(kMITMSoftwareInterstitial); + else + scoped_feature_list_.InitAndDisableFeature(kMITMSoftwareInterstitial); } void ResetErrorHandlerFromString(const std::string& cert_data, @@ -925,8 +918,7 @@ TEST_F(SSLErrorHandlerNameMismatchTest, OSReportsCaptivePortal_FeatureDisabled) { base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitFromCommandLine( - std::string(), "CaptivePortalInterstitial" /* disabled */); + scoped_feature_list.InitAndDisableFeature(kCaptivePortalInterstitial); base::HistogramTester histograms; delegate()->set_os_reports_captive_portal();
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index ecab3c9a..e42a5f0 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -384,7 +384,6 @@ "//chrome/common", "//chrome/common/net", "//chrome/installer/util:with_no_strings", - "//chromeos/assistant:buildflags", "//components/about_ui", "//components/account_id", "//components/app_modal", @@ -1739,6 +1738,7 @@ "//ash/public/cpp/resources:ash_public_unscaled_resources", "//ash/public/cpp/vector_icons", "//chrome/browser/chromeos", + "//chromeos/assistant:buildflags", "//chromeos/audio", "//chromeos/components/multidevice", "//chromeos/components/multidevice/debug_webui", @@ -1746,6 +1746,7 @@ "//chromeos/components/proximity_auth", "//chromeos/components/tether", "//chromeos/cryptohome", + "//chromeos/dbus", "//chromeos/dbus:cryptohome_proto", "//chromeos/login/auth", "//chromeos/login/login_state", @@ -2869,7 +2870,7 @@ "//components/payments/content", "//components/payments/core", "//services/ws/public/cpp/input_devices", - "//ui/views:features", + "//ui/views:buildflags", ] allow_circular_includes_from += [ "//chrome/browser/ui/views" ]
diff --git a/chrome/browser/ui/media_router/media_router_file_dialog_unittest.cc b/chrome/browser/ui/media_router/media_router_file_dialog_unittest.cc index 0ff2006..0be7802 100644 --- a/chrome/browser/ui/media_router/media_router_file_dialog_unittest.cc +++ b/chrome/browser/ui/media_router/media_router_file_dialog_unittest.cc
@@ -9,7 +9,6 @@ #include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "base/task/task_scheduler/task_scheduler.h" -#include "base/test/scoped_feature_list.h" #include "chrome/common/media_router/issue.h" #include "chrome/grit/generated_resources.h" #include "content/public/test/test_browser_thread_bundle.h" @@ -69,10 +68,6 @@ public: MediaRouterFileDialogTest() { fake_path = base::FilePath(FILE_PATH_LITERAL("im/a/fake_path.mp3")); - - scoped_feature_list_.InitFromCommandLine( - "EnableCastLocalMedia" /* enabled features */, - std::string() /* disabled features */); } void SetUp() override { @@ -121,7 +116,6 @@ base::FilePath fake_path; base::string16 fake_path_name; - base::test::ScopedFeatureList scoped_feature_list_; content::TestBrowserThreadBundle thread_bundle_; };
diff --git a/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc b/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc index 3779197..0f114603 100644 --- a/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc +++ b/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc
@@ -562,27 +562,6 @@ UTF16ToUTF8(omnibox_view->GetText())); } -IN_PROC_BROWSER_TEST_F(OmniboxViewTest, Escape) { - ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUIHistoryURL)); - chrome::FocusLocationBar(browser()); - - OmniboxView* omnibox_view = NULL; - ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); - - base::string16 old_text = omnibox_view->GetText(); - EXPECT_FALSE(old_text.empty()); - EXPECT_TRUE(omnibox_view->IsSelectAll()); - - // Delete all text in omnibox. - ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_BACK, 0)); - EXPECT_TRUE(omnibox_view->GetText().empty()); - - // Escape shall revert the text in omnibox. - ASSERT_NO_FATAL_FAILURE(SendKey(ui::VKEY_ESCAPE, 0)); - EXPECT_EQ(old_text, omnibox_view->GetText()); - EXPECT_TRUE(omnibox_view->IsSelectAll()); -} - IN_PROC_BROWSER_TEST_F(OmniboxViewTest, DesiredTLD) { OmniboxView* omnibox_view = NULL; ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view));
diff --git a/chrome/browser/ui/views/BUILD.gn b/chrome/browser/ui/views/BUILD.gn index 4831e458..07f24ef8 100644 --- a/chrome/browser/ui/views/BUILD.gn +++ b/chrome/browser/ui/views/BUILD.gn
@@ -48,7 +48,7 @@ sources += [ "nav_button_provider.h" ] deps += [ "//ui/views", - "//ui/views:features", + "//ui/views:buildflags", ] } }
diff --git a/chrome/browser/ui/views/OWNERS b/chrome/browser/ui/views/OWNERS index c95bcfea..89a1cba4 100644 --- a/chrome/browser/ui/views/OWNERS +++ b/chrome/browser/ui/views/OWNERS
@@ -2,6 +2,7 @@ bsep@chromium.org ellyjones@chromium.org +dfried@chromium.org kylixrd@chromium.org msw@chromium.org pbos@chromium.org
diff --git a/chrome/browser/ui/views/nav_button_provider.h b/chrome/browser/ui/views/nav_button_provider.h index 50f3f2b..876a8b8 100644 --- a/chrome/browser/ui/views/nav_button_provider.h +++ b/chrome/browser/ui/views/nav_button_provider.h
@@ -6,8 +6,8 @@ #define CHROME_BROWSER_UI_VIEWS_NAV_BUTTON_PROVIDER_H_ #include "build/buildflag.h" +#include "ui/views/buildflags.h" #include "ui/views/controls/button/button.h" -#include "ui/views/features.h" #if !BUILDFLAG(ENABLE_NATIVE_WINDOW_NAV_BUTTONS) #error "Include not allowed."
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc index eb5f5fd3..63f53e0f 100644 --- a/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc +++ b/chrome/browser/ui/views/omnibox/omnibox_view_views_unittest.cc
@@ -501,7 +501,6 @@ EXPECT_FALSE(omnibox_view()->model()->user_input_in_progress()); omnibox_view()->SetUserText(base::ASCIIToUTF16("user text")); - EXPECT_EQ(base::ASCIIToUTF16("user text"), omnibox_view()->text()); EXPECT_TRUE(omnibox_view()->model()->user_input_in_progress()); @@ -521,6 +520,28 @@ EXPECT_FALSE(omnibox_view()->model()->user_input_in_progress()); } +TEST_F(OmniboxViewViewsTest, RevertOnEscape) { + location_bar_model()->set_url(GURL("https://permanent-text.com/")); + omnibox_view()->model()->ResetDisplayTexts(); + omnibox_view()->RevertAll(); + + EXPECT_EQ(base::ASCIIToUTF16("https://permanent-text.com/"), + omnibox_view()->text()); + EXPECT_FALSE(omnibox_view()->model()->user_input_in_progress()); + + omnibox_view()->SetUserText(base::ASCIIToUTF16("user text")); + EXPECT_EQ(base::ASCIIToUTF16("user text"), omnibox_view()->text()); + EXPECT_TRUE(omnibox_view()->model()->user_input_in_progress()); + + // Expect that on Escape, the text is reverted to the permanent URL. + ui::KeyEvent escape(ui::ET_KEY_PRESSED, ui::VKEY_ESCAPE, 0); + omnibox_textfield()->OnKeyEvent(&escape); + + EXPECT_EQ(base::ASCIIToUTF16("https://permanent-text.com/"), + omnibox_view()->text()); + EXPECT_FALSE(omnibox_view()->model()->user_input_in_progress()); +} + TEST_F(OmniboxViewViewsTest, BackspaceExitsKeywordMode) { omnibox_view()->SetUserText(base::UTF8ToUTF16("user text")); omnibox_view()->model()->EnterKeywordModeForDefaultSearchProvider(
diff --git a/chrome/browser/ui/views/tabs/tab_strip.cc b/chrome/browser/ui/views/tabs/tab_strip.cc index b2e9fac..850dcb8 100644 --- a/chrome/browser/ui/views/tabs/tab_strip.cc +++ b/chrome/browser/ui/views/tabs/tab_strip.cc
@@ -1300,13 +1300,11 @@ } const int color_id = ThemeProperties::COLOR_BACKGROUND_TAB_TEXT; - if (tp->HasCustomColor(color_id)) { - default_color = tp->GetColor(color_id); - } else { - default_color = color_utils::IsDark(background_color) - ? gfx::kGoogleGrey400 - : gfx::kGoogleGrey800; - } + default_color = + tp->HasCustomColor(color_id) + ? tp->GetColor(color_id) + : color_utils::PickContrastingColor( + gfx::kGoogleGrey400, gfx::kGoogleGrey800, background_color); } if (!is_active_frame) {
diff --git a/chrome/browser/ui/webui/invalidations_message_handler.cc b/chrome/browser/ui/webui/invalidations_message_handler.cc index b05bcaf..7b21427 100644 --- a/chrome/browser/ui/webui/invalidations_message_handler.cc +++ b/chrome/browser/ui/webui/invalidations_message_handler.cc
@@ -25,6 +25,21 @@ class ObjectIdInvalidationMap; } // namespace syncer +namespace { + +invalidation::ProfileInvalidationProvider* GetInvalidationProvider( + Profile* profile) { + if (base::FeatureList::IsEnabled(invalidation::switches::kFCMInvalidations)) { + return invalidation::ProfileInvalidationProviderFactory::GetForProfile( + profile); + } else { + return invalidation::DeprecatedProfileInvalidationProviderFactory:: + GetForProfile(profile); + } +} + +} // namespace + InvalidationsMessageHandler::InvalidationsMessageHandler() : logger_(NULL), weak_ptr_factory_(this) {} @@ -45,16 +60,8 @@ } void InvalidationsMessageHandler::UIReady(const base::ListValue* args) { - invalidation::ProfileInvalidationProvider* invalidation_provider; - Profile* profile = Profile::FromWebUI(web_ui()); - if (base::FeatureList::IsEnabled(invalidation::switches::kFCMInvalidations)) { - invalidation_provider = - invalidation::ProfileInvalidationProviderFactory::GetForProfile( - profile); - } else { - invalidation_provider = invalidation:: - DeprecatedProfileInvalidationProviderFactory::GetForProfile(profile); - } + invalidation::ProfileInvalidationProvider* invalidation_provider = + GetInvalidationProvider(Profile::FromWebUI(web_ui())); if (invalidation_provider) { logger_ = invalidation_provider->GetInvalidationService()-> GetInvalidationLogger(); @@ -67,8 +74,7 @@ void InvalidationsMessageHandler::HandleRequestDetailedStatus( const base::ListValue* args) { invalidation::ProfileInvalidationProvider* invalidation_provider = - invalidation::DeprecatedProfileInvalidationProviderFactory::GetForProfile( - Profile::FromWebUI(web_ui())); + GetInvalidationProvider(Profile::FromWebUI(web_ui())); if (invalidation_provider) { invalidation_provider->GetInvalidationService()->RequestDetailedStatus( base::Bind(&InvalidationsMessageHandler::OnDetailedStatus,
diff --git a/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc b/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc index 12b1c534..48429cb4 100644 --- a/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc +++ b/chrome/browser/ui/webui/media_router/media_router_ui_unittest.cc
@@ -8,7 +8,6 @@ #include "base/bind.h" #include "base/strings/utf_string_conversions.h" -#include "base/test/scoped_feature_list.h" #include "build/build_config.h" #include "chrome/browser/media/router/media_router_factory.h" #include "chrome/browser/media/router/providers/wired_display/wired_display_media_route_provider.h" @@ -134,12 +133,7 @@ MediaRouterUITest() : presentation_request_({0, 0}, {GURL("https://google.com/presentation")}, - url::Origin::Create(GURL("http://google.com"))) { - // enable and disable features - scoped_feature_list_.InitFromCommandLine( - "EnableCastLocalMedia" /* enabled features */, - std::string() /* disabled features */); - } + url::Origin::Create(GURL("http://google.com"))) {} void SetUp() override { ChromeRenderViewHostTestHarness::SetUp(); @@ -229,7 +223,6 @@ std::unique_ptr<MockMediaRouterWebUIMessageHandler> message_handler_; MockMediaRouterFileDialog* mock_file_dialog_ = nullptr; std::vector<MediaSinksObserver*> media_sinks_observers_; - base::test::ScopedFeatureList scoped_feature_list_; }; class MediaRouterUIIncognitoTest : public MediaRouterUITest {
diff --git a/chrome/browser/vr/BUILD.gn b/chrome/browser/vr/BUILD.gn index dbddd3ee..509539d 100644 --- a/chrome/browser/vr/BUILD.gn +++ b/chrome/browser/vr/BUILD.gn
@@ -15,8 +15,8 @@ assert(enable_vr) -buildflag_header("vr_build_features") { - header = "vr_features.h" +buildflag_header("vr_buildflags") { + header = "vr_buildflags.h" flags = [ "USE_VR_ASSETS_COMPONENT=$use_vr_assets_component" ] } @@ -405,7 +405,7 @@ defines = [ "VR_BASE_IMPLEMENTATION" ] public_deps = [ - ":vr_build_features", + ":vr_buildflags", ":vr_gl_bindings", "//components/omnibox/browser", "//components/strings:components_strings_grit",
diff --git a/chrome/browser/vr/assets_loader.cc b/chrome/browser/vr/assets_loader.cc index 4ee4c37..1906a63e 100644 --- a/chrome/browser/vr/assets_loader.cc +++ b/chrome/browser/vr/assets_loader.cc
@@ -13,7 +13,7 @@ #include "base/values.h" #include "chrome/browser/vr/metrics/metrics_helper.h" #include "chrome/browser/vr/model/assets.h" -#include "chrome/browser/vr/vr_features.h" +#include "chrome/browser/vr/vr_buildflags.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "media/audio/sounds/wav_audio_handler.h"
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc index 7fb2b3d..0ac277b 100644 --- a/chrome/common/chrome_features.cc +++ b/chrome/common/chrome_features.cc
@@ -240,6 +240,12 @@ const base::Feature kEnableIncognitoWindowCounter{ "EnableIncognitoWindowCounter", base::FEATURE_DISABLED_BY_DEFAULT}; +#if defined(OS_CHROMEOS) +// Enables event-based status reporting for child accounts in Chrome OS. +const base::Feature kEventBasedStatusReporting{ + "EventBasedStatusReporting", base::FEATURE_DISABLED_BY_DEFAULT}; +#endif + // An experimental way of showing app banners, which has modal banners and gives // developers more control over when to show them. const base::Feature kExperimentalAppBanners {
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h index a66e04e..1cbd19eb 100644 --- a/chrome/common/chrome_features.h +++ b/chrome/common/chrome_features.h
@@ -153,6 +153,11 @@ COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kEnableIncognitoWindowCounter; +#if defined(OS_CHROMEOS) +COMPONENT_EXPORT(CHROME_FEATURES) +extern const base::Feature kEventBasedStatusReporting; +#endif + COMPONENT_EXPORT(CHROME_FEATURES) extern const base::Feature kExperimentalAppBanners;
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc index 1f40541..8fac18c 100644 --- a/chrome/common/chrome_switches.cc +++ b/chrome/common/chrome_switches.cc
@@ -322,9 +322,6 @@ const char kEnablePotentiallyAnnoyingSecurityFeatures[] = "enable-potentially-annoying-security-features"; -// Enables the Power overlay in Settings. -const char kEnablePowerOverlay[] = "enable-power-overlay"; - // Name of the command line flag to force content verification to be on in one // of various modes. const char kExtensionContentVerification[] = "extension-content-verification";
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h index 4c1ffeaf..6ed08842 100644 --- a/chrome/common/chrome_switches.h +++ b/chrome/common/chrome_switches.h
@@ -103,7 +103,6 @@ extern const char kEnableOfflineAutoReload[]; extern const char kEnableOfflineAutoReloadVisibleOnly[]; extern const char kEnablePotentiallyAnnoyingSecurityFeatures[]; -extern const char kEnablePowerOverlay[]; extern const char kExtensionContentVerification[]; extern const char kExtensionContentVerificationBootstrap[]; extern const char kExtensionContentVerificationEnforce[];
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 54841f9..d8528be 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -5037,7 +5037,8 @@ "//ash/public/interfaces:test_interfaces", "//chrome/browser/chromeos:test_support", "//chrome/browser/media/router:test_support", - "//chromeos", + "//chromeos:test_support", + "//chromeos/dbus:test_support", "//mojo/core/embedder", ]
diff --git a/chrome/test/base/chrome_render_view_host_test_harness.cc b/chrome/test/base/chrome_render_view_host_test_harness.cc index b758c6f0..3bdfc45 100644 --- a/chrome/test/base/chrome_render_view_host_test_harness.cc +++ b/chrome/test/base/chrome_render_view_host_test_harness.cc
@@ -9,14 +9,8 @@ #include "base/bind.h" #include "build/build_config.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/signin/account_tracker_service_factory.h" -#include "chrome/browser/signin/chrome_signin_client_factory.h" -#include "chrome/browser/signin/gaia_cookie_manager_service_factory.h" -#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" #include "chrome/browser/signin/signin_error_controller_factory.h" -#include "chrome/browser/signin/signin_manager_factory.h" #include "chrome/test/base/testing_profile.h" -#include "components/signin/core/browser/fake_signin_manager.h" #if defined(OS_CHROMEOS) #include "ash/shell.h" @@ -25,33 +19,6 @@ using content::RenderViewHostTester; using content::RenderViewHostTestHarness; -namespace { - -std::unique_ptr<KeyedService> BuildSigninManagerFake( - content::BrowserContext* context) { - Profile* profile = static_cast<Profile*>(context); - SigninClient* signin_client = - ChromeSigninClientFactory::GetForProfile(profile); - AccountTrackerService* account_tracker_service = - AccountTrackerServiceFactory::GetForProfile(profile); - ProfileOAuth2TokenService* token_service = - ProfileOAuth2TokenServiceFactory::GetForProfile(profile); -#if defined (OS_CHROMEOS) - std::unique_ptr<SigninManagerBase> signin(new SigninManagerBase( - signin_client, token_service, account_tracker_service)); - signin->Initialize(NULL); - return std::move(signin); -#else - std::unique_ptr<FakeSigninManager> manager(new FakeSigninManager( - signin_client, token_service, account_tracker_service, - GaiaCookieManagerServiceFactory::GetForProfile(profile))); - manager->Initialize(g_browser_process->local_state()); - return std::move(manager); -#endif -} - -} // namespace - ChromeRenderViewHostTestHarness::ChromeRenderViewHostTestHarness( int thread_bundle_options) : content::RenderViewHostTestHarness(thread_bundle_options) {} @@ -80,7 +47,5 @@ content::BrowserContext* ChromeRenderViewHostTestHarness::CreateBrowserContext() { TestingProfile::Builder builder; - builder.AddTestingFactory(SigninManagerFactory::GetInstance(), - base::BindRepeating(&BuildSigninManagerFake)); return builder.Build().release(); }
diff --git a/chromeos/BUILD.gn b/chromeos/BUILD.gn index 04f54ea..f528bd2 100644 --- a/chromeos/BUILD.gn +++ b/chromeos/BUILD.gn
@@ -29,26 +29,20 @@ public_deps = [ ":chromeos_constants", ":chromeos_export", - ":policy_certificate_provider", ":tools", - "//chromeos/dbus", + "//chromeos/geolocation", "//chromeos/network", "//chromeos/settings", - "//dbus", + "//chromeos/timezone", ] deps = [ ":account_manager_proto", "//base", "//base:i18n", - "//base/third_party/dynamic_annotations", - "//components/account_id", "//components/device_event_log", - "//components/policy:cloud_policy_proto_generated_compile", "//components/policy/proto", "//components/pref_registry", "//components/prefs", - "//components/user_manager", - "//crypto:platform", "//google_apis", "//services/network/public/cpp:cpp", "//third_party/protobuf:protobuf_lite", @@ -65,14 +59,6 @@ "account_manager/account_manager_factory.h", "app_mode/kiosk_oem_manifest_parser.cc", "app_mode/kiosk_oem_manifest_parser.h", - "geolocation/geoposition.cc", - "geolocation/geoposition.h", - "geolocation/simple_geolocation_provider.cc", - "geolocation/simple_geolocation_provider.h", - "geolocation/simple_geolocation_request.cc", - "geolocation/simple_geolocation_request.h", - "geolocation/simple_geolocation_request_test_monitor.cc", - "geolocation/simple_geolocation_request_test_monitor.h", "hugepage_text/hugepage_text.cc", "hugepage_text/hugepage_text.h", "policy/weekly_time/time_utils.cc", @@ -115,12 +101,6 @@ "system/name_value_pairs_parser.h", "system/statistics_provider.cc", "system/statistics_provider.h", - "timezone/timezone_provider.cc", - "timezone/timezone_provider.h", - "timezone/timezone_request.cc", - "timezone/timezone_request.h", - "timezone/timezone_resolver.cc", - "timezone/timezone_resolver.h", ] if (current_cpu == "arm" || current_cpu == "x86") { defines = [ "BINDER_IPC_32BIT" ] @@ -206,7 +186,6 @@ "//chromeos/disks:test_support", "//chromeos/login/auth:test_support", "//chromeos/login/login_state:test_support", - "//components/account_id", "//google_apis", "//net:test_support", "//services/network:test_support", @@ -233,13 +212,6 @@ ] } -static_library("test_support_without_gmock") { - testonly = true - public_deps = [ - "//chromeos/dbus", - ] -} - test("chromeos_unittests") { configs += [ "//build/config/linux/dbus", @@ -248,32 +220,27 @@ deps = [ ":chromeos_buildflags", ":test_support", - ":test_support_without_gmock", "//base/test:test_support", "//chromeos/attestation:unit_tests", "//chromeos/audio:unit_tests", "//chromeos/cryptohome:unit_tests", - "//chromeos/dbus:authpolicy_proto", - "//chromeos/dbus:cryptohome_proto", - "//chromeos/dbus:dbus", - "//chromeos/dbus:power_manager_proto", + "//chromeos/dbus:test_support", "//chromeos/dbus:unit_tests", "//chromeos/dbus/services:unit_tests", "//chromeos/disks:unit_tests", + "//chromeos/geolocation:unit_tests", "//chromeos/login/auth:unit_tests", "//chromeos/login/login_state:unit_tests", "//chromeos/network:unit_tests", "//chromeos/services:unit_tests", "//chromeos/settings:unit_tests", + "//chromeos/timezone:unit_tests", "//chromeos/tpm:unit_tests", - "//components/account_id", "//components/onc", "//components/policy:generated", "//components/policy/proto", "//components/prefs:test_support", "//components/proxy_config", - "//crypto", - "//crypto:test_support", "//dbus:test_support", "//google_apis", "//mojo/core/embedder", @@ -289,7 +256,6 @@ sources = [ "account_manager/account_manager_unittest.cc", "app_mode/kiosk_oem_manifest_parser_unittest.cc", - "geolocation/simple_geolocation_unittest.cc", "policy/weekly_time/time_utils_unittest.cc", "policy/weekly_time/weekly_time_interval_unittest.cc", "policy/weekly_time/weekly_time_unittest.cc", @@ -304,7 +270,6 @@ "system/factory_ping_embargo_check_unittest.cc", "system/name_value_pairs_parser_unittest.cc", "test/run_all_unittests.cc", - "timezone/timezone_unittest.cc", "tools/variable_expander_unittest.cc", ]
diff --git a/chromeos/attestation/BUILD.gn b/chromeos/attestation/BUILD.gn index e0e9af3..ad87f91 100644 --- a/chromeos/attestation/BUILD.gn +++ b/chromeos/attestation/BUILD.gn
@@ -45,7 +45,7 @@ ":test_support", "//base/test:test_support", "//chromeos/cryptohome:test_support", - "//chromeos/dbus", + "//chromeos/dbus:test_support", "//components/account_id", "//testing/gmock", "//testing/gtest",
diff --git a/chromeos/audio/BUILD.gn b/chromeos/audio/BUILD.gn index 9a715c2..ba05a60d 100644 --- a/chromeos/audio/BUILD.gn +++ b/chromeos/audio/BUILD.gn
@@ -36,7 +36,7 @@ ":audio", "//base/test:test_support", "//chromeos:chromeos_constants", - "//chromeos/dbus", + "//chromeos/dbus:test_support", "//components/prefs:test_support", "//media/base:video_facing", "//testing/gtest",
diff --git a/chromeos/components/drivefs/BUILD.gn b/chromeos/components/drivefs/BUILD.gn index e269090..94ca6b5d 100644 --- a/chromeos/components/drivefs/BUILD.gn +++ b/chromeos/components/drivefs/BUILD.gn
@@ -20,6 +20,7 @@ "//base", "//chromeos", "//chromeos/components/drivefs/mojom", + "//chromeos/dbus", "//chromeos/disks", "//components/account_id", "//components/drive", @@ -46,6 +47,7 @@ "//base", "//chromeos", "//chromeos/components/drivefs/mojom", + "//chromeos/dbus", "//net", ] }
diff --git a/chromeos/components/multidevice/BUILD.gn b/chromeos/components/multidevice/BUILD.gn index 5908836..ce4a26a 100644 --- a/chromeos/components/multidevice/BUILD.gn +++ b/chromeos/components/multidevice/BUILD.gn
@@ -31,6 +31,7 @@ "//base:i18n", "//chromeos", "//chromeos/components/multidevice/logging", + "//chromeos/dbus", "//chromeos/services/device_sync/proto", "//chromeos/services/device_sync/proto:util", "//components/prefs",
diff --git a/chromeos/components/proximity_auth/BUILD.gn b/chromeos/components/proximity_auth/BUILD.gn index 517adba..51d7e85 100644 --- a/chromeos/components/proximity_auth/BUILD.gn +++ b/chromeos/components/proximity_auth/BUILD.gn
@@ -55,6 +55,7 @@ "//chromeos/components/multidevice", "//chromeos/components/multidevice/logging", "//chromeos/components/proximity_auth/public/interfaces", + "//chromeos/dbus", "//chromeos/services/multidevice_setup/public/cpp", "//chromeos/services/multidevice_setup/public/cpp:prefs", "//chromeos/services/secure_channel/public/cpp/client", @@ -119,6 +120,7 @@ "//chromeos/components/multidevice", "//chromeos/components/multidevice:test_support", "//chromeos/components/multidevice/logging", + "//chromeos/dbus", "//chromeos/services/multidevice_setup/public/cpp:prefs", "//chromeos/services/multidevice_setup/public/cpp:test_support", "//chromeos/services/secure_channel:test_support",
diff --git a/chromeos/components/tether/BUILD.gn b/chromeos/components/tether/BUILD.gn index fe991000..f7fc2a1 100644 --- a/chromeos/components/tether/BUILD.gn +++ b/chromeos/components/tether/BUILD.gn
@@ -119,6 +119,7 @@ "//chromeos", "//chromeos/components/multidevice/logging", "//chromeos/components/tether/proto", + "//chromeos/dbus", "//chromeos/login/login_state", "//chromeos/services/device_sync/public/cpp", "//chromeos/services/multidevice_setup/public/cpp:cpp", @@ -266,6 +267,7 @@ "//chromeos/components/multidevice", "//chromeos/components/multidevice:test_support", "//chromeos/components/tether/proto", + "//chromeos/dbus:test_support", "//chromeos/login/login_state", "//chromeos/services/device_sync:test_support", "//chromeos/services/device_sync/public/cpp",
diff --git a/chromeos/constants/chromeos_switches.cc b/chromeos/constants/chromeos_switches.cc index f4ffbec..bc6289413 100644 --- a/chromeos/constants/chromeos_switches.cc +++ b/chromeos/constants/chromeos_switches.cc
@@ -471,8 +471,7 @@ // to pass user_id hash for primary user. const char kLoginProfile[] = "login-profile"; -// Specifies the user which is already logged in. If kStubCrosSettings is set, -// this user will also be treated as the owner (see kStubCrosSettings). +// Specifies the user which is already logged in. const char kLoginUser[] = "login-user"; // The memory pressure threshold selection which is used to decide whether and @@ -529,14 +528,6 @@ // This makes it easier to test layout logic. const char kShowLoginDevOverlay[] = "show-login-dev-overlay"; -// Indicates that a stub implementation of CrosSettings that stores settings in -// memory without signing should be used, treating current user as the owner. -// The DeviceSettingsProvider class is replaced with StubCrosSettingsProvider -// for reading the settings from memory, and OwnerSettingsServiceChromeOS is -// replaced with FakeOwnerSettingsService for writing the settings to memory. -// This option is for testing the chromeos build of chrome on the desktop only. -const char kStubCrosSettings[] = "stub-cros-settings"; - // Enables testing for encryption migration UI. const char kTestEncryptionMigrationUI[] = "test-encryption-migration-ui";
diff --git a/chromeos/constants/chromeos_switches.h b/chromeos/constants/chromeos_switches.h index 866db126..4cff060 100644 --- a/chromeos/constants/chromeos_switches.h +++ b/chromeos/constants/chromeos_switches.h
@@ -145,7 +145,6 @@ CHROMEOS_EXPORT extern const char kShelfHoverPreviews[]; CHROMEOS_EXPORT extern const char kShowAndroidFilesInFilesApp[]; CHROMEOS_EXPORT extern const char kShowLoginDevOverlay[]; -CHROMEOS_EXPORT extern const char kStubCrosSettings[]; CHROMEOS_EXPORT extern const char kTestEncryptionMigrationUI[]; CHROMEOS_EXPORT extern const char kTestWallpaperServer[]; CHROMEOS_EXPORT extern const char kTetherStub[];
diff --git a/chromeos/cryptohome/BUILD.gn b/chromeos/cryptohome/BUILD.gn index abaed15..74aa37c 100644 --- a/chromeos/cryptohome/BUILD.gn +++ b/chromeos/cryptohome/BUILD.gn
@@ -59,7 +59,7 @@ ":test_support", "//base", "//base/test:test_support", - "//chromeos/dbus", + "//chromeos/dbus:test_support", "//chromeos/login/auth:challenge_response_key", "//testing/gtest:gtest", ]
diff --git a/chromeos/dbus/BUILD.gn b/chromeos/dbus/BUILD.gn index 869d52a5..3978a5f6 100644 --- a/chromeos/dbus/BUILD.gn +++ b/chromeos/dbus/BUILD.gn
@@ -2,13 +2,13 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//build/config/chromeos/rules.gni") import("//testing/test.gni") import("//third_party/protobuf/proto_library.gni") assert(is_chromeos, "Non-Chrome-OS builds must not depend on //chromeos") -source_set("dbus") { +component("dbus") { + output_name = "chromeos_dbus" # Avoid conflict with //dbus defines = [ "IS_CHROMEOS_DBUS_IMPL" ] public_deps = [ ":constants", @@ -237,7 +237,7 @@ } source_set("constants") { - configs += [ "//chromeos:chromeos_implementation" ] + defines = [ "IS_CHROMEOS_DBUS_IMPL" ] deps = [ "//base", ] @@ -252,12 +252,14 @@ source_set("test_support") { testonly = true configs += [ "//build/config/linux/dbus" ] - deps = [ - ":biod_proto", + public_deps = [ ":dbus", - "//base", "//dbus", "//dbus:test_support", + ] + deps = [ + ":biod_proto", + "//base", "//testing/gmock", "//testing/gtest", ]
diff --git a/chromeos/dbus/fake_session_manager_client.h b/chromeos/dbus/fake_session_manager_client.h index c136189b..fb331ea 100644 --- a/chromeos/dbus/fake_session_manager_client.h +++ b/chromeos/dbus/fake_session_manager_client.h
@@ -11,6 +11,7 @@ #include "base/callback_forward.h" #include "base/compiler_specific.h" +#include "base/component_export.h" #include "base/macros.h" #include "base/observer_list.h" #include "base/time/time.h" @@ -21,7 +22,8 @@ // A fake implementation of session_manager. Accepts policy blobs to be set and // returns them unmodified. -class FakeSessionManagerClient : public SessionManagerClient { +class COMPONENT_EXPORT(CHROMEOS_DBUS) FakeSessionManagerClient + : public SessionManagerClient { public: enum class PolicyStorageType { kOnDisk, // Store policy in regular files on disk. Usually used for
diff --git a/chromeos/dbus/fake_update_engine_client.h b/chromeos/dbus/fake_update_engine_client.h index b17c3af..e60a1b4 100644 --- a/chromeos/dbus/fake_update_engine_client.h +++ b/chromeos/dbus/fake_update_engine_client.h
@@ -7,6 +7,7 @@ #include <string> +#include "base/component_export.h" #include "base/containers/queue.h" #include "chromeos/dbus/update_engine_client.h" @@ -16,7 +17,8 @@ // use set_update_engine_client_status() to set a fake last Status and // GetLastStatus() returns the fake with no modification. Other methods do // nothing. -class FakeUpdateEngineClient : public UpdateEngineClient { +class COMPONENT_EXPORT(CHROMEOS_DBUS) FakeUpdateEngineClient + : public UpdateEngineClient { public: FakeUpdateEngineClient(); ~FakeUpdateEngineClient() override;
diff --git a/chromeos/disks/BUILD.gn b/chromeos/disks/BUILD.gn index 28757a2f..2cee8ce2 100644 --- a/chromeos/disks/BUILD.gn +++ b/chromeos/disks/BUILD.gn
@@ -32,8 +32,8 @@ deps = [ "//base", "//base/test:test_support", - "//chromeos/dbus", "//chromeos/dbus:power_manager_proto", + "//chromeos/dbus:test_support", "//testing/gmock", "//testing/gtest", ] @@ -50,8 +50,8 @@ ":test_support", "//base/test:test_support", "//chromeos:chromeos_constants", - "//chromeos/dbus", "//chromeos/dbus:power_manager_proto", + "//chromeos/dbus:test_support", "//testing/gmock", "//testing/gtest", ]
diff --git a/chromeos/geolocation/BUILD.gn b/chromeos/geolocation/BUILD.gn new file mode 100644 index 0000000..657f2d9 --- /dev/null +++ b/chromeos/geolocation/BUILD.gn
@@ -0,0 +1,45 @@ +# 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("//testing/test.gni") + +assert(is_chromeos, "Non-Chrome-OS builds must not depend on //chromeos") + +source_set("geolocation") { + defines = [ "IS_CHROMEOS_GEOLOCATION_IMPL" ] + deps = [ + "//base", + "//chromeos/network", + "//google_apis", + "//net", + "//services/network/public/cpp", + ] + sources = [ + "geoposition.cc", + "geoposition.h", + "simple_geolocation_provider.cc", + "simple_geolocation_provider.h", + "simple_geolocation_request.cc", + "simple_geolocation_request.h", + "simple_geolocation_request_test_monitor.cc", + "simple_geolocation_request_test_monitor.h", + ] +} + +source_set("unit_tests") { + testonly = true + deps = [ + ":geolocation", + "//base", + "//chromeos/dbus", + "//chromeos/network", + "//net", + "//services/network:test_support", + "//services/network/public/cpp", + "//testing/gtest", + ] + sources = [ + "simple_geolocation_unittest.cc", + ] +}
diff --git a/chromeos/geolocation/DEPS b/chromeos/geolocation/DEPS index 9a26362..c454583 100644 --- a/chromeos/geolocation/DEPS +++ b/chromeos/geolocation/DEPS
@@ -1,3 +1,19 @@ +noparent = True + include_rules = [ + "+base", + "+chromeos/network", "+google_apis", + "+services/network/public/cpp", + "+third_party/cros_system_api", + "+net", + "+url", ] + +specific_include_rules = { + ".*test\.cc": [ + "+chromeos/dbus", + "+services/network/test", + "+testing", + ], +}
diff --git a/chromeos/geolocation/geoposition.h b/chromeos/geolocation/geoposition.h index f1d5e99..95b0dbbc 100644 --- a/chromeos/geolocation/geoposition.h +++ b/chromeos/geolocation/geoposition.h
@@ -7,14 +7,14 @@ #include <string> +#include "base/component_export.h" #include "base/time/time.h" -#include "chromeos/chromeos_export.h" namespace chromeos { // This structure represents Google Maps Geolocation response. // Based on device/geolocation/geoposition.h . -struct CHROMEOS_EXPORT Geoposition { +struct COMPONENT_EXPORT(CHROMEOS_GEOLOCATION) Geoposition { // Geolocation API client status. // (Server status is reported in "error_code" field.) enum Status {
diff --git a/chromeos/geolocation/simple_geolocation_provider.h b/chromeos/geolocation/simple_geolocation_provider.h index 29a1267..fd288b0 100644 --- a/chromeos/geolocation/simple_geolocation_provider.h +++ b/chromeos/geolocation/simple_geolocation_provider.h
@@ -8,12 +8,12 @@ #include <memory> #include <vector> +#include "base/component_export.h" #include "base/gtest_prod_util.h" #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/threading/thread_checker.h" #include "base/time/time.h" -#include "chromeos/chromeos_export.h" #include "chromeos/geolocation/simple_geolocation_request.h" #include "url/gurl.h" @@ -31,7 +31,7 @@ // Note: this should probably be a singleton to monitor requests rate. // But as it is used only diring ChromeOS Out-of-Box, it can be owned by // WizardController for now. -class CHROMEOS_EXPORT SimpleGeolocationProvider { +class COMPONENT_EXPORT(CHROMEOS_GEOLOCATION) SimpleGeolocationProvider { public: SimpleGeolocationProvider( scoped_refptr<network::SharedURLLoaderFactory> factory,
diff --git a/chromeos/geolocation/simple_geolocation_request.h b/chromeos/geolocation/simple_geolocation_request.h index bb99da4b..c277f0a 100644 --- a/chromeos/geolocation/simple_geolocation_request.h +++ b/chromeos/geolocation/simple_geolocation_request.h
@@ -9,11 +9,11 @@ #include "base/callback.h" #include "base/compiler_specific.h" +#include "base/component_export.h" #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/threading/thread_checker.h" #include "base/timer/timer.h" -#include "chromeos/chromeos_export.h" #include "chromeos/geolocation/geoposition.h" #include "chromeos/network/network_util.h" #include "net/url_request/url_fetcher.h" @@ -38,8 +38,8 @@ // - If request is destroyed while callback has not beed called yet, request // is silently cancelled. // -// Note: we need CHROMEOS_EXPORT for tests. -class CHROMEOS_EXPORT SimpleGeolocationRequest { +// Note: we need COMPONENT_EXPORT(CHROMEOS_GEOLOCATION) for tests. +class COMPONENT_EXPORT(CHROMEOS_GEOLOCATION) SimpleGeolocationRequest { public: // Called when a new geo geolocation information is available. // The second argument indicates whether there was a server error or not.
diff --git a/chromeos/geolocation/simple_geolocation_request_test_monitor.h b/chromeos/geolocation/simple_geolocation_request_test_monitor.h index b50b735d..cd4c5893 100644 --- a/chromeos/geolocation/simple_geolocation_request_test_monitor.h +++ b/chromeos/geolocation/simple_geolocation_request_test_monitor.h
@@ -5,8 +5,8 @@ #ifndef CHROMEOS_GEOLOCATION_SIMPLE_GEOLOCATION_REQUEST_TEST_MONITOR_H_ #define CHROMEOS_GEOLOCATION_SIMPLE_GEOLOCATION_REQUEST_TEST_MONITOR_H_ +#include "base/component_export.h" #include "base/macros.h" -#include "chromeos/chromeos_export.h" namespace chromeos { @@ -15,8 +15,9 @@ // This is global hook, that allows to monitor SimpleGeolocationRequest // in tests. // -// Note: we need CHROMEOS_EXPORT for tests. -class CHROMEOS_EXPORT SimpleGeolocationRequestTestMonitor { +// Note: we need COMPONENT_EXPORT(CHROMEOS_GEOLOCATION) for tests. +class COMPONENT_EXPORT(CHROMEOS_GEOLOCATION) + SimpleGeolocationRequestTestMonitor { public: SimpleGeolocationRequestTestMonitor();
diff --git a/chromeos/login/auth/BUILD.gn b/chromeos/login/auth/BUILD.gn index 9609ef14..07d3cdbd 100644 --- a/chromeos/login/auth/BUILD.gn +++ b/chromeos/login/auth/BUILD.gn
@@ -111,8 +111,8 @@ "//base", "//base:i18n", "//chromeos:chromeos_constants", - "//chromeos/dbus", "//chromeos/dbus:authpolicy_proto", + "//chromeos/dbus:test_support", "//testing/gmock", "//testing/gtest", "//third_party/icu",
diff --git a/chromeos/network/BUILD.gn b/chromeos/network/BUILD.gn index 9ffe5ad..73d3e75 100644 --- a/chromeos/network/BUILD.gn +++ b/chromeos/network/BUILD.gn
@@ -172,7 +172,7 @@ "//chromeos:chromeos_constants", "//chromeos:policy_certificate_provider", "//chromeos:test_support_source_set", - "//chromeos/dbus", + "//chromeos/dbus:test_support", "//chromeos/login/login_state", "//components/onc", "//components/prefs",
diff --git a/chromeos/services/assistant/BUILD.gn b/chromeos/services/assistant/BUILD.gn index df67cec..fdee4d8 100644 --- a/chromeos/services/assistant/BUILD.gn +++ b/chromeos/services/assistant/BUILD.gn
@@ -36,6 +36,7 @@ "//build/util:webkit_version", "//chromeos", "//chromeos/assistant:buildflags", + "//chromeos/dbus", "//components/account_id", "//services/device/public/mojom", "//services/identity/public/mojom", @@ -123,6 +124,7 @@ "//base", "//base/test:test_support", "//chromeos", + "//chromeos/dbus", "//chromeos/services/assistant/public/mojom", "//mojo/public/cpp/bindings:bindings", "//services/device/public/mojom",
diff --git a/chromeos/services/device_sync/BUILD.gn b/chromeos/services/device_sync/BUILD.gn index eab6038..069023ad 100644 --- a/chromeos/services/device_sync/BUILD.gn +++ b/chromeos/services/device_sync/BUILD.gn
@@ -154,9 +154,9 @@ ":test_support", "//base", "//base/test:test_support", - "//chromeos", "//chromeos/components/multidevice", "//chromeos/components/multidevice:test_support", + "//chromeos/dbus:test_support", "//chromeos/services/device_sync/proto:util", "//chromeos/services/device_sync/public/cpp:test_support", "//chromeos/services/device_sync/public/cpp:unit_tests",
diff --git a/chromeos/services/machine_learning/public/cpp/BUILD.gn b/chromeos/services/machine_learning/public/cpp/BUILD.gn index 868c98e..543738a4 100644 --- a/chromeos/services/machine_learning/public/cpp/BUILD.gn +++ b/chromeos/services/machine_learning/public/cpp/BUILD.gn
@@ -12,6 +12,7 @@ deps = [ "//base", "//chromeos", + "//chromeos/dbus", "//chromeos/services/machine_learning/public/mojom", ] } @@ -25,6 +26,7 @@ ":cpp", "//base/test:test_support", "//chromeos", + "//chromeos/dbus", "//chromeos/services/machine_learning/public/mojom", "//mojo/core/embedder", "//mojo/public/cpp/bindings",
diff --git a/chromeos/timezone/BUILD.gn b/chromeos/timezone/BUILD.gn new file mode 100644 index 0000000..a6d0dd2 --- /dev/null +++ b/chromeos/timezone/BUILD.gn
@@ -0,0 +1,43 @@ +# 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("//testing/test.gni") + +assert(is_chromeos, "Non-Chrome-OS builds must not depend on //chromeos") + +source_set("timezone") { + defines = [ "IS_CHROMEOS_TIMEZONE_IMPL" ] + deps = [ + "//base", + "//chromeos/geolocation", + "//components/prefs", + "//google_apis", + "//net", + "//services/network/public/cpp", + ] + sources = [ + "timezone_provider.cc", + "timezone_provider.h", + "timezone_request.cc", + "timezone_request.h", + "timezone_resolver.cc", + "timezone_resolver.h", + ] +} + +source_set("unit_tests") { + testonly = true + deps = [ + ":timezone", + "//base", + "//chromeos/geolocation", + "//net", + "//services/network:test_support", + "//services/network/public/cpp", + "//testing/gtest", + ] + sources = [ + "timezone_unittest.cc", + ] +}
diff --git a/chromeos/timezone/DEPS b/chromeos/timezone/DEPS index 9a26362..b36fa0fe 100644 --- a/chromeos/timezone/DEPS +++ b/chromeos/timezone/DEPS
@@ -1,3 +1,19 @@ +noparent = True + include_rules = [ + "+base", + "+chromeos/geolocation", + "+components/prefs", "+google_apis", + "+services/network/public/cpp", + "+third_party/cros_system_api", + "+net", + "+url", ] + +specific_include_rules = { + ".*test\.cc": [ + "+services/network/test", + "+testing", + ], +}
diff --git a/chromeos/timezone/timezone_provider.h b/chromeos/timezone/timezone_provider.h index 4095992..8a260bd8 100644 --- a/chromeos/timezone/timezone_provider.h +++ b/chromeos/timezone/timezone_provider.h
@@ -8,12 +8,12 @@ #include <memory> #include <vector> +#include "base/component_export.h" #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/memory/weak_ptr.h" #include "base/threading/thread_checker.h" #include "base/time/time.h" -#include "chromeos/chromeos_export.h" #include "chromeos/timezone/timezone_request.h" #include "url/gurl.h" @@ -29,7 +29,7 @@ // // Note: this should probably be a singleton to monitor requests rate. // But as it is used only from WizardController, it can be owned by it for now. -class CHROMEOS_EXPORT TimeZoneProvider { +class COMPONENT_EXPORT(CHROMEOS_TIMEZONE) TimeZoneProvider { public: TimeZoneProvider(scoped_refptr<network::SharedURLLoaderFactory> factory, const GURL& url);
diff --git a/chromeos/timezone/timezone_request.h b/chromeos/timezone/timezone_request.h index d25d291..c1bae724 100644 --- a/chromeos/timezone/timezone_request.h +++ b/chromeos/timezone/timezone_request.h
@@ -9,11 +9,11 @@ #include "base/callback.h" #include "base/compiler_specific.h" +#include "base/component_export.h" #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/threading/thread_checker.h" #include "base/timer/timer.h" -#include "chromeos/chromeos_export.h" #include "chromeos/geolocation/geoposition.h" #include "url/gurl.h" @@ -24,7 +24,7 @@ namespace chromeos { -struct CHROMEOS_EXPORT TimeZoneResponseData { +struct COMPONENT_EXPORT(CHROMEOS_TIMEZONE) TimeZoneResponseData { enum Status { OK, INVALID_REQUEST, @@ -48,7 +48,7 @@ }; // Returns default timezone service URL. -CHROMEOS_EXPORT GURL DefaultTimezoneProviderURL(); +COMPONENT_EXPORT(CHROMEOS_TIMEZONE) GURL DefaultTimezoneProviderURL(); // Takes Geoposition and sends it to a server to get local timezone information. // It performs formatting of the request and interpretation of the response. @@ -57,7 +57,7 @@ // Request is owned and destroyed by caller (usually TimeZoneProvider). // If request is destroyed while callback has not beed called yet, request // is silently cancelled. -class CHROMEOS_EXPORT TimeZoneRequest { +class COMPONENT_EXPORT(CHROMEOS_TIMEZONE) TimeZoneRequest { public: // Called when a new geo timezone information is available. // The second argument indicates whether there was a server error or not.
diff --git a/chromeos/timezone/timezone_resolver.h b/chromeos/timezone/timezone_resolver.h index 7a5e9948..d31c384 100644 --- a/chromeos/timezone/timezone_resolver.h +++ b/chromeos/timezone/timezone_resolver.h
@@ -8,9 +8,9 @@ #include <memory> #include "base/callback.h" +#include "base/component_export.h" #include "base/macros.h" #include "base/threading/thread_checker.h" -#include "chromeos/chromeos_export.h" #include "url/gurl.h" class PrefRegistrySimple; @@ -25,7 +25,7 @@ struct TimeZoneResponseData; // This class implements periodic timezone synchronization. -class CHROMEOS_EXPORT TimeZoneResolver { +class COMPONENT_EXPORT(CHROMEOS_TIMEZONE) TimeZoneResolver { public: class TimeZoneResolverImpl;
diff --git a/chromeos/tpm/BUILD.gn b/chromeos/tpm/BUILD.gn index a4262c9..2956e3b 100644 --- a/chromeos/tpm/BUILD.gn +++ b/chromeos/tpm/BUILD.gn
@@ -39,8 +39,8 @@ "//base/test:test_support", "//chromeos:chromeos_constants", "//chromeos/cryptohome:test_support", - "//chromeos/dbus", "//chromeos/dbus:cryptohome_proto", + "//chromeos/dbus:test_support", "//components/policy/proto", "//google_apis", "//testing/gtest",
diff --git a/components/arc/BUILD.gn b/components/arc/BUILD.gn index 91adbfb..bdcd8260 100644 --- a/components/arc/BUILD.gn +++ b/components/arc/BUILD.gn
@@ -81,6 +81,7 @@ "//base", "//chromeos", "//chromeos/audio", + "//chromeos/dbus", "//chromeos/dbus:login_manager_proto", "//chromeos/dbus:power_manager_proto", "//chromeos/disks", @@ -185,6 +186,7 @@ "//base", "//chromeos", "//chromeos/cryptohome", + "//chromeos/dbus", "//chromeos/dbus:login_manager_proto", "//components/account_id", "//components/keyed_service/content", @@ -323,9 +325,9 @@ "//base", "//base/test:test_support", "//chromeos", - "//chromeos:test_support_without_gmock", "//chromeos/cryptohome:test_support", "//chromeos/dbus:power_manager_proto", + "//chromeos/dbus:test_support", "//chromeos/disks:test_support", "//components/account_id", "//components/keyed_service/content",
diff --git a/components/arc/arc_features.cc b/components/arc/arc_features.cc index 870a426..8128c9a 100644 --- a/components/arc/arc_features.cc +++ b/components/arc/arc_features.cc
@@ -37,7 +37,7 @@ // Controls whether we should delegate audio focus requests from ARC to Chrome. const base::Feature kEnableUnifiedAudioFocusFeature{ - "ArcEnableUnifiedAudioFocus", base::FEATURE_DISABLED_BY_DEFAULT}; + "ArcEnableUnifiedAudioFocus", base::FEATURE_ENABLED_BY_DEFAULT}; // Controls experimental file picker feature for ARC. const base::Feature kFilePickerExperimentFeature{
diff --git a/components/cronet/android/BUILD.gn b/components/cronet/android/BUILD.gn index d8fb828..fbf00e58 100644 --- a/components/cronet/android/BUILD.gn +++ b/components/cronet/android/BUILD.gn
@@ -160,7 +160,7 @@ "//net", "//third_party/zlib:zlib", "//url", - "//url:url_features", + "//url:buildflags", ] sources = [ "//components/cronet/android/cronet_bidirectional_stream_adapter.cc",
diff --git a/components/cronet/android/cronet_library_loader.cc b/components/cronet/android/cronet_library_loader.cc index fc18c17..44be5fd 100644 --- a/components/cronet/android/cronet_library_loader.cc +++ b/components/cronet/android/cronet_library_loader.cc
@@ -32,7 +32,7 @@ #include "net/proxy_resolution/proxy_config_service_android.h" #include "net/proxy_resolution/proxy_resolution_service.h" #include "third_party/zlib/zlib.h" -#include "url/url_features.h" +#include "url/buildflags.h" #include "url/url_util.h" #if !BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES)
diff --git a/components/invalidation/impl/fcm_invalidation_listener.cc b/components/invalidation/impl/fcm_invalidation_listener.cc index be1cafe..ec97cb8 100644 --- a/components/invalidation/impl/fcm_invalidation_listener.cc +++ b/components/invalidation/impl/fcm_invalidation_listener.cc
@@ -167,6 +167,11 @@ object_id_invalidation_map)); } +void FCMInvalidationListener::RequestDetailedStatus( + base::Callback<void(const base::DictionaryValue&)> callback) const { + callback.Run(*CollectDebugData()); +} + void FCMInvalidationListener::StopForTest() { Stop(); } @@ -231,4 +236,20 @@ EmitStateChange(); } +std::unique_ptr<base::DictionaryValue> +FCMInvalidationListener::CollectDebugData() const { + std::unique_ptr<base::DictionaryValue> return_value( + new base::DictionaryValue()); + // For each topic record if the subscription was successful. + TopicSet active_topics = + per_user_topic_registration_manager_->GetRegisteredIds(); + for (const Topic& topic : registered_topics_) { + std::string status = "Registered"; + if (active_topics.count(topic) == 0) + status = "Unregistered"; + return_value->SetString(topic, status); + } + return return_value; +} + } // namespace syncer
diff --git a/components/invalidation/impl/fcm_invalidation_listener.h b/components/invalidation/impl/fcm_invalidation_listener.h index 4bc1b6b..66e57e990 100644 --- a/components/invalidation/impl/fcm_invalidation_listener.h +++ b/components/invalidation/impl/fcm_invalidation_listener.h
@@ -91,6 +91,9 @@ void DoRegistrationUpdate(); + void RequestDetailedStatus( + base::Callback<void(const base::DictionaryValue&)> callback) const; + void StopForTest(); TopicSet GetRegisteredIdsForTest() const;
diff --git a/components/invalidation/impl/fcm_invalidator.cc b/components/invalidation/impl/fcm_invalidator.cc index 8a646fb..3c0f7e4 100644 --- a/components/invalidation/impl/fcm_invalidator.cc +++ b/components/invalidation/impl/fcm_invalidator.cc
@@ -69,7 +69,9 @@ void FCMInvalidator::RequestDetailedStatus( base::RepeatingCallback<void(const base::DictionaryValue&)> callback) - const {} + const { + invalidation_listener_.RequestDetailedStatus(callback); +} void FCMInvalidator::OnInvalidatorStateChange(InvalidatorState state) { registrar_.UpdateInvalidatorState(state);
diff --git a/components/metrics/BUILD.gn b/components/metrics/BUILD.gn index 1b8eb957..8e787c76 100644 --- a/components/metrics/BUILD.gn +++ b/components/metrics/BUILD.gn
@@ -423,7 +423,10 @@ } if (is_chromeos) { - deps += [ "//chromeos" ] + deps += [ + "//chromeos", + "//chromeos/dbus", + ] } # iOS is not supported by the profiler and the ios-simulator bot chokes on
diff --git a/components/offline_pages/OWNERS b/components/offline_pages/OWNERS index 0e619a5..5d7cd902 100644 --- a/components/offline_pages/OWNERS +++ b/components/offline_pages/OWNERS
@@ -3,6 +3,7 @@ dewittj@chromium.org dimich@chromium.org fgorski@chromium.org +harringtond@google.com jianli@chromium.org petewil@chromium.org
diff --git a/components/offline_pages/core/offline_page_feature.cc b/components/offline_pages/core/offline_page_feature.cc index 0a54ef8..f8189c3a 100644 --- a/components/offline_pages/core/offline_page_feature.cc +++ b/components/offline_pages/core/offline_page_feature.cc
@@ -190,4 +190,8 @@ return base::FeatureList::IsEnabled(kOfflineIndicatorAlwaysHttpProbeFeature); } +bool IsOnTheFlyMhtmlHashComputationEnabled() { + return base::FeatureList::IsEnabled(kOnTheFlyMhtmlHashComputationFeature); +} + } // namespace offline_pages
diff --git a/components/offline_pages/core/offline_page_feature.h b/components/offline_pages/core/offline_page_feature.h index 4a703b1..1f95e79 100644 --- a/components/offline_pages/core/offline_page_feature.h +++ b/components/offline_pages/core/offline_page_feature.h
@@ -121,6 +121,10 @@ // above. bool IsOfflineIndicatorAlwaysHttpProbeEnabled(); +// Returns true if we are saving MHTML files to the target location and +// calculating their content digests in one step. +bool IsOnTheFlyMhtmlHashComputationEnabled(); + } // namespace offline_pages #endif // COMPONENTS_OFFLINE_PAGES_OFFLINE_PAGE_FEATURE_H_
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn index c130c494..26af24a 100644 --- a/content/browser/BUILD.gn +++ b/content/browser/BUILD.gn
@@ -211,7 +211,7 @@ "//ui/gfx/geometry", "//ui/gfx/geometry/mojo", "//ui/gl", - "//ui/gl:gl_features", + "//ui/gl:buildflags", "//ui/latency", "//ui/native_theme", "//ui/resources", @@ -2415,6 +2415,7 @@ "//chromeos", "//chromeos/assistant:buildflags", "//chromeos/audio", + "//chromeos/dbus", "//chromeos/dbus:power_manager_proto", "//components/session_manager/core", ]
diff --git a/content/browser/cache_storage/cache_storage_cache.cc b/content/browser/cache_storage/cache_storage_cache.cc index 7e40fad..9eba7e1a 100644 --- a/content/browser/cache_storage/cache_storage_cache.cc +++ b/content/browser/cache_storage/cache_storage_cache.cc
@@ -84,6 +84,10 @@ // 2: Uniform random 14,431K. const int32_t kCachePaddingAlgorithmVersion = 2; +// Maximum number of recursive QueryCacheOpenNextEntry() calls we permit +// before forcing an asynchronous task. +const int kMaxQueryCacheRecursiveDepth = 20; + using MetadataCallback = base::OnceCallback<void(std::unique_ptr<proto::CacheMetadata>)>; @@ -1008,6 +1012,14 @@ std::unique_ptr<QueryCacheContext> query_cache_context) { DCHECK_EQ(nullptr, query_cache_context->enumerated_entry); + query_cache_recursive_depth_ += 1; + auto cleanup = base::ScopedClosureRunner(base::BindOnce( + [](CacheStorageCache* self) { + DCHECK(self->query_cache_recursive_depth_ > 0); + self->query_cache_recursive_depth_ -= 1; + }, + base::Unretained(this))); + if (!query_cache_context->backend_iterator) { // Iteration is complete. std::sort(query_cache_context->matches->begin(), @@ -1029,8 +1041,20 @@ int rv = iterator.OpenNextEntry(enumerated_entry, open_entry_callback); - if (rv != net::ERR_IO_PENDING) + if (rv == net::ERR_IO_PENDING) + return; + + // In most cases we can immediately invoke the callback when there is no + // pending IO. We must be careful, however, to avoid blowing out the stack + // when iterating a large cache. Only invoke the callback synchronously + // if we have not recursed past a threshold depth. + if (query_cache_recursive_depth_ <= kMaxQueryCacheRecursiveDepth) { std::move(open_entry_callback).Run(rv); + return; + } + + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(std::move(open_entry_callback), rv)); } void CacheStorageCache::QueryCacheFilterEntry(
diff --git a/content/browser/cache_storage/cache_storage_cache.h b/content/browser/cache_storage/cache_storage_cache.h index 1790d40..a788427 100644 --- a/content/browser/cache_storage/cache_storage_cache.h +++ b/content/browser/cache_storage/cache_storage_cache.h
@@ -505,6 +505,7 @@ int64_t last_reported_size_ = 0; size_t max_query_size_bytes_; size_t handle_ref_count_ = 0; + int query_cache_recursive_depth_ = 0; CacheStorageCacheObserver* cache_observer_; std::unique_ptr<CacheStorageCacheEntryHandler> cache_entry_handler_;
diff --git a/content/browser/cache_storage/cache_storage_cache_unittest.cc b/content/browser/cache_storage/cache_storage_cache_unittest.cc index f3924eb..8ec42aff 100644 --- a/content/browser/cache_storage/cache_storage_cache_unittest.cc +++ b/content/browser/cache_storage/cache_storage_cache_unittest.cc
@@ -2094,6 +2094,22 @@ EXPECT_EQ(2, sequence_out); } +TEST_P(CacheStorageCacheTestP, KeysWithManyCacheEntries) { + constexpr int kNumEntries = 1000; + + std::vector<std::string> expected_keys; + for (int i = 0; i < kNumEntries; ++i) { + GURL url(kNoBodyUrl.spec() + "?n=" + std::to_string(i)); + expected_keys.push_back(url.spec()); + blink::mojom::FetchAPIRequestPtr request = CreateFetchAPIRequest( + url, "GET", kHeaders, blink::mojom::Referrer::New(), false); + EXPECT_TRUE(Put(request, CreateNoBodyResponse())); + } + + EXPECT_TRUE(Keys()); + EXPECT_EQ(expected_keys, callback_strings_); +} + INSTANTIATE_TEST_CASE_P(CacheStorageCacheTest, CacheStorageCacheTestP, ::testing::Values(false, true));
diff --git a/content/browser/frame_host/navigation_controller_impl_browsertest.cc b/content/browser/frame_host/navigation_controller_impl_browsertest.cc index 8daecd3..88b2490 100644 --- a/content/browser/frame_host/navigation_controller_impl_browsertest.cc +++ b/content/browser/frame_host/navigation_controller_impl_browsertest.cc
@@ -8522,11 +8522,10 @@ "Navigation.BackForward.SetShouldSkipOnBackForwardUI", true, 1); // Go back to the last entry. - { - TestNavigationObserver back_nav_load_observer(shell()->web_contents()); - controller.GoToIndex(0); - back_nav_load_observer.Wait(); - } + TestNavigationObserver back_nav_load_observer(shell()->web_contents()); + controller.GoToIndex(0); + back_nav_load_observer.Wait(); + // Going back again to an entry should reset its skippable flag. EXPECT_FALSE(controller.GetEntryAtIndex(0)->should_skip_on_back_forward_ui()); @@ -8631,4 +8630,109 @@ EXPECT_EQ(0, controller.GetLastCommittedEntryIndex()); } +// Tests that the navigation entry that is marked as skippable on back/forward +// button does not get skipped for history.back API calls. +IN_PROC_BROWSER_TEST_F(NavigationControllerHistoryInterventionBrowserTest, + SetSkipOnBackDoNotSkipForHistoryBackAPI) { + base::HistogramTester histograms; + + GURL non_skippable_url( + embedded_test_server()->GetURL("/frame_tree/top.html")); + EXPECT_TRUE(NavigateToURL(shell(), non_skippable_url)); + + GURL skippable_url(embedded_test_server()->GetURL("/title1.html")); + EXPECT_TRUE(NavigateToURL(shell(), skippable_url)); + + // It is safe to obtain the root frame tree node here, as it doesn't change. + FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) + ->GetFrameTree() + ->root(); + + EXPECT_FALSE(root->HasBeenActivated()); + EXPECT_FALSE(root->HasTransientUserActivation()); + + // Navigate to a new same-site document from the renderer without a user + // gesture. + GURL redirected_url(embedded_test_server()->GetURL("/title2.html")); + EXPECT_TRUE( + NavigateToURLFromRendererWithoutUserGesture(shell(), redirected_url)); + + NavigationControllerImpl& controller = static_cast<NavigationControllerImpl&>( + shell()->web_contents()->GetController()); + EXPECT_EQ(controller.GetCurrentEntryIndex(), 2); + EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 2); + + // Last entry should have been marked as skippable. + EXPECT_TRUE(controller.GetEntryAtIndex(1)->should_skip_on_back_forward_ui()); + EXPECT_FALSE( + controller.GetLastCommittedEntry()->should_skip_on_back_forward_ui()); + histograms.ExpectBucketCount( + "Navigation.BackForward.SetShouldSkipOnBackForwardUI", true, 1); + + // Attempt to go back to the skippable entry using the History API should + // not skip the corresponding entry. + TestNavigationObserver frame_observer(shell()->web_contents()); + EXPECT_TRUE(ExecuteScript(root, "window.history.back()")); + frame_observer.Wait(); + + histograms.ExpectTotalCount("Navigation.BackForward.BackTargetSkipped", 0); + EXPECT_EQ(skippable_url, controller.GetLastCommittedEntry()->GetURL()); + EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); +} + +// Tests that the navigation entry that is marked as skippable on back/forward +// button does not get skipped for history.forward API calls. +IN_PROC_BROWSER_TEST_F(NavigationControllerHistoryInterventionBrowserTest, + SetSkipOnBackDoNotSkipForHistoryForwardAPI) { + base::HistogramTester histograms; + + GURL non_skippable_url( + embedded_test_server()->GetURL("/frame_tree/top.html")); + EXPECT_TRUE(NavigateToURL(shell(), non_skippable_url)); + + GURL skippable_url(embedded_test_server()->GetURL("/title1.html")); + EXPECT_TRUE(NavigateToURL(shell(), skippable_url)); + + // It is safe to obtain the root frame tree node here, as it doesn't change. + FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) + ->GetFrameTree() + ->root(); + + EXPECT_FALSE(root->HasBeenActivated()); + EXPECT_FALSE(root->HasTransientUserActivation()); + + // Navigate to a new same-site document from the renderer without a user + // gesture. + GURL redirected_url(embedded_test_server()->GetURL("/title2.html")); + EXPECT_TRUE( + NavigateToURLFromRendererWithoutUserGesture(shell(), redirected_url)); + + NavigationControllerImpl& controller = static_cast<NavigationControllerImpl&>( + shell()->web_contents()->GetController()); + EXPECT_EQ(controller.GetCurrentEntryIndex(), 2); + EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 2); + + // Last entry should have been marked as skippable. + EXPECT_TRUE(controller.GetEntryAtIndex(1)->should_skip_on_back_forward_ui()); + EXPECT_FALSE( + controller.GetLastCommittedEntry()->should_skip_on_back_forward_ui()); + histograms.ExpectBucketCount( + "Navigation.BackForward.SetShouldSkipOnBackForwardUI", true, 1); + + TestNavigationObserver nav_observer1(shell()->web_contents()); + controller.GoToIndex(0); + nav_observer1.Wait(); + EXPECT_EQ(non_skippable_url, controller.GetLastCommittedEntry()->GetURL()); + + // Attempt to go forward to the skippable entry using the History API should + // not skip the corresponding entry. + TestNavigationObserver nav_observer2(shell()->web_contents()); + EXPECT_TRUE(ExecuteScript(root, "window.history.forward()")); + nav_observer2.Wait(); + + histograms.ExpectTotalCount("Navigation.BackForward.ForwardTargetSkipped", 0); + EXPECT_EQ(skippable_url, controller.GetLastCommittedEntry()->GetURL()); + EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); +} + } // namespace content
diff --git a/content/browser/frame_host/navigation_handle_impl_browsertest.cc b/content/browser/frame_host/navigation_handle_impl_browsertest.cc index aaba4ec..2b2db13 100644 --- a/content/browser/frame_host/navigation_handle_impl_browsertest.cc +++ b/content/browser/frame_host/navigation_handle_impl_browsertest.cc
@@ -1649,26 +1649,11 @@ EXPECT_EQ(net::ERR_UNSAFE_REDIRECT, observer.net_error_code()); } -// This class allows running tests with PlzNavigate enabled, regardless of -// default test configuration. -// TODO(clamy): Make those regular NavigationHandleImplBrowserTests. -class PlzNavigateNavigationHandleImplBrowserTest : public ContentBrowserTest { - public: - PlzNavigateNavigationHandleImplBrowserTest() {} - - void SetUpOnMainThread() override { - host_resolver()->AddRule("*", "127.0.0.1"); - } -}; - // Test to verify that error pages caused by NavigationThrottle blocking a // request in the main frame from being made are properly committed in a // separate error page process. -IN_PROC_BROWSER_TEST_F(PlzNavigateNavigationHandleImplBrowserTest, +IN_PROC_BROWSER_TEST_F(NavigationHandleImplBrowserTest, ErrorPageBlockedNavigation) { - SetupCrossSiteRedirector(embedded_test_server()); - ASSERT_TRUE(embedded_test_server()->Start()); - GURL start_url(embedded_test_server()->GetURL("foo.com", "/title1.html")); GURL blocked_url(embedded_test_server()->GetURL("bar.com", "/title2.html")); @@ -1823,11 +1808,7 @@ // Test to verify that error pages caused by network error or other // recoverable error are properly committed in the process for the // destination URL. -IN_PROC_BROWSER_TEST_F(PlzNavigateNavigationHandleImplBrowserTest, - ErrorPageNetworkError) { - SetupCrossSiteRedirector(embedded_test_server()); - ASSERT_TRUE(embedded_test_server()->Start()); - +IN_PROC_BROWSER_TEST_F(NavigationHandleImplBrowserTest, ErrorPageNetworkError) { GURL start_url(embedded_test_server()->GetURL("foo.com", "/title1.html")); GURL error_url(embedded_test_server()->GetURL("/close-socket")); EXPECT_NE(start_url.host(), error_url.host()); @@ -1865,7 +1846,7 @@ // blocked (net::ERR_BLOCKED_BY_CLIENT) while departing from a privileged WebUI // page (chrome://gpu). It is a security risk for the error page to commit in // the privileged process. -IN_PROC_BROWSER_TEST_F(PlzNavigateNavigationHandleImplBrowserTest, +IN_PROC_BROWSER_TEST_F(NavigationHandleImplBrowserTest, BlockedRequestAfterWebUI) { GURL web_ui_url("chrome://gpu"); WebContents* web_contents = shell()->web_contents();
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc index 5b58e261..29b6798 100644 --- a/content/browser/frame_host/render_frame_host_impl.cc +++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -1063,6 +1063,10 @@ child->current_frame_host()->LeaveBackForwardCache(); } +void RenderFrameHostImpl::OnPortalActivated() { + frame_->OnPortalActivated(); +} + SiteInstanceImpl* RenderFrameHostImpl::GetSiteInstance() { return site_instance_.get(); }
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h index d44fd23..921a7ee 100644 --- a/content/browser/frame_host/render_frame_host_impl.h +++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -861,6 +861,10 @@ // NavigationRequest's has been cancelled. void NavigationRequestCancelled(NavigationRequest* navigation_request); + // Called on the main frame of a page embedded in a Portal when it is + // activated. + void OnPortalActivated(); + protected: friend class RenderFrameHostFactory;
diff --git a/content/browser/gpu/gpu_data_manager_impl_private.cc b/content/browser/gpu/gpu_data_manager_impl_private.cc index ed537418..165be2e8 100644 --- a/content/browser/gpu/gpu_data_manager_impl_private.cc +++ b/content/browser/gpu/gpu_data_manager_impl_private.cc
@@ -50,7 +50,7 @@ #include "media/media_buildflags.h" #include "ui/base/ui_base_switches.h" #include "ui/gfx/switches.h" -#include "ui/gl/gl_features.h" +#include "ui/gl/buildflags.h" #include "ui/gl/gl_implementation.h" #include "ui/gl/gl_switches.h" #include "ui/gl/gpu_switching_manager.h"
diff --git a/content/browser/portal/portal.cc b/content/browser/portal/portal.cc index 4be1bc3..24db9f4 100644 --- a/content/browser/portal/portal.cc +++ b/content/browser/portal/portal.cc
@@ -121,6 +121,7 @@ // TODO(lfg): The old WebContents is currently discarded, but should be // kept and passed to the new page. portal_contents_impl_->set_portal(nullptr); + portal_contents_impl_->GetMainFrame()->OnPortalActivated(); std::move(callback).Run(blink::mojom::PortalActivationStatus::kSuccess); } else { DCHECK_EQ(portal_contents_impl_, contents.get());
diff --git a/content/browser/renderer_host/input/touch_action_filter.cc b/content/browser/renderer_host/input/touch_action_filter.cc index 7659eaf..32f9569 100644 --- a/content/browser/renderer_host/input/touch_action_filter.cc +++ b/content/browser/renderer_host/input/touch_action_filter.cc
@@ -140,13 +140,6 @@ base::Optional<cc::TouchAction> touch_action = active_touch_action_.has_value() ? active_touch_action_ : white_listed_touch_action_; - if (compositor_touch_action_enabled_ && !touch_action.has_value()) { - static auto* crash_key = base::debug::AllocateCrashKeyString( - "scroll-gestures", base::debug::CrashKeySize::Size256); - base::debug::SetCrashKeyString(crash_key, gesture_sequence_); - base::debug::DumpWithoutCrashing(); - gesture_sequence_.clear(); - } // Filter for allowable touch actions first (eg. before the TouchEventQueue // can decide to send a touch cancel event). @@ -162,13 +155,19 @@ } } gesture_sequence_.append("B"); - if (!compositor_touch_action_enabled_) { - if (!active_touch_action_.has_value()) { - static auto* crash_key = base::debug::AllocateCrashKeyString( - "scrollbegin-gestures", base::debug::CrashKeySize::Size256); - base::debug::SetCrashKeyString(crash_key, gesture_sequence_); - gesture_sequence_.clear(); - } + if (!compositor_touch_action_enabled_ && + !active_touch_action_.has_value()) { + static auto* crash_key = base::debug::AllocateCrashKeyString( + "scrollbegin-gestures", base::debug::CrashKeySize::Size256); + base::debug::SetCrashKeyString(crash_key, gesture_sequence_); + gesture_sequence_.clear(); + } + if (compositor_touch_action_enabled_ && !touch_action.has_value()) { + static auto* crash_key = base::debug::AllocateCrashKeyString( + "scroll-gestures", base::debug::CrashKeySize::Size256); + base::debug::SetCrashKeyString(crash_key, gesture_sequence_); + base::debug::DumpWithoutCrashing(); + gesture_sequence_.clear(); } DCHECK(touch_action.has_value()); drop_scroll_events_ =
diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc index 553836de..e222e3f 100644 --- a/content/browser/renderer_host/media/media_stream_manager.cc +++ b/content/browser/renderer_host/media/media_stream_manager.cc
@@ -1119,8 +1119,12 @@ // If using the fake UI, it will just auto-select from the available devices. // The fake UI doesn't work for desktop sharing requests since we can't see - // its devices from here; always use the real UI for such requests. - if (fake_ui_factory_) { + // its devices from here; always use the real UI for such requests. The + // processing below for MEDIA_GUM_DESKTOP_VIDEO_CAPTURE is for unittests only. + if (fake_ui_factory_ && + (request->video_type() != MEDIA_GUM_DESKTOP_VIDEO_CAPTURE || + !base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kUseFakeUIForMediaStream))) { MediaStreamDevices devices; if (request->video_type() == MEDIA_DISPLAY_VIDEO_CAPTURE) { devices.push_back(MediaStreamDeviceFromFakeDeviceConfig());
diff --git a/content/common/frame.mojom b/content/common/frame.mojom index b5475447..e566a15 100644 --- a/content/common/frame.mojom +++ b/content/common/frame.mojom
@@ -23,6 +23,7 @@ import "third_party/blink/public/mojom/feature_policy/feature_policy.mojom"; import "third_party/blink/public/mojom/frame/navigation_initiator.mojom"; import "third_party/blink/public/mojom/loader/url_loader_factory_bundle.mojom"; +import "third_party/blink/public/mojom/portal/portal.mojom"; import "third_party/blink/public/mojom/referrer.mojom"; import "third_party/blink/public/mojom/service_worker/controller_service_worker.mojom"; import "third_party/blink/public/web/commit_result.mojom"; @@ -53,6 +54,10 @@ // Cancels blocked requests. BlockRequests must have been called before. CancelBlockedRequests(); + // Called on the main frame of a page embedded in a Portal when it is + // activated. + OnPortalActivated(); + // Samsung Galaxy Note-specific "smart clip" stylus text getter. // Extracts the data at the given rect. [EnableIf=is_android]
diff --git a/content/public/common/mhtml_generation_params.h b/content/public/common/mhtml_generation_params.h index 01c3fb77..12aa5adb 100644 --- a/content/public/common/mhtml_generation_params.h +++ b/content/public/common/mhtml_generation_params.h
@@ -34,6 +34,10 @@ // Run page problem detectors while generating MTHML if true. bool use_page_problem_detectors = false; + + // Whether to use Mojo for the MHTML serialization pipeline. + // This is triggered by the feature flag kOnTheFlyMhtmlHashComputation. + bool use_mojo_for_mhtml_serialization = false; }; } // namespace content
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn index 0f54eee..e61d93a2 100644 --- a/content/renderer/BUILD.gn +++ b/content/renderer/BUILD.gn
@@ -350,12 +350,12 @@ "media/webrtc/rtc_event_log_output_sink_proxy.h", "media/webrtc/rtc_peer_connection_handler.cc", "media/webrtc/rtc_peer_connection_handler.h", - "media/webrtc/rtc_rtp_contributing_source.cc", - "media/webrtc/rtc_rtp_contributing_source.h", "media/webrtc/rtc_rtp_receiver.cc", "media/webrtc/rtc_rtp_receiver.h", "media/webrtc/rtc_rtp_sender.cc", "media/webrtc/rtc_rtp_sender.h", + "media/webrtc/rtc_rtp_source.cc", + "media/webrtc/rtc_rtp_source.h", "media/webrtc/rtc_rtp_transceiver.cc", "media/webrtc/rtc_rtp_transceiver.h", "media/webrtc/rtc_stats.cc",
diff --git a/content/renderer/media/webrtc/fake_rtc_rtp_transceiver.cc b/content/renderer/media/webrtc/fake_rtc_rtp_transceiver.cc index 9acfcd5..387d600 100644 --- a/content/renderer/media/webrtc/fake_rtc_rtp_transceiver.cc +++ b/content/renderer/media/webrtc/fake_rtc_rtp_transceiver.cc
@@ -117,7 +117,7 @@ return web_stream_ids; } -blink::WebVector<std::unique_ptr<blink::WebRTCRtpContributingSource>> +blink::WebVector<std::unique_ptr<blink::WebRTCRtpSource>> FakeRTCRtpReceiver::GetSources() { NOTIMPLEMENTED(); return {};
diff --git a/content/renderer/media/webrtc/fake_rtc_rtp_transceiver.h b/content/renderer/media/webrtc/fake_rtc_rtp_transceiver.h index a249e5c..2df11c6d 100644 --- a/content/renderer/media/webrtc/fake_rtc_rtp_transceiver.h +++ b/content/renderer/media/webrtc/fake_rtc_rtp_transceiver.h
@@ -12,9 +12,9 @@ #include "third_party/blink/public/platform/web_media_stream_source.h" #include "third_party/blink/public/platform/web_media_stream_track.h" #include "third_party/blink/public/platform/web_rtc_dtmf_sender_handler.h" -#include "third_party/blink/public/platform/web_rtc_rtp_contributing_source.h" #include "third_party/blink/public/platform/web_rtc_rtp_receiver.h" #include "third_party/blink/public/platform/web_rtc_rtp_sender.h" +#include "third_party/blink/public/platform/web_rtc_rtp_source.h" #include "third_party/blink/public/platform/web_rtc_rtp_transceiver.h" namespace content { @@ -63,8 +63,8 @@ uintptr_t Id() const override; const blink::WebMediaStreamTrack& Track() const override; blink::WebVector<blink::WebString> StreamIds() const override; - blink::WebVector<std::unique_ptr<blink::WebRTCRtpContributingSource>> - GetSources() override; + blink::WebVector<std::unique_ptr<blink::WebRTCRtpSource>> GetSources() + override; void GetStats(std::unique_ptr<blink::WebRTCStatsReportCallback>, blink::RTCStatsFilter) override; std::unique_ptr<webrtc::RtpParameters> GetParameters() const override;
diff --git a/content/renderer/media/webrtc/rtc_rtp_contributing_source.cc b/content/renderer/media/webrtc/rtc_rtp_contributing_source.cc deleted file mode 100644 index 1ed84f1..0000000 --- a/content/renderer/media/webrtc/rtc_rtp_contributing_source.cc +++ /dev/null
@@ -1,40 +0,0 @@ -// Copyright (c) 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "content/renderer/media/webrtc/rtc_rtp_contributing_source.h" - -#include "base/logging.h" -#include "base/time/time.h" -#include "third_party/webrtc/rtc_base/scoped_ref_ptr.h" - -namespace content { - -RTCRtpContributingSource::RTCRtpContributingSource( - const webrtc::RtpSource& source) - : source_(source) {} - -RTCRtpContributingSource::~RTCRtpContributingSource() {} - -blink::WebRTCRtpContributingSourceType RTCRtpContributingSource::SourceType() - const { - switch (source_.source_type()) { - case webrtc::RtpSourceType::SSRC: - return blink::WebRTCRtpContributingSourceType::SSRC; - case webrtc::RtpSourceType::CSRC: - return blink::WebRTCRtpContributingSourceType::CSRC; - default: - NOTREACHED(); - return blink::WebRTCRtpContributingSourceType::SSRC; - } -} - -double RTCRtpContributingSource::TimestampMs() const { - return source_.timestamp_ms(); -} - -uint32_t RTCRtpContributingSource::Source() const { - return source_.source_id(); -} - -} // namespace content
diff --git a/content/renderer/media/webrtc/rtc_rtp_contributing_source.h b/content/renderer/media/webrtc/rtc_rtp_contributing_source.h deleted file mode 100644 index 14395ab..0000000 --- a/content/renderer/media/webrtc/rtc_rtp_contributing_source.h +++ /dev/null
@@ -1,34 +0,0 @@ -// Copyright (c) 2017 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 CONTENT_RENDERER_MEDIA_WEBRTC_RTC_RTP_CONTRIBUTING_SOURCE_H_ -#define CONTENT_RENDERER_MEDIA_WEBRTC_RTC_RTP_CONTRIBUTING_SOURCE_H_ - -#include "base/macros.h" -#include "base/memory/ref_counted.h" -#include "content/common/content_export.h" -#include "third_party/blink/public/platform/web_rtc_rtp_contributing_source.h" -#include "third_party/webrtc/api/rtpreceiverinterface.h" - -namespace content { - -class CONTENT_EXPORT RTCRtpContributingSource - : public blink::WebRTCRtpContributingSource { - public: - explicit RTCRtpContributingSource(const webrtc::RtpSource& source); - ~RTCRtpContributingSource() override; - - blink::WebRTCRtpContributingSourceType SourceType() const override; - double TimestampMs() const override; - uint32_t Source() const override; - - private: - const webrtc::RtpSource source_; - - DISALLOW_COPY_AND_ASSIGN(RTCRtpContributingSource); -}; - -} // namespace content - -#endif // CONTENT_RENDERER_MEDIA_WEBRTC_RTC_RTP_CONTRIBUTING_SOURCE_H_
diff --git a/content/renderer/media/webrtc/rtc_rtp_receiver.cc b/content/renderer/media/webrtc/rtc_rtp_receiver.cc index 6da9acd..527079b 100644 --- a/content/renderer/media/webrtc/rtc_rtp_receiver.cc +++ b/content/renderer/media/webrtc/rtc_rtp_receiver.cc
@@ -5,7 +5,7 @@ #include "content/renderer/media/webrtc/rtc_rtp_receiver.h" #include "base/logging.h" -#include "content/renderer/media/webrtc/rtc_rtp_contributing_source.h" +#include "content/renderer/media/webrtc/rtc_rtp_source.h" #include "content/renderer/media/webrtc/rtc_stats.h" #include "third_party/webrtc/rtc_base/scoped_ref_ptr.h" @@ -132,16 +132,14 @@ state_ = std::move(state); } - blink::WebVector<std::unique_ptr<blink::WebRTCRtpContributingSource>> - GetSources() { + blink::WebVector<std::unique_ptr<blink::WebRTCRtpSource>> GetSources() { // The webrtc_recever_ is a proxy, so this is a blocking call to the webrtc // signalling thread. auto webrtc_sources = webrtc_receiver_->GetSources(); - blink::WebVector<std::unique_ptr<blink::WebRTCRtpContributingSource>> - sources(webrtc_sources.size()); + blink::WebVector<std::unique_ptr<blink::WebRTCRtpSource>> sources( + webrtc_sources.size()); for (size_t i = 0; i < webrtc_sources.size(); ++i) { - sources[i] = - std::make_unique<RTCRtpContributingSource>(webrtc_sources[i]); + sources[i] = std::make_unique<RTCRtpSource>(webrtc_sources[i]); } return sources; } @@ -254,7 +252,7 @@ return web_stream_ids; } -blink::WebVector<std::unique_ptr<blink::WebRTCRtpContributingSource>> +blink::WebVector<std::unique_ptr<blink::WebRTCRtpSource>> RTCRtpReceiver::GetSources() { return internal_->GetSources(); }
diff --git a/content/renderer/media/webrtc/rtc_rtp_receiver.h b/content/renderer/media/webrtc/rtc_rtp_receiver.h index 77cff71..c9dca61 100644 --- a/content/renderer/media/webrtc/rtc_rtp_receiver.h +++ b/content/renderer/media/webrtc/rtc_rtp_receiver.h
@@ -115,8 +115,8 @@ uintptr_t Id() const override; const blink::WebMediaStreamTrack& Track() const override; blink::WebVector<blink::WebString> StreamIds() const override; - blink::WebVector<std::unique_ptr<blink::WebRTCRtpContributingSource>> - GetSources() override; + blink::WebVector<std::unique_ptr<blink::WebRTCRtpSource>> GetSources() + override; void GetStats(std::unique_ptr<blink::WebRTCStatsReportCallback>, blink::RTCStatsFilter) override; std::unique_ptr<webrtc::RtpParameters> GetParameters() const override;
diff --git a/content/renderer/media/webrtc/rtc_rtp_source.cc b/content/renderer/media/webrtc/rtc_rtp_source.cc new file mode 100644 index 0000000..ae590c5 --- /dev/null +++ b/content/renderer/media/webrtc/rtc_rtp_source.cc
@@ -0,0 +1,37 @@ +// Copyright (c) 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "content/renderer/media/webrtc/rtc_rtp_source.h" + +#include "base/logging.h" +#include "base/time/time.h" +#include "third_party/webrtc/rtc_base/scoped_ref_ptr.h" + +namespace content { + +RTCRtpSource::RTCRtpSource(const webrtc::RtpSource& source) : source_(source) {} + +RTCRtpSource::~RTCRtpSource() {} + +blink::WebRTCRtpSource::Type RTCRtpSource::SourceType() const { + switch (source_.source_type()) { + case webrtc::RtpSourceType::SSRC: + return blink::WebRTCRtpSource::Type::kSSRC; + case webrtc::RtpSourceType::CSRC: + return blink::WebRTCRtpSource::Type::kCSRC; + default: + NOTREACHED(); + return blink::WebRTCRtpSource::Type::kSSRC; + } +} + +double RTCRtpSource::TimestampMs() const { + return source_.timestamp_ms(); +} + +uint32_t RTCRtpSource::Source() const { + return source_.source_id(); +} + +} // namespace content
diff --git a/content/renderer/media/webrtc/rtc_rtp_source.h b/content/renderer/media/webrtc/rtc_rtp_source.h new file mode 100644 index 0000000..a757618 --- /dev/null +++ b/content/renderer/media/webrtc/rtc_rtp_source.h
@@ -0,0 +1,33 @@ +// Copyright (c) 2017 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 CONTENT_RENDERER_MEDIA_WEBRTC_RTC_RTP_SOURCE_H_ +#define CONTENT_RENDERER_MEDIA_WEBRTC_RTC_RTP_SOURCE_H_ + +#include "base/macros.h" +#include "base/memory/ref_counted.h" +#include "content/common/content_export.h" +#include "third_party/blink/public/platform/web_rtc_rtp_source.h" +#include "third_party/webrtc/api/rtpreceiverinterface.h" + +namespace content { + +class CONTENT_EXPORT RTCRtpSource : public blink::WebRTCRtpSource { + public: + explicit RTCRtpSource(const webrtc::RtpSource& source); + ~RTCRtpSource() override; + + blink::WebRTCRtpSource::Type SourceType() const override; + double TimestampMs() const override; + uint32_t Source() const override; + + private: + const webrtc::RtpSource source_; + + DISALLOW_COPY_AND_ASSIGN(RTCRtpSource); +}; + +} // namespace content + +#endif // CONTENT_RENDERER_MEDIA_WEBRTC_RTC_RTP_SOURCE_H_
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index d3d99b6..1837715 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc
@@ -2575,6 +2575,10 @@ routing_id_, callback_id, response)); } +void RenderFrameImpl::OnPortalActivated() { + frame_->OnPortalActivated(); +} + #if defined(OS_ANDROID) void RenderFrameImpl::ExtractSmartClipData( const gfx::Rect& rect,
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h index 6949c53..e3a09c0 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h
@@ -546,6 +546,7 @@ void BlockRequests() override; void ResumeBlockedRequests() override; void CancelBlockedRequests() override; + void OnPortalActivated() override; #if defined(OS_ANDROID) void ExtractSmartClipData( const gfx::Rect& rect,
diff --git a/content/shell/BUILD.gn b/content/shell/BUILD.gn index c80a9a48..9331f852 100644 --- a/content/shell/BUILD.gn +++ b/content/shell/BUILD.gn
@@ -440,6 +440,7 @@ if (is_chromeos) { deps += [ "//chromeos", + "//chromeos/dbus", "//services/ws/test_ws:lib", "//services/ws/test_ws:mojom", "//ui/wm:test_support",
diff --git a/device/BUILD.gn b/device/BUILD.gn index d94ffdcb..7d0b01d 100644 --- a/device/BUILD.gn +++ b/device/BUILD.gn
@@ -213,7 +213,6 @@ deps += [ "//chromeos", "//chromeos:test_support", - "//chromeos:test_support_without_gmock", ] }
diff --git a/device/bluetooth/BUILD.gn b/device/bluetooth/BUILD.gn index 851b4f3..238a8ab14 100644 --- a/device/bluetooth/BUILD.gn +++ b/device/bluetooth/BUILD.gn
@@ -234,7 +234,10 @@ } if (is_chromeos) { - deps += [ "//chromeos" ] + deps += [ + "//chromeos", + "//chromeos/dbus", + ] } if (is_mac) {
diff --git a/device/gamepad/abstract_haptic_gamepad.cc b/device/gamepad/abstract_haptic_gamepad.cc index e0376aa..7c22ce0 100644 --- a/device/gamepad/abstract_haptic_gamepad.cc +++ b/device/gamepad/abstract_haptic_gamepad.cc
@@ -12,7 +12,7 @@ } // namespace AbstractHapticGamepad::AbstractHapticGamepad() - : is_shut_down_(false), sequence_id_(0) {} + : is_shut_down_(false), sequence_id_(0), weak_factory_(this) {} AbstractHapticGamepad::~AbstractHapticGamepad() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); @@ -114,7 +114,7 @@ base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( FROM_HERE, base::BindOnce(&AbstractHapticGamepad::StartVibration, - base::Unretained(this), sequence_id, duration, + weak_factory_.GetWeakPtr(), sequence_id, duration, strong_magnitude, weak_magnitude), base::TimeDelta::FromMillisecondsD(start_delay)); } @@ -136,14 +136,14 @@ base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( FROM_HERE, base::BindOnce(&AbstractHapticGamepad::StartVibration, - base::Unretained(this), sequence_id, remaining_duration, - strong_magnitude, weak_magnitude), + weak_factory_.GetWeakPtr(), sequence_id, + remaining_duration, strong_magnitude, weak_magnitude), base::TimeDelta::FromMillisecondsD(max_duration)); } else { base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( FROM_HERE, base::BindOnce(&AbstractHapticGamepad::FinishEffect, - base::Unretained(this), sequence_id), + weak_factory_.GetWeakPtr(), sequence_id), base::TimeDelta::FromMillisecondsD(duration)); } }
diff --git a/device/gamepad/abstract_haptic_gamepad.h b/device/gamepad/abstract_haptic_gamepad.h index 74d768d4..2177560a 100644 --- a/device/gamepad/abstract_haptic_gamepad.h +++ b/device/gamepad/abstract_haptic_gamepad.h
@@ -6,6 +6,7 @@ #define DEVICE_GAMEPAD_ABSTRACT_HAPTIC_GAMEPAD_ #include "base/memory/scoped_refptr.h" +#include "base/memory/weak_ptr.h" #include "base/sequenced_task_runner.h" #include "base/threading/thread_checker.h" #include "base/time/time.h" @@ -83,6 +84,7 @@ playing_effect_callback_; scoped_refptr<base::SequencedTaskRunner> callback_runner_; THREAD_CHECKER(thread_checker_); + base::WeakPtrFactory<AbstractHapticGamepad> weak_factory_; }; } // namespace device
diff --git a/device/usb/BUILD.gn b/device/usb/BUILD.gn index 3248fe6b4..cccf4e8 100644 --- a/device/usb/BUILD.gn +++ b/device/usb/BUILD.gn
@@ -122,6 +122,7 @@ if (is_chromeos) { deps += [ "//chromeos", + "//chromeos/dbus", "//dbus", ] }
diff --git a/device/usb/mojo/BUILD.gn b/device/usb/mojo/BUILD.gn index d175ad4..2102e69 100644 --- a/device/usb/mojo/BUILD.gn +++ b/device/usb/mojo/BUILD.gn
@@ -25,6 +25,6 @@ ] if (is_chromeos) { - deps += [ "//chromeos/dbus:dbus" ] + deps += [ "//chromeos/dbus" ] } }
diff --git a/extensions/browser/BUILD.gn b/extensions/browser/BUILD.gn index d6b0fe3..13cd7d8 100644 --- a/extensions/browser/BUILD.gn +++ b/extensions/browser/BUILD.gn
@@ -508,6 +508,7 @@ "//chromeos/audio", "//chromeos/dbus:media_perception_proto", "//chromeos/dbus:power_manager_proto", + "//chromeos/dbus:test_support", "//chromeos/login/login_state", ] } @@ -695,6 +696,7 @@ deps += [ "//chromeos:test_support", "//chromeos/dbus:media_perception_proto", + "//chromeos/dbus:test_support", "//chromeos/login/login_state", "//components/feedback", "//extensions/shell:app_shell_lib",
diff --git a/extensions/browser/api/BUILD.gn b/extensions/browser/api/BUILD.gn index 19acd3d4..855f389 100644 --- a/extensions/browser/api/BUILD.gn +++ b/extensions/browser/api/BUILD.gn
@@ -143,6 +143,7 @@ deps += [ "//chromeos", + "//chromeos/dbus", "//chromeos/dbus:media_perception_proto", "//chromeos/login/login_state", "//chromeos/services/media_perception/public/mojom",
diff --git a/extensions/shell/BUILD.gn b/extensions/shell/BUILD.gn index f1f731f..7a5a2980 100644 --- a/extensions/shell/BUILD.gn +++ b/extensions/shell/BUILD.gn
@@ -229,6 +229,7 @@ deps += [ "//chromeos", "//chromeos/audio", + "//chromeos/dbus", "//chromeos/disks", "//chromeos/login/login_state", "//ui/chromeos", @@ -354,9 +355,9 @@ "browser/shell_screen_unittest.cc", ] deps += [ - "//chromeos", - "//chromeos:test_support_without_gmock", + "//chromeos:test_support", "//chromeos/audio", + "//chromeos/dbus:test_support", ] }
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc index 0a27c82..7036cc8f 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc
@@ -218,15 +218,28 @@ DestroyPendingTextures(have_context); } -ScopedFramebufferBindingReset::ScopedFramebufferBindingReset(gl::GLApi* api) - : api_(api), draw_framebuffer_(0), read_framebuffer_(0) { - api_->glGetIntegervFn(GL_DRAW_FRAMEBUFFER_BINDING, &draw_framebuffer_); - api_->glGetIntegervFn(GL_READ_FRAMEBUFFER_BINDING, &read_framebuffer_); +ScopedFramebufferBindingReset::ScopedFramebufferBindingReset( + gl::GLApi* api, + bool supports_separate_fbo_bindings) + : api_(api), + supports_separate_fbo_bindings_(supports_separate_fbo_bindings), + draw_framebuffer_(0), + read_framebuffer_(0) { + if (supports_separate_fbo_bindings_) { + api_->glGetIntegervFn(GL_DRAW_FRAMEBUFFER_BINDING, &draw_framebuffer_); + api_->glGetIntegervFn(GL_READ_FRAMEBUFFER_BINDING, &read_framebuffer_); + } else { + api_->glGetIntegervFn(GL_FRAMEBUFFER_BINDING, &draw_framebuffer_); + } } ScopedFramebufferBindingReset::~ScopedFramebufferBindingReset() { - api_->glBindFramebufferEXTFn(GL_DRAW_FRAMEBUFFER, draw_framebuffer_); - api_->glBindFramebufferEXTFn(GL_READ_FRAMEBUFFER, read_framebuffer_); + if (supports_separate_fbo_bindings_) { + api_->glBindFramebufferEXTFn(GL_DRAW_FRAMEBUFFER, draw_framebuffer_); + api_->glBindFramebufferEXTFn(GL_READ_FRAMEBUFFER, read_framebuffer_); + } else { + api_->glBindFramebufferEXTFn(GL_FRAMEBUFFER, draw_framebuffer_); + } } ScopedRenderbufferBindingReset::ScopedRenderbufferBindingReset(gl::GLApi* api) @@ -344,9 +357,13 @@ EmulatedDefaultFramebuffer( gl::GLApi* api, const EmulatedDefaultFramebufferFormat& format_in, - const FeatureInfo* feature_info) - : api(api), format(format_in) { - ScopedFramebufferBindingReset scoped_fbo_reset(api); + const FeatureInfo* feature_info, + bool supports_separate_fbo_bindings_in) + : api(api), + supports_separate_fbo_bindings(supports_separate_fbo_bindings_in), + format(format_in) { + ScopedFramebufferBindingReset scoped_fbo_reset( + api, supports_separate_fbo_bindings); ScopedRenderbufferBindingReset scoped_renderbuffer_reset(api); api->glGenFramebuffersEXTFn(1, &framebuffer_service_id); @@ -415,7 +432,8 @@ color_texture = std::move(new_color_buffer); // Bind the new texture to this FBO - ScopedFramebufferBindingReset scoped_fbo_reset(api); + ScopedFramebufferBindingReset scoped_fbo_reset( + api, supports_separate_fbo_bindings); api->glBindFramebufferEXTFn(GL_FRAMEBUFFER, framebuffer_service_id); api->glFramebufferTexture2DEXTFn(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, @@ -429,7 +447,8 @@ DCHECK(target != nullptr); DCHECK(target->size == size); - ScopedFramebufferBindingReset scoped_fbo_reset(api); + ScopedFramebufferBindingReset scoped_fbo_reset( + api, supports_separate_fbo_bindings); api->glBindFramebufferEXTFn(GL_READ_FRAMEBUFFER, framebuffer_service_id); @@ -478,7 +497,8 @@ // Check that the framebuffer is complete { - ScopedFramebufferBindingReset scoped_fbo_reset(api); + ScopedFramebufferBindingReset scoped_fbo_reset( + api, supports_separate_fbo_bindings); api->glBindFramebufferEXTFn(GL_FRAMEBUFFER, framebuffer_service_id); if (api->glCheckFramebufferStatusEXTFn(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { @@ -681,6 +701,13 @@ surface_ = surface; offscreen_ = offscreen; + // For WebGL contexts, log GL errors so they appear in devtools. Otherwise + // only enable debug logging if requested. + bool log_non_errors = + group_->gpu_preferences().enable_gpu_driver_debug_logging; + InitializeGLDebugLogging(log_non_errors, PassthroughGLDebugMessageCallback, + this); + // Create GPU Tracer for timing values. gpu_tracer_.reset(new GPUTracer(this)); @@ -852,13 +879,6 @@ bound_buffers_[GL_DISPATCH_INDIRECT_BUFFER] = 0; } - // For WebGL contexts, log GL errors so they appear in devtools. Otherwise - // only enable debug logging if requested. - bool log_non_errors = - group_->gpu_preferences().enable_gpu_driver_debug_logging; - InitializeGLDebugLogging(log_non_errors, PassthroughGLDebugMessageCallback, - this); - if (feature_info_->feature_flags().chromium_texture_filtering_hint && feature_info_->feature_flags().is_swiftshader) { api()->glHintFn(GL_TEXTURE_FILTERING_HINT_CHROMIUM, GL_NICEST); @@ -926,7 +946,8 @@ CheckErrorCallbackState(); emulated_back_buffer_ = std::make_unique<EmulatedDefaultFramebuffer>( - api(), emulated_default_framebuffer_format_, feature_info_.get()); + api(), emulated_default_framebuffer_format_, feature_info_.get(), + supports_separate_fbo_bindings_); // Make sure to use a non-empty offscreen surface so that the framebuffer is // complete. gfx::Size initial_size(
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.h b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.h index c2d06e1..fbb6cc93 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough.h
@@ -111,11 +111,13 @@ class ScopedFramebufferBindingReset { public: - explicit ScopedFramebufferBindingReset(gl::GLApi* api); + explicit ScopedFramebufferBindingReset(gl::GLApi* api, + bool supports_separate_fbo_bindings); ~ScopedFramebufferBindingReset(); private: gl::GLApi* api_; + bool supports_separate_fbo_bindings_; GLint draw_framebuffer_; GLint read_framebuffer_; }; @@ -767,7 +769,8 @@ EmulatedDefaultFramebuffer( gl::GLApi* api, const EmulatedDefaultFramebufferFormat& format_in, - const FeatureInfo* feature_info); + const FeatureInfo* feature_info, + bool supports_separate_fbo_bindings); ~EmulatedDefaultFramebuffer(); // Set a new color buffer, return the old one @@ -781,6 +784,7 @@ void Destroy(bool have_context); gl::GLApi* api; + bool supports_separate_fbo_bindings = false; // Service ID of the framebuffer GLuint framebuffer_service_id = 0; @@ -823,6 +827,9 @@ GLuint bound_draw_framebuffer_; GLuint bound_read_framebuffer_; + // If this context supports both read and draw framebuffer bindings + bool supports_separate_fbo_bindings_ = false; + // Tracing std::unique_ptr<GPUTracer> gpu_tracer_; const unsigned char* gpu_decoder_category_ = nullptr;
diff --git a/gpu/command_buffer/tests/fuzzer_main.cc b/gpu/command_buffer/tests/fuzzer_main.cc index 6e4e7f8..cba932c 100644 --- a/gpu/command_buffer/tests/fuzzer_main.cc +++ b/gpu/command_buffer/tests/fuzzer_main.cc
@@ -400,26 +400,33 @@ } void ResetDecoder() { + bool context_lost = false; + if (decoder_) { #if !defined(GPU_FUZZER_USE_RASTER_DECODER) - // Keep a reference to the translators, which keeps them in the cache even - // after the decoder is reset. They are expensive to initialize, but they - // don't keep state. - scoped_refptr<gles2::ShaderTranslatorInterface> translator = - decoder_->GetTranslator(GL_VERTEX_SHADER); - if (translator) - translator->AddRef(); - translator = decoder_->GetTranslator(GL_FRAGMENT_SHADER); - if (translator) - translator->AddRef(); + // Keep a reference to the translators, which keeps them in the cache even + // after the decoder is reset. They are expensive to initialize, but they + // don't keep state. + scoped_refptr<gles2::ShaderTranslatorInterface> translator = + decoder_->GetTranslator(GL_VERTEX_SHADER); + if (translator) + translator->AddRef(); + translator = decoder_->GetTranslator(GL_FRAGMENT_SHADER); + if (translator) + translator->AddRef(); #endif - bool context_lost = - decoder_->WasContextLost() || !decoder_->CheckResetStatus(); - decoder_->Destroy(!context_lost); - decoder_.reset(); - if (recreate_context_ || context_lost) { - context_->ReleaseCurrent(nullptr); - context_ = nullptr; + context_lost = + decoder_->WasContextLost() || !decoder_->CheckResetStatus(); + decoder_->Destroy(!context_lost); + decoder_.reset(); } + + if (context_) { + if (recreate_context_ || context_lost) { + context_->ReleaseCurrent(nullptr); + context_ = nullptr; + } + } + command_buffer_.reset(); } @@ -438,8 +445,10 @@ if (padded_size > kCommandBufferSize) return; - if (!InitDecoder()) + if (!InitDecoder()) { + ResetDecoder(); return; + } uint32_t buffer_size = buffer_->size(); CHECK_LE(padded_size, buffer_size);
diff --git a/gpu/config/BUILD.gn b/gpu/config/BUILD.gn index 495a9ee..70df682 100644 --- a/gpu/config/BUILD.gn +++ b/gpu/config/BUILD.gn
@@ -157,7 +157,7 @@ "//media:media_buildflags", "//third_party/re2", "//ui/gl", - "//ui/gl:gl_features", + "//ui/gl:buildflags", "//ui/gl/init", ]
diff --git a/gpu/config/gpu_util.cc b/gpu/config/gpu_util.cc index 32dfbd4..a4237b2 100644 --- a/gpu/config/gpu_util.cc +++ b/gpu/config/gpu_util.cc
@@ -25,7 +25,7 @@ #include "gpu/config/gpu_preferences.h" #include "gpu/config/gpu_switches.h" #include "ui/gfx/extension_set.h" -#include "ui/gl/gl_features.h" +#include "ui/gl/buildflags.h" #include "ui/gl/gl_switches.h" #if defined(OS_ANDROID)
diff --git a/gpu/ipc/service/BUILD.gn b/gpu/ipc/service/BUILD.gn index e33a4d3..9316a1e3 100644 --- a/gpu/ipc/service/BUILD.gn +++ b/gpu/ipc/service/BUILD.gn
@@ -56,7 +56,7 @@ "//ui/gfx", "//ui/gfx/geometry", "//ui/gl", - "//ui/gl:gl_features", + "//ui/gl:buildflags", "//ui/gl/init", "//url", ]
diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc index 1c5b6fdf..24e258d 100644 --- a/gpu/ipc/service/gpu_init.cc +++ b/gpu/ipc/service/gpu_init.cc
@@ -23,7 +23,7 @@ #include "gpu/ipc/service/gpu_watchdog_thread.h" #include "ui/base/ui_base_features.h" #include "ui/gfx/switches.h" -#include "ui/gl/gl_features.h" +#include "ui/gl/buildflags.h" #include "ui/gl/gl_implementation.h" #include "ui/gl/gl_surface.h" #include "ui/gl/gl_switches.h"
diff --git a/infra/config/global/cr-buildbucket.cfg b/infra/config/global/cr-buildbucket.cfg index a5337b6f..5623225 100644 --- a/infra/config/global/cr-buildbucket.cfg +++ b/infra/config/global/cr-buildbucket.cfg
@@ -3122,6 +3122,7 @@ builders { mixins: "chromeos-try" name: "chromeos-amd64-generic-rel" } builders { mixins: "chromeos-try" name: "chromeos-daisy-rel" } + builders { mixins: "chromeos-try" name: "chromeos-kevin-rel" } builders { mixins: "chromeos-try" name: "linux-chromeos-compile-dbg" } builders { mixins: "chromeos-try" name: "linux-chromeos-dbg" } builders { @@ -3537,7 +3538,11 @@ # Mac - builders { mixins: "mac" name: "WebRTC Chromium Mac Builder" } + builders { + name: "WebRTC Chromium Mac Builder" + mixins: "mac" + dimensions: "cores:8" + } builders { mixins: "mac" name: "WebRTC Chromium Mac Tester" } # Win @@ -3597,8 +3602,16 @@ # Mac - builders { mixins: "mac" name: "WebRTC Chromium FYI Mac Builder" } - builders { mixins: "mac" name: "WebRTC Chromium FYI Mac Builder (dbg)" } + builders { + name: "WebRTC Chromium FYI Mac Builder" + mixins: "mac" + dimensions: "cores:8" + } + builders { + name: "WebRTC Chromium FYI Mac Builder (dbg)" + mixins: "mac" + dimensions: "cores:8" + } builders { mixins: "mac" name: "WebRTC Chromium FYI Mac Tester" } # Win
diff --git a/infra/config/global/luci-milo.cfg b/infra/config/global/luci-milo.cfg index 9a9edd4..681ebf4 100644 --- a/infra/config/global/luci-milo.cfg +++ b/infra/config/global/luci-milo.cfg
@@ -1372,28 +1372,8 @@ short_name: "linux32-dbg" } builders { - name: "buildbucket/luci.chromium.ci/Libfuzzer Upload Linux32 V8-ARM ASan" - category: "libfuzz" - short_name: "arm" - } - builders { - name: "buildbucket/luci.chromium.ci/Libfuzzer Upload Linux32 V8-ARM ASan Debug" - category: "libfuzz" - short_name: "arm-dbg" - } - builders { name: "buildbucket/luci.chromium.ci/Libfuzzer Upload Linux ASan" category: "libfuzz" - short_name: "arm64" - } - builders { - name: "buildbucket/luci.chromium.ci/Libfuzzer Upload Linux V8-ARM64 ASan Debug" - category: "libfuzz" - short_name: "arm64-dbg" - } - builders { - name: "buildbucket/luci.chromium.ci/Libfuzzer Upload Linux V8-ARM64 ASan" - category: "libfuzz" short_name: "linux" } builders { @@ -1421,6 +1401,26 @@ category: "libfuzz" short_name: "win-asan" } + builders { + name: "buildbucket/luci.chromium.ci/Libfuzzer Upload Linux32 V8-ARM ASan" + category: "libfuzz" + short_name: "arm" + } + builders { + name: "buildbucket/luci.chromium.ci/Libfuzzer Upload Linux32 V8-ARM ASan Debug" + category: "libfuzz" + short_name: "arm-dbg" + } + builders { + name: "buildbucket/luci.chromium.ci/Libfuzzer Upload Linux V8-ARM64 ASan" + category: "libfuzz" + short_name: "arm64" + } + builders { + name: "buildbucket/luci.chromium.ci/Libfuzzer Upload Linux V8-ARM64 ASan Debug" + category: "libfuzz" + short_name: "arm64-dbg" + } builders { name: "buildbucket/luci.chromium.ci/MSAN Release (chained origins)" category: "linux msan" @@ -3917,6 +3917,9 @@ name: "buildbucket/luci.chromium.try/chromeos-daisy-rel" } builders { + name: "buildbucket/luci.chromium.try/chromeos-kevin-rel" + } + builders { name: "buildbucket/luci.chromium.try/linux-chromeos-compile-dbg" } builders {
diff --git a/ios/chrome/browser/ui/autofill/manual_fill/fallback_view_controller.mm b/ios/chrome/browser/ui/autofill/manual_fill/fallback_view_controller.mm index da1f1615..00f6bc7 100644 --- a/ios/chrome/browser/ui/autofill/manual_fill/fallback_view_controller.mm +++ b/ios/chrome/browser/ui/autofill/manual_fill/fallback_view_controller.mm
@@ -33,8 +33,26 @@ // loading indicator on iPad. constexpr CGFloat PopoverLoadingHeight = 185.5; +// If the loading indicator was shown, it will be on screen for at least this +// amount of seconds. +constexpr CGFloat kMinimumLoadingTime = 0.5; + } // namespace +@interface FallbackViewController () + +// The date when the loading indicator started or [NSDate distantPast] if it +// hasn't been shown. +@property(nonatomic, strong) NSDate* loadingIndicatorStartingDate; + +// Data Items to be shown when the loading indicator disappears. +@property(nonatomic, strong) NSArray<TableViewItem*>* queuedDataItems; + +// Action Items to be shown when the loading indicator disappears. +@property(nonatomic, strong) NSArray<TableViewItem*>* queuedActionItems; + +@end + @implementation FallbackViewController - (instancetype)init { @@ -51,6 +69,7 @@ selector:@selector(handleKeyboardDidHide:) name:UIKeyboardDidHideNotification object:nil]; + _loadingIndicatorStartingDate = [NSDate distantPast]; } return self; } @@ -75,37 +94,100 @@ PopoverPreferredWidth, AlignValueToPixel(PopoverLoadingHeight)); } [self startLoadingIndicatorWithLoadingMessage:@""]; + self.loadingIndicatorStartingDate = [NSDate date]; } } - (void)presentDataItems:(NSArray<TableViewItem*>*)items { + if (![self shouldPresentItems]) { + if (self.queuedDataItems) { + self.queuedDataItems = items; + return; + } + self.queuedDataItems = items; + NSTimeInterval remainingTime = + kMinimumLoadingTime - [self timeSinceLoadingIndicatorStarted]; + __weak __typeof(self) weakSelf = self; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, + (int64_t)(remainingTime * NSEC_PER_SEC)), + dispatch_get_main_queue(), ^{ + [weakSelf presentQueuedDataItems]; + }); + return; + } + self.queuedDataItems = items; + [self presentQueuedDataItems]; +} + +- (void)presentActionItems:(NSArray<TableViewItem*>*)actions { + if (![self shouldPresentItems]) { + if (self.queuedActionItems) { + self.queuedActionItems = actions; + return; + } + self.queuedActionItems = actions; + NSTimeInterval remainingTime = + kMinimumLoadingTime - [self timeSinceLoadingIndicatorStarted]; + __weak __typeof(self) weakSelf = self; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, + (int64_t)(remainingTime * NSEC_PER_SEC)), + dispatch_get_main_queue(), ^{ + [weakSelf presentQueuedActionItems]; + }); + return; + } + self.queuedActionItems = actions; + [self presentQueuedActionItems]; +} + +#pragma mark - Private + +// Presents the data items currently in queue. +- (void)presentQueuedDataItems { + DCHECK(self.queuedDataItems); [self createModelIfNeeded]; BOOL sectionExist = [self.tableViewModel hasSectionForSectionIdentifier:ItemsSectionIdentifier]; // If there are no passed items, remove section if exist. - if (!items.count && sectionExist) { + if (!self.queuedDataItems.count && sectionExist) { [self.tableViewModel removeSectionWithIdentifier:ItemsSectionIdentifier]; - } else if (items.count && !sectionExist) { + } else if (self.queuedDataItems.count && !sectionExist) { [self.tableViewModel insertSectionWithIdentifier:ItemsSectionIdentifier atIndex:0]; } - [self presentFallbackItems:items inSection:ItemsSectionIdentifier]; + [self presentFallbackItems:self.queuedDataItems + inSection:ItemsSectionIdentifier]; + self.queuedDataItems = nil; } -- (void)presentActionItems:(NSArray<TableViewItem*>*)actions { +// Presents the action items currently in queue. +- (void)presentQueuedActionItems { + DCHECK(self.queuedActionItems); [self createModelIfNeeded]; BOOL sectionExist = [self.tableViewModel hasSectionForSectionIdentifier:ActionsSectionIdentifier]; // If there are no passed items, remove section if exist. - if (!actions.count && sectionExist) { + if (!self.queuedActionItems.count && sectionExist) { [self.tableViewModel removeSectionWithIdentifier:ActionsSectionIdentifier]; - } else if (actions.count && !sectionExist) { + } else if (self.queuedActionItems.count && !sectionExist) { [self.tableViewModel addSectionWithIdentifier:ActionsSectionIdentifier]; } - [self presentFallbackItems:actions inSection:ActionsSectionIdentifier]; + [self presentFallbackItems:self.queuedActionItems + inSection:ActionsSectionIdentifier]; + self.queuedActionItems = nil; } -#pragma mark - Private +// Seconds since the loading indicator started. This is >> kMinimumLoadingTime +// if the loading indicator wasn't shown. +- (NSTimeInterval)timeSinceLoadingIndicatorStarted { + return + [[NSDate date] timeIntervalSinceDate:self.loadingIndicatorStartingDate]; +} + +// Indicates if the view is ready for data to be presented. +- (BOOL)shouldPresentItems { + return [self timeSinceLoadingIndicatorStarted] >= kMinimumLoadingTime; +} - (void)createModelIfNeeded { if (!self.tableViewModel) {
diff --git a/ios/net/BUILD.gn b/ios/net/BUILD.gn index 255e44c..bed74bbc 100644 --- a/ios/net/BUILD.gn +++ b/ios/net/BUILD.gn
@@ -25,7 +25,7 @@ ":ios_net_buildflags", "//base", "//net", - "//url:url_features", + "//url:buildflags", ] configs += [ "//build/config/compiler:enable_arc" ]
diff --git a/ios/net/protocol_handler_util.mm b/ios/net/protocol_handler_util.mm index 3d89bda..32f99d2 100644 --- a/ios/net/protocol_handler_util.mm +++ b/ios/net/protocol_handler_util.mm
@@ -18,8 +18,8 @@ #include "net/http/http_response_headers.h" #include "net/http/http_version.h" #include "net/url_request/url_request.h" +#include "url/buildflags.h" #include "url/gurl.h" -#include "url/url_features.h" #if !BUILDFLAG(USE_PLATFORM_ICU_ALTERNATIVES) #include "base/i18n/encoding_detection.h" // nogncheck
diff --git a/ios/web_view/internal/cwv_web_view.mm b/ios/web_view/internal/cwv_web_view.mm index 3b14574..5dc0652 100644 --- a/ios/web_view/internal/cwv_web_view.mm +++ b/ios/web_view/internal/cwv_web_view.mm
@@ -308,19 +308,6 @@ } - (void)webState:(web::WebState*)webState - didCommitNavigationWithDetails:(const web::LoadCommittedDetails&)details { - if (details.is_in_page) { - // Do not call webViewDidCommitNavigation: for fragment navigations. - return; - } - - if ([_navigationDelegate - respondsToSelector:@selector(webViewDidCommitNavigation:)]) { - [_navigationDelegate webViewDidCommitNavigation:self]; - } -} - -- (void)webState:(web::WebState*)webState didFinishNavigation:(web::NavigationContext*)navigation { [self updateNavigationAvailability]; [self updateCurrentURLs]; @@ -328,6 +315,12 @@ // TODO(crbug.com/898357): Remove this once crbug.com/898357 is fixed. [self updateVisibleSSLStatus]; + if (navigation->HasCommitted() && + [_navigationDelegate + respondsToSelector:@selector(webViewDidCommitNavigation:)]) { + [_navigationDelegate webViewDidCommitNavigation:self]; + } + NSError* error = navigation->GetError(); SEL selector = @selector(webView:didFailNavigationWithError:); if (error && [_navigationDelegate respondsToSelector:selector]) {
diff --git a/media/audio/BUILD.gn b/media/audio/BUILD.gn index d987050..9dc0255a 100644 --- a/media/audio/BUILD.gn +++ b/media/audio/BUILD.gn
@@ -273,8 +273,8 @@ ] configs += [ ":libcras" ] deps += [ - "//chromeos", "//chromeos/audio", + "//chromeos/dbus", ] } @@ -435,8 +435,8 @@ if (!is_chromecast) { deps += [ - "//chromeos", "//chromeos/audio", + "//chromeos/dbus:test_support", ] }
diff --git a/media/base/media_log.cc b/media/base/media_log.cc index 87a9fa0a..fd4c41b8 100644 --- a/media/base/media_log.cc +++ b/media/base/media_log.cc
@@ -265,10 +265,11 @@ const std::string& property, base::TimeDelta value) { std::unique_ptr<MediaLogEvent> event(CreateEvent(type)); - if (value.is_max()) - event->params.SetString(property, "unknown"); + double value_in_seconds = value.InSecondsF(); + if (std::isfinite(value_in_seconds)) + event->params.SetDouble(property, value_in_seconds); else - event->params.SetDouble(property, value.InSecondsF()); + event->params.SetString(property, "unknown"); return event; }
diff --git a/media/capture/BUILD.gn b/media/capture/BUILD.gn index 5c1939b0..d361a79 100644 --- a/media/capture/BUILD.gn +++ b/media/capture/BUILD.gn
@@ -268,7 +268,7 @@ public_deps += [ "//media/capture/video/chromeos/public" ] deps += [ "//build/config/linux/libdrm", - "//chromeos:chromeos", + "//chromeos/dbus", "//media/capture/video/chromeos/mojo:cros_camera", "//third_party/libsync", ] @@ -281,6 +281,7 @@ ] } } + source_set("test_support") { testonly = true @@ -392,7 +393,7 @@ ] deps += [ "//build/config/linux/libdrm", - "//chromeos:chromeos", + "//chromeos/dbus:test_support", "//media/capture/video/chromeos/mojo:cros_camera", "//mojo/core/embedder", "//third_party/libsync",
diff --git a/media/test/pipeline_integration_fuzzertest.cc b/media/test/pipeline_integration_fuzzertest.cc index d4e3b4d..0712901 100644 --- a/media/test/pipeline_integration_fuzzertest.cc +++ b/media/test/pipeline_integration_fuzzertest.cc
@@ -233,18 +233,21 @@ Environment* env = new Environment(); -// Entry point for LibFuzzer. -extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { - // Media pipeline starts new threads, which needs AtExitManager. - base::AtExitManager at_exit; +// Entry points for LibFuzzer. - // Media pipeline checks command line arguments internally. - base::CommandLine::Init(0, nullptr); +extern "C" int LLVMFuzzerInitialize(int* argc, char*** argv) { + base::CommandLine::Init(*argc, *argv); // |test| instances uses ScopedTaskEnvironment, which needs TestTimeouts. TestTimeouts::Initialize(); media::InitializeMediaLibrary(); + return 0; +} + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + // Media pipeline starts new threads, which needs AtExitManager. + base::AtExitManager at_exit; FuzzerVariant variant = PIPELINE_FUZZER_VARIANT;
diff --git a/net/BUILD.gn b/net/BUILD.gn index eebdea7..2675a1f 100644 --- a/net/BUILD.gn +++ b/net/BUILD.gn
@@ -314,6 +314,8 @@ "log/net_log_with_source.h", "socket/client_socket_handle.cc", "socket/client_socket_handle.h", + "socket/connect_job.cc", + "socket/connect_job.h", "socket/connection_attempts.h", "socket/next_proto.cc", "socket/next_proto.h", @@ -2208,7 +2210,7 @@ "//base", "//net/base/registry_controlled_domains", "//third_party/protobuf:protobuf_lite", - "//url:url_features", + "//url:buildflags", ] public_configs = net_configs @@ -5002,6 +5004,7 @@ "quic/quic_test_packet_maker.h", "quic/quic_utils_chromium_test.cc", "socket/client_socket_pool_base_unittest.cc", + "socket/connect_job_unittest.cc", "socket/mock_client_socket_pool_manager.cc", "socket/mock_client_socket_pool_manager.h", "socket/sequenced_socket_data_unittest.cc", @@ -5365,7 +5368,7 @@ "//third_party/protobuf:protobuf_lite", "//third_party/zlib", "//url", - "//url:url_features", + "//url:buildflags", ] if (enable_websockets) {
diff --git a/net/android/java/src/org/chromium/net/X509Util.java b/net/android/java/src/org/chromium/net/X509Util.java index bcd475e7..9b8317b 100644 --- a/net/android/java/src/org/chromium/net/X509Util.java +++ b/net/android/java/src/org/chromium/net/X509Util.java
@@ -17,6 +17,7 @@ import org.chromium.base.ContextUtils; import org.chromium.base.annotations.JNINamespace; +import org.chromium.base.annotations.MainDex; import org.chromium.base.metrics.RecordHistogram; import java.io.ByteArrayInputStream; @@ -49,8 +50,8 @@ * Utility functions for verifying X.509 certificates. */ @JNINamespace("net") +@MainDex public class X509Util { - private static final String TAG = "X509Util"; private static final class TrustStorageListener extends BroadcastReceiver {
diff --git a/net/base/registry_controlled_domains/registry_controlled_domain_unittest.cc b/net/base/registry_controlled_domains/registry_controlled_domain_unittest.cc index 0884636..1d23d6b 100644 --- a/net/base/registry_controlled_domains/registry_controlled_domain_unittest.cc +++ b/net/base/registry_controlled_domains/registry_controlled_domain_unittest.cc
@@ -2,12 +2,13 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "base/strings/utf_string_conversions.h" #include "net/base/registry_controlled_domains/registry_controlled_domain.h" + +#include "base/strings/utf_string_conversions.h" #include "testing/gtest/include/gtest/gtest.h" +#include "url/buildflags.h" #include "url/gurl.h" #include "url/origin.h" -#include "url/url_features.h" namespace {
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc index b6351e8b..69003dc 100644 --- a/net/http/http_network_transaction_unittest.cc +++ b/net/http/http_network_transaction_unittest.cc
@@ -1417,7 +1417,9 @@ EXPECT_EQ("hello world", response_data); } -TEST_F(HttpNetworkTransactionTest, LoadTimingMeasuresTimeToFirstByteForHttp) { +// TODO(https://crbug.com/918726): Exhibits timing flakes. +TEST_F(HttpNetworkTransactionTest, + DISABLED_LoadTimingMeasuresTimeToFirstByteForHttp) { static const base::TimeDelta kSleepDuration = base::TimeDelta::FromMilliseconds(10); @@ -1583,11 +1585,15 @@ EXPECT_EQ("hello world", response_data); } -TEST_F(HttpNetworkTransactionTest, MeasuresTimeToFirst100ResponseForHttp) { +// TODO(https://crbug.com/918726): Exhibits timing flakes. +TEST_F(HttpNetworkTransactionTest, + DISABLED_MeasuresTimeToFirst100ResponseForHttp) { Check100ResponseTiming(false /* use_spdy */); } -TEST_F(HttpNetworkTransactionTest, MeasuresTimeToFirst100ResponseForSpdy) { +// TODO(https://crbug.com/918726): Exhibits timing flakes. +TEST_F(HttpNetworkTransactionTest, + DISABLED_MeasuresTimeToFirst100ResponseForSpdy) { Check100ResponseTiming(true /* use_spdy */); }
diff --git a/net/http/http_proxy_client_socket_pool.cc b/net/http/http_proxy_client_socket_pool.cc index 6ffbebb6..0196926 100644 --- a/net/http/http_proxy_client_socket_pool.cc +++ b/net/http/http_proxy_client_socket_pool.cc
@@ -190,7 +190,7 @@ base::TimeDelta() /* The socket takes care of timeouts */, priority, socket_tag, - respect_limits, + respect_limits == ClientSocketPool::RespectLimits::ENABLED, delegate, NetLogWithSource::Make(net_log, NetLogSourceType::HTTP_PROXY_CONNECT_JOB)),
diff --git a/net/socket/client_socket_handle.h b/net/socket/client_socket_handle.h index 1b0338dd..da79a27 100644 --- a/net/socket/client_socket_handle.h +++ b/net/socket/client_socket_handle.h
@@ -88,6 +88,24 @@ PoolType* pool, const NetLogWithSource& net_log); + // Temporary overload of Init that takes a bool instead of + // ClientSocketPool::RespectLimits. + // TODO(mmenke): Remove once the socket pool refactor is complete. + template <typename PoolType> + int Init(const std::string& group_name, + const scoped_refptr<typename PoolType::SocketParams>& socket_params, + RequestPriority priority, + const SocketTag& socket_tag, + bool respect_limits, + CompletionOnceCallback callback, + PoolType* pool, + const NetLogWithSource& net_log) { + return Init(group_name, socket_params, priority, socket_tag, + respect_limits ? ClientSocketPool::RespectLimits::ENABLED + : ClientSocketPool::RespectLimits::DISABLED, + std::move(callback), pool, net_log); + } + // Changes the priority of the ClientSocketHandle to the passed value. // This function is a no-op if |priority| is the same as the current // priority, of if Init() has not been called since the last time
diff --git a/net/socket/client_socket_pool_base.cc b/net/socket/client_socket_pool_base.cc index 46fa955..5401ef5 100644 --- a/net/socket/client_socket_pool_base.cc +++ b/net/socket/client_socket_pool_base.cc
@@ -19,10 +19,8 @@ #include "base/time/time.h" #include "base/trace_event/memory_allocator_dump.h" #include "base/trace_event/process_memory_dump.h" -#include "base/trace_event/trace_event.h" #include "base/values.h" #include "net/base/net_errors.h" -#include "net/base/trace_constants.h" #include "net/log/net_log.h" #include "net/log/net_log_event_type.h" #include "net/log/net_log_source.h" @@ -39,104 +37,6 @@ } // namespace -ConnectJob::ConnectJob(const std::string& group_name, - base::TimeDelta timeout_duration, - RequestPriority priority, - const SocketTag& socket_tag, - ClientSocketPool::RespectLimits respect_limits, - Delegate* delegate, - const NetLogWithSource& net_log) - : group_name_(group_name), - timeout_duration_(timeout_duration), - priority_(priority), - socket_tag_(socket_tag), - respect_limits_(respect_limits), - delegate_(delegate), - net_log_(net_log), - idle_(true) { - DCHECK(!group_name.empty()); - DCHECK(delegate); - net_log.BeginEvent(NetLogEventType::SOCKET_POOL_CONNECT_JOB, - NetLog::StringCallback("group_name", &group_name_)); -} - -ConnectJob::~ConnectJob() { - net_log().EndEvent(NetLogEventType::SOCKET_POOL_CONNECT_JOB); -} - -std::unique_ptr<StreamSocket> ConnectJob::PassSocket() { - return std::move(socket_); -} - -void ConnectJob::ChangePriority(RequestPriority priority) { - // Priority of a job that ignores limits should not be changed because it - // should always be MAXIMUM_PRIORITY. - DCHECK_EQ(ClientSocketPool::RespectLimits::ENABLED, respect_limits()); - set_priority(priority); - ChangePriorityInternal(priority); -} - -int ConnectJob::Connect() { - if (!timeout_duration_.is_zero()) - timer_.Start(FROM_HERE, timeout_duration_, this, &ConnectJob::OnTimeout); - - idle_ = false; - - LogConnectStart(); - - int rv = ConnectInternal(); - - if (rv != ERR_IO_PENDING) { - LogConnectCompletion(rv); - delegate_ = NULL; - } - - return rv; -} - -void ConnectJob::SetSocket(std::unique_ptr<StreamSocket> socket) { - if (socket) { - net_log().AddEvent(NetLogEventType::CONNECT_JOB_SET_SOCKET, - socket->NetLog().source().ToEventParametersCallback()); - } - socket_ = std::move(socket); -} - -void ConnectJob::NotifyDelegateOfCompletion(int rv) { - TRACE_EVENT0(NetTracingCategory(), "ConnectJob::NotifyDelegateOfCompletion"); - // The delegate will own |this|. - Delegate* delegate = delegate_; - delegate_ = NULL; - - LogConnectCompletion(rv); - delegate->OnConnectJobComplete(rv, this); -} - -void ConnectJob::ResetTimer(base::TimeDelta remaining_time) { - timer_.Stop(); - timer_.Start(FROM_HERE, remaining_time, this, &ConnectJob::OnTimeout); -} - -void ConnectJob::LogConnectStart() { - connect_timing_.connect_start = base::TimeTicks::Now(); - net_log().BeginEvent(NetLogEventType::SOCKET_POOL_CONNECT_JOB_CONNECT); -} - -void ConnectJob::LogConnectCompletion(int net_error) { - connect_timing_.connect_end = base::TimeTicks::Now(); - net_log().EndEventWithNetErrorCode( - NetLogEventType::SOCKET_POOL_CONNECT_JOB_CONNECT, net_error); -} - -void ConnectJob::OnTimeout() { - // Make sure the socket is NULL before calling into |delegate|. - SetSocket(std::unique_ptr<StreamSocket>()); - - net_log_.AddEvent(NetLogEventType::SOCKET_POOL_CONNECT_JOB_TIMED_OUT); - - NotifyDelegateOfCompletion(ERR_TIMED_OUT); -} - namespace internal { ClientSocketPoolBaseHelper::Request::Request( @@ -171,8 +71,7 @@ // change the job's priority but only if the job respects limits. If the job // ignores limits, then the priority should not be changed because it should // always be MAXIMUM_PRIORITY. - if (job_->priority() != priority_ && - job_->respect_limits() == ClientSocketPool::RespectLimits::ENABLED) + if (job_->priority() != priority_ && job_->respect_limits()) job_->ChangePriority(priority_); } @@ -1425,9 +1324,9 @@ DCHECK_NE(job, job2); } // The request's priority matches the job's priority, unless the job has - // RespectLimits::DISABLED, in which case the job should have + // respect limits disabled, in which case the job should have // MAXIMUM_PRIORITY. - if (job->respect_limits() == ClientSocketPool::RespectLimits::ENABLED) { + if (job->respect_limits()) { DCHECK_EQ(pointer.value()->priority(), job->priority()); } else { DCHECK_EQ(MAXIMUM_PRIORITY, job->priority());
diff --git a/net/socket/client_socket_pool_base.h b/net/socket/client_socket_pool_base.h index 49fff3ec..90cbb92 100644 --- a/net/socket/client_socket_pool_base.h +++ b/net/socket/client_socket_pool_base.h
@@ -51,6 +51,7 @@ #include "net/log/net_log_with_source.h" #include "net/socket/client_socket_handle.h" #include "net/socket/client_socket_pool.h" +#include "net/socket/connect_job.h" #include "net/socket/stream_socket.h" namespace base { @@ -65,110 +66,6 @@ class ClientSocketHandle; struct NetLogSource; -// ConnectJob provides an abstract interface for "connecting" a socket. -// The connection may involve host resolution, tcp connection, ssl connection, -// etc. -class NET_EXPORT_PRIVATE ConnectJob { - public: - class NET_EXPORT_PRIVATE Delegate { - public: - Delegate() {} - virtual ~Delegate() {} - - // Alerts the delegate that the connection completed. |job| must - // be destroyed by the delegate. A std::unique_ptr<> isn't used because - // the caller of this function doesn't own |job|. - virtual void OnConnectJobComplete(int result, - ConnectJob* job) = 0; - - private: - DISALLOW_COPY_AND_ASSIGN(Delegate); - }; - - // A |timeout_duration| of 0 corresponds to no timeout. - ConnectJob(const std::string& group_name, - base::TimeDelta timeout_duration, - RequestPriority priority, - const SocketTag& socket_tag, - ClientSocketPool::RespectLimits respect_limits, - Delegate* delegate, - const NetLogWithSource& net_log); - virtual ~ConnectJob(); - - // Accessors - const std::string& group_name() const { return group_name_; } - const NetLogWithSource& net_log() { return net_log_; } - RequestPriority priority() const { return priority_; } - ClientSocketPool::RespectLimits respect_limits() const { - return respect_limits_; - } - - // Releases ownership of the underlying socket to the caller. - // Returns the released socket, or NULL if there was a connection - // error. - std::unique_ptr<StreamSocket> PassSocket(); - - void ChangePriority(RequestPriority priority); - - // Begins connecting the socket. Returns OK on success, ERR_IO_PENDING if it - // cannot complete synchronously without blocking, or another net error code - // on error. In asynchronous completion, the ConnectJob will notify - // |delegate_| via OnConnectJobComplete. In both asynchronous and synchronous - // completion, ReleaseSocket() can be called to acquire the connected socket - // if it succeeded. - int Connect(); - - virtual LoadState GetLoadState() const = 0; - - // If Connect returns an error (or OnConnectJobComplete reports an error - // result) this method will be called, allowing the pool to add - // additional error state to the ClientSocketHandle (post late-binding). - virtual void GetAdditionalErrorState(ClientSocketHandle* handle) {} - - const LoadTimingInfo::ConnectTiming& connect_timing() const { - return connect_timing_; - } - - const NetLogWithSource& net_log() const { return net_log_; } - - protected: - void set_priority(RequestPriority priority) { priority_ = priority; } - const SocketTag& socket_tag() const { return socket_tag_; } - void SetSocket(std::unique_ptr<StreamSocket> socket); - StreamSocket* socket() { return socket_.get(); } - void NotifyDelegateOfCompletion(int rv); - void ResetTimer(base::TimeDelta remainingTime); - - // Connection establishment timing information. - LoadTimingInfo::ConnectTiming connect_timing_; - - private: - virtual int ConnectInternal() = 0; - - virtual void ChangePriorityInternal(RequestPriority priority) = 0; - - void LogConnectStart(); - void LogConnectCompletion(int net_error); - - // Alerts the delegate that the ConnectJob has timed out. - void OnTimeout(); - - const std::string group_name_; - const base::TimeDelta timeout_duration_; - RequestPriority priority_; - const SocketTag socket_tag_; - const ClientSocketPool::RespectLimits respect_limits_; - // Timer to abort jobs that take too long. - base::OneShotTimer timer_; - Delegate* delegate_; - std::unique_ptr<StreamSocket> socket_; - NetLogWithSource net_log_; - // A ConnectJob is idle until Connect() has been called. - bool idle_; - - DISALLOW_COPY_AND_ASSIGN(ConnectJob); -}; - namespace internal { // ClientSocketPoolBaseHelper is an internal class that implements almost all
diff --git a/net/socket/client_socket_pool_base_unittest.cc b/net/socket/client_socket_pool_base_unittest.cc index 29bf9f2d..26a784c 100644 --- a/net/socket/client_socket_pool_base_unittest.cc +++ b/net/socket/client_socket_pool_base_unittest.cc
@@ -302,7 +302,8 @@ timeout_duration, request.priority(), request.socket_tag(), - request.respect_limits(), + request.respect_limits() == + ClientSocketPool::RespectLimits::ENABLED, delegate, NetLogWithSource::Make(net_log, NetLogSourceType::TRANSPORT_CONNECT_JOB)), @@ -664,39 +665,6 @@ waiting_jobs_[job]->set_load_state(load_state); } -class TestConnectJobDelegate : public ConnectJob::Delegate { - public: - TestConnectJobDelegate() : have_result_(false), result_(OK) {} - ~TestConnectJobDelegate() override = default; - - void OnConnectJobComplete(int result, ConnectJob* job) override { - result_ = result; - std::unique_ptr<ConnectJob> owned_job(job); - std::unique_ptr<StreamSocket> socket = owned_job->PassSocket(); - // socket.get() should be NULL iff result != OK - EXPECT_EQ(socket == NULL, result != OK); - have_result_ = true; - if (quit_wait_on_result_) - std::move(quit_wait_on_result_).Run(); - } - - int WaitForResult() { - DCHECK(!quit_wait_on_result_); - while (!have_result_) { - base::RunLoop run_loop; - quit_wait_on_result_ = run_loop.QuitClosure(); - run_loop.Run(); - } - have_result_ = false; // auto-reset for next callback - return result_; - } - - private: - bool have_result_; - base::OnceClosure quit_wait_on_result_; - int result_; -}; - class ClientSocketPoolBaseTest : public TestWithScopedTaskEnvironment { protected: ClientSocketPoolBaseTest() @@ -778,66 +746,6 @@ ClientSocketPoolTest test_base_; }; -// Even though a timeout is specified, it doesn't time out on a synchronous -// completion. -TEST_F(ClientSocketPoolBaseTest, ConnectJob_NoTimeoutOnSynchronousCompletion) { - TestConnectJobDelegate delegate; - ClientSocketHandle ignored; - TestClientSocketPoolBase::Request request( - &ignored, CompletionOnceCallback(), DEFAULT_PRIORITY, SocketTag(), - ClientSocketPool::RespectLimits::ENABLED, - internal::ClientSocketPoolBaseHelper::NORMAL, params_, - NetLogWithSource()); - std::unique_ptr<TestConnectJob> job( - new TestConnectJob(TestConnectJob::kMockJob, "a", request, - base::TimeDelta::FromMicroseconds(1), &delegate, - &client_socket_factory_, NULL)); - EXPECT_THAT(job->Connect(), IsOk()); -} - -TEST_F(ClientSocketPoolBaseTest, ConnectJob_TimedOut) { - TestConnectJobDelegate delegate; - ClientSocketHandle ignored; - TestNetLog log; - - TestClientSocketPoolBase::Request request( - &ignored, CompletionOnceCallback(), DEFAULT_PRIORITY, SocketTag(), - ClientSocketPool::RespectLimits::ENABLED, - internal::ClientSocketPoolBaseHelper::NORMAL, params_, - NetLogWithSource()); - // Deleted by TestConnectJobDelegate. - TestConnectJob* job = - new TestConnectJob(TestConnectJob::kMockPendingJob, - "a", - request, - base::TimeDelta::FromMicroseconds(1), - &delegate, - &client_socket_factory_, - &log); - ASSERT_THAT(job->Connect(), IsError(ERR_IO_PENDING)); - FastForwardBy(base::TimeDelta::FromMilliseconds(1)); - EXPECT_THAT(delegate.WaitForResult(), IsError(ERR_TIMED_OUT)); - - TestNetLogEntry::List entries; - log.GetEntries(&entries); - - EXPECT_EQ(6u, entries.size()); - EXPECT_TRUE(LogContainsBeginEvent(entries, 0, - NetLogEventType::SOCKET_POOL_CONNECT_JOB)); - EXPECT_TRUE(LogContainsBeginEvent( - entries, 1, NetLogEventType::SOCKET_POOL_CONNECT_JOB_CONNECT)); - EXPECT_TRUE(LogContainsEvent(entries, 2, - NetLogEventType::CONNECT_JOB_SET_SOCKET, - NetLogEventPhase::NONE)); - EXPECT_TRUE(LogContainsEvent( - entries, 3, NetLogEventType::SOCKET_POOL_CONNECT_JOB_TIMED_OUT, - NetLogEventPhase::NONE)); - EXPECT_TRUE(LogContainsEndEvent( - entries, 4, NetLogEventType::SOCKET_POOL_CONNECT_JOB_CONNECT)); - EXPECT_TRUE(LogContainsEndEvent(entries, 5, - NetLogEventType::SOCKET_POOL_CONNECT_JOB)); -} - TEST_F(ClientSocketPoolBaseTest, BasicSynchronous) { CreatePool(kDefaultMaxSockets, kDefaultMaxSocketsPerGroup);
diff --git a/net/socket/connect_job.cc b/net/socket/connect_job.cc new file mode 100644 index 0000000..126e685d --- /dev/null +++ b/net/socket/connect_job.cc
@@ -0,0 +1,112 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/socket/connect_job.h" + +#include "base/trace_event/trace_event.h" +#include "net/base/net_errors.h" +#include "net/base/trace_constants.h" +#include "net/log/net_log.h" +#include "net/log/net_log_event_type.h" +#include "net/socket/client_socket_handle.h" +#include "net/socket/stream_socket.h" + +namespace net { + +ConnectJob::ConnectJob(const std::string& group_name, + base::TimeDelta timeout_duration, + RequestPriority priority, + const SocketTag& socket_tag, + bool respect_limits, + Delegate* delegate, + const NetLogWithSource& net_log) + : group_name_(group_name), + timeout_duration_(timeout_duration), + priority_(priority), + socket_tag_(socket_tag), + respect_limits_(respect_limits), + delegate_(delegate), + net_log_(net_log) { + DCHECK(!group_name.empty()); + DCHECK(delegate); + net_log.BeginEvent(NetLogEventType::SOCKET_POOL_CONNECT_JOB, + NetLog::StringCallback("group_name", &group_name_)); +} + +ConnectJob::~ConnectJob() { + net_log().EndEvent(NetLogEventType::SOCKET_POOL_CONNECT_JOB); +} + +std::unique_ptr<StreamSocket> ConnectJob::PassSocket() { + return std::move(socket_); +} + +void ConnectJob::ChangePriority(RequestPriority priority) { + // Priority of a job that ignores limits should not be changed because it + // should always be MAXIMUM_PRIORITY. + DCHECK(respect_limits()); + priority_ = priority; + ChangePriorityInternal(priority); +} + +int ConnectJob::Connect() { + if (!timeout_duration_.is_zero()) + timer_.Start(FROM_HERE, timeout_duration_, this, &ConnectJob::OnTimeout); + + LogConnectStart(); + + int rv = ConnectInternal(); + + if (rv != ERR_IO_PENDING) { + LogConnectCompletion(rv); + delegate_ = nullptr; + } + + return rv; +} + +void ConnectJob::SetSocket(std::unique_ptr<StreamSocket> socket) { + if (socket) { + net_log().AddEvent(NetLogEventType::CONNECT_JOB_SET_SOCKET, + socket->NetLog().source().ToEventParametersCallback()); + } + socket_ = std::move(socket); +} + +void ConnectJob::NotifyDelegateOfCompletion(int rv) { + TRACE_EVENT0(NetTracingCategory(), "ConnectJob::NotifyDelegateOfCompletion"); + // The delegate will own |this|. + Delegate* delegate = delegate_; + delegate_ = nullptr; + + LogConnectCompletion(rv); + delegate->OnConnectJobComplete(rv, this); +} + +void ConnectJob::ResetTimer(base::TimeDelta remaining_time) { + timer_.Stop(); + timer_.Start(FROM_HERE, remaining_time, this, &ConnectJob::OnTimeout); +} + +void ConnectJob::LogConnectStart() { + connect_timing_.connect_start = base::TimeTicks::Now(); + net_log().BeginEvent(NetLogEventType::SOCKET_POOL_CONNECT_JOB_CONNECT); +} + +void ConnectJob::LogConnectCompletion(int net_error) { + connect_timing_.connect_end = base::TimeTicks::Now(); + net_log().EndEventWithNetErrorCode( + NetLogEventType::SOCKET_POOL_CONNECT_JOB_CONNECT, net_error); +} + +void ConnectJob::OnTimeout() { + // Make sure the socket is NULL before calling into |delegate|. + SetSocket(nullptr); + + net_log_.AddEvent(NetLogEventType::SOCKET_POOL_CONNECT_JOB_TIMED_OUT); + + NotifyDelegateOfCompletion(ERR_TIMED_OUT); +} + +} // namespace net
diff --git a/net/socket/connect_job.h b/net/socket/connect_job.h new file mode 100644 index 0000000..d798899 --- /dev/null +++ b/net/socket/connect_job.h
@@ -0,0 +1,138 @@ +// Copyright 2018 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 NET_SOCKET_CONNECT_JOB_H_ +#define NET_SOCKET_CONNECT_JOB_H_ + +#include <memory> +#include <string> + +#include "base/macros.h" +#include "base/time/time.h" +#include "base/timer/timer.h" +#include "net/base/load_states.h" +#include "net/base/load_timing_info.h" +#include "net/base/net_export.h" +#include "net/base/request_priority.h" +#include "net/log/net_log_with_source.h" +#include "net/socket/socket_tag.h" + +namespace net { + +class ClientSocketHandle; +class StreamSocket; + +// ConnectJob provides an abstract interface for "connecting" a socket. +// The connection may involve host resolution, tcp connection, ssl connection, +// etc. +class NET_EXPORT_PRIVATE ConnectJob { + public: + // Alerts the delegate that the connection completed. |job| must be destroyed + // by the delegate. A std::unique_ptr<> isn't used because the caller of this + // function doesn't own |job|. + class NET_EXPORT_PRIVATE Delegate { + public: + Delegate() {} + virtual ~Delegate() {} + + // Alerts the delegate that the connection completed. |job| must be + // destroyed by the delegate. A std::unique_ptr<> isn't used because the + // caller of this function doesn't own |job|. + virtual void OnConnectJobComplete(int result, ConnectJob* job) = 0; + + private: + DISALLOW_COPY_AND_ASSIGN(Delegate); + }; + + // A |timeout_duration| of 0 corresponds to no timeout. |group_name| is a + // caller-provided opaque string, only used for logging and the corresponding + // accessor. + ConnectJob(const std::string& group_name, + base::TimeDelta timeout_duration, + RequestPriority priority, + const SocketTag& socket_tag, + bool respect_limits, + Delegate* delegate, + const NetLogWithSource& net_log); + virtual ~ConnectJob(); + + // Accessors + const std::string& group_name() const { return group_name_; } + const NetLogWithSource& net_log() { return net_log_; } + RequestPriority priority() const { return priority_; } + bool respect_limits() const { return respect_limits_; } + + // Releases ownership of the underlying socket to the caller. Returns the + // released socket, or nullptr if there was a connection error. + std::unique_ptr<StreamSocket> PassSocket(); + + void ChangePriority(RequestPriority priority); + + // Begins connecting the socket. Returns OK on success, ERR_IO_PENDING if it + // cannot complete synchronously without blocking, or another net error code + // on error. In asynchronous completion, the ConnectJob will notify + // |delegate_| via OnConnectJobComplete. In both asynchronous and synchronous + // completion, ReleaseSocket() can be called to acquire the connected socket + // if it succeeded. + // + // On completion, the ConnectJob must be completed synchronously, since it + // doesn't bother to stop its timer when complete. + int Connect(); + + virtual LoadState GetLoadState() const = 0; + + // If Connect returns an error (or OnConnectJobComplete reports an error + // result) this method will be called, allowing a SocketPool to add additional + // error state to the ClientSocketHandle (post late-binding). + // + // TODO(mmenke): This is a layering violation. Consider refactoring it to not + // depend on ClientSocketHandle. Fixing this will need to wait until after + // proxy tunnel auth has been refactored. + virtual void GetAdditionalErrorState(ClientSocketHandle* handle) {} + + const LoadTimingInfo::ConnectTiming& connect_timing() const { + return connect_timing_; + } + + const NetLogWithSource& net_log() const { return net_log_; } + + protected: + const SocketTag& socket_tag() const { return socket_tag_; } + void SetSocket(std::unique_ptr<StreamSocket> socket); + StreamSocket* socket() { return socket_.get(); } + void NotifyDelegateOfCompletion(int rv); + void ResetTimer(base::TimeDelta remaining_time); + + // Connection establishment timing information. + // TODO(mmenke): This should be private. + LoadTimingInfo::ConnectTiming connect_timing_; + + private: + virtual int ConnectInternal() = 0; + + virtual void ChangePriorityInternal(RequestPriority priority) = 0; + + void LogConnectStart(); + void LogConnectCompletion(int net_error); + + // Alerts the delegate that the ConnectJob has timed out. + void OnTimeout(); + + const std::string group_name_; + const base::TimeDelta timeout_duration_; + RequestPriority priority_; + const SocketTag socket_tag_; + const bool respect_limits_; + // Timer to abort jobs that take too long. + base::OneShotTimer timer_; + Delegate* delegate_; + std::unique_ptr<StreamSocket> socket_; + NetLogWithSource net_log_; + + DISALLOW_COPY_AND_ASSIGN(ConnectJob); +}; + +} // namespace net + +#endif // NET_SOCKET_CONNECT_JOB_H_
diff --git a/net/socket/connect_job_unittest.cc b/net/socket/connect_job_unittest.cc new file mode 100644 index 0000000..0413ab0 --- /dev/null +++ b/net/socket/connect_job_unittest.cc
@@ -0,0 +1,242 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "net/socket/connect_job.h" + +#include "base/callback.h" +#include "base/logging.h" +#include "base/macros.h" +#include "base/run_loop.h" +#include "base/test/scoped_task_environment.h" +#include "net/base/address_list.h" +#include "net/base/net_errors.h" +#include "net/base/request_priority.h" +#include "net/log/test_net_log.h" +#include "net/log/test_net_log_util.h" +#include "net/socket/socket_tag.h" +#include "net/socket/socket_test_util.h" +#include "net/test/gtest_util.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace net { +namespace { + +class TestConnectJobDelegate : public ConnectJob::Delegate { + public: + TestConnectJobDelegate() = default; + ~TestConnectJobDelegate() override = default; + + void OnConnectJobComplete(int result, ConnectJob* job) override { + result_ = result; + std::unique_ptr<StreamSocket> socket = job->PassSocket(); + // socket.get() should be NULL iff result != OK + EXPECT_EQ(socket == nullptr, result != OK); + has_result_ = true; + run_loop_.Quit(); + } + + int WaitForResult() { + run_loop_.Run(); + DCHECK(has_result_); + return result_; + } + + bool has_result() const { return has_result_; } + + private: + bool has_result_ = false; + int result_ = ERR_IO_PENDING; + base::RunLoop run_loop_; + + DISALLOW_COPY_AND_ASSIGN(TestConnectJobDelegate); +}; + +class TestConnectJob : public ConnectJob { + public: + enum class JobType { + kSyncSuccess, + kAsyncSuccess, + kHung, + }; + + TestConnectJob(JobType job_type, + base::TimeDelta timeout_duration, + ConnectJob::Delegate* delegate, + NetLog* net_log) + : ConnectJob( + "group_name", + timeout_duration, + DEFAULT_PRIORITY, + SocketTag(), + true /* respect_limits */, + delegate, + NetLogWithSource::Make(net_log, + NetLogSourceType::TRANSPORT_CONNECT_JOB)), + job_type_(job_type), + last_seen_priority_(DEFAULT_PRIORITY) { + switch (job_type_) { + case JobType::kSyncSuccess: + socket_data_provider_.set_connect_data(MockConnect(SYNCHRONOUS, OK)); + return; + case JobType::kAsyncSuccess: + socket_data_provider_.set_connect_data(MockConnect(ASYNC, OK)); + return; + case JobType::kHung: + socket_data_provider_.set_connect_data( + MockConnect(SYNCHRONOUS, ERR_IO_PENDING)); + return; + } + } + + // From ConnectJob: + LoadState GetLoadState() const override { return LOAD_STATE_IDLE; } + int ConnectInternal() override { + SetSocket(std::unique_ptr<StreamSocket>(new MockTCPClientSocket( + AddressList(), net_log().net_log(), &socket_data_provider_))); + return socket()->Connect(base::BindOnce( + &TestConnectJob::NotifyDelegateOfCompletion, base::Unretained(this))); + } + void ChangePriorityInternal(RequestPriority priority) override { + last_seen_priority_ = priority; + } + + using ConnectJob::ResetTimer; + + // The priority seen during the most recent call to ChangePriorityInternal(). + RequestPriority last_seen_priority() const { return last_seen_priority_; } + + private: + const JobType job_type_; + StaticSocketDataProvider socket_data_provider_; + RequestPriority last_seen_priority_; + + DISALLOW_COPY_AND_ASSIGN(TestConnectJob); +}; + +class ConnectJobTest : public testing::Test { + public: + ConnectJobTest() + : scoped_task_environment_( + base::test::ScopedTaskEnvironment::MainThreadType::MOCK_TIME) {} + ~ConnectJobTest() override = default; + + protected: + base::test::ScopedTaskEnvironment scoped_task_environment_; + TestConnectJobDelegate delegate_; +}; + +// Even though a timeout is specified, it doesn't time out on a synchronous +// completion. +TEST_F(ConnectJobTest, NoTimeoutOnSyncCompletion) { + TestConnectJob job(TestConnectJob::JobType::kSyncSuccess, + base::TimeDelta::FromMicroseconds(1), &delegate_, + nullptr /* net_log */); + EXPECT_THAT(job.Connect(), test::IsOk()); +} + +// Even though a timeout is specified, it doesn't time out on an asynchronous +// completion. +TEST_F(ConnectJobTest, NoTimeoutOnAsyncCompletion) { + TestConnectJob job(TestConnectJob::JobType::kAsyncSuccess, + base::TimeDelta::FromMinutes(1), &delegate_, + nullptr /* net_log */); + ASSERT_THAT(job.Connect(), test::IsError(ERR_IO_PENDING)); + EXPECT_THAT(delegate_.WaitForResult(), test::IsOk()); +} + +// Job shouldn't timeout when passed a TimeDelta of zero. +TEST_F(ConnectJobTest, NoTimeoutWithNoTimeDelta) { + TestConnectJob job(TestConnectJob::JobType::kHung, base::TimeDelta(), + &delegate_, nullptr /* net_log */); + ASSERT_THAT(job.Connect(), test::IsError(ERR_IO_PENDING)); + scoped_task_environment_.RunUntilIdle(); + EXPECT_FALSE(delegate_.has_result()); +} + +// Make sure that ChangePriority() works, and new priority is visible to +// subclasses during the SetPriorityInternal call. +TEST_F(ConnectJobTest, SetPriority) { + TestConnectJob job(TestConnectJob::JobType::kAsyncSuccess, + base::TimeDelta::FromMicroseconds(1), &delegate_, + nullptr /* net_log */); + ASSERT_THAT(job.Connect(), test::IsError(ERR_IO_PENDING)); + + job.ChangePriority(HIGHEST); + EXPECT_EQ(HIGHEST, job.priority()); + EXPECT_EQ(HIGHEST, job.last_seen_priority()); + + job.ChangePriority(MEDIUM); + EXPECT_EQ(MEDIUM, job.priority()); + EXPECT_EQ(MEDIUM, job.last_seen_priority()); + + EXPECT_THAT(delegate_.WaitForResult(), test::IsOk()); +} + +TEST_F(ConnectJobTest, TimedOut) { + const base::TimeDelta kTimeout = base::TimeDelta::FromHours(1); + TestNetLog log; + + std::unique_ptr<TestConnectJob> job = std::make_unique<TestConnectJob>( + TestConnectJob::JobType::kHung, kTimeout, &delegate_, &log); + ASSERT_THAT(job->Connect(), test::IsError(ERR_IO_PENDING)); + + // Nothing should happen before the specified time. + scoped_task_environment_.FastForwardBy(kTimeout - + base::TimeDelta::FromMilliseconds(1)); + base::RunLoop().RunUntilIdle(); + EXPECT_FALSE(delegate_.has_result()); + + // At which point the job should time out. + scoped_task_environment_.FastForwardBy(base::TimeDelta::FromMilliseconds(1)); + EXPECT_THAT(delegate_.WaitForResult(), test::IsError(ERR_TIMED_OUT)); + + // Have to delete the job for it to log the end event. + job.reset(); + + TestNetLogEntry::List entries; + log.GetEntries(&entries); + + EXPECT_EQ(6u, entries.size()); + EXPECT_TRUE(LogContainsBeginEvent(entries, 0, + NetLogEventType::SOCKET_POOL_CONNECT_JOB)); + EXPECT_TRUE(LogContainsBeginEvent( + entries, 1, NetLogEventType::SOCKET_POOL_CONNECT_JOB_CONNECT)); + EXPECT_TRUE(LogContainsEvent(entries, 2, + NetLogEventType::CONNECT_JOB_SET_SOCKET, + NetLogEventPhase::NONE)); + EXPECT_TRUE(LogContainsEvent( + entries, 3, NetLogEventType::SOCKET_POOL_CONNECT_JOB_TIMED_OUT, + NetLogEventPhase::NONE)); + EXPECT_TRUE(LogContainsEndEvent( + entries, 4, NetLogEventType::SOCKET_POOL_CONNECT_JOB_CONNECT)); + EXPECT_TRUE(LogContainsEndEvent(entries, 5, + NetLogEventType::SOCKET_POOL_CONNECT_JOB)); +} + +TEST_F(ConnectJobTest, TimedOutWithRestartedTimer) { + const base::TimeDelta kTimeout = base::TimeDelta::FromHours(1); + + TestConnectJob job(TestConnectJob::JobType::kHung, kTimeout, &delegate_, + nullptr /* net_log */); + ASSERT_THAT(job.Connect(), test::IsError(ERR_IO_PENDING)); + + // Nothing should happen before the specified time. + scoped_task_environment_.FastForwardBy(kTimeout - + base::TimeDelta::FromMilliseconds(1)); + base::RunLoop().RunUntilIdle(); + EXPECT_FALSE(delegate_.has_result()); + + // Make sure restarting the timer is respected. + job.ResetTimer(kTimeout); + scoped_task_environment_.FastForwardBy(kTimeout - + base::TimeDelta::FromMilliseconds(1)); + base::RunLoop().RunUntilIdle(); + EXPECT_FALSE(delegate_.has_result()); + + scoped_task_environment_.FastForwardBy(base::TimeDelta::FromMilliseconds(1)); + EXPECT_THAT(delegate_.WaitForResult(), test::IsError(ERR_TIMED_OUT)); +} + +} // namespace +} // namespace net
diff --git a/net/socket/socks_client_socket_pool.cc b/net/socket/socks_client_socket_pool.cc index 1288e1ed..611031c 100644 --- a/net/socket/socks_client_socket_pool.cc +++ b/net/socket/socks_client_socket_pool.cc
@@ -55,7 +55,7 @@ ConnectionTimeout(), priority, socket_tag, - respect_limits, + respect_limits == ClientSocketPool::RespectLimits::ENABLED, delegate, NetLogWithSource::Make(net_log, NetLogSourceType::SOCKS_CONNECT_JOB)), socks_params_(socks_params),
diff --git a/net/socket/ssl_client_socket_pool.cc b/net/socket/ssl_client_socket_pool.cc index 5d0ff92..24a6c39 100644 --- a/net/socket/ssl_client_socket_pool.cc +++ b/net/socket/ssl_client_socket_pool.cc
@@ -112,7 +112,7 @@ ConnectionTimeout(*params, network_quality_estimator), priority, socket_tag, - respect_limits, + respect_limits == ClientSocketPool::RespectLimits::ENABLED, delegate, NetLogWithSource::Make(net_log, NetLogSourceType::SSL_CONNECT_JOB)), params_(params),
diff --git a/net/socket/transport_client_socket_pool.cc b/net/socket/transport_client_socket_pool.cc index a741a2b..0940fa7 100644 --- a/net/socket/transport_client_socket_pool.cc +++ b/net/socket/transport_client_socket_pool.cc
@@ -89,7 +89,7 @@ ConnectionTimeout(), priority, socket_tag, - respect_limits, + respect_limits == ClientSocketPool::RespectLimits::ENABLED, delegate, NetLogWithSource::Make(net_log, NetLogSourceType::TRANSPORT_CONNECT_JOB)),
diff --git a/net/socket/websocket_transport_client_socket_pool.cc b/net/socket/websocket_transport_client_socket_pool.cc index 8769990..a438794 100644 --- a/net/socket/websocket_transport_client_socket_pool.cc +++ b/net/socket/websocket_transport_client_socket_pool.cc
@@ -47,7 +47,7 @@ timeout_duration, priority, SocketTag(), - respect_limits, + respect_limits == ClientSocketPool::RespectLimits::ENABLED, delegate, NetLogWithSource::Make( pool_net_log,
diff --git a/net/test/run_all_unittests.cc b/net/test/run_all_unittests.cc index eda97a32..f10517d 100644 --- a/net/test/run_all_unittests.cc +++ b/net/test/run_all_unittests.cc
@@ -10,7 +10,7 @@ #include "crypto/nss_util.h" #include "net/socket/client_socket_pool_base.h" #include "net/test/net_test_suite.h" -#include "url/url_features.h" +#include "url/buildflags.h" using net::internal::ClientSocketPoolBaseHelper;
diff --git a/rlz/BUILD.gn b/rlz/BUILD.gn index 99c8263..558a9309 100644 --- a/rlz/BUILD.gn +++ b/rlz/BUILD.gn
@@ -92,7 +92,10 @@ ] } if (is_chromeos) { - deps += [ "//chromeos" ] + deps += [ + "//chromeos", + "//chromeos/dbus", + ] } if (is_mac) { @@ -160,7 +163,10 @@ "//third_party/zlib", ] if (is_chromeos) { - deps += [ "//chromeos" ] + deps += [ + "//chromeos:test_support", + "//chromeos/dbus:test_support", + ] } } }
diff --git a/services/device/BUILD.gn b/services/device/BUILD.gn index ae1b02b..fea7588c 100644 --- a/services/device/BUILD.gn +++ b/services/device/BUILD.gn
@@ -145,8 +145,8 @@ if (is_chromeos) { sources += [ "fingerprint/fingerprint_chromeos_unittest.cc" ] deps += [ - "//chromeos", - "//dbus", + "//chromeos:test_support", + "//chromeos/dbus:test_support", "//services/device/bluetooth:bluetooth_system_tests", "//services/device/fingerprint", "//third_party/protobuf:protobuf_lite",
diff --git a/services/device/battery/BUILD.gn b/services/device/battery/BUILD.gn index 6e86ac3..b383dc8 100644 --- a/services/device/battery/BUILD.gn +++ b/services/device/battery/BUILD.gn
@@ -42,7 +42,7 @@ if (is_chromeos) { configs += [ "//build/config/linux/dbus" ] deps += [ - "//chromeos:chromeos", + "//chromeos/dbus", "//chromeos/dbus:power_manager_proto", ] sources -= [
diff --git a/services/device/fingerprint/BUILD.gn b/services/device/fingerprint/BUILD.gn index da55b12..6a6335d1 100644 --- a/services/device/fingerprint/BUILD.gn +++ b/services/device/fingerprint/BUILD.gn
@@ -25,7 +25,7 @@ "fingerprint_chromeos.h", ] deps += [ - "//chromeos", + "//chromeos/dbus", "//dbus", "//third_party/protobuf:protobuf_lite", ]
diff --git a/services/device/hid/BUILD.gn b/services/device/hid/BUILD.gn index 2725e6e..196c395 100644 --- a/services/device/hid/BUILD.gn +++ b/services/device/hid/BUILD.gn
@@ -52,7 +52,7 @@ } if (is_chromeos) { - deps += [ "//chromeos" ] + deps += [ "//chromeos/dbus" ] } if (is_win) {
diff --git a/services/device/media_transfer_protocol/BUILD.gn b/services/device/media_transfer_protocol/BUILD.gn index 8b23da5..37c0f7b 100644 --- a/services/device/media_transfer_protocol/BUILD.gn +++ b/services/device/media_transfer_protocol/BUILD.gn
@@ -38,7 +38,7 @@ ":mtp_file_entry_proto", ":mtp_storage_info_proto", "//base", - "//chromeos", + "//chromeos/dbus", "//dbus", ] }
diff --git a/services/device/serial/BUILD.gn b/services/device/serial/BUILD.gn index 428194e..9497766 100644 --- a/services/device/serial/BUILD.gn +++ b/services/device/serial/BUILD.gn
@@ -65,10 +65,7 @@ } if (is_chromeos) { - deps += [ - "//chromeos", - "//dbus", - ] + deps += [ "//chromeos/dbus" ] } if (is_mac) {
diff --git a/services/device/wake_lock/power_save_blocker/BUILD.gn b/services/device/wake_lock/power_save_blocker/BUILD.gn index 6877315..788bb497 100644 --- a/services/device/wake_lock/power_save_blocker/BUILD.gn +++ b/services/device/wake_lock/power_save_blocker/BUILD.gn
@@ -70,7 +70,7 @@ if (is_chromeos) { deps += [ - "//chromeos", + "//chromeos/dbus", "//chromeos/dbus:power_manager_proto", ] }
diff --git a/services/media_session/audio_focus_manager_unittest.cc b/services/media_session/audio_focus_manager_unittest.cc index 6268f31..23ea8d4e 100644 --- a/services/media_session/audio_focus_manager_unittest.cc +++ b/services/media_session/audio_focus_manager_unittest.cc
@@ -12,6 +12,7 @@ #include "base/run_loop.h" #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_task_environment.h" +#include "build/build_config.h" #include "mojo/public/cpp/bindings/binding_set.h" #include "mojo/public/cpp/bindings/interface_request.h" #include "services/media_session/audio_focus_manager_metrics_helper.h" @@ -181,6 +182,12 @@ } bool IsEnforcementEnabled() const { +#if defined(OS_CHROMEOS) + // Enforcement is enabled by default on Chrome OS. + if (GetParam() == mojom::EnforcementMode::kDefault) + return true; +#endif + return GetParam() == mojom::EnforcementMode::kSingleSession || GetParam() == mojom::EnforcementMode::kSingleGroup; }
diff --git a/services/media_session/public/cpp/features.cc b/services/media_session/public/cpp/features.cc index 8f0ef4b..de8d339 100644 --- a/services/media_session/public/cpp/features.cc +++ b/services/media_session/public/cpp/features.cc
@@ -23,8 +23,14 @@ // Enables Audio Focus enforcement which means that only one media session can // have audio focus at any one time. -const base::Feature kAudioFocusEnforcement{"AudioFocusEnforcement", - base::FEATURE_DISABLED_BY_DEFAULT}; +const base::Feature kAudioFocusEnforcement { + "AudioFocusEnforcement", +#if defined(OS_CHROMEOS) + base::FEATURE_ENABLED_BY_DEFAULT +#else + base::FEATURE_DISABLED_BY_DEFAULT +#endif +}; // Enables Audio Focus grouping which means that multiple media sessions can // share audio focus at the same time provided that they have the same group id.
diff --git a/services/tracing/perfetto/perfetto_service.cc b/services/tracing/perfetto/perfetto_service.cc index 2713e99..e4f1acc 100644 --- a/services/tracing/perfetto/perfetto_service.cc +++ b/services/tracing/perfetto/perfetto_service.cc
@@ -71,6 +71,9 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); service_ = perfetto::TracingService::CreateInstance( std::make_unique<MojoSharedMemory::Factory>(), &perfetto_task_runner_); + // Chromium uses scraping of the shared memory chunks to ensure that data + // from threads without a MessageLoop doesn't get lost. + service_->SetSMBScrapingEnabled(true); DCHECK(service_); }
diff --git a/services/tracing/perfetto/producer_host.cc b/services/tracing/perfetto/producer_host.cc index 24b97cc..f554621 100644 --- a/services/tracing/perfetto/producer_host.cc +++ b/services/tracing/perfetto/producer_host.cc
@@ -153,4 +153,13 @@ producer_endpoint_->NotifyFlushComplete(flush_request_id); } +void ProducerHost::RegisterTraceWriter(uint32_t writer_id, + uint32_t target_buffer) { + producer_endpoint_->RegisterTraceWriter(writer_id, target_buffer); +} + +void ProducerHost::UnregisterTraceWriter(uint32_t writer_id) { + producer_endpoint_->UnregisterTraceWriter(writer_id); +} + } // namespace tracing
diff --git a/services/tracing/perfetto/producer_host.h b/services/tracing/perfetto/producer_host.h index a9214c09..9819457 100644 --- a/services/tracing/perfetto/producer_host.h +++ b/services/tracing/perfetto/producer_host.h
@@ -77,6 +77,11 @@ // is finished. void NotifyFlushComplete(uint64_t flush_request_id) override; + // Called by the ProducerClient to associate a TraceWriter with a target + // buffer, which is required to support scraping of the SMB by the service. + void RegisterTraceWriter(uint32_t writer_id, uint32_t target_buffer) override; + void UnregisterTraceWriter(uint32_t writer_id) override; + protected: void OnConnectionError();
diff --git a/services/tracing/public/cpp/perfetto/producer_client.cc b/services/tracing/public/cpp/perfetto/producer_client.cc index cafe3517..4ad615f 100644 --- a/services/tracing/public/cpp/perfetto/producer_client.cc +++ b/services/tracing/public/cpp/perfetto/producer_client.cc
@@ -321,11 +321,11 @@ void ProducerClient::RegisterTraceWriter(uint32_t writer_id, uint32_t target_buffer) { - // TODO(eseckler): implement. + producer_host_->RegisterTraceWriter(writer_id, target_buffer); } void ProducerClient::UnregisterTraceWriter(uint32_t writer_id) { - // TODO(eseckler): implement. + producer_host_->UnregisterTraceWriter(writer_id); } } // namespace tracing
diff --git a/services/tracing/public/mojom/perfetto_service.mojom b/services/tracing/public/mojom/perfetto_service.mojom index ccbf470..5046816 100644 --- a/services/tracing/public/mojom/perfetto_service.mojom +++ b/services/tracing/public/mojom/perfetto_service.mojom
@@ -90,6 +90,11 @@ // Called to let the Service know that a flush is complete. NotifyFlushComplete(uint64 flush_request_id); + + // Called by the ProducerClient to associate a TraceWriter with a target + // buffer, which is required to support scraping of the SMB by the service. + RegisterTraceWriter(uint32 writer_id, uint32 target_buffer); + UnregisterTraceWriter(uint32 writer_id); }; interface ProducerClient {
diff --git a/services/viz/public/cpp/compositing/struct_traits_unittest.cc b/services/viz/public/cpp/compositing/struct_traits_unittest.cc index e78a1c1..c4e4d43 100644 --- a/services/viz/public/cpp/compositing/struct_traits_unittest.cc +++ b/services/viz/public/cpp/compositing/struct_traits_unittest.cc
@@ -1200,8 +1200,8 @@ TEST_F(StructTraitsTest, CopyOutputResult_Bitmap) { const gfx::Rect result_rect(42, 43, 7, 8); SkBitmap bitmap; - const sk_sp<SkColorSpace> adobe_rgb = SkColorSpace::MakeRGB( - SkColorSpace::kSRGB_RenderTargetGamma, SkColorSpace::kAdobeRGB_Gamut); + const sk_sp<SkColorSpace> adobe_rgb = + SkColorSpace::MakeRGB(SkNamedTransferFn::kSRGB, SkNamedGamut::kAdobeRGB); bitmap.allocPixels(SkImageInfo::MakeN32Premul(7, 8, adobe_rgb)); bitmap.eraseARGB(123, 213, 77, 33); std::unique_ptr<CopyOutputResult> input =
diff --git a/skia/public/interfaces/test/struct_traits_unittest.cc b/skia/public/interfaces/test/struct_traits_unittest.cc index a278816c..194886e 100644 --- a/skia/public/interfaces/test/struct_traits_unittest.cc +++ b/skia/public/interfaces/test/struct_traits_unittest.cc
@@ -58,8 +58,7 @@ SkImageInfo input = SkImageInfo::Make( 34, 56, SkColorType::kGray_8_SkColorType, SkAlphaType::kUnpremul_SkAlphaType, - SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma, - SkColorSpace::kAdobeRGB_Gamut)); + SkColorSpace::MakeRGB(SkNamedTransferFn::kSRGB, SkNamedGamut::kAdobeRGB)); mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy(); SkImageInfo output; proxy->EchoImageInfo(input, &output); @@ -77,8 +76,8 @@ SkBitmap input; input.allocPixels(SkImageInfo::MakeN32Premul( 10, 5, - SkColorSpace::MakeRGB(SkColorSpace::kLinear_RenderTargetGamma, - SkColorSpace::kRec2020_Gamut))); + SkColorSpace::MakeRGB(SkNamedTransferFn::kLinear, + SkNamedGamut::kRec2020))); input.eraseColor(SK_ColorYELLOW); input.erase(SK_ColorTRANSPARENT, SkIRect::MakeXYWH(0, 1, 2, 3)); mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json index 051fa43..32b07f86 100644 --- a/testing/buildbot/chromium.gpu.fyi.json +++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -470,23 +470,14 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "shards": 4 }, - "test": "angle_end2end_tests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "angle_end2end_tests" }, { "args": [ @@ -496,22 +487,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "angle_gles1_conformance_tests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "angle_gles1_conformance_tests" }, { "args": [ @@ -523,22 +505,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "angle_unittests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "angle_unittests" }, { "args": [ @@ -549,22 +522,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "angle_white_box_tests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "angle_white_box_tests" }, { "args": [ @@ -575,22 +539,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "gl_tests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "gl_tests" }, { "args": [ @@ -602,22 +557,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "gl_tests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "gl_tests" }, { "args": [ @@ -630,22 +576,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "gles2_conform_test", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "gles2_conform_test" }, { "args": [ @@ -657,22 +594,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "gles2_conform_test", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "gles2_conform_test" }, { "args": [ @@ -685,22 +613,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "gles2_conform_test", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "gles2_conform_test" }, { "args": [ @@ -713,22 +632,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "video_decode_accelerator_unittest", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "video_decode_accelerator_unittest" }, { "args": [ @@ -741,22 +651,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "video_decode_accelerator_unittest", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "video_decode_accelerator_unittest" }, { "args": [ @@ -769,22 +670,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "video_decode_accelerator_unittest", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "video_decode_accelerator_unittest" } ], "isolated_scripts": [ @@ -799,20 +691,11 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -835,21 +718,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -866,20 +740,11 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -896,20 +761,11 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -930,22 +786,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false, "shards": 20 - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -966,22 +813,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false, "shards": 20 - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -1002,22 +840,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false, "shards": 20 - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -1036,22 +865,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false, "shards": 6 - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -1070,22 +890,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false, "shards": 2 - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -1104,22 +915,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false, "shards": 6 - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -1138,22 +940,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false, "shards": 2 - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -1172,22 +965,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false, "shards": 2 - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } } ] @@ -4977,23 +4761,14 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "shards": 4 }, - "test": "dawn_end2end_tests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "dawn_end2end_tests" } ] }, @@ -15741,7 +15516,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -15752,7 +15527,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -15767,7 +15542,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -15777,7 +15552,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -15793,7 +15568,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -15803,7 +15578,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -15819,7 +15594,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -15830,7 +15605,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -15847,7 +15622,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -15857,7 +15632,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -15872,7 +15647,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -15882,7 +15657,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -15899,7 +15674,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -15909,7 +15684,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -15927,7 +15702,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -15937,7 +15712,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -15949,7 +15724,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -15959,7 +15734,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -15971,7 +15746,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -15981,7 +15756,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -15999,7 +15774,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -16009,7 +15784,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -16027,7 +15802,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -16037,7 +15812,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -16050,7 +15825,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -16060,7 +15835,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -16080,7 +15855,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -16089,7 +15864,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -16116,7 +15891,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -16126,7 +15901,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -16147,7 +15922,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -16156,7 +15931,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -16177,7 +15952,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -16186,7 +15961,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -16211,7 +15986,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -16222,7 +15997,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -16245,7 +16020,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -16256,7 +16031,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -16279,7 +16054,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -16290,7 +16065,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -16313,7 +16088,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -16324,7 +16099,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -16347,7 +16122,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -16358,7 +16133,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -16381,7 +16156,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -16392,7 +16167,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -16413,23 +16188,14 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "shards": 4 }, - "test": "angle_end2end_tests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "angle_end2end_tests" }, { "args": [ @@ -16439,22 +16205,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "angle_gles1_conformance_tests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "angle_gles1_conformance_tests" }, { "args": [ @@ -16466,22 +16223,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "angle_unittests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "angle_unittests" }, { "args": [ @@ -16492,22 +16240,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "angle_white_box_tests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "angle_white_box_tests" }, { "args": [ @@ -16518,23 +16257,14 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "shards": 4 }, - "test": "dawn_end2end_tests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "dawn_end2end_tests" }, { "args": [ @@ -16545,22 +16275,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "gl_tests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "gl_tests" }, { "args": [ @@ -16572,22 +16293,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "gl_tests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "gl_tests" }, { "args": [ @@ -16597,22 +16309,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "gl_unittests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "gl_unittests" }, { "args": [ @@ -16622,22 +16325,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "gles2_conform_test", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "gles2_conform_test" }, { "args": [ @@ -16649,22 +16343,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "gles2_conform_test", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "gles2_conform_test" }, { "args": [ @@ -16677,66 +16362,39 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "gles2_conform_test", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "gles2_conform_test" }, { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "gpu_unittests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "gpu_unittests" }, { "swarming": { "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "swiftshader_unittests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "swiftshader_unittests" }, { "args": [ @@ -16749,22 +16407,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "video_decode_accelerator_unittest", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "video_decode_accelerator_unittest" }, { "args": [ @@ -16777,22 +16426,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "video_decode_accelerator_unittest", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "video_decode_accelerator_unittest" }, { "args": [ @@ -16805,22 +16445,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "video_decode_accelerator_unittest", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "video_decode_accelerator_unittest" }, { "name": "xr_browser_tests", @@ -16828,22 +16459,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "xr_browser_tests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "xr_browser_tests" } ], "isolated_scripts": [ @@ -16863,21 +16485,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -16896,21 +16509,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -16929,21 +16533,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -16962,21 +16557,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -16999,21 +16585,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -17039,21 +16616,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -17087,21 +16655,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -17121,21 +16680,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -17154,21 +16704,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -17187,22 +16728,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false, "shards": 2 - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -17221,22 +16753,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false, "shards": 2 - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -17255,22 +16778,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false, "shards": 6 - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -17289,22 +16803,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false, "shards": 2 - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -17323,22 +16828,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false, "shards": 2 - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -17357,22 +16853,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false, "shards": 2 - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } } ] @@ -18202,358 +17689,10 @@ ] }, "Win10 FYI Exp Release (NVIDIA)": { - "gtest_tests": [ - { - "args": [ - "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "shards": 4 - }, - "test": "angle_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "angle_gles1_conformance_tests" - }, - { - "args": [ - "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "angle_unittests" - }, - { - "args": [ - "--test-launcher-retry-limit=0" - ], - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "angle_white_box_tests" - }, - { - "args": [ - "--enable-gpu", - "--test-launcher-bot-mode", - "--test-launcher-jobs=1", - "--gtest_filter=CastStreamingApiTestWithPixelOutput.EndToEnd*:TabCaptureApiPixelTest.EndToEnd*" - ], - "name": "tab_capture_end2end_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "browser_tests" - }, - { - "args": [ - "--use-gpu-in-tests", - "--test-launcher-retry-limit=0" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "shards": 4 - }, - "test": "dawn_end2end_tests" - }, - { - "args": [ - "--use-gpu-in-tests", - "--use-cmd-decoder=validating" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "gl_tests" - }, - { - "args": [ - "--use-gpu-in-tests", - "--use-cmd-decoder=passthrough" - ], - "name": "gl_tests_passthrough", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "gl_tests" - }, - { - "args": [ - "--use-gpu-in-tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "gl_unittests" - }, - { - "args": [ - "--use-gpu-in-tests" - ], - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "gles2_conform_test" - }, - { - "args": [ - "--use-gpu-in-tests", - "--use-angle=d3d9" - ], - "name": "gles2_conform_d3d9_test", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "gles2_conform_test" - }, - { - "args": [ - "--use-gpu-in-tests", - "--use-angle=gl", - "--disable-gpu-sandbox" - ], - "name": "gles2_conform_gl_test", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "gles2_conform_test" - }, - { - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "gpu_unittests" - }, - { - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "swiftshader_unittests" - }, - { - "args": [ - "--use-angle=d3d11", - "--use-test-data-path", - "--test_video_data=test-25fps.h264:320:240:250:258:::1" - ], - "name": "video_decode_accelerator_d3d11_unittest", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "video_decode_accelerator_unittest" - }, - { - "args": [ - "--use-angle=d3d9", - "--use-test-data-path", - "--test_video_data=test-25fps.h264:320:240:250:258:::1" - ], - "name": "video_decode_accelerator_d3d9_unittest", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "video_decode_accelerator_unittest" - }, - { - "args": [ - "--use-angle=gl", - "--use-test-data-path", - "--test_video_data=test-25fps.h264:320:240:250:258:::1" - ], - "name": "video_decode_accelerator_gl_unittest", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "video_decode_accelerator_unittest" - }, - { - "name": "xr_browser_tests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - }, - "test": "xr_browser_tests" - } - ], "isolated_scripts": [ { "args": [ - "-v", - "--one-frame-only" - ], - "isolate_name": "angle_perftests", - "name": "angle_perftests", - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - } - }, - { - "args": [ - "context_lost", + "noop_sleep", "--show-stdout", "--browser=release", "--passthrough", @@ -18561,7 +17700,7 @@ "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" ], "isolate_name": "telemetry_gpu_integration_test", - "name": "context_lost_tests", + "name": "noop_sleep_tests", "should_retry_with_patch": false, "swarming": { "can_use_on_swarming_builders": true, @@ -18575,517 +17714,6 @@ "expiration": 21600, "idempotent": false } - }, - { - "args": [ - "depth_capture", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" - ], - "isolate_name": "telemetry_gpu_integration_test", - "name": "depth_capture_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "gpu_process", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" - ], - "isolate_name": "telemetry_gpu_integration_test", - "name": "gpu_process_launch_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "hardware_accelerated_feature", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" - ], - "isolate_name": "telemetry_gpu_integration_test", - "name": "hardware_accelerated_feature_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "info_collection", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", - "--expected-vendor-id", - "10de", - "--expected-device-id", - "1cb3" - ], - "isolate_name": "telemetry_gpu_integration_test", - "name": "info_collection_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "maps", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", - "--dont-restore-color-profile-after-test", - "--os-type", - "win", - "--build-revision", - "${got_revision}", - "--test-machine-name", - "${buildername}" - ], - "isolate_name": "telemetry_gpu_integration_test", - "name": "maps_pixel_test", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "-v", - "--use-cmd-decoder=passthrough", - "--use-angle=gl-null", - "--fast-run" - ], - "isolate_name": "command_buffer_perftests", - "name": "passthrough_command_buffer_perftests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - } - }, - { - "args": [ - "pixel", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", - "--dont-restore-color-profile-after-test", - "--refimg-cloud-storage-bucket", - "chromium-gpu-archive/reference-images", - "--os-type", - "win", - "--build-revision", - "${got_revision}", - "--test-machine-name", - "${buildername}" - ], - "isolate_name": "telemetry_gpu_integration_test", - "name": "pixel_test", - "non_precommit_args": [ - "--upload-refimg-to-cloud-storage" - ], - "precommit_args": [ - "--download-refimg-from-cloud-storage" - ], - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "screenshot_sync", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", - "--dont-restore-color-profile-after-test" - ], - "isolate_name": "telemetry_gpu_integration_test", - "name": "screenshot_sync_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "trace_test", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" - ], - "isolate_name": "telemetry_gpu_integration_test", - "name": "trace_test", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false - } - }, - { - "args": [ - "-v", - "--use-cmd-decoder=validating", - "--use-stub", - "--fast-run" - ], - "isolate_name": "command_buffer_perftests", - "name": "validating_command_buffer_perftests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600 - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d11 --use-cmd-decoder=validating", - "--webgl-conformance-version=2.0.1", - "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json" - ], - "isolate_name": "telemetry_gpu_integration_test", - "name": "webgl2_conformance_d3d11_validating_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "shards": 20 - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough", - "--webgl-conformance-version=2.0.1", - "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json" - ], - "isolate_name": "telemetry_gpu_integration_test", - "name": "webgl2_conformance_gl_passthrough_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "shards": 20 - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc", - "--webgl-conformance-version=2.0.1", - "--read-abbreviated-json-results-from=../../content/test/data/gpu/webgl2_conformance_tests_output.json" - ], - "isolate_name": "telemetry_gpu_integration_test", - "name": "webgl2_conformance_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "shards": 20 - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d11 --use-cmd-decoder=validating" - ], - "isolate_name": "telemetry_gpu_integration_test", - "name": "webgl_conformance_d3d11_validating_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "shards": 2 - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=d3d9 --use-cmd-decoder=passthrough" - ], - "isolate_name": "telemetry_gpu_integration_test", - "name": "webgl_conformance_d3d9_passthrough_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "shards": 2 - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=d3d9 --use-cmd-decoder=validating" - ], - "isolate_name": "telemetry_gpu_integration_test", - "name": "webgl_conformance_d3d9_validating_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "shards": 6 - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-gl=angle --use-angle=gl --use-cmd-decoder=passthrough" - ], - "isolate_name": "telemetry_gpu_integration_test", - "name": "webgl_conformance_gl_passthrough_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "shards": 2 - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc" - ], - "isolate_name": "telemetry_gpu_integration_test", - "name": "webgl_conformance_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "shards": 2 - } - }, - { - "args": [ - "webgl_conformance", - "--show-stdout", - "--browser=release", - "--passthrough", - "-v", - "--extra-browser-args=--enable-logging=stderr --js-flags=--expose-gc --use-angle=vulkan --use-cmd-decoder=passthrough" - ], - "isolate_name": "telemetry_gpu_integration_test", - "name": "webgl_conformance_vulkan_passthrough_tests", - "should_retry_with_patch": false, - "swarming": { - "can_use_on_swarming_builders": true, - "dimension_sets": [ - { - "gpu": "10de:1cb3-24.21.14.1195", - "os": "Windows-10", - "pool": "Chrome-GPU" - } - ], - "expiration": 21600, - "idempotent": false, - "shards": 2 - } } ] }, @@ -19889,7 +18517,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -19900,7 +18528,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -19915,7 +18543,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -19925,7 +18553,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -19942,7 +18570,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -19952,7 +18580,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -19968,7 +18596,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -19978,7 +18606,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -19997,7 +18625,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20007,7 +18635,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20023,7 +18651,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20034,7 +18662,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20050,7 +18678,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20060,7 +18688,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20077,7 +18705,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20087,7 +18715,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20102,7 +18730,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20112,7 +18740,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20127,7 +18755,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20137,7 +18765,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20154,7 +18782,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20164,7 +18792,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20182,7 +18810,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20192,7 +18820,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20204,7 +18832,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20214,7 +18842,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20226,7 +18854,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20236,7 +18864,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20254,7 +18882,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20264,7 +18892,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20282,7 +18910,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20292,7 +18920,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20310,7 +18938,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20320,7 +18948,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20333,7 +18961,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20343,7 +18971,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20363,7 +18991,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20372,7 +19000,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20395,7 +19023,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20405,7 +19033,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20428,7 +19056,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20438,7 +19066,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20461,7 +19089,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20471,7 +19099,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20494,7 +19122,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20504,7 +19132,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20531,7 +19159,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20541,7 +19169,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20571,7 +19199,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20581,7 +19209,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20602,7 +19230,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20611,7 +19239,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20649,7 +19277,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20659,7 +19287,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20683,7 +19311,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20693,7 +19321,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20716,7 +19344,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20726,7 +19354,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20747,7 +19375,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20756,7 +19384,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20781,7 +19409,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20792,7 +19420,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20817,7 +19445,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20828,7 +19456,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20853,7 +19481,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20864,7 +19492,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20887,7 +19515,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20898,7 +19526,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20921,7 +19549,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20932,7 +19560,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20955,7 +19583,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -20966,7 +19594,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -20989,7 +19617,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -21000,7 +19628,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -21023,7 +19651,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -21034,7 +19662,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -21057,7 +19685,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -21068,7 +19696,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -21114,7 +19742,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -21125,7 +19753,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -21143,7 +19771,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -21154,7 +19782,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -21172,7 +19800,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -21183,7 +19811,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -21201,7 +19829,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -21212,7 +19840,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -21230,7 +19858,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -21241,7 +19869,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -21259,7 +19887,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -21270,7 +19898,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -21288,7 +19916,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -21299,7 +19927,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -21317,7 +19945,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -21328,7 +19956,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -21346,7 +19974,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -21357,7 +19985,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -21375,7 +20003,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -21386,7 +20014,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ],
diff --git a/testing/buildbot/chromium.gpu.json b/testing/buildbot/chromium.gpu.json index e80d194..cab33d5e 100644 --- a/testing/buildbot/chromium.gpu.json +++ b/testing/buildbot/chromium.gpu.json
@@ -2429,22 +2429,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "angle_unittests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "angle_unittests" }, { "args": [ @@ -2455,22 +2446,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "gl_tests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "gl_tests" }, { "args": [ @@ -2482,22 +2464,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "gl_tests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "gl_tests" }, { "args": [ @@ -2507,22 +2480,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "gl_unittests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "gl_unittests" }, { "args": [ @@ -2535,22 +2499,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "video_decode_accelerator_unittest", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "video_decode_accelerator_unittest" }, { "name": "xr_browser_tests", @@ -2558,22 +2513,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ] }, - "test": "xr_browser_tests", - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" - } + "test": "xr_browser_tests" } ], "isolated_scripts": [ @@ -2593,21 +2539,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -2626,21 +2563,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -2659,21 +2587,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -2692,21 +2611,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -2729,21 +2639,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -2769,21 +2670,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -2817,21 +2709,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -2851,21 +2734,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -2884,21 +2758,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -2917,22 +2782,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false, "shards": 2 - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } } ] @@ -2949,7 +2805,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -2959,7 +2815,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -2978,7 +2834,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -2988,7 +2844,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -3004,7 +2860,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -3014,7 +2870,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -3031,7 +2887,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -3041,7 +2897,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -3056,7 +2912,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -3066,7 +2922,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -3084,7 +2940,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -3094,7 +2950,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -3107,7 +2963,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -3117,7 +2973,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -3142,7 +2998,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -3152,7 +3008,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -3175,7 +3031,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -3185,7 +3041,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -3208,7 +3064,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -3218,7 +3074,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -3241,7 +3097,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -3251,7 +3107,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -3278,7 +3134,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -3288,7 +3144,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -3318,7 +3174,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -3328,7 +3184,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -3366,7 +3222,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -3376,7 +3232,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -3400,7 +3256,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -3410,7 +3266,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -3433,7 +3289,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -3443,7 +3299,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ], @@ -3466,7 +3322,7 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } @@ -3477,7 +3333,7 @@ "trigger_script": { "args": [ "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", + "[{\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", "--multiple-dimension-script-verbose", "True" ],
diff --git a/testing/buildbot/client.v8.fyi.json b/testing/buildbot/client.v8.fyi.json index 8dba211..d9d699d 100644 --- a/testing/buildbot/client.v8.fyi.json +++ b/testing/buildbot/client.v8.fyi.json
@@ -1148,21 +1148,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -1181,21 +1172,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -1214,21 +1196,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -1247,21 +1220,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -1287,21 +1251,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -1335,21 +1290,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -1369,21 +1315,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -1402,21 +1339,12 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -1437,22 +1365,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false, "shards": 20 - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } }, { @@ -1471,22 +1390,13 @@ "can_use_on_swarming_builders": true, "dimension_sets": [ { - "gpu": "10de:1cb3-23.21.13.8816", + "gpu": "10de:1cb3-24.21.14.1195", "os": "Windows-10", "pool": "Chrome-GPU" } ], "idempotent": false, "shards": 2 - }, - "trigger_script": { - "args": [ - "--multiple-trigger-configs", - "[{\"gpu\": \"10de:1cb3-23.21.13.8816\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}, {\"gpu\": \"10de:1cb3-24.21.14.1195\", \"os\": \"Windows-10\", \"pool\": \"Chrome-GPU\"}]", - "--multiple-dimension-script-verbose", - "True" - ], - "script": "//testing/trigger_scripts/trigger_multiple_dimensions.py" } } ]
diff --git a/testing/buildbot/filters/fuchsia.net_unittests.filter b/testing/buildbot/filters/fuchsia.net_unittests.filter index b5c272a..51ccf87 100644 --- a/testing/buildbot/filters/fuchsia.net_unittests.filter +++ b/testing/buildbot/filters/fuchsia.net_unittests.filter
@@ -33,6 +33,3 @@ # SocketPosix::IsConnected has a different behavior on Fuchsia. # https://crbug.com/887587. -TCPSocketTest.BeforeConnectCallback - -# Flaky, https://crbug.com/918726. --HttpNetworkTransactionTest.MeasuresTimeToFirst100ResponseForSpdy
diff --git a/testing/buildbot/mixins.pyl b/testing/buildbot/mixins.pyl index 8df1a94..feebb52 100644 --- a/testing/buildbot/mixins.pyl +++ b/testing/buildbot/mixins.pyl
@@ -517,7 +517,7 @@ 'win10_nvidia_quadro_p400_stable': { 'swarming': { 'dimensions': { - 'gpu': '10de:1cb3-23.21.13.8816', + 'gpu': '10de:1cb3-24.21.14.1195', 'os': 'Windows-10', 'pool': 'Chrome-GPU', },
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index 6b489de..7c3485a 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -3354,18 +3354,16 @@ }, }, - # Temporarily disabled because it is not used anywhere. - # TODO(jmadill): Re-enable after upgrade. http://crbug.com/887241 - # 'gpu_noop_sleep_telemetry_test': { - # # The former GPU-specific generator script contained logic to - # # detect whether the so-called "experimental" GPU bots, which test - # # newer driver versions, were identical to the "stable" versions - # # of the bots, and if so to mirror their configurations. We prefer - # # to keep this new script simpler and to just configure this by - # # hand in waterfalls.pyl. - # 'noop_sleep': { - # } - # }, + 'gpu_noop_sleep_telemetry_test': { + # The former GPU-specific generator script contained logic to + # detect whether the so-called "experimental" GPU bots, which test + # newer driver versions, were identical to the "stable" versions + # of the bots, and if so to mirror their configurations. We prefer + # to keep this new script simpler and to just configure this by + # hand in waterfalls.pyl. + 'noop_sleep': { + } + }, 'gpu_telemetry_tests': { 'context_lost': {},
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index c00b797..763b19ee5 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -1896,14 +1896,6 @@ 'gtest_tests': 'gpu_win_gtests', 'gpu_telemetry_tests': 'gpu_common_win_and_linux_telemetry_tests', }, - 'use_multi_dimension_trigger_script': True, - 'alternate_swarming_dimensions': [ - { - 'gpu': '10de:1cb3-24.21.14.1195', - 'os': 'Windows-10', - 'pool': 'Chrome-GPU', - }, - ], }, 'Win10 Release (NVIDIA)': { 'browser_config': 'release', @@ -1915,14 +1907,8 @@ 'gtest_tests': 'gpu_win_gtests', 'gpu_telemetry_tests': 'gpu_common_win_and_linux_telemetry_tests', }, + # We keep this value enabled to provide minimal regression testing. 'use_multi_dimension_trigger_script': True, - 'alternate_swarming_dimensions': [ - { - 'gpu': '10de:1cb3-24.21.14.1195', - 'os': 'Windows-10', - 'pool': 'Chrome-GPU', - }, - ], }, }, }, @@ -1953,14 +1939,6 @@ 'isolated_scripts': 'gpu_angle_fyi_win_optional_isolated_scripts', 'gpu_telemetry_tests': 'gpu_angle_win_intel_and_nvidia_telemetry_tests', }, - 'use_multi_dimension_trigger_script': True, - 'alternate_swarming_dimensions': [ - { - 'gpu': '10de:1cb3-24.21.14.1195', - 'os': 'Windows-10', - 'pool': 'Chrome-GPU', - }, - ], }, # END Fake builder used as mirror targets for ANGLE's GPU tryservers 'Android FYI 32 Vk Release (Nexus 5X)': { @@ -2282,14 +2260,6 @@ 'test_suites': { 'gtest_tests': 'gpu_dawn_end2end_tests', }, - 'use_multi_dimension_trigger_script': True, - 'alternate_swarming_dimensions': [ - { - 'gpu': '10de:1cb3-24.21.14.1195', - 'os': 'Windows-10', - 'pool': 'Chrome-GPU', - }, - ], }, # END Fake builder used as mirror targets for Dawn's GPU tryservers 'GPU FYI Linux Builder' : {}, @@ -2704,14 +2674,8 @@ 'isolated_scripts': 'gpu_angle_fyi_win_optional_isolated_scripts', 'gpu_telemetry_tests': 'gpu_optional_win_telemetry_tests', }, + # We keep this value enabled to provide minimal regression testing. 'use_multi_dimension_trigger_script': True, - 'alternate_swarming_dimensions': [ - { - 'gpu': '10de:1cb3-24.21.14.1195', - 'os': 'Windows-10', - 'pool': 'Chrome-GPU', - }, - ], }, # END Fake builder used as mirror targets for Optional GPU tryservers 'Win10 FYI Debug (NVIDIA)': { @@ -2724,14 +2688,6 @@ 'gtest_tests': 'gpu_fyi_win_gtests', 'gpu_telemetry_tests': 'gpu_fyi_win_debug_telemetry_tests', }, - 'use_multi_dimension_trigger_script': True, - 'alternate_swarming_dimensions': [ - { - 'gpu': '10de:1cb3-24.21.14.1195', - 'os': 'Windows-10', - 'pool': 'Chrome-GPU', - }, - ], }, 'Win10 FYI Exp Release (Intel HD 630)': { 'os_type': 'win', @@ -2755,10 +2711,11 @@ 'limited_capacity_bot', 'win10_nvidia_quadro_p400_experimental', ], + # Currently the experimental driver is identical to the stable + # driver. If it's upgraded, change these test_suites to be the same as + # 'Win10 FYI Release (NVIDIA)'. 'test_suites': { - 'gtest_tests': 'gpu_fyi_win_gtests', - 'isolated_scripts': 'gpu_angle_fyi_win_optional_isolated_scripts', - 'gpu_telemetry_tests': 'gpu_fyi_win_release_telemetry_tests', + 'gpu_telemetry_tests': 'gpu_noop_sleep_telemetry_test', }, }, 'Win10 FYI Release (Intel HD 630)': { @@ -2784,14 +2741,8 @@ 'isolated_scripts': 'gpu_angle_fyi_win_optional_isolated_scripts', 'gpu_telemetry_tests': 'gpu_fyi_win_release_telemetry_tests', }, + # We keep this value enabled to provide minimal regression testing. 'use_multi_dimension_trigger_script': True, - 'alternate_swarming_dimensions': [ - { - 'gpu': '10de:1cb3-24.21.14.1195', - 'os': 'Windows-10', - 'pool': 'Chrome-GPU', - }, - ], }, 'Win10 FYI dEQP Release (Intel HD 630)': { 'os_type': 'win', @@ -2811,13 +2762,6 @@ 'gtest_tests': 'gpu_angle_deqp_win_nvidia_gtests', }, 'use_multi_dimension_trigger_script': True, - 'alternate_swarming_dimensions': [ - { - 'gpu': '10de:1cb3-24.21.14.1195', - 'os': 'Windows-10', - 'pool': 'Chrome-GPU', - }, - ], }, # This tryserver doesn't actually exist; it's a separate # configuration from the Win AMD bot on this waterfall because we @@ -3844,14 +3788,6 @@ 'test_suites': { 'gpu_telemetry_tests': 'gpu_v8_desktop_telemetry_tests', }, - 'use_multi_dimension_trigger_script': True, - 'alternate_swarming_dimensions': [ - { - 'gpu': '10de:1cb3-24.21.14.1195', - 'os': 'Windows-10', - 'pool': 'Chrome-GPU', - }, - ], }, }, },
diff --git a/third_party/blink/public/BUILD.gn b/third_party/blink/public/BUILD.gn index cbbbccb..d5da673 100644 --- a/third_party/blink/public/BUILD.gn +++ b/third_party/blink/public/BUILD.gn
@@ -312,9 +312,9 @@ "platform/web_rtc_offer_options.h", "platform/web_rtc_peer_connection_handler.h", "platform/web_rtc_peer_connection_handler_client.h", - "platform/web_rtc_rtp_contributing_source.h", "platform/web_rtc_rtp_receiver.h", "platform/web_rtc_rtp_sender.h", + "platform/web_rtc_rtp_source.h", "platform/web_rtc_rtp_transceiver.h", "platform/web_rtc_session_description.h", "platform/web_rtc_session_description_request.h",
diff --git a/third_party/blink/public/platform/web_feature.mojom b/third_party/blink/public/platform/web_feature.mojom index b03cfeb4..8eaceb6 100644 --- a/third_party/blink/public/platform/web_feature.mojom +++ b/third_party/blink/public/platform/web_feature.mojom
@@ -2166,6 +2166,7 @@ kTrustedTypesAssignmentError = 2725, kBadgeSet = 2726, kBadgeClear = 2727, + kElementTimingExplicitlyRequested = 2728, // Add new features immediately above this line. Don't change assigned // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/blink/public/platform/web_rtc_rtp_contributing_source.h b/third_party/blink/public/platform/web_rtc_rtp_contributing_source.h deleted file mode 100644 index 51d1575f..0000000 --- a/third_party/blink/public/platform/web_rtc_rtp_contributing_source.h +++ /dev/null
@@ -1,29 +0,0 @@ -// Copyright 2017 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 THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_RTC_RTP_CONTRIBUTING_SOURCE_H_ -#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_RTC_RTP_CONTRIBUTING_SOURCE_H_ - -#include "third_party/blink/public/platform/web_common.h" - -namespace blink { - -enum class WebRTCRtpContributingSourceType { - SSRC, - CSRC, -}; - -// https://w3c.github.io/webrtc-pc/#dom-rtcrtpcontributingsource -class BLINK_PLATFORM_EXPORT WebRTCRtpContributingSource { - public: - virtual ~WebRTCRtpContributingSource(); - - virtual WebRTCRtpContributingSourceType SourceType() const = 0; - virtual double TimestampMs() const = 0; - virtual uint32_t Source() const = 0; -}; - -} // namespace blink - -#endif // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_RTC_RTP_CONTRIBUTING_SOURCE_H_
diff --git a/third_party/blink/public/platform/web_rtc_rtp_receiver.h b/third_party/blink/public/platform/web_rtc_rtp_receiver.h index 6631e1a..17f086a 100644 --- a/third_party/blink/public/platform/web_rtc_rtp_receiver.h +++ b/third_party/blink/public/platform/web_rtc_rtp_receiver.h
@@ -15,7 +15,7 @@ namespace blink { class WebMediaStreamTrack; -class WebRTCRtpContributingSource; +class WebRTCRtpSource; // Implementations of this interface keep the corresponding WebRTC-layer // receiver alive through reference counting. Multiple |WebRTCRtpReceiver|s @@ -31,8 +31,7 @@ virtual uintptr_t Id() const = 0; virtual const WebMediaStreamTrack& Track() const = 0; virtual WebVector<WebString> StreamIds() const = 0; - virtual WebVector<std::unique_ptr<WebRTCRtpContributingSource>> - GetSources() = 0; + virtual WebVector<std::unique_ptr<WebRTCRtpSource>> GetSources() = 0; virtual void GetStats(std::unique_ptr<blink::WebRTCStatsReportCallback>, RTCStatsFilter) = 0; virtual std::unique_ptr<webrtc::RtpParameters> GetParameters() const = 0;
diff --git a/third_party/blink/public/platform/web_rtc_rtp_source.h b/third_party/blink/public/platform/web_rtc_rtp_source.h new file mode 100644 index 0000000..7de1c75 --- /dev/null +++ b/third_party/blink/public/platform/web_rtc_rtp_source.h
@@ -0,0 +1,31 @@ +// Copyright 2017 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 THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_RTC_RTP_SOURCE_H_ +#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_RTC_RTP_SOURCE_H_ + +#include "third_party/blink/public/platform/web_common.h" + +namespace blink { + +// Represents both SSRCs and CSRCs. +// https://w3c.github.io/webrtc-pc/#dom-rtcrtpsynchronizationsource +// https://w3c.github.io/webrtc-pc/#dom-rtcrtpcontributingsource +class BLINK_PLATFORM_EXPORT WebRTCRtpSource { + public: + enum class Type { + kSSRC, + kCSRC, + }; + + virtual ~WebRTCRtpSource(); + + virtual Type SourceType() const = 0; + virtual double TimestampMs() const = 0; + virtual uint32_t Source() const = 0; +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_RTC_RTP_SOURCE_H_
diff --git a/third_party/blink/public/web/web_local_frame.h b/third_party/blink/public/web/web_local_frame.h index dfc6266..11a9f90 100644 --- a/third_party/blink/public/web/web_local_frame.h +++ b/third_party/blink/public/web/web_local_frame.h
@@ -621,6 +621,9 @@ // This will be removed following the deprecation. virtual void UsageCountChromeLoadTimes(const WebString& metric) = 0; + // Dispatches an event when a Portal gets activated. + virtual void OnPortalActivated() = 0; + // Scheduling --------------------------------------------------------------- virtual FrameScheduler* Scheduler() const = 0;
diff --git a/third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_serializer_test.cc b/third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_serializer_test.cc index 288fdd7..276b094b 100644 --- a/third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_serializer_test.cc +++ b/third_party/blink/renderer/bindings/core/v8/serialization/v8_script_value_serializer_test.cc
@@ -1031,8 +1031,7 @@ // Make a 10x7 red ImageBitmap in P3 color space. SkImageInfo info = SkImageInfo::Make( 10, 7, kRGBA_F16_SkColorType, kPremul_SkAlphaType, - SkColorSpace::MakeRGB(SkColorSpace::kLinear_RenderTargetGamma, - SkColorSpace::kDCIP3_D65_Gamut)); + SkColorSpace::MakeRGB(SkNamedTransferFn::kLinear, SkNamedGamut::kDCIP3)); sk_sp<SkSurface> surface = SkSurface::MakeRaster(info); surface->getCanvas()->clear(SK_ColorRED); ImageBitmap* image_bitmap = ImageBitmap::Create( @@ -1138,8 +1137,7 @@ uint8_t pixel[8] = {}; SkImageInfo info = SkImageInfo::Make( 1, 1, kRGBA_F16_SkColorType, kPremul_SkAlphaType, - SkColorSpace::MakeRGB(SkColorSpace::kLinear_RenderTargetGamma, - SkColorSpace::kDCIP3_D65_Gamut)); + SkColorSpace::MakeRGB(SkNamedTransferFn::kLinear, SkNamedGamut::kDCIP3)); ASSERT_TRUE(new_image_bitmap->BitmapImage() ->PaintImageForCurrentFrame() .GetSkImage()
diff --git a/third_party/blink/renderer/core/animation/css_offset_rotate_interpolation_type.cc b/third_party/blink/renderer/core/animation/css_offset_rotate_interpolation_type.cc index c127a21..85736429 100644 --- a/third_party/blink/renderer/core/animation/css_offset_rotate_interpolation_type.cc +++ b/third_party/blink/renderer/core/animation/css_offset_rotate_interpolation_type.cc
@@ -174,7 +174,7 @@ const NonInterpolableValue* non_interpolable_value, StyleResolverState& state) const { state.Style()->SetOffsetRotate(StyleOffsetRotation( - ToInterpolableNumber(interpolable_value).Value(), + clampTo<float>(ToInterpolableNumber(interpolable_value).Value()), ToCSSOffsetRotationNonInterpolableValue(*non_interpolable_value) .RotationType())); }
diff --git a/third_party/blink/renderer/core/animation/length_interpolation_functions.cc b/third_party/blink/renderer/core/animation/length_interpolation_functions.cc index b1cd14d..cbf455a 100644 --- a/third_party/blink/renderer/core/animation/length_interpolation_functions.cc +++ b/third_party/blink/renderer/core/animation/length_interpolation_functions.cc
@@ -190,9 +190,11 @@ if (percentage != 0) has_percentage = true; - if (pixels != 0 && has_percentage) - return Length( - CalculationValue::Create(PixelsAndPercent(pixels, percentage), range)); + if (pixels != 0 && has_percentage) { + return Length(CalculationValue::Create( + PixelsAndPercent(clampTo<float>(pixels), clampTo<float>(percentage)), + range)); + } if (has_percentage) return Length(ClampToRange(percentage, range), kPercent); return Length(
diff --git a/third_party/blink/renderer/core/core_idl_files.gni b/third_party/blink/renderer/core/core_idl_files.gni index 39ddff75..9e3cff07 100644 --- a/third_party/blink/renderer/core/core_idl_files.gni +++ b/third_party/blink/renderer/core/core_idl_files.gni
@@ -164,6 +164,7 @@ "events/picture_in_picture_control_event.idl", "events/pointer_event.idl", "events/pop_state_event.idl", + "events/portal_activate_event.idl", "events/progress_event.idl", "events/promise_rejection_event.idl", "events/resource_progress_event.idl",
diff --git a/third_party/blink/renderer/core/css/css_font_face.cc b/third_party/blink/renderer/core/css/css_font_face.cc index 397dfeb..841fc12 100644 --- a/third_party/blink/renderer/core/css/css_font_face.cc +++ b/third_party/blink/renderer/core/css/css_font_face.cc
@@ -43,10 +43,16 @@ sources_.push_back(source); } -void CSSFontFace::SetSegmentedFontFace( +void CSSFontFace::AddSegmentedFontFace( CSSSegmentedFontFace* segmented_font_face) { - DCHECK(!segmented_font_face_); - segmented_font_face_ = segmented_font_face; + DCHECK(!segmented_font_faces_.Contains(segmented_font_face)); + segmented_font_faces_.insert(segmented_font_face); +} + +void CSSFontFace::RemoveSegmentedFontFace( + CSSSegmentedFontFace* segmented_font_face) { + DCHECK(segmented_font_faces_.Contains(segmented_font_face)); + segmented_font_faces_.erase(segmented_font_face); } void CSSFontFace::DidBeginLoad() { @@ -70,8 +76,8 @@ } } - if (segmented_font_face_) - segmented_font_face_->FontFaceInvalidated(); + for (CSSSegmentedFontFace* segmented_font_face : segmented_font_faces_) + segmented_font_face->FontFaceInvalidated(); return true; } @@ -82,17 +88,21 @@ } size_t CSSFontFace::ApproximateBlankCharacterCount() const { - if (!sources_.IsEmpty() && sources_.front()->IsInBlockPeriod() && - segmented_font_face_) - return segmented_font_face_->ApproximateCharacterCount(); - return 0; + if (sources_.IsEmpty() || !sources_.front()->IsInBlockPeriod()) + return 0; + size_t approximate_character_count_ = 0; + for (CSSSegmentedFontFace* segmented_font_face : segmented_font_faces_) { + approximate_character_count_ += + segmented_font_face->ApproximateCharacterCount(); + } + return approximate_character_count_; } bool CSSFontFace::FallbackVisibilityChanged(RemoteFontFaceSource* source) { if (!IsValid() || source != sources_.front()) return false; - if (segmented_font_face_) - segmented_font_face_->FontFaceInvalidated(); + for (CSSSegmentedFontFace* segmented_font_face : segmented_font_faces_) + segmented_font_face->FontFaceInvalidated(); return true; } @@ -113,8 +123,7 @@ return nullptr; if (scoped_refptr<SimpleFontData> result = source->GetFontData( - font_description, - segmented_font_face_->GetFontSelectionCapabilities())) { + font_description, font_face_->GetFontSelectionCapabilities())) { // The active source may already be loading or loaded. Adjust our // FontFace status accordingly. if (LoadStatus() == FontFace::kUnloaded && @@ -202,7 +211,7 @@ else font_face_->SetLoadStatus(new_status); - if (!segmented_font_face_ || !font_face_->GetExecutionContext()) + if (segmented_font_faces_.IsEmpty() || !font_face_->GetExecutionContext()) return; if (auto* document = DynamicTo<Document>(font_face_->GetExecutionContext())) { @@ -216,7 +225,7 @@ } void CSSFontFace::Trace(blink::Visitor* visitor) { - visitor->Trace(segmented_font_face_); + visitor->Trace(segmented_font_faces_); visitor->Trace(sources_); visitor->Trace(font_face_); }
diff --git a/third_party/blink/renderer/core/css/css_font_face.h b/third_party/blink/renderer/core/css/css_font_face.h index 3ded0f27..94a98ee 100644 --- a/third_party/blink/renderer/core/css/css_font_face.h +++ b/third_party/blink/renderer/core/css/css_font_face.h
@@ -51,7 +51,6 @@ public: CSSFontFace(FontFace* font_face, Vector<UnicodeRange>& ranges) : ranges_(base::AdoptRef(new UnicodeRangeSet(ranges))), - segmented_font_face_(nullptr), font_face_(font_face) { DCHECK(font_face_); } @@ -60,8 +59,8 @@ scoped_refptr<UnicodeRangeSet> Ranges() { return ranges_; } - void SetSegmentedFontFace(CSSSegmentedFontFace*); - void ClearSegmentedFontFace() { segmented_font_face_ = nullptr; } + void AddSegmentedFontFace(CSSSegmentedFontFace*); + void RemoveSegmentedFontFace(CSSSegmentedFontFace*); bool IsValid() const { return !sources_.IsEmpty(); } size_t ApproximateBlankCharacterCount() const; @@ -91,7 +90,7 @@ void SetLoadStatus(FontFace::LoadStatusType); scoped_refptr<UnicodeRangeSet> ranges_; - Member<CSSSegmentedFontFace> segmented_font_face_; + HeapHashSet<Member<CSSSegmentedFontFace>> segmented_font_faces_; HeapDeque<Member<CSSFontFaceSource>> sources_; Member<FontFace> font_face_; DISALLOW_COPY_AND_ASSIGN(CSSFontFace);
diff --git a/third_party/blink/renderer/core/css/css_segmented_font_face.cc b/third_party/blink/renderer/core/css/css_segmented_font_face.cc index 9bb9c5df..0278f024 100644 --- a/third_party/blink/renderer/core/css/css_segmented_font_face.cc +++ b/third_party/blink/renderer/core/css/css_segmented_font_face.cc
@@ -67,7 +67,7 @@ void CSSSegmentedFontFace::AddFontFace(FontFace* font_face, bool css_connected) { PruneTable(); - font_face->CssFontFace()->SetSegmentedFontFace(this); + font_face->CssFontFace()->AddSegmentedFontFace(this); if (css_connected) { font_faces_.InsertBefore(first_non_css_connected_face_, font_face); } else { @@ -88,7 +88,7 @@ font_faces_.erase(it); PruneTable(); - font_face->CssFontFace()->ClearSegmentedFontFace(); + font_face->CssFontFace()->RemoveSegmentedFontFace(this); } scoped_refptr<FontData> CSSSegmentedFontFace::GetFontData(
diff --git a/third_party/blink/renderer/core/display_lock/display_lock_context.cc b/third_party/blink/renderer/core/display_lock/display_lock_context.cc index f76a4c8..7b379464 100644 --- a/third_party/blink/renderer/core/display_lock/display_lock_context.cc +++ b/third_party/blink/renderer/core/display_lock/display_lock_context.cc
@@ -27,12 +27,6 @@ // sec. double kDefaultLockTimeoutMs = 1000.; -// Helper function that resolves the given promise. Used to delay a resolution -// to be in a task queue. -void ResolvePromise(ScriptPromiseResolver* resolver) { - resolver->Resolve(); -} - // Helper function that returns an immediately rejected promise. ScriptPromise GetRejectedPromise(ScriptState* script_state) { auto* resolver = ScriptPromiseResolver::Create(script_state); @@ -67,6 +61,7 @@ void DisplayLockContext::Trace(blink::Visitor* visitor) { visitor->Trace(update_resolver_); visitor->Trace(commit_resolver_); + visitor->Trace(acquire_resolver_); visitor->Trace(element_); ScriptWrappable::Trace(visitor); ActiveScriptWrappable::Trace(visitor); @@ -82,6 +77,7 @@ // going to be disposed. FinishUpdateResolver(kDetach); FinishCommitResolver(kDetach); + FinishAcquireResolver(kDetach); CancelTimeoutTask(); state_ = kUnlocked; @@ -93,6 +89,7 @@ void DisplayLockContext::ContextDestroyed(ExecutionContext*) { FinishUpdateResolver(kReject); FinishCommitResolver(kReject); + FinishAcquireResolver(kReject); state_ = kUnlocked; } @@ -106,10 +103,6 @@ ScriptPromise DisplayLockContext::acquire(ScriptState* script_state, DisplayLockOptions* options) { - // TODO(vmpstr): We don't support locking connected elements for now. - if (element_->isConnected()) - return GetRejectedPromise(script_state); - double timeout_ms = (options && options->hasTimeout()) ? options->timeout() : kDefaultLockTimeoutMs; @@ -118,32 +111,40 @@ // interval. Note that the following call cancels any existing timeout tasks. RescheduleTimeoutTask(timeout_ms); - // We must already be locked if we're not unlocked. + if (state_ == kPendingAcquire) { + DCHECK(acquire_resolver_); + return acquire_resolver_->Promise(); + } + DCHECK(!acquire_resolver_); + + // At this point, if we're not unlocked, then we must already be locked. if (state_ != kUnlocked) return GetResolvedPromise(script_state); - // TODO(vmpstr): This will always currently result in an empty layout rect, - // but when we handle connected elements, this will capture the current frame - // rect. - if (!locked_frame_rect_) { - auto* layout_object = element_->GetLayoutObject(); - if (layout_object && layout_object->IsBox()) { - locked_frame_rect_ = ToLayoutBox(layout_object)->FrameRect(); - } else { - locked_frame_rect_ = LayoutRect(); - } + update_budget_.reset(); + + // If we're already connected then we need to ensure that 1. layout is clean + // and 2. we have removed the current painted output. + if (element_->isConnected()) { + acquire_resolver_ = ScriptPromiseResolver::Create(script_state); + state_ = kPendingAcquire; + MarkPaintLayerNeedsRepaint(); + ScheduleAnimation(); + return acquire_resolver_->Promise(); } - // Since we're not connected at this point, we can lock immediately. + // Otherwise (if we're not connected), we can acquire the lock immediately. + locked_frame_rect_ = LayoutRect(); state_ = kLocked; - update_budget_.reset(); return GetResolvedPromise(script_state); } ScriptPromise DisplayLockContext::update(ScriptState* script_state) { // Reject if we're unlocked or disconnected. - if (state_ == kUnlocked || !element_->isConnected()) + if (state_ == kUnlocked || state_ == kPendingAcquire || + !element_->isConnected()) { return GetRejectedPromise(script_state); + } // If we have a resolver, then we're at least updating already, just return // the same promise. @@ -185,29 +186,20 @@ } void DisplayLockContext::FinishUpdateResolver(ResolverState state) { - if (!update_resolver_) - return; - switch (state) { - case kResolve: - // In order to avoid script doing work as a part of the lifecycle update, - // we delay the resolution to be in a task. - GetExecutionContext() - ->GetTaskRunner(TaskType::kMiscPlatformAPI) - ->PostTask(FROM_HERE, - WTF::Bind(&ResolvePromise, - WrapPersistent(update_resolver_.Get()))); - break; - case kReject: - update_resolver_->Reject(); - break; - case kDetach: - update_resolver_->Detach(); - } - update_resolver_ = nullptr; + FinishResolver(&update_resolver_, state); } void DisplayLockContext::FinishCommitResolver(ResolverState state) { - if (!commit_resolver_) + FinishResolver(&commit_resolver_, state); +} + +void DisplayLockContext::FinishAcquireResolver(ResolverState state) { + FinishResolver(&acquire_resolver_, state); +} + +void DisplayLockContext::FinishResolver(Member<ScriptPromiseResolver>* resolver, + ResolverState state) { + if (!*resolver) return; switch (state) { case kResolve: @@ -215,17 +207,19 @@ // we delay the resolution to be in a task. GetExecutionContext() ->GetTaskRunner(TaskType::kMiscPlatformAPI) - ->PostTask(FROM_HERE, - WTF::Bind(&ResolvePromise, - WrapPersistent(commit_resolver_.Get()))); + ->PostTask(FROM_HERE, WTF::Bind( + +[](ScriptPromiseResolver* resolver) { + resolver->Resolve(); + }, + WrapPersistent(resolver->Get()))); break; case kReject: - commit_resolver_->Reject(); + (*resolver)->Reject(); break; case kDetach: - commit_resolver_->Detach(); + (*resolver)->Detach(); } - commit_resolver_ = nullptr; + *resolver = nullptr; } bool DisplayLockContext::ShouldStyle() const { @@ -235,8 +229,10 @@ } void DisplayLockContext::DidStyle() { - if (state_ != kCommitting && state_ != kUpdating && !update_forced_) + if (state_ != kCommitting && state_ != kUpdating && + state_ != kPendingAcquire && !update_forced_) { return; + } // We must have "contain: style layout" for display locking. // Note that we should also have this containment even if we're forcing @@ -246,6 +242,7 @@ if (!ElementSupportsDisplayLocking()) { FinishUpdateResolver(kReject); FinishCommitResolver(kReject); + FinishAcquireResolver(kReject); state_ = state_ == kUpdating ? kLocked : kUnlocked; return; } @@ -289,7 +286,7 @@ // check |update_forced_| here. In other words, although |update_forced_| // could be true here, we still should not paint. This also holds for // kUpdating state, since updates should not paint. - return state_ >= kCommitting; + return state_ == kCommitting || state_ == kUnlocked; } void DisplayLockContext::DidPaint() { @@ -364,9 +361,18 @@ return; } - DCHECK_LT(state_, kCommitting); + // If we have just started to acquire, we can unlock immediately since we + // didn't have a chance to lock yet. + if (state_ == kPendingAcquire) { + FinishCommitResolver(kResolve); + state_ = kUnlocked; + return; + } + if (state_ != kUpdating) ScheduleAnimation(); + + DCHECK_LT(state_, kCommitting); state_ = kCommitting; update_budget_.reset(); @@ -499,6 +505,24 @@ } void DisplayLockContext::DidFinishLifecycleUpdate() { + if (state_ == kPendingAcquire) { + if (!ElementSupportsDisplayLocking()) { + FinishAcquireResolver(kReject); + state_ = kUnlocked; + return; + } + + FinishAcquireResolver(kResolve); + state_ = kLocked; + auto* layout_object = element_->GetLayoutObject(); + if (layout_object && layout_object->IsBox()) { + locked_frame_rect_ = ToLayoutBox(layout_object)->FrameRect(); + } else { + locked_frame_rect_ = LayoutRect(); + } + return; + } + if (state_ == kCommitting) { FinishUpdateResolver(kResolve); FinishCommitResolver(kResolve);
diff --git a/third_party/blink/renderer/core/display_lock/display_lock_context.h b/third_party/blink/renderer/core/display_lock/display_lock_context.h index 6e726bb1..dbccdd4f 100644 --- a/third_party/blink/renderer/core/display_lock/display_lock_context.h +++ b/third_party/blink/renderer/core/display_lock/display_lock_context.h
@@ -144,6 +144,7 @@ kUpdating, kCommitting, kUnlocked, + kPendingAcquire, }; // Initiate a commit. @@ -194,6 +195,8 @@ enum ResolverState { kResolve, kReject, kDetach }; void FinishUpdateResolver(ResolverState); void FinishCommitResolver(ResolverState); + void FinishAcquireResolver(ResolverState); + void FinishResolver(Member<ScriptPromiseResolver>*, ResolverState); // Returns true if the element supports display locking. Note that this can // only be called if the style is clean. It checks the layout object if it @@ -204,6 +207,7 @@ Member<ScriptPromiseResolver> commit_resolver_; Member<ScriptPromiseResolver> update_resolver_; + Member<ScriptPromiseResolver> acquire_resolver_; WeakMember<Element> element_; State state_ = kUnlocked;
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc index b5e9f38..edcb6a0f 100644 --- a/third_party/blink/renderer/core/dom/element.cc +++ b/third_party/blink/renderer/core/dom/element.cc
@@ -1489,6 +1489,17 @@ if (!exception_state.HadException()) setAttribute(name_lowercase, AtomicString(attr_value), exception_state); return; + } else if (name_lowercase.StartsWith("on")) { + // TODO(jakubvrana): This requires TrustedScript in all attributes starting + // with "on", including e.g. "one". We use this pattern elsewhere (e.g. in + // IsEventHandlerAttribute) but it's not ideal. Consider using the event + // attribute of the resulting AttributeTriggers. + String attr_value = GetStringFromSpecificTrustedType( + string_or_TT, SpecificTrustedType::kTrustedScript, &GetDocument(), + exception_state); + if (!exception_state.HadException()) + setAttribute(name_lowercase, AtomicString(attr_value), exception_state); + return; } AtomicString value_string = AtomicString(GetStringFromTrustedTypeWithoutCheck(string_or_TT));
diff --git a/third_party/blink/renderer/core/dom/live_node_list_registry.cc b/third_party/blink/renderer/core/dom/live_node_list_registry.cc index 7250fafc..1ca504d3 100644 --- a/third_party/blink/renderer/core/dom/live_node_list_registry.cc +++ b/third_party/blink/renderer/core/dom/live_node_list_registry.cc
@@ -44,7 +44,7 @@ void LiveNodeListRegistry::ClearWeakMembers(Visitor*) { auto* it = std::remove_if(data_.begin(), data_.end(), [](Entry entry) { - return !ObjectAliveTrait<LiveNodeListBase>::IsHeapObjectAlive(entry.first); + return !ThreadHeap::IsHeapObjectAlive(entry.first); }); if (it == data_.end()) return;
diff --git a/third_party/blink/renderer/core/dom/shadow_root.cc b/third_party/blink/renderer/core/dom/shadow_root.cc index 04bd6dd..7e88116 100644 --- a/third_party/blink/renderer/core/dom/shadow_root.cc +++ b/third_party/blink/renderer/core/dom/shadow_root.cc
@@ -56,7 +56,6 @@ } struct SameSizeAsShadowRoot : public DocumentFragment, public TreeScope { - char empty_class_fields_due_to_gc_mixin_marker[1]; Member<void*> member[3]; unsigned counters_and_flags[1]; };
diff --git a/third_party/blink/renderer/core/events/BUILD.gn b/third_party/blink/renderer/core/events/BUILD.gn index 2247cd3..b6f51c73 100644 --- a/third_party/blink/renderer/core/events/BUILD.gn +++ b/third_party/blink/renderer/core/events/BUILD.gn
@@ -60,6 +60,8 @@ "pointer_event_factory.h", "pop_state_event.cc", "pop_state_event.h", + "portal_activate_event.cc", + "portal_activate_event.h", "progress_event.cc", "progress_event.h", "promise_rejection_event.cc",
diff --git a/third_party/blink/renderer/core/events/event_type_names.json5 b/third_party/blink/renderer/core/events/event_type_names.json5 index aa9609a..dcf0c8b7 100644 --- a/third_party/blink/renderer/core/events/event_type_names.json5 +++ b/third_party/blink/renderer/core/events/event_type_names.json5
@@ -106,6 +106,7 @@ "dragstart", "drop", "durationchange", + "elementtimingbufferfull", "emptied", "encrypted", "end", @@ -216,6 +217,7 @@ "pointerrawmove", "pointerup", "popstate", + "portalactivate", "progress", "processorerror", "push",
diff --git a/third_party/blink/renderer/core/events/portal_activate_event.cc b/third_party/blink/renderer/core/events/portal_activate_event.cc new file mode 100644 index 0000000..5d7ddae0 --- /dev/null +++ b/third_party/blink/renderer/core/events/portal_activate_event.cc
@@ -0,0 +1,32 @@ +// 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. + +#include "third_party/blink/renderer/core/events/portal_activate_event.h" + +#include "third_party/blink/renderer/core/event_type_names.h" +#include "third_party/blink/renderer/platform/wtf/time.h" + +namespace blink { + +PortalActivateEvent* PortalActivateEvent::Create() { + return MakeGarbageCollected<PortalActivateEvent>(); +} + +PortalActivateEvent::PortalActivateEvent() + : Event(event_type_names::kPortalactivate, + Bubbles::kNo, + Cancelable::kNo, + CurrentTimeTicks()) {} + +PortalActivateEvent::~PortalActivateEvent() = default; + +void PortalActivateEvent::Trace(blink::Visitor* visitor) { + Event::Trace(visitor); +} + +const AtomicString& PortalActivateEvent::InterfaceName() const { + return event_type_names::kPortalactivate; +} + +} // namespace blink
diff --git a/third_party/blink/renderer/core/events/portal_activate_event.h b/third_party/blink/renderer/core/events/portal_activate_event.h new file mode 100644 index 0000000..8936f89d --- /dev/null +++ b/third_party/blink/renderer/core/events/portal_activate_event.h
@@ -0,0 +1,35 @@ +// 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. + +#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_EVENTS_PORTAL_ACTIVATE_EVENT_H_ +#define THIRD_PARTY_BLINK_RENDERER_CORE_EVENTS_PORTAL_ACTIVATE_EVENT_H_ + +#include "third_party/blink/renderer/platform/heap/heap.h" + +#include "third_party/blink/renderer/core/core_export.h" +#include "third_party/blink/renderer/core/dom/events/event.h" +#include "third_party/blink/renderer/core/dom/events/event_target.h" + +namespace blink { + +class CORE_EXPORT PortalActivateEvent : public Event { + DEFINE_WRAPPERTYPEINFO(); + + public: + static PortalActivateEvent* Create(); + + PortalActivateEvent(); + ~PortalActivateEvent() override; + + void Trace(blink::Visitor*) override; + + // Event overrides + const AtomicString& InterfaceName() const override; + + private: +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_CORE_EVENTS_PORTAL_ACTIVATE_EVENT_H_
diff --git a/third_party/blink/renderer/core/events/portal_activate_event.idl b/third_party/blink/renderer/core/events/portal_activate_event.idl new file mode 100644 index 0000000..74e22f9 --- /dev/null +++ b/third_party/blink/renderer/core/events/portal_activate_event.idl
@@ -0,0 +1,9 @@ +// 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. + +// https://wicg.github.io/portals/#the-portalactivateevent-interface + +[Exposed=Window, RuntimeEnabled=Portals] +interface PortalActivateEvent : Event { +};
diff --git a/third_party/blink/renderer/core/exported/web_frame_test.cc b/third_party/blink/renderer/core/exported/web_frame_test.cc index 3c575590..cbcc613 100644 --- a/third_party/blink/renderer/core/exported/web_frame_test.cc +++ b/third_party/blink/renderer/core/exported/web_frame_test.cc
@@ -455,7 +455,6 @@ TEST_F(WebFrameTest, SuspendedRequestExecuteScript) { RegisterMockedHttpURLLoad("foo.html"); - RegisterMockedHttpURLLoad("bar.html"); frame_test_helpers::WebViewHelper web_view_helper; web_view_helper.InitializeAndLoad(base_url_ + "foo.html"); @@ -465,11 +464,7 @@ web_view_helper.LocalMainFrame()->MainWorldScriptContext()); // Suspend scheduled tasks so the script doesn't run. - web_view_helper.GetWebView() - ->MainFrameImpl() - ->GetFrame() - ->GetDocument() - ->PauseScheduledTasks(); + web_view_helper.GetWebView()->GetPage()->SetPaused(true); web_view_helper.GetWebView() ->MainFrameImpl() ->RequestExecuteScriptAndReturnValue( @@ -477,10 +472,7 @@ RunPendingTasks(); EXPECT_FALSE(callback_helper.DidComplete()); - // If the frame navigates, pending scripts should be removed, but the callback - // should always be ran. - frame_test_helpers::LoadFrame(web_view_helper.GetWebView()->MainFrameImpl(), - base_url_ + "bar.html"); + web_view_helper.Reset(); EXPECT_TRUE(callback_helper.DidComplete()); EXPECT_EQ(String(), callback_helper.StringValue()); } @@ -529,7 +521,7 @@ // Suspend scheduled tasks so the script doesn't run. WebLocalFrameImpl* main_frame = web_view_helper.LocalMainFrame(); - main_frame->GetFrame()->GetDocument()->PauseScheduledTasks(); + web_view_helper.GetWebView()->GetPage()->SetPaused(true); ScriptExecutionCallbackHelper callback_helper(context); v8::Local<v8::Function> function = @@ -540,7 +532,7 @@ RunPendingTasks(); EXPECT_FALSE(callback_helper.DidComplete()); - main_frame->GetFrame()->GetDocument()->UnpauseScheduledTasks(); + web_view_helper.GetWebView()->GetPage()->SetPaused(false); RunPendingTasks(); EXPECT_TRUE(callback_helper.DidComplete()); EXPECT_EQ("hello", callback_helper.StringValue()); @@ -560,7 +552,7 @@ // Suspend scheduled tasks so the script doesn't run. WebLocalFrameImpl* main_frame = web_view_helper.LocalMainFrame(); - main_frame->GetFrame()->GetDocument()->PauseScheduledTasks(); + web_view_helper.GetWebView()->GetPage()->SetPaused(true); v8::HandleScope scope(v8::Isolate::GetCurrent()); v8::Local<v8::Context> context = @@ -579,7 +571,7 @@ RunPendingTasks(); EXPECT_FALSE(callback_helper.DidComplete()); - main_frame->GetFrame()->GetDocument()->UnpauseScheduledTasks(); + web_view_helper.GetWebView()->GetPage()->SetPaused(false); RunPendingTasks(); EXPECT_TRUE(callback_helper.DidComplete()); EXPECT_EQ(true, callback_helper.BoolValue());
diff --git a/third_party/blink/renderer/core/frame/pausable_script_executor.cc b/third_party/blink/renderer/core/frame/pausable_script_executor.cc index d057673..8e4321f 100644 --- a/third_party/blink/renderer/core/frame/pausable_script_executor.cc +++ b/third_party/blink/renderer/core/frame/pausable_script_executor.cc
@@ -19,6 +19,7 @@ #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/user_gesture_indicator.h" #include "third_party/blink/renderer/core/frame/local_frame.h" +#include "third_party/blink/renderer/platform/wtf/functional.h" #include "third_party/blink/renderer/platform/wtf/vector.h" namespace blink { @@ -171,7 +172,7 @@ void PausableScriptExecutor::ContextDestroyed( ExecutionContext* destroyed_context) { - PausableTimer::ContextDestroyed(destroyed_context); + ContextLifecycleObserver::ContextDestroyed(destroyed_context); if (callback_) { // Though the context is (about to be) destroyed, the callback is invoked @@ -189,11 +190,10 @@ ScriptState* script_state, WebScriptExecutionCallback* callback, Executor* executor) - : PausableTimer(frame->GetDocument(), TaskType::kJavascriptTimer), + : ContextLifecycleObserver(frame->GetDocument()), script_state_(script_state), callback_(callback), blocking_option_(kNonBlocking), - keep_alive_(this), executor_(executor) { CHECK(script_state_); CHECK(script_state_->ContextIsValid()); @@ -201,20 +201,17 @@ PausableScriptExecutor::~PausableScriptExecutor() = default; -void PausableScriptExecutor::Fired() { - ExecuteAndDestroySelf(); -} - void PausableScriptExecutor::Run() { ExecutionContext* context = GetExecutionContext(); DCHECK(context); if (!context->IsContextPaused()) { - PauseIfNeeded(); ExecuteAndDestroySelf(); return; } - StartOneShot(TimeDelta(), FROM_HERE); - PauseIfNeeded(); + task_handle_ = PostCancellableTask( + *context->GetTaskRunner(TaskType::kJavascriptTimer), FROM_HERE, + WTF::Bind(&PausableScriptExecutor::ExecuteAndDestroySelf, + WrapPersistent(this))); } void PausableScriptExecutor::RunAsync(BlockingOption blocking) { @@ -224,8 +221,10 @@ if (blocking_option_ == kOnloadBlocking) To<Document>(GetExecutionContext())->IncrementLoadEventDelayCount(); - StartOneShot(TimeDelta(), FROM_HERE); - PauseIfNeeded(); + task_handle_ = PostCancellableTask( + *context->GetTaskRunner(TaskType::kJavascriptTimer), FROM_HERE, + WTF::Bind(&PausableScriptExecutor::ExecuteAndDestroySelf, + WrapPersistent(this))); } void PausableScriptExecutor::ExecuteAndDestroySelf() { @@ -254,15 +253,14 @@ void PausableScriptExecutor::Dispose() { // Remove object as a ContextLifecycleObserver. - PausableObject::ClearContext(); - keep_alive_.Clear(); - Stop(); + ContextLifecycleObserver::ClearContext(); + task_handle_.Cancel(); } void PausableScriptExecutor::Trace(blink::Visitor* visitor) { visitor->Trace(script_state_); visitor->Trace(executor_); - PausableTimer::Trace(visitor); + ContextLifecycleObserver::Trace(visitor); } } // namespace blink
diff --git a/third_party/blink/renderer/core/frame/pausable_script_executor.h b/third_party/blink/renderer/core/frame/pausable_script_executor.h index c268810f..327d528 100644 --- a/third_party/blink/renderer/core/frame/pausable_script_executor.h +++ b/third_party/blink/renderer/core/frame/pausable_script_executor.h
@@ -7,10 +7,10 @@ #include "base/memory/scoped_refptr.h" #include "third_party/blink/renderer/core/core_export.h" -#include "third_party/blink/renderer/core/frame/pausable_timer.h" +#include "third_party/blink/renderer/core/dom/context_lifecycle_observer.h" #include "third_party/blink/renderer/platform/bindings/dom_wrapper_world.h" #include "third_party/blink/renderer/platform/heap/handle.h" -#include "third_party/blink/renderer/platform/heap/self_keep_alive.h" +#include "third_party/blink/renderer/platform/scheduler/public/post_cancellable_task.h" #include "third_party/blink/renderer/platform/wtf/vector.h" #include "v8/include/v8.h" @@ -23,7 +23,7 @@ class CORE_EXPORT PausableScriptExecutor final : public GarbageCollectedFinalized<PausableScriptExecutor>, - public PausableTimer { + public ContextLifecycleObserver { USING_GARBAGE_COLLECTED_MIXIN(PausableScriptExecutor); public: @@ -57,7 +57,7 @@ ScriptState*, WebScriptExecutionCallback*, Executor*); - ~PausableScriptExecutor() override; + virtual ~PausableScriptExecutor(); void Run(); void RunAsync(BlockingOption); @@ -66,7 +66,6 @@ void Trace(blink::Visitor*) override; private: - void Fired() override; void ExecuteAndDestroySelf(); void Dispose(); @@ -74,8 +73,7 @@ Member<ScriptState> script_state_; WebScriptExecutionCallback* callback_; BlockingOption blocking_option_; - - SelfKeepAlive<PausableScriptExecutor> keep_alive_; + TaskHandle task_handle_; Member<Executor> executor_; };
diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc index 2cbf510..3851c29 100644 --- a/third_party/blink/renderer/core/frame/web_local_frame_impl.cc +++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.cc
@@ -168,6 +168,7 @@ #include "third_party/blink/renderer/core/editing/writing_direction.h" #include "third_party/blink/renderer/core/events/after_print_event.h" #include "third_party/blink/renderer/core/events/before_print_event.h" +#include "third_party/blink/renderer/core/events/portal_activate_event.h" #include "third_party/blink/renderer/core/exported/local_frame_client_impl.h" #include "third_party/blink/renderer/core/exported/web_associated_url_loader_impl.h" #include "third_party/blink/renderer/core/exported/web_dev_tools_agent_impl.h" @@ -2520,6 +2521,11 @@ } } +void WebLocalFrameImpl::OnPortalActivated() { + PortalActivateEvent* event = PortalActivateEvent::Create(); + GetFrame()->DomWindow()->DispatchEvent(*event); +} + void WebLocalFrameImpl::SetTextCheckClient( WebTextCheckClient* text_check_client) { text_check_client_ = text_check_client;
diff --git a/third_party/blink/renderer/core/frame/web_local_frame_impl.h b/third_party/blink/renderer/core/frame/web_local_frame_impl.h index ff8e607..ffa3865 100644 --- a/third_party/blink/renderer/core/frame/web_local_frame_impl.h +++ b/third_party/blink/renderer/core/frame/web_local_frame_impl.h
@@ -302,6 +302,7 @@ void AdvanceFocusInForm(WebFocusType) override; void PerformMediaPlayerAction(const WebPoint&, const WebMediaPlayerAction&) override; + void OnPortalActivated() override; // WebNavigationControl methods: bool DispatchBeforeUnloadEvent(bool) override;
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc index 42d6e25..bd9fc77 100644 --- a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc +++ b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator.cc
@@ -597,12 +597,12 @@ sk_sp<SkColorSpace> CanvasAsyncBlobCreator::BlobColorSpaceToSkColorSpace( String blob_color_space) { - SkColorSpace::Gamut gamut = SkColorSpace::kSRGB_Gamut; + skcms_Matrix3x3 gamut = SkNamedGamut::kSRGB; if (blob_color_space == kDisplayP3ImageColorSpaceName) - gamut = SkColorSpace::kDCIP3_D65_Gamut; + gamut = SkNamedGamut::kDCIP3; else if (blob_color_space == kRec2020ImageColorSpaceName) - gamut = SkColorSpace::kRec2020_Gamut; - return SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma, gamut); + gamut = SkNamedGamut::kRec2020; + return SkColorSpace::MakeRGB(SkNamedTransferFn::kSRGB, gamut); } bool CanvasAsyncBlobCreator::EncodeImageForConvertToBlobTest() {
diff --git a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator_test.cc b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator_test.cc index dddd9665..53b88e8 100644 --- a/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator_test.cc +++ b/third_party/blink/renderer/core/html/canvas/canvas_async_blob_creator_test.cc
@@ -245,12 +245,10 @@ color_space_params.push_back(std::pair<sk_sp<SkColorSpace>, SkColorType>( SkColorSpace::MakeSRGBLinear(), kRGBA_F16_SkColorType)); color_space_params.push_back(std::pair<sk_sp<SkColorSpace>, SkColorType>( - SkColorSpace::MakeRGB(SkColorSpace::kLinear_RenderTargetGamma, - SkColorSpace::kDCIP3_D65_Gamut), + SkColorSpace::MakeRGB(SkNamedTransferFn::kLinear, SkNamedGamut::kDCIP3), kRGBA_F16_SkColorType)); color_space_params.push_back(std::pair<sk_sp<SkColorSpace>, SkColorType>( - SkColorSpace::MakeRGB(SkColorSpace::kLinear_RenderTargetGamma, - SkColorSpace::kRec2020_Gamut), + SkColorSpace::MakeRGB(SkNamedTransferFn::kLinear, SkNamedGamut::kRec2020), kRGBA_F16_SkColorType)); std::list<String> blob_mime_types = {"image/png", "image/webp", "image/jpeg"};
diff --git a/third_party/blink/renderer/core/html/forms/html_button_element.cc b/third_party/blink/renderer/core/html/forms/html_button_element.cc index c6a3a7f..97a2520 100644 --- a/third_party/blink/renderer/core/html/forms/html_button_element.cc +++ b/third_party/blink/renderer/core/html/forms/html_button_element.cc
@@ -46,6 +46,13 @@ return MakeGarbageCollected<HTMLButtonElement>(document); } +const AttrNameToTrustedType& HTMLButtonElement::GetCheckedAttributeTypes() + const { + DEFINE_STATIC_LOCAL(AttrNameToTrustedType, attribute_map, + ({{"formaction", SpecificTrustedType::kTrustedURL}})); + return attribute_map; +} + void HTMLButtonElement::setType(const AtomicString& type) { setAttribute(kTypeAttr, type); }
diff --git a/third_party/blink/renderer/core/html/forms/html_button_element.h b/third_party/blink/renderer/core/html/forms/html_button_element.h index b281a09..ba1b2492 100644 --- a/third_party/blink/renderer/core/html/forms/html_button_element.h +++ b/third_party/blink/renderer/core/html/forms/html_button_element.h
@@ -36,6 +36,8 @@ explicit HTMLButtonElement(Document&); + const AttrNameToTrustedType& GetCheckedAttributeTypes() const override; + void setType(const AtomicString&); const AtomicString& Value() const;
diff --git a/third_party/blink/renderer/core/html/forms/html_button_element.idl b/third_party/blink/renderer/core/html/forms/html_button_element.idl index a562867..4b9d00ea 100644 --- a/third_party/blink/renderer/core/html/forms/html_button_element.idl +++ b/third_party/blink/renderer/core/html/forms/html_button_element.idl
@@ -24,7 +24,7 @@ [CEReactions, Reflect] attribute boolean autofocus; [CEReactions, Reflect] attribute boolean disabled; [ImplementedAs=formOwner] readonly attribute HTMLFormElement? form; - [CEReactions] attribute DOMString formAction; + [CEReactions, RaisesException=Setter] attribute URLString formAction; [CEReactions] attribute DOMString formEnctype; [CEReactions] attribute DOMString formMethod; [CEReactions, Reflect] attribute boolean formNoValidate;
diff --git a/third_party/blink/renderer/core/html/forms/html_form_control_element.cc b/third_party/blink/renderer/core/html/forms/html_form_control_element.cc index 71360fe..791c3fe 100644 --- a/third_party/blink/renderer/core/html/forms/html_form_control_element.cc +++ b/third_party/blink/renderer/core/html/forms/html_form_control_element.cc
@@ -24,6 +24,7 @@ #include "third_party/blink/renderer/core/html/forms/html_form_control_element.h" +#include "third_party/blink/renderer/bindings/core/v8/usv_string_or_trusted_url.h" #include "third_party/blink/renderer/core/accessibility/ax_object_cache.h" #include "third_party/blink/renderer/core/dom/element_traversal.h" #include "third_party/blink/renderer/core/dom/events/event.h" @@ -34,6 +35,7 @@ #include "third_party/blink/renderer/core/html/parser/html_parser_idioms.h" #include "third_party/blink/renderer/core/inspector/console_message.h" #include "third_party/blink/renderer/core/layout/layout_object.h" +#include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h" #include "third_party/blink/renderer/platform/wtf/vector.h" @@ -58,15 +60,19 @@ HTMLElement::Trace(visitor); } -String HTMLFormControlElement::formAction() const { +void HTMLFormControlElement::formAction(USVStringOrTrustedURL& result) const { const AtomicString& action = FastGetAttribute(kFormactionAttr); - if (action.IsEmpty()) - return GetDocument().Url(); - return GetDocument().CompleteURL(StripLeadingAndTrailingHTMLSpaces(action)); + if (action.IsEmpty()) { + result.SetUSVString(GetDocument().Url()); + return; + } + result.SetUSVString( + GetDocument().CompleteURL(StripLeadingAndTrailingHTMLSpaces(action))); } -void HTMLFormControlElement::setFormAction(const AtomicString& value) { - setAttribute(kFormactionAttr, value); +void HTMLFormControlElement::setFormAction(const USVStringOrTrustedURL& value, + ExceptionState& exception_state) { + setAttribute(kFormactionAttr, value, exception_state); } String HTMLFormControlElement::formEnctype() const {
diff --git a/third_party/blink/renderer/core/html/forms/html_form_control_element.h b/third_party/blink/renderer/core/html/forms/html_form_control_element.h index 0e24945..b67c3df 100644 --- a/third_party/blink/renderer/core/html/forms/html_form_control_element.h +++ b/third_party/blink/renderer/core/html/forms/html_form_control_element.h
@@ -48,8 +48,8 @@ ~HTMLFormControlElement() override; void Trace(blink::Visitor*) override; - String formAction() const; - void setFormAction(const AtomicString&); + void formAction(USVStringOrTrustedURL&) const; + void setFormAction(const USVStringOrTrustedURL&, ExceptionState&); String formEnctype() const; void setFormEnctype(const AtomicString&); String formMethod() const;
diff --git a/third_party/blink/renderer/core/html/forms/html_form_element.cc b/third_party/blink/renderer/core/html/forms/html_form_element.cc index 3deeab97..7cd08ac1 100644 --- a/third_party/blink/renderer/core/html/forms/html_form_element.cc +++ b/third_party/blink/renderer/core/html/forms/html_form_element.cc
@@ -31,6 +31,7 @@ #include "third_party/blink/renderer/bindings/core/v8/radio_node_list_or_element.h" #include "third_party/blink/renderer/bindings/core/v8/script_controller.h" #include "third_party/blink/renderer/bindings/core/v8/script_event_listener.h" +#include "third_party/blink/renderer/bindings/core/v8/usv_string_or_trusted_url.h" #include "third_party/blink/renderer/core/dom/attribute.h" #include "third_party/blink/renderer/core/dom/document.h" #include "third_party/blink/renderer/core/dom/element_traversal.h" @@ -63,6 +64,7 @@ #include "third_party/blink/renderer/core/loader/form_submission.h" #include "third_party/blink/renderer/core/loader/mixed_content_checker.h" #include "third_party/blink/renderer/core/loader/navigation_scheduler.h" +#include "third_party/blink/renderer/platform/bindings/exception_state.h" #include "third_party/blink/renderer/platform/wtf/text/atomic_string.h" namespace blink { @@ -97,6 +99,12 @@ HTMLElement::Trace(visitor); } +const AttrNameToTrustedType& HTMLFormElement::GetCheckedAttributeTypes() const { + DEFINE_STATIC_LOCAL(AttrNameToTrustedType, attribute_map, + ({{"action", SpecificTrustedType::kTrustedURL}})); + return attribute_map; +} + bool HTMLFormElement::MatchesValidityPseudoClasses() const { return true; } @@ -695,8 +703,13 @@ return action_url.GetString(); } -void HTMLFormElement::setAction(const AtomicString& value) { - setAttribute(kActionAttr, value); +void HTMLFormElement::action(USVStringOrTrustedURL& result) const { + result.SetUSVString(action()); +} + +void HTMLFormElement::setAction(const USVStringOrTrustedURL& value, + ExceptionState& exception_state) { + setAttribute(kActionAttr, value, exception_state); } void HTMLFormElement::setEnctype(const AtomicString& value) {
diff --git a/third_party/blink/renderer/core/html/forms/html_form_element.h b/third_party/blink/renderer/core/html/forms/html_form_element.h index 816b11e..10274dc 100644 --- a/third_party/blink/renderer/core/html/forms/html_form_element.h +++ b/third_party/blink/renderer/core/html/forms/html_form_element.h
@@ -50,6 +50,8 @@ ~HTMLFormElement() override; void Trace(blink::Visitor*) override; + const AttrNameToTrustedType& GetCheckedAttributeTypes() const override; + HTMLFormControlsCollection* elements(); void GetNamedElements(const AtomicString&, HeapVector<Member<Element>>&); @@ -57,7 +59,8 @@ HTMLElement* item(unsigned index); String action() const; - void setAction(const AtomicString&); + void action(USVStringOrTrustedURL&) const; + void setAction(const USVStringOrTrustedURL&, ExceptionState&); String enctype() const { return attributes_.EncodingType(); } void setEnctype(const AtomicString&);
diff --git a/third_party/blink/renderer/core/html/forms/html_form_element.idl b/third_party/blink/renderer/core/html/forms/html_form_element.idl index 8a830e25..0571723 100644 --- a/third_party/blink/renderer/core/html/forms/html_form_element.idl +++ b/third_party/blink/renderer/core/html/forms/html_form_element.idl
@@ -25,7 +25,7 @@ OverrideBuiltins ] interface HTMLFormElement : HTMLElement { [CEReactions, Reflect=accept_charset] attribute DOMString acceptCharset; - [CEReactions, URL] attribute DOMString action; + [CEReactions, URL, RaisesException=Setter] attribute URLString action; [CEReactions, Reflect, ReflectOnly=("on","off"), ReflectMissing="on", ReflectInvalid="on"] attribute DOMString autocomplete; [CEReactions, CustomElementCallbacks] attribute DOMString enctype; [CEReactions, CustomElementCallbacks] attribute DOMString encoding;
diff --git a/third_party/blink/renderer/core/html/forms/html_input_element.cc b/third_party/blink/renderer/core/html/forms/html_input_element.cc index 575d5e40..a977209 100644 --- a/third_party/blink/renderer/core/html/forms/html_input_element.cc +++ b/third_party/blink/renderer/core/html/forms/html_input_element.cc
@@ -146,7 +146,8 @@ const AttrNameToTrustedType& HTMLInputElement::GetCheckedAttributeTypes() const { DEFINE_STATIC_LOCAL(AttrNameToTrustedType, attribute_map, - ({{"src", SpecificTrustedType::kTrustedURL}})); + ({{"formaction", SpecificTrustedType::kTrustedURL}, + {"src", SpecificTrustedType::kTrustedURL}})); return attribute_map; }
diff --git a/third_party/blink/renderer/core/html/forms/html_input_element.idl b/third_party/blink/renderer/core/html/forms/html_input_element.idl index 0500484..340d2afb 100644 --- a/third_party/blink/renderer/core/html/forms/html_input_element.idl +++ b/third_party/blink/renderer/core/html/forms/html_input_element.idl
@@ -21,9 +21,6 @@ // https://html.spec.whatwg.org/#the-input-element -// The `URLString` reference below is from Trusted Types: -// https://github.com/WICG/trusted-types/, which is still WIP. -// https://crbug.com/739170. enum SelectionMode { "select", "start", "end", "preserve" }; [ @@ -42,7 +39,7 @@ // The 'files' attribute is intentionally not readonly. // https://www.w3.org/Bugs/Public/show_bug.cgi?id=22682 attribute FileList? files; - [CEReactions] attribute DOMString formAction; + [CEReactions, RaisesException=Setter] attribute URLString formAction; [CEReactions, CustomElementCallbacks] attribute DOMString formEnctype; [CEReactions, CustomElementCallbacks] attribute DOMString formMethod; [CEReactions, Reflect] attribute boolean formNoValidate;
diff --git a/third_party/blink/renderer/core/imagebitmap/image_bitmap_test.cc b/third_party/blink/renderer/core/imagebitmap/image_bitmap_test.cc index 0b2b63e3..80d1e199 100644 --- a/third_party/blink/renderer/core/imagebitmap/image_bitmap_test.cc +++ b/third_party/blink/renderer/core/imagebitmap/image_bitmap_test.cc
@@ -614,8 +614,8 @@ // internal SkImage back storage. ASSERT_EQ(sk_image_internal, sk_image_internal_8888); - sk_sp<SkColorSpace> p3_color_space = SkColorSpace::MakeRGB( - SkColorSpace::kLinear_RenderTargetGamma, SkColorSpace::kDCIP3_D65_Gamut); + sk_sp<SkColorSpace> p3_color_space = + SkColorSpace::MakeRGB(SkNamedTransferFn::kLinear, SkNamedGamut::kDCIP3); SkImageInfo info_f16 = SkImageInfo::Make(10, 10, kRGBA_F16_SkColorType, kPremul_SkAlphaType, p3_color_space); sk_sp<SkSurface> surface_f16(SkSurface::MakeRaster(info_f16));
diff --git a/third_party/blink/renderer/core/inspector/InspectorOverlayPage.html b/third_party/blink/renderer/core/inspector/InspectorOverlayPage.html index 3cad9e19e..4b313812 100644 --- a/third_party/blink/renderer/core/inspector/InspectorOverlayPage.html +++ b/third_party/blink/renderer/core/inspector/InspectorOverlayPage.html
@@ -819,22 +819,11 @@ { var context = window.context; context.save(); - context.fillStyle = "rgba(0, 0, 0, 0.2)"; - context.beginPath(); - context.moveTo(rect.x1 - 0.5, rect.y1 - 0.5); - context.lineTo(rect.x1 - 0.5, rect.y2 + 0.5); - context.lineTo(rect.x2 + 0.5, rect.y2 + 0.5); - context.lineTo(rect.x2 + 0.5, rect.y1 - 0.5); - context.lineTo(rect.x1 - 0.5, rect.y1 - 0.5); - context.fill(); - context.strokeStyle = "rgba(255, 255, 255, 0.9)"; + context.fillStyle = '#0003'; + context.strokeStyle = '#fffd'; context.lineWidth = 1; - context.beginPath(); - context.moveTo(rect.x1 - 0.5, rect.y1 - 0.5); - context.lineTo(rect.x1 - 0.5, rect.y2 + 0.5); - context.lineTo(rect.x2 + 0.5, rect.y2 + 0.5); - context.lineTo(rect.x2 + 0.5, rect.y1 - 0.5); - context.lineTo(rect.x1 - 0.5, rect.y1 - 0.5); + context.rect(rect.x1 - 0.5, rect.y1 - 0.5, rect.x2 - rect.x1 + 1, rect.y2 - rect.y1 + 1); + context.fill(); context.stroke(); context.restore(); }
diff --git a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc index 8499d82b..c062939 100644 --- a/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc +++ b/third_party/blink/renderer/core/inspector/inspector_overlay_agent.cc
@@ -815,10 +815,13 @@ void InspectorOverlayAgent::DrawScreenshotBorder() { if (!screenshot_mode_) return; - VisualViewport& visual_viewport = + const VisualViewport& visual_viewport = frame_impl_->GetFrame()->GetPage()->GetVisualViewport(); IntPoint p1 = visual_viewport.RootFrameToViewport(screenshot_anchor_); IntPoint p2 = visual_viewport.RootFrameToViewport(screenshot_position_); + float scale = 1.f / WindowToViewportScale(); + p1.Scale(scale, scale); + p2.Scale(scale, scale); std::unique_ptr<protocol::DictionaryValue> data = protocol::DictionaryValue::create(); data->setInteger("x1", p1.X()); @@ -1127,10 +1130,13 @@ IntPoint p1 = screenshot_anchor_; IntPoint p2 = screenshot_position_; if (LocalFrame* frame = frame_impl_->GetFrame()) { - scale = frame->GetPage()->PageScaleFactor(); + scale = frame->GetPage()->PageScaleFactor() / WindowToViewportScale(); p1 = frame->View()->ConvertFromRootFrame(p1); p2 = frame->View()->ConvertFromRootFrame(p2); } + float dp_to_dip = 1.f / WindowToViewportScale(); + p1.Scale(dp_to_dip, dp_to_dip); + p2.Scale(dp_to_dip, dp_to_dip); int min_x = std::min(p1.X(), p2.X()); int max_x = std::max(p1.X(), p2.X()); int min_y = std::min(p1.Y(), p2.Y());
diff --git a/third_party/blink/renderer/core/layout/layout_grid.cc b/third_party/blink/renderer/core/layout/layout_grid.cc index 1744bcc4..fb6fb09 100644 --- a/third_party/blink/renderer/core/layout/layout_grid.cc +++ b/third_party/blink/renderer/core/layout/layout_grid.cc
@@ -920,8 +920,8 @@ } else { // Grow the grid for items with a definite row span, getting the largest // such span. - size_t span_size = GridPositionsResolver::SpanSizeForAutoPlacedItem( - *Style(), *child, kForRows); + size_t span_size = + GridPositionsResolver::SpanSizeForAutoPlacedItem(*child, kForRows); maximum_row_index = std::max(maximum_row_index, span_size); } @@ -933,8 +933,8 @@ } else { // Grow the grid for items with a definite column span, getting the // largest such span. - size_t span_size = GridPositionsResolver::SpanSizeForAutoPlacedItem( - *Style(), *child, kForColumns); + size_t span_size = + GridPositionsResolver::SpanSizeForAutoPlacedItem(*child, kForColumns); maximum_column_index = std::max(maximum_column_index, span_size); } } @@ -954,7 +954,7 @@ specified_direction == kForColumns ? kForRows : kForColumns; const size_t end_of_cross_direction = grid.NumTracks(cross_direction); size_t cross_direction_span_size = - GridPositionsResolver::SpanSizeForAutoPlacedItem(*Style(), grid_item, + GridPositionsResolver::SpanSizeForAutoPlacedItem(grid_item, cross_direction); GridSpan cross_direction_positions = GridSpan::TranslatedDefiniteGridSpan( end_of_cross_direction, @@ -989,7 +989,7 @@ .IsTranslatedDefinite()); size_t minor_axis_span_size = GridPositionsResolver::SpanSizeForAutoPlacedItem( - *Style(), *auto_grid_item, AutoPlacementMinorAxisDirection()); + *auto_grid_item, AutoPlacementMinorAxisDirection()); unsigned major_axis_initial_position = major_axis_positions.StartLine(); auto iterator = grid.CreateIterator( @@ -1038,7 +1038,7 @@ .IsTranslatedDefinite()); size_t major_axis_span_size = GridPositionsResolver::SpanSizeForAutoPlacedItem( - *Style(), grid_item, AutoPlacementMajorAxisDirection()); + grid_item, AutoPlacementMajorAxisDirection()); const size_t end_of_major_axis = grid.NumTracks(AutoPlacementMajorAxisDirection()); @@ -1074,7 +1074,7 @@ } else { size_t minor_axis_span_size = GridPositionsResolver::SpanSizeForAutoPlacedItem( - *Style(), grid_item, AutoPlacementMinorAxisDirection()); + grid_item, AutoPlacementMinorAxisDirection()); for (size_t major_axis_index = major_axis_auto_placement_cursor; major_axis_index < end_of_major_axis; ++major_axis_index) {
diff --git a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc index b49e8a7d..9af5090 100644 --- a/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc +++ b/third_party/blink/renderer/core/paint/compositing/composited_layer_mapping.cc
@@ -1334,9 +1334,14 @@ HasVisibleNonCompositingDescendant(&owning_layer_); graphics_layer_->SetContentsVisible(contents_visible); - graphics_layer_->SetBackfaceVisibility( - GetLayoutObject().StyleRef().BackfaceVisibility() == - EBackfaceVisibility::kVisible); + // In BGPT mode, we do not need to update the backface visibility here, as it + // will already be set by PaintArtifactCompsitor based on + // TransformPaintPropertyNode::GetBackfaceVisibility. + if (!RuntimeEnabledFeatures::BlinkGenPropertyTreesEnabled()) { + graphics_layer_->SetBackfaceVisibility( + GetLayoutObject().StyleRef().BackfaceVisibility() == + EBackfaceVisibility::kVisible); + } } void CompositedLayerMapping::ComputeGraphicsLayerParentLocation( @@ -1540,9 +1545,15 @@ owning_layer_.SubpixelAccumulation()); overflow_controls_host_layer_->SetSize(gfx::Size(border_box.Size())); overflow_controls_host_layer_->SetMasksToBounds(true); - overflow_controls_host_layer_->SetBackfaceVisibility( - owning_layer_.GetLayoutObject().StyleRef().BackfaceVisibility() == - EBackfaceVisibility::kVisible); + + // In BGPT mode, we do not need to update the backface visibility here, as it + // will already be set by PaintArtifactCompsitor based on + // TransformPaintPropertyNode::GetBackfaceVisibility. + if (!RuntimeEnabledFeatures::BlinkGenPropertyTreesEnabled()) { + overflow_controls_host_layer_->SetBackfaceVisibility( + owning_layer_.GetLayoutObject().StyleRef().BackfaceVisibility() == + EBackfaceVisibility::kVisible); + } } void CompositedLayerMapping::UpdateChildContainmentLayerGeometry() {
diff --git a/third_party/blink/renderer/core/paint/image_element_timing.cc b/third_party/blink/renderer/core/paint/image_element_timing.cc index c38b8a4..e54dfd22 100644 --- a/third_party/blink/renderer/core/paint/image_element_timing.cc +++ b/third_party/blink/renderer/core/paint/image_element_timing.cc
@@ -133,7 +133,8 @@ WindowPerformance* performance = DOMWindowPerformance::performance(*document->domWindow()); if (performance && - performance->HasObserverFor(PerformanceEntry::kElement)) { + (performance->HasObserverFor(PerformanceEntry::kElement) || + performance->ShouldBufferEntries())) { for (const auto& element_timing : element_timings_) { performance->AddElementTiming(element_timing.name, element_timing.rect, timestamp);
diff --git a/third_party/blink/renderer/core/paint/inline_text_box_painter.cc b/third_party/blink/renderer/core/paint/inline_text_box_painter.cc index d5abae0001..f948711 100644 --- a/third_party/blink/renderer/core/paint/inline_text_box_painter.cc +++ b/third_party/blink/renderer/core/paint/inline_text_box_painter.cc
@@ -185,9 +185,10 @@ // capitalizing letters can change the length of the backing string. // That needs to be taken into account when computing the size of the box // or its painting. - length = std::min(length, first_line_string.length() - - std::min(inline_text_box_.Start(), - first_line_string.length())); + if (inline_text_box_.Start() >= first_line_string.length()) + return; + length = + std::min(length, first_line_string.length() - inline_text_box_.Start()); // TODO(szager): Figure out why this CHECK sometimes fails, it shouldn't. CHECK_LE(inline_text_box_.Start() + length, first_line_string.length());
diff --git a/third_party/blink/renderer/core/style/grid_positions_resolver.cc b/third_party/blink/renderer/core/style/grid_positions_resolver.cc index ede7d1b..2d95286b 100644 --- a/third_party/blink/renderer/core/style/grid_positions_resolver.cc +++ b/third_party/blink/renderer/core/style/grid_positions_resolver.cc
@@ -140,7 +140,6 @@ } static void InitialAndFinalPositionsFromStyle( - const ComputedStyle& grid_container_style, const LayoutBox& grid_item, GridTrackSizingDirection direction, GridPosition& initial_position, @@ -329,12 +328,11 @@ } size_t GridPositionsResolver::SpanSizeForAutoPlacedItem( - const ComputedStyle& grid_container_style, const LayoutBox& grid_item, GridTrackSizingDirection direction) { GridPosition initial_position, final_position; - InitialAndFinalPositionsFromStyle(grid_container_style, grid_item, direction, - initial_position, final_position); + InitialAndFinalPositionsFromStyle(grid_item, direction, initial_position, + final_position); // This method will only be used when both positions need to be resolved // against the opposite one. @@ -441,8 +439,8 @@ GridTrackSizingDirection direction, size_t auto_repeat_tracks_count) { GridPosition initial_position, final_position; - InitialAndFinalPositionsFromStyle(grid_container_style, grid_item, direction, - initial_position, final_position); + InitialAndFinalPositionsFromStyle(grid_item, direction, initial_position, + final_position); GridPositionSide initial_side = InitialPositionSide(direction); GridPositionSide final_side = FinalPositionSide(direction);
diff --git a/third_party/blink/renderer/core/style/grid_positions_resolver.h b/third_party/blink/renderer/core/style/grid_positions_resolver.h index 1c88015..08ab54d 100644 --- a/third_party/blink/renderer/core/style/grid_positions_resolver.h +++ b/third_party/blink/renderer/core/style/grid_positions_resolver.h
@@ -64,8 +64,7 @@ static GridPositionSide InitialPositionSide(GridTrackSizingDirection); static GridPositionSide FinalPositionSide(GridTrackSizingDirection); - static size_t SpanSizeForAutoPlacedItem(const ComputedStyle&, - const LayoutBox&, + static size_t SpanSizeForAutoPlacedItem(const LayoutBox&, GridTrackSizingDirection); static GridSpan ResolveGridPositionsFromStyle( const ComputedStyle&,
diff --git a/third_party/blink/renderer/core/timing/event_timing.cc b/third_party/blink/renderer/core/timing/event_timing.cc index 356d2786..cca33b2 100644 --- a/third_party/blink/renderer/core/timing/event_timing.cc +++ b/third_party/blink/renderer/core/timing/event_timing.cc
@@ -35,7 +35,7 @@ // we cannot assume that the conditions should still hold true in // DidDispatchEvent. These conditions have to be re-tested before an entry is // dispatched. - if ((performance_->ShouldBufferEventTiming() && + if ((performance_->ShouldBufferEntries() && !performance_->IsEventTimingBufferFull()) || performance_->HasObserverFor(PerformanceEntry::kEvent) || !performance_->FirstInputDetected()) {
diff --git a/third_party/blink/renderer/core/timing/memory_info.cc b/third_party/blink/renderer/core/timing/memory_info.cc index 3c83c44..ebb7951b 100644 --- a/third_party/blink/renderer/core/timing/memory_info.cc +++ b/third_party/blink/renderer/core/timing/memory_info.cc
@@ -49,9 +49,15 @@ static void GetHeapSize(HeapInfo& info) { v8::HeapStatistics heap_statistics; v8::Isolate::GetCurrent()->GetHeapStatistics(&heap_statistics); - info.used_js_heap_size = heap_statistics.used_heap_size(); - info.total_js_heap_size = heap_statistics.total_physical_size(); + info.used_js_heap_size = + heap_statistics.used_heap_size() + heap_statistics.external_memory(); + info.total_js_heap_size = + heap_statistics.total_physical_size() + heap_statistics.external_memory(); info.js_heap_size_limit = heap_statistics.heap_size_limit(); + info.used_js_heap_size_without_external_memory = + heap_statistics.used_heap_size(); + info.total_js_heap_size_without_external_memory = + heap_statistics.total_physical_size(); } class HeapSizeCache { @@ -96,6 +102,10 @@ info_.used_js_heap_size = QuantizeMemorySize(info_.used_js_heap_size); info_.total_js_heap_size = QuantizeMemorySize(info_.total_js_heap_size); info_.js_heap_size_limit = QuantizeMemorySize(info_.js_heap_size_limit); + info_.used_js_heap_size_without_external_memory = + QuantizeMemorySize(info_.used_js_heap_size_without_external_memory); + info_.total_js_heap_size_without_external_memory = + QuantizeMemorySize(info_.total_js_heap_size_without_external_memory); } base::Optional<TimeTicks> last_update_time_;
diff --git a/third_party/blink/renderer/core/timing/memory_info.h b/third_party/blink/renderer/core/timing/memory_info.h index ffd71db6..af93db2 100644 --- a/third_party/blink/renderer/core/timing/memory_info.h +++ b/third_party/blink/renderer/core/timing/memory_info.h
@@ -40,12 +40,13 @@ struct HeapInfo { DISALLOW_NEW(); - HeapInfo() - : used_js_heap_size(0), total_js_heap_size(0), js_heap_size_limit(0) {} - size_t used_js_heap_size; - size_t total_js_heap_size; - size_t js_heap_size_limit; + size_t used_js_heap_size = 0; + size_t total_js_heap_size = 0; + size_t js_heap_size_limit = 0; + // Values for origin trial: "Legacy Performance Memory Counters". + size_t used_js_heap_size_without_external_memory = 0; + size_t total_js_heap_size_without_external_memory = 0; }; class CORE_EXPORT MemoryInfo final : public ScriptWrappable { @@ -66,6 +67,12 @@ size_t totalJSHeapSize() const { return info_.total_js_heap_size; } size_t usedJSHeapSize() const { return info_.used_js_heap_size; } size_t jsHeapSizeLimit() const { return info_.js_heap_size_limit; } + size_t usedJSHeapSizeWithoutExternalMemory() const { + return info_.used_js_heap_size_without_external_memory; + } + size_t totalJSHeapSizeWithoutExternalMemory() const { + return info_.total_js_heap_size_without_external_memory; + } private: HeapInfo info_;
diff --git a/third_party/blink/renderer/core/timing/memory_info.idl b/third_party/blink/renderer/core/timing/memory_info.idl index dbbf246..f3f531e 100644 --- a/third_party/blink/renderer/core/timing/memory_info.idl +++ b/third_party/blink/renderer/core/timing/memory_info.idl
@@ -37,4 +37,6 @@ [Measure] readonly attribute unsigned long long totalJSHeapSize; [Measure] readonly attribute unsigned long long usedJSHeapSize; [Measure] readonly attribute unsigned long long jsHeapSizeLimit; + [OriginTrialEnabled=LegacyPerformanceMemoryCounters] readonly attribute unsigned long long usedJSHeapSizeWithoutExternalMemory; + [OriginTrialEnabled=LegacyPerformanceMemoryCounters] readonly attribute unsigned long long totalJSHeapSizeWithoutExternalMemory; };
diff --git a/third_party/blink/renderer/core/timing/performance.cc b/third_party/blink/renderer/core/timing/performance.cc index 65f780d..547eac2 100644 --- a/third_party/blink/renderer/core/timing/performance.cc +++ b/third_party/blink/renderer/core/timing/performance.cc
@@ -43,6 +43,7 @@ #include "third_party/blink/renderer/core/frame/use_counter.h" #include "third_party/blink/renderer/core/loader/document_load_timing.h" #include "third_party/blink/renderer/core/loader/document_loader.h" +#include "third_party/blink/renderer/core/timing/performance_element_timing.h" #include "third_party/blink/renderer/core/timing/performance_event_timing.h" #include "third_party/blink/renderer/core/timing/performance_long_task_timing.h" #include "third_party/blink/renderer/core/timing/performance_mark.h" @@ -173,12 +174,14 @@ static const size_t kDefaultResourceTimingBufferSize = 250; constexpr size_t kDefaultEventTimingBufferSize = 150; +constexpr size_t kDefaultElementTimingBufferSize = 150; Performance::Performance( TimeTicks time_origin, scoped_refptr<base::SingleThreadTaskRunner> task_runner) : resource_timing_buffer_size_limit_(kDefaultResourceTimingBufferSize), event_timing_buffer_max_size_(kDefaultEventTimingBufferSize), + element_timing_buffer_max_size_(kDefaultElementTimingBufferSize), user_timing_(nullptr), time_origin_(time_origin), observer_filter_options_(PerformanceEntry::kInvalid), @@ -224,6 +227,7 @@ entries.AppendVector(resource_timing_buffer_); entries.AppendVector(event_timing_buffer_); + entries.AppendVector(element_timing_buffer_); if (first_input_timing_) entries.push_back(first_input_timing_); if (!navigation_timing_) @@ -259,6 +263,12 @@ for (const auto& resource : resource_timing_buffer_) entries.push_back(resource); break; + case PerformanceEntry::kElement: + UseCounter::Count(GetExecutionContext(), + WebFeature::kElementTimingExplicitlyRequested); + for (const auto& element : element_timing_buffer_) + entries.push_back(element); + break; case PerformanceEntry::kEvent: UseCounter::Count(GetExecutionContext(), WebFeature::kEventTimingExplicitlyRequested); @@ -300,9 +310,8 @@ break; case PerformanceEntry::kTaskAttribution: break; - // TODO(npm): decide which element timing and layout jank entries are - // accessible via the performance buffer. - case PerformanceEntry::kElement: + // TODO(npm): decide which layout jank entries are accessible via the + // performance buffer. case PerformanceEntry::kLayoutJank: break; case PerformanceEntry::kInvalid: @@ -331,6 +340,17 @@ } } + if (entry_type.IsNull() || type == PerformanceEntry::kElement) { + for (const auto& element : element_timing_buffer_) { + if (element->name() == name) + entries.push_back(element); + } + } + if (type == PerformanceEntry::kElement) { + UseCounter::Count(GetExecutionContext(), + WebFeature::kElementTimingExplicitlyRequested); + } + if (entry_type.IsNull() || type == PerformanceEntry::kEvent) { for (const auto& event : event_timing_buffer_) { if (event->name() == name) @@ -557,6 +577,10 @@ NotifyObserversOfEntry(*navigation_timing_); } +bool Performance::IsElementTimingBufferFull() const { + return element_timing_buffer_.size() >= element_timing_buffer_max_size_; +} + bool Performance::IsEventTimingBufferFull() const { return event_timing_buffer_.size() >= event_timing_buffer_max_size_; } @@ -590,6 +614,13 @@ resource_timing_buffer_full_event_pending_ = false; } +void Performance::AddElementTimingBuffer(PerformanceElementTiming& entry) { + element_timing_buffer_.push_back(&entry); + + if (IsElementTimingBufferFull()) + DispatchEvent(*Event::Create(event_type_names::kElementtimingbufferfull)); +} + void Performance::AddEventTimingBuffer(PerformanceEventTiming& entry) { event_timing_buffer_.push_back(&entry); @@ -597,14 +628,30 @@ DispatchEvent(*Event::Create(event_type_names::kEventtimingbufferfull)); } +unsigned Performance::ElementTimingBufferSize() const { + return element_timing_buffer_.size(); +} + unsigned Performance::EventTimingBufferSize() const { return event_timing_buffer_.size(); } +void Performance::clearElementTimings() { + element_timing_buffer_.clear(); +} + void Performance::clearEventTimings() { event_timing_buffer_.clear(); } +// TODO(crbug.com/72556): remove Element Timing buffering when shipping the +// 'buffered' flag. +void Performance::setElementTimingBufferMaxSize(unsigned size) { + element_timing_buffer_max_size_ = size; + if (IsElementTimingBufferFull()) + DispatchEvent(*Event::Create(event_type_names::kElementtimingbufferfull)); +} + // TODO(yoav): EventTiming should follow a simpler buffering model. void Performance::setEventTimingBufferMaxSize(unsigned size) { event_timing_buffer_max_size_ = size; @@ -966,6 +1013,7 @@ void Performance::Trace(blink::Visitor* visitor) { visitor->Trace(resource_timing_buffer_); visitor->Trace(resource_timing_secondary_buffer_); + visitor->Trace(element_timing_buffer_); visitor->Trace(event_timing_buffer_); visitor->Trace(navigation_timing_); visitor->Trace(user_timing_);
diff --git a/third_party/blink/renderer/core/timing/performance.h b/third_party/blink/renderer/core/timing/performance.h index c3b02082..ab0e171 100644 --- a/third_party/blink/renderer/core/timing/performance.h +++ b/third_party/blink/renderer/core/timing/performance.h
@@ -56,21 +56,22 @@ class DoubleOrPerformanceMarkOptions; class ExceptionState; class MemoryInfo; -class PerformanceNavigation; -class PerformanceObserver; +class PerformanceElementTiming; +class PerformanceEventTiming; class PerformanceMark; class PerformanceMeasure; +class PerformanceNavigation; +class PerformanceObserver; class PerformanceTiming; class ResourceResponse; class ResourceTimingInfo; -class SecurityOrigin; -class UserTiming; class ScriptState; class ScriptValue; -class SubTaskAttribution; -class V8ObjectBuilder; -class PerformanceEventTiming; +class SecurityOrigin; class StringOrDoubleOrPerformanceMeasureOptions; +class SubTaskAttribution; +class UserTiming; +class V8ObjectBuilder; using PerformanceEntryVector = HeapVector<Member<PerformanceEntry>>; using PerformanceEntryDeque = HeapDeque<Member<PerformanceEntry>>; @@ -157,6 +158,14 @@ void AddFirstContentfulPaintTiming(TimeTicks start_time); + bool IsElementTimingBufferFull() const; + void AddElementTimingBuffer(PerformanceElementTiming&); + unsigned ElementTimingBufferSize() const; + void clearElementTimings(); + void setElementTimingBufferMaxSize(unsigned); + DEFINE_ATTRIBUTE_EVENT_LISTENER(elementtimingbufferfull, + kElementtimingbufferfull); + bool IsEventTimingBufferFull() const; void AddEventTimingBuffer(PerformanceEventTiming&); unsigned EventTimingBufferSize() const; @@ -303,6 +312,8 @@ bool resource_timing_buffer_full_event_pending_ = false; PerformanceEntryVector event_timing_buffer_; unsigned event_timing_buffer_max_size_; + PerformanceEntryVector element_timing_buffer_; + unsigned element_timing_buffer_max_size_; Member<PerformanceEntry> navigation_timing_; Member<UserTiming> user_timing_; Member<PerformanceEntry> first_paint_timing_;
diff --git a/third_party/blink/renderer/core/timing/performance.idl b/third_party/blink/renderer/core/timing/performance.idl index 533673e..b949c831 100644 --- a/third_party/blink/renderer/core/timing/performance.idl +++ b/third_party/blink/renderer/core/timing/performance.idl
@@ -51,6 +51,13 @@ void setResourceTimingBufferSize(unsigned long maxSize); attribute EventHandler onresourcetimingbufferfull; + // Element Timing + // https://github.com/npm1/Element-Timing + [MeasureAs=ElementTimingExplicitlyRequested, RuntimeEnabled=ElementTiming] void clearElementTimings(); + [MeasureAs=ElementTimingExplicitlyRequested, RuntimeEnabled=ElementTiming] void setElementTimingBufferMaxSize(unsigned long maxSize); + [MeasureAs=ElementTimingExplicitlyRequested, RuntimeEnabled=ElementTiming] attribute EventHandler onelementtimingbufferfull; + + // Event Timing // https://github.com/wicg/event-timing [MeasureAs=PerformanceEventTimingBuffer, OriginTrialEnabled=EventTiming] void clearEventTimings();
diff --git a/third_party/blink/renderer/core/timing/window_performance.cc b/third_party/blink/renderer/core/timing/window_performance.cc index 5bc95a808..a7eb260d 100644 --- a/third_party/blink/renderer/core/timing/window_performance.cc +++ b/third_party/blink/renderer/core/timing/window_performance.cc
@@ -327,9 +327,9 @@ } } -// We buffer long-latency events until onload, i.e., LoadEventStart is not -// reached yet. -bool WindowPerformance::ShouldBufferEventTiming() { +// We buffer Element Timing and Event Timing (long-latency events) entries until +// onload, i.e., LoadEventStart is not reached yet. +bool WindowPerformance::ShouldBufferEntries() { return !timing() || !timing()->loadEventStart(); } @@ -395,7 +395,7 @@ NotifyObserversOfEntry(*entry); } - if (ShouldBufferEventTiming() && !IsEventTimingBufferFull()) + if (ShouldBufferEntries() && !IsEventTimingBufferFull()) AddEventTimingBuffer(*entry); } event_timings_.clear(); @@ -405,9 +405,15 @@ const IntRect& rect, TimeTicks timestamp) { DCHECK(RuntimeEnabledFeatures::ElementTimingEnabled()); - PerformanceEntry* entry = PerformanceElementTiming::Create( + PerformanceElementTiming* entry = PerformanceElementTiming::Create( name, rect, MonotonicTimeToDOMHighResTimeStamp(timestamp)); - NotifyObserversOfEntry(*entry); + if (HasObserverFor(PerformanceEntry::kElement)) { + UseCounter::Count(GetFrame(), + WebFeature::kElementTimingExplicitlyRequested); + NotifyObserversOfEntry(*entry); + } + if (ShouldBufferEntries() && !IsElementTimingBufferFull()) + AddElementTimingBuffer(*entry); } void WindowPerformance::DispatchFirstInputTiming(
diff --git a/third_party/blink/renderer/core/timing/window_performance.h b/third_party/blink/renderer/core/timing/window_performance.h index bf3157d..0d23bad 100644 --- a/third_party/blink/renderer/core/timing/window_performance.h +++ b/third_party/blink/renderer/core/timing/window_performance.h
@@ -69,7 +69,7 @@ void UpdateLongTaskInstrumentation() override; - bool ShouldBufferEventTiming(); + bool ShouldBufferEntries(); bool FirstInputDetected() const { return !!first_input_timing_; }
diff --git a/third_party/blink/renderer/modules/gamepad/gamepad_haptic_actuator.cc b/third_party/blink/renderer/modules/gamepad/gamepad_haptic_actuator.cc index a36078f..72a1c55 100644 --- a/third_party/blink/renderer/modules/gamepad/gamepad_haptic_actuator.cc +++ b/third_party/blink/renderer/modules/gamepad/gamepad_haptic_actuator.cc
@@ -128,12 +128,23 @@ return; } else if (result == GamepadHapticsResult::GamepadHapticsResultComplete) { should_reset_ = true; - GetExecutionContext() - ->GetTaskRunner(TaskType::kMiscPlatformAPI) - ->PostTask( - FROM_HERE, - WTF::Bind(&GamepadHapticActuator::ResetVibrationIfNotPreempted, - WrapPersistent(this))); + ExecutionContext* context = GetExecutionContext(); + if (context) { + // Post a delayed task to stop vibration. The task will be run after all + // callbacks have run for the effect Promise, and may be ignored by + // setting |should_reset_| to false. The intention is to only stop + // vibration if the user did not chain another vibration effect in the + // Promise callback. + context->GetTaskRunner(TaskType::kMiscPlatformAPI) + ->PostTask( + FROM_HERE, + WTF::Bind(&GamepadHapticActuator::ResetVibrationIfNotPreempted, + WrapPersistent(this))); + } else { + // The execution context is gone, meaning no new effects can be issued by + // the page. Stop vibration without waiting for Promise callbacks. + ResetVibrationIfNotPreempted(); + } } resolver->Resolve(ResultToString(result)); }
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc index 41e2527..53df4ad1 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc
@@ -6,7 +6,7 @@ #include "third_party/blink/public/platform/web_media_stream.h" #include "third_party/blink/public/platform/web_media_stream_track.h" -#include "third_party/blink/public/platform/web_rtc_rtp_contributing_source.h" +#include "third_party/blink/public/platform/web_rtc_rtp_source.h" #include "third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.h" #include "third_party/blink/renderer/modules/peerconnection/rtc_rtp_capabilities.h" #include "third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.h" @@ -51,9 +51,7 @@ UpdateSourcesIfNeeded(); HeapVector<Member<RTCRtpSynchronizationSource>> synchronization_sources; for (const auto& web_source : web_sources_) { - // TODO(https://crbug.com/893172): Rename WebRTCRtpContributingSource to - // reflect that it is used for both SSRCs and CSRCs, e.g. "WebRTCRtpSource". - if (web_source->SourceType() != WebRTCRtpContributingSourceType::SSRC) + if (web_source->SourceType() != WebRTCRtpSource::Type::kSSRC) continue; RTCRtpSynchronizationSource* synchronization_source = MakeGarbageCollected<RTCRtpSynchronizationSource>(); @@ -69,7 +67,7 @@ UpdateSourcesIfNeeded(); HeapVector<Member<RTCRtpContributingSource>> contributing_sources; for (const auto& web_source : web_sources_) { - if (web_source->SourceType() != WebRTCRtpContributingSourceType::CSRC) + if (web_source->SourceType() != WebRTCRtpSource::Type::kCSRC) continue; RTCRtpContributingSource* contributing_source = MakeGarbageCollected<RTCRtpContributingSource>();
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.h b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.h index 8dc7b22..60a17bfc 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.h +++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.h
@@ -8,8 +8,8 @@ #include <map> #include "third_party/blink/public/platform/platform.h" -#include "third_party/blink/public/platform/web_rtc_rtp_contributing_source.h" #include "third_party/blink/public/platform/web_rtc_rtp_receiver.h" +#include "third_party/blink/public/platform/web_rtc_rtp_source.h" #include "third_party/blink/public/platform/web_vector.h" #include "third_party/blink/renderer/modules/mediastream/media_stream.h" #include "third_party/blink/renderer/modules/mediastream/media_stream_track.h" @@ -66,7 +66,7 @@ // The current SSRCs and CSRCs. getSynchronizationSources() returns the SSRCs // and getContributingSources() returns the CSRCs. - WebVector<std::unique_ptr<WebRTCRtpContributingSource>> web_sources_; + WebVector<std::unique_ptr<WebRTCRtpSource>> web_sources_; bool web_sources_needs_updating_ = true; Member<RTCRtpTransceiver> transceiver_; };
diff --git a/third_party/blink/renderer/modules/webmidi/midi_dispatcher.h b/third_party/blink/renderer/modules/webmidi/midi_dispatcher.h index f40a3cc4..30be342 100644 --- a/third_party/blink/renderer/modules/webmidi/midi_dispatcher.h +++ b/third_party/blink/renderer/modules/webmidi/midi_dispatcher.h
@@ -18,6 +18,7 @@ public midi::mojom::blink::MidiSessionClient { public: static MIDIDispatcher& Instance(); + MIDIDispatcher(); ~MIDIDispatcher() override; void Trace(Visitor* visitor); @@ -44,10 +45,6 @@ base::TimeTicks timestamp) override; private: - friend class ConstructTrait<MIDIDispatcher>; - - MIDIDispatcher(); - midi::mojom::blink::MidiSessionProvider& GetMidiSessionProvider(); midi::mojom::blink::MidiSession& GetMidiSession();
diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn index 7964e0ea..0e2af5b 100644 --- a/third_party/blink/renderer/platform/BUILD.gn +++ b/third_party/blink/renderer/platform/BUILD.gn
@@ -554,9 +554,9 @@ "exported/web_rtc_answer_options.cc", "exported/web_rtc_offer_options.cc", "exported/web_rtc_peer_connection_handler_client.cc", - "exported/web_rtc_rtp_contributing_source.cc", "exported/web_rtc_rtp_receiver.cc", "exported/web_rtc_rtp_sender.cc", + "exported/web_rtc_rtp_source.cc", "exported/web_rtc_rtp_transceiver.cc", "exported/web_rtc_session_description.cc", "exported/web_rtc_session_description_request.cc",
diff --git a/third_party/blink/renderer/platform/exported/web_rtc_rtp_contributing_source.cc b/third_party/blink/renderer/platform/exported/web_rtc_rtp_contributing_source.cc deleted file mode 100644 index 0453e96..0000000 --- a/third_party/blink/renderer/platform/exported/web_rtc_rtp_contributing_source.cc +++ /dev/null
@@ -1,11 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "third_party/blink/public/platform/web_rtc_rtp_contributing_source.h" - -namespace blink { - -WebRTCRtpContributingSource::~WebRTCRtpContributingSource() = default; - -} // namespace blink
diff --git a/third_party/blink/renderer/platform/exported/web_rtc_rtp_source.cc b/third_party/blink/renderer/platform/exported/web_rtc_rtp_source.cc new file mode 100644 index 0000000..621bbf7 --- /dev/null +++ b/third_party/blink/renderer/platform/exported/web_rtc_rtp_source.cc
@@ -0,0 +1,11 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/public/platform/web_rtc_rtp_source.h" + +namespace blink { + +WebRTCRtpSource::~WebRTCRtpSource() = default; + +} // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/canvas_color_params.cc b/third_party/blink/renderer/platform/graphics/canvas_color_params.cc index e3079a8..cdcba06e 100644 --- a/third_party/blink/renderer/platform/graphics/canvas_color_params.cc +++ b/third_party/blink/renderer/platform/graphics/canvas_color_params.cc
@@ -140,24 +140,24 @@ sk_sp<SkColorSpace> CanvasColorParams::CanvasColorSpaceToSkColorSpace( CanvasColorSpace color_space) { - SkColorSpace::Gamut gamut = SkColorSpace::kSRGB_Gamut; - SkColorSpace::RenderTargetGamma gamma = SkColorSpace::kSRGB_RenderTargetGamma; + skcms_Matrix3x3 gamut = SkNamedGamut::kSRGB; + skcms_TransferFunction transferFn = SkNamedTransferFn::kSRGB; switch (color_space) { case kSRGBCanvasColorSpace: break; case kLinearRGBCanvasColorSpace: - gamma = SkColorSpace::kLinear_RenderTargetGamma; + transferFn = SkNamedTransferFn::kLinear; break; case kRec2020CanvasColorSpace: - gamut = SkColorSpace::kRec2020_Gamut; - gamma = SkColorSpace::kLinear_RenderTargetGamma; + gamut = SkNamedGamut::kRec2020; + transferFn = SkNamedTransferFn::kLinear; break; case kP3CanvasColorSpace: - gamut = SkColorSpace::kDCIP3_D65_Gamut; - gamma = SkColorSpace::kLinear_RenderTargetGamma; + gamut = SkNamedGamut::kDCIP3; + transferFn = SkNamedTransferFn::kLinear; break; } - return SkColorSpace::MakeRGB(gamma, gamut); + return SkColorSpace::MakeRGB(transferFn, gamut); } gfx::BufferFormat CanvasColorParams::GetBufferFormat() const { @@ -240,14 +240,14 @@ color_space_ = kLinearRGBCanvasColorSpace; } else if (SkColorSpace::Equals( color_space.get(), - SkColorSpace::MakeRGB(SkColorSpace::kLinear_RenderTargetGamma, - SkColorSpace::kRec2020_Gamut) + SkColorSpace::MakeRGB(SkNamedTransferFn::kLinear, + SkNamedGamut::kRec2020) .get())) { color_space_ = kRec2020CanvasColorSpace; } else if (SkColorSpace::Equals( color_space.get(), - SkColorSpace::MakeRGB(SkColorSpace::kLinear_RenderTargetGamma, - SkColorSpace::kDCIP3_D65_Gamut) + SkColorSpace::MakeRGB(SkNamedTransferFn::kLinear, + SkNamedGamut::kDCIP3) .get())) { color_space_ = kP3CanvasColorSpace; }
diff --git a/third_party/blink/renderer/platform/graphics/color_correction_test_utils.cc b/third_party/blink/renderer/platform/graphics/color_correction_test_utils.cc index 25fdcaa..bc85dc9d 100644 --- a/third_party/blink/renderer/platform/graphics/color_correction_test_utils.cc +++ b/third_party/blink/renderer/platform/graphics/color_correction_test_utils.cc
@@ -77,12 +77,12 @@ if (conversion == kColorSpaceConversion_LinearRGB) return SkColorSpace::MakeSRGBLinear(); if (conversion == kColorSpaceConversion_P3) { - return SkColorSpace::MakeRGB(SkColorSpace::kLinear_RenderTargetGamma, - SkColorSpace::kDCIP3_D65_Gamut); + return SkColorSpace::MakeRGB(SkNamedTransferFn::kLinear, + SkNamedGamut::kDCIP3); } if (conversion == kColorSpaceConversion_Rec2020) { - return SkColorSpace::MakeRGB(SkColorSpace::kLinear_RenderTargetGamma, - SkColorSpace::kRec2020_Gamut); + return SkColorSpace::MakeRGB(SkNamedTransferFn::kLinear, + SkNamedGamut::kRec2020); } return nullptr; }
diff --git a/third_party/blink/renderer/platform/graphics/skia/skia_utils_test.cc b/third_party/blink/renderer/platform/graphics/skia/skia_utils_test.cc index 7de98907..0cc9adc 100644 --- a/third_party/blink/renderer/platform/graphics/skia/skia_utils_test.cc +++ b/third_party/blink/renderer/platform/graphics/skia/skia_utils_test.cc
@@ -14,21 +14,23 @@ TEST_F(SkiaUtilsTest, SkColorSpaceToGfxColorSpace) { std::vector<sk_sp<SkColorSpace>> skia_color_spaces; - SkColorSpace::RenderTargetGamma gammas[] = { - SkColorSpace::kLinear_RenderTargetGamma, - SkColorSpace::kSRGB_RenderTargetGamma}; + skcms_TransferFunction transferFns[] = { + SkNamedTransferFn::kLinear, + SkNamedTransferFn::kSRGB, + }; - SkColorSpace::Gamut gamuts[] = { - SkColorSpace::kSRGB_Gamut, SkColorSpace::kAdobeRGB_Gamut, - SkColorSpace::kDCIP3_D65_Gamut, SkColorSpace::kRec2020_Gamut, + skcms_Matrix3x3 gamuts[] = { + SkNamedGamut::kSRGB, + SkNamedGamut::kAdobeRGB, + SkNamedGamut::kDCIP3, + SkNamedGamut::kRec2020, }; skia_color_spaces.push_back((SkColorSpace::MakeSRGB())->makeColorSpin()); - for (unsigned gamma_itr = 0; gamma_itr < 2; gamma_itr++) { - for (unsigned gamut_itr = 0; gamut_itr < 4; gamut_itr++) { - skia_color_spaces.push_back( - SkColorSpace::MakeRGB(gammas[gamma_itr], gamuts[gamut_itr])); + for (skcms_TransferFunction transferFn : transferFns) { + for (skcms_Matrix3x3 gamut : gamuts) { + skia_color_spaces.push_back(SkColorSpace::MakeRGB(transferFn, gamut)); } }
diff --git a/third_party/blink/renderer/platform/heap/garbage_collected.h b/third_party/blink/renderer/platform/heap/garbage_collected.h index 7326e43..6bb10aa 100644 --- a/third_party/blink/renderer/platform/heap/garbage_collected.h +++ b/third_party/blink/renderer/platform/heap/garbage_collected.h
@@ -47,12 +47,17 @@ static const bool value = sizeof(CheckMarker<T>(nullptr)) == sizeof(YesType); }; +// TraceDescriptor is used to describe how to trace an object. struct TraceDescriptor { STACK_ALLOCATED(); public: + // The adjusted base pointer of the object that should be traced. void* base_object_payload; + // A callback for tracing the object. TraceCallback callback; + // Indicator whether this object can be traced recursively or whether it + // requires iterative tracing. bool can_trace_eagerly; }; @@ -72,11 +77,14 @@ // USING_GARBAGE_COLLECTED_MIXIN(A); // }; // -// With the helper, as long as we are using Member<B>, TypeTrait<B> will -// dispatch dynamically to retrieve the necessary tracing and header methods. -// Note that this is only enabled for Member<B>. For Member<A> which we can -// compute the necessary methods and pointers statically and this dynamic -// dispatch is not used. +// The classes involved and the helper macros allow for properly handling +// definitions for Member<B> and friends. The mechanisms for handling Member<B> +// involve dynamic dispatch. Note that for Member<A> all methods and pointers +// are statically computed and no dynamic dispatch is involved. +// +// Note that garbage collections are allowed during mixin construction as +// conservative scanning of objects does not rely on the Trace method but rather +// scans the object field by field. class PLATFORM_EXPORT GarbageCollectedMixin { public: typedef int IsGarbageCollectedMixinMarker; @@ -86,7 +94,8 @@ // these objects can processed later on. This is necessary as // not-fully-constructed mixin objects potentially require being processed // as part emitting a write barrier for incremental marking. See - // IncrementalMarkingTest::WriteBarrierDuringMixinConstruction as an example. + // |IncrementalMarkingTest::WriteBarrierDuringMixinConstruction| as an + // example. // // The not-fully-constructed objects are handled as follows: // 1. Write barrier or marking of not fully constructed mixin gets called. @@ -127,95 +136,34 @@ \ private: -// A C++ object's vptr will be initialized to its leftmost base's vtable after -// the constructors of all its subclasses have run, so if a subclass constructor -// tries to access any of the vtbl entries of its leftmost base prematurely, -// it'll find an as-yet incorrect vptr and fail. Which is exactly what a -// garbage collector will try to do if it tries to access the leftmost base -// while one of the subclass constructors of a GC mixin object triggers a GC. -// It is consequently not safe to allow any GCs while these objects are under -// (sub constructor) construction. -// -// To prevent GCs in that restricted window of a mixin object's construction: -// -// - The initial allocation of the mixin object will enter a no GC scope. -// This is done by overriding 'operator new' for mixin instances. -// - When the constructor for the mixin is invoked, after all the -// derived constructors have run, it will invoke the constructor -// for a field whose only purpose is to leave the GC scope. -// GarbageCollectedMixinConstructorMarker's constructor takes care of -// this and the field is declared by way of USING_GARBAGE_COLLECTED_MIXIN(). - -#define DEFINE_GARBAGE_COLLECTED_MIXIN_CONSTRUCTOR_MARKER(TYPE) \ - public: \ - GarbageCollectedMixinConstructorMarker<ThreadingTrait<TYPE>::kAffinity> \ - mixin_constructor_marker_; \ - \ +// The Oilpan GC plugin checks for proper usages of the +// USING_GARBAGE_COLLECTED_MIXIN macro using a typedef marker. +#define DEFINE_GARBAGE_COLLECTED_MIXIN_CONSTRUCTOR_MARKER(TYPE) \ + public: \ + typedef int HasUsingGarbageCollectedMixinMacro; \ + \ private: -// Mixins that wrap/nest others requires extra handling: -// -// class A : public GarbageCollected<A>, public GarbageCollectedMixin { -// USING_GARBAGE_COLLECTED_MIXIN(A); -// ... -// }' -// public B final : public A, public SomeOtherMixinInterface { -// USING_GARBAGE_COLLECTED_MIXIN(B); -// ... -// }; -// -// The "operator new" for B will enter the forbidden GC scope, but -// upon construction, two GarbageCollectedMixinConstructorMarker constructors -// will run -- one for A (first) and another for B (secondly). Only -// the second one should leave the forbidden GC scope. This is realized by -// recording the address of B's GarbageCollectedMixinConstructorMarker -// when the "operator new" for B runs, and leaving the forbidden GC scope -// when the constructor of the recorded GarbageCollectedMixinConstructorMarker -// runs. +// The USING_GARBAGE_COLLECTED_MIXIN macro defines all methods and markers +// needed for handling mixins. #define USING_GARBAGE_COLLECTED_MIXIN(TYPE) \ IS_GARBAGE_COLLECTED_TYPE(); \ DEFINE_GARBAGE_COLLECTED_MIXIN_METHODS(TYPE) \ DEFINE_GARBAGE_COLLECTED_MIXIN_CONSTRUCTOR_MARKER(TYPE) -// An empty class with a constructor that's arranged invoked when all derived -// constructors of a mixin instance have completed and it is safe to allow GCs -// again. See AllocateObjectTrait<> comment for more. -// -// USING_GARBAGE_COLLECTED_MIXIN() declares a -// GarbageCollectedMixinConstructorMarker<> private field. By following Blink -// convention of using the macro at the top of a class declaration, its -// constructor will run first. -class GarbageCollectedMixinConstructorMarkerBase {}; -template <ThreadAffinity affinity> -class GarbageCollectedMixinConstructorMarker - : public GarbageCollectedMixinConstructorMarkerBase { - public: - GarbageCollectedMixinConstructorMarker() { - // FIXME: if prompt conservative GCs are needed, forced GCs that - // were denied while within this scope, could now be performed. - // For now, assume the next out-of-line allocation request will - // happen soon enough and take care of it. Mixin objects aren't - // overly common. - ThreadState* state = ThreadStateFor<affinity>::GetState(); - state->LeaveGCForbiddenScopeIfNeeded(this); - } -}; - // Merge two or more Mixins into one: // // class A : public GarbageCollectedMixin {}; // class B : public GarbageCollectedMixin {}; // class C : public A, public B { // // C::GetTraceDescriptor is now ambiguous because there are two -// candidates: -// // A::GetTraceDescriptor and B::GetTraceDescriptor. Ditto for other -// functions. +// // candidates: A::GetTraceDescriptor and B::GetTraceDescriptor. Ditto for +// // other functions. // // MERGE_GARBAGE_COLLECTED_MIXINS(); // // The macro defines C::GetTraceDescriptor, etc. so that they are no -// longer -// // ambiguous. USING_GARBAGE_COLLECTED_MIXIN(TYPE) overrides them later -// // and provides the implementations. +// // longer ambiguous. USING_GARBAGE_COLLECTED_MIXIN(TYPE) overrides them +// // later and provides the implementations. // }; #define MERGE_GARBAGE_COLLECTED_MIXINS() \ public: \
diff --git a/third_party/blink/renderer/platform/heap/heap.cc b/third_party/blink/renderer/platform/heap/heap.cc index 5dddc0e..cf507ab 100644 --- a/third_party/blink/renderer/platform/heap/heap.cc +++ b/third_party/blink/renderer/platform/heap/heap.cc
@@ -165,10 +165,31 @@ void ThreadHeap::DecommitCallbackStacks() { marking_worklist_.reset(nullptr); - not_fully_constructed_worklist_.reset(nullptr); previously_not_fully_constructed_worklist_.reset(nullptr); weak_callback_worklist_.reset(nullptr); ephemeron_callbacks_.clear(); + + // The fixed point iteration may have found not-fully-constructed objects. + // Such objects should have already been found through the stack scan though + // and should thus already be marked. + if (!not_fully_constructed_worklist_->IsGlobalEmpty()) { +#if DCHECK_IS_ON() + NotFullyConstructedItem item; + while (not_fully_constructed_worklist_->Pop(WorklistTaskId::MainThread, + &item)) { + BasePage* const page = PageFromObject(item); + HeapObjectHeader* const header = + page->IsLargeObjectPage() + ? static_cast<LargeObjectPage*>(page)->ObjectHeader() + : static_cast<NormalPage*>(page)->FindHeaderFromAddress( + reinterpret_cast<Address>(const_cast<void*>(item))); + DCHECK(header->IsMarked()); + } +#else + not_fully_constructed_worklist_->Clear(); +#endif + } + not_fully_constructed_worklist_.reset(nullptr); } HeapCompact* ThreadHeap::Compaction() { @@ -260,8 +281,6 @@ } // namespace bool ThreadHeap::AdvanceMarking(MarkingVisitor* visitor, TimeTicks deadline) { - // const size_t kDeadlineCheckInterval = 2500; - // size_t processed_callback_count = 0; bool finished; // Ephemeron fixed point loop. do { @@ -271,11 +290,13 @@ ThreadHeapStatsCollector::Scope stats_scope( stats_collector(), ThreadHeapStatsCollector::kMarkProcessWorklist); - finished = - DrainWorklistWithDeadline(deadline, marking_worklist_.get(), - [visitor](const MarkingItem& item) { - item.callback(visitor, item.object); - }); + finished = DrainWorklistWithDeadline( + deadline, marking_worklist_.get(), + [visitor](const MarkingItem& item) { + DCHECK(!HeapObjectHeader::FromPayload(item.object) + ->IsInConstruction()); + item.callback(visitor, item.object); + }); if (!finished) return false; @@ -600,6 +621,12 @@ if (header->IsMarked()) return; + if (header->IsInConstruction()) { + not_fully_constructed_worklist_->Push(WorklistTaskId::MainThread, + header->Payload()); + return; + } + // Mark and push trace callback. header->Mark(); marking_worklist_->Push(
diff --git a/third_party/blink/renderer/platform/heap/heap.h b/third_party/blink/renderer/platform/heap/heap.h index 6919e657..0f81c2b 100644 --- a/third_party/blink/renderer/platform/heap/heap.h +++ b/third_party/blink/renderer/platform/heap/heap.h
@@ -121,6 +121,8 @@ template <typename T> class UntracedMember; +namespace internal { + template <typename T, bool = NeedsAdjustPointer<T>::value> class ObjectAliveTrait; @@ -143,10 +145,17 @@ NO_SANITIZE_ADDRESS static bool IsHeapObjectAlive(const T* object) { static_assert(sizeof(T), "T must be fully defined"); - return object->GetHeapObjectHeader()->IsMarked(); + const HeapObjectHeader* header = object->GetHeapObjectHeader(); + if (header == BlinkGC::kNotFullyConstructedObject) { + // Objects under construction are always alive. + return true; + } + return header->IsMarked(); } }; +} // namespace internal + class PLATFORM_EXPORT ThreadHeap { public: explicit ThreadHeap(ThreadState*); @@ -173,7 +182,7 @@ return true; DCHECK(&ThreadState::Current()->Heap() == &PageFromObject(object)->Arena()->GetThreadState()->Heap()); - return ObjectAliveTrait<T>::IsHeapObjectAlive(object); + return internal::ObjectAliveTrait<T>::IsHeapObjectAlive(object); } template <typename T> static inline bool IsHeapObjectAlive(const Member<T>& member) { @@ -546,53 +555,18 @@ DISALLOW_COPY_AND_ASSIGN(GarbageCollected); }; -template <typename T, bool is_mixin = IsGarbageCollectedMixin<T>::value> -class ConstructTrait { - public: -}; - -template <typename T> -class ConstructTrait<T, false> { - public: - template <typename... Args> - static T* Construct(Args&&... args) { - void* memory = - T::AllocateObject(sizeof(T), IsEagerlyFinalizedType<T>::value); - HeapObjectHeader* header = HeapObjectHeader::FromPayload(memory); - header->MarkIsInConstruction(); - // Placement new as regular operator new() is deleted. - T* object = ::new (memory) T(std::forward<Args>(args)...); - header->UnmarkIsInConstruction(); - return object; - } -}; - -template <typename T> -class ConstructTrait<T, true> { - public: - template <typename... Args> - NO_SANITIZE_UNRELATED_CAST static T* Construct(Args&&... args) { - void* memory = - T::AllocateObject(sizeof(T), IsEagerlyFinalizedType<T>::value); - HeapObjectHeader* header = HeapObjectHeader::FromPayload(memory); - header->MarkIsInConstruction(); - ThreadState* state = - ThreadStateFor<ThreadingTrait<T>::kAffinity>::GetState(); - state->EnterGCForbiddenScopeIfNeeded( - &(reinterpret_cast<T*>(memory)->mixin_constructor_marker_)); - // Placement new as regular operator new() is deleted. - T* object = ::new (memory) T(std::forward<Args>(args)...); - header->UnmarkIsInConstruction(); - return object; - } -}; - // Constructs an instance of T, which is a garbage collected type. template <typename T, typename... Args> T* MakeGarbageCollected(Args&&... args) { static_assert(WTF::IsGarbageCollectedType<T>::value, "T needs to be a garbage collected object"); - return ConstructTrait<T>::Construct(std::forward<Args>(args)...); + void* memory = T::AllocateObject(sizeof(T), IsEagerlyFinalizedType<T>::value); + HeapObjectHeader* header = HeapObjectHeader::FromPayload(memory); + header->MarkIsInConstruction(); + // Placement new as regular operator new() is deleted. + T* object = ::new (memory) T(std::forward<Args>(args)...); + header->UnmarkIsInConstruction(); + return object; } // Assigning class types to their arenas. @@ -753,7 +727,7 @@ // preserved to avoid reviving objects in containers. return; } - if (!ObjectAliveTrait<T>::IsHeapObjectAlive(contents)) + if (!ThreadHeap::IsHeapObjectAlive(contents)) *cell = nullptr; } }
diff --git a/third_party/blink/renderer/platform/heap/heap_test.cc b/third_party/blink/renderer/platform/heap/heap_test.cc index 4b1c81e..c042269 100644 --- a/third_party/blink/renderer/platform/heap/heap_test.cc +++ b/third_party/blink/renderer/platform/heap/heap_test.cc
@@ -5367,59 +5367,6 @@ return true; } -static bool CheckGCForbidden() { - DCHECK(ThreadState::Current()->IsGCForbidden()); - return true; -} - -class MixinClass : public GarbageCollectedMixin { - public: - MixinClass() : dummy_(CheckGCForbidden()) {} - - private: - bool dummy_; -}; - -class ClassWithGarbageCollectingMixinConstructor - : public GarbageCollected<ClassWithGarbageCollectingMixinConstructor>, - public MixinClass { - USING_GARBAGE_COLLECTED_MIXIN(ClassWithGarbageCollectingMixinConstructor); - - public: - static int trace_called_; - - ClassWithGarbageCollectingMixinConstructor() - : trace_counter_(TraceCounter::Create()), - wrapper_(IntWrapper::Create(32)) {} - - void Trace(blink::Visitor* visitor) override { - trace_called_++; - visitor->Trace(trace_counter_); - visitor->Trace(wrapper_); - } - - void Verify() { - EXPECT_EQ(32, wrapper_->Value()); - EXPECT_EQ(0, trace_counter_->TraceCount()); - EXPECT_EQ(0, trace_called_); - } - - private: - Member<TraceCounter> trace_counter_; - Member<IntWrapper> wrapper_; -}; - -int ClassWithGarbageCollectingMixinConstructor::trace_called_ = 0; - -// Regression test for out of bounds call through vtable. -// Passes if it doesn't crash. -TEST(HeapTest, GarbageCollectionDuringMixinConstruction) { - ClassWithGarbageCollectingMixinConstructor::trace_called_ = 0; - ClassWithGarbageCollectingMixinConstructor* a = - MakeGarbageCollected<ClassWithGarbageCollectingMixinConstructor>(); - a->Verify(); -} - template <typename T> class TraceIfNeededTester : public GarbageCollectedFinalized<TraceIfNeededTester<T>> { @@ -5928,11 +5875,7 @@ USING_GARBAGE_COLLECTED_MIXIN(TestMixinAllocationA); public: - TestMixinAllocationA() { - // Completely wrong in general, but test only - // runs this constructor while constructing another mixin. - DCHECK(ThreadState::Current()->IsGCForbidden()); - } + TestMixinAllocationA() = default; void Trace(blink::Visitor* visitor) override {} }; @@ -5942,14 +5885,8 @@ public: TestMixinAllocationB() - : a_(MakeGarbageCollected<TestMixinAllocationA>()) // Construct object - // during a mixin - // construction. - { - // Completely wrong in general, but test only - // runs this constructor while constructing another mixin. - DCHECK(ThreadState::Current()->IsGCForbidden()); - } + // Construct object during a mixin construction. + : a_(MakeGarbageCollected<TestMixinAllocationA>()) {} void Trace(blink::Visitor* visitor) override { visitor->Trace(a_); @@ -5994,47 +5931,6 @@ } }; -class TestMixinAllocatingObject final - : public TestMixinAllocationB, - public ObjectWithLargeAmountsOfAllocationInConstructor { - USING_GARBAGE_COLLECTED_MIXIN(TestMixinAllocatingObject); - - public: - static TestMixinAllocatingObject* Create(ClassWithMember* member) { - return MakeGarbageCollected<TestMixinAllocatingObject>(member); - } - - TestMixinAllocatingObject(ClassWithMember* member) - : ObjectWithLargeAmountsOfAllocationInConstructor(600, member), - trace_counter_(TraceCounter::Create()) { - DCHECK(!ThreadState::Current()->IsGCForbidden()); - ConservativelyCollectGarbage(); - EXPECT_GT(member->TraceCount(), 0); - EXPECT_GT(TraceCount(), 0); - } - - void Trace(blink::Visitor* visitor) override { - visitor->Trace(trace_counter_); - TestMixinAllocationB::Trace(visitor); - } - - int TraceCount() const { return trace_counter_->TraceCount(); } - - private: - Member<TraceCounter> trace_counter_; -}; - -TEST(HeapTest, MixinConstructionNoGC) { - ClearOutOldGarbage(); - Persistent<ClassWithMember> object = ClassWithMember::Create(); - EXPECT_EQ(0, object->TraceCount()); - TestMixinAllocatingObject* mixin = - TestMixinAllocatingObject::Create(object.Get()); - EXPECT_TRUE(mixin); - EXPECT_GT(object->TraceCount(), 0); - EXPECT_GT(mixin->TraceCount(), 0); -} - class WeakPersistentHolder final { public: explicit WeakPersistentHolder(IntWrapper* object) : object_(object) {} @@ -6420,85 +6316,25 @@ vector.ShrinkToFit(); } -namespace { - -class MixinCheckingConstructionScope : public GarbageCollectedMixin { - public: - MixinCheckingConstructionScope() { - // Oilpan treats mixin construction as forbidden scopes for garbage - // collection. - CHECK(ThreadState::Current()->IsMixinInConstruction()); - } -}; - -class UsingMixinCheckingConstructionScope - : public GarbageCollected<UsingMixinCheckingConstructionScope>, - public MixinCheckingConstructionScope { - USING_GARBAGE_COLLECTED_MIXIN(UsingMixinCheckingConstructionScope); -}; - -} // namespace - -TEST(HeapTest, NoConservativeGCDuringMixinConstruction) { - // Regression test: https://crbug.com/904546 - MakeGarbageCollected<UsingMixinCheckingConstructionScope>(); -} - -namespace { - -class ObjectCheckingForInConstruction - : public GarbageCollected<ObjectCheckingForInConstruction> { - public: - ObjectCheckingForInConstruction() { - CHECK(HeapObjectHeader::FromPayload(this)->IsInConstruction()); - } - - virtual void Trace(Visitor* v) { v->Trace(foo_); } - - private: - Member<IntWrapper> foo_; -}; - -class MixinCheckingInConstruction : public GarbageCollectedMixin { - public: - MixinCheckingInConstruction() { - BasePage* const page = PageFromObject(reinterpret_cast<Address>(this)); - HeapObjectHeader* const header = - static_cast<NormalPage*>(page)->FindHeaderFromAddress( - reinterpret_cast<Address>( - const_cast<MixinCheckingInConstruction*>(this))); - CHECK(header->IsInConstruction()); - } - - void Trace(Visitor* v) override { v->Trace(bar_); } - - private: - Member<IntWrapper> bar_; -}; - -class MixinAppCheckingInConstruction - : public GarbageCollected<MixinAppCheckingInConstruction>, - public MixinCheckingInConstruction { - USING_GARBAGE_COLLECTED_MIXIN(MixinAppCheckingInConstruction) - public: - MixinAppCheckingInConstruction() { - CHECK(HeapObjectHeader::FromPayload(this)->IsInConstruction()); - } - - void Trace(Visitor* v) override { v->Trace(foo_); } - - private: - Member<IntWrapper> foo_; -}; - -} // namespace - TEST(HeapTest, GarbageCollectedInConstruction) { - MakeGarbageCollected<ObjectCheckingForInConstruction>(); + using O = ObjectWithCallbackBeforeInitializer<IntWrapper>; + MakeGarbageCollected<O>(base::BindOnce([](O* thiz) { + CHECK(HeapObjectHeader::FromPayload(thiz)->IsInConstruction()); + })); } TEST(HeapTest, GarbageCollectedMixinInConstruction) { - MakeGarbageCollected<MixinAppCheckingInConstruction>(); + using O = ObjectWithMixinWithCallbackBeforeInitializer<IntWrapper>; + MakeGarbageCollected<O>(base::BindOnce([](O::Mixin* thiz) { + CHECK(HeapObjectHeader::FromPayload(static_cast<O*>(thiz)) + ->IsInConstruction()); + })); +} + +TEST(HeapTest, GarbageCollectedMixinIsAliveDuringConstruction) { + using O = ObjectWithMixinWithCallbackBeforeInitializer<IntWrapper>; + MakeGarbageCollected<O>(base::BindOnce( + [](O::Mixin* thiz) { CHECK(ThreadHeap::IsHeapObjectAlive(thiz)); })); } } // namespace blink
diff --git a/third_party/blink/renderer/platform/heap/heap_test_utilities.h b/third_party/blink/renderer/platform/heap/heap_test_utilities.h index 97778731..0e05f426 100644 --- a/third_party/blink/renderer/platform/heap/heap_test_utilities.h +++ b/third_party/blink/renderer/platform/heap/heap_test_utilities.h
@@ -7,7 +7,12 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_HEAP_TEST_UTILITIES_H_ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_HEAP_TEST_UTILITIES_H_ +#include "base/callback.h" #include "third_party/blink/renderer/platform/heap/blink_gc.h" +#include "third_party/blink/renderer/platform/heap/garbage_collected.h" +#include "third_party/blink/renderer/platform/heap/heap.h" +#include "third_party/blink/renderer/platform/heap/trace_traits.h" +#include "third_party/blink/renderer/platform/heap/visitor.h" namespace blink { @@ -16,6 +21,89 @@ BlinkGC::SweepingType sweeping_type = BlinkGC::kEagerSweeping); void ClearOutOldGarbage(); +template <typename T> +class ObjectWithCallbackBeforeInitializer : public GarbageCollected<T> { + public: + ObjectWithCallbackBeforeInitializer( + base::OnceCallback<void(ObjectWithCallbackBeforeInitializer<T>*)>&& cb, + T* value) + : bool_(ExecuteCallbackReturnTrue(this, std::move(cb))), value_(value) {} + + ObjectWithCallbackBeforeInitializer( + base::OnceCallback<void(ObjectWithCallbackBeforeInitializer<T>*)>&& cb) + : bool_(ExecuteCallbackReturnTrue(this, std::move(cb))) {} + + virtual void Trace(Visitor* visitor) { visitor->Trace(value_); } + + T* value() const { return value_.Get(); } + + private: + static bool ExecuteCallbackReturnTrue( + ObjectWithCallbackBeforeInitializer* thiz, + base::OnceCallback<void(ObjectWithCallbackBeforeInitializer<T>*)>&& cb) { + std::move(cb).Run(thiz); + return true; + } + + bool bool_; + Member<T> value_; +}; + +template <typename T> +class MixinWithCallbackBeforeInitializer : public GarbageCollectedMixin { + public: + MixinWithCallbackBeforeInitializer( + base::OnceCallback<void(MixinWithCallbackBeforeInitializer<T>*)>&& cb, + T* value) + : bool_(ExecuteCallbackReturnTrue(this, std::move(cb))), value_(value) {} + + MixinWithCallbackBeforeInitializer( + base::OnceCallback<void(MixinWithCallbackBeforeInitializer<T>*)>&& cb) + : bool_(ExecuteCallbackReturnTrue(this, std::move(cb))) {} + + void Trace(Visitor* visitor) override { visitor->Trace(value_); } + + T* value() const { return value_.Get(); } + + private: + static bool ExecuteCallbackReturnTrue( + MixinWithCallbackBeforeInitializer* thiz, + base::OnceCallback<void(MixinWithCallbackBeforeInitializer<T>*)>&& cb) { + std::move(cb).Run(thiz); + return true; + } + + bool bool_; + Member<T> value_; +}; + +class BoolMixin { + protected: + bool bool_ = false; +}; + +template <typename T> +class ObjectWithMixinWithCallbackBeforeInitializer + : public GarbageCollected<ObjectWithMixinWithCallbackBeforeInitializer<T>>, + public BoolMixin, + public MixinWithCallbackBeforeInitializer<T> { + USING_GARBAGE_COLLECTED_MIXIN(ObjectWithMixinWithCallbackBeforeInitializer); + + public: + using Mixin = MixinWithCallbackBeforeInitializer<T>; + + ObjectWithMixinWithCallbackBeforeInitializer( + base::OnceCallback<void(Mixin*)>&& cb, + T* value) + : Mixin(std::move(cb), value) {} + + ObjectWithMixinWithCallbackBeforeInitializer( + base::OnceCallback<void(Mixin*)>&& cb) + : Mixin(std::move(cb)) {} + + void Trace(Visitor* visitor) override { Mixin::Trace(visitor); } +}; + } // namespace blink #endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_HEAP_HEAP_TEST_UTILITIES_H_
diff --git a/third_party/blink/renderer/platform/heap/incremental_marking_test.cc b/third_party/blink/renderer/platform/heap/incremental_marking_test.cc index 69587d14..b359297 100644 --- a/third_party/blink/renderer/platform/heap/incremental_marking_test.cc +++ b/third_party/blink/renderer/platform/heap/incremental_marking_test.cc
@@ -1563,28 +1563,30 @@ thread_state_->IncrementalMarkingStart(BlinkGC::GCReason::kTesting); } - bool SingleStep() { + bool SingleStep(BlinkGC::StackState stack_state = + BlinkGC::StackState::kNoHeapPointersOnStack) { CHECK(thread_state_->IsIncrementalMarking()); if (thread_state_->GetGCState() == ThreadState::kIncrementalMarkingStepScheduled) { - thread_state_->RunScheduledGC(BlinkGC::kNoHeapPointersOnStack); + thread_state_->IncrementalMarkingStep(stack_state); return true; } return false; } - void FinishSteps() { + void FinishSteps(BlinkGC::StackState stack_state = + BlinkGC::StackState::kNoHeapPointersOnStack) { CHECK(thread_state_->IsIncrementalMarking()); - while (SingleStep()) { + while (SingleStep(stack_state)) { } } void FinishGC() { CHECK(thread_state_->IsIncrementalMarking()); - FinishSteps(); + FinishSteps(BlinkGC::StackState::kNoHeapPointersOnStack); CHECK_EQ(ThreadState::kIncrementalMarkingFinalizeScheduled, thread_state_->GetGCState()); - thread_state_->RunScheduledGC(BlinkGC::kNoHeapPointersOnStack); + thread_state_->RunScheduledGC(BlinkGC::StackState::kNoHeapPointersOnStack); CHECK(!thread_state_->IsIncrementalMarking()); thread_state_->CompleteSweep(); } @@ -1801,6 +1803,80 @@ ConservativelyCollectGarbage(); } +namespace { + +template <typename T> +class ObjectHolder : public GarbageCollected<ObjectHolder<T>> { + public: + ObjectHolder() = default; + + virtual void Trace(Visitor* visitor) { visitor->Trace(holder_); } + + void set_value(T* value) { holder_ = value; } + T* value() const { return holder_.Get(); } + + private: + Member<T> holder_; +}; + +} // namespace + +TEST(IncrementalMarkingTest, StepDuringObjectConstruction) { + // Test ensures that objects in construction are delayed for processing to + // allow omitting write barriers on initializing stores. + + using O = ObjectWithCallbackBeforeInitializer<Object>; + using Holder = ObjectHolder<O>; + Persistent<Holder> holder(MakeGarbageCollected<Holder>()); + IncrementalMarkingTestDriver driver(ThreadState::Current()); + driver.Start(); + MakeGarbageCollected<O>( + base::BindOnce( + [](IncrementalMarkingTestDriver* driver, Holder* holder, O* thiz) { + // Publish not-fully-constructed object |thiz| by triggering write + // barrier for the object. + holder->set_value(thiz); + CHECK(HeapObjectHeader::FromPayload(holder->value())->IsValid()); + // Finish call incremental steps. + driver->FinishSteps(BlinkGC::StackState::kHeapPointersOnStack); + }, + &driver, holder.Get()), + MakeGarbageCollected<Object>()); + driver.FinishGC(); + CHECK(HeapObjectHeader::FromPayload(holder->value())->IsValid()); + CHECK(HeapObjectHeader::FromPayload(holder->value()->value())->IsValid()); + PreciselyCollectGarbage(); +} + +TEST(IncrementalMarkingTest, StepDuringMixinObjectConstruction) { + // Test ensures that mixin objects in construction are delayed for processing + // to allow omitting write barriers on initializing stores. + + using Parent = ObjectWithMixinWithCallbackBeforeInitializer<Object>; + using Mixin = MixinWithCallbackBeforeInitializer<Object>; + using Holder = ObjectHolder<Mixin>; + Persistent<Holder> holder(MakeGarbageCollected<Holder>()); + IncrementalMarkingTestDriver driver(ThreadState::Current()); + driver.Start(); + MakeGarbageCollected<Parent>( + base::BindOnce( + [](IncrementalMarkingTestDriver* driver, Holder* holder, + Mixin* thiz) { + // Publish not-fully-constructed object + // |thiz| by triggering write barrier for + // the object. + holder->set_value(thiz); + // Finish call incremental steps. + driver->FinishSteps(BlinkGC::StackState::kHeapPointersOnStack); + }, + &driver, holder.Get()), + MakeGarbageCollected<Object>()); + driver.FinishGC(); + CHECK(holder->value()->GetHeapObjectHeader()->IsValid()); + CHECK(HeapObjectHeader::FromPayload(holder->value()->value())->IsValid()); + PreciselyCollectGarbage(); +} + } // namespace incremental_marking_test } // namespace blink
diff --git a/third_party/blink/renderer/platform/heap/marking_visitor.cc b/third_party/blink/renderer/platform/heap/marking_visitor.cc index 6efd4e027..b95eb73 100644 --- a/third_party/blink/renderer/platform/heap/marking_visitor.cc +++ b/third_party/blink/renderer/platform/heap/marking_visitor.cc
@@ -64,11 +64,10 @@ if (!header || header->IsMarked()) return; - // Simple case for fully constructed objects or those that have no vtable - // which make dispatching to member fields trivial. + // Simple case for fully constructed objects. const GCInfo* gc_info = GCInfoTable::Get().GCInfoFromIndex(header->GcInfoIndex()); - if (!gc_info->HasVTable() || !header->IsInConstruction()) { + if (!header->IsInConstruction()) { MarkHeader(header, gc_info->trace_); return; }
diff --git a/third_party/blink/renderer/platform/heap/marking_visitor.h b/third_party/blink/renderer/platform/heap/marking_visitor.h index cbb41e8..a53f0bf 100644 --- a/third_party/blink/renderer/platform/heap/marking_visitor.h +++ b/third_party/blink/renderer/platform/heap/marking_visitor.h
@@ -51,11 +51,14 @@ // Marking implementation. - // Conservatively marks an object if pointed to by Address. + // Conservatively marks an object if pointed to by Address. The object may + // be in construction as the scan is conservative without relying on a + // Trace method. void ConservativelyMarkAddress(BasePage*, Address); // Marks an object dynamically using any address within its body and adds a - // tracing callback for processing of the object. + // tracing callback for processing of the object. The object is not allowed + // to be in construction. void DynamicallyMarkAddress(Address); // Marks an object and adds a tracing callback for processing of the object. @@ -97,8 +100,11 @@ // that lead to many recursions. DCHECK(Heap().GetStackFrameDepth().IsAcceptableStackUse()); if (LIKELY(Heap().GetStackFrameDepth().IsSafeToRecurse())) { - if (MarkHeaderNoTracing( - HeapObjectHeader::FromPayload(desc.base_object_payload))) { + HeapObjectHeader* header = + HeapObjectHeader::FromPayload(desc.base_object_payload); + if (header->IsInConstruction()) { + not_fully_constructed_worklist_.Push(desc.base_object_payload); + } else if (MarkHeaderNoTracing(header)) { desc.callback(this, desc.base_object_payload); } return; @@ -199,7 +205,9 @@ DCHECK(header); DCHECK(callback); - if (MarkHeaderNoTracing(header)) { + if (header->IsInConstruction()) { + not_fully_constructed_worklist_.Push(header->Payload()); + } else if (MarkHeaderNoTracing(header)) { marking_worklist_.Push( {reinterpret_cast<void*>(header->Payload()), callback}); }
diff --git a/third_party/blink/renderer/platform/heap/persistent.h b/third_party/blink/renderer/platform/heap/persistent.h index 35ed1d2..69db982b 100644 --- a/third_party/blink/renderer/platform/heap/persistent.h +++ b/third_party/blink/renderer/platform/heap/persistent.h
@@ -269,7 +269,7 @@ weaknessConfiguration, crossThreadnessConfiguration>; Base* persistent = reinterpret_cast<Base*>(persistent_pointer); T* object = persistent->Get(); - if (object && !ObjectAliveTrait<T>::IsHeapObjectAlive(object)) + if (object && !ThreadHeap::IsHeapObjectAlive(object)) ClearWeakPersistent(persistent); }
diff --git a/third_party/blink/renderer/platform/heap/thread_state.cc b/third_party/blink/renderer/platform/heap/thread_state.cc index 1e7ffa8..a35433a 100644 --- a/third_party/blink/renderer/platform/heap/thread_state.cc +++ b/third_party/blink/renderer/platform/heap/thread_state.cc
@@ -177,7 +177,6 @@ mixins_being_constructed_count_(0), object_resurrection_forbidden_(false), in_atomic_pause_(false), - gc_mixin_marker_(nullptr), gc_state_(kNoGCScheduled), gc_phase_(GCPhase::kNone), reason_for_scheduled_gc_(BlinkGC::GCReason::kMaxValue),
diff --git a/third_party/blink/renderer/platform/heap/thread_state.h b/third_party/blink/renderer/platform/heap/thread_state.h index 7e7a50e6..00282d6 100644 --- a/third_party/blink/renderer/platform/heap/thread_state.h +++ b/third_party/blink/renderer/platform/heap/thread_state.h
@@ -62,7 +62,6 @@ class IncrementalMarkingTestDriver; } // namespace incremental_marking_test -class GarbageCollectedMixinConstructorMarkerBase; class MarkingVisitor; class PersistentNode; class PersistentRegion; @@ -480,29 +479,6 @@ perform_cleanup_ = perform_cleanup; } - // By entering a gc-forbidden scope, conservative GCs will not - // be allowed while handling an out-of-line allocation request. - // Intended used when constructing subclasses of GC mixins, where - // the object being constructed cannot be safely traced & marked - // fully should a GC be allowed while its subclasses are being - // constructed. - void EnterGCForbiddenScopeIfNeeded( - GarbageCollectedMixinConstructorMarkerBase* gc_mixin_marker) { - DCHECK(CheckThread()); - if (!gc_mixin_marker_) { - EnterMixinConstructionScope(); - gc_mixin_marker_ = gc_mixin_marker; - } - } - void LeaveGCForbiddenScopeIfNeeded( - GarbageCollectedMixinConstructorMarkerBase* gc_mixin_marker) { - DCHECK(CheckThread()); - if (gc_mixin_marker_ == gc_mixin_marker) { - LeaveMixinConstructionScope(); - gc_mixin_marker_ = nullptr; - } - } - void FreePersistentNode(PersistentRegion*, PersistentNode*); using PersistentClearCallback = void (*)(void*); @@ -707,8 +683,6 @@ TimeDelta next_incremental_marking_step_duration_; TimeDelta previous_incremental_marking_time_left_; - GarbageCollectedMixinConstructorMarkerBase* gc_mixin_marker_; - GCState gc_state_; GCPhase gc_phase_; BlinkGC::GCReason reason_for_scheduled_gc_;
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5 index 571725c..ee800dc 100644 --- a/third_party/blink/renderer/platform/runtime_enabled_features.json5 +++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -135,7 +135,7 @@ }, { name: "BlinkGenPropertyTrees", - status: "experimental", + status: "test", }, { name: "BlinkRuntimeCallStats", @@ -710,6 +710,10 @@ // This is enabled by features::kLazyInitializeMediaControls. }, { + name: "LegacyPerformanceMemoryCounters", + origin_trial_feature_name: "LegacyPerformanceMemoryCounters", + }, + { name: "LongTaskV2", }, {
diff --git a/third_party/blink/web_tests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/blink/web_tests/FlagExpectations/enable-blink-features=LayoutNG index ab55793..d1ff7c1 100644 --- a/third_party/blink/web_tests/FlagExpectations/enable-blink-features=LayoutNG +++ b/third_party/blink/web_tests/FlagExpectations/enable-blink-features=LayoutNG
@@ -248,7 +248,6 @@ crbug.com/889721 fast/inline/outline-continuations.html [ Failure ] crbug.com/591099 fast/overflow/overflow-update-transform.html [ Failure ] crbug.com/591099 fast/replaced/replaced-breaking.html [ Failure Pass ] -crbug.com/591099 fast/scroll-snap/snaps-after-keyboard-scrolling-rtl.html [ Failure ] crbug.com/591099 fast/text/descent-clip-in-scaled-page.html [ Failure ] crbug.com/899902 fast/text/ellipsis-with-self-painting-layer.html [ Pass ] crbug.com/796943 fast/text/international/shape-across-elements-simple.html [ Pass ] @@ -296,6 +295,8 @@ crbug.com/591099 virtual/bidi-caret-affinity/editing/selection/word-granularity.html [ Crash ] crbug.com/916511 virtual/composite-after-paint/paint/background/scrolling-background-with-negative-z-child.html [ Failure Crash ] crbug.com/591099 virtual/composite-after-paint/paint/invalidation/box/margin.html [ Failure Pass ] +crbug.com/591099 virtual/display-lock/display-lock/lock-after-append/measure-forced-layout.html [ Failure ] +crbug.com/591099 virtual/display-lock/display-lock/lock-after-append/measure-updated-layout.html [ Failure ] crbug.com/591099 virtual/display-lock/display-lock/lock-before-append/acquire-update-measure-remove.html [ Failure ] crbug.com/591099 virtual/display-lock/display-lock/lock-before-append/measure-forced-layout.html [ Failure ] crbug.com/591099 virtual/display-lock/display-lock/lock-before-append/measure-updated-layout.html [ Failure ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index f0fb8fe..b1695e8 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -394,7 +394,6 @@ crbug.com/882975 virtual/threaded/fast/events/pinch/scroll-visual-viewport-send-boundary-events.html [ Failure Pass ] ### See crbug.com/891427 comment near the top of this file: ###crbug.com/882975 virtual/threaded/synthetic_gestures/synthetic-pinch-zoom-gesture-touchscreen-desktop.html [ Failure Pass ] -crbug.com/882973 http/tests/devtools/layers/layer-tree-model.js [ Failure ] crbug.com/884239 virtual/threaded/animations/animationworklet/worklet-animation-local-time-undefined.html [ Failure ] # Subpixel rounding differences that are incorrect. crbug.com/836886 virtual/prefer_compositing_to_lcd_text/compositing/overflow/scaled-overflow.html [ Failure ]
diff --git a/third_party/blink/web_tests/animations/interpolation/clip-path-interpolation.html b/third_party/blink/web_tests/animations/interpolation/clip-path-interpolation.html index 90466d44..b91dbf3 100644 --- a/third_party/blink/web_tests/animations/interpolation/clip-path-interpolation.html +++ b/third_party/blink/web_tests/animations/interpolation/clip-path-interpolation.html
@@ -125,6 +125,16 @@ {at: 0.75, is: 'circle(40% at 80% calc(-30px + 100%))'}, ]); +// Regression test for crbug.com/920122. +assertInterpolation({ + property: 'clip-path', + from: 'inset(20px)', + to: 'inset(40%)', +}, [ + {at: 3.40282e+38, is: 'inset(calc(3.40282e+38% + -3.40282e+38px))'}, +]); + + assertNoInterpolation({ property: 'clip-path', from: 'url("/clip-source")',
diff --git a/third_party/blink/web_tests/animations/interpolation/offset-rotate-interpolation.html b/third_party/blink/web_tests/animations/interpolation/offset-rotate-interpolation.html index 52d72c9..9cf0678c 100644 --- a/third_party/blink/web_tests/animations/interpolation/offset-rotate-interpolation.html +++ b/third_party/blink/web_tests/animations/interpolation/offset-rotate-interpolation.html
@@ -76,6 +76,15 @@ {at: 1.5, is: '70deg'}, ]); +// Regression test for crbug.com/918430. +assertInterpolation({ + property: 'offset-rotate', + from: '800deg', + to: '900deg' +}, [ + {at: -3.40282e+38, is: '-3.40282e+38deg'}, +]); + // Interpolation between auto angles. assertInterpolation({ property: 'offset-rotate',
diff --git a/third_party/blink/web_tests/display-lock/lock-after-append/acquire-after-resize-expected.html b/third_party/blink/web_tests/display-lock/lock-after-append/acquire-after-resize-expected.html new file mode 100644 index 0000000..d325504 --- /dev/null +++ b/third_party/blink/web_tests/display-lock/lock-after-append/acquire-after-resize-expected.html
@@ -0,0 +1,19 @@ +<!doctype HTML> + +<style> +#container { + contain: style layout; + width: 150px; + height: 150px; +} +#spacer { + width: 50px; + height: 50px; + background: lightgreen; +} +</style> + +<div id="log">PASS</div> +<div id="container"></div> +<div id="spacer"></div> +
diff --git a/third_party/blink/web_tests/display-lock/lock-after-append/acquire-after-resize.html b/third_party/blink/web_tests/display-lock/lock-after-append/acquire-after-resize.html new file mode 100644 index 0000000..4dee05e6 --- /dev/null +++ b/third_party/blink/web_tests/display-lock/lock-after-append/acquire-after-resize.html
@@ -0,0 +1,52 @@ +<!doctype HTML> + +<!-- +Resizes the element and runs acquire, which should use the new size. +--> + +<style> +.contained { + contain: style layout; + background: lightblue; +} +#small { + width: 50px; + height: 50px; +} +#large { + width: 150px; + height: 150px; +} +#spacer { + width: 50px; + height: 50px; + background: lightgreen; +} +</style> + +<div id="log"></div> +<div id="small" class="contained"></div> +<div id="spacer"> + +<script> +// TODO(vmpstr): In WPT this needs to be replaced with reftest-wait. +if (window.testRunner) + window.testRunner.waitUntilDone(); + +function finishTest(status_string) { + if (document.getElementById("log").innerHTML === "") + document.getElementById("log").innerHTML = status_string; + if (window.testRunner) + window.testRunner.notifyDone(); +} + +function runTest() { + let container = document.getElementById("small"); + container.id = "large"; + container.getDisplayLock().acquire({ timeout: Infinity }).then( + () => { finishTest("PASS"); }, + () => { finishTest("FAIL"); }); +} + +window.onload = runTest; +</script>
diff --git a/third_party/blink/web_tests/display-lock/lock-after-append/acquire-commit-expected.html b/third_party/blink/web_tests/display-lock/lock-after-append/acquire-commit-expected.html new file mode 100644 index 0000000..9801e1a --- /dev/null +++ b/third_party/blink/web_tests/display-lock/lock-after-append/acquire-commit-expected.html
@@ -0,0 +1,18 @@ +<!doctype HTML> + +<style> +#container { + contain: style layout; + width: 150px; + height: 150px; + background: lightblue; +} +#child { + width: 50px; + height: 50px; + background: lightgreen; +} +</style> + +<div id="log">PASS</div> +<div id="container"><div id="child"></div></div>
diff --git a/third_party/blink/web_tests/display-lock/lock-after-append/acquire-commit.html b/third_party/blink/web_tests/display-lock/lock-after-append/acquire-commit.html new file mode 100644 index 0000000..0af81b2 --- /dev/null +++ b/third_party/blink/web_tests/display-lock/lock-after-append/acquire-commit.html
@@ -0,0 +1,50 @@ +<!doctype HTML> + +<!-- +Runs an acquire, appends a child, and calls commit. +--> + +<style> +#container { + contain: style layout; + width: 150px; + height: 150px; + background: lightblue; +} +#child { + width: 50px; + height: 50px; + background: lightgreen; +} +</style> + +<div id="log"></div> +<div id="container"></div> + +<script> +// TODO(vmpstr): In WPT this needs to be replaced with reftest-wait. +if (window.testRunner) + window.testRunner.waitUntilDone(); + +function finishTest(status_string) { + if (document.getElementById("log").innerHTML === "") + document.getElementById("log").innerHTML = status_string; + if (window.testRunner) + window.testRunner.notifyDone(); +} + +function runTest() { + let container = document.getElementById("container"); + container.getDisplayLock().acquire({ timeout: Infinity }).then(() => { + let child = document.createElement("div"); + child.id = "child"; + container.appendChild(child); + + container.getDisplayLock().commit().then( + () => { finishTest("PASS"); }, + () => { finishTest("FAIL"); }); + }); +} + +window.onload = runTest; +</script>
diff --git a/third_party/blink/web_tests/display-lock/lock-after-append/acquire-immediate-commit-expected.html b/third_party/blink/web_tests/display-lock/lock-after-append/acquire-immediate-commit-expected.html new file mode 100644 index 0000000..9801e1a --- /dev/null +++ b/third_party/blink/web_tests/display-lock/lock-after-append/acquire-immediate-commit-expected.html
@@ -0,0 +1,18 @@ +<!doctype HTML> + +<style> +#container { + contain: style layout; + width: 150px; + height: 150px; + background: lightblue; +} +#child { + width: 50px; + height: 50px; + background: lightgreen; +} +</style> + +<div id="log">PASS</div> +<div id="container"><div id="child"></div></div>
diff --git a/third_party/blink/web_tests/display-lock/lock-after-append/acquire-immediate-commit.html b/third_party/blink/web_tests/display-lock/lock-after-append/acquire-immediate-commit.html new file mode 100644 index 0000000..b576168 --- /dev/null +++ b/third_party/blink/web_tests/display-lock/lock-after-append/acquire-immediate-commit.html
@@ -0,0 +1,50 @@ +<!doctype HTML> + +<!-- +Runs an acquire, and calls commit without waiting for the acquire promise. +--> + +<style> +#container { + contain: style layout; + width: 150px; + height: 150px; + background: lightblue; +} +#child { + width: 50px; + height: 50px; + background: lightgreen; +} +</style> + +<div id="log"></div> +<div id="container"></div> + +<script> +// TODO(vmpstr): In WPT this needs to be replaced with reftest-wait. +if (window.testRunner) + window.testRunner.waitUntilDone(); + +function finishTest(status_string) { + if (document.getElementById("log").innerHTML === "") + document.getElementById("log").innerHTML = status_string; + if (window.testRunner) + window.testRunner.notifyDone(); +} + +function runTest() { + let container = document.getElementById("container"); + container.getDisplayLock().acquire({ timeout: Infinity }); + + let child = document.createElement("div"); + child.id = "child"; + container.appendChild(child); + + container.getDisplayLock().commit().then( + () => { finishTest("PASS"); }, + () => { finishTest("FAIL"); }); +} + +window.onload = runTest; +</script>
diff --git a/third_party/blink/web_tests/display-lock/lock-after-append/acquire-on-added-containment-expected.html b/third_party/blink/web_tests/display-lock/lock-after-append/acquire-on-added-containment-expected.html new file mode 100644 index 0000000..de8bef3 --- /dev/null +++ b/third_party/blink/web_tests/display-lock/lock-after-append/acquire-on-added-containment-expected.html
@@ -0,0 +1,16 @@ +<!doctype HTML> + +<style> +#container { + width: 150px; + height: 150px; +} +#child { + width: 50px; + height: 50px; + background: lightgreen; +} +</style> + +<div id="log">PASS</div> +<div id="container"></div>
diff --git a/third_party/blink/web_tests/display-lock/lock-after-append/acquire-on-added-containment.html b/third_party/blink/web_tests/display-lock/lock-after-append/acquire-on-added-containment.html new file mode 100644 index 0000000..e29af59 --- /dev/null +++ b/third_party/blink/web_tests/display-lock/lock-after-append/acquire-on-added-containment.html
@@ -0,0 +1,47 @@ +<!doctype HTML> + +<!-- +Runs an acquire on an element right after adding containment, which succeeds. +--> + +<style> +#container { + width: 150px; + height: 150px; + background: lightblue; +} +.contained { + contain: style layout; +} +#child { + width: 50px; + height: 50px; + background: lightgreen; +} +</style> + +<div id="log"></div> +<div id="container"></div> + +<script> +// TODO(vmpstr): In WPT this needs to be replaced with reftest-wait. +if (window.testRunner) + window.testRunner.waitUntilDone(); + +function finishTest(status_string) { + if (document.getElementById("log").innerHTML === "") + document.getElementById("log").innerHTML = status_string; + if (window.testRunner) + window.testRunner.notifyDone(); +} + +function runTest() { + let container = document.getElementById("container"); + container.classList = "contained"; + container.getDisplayLock().acquire({ timeout: Infinity }).then( + () => { finishTest("PASS"); }, + () => { finishTest("FAIL"); }); +} + +window.onload = runTest; +</script>
diff --git a/third_party/blink/web_tests/display-lock/lock-after-append/acquire-on-no-containment-expected.html b/third_party/blink/web_tests/display-lock/lock-after-append/acquire-on-no-containment-expected.html new file mode 100644 index 0000000..4c990bd --- /dev/null +++ b/third_party/blink/web_tests/display-lock/lock-after-append/acquire-on-no-containment-expected.html
@@ -0,0 +1,17 @@ +<!doctype HTML> + +<style> +#container { + width: 150px; + height: 150px; + background: lightblue; +} +#child { + width: 50px; + height: 50px; + background: lightgreen; +} +</style> + +<div id="log">PASS</div> +<div id="container"></div>
diff --git a/third_party/blink/web_tests/display-lock/lock-after-append/acquire-on-no-containment.html b/third_party/blink/web_tests/display-lock/lock-after-append/acquire-on-no-containment.html new file mode 100644 index 0000000..d79d1de --- /dev/null +++ b/third_party/blink/web_tests/display-lock/lock-after-append/acquire-on-no-containment.html
@@ -0,0 +1,43 @@ +<!doctype HTML> + +<!-- +Runs an acquire on an element with no containment, which fails. +--> + +<style> +#container { + width: 150px; + height: 150px; + background: lightblue; +} +#child { + width: 50px; + height: 50px; + background: lightgreen; +} +</style> + +<div id="log"></div> +<div id="container"></div> + +<script> +// TODO(vmpstr): In WPT this needs to be replaced with reftest-wait. +if (window.testRunner) + window.testRunner.waitUntilDone(); + +function finishTest(status_string) { + if (document.getElementById("log").innerHTML === "") + document.getElementById("log").innerHTML = status_string; + if (window.testRunner) + window.testRunner.notifyDone(); +} + +function runTest() { + let container = document.getElementById("container"); + container.getDisplayLock().acquire({ timeout: Infinity }).then( + () => { finishTest("FAIL"); }, + () => { finishTest("PASS"); }); +} + +window.onload = runTest; +</script>
diff --git a/third_party/blink/web_tests/display-lock/lock-after-append/delayed-acquire-removes-painted-output-expected.html b/third_party/blink/web_tests/display-lock/lock-after-append/delayed-acquire-removes-painted-output-expected.html new file mode 100644 index 0000000..7444cebe --- /dev/null +++ b/third_party/blink/web_tests/display-lock/lock-after-append/delayed-acquire-removes-painted-output-expected.html
@@ -0,0 +1,17 @@ +<!doctype HTML> + +<style> +#container { + contain: style layout; + width: 150px; + height: 150px; +} +#checker { + width: 50px; + height: 50px; + background: green; +} +</style> + +<div id="container"></div> +<div id="checker"></div>
diff --git a/third_party/blink/web_tests/display-lock/lock-after-append/delayed-acquire-removes-painted-output.html b/third_party/blink/web_tests/display-lock/lock-after-append/delayed-acquire-removes-painted-output.html new file mode 100644 index 0000000..d5239d58 --- /dev/null +++ b/third_party/blink/web_tests/display-lock/lock-after-append/delayed-acquire-removes-painted-output.html
@@ -0,0 +1,44 @@ +<!doctype HTML> + +<!-- +Ensures page is clean, runs an acquire after a delay. +--> + +<style> +#container { + contain: style layout; + width: 150px; + height: 150px; + background: lightblue; +} +#checker { + width: 50px; + height: 50px; + background: green; +} +</style> + +<div id="container"></div> +<div id="checker"></div> + +<script> +// TODO(vmpstr): In WPT this needs to be replaced with reftest-wait. +if (window.testRunner) + window.testRunner.waitUntilDone(); + +function finishTest() { + if (window.testRunner) + window.testRunner.notifyDone(); +} + +function runTest() { + let container = document.getElementById("container"); + container.getDisplayLock().acquire({ timeout: Infinity }).then(() => { + finishTest(); + }); +} + +window.onload = () => { + requestAnimationFrame(() => requestAnimationFrame(runTest)); +}; +</script>
diff --git a/third_party/blink/web_tests/display-lock/lock-after-append/measure-forced-layout.html b/third_party/blink/web_tests/display-lock/lock-after-append/measure-forced-layout.html new file mode 100644 index 0000000..21cd3d9 --- /dev/null +++ b/third_party/blink/web_tests/display-lock/lock-after-append/measure-forced-layout.html
@@ -0,0 +1,92 @@ +<!doctype HTML> + +<style> +.contained { + contain: style layout; + background: lightgreen; +} +#small { + width: 100px; + height: 100px; +} +#large { + width: 200px; + height: 200px; +} +.child { + width: 20px; + height: 20%; + background: cyan; +} +#spacer { + width: 150px; + height: 150px; + background: green; +} +</style> + +<div id="parent"><div class="contained" id="small"></div></div> +<div id="spacer"></div> + +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> + +<script> +async_test((t) => { + function createChild(id) { + let child = document.createElement("div"); + child.classList = "child"; + child.id = id; + return child; + } + + function measureForced() { + t.step(() => { + // Ensure children are laid out; this forces a layout. + assert_equals(document.getElementById("0").offsetTop, 0, "0 forced"); + assert_equals(document.getElementById("1").offsetTop, 40, "1 forced"); + assert_equals(document.getElementById("2").offsetTop, 80, "2 forced"); + // Parent should be 100 height, since its child is locked. + assert_equals(document.getElementById("parent").offsetTop, 8, "parent forced"); + assert_equals(document.getElementById("spacer").offsetTop, 108, "spacer forced"); + }); + } + + function measureInCommit() { + t.step(() => { + // Ensure children are still laid out. + assert_equals(document.getElementById("0").offsetTop, 0, "0 in commit"); + assert_equals(document.getElementById("1").offsetTop, 40, "1 in commit"); + assert_equals(document.getElementById("2").offsetTop, 80, "2 in commit"); + // Now the parent should encompass an unlocked container, so spacer is pushed down more. + assert_equals(document.getElementById("parent").offsetTop, 8, "parent in commit"); + assert_equals(document.getElementById("spacer").offsetTop, 208, "spacer in commit"); + }); + } + + function construct(container) { + container.id = "large"; + container.appendChild(createChild("0")); + container.appendChild(createChild("1")); + container.appendChild(createChild("2")); + } + + async function runTest() { + let container = document.getElementById("small"); + await container.getDisplayLock().acquire({ timeout: Infinity }); + + construct(container); + measureForced(); + + container.getDisplayLock().commit().then(() => { + measureInCommit(); + t.done(); + }); + } + + window.onload = function() { + requestAnimationFrame(() => requestAnimationFrame(runTest)); + }; +}, "Measure Forced Layout"); +</script> +
diff --git a/third_party/blink/web_tests/display-lock/lock-after-append/measure-updated-layout.html b/third_party/blink/web_tests/display-lock/lock-after-append/measure-updated-layout.html new file mode 100644 index 0000000..782274fe --- /dev/null +++ b/third_party/blink/web_tests/display-lock/lock-after-append/measure-updated-layout.html
@@ -0,0 +1,94 @@ +<!doctype HTML> + +<style> +.contained { + contain: style layout; + background: lightgreen; +} +#small { + width: 100px; + height: 100px; +} +#large { + width: 200px; + height: 200px; +} +.child { + width: 20px; + height: 20%; + background: cyan; +} +#spacer { + width: 150px; + height: 150px; + background: green; +} +</style> + +<div id="parent"><div class="contained" id="small"></div></div> +<div id="spacer"></div> + +<script src="../../resources/testharness.js"></script> +<script src="../../resources/testharnessreport.js"></script> + +<script> +async_test((t) => { + function createChild(id) { + let child = document.createElement("div"); + child.classList = "child"; + child.id = id; + return child; + } + + function construct(container) { + container.id = "large"; + container.appendChild(createChild("0")); + container.appendChild(createChild("1")); + container.appendChild(createChild("2")); + } + + function measureInUpdate() { + t.step(() => { + // Ensure children are laid out; this forces a layout. + assert_equals(document.getElementById("0").offsetTop, 0, "0 in update"); + assert_equals(document.getElementById("1").offsetTop, 40, "1 in update"); + assert_equals(document.getElementById("2").offsetTop, 80, "2 in update"); + // Parent should be 100 height, since its child is locked. + assert_equals(document.getElementById("parent").offsetTop, 8, "parent in update"); + assert_equals(document.getElementById("spacer").offsetTop, 108, "spacer in update"); + }); + } + + function measureInCommit() { + t.step(() => { + // Ensure children are still laid out. + assert_equals(document.getElementById("0").offsetTop, 0, "0 in commit"); + assert_equals(document.getElementById("1").offsetTop, 40, "1 in commit"); + assert_equals(document.getElementById("2").offsetTop, 80, "2 in commit"); + // Now the parent should encompass the unlocked container, so spacer is pushed down further. + assert_equals(document.getElementById("parent").offsetTop, 8, "parent in commit"); + assert_equals(document.getElementById("spacer").offsetTop, 208, "spacer in commit"); + }); + } + + async function runTest() { + let container = document.getElementById("small"); + await container.getDisplayLock().acquire({ timeout: Infinity }); + + construct(container); + + container.getDisplayLock().update().then(() => { + measureInUpdate(); + container.getDisplayLock().commit().then(() => { + measureInCommit(); + t.done(); + }); + }); + } + + window.onload = function() { + requestAnimationFrame(() => requestAnimationFrame(runTest)); + }; +}, "Measure Updated Layout"); +</script> +
diff --git a/third_party/blink/web_tests/animations/animationworklet/animation-worklet-inside-iframe.html b/third_party/blink/web_tests/external/wpt/animation-worklet/animation-worklet-inside-iframe.https.html similarity index 80% rename from third_party/blink/web_tests/animations/animationworklet/animation-worklet-inside-iframe.html rename to third_party/blink/web_tests/external/wpt/animation-worklet/animation-worklet-inside-iframe.https.html index 0816bd4..cad04b2 100644 --- a/third_party/blink/web_tests/animations/animationworklet/animation-worklet-inside-iframe.html +++ b/third_party/blink/web_tests/external/wpt/animation-worklet/animation-worklet-inside-iframe.https.html
@@ -1,7 +1,9 @@ <!DOCTYPE html> -<title>Test that AW inside frames with different origin causes new global scopes</title> -<script src="../../resources/testharness.js"></script> -<script src="../../resources/testharnessreport.js"></script> +<title>Test that AnimationWorklet inside frames with different origin causes new global scopes</title> +<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="common.js"></script> <style> .redbox { @@ -21,7 +23,6 @@ }); </script> -<script src="resources/animation-worklet-tests.js"></script> <script> async_test(t => { // Wait for iframe to load and start its animations.
diff --git a/third_party/blink/web_tests/animations/animationworklet/resources/animator-iframe.html b/third_party/blink/web_tests/external/wpt/animation-worklet/resources/animator-iframe.html similarity index 94% rename from third_party/blink/web_tests/animations/animationworklet/resources/animator-iframe.html rename to third_party/blink/web_tests/external/wpt/animation-worklet/resources/animator-iframe.html index 42cdcd8..2a8895919 100644 --- a/third_party/blink/web_tests/animations/animationworklet/resources/animator-iframe.html +++ b/third_party/blink/web_tests/external/wpt/animation-worklet/resources/animator-iframe.html
@@ -6,7 +6,7 @@ background-color: #00ff00; } </style> -<script src="animation-worklet-tests.js"></script> +<script src="../common.js"></script> <script id="iframe_worklet" type="text/worklet"> registerAnimator("iframe_animator", class { @@ -36,4 +36,4 @@ window.parent.postMessage(getComputedStyle(target).opacity, '*'); }); }); -</script> \ No newline at end of file +</script>
diff --git a/third_party/blink/web_tests/animations/animationworklet/scroll-timeline-writing-modes.html b/third_party/blink/web_tests/external/wpt/animation-worklet/scroll-timeline-writing-modes.https.html similarity index 95% rename from third_party/blink/web_tests/animations/animationworklet/scroll-timeline-writing-modes.html rename to third_party/blink/web_tests/external/wpt/animation-worklet/scroll-timeline-writing-modes.https.html index 313975b4..9cf99cb 100644 --- a/third_party/blink/web_tests/animations/animationworklet/scroll-timeline-writing-modes.html +++ b/third_party/blink/web_tests/external/wpt/animation-worklet/scroll-timeline-writing-modes.https.html
@@ -1,7 +1,9 @@ <!DOCTYPE html> <title>Tests that ScrollTimeline works properly with writing mode and directionality</title> -<script src="../../resources/testharness.js"></script> -<script src="../../resources/testharnessreport.js"></script> +<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="common.js"></script> <script id="worklet_code" type="text/worklet"> registerAnimator("test_animator", class { @@ -11,7 +13,6 @@ }); </script> -<script src="resources/animation-worklet-tests.js"></script> <script> // Creates a DOM structure like: // - container
diff --git a/third_party/blink/web_tests/external/wpt/clipboard-apis/OWNERS b/third_party/blink/web_tests/external/wpt/clipboard-apis/OWNERS index 5112e6f..f45bd507 100644 --- a/third_party/blink/web_tests/external/wpt/clipboard-apis/OWNERS +++ b/third_party/blink/web_tests/external/wpt/clipboard-apis/OWNERS
@@ -1 +1,6 @@ +# TEAM: storage-dev@chromium.org +# COMPONENT: Blink>Storage>DataTransfer + garykac@chromium.org +pwnall@chromium.org +jsbell@chromium.org
diff --git a/third_party/blink/web_tests/external/wpt/dom/events/Event-dispatch-click.html b/third_party/blink/web_tests/external/wpt/dom/events/Event-dispatch-click.html index 4aa4bbe4..2241d57e 100644 --- a/third_party/blink/web_tests/external/wpt/dom/events/Event-dispatch-click.html +++ b/third_party/blink/web_tests/external/wpt/dom/events/Event-dispatch-click.html
@@ -74,17 +74,17 @@ t.done() }, "pick the first with activation behavior <input type=checkbox>") -var globalCounter = 0 // sorry async_test(function(t) { // as above with <a> - var i = 0 + window.hrefComplete = t.step_func(function(a) { + assert_equals(a, 'child'); + t.done(); + }); var link = document.createElement("a") - link.href = "javascript:(function(){globalCounter--})()" // must not be triggered + link.href = "javascript:hrefComplete('link')" // must not be triggered dump.appendChild(link) var child = link.appendChild(document.createElement("a")) - child.href = "javascript:(function(){globalCounter++})()" + child.href = "javascript:hrefComplete('child')" child.dispatchEvent(new MouseEvent("click", {bubbles:true})) - assert_equals(globalCounter, 1) - t.done() }, "pick the first with activation behavior <a href>") async_test(function(t) {
diff --git a/third_party/blink/web_tests/external/wpt/mediacapture-record/MediaRecorder-creation.https.html b/third_party/blink/web_tests/external/wpt/mediacapture-record/MediaRecorder-creation.https.html new file mode 100644 index 0000000..57e636c6 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mediacapture-record/MediaRecorder-creation.https.html
@@ -0,0 +1,56 @@ +<!doctype html> +<html> +<head> + <title>MediaRecorder Creation</title> + <link rel="help" href="https://w3c.github.io/mediacapture-record/MediaRecorder.html#mediarecorder"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> +</head> +<script> + // This test verifies that MediaRecorder can be created with different Media + // Stream Track combinations: 1 Video Track only, 1 Audio Track only and finally + // a Media Stream with both a Video and an Audio Track. Note that recording is + // _not_ started in this test, see MediaRecorder-audio-video.html for it. + + function makeAsyncTest(constraints, verifyStream, message) { + async_test(function(test) { + + const gotStream = test.step_func(function(stream) { + verifyStream(stream); + + var recorder = new MediaRecorder(stream); + assert_equals(recorder.state, "inactive"); + assert_equals(recorder.videoBitsPerSecond, 0); + assert_equals(recorder.audioBitsPerSecond, 0); + test.done(); + }); + + const onError = test.unreached_func('Error creating MediaStream.'); + navigator.getUserMedia(constraints, gotStream, onError); + }, message); + } + + function verifyVideoOnlyStream(stream) { + assert_equals(stream.getAudioTracks().length, 0); + assert_equals(stream.getVideoTracks().length, 1); + assert_equals(stream.getVideoTracks()[0].readyState, 'live'); + } + function verifyAudioOnlyStream(stream) { + assert_equals(stream.getAudioTracks().length, 1); + assert_equals(stream.getVideoTracks().length, 0); + assert_equals(stream.getAudioTracks()[0].readyState, 'live'); + } + function verifyAudioVideoStream(stream) { + assert_equals(stream.getAudioTracks().length, 1); + assert_equals(stream.getVideoTracks().length, 1); + assert_equals(stream.getVideoTracks()[0].readyState, 'live'); + assert_equals(stream.getAudioTracks()[0].readyState, 'live'); + } + + // Note: webkitGetUserMedia() must be called with at least video or audio true. + makeAsyncTest({video:true}, verifyVideoOnlyStream, 'Video-only MediaRecorder'); + makeAsyncTest({audio:true}, verifyAudioOnlyStream, 'Audio-only MediaRecorder'); + makeAsyncTest({audio:true, video:true}, verifyAudioVideoStream, 'Video+Audio MediaRecorder'); + +</script> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/mediacapture-record/MediaRecorder-detached-context.html b/third_party/blink/web_tests/external/wpt/mediacapture-record/MediaRecorder-detached-context.html new file mode 100644 index 0000000..f8a8699a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/mediacapture-record/MediaRecorder-detached-context.html
@@ -0,0 +1,26 @@ +<!doctype html> +<html> +<head> + <title>MediaRecorder Detached Context</title> + <link rel="help" href="https://w3c.github.io/mediacapture-record/MediaRecorder.html#mediarecorder"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> +</head> +<body> +<script> + async_test(t => { + const frame = document.body.appendChild(document.createElement('iframe')); + const recorderFunc = frame.contentWindow.MediaRecorder; + frame.remove(); + + try { + new recorderFunc(new MediaStream); + } catch (err) { + assert_equals(err.name, 'NotAllowedError'); + t.done(); + } + assert_unreached('MediaRecorder should have failed'); + }, 'MediaRecorder creation with detached context'); +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/portals/portal-activate-event.html b/third_party/blink/web_tests/external/wpt/portals/portal-activate-event.html new file mode 100644 index 0000000..ed56026 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/portals/portal-activate-event.html
@@ -0,0 +1,14 @@ +<!DOCTYPE html> +<title>Tests that the PortalActivateEvent is dispatched when a portal is activated</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script> + async_test(function(t) { + var bc = new BroadcastChannel("test"); + bc.onmessage = t.step_func_done(function(e) { + assert_equals(e.data, "passed"); + bc.close(); + }); + window.open("resources/portal-activate-event-window.html"); + }, "Tests that the PortalActivateEvent is dispatched when a portal is activated."); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/portals/resources/portal-activate-event-portal.html b/third_party/blink/web_tests/external/wpt/portals/resources/portal-activate-event-portal.html new file mode 100644 index 0000000..d0eebcd1 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/portals/resources/portal-activate-event-portal.html
@@ -0,0 +1,13 @@ +<!DOCTYPE html> +<title>Tests that the PortalActivateEvent is dispatched when a portal is activated</title> +<script> + window.addEventListener("portalactivate", function(e) { + var bc = new BroadcastChannel("test"); + bc.postMessage("passed"); + bc.close(); + }); + + var bc = new BroadcastChannel("portal"); + bc.postMessage("loaded"); + bc.close(); +</script>
diff --git a/third_party/blink/web_tests/external/wpt/portals/resources/portal-activate-event-window.html b/third_party/blink/web_tests/external/wpt/portals/resources/portal-activate-event-window.html new file mode 100644 index 0000000..1994dc3 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/portals/resources/portal-activate-event-window.html
@@ -0,0 +1,11 @@ +<!DOCTYPE html> +<script> + var bc = new BroadcastChannel("portal"); + bc.onmessage = function(e) { + document.querySelector("portal").activate(); + bc.close(); + } +</script> +<body> + <portal src="portal-activate-event-portal.html"></portal> +</body>
diff --git a/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-Element-setAttribute.tentative.html b/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-Element-setAttribute.tentative.html index 9bda8d95..f9cbdc5 100644 --- a/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-Element-setAttribute.tentative.html +++ b/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-Element-setAttribute.tentative.html
@@ -16,9 +16,12 @@ [ 'a', 'href' ], [ 'area', 'href' ], [ 'base', 'href' ], + [ 'button', 'formAction' ], + [ 'form', 'action' ], [ 'frame', 'src' ], [ 'iframe', 'src' ], [ 'img', 'src' ], + [ 'input', 'formAction' ], [ 'input', 'src' ], [ 'link', 'href' ], [ 'video', 'src' ], @@ -66,6 +69,19 @@ }, c[0] + "." + c[1] + " accepts only TrustedHTML"); }); + // TrustedScript Assignments + const ScriptTestCases = [ + [ 'div', 'onclick' ] + ]; + + ScriptTestCases.forEach(c => { + test(t => { + assert_element_accepts_trusted_script_explicit_set(window, c, t, c[0], c[1], RESULTS.SCRIPT); + assert_throws_no_trusted_type_explicit_set(c[0], c[1], 'A string'); + assert_throws_no_trusted_type_explicit_set(c[0], c[1], null); + }, c[0] + "." + c[1] + " accepts only TrustedScript"); + }); + test(t => { let el = document.createElement('iframe'); @@ -77,7 +93,7 @@ }, "`Element.prototype.setAttribute.SrC = string` throws."); // After default policy creation string and null assignments implicitly call createXYZ - let p = window.TrustedTypes.createPolicy("default", { createURL: createURLJS, createScriptURL: createScriptURLJS, createHTML: createHTMLJS }, true); + let p = window.TrustedTypes.createPolicy("default", { createURL: createURLJS, createScriptURL: createScriptURLJS, createHTML: createHTMLJS, createScript: createScriptJS }, true); URLTestCases.forEach(c => { test(t => { assert_element_accepts_trusted_type(c[0], c[1], INPUTS.URL, RESULTS.URL); @@ -105,6 +121,13 @@ }, c[0] + "." + c[1] + " accepts string and null after default policy was created."); }); + ScriptTestCases.forEach(c => { + test(t => { + assert_element_accepts_trusted_type_explicit_set(c[0], c[1], INPUTS.SCRIPT, RESULTS.SCRIPT); + assert_element_accepts_trusted_type_explicit_set(c[0], c[1], null, "null"); + }, c[0] + "." + c[1] + " accepts string and null after default policy was created."); + }); + // Other attributes can be assigned with TrustedTypes or strings or null values test(t => { assert_element_accepts_trusted_url_explicit_set(window, 'arel', t, 'a', 'rel', RESULTS.URL);
diff --git a/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative-expected.txt b/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative-expected.txt index 609bfe20..ab07bc3 100644 --- a/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative-expected.txt +++ b/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative-expected.txt
@@ -2,9 +2,12 @@ PASS a.href accepts only TrustedURL PASS area.href accepts only TrustedURL PASS base.href accepts only TrustedURL +PASS button.formAction accepts only TrustedURL +PASS form.action accepts only TrustedURL PASS frame.src accepts only TrustedURL PASS iframe.src accepts only TrustedURL PASS img.src accepts only TrustedURL +PASS input.formAction accepts only TrustedURL PASS input.src accepts only TrustedURL PASS link.href accepts only TrustedURL PASS video.src accepts only TrustedURL @@ -19,9 +22,12 @@ PASS a.href accepts string and null after default policy was created PASS area.href accepts string and null after default policy was created PASS base.href accepts string and null after default policy was created +PASS button.formAction accepts string and null after default policy was created +PASS form.action accepts string and null after default policy was created PASS frame.src accepts string and null after default policy was created PASS iframe.src accepts string and null after default policy was created PASS img.src accepts string and null after default policy was created +PASS input.formAction accepts string and null after default policy was created PASS input.src accepts string and null after default policy was created PASS link.href accepts string and null after default policy was created PASS video.src accepts string and null after default policy was created
diff --git a/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html b/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html index 0eef00b..fd89bb33 100644 --- a/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html +++ b/third_party/blink/web_tests/external/wpt/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html
@@ -15,9 +15,12 @@ [ 'a', 'href' ], [ 'area', 'href' ], [ 'base', 'href' ], + [ 'button', 'formAction' ], + [ 'form', 'action' ], [ 'frame', 'src' ], [ 'iframe', 'src' ], [ 'img', 'src' ], + [ 'input', 'formAction' ], [ 'input', 'src' ], [ 'link', 'href' ], [ 'video', 'src' ],
diff --git a/third_party/blink/web_tests/external/wpt/trusted-types/support/helper.sub.js b/third_party/blink/web_tests/external/wpt/trusted-types/support/helper.sub.js index bae9d2dc..36ee240 100644 --- a/third_party/blink/web_tests/external/wpt/trusted-types/support/helper.sub.js +++ b/third_party/blink/web_tests/external/wpt/trusted-types/support/helper.sub.js
@@ -121,7 +121,9 @@ function assert_element_accepts_trusted_type_explicit_set(tag, attribute, value, expected) { let elem = document.createElement(tag); elem.setAttribute(attribute, value); - assert_equals(elem[attribute] + "", expected); + if (!/^on/.test(attribute)) { // "on" attributes are converted to functions. + assert_equals(elem[attribute] + "", expected); + } assert_equals(elem.getAttribute(attribute), expected); }
diff --git a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-navigated-expected.txt b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-navigated-expected.txt index 4f058d4..d96ae96 100644 --- a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-navigated-expected.txt +++ b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-navigated-expected.txt
@@ -60,6 +60,7 @@ PASS window.cached_navigator_userActivation.hasBeenActive is false PASS window.cached_navigator_userActivation.isActive is false PASS window.cached_navigator_xr.ondevicechange is null +PASS window.cached_performance.onelementtimingbufferfull is null PASS window.cached_performance.oneventtimingbufferfull is null PASS window.cached_performance.onresourcetimingbufferfull is null PASS window.cached_performance.shouldYield is false
diff --git a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt index 14cad64..3f2c192 100644 --- a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt +++ b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt
@@ -60,6 +60,7 @@ PASS window.cached_navigator_userActivation.hasBeenActive is false PASS window.cached_navigator_userActivation.isActive is false PASS window.cached_navigator_xr.ondevicechange is null +PASS window.cached_performance.onelementtimingbufferfull is null PASS window.cached_performance.oneventtimingbufferfull is null PASS window.cached_performance.onresourcetimingbufferfull is null PASS window.cached_performance.shouldYield is false
diff --git a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt index f4cc514..d2d9449 100644 --- a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt +++ b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt
@@ -60,6 +60,7 @@ PASS window.cached_navigator_userActivation.hasBeenActive is false PASS window.cached_navigator_userActivation.isActive is false PASS window.cached_navigator_xr.ondevicechange is null +PASS window.cached_performance.onelementtimingbufferfull is null PASS window.cached_performance.oneventtimingbufferfull is null PASS window.cached_performance.onresourcetimingbufferfull is null PASS window.cached_performance.shouldYield is false
diff --git a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-navigated-expected.txt b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-navigated-expected.txt index 352726f..d855c314 100644 --- a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-navigated-expected.txt +++ b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-navigated-expected.txt
@@ -186,6 +186,7 @@ PASS oldChildWindow.pageYOffset is newChildWindow.pageYOffset PASS oldChildWindow.performance.navigation.redirectCount is newChildWindow.performance.navigation.redirectCount PASS oldChildWindow.performance.navigation.type is newChildWindow.performance.navigation.type +PASS oldChildWindow.performance.onelementtimingbufferfull is newChildWindow.performance.onelementtimingbufferfull PASS oldChildWindow.performance.oneventtimingbufferfull is newChildWindow.performance.oneventtimingbufferfull PASS oldChildWindow.performance.onresourcetimingbufferfull is newChildWindow.performance.onresourcetimingbufferfull PASS oldChildWindow.performance.shouldYield is newChildWindow.performance.shouldYield
diff --git a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-and-gced-expected.txt b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-and-gced-expected.txt index 4ac84a4..1c749fa 100644 --- a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-and-gced-expected.txt +++ b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-and-gced-expected.txt
@@ -149,6 +149,7 @@ PASS childWindow.outerWidth is 0 PASS childWindow.pageXOffset is 0 PASS childWindow.pageYOffset is 0 +PASS childWindow.performance.onelementtimingbufferfull is null PASS childWindow.performance.onresourcetimingbufferfull is null PASS childWindow.personalbar.visible is false PASS childWindow.portalHost is null
diff --git a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-expected.txt b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-expected.txt index 6d55bba..0c66823 100644 --- a/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-expected.txt +++ b/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-expected.txt
@@ -149,6 +149,7 @@ PASS childWindow.outerWidth is 0 PASS childWindow.pageXOffset is 0 PASS childWindow.pageYOffset is 0 +PASS childWindow.performance.onelementtimingbufferfull is null PASS childWindow.performance.onresourcetimingbufferfull is null PASS childWindow.personalbar.visible is false PASS childWindow.portalHost is null
diff --git a/third_party/blink/web_tests/fast/dom/Window/window-properties-performance-expected.txt b/third_party/blink/web_tests/fast/dom/Window/window-properties-performance-expected.txt index 57bb746..be305d3 100644 --- a/third_party/blink/web_tests/fast/dom/Window/window-properties-performance-expected.txt +++ b/third_party/blink/web_tests/fast/dom/Window/window-properties-performance-expected.txt
@@ -2,6 +2,7 @@ window.performance [object Performance] window.performance.addEventListener [function] +window.performance.clearElementTimings [function] window.performance.clearEventTimings [function] window.performance.clearMarks [function] window.performance.clearMeasures [function] @@ -25,9 +26,11 @@ window.performance.navigation.toJSON [function] window.performance.navigation.type [number] window.performance.now [function] +window.performance.onelementtimingbufferfull [null] window.performance.oneventtimingbufferfull [null] window.performance.onresourcetimingbufferfull [null] window.performance.removeEventListener [function] +window.performance.setElementTimingBufferMaxSize [function] window.performance.setEventTimingBufferMaxSize [function] window.performance.setResourceTimingBufferSize [function] window.performance.shouldYield [boolean]
diff --git a/third_party/blink/web_tests/fast/mediarecorder/MediaRecorder-creation.html b/third_party/blink/web_tests/fast/mediarecorder/MediaRecorder-creation.html deleted file mode 100644 index fd0affff..0000000 --- a/third_party/blink/web_tests/fast/mediarecorder/MediaRecorder-creation.html +++ /dev/null
@@ -1,50 +0,0 @@ -<!DOCTYPE html> -<script src=../../resources/testharness.js></script> -<script src=../../resources/testharnessreport.js></script> -<script> -// This test verifies that MediaRecorder can be created with different Media -// Stream Track combinations: 1 Video Track only, 1 Audio Track only and finally -// a Media Stream with both a Video and an Audio Track. Note that recording is -// _not_ started in this test, see MediaRecorder-audio-video.html for it. - -function makeAsyncTest(constraints, verifyStream, message) { - async_test(function(test) { - - const gotStream = test.step_func(function(stream) { - verifyStream(stream); - - var recorder = new MediaRecorder(stream); - assert_equals(recorder.state, "inactive"); - assert_equals(recorder.videoBitsPerSecond, 0); - assert_equals(recorder.audioBitsPerSecond, 0); - test.done(); - }); - - const onError = test.unreached_func('Error creating MediaStream.'); - navigator.webkitGetUserMedia(constraints, gotStream, onError); - }, message); -} - -function verifyVideoOnlyStream(stream) { - assert_equals(stream.getAudioTracks().length, 0); - assert_equals(stream.getVideoTracks().length, 1); - assert_equals(stream.getVideoTracks()[0].readyState, 'live'); -} -function verifyAudioOnlyStream(stream) { - assert_equals(stream.getAudioTracks().length, 1); - assert_equals(stream.getVideoTracks().length, 0); - assert_equals(stream.getAudioTracks()[0].readyState, 'live'); -} -function verifyAudioVideoStream(stream) { - assert_equals(stream.getAudioTracks().length, 1); - assert_equals(stream.getVideoTracks().length, 1); - assert_equals(stream.getVideoTracks()[0].readyState, 'live'); - assert_equals(stream.getAudioTracks()[0].readyState, 'live'); -} - -// Note: webkitGetUserMedia() must be called with at least video or audio true. -makeAsyncTest({video:true}, verifyVideoOnlyStream, 'Video-only MediaRecorder'); -makeAsyncTest({audio:true}, verifyAudioOnlyStream, 'Audio-only MediaRecorder'); -makeAsyncTest({audio:true, video:true}, verifyAudioVideoStream, 'Video+Audio MediaRecorder'); - -</script>
diff --git a/third_party/blink/web_tests/fast/mediarecorder/MediaRecorder-detached-context.html b/third_party/blink/web_tests/fast/mediarecorder/MediaRecorder-detached-context.html deleted file mode 100644 index 63e39e0..0000000 --- a/third_party/blink/web_tests/fast/mediarecorder/MediaRecorder-detached-context.html +++ /dev/null
@@ -1,19 +0,0 @@ -<!DOCTYPE html> -<script src=../../resources/testharness.js></script> -<script src=../../resources/testharnessreport.js></script> -<body> -<script> -promise_test(async t => { - const frame = document.body.appendChild(document.createElement('iframe')); - const recorderFunc = frame.contentWindow.MediaRecorder; - frame.remove(); - try { - new recorderFunc(new MediaStream); - } catch (err) { - assert_equals(err.name, 'NotAllowedError'); - return; - } - assert_unreached('MediaRecorder should have failed'); -}, 'MediaRecorder creation with detached context'); -</script> -</body>
diff --git a/third_party/blink/web_tests/fast/scroll-snap/snaps-after-keyboard-scrolling-rtl.html b/third_party/blink/web_tests/fast/scroll-snap/snaps-after-keyboard-scrolling-rtl.html index 7a78820..d301573 100644 --- a/third_party/blink/web_tests/fast/scroll-snap/snaps-after-keyboard-scrolling-rtl.html +++ b/third_party/blink/web_tests/fast/scroll-snap/snaps-after-keyboard-scrolling-rtl.html
@@ -8,6 +8,8 @@ position: absolute; } #scroller { + position: relative; + margin-left: auto; writing-mode: vertical-rl; width: 400px; height: 400px;
diff --git a/third_party/blink/web_tests/fast/text/firstline/capitalize-transform-2.html b/third_party/blink/web_tests/fast/text/firstline/capitalize-transform-2.html new file mode 100644 index 0000000..95f4134 --- /dev/null +++ b/third_party/blink/web_tests/fast/text/firstline/capitalize-transform-2.html
@@ -0,0 +1,21 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +:<script src="../../../resources/testharness.js"></script> +<script src="../../../resources/testharnessreport.js"></script> +<style> +div::first-line { + text-transform: uppercase; +} +</style> +<!-- +Bidi reorder creates two text runs for this text. +The 2nd run starts at offset 4. +Then because the capitalized form of "ά"" is one character, +the whole string is shrunk to 3 characters, which is smaller than the +start offset of the 2nd run. +--> +<div lang=el>άά×¢</div> +<script> +test(function() { +}, "Should not crash"); +</script>
diff --git a/third_party/blink/web_tests/http/tests/devtools/layers/layer-tree-model-expected.txt b/third_party/blink/web_tests/http/tests/devtools/layers/layer-tree-model-expected.txt index c416372c..530c1610 100644 --- a/third_party/blink/web_tests/http/tests/devtools/layers/layer-tree-model-expected.txt +++ b/third_party/blink/web_tests/http/tests/devtools/layers/layer-tree-model-expected.txt
@@ -1,35 +1,32 @@ Tests general layer tree model functionality Initial layer tree -#document (7) - iframe#frame (8) - #document 200x200 (9) - #document 200x200 (10) - div#subframe1 80x80 (11) - div#a 200x200 (8) - div#b1 100x150 (9) - div#b2 110x140 (9) - div#c 90x100 (10) - div#b3 110x140 (9) +#document (6) + iframe#frame (7) + #document 200x200 (8) + div#subframe1 80x80 (9) + div#a 200x200 (7) + div#b1 100x150 (8) + div#b2 110x140 (8) + div#c 90x100 (9) + div#b3 110x140 (8) Updated layer tree -#document (7) - iframe#frame (8) - #document 200x200 (9) - #document 200x200 (10) - div#subframe1 80x80 (11) - div#a 200x200 (8) - div#b2 110x140 (9) - div#c 90x100 (10) +#document (6) + iframe#frame (7) + #document 200x200 (8) + div#subframe1 80x80 (9) + div#a 200x200 (7) + div#b2 110x140 (8) + div#c 90x100 (9) div#b1 100x150 div#b4 0x0 Updated layer geometry -#document (7) - iframe#frame (8) - #document 200x200 (9) - #document 200x200 (10) - div#subframe1 80x80 (11) - div#a 200x200 (8) - div#b2 110x140 (9) - div#c 90x80 (10) +#document (6) + iframe#frame (7) + #document 200x200 (8) + div#subframe1 80x80 (9) + div#a 200x200 (7) + div#b2 110x140 (8) + div#c 90x80 (9) div#b1 100x150 div#b4 0x0
diff --git a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/legacy-performance-memory-counters-disabled.html b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/legacy-performance-memory-counters-disabled.html new file mode 100644 index 0000000..a3524ef --- /dev/null +++ b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/legacy-performance-memory-counters-disabled.html
@@ -0,0 +1,15 @@ +<!DOCTYPE html> +<meta charset="utf-8"> + +<script src="../../../../resources/testharness.js"></script> +<script src="../../../../resources/testharnessreport.js"></script> +<script> + +test(t => { + assert_true( + performance.memory.usedJSHeapSizeWithoutExternalMemory === undefined); + assert_true( + performance.memory.totalJSHeapSizeWithoutExternalMemory === undefined); +}, "Legacy performance memory counters are disabled without Origin Trial."); + +</script>
diff --git a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/legacy-performance-memory-counters-enabled.html b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/legacy-performance-memory-counters-enabled.html new file mode 100644 index 0000000..4d6f6a9 --- /dev/null +++ b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/legacy-performance-memory-counters-enabled.html
@@ -0,0 +1,32 @@ +<!DOCTYPE html> +<meta charset="utf-8"> +<!-- Generate this token with the command: +generate_token.py --expire-timestamp=2000000000 http://127.0.0.1:8000 LegacyPerformanceMemoryCounters +--> + +<meta http-equiv="origin-trial" content="AkkvkocWTiiH0+VhdTlxue2ibIiQ0Gy2Dp4HL5CJEEDHqSovu8L6CCqmHRz7PDWm9EgLLj9xpGXbvxxDdaN8cwAAAABneyJvcmlnaW4iOiAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIiwgImZlYXR1cmUiOiAiTGVnYWN5UGVyZm9ybWFuY2VNZW1vcnlDb3VudGVycyIsICJleHBpcnkiOiAyMDAwMDAwMDAwfQ==" /> + +<script src="../../../../resources/testharness.js"></script> +<script src="../../../../resources/testharnessreport.js"></script> +<script> + +test(t => { + assert_idl_attribute(performance.memory, + "usedJSHeapSizeWithoutExternalMemory", + "used JS heap size without external memory"); + assert_idl_attribute(performance.memory, + "totalJSHeapSizeWithoutExternalMemory", + "total JS heap size without external memory"); + const snapshot = performance.memory; + assert_less_than_equal(snapshot.usedJSHeapSizeWithoutExternalMemory, + snapshot.usedJSHeapSize, + "used without external memory <= used overall"); + assert_less_than_equal(snapshot.totalJSHeapSizeWithoutExternalMemory, + snapshot.totalJSHeapSize, + "total without external memory <= total overall"); + assert_less_than_equal(snapshot.usedJSHeapSizeWithoutExternalMemory, + snapshot.totalJSHeapSizeWithoutExternalMemory, + "used without external memory <= total without external memory"); +}, "Test legacy performance memory counters are enabled via origin trial."); + +</script>
diff --git a/third_party/blink/web_tests/http/tests/performance-timing/element-timing/buffer-before-onload.html b/third_party/blink/web_tests/http/tests/performance-timing/element-timing/buffer-before-onload.html new file mode 100644 index 0000000..43f9580 --- /dev/null +++ b/third_party/blink/web_tests/http/tests/performance-timing/element-timing/buffer-before-onload.html
@@ -0,0 +1,34 @@ +<!DOCTYPE html> +<html> +<meta charset=utf-8 /> +<title>Element Timing: buffer elements before onload</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="resources/element-timing-helpers.js"></script> +<body> +<img src=/resources/slow-image.php?name=square20.png&mimeType=image&sleep=500> +<script> + /* + In this test, a slow image is added to the frame to delay onload. The entry + for the other image should be available before onload, and thus delivered to + the performance timeline. + */ + async_test(function(t) { + beforeRender = performance.now(); + const img = document.createElement('img'); + img.src = '/resources/square.png'; + img.setAttribute('elementtiming', 'my_image'); + document.body.appendChild(img); + window.onload = t.step_func_done( () => { + const entries = performance.getEntriesByName('my_image'); + assert_equals(entries.length, 1); + assert_greater_than_equal(performance.getEntriesByType('element').length, 1); + assert_equals(performance.getEntries().filter(e => e.name === 'my_image').length, 1); + const entry = entries[0]; + checkElement(entry, 'my_image', beforeRender); + }); + }, "Element Timing: image loads before onload."); + +</script> +</body> +</html>
diff --git a/third_party/blink/web_tests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/blink/web_tests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt index 91f680e..ad381a9c 100644 --- a/third_party/blink/web_tests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt +++ b/third_party/blink/web_tests/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -983,9 +983,11 @@ method respondWith interface Performance : EventTarget attribute @@toStringTag + getter onelementtimingbufferfull getter oneventtimingbufferfull getter onresourcetimingbufferfull getter timeOrigin + method clearElementTimings method clearEventTimings method clearMarks method clearMeasures @@ -997,9 +999,11 @@ method mark method measure method now + method setElementTimingBufferMaxSize method setEventTimingBufferMaxSize method setResourceTimingBufferSize method toJSON + setter onelementtimingbufferfull setter oneventtimingbufferfull setter onresourcetimingbufferfull interface PerformanceEntry
diff --git a/third_party/blink/web_tests/http/tests/webfont/font-face-in-multiple-sets.html b/third_party/blink/web_tests/http/tests/webfont/font-face-in-multiple-sets.html new file mode 100644 index 0000000..66def1b3 --- /dev/null +++ b/third_party/blink/web_tests/http/tests/webfont/font-face-in-multiple-sets.html
@@ -0,0 +1,13 @@ +<body> +<script src="../resources/testharness.js"></script> +<script src="../resources/testharnessreport.js"></script> +<iframe id="i"></iframe> +<script> +async_test(async function(t) { + let face = new FontFace("face", "url(../resources/Ahem.ttf)", {}); + await face.load(); + i.contentDocument.fonts.add(face); + document.fonts.add(face); + t.done(); +}); +</script>
diff --git a/third_party/blink/web_tests/paint/invalidation/compositing/scrolling-neg-z-index-descendants-expected.txt b/third_party/blink/web_tests/paint/invalidation/compositing/scrolling-neg-z-index-descendants-expected.txt index 77025f8e2..2ef9ba3 100644 --- a/third_party/blink/web_tests/paint/invalidation/compositing/scrolling-neg-z-index-descendants-expected.txt +++ b/third_party/blink/web_tests/paint/invalidation/compositing/scrolling-neg-z-index-descendants-expected.txt
@@ -56,8 +56,7 @@ "name": "Overflow Controls Host Layer", "position": [8, 8], "bounds": [102, 302], - "drawsContent": false, - "backfaceVisibility": "hidden" + "drawsContent": false }, { "name": "Horizontal Scrollbar Layer",
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt index 14cad64..3f2c192 100644 --- a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt +++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt
@@ -60,6 +60,7 @@ PASS window.cached_navigator_userActivation.hasBeenActive is false PASS window.cached_navigator_userActivation.isActive is false PASS window.cached_navigator_xr.ondevicechange is null +PASS window.cached_performance.onelementtimingbufferfull is null PASS window.cached_performance.oneventtimingbufferfull is null PASS window.cached_performance.onresourcetimingbufferfull is null PASS window.cached_performance.shouldYield is false
diff --git a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt index f4cc514..d2d9449 100644 --- a/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt +++ b/third_party/blink/web_tests/virtual/user-activation-v2/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt
@@ -60,6 +60,7 @@ PASS window.cached_navigator_userActivation.hasBeenActive is false PASS window.cached_navigator_userActivation.isActive is false PASS window.cached_navigator_xr.ondevicechange is null +PASS window.cached_performance.onelementtimingbufferfull is null PASS window.cached_performance.oneventtimingbufferfull is null PASS window.cached_performance.onresourcetimingbufferfull is null PASS window.cached_performance.shouldYield is false
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-dedicated-worker-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-dedicated-worker-expected.txt index 3b2d26c..72af7a8 100644 --- a/third_party/blink/web_tests/webexposed/global-interface-listing-dedicated-worker-expected.txt +++ b/third_party/blink/web_tests/webexposed/global-interface-listing-dedicated-worker-expected.txt
@@ -909,9 +909,11 @@ [Worker] method set [Worker] interface Performance : EventTarget [Worker] attribute @@toStringTag +[Worker] getter onelementtimingbufferfull [Worker] getter oneventtimingbufferfull [Worker] getter onresourcetimingbufferfull [Worker] getter timeOrigin +[Worker] method clearElementTimings [Worker] method clearEventTimings [Worker] method clearMarks [Worker] method clearMeasures @@ -923,9 +925,11 @@ [Worker] method mark [Worker] method measure [Worker] method now +[Worker] method setElementTimingBufferMaxSize [Worker] method setEventTimingBufferMaxSize [Worker] method setResourceTimingBufferSize [Worker] method toJSON +[Worker] setter onelementtimingbufferfull [Worker] setter oneventtimingbufferfull [Worker] setter onresourcetimingbufferfull [Worker] interface PerformanceEntry
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt index d42c6ef..fd11d58 100644 --- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt +++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -5197,11 +5197,13 @@ attribute @@toStringTag getter memory getter navigation + getter onelementtimingbufferfull getter oneventtimingbufferfull getter onresourcetimingbufferfull getter shouldYield getter timeOrigin getter timing + method clearElementTimings method clearEventTimings method clearMarks method clearMeasures @@ -5213,9 +5215,11 @@ method mark method measure method now + method setElementTimingBufferMaxSize method setEventTimingBufferMaxSize method setResourceTimingBufferSize method toJSON + setter onelementtimingbufferfull setter oneventtimingbufferfull setter onresourcetimingbufferfull interface PerformanceElementTiming : PerformanceEntry @@ -5420,6 +5424,9 @@ attribute @@toStringTag getter state method constructor +interface PortalActivateEvent : Event + attribute @@toStringTag + method constructor interface PortalHost : EventTarget attribute @@toStringTag method constructor
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-shared-worker-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-shared-worker-expected.txt index 9fd2be3..c4c8024 100644 --- a/third_party/blink/web_tests/webexposed/global-interface-listing-shared-worker-expected.txt +++ b/third_party/blink/web_tests/webexposed/global-interface-listing-shared-worker-expected.txt
@@ -904,9 +904,11 @@ [Worker] method set [Worker] interface Performance : EventTarget [Worker] attribute @@toStringTag +[Worker] getter onelementtimingbufferfull [Worker] getter oneventtimingbufferfull [Worker] getter onresourcetimingbufferfull [Worker] getter timeOrigin +[Worker] method clearElementTimings [Worker] method clearEventTimings [Worker] method clearMarks [Worker] method clearMeasures @@ -918,9 +920,11 @@ [Worker] method mark [Worker] method measure [Worker] method now +[Worker] method setElementTimingBufferMaxSize [Worker] method setEventTimingBufferMaxSize [Worker] method setResourceTimingBufferSize [Worker] method toJSON +[Worker] setter onelementtimingbufferfull [Worker] setter oneventtimingbufferfull [Worker] setter onresourcetimingbufferfull [Worker] interface PerformanceEntry
diff --git a/third_party/feed/README.chromium b/third_party/feed/README.chromium index 35bba1a..9f8130b 100644 --- a/third_party/feed/README.chromium +++ b/third_party/feed/README.chromium
@@ -2,7 +2,7 @@ Short name: feed URL: https://chromium.googlesource.com/feed Version: 0 -Revision: d3514e6cb9ac00229a76e2aedfa367fa71fa4bd2 +Revision: 4da2d86623e7cb85126f5ef2c6894a76941e8c69 License: Apache 2.0 License File: LICENSE Security Critical: yes
diff --git a/third_party/feed/java_sources.gni b/third_party/feed/java_sources.gni index 0000d38..aa7e3930 100644 --- a/third_party/feed/java_sources.gni +++ b/third_party/feed/java_sources.gni
@@ -83,6 +83,7 @@ "src/src/main/java/com/google/android/libraries/feed/common/concurrent/MainThreadRunner.java", "src/src/main/java/com/google/android/libraries/feed/common/concurrent/SimpleSettableFuture.java", "src/src/main/java/com/google/android/libraries/feed/common/concurrent/TaskQueue.java", + "src/src/main/java/com/google/android/libraries/feed/common/feedobservable/FeedObservable.java", "src/src/main/java/com/google/android/libraries/feed/common/functional/Committer.java", "src/src/main/java/com/google/android/libraries/feed/common/functional/Consumer.java", "src/src/main/java/com/google/android/libraries/feed/common/functional/Function.java", @@ -193,6 +194,7 @@ "src/src/main/java/com/google/android/libraries/feed/hostimpl/storage/PersistentJournalStorage.java", "src/src/main/java/com/google/android/libraries/feed/mocknetworkclient/MockPushServer.java", "src/src/main/java/com/google/android/libraries/feed/mocknetworkclient/MockServerNetworkClient.java", + "src/src/main/java/com/google/android/libraries/feed/piet/ActionBinding.java", "src/src/main/java/com/google/android/libraries/feed/piet/AdapterFactory.java", "src/src/main/java/com/google/android/libraries/feed/piet/AdapterParameters.java", "src/src/main/java/com/google/android/libraries/feed/piet/ChunkedTextElementAdapter.java",
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index 455ea1c..3470d54 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -636,6 +636,7 @@ 'tryserver.chromium.chromiumos': { 'chromeos-amd64-generic-rel': 'cros_chrome_sdk_headless_ozone_dcheck_always_on', 'chromeos-daisy-rel': 'cros_chrome_sdk_dchecks_always_on', + 'chromeos-kevin-rel': 'cros_chrome_sdk_headless_ozone_dcheck_always_on', 'linux-chromeos-rel': 'chromeos_with_codecs_release_trybot', 'linux-chromeos-compile-dbg': 'chromeos_with_codecs_debug_bot', 'linux-chromeos-dbg': 'chromeos_with_codecs_debug_bot', @@ -790,7 +791,7 @@ ], 'android_binary_size': [ - 'android', 'chrome_with_codecs', 'goma', 'minimal_symbols', 'official_optimize', + 'android', 'android_config_check', 'chrome_with_codecs', 'goma', 'minimal_symbols', 'official_optimize', ], 'android_cast_debug_static_bot': [ @@ -1813,6 +1814,10 @@ 'mixins': ['android_without_codecs', 'chrome_with_codecs'], }, + 'android_config_check': { + 'gn_args': 'check_android_configuration = true' + }, + 'android_without_codecs': { 'gn_args': 'target_os="android"', },
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index d798e00..89e96fe 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -21236,6 +21236,7 @@ <int value="2725" label="TrustedTypesAssignmentError"/> <int value="2726" label="BadgeSet"/> <int value="2727" label="BadgeClear"/> + <int value="2728" label="ElementTimingExplicitlyRequested"/> </enum> <enum name="FeaturePolicyFeature"> @@ -31217,6 +31218,7 @@ <int value="-351552989" label="disable-hosted-apps-in-windows"/> <int value="-351127770" label="enable-offline-pages-as-bookmarks"/> <int value="-349437334" label="UseDdljsonApi:disabled"/> + <int value="-349380607" label="AndroidNightMode:disabled"/> <int value="-349057743" label="extensions-on-chrome-urls"/> <int value="-346413328" label="UseNewAcceptLanguageHeader:disabled"/> <int value="-345838366" label="enable-hosted-apps-in-windows"/> @@ -32044,6 +32046,7 @@ <int value="1166169237" label="disable-delay-agnostic-aec"/> <int value="1166789664" label="SyncPseudoUSSAppList:disabled"/> <int value="1166897718" label="TextSuggestionsTouchBar:disabled"/> + <int value="1167350114" label="AndroidNightMode:enabled"/> <int value="1167613030" label="enable-permission-action-reporting"/> <int value="1169418814" label="ManualFallbacksFilling:enabled"/> <int value="1174088940" label="enable-wasm"/>
diff --git a/tools/perf/benchmark.csv b/tools/perf/benchmark.csv index d9f494b..49bf4b4 100644 --- a/tools/perf/benchmark.csv +++ b/tools/perf/benchmark.csv
@@ -57,17 +57,17 @@ startup.mobile,"pasko@chromium.org, chrome-android-perf-status@chromium.org",Speed>Metrics>SystemHealthRegressions,, supersize_archive,agrieve@chromium.org,,, system_health.common_desktop,"charliea@chromium.org, sullivan@chromium.org, tdresser@chromium.org, chrome-speed-metrics-dev@chromium.org",Speed>Metrics>SystemHealthRegressions,https://bit.ly/system-health-benchmarks,"2016,2018,accessibility,emerging_market,health_check,images,infinite_scroll,international,javascript_heavy,keyboard_input,scroll,tabs_switching,webgl" -system_health.common_mobile,"charliea@chromium.org, sullivan@chromium.org, tdresser@chromium.org, perezju@chromium.org, chrome-speed-metrics-dev@chromium.org",Speed>Metrics>SystemHealthRegressions,https://bit.ly/system-health-benchmarks,"2016,2018,emerging_market,health_check,infinite_scroll,international,javascript_heavy" +system_health.common_mobile,"charliea@chromium.org, sullivan@chromium.org, tdresser@chromium.org, perezju@chromium.org, chrome-speed-metrics-dev@chromium.org",Speed>Metrics>SystemHealthRegressions,https://bit.ly/system-health-benchmarks,"2016,2018,2019,emerging_market,health_check,images,infinite_scroll,international,javascript_heavy" system_health.memory_desktop,perezju@chromium.org,,https://bit.ly/system-health-benchmarks,"2016,2018,accessibility,emerging_market,health_check,images,infinite_scroll,international,javascript_heavy,keyboard_input,scroll,tabs_switching,webgl" -system_health.memory_mobile,perezju@chromium.org,,https://bit.ly/system-health-benchmarks,"2016,2018,emerging_market,health_check,infinite_scroll,international,javascript_heavy" +system_health.memory_mobile,perezju@chromium.org,,https://bit.ly/system-health-benchmarks,"2016,2018,2019,emerging_market,health_check,images,infinite_scroll,international,javascript_heavy" system_health.webview_startup,"perezju@chromium.org, torne@chromium.org, changwan@chromium.org",Mobile>WebView>Perf,,"2016,health_check" tab_switching.typical_25,vovoy@chromium.org,OS>Performance,,"2016,tabs_switching" tracing.tracing_with_background_memory_infra,ssid@chromium.org,,, tracing_perftests,"kkraynov@chromium.org, primiano@chromium.org",,, v8.browsing_desktop,"mythria@chromium.org, ulan@chromium.org",Blink>JavaScript,,"2016,2018,health_check,images,infinite_scroll,international,javascript_heavy,webgl" v8.browsing_desktop-future,"mythria@chromium.org, ulan@chromium.org",Blink>JavaScript,,"2016,2018,health_check,images,infinite_scroll,international,javascript_heavy,webgl" -v8.browsing_mobile,"mythria@chromium.org, ulan@chromium.org",Blink>JavaScript,,"2016,2018,emerging_market,health_check,infinite_scroll,international,javascript_heavy" -v8.browsing_mobile-future,"mythria@chromium.org, ulan@chromium.org",Blink>JavaScript,,"2016,2018,emerging_market,health_check,infinite_scroll,international,javascript_heavy" +v8.browsing_mobile,"mythria@chromium.org, ulan@chromium.org",Blink>JavaScript,,"2016,2018,2019,emerging_market,health_check,images,infinite_scroll,international,javascript_heavy" +v8.browsing_mobile-future,"mythria@chromium.org, ulan@chromium.org",Blink>JavaScript,,"2016,2018,2019,emerging_market,health_check,images,infinite_scroll,international,javascript_heavy" v8.runtime_stats.top_25,"cbruni@chromium.org, mythria@chromium.org",Blink>JavaScript,,"cold,hot,warm" validating_command_buffer_perftests,"piman@chromium.org, chrome-gpu-perf-owners@chromium.org",Internals>GPU,, views_perftests,tapted@chromium.org,Internals>Views,,
diff --git a/tools/perf/page_sets/data/system_health_mobile.json b/tools/perf/page_sets/data/system_health_mobile.json index 9368b1d..6d4f926 100644 --- a/tools/perf/page_sets/data/system_health_mobile.json +++ b/tools/perf/page_sets/data/system_health_mobile.json
@@ -27,6 +27,9 @@ "browse:media:flickr_infinite_scroll": { "DEFAULT": "system_health_mobile_062.wprgo" }, + "browse:media:googleplaystore:2019": { + "DEFAULT": "system_health_mobile_4413a28712.wprgo" + }, "browse:media:imgur": { "DEFAULT": "system_health_mobile_035.wprgo" },
diff --git a/tools/perf/page_sets/data/system_health_mobile_4413a28712.wprgo.sha1 b/tools/perf/page_sets/data/system_health_mobile_4413a28712.wprgo.sha1 new file mode 100644 index 0000000..cce2d85a --- /dev/null +++ b/tools/perf/page_sets/data/system_health_mobile_4413a28712.wprgo.sha1
@@ -0,0 +1 @@ +4413a287121aa50b3b64e787e391d4a7a7c79a08 \ No newline at end of file
diff --git a/tools/perf/page_sets/system_health/browsing_stories.py b/tools/perf/page_sets/system_health/browsing_stories.py index 9d93a52..4b834e8 100644 --- a/tools/perf/page_sets/system_health/browsing_stories.py +++ b/tools/perf/page_sets/system_health/browsing_stories.py
@@ -763,6 +763,28 @@ if not self.SKIP_LOGIN: action_runner.Wait(2) +class GooglePlayStoreMobileStory(_MediaBrowsingStory): + """ Navigate to the movies page of Google Play Store, scroll to the bottom, + and click "see more" of a middle category (last before second scroll). + """ + NAME = 'browse:media:googleplaystore:2019' + URL = 'https://play.google.com/store/movies' + ITEM_SELECTOR = '' + SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY + IS_SINGLE_PAGE_APP = True + TAGS = [story_tags.EMERGING_MARKET, story_tags.YEAR_2019, story_tags.IMAGES] + # intends to select the last category of movies and its "see more" button + _SEE_MORE_SELECTOR = ('div[class*="cluster-container"]:last-of-type ' + 'a[class*="see-more"]') + + def _DidLoadDocument(self, action_runner): + action_runner.ScrollPage() + action_runner.Wait(2) + action_runner.ScrollPage() + action_runner.Wait(2) + action_runner.MouseClick(self._SEE_MORE_SELECTOR) + action_runner.Wait(2) + action_runner.ScrollPage() class GooglePlayStoreDesktopStory(_MediaBrowsingStory): """ Navigate to the movies page of Google Play Store, scroll to the bottom,
diff --git a/tools/vscode/settings.json5 b/tools/vscode/settings.json5 index 055f7faa..5fd0949 100644 --- a/tools/vscode/settings.json5 +++ b/tools/vscode/settings.json5
@@ -2,8 +2,8 @@ // Suggested vscode default settings for simplifying initial setup. These // settings are hoped to be convenient and helpful for those beginning to use // vscode with Chrome. Please modify and change as necessary. - // All settings are optional, but some more "optional" settings are disabled - // by default. Feel free to enable them. + // All settings are optional, but some more "optional" settings at the end + // are disabled by default. Feel free to enable them. // Default tab size of 2, for consistency with internal codebase. "editor.tabSize": 2, @@ -13,22 +13,8 @@ "editor.rulers": [80], // Trim tailing whitespace on save. "files.trimTrailingWhitespace": true, - - // Optional: Highlight current line at the left of the editor. - // "editor.renderLineHighlight": "gutter", - // Optional: Don't automatically add closing brackets. It gets in the way. - // "editor.autoClosingBrackets": false, - // Optional: Enable a tiny 30k feet view of your doc. - // "editor.minimap.enabled": true, - // "editor.minimap.maxColumn": 80, - // "editor.minimap.renderCharacters": false, - // Optional: Don't continuously fetch remote changes. - //"git.autofetch": false, - // Optional: Do not open files in 'preview' mode. Opening a new file in can - // replace an existing one in preview mode, which can be confusing. - //"workbench.editor.enablePreview": false, - // Optional: Same for files opened from quick open (Ctrl+P). - //"workbench.editor.enablePreviewFromQuickOpen": false, + // Forces LF instead of "auto" which uses CRLF on Windows. + "files.eol": "\n", "files.associations": { // Adds xml syntax highlighting for grd files. @@ -67,5 +53,21 @@ "ycmd.path": "<full_path_to_your_home>/.ycmd", // Please replace this path "ycmd.global_extra_config": "${workspaceRoot}/tools/vim/chromium.ycm_extra_conf.py", "ycmd.confirm_extra_conf": false, + + // Optional: Highlight current line at the left of the editor. + // "editor.renderLineHighlight": "gutter", + // Optional: Don't automatically add closing brackets. It gets in the way. + // "editor.autoClosingBrackets": false, + // Optional: Enable a tiny 30k feet view of your doc. + // "editor.minimap.enabled": true, + // "editor.minimap.maxColumn": 80, + // "editor.minimap.renderCharacters": false, + // Optional: Don't continuously fetch remote changes. + //"git.autofetch": false, + // Optional: Do not open files in 'preview' mode. Opening a new file in can + // replace an existing one in preview mode, which can be confusing. + //"workbench.editor.enablePreview": false, + // Optional: Same for files opened from quick open (Ctrl+P). + //"workbench.editor.enablePreviewFromQuickOpen": false, }
diff --git a/ui/android/BUILD.gn b/ui/android/BUILD.gn index 26921a0..d25ef60c 100644 --- a/ui/android/BUILD.gn +++ b/ui/android/BUILD.gn
@@ -2,12 +2,20 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//build/buildflag_header.gni") import("//build/config/android/rules.gni") import("//build/config/locales.gni") import("//testing/test.gni") +import("//ui/android/features.gni") assert(is_android) +# Generate a buildflag header for compile-time checking of android night mode support. +buildflag_header("buildflags") { + header = "buildflags.h" + flags = [ "ENABLE_ANDROID_NIGHT_MODE=$enable_android_night_mode" ] +} + component("android") { output_name = "ui_android" sources = [ @@ -55,6 +63,7 @@ defines = [ "UI_ANDROID_IMPLEMENTATION" ] deps = [ + ":buildflags", ":java_enums_srcjar", ":ui_android_jni_headers", "//base", @@ -215,6 +224,11 @@ android_resources("ui_java_resources") { custom_package = "org.chromium.ui" resource_dirs = [ "java/res" ] + + if (enable_android_night_mode) { + resource_dirs += [ "//ui/android/java/res_night" ] + } + deps = [ ":ui_locale_string_resources", ":ui_strings_grd",
diff --git a/ui/android/features.gni b/ui/android/features.gni new file mode 100644 index 0000000..a8dfa500 --- /dev/null +++ b/ui/android/features.gni
@@ -0,0 +1,7 @@ +# 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. + +declare_args() { + enable_android_night_mode = false +}
diff --git a/ui/android/java/res_night/values-night/colors.xml b/ui/android/java/res_night/values-night/colors.xml new file mode 100644 index 0000000..8a868ef --- /dev/null +++ b/ui/android/java/res_night/values-night/colors.xml
@@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- 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. --> + +<resources> + <!-- TODO(huayinz): Change the colors. --> + <color name="default_text_color">@android:color/holo_green_dark</color> + <color name="default_text_color_secondary">@android:color/holo_green_light</color> +</resources> \ No newline at end of file
diff --git a/ui/android/java/src/org/chromium/ui/base/Clipboard.java b/ui/android/java/src/org/chromium/ui/base/Clipboard.java index d7e95dd..e3d2b767 100644 --- a/ui/android/java/src/org/chromium/ui/base/Clipboard.java +++ b/ui/android/java/src/org/chromium/ui/base/Clipboard.java
@@ -189,6 +189,16 @@ if (nativeClipboardAndroid != 0) nativeOnPrimaryClipChanged(nativeClipboardAndroid); } + /** + * Copy the specified URL to the clipboard and show a toast indicating the action occurred. + * @param url The URL to copy to the clipboard. + */ + public void copyUrlToClipboard(String url) { + ClipData clip = ClipData.newPlainText("url", url); + mClipboardManager.setPrimaryClip(clip); + Toast.makeText(mContext, R.string.url_copied, Toast.LENGTH_SHORT).show(); + } + private native long nativeInit(); private native void nativeOnPrimaryClipChanged(long nativeClipboardAndroid); }
diff --git a/ui/android/java/strings/android_ui_strings.grd b/ui/android/java/strings/android_ui_strings.grd index 9bf37d6..f2abb79 100644 --- a/ui/android/java/strings/android_ui_strings.grd +++ b/ui/android/java/strings/android_ui_strings.grd
@@ -114,6 +114,9 @@ <message name="IDS_COPY_TO_CLIPBOARD_FAILURE_MESSAGE" desc="Notification for when copying to the clipboard fails. [CHAR-LIMIT=64]"> Failed to copy to the clipboard </message> + <message name="IDS_URL_COPIED" desc="Notification telling the user that the url has been copied to clipboard. [CHAR-LIMIT=32]"> + URL copied. + </message> </messages> </release> </grit>
diff --git a/ui/base/BUILD.gn b/ui/base/BUILD.gn index bca0714..6509aacf 100644 --- a/ui/base/BUILD.gn +++ b/ui/base/BUILD.gn
@@ -515,7 +515,10 @@ } if (is_chromeos) { - deps += [ "//chromeos" ] + deps += [ + "//chromeos", + "//chromeos/dbus", + ] sources -= [ "idle/idle_linux.cc" ] }
diff --git a/ui/base/test/ui_controls_internal_win.cc b/ui/base/test/ui_controls_internal_win.cc index 45e2493..bee7c99a 100644 --- a/ui/base/test/ui_controls_internal_win.cc +++ b/ui/base/test/ui_controls_internal_win.cc
@@ -4,6 +4,8 @@ #include "ui/base/test/ui_controls_internal_win.h" +#include <windows.h> + #include <algorithm> #include <cmath> #include <utility> @@ -13,8 +15,6 @@ #include "base/location.h" #include "base/logging.h" #include "base/macros.h" -#include "base/memory/ref_counted.h" -#include "base/memory/scoped_refptr.h" #include "base/single_thread_task_runner.h" #include "base/test/test_timeouts.h" #include "base/threading/thread_checker.h" @@ -31,46 +31,45 @@ // InputDispatcher is used to listen for a mouse/keyboard event. Only one // instance may be alive at a time. The callback is run when the appropriate // event is received. -class InputDispatcher : public base::RefCounted<InputDispatcher> { +class InputDispatcher { public: - // Constructs a dispatcher that will invoke |callback| when |message_type| is - // received. The returned instance does not hold a ref on itself to keep it - // alive while waiting for messages. The caller is responsible for adding one - // ref before returning to the message loop. The instance will release this - // reference when the message is received. - static scoped_refptr<InputDispatcher> CreateForMessage( - WPARAM message_type, - base::OnceClosure callback); + // Constructs an InputDispatcher that will invoke |callback| when + // |message_type| is received. This must be invoked on thread, after the input + // is sent but before it is processed. + static void CreateForMessage(base::OnceClosure callback, WPARAM message_type); - // Constructs a dispatcher that will invoke |callback| when a mouse move - // message has been received. Upon receipt, an error message is logged if the - // destination of the move is not |screen_point|. |callback| is run regardless - // after a sufficiently long delay. This generally happens when another - // process has a window over the test's window, or if |screen_point| is not - // over a window owned by the test. The returned instance does not hold a ref - // on itself to keep it alive while waiting for messages. The caller is - // responsible for adding one ref before returning to the message loop. The - // instance will release this reference when the message is received. - static scoped_refptr<InputDispatcher> CreateForMouseMove( - const gfx::Point& screen_point, - base::OnceClosure callback); + // Special case of CreateForMessage() for WM_KEYUP (can await multiple events + // when modifiers are involved). + static void CreateForKeyUp(base::OnceClosure callback, + int num_keyups_awaited); + + // Special case of CreateForMessage() for WM_MOUSEMOVE. Upon receipt, an error + // message is logged if the destination of the move is not |screen_point|. + // |callback| is run regardless after a sufficiently long delay. This + // generally happens when another process has a window over the test's window, + // or if |screen_point| is not over a window owned by the test. + static void CreateForMouseMove(base::OnceClosure callback, + const gfx::Point& screen_point); private: - template <typename T, typename... Args> - friend scoped_refptr<T> base::MakeRefCounted(Args&&... args); - friend class base::RefCounted<InputDispatcher>; + // Generic message + InputDispatcher(base::OnceClosure callback, WPARAM message_waiting_for); - InputDispatcher(WPARAM message_waiting_for, - const gfx::Point& screen_point, - base::OnceClosure callback); + // WM_KEYUP + InputDispatcher(base::OnceClosure callback, + WPARAM message_waiting_for, + int num_keyups_awaited); + + // WM_MOUSEMOVE + InputDispatcher(base::OnceClosure callback, + WPARAM message_waiting_for, + const gfx::Point& screen_point); + ~InputDispatcher(); // Installs the dispatcher as the current hook. void InstallHook(); - // Uninstalls the hook set in InstallHook. - void UninstallHook(); - // Callback from hook when a mouse message is received. static LRESULT CALLBACK MouseHook(int n_code, WPARAM w_param, LPARAM l_param); @@ -103,10 +102,14 @@ // The callback to run when the desired message is received. base::OnceClosure callback_; - // The message on which the instance is waiting -- unsed for WM_KEYUP + // The message on which the instance is waiting -- unused for WM_KEYUP // messages. const WPARAM message_waiting_for_; + // The number of WM_KEYUP messages to receive before dispatching |callback_|. + // Only relevant when |message_waiting_for_| is WM_KEYUP. + int num_keyups_awaited_ = 0; + // The desired mouse position for a mouse move event. const gfx::Point expected_mouse_location_; @@ -122,35 +125,65 @@ HHOOK InputDispatcher::next_hook_ = nullptr; // static -scoped_refptr<InputDispatcher> InputDispatcher::CreateForMessage( - WPARAM message_type, - base::OnceClosure callback) { +void InputDispatcher::CreateForMessage(base::OnceClosure callback, + WPARAM message_type) { DCHECK_NE(message_type, static_cast<WPARAM>(WM_MOUSEMOVE)); - return base::MakeRefCounted<InputDispatcher>(message_type, gfx::Point(0, 0), - std::move(callback)); + DCHECK_NE(message_type, static_cast<WPARAM>(WM_KEYUP)); + + // Owns self. + new InputDispatcher(std::move(callback), message_type); } // static -scoped_refptr<InputDispatcher> InputDispatcher::CreateForMouseMove( - const gfx::Point& screen_point, - base::OnceClosure callback) { - return base::MakeRefCounted<InputDispatcher>(WM_MOUSEMOVE, screen_point, - std::move(callback)); +void InputDispatcher::CreateForKeyUp(base::OnceClosure callback, + int num_keyups_awaited) { + // Owns self. + new InputDispatcher(std::move(callback), WM_KEYUP, num_keyups_awaited); } -InputDispatcher::InputDispatcher(WPARAM message_waiting_for, - const gfx::Point& screen_point, - base::OnceClosure callback) +// static +void InputDispatcher::CreateForMouseMove(base::OnceClosure callback, + const gfx::Point& screen_point) { + // Owns self. + new InputDispatcher(std::move(callback), WM_MOUSEMOVE, screen_point); +} + +InputDispatcher::InputDispatcher(base::OnceClosure callback, + WPARAM message_waiting_for) + : callback_(std::move(callback)), + message_waiting_for_(message_waiting_for), + weak_factory_(this) { + InstallHook(); +} + +InputDispatcher::InputDispatcher(base::OnceClosure callback, + WPARAM message_waiting_for, + int num_keyups_awaited) + : callback_(std::move(callback)), + message_waiting_for_(message_waiting_for), + num_keyups_awaited_(num_keyups_awaited), + weak_factory_(this) { + DCHECK_EQ(message_waiting_for_, static_cast<WPARAM>(WM_KEYUP)); + InstallHook(); +} + +InputDispatcher::InputDispatcher(base::OnceClosure callback, + WPARAM message_waiting_for, + const gfx::Point& screen_point) : callback_(std::move(callback)), message_waiting_for_(message_waiting_for), expected_mouse_location_(screen_point), weak_factory_(this) { + DCHECK_EQ(message_waiting_for_, static_cast<WPARAM>(WM_MOUSEMOVE)); InstallHook(); } InputDispatcher::~InputDispatcher() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - UninstallHook(); + DCHECK_EQ(current_dispatcher_, this); + current_dispatcher_ = nullptr; + UnhookWindowsHookEx(next_hook_); + next_hook_ = nullptr; } void InputDispatcher::InstallHook() { @@ -180,17 +213,7 @@ } next_hook_ = SetWindowsHookEx(hook_type, hook_function, nullptr, GetCurrentThreadId()); - DCHECK(next_hook_); -} - -void InputDispatcher::UninstallHook() { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - if (current_dispatcher_ == this) { - current_dispatcher_ = nullptr; - UnhookWindowsHookEx(next_hook_); - next_hook_ = nullptr; - weak_factory_.InvalidateWeakPtrs(); - } + DPCHECK(next_hook_); } // static @@ -214,10 +237,27 @@ HHOOK next_hook = next_hook_; if (n_code == HC_ACTION) { DCHECK(current_dispatcher_); - if (l_param & (1 << 30)) { - // Only send on key up. + // Only send when the key is transitioning from pressed to released. Note + // that the documentation for the bit state on KeyboardProc [1] can lead to + // confusion. The relevant information is that the transition state (bit 31 + // -- zero-based) is always 1 for WM_KEYUP. + // [1] + // https://msdn.microsoft.com/en-us/library/windows/desktop/ms644984.aspx + // + // While this documentation states that the previous key state (bit 30) is + // always 1 on WM_KEYUP it has been observed to be 0 when the preceding + // WM_KEYDOWN is intercepted (e.g., by an extension hooking a keyboard + // shortcut). + // + // And to add to the confusion about bit 30, the documentation for WM_KEYUP + // [2] and for general keyboard input [3] contradict each other, one saying + // it's always set to 1, the other saying it's always set to 0 on + // WM_KEYUP... + // [2] https://docs.microsoft.com/en-us/windows/desktop/inputdev/wm-keyup + // [3] + // https://docs.microsoft.com/en-us/windows/desktop/inputdev/about-keyboard-input#keystroke-message-flags + if (l_param & (1 << 31)) current_dispatcher_->MatchingMessageFound(); - } } return CallNextHookEx(next_hook, n_code, w_param, l_param); } @@ -254,12 +294,15 @@ void InputDispatcher::MatchingMessageFound() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - UninstallHook(); - // The hook proc is invoked before the message is process. Post a task to run - // the callback so that handling of this event completes first. + + if (message_waiting_for_ == WM_KEYUP && --num_keyups_awaited_ > 0) + return; + + // The hook proc is invoked before the message is processed. Post a task to + // run the callback so that handling of this event completes first. base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, std::move(callback_)); - Release(); + delete this; } void InputDispatcher::OnTimeout() { @@ -377,10 +420,6 @@ if (window && ::GetForegroundWindow() != target_window) return false; - scoped_refptr<InputDispatcher> dispatcher; - if (task) - dispatcher = InputDispatcher::CreateForMessage(WM_KEYUP, std::move(task)); - // If a pop-up menu is open, it won't receive events sent using SendInput. // Check for a pop-up menu using its window class (#32768) and if one // exists, send the key event directly there. @@ -391,8 +430,8 @@ ::SendMessage(popup_menu, WM_KEYDOWN, w_param, l_param); ::SendMessage(popup_menu, WM_KEYUP, w_param, l_param); - if (dispatcher) - dispatcher->AddRef(); + if (task) + InputDispatcher::CreateForKeyUp(std::move(task), 1); return true; } @@ -411,9 +450,8 @@ return false; } - if (dispatcher) - dispatcher->AddRef(); - + if (task) + InputDispatcher::CreateForKeyUp(std::move(task), input.size() / 2); return true; } @@ -457,18 +495,11 @@ static_cast<LONG>(std::max(1.0, std::ceil(screen_y * (65535.0 / max_y)))); input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE; - scoped_refptr<InputDispatcher> dispatcher; - if (task) { - dispatcher = InputDispatcher::CreateForMouseMove({screen_x, screen_y}, - std::move(task)); - } - if (!::SendInput(1, &input, sizeof(input))) return false; - if (dispatcher) - dispatcher->AddRef(); - + if (task) + InputDispatcher::CreateForMouseMove(std::move(task), {screen_x, screen_y}); return true; } @@ -504,10 +535,6 @@ return false; } - scoped_refptr<InputDispatcher> dispatcher; - if (task) - dispatcher = InputDispatcher::CreateForMessage(last_event, std::move(task)); - std::vector<INPUT> input; if (button_state & DOWN) { AppendAcceleratorInputs(accelerator_state & kControl, @@ -531,9 +558,8 @@ return false; } - if (dispatcher) - dispatcher->AddRef(); - + if (task) + InputDispatcher::CreateForMessage(std::move(task), last_event); return true; }
diff --git a/ui/chromeos/BUILD.gn b/ui/chromeos/BUILD.gn index 695c81d..d1075fc 100644 --- a/ui/chromeos/BUILD.gn +++ b/ui/chromeos/BUILD.gn
@@ -29,7 +29,8 @@ deps = [ "//base", "//base/third_party/dynamic_annotations", - "//chromeos:chromeos", + "//chromeos", + "//chromeos/dbus", "//chromeos/dbus:power_manager_proto", "//components/device_event_log", "//components/onc",
diff --git a/ui/gfx/color_space.cc b/ui/gfx/color_space.cc index 7984428..f27c9c1 100644 --- a/ui/gfx/color_space.cc +++ b/ui/gfx/color_space.cc
@@ -311,22 +311,22 @@ PRINT_ENUM_CASE(PrimaryID, APPLE_GENERIC_RGB) PRINT_ENUM_CASE(PrimaryID, WIDE_GAMUT_COLOR_SPIN) case PrimaryID::CUSTOM: - // |custom_primary_matrix_| is in column-major order. - const float sum_X = custom_primary_matrix_[0] + + // |custom_primary_matrix_| is in row-major order. + const float sum_R = custom_primary_matrix_[0] + custom_primary_matrix_[3] + custom_primary_matrix_[6]; - const float sum_Y = custom_primary_matrix_[1] + + const float sum_G = custom_primary_matrix_[1] + custom_primary_matrix_[4] + custom_primary_matrix_[7]; - const float sum_Z = custom_primary_matrix_[2] + + const float sum_B = custom_primary_matrix_[2] + custom_primary_matrix_[5] + custom_primary_matrix_[8]; - if (IsAlmostZero(sum_X) || IsAlmostZero(sum_Y) || IsAlmostZero(sum_Z)) + if (IsAlmostZero(sum_R) || IsAlmostZero(sum_G) || IsAlmostZero(sum_B)) break; - ss << "{primaries_d50_referred: [[" << (custom_primary_matrix_[0] / sum_X) - << ", " << (custom_primary_matrix_[3] / sum_X) << "], " - << " [" << (custom_primary_matrix_[1] / sum_Y) << ", " - << (custom_primary_matrix_[4] / sum_Y) << "], " - << " [" << (custom_primary_matrix_[2] / sum_Z) << ", " - << (custom_primary_matrix_[5] / sum_Z) << "]]"; + ss << "{primaries_d50_referred: [[" << (custom_primary_matrix_[0] / sum_R) + << ", " << (custom_primary_matrix_[3] / sum_R) << "], " + << " [" << (custom_primary_matrix_[1] / sum_G) << ", " + << (custom_primary_matrix_[4] / sum_G) << "], " + << " [" << (custom_primary_matrix_[2] / sum_B) << ", " + << (custom_primary_matrix_[5] / sum_B) << "]]"; break; } ss << ", transfer:"; @@ -482,44 +482,36 @@ return SkColorSpace::MakeSRGBLinear(); } - // Prefer to used the named gamma and gamut, if possible. - bool has_named_gamma = true; - SkColorSpace::RenderTargetGamma named_gamma = - SkColorSpace::kSRGB_RenderTargetGamma; - SkColorSpaceTransferFn custom_gamma; + skcms_TransferFunction transfer_fn = SkNamedTransferFn::kSRGB; switch (transfer_) { case TransferID::IEC61966_2_1: break; case TransferID::LINEAR: case TransferID::LINEAR_HDR: - named_gamma = SkColorSpace::kLinear_RenderTargetGamma; + transfer_fn = SkNamedTransferFn::kLinear; break; default: - has_named_gamma = false; - if (!GetTransferFunction(&custom_gamma)) { + if (!GetTransferFunction((SkColorSpaceTransferFn*)&transfer_fn)) { DLOG(ERROR) << "Failed to transfer function for SkColorSpace"; return nullptr; } break; } - bool has_named_gamut = true; - SkColorSpace::Gamut named_gamut = SkColorSpace::kSRGB_Gamut; - SkMatrix44 custom_gamut; + skcms_Matrix3x3 gamut = SkNamedGamut::kSRGB; switch (primaries_) { case PrimaryID::BT709: break; case PrimaryID::ADOBE_RGB: - named_gamut = SkColorSpace::kAdobeRGB_Gamut; + gamut = SkNamedGamut::kAdobeRGB; break; case PrimaryID::SMPTEST432_1: - named_gamut = SkColorSpace::kDCIP3_D65_Gamut; + gamut = SkNamedGamut::kDCIP3; break; case PrimaryID::BT2020: - named_gamut = SkColorSpace::kRec2020_Gamut; + gamut = SkNamedGamut::kRec2020; break; default: - has_named_gamut = false; - GetPrimaryMatrix(&custom_gamut); + GetPrimaryMatrix(&gamut); break; } @@ -532,18 +524,8 @@ if (found != g_sk_color_space_cache.Get().end()) return found->second; - sk_sp<SkColorSpace> sk_color_space; - if (has_named_gamma) { - if (has_named_gamut) - sk_color_space = SkColorSpace::MakeRGB(named_gamma, named_gamut); - else - sk_color_space = SkColorSpace::MakeRGB(named_gamma, custom_gamut); - } else { - if (has_named_gamut) - sk_color_space = SkColorSpace::MakeRGB(custom_gamma, named_gamut); - else - sk_color_space = SkColorSpace::MakeRGB(custom_gamma, custom_gamut); - } + sk_sp<SkColorSpace> sk_color_space = + SkColorSpace::MakeRGB(transfer_fn, gamut); if (!sk_color_space) DLOG(ERROR) << "SkColorSpace::MakeRGB failed."; @@ -551,15 +533,15 @@ return sk_color_space; } -void ColorSpace::GetPrimaryMatrix(SkMatrix44* to_XYZD50) const { +void ColorSpace::GetPrimaryMatrix(skcms_Matrix3x3* to_XYZD50) const { SkColorSpacePrimaries primaries = {0}; switch (primaries_) { case ColorSpace::PrimaryID::CUSTOM: - to_XYZD50->set3x3RowMajorf(custom_primary_matrix_); + memcpy(to_XYZD50, custom_primary_matrix_, 9 * sizeof(float)); return; case ColorSpace::PrimaryID::INVALID: - to_XYZD50->setIdentity(); + *to_XYZD50 = SkNamedGamut::kXYZ; // Identity return; case ColorSpace::PrimaryID::BT709: @@ -713,6 +695,12 @@ primaries.toXYZD50(to_XYZD50); } +void ColorSpace::GetPrimaryMatrix(SkMatrix44* to_XYZD50) const { + skcms_Matrix3x3 toXYZ_3x3; + GetPrimaryMatrix(&toXYZ_3x3); + to_XYZD50->set3x3RowMajorf(&toXYZ_3x3.vals[0][0]); +} + bool ColorSpace::GetTransferFunction(SkColorSpaceTransferFn* fn) const { // Default to F(x) = pow(x, 1) fn->fA = 1;
diff --git a/ui/gfx/color_space.h b/ui/gfx/color_space.h index f238b53..5609b13 100644 --- a/ui/gfx/color_space.h +++ b/ui/gfx/color_space.h
@@ -240,6 +240,7 @@ // Returns true if a close match is found. bool ToSkYUVColorSpace(SkYUVColorSpace* out) const; + void GetPrimaryMatrix(skcms_Matrix3x3* to_XYZD50) const; void GetPrimaryMatrix(SkMatrix44* to_XYZD50) const; bool GetTransferFunction(SkColorSpaceTransferFn* fn) const; bool GetInverseTransferFunction(SkColorSpaceTransferFn* fn) const;
diff --git a/ui/gfx/color_space_unittest.cc b/ui/gfx/color_space_unittest.cc index 86896d0..6b27741 100644 --- a/ui/gfx/color_space_unittest.cc +++ b/ui/gfx/color_space_unittest.cc
@@ -101,10 +101,18 @@ TEST(ColorSpace, ConversionToAndFromSkColorSpace) { const size_t kNumTests = 5; - SkMatrix44 primary_matrix; - primary_matrix.set3x3(0.205276f, 0.149185f, 0.609741f, 0.625671f, 0.063217f, - 0.311111f, 0.060867f, 0.744553f, 0.019470f); - SkColorSpaceTransferFn transfer_fn = {2.1f, 1.f, 0.f, 0.f, 0.f, 0.f, 0.f}; + skcms_Matrix3x3 primary_matrix = {{ + {0.205276f, 0.625671f, 0.060867f}, + {0.149185f, 0.063217f, 0.744553f}, + {0.609741f, 0.311111f, 0.019470f}, + }}; + skcms_TransferFunction transfer_fn = {2.1f, 1.f, 0.f, 0.f, 0.f, 0.f, 0.f}; + + SkColorSpaceTransferFn sk_transfer_fn; + memcpy(&sk_transfer_fn, &transfer_fn, sizeof(sk_transfer_fn)); + SkMatrix44 primary_matrix_4x4; + primary_matrix_4x4.set3x3RowMajorf(&primary_matrix.vals[0][0]); + ColorSpace color_spaces[kNumTests] = { ColorSpace(ColorSpace::PrimaryID::BT709, ColorSpace::TransferID::IEC61966_2_1), @@ -114,16 +122,13 @@ ColorSpace::TransferID::LINEAR), ColorSpace(ColorSpace::PrimaryID::BT2020, ColorSpace::TransferID::IEC61966_2_1), - ColorSpace::CreateCustom(primary_matrix, transfer_fn), + ColorSpace::CreateCustom(primary_matrix_4x4, sk_transfer_fn), }; sk_sp<SkColorSpace> sk_color_spaces[kNumTests] = { SkColorSpace::MakeSRGB(), - SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma, - SkColorSpace::kAdobeRGB_Gamut), - SkColorSpace::MakeRGB(SkColorSpace::kLinear_RenderTargetGamma, - SkColorSpace::kDCIP3_D65_Gamut), - SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma, - SkColorSpace::kRec2020_Gamut), + SkColorSpace::MakeRGB(SkNamedTransferFn::kSRGB, SkNamedGamut::kAdobeRGB), + SkColorSpace::MakeRGB(SkNamedTransferFn::kLinear, SkNamedGamut::kDCIP3), + SkColorSpace::MakeRGB(SkNamedTransferFn::kSRGB, SkNamedGamut::kRec2020), SkColorSpace::MakeRGB(transfer_fn, primary_matrix), };
diff --git a/ui/gl/BUILD.gn b/ui/gl/BUILD.gn index a6e56275..02c380f 100644 --- a/ui/gl/BUILD.gn +++ b/ui/gl/BUILD.gn
@@ -26,8 +26,8 @@ import("//build/config/android/rules.gni") } -buildflag_header("gl_features") { - header = "gl_features.h" +buildflag_header("buildflags") { + header = "buildflags.h" use_egl_on_mac = use_egl && is_mac flags = [ "ENABLE_SWIFTSHADER=$enable_swiftshader", @@ -151,7 +151,7 @@ public_configs = [ "//third_party/khronos:khronos_headers" ] deps = [ - ":gl_features", + ":buildflags", "//base/third_party/dynamic_annotations", # ANGLE includes are used cross-platform.
diff --git a/ui/gl/gl_image_io_surface.mm b/ui/gl/gl_image_io_surface.mm index 5c846561..ae340a0a 100644 --- a/ui/gl/gl_image_io_surface.mm +++ b/ui/gl/gl_image_io_surface.mm
@@ -17,10 +17,10 @@ #include "ui/gfx/buffer_format_util.h" #include "ui/gfx/mac/display_icc_profiles.h" #include "ui/gfx/mac/io_surface.h" +#include "ui/gl/buildflags.h" #include "ui/gl/gl_bindings.h" #include "ui/gl/gl_context.h" #include "ui/gl/gl_enums.h" -#include "ui/gl/gl_features.h" #include "ui/gl/gl_version_info.h" #include "ui/gl/scoped_binders.h" #include "ui/gl/yuv_to_rgb_converter.h"
diff --git a/ui/gl/gl_implementation.cc b/ui/gl/gl_implementation.cc index 73d3eac..9234bb6 100644 --- a/ui/gl/gl_implementation.cc +++ b/ui/gl/gl_implementation.cc
@@ -18,8 +18,8 @@ #include "base/strings/string_split.h" #include "base/strings/string_util.h" #include "build/build_config.h" +#include "ui/gl/buildflags.h" #include "ui/gl/gl_bindings.h" -#include "ui/gl/gl_features.h" #include "ui/gl/gl_gl_api_implementation.h" #include "ui/gl/gl_version_info.h"
diff --git a/ui/gl/init/BUILD.gn b/ui/gl/init/BUILD.gn index b6691388..5f5149e 100644 --- a/ui/gl/init/BUILD.gn +++ b/ui/gl/init/BUILD.gn
@@ -27,7 +27,7 @@ deps = [ "//base", "//ui/gfx", - "//ui/gl:gl_features", + "//ui/gl:buildflags", ] public_deps = [
diff --git a/ui/gl/init/gl_factory_mac.cc b/ui/gl/init/gl_factory_mac.cc index b764ef94..d691934 100644 --- a/ui/gl/init/gl_factory_mac.cc +++ b/ui/gl/init/gl_factory_mac.cc
@@ -7,10 +7,10 @@ #include "base/logging.h" #include "base/macros.h" #include "base/trace_event/trace_event.h" +#include "ui/gl/buildflags.h" #include "ui/gl/gl_bindings.h" #include "ui/gl/gl_context_cgl.h" #include "ui/gl/gl_context_stub.h" -#include "ui/gl/gl_features.h" #include "ui/gl/gl_implementation.h" #include "ui/gl/gl_share_group.h" #include "ui/gl/gl_surface.h"
diff --git a/ui/gl/init/gl_initializer_android.cc b/ui/gl/init/gl_initializer_android.cc index 22660c92..8338906 100644 --- a/ui/gl/init/gl_initializer_android.cc +++ b/ui/gl/init/gl_initializer_android.cc
@@ -9,9 +9,9 @@ #include "base/files/file_path.h" #include "base/logging.h" #include "base/native_library.h" +#include "ui/gl/buildflags.h" #include "ui/gl/gl_bindings.h" #include "ui/gl/gl_egl_api_implementation.h" -#include "ui/gl/gl_features.h" #include "ui/gl/gl_gl_api_implementation.h" #include "ui/gl/gl_surface_egl.h"
diff --git a/ui/gl/init/gl_initializer_mac.cc b/ui/gl/init/gl_initializer_mac.cc index a89aad20..03ad2d50 100644 --- a/ui/gl/init/gl_initializer_mac.cc +++ b/ui/gl/init/gl_initializer_mac.cc
@@ -16,9 +16,9 @@ #include "base/native_library.h" #include "base/path_service.h" #include "base/threading/thread_restrictions.h" +#include "ui/gl/buildflags.h" #include "ui/gl/gl_bindings.h" #include "ui/gl/gl_context.h" -#include "ui/gl/gl_features.h" #include "ui/gl/gl_gl_api_implementation.h" #include "ui/gl/gl_implementation.h" #include "ui/gl/gl_surface.h"
diff --git a/ui/gl/init/gl_initializer_win.cc b/ui/gl/init/gl_initializer_win.cc index 54cc8c3..37489a1 100644 --- a/ui/gl/init/gl_initializer_win.cc +++ b/ui/gl/init/gl_initializer_win.cc
@@ -17,9 +17,9 @@ #include "base/threading/thread_restrictions.h" #include "base/trace_event/trace_event.h" #include "base/win/windows_version.h" +#include "ui/gl/buildflags.h" #include "ui/gl/gl_bindings.h" #include "ui/gl/gl_egl_api_implementation.h" -#include "ui/gl/gl_features.h" #include "ui/gl/gl_gl_api_implementation.h" #include "ui/gl/gl_surface_egl.h" #include "ui/gl/gl_surface_wgl.h"
diff --git a/ui/gl/init/gl_initializer_x11.cc b/ui/gl/init/gl_initializer_x11.cc index 0a97a38..e3c481b 100644 --- a/ui/gl/init/gl_initializer_x11.cc +++ b/ui/gl/init/gl_initializer_x11.cc
@@ -12,9 +12,9 @@ #include "ui/gfx/switches.h" #include "ui/gfx/x/x11.h" #include "ui/gfx/x/x11_types.h" +#include "ui/gl/buildflags.h" #include "ui/gl/gl_bindings.h" #include "ui/gl/gl_egl_api_implementation.h" -#include "ui/gl/gl_features.h" #include "ui/gl/gl_gl_api_implementation.h" #include "ui/gl/gl_glx_api_implementation.h" #include "ui/gl/gl_surface_egl.h"
diff --git a/ui/ozone/common/BUILD.gn b/ui/ozone/common/BUILD.gn index b109d28..562057e 100644 --- a/ui/ozone/common/BUILD.gn +++ b/ui/ozone/common/BUILD.gn
@@ -31,7 +31,7 @@ deps = [ "//ui/gfx/ipc/color", "//ui/gl", - "//ui/gl:gl_features", + "//ui/gl:buildflags", ] data_deps = [
diff --git a/ui/ozone/common/egl_util.cc b/ui/ozone/common/egl_util.cc index cc0f48a..1e1679c 100644 --- a/ui/ozone/common/egl_util.cc +++ b/ui/ozone/common/egl_util.cc
@@ -7,9 +7,9 @@ #include "base/files/file_path.h" #include "base/path_service.h" #include "build/build_config.h" +#include "ui/gl/buildflags.h" #include "ui/gl/egl_util.h" #include "ui/gl/gl_bindings.h" -#include "ui/gl/gl_features.h" #include "ui/gl/gl_implementation.h" namespace ui {
diff --git a/ui/views/BUILD.gn b/ui/views/BUILD.gn index 7757bdf..5579441 100644 --- a/ui/views/BUILD.gn +++ b/ui/views/BUILD.gn
@@ -44,8 +44,8 @@ ] } -buildflag_header("features") { - header = "features.h" +buildflag_header("buildflags") { + header = "buildflags.h" flags = [ "ENABLE_NATIVE_WINDOW_NAV_BUTTONS=$enable_native_window_nav_buttons" ] } @@ -494,7 +494,7 @@ defines = [ "VIEWS_IMPLEMENTATION" ] deps = [ - ":features", + ":buildflags", "//base:i18n", "//base/third_party/dynamic_annotations", "//cc/paint",
diff --git a/ui/views/controls/button/checkbox.cc b/ui/views/controls/button/checkbox.cc index bba2fe7..d02b947 100644 --- a/ui/views/controls/button/checkbox.cc +++ b/ui/views/controls/button/checkbox.cc
@@ -166,13 +166,10 @@ } SkColor Checkbox::GetIconImageColor(int icon_state) const { - const SkColor active_color = + const SkColor active_color = GetNativeTheme()->GetSystemColor( (icon_state & IconState::CHECKED) - ? GetNativeTheme()->GetSystemColor( - ui::NativeTheme::kColorId_ProminentButtonColor) - // When unchecked, the icon color matches push button text color. - : style::GetColor(*this, style::CONTEXT_BUTTON_MD, - style::STYLE_PRIMARY); + ? ui::NativeTheme::kColorId_ProminentButtonColor + : ui::NativeTheme::kColorId_ButtonEnabledColor); return (icon_state & IconState::ENABLED) ? active_color : color_utils::BlendTowardMaxContrast(active_color,
diff --git a/ui/views/controls/button/md_text_button.cc b/ui/views/controls/button/md_text_button.cc index f9bf348..7f42ce4d 100644 --- a/ui/views/controls/button/md_text_button.cc +++ b/ui/views/controls/button/md_text_button.cc
@@ -249,9 +249,10 @@ bg_color = theme->GetSystemColor( HasFocus() ? ui::NativeTheme::kColorId_ProminentButtonFocusedColor : ui::NativeTheme::kColorId_ProminentButtonColor); - if (is_disabled) + if (is_disabled) { bg_color = theme->GetSystemColor( ui::NativeTheme::kColorId_ProminentButtonDisabledColor); + } } if (state() == STATE_PRESSED) {
diff --git a/ui/views/linux_ui/linux_ui.h b/ui/views/linux_ui/linux_ui.h index bebe2a6..6743cb66 100644 --- a/ui/views/linux_ui/linux_ui.h +++ b/ui/views/linux_ui/linux_ui.h
@@ -14,8 +14,8 @@ #include "ui/base/ime/linux/text_edit_key_bindings_delegate_auralinux.h" #include "ui/gfx/skia_font_delegate.h" #include "ui/shell_dialogs/shell_dialog_linux.h" +#include "ui/views/buildflags.h" #include "ui/views/controls/button/button.h" -#include "ui/views/features.h" #include "ui/views/linux_ui/status_icon_linux.h" #include "ui/views/views_export.h"
diff --git a/ui/views/window/frame_caption_button.cc b/ui/views/window/frame_caption_button.cc index a50bdc5..d15c945 100644 --- a/ui/views/window/frame_caption_button.cc +++ b/ui/views/window/frame_caption_button.cc
@@ -76,8 +76,8 @@ return color_utils::GetThemedAssetColor(background_color); DCHECK_EQ(color_mode, ColorMode::kDefault); - return color_utils::IsDark(background_color) ? gfx::kGoogleGrey200 - : gfx::kGoogleGrey700; + return color_utils::PickContrastingColor( + gfx::kGoogleGrey200, gfx::kGoogleGrey700, background_color); } // static @@ -279,10 +279,17 @@ } void FrameCaptionButton::UpdateInkDropBaseColor() { + using color_utils::GetColorWithMaxContrast; + // A typical implementation would simply do + // GetColorWithMaxContrast(background_color_). However, this could look odd + // if we use a light button glyph and dark ink drop or vice versa. So + // instead, use the lightest/darkest color in the same direction as the button + // glyph color. + // TODO(pkasting): It would likely be better to make the button glyph always + // be an alpha-blended version of GetColorWithMaxContrast(background_color_). + const SkColor button_color = GetButtonColor(color_mode_, background_color_); set_ink_drop_base_color( - color_utils::IsDark(GetButtonColor(color_mode_, background_color_)) - ? SK_ColorBLACK - : SK_ColorWHITE); + GetColorWithMaxContrast(GetColorWithMaxContrast(button_color))); } } // namespace views
diff --git a/ui/webui/resources/cr_elements/paper_button_style_css.html b/ui/webui/resources/cr_elements/paper_button_style_css.html index 715b0ed2..019c33a 100644 --- a/ui/webui/resources/cr_elements/paper_button_style_css.html +++ b/ui/webui/resources/cr_elements/paper_button_style_css.html
@@ -7,18 +7,76 @@ <template> <style> paper-button { - /* Gray color to be used when disabled, either as a background or as a - text color depending on the type of button. */ - --disabled-color: rgb(241, 243, 244); - /* Blue-ish color used either as a background or as a text color, - depending on the type of button. */ - --paper-button-ink-color: var(--google-blue-600); - --paper-ripple-opacity: .1; - --text-or-bg-color: var(--google-blue-600); + --active-shadow-rgb: var(--google-grey-800-rgb); + --active-shadow-action-rgb: var(--google-blue-500-rgb); - border: 1px solid rgb(218, 220, 224); + --border-color: var(--google-grey-refresh-300); + + --disabled-color: var(--google-grey-refresh-100); + --disabled-text-color: var(--google-grey-600); + + --flat-bg-action: var(--google-blue-600); + --flat-disabled-bg: white; + --flat-disabled-border-color: var(--google-grey-refresh-100); + --flat-focus-shadow-color: rgba(var(--google-blue-600-rgb), .4); + --flat-ink-color-action: white; + --flat-ripple-opacity-action: .32; + --flat-text-color-action: white; + + --hover-bg-action: rgba(var(--google-blue-600-rgb), .9); + --hover-bg-color: rgba(var(--google-blue-500-rgb), .04) + --hover-border-color: var(--google-blue-100); + --hover-shadow-action-rgb: var(--google-blue-500-rgb); + + /* Blue-ish color used either as a background or as a text color, + * depending on the type of button. */ + --paper-button-ink-color: var(--google-blue-600); + + --ripple-opacity: .1; + + --text-color: var(--google-blue-600); + } + + [dark] paper-button, + :host-context([dark]) paper-button { + /* Only in dark. */ + --active-bg: black linear-gradient(rgba(255, 255, 255, .06), + rgba(255, 255, 255, .06)); + --active-shadow-rgb: var(--google-blue-500-rgb); + /* --active-shadow-action-rgb is same as light mode (GB 500). */ + + --border-color: var(--google-grey-refresh-700); + + --disabled-color: var(--google-grey-800); + /* --disabled-text-color is same as light mode (GG 600). */ + + --flat-bg-action: var(--google-blue-300); + /* TODO(dbeam): get --flat-disabled-bg from Namrata. */ + --flat-disabled-bg: transparent; + --flat-disabled-border-color: var(--google-grey-800); + --flat-focus-shadow-color: rgba(var(--google-blue-300-rgb), .5); + --flat-ink-color-action: black; + --flat-ripple-opacity-action: .16; + --flat-text-color-action: var(--google-grey-900); + + --hover-bg-action: var(--flat-bg-action) + linear-gradient(rgba(0, 0, 0, .08), rgba(0, 0, 0, .08)); + --hover-bg-color: rgba(var(--google-blue-300-rgb), .08); + /* No change in secondary background or border color on hover + * (--hover-border-color, --hover-shadow-action-rgb) in dark mode. */ + + --paper-button-ink-color: var(--google-blue-300); + + --ripple-opacity: .16; + + --text-color: var(--google-blue-300); + } + + paper-button { + --paper-ripple-opacity: var(--ripple-opacity); + border: 1px solid var(--border-color); border-radius: 4px; - color: var(--text-or-bg-color); + color: var(--text-color); flex-shrink: 0; font-weight: 500; height: 32px; @@ -29,59 +87,61 @@ } /* Override paper-button's default transition. |animated| is automatically - added to all paper-button instances, unfortunately. */ + * added to all paper-button instances, unfortunately. */ paper-button[animated] { transition: none; } paper-button:not([raised]).keyboard-focus, paper-button:not([raised]).action-button.keyboard-focus { - box-shadow: 0 0 0 2px rgba(var(--google-blue-600-rgb), .4); + box-shadow: 0 0 0 2px var(--flat-focus-shadow-color); /* Override default paper-button's internal font-weight style. */ font-weight: 500; } paper-button:not(.action-button):hover { - background-color: rgba(var(--google-blue-500-rgb), .04); - border-color: rgb(210, 227, 252); + background-color: var(--hover-bg-color); + border-color: var(--hover-border-color); } paper-button:not(.action-button):active { + background: var(--active-bg); box-shadow: - 0 1px 2px 0 rgba(var(--google-grey-800-rgb), .3), - 0 3px 6px 2px rgba(var(--google-grey-800-rgb), .15); + 0 1px 2px 0 rgba(var(--active-shadow-rgb), .3), + 0 2px 6px 2px rgba(var(--active-shadow-rgb), .15); } - paper-button.action-button:hover { - background-color: rgba(var(--google-blue-600-rgb), .9); + paper-button:not([raised]).action-button:hover { + background: var(--hover-bg-action); box-shadow: - 0 1px 2px 0 rgba(var(--google-blue-500-rgb), .3), - 0 1px 3px 1px rgba(var(--google-blue-500-rgb), .15); + 0 1px 2px 0 rgba(var(--hover-shadow-action-rgb), .3), + 0 1px 3px 1px rgba(var(--hover-shadow-action-rgb), .15); } paper-button.action-button:active { box-shadow: - 0 1px 2px 0 rgba(var(--google-blue-500-rgb), .3), - 0 3px 6px 2px rgba(var(--google-blue-500-rgb), .15); + 0 1px 2px 0 rgba(var(--active-shadow-action-rgb), .3), + 0 2px 6px 2px rgba(var(--active-shadow-action-rgb), .15); } paper-button:not([raised]).action-button { - --paper-ripple-opacity: .32; - --paper-button-ink-color: white; - background-color: var(--text-or-bg-color); + --paper-button-ink-color: var(--flat-ink-color-action); + --paper-ripple-opacity: var(--flat-ripple-opacity-action); + background-color: var(--flat-bg-action); border: none; - color: white; + color: var(--flat-text-color-action); } paper-button:not([raised])[disabled] { - background-color: white; - border-color: var(--disabled-color); - color: rgb(128, 134, 139); + background-color: var(--flat-disabled-bg); + border-color: var(--flat-disabled-border-color); + color: var(--disabled-text-color); } paper-button.action-button[disabled] { background-color: var(--disabled-color); border-color: transparent; + color: var(--disabled-text-color); } /* cancel-button is meant to be used within a cr-dialog */
diff --git a/ui/webui/resources/cr_elements/shared_vars_css.html b/ui/webui/resources/cr_elements/shared_vars_css.html index daa8c1b..021b74e 100644 --- a/ui/webui/resources/cr_elements/shared_vars_css.html +++ b/ui/webui/resources/cr_elements/shared_vars_css.html
@@ -10,15 +10,15 @@ --google-blue-600-rgb: 26, 115, 232; --google-blue-600: rgb(var(--google-blue-600-rgb)); --google-blue-900-rgb: 13, 71, 161; - /* -refresh differentiates from google-green-700 in polymer's color.html. */ - --google-green-refresh-700: #188038; - /* -refresh differentiates from google-grey-100 in polymer's color.html. */ - --google-grey-refresh-100: #F1F3F4; --google-grey-200: #E8EAED; --google-grey-400: #BDC1C6; --google-grey-600-rgb: 128, 134, 139; --google-grey-600: rgb(var(--google-grey-600-rgb)); - /* -refresh differentiates from google-grey-700 in polymer's color.html. */ + + /* -refresh differentiate from polymer's color.html. */ + --google-green-refresh-700: #188038; + --google-grey-refresh-100: #F1F3F4; + --google-grey-refresh-300: #DADCE0; --google-grey-refresh-700: #5F6368; --google-grey-800-rgb: 60, 64, 67; --google-grey-800: rgb(var(--google-grey-800-rgb));
diff --git a/url/BUILD.gn b/url/BUILD.gn index 9e1f5b46..e75c0f2 100644 --- a/url/BUILD.gn +++ b/url/BUILD.gn
@@ -11,8 +11,8 @@ import("//build/config/android/rules.gni") } -buildflag_header("url_features") { - header = "url_features.h" +buildflag_header("buildflags") { + header = "buildflags.h" flags = [ "USE_PLATFORM_ICU_ALTERNATIVES=$use_platform_icu_alternatives" ] } @@ -73,7 +73,7 @@ if (is_android) { sources += [ "url_idna_icu_alternatives_android.cc" ] deps += [ - ":url_features", + ":buildflags", ":url_java", ":url_jni_headers", "//base",